var __nonMSDOMBrowser = (window.navigator.appName.toLowerCase().indexOf('explorer') == -1);
var __disabledControlArray = new Array();
var __pendingCallbacks = new Array();
var __synchronousCallBackIndex = -1;

function WebForm_DoCallback(eventTarget, eventArgument, eventCallback, context, errorCallback, useAsync) {
    
//CallBack Event Arguments to make page on Server Know this is callback not postback
//    var postData ="__EVENTTARGET=&__EVENTTARGET=&" +
//                  "__CALLBACKID=" + WebForm_EncodeCallback(eventTarget) +
//                  "&__CALLBACKPARAM=" + WebForm_EncodeCallback(eventArgument);
    var postData = "__EVENTTARGET=&__CALLBACKID=__Page&__CALLBACKPARAM=" + eventArgument; 

    
    var xmlRequest,e;
    try {
        xmlRequest = new XMLHttpRequest();
    }
    catch(e) {
        try {
            xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
        }
        catch(e) {
        }
    }
   
    var setRequestHeaderMethodExists = true;
    try {
        setRequestHeaderMethodExists = (xmlRequest && xmlRequest.setRequestHeader);
    }
    catch(e) 
    {
       //alert("setRequestHeaderMethodExists not exist");
    }
   
    var callback = new Object();
    callback.eventCallback = eventCallback;
    callback.context = context;
    callback.errorCallback = errorCallback;
    callback.async = useAsync;
    //Add this object to pendingCallback array 
    var callbackIndex = WebForm_FillFirstAvailableSlot(__pendingCallbacks, callback);
    // if this callback not is not Async  
    if (!useAsync) {
        if (__synchronousCallBackIndex != -1) {
            __pendingCallbacks[__synchronousCallBackIndex] = null;
        }
        __synchronousCallBackIndex = callbackIndex;
    }
    if (setRequestHeaderMethodExists) {
        xmlRequest.onreadystatechange = WebForm_CallbackComplete;
        callback.xmlRequest = xmlRequest;
        xmlRequest.open("POST",theForm.action, true);
        xmlRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        xmlRequest.send(postData);
        return;
    }
}

function WebForm_CallbackComplete() {
    for (i = 0; i < __pendingCallbacks.length; i++)
    {
        callbackObject = __pendingCallbacks[i];
        if (callbackObject && callbackObject.xmlRequest 
        && (callbackObject.xmlRequest.readyState == 4)) // || CheckStatusCallBack(callbackObject))) //for firefox 3.1
        {
            //alert("Execute Call Back Firing");
            WebForm_ExecuteCallback(callbackObject);
            if(__pendingCallbacks[i] != null)
            {  
                 if (!__pendingCallbacks[i].async) 
                 {
                      __synchronousCallBackIndex = -1;
                 }
                 __pendingCallbacks[i] = null;
             }
        }
    }
}

///Used to Solve Problem of XMLHttp Object with firefox 3.1
function CheckStatusCallBack(callbackObject)
{
      try
      {
        if(callbackObject.xmlRequest.status == 200)
        {
          return true;
        }
      }
      catch(e)
      {
         return false;
      }
}

function WebForm_ExecuteCallback(callbackObject) {
    var response = callbackObject.xmlRequest.responseText;
    //alert(response);
    if (response.charAt(0) == "s") {
        if ((typeof(callbackObject.eventCallback) != "undefined") && (callbackObject.eventCallback != null)) {
            callbackObject.eventCallback(response.substring(1), callbackObject.context);
        }
    }
    else if (response.charAt(0) == "e") {
        if ((typeof(callbackObject.errorCallback) != "undefined") && (callbackObject.errorCallback != null)) {
            callbackObject.errorCallback(response.substring(1), callbackObject.context);
        }
    }
    else {
        //alert(response);
        var separatorIndex = response.indexOf("|");
        if (separatorIndex != -1) {
            var validationFieldLength = parseInt(response.substring(0, separatorIndex));
            if (!isNaN(validationFieldLength)) {
                var validationField = response.substring(separatorIndex + 1, separatorIndex + validationFieldLength + 1);
                if (validationField != "") {
                    var validationFieldElement = theForm["__EVENTVALIDATION"];
                    if (!validationFieldElement) {
                        validationFieldElement = document.createElement("INPUT");
                        validationFieldElement.type = "hidden";
                        validationFieldElement.name = "__EVENTVALIDATION";
                        theForm.appendChild(validationFieldElement);
                    }
                    validationFieldElement.value = validationField;
                }
                if ((typeof(callbackObject.eventCallback) != "undefined") && (callbackObject.eventCallback != null)) {
                      callbackObject.eventCallback(response.substring(separatorIndex + validationFieldLength + 1), callbackObject.context);
                      
                }
            }
        }
    }
}

function WebForm_FillFirstAvailableSlot(array, element) {
    var i;
    for (i = 0; i < array.length; i++) {
        if (!array[i]) break;
    }
    array[i] = element;
    return i;
}

function WebForm_EncodeCallback(parameter) {
    if (encodeURIComponent) {
        return encodeURIComponent(parameter);
    }
    else {
        return escape(parameter);
    }
}

function WebForm_AbortPerviousRequests() 
{
    for (i = 0; i < __pendingCallbacks.length; i++)
    {
        callbackObject = __pendingCallbacks[i];
        if (callbackObject && callbackObject.xmlRequest)
        {
            callbackObject.xmlRequest.abort();
            __pendingCallbacks[i] = null;
        }
    }
}
