function JPSpan_Serialize(_1){
this.Encoder=_1;
this.typeMap=new Object();
}
JPSpan_Serialize.prototype={typeMap:null,addType:function(_2,_3){
this.typeMap[_2]=_3;
},serialize:function(v){
switch(typeof v){
case "object":
if(v===null){
return this.Encoder.encodeNull();
}
var c=v.constructor;
if(c!=null){
if(c==Array){
return this.Encoder.encodeArray(v,this);
}else{
var _6=c.toString().match(/\s*function (.*)\(/);
if(_6==null){
return this.Encoder.encodeObject(v,this,"JPSpan_Object");
}
var _7=_6[1].replace(/\s/,"");
if(this.typeMap[_7]){
return this.typeMap[_7](v,this,_7);
}else{
var _6=_7.match(/Error/);
if(_6==null){
return this.Encoder.encodeObject(v,this,"JPSpan_Object");
}else{
return this.Encoder.encodeError(v,this,"JPSpan_Error");
}
}
}
}else{
return this.Encoder.encodeNull();
}
break;
case "string":
return this.Encoder.encodeString(v);
break;
case "number":
if(Math.round(v)==v){
return this.Encoder.encodeInteger(v);
}else{
return this.Encoder.encodeDouble(v);
}
break;
case "boolean":
if(v==true){
return this.Encoder.encodeTrue();
}else{
return this.Encoder.encodeFalse();
}
break;
default:
return this.Encoder.encodeNull();
break;
}
}};
function JPSpan_Encode_Xml(){
this.Serialize=new JPSpan_Serialize(this);
}
JPSpan_Encode_Xml.prototype={contentType:"text/xml; charset=UTF-8",encode:function(_8){
return "<?xml version=\"1.0\" encoding=\"UTF-8\"?><r>"+this.Serialize.serialize(_8)+"</r>";
},encodeInteger:function(v){
return "<i v=\""+v+"\"/>";
},encodeDouble:function(v){
return "<d v=\""+v+"\"/>";
},encodeString:function(v){
return "<s>"+v.replace(/&/g,"&amp;").replace(/</g,"&lt;")+"</s>";
},encodeNull:function(){
return "<n/>";
},encodeTrue:function(){
return "<b v=\"1\"/>";
},encodeFalse:function(){
return "<b v=\"0\"/>";
},encodeArray:function(v,_d){
var _e=new Array();
var a="";
for(var i=0;i<v.length;i++){
_e[i]=true;
a+="<e k=\""+i+"\">"+_d.serialize(v[i])+"</e>";
}
for(var _11 in v){
if(_e[_11]){
continue;
}
a+="<e k=\""+_11+"\">"+_d.serialize(v[_11])+"</e>";
}
return "<a>"+a+"</a>";
},encodeObject:function(v,_13,_14){
var o="";
for(var _16 in v){
o+="<e k=\""+_16+"\">"+_13.serialize(v[_16])+"</e>";
}
return "<o c=\""+_14.toLowerCase()+"\">"+o+"</o>";
},encodeError:function(v,_18,_19){
var e=new Object();
if(!v.name){
e.name=_19;
e.message=v.description;
}else{
e.name=v.name;
e.message=v.message;
}
return this.encodeObject(e,_18,_19);
}};
function JPSpan_Client_Error(e,_1c){
e.name="Client_Error";
e.code=_1c;
return e;
}
function JPSpan_HttpClient(){
}
JPSpan_HttpClient.prototype={xmlhttp:null,userhandler:null,timeout_id:null,init:function(){
Debug("JPSpan_HttpClient.init");
try{
this.xmlhttp=new XMLHttpRequest();
}
catch(e){
Debug("Exception on XMLHttpRequest",e.name,e.message);
var _1d=new Array("MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP");
var _1e=false;
for(var i=0;i<_1d.length&&!_1e;i++){
try{
this.xmlhttp=new ActiveXObject(_1d[i]);
_1e=true;
}
catch(e){
Debug("Exception on "+_1d[i],e.name,e.message);
}
}
if(!_1e){
throw JPSpan_Client_Error(new Error("Unable to create XMLHttpRequest."),1000);
}
}
},call:function(_20){
if(!this.xmlhttp){
this.init();
}
if(this.callInProgress()){
throw JPSpan_Client_Error(new Error("Call in progress"),1001);
}
_20.type="sync";
_20.prepare(this.xmlhttp);
this.xmlhttp.setRequestHeader("Accept-Charset","UTF-8");
_20.send();
if(this.xmlhttp.status==200){
return this.xmlhttp.responseText;
}else{
var _21="["+this.xmlhttp.status+"] "+this.xmlhttp.statusText;
var err=new Error(_21);
err.headers=this.xmlhttp.getAllResponseHeaders();
throw JPSpan_Client_Error(err,1002);
}
},asyncCall:function(_23,_24){
var _25=null;
if(arguments[2]){
_25=arguments[2];
}
if(!this.xmlhttp){
this.init();
}
if(this.callInProgress()){
throw JPSpan_Client_Error(new Error("Call in progress"),1001);
}
this.userhandler=_24;
if(this.userhandler.onInit){
try{
this.userhandler.onInit(_25);
}
catch(e){
this.displayHandlerError(e);
}
}
_23.type="async";
_23.prepare(this.xmlhttp);
this.xmlhttp.setRequestHeader("Accept-Charset","UTF-8");
var _26=this;
this.timeout_id=window.setTimeout(function(){
_26.abort(_26,_25);
},_23.timeout);
this.xmlhttp.onreadystatechange=function(){
_26.stateChangeCallback(_26,_25);
};
_23.send();
},callInProgress:function(){
switch(this.xmlhttp.readyState){
case 1:
case 2:
case 3:
return true;
break;
default:
return false;
break;
}
},abort:function(_27,_28){
if(_27.callInProgress()){
_27.xmlhttp.abort();
var _29="Operation timed out";
if(_28){
_29+=": "+_28;
}
if(_27.userhandler.onError){
var ex=JPSpan_Client_Error(new Error(_29),1003);
try{
_27.userhandler.onError(ex,_28);
}
catch(e){
_27.displayHandlerError(e);
}
}
}
},displayHandlerError:function(e){
var _2c="Error in Handler\n";
if(e.name){
_2c+="Name: "+e.name+"\n";
}
if(e.message){
_2c+="Message: "+e.message+"\n";
}else{
if(e.description){
_2c+="Description: "+e.description+"\n";
}
}
if(e.fileName){
_2c+="File: "+e.fileName+"\n";
}
if(e.lineNumber){
_2c+="Line: "+e.lineNumber+"\n";
}
alert(_2c);
},stateChangeCallback:function(_2d,_2e){
switch(_2d.xmlhttp.readyState){
case 1:
if(_2d.userhandler.onOpen){
try{
_2d.userhandler.onOpen(_2e);
}
catch(e){
_2d.displayHandlerError(e);
}
}
break;
case 2:
if(_2d.userhandler.onSend){
try{
_2d.userhandler.onSend(_2e);
}
catch(e){
_2d.displayHandlerError(e);
}
}
break;
case 3:
if(_2d.userhandler.onProgress){
try{
_2d.userhandler.onProgress(_2e);
}
catch(e){
_2d.displayHandlerError(e);
}
}
break;
case 4:
window.clearTimeout(_2d.timeout_id);
try{
switch(_2d.xmlhttp.status){
case 200:
if(_2d.userhandler.onLoad){
try{
_2d.userhandler.onLoad(_2d.xmlhttp.responseText,_2e);
}
catch(e){
_2d.displayHandlerError(e);
}
}
break;
case 0:
break;
default:
if(_2d.userhandler.onError){
try{
var _2f="["+_2d.xmlhttp.status+"] "+_2d.xmlhttp.statusText;
var err=new Error(_2f);
err.headers=this.xmlhttp.getAllResponseHeaders();
_2d.userhandler.onError(JPSpan_Client_Error(err,1002),_2e);
}
catch(e){
_2d.displayHandlerError(e);
}
}
break;
}
}
catch(e){
}
break;
}
}};
function JPSpan_Request(_31){
this.encoder=_31;
}
JPSpan_Request.prototype={encoder:null,serverurl:"",requesturl:"",body:"",args:null,type:null,http:null,timeout:20000,addArg:function(_32,_33){
if(!this.args){
this.args=[];
}
var _34=/[\W_]/;
if(!_34.test(_32)){
this.args[_32]=_33;
}else{
throw JPSpan_Client_Error(new Error("Invalid parameter name ("+_32+")"),1004);
}
},reset:function(){
this.serverurl="";
this.requesturl="";
this.body="";
this.args=null;
this.type=null;
this.http=null;
this.timeout=20000;
},build:function(){
},prepare:function(_35){
},send:function(_36){
}};
function JPSpan_Request_RawPost(_37){
var _38=new JPSpan_Request(_37);
_38.build=function(){
try{
this.body=this.encoder.encode(this.args);
}
catch(e){
throw JPSpan_Client_Error(e,1006);
}
this.requesturl=this.serverurl;
};
_38.prepare=function(_39){
this.http=_39;
this.build();
switch(this.type){
case "async":
try{
this.http.open("POST",this.requesturl,true);
}
catch(e){
throw JPSpan_Client_Error(new Error(e),1007);
}
break;
case "sync":
try{
this.http.open("POST",this.requesturl,false);
}
catch(e){
throw JPSpan_Client_Error(new Error(e),1007);
}
break;
default:
throw JPSpan_Client_Error(new Error("Call type invalid "+this.type),1005);
break;
}
this.http.setRequestHeader("Content-Length",this.body.length);
this.http.setRequestHeader("Content-Type",this.encoder.contentType);
};
_38.send=function(){
this.http.send(this.body);
};
return _38;
}
function JPSpan_RemoteObject(){
}
JPSpan_RemoteObject.prototype={Async:function(_3a){
this.__initResponseHandler(this,_3a);
this.__callState="async";
},Sync:function(){
this.__responseHandler=null;
this.__callState="sync";
},GetXMLHttp:function(){
if(!this.__client){
this.__initClient();
}
return this.__client.xmlhttp;
},clientErrorFunc:function(e){
try{
var _3c="["+e.name+"] "+e.message;
}
catch(ex){
var _3c="[Client_Error] "+e;
}
if(e.client&&e.call){
_3c=_3c+" while calling "+e.client+"."+e.call+"()";
}
alert(_3c);
},timeout:20000,serverErrorFunc:function(e){
try{
var _3e="["+e.name+"] "+e.message;
}
catch(ex){
var _3e="[Server_Error] "+e;
}
if(e.client&&e.call){
_3e=_3e+" while calling "+e.client+"."+e.call+"()";
}
alert(_3e);
},applicationErrorFunc:function(e){
try{
var _40="["+e.name+"] "+e.message;
}
catch(ex){
var _40="[Application_Error] "+e;
}
if(e.client&&e.call){
_40=_40+" while calling "+e.client+"."+e.call+"()";
}
alert(_40);
},__serverurl:null,__request:null,__client:null,__responseHandler:null,__callState:"sync",__remoteClass:"",__initClient:function(){
this.__client=new JPSpan_HttpClient();
},__initResponseHandler:function(_41,_42){
_41.__responseHandler=new Object();
_41.__responseHandler.context=_41;
_41.__responseHandler.userHandler=_42;
_41.__responseHandler.onInit=function(_43){
var _44=_43+"Init";
if(this.userHandler[_44]){
try{
this.userHandler[_44]();
}
catch(e){
_41.__client.displayHandlerError(e);
}
}
},_41.__responseHandler.onOpen=function(_45){
var _46=_45+"Open";
if(this.userHandler[_46]){
try{
this.userHandler[_46]();
}
catch(e){
_41.__client.displayHandlerError(e);
}
}
},_41.__responseHandler.onSend=function(_47){
var _48=_47+"Send";
if(this.userHandler[_48]){
try{
this.userHandler[_48]();
}
catch(e){
_41.__client.displayHandlerError(e);
}
}
},_41.__responseHandler.onProgress=function(_49){
var _4a=_49+"Progress";
if(this.userHandler[_4a]){
try{
this.userHandler[_4a]();
}
catch(e){
_41.__client.displayHandlerError(e);
}
}
},_41.__responseHandler.onLoad=function(_4b,_4c){
try{
dataFunc=eval(_4b);
try{
data=dataFunc();
if(this.userHandler[_4c]){
try{
this.userHandler[_4c](data);
}
catch(e){
_41.__client.displayHandlerError(e);
}
}else{
alert("Your handler must define a method "+_4c);
}
}
catch(e){
e.client=_41.__responseHandler.context.__remoteClass;
e.call=_4c;
if(e.name=="Server_Error"){
this.context.serverErrorFunc(e);
}else{
var _4d=_4c+"Error";
if(this.userHandler[_4d]){
try{
this.userHandler[_4d](e);
}
catch(e){
_41.__client.displayHandlerError(e);
}
}else{
this.context.applicationErrorFunc(e);
}
}
}
}
catch(e){
e.name="Server_Error";
e.code=2006;
e.response=_4b;
e.client=_41.__responseHandler.context.__remoteClass;
e.call=_4c;
this.context.serverErrorFunc(e);
}
};
_41.__responseHandler.onError=function(e,_4f){
e.client=_41.__responseHandler.context.__remoteClass;
e.call=_4f;
this.context.clientErrorFunc(e);
};
},__call:function(url,_51,_52){
if(!this.__client){
this.__initClient();
}
this.__request.reset();
this.__request.serverurl=url;
this.__request.timeout=this.timeout;
for(var i=0;i<_51.length;i++){
this.__request.addArg(i,_51[i]);
}
if(this.__callState=="async"){
return this.__asyncCall(this.__request,_52);
}else{
return this.__syncCall(this.__request);
}
},__asyncCall:function(_54,_55){
try{
this.__client.asyncCall(_54,this.__responseHandler,_55);
}
catch(e){
this.clientErrorFunc(e);
}
return;
},__syncCall:function(_56){
try{
var _57=this.__client.call(_56);
try{
var _58=eval(_57);
try{
return _58();
}
catch(e){
if(e.name=="Server_Error"){
this.serverErrorFunc(e);
}else{
this.applicationErrorFunc(e);
}
}
}
catch(e){
e.name="Server_Error";
e.code=2006;
e.response=_57;
this.serverErrorFunc(e);
}
}
catch(e){
this.clientErrorFunc(e);
}
}};
function jscart(){
var _59=new JPSpan_RemoteObject();
if(arguments[0]){
_59.Async(arguments[0]);
}
_59.__serverurl=typeof (BASE_URL_JPSPAN)!="undefined"?BASE_URL_JPSPAN+"cart.js.php":"http://oakbeachproductions.com.au.coc/scripts/cart.js.php";
_59.__serverurl+="/jscart";
_59.__remoteClass="jscart";
_59.__request=new JPSpan_Request_RawPost(new JPSpan_Encode_Xml());
_59.add=function(){
var url=this.__serverurl+"/add/";
return this.__call(url,arguments,"add");
};
_59.remove=function(){
var url=this.__serverurl+"/remove/";
return this.__call(url,arguments,"remove");
};
_59.update=function(){
var url=this.__serverurl+"/update/";
return this.__call(url,arguments,"update");
};
_59.updateshipping=function(){
var url=this.__serverurl+"/updateshipping/";
return this.__call(url,arguments,"updateshipping");
};
_59.display=function(){
var url=this.__serverurl+"/display/";
return this.__call(url,arguments,"display");
};
return _59;
}

