fopen(./company/0/js_cache/0/JsHttpRequest.js): failed to open stream: Permission denied in file: /var/www/rtech.solutionerp.co/public/includes/main.inc at line 113
/var/www/rtech.solutionerp.co/public/includes/main.inc:113: fopen('./company/0/js_cache/0/JsHttpRequest.js','w')
/var/www/rtech.solutionerp.co/public/includes/main.inc:88: force_open('./company/0/js_cache/0/JsHttpRequest.js')
/var/www/rtech.solutionerp.co/public/includes/page/header.inc:63: cache_js_file('./company/0/js_cache/0/JsHttpRequest.js','/** * JsHttpRequest: JavaScript "AJAX" data loader * * @license LGPL * @author Dmitry Koterov, http://en.dklab.ru/lib/JsHttpRequest/ * @version 5.x */ // {{{ function JsHttpRequest() { // Standard properties. var t = this; t.onreadystatechange = null; t.readyState = 0; t.responseText = null; t.responseXML = null; t.status = 200; t.statusText = "OK"; // JavaScript response array/hash t.responseJS = null; // Additional properties. t.caching = false; // need to use caching? t.loader = null; // loader to use ('form', 'script', 'xml'; null - autodetect) t.session_name = "PHPSESSID"; // set to SID cookie or GET parameter name // Internals. t._ldObj = null; // used loader object t._reqHeaders = []; // collected request headers t._openArgs = null; // parameters from open() t._errors = { inv_form_el: 'Invalid FORM element detected: name=%, tag=%', must_be_single_el: 'If used,
must be a single HTML element in the list.', js_invalid: 'JavaScript code generated by backend is invalid!\n%', url_too_long: 'Cannot use so long query with GET request (URL is larger than % bytes)', unk_loader: 'Unknown loader: %', no_loaders: 'No loaders registered at all, please check JsHttpRequest.LOADERS array', no_loader_matched: 'Cannot find a loader which may process the request. Notices are:\n%' } /** * Aborts the request. Behaviour of this function for onreadystatechange() * is identical to IE (most universal and common case). E.g., readyState -> 4 * on abort() after send(). */ t.abort = function () { with (this) { if (_ldObj && _ldObj.abort) _ldObj.abort(); _cleanup(); if (readyState == 0) { // start->abort: no change of readyState (IE behaviour) return; } if (readyState == 1 && !_ldObj) { // open->abort: no onreadystatechange call, but change readyState to 0 (IE). // send->abort: change state to 4 (_ldObj is not null when send() is called) readyState = 0; return; } _changeReadyState(4, true); // 4 in IE & FF on abort() call; Opera does not change to 4. } } /** * Prepares the object for data loading. * You may also pass URLs like "GET url" or "script.GET url". */ t.open = function (method, url, asyncFlag, username, password) { with (this) { // Extract methor and loader from the URL (if present). if (url.match(/^((\w+)\.)?(GET|POST)\s+(.*)/i)) { this.loader = RegExp.$2 ? RegExp.$2 : null; method = RegExp.$3; url = RegExp.$4; } // Append SID to original URL. Use try...catch for security problems. try { if ( document.location.search.match(new RegExp('[&?]' + session_name + '=([^&?]*)')) || document.cookie.match(new RegExp('(?:;|^)\\s*' + session_name + '=([^;]*)')) ) { url += (url.indexOf('?') >= 0 ? '&' : '?') + session_name + "=" + this.escape(RegExp.$1); } } catch (e) { } // Store open arguments to hash. _openArgs = { method: (method || '').toUpperCase(), url: url, asyncFlag: asyncFlag, username: username != null ? username : '', password: password != null ? password : '' } _ldObj = null; _changeReadyState(1, true); // compatibility with XMLHttpRequest return true; } } /** * Sends a request to a server. */ t.send = function (content) { if (!this.readyState) { // send without open or after abort: no action (IE behaviour). return; } this._changeReadyState(1, true); // compatibility with XMLHttpRequest this._ldObj = null; // Prepare to build QUERY_STRING from query hash. var queryText = []; var queryElem = []; if (!this._hash2query(content, null, queryText, queryElem)) return; // Solve the query hashcode & return on cache hit. var hash = null; if (this.caching && !queryElem.length) { hash = this._openArgs.username + ':' + this._openArgs.password + '@' + this._openArgs.url + '|' + queryText + "#" + this._openArgs.method; var cache = JsHttpRequest.CACHE[hash]; if (cache) { this._dataReady(cache[0], cache[1]); return false; } } // Try all the loaders. var loader = (this.loader || '').toLowerCase(); if (loader && !JsHttpRequest.LOADERS[loader]) return this._error('unk_loader', loader); var errors = []; var lds = JsHttpRequest.LOADERS; for (var tryLoader in lds) { var ldr = lds[tryLoader].loader; if (!ldr) continue; // exclude possibly derived prototype properties from "for .. in". if (loader && tryLoader != loader) continue; // Create sending context. var ldObj = new ldr(this); JsHttpRequest.extend(ldObj, this._openArgs); JsHttpRequest.extend(ldObj, { queryText: queryText.join('&'), queryElem: queryElem, id: (new Date().getTime()) + "" + JsHttpRequest.COUNT++, hash: hash, span: null }); var error = ldObj.load(); if (!error) { // Save loading script. this._ldObj = ldObj; JsHttpRequest.PENDING[ldObj.id] = this; return true; } if (!loader) { errors[errors.length] = '- ' + tryLoader.toUpperCase() + ': ' + this._l(error); } else { return this._error(error); } } // If no loader matched, generate error message. return tryLoader ? this._error('no_loader_matched', errors.join('\n')) : this._error('no_loaders'); } /** * Returns all response headers (if supported). */ t.getAllResponseHeaders = function () { with (this) { return _ldObj && _ldObj.getAllResponseHeaders ? _ldObj.getAllResponseHeaders() : []; } } /** * Returns one response header (if supported). */ t.getResponseHeader = function (label) { with (this) { return _ldObj && _ldObj.getResponseHeader ? _ldObj.getResponseHeader(label) : null; } } /** * Adds a request header to a future query. */ t.setRequestHeader = function (label, value) { with (this) { _reqHeaders[_reqHeaders.length] = [label, value]; } } // // Internal functions. // /** * Do all the work when a data is ready. */ t._dataReady = function (text, js) { with (this) { if (caching && _ldObj) JsHttpRequest.CACHE[_ldObj.hash] = [text, js]; responseText = responseXML = text; responseJS = js; if (js !== null) { status = 200; statusText = "OK"; } else { // The special value "null" from a backend means Fatal error. // User cannot assign null to $_RESULT manually, it is // translated to false to avoid 500 error collisions. status = 500; statusText = "Internal Server Error"; } _changeReadyState(2); _changeReadyState(3); _changeReadyState(4); _cleanup(); } } /** * Analog of sprintf(), but translates the first parameter by _errors. */ t._l = function (args) { var i = 0, p = 0, msg = this._errors[args[0]]; // Cannot use replace() with a callback, because it is incompatible with IE5. while ((p = msg.indexOf('%', p)) >= 0) { var a = args[++i] + ""; msg = msg.substring(0, p) + a + msg.substring(p + 1, msg.length); p += 1 + a.length; } return msg; } /** * Called on error. */ t._error = function (msg) { msg = this._l(typeof (msg) == 'string' ? arguments : msg) msg = "JsHttpRequest: " + msg; if (!window.Error) { // Very old browser... throw msg; } else if ((new Error(1, 'test')).description == "test") { // We MUST (!!!) pass 2 parameters to the Error() constructor for IE5. throw new Error(1, msg); } else { // Mozilla does not support two-parameter call style. throw new Error(msg); } } /** * Convert hash to QUERY_STRING. * If next value is scalar or hash, push it to queryText. * If next value is form element, push [name, element] to queryElem. */ t._hash2query = function (content, prefix, queryText, queryElem) { if (prefix == null) prefix = ""; if (('' + typeof (content)).toLowerCase() == 'object') { var formAdded = false; if (content && content.parentNode && content.parentNode.appendChild && content.tagName && content.tagName.toUpperCase() == 'FORM') { content = {form: content}; } for (var k in content) { var v = content[k]; if (v instanceof Function) continue; var curPrefix = prefix ? prefix + '[' + this.escape(k) + ']' : this.escape(k); var isFormElement = v && v.parentNode && v.parentNode.appendChild && v.tagName; if (isFormElement) { var tn = v.tagName.toUpperCase(); if (tn == 'FORM') { // FORM itself is passed. formAdded = true; } else if (tn == 'INPUT' || tn == 'TEXTAREA' || tn == 'SELECT' || tn == 'BUTTON') { // This is a single form elemenent. } else { return this._error('inv_form_el', (v.name || ''), v.tagName); } queryElem[queryElem.length] = {name: curPrefix, e: v}; } else if (v instanceof Object) { this._hash2query(v, curPrefix, queryText, queryElem); } else { // We MUST skip NULL values, because there is no method // to pass NULL's via GET or POST request in PHP. if (v === null) continue; // Convert JS boolean true and false to corresponding PHP values. if (v === true) v = 1; if (v === false) v = ''; queryText[queryText.length] = curPrefix + "=" + this.escape('' + v); } if (formAdded && queryElem.length > 1) { return this._error('must_be_single_el'); } } } else { queryText[queryText.length] = content; } return true; } /** * Remove last used script element (clean memory). */ t._cleanup = function () { var ldObj = this._ldObj; if (!ldObj) return; // Mark this loading as aborted. JsHttpRequest.PENDING[ldObj.id] = false; var span = ldObj.span; if (!span) return; // Do NOT use iframe.contentWindow.back() - it is incompatible with Opera 9! ldObj.span = null; var closure = function () { span.parentNode.removeChild(span); } // IE5 crashes on setTimeout(function() {...}, ...) construction! Use tmp variable. JsHttpRequest.setTimeout(closure, 50); } /** * Change current readyState and call trigger method. */ t._changeReadyState = function (s, reset) { with (this) { if (reset) { status = statusText = responseJS = null; responseText = ''; } readyState = s; if (onreadystatechange) onreadystatechange(); } } /** * JS escape() does not quote '+'. */ t.escape = function (s) { return escape(s).replace(new RegExp('\\+', 'g'), '%2B'); } } // Global library variables. JsHttpRequest.COUNT = 0; // unique ID; used while loading IDs generation JsHttpRequest.MAX_URL_LEN = 2000; // maximum URL length JsHttpRequest.CACHE = {}; // cached data JsHttpRequest.PENDING = {}; // pending loadings JsHttpRequest.LOADERS = {}; // list of supported data loaders (filled at the bottom of the file) JsHttpRequest._dummy = function () { }; // avoid memory leaks /** * These functions are dirty hacks for IE 5.0 which does not increment a * reference counter for an object passed via setTimeout(). So, if this * object (closure function) is out of scope at the moment of timeout * applying, IE 5.0 crashes. */ /** * Timeout wrappers storage. Used to avoid zeroing of referece counts in IE 5.0. * Please note that you MUST write "window.setTimeout", not "setTimeout", else * IE 5.0 crashes again. Strange, very strange... */ JsHttpRequest.TIMEOUTS = {s: window.setTimeout, c: window.clearTimeout}; /** * Wrapper for IE5 buggy setTimeout. * Use this function instead of a usual setTimeout(). */ JsHttpRequest.setTimeout = function (func, dt) { // Always save inside the window object before a call (for FF)! window.JsHttpRequest_tmp = JsHttpRequest.TIMEOUTS.s; if (typeof (func) == "string") { id = window.JsHttpRequest_tmp(func, dt); } else { var id = null; var mediator = function () { func(); delete JsHttpRequest.TIMEOUTS[id]; // remove circular reference } id = window.JsHttpRequest_tmp(mediator, dt); // Store a reference to the mediator function to the global array // (reference count >= 1); use timeout ID as an array key; JsHttpRequest.TIMEOUTS[id] = mediator; } window.JsHttpRequest_tmp = null; // no delete() in IE5 for window return id; } /** * Complimental wrapper for clearTimeout. * Use this function instead of usual clearTimeout(). */ JsHttpRequest.clearTimeout = function (id) { window.JsHttpRequest_tmp = JsHttpRequest.TIMEOUTS.c; delete JsHttpRequest.TIMEOUTS[id]; // remove circular reference var r = window.JsHttpRequest_tmp(id); window.JsHttpRequest_tmp = null; // no delete() in IE5 for window return r; } /** * Global static function. * Simple interface for most popular use-cases. * You may also pass URLs like "GET url" or "script.GET url". */ JsHttpRequest.query = function (url, content, onready, nocache) { var req = new this(); req.caching = !nocache; req.onreadystatechange = function () { if (req.readyState == 4) { onready(req.responseJS, req.responseText); } } req.open(null, url, true); req.send(content); } /** * Global static function. * Called by server backend script on data load. */ JsHttpRequest.dataReady = function (d) { var th = this.PENDING[d.id]; delete this.PENDING[d.id]; if (th) { th._dataReady(d.text, d.js); } else if (th !== false) { throw "dataReady(): unknown pending id: " + d.id; } } // Adds all the properties of src to dest. JsHttpRequest.extend = function (dest, src) { for (var k in src) dest[k] = src[k]; } /** * Each loader has the following properties which must be initialized: * - method * - url * - asyncFlag (ignored) * - username * - password * - queryText (string) * - queryElem (array) * - id * - hash * - span */ // }}} // {{{ xml // Loader: XMLHttpRequest or ActiveX. // [+] GET and POST methods are supported. // [+] Most native and memory-cheap method. // [+] Backend data can be browser-cached. // [-] Cannot work in IE without ActiveX. // [-] No support for loading from different domains. // [-] No uploading support. // JsHttpRequest.LOADERS.xml = { loader: function (req) { JsHttpRequest.extend(req._errors, { xml_no: 'Cannot use XMLHttpRequest or ActiveX loader: not supported', xml_no_diffdom: 'Cannot use XMLHttpRequest to load data from different domain %', xml_no_headers: 'Cannot use XMLHttpRequest loader or ActiveX loader, POST method: headers setting is not supported, needed to work with encodings correctly', xml_no_form_upl: 'Cannot use XMLHttpRequest loader: direct form elements using and uploading are not implemented' }); this.load = function () { if (this.queryElem.length) return ['xml_no_form_upl']; // XMLHttpRequest (and MS ActiveX'es) cannot work with different domains. if (this.url.match(new RegExp('^([a-z]+://[^\\/]+)(.*)((:[0-9]*)+)', 'i'))) { // We MUST also check if protocols matched: cannot send from HTTP // to HTTPS and vice versa. if (RegExp.$1.toLowerCase() != document.location.protocol + '//' + document.location.hostname.toLowerCase()) { return ['xml_no_diffdom', RegExp.$1]; } } // Try to obtain a loader. var xr = null; if (window.XMLHttpRequest) { try { xr = new XMLHttpRequest() } catch (e) { } } else if (window.ActiveXObject) { try { xr = new ActiveXObject("Microsoft.XMLHTTP") } catch (e) { } if (!xr) try { xr = new ActiveXObject("Msxml2.XMLHTTP") } catch (e) { } } if (!xr) return ['xml_no']; // Loading method detection. We cannot POST if we cannot set "octet-stream" // header, because we need to process the encoded data in the backend manually. var canSetHeaders = window.ActiveXObject || xr.setRequestHeader; if (!this.method) this.method = canSetHeaders && this.queryText.length ? 'POST' : 'GET'; // Build & validate the full URL. if (this.method == 'GET') { if (this.queryText) this.url += (this.url.indexOf('?') >= 0 ? '&' : '?') + this.queryText; this.queryText = ''; if (this.url.length > JsHttpRequest.MAX_URL_LEN) return ['url_too_long', JsHttpRequest.MAX_URL_LEN]; } else if (this.method == 'POST' && !canSetHeaders) { return ['xml_no_headers']; } // Add ID to the url if we need to disable the cache. this.url += (this.url.indexOf('?') >= 0 ? '&' : '?') + 'JsHttpRequest=' + (req.caching ? '0' : this.id) + '-xml'; // Assign the result handler. var id = this.id; xr.onreadystatechange = function () { if (xr.readyState != 4) return; // Avoid memory leak by removing the closure. xr.onreadystatechange = JsHttpRequest._dummy; req.status = null; try { // In case of abort() call, xr.status is unavailable and generates exception. // But xr.readyState equals to 4 in this case. Stupid behaviour. :-( req.status = xr.status; req.responseText = xr.responseText; } catch (e) { } if (!req.status) return; try { // Damned Opera returned empty responseText when Status is not 200. var rtext = req.responseText || '{ js: null, text: null }'; // Prepare generator function & catch syntax errors on this stage. eval('JsHttpRequest._tmp = function(id) { var d = ' + rtext + '; d.id = id; JsHttpRequest.dataReady(d); }'); } catch (e) { // Note that FF 2.0 does not throw any error from onreadystatechange handler. return req._error('js_invalid', req.responseText) } // Call associated dataReady() outside the try-catch block // to pass exceptions in onreadystatechange in usual manner. JsHttpRequest._tmp(id); JsHttpRequest._tmp = null; }; // Open & send the request. xr.open(this.method, this.url, true, this.username, this.password); if (canSetHeaders) { // Pass pending headers. for (var i = 0; i < req._reqHeaders.length; i++) { xr.setRequestHeader(req._reqHeaders[i][0], req._reqHeaders[i][1]); } // Set non-default Content-type. We cannot use // "application/x-www-form-urlencoded" here, because // in PHP variable HTTP_RAW_POST_DATA is accessible only when // enctype is not default (e.g., "application/octet-stream" // is a good start). We parse POST data manually in backend // library code. Note that Safari sets by default "x-www-form-urlencoded" // header, but FF sets "text/xml" by default. xr.setRequestHeader('Content-Type', 'application/octet-stream'); } xr.send(this.queryText); // No SPAN is used for this loader. this.span = null; this.xr = xr; // save for later usage on abort() // Success. return null; } // Override req.getAllResponseHeaders method. this.getAllResponseHeaders = function () { return this.xr.getAllResponseHeaders(); } // Override req.getResponseHeader method. this.getResponseHeader = function (label) { return this.xr.getResponseHeader(label); } this.abort = function () { this.xr.abort(); this.xr = null; } } } // }}} // {{{ script // Loader: SCRIPT tag. // [+] Most cross-browser. // [+] Supports loading from different domains. // [-] Only GET method is supported. // [-] No uploading support. // [-] Backend data cannot be browser-cached. // JsHttpRequest.LOADERS.script = { loader: function (req) { JsHttpRequest.extend(req._errors, { script_only_get: 'Cannot use SCRIPT loader: it supports only GET method', script_no_form: 'Cannot use SCRIPT loader: direct form elements using and uploading are not implemented' }) this.load = function () { // Move GET parameters to the URL itself. if (this.queryText) this.url += (this.url.indexOf('?') >= 0 ? '&' : '?') + this.queryText; this.url += (this.url.indexOf('?') >= 0 ? '&' : '?') + 'JsHttpRequest=' + this.id + '-' + 'script'; this.queryText = ''; if (!this.method) this.method = 'GET'; if (this.method !== 'GET') return ['script_only_get']; if (this.queryElem.length) return ['script_no_form']; if (this.url.length > JsHttpRequest.MAX_URL_LEN) return ['url_too_long', JsHttpRequest.MAX_URL_LEN]; var th = this, d = document, s = null, b = d.body; if (!window.opera) { // Safari, IE, FF, Opera 7.20. this.span = s = d.createElement('SCRIPT'); var closure = function () { s.language = 'JavaScript'; if (s.setAttribute) s.setAttribute('src', th.url); else s.src = th.url; b.insertBefore(s, b.lastChild); } } else { // Oh shit! Damned stupid Opera 7.23 does not allow to create SCRIPT // element over createElement (in HEAD or BODY section or in nested SPAN - // no matter): it is created deadly, and does not response the href assignment. // So - always create SPAN. this.span = s = d.createElement('SPAN'); //s.style.display = 'none'; b.insertBefore(s, b.lastChild); s.innerHTML = 'Workaround for IE.'; var closure = function () { s = s.getElementsByTagName('SCRIPT')[0]; // get with timeout! s.language = 'JavaScript'; if (s.setAttribute) s.setAttribute('src', th.url); else s.src = th.url; } } JsHttpRequest.setTimeout(closure, 10); // Success. return null; } } } // }}} // {{{ form // Loader: FORM & IFRAME. // [+] Supports file uploading. // [+] GET and POST methods are supported. // [+] Supports loading from different domains. // [-] Uses a lot of system resources. // [-] Backend data cannot be browser-cached. // [-] Pollutes browser history on some old browsers. // JsHttpRequest.LOADERS.form = { loader: function (req) { JsHttpRequest.extend(req._errors, { form_el_not_belong: 'Element "%" does not belong to any form!', form_el_belong_diff: 'Element "%" belongs to a different form. All elements must belong to the same form!', form_el_inv_enctype: 'Attribute "enctype" of the form must be "%" (for IE), "%" given.' }) this.load = function () { var th = this; if (!th.method) th.method = 'POST'; th.url += (th.url.indexOf('?') >= 0 ? '&' : '?') + 'JsHttpRequest=' + th.id + '-' + 'form'; // If GET, build full URL. Then copy QUERY_STRING to queryText. if (th.method == 'GET') { if (th.queryText) th.url += (th.url.indexOf('?') >= 0 ? '&' : '?') + th.queryText; if (th.url.length > JsHttpRequest.MAX_URL_LEN) return ['url_too_long', JsHttpRequest.MAX_URL_LEN]; var p = th.url.split('?', 2); th.url = p[0]; th.queryText = p[1] || ''; } // Check if all form elements belong to same form. var form = null; var wholeFormSending = false; if (th.queryElem.length) { if (th.queryElem[0].e.tagName.toUpperCase() == 'FORM') { // Whole FORM sending. form = th.queryElem[0].e; wholeFormSending = true; th.queryElem = []; } else { // If we have at least one form element, we use its FORM as a POST container. form = th.queryElem[0].e.form; // Validate all the elements. for (var i = 0; i < th.queryElem.length; i++) { var e = th.queryElem[i].e; if (!e.form) { return ['form_el_not_belong', e.name]; } if (e.form != form) { return ['form_el_belong_diff', e.name]; } } } // Check enctype of the form. if (th.method == 'POST') { var need = "multipart/form-data"; var given = (form.attributes.encType && form.attributes.encType.nodeValue) || (form.attributes.enctype && form.attributes.enctype.value) || form.enctype; if (given != need) { return ['form_el_inv_enctype', need, given]; } } } // Create invisible IFRAME with temporary form (form is used on empty queryElem). // We ALWAYS create th IFRAME in the document of the form - for Opera 7.20. var d = form && (form.ownerDocument || form.document) || document; var ifname = 'jshr_i_' + th.id; var s = th.span = d.createElement('DIV'); s.style.position = 'absolute'; //s.style.display = 'none'; s.style.visibility = 'hidden'; s.innerHTML = (form ? '' : '') + // stupid IE, MUST use innerHTML assignment :-( '' if (!form) { form = th.span.firstChild; } // Insert generated form inside the document. // Be careful: don't forget to close FORM container in document body! d.body.insertBefore(s, d.body.lastChild); // Function to safely set the form attributes. Parameter attr is NOT a hash // but an array, because "for ... in" may badly iterate over derived attributes. var setAttributes = function (e, attr) { var sv = []; var form = e; // This strange algorythm is needed, because form may contain element // with name like 'action'. In IE for such attribute will be returned // form element node, not form action. Workaround: copy all attributes // to new empty form and work with it, then copy them back. This is // THE ONLY working algorythm since a lot of bugs in IE5.0 (e.g. // with e.attributes property: causes IE crash). if (e.mergeAttributes) { var form = d.createElement('form'); form.mergeAttributes(e, false); } for (var i = 0; i < attr.length; i++) { var k = attr[i][0], v = attr[i][1]; // TODO: http://forum.dklab.ru/viewtopic.php?p=129059#129059 sv[sv.length] = [k, form.getAttribute(k)]; form.setAttribute(k, v); } if (e.mergeAttributes) { e.mergeAttributes(form, false); } return sv; } // Run submit with delay - for old Opera: it needs some time to create IFRAME. var closure = function () { // Save JsHttpRequest object to new IFRAME. top.JsHttpRequestGlobal = JsHttpRequest; // Disable ALL the form elements. var savedNames = []; if (!wholeFormSending) { for (var i = 0, n = form.elements.length; i < n; i++) { savedNames[i] = form.elements[i].name; form.elements[i].name = ''; } } // Insert hidden fields to the form. var qt = th.queryText.split('&'); for (var i = qt.length - 1; i >= 0; i--) { var pair = qt[i].split('=', 2); var e = d.createElement('INPUT'); e.type = 'hidden'; e.name = unescape(pair[0]); e.value = pair[1] != null ? unescape(pair[1]) : ''; form.appendChild(e); } // Change names of along user-passed form elements. for (var i = 0; i < th.queryElem.length; i++) { th.queryElem[i].e.name = th.queryElem[i].name; } // Temporary modify form attributes, submit form, restore attributes back. var sv = setAttributes( form, [ ['action', th.url], ['method', th.method], ['onsubmit', null], ['target', ifname] ] ); form.submit(); setAttributes(form, sv); // Remove generated temporary hidden elements from the top of the form. for (var i = 0; i < qt.length; i++) { // Use "form.firstChild.parentNode", not "form", or IE5 crashes! form.lastChild.parentNode.removeChild(form.lastChild); } // Enable all disabled elements back. if (!wholeFormSending) { for (var i = 0, n = form.elements.length; i < n; i++) { form.elements[i].name = savedNames[i]; } } } JsHttpRequest.setTimeout(closure, 100); // Success. return null; } } } // }}} ')
/var/www/rtech.solutionerp.co/public/access/password_reset.php:43: send_scripts()
/var/www/rtech.solutionerp.co/public/includes/session.inc:486: include('/var/www/rtech.solutionerp.co/public/access/password_reset.php')
/var/www/rtech.solutionerp.co/public/index.php:11: include_once('/var/www/rtech.solutionerp.co/public/includes/session.inc')

fopen(./company/0/js_cache/0/behaviour.js): failed to open stream: Permission denied in file: /var/www/rtech.solutionerp.co/public/includes/main.inc at line 113
/var/www/rtech.solutionerp.co/public/includes/main.inc:113: fopen('./company/0/js_cache/0/behaviour.js','w')
/var/www/rtech.solutionerp.co/public/includes/main.inc:88: force_open('./company/0/js_cache/0/behaviour.js')
/var/www/rtech.solutionerp.co/public/includes/page/header.inc:63: cache_js_file('./company/0/js_cache/0/behaviour.js','/* Behaviour v1.1 by Ben Nolan, June 2005. Based largely on the work of Simon Willison (see comments by Simon below). Small fixes by J.Dobrowolski for Solution ERP May 2008 Description: Uses css selectors to apply javascript behaviours to enable unobtrusive javascript in html documents. Usage: var myrules = { 'b.someclass' : function(element){ element.onclick = function(){ alert(this.innerHTML); } }, '#someid u' : function(element){ element.onmouseover = function(){ this.innerHTML = "BLAH!"; } } }; Behaviour.register(myrules); // Call Behaviour.apply() to re-apply the rules (if you // update the dom, etc). License: This file is entirely BSD licensed. More information: http://ripcord.co.nz/behaviour/ */ var Behaviour = { list: new Array, register: function (sheet) { Behaviour.list.push(sheet); }, start: function () { Behaviour.addLoadEvent(function () { Behaviour.apply(); }); }, apply: function () { for (h = 0; sheet = Behaviour.list[h]; h++) { for (selector in sheet) { var sels = selector.split(','); for (var n = 0; n < sels.length; n++) { list = document.getElementsBySelector(sels[n]); if (!list) { continue; } for (i = 0; element = list[i]; i++) { sheet[selector](element); } } } } }, addLoadEvent: function (func) { var oldonload = window.onload; if (typeof window.onload != 'function') { window.onload = func; } else { window.onload = function () { oldonload(); func(); } } } } Behaviour.start(); /* The following code is Copyright (C) Simon Willison 2004. document.getElementsBySelector(selector) - returns an array of element objects from the current document matching the CSS selector. Selectors can contain element names, class names and ids and can be nested. For example: elements = document.getElementsBySelect('div#main p a.external') Will return an array of all 'a' elements with 'external' in their class attribute that are contained inside 'p' elements that are contained inside the 'div' element which has id="main" New in version 0.4: Support for CSS2 and CSS3 attribute selectors: See http://www.w3.org/TR/css3-selectors/#attribute-selectors Version 0.4 - Simon Willison, March 25th 2003 -- Works in Phoenix 0.5, Mozilla 1.3, Opera 7, Internet Explorer 6, Internet Explorer 5 on Windows -- Opera 7 fails */ function getAllChildren(e) { // Returns all children of element. Workaround required for IE5/Windows. Ugh. return e.all ? e.all : e.getElementsByTagName('*'); } document.getElementsBySelector = function (selector) { // Attempt to fail gracefully in lesser browsers if (!document.getElementsByTagName) { return new Array(); } // Split selector in to tokens var tokens = selector.split(' '); var currentContext = new Array(document); for (var i = 0; i < tokens.length; i++) { token = tokens[i].replace(/^\s+/, '').replace(/\s+$/, ''); if (token.indexOf('#') > -1) { // Token is an ID selector var bits = token.split('#'); var tagName = bits[0]; var id = bits[1]; var element = document.getElementById(id); if (tagName && element.nodeName.toLowerCase() != tagName) { // tag with that ID not found, return false return new Array(); } // Set currentContext to contain just this element currentContext = new Array(element); continue; // Skip to next token } if (token.indexOf('.') > -1) { // Token contains a class selector var bits = token.split('.'); var tagName = bits[0]; var className = bits[1]; if (!tagName) { tagName = '*'; } // Get elements matching tag, filter them for class selector var found = new Array; var foundCount = 0; for (var h = 0; h < currentContext.length; h++) { var elements; if (tagName == '*') { elements = getAllChildren(currentContext[h]); } else { elements = currentContext[h].getElementsByTagName(tagName); } for (var j = 0; j < elements.length; j++) { found[foundCount++] = elements[j]; } } currentContext = new Array; var currentContextIndex = 0; for (var k = 0; k < found.length; k++) { if (found[k].getAttribute('class') != null && found[k].getAttribute('class').match(new RegExp('\\b' + className + '\\b'))) { currentContext[currentContextIndex++] = found[k]; } } continue; // Skip to next token } // Code to deal with attribute selectors /* Original reg expression /^(\w*)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/ was replaced by new RegExp() cuz compressor fault */ if (token.match(new RegExp('^(\\w*)\\[(\\w+)([=~\\|\\^\\$\\*]?)=?"?([^\\]"]*)"?\\]$'))) { var tagName = RegExp.$1; var attrName = RegExp.$2; var attrOperator = RegExp.$3; var attrValue = RegExp.$4; if (!tagName) { tagName = '*'; } // Grab all of the tagName elements within current context var found = new Array; var foundCount = 0; for (var h = 0; h < currentContext.length; h++) { var elements; if (tagName == '*') { elements = getAllChildren(currentContext[h]); } else { elements = currentContext[h].getElementsByTagName(tagName); } for (var j = 0; j < elements.length; j++) { found[foundCount++] = elements[j]; } } currentContext = new Array; var currentContextIndex = 0; var checkFunction; // This function will be used to filter the elements switch (attrOperator) { case '=': // Equality checkFunction = function (e) { return (e.getAttribute(attrName) == attrValue); }; break; case '~': // Match one of space seperated words checkFunction = function (e) { var a = e.getAttribute(attrName); return (a && a.match(new RegExp('\\b' + attrValue + '\\b'))); }; break; case '|': // Match start with value followed by optional hyphen checkFunction = function (e) { var a = e.getAttribute(attrName); return (a && a.match(new RegExp('^' + attrValue + '-?'))); }; break; case '^': // Match starts with value checkFunction = function (e) { var a = e.getAttribute(attrName); return (a && a.indexOf(attrValue) == 0); }; break; case '$': // Match ends with value - fails with "Warning" in Opera 7 checkFunction = function (e) { var a = e.getAttribute(attrName); return (a && a.lastIndexOf(attrValue) == e.getAttribute(attrName).length - attrValue.length); }; break; case '*': // Match contains value checkFunction = function (e) { var a = e.getAttribute(attrName); return (a && a.indexOf(attrValue) > -1); }; break; default : // Just test for existence of attribute checkFunction = function (e) { return e.getAttribute(attrName); }; } currentContext = new Array; var currentContextIndex = 0; for (var k = 0; k < found.length; k++) { if (checkFunction(found[k])) { currentContext[currentContextIndex++] = found[k]; } } // alert('Attribute Selector: '+tagName+' '+attrName+' '+attrOperator+' '+attrValue); continue; // Skip to next token } if (!currentContext[0]) { return; } // If we get here, token is JUST an element (not a class or ID selector) tagName = token; var found = new Array; var foundCount = 0; for (var h = 0; h < currentContext.length; h++) { var elements = currentContext[h].getElementsByTagName(tagName); for (var j = 0; j < elements.length; j++) { found[foundCount++] = elements[j]; } } currentContext = found; } return currentContext; } /* That revolting regular expression explained /^(\w+)\[(\w+)([=~\|\^\$\*]?)=?"?([^\]"]*)"?\]$/ \---/ \---/\-------------/ \-------/ | | | | | | | The value | | ~,|,^,$,* or = | Attribute Tag */ ')
/var/www/rtech.solutionerp.co/public/access/password_reset.php:43: send_scripts()
/var/www/rtech.solutionerp.co/public/includes/session.inc:486: include('/var/www/rtech.solutionerp.co/public/access/password_reset.php')
/var/www/rtech.solutionerp.co/public/index.php:11: include_once('/var/www/rtech.solutionerp.co/public/includes/session.inc')

fopen(./company/0/js_cache/0/utils.js): failed to open stream: Permission denied in file: /var/www/rtech.solutionerp.co/public/includes/main.inc at line 113
/var/www/rtech.solutionerp.co/public/includes/main.inc:113: fopen('./company/0/js_cache/0/utils.js','w')
/var/www/rtech.solutionerp.co/public/includes/main.inc:88: force_open('./company/0/js_cache/0/utils.js')
/var/www/rtech.solutionerp.co/public/includes/page/header.inc:63: cache_js_file('./company/0/js_cache/0/utils.js','/********************************************************************** Copyright (C) SolutionERP, LLC. ***********************************************************************/ function set_mark(img) { var box = document.getElementById('ajaxmark'); if (box) { if (img) box.src = user.theme + 'images/' + img; box.style.visibility = img ? 'visible' : 'hidden'; } } function disp_msg(msg, cl) { var box = document.getElementById('msgbox'); box.innerHTML = "
" + msg + '
'; // box.style.display = msg=='' ? 'none':'block'; if (msg != '') window.scrollTo(0, element_pos(box).y - 10); } // // JsHttpRequest class extensions. // // Main functions for asynchronus form submitions // Trigger is the source of request and can have following forms: // - input object - all form values are also submited // - arbitrary string - POST var trigger with value 1 is added to request; // if form parameter exists also form values are submited, otherwise // request is directed to current location // JsHttpRequest.request = function (trigger, form, tout) { // if (trigger.type=='submit' && !validate(trigger)) return false; tout = tout || 10000; // default timeout value document.getElementById('msgbox').innerHTML = ''; set_mark(tout > 10000 ? 'progressbar.gif' : 'ajax-loader.gif'); JsHttpRequest._request(trigger, form, tout, 0); }; JsHttpRequest._request = function (trigger, form, tout, retry) { if (trigger.tagName == 'A') { var content = {}; var upload = 0; var url = trigger.href; if (trigger.id) content[trigger.id] = 1; } else { var submitObj = typeof (trigger) == "string" ? document.getElementsByName(trigger)[0] : trigger; form = form || (submitObj && submitObj.form); var upload = form && form.enctype == 'multipart/form-data'; var url = form ? form.getAttribute('action') : window.location.toString(); var content = this.formInputs(trigger, form, upload); if (!form) url = url.substring(0, url.indexOf('?')); if (!submitObj) { content[trigger] = 1; } } // this is to avoid caching problems content['_random'] = Math.random() * 1234567; var tcheck = setTimeout( function () { for (var id in JsHttpRequest.PENDING) { var call = JsHttpRequest.PENDING[id]; if (call != false) { if (call._ldObj.xr) // needed for gecko call._ldObj.xr.onreadystatechange = function () { }; call.abort(); // why this doesn't kill request in firebug? // call._ldObj.xr.abort(); delete JsHttpRequest.PENDING[id]; } } set_mark(retry ? 'ajax-loader2.gif' : 'warning.png'); if (retry) JsHttpRequest._request(trigger, form, tout, retry - 1); }, tout); JsHttpRequest.query( (upload ? "form." : "") + "POST " + url, // force form loader content, // Function is called when an answer arrives. function (result, errors) { // Write the answer. var newwin = 0; if (result) { for (var i in result) { atom = result[i]; cmd = atom['n']; property = atom['p']; type = atom['c']; id = atom['t']; data = atom['data']; // debug(cmd+':'+property+':'+type+':'+id); // seek element by id if there is no elemnt with given name objElement = document.getElementsByName(id)[0] || document.getElementById(id); if (cmd == 'as') { eval("objElement.setAttribute('" + property + "','" + data + "');"); } else if (cmd == 'up') { // if(!objElement) alert('No element "'+id+'"'); if (objElement) { if (objElement.tagName == 'INPUT' || objElement.tagName == 'TEXTAREA') objElement.value = data; else objElement.innerHTML = data; // selector, div, span etc } } else if (cmd == 'di') { // disable/enable element objElement.disabled = data; } else if (cmd == 'fc') { // set focus _focus = data; } else if (cmd == 'js') { // evaluate js code __isGecko ? eval(data) : setTimeout(function () { eval(data); }, 200); // timeout required by IE7/8 } else if (cmd == 'rd') { // client-side redirection window.location = data; } else if (cmd == 'pu') { // pop-up newwin = 1; window.open(data, 'REP_WINDOW', 'toolbar=no,scrollbars=yes,resizable=yes,menubar=no'); } else { errors = errors + '
Unknown ajax function: ' + cmd; } } if (tcheck) JsHttpRequest.clearTimeout(tcheck); // Write errors to the debug div. document.getElementById('msgbox').innerHTML = errors; set_mark(); Behaviour.apply(); if (errors.length > 0) window.scrollTo(0, 0); //document.getElementById('msgbox').scrollIntoView(true); // Restore focus if we've just lost focus because of DOM element refresh if (!newwin) { setFocus(); } } }, false // do not disable caching ); }; // collect all form input values plus inp trigger value JsHttpRequest.formInputs = function (inp, objForm, upload) { var submitObj = inp; var q = {}; if (typeof (inp) == "string") submitObj = document.getElementsByName(inp)[0] || inp; objForm = objForm || (submitObj && submitObj.form); if (objForm) { var formElements = objForm.elements; for (var i = 0; i < formElements.length; i++) { var el = formElements[i]; var name = el.name; if (!el.name) continue; if (upload) { // for form containing file inputs collect all // form elements and add value of trigger submit button // (internally form is submitted via form.submit() not button click()) if (submitObj.type == 'submit' && el == submitObj) { q[name] = el.value; continue; } } if (el.type) if ( (el.type == 'radio' && el.checked == false) || (el.type == 'submit' && (!submitObj || el.name != submitObj.name))) continue; if (el.disabled && el.disabled == true) continue; if (name) { if (el.type == 'select-multiple') { name = name.substr(0, name.length - 2); q[name] = new Array; for (var j = 0; j < el.length; j++) { s = name.substring(0, name.length - 2); if (el.options[j].selected == true) q[name].push(el.options[j].value); } } else if (el.type == 'file') q[name] = el; else { if (el.type == 'checkbox') { q[name] = (el.checked == true); } else { q[name] = el.value; } } } } } return q; }; // // User price formatting // function price_format(post, num, dec, label, color) { var el = label ? document.getElementById(post) : document.getElementsByName(post)[0]; //num = num.toString().replace(/\$|\,/g,''); if (isNaN(num)) num = "0"; sign = (num == (num = Math.abs(num))); var max = dec == 'max'; if (max) dec = num == 0 ? 2 : 15 - Math.floor(Math.log(Math.abs(num))); if (dec < 0) dec = 2; decsize = Math.pow(10, dec); num = Math.floor(num * decsize + 0.50000000001); cents = num % decsize; num = Math.floor(num / decsize).toString(); for (i = cents.toString().length; i < dec; i++) { cents = "0" + cents; } if (max) // strip trailing 0 cents = cents.toString().replace(/0+$/, ''); for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++) num = num.substring(0, num.length - (4 * i + 3)) + user.ts + num.substring(num.length - (4 * i + 3)); num = ((sign) ? '' : '-') + num; if (dec != 0 && (!max || cents != 0)) num = num + user.ds + cents; if (label) el.innerHTML = num; else el.value = num; if (color) { el.style.color = (sign) ? '' : '#FF0000'; } } function get_amount(doc, label) { if (label) var val = document.getElementById(doc).innerHTML; else var val = typeof (doc) == "string" ? document.getElementsByName(doc)[0].value : doc.value; val = val.replace(new RegExp('\\' + user.ts, 'g'), ''); val = +val.replace(new RegExp('\\' + user.ds, 'g'), '.'); return isNaN(val) ? 0 : val; } function goBack(deep) { if (window.opener) window.close(); else window.history.go(deep || -1); } function setFocus(name, byId) { var el = null; if (typeof (name) == 'object') el = name; else { if (!name) { // page load/ajax update if (_focus) name = _focus; // last focus set in onfocus handlers else if (document.forms.length) { // no current focus (first page display) - set it from from last form var cur = document.getElementsByName('_focus')[document.forms.length - 1]; if (cur) name = cur.value; } } if (name) if (byId || !(el = document.getElementsByName(name)[0])) el = document.getElementById(name); } if (el != null && el.focus) { // The timeout is needed to prevent unpredictable behaviour on IE & Gecko. // Using tmp var prevents crash on IE5 var tmp = function () { el.focus(); if (el.select) el.select(); }; setTimeout(tmp, 0); } } /* Find closest element in neighbourhood and set focus. dir is arrow keycode. */ function move_focus(dir, e0, neighbours) { var p0 = element_pos(e0); var t; var l = 0; for (var i = 0; i < neighbours.length; i++) { var e = neighbours[i]; var p = element_pos(e); if (p != null && (e.className == 'menu_option' || e.className == 'printlink' || e.className == 'repclass_link' || e.className == 'repopts_link')) { if (((dir == 40) && (p.y > p0.y)) || (dir == 38 && (p.y < p0.y)) || ((dir == 37) && (p.x < p0.x)) || ((dir == 39 && (p.x > p0.x)))) { var l1 = (p.y - p0.y) * (p.y - p0.y) + (p.x - p0.x) * (p.x - p0.x); if ((l1 < l) || (l == 0)) { l = l1; t = e; } } } } if (t) setFocus(t); return t; } var __isGecko = navigator.userAgent.match(/gecko/i); // i.e. Gecko or KHTML, like Gecko ;) //returns the absolute position of some element within document function element_pos(e) { var res = new Object(); res.x = 0; res.y = 0; if (e !== null) { res.x = e.offsetLeft; res.y = e.offsetTop; var offsetParent = e.offsetParent; var parentNode = e.parentNode; while (offsetParent !== null && offsetParent.style.display != 'none') { res.x += offsetParent.offsetLeft; res.y += offsetParent.offsetTop; // the second case is for IE6/7 in some doctypes if (offsetParent != document.body && offsetParent != document.documentElement) { res.x -= offsetParent.scrollLeft; res.y -= offsetParent.scrollTop; } //next lines are necessary to support FireFox problem with offsetParent if (__isGecko) { while (offsetParent != parentNode && parentNode !== null) { res.x -= parentNode.scrollLeft; res.y -= parentNode.scrollTop; parentNode = parentNode.parentNode; } } parentNode = offsetParent.parentNode; offsetParent = offsetParent.offsetParent; } } // parentNode has style.display set to none if (parentNode != document.documentElement) return null; return res; } function string_contains(haystack, needle) { var words = haystack.split(' '); return words.indexOf(needle) > -1; } ')
/var/www/rtech.solutionerp.co/public/access/password_reset.php:43: send_scripts()
/var/www/rtech.solutionerp.co/public/includes/session.inc:486: include('/var/www/rtech.solutionerp.co/public/access/password_reset.php')
/var/www/rtech.solutionerp.co/public/index.php:11: include_once('/var/www/rtech.solutionerp.co/public/includes/session.inc')

fopen(./company/0/js_cache/0/inserts.js): failed to open stream: Permission denied in file: /var/www/rtech.solutionerp.co/public/includes/main.inc at line 113
/var/www/rtech.solutionerp.co/public/includes/main.inc:113: fopen('./company/0/js_cache/0/inserts.js','w')
/var/www/rtech.solutionerp.co/public/includes/main.inc:88: force_open('./company/0/js_cache/0/inserts.js')
/var/www/rtech.solutionerp.co/public/includes/page/header.inc:63: cache_js_file('./company/0/js_cache/0/inserts.js','/********************************************************************** Copyright (C) SolutionERP, LLC. ***********************************************************************/ var _focus; var _hotkeys = { 'alt': false, // whether is the Alt key pressed 'list': false, // list of all elements with hotkey used recently 'focus': -1 // currently selected list element }; function validate(e) { if (e.name && (typeof _validate[e.name] == 'function')) return _validate[e.name](e); else { var n = e.name.indexOf('['); if (n != -1) { var key = e.name.substring(n + 1, e.name.length - 1); if (key.length > 1 && _validate[e.name.substring(0, n)]) return _validate[e.name.substring(0, n)][key](e); } } return true; } function set_fullmode() { document.getElementById('ui_mode').value = 1; document.loginform.submit(); return true; } function save_focus(e) { _focus = e.name || e.id; var h = document.getElementById('hints'); if (h) { // h.style.display = e.title && e.title.length ? 'inline' : 'none'; h.innerHTML = e.title ? e.title : ''; } } function _expand(tabobj) { var ul = tabobj.parentNode.parentNode; var alltabs = ul.getElementsByTagName("button"); var frm = tabobj.form; if (ul.getAttribute("rel")) { for (var i = 0; i < alltabs.length; i++) { alltabs[i].className = "ajaxbutton" //deselect all tabs // Review CP 2014-11 This will remove all other classes from the element. } tabobj.className = "current"; JsHttpRequest.request(tabobj) } } //interface for selecting a tab (plus expand corresponding content) function expandtab(tabcontentid, tabnumber) { var tabs = document.getElementById(tabcontentid); _expand(tabs.getElementsByTagName("input")[tabnumber]); } function _set_combo_input(e) { e.setAttribute('_last', e.value); e.onblur = function () { var but_name = this.name.substring(0, this.name.length - 4) + 'button'; var button = document.getElementsByName(but_name)[0]; var select = document.getElementsByName(this.getAttribute('rel'))[0]; save_focus(select); // submit request if there is submit_on_change option set and // search field has changed. if (button && (this.value != this.getAttribute('_last'))) { JsHttpRequest.request(button); } else if (string_contains(this.className, 'combo2')) { //this.style.display = 'none'; select.style.display = 'inline'; setFocus(select); } return false; }; e.onkeyup = function (ev) { var select = document.getElementsByName(this.getAttribute('rel'))[0]; if (select && select.selectedIndex >= 0) { var len = select.length; var byid = string_contains(this.className, 'combo') || string_contains(this.className, 'combo3'); var ac = this.value.toUpperCase(); select.options[select.selectedIndex].selected = false; for (i = 0; i < len; i++) { var txt = byid ? select.options[i].value : select.options[i].text; if (string_contains(this.className, 'combo3')) { if (txt.toUpperCase().indexOf(ac) == 0) { select.options[i].selected = true; break; } } else { if (txt.toUpperCase().indexOf(ac) >= 0) { select.options[i].selected = true; break; } } } } }; e.onkeydown = function (ev) { ev = ev || window.event; key = ev.keyCode || ev.which; if (key == 13) { this.blur(); return false; } } } function _update_box(s) { var byid = string_contains(s.className, 'combo') || string_contains(s.className, 'combo3'); var rel = s.getAttribute('rel'); var box = document.getElementsByName(rel)[0]; if (box && s.selectedIndex >= 0) { var opt = s.options[s.selectedIndex]; if (box) { var old = box.value; box.value = byid ? opt.value : opt.text; box.setAttribute('_last', box.value); return old != box.value } } } function _set_combo_select(e) { // When combo position is changed via js (eg from searchbox) // no onchange event is generated. To ensure proper change // signaling we must track selectedIndex in onblur handler. e.setAttribute('_last', e.selectedIndex); e.onblur = function () { var box = document.getElementsByName(this.getAttribute('rel'))[0]; if ((this.selectedIndex != this.getAttribute('_last')) || ((string_contains(this.className, 'combo') || string_contains(this.className, 'combo3')) && _update_box(this)) ) this.onchange(); } e.onchange = function () { var s = this; this.setAttribute('_last', this.selectedIndex); if (string_contains(s.className, 'combo') || string_contains(this.className, 'combo3')) _update_box(s); if (s.selectedIndex >= 0) { var sname = '_' + s.name + '_update'; var update = document.getElementsByName(sname)[0]; if (update) { JsHttpRequest.request(update); } } return true; } e.onkeydown = function (event) { event = event || window.event; key = event.keyCode || event.which; var box = document.getElementsByName(this.getAttribute('rel'))[0]; if (key == 8 || (key == 37 && event.altKey)) { event.returnValue = false; return false; } if (box && (key == 32) && (string_contains(this.className, 'combo2'))) { //this.style.display = 'none'; box.style.display = 'inline'; box.value = ''; setFocus(box); return false; } else { if (key == 13 && !e.length) // prevent chrome issue (blocked cursor after CR on empty selector) return false; } } } var _w; function callEditor(key) { var el = document.getElementsByName(editors[key][1])[0]; if (_w) _w.close(); // this is really necessary to have window on top in FF2 :/ var left = (screen.width - editors[key][2]) / 2; var top = (screen.height - editors[key][3]) / 2; _w = open(editors[key][0] + el.value + '&popup=1', "edit", "scrollbars=yes,resizable=0,width=" + editors[key][2] + ",height=" + editors[key][3] + ",left=" + left + ",top=" + top + ",screenX=" + left + ",screenY=" + top); if (_w.opener == null) _w.opener = self; editors._call = key; // store call point for passBack _w.focus(); } function passBack(value) { var o = opener; if (value != false) { var back = o.editors[o.editors._call]; // form input bindings var to = o.document.getElementsByName(back[1])[0]; if (to) { if (to[0] != undefined) to[0].value = value; // ugly hack to set selector to any value to.value = value; // update page after item selection o.JsHttpRequest.request('_' + to.name + '_update', to.form); o.setFocus(to.name); } } close(); } /* Normalize date format using previous input value to guess missing date elements. Helps fast date input field change with only single or double numbers (for day or day-and-month fragments) */ function fix_date(date, last) { var dat = last.split(user.datesep); var cur = date.split(user.datesep); var day, month, year; // TODO: user.date as default? // TODO: user.datesys if (date == "" || date == last) // should we return an empty date or should we return last? return date; if (user.datefmt == 0 || user.datefmt == 3) // set defaults { day = dat[1]; month = dat[0]; year = dat[2]; } else if (user.datefmt == 1 || user.datefmt == 4) { day = dat[0]; month = dat[1]; year = dat[2]; } else { day = dat[2]; month = dat[1]; year = dat[0]; } if (cur[1] != undefined && cur[1] != "") // day or month entered, could be string 3 { if (user.datefmt == 0 || user.datefmt == 3 || ((user.datefmt == 2 || user.datefmt == 5) && (cur[2] == undefined || cur[2] == ""))) day = cur[1]; else month = cur[1]; } if (cur[0] != undefined && cur[0] != "") // day or month entered. could be string 3 { if (cur[1] == undefined || cur[1] == "") day = cur[0]; else if (user.datefmt == 0 || user.datefmt == 3 || ((user.datefmt == 2 || user.datefmt == 5) && (cur[2] == undefined || cur[2] == ""))) month = cur[0]; else if (user.datefmt == 2 || user.datefmt == 5) year = cur[0]; else day = cur[0]; } if (cur[2] != undefined && cur[2] != "") // year, { if (user.datefmt == 2 || user.datefmt == 5) day = cur[2]; else year = cur[2]; } if (user.datefmt < 3) { if (day < 10) day = '0' + parseInt(day, 10); if (month < 10) month = '0' + parseInt(month, 10); } if (year < 100) year = year < 60 ? (2000 + parseInt(year, 10)) : (1900 + parseInt(year, 10)); // console.info(day,month,year) if (user.datefmt == 0 || user.datefmt == 3) return month + user.datesep + day + user.datesep + year; if (user.datefmt == 1 || user.datefmt == 4) return day + user.datesep + month + user.datesep + year; return year + user.datesep + month + user.datesep + day; } /* Behaviour definitions */ var inserts = { 'input': function (e) { if (e.onfocus == undefined) { e.onfocus = function () { save_focus(this); if (string_contains(this.className, 'combo') || string_contains(this.className, 'combo3')) this.select(); }; } if (string_contains(e.className, 'combo') || string_contains(e.className, 'combo2') || string_contains(e.className, 'combo3')) { _set_combo_input(e); } else if (e.type == 'text') { e.onkeydown = function (ev) { ev = ev || window.event; key = ev.keyCode || ev.which; if (key == 13) { if (e.className == 'searchbox') e.onblur(); return false; } return true; } } }, 'input.combo2,input[aspect="fallback"]': function (e) { // this hides search button for js enabled browsers // e.style.display = 'none'; }, 'div.js_only': function (e) { // this shows divs for js enabled browsers only e.style.display = 'block'; }, 'button': function (e) { e.onclick = function () { if (validate(e)) { setTimeout(function () { var asp = e.getAttribute('aspect'); if (asp && asp.indexOf('download') === -1 && asp.indexOf('popup') === -1) set_mark((asp && ((asp.indexOf('process') !== -1) || (asp.indexOf('nonajax') !== -1))) ? 'progressbar.gif' : 'ajax-loader.gif'); }, 100); return true; } return false; }, e.onkeydown = function (ev) { // block unintentional page escape with 'history back' key pressed on buttons ev = ev || window.event; key = ev.keyCode || ev.which; if (key == 8 || (key == 37 && ev.altKey)) { ev.returnValue = false; return false; } } }, // '.ajaxsubmit,.editbutton,.navibutton': // much slower on IE7 'button.ajaxsubmit,input.ajaxsubmit,input.editbutton,button.editbutton,button.navibutton': function (e) { e.onclick = function () { if (validate(e)) { save_focus(e); var asp = e.getAttribute('aspect') if (asp && (asp.indexOf('process') !== -1)) JsHttpRequest.request(this, null, 600000); // ten minutes for backup else JsHttpRequest.request(this); } return false; } }, '.amount': function (e) { if (e.onblur == undefined) { e.setAttribute('_last_val', e.value); e.onblur = function () { var dec = this.getAttribute("dec"); var val = this.getAttribute('_last_val'); if (val != get_amount(this.name)) { this.setAttribute('_last_val', get_amount(this.name)); price_format(this.name, get_amount(this.name), dec); if (e.className.match(/\bactive\b/)) JsHttpRequest.request('_' + this.name + '_changed', this.form); } }; } }, '.searchbox': // emulated onchange event handling for text inputs function (e) { e.setAttribute('_last_val', e.value); e.setAttribute('autocomplete', 'off'); //must be off when calling onblur e.onblur = function () { var val = this.getAttribute('_last_val'); if (val != this.value) { this.setAttribute('_last_val', this.value); JsHttpRequest.request('_' + this.name + '_changed', this.form); } } }, '.date': function (e) { e.setAttribute('_last_val', e.value); e.setAttribute('autocomplete', 'off'); e.onblur = function () { var val = this.getAttribute('_last_val'); if (val != this.value) { this.value = fix_date(this.value, val); this.setAttribute('_last_val', this.value); if (e.className.match(/\bactive\b/)) JsHttpRequest.request('_' + this.name + '_changed', this.form); } } }, 'button[aspect*selector], button[aspect*abort], input[aspect*selector]': function (e) { e.onclick = function () { passBack(this.getAttribute('rel')); return false; } }, 'button[aspect=popup]': function (e) { e.onclick = function () { if (_w) _w.close(); // this is really necessary to have window on top in FF2 :/ var left = (screen.width - 800) / 2; var top = (screen.height - 600) / 2; _w = open(document.location + 'popup=1', "edit", "Scrollbars=0,resizable=0,width=800,height=600, top=" + top + ",left=" + left + ",screenX=" + left + ",screenY=" + top); if (_w.opener == null) _w.opener = self; // editors._call = key; // store call point for passBack // _w.moveTo(50, 50); _w.focus(); return false; } }, 'select': function (e) { if (e.onfocus == undefined) { e.onfocus = function () { save_focus(this); }; } var c = e.className; if (string_contains(c, 'combo') || string_contains(c, 'combo2') || string_contains(c, 'combo3')) _set_combo_select(e); else { e.onkeydown = function (ev) { // block unintentional page escape with 'history back' key pressed on buttons ev = ev || window.event; key = ev.keyCode || ev.which; if (key == 8 || (key = 37 && ev.altKey)) { ev.returnValue = false; return false; } } } }, 'a.printlink': function (l) { l.onclick = function () { save_focus(this); JsHttpRequest.request(this, null, 60000); return false; } }, 'a.repopts_link': function (l) { l.onclick = function () { save_focus(this); var replinks = document.getElementsBySelector('a.repopts_link'); for (var i in replinks) replinks[i].style.fontWeight = replinks[i] == this ? 'bold' : 'normal'; JsHttpRequest.request(this, null); return false; } }, 'a': function (e) { // traverse menu e.onkeydown = function (ev) { ev = ev || window.event; key = ev.keyCode || ev.which; if (key == 37 || key == 38 || key == 39 || key == 40) { move_focus(key, e, document.links); ev.returnValue = false; return false; } } // prevent unneeded transaction entry abortion if (e.className == 'shortcut' || e.className == 'menu_option' || e.className == 'menu_tab' || e.className == 'selected') e.onclick = function (ev) { if (_validate._processing && _validate._modified && !confirm(_validate._processing)) { ev.returnValue = false; return false; } if (_hotkeys.alt) // ommit Chrome accesskeys return false; window.location = e.href; } }, 'ul.ajaxtabs': function (ul) { var ulist = ul.getElementsByTagName("li"); for (var x = 0; x < ulist.length; x++) { //loop through each LI e var tab = ulist[x].getElementsByTagName("button")[0]; var url = tab.form.action tab.onclick = function () { if (!_hotkeys.alt && !this.disabled) _expand(this); return false; } } // } }, 'textarea': function (e) { if (e.onfocus == undefined) { e.onfocus = function () { save_focus(this); }; } }, '.approval_btn': function(e) { $(e).on('click', function(){ $("#approval_submit_btn").empty(); $("#reject_submit_btn").empty(); var approve_btn_title = $(this).attr('approve_title'); var reject_btn_title = $(this).attr('reject_title'); $("#approval_submit_btn").append('✅'+approve_btn_title); $("#reject_submit_btn").append('⛔'+reject_btn_title); var comment_container = $('#approval_comment_container'); var comment_box = $('#approval_comment_box'); var btn_name = $(this).attr('btn'); $('#approval_submit_btn').attr('btn','approve_btn'+btn_name); $('#reject_submit_btn').attr('btn','reject_btn'+btn_name); $('#comment_box_header').append(" #"+btn_name+""); $('.approval_btn_submit').css({ 'padding':'4px 8px 5px 8px', 'cursor':'pointer' }); $(comment_container).css({ 'position': 'fixed', 'z-index': '1000', 'top': '0', 'left': '0', 'width': '100%', 'height': '100%', 'background-color': 'rgb(0,0,0)', 'background-color': 'rgba(0,0,0,0.6)', }); $(comment_box).css({ 'position': 'absolute', 'float': 'left', 'left': '50%', 'top': '25%', 'width': '500px', 'padding': '20px 10px', 'transform': 'translate(-50%, -50%) scale(1)', 'transition': '200ms ease-in-out', 'border-radius': '4px', 'border': '1px solid #AAA', 'background-color': '#fff', 'font-size':'1.2em' }); $('#approval_comment').css({ 'width':'calc(100% - 30px)', 'border-color':'#AAA' }); $(comment_container).removeAttr('hidden'); $('#approval_comment_container').on('click', function(el) { var elm = $('#approval_comment_box'); if (!elm.is(el.target) && elm.has(el.target).length === 0) $('#cancel_btn').trigger('click'); }); }); }, '.approval_btn_submit': function(e) { $(e).on('click', function(){ var btn_name = $(this).attr('btn'); console.log('hi'); if($("button[name='"+btn_name+"']").length > 0){ $("button[name='"+btn_name+"']").trigger('click'); }else{ $("input[aspect='approval'][name='"+btn_name+"']").trigger('click'); } }); } /* TODO 'a.date_picker': function(e) { // this un-hides data picker for js enabled browsers e.href = date_picker(this.getAttribute('rel')); e.style.display = ''; e.tabindex = -1; // skip in tabbing order } */ }; function stopEv(ev) { if (ev.preventDefault) { ev.preventDefault(); ev.stopPropagation(); } else { ev.returnValue = false; ev.cancelBubble = true; window.keycode = 0; } return false; } /* Modified accesskey system. While Alt key is pressed letter keys moves focus to next marked link. Alt key release activates focused link. */ function setHotKeys() { document.onkeydown = function (ev) { ev = ev || window.event; key = ev.keyCode || ev.which; if (key == 18 && !ev.ctrlKey) { // start selection, skip Win AltGr _hotkeys.alt = true; _hotkeys.focus = -1; return stopEv(ev); } else if (ev.altKey && !ev.ctrlKey && ((key > 47 && key < 58) || (key > 64 && key < 91))) { key = String.fromCharCode(key); var n = _hotkeys.focus; var l = document.getElementsBySelector('[accesskey=' + key + ']'); var cnt = l.length; _hotkeys.list = l; for (var i = 0; i < cnt; i++) { n = (n + 1) % cnt; // check also if the link is visible if (l[n].accessKey == key && (l[n].offsetWidth || l[n].offsetHeight)) { _hotkeys.focus = n; // The timeout is needed to prevent unpredictable behaviour on IE. var tmp = function () { l[_hotkeys.focus].focus(); }; setTimeout(tmp, 0); break; } } return stopEv(ev); } if ((ev.ctrlKey && key == 13) || key == 27) { _hotkeys.alt = false; // cancel link selection _hotkeys.focus = -1; ev.cancelBubble = true; if (ev.stopPropagation) ev.stopPropagation(); // activate submit/escape form for (var j = 0; j < this.forms.length; j++) { var form = this.forms[j]; for (var i = 0; i < form.elements.length; i++) { var el = form.elements[i]; var asp = el.getAttribute('aspect'); if (!string_contains(el.className, 'editbutton') && (asp && asp.indexOf('selector') !== -1) && (key == 13 || key == 27)) { passBack(key == 13 ? el.getAttribute('rel') : false); ev.returnValue = false; return false; } if (((asp && asp.indexOf('default') !== -1) && key == 13) || ((asp && asp.indexOf('cancel') !== -1) && key == 27)) { if (validate(el)) { if (asp.indexOf('nonajax') !== -1) el.click(); else if (asp.indexOf('process') !== -1) JsHttpRequest.request(el, null, 600000); else JsHttpRequest.request(el); } ev.returnValue = false; return false; } } } ev.returnValue = false; return false; } if (editors !== undefined && editors[key]) { callEditor(key); return stopEv(ev); // prevent default binding } return true; }; document.onkeyup = function (ev) { ev = ev || window.event; key = ev.keyCode || ev.which; if (_hotkeys.alt == true) { if (key == 18) { _hotkeys.alt = false; if (_hotkeys.focus >= 0) { var link = _hotkeys.list[_hotkeys.focus]; if (link.onclick) link.onclick(); else if (link.target == '_blank') { window.open(link.href, '', 'toolbar=no,scrollbar=no,resizable=yes,menubar=no,width=900,height=500'); openWindow(link.href, '_blank'); } else window.location = link.href; } return stopEv(ev); } } return true; } } Behaviour.register(inserts); Behaviour.addLoadEvent(setFocus); Behaviour.addLoadEvent(setHotKeys); ')
/var/www/rtech.solutionerp.co/public/access/password_reset.php:43: send_scripts()
/var/www/rtech.solutionerp.co/public/includes/session.inc:486: include('/var/www/rtech.solutionerp.co/public/access/password_reset.php')
/var/www/rtech.solutionerp.co/public/index.php:11: include_once('/var/www/rtech.solutionerp.co/public/includes/session.inc')

fopen(./company/0/js_cache/0/login.js): failed to open stream: Permission denied in file: /var/www/rtech.solutionerp.co/public/includes/main.inc at line 113
/var/www/rtech.solutionerp.co/public/includes/main.inc:113: fopen('./company/0/js_cache/0/login.js','w')
/var/www/rtech.solutionerp.co/public/includes/main.inc:88: force_open('./company/0/js_cache/0/login.js')
/var/www/rtech.solutionerp.co/public/includes/page/header.inc:63: cache_js_file('./company/0/js_cache/0/login.js','/********************************************************************** Copyright (C) SolutionERP, LLC. ***********************************************************************/ function fixPNG(myImage) { var arVersion = navigator.appVersion.split("MSIE") var version = parseFloat(arVersion[1]) if ((version >= 5.5) && (version < 7) && (document.body.filters)) { var imgID = (myImage.id) ? "id='" + myImage.id + "' " : "" var imgClass = (myImage.className) ? "class='" + myImage.className + "' " : "" var imgTitle = (myImage.title) ? "title='" + myImage.title + "' " : "title='" + myImage.alt + "' " var imgStyle = "display:inline-block;" + myImage.style.cssText var strNewHTML = "" myImage.outerHTML = strNewHTML } } function set_fullmode() { document.getElementById('ui_mode').value = 1; document.loginform.submit(); return true; } function retry() { document.getElementById('ui_mode').value = 1; JsHttpRequest.request(this); return true; } ')
/var/www/rtech.solutionerp.co/public/access/password_reset.php:43: send_scripts()
/var/www/rtech.solutionerp.co/public/includes/session.inc:486: include('/var/www/rtech.solutionerp.co/public/access/password_reset.php')
/var/www/rtech.solutionerp.co/public/index.php:11: include_once('/var/www/rtech.solutionerp.co/public/includes/session.inc')
SolutionERP 2.4.14 - Password reset
SolutionERP

Password Reset

email is required
Select company
Copyright © 2010-2021 — SolutionERP