

var __callbackList = new Array();	//	Holds the asynchronous callback handler
var __onGoingCallback = null;


//	Add the Callback Handler to array list
function addToCallbackList(cb) {
	__callbackList[__callbackList.length] = cb;
}

//	Is Microsoft Browser?
var __nonMSDOMBrowser = true;
if (document.all) 
	__nonMSDOMBrowser = false; 
var pageUrl = "";			//	Post Back URL
var __theFormPostData = "";	//	Form Data
function WebForm_InitClientCallback(cbUrl) {
	pageUrl = cbUrl;
}


function WebForm_RefreshFormPostData(isSubmit) {
	__theFormPostData = "";
	var theForm = document.forms[0];	//	ASP.NET currently support single form PostBack only
	if(!isSubmit)
	{
		var e = document.getElementsByName("__EVENTTARGET")[0];
		if (e)
		{
			e.value = "";
		}
		e = document.getElementsByName("__EVENTARGUMENT")[0];
		if (e)
		{
			e.value = "";
		}
	}
    count = theForm.elements.length;
    var element;
    re = new RegExp("\\x2B", "g");
    if (isSubmit == 'null')
    {
		for (i = 0; i < count; i++)
		{
			element = theForm.elements[i];
			if (element.type == "submit")
			{
				isSubmit = element;
				break;
			}
		}
    }
    for (i = 0; i < count; i++) {
        element = theForm.elements[i];
         if (element.tagName.toLowerCase() == "input")
         {
			if (element.type == "submit")
			{
				if (element == isSubmit)
				{
					__theFormPostData += element.name + "=" + escape(element.value).replace(re, "%2B") + "&";
				}
			}
			else if (element.type == "radio" || element.type == "checkbox" )
			{
				if (element.checked)
				{
					__theFormPostData += element.name + "=" + escape(element.value).replace(re, "%2B") + "&";
				}
			}
			else if (element.type == "button")
			{}
			else
			{
				__theFormPostData += element.name + "=" + escape(element.value).replace(re, "%2B") + "&";
            }
         }
         else if (element.tagName.toLowerCase() == "select") 
         {
			if (element.children)
			{
				selectCount = element.children.length;
				for (j = 0; j < selectCount; j++) {
					selectChild = element.children[j];
					if ((selectChild.tagName.toLowerCase() == "option") && (selectChild.selected == true)) {
						__theFormPostData += element.name + "=" + escape(selectChild.value).replace(re, "%2B") + "&";                
					}                
				}
			}
			else
			{
				selectCount = element.childNodes.length;
				for (j = 0; j < selectCount; j++) {
					selectChild = element.childNodes[j];
					if ((selectChild.tagName.toLowerCase() == "option") && (selectChild.selected == true)) {
						__theFormPostData += element.name + "=" + selectChild.value.replace(re, "%2B") + "&";                
					}                
				}
            }
         }
    }
   //alert(__theFormPostData);
}

//	Callback asynchronously
function WebForm_DoAsyncCallback(eventTarget, eventArgument, eventCallback, context, errorCallback)
 {
    re = new RegExp("\\x2B", "g");
    WebForm_RefreshFormPostData();
    if (__nonMSDOMBrowser) {
        var xmlRequest = new XMLHttpRequest();
        postData = __theFormPostData +
                   "__SCRIPTCALLBACKID=" + eventTarget +
                   "&__SCRIPTCALLBACKPARAM=" + escape(eventArgument).replace(re, "%2B");
        if (pageUrl.indexOf("?") != -1) {
            xmlRequest.open("GET", pageUrl + "&" + postData, false);
        }
        else {
            xmlRequest.open("GET", pageUrl + "?" + postData, false);
        }    
        xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xmlRequest.send(null);
        try
        {
			response = xmlRequest.responseText;
			estado   = xmlRequest.getResponseHeader("__SCRIPTCALLBACKSTATUS");
			returnValue = xmlRequest.getResponseHeader("__SCRIPTCALLBACKRETURNVALUE");
			if (estado == "200") 
			{			
				if (eventCallback != null)
					eventCallback(returnValue, context);
			}
			else
			{
				if (errorCallback != null)
					errorCallback(response, context);
				else
				{
					//	For Testing Purposes
					//alert(response);
				}
			}
        }
        catch(e)
        {
            if (errorCallback != null)
                errorCallback(e.message, context);
			else
			{
				//	For Testing Purposes
				//alert(e.message);
			}
        }
    }
    else {
        var xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
        xmlRequest.onreadystatechange = WebForm_OnClientCallbackComplete;
        var __callbackObject = new Object();
        __callbackObject.xmlRequest = xmlRequest;
		__callbackObject.eventTarget = eventTarget;
		__callbackObject.eventArgument = eventArgument;
        __callbackObject.eventCallback = eventCallback;
        __callbackObject.context = context;
        __callbackObject.errorCallback = errorCallback;
        addToCallbackList(__callbackObject);
        
        postData = __theFormPostData +
                   "__SCRIPTCALLBACKID=" + eventTarget +
                   "&__SCRIPTCALLBACKPARAM=" + escape(eventArgument).replace(re, "%2B");
        usePost = false;
        if (pageUrl.length + postData.length + 1 > 2067) {
            usePost = true;
        }
        if (usePost) {
            xmlRequest.open("POST", pageUrl, true);
            xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xmlRequest.send(postData);
        }
        else {            
            if (pageUrl.indexOf("?") != -1) {
                xmlRequest.open("GET", pageUrl + "&" + postData, true);
            }
            else {
                xmlRequest.open("GET", pageUrl + "?" + postData, true);
            }
            xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
            xmlRequest.send();
        }
    }
}








//	Callback Synchronously
function WebForm_DoSyncCallback(eventTarget, eventArgument, eventCallback, context, errorCallback, waitPopup, isSubmit) {
	if (__onGoingCallback != null)
	{
		return;
	}
	else
	{
		__onGoingCallback = new Object();
	}
	
	WebForm_RefreshFormPostData(isSubmit);
	usePost = false;
	
    if (__nonMSDOMBrowser) 
    {
		re = new RegExp("\\x2B", "g");
		var xmlRequest = new XMLHttpRequest();
		postData = __theFormPostData +
					"__SCRIPTCALLBACKID=" + eventTarget +
					"&__SCRIPTCALLBACKPARAM=" + escape(eventArgument).replace(re, "%2B");
	}
	else
	{
        var xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
        postData = __theFormPostData +
                   "__SCRIPTCALLBACKID=" + eventTarget +
                   "&__SCRIPTCALLBACKPARAM=" + escape(eventArgument).replace(re, "%2B") +
                   "&__CACHEOVERRIDER="+Math.random();
	}
	
	if(waitPopup)
	{
		try
		{
			eval(waitPopup +'.show();');
		}
		catch(e)
		{
			//	For Testing Purposes
			//alert(e.message);
		} 
	}
	
	if (pageUrl.length + postData.length + 1 > 2067) {
		usePost = true;
    }
		
    __onGoingCallback.xmlRequest = xmlRequest;
	__onGoingCallback.eventTarget = eventTarget;
	__onGoingCallback.eventArgument = eventArgument;
    __onGoingCallback.eventCallback = eventCallback;
    __onGoingCallback.context = context;
    __onGoingCallback.errorCallback = errorCallback;
    __onGoingCallback.usePost = usePost;
    __onGoingCallback.waitPopup = waitPopup;
    __onGoingCallback.postData = postData;
	window.setTimeout("WebForm_SendSyncCallback();",50);
}

function WebForm_SendSyncCallback()
{
	if (__onGoingCallback == null)
	{
		return;
	}
	
	xmlRequest = __onGoingCallback.xmlRequest;
	eventTarget = __onGoingCallback.eventTarget;
	eventArgument = __onGoingCallback.eventArgument;
    eventCallback = __onGoingCallback.eventCallback;
    context = __onGoingCallback.context;
    errorCallback = __onGoingCallback.errorCallback;
    usePost = __onGoingCallback.usePost;
    waitPopup = __onGoingCallback.waitPopup;
    postData = __onGoingCallback.postData;
    //alert(postData);
    usePost = true;
    try
    {
		if (usePost)
		{
			try
			{
				xmlRequest.open("POST", pageUrl, false);
				xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			}
			catch(e)
			{
				alert('open error: '+e.message);
			}
			try
			{
				xmlRequest.send(postData);
			}
			catch(e)
			{
				alert('send error: '+e.message);
			}
			
		}
		else 
		{   
			try
			{         
				if (pageUrl.indexOf("?") != -1) {
					xmlRequest.open("GET", pageUrl + "&" + postData, false);
				}
				else {
					xmlRequest.open("GET", pageUrl + "?" + postData, false);
				}
			}
			catch(e)
			{
				alert('open error: '+e.message);
			}
			try
			{
				xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				xmlRequest.send(null);
			}
			catch(e)
			{
				alert('send error: '+e.message);
			}
		}
    }
    catch(e)
    {
		alert("SEND ERRO: "+e.message);
    }
	try
    {
		response = xmlRequest.responseText;
		
		estado   = xmlRequest.getResponseHeader("__SCRIPTCALLBACKSTATUS");
		returnValue = xmlRequest.getResponseHeader("__SCRIPTCALLBACKRETURNVALUE");

		//alert("estado-"+estado+"return-"+returnValue)
		if (estado == "200") 
		{
			WebForm_UpdateUI(response);
			if(waitPopup)
			{
				eval(waitPopup +'.hide();');
			}	
			if (eventCallback != null)
				eventCallback(returnValue, context);
		}
		else
		{
			if (errorCallback != null)
				errorCallback(response, context);
			else
			{
				//	For Testing Purposes
				//document.open(response, '_blank');
				//var win = window.open();
				//win.document.write(response);
				document.location.href = "info.html";
			}
		}
    }
    catch(e)
    {
        if (errorCallback)
            errorCallback(e.message, context);
		else
		{
			//	For Testing Purposes
			//alert("RECEIVE ERRO: "+e.message);
			//var win = window.open();
			//win.document.write(response);
			document.location.href = "info.html";
		}
    }
    __onGoingCallback = null;
    //var t2 = new Date().getTime();
   // var t = t2 -t1;
    //alert('time: '+t+' ms');
}


//	Asynchronous Callback Completed
function WebForm_OnClientCallbackComplete() 
{
	for(var i = 0; i < __callbackList.length; i++)
	{
		var __cbObject = __callbackList[i];
		
		if (__cbObject != null && __cbObject.xmlRequest.readyState == 4) 
		{
			try
			{
				response = __cbObject.xmlRequest.responseText;
				estado   = __cbObject.xmlRequest.getResponseHeader("__SCRIPTCALLBACKSTATUS");
				returnValue = xmlRequest.getResponseHeader("__SCRIPTCALLBACKRETURNVALUE");
				if (estado == "200") 
				{
					if (__cbObject.eventCallback != null)
						__cbObject.eventCallback(returnValue, __cbObject.context);
				}
				else
				{
					if (__cbObject.errorCallback != null)
						__cbObject.errorCallback(response, __cbObject.context);
					else
					{
						//	For Testing Purposes
						//alert(response);
					}
				}
			}
			catch(e)
			{
				if (__cbObject.errorCallback != null)
					__cbObject.errorCallback(e.message, __cbObject.context);
				else
				{
					//	For Testing Purposes
					alert("ERRO: "+e.message);
				}
			}
			finally
			{
				__cbObject.xmlRequest = null;
				__cbObject = null;
				__callbackList[i] = null;
			}
		}
    }
}

function WebForm_UpdateUI(response)
{
	if (response)
	{
		//var ta = 0;
		//var tb = 0;
		//var tc = 0;
		//var t1 = new Date().getTime();
		//alert(response);
		var e2 = null;
		var scripts = new Array();
		ctls = response.split('|#####|');
		//alert('nš caracteres: '+response.length+'; nš ctls: '+ctls.length);
		var len = ctls.length;
		for(i = 0; i < len; i++)
		{
			parts = ctls[i].split('|%%%|');
			//var tt = new Date().getTime();
			var strNe = parts[1];//myDecodeBase64(parts[1]);
			//tc += new Date().getTime() - tt;
			//alert(parts[0] + '\r\n' + strNe);
			var e = document.getElementById(parts[0]);
			if ("__REDIRECT" == parts[0] )
			{
				//alert(strNe);
				window.location = strNe;
			}
			else if ("__TOPREDIRECT" == parts[0] )
			{
				//alert(strNe);
				window.top.location = strNe;
			}
			else if ("__VIEWSTATE" == parts[0])
			{
				e = document.getElementsByName(parts[0])[0];
				e.value = parts[1];
			}
			else if ("__SCRIPT" == parts[0])
			{
				scripts.push(strNe);
			}
			else
			{
				if (e)
				{
					//var tt = new Date().getTime();
					try
					{
						e.outerHTML = strNe;
					}
					catch(e)
					{
						//alert('outerHTML ERROR: '+e);
					}
					//ta += new Date().getTime() - tt;
					
				}
			}
		}
		//var tt = new Date().getTime();
		
		for(i = 0; i < scripts.length; i++)
		{
			WebForm_ExecScript(scripts[i]);
		}
		
		//tb += new Date().getTime() - tt;
		
		//var t2 = new Date().getTime();
		//var t = t2 - t1;
		//alert('total: '+t+' ms');
		//alert('total: '+t+' ms; decode: '+tc+' ms; time outerHTML: '+ ta+' ms; time scripts: '+tb+' ms');
	}
}

function WebForm_ExecScript(script)
{
	if (script)
	{
		//alert(script);
		eval(script);
	}
}

var table = new Array(127);
function initDecoder()
{
	for(var i = 0; i < 128; i++)
	{
		table[i] = 0;
	}
	var j = 0;
	for(var i = 65; i < 65+26; i++)
	{
		table[i] = j;
		j++;
	}
	for(var i = 97; i < 97+26; i++)
	{
		table[i] = j;
		j++;
	}
	for(var i = 48; i < 48+10; i++)
	{
		table[i] = j;
		j++;
	}
	table[43] = j++;
	table[47] = j++;
	table[61] = j++;
}
initDecoder();

function myDecodeBase64(input) {
	if (input)
	{
		
		var enc1, enc2, enc3, enc4;
		var i = 0;
		var j = 0;
		var len = input.length;
		var output = [];
		output.length = (len / 4) * 3;
		//var output = new Array((len / 4) * 3);

		do {
			enc1 = table[input.charCodeAt(i++)];
			enc2 = table[input.charCodeAt(i++)];
			enc3 = table[input.charCodeAt(i++)];
			enc4 = table[input.charCodeAt(i++)];

			output[j++] = String.fromCharCode((enc1 << 2) | (enc2 >> 4));
			//output.push(String.fromCharCode((enc1 << 2) | (enc2 >> 4)));

			if (enc3 != 64) {
				output[j++] = String.fromCharCode(((enc2 & 15) << 4) | (enc3 >> 2));
				//output.push(String.fromCharCode(((enc2 & 15) << 4) | (enc3 >> 2)));
			}
			if (enc4 != 64) {
				output[j++] = String.fromCharCode(((enc3 & 3) << 6) | enc4);
				//output.push(String.fromCharCode(((enc3 & 3) << 6) | enc4));
			}
		} while (i < len);

		return output.join("");
   }
   else
   {
   return null;
   }
}


