Object.extend=function(dest, source, replace) {for(prop in source) {if(replace==false && dest[prop]!=null) continue;dest[prop]=source[prop];};return dest;};Object.extend(Function.prototype, {apply: function(o, a) {var r, x="__fapply";if(typeof o!="object") o={};o[x]=this;var s="r=o."+x+"(";for(var i=0;i<a.length;i++) {if(i>0) s += ",";s += "a["+i+"]";};s += ");";eval(s);delete o[x];return r;},bind: function(o) {if(!Function.__objs) {Function.__objs=[];Function.__funcs=[];};var objId=o.__oid;if(!objId) Function.__objs[objId=o.__oid=Function.__objs.length]=o;var me=this;var funcId=me.__fid;if(!funcId) Function.__funcs[funcId=me.__fid=Function.__funcs.length]=me;if(!o.__closures) o.__closures=[];var closure=o.__closures[funcId];if(closure) return closure;o=null;me=null;return Function.__objs[objId].__closures[funcId]=function() {return Function.__funcs[funcId].apply(Function.__objs[objId], arguments);};}}, false);Object.extend(Array.prototype, {push: function(o) {this[this.length]=o;},addRange: function(items) {if(items.length>0) for(var i=0;i<items.length;i++) this.push(items[i]);},clear: function() {this.length=0;return this;},shift: function() {if(this.length==0) return null;var o=this[0];for(var i=0;i<this.length-1;i++)this[i]=this[i+1];this.length--;return o;}}, false);Object.extend(String.prototype, {trimLeft: function() {return this.replace(/^\s*/,"");},trimRight: function() {return this.replace(/\s*$/,"");},trim: function() {return this.trimRight().trimLeft();},endsWith: function(s) {if(this.length==0 || this.length < s.length) return false;return (this.substr(this.length - s.length)==s);},startsWith: function(s) {if(this.length==0 || this.length < s.length) return false;return (this.substr(0, s.length)==s);},split: function(c) {var a=[];if(this.length==0) return a;var p=0;for(var i=0;i<this.length;i++) {if(this.charAt(i)==c) {a.push(this.substring(p, i));p=++i;}};a.push(s.substr(p));return a;}}, false);Object.extend(String, {format: function(s) {for(var i=1;i<arguments.length;i++) s=s.replace("{"+(i -1)+"}", arguments[i]);return s;},isNullOrEmpty: function(s) {if(s==null || s.length==0) return true;return false;}}, false);if(typeof addEvent=="undefined") addEvent=function(o, evType, f, capture) {if(o==null) return false;if(o.addEventListener) {o.addEventListener(evType, f, capture);return true;} else if (o.attachEvent) {var r=o.attachEvent("on"+evType, f);return r;} else {try{ o["on"+evType]=f;}catch(e){}}};if(typeof removeEvent=="undefined") removeEvent=function(o, evType, f, capture) {if(o==null) return false;if(o.removeEventListener) {o.removeEventListener(evType, f, capture);return true;} else if (o.detachEvent) {o.detachEvent("on"+evType, f);} else {try{ o["on"+evType]=function(){};}catch(e){}}};Object.extend(Function.prototype, {getArguments: function() {var args=[];for(var i=0;i<this.arguments.length;i++) args.push(this.arguments[i]);return args;}}, false);var MS={"Browser":{}};Object.extend(MS.Browser, {isIE: navigator.userAgent.indexOf('MSIE')!=-1,isFirefox: navigator.userAgent.indexOf('Firefox')!=-1,isOpera: window.opera!=null}, false);var AjaxPro={};AjaxPro.IFrameXmlHttp=function() {};AjaxPro.IFrameXmlHttp.prototype={onreadystatechange: null,headers: [],method: "POST",url: null,async: true,iframe: null,status: 0,readyState: 0,responseText: null,abort: function() {},readystatechanged: function() {var doc=this.iframe.contentDocument||this.iframe.document;if(doc!=null && doc.readyState=="complete" && doc.body!=null && doc.body.res!=null) {this.status=200;this.statusText="OK";this.readyState=4;this.responseText=doc.body.res;this.onreadystatechange();return;}setTimeout(this.readystatechanged.bind(this),10);},open: function(method,url,async) {if(async==false) {alert("Synchronous call using IFrameXMLHttp is not supported.");return;}if(this.iframe==null) {var iframeID="hans";if (document.createElement && document.documentElement && (window.opera||navigator.userAgent.indexOf('MSIE 5.0')==-1)){var ifr=document.createElement('iframe');ifr.setAttribute('id',iframeID);ifr.style.visibility='hidden';ifr.style.position='absolute';ifr.style.width=ifr.style.height=ifr.borderWidth='0px';this.iframe=document.getElementsByTagName('body')[0].appendChild(ifr);}else if (document.body && document.body.insertAdjacentHTML){document.body.insertAdjacentHTML('beforeEnd','<iframe name="'+iframeID+'" id="'+iframeID+'" style="border:1px solid black;display:none"></iframe>');}if (window.frames && window.frames[iframeID]) this.iframe=window.frames[iframeID];this.iframe.name=iframeID;this.iframe.document.open();this.iframe.document.write("<html><body></body></html>");this.iframe.document.close();}this.method=method;this.url=url;this.async=async;},setRequestHeader: function(name,value) {for(var i=0;i<this.headers.length;i++) {if(this.headers[i].name==name) {this.headers[i].value=value;return;}}this.headers.push({"name":name,"value":value});},getResponseHeader: function(name,value) {return null;},addInput: function(doc,form,name,value) {var ele;var tag="input";if(value.indexOf("\n") >= 0) tag="textarea";if(doc.all) {ele=doc.createElement("<"+tag+" name=\""+name+"\" />");}else{ele=doc.createElement(tag);ele.setAttribute("name",name);}ele.setAttribute("value",value);form.appendChild(ele);ele=null;},send: function(data) {if(this.iframe==null) {return;}var doc=this.iframe.contentDocument||this.iframe.document;var form=doc.createElement("form");doc.body.appendChild(form);form.setAttribute("action",this.url);form.setAttribute("method",this.method);form.setAttribute("enctype","application/x-www-form-urlencoded");for(var i=0;i<this.headers.length;i++) {switch(this.headers[i].name.toLowerCase()) {case "content-length":case "accept-encoding":case "content-type":break;default:this.addInput(doc,form,this.headers[i].name,this.headers[i].value);}}this.addInput(doc,form,"data",data);form.submit();setTimeout(this.readystatechanged.bind(this),1);}};var progids=["Msxml2.XMLHTTP","Microsoft.XMLHTTP"];var _progid=null;if(typeof ActiveXObject!="undefined") {var ie7xmlhttp=false;if(typeof XMLHttpRequest=="object") {try{ var o=new XMLHttpRequest();ie7xmlhttp=true;}catch(e){}}if(typeof XMLHttpRequest=="undefined"||!ie7xmlhttp) {XMLHttpRequest=function() {var xmlHttp=null;if(!AjaxPro.noActiveX) {if(_progid) return new ActiveXObject(_progid);for(var i=0;i<progids.length && xmlHttp==null;i++) {try {xmlHttp=new ActiveXObject(progids[i]);progid=progids[i];}catch(e){}}}if(xmlHttp==null && MS.Browser.isIE) {return new AjaxPro.IFrameXmlHttp();}return xmlHttp;};}}Object.extend(AjaxPro,{noOperation: function() {},onLoading: function() {},onError: function() {},onTimeout: function() {},onStateChanged: function() {},cryptProvider: null,queue: null,token: "",version: "6.7.11.1",ID: "AjaxPro",noActiveX: false,timeoutPeriod: 10*1000,queue: null,toJSON: function(o) {if(o==null) return "null";switch(o.constructor) {case String:var v=[];for(var i=0;i<o.length;i++) {var c=o.charAt(i);if(c >= " ") {if(c=="\\"||c=='"') v.push("\\");v.push(c);} else {switch(c) {case "\n": v.push("\\n");break;case "\r": v.push("\\r");break;case "\b": v.push("\\b");break;case "\f": v.push("\\f");break;case "\t": v.push("\\t");break;default:v.push("\\u00");v.push(c.charCodeAt().toString(16));}}}return '"'+v.join('')+'"';case Array:var v=[];for(var i=0;i<o.length;i++) v.push(AjaxPro.toJSON(o[i])) ;return "["+v.join(",")+"]";case Number:return isFinite(o) ? o.toString() : AjaxPro.toJSON(null);case Boolean:return o.toString();case Date:var d=new Object();d.__type="System.DateTime";d.Year=o.getUTCFullYear();d.Month=o.getUTCMonth() +1;d.Day=o.getUTCDate();d.Hour=o.getUTCHours();d.Minute=o.getUTCMinutes();d.Second=o.getUTCSeconds();d.Millisecond=o.getUTCMilliseconds();return AjaxPro.toJSON(d);default:if(typeof o.toJSON=="function") return o.toJSON();if(typeof o=="object") {var v=[];for(attr in o) {if(typeof o[attr]!="function") v.push('"'+attr+'":'+AjaxPro.toJSON(o[attr]));}if(v.length>0) return "{"+v.join(",")+"}";return "{}";}return o.toString();}},dispose: function() {if(AjaxPro.queue!=null) {AjaxPro.queue.dispose();}}},false);addEvent(window,"unload",AjaxPro.dispose);AjaxPro.Request=function(url) {this.url=url;this.xmlHttp=null;};AjaxPro.Request.prototype={url: null,callback: null,onLoading: AjaxPro.noOperation,onError: AjaxPro.noOperation,onTimeout: AjaxPro.noOperation,onStateChanged: AjaxPro.noOperation,args: null,context: null,isRunning: false,abort: function() {if(this.timeoutTimer!=null) clearTimeout(this.timeoutTimer);if(this.xmlHttp) {this.xmlHttp.onreadystatechange=AjaxPro.noOperation;this.xmlHttp.abort();}if(this.isRunning) {this.isRunning=false;this.onLoading(false);}},dispose: function() {this.abort();},getEmptyRes: function() {return {error: null,value: null,request: {method:this.method,args:this.args},context: this.context,duration: this.duration};	},endRequest: function(res) {this.abort();if(res.error!=null) this.onError(res.error,this);if(typeof this.callback=="function") this.callback(res,this);},mozerror: function() {if(this.timeoutTimer!=null) clearTimeout(this.timeoutTimer);var res=this.getEmptyRes();res.error={Message:"Unknown",Type:"ConnectFailure",Status:0};this.endRequest(res);},doStateChange: function() {this.onStateChanged(this.xmlHttp.readyState,this);if(this.xmlHttp.readyState!=4||!this.isRunning) return;this.duration=new Date().getTime() - this.__start;if(this.timeoutTimer!=null) clearTimeout(this.timeoutTimer);var res=this.getEmptyRes();if(this.xmlHttp.status==200 && this.xmlHttp.statusText=="OK") {res=this.createResponse(res);} else {res=this.createResponse(res,true);res.error={Message:this.xmlHttp.statusText,Type:"ConnectFailure",Status:this.xmlHttp.status};}this.endRequest(res);},createResponse: function(r,noContent) {if(!noContent) {var responseText=new String(this.xmlHttp.responseText);if(AjaxPro.cryptProvider!=null && typeof AjaxPro.cryptProvider=="function") responseText=AjaxPro.cryptProvider.decrypt(responseText);if(this.xmlHttp.getResponseHeader("Content-Type")=="text/xml") r.value=this.xmlHttp.responseXML;else if(responseText!=null && responseText.trim().length>0) {r.json=responseText;eval("r.value="+responseText+"*/");}} return r;},timeout: function() {this.duration=new Date().getTime() - this.__start;var r=this.onTimeout(this.duration,this);if(typeof r=="undefined"||r!=false) {this.abort();} else {this.timeoutTimer=setTimeout(this.timeout.bind(this),AjaxPro.timeoutPeriod);}},invoke: function(method,args,callback,context) {this.__start=new Date().getTime();if(this.xmlHttp==null) this.xmlHttp=new XMLHttpRequest();this.isRunning=true;this.method=method;this.args=args;this.callback=callback;this.context=context;var async=typeof callback=="function" && callback!=AjaxPro.noOperation;if(async) {if(MS.Browser.isIE) this.xmlHttp.onreadystatechange=this.doStateChange.bind(this);else {this.xmlHttp.onload=this.doStateChange.bind(this);this.xmlHttp.onerror=this.mozerror.bind(this);}this.onLoading(true);}var json=AjaxPro.toJSON(args)+"";if(AjaxPro.cryptProvider!=null) json=AjaxPro.cryptProvider.encrypt(json);this.xmlHttp.open("POST",this.url,async);this.xmlHttp.setRequestHeader("Content-Type","text/plain;charset=utf-8");this.xmlHttp.setRequestHeader("X-"+AjaxPro.ID+"-Method",method);if(AjaxPro.token!=null && AjaxPro.token.length>0) this.xmlHttp.setRequestHeader("X-"+AjaxPro.ID+"-Token",AjaxPro.token);if(!MS.Browser.isIE) {this.xmlHttp.setRequestHeader("Connection","close");		}this.timeoutTimer=setTimeout(this.timeout.bind(this),AjaxPro.timeoutPeriod);try{ this.xmlHttp.send(json);}catch(e){};if(!async) {return this.createResponse({error: null,value: null});}return true;	}};AjaxPro.RequestQueue=function(conc) {this.queue=[];this.requests=[];this.timer=null;if(isNaN(conc)) conc=2;for(var i=0;i<conc;i++) {	this.requests[i]=new AjaxPro.Request();this.requests[i].callback=function(res) {var r=res.context;res.context=r[3][1];r[3][0](res,this);};this.requests[i].callbackHandle=this.requests[i].callback.bind(this.requests[i]);}};AjaxPro.RequestQueue.prototype={process: function() {this.timer=null;if(this.queue.length==0) return;for(var i=0;i<this.requests.length && this.queue.length>0;i++) {if(this.requests[i].isRunning==false) {var r=this.queue.shift();this.requests[i].url=r[0];this.requests[i].onLoading=r[3].length >2 && r[3][2]!=null && typeof r[3][2]=="function" ? r[3][2] : AjaxPro.onLoading;this.requests[i].onError=r[3].length >3 && r[3][3]!=null && typeof r[3][3]=="function" ? r[3][3] : AjaxPro.onError;this.requests[i].onTimeout=r[3].length >4 && r[3][4]!=null && typeof r[3][4]=="function" ? r[3][4] : AjaxPro.onTimeout;this.requests[i].onStateChanged=r[3].length >5 && r[3][5]!=null && typeof r[3][5]=="function" ? r[3][5] : AjaxPro.onStateChanged;this.requests[i].invoke(r[1],r[2],this.requests[i].callbackHandle,r);r=null;}}if(this.queue.length>0 && this.timer==null) {this.timer=setTimeout(this.process.bind(this),10);}},add: function(url,method,args,e) {this.queue.push([url,method,args,e]);if(this.timer==null) {this.timer=setTimeout(this.process.bind(this),1);}},abort: function() {this.queue.length=0;if (this.timer!=null) {clearTimeout(this.timer);}this.timer=null;for(var i=0;i<this.requests.length;i++) {if(this.requests[i].isRunning==true) {this.requests[i].abort();}}},dispose: function() {for(var i=0;i<this.requests.length;i++) {var r=this.requests[i];r.dispose();}this.requests.clear();}};AjaxPro.queue=new AjaxPro.RequestQueue(2);AjaxPro.AjaxClass=function(url) {this.url=url;};AjaxPro.AjaxClass.prototype={invoke: function(method,args,e) {if(e!=null) {if(e.length!=6) for(;e.length<6;) e.push(null);if(e[0]!=null && typeof e[0]=="function") {return AjaxPro.queue.add(this.url,method,args,e);}}var r=new AjaxPro.Request();r.url=this.url;return r.invoke(method,args);}};if(typeof Ajax=="undefined") Ajax={};if(typeof Ajax.Web=="undefined") Ajax.Web={};Ajax.Web.NameValueCollection=function(items) {this.__type="System.Collections.Specialized.NameValueCollection";this.keys=[];this.values=[];if(items!=null && !isNaN(items.length)) {for(var i=0;i<items.length;i++) this.add(items[i][0],items[i][1]);}};Object.extend(Ajax.Web.NameValueCollection.prototype,{add: function(k,v) {if(k==null||k.constructor!=String||v==null||v.constructor!=String) return -1;this.keys.push(k);this.values.push(v);return this.values.length -1;},containsKey: function(key) {for(var i=0;i<this.keys.length;i++)if(this.keys[i]==key) return true;return false;},getKeys: function() {return this.keys;},getValue: function(k) {for(var i=0;i<this.keys.length && i<this.values.length;i++) if(this.keys[i]==k) return this.values[i];return null;},setValue: function(k,v) {if(k==null||k.constructor!=String||v==null||v.constructor!=String) return -1;for(var i=0;i<this.keys.length && i<this.values.length;i++) {if(this.keys[i]==k) this.values[i]=v;return i;}return this.add(k,v);},toJSON: function() {return AjaxPro.toJSON({__type:this.__type,keys:this.keys,values:this.values});}},true);if(typeof Ajax=="undefined") Ajax={};if(typeof Ajax.Web=="undefined") Ajax.Web={};Ajax.Web.DataSet=function(t) {this.__type="System.Data.DataSet,System.Data";this.Tables=[];this.addTable=function(t) {this.Tables.push(t);};if(t!=null) {for(var i=0;i<t.length;i++) {this.addTable(t[i]);}}};if(typeof Ajax=="undefined") Ajax={};if(typeof Ajax.Web=="undefined") Ajax.Web={};Ajax.Web.DataTable=function(c,r) {this.__type="System.Data.DataTable,System.Data";this.Columns=[];this.Rows=[];this.addColumn=function(name,type) {this.Columns.push({Name:name,__type:type});};this.toJSON=function() {var dt={};dt.Columns=[];for(var i=0;i<this.Columns.length;i++) dt.Columns.push([this.Columns[i].Name,this.Columns[i].__type]);dt.Rows=[];for(var i=0;i<this.Rows.length;i++) {var row=[];for(var j=0;j<this.Columns.length;j++) row.push(this.Rows[i][this.Columns[j].Name]);dt.Rows.push(row);};return AjaxPro.toJSON(dt);};this.addRow=function(row) {this.Rows.push(row);};if(c!=null) {for(var i=0;i<c.length;i++) this.addColumn(c[i][0],c[i][1]);}if(r!=null) {for(var i=0;i<r.length;i++) {var row={};for(var c=0;c<this.Columns.length && c<r[i].length;c++) row[this.Columns[c].Name]=r[i][c];this.addRow(row);}}};if(typeof Ajax=="undefined") Ajax={};if(typeof Ajax.Web=="undefined") Ajax.Web={};Ajax.Web.Profile=function() {this.toJSON=function() {throw "Ajax.Web.Profile cannot be converted to JSON format.";};this.setProperty_callback=function(res) {};this.setProperty=function(name,object) {this[name]=object;AjaxPro.Services.Profile.SetProfile({name:o},this.setProperty_callback.bind(this));}};if(typeof Ajax=="undefined") Ajax={};if(typeof Ajax.Web=="undefined") Ajax.Web={};Ajax.Web.Dictionary=function(type,items) {this.__type=type;this.keys=[];this.values=[];if(items!=null && !isNaN(items.length)) {for(var i=0;i<items.length;i++) this.add(items[i][0],items[i][1]);}};Object.extend(Ajax.Web.Dictionary.prototype,{add: function(k,v) {this.keys.push(k);this.values.push(v);return this.values.length -1;},containsKey: function(key) {for(var i=0;i<this.keys.length;i++) if(this.keys[i]==key) return true;return false;},getKeys: function() {return this.keys;},getValue: function(key) {for(var i=0;i<this.keys.length && i<this.values.length;i++)if(this.keys[i]==key) return this.values[i];return null;},setValue: function(k,v) {for(var i=0;i<this.keys.length && i<this.values.length;i++) {if(this.keys[i]==k) this.values[i]=v;return i;}return this.add(k,v);},toJSON: function() {return AjaxPro.toJSON({__type:this.__type,keys:this.keys,values:this.values});}},true);