var Prototype = { Version: '1.3.1', emptyFunction: function() {} } var Class = { create: function() { return function() { this.initialize.apply(this, arguments); } } } var Abstract = new Object(); Object.extend = function(destination, source) { for (property in source) { destination[property] = source[property]; } return destination; } Object.prototype.extend = function(object) { return Object.extend.apply(this, [this, object]); } Function.prototype.bind = function(object) { var __method = this; return function() { __method.apply(object, arguments); } } Function.prototype.bindAsEventListener = function(object) { var __method = this; return function(event) { __method.call(object, event || window.event); } } Number.prototype.toColorPart = function() { var digits = this.toString(16); if (this < 16) return '0' + digits; return digits; } var Try = { these: function() { var returnValue; for (var i = 0; i < arguments.length; i++) { var lambda = arguments[i]; try { returnValue = lambda(); break; } catch (e) {} } return returnValue; } } function $() { var elements = new Array(); for (var i = 0; i < arguments.length; i++) { var element = arguments[i]; if (typeof element == 'string') element = document.getElementById(element); if (arguments.length == 1) return element; elements.push(element); } return elements; } if (!Array.prototype.push) { Array.prototype.push = function() { var startLength = this.length; for (var i = 0; i < arguments.length; i++) this[startLength + i] = arguments[i]; return this.length; } } if (!Function.prototype.apply) { // Based on code from http://www.youngpup.net/ Function.prototype.apply = function(object, parameters) { var parameterStrings = new Array(); if (!object) object = window; if (!parameters) parameters = new Array(); for (var i = 0; i < parameters.length; i++) parameterStrings[i] = 'parameters[' + i + ']'; object.__apply__ = this; var result = eval('object.__apply__(' + parameterStrings.join(', ') + ')'); object.__apply__ = null; return result; } } String.prototype.extend({ stripTags: function() { return this.replace(/<\/?[^>]+>/gi, ''); }, escapeHTML: function() { var div = document.createElement('div'); var text = document.createTextNode(this); div.appendChild(text); return div.innerHTML; }, unescapeHTML: function() { var div = document.createElement('div'); div.innerHTML = this.stripTags(); return div.childNodes[0].nodeValue; } }); var Ajax = { getTransport: function() { return Try.these( function() {return new ActiveXObject('Msxml2.XMLHTTP')}, function() {return new ActiveXObject('Microsoft.XMLHTTP')}, function() {return new XMLHttpRequest()} ) || false; } } Ajax.Base = function() {}; Ajax.Base.prototype = { setOptions: function(options) { this.options = { method: 'post', asynchronous: true, parameters: '' }.extend(options || {}); }, responseIsSuccess: function() { return this.transport.status == undefined || this.transport.status == 0 || (this.transport.status >= 200 && this.transport.status < 300); }, responseIsFailure: function() { return !this.responseIsSuccess(); } } Ajax.Request = Class.create(); Ajax.Request.Events = ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; Ajax.Request.prototype = (new Ajax.Base()).extend({ initialize: function(url, options) { this.transport = Ajax.getTransport(); this.setOptions(options); this.request(url); }, request: function(url) { var parameters = this.options.parameters || ''; if (parameters.length > 0) parameters += '&_='; try { //if (this.options.method == 'get') //url += '?' + parameters; this.transport.open(this.options.method, url, this.options.asynchronous); if (this.options.asynchronous) { this.transport.onreadystatechange = this.onStateChange.bind(this); setTimeout((function() {this.respondToReadyState(1)}).bind(this), 10); } this.setRequestHeaders(); var body = this.options.postBody ? this.options.postBody : parameters; this.transport.send(this.options.method == 'post' ? body : null); } catch (e) { } }, setRequestHeaders: function() { var requestHeaders = ['X-Requested-With', 'XMLHttpRequest', 'X-Prototype-Version', Prototype.Version]; if (this.options.method == 'post') { requestHeaders.push('Content-type', 'application/x-www-form-urlencoded'); /* Force "Connection: close" for Mozilla browsers to work around * a bug where XMLHttpReqeuest sends an incorrect Content-length * header. See Mozilla Bugzilla #246651. */ if (this.transport.overrideMimeType) requestHeaders.push('Connection', 'close'); } if (this.options.requestHeaders) requestHeaders.push.apply(requestHeaders, this.options.requestHeaders); for (var i = 0; i < requestHeaders.length; i += 2) this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]); }, onStateChange: function() { var readyState = this.transport.readyState; if (readyState != 1) this.respondToReadyState(this.transport.readyState); }, respondToReadyState: function(readyState) { var event = Ajax.Request.Events[readyState]; if (event == 'Complete') (this.options['on' + this.transport.status] || this.options['on' + (this.responseIsSuccess() ? 'Success' : 'Failure')] || Prototype.emptyFunction)(this.transport); (this.options['on' + event] || Prototype.emptyFunction)(this.transport); /* Avoid memory leak in MSIE: clean up the oncomplete event handler */ if (event == 'Complete') this.transport.onreadystatechange = Prototype.emptyFunction; } }); Ajax.Updater = Class.create(); Ajax.Updater.ScriptFragment = '(?:)((\n|.)*?)(?:<\/script>)'; Ajax.Updater.prototype.extend(Ajax.Request.prototype).extend({ initialize: function(container, url, options) { this.containers = { success: container.success ? $(container.success) : $(container), failure: container.failure ? $(container.failure) : (container.success ? null : $(container)) } this.transport = Ajax.getTransport(); this.setOptions(options); var onComplete = this.options.onComplete || Prototype.emptyFunction; this.options.onComplete = (function() { this.updateContent(); onComplete(this.transport); }).bind(this); this.request(url); }, updateContent: function() { var receiver = this.responseIsSuccess() ? this.containers.success : this.containers.failure; var match = new RegExp(Ajax.Updater.ScriptFragment, 'img'); var response = this.transport.responseText.replace(match, ''); var scripts = this.transport.responseText.match(match); if (receiver) { if (this.options.insertion) { new this.options.insertion(receiver, response); } else { receiver.innerHTML = response; } } if (this.responseIsSuccess()) { if (this.onComplete) setTimeout((function() {this.onComplete( this.transport)}).bind(this), 10); } if (this.options.evalScripts && scripts) { match = new RegExp(Ajax.Updater.ScriptFragment, 'im'); setTimeout((function() { for (var i = 0; i < scripts.length; i++) eval(scripts[i].match(match)[1]); }).bind(this), 10); } } }); Ajax.PeriodicalUpdater = Class.create(); Ajax.PeriodicalUpdater.prototype = (new Ajax.Base()).extend({ initialize: function(container, url, options) { this.setOptions(options); this.onComplete = this.options.onComplete; this.frequency = (this.options.frequency || 2); this.decay = 1; this.updater = {}; this.container = container; this.url = url; this.start(); }, start: function() { this.options.onComplete = this.updateComplete.bind(this); this.onTimerEvent(); }, stop: function() { this.updater.onComplete = undefined; clearTimeout(this.timer); (this.onComplete || Ajax.emptyFunction).apply(this, arguments); }, updateComplete: function(request) { if (this.options.decay) { this.decay = (request.responseText == this.lastText ? this.decay * this.options.decay : 1); this.lastText = request.responseText; } this.timer = setTimeout(this.onTimerEvent.bind(this), this.decay * this.frequency * 1000); }, onTimerEvent: function() { this.updater = new Ajax.Updater(this.container, this.url, this.options); } }); /*--------------------------------------------------------------------------*/ function ajaxload(div,url){ // alert($('ajax_shadow').style.height); // $(div).style.width = $(div).clientWidth + 'px'; // $(div).style.height = $(div).clientHeight + 'px'; $(div).innerHTML = $('ajax_shadow').innerHTML; new Ajax.Request(url, { method: 'get', // evalScripts: 'true', onSuccess: function(transport) { //$('survey_div').innerHTML = $('ajax_shadow').innerHTML; } , onComplete: function(transport) { // $(div).style.height = '0'; // $(div).style.width = '0'; var notice = $(div); notice.innerHTML = transport.responseText; eval_script(transport.responseText,false); } }); } function ajaxpost(div,url,params){ // alert($('ajax_shadow').style.height); // $(div).style.width = $(div).clientWidth + 'px'; // $(div).style.height = $(div).clientHeight + 'px'; $(div).innerHTML = $('ajax_shadow').innerHTML; new Ajax.Request(url, { method: 'post', // evalScripts: 'true', parameters: params, onSuccess: function(transport) { //$('survey_div').innerHTML = $('ajax_shadow').innerHTML; } , onComplete: function(transport) { // $(div).style.height = '0'; // $(div).style.width = '0'; var notice = $(div); notice.innerHTML = transport.responseText; eval_script(transport.responseText,false); } }); } function eval_script(str,hidden_scripts){ start = //gi; end = /<\/script\>/gi; script_tags = Array(); if(str.search(start) != -1){ //startpos = str.search(start); //endpos = str.search(end); //script = str.substring(startpos+8, endpos); //alert('match: '+str.match(start)); script_tags = str.match(start) str3 = new String(); for(var i = 0;i < script_tags.length;i++){ //alert(script_tags[i]); s = (str.search(script_tags[i])+script_tags[i].length); //str3 = str.substr(s,(str.length-s)); s2 = str.search(/<\/script>/); script = str.substring(s,s2); var EvalScript = document.createElement("SCRIPT"); EvalScript.text = script; EvalScript.id = "attached_script"; document.body.appendChild(EvalScript); } if(hidden_scripts == true){ str = str.replace(/*<\/script>/gi,''); } return str; }else{ return str; } } function $(obj){ return document.getElementById(obj); } function searchMe() { var key = $('key').value; ajaxload('main_div','products.php?key=' + encodeURIComponent(key)); } function add2card(vendor,id) { ajaxload('basket_div','basket.php?add=yes&vendor=' + vendor + '&id=' + id); } function del2card(vendor,id) { ajaxload('basket_div','basket.php?del=yes&vendor=' + vendor + '&id=' + id); } function sendtype() { params = ''; ostan = $('ostan').value; shahr = $('shahr').value; if(!ostan || !shahr) { alert('شهر و استان باید انتخاب شوند'); } else { i = 1; while(i<15) { if($('num_' + i)) { params += '&'; params += $('num_' + i).name; params += '='; params += $('num_' + i).value; } i++; } params += '&vendor=' + $('vendor').value; params = 'id_ostan=' + ostan + '&id_shahr=' + shahr + params; ajaxpost('main_div','send_type.php',params); } } function finish() { params = ''; ostan = $('ostan').value; shahr = $('shahr').value; if(!ostan || !shahr) { alert('شهر و استان باید انتخاب شوند'); } else { i = 1; while(i<15) { if($('num_' + i)) { params += '&'; params += $('num_' + i).name; params += '='; params += $('num_' + i).value; } i++; } params += '&vendor=' + $('vendor').value; params += '&name=' + $('name').value; params += '&lname=' + $('lname').value; params += '&phone=' + $('phone').value; params += '&cell=' + $('cell').value; params += '&email=' + $('email').value; params += '&zip=' + $('zip').value; params += '&address=' + $('address').value; params += '&comment=' + $('comment').value; params += '&ajax=yes'; params = 'id_ostan=' + ostan + '&id_shahr=' + shahr + params; ajaxpost('main_div','finish.php',params); } }