
var topWindow=window,windowCount=0;while(windowCount<10){windowCount++;try{if(topWindow==topWindow.parent)break;topWindow.parent.paraturePermissionTest=true;topWindow=topWindow.parent;}catch(e){break;}}
if(typeof topWindow.PARATURE=='undefined')topWindow.PARATURE={};if(typeof topWindow.PARATURE.ajax=='undefined')topWindow.PARATURE.ajax={};if(typeof PARATURE=='undefined')var PARATURE=topWindow.PARATURE;var ajaxGateway=function(configs){if(typeof(configs)=='undefined'){configs={};}
var me=this;var defaultBatchMessages=true;var defaultPostUrl="/jsonrequest/RequestHandler.aspx";var defaultMaxOpenConnectionCount=1;var defaultSessionCookieName="ParatureServiceDeskSessionID";var defaultMaxPostSize=4194304;me.queuedMessages=[];me.queuedBatchMessages=[];me.openConnections=[];me.canceledMessages=[];me.nMessages=0;me.pumpTimeout=null;me.config={};me.config.maxOpenConnectionCount=(typeof(configs.maxOpenConnectionCount)!='undefined'&&!isNaN(configs.maxOpenConnectionCount))?configs.maxOpenConnectionCount:defaultMaxOpenConnectionCount;me.config.postUrl=(typeof(configs.postUrl)!='undefined')?configs.postUrl:defaultPostUrl;me.config.batchMessages=(typeof(configs.batchMessages)!='undefined')?configs.batchMessages:defaultBatchMessages;me.config.sessionCookieName=configs.sessionCookieName?configs.sessionCookieName:defaultSessionCookieName;me.config.maxPostSize=configs.maxPostSize?configs.maxPostSize:defaultMaxPostSize;me.config.messagePump=new PARATURE.messagePump();me.registerSingle=function(callbackFunction){return me.config.messagePump.registerSingle(callbackFunction,"AjaxIn");}
me.registerPermanent=function(callbackFunction){return me.config.messagePump.registerPermanent(callbackFunction,"AjaxIn");}
me.register=me.registerPermanent;me.unregister=me.config.messagePump.unregister;me.send=me.config.messagePump.send;me.createMessage=function(){return me.config.messagePump.create("AjaxOut");}
me.createBatchMessage=function(callbackId){var message=me.config.messagePump.create("BatchAjaxOut");if(typeof(callbackId)!="undefined")message.CallbackHandler=callbackId;message.Messages=[];return message;}
me.retrieveCookie=function(cookieName){var results=document.cookie.match('(^|;) ?'+cookieName+'=([^;]*)(;|$)');if(results&&results[2]){return unescape(results[2]);}
else{return null;}}
me.cloneObject=function(obj){return YAHOO.lang.JSON.parse(YAHOO.lang.JSON.stringify(obj));}
me.SerializeMessage=function(message){if(message.IsBatch){var textMessage=me.cloneObject(message);for(var i=0;i<textMessage.Messages.length;i++){for(var o in textMessage.Messages[i].Arguments){if(textMessage.Messages[i].Arguments.hasOwnProperty(o)){textMessage.Messages[i].Arguments[o]=YAHOO.lang.JSON.stringify(textMessage.Messages[i].Arguments[o]);}}
delete textMessage.Messages[i]["CallbackHandler"];delete textMessage.Messages[i]["InternalArguments"];}
return YAHOO.lang.JSON.stringify(textMessage.Messages);}else{var textMessage=me.cloneObject(message);for(var o in textMessage.Arguments){if(textMessage.Arguments.hasOwnProperty(o)){textMessage.Arguments[o]=YAHOO.lang.JSON.stringify(textMessage.Arguments[o]);}}
delete textMessage["CallbackHandler"];delete textMessage["InternalArguments"];return YAHOO.lang.JSON.stringify(textMessage);}}
me.messageHandler=function(message){var messageObject={Id:me.nMessages++,IsBatch:false,ServiceName:message.ServiceName,OperationName:message.OperationName,SessionId:message.SessionId,Arguments:message.Arguments,CallbackHandler:message.CallbackHandler,InternalArguments:message.InternalArguments};messageObject.SessionId=me.retrieveCookie(me.config.sessionCookieName);var textMessage=me.SerializeMessage(messageObject);if(textMessage.length>me.config.maxPostSize+2){return false;}
me.queuedMessages.push({local:messageObject,text:textMessage});if(me.openConnections.length<me.config.maxOpenConnectionCount&&me.pumpTimeout==null){me.pumpTimeout=setTimeout(me.pumpMessage,1);}else if(me.openConnections.length<me.config.maxOpenConnectionCount&&me.pumpTimeout!=null){clearTimeout(me.pumpTimeout);me.pumpTimeout=setTimeout(me.pumpMessage,1);}
return true;};me.batchMessageHandler=function(message){var messageObject={Id:me.nMessages++,IsBatch:true,CallbackHandler:message.CallbackHandler,Messages:[]};for(var i=0;i<message.Messages.length;i++){message.Messages[i].SessionId=me.retrieveCookie(me.config.sessionCookieName);message.Messages[i].Id=me.nMessages++;messageObject.Messages.push(message.Messages[i]);}
var textMessage=me.SerializeMessage(messageObject);if(textMessage.length>me.config.maxPostSize+2){return false;}
me.queuedBatchMessages.push({local:messageObject,text:textMessage});if(me.openConnections.length<me.config.maxOpenConnectionCount&&me.pumpTimeout==null){me.pumpTimeout=setTimeout(me.pumpMessage,1);}else if(me.openConnections.length<me.config.maxOpenConnectionCount&&me.pumpTimeout!=null){clearTimeout(me.pumpTimeout);me.pumpTimeout=setTimeout(me.pumpMessage,1);}
return true;};me.config.messagePump.registerPermanent(me.messageHandler,"AjaxOut");me.config.messagePump.registerPermanent(me.batchMessageHandler,"BatchAjaxOut");me.pumpMessage=function(){me.pumpTimeout=null;if(me.openConnections.length>=me.config.maxOpenConnectionCount){return;}
if(me.queuedMessages.length==0&&me.queuedBatchMessages.length==0){return;}
if(me.queuedBatchMessages.length>0){var ajaxClient=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");var firstMessage=me.queuedBatchMessages.shift();var payloadSize=2+firstMessage.text.length;var payload=firstMessage.text;ajaxClient.onreadystatechange=me.generateBatchResponseHandler(ajaxClient,me,firstMessage.local);me.openConnections.push(ajaxClient);ajaxClient.open("POST",me.config.postUrl,true);ajaxClient.setRequestHeader("Content-type","text/html; charset=utf-8");ajaxClient.send(payload);}else{var ajaxClient=window.XMLHttpRequest?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");var firstMessage=me.queuedMessages.shift();var payloadSize=2+firstMessage.text.length;var payload=[firstMessage.text];var localMessages=[firstMessage.local];if(me.config.batchMessages&&me.queuedMessages.length>0){do{var nextMessageText=me.queuedMessages[0].text;var nextMessageLocal=me.queuedMessages[0].local;if(nextMessageText.length+payloadSize+1>me.config.maxPostSize){break;}
localMessages.push(nextMessageLocal);payload.push(nextMessageText);payloadSize+=nextMessageText.length+1;me.queuedMessages.shift();}while(me.queuedMessages.length>0);}
ajaxClient.onreadystatechange=me.generateResponseHandler(ajaxClient,me,localMessages);me.openConnections.push(ajaxClient);ajaxClient.open("POST",me.config.postUrl,true);ajaxClient.setRequestHeader("Content-type","text/html; charset=utf-8");payload="["+payload.join(',')+"]";ajaxClient.send(payload);}};me.generateBatchResponseHandler=function(connection,gateway,messages){return function(){try{if(connection.readyState!=4){return;}
for(var i=0;i<gateway.openConnections.length;i++){if(gateway.openConnections[i]==connection){gateway.openConnections.splice(i,1);break;}}
if(gateway.queuedMessages.length>0){if(me.pumpTimeout!=null){clearTimeout(me.pumpTimeout);}
me.pumpTimeout=setTimeout(gateway.pumpMessage,1);}
try{try{var returnedMessages=eval(connection.responseText);}
catch(e2){var returnedMessages=eval(connection.responseText.replace(/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,""));}}catch(e){connection=null;var batchMessage=me.config.messagePump.create("AjaxIn");batchMessage.IsBatch=true;batchMessage.CallWasSuccessful=false;batchMessage.AuthFailure=false;batchMessage.ErrorMessage="Error parsing response message bundle.";batchMessage.Messages=[];for(var i=0;i<messages.Messages.length;i++){var messageObject=messages.Messages[i];var message=me.config.messagePump.create("AjaxIn");message.ServiceName=messageObject.ServiceName;message.OperationName=messageObject.OperationName;message.CallWasSuccessful=false;message.ErrorMessage="Error parsing response message bundle.";message.data=null;message.InternalArguments=messageObject.InternalArguments;batchMessage.Messages.push(message);}
me.config.messagePump.send(batchMessage,messages.CallbackHandler);throw"Error parsing response message bundle.";}
connection=null;if(returnedMessages.length!=messages.Messages.length){var batchMessage=me.config.messagePump.create("AjaxIn");batchMessage.IsBatch=true;batchMessage.CallWasSuccessful=false;batchMessage.AuthFailure=false;batchMessage.ErrorMessage="Error parsing response message bundle.";batchMessage.Messages=[];for(var i=0;i<messages.Messages.length;i++){var messageObject=messages.Messages[i];var message=me.config.messagePump.create("AjaxIn");message.ServiceName=messageObject.ServiceName;message.OperationName=messageObject.OperationName;message.CallWasSuccessful=false;message.ErrorMessage="Error parsing response message bundle.";message.data=null;message.InternalArguments=messageObject.InternalArguments;batchMessage.Messages.push(message);}
me.config.messagePump.send(batchMessage,messages.CallbackHandler);throw"Returned bundle length is not the same length as request bundle length.";}
var batchMessage=me.config.messagePump.create("AjaxIn");batchMessage.IsBatch=true;batchMessage.CallWasSuccessful=true;batchMessage.AuthFailure=false;batchMessage.Messages=[];for(var i=0;i<messages.Messages.length;i++){var messageObject=messages.Messages[i];for(var j=0;j<returnedMessages.length;j++){if(messageObject.Id==returnedMessages[j].Id){var message=me.config.messagePump.create("AjaxIn");message.ServiceName=messageObject.ServiceName;message.OperationName=messageObject.OperationName;message.CallWasSuccessful=returnedMessages[j].CallWasSuccessful;message.AuthFailure=returnedMessages[j].AuthFailure;message.ErrorMessage=returnedMessages[j].ErrorMessage;message.data=returnedMessages[j].ReturnData;message.InternalArguments=messageObject.InternalArguments;if(!message.CallWasSuccessful)batchMessage.CallWasSuccessful=false;if(message.AuthFailure)batchMessage.AuthFailure=true;batchMessage.Messages.push(message);break;}}}
me.config.messagePump.send(batchMessage,messages.CallbackHandler);}catch(e){}};};me.generateResponseHandler=function(connection,gateway,messages){return function(){try{if(connection.readyState!=4){return;}
for(var i=0;i<gateway.openConnections.length;i++){if(gateway.openConnections[i]==connection){gateway.openConnections.splice(i,1);break;}}
if(gateway.queuedMessages.length>0){if(me.pumpTimeout!=null){clearTimeout(me.pumpTimeout);}
me.pumpTimeout=setTimeout(gateway.pumpMessage,1);}
try{try{var returnedMessages=eval(connection.responseText);}
catch(e2){var returnedMessages=eval(connection.responseText.replace(/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,""));}}catch(e){connection=null;for(var i=0;i<messages.length;i++){var messageObject=messages[i];var message=me.config.messagePump.create("AjaxIn");message.ServiceName=messageObject.ServiceName;message.OperationName=messageObject.OperationName;message.CallWasSuccessful=false;message.ErrorMessage="Error parsing response message bundle.";message.data=null;message.InternalArguments=messageObject.InternalArguments;me.config.messagePump.send(message,messageObject.CallbackHandler);}
throw"Error parsing response message bundle.";}
connection=null;if(returnedMessages.length!=messages.length){for(var i=0;i<messages.length;i++){var messageObject=messages[i];var message=me.config.messagePump.create("AjaxIn");message.ServiceName=messageObject.ServiceName;message.OperationName=messageObject.OperationName;message.CallWasSuccessful=false;message.ErrorMessage="Error parsing response message bundle.";message.data=null;message.InternalArguments=messageObject.InternalArguments;me.config.messagePump.send(message,messageObject.CallbackHandler);}
throw"Returned bundle length is not the same length as request bundle length.";}
for(var i=0;i<messages.length;i++){var messageObject=messages[i];for(var j=0;j<returnedMessages.length;j++){if(messageObject.Id==returnedMessages[j].Id){var message=me.config.messagePump.create("AjaxIn");message.ServiceName=messageObject.ServiceName;message.OperationName=messageObject.OperationName;message.CallWasSuccessful=returnedMessages[j].CallWasSuccessful;message.ErrorMessage=returnedMessages[j].ErrorMessage;message.data=returnedMessages[j].ReturnData;message.InternalArguments=messageObject.InternalArguments;me.config.messagePump.send(message,messageObject.CallbackHandler);break;}}}}catch(e){}};};}
PARATURE.messagePump=function(settings){var me=this;if(typeof settings=='undefined')settings=Array();function def(key,def_val){if(typeof(settings[key])=='undefined')settings[key]=def_val;}
def("tbd","something");var permanentMessageHandlers=Array();var singleMessageHandlers=Array();var nHandlers=0;function registerPermanent(callback,comparitor){if(typeof comparitor=='undefined')comparitor=null;var handler={id:nHandlers++,callback:callback,comparitor:comparitor}
permanentMessageHandlers.push(handler);return handler.id;}
function registerSingle(callback,comparitor){if(typeof comparitor=='undefined')comparitor=null;var handler={id:nHandlers++,callback:callback,comparitor:comparitor}
singleMessageHandlers.push(handler);return handler.id;}
function unregister(handle){for(var n=0;n<permanentMessageHandlers.length;n++){if(permanentMessageHandlers[n].id==handle){permanentMessageHandlers.splice(n,1);return;}}
for(var n=0;n<singleMessageHandlers.length;n++){if(singleMessageHandlers[n].id==handle){singleMessageHandlers.splice(n,1);return;}}}
function create(type){if(typeof type=='undefined')type='';return{type:type};}
function isString(a){return(typeof(a)==='string')?true:(typeof(a)==='object')?a.constructor.toString().match(/string/i)!==null:false;}
function isRegex(a){return(typeof(a)==='function'||typeof(a)==='object')?a.constructor.toString().match(/regexp/i)!==null:false;}
function send(message,handlerId){var retValue=false;if(typeof(handlerId)!='undefined'){for(var i=0;i<singleMessageHandlers.length;i++){if(handlerId==singleMessageHandlers[i].id){try{retValue=singleMessageHandlers[i].callback(message);}catch(e){}
singleMessageHandlers.splice(i,1);return retValue;}}
for(var i=0;i<permanentMessageHandlers.length;i++){if(handlerId==permanentMessageHandlers[i].id){try{retValue=permanentMessageHandlers[i].callback(message);}catch(e){}
return retValue;}}}else{var toBeRemoved=[],inSingle=false,inPerm=false;for(var i=0;i<singleMessageHandlers.length;i++){if(singleMessageHandlers[i].comparitor==null||singleMessageHandlers[i].comparitor==message.type){try{retValue=singleMessageHandlers[i].callback(message);}catch(e){}
toBeRemoved.push(singleMessageHandlers[i]);inSingle=true;}}
for(var i=0;i<permanentMessageHandlers.length;i++){if(permanentMessageHandlers[i].comparitor==null||permanentMessageHandlers[i].comparitor==message.type){try{retValue=permanentMessageHandlers[i].callback(message);}catch(e){toBeRemoved.push(permanentMessageHandlers[i]);inPerm=true;}}}
if(toBeRemoved.length>0){for(var i=0;i<toBeRemoved.length;i++){if(inSingle){var index=singleMessageHandlers.indexOf(toBeRemoved[i]);if(index!=-1){singleMessageHandlers.splice(index,1);}}
if(inPerm){var index=permanentMessageHandlers.indexOf(toBeRemoved[i]);if(index!=-1){permanentMessageHandlers.splice(index,1);}}}}
return retValue;}}
return{registerPermanent:registerPermanent,registerSingle:registerSingle,unregister:unregister,create:create,send:send}}
if(typeof topWindow.PARATURE.ajax.gateway=='undefined')topWindow.PARATURE.ajax.gateway=new ajaxGateway();
