var FormBusy_Timer = null;
var FormBusy_StartedFromOutside = false;
var FormBusy_AjaxEnabled = false;
var FormBusy_refSubmit = new Array();
var FormBusy_Log = "";
var FormBusy_EnableLog = false;
var FormBusy_LogObject = null;

function FormBusyLog(str)
{
    if (FormBusy_EnableLog)
    //alert(str);
        FormBusy_LogObject.innerHTML += str + "<br>"
    //alert(logDiv.innerHTML);
}

function FormBusyInitializeLog()
{
    if (FormBusy_EnableLog)
    {
        FormBusy_LogObject = document.body.appendChild(document.createElement("div"));
        FormBusyLog("<br>");
    }
}


function AjaxEndRequestHandler(sender, args)
{
    if (FormBusy_StartedFromOutside) return;
    FormBusyLog("Ajax ended");
    busyStop('');
}

function AjaxBeginRequestHandler(sender, args)
{
    if (FormBusy_StartedFromOutside) return;
    FormBusyLog("Ajax started");
    formBusy();
}

function AjaxPageUnloaded()
{
    //FormBusyLog("Page unloaded");
    formBusy();
}

function showFormBusy() {
    FormBusyLog("Form busy displayed");
    createWorkBox('');
    return true;
}

function formBusy() {
    //start form busy only if a previous call was not already made
    if (!FormBusy_Timer)
    {
        FormBusy_Timer = setTimeout("showFormBusy()",2000)
        FormBusyLog("Form busy started. Timer: " + FormBusy_Timer);
    }
    return true;
}

function busyStop()
{
    if (FormBusy_Timer)
    {
        FormBusyLog("Form busy ended. Timer: " + FormBusy_Timer);
        clearTimeout(FormBusy_Timer);
        FormBusy_Timer = null;
    }
    if (document.getElementById("modalContainer") != null)
    	document.getElementsByTagName("body")[0].removeChild(document.getElementById("modalContainer"));
}


function createWorkBox(txt) {

	d = document;
	if(d.getElementById("modalContainer")) return;

	mObj = d.getElementsByTagName("body")[0].appendChild(d.createElement("div"));
	mObj.id = "modalContainer";
	mObj.style.height = d.documentElement.scrollHeight + "px";
	
	alertObj = mObj.appendChild(d.createElement("div"));
	alertObj.id = "workBox";
	if(d.all && !window.opera) alertObj.style.top = document.documentElement.scrollTop + "px";
	alertObj.style.left = "0px" // (d.documentElement.scrollWidth - alertObj.offsetWidth)/2 + "px";
	alertObj.style.visiblity="visible";

	msg = alertObj.appendChild(d.createElement("p"));
	msg.appendChild(d.createTextNode(txt));

}

function FormBusyStart() {
    FormBusyLog("Started from outside");
    FormBusy_StartedFromOutside = true;
    formBusy();
}

function FormBusyStop()
{
    FormBusyLog("Stoped from outside");
    FormBusy_StartedFromOutside = false;
    busyStop();
}

function FormBusyAjaxAddRequestHandlers()
{
    try{
        //add ajax handlers
        Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(AjaxBeginRequestHandler);
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(AjaxEndRequestHandler);
        Sys.Application.add_unload(AjaxPageUnloaded);
//        FormBusy_AjaxEnabled = true;
        FormBusyLog("Ajax enabled");
    }
    catch(ex)
    {
        //alert("Ajax not available");
    }
}
function FormBusy_Submit_IE()
{
    if (event)
        return FormBusy_Submit(event.srcElement.getAttribute("refSubmitIndex"));
    else
        return true;
}

function FormBusy_Submit(formIndex)
{
    // only if clientvalidation is valid
    if (typeof(Page_IsValid) != "undefined" && Page_IsValid == false) return false;

    var blnDoSubmit = true;
    FormBusyLog("Form " + formIndex + " submitted! ");

    //add handler again this is due to the fact that ajax classes are loaded later on
    if (!FormBusy_AjaxEnabled)
        FormBusyAjaxAddRequestHandlers();
    
    FormBusyLog("Submit event called: " + FormBusy_refSubmit[formIndex]);
    //execute the previous validation
    if (FormBusy_refSubmit[formIndex])
    {
        blnDoSubmit = FormBusy_refSubmit[formIndex]();
    }

    //only if previous form validated show the loader
    if (blnDoSubmit && !FormBusy_AjaxEnabled)
    {
        formBusy();
    }

    FormBusyLog("Form " + formIndex + " value: " + blnDoSubmit);

    return blnDoSubmit;
}

function FormBusyAddHandlers()
{
    //initialize the logging
    FormBusyInitializeLog();

    //add ajax handlers
    FormBusyAjaxAddRequestHandlers();
    
    for (i = 0;i < document.forms.length; i++)
    {
        var form = document.forms[i];
        FormBusy_refSubmit.push(form.onsubmit);
        FormBusyLog(form.onsubmit);
        form.setAttribute("refSubmitIndex", i);
        form.setAttribute("onsubmit", "return FormBusy_Submit(" + i + ")");
        if (typeof(form.onsubmit) == "string")
            form.onsubmit = FormBusy_Submit_IE;
    }
}

function FormBusyCheckLoader()
{
    //check if document is loaded
    //this way the formbusy.js can be included everywhere in the page
    if (document.body != null && document.body.childNodes.length > 0)
        FormBusyAddHandlers();
    else
        setTimeout("FormBusyCheckLoader()", 500);
}

//check if document loaded
FormBusyCheckLoader();


