var mybic_failed_requests=0;function XMLHTTP(server_url,readyStateFunction)
{this.version='0.7.0';this.server_url=FRONT_URL+'ajaxHandler.php';this.async=true;this.debug=0;this.throttle=1;this.method="POST";this.req=null;this.headers=new Array();this.callBack='';this.format="JSON";this.net_down_func=this.down;this.abort_timeout=-1;this.failed_threshold=10;this.ignoreCall=0;this.stopRequest=0;this.readyStateFunction=(readyStateFunction)?readyStateFunction:this.responseHandler;this.debugID=0;this.errors=new Array();this.queue=new Array();this.queue_in_process=0;this.currentCallIgnore=0;this.readySateTimer='';this._service=null;this._iIndex=0;this._vars=new Array();this.SetService=SetService;this.AddParam=AddParam;this.ResetParams=ResetParams;this.inUse=false;}
function SetService(sService){if(!this.inUse){this.inUse=true;this._service=sService;return true;}
return false;}
function AddParam(sParam,oValue){this._vars[this._iIndex]=sParam+'|'+oValue;this._iIndex++;}
function ResetParams(){this._vars=new Array();this._iIndex=0;}
XMLHTTP.prototype.getXMLHTTP=function()
{if(window.XMLHttpRequest){this.req=new XMLHttpRequest();}
else if(window.ActiveXObject){this.req=new ActiveXObject("Microsoft.XMLHTTP");}else{if(this.debug==1){this.showDebug("<BR>FATAL ERROR: Could not create XMLHTTPRequest Object!<BR>");}
return false;}
return this.req;}
XMLHTTP.prototype.call=function(userCallback,queue_request)
{if(this._service==null||this._service=='')
{return;}
var queryVars="action=ajax"+"&service="+this._service;for(var i=0;i<this._vars.length;i++){if(i==0){queryVars+="&vars=";}
queryVars+=this._vars[i]+"$$"}
if(mybic_failed_requests>=this.failed_threshold){this.net_down_func('disable');return false;}else{var currentVars;var callback;this.fullUrl='';if(this.throttle==1&&queue_request!='queue'||this.stopRequest==1){this.add2Queue(queryVars,userCallback);}
if(this.queue_in_process==0){if(!this.getXMLHTTP())
{return false;}
if(this.throttle==1){this.queue_in_process=1;var currentCall=this.queue.shift();currentVars=currentCall.queryVars;callback=currentCall.userCallback;this.format=currentCall.format;this.method=currentCall.method;this.abort_timeout=currentCall.abortTimeout;this.currentCallIgnore=currentCall.ignoreCall;this.async=currentCall.async;}else{currentVars=queryVars;callback=userCallback;var ignoreCall=0;}
this.callBack=callback;if(this.format!='JSON'){currentVars=currentVars+'&json=false';}
this.full_url=(this.method=="POST")?this.server_url:this.server_url+'?'+currentVars;if(this.debug==1&&this.currentCallIgnore!=1){try{var matches=currentVars.match(/action=(\w+)&?/);this.showDebug('new','MYBIC - CALLING: '+matches[1]);this.showDebug("Server Page: "+this.server_url+"<BR>HTTP Method: "+this.method+"<BR>Encoding Format: "+this.format+"<BR>Query String: "+currentVars+"<BR>");}catch(e){}}
this.req.open(this.method,this.full_url,this.async);if(this.headers){for(var i in this.headers){if(i!=''&&(this.headers[i]instanceof String)){try{this.req.setRequestHeader(i,this.headers[i]);if(this.debug==1){this.showDebug('Setting Custom Header: '+this.headers[i]+'<br>');}}catch(e){}}}}
this.req.setRequestHeader('asdasd','dasd asdasdasd');if(this.abort_timeout!=-1){this.end_timer=setInterval('ajaxObj.endCall()',this.abort_timeout);}
if(this.method=='POST'){this.req.setRequestHeader('Content-Type','application/x-www-form-urlencoded');this.request=currentVars;this.req.send(currentVars);}else{this.req.send(null);}
if(this.readyStateFunction){this.readyStateTimer=window.setInterval(function(){if(ajaxObj.req&&ajaxObj.req.readyState==4){window.clearInterval(ajaxObj.readyStateTimer);ajaxObj.readyStateTimer=null;ajaxObj.responseHandler();}},50);}}}
this.inUse=false;}
XMLHTTP.prototype.responseHandler=function()
{if(ajaxObj.req)
{try
{if(ajaxObj.req.readyState==4){if(ajaxObj.req.status&&ajaxObj.req.status==200){if(ajaxObj.req.responseText.indexOf('ajax_msg_failed')!=-1){ajaxObj.showDebug("Fatal Error: mybic_server sent back ajax_msg_failed! - MSG: "+ajaxObj.req.responseText+"<br/>");if(ajaxObj.req.responseText.indexOf('notauth')!=-1){if(ajaxObj.abort_timeout!=-1){clearInterval(ajaxObj.end_timer);}
ajaxObj.callBack('notauthorized');}else{ajaxObj.callBack(false);}}else{if(ajaxObj.abort_timeout!=-1){clearInterval(ajaxObj.end_timer);}
if(ajaxObj.format=="JSON"){try{var myObject=JSON.parse(ajaxObj.req.responseText);if(document.getElementById(ajaxObj.callBack)){document.getElementById(ajaxObj.callBack).innerHTML=myObject;}else{ajaxObj.callBack(myObject);}}catch(e){if(document.getElementById(ajaxObj.callBack)){}else{ajaxObj.callBack(false);}}}else if(ajaxObj.format=="XML"){ajaxObj.callBack(ajaxObj.req.responseXML);}else{if(document.getElementById(ajaxObj.callBack)){document.getElementById(ajaxObj.callBack).innerHTML=ajaxObj.req.responseText;}else{ajaxObj.callBack(ajaxObj.req.responseText);}}}
mybic_failed_requests=0;}else{try{ajaxObj.showDebug("Fatal Error: MSG: "+ajaxObj.req.responseText+" StatusText: "+ajaxObj.req.statusText+"<br/>");}catch(e){}
ajaxObj.endCall();}
try{if(ajaxObj.debug==1&&ajaxObj.currentCallIgnore!=1){var str=ajaxObj.req.responseText.replace(/(\<)/gi,'&lt;');var str=str.replace(/(\>)/gi,'&gt;');ajaxObj.showDebug("HTTP Server Response:<br/> "+str+"<br>");}}catch(e){}
ajaxObj.restoreDefaults();ajaxObj.queue_in_process=0;ajaxObj.req=null;if(ajaxObj.queue.length>0){ajaxObj.call('','queue');}}}catch(e){}}}
XMLHTTP.prototype.loadScript=function(url,remove)
{try{var scripts=document.getElementsByTagName('script');s_len=scripts.length;for(var i=0;i<s_len;i++){var reg=new RegExp(url+"$");if(reg.test(scripts[i].src)){var p2=scripts[i];p2.parentNode.removeChild(p2);break;}}
if(remove!='remove'){newScript=document.createElement("script");newScript.setAttribute("type","text/javascript");newScript.setAttribute("src",url);document.getElementsByTagName('head')[0].appendChild(newScript);}}catch(e){this.showDebug("MyBIC - loadScript failed URL: "+url+" ErrName: "+e.name+" Msg: "+e.message);}}
XMLHTTP.prototype.add2Queue=function(queryVars,userCallback)
{var addAjax=new Array();addAjax['queryVars']=queryVars;addAjax['userCallback']=userCallback;addAjax['ignoreCall']=this.ignoreCall;addAjax['abortTimeout']=this.abort_timeout;addAjax['format']=this.format;addAjax['method']=this.method;addAjax['async']=this.async;this.ignoreCall=0;this.queue.push(addAjax);}
XMLHTTP.prototype.restoreDefaults=function()
{this.method="POST";this.format="JSON";this.callback="";this.abort_timeout=5000;this.failed_threshold=3;this.async=true;this._iIndex=0;this._vars=new Array();}
XMLHTTP.prototype.getForm=function(formid)
{var formobj=document.getElementById(formid);var fields=new Array();var form_len=formobj.elements.length;for(var x=0;x<form_len;x++){switch(formobj.elements[x].type){case'select-one':fields.push(encodeURIComponent(formobj.elements[x].name)+'='+encodeURIComponent(formobj.elements[x].options[formobj.elements[x].selectedIndex].value));break;case'select-multiple':var obj=formobj.elements[x];for(var y=0;y<formobj.elements[x].options.length;y++){if(formobj.elements[x].options[y].selected){if(formobj.elements[x].options[y].value==''){fields.push(encodeURIComponent(formobj.elements[x].name)+'='+encodeURIComponent(formobj.elements[x].options[y].text));}else{fields.push(encodeURIComponent(formobj.elements[x].name)+'='+encodeURIComponent(formobj.elements[x].options[y].value));}}}
break;case'radio':if(formobj.elements[x].checked){fields.push(encodeURIComponent(formobj.elements[x].name)+'='+encodeURIComponent(formobj.elements[x].value));}
break;case'checkbox':if(formobj.elements[x].checked){fields.push(encodeURIComponent(formobj.elements[x].name)+'='+encodeURIComponent(formobj.elements[x].value));}
break;default:fields.push(encodeURIComponent(formobj.elements[x].name)+'='+encodeURIComponent(formobj.elements[x].value));break;}}
var new_qstring='&'+fields.join('&');return new_qstring;}
XMLHTTP.prototype.endCall=function()
{try{ajaxObj.net_down_func();ajaxObj.req.abort();ajaxObj.req=null;clearInterval(ajaxObj.end_timer);clearInterval(ajaxObj.readyStateTimer);mybic_failed_requests++;ajaxObj.queue_in_process=0;if(ajaxObj.queue.length>0){ajaxObj.call('','','queue');}
if(ajaxObj.debug==1){ajaxObj.showDebug("Request Failed - Network Down! Current Failed Attempts: "+mybic_failed_requests+"<br>");}}catch(e){clearInterval(ajaxObj.end_timer);ajaxObj.net_down_func('disable');}
ajaxObj.req=null;}
XMLHTTP.prototype.loadCSS=function(url)
{try{var scripts=document.getElementsByTagName('link');s_len=scripts.length;if(s_len>0){for(var i=0;i<s_len;i++){var reg=new RegExp(url+"$");if(reg.test(scripts[i].href)){var p2=scripts[i];p2.parentNode.removeChild(p2);break;}}}
newScript=document.createElement("link");newScript.setAttribute("type","text/css");newScript.setAttribute("rel","stylesheet");newScript.setAttribute("href",url);document.getElementsByTagName('head')[0].appendChild(newScript);}catch(e){if(this.debug==1){this.showDebug("MyBIC - loadCSS failed URL: "+url+" ErrName: "+e.name+" Msg: "+e.message)};}}
XMLHTTP.prototype.down=function(status)
{}
XMLHTTP.prototype.showDebug=function(msg,label,expand)
{if(ajaxObj.debug==1){if(!document.getElementById('mybic_debug')){var errs=document.createElement('div');errs.id='mybic_errs';var deb=document.createElement('div');deb.id='mybic_debug';deb.style.border="thick solid black";deb.style.backgroundColor="#eeeeee";deb.style.padding="10px";deb.style.margin='75px 10px 10px 10px';deb.style.width='90%';deb.style.position='absolute';deb.style.zIndex='999';deb.innerHTML+='MyBic Debugger: <a href="#" onclick="document.getElementById(\'mybic_errs\').style.display = (document.getElementById(\'mybic_errs\').style.display==\'none\') ? \'\':\'none\'; return false;" >hide/show me!</a>';deb.innerHTML+='&nbsp;&nbsp;&nbsp;&nbsp;<a href="#" onclick="document.getElementById(\'mybic_errs\').innerHTML = \'\'; return false;">Clear</a>';deb.innerHTML+='&nbsp;&nbsp;&nbsp;&nbsp;<a href="#" onclick="ajaxObj.debug_expand(\'block\');return false;">Expand All</a>';deb.innerHTML+='&nbsp;&nbsp;&nbsp;&nbsp;<a href="#" onclick="ajaxObj.debug_expand(\'none\'); return false;">Contract All</a><br><br>';deb.appendChild(errs);if(document.body){document.body.appendChild(deb);}else{document.lastChild.appendChild(deb);}}
var deb=document.getElementById('mybic_errs');if(msg=='new'){ajaxObj.debugID++;var dimg='<a style="color:white;font-size:1.1em;text-decoration:none" href="#" onclick="ajaxObj.debug_expand(this);return false;">+</a>';deb.innerHTML+='<div id="mybiclabel_'+ajaxObj.debugID+'" style="display:block;border:thin solid #999999;padding:2px;background-color:#cccccc;">'+dimg+' label'+ajaxObj.debugID+': '+label+'</div>';}else{deb.innerHTML+='<div class="mybic_debug'+ajaxObj.debugID+'" style="padding:5px;display:none; border:thin solid white;">'+msg+'</div>';}}}
XMLHTTP.prototype.debug_expand=function(el)
{var deb=document.getElementById('mybic_errs');var deb_len=deb.childNodes.length;if(el=='none'||el=='block'){var label="mybic_debug";var links=deb.getElementsByTagName('a');var links_len=links.length;for(var q=0;q<links_len;q++){links[q].innerHTML=(el=='none')?'+':'>';}}else{var label=el.parentNode.id;label=label.split('_');label="mybic_debug"+label[1];}
for(var i=0;i<deb_len;i++){try{if(deb.childNodes[i].className.match(new RegExp("(^"+label+".*$)"))){if(el=='none'||el=='block'){deb.childNodes[i].style.display=el;}else{if(deb.childNodes[i].style.display=='block'){el.innerHTML='+';deb.childNodes[i].style.display='none';}else{el.innerHTML='>';deb.childNodes[i].style.display='block';}}}}catch(e){}}}
XMLHTTP.prototype.restart=function()
{ajaxObj.stopRequest=0;ajaxObj.call('','','queue');}
var JSON=function(){var m={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},s={'boolean':function(x){return String(x);},number:function(x){return isFinite(x)?String(x):'null';},string:function(x){if(/["\\\x00-\x1f]/.test(x)){x=x.replace(/([\x00-\x1f\\"])/g,function(a,b){var c=m[b];if(c){return c;}
c=b.charCodeAt();return'\\u00'+
Math.floor(c/16).toString(16)+
(c%16).toString(16);});}
return'"'+x+'"';},object:function(x){if(x){var a=[],b,f,i,l,v;if(x instanceof Array){a[0]='[';l=x.length;for(i=0;i<l;i+=1){v=x[i];f=s[typeof v];if(f){v=f(v);if(typeof v=='string'){if(b){a[a.length]=',';}
a[a.length]=v;b=true;}}}
a[a.length]=']';}else if(x instanceof Object){a[0]='{';for(i in x){v=x[i];f=s[typeof v];if(f){v=f(v);if(typeof v=='string'){if(b){a[a.length]=',';}
a.push(s.string(i),':',v);b=true;}}}
a[a.length]='}';}else{return;}
return a.join('');}
return'null';}};return{copyright:'(c)2005 JSON.org',license:'http://www.JSON.org/license.html',stringify:function(v){var f=s[typeof v];if(f){v=f(v);if(typeof v=='string'){return v;}}
return null;},parse:function(text){try{return!(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(text.replace(/"(\\.|[^"\\])*"/g,'')))&&eval('('+text+')');}catch(e){return false;}}};}();