/*  
--- Double Submit BugFix ---
When you click the Delete icon in a grid, the page is submitted twice, which causes 2 rows to be deleted.
This is fixed by running a function 'EDSSL_DoubleSubmitBugFix_SubmitFnc' when the form is submitted: the second submit is then prevented.
This function replaces the onsubmit function of the 'theForm' variable which is a standard variable of ASP.NET.
If an onsubmit function was present, this is stored in 'EDSSL_DoubleSubmitBugFix_OriginalOnSubmitFnc' and rerun on the first submit only.
*/

var EDSSL_DoubleSubmitBugFix_IsBeingSubmitted = false;
var EDSSL_DoubleSubmitBugFix_OriginalOnSubmitFnc = null;

/*
Function called on each submit of the page
Only allows the first submit
*/
function EDSSL_DoubleSubmitBugFix_SubmitFnc()
{      
    if(EDSSL_DoubleSubmitBugFix_IsBeingSubmitted) 
    {           
        window.status = "Your request is being processed, please wait...";        
        return false;
    }
    else
    {   
        if(EDSSL_DoubleSubmitBugFix_OriginalOnSubmitFnc == null)
        {
            if(EDSSL_FindEventInfo() != null) 
            {
                EDSSL_DoubleSubmitBugFix_IsBeingSubmitted = true;
                setTimeout(EDSSL_DoubleSubmitBugFix_Unlock, 2000);
            }
            return true;
        }
        else
        {
            /* Original Onsubmit Logic can still prevent the submit */
            if(EDSSL_DoubleSubmitBugFix_OriginalOnSubmitFnc() == false)
            {                
                return false;
            }
            else
            {
                if(EDSSL_FindEventInfo() != null)
                {
                    EDSSL_DoubleSubmitBugFix_IsBeingSubmitted = true;
                    setTimeout(EDSSL_DoubleSubmitBugFix_Unlock, 2000);
                }
                return true;   
            }
        }
    }
}

function EDSSL_DoubleSubmitBugFix_Unlock()
{    
    window.status = "...";
    EDSSL_DoubleSubmitBugFix_IsBeingSubmitted = false;    
}

/*
Attach function to submit event of the form
*/
/* done by the scriptmanager now....
function EDSSL_DoubleSubmitBugFix_ApplyFix()
{     
    try
    { 
        var lForm = document.forms['aspnetForm'];
        if (!lForm) lForm = document.aspnetForm;
     
        if(lForm != undefined)
        {
            if(lForm.onsubmit != null)
            {
                EDSSL_DoubleSubmitBugFix_OriginalOnSubmitFnc = lForm.onsubmit;
            }
            lForm.onsubmit = EDSSL_DoubleSubmitBugFix_SubmitFnc;        
        }
    }
    catch(e)
    {
    }
}
*/


/*                
Code for setting MaxLength on textbox  -------------------------------------------------------------------------------
*/
function EDSSL_TextAreaMaxLength(pUniqueID, pLength)
{
    var lField = document.getElementById(pUniqueID);    
    if(lField != undefined && !lField.disabled && !lField.readOnly)
    {
        lField.EDSSL_MaxLength = pLength;
        EDSSL_AddEvent(lField, 'onkeyup', EDSSL_TextAreaMaxLength_onKeyUp);
        EDSSL_AddEvent(lField, 'onkeydown', EDSSL_TextAreaMaxLength_onKeyDown);
        EDSSL_AddEvent(lField, 'onblur', EDSSL_TextAreaMaxLength_onBlur);
    }
}

function EDSSL_TextAreaMaxLength_onKeyDown()
{
    var lEvent = EDSSL_FindEventInfo();
    var lKeyCode = lEvent.keyCode;
    // Allow BackSpace, Tab, Delete, Home, End and Arrow keys
    if(lKeyCode == 8 || lKeyCode == 9 || lKeyCode == 46 || (lEvent.keyCode >= 35 && lEvent.keyCode <= 40)) return;
    var lField = lEvent.srcElement;
    var lMaxLength = lField.EDSSL_MaxLength;
    if(lField.value.length >= lMaxLength)
    {
        return false;
    }    
}

function EDSSL_TextAreaMaxLength_onKeyUp()
{
    var lEvent = EDSSL_FindEventInfo();    
    var lKeyCode = lEvent.keyCode;
    // Allow BackSpace, Tab, Delete, Home, End and Arrow keys
    if(lKeyCode == 8 || lKeyCode == 9 || lKeyCode == 46 || (lEvent.keyCode >= 35 && lEvent.keyCode <= 40)) return;
    var lField = lEvent.srcElement;
    var lMaxLength = lField.EDSSL_MaxLength;
    if(lField.value.length >= lMaxLength)
    {
        lField.value = lField.value.substr(0, lMaxLength);
    }    
}

function EDSSL_TextAreaMaxLength_onBlur()
{
    var lEvent = EDSSL_FindEventInfo();    
    var lField = lEvent.srcElement;
    var lMaxLength = lField.EDSSL_MaxLength;
    if(lField.value.length >= lMaxLength)
    {
        lField.value = lField.value.substr(0, lMaxLength);
    }
}

/* Function to add event */
/* TODO: change to
        case EDSSL_Browsers_IE:
            if(pEvent.substr(0,2) != "on") pEvent = "on" + pEvent;                 
            pElement.attachEvent(pEvent, pFunction);
            break;
        case EDSSL_Browsers_Netscape:
            if(pEvent.substr(0,2) == "on") pEvent = pEvent.substr(2);                 
            pElement.addEventListener(pEvent, pFunction, false);
            break; 
        default:
            alert('EDSSL_GetBrowserType: Cannot resolve Brower Type ""' + lType + '""');
            break;

*/
function EDSSL_AddEvent(pElement, pEvent, pFunction)
{    
    var lEvent = pEvent;
    switch(EDSSL_GetBrowserType())
    {
        case EDSSL_Browsers_IE:
            if(lEvent.substr(0,2) != "on") lEvent = "on" + lEvent;
            pElement.attachEvent(lEvent, pFunction);
            break;
        case EDSSL_Browsers_Netscape:            
            if(lEvent == "onload") lEvent = "DOMContentLoaded";
            else if(lEvent.substr(0,2) == "on") lEvent = lEvent.substr(2);
            pElement.addEventListener(lEvent, pFunction, false);
            break;        
    }   
}

/*
Stops an Event from bubbling up to the containing elements
*/
function EDSSL_CancelBubble(pEventInfo)
{
    switch(EDSSL_GetBrowserType())
    {
        case EDSSL_Browsers_IE:
            pEventInfo.cancelBubble = true;
            break;
        case EDSSL_Browsers_Netscape:
            pEventInfo.stopPropagation();
            break;        
    }       
}

/*
Get the element where the event originated 
*/
function EDSSL_GetSourceElement(pEvent) 
{
    switch (EDSSL_GetBrowserType()) 
    {
        case EDSSL_Browsers_IE:
            return pEvent.srcElement;
        case EDSSL_Browsers_Netscape:
            return pEvent.target;
	}
}

/*
Stop an event being handled
*/
function EDSSL_CancelEvent(pEvent) 
{
    switch (EDSSL_GetBrowserType()) 
    {
        case EDSSL_Browsers_IE:
            pEvent.returnValue = false;
			break;
        case EDSSL_Browsers_Netscape:
            pEvent.preventDefault();
			break;
	}	
}


/* Check Browser Type */
var EDSSL_Browsers_IE = 'Microsoft Internet Explorer';
var EDSSL_Browsers_Netscape = 'Netscape';
function EDSSL_GetBrowserType()
{
    var lType = navigator.appName;
    switch(lType)
    {
        case EDSSL_Browsers_IE:
            return EDSSL_Browsers_IE;
        case EDSSL_Browsers_Netscape:
            return EDSSL_Browsers_Netscape;
        default:
            alert('EDSSL_GetBrowserType: Cannot resolve Brower Type ""' + lType + '""');
            return '';
    }    
}

function EDSSL_IsDisabled(pControl)
{
    switch(EDSSL_GetBrowserType())
    {
        case EDSSL_Browsers_IE:
            return pControl.disabled;
        case EDSSL_Browsers_Netscape:
            return (pControl.attributes['disabled'] != undefined) && (pControl.attributes['disabled'].value == 'disabled');
   }    
}

/* Function to find the Event information cross browser */
function EDSSL_FindEventInfo(pEvent)
{
    if(typeof(pEvent) != 'undefined') return pEvent;
    else if(typeof(event) != 'undefined') return event;
    else return null; //alert('Could not find Event info');
}

/*
Code for stopping event bubbling for Textareas -------------------------------------------------------------------------------
*/
function EDSSL_DisableEventBubblingForTextAreas()
{    
    var i=0, lLength, lSubject;
    lSubject = document;
    lLength = lSubject.all.length;
    for(i=0;i<lLength;i++)
    {
        if(lSubject.all[i].tagName == "TEXTAREA")
        {
            EDSSL_DisableEventBubblingForTextArea(lSubject.all[i]);
        }
    }
}
EDSSL_AddEvent(window, 'onload', EDSSL_DisableEventBubblingForTextAreas);

function EDSSL_DisableEventBubblingForTextArea(pTextArea)
{   
    EDSSL_AddEvent(pTextArea, "onkeypress", EDSSL_DisableEventBubbling);
    EDSSL_AddEvent(pTextArea, "onkeydown", EDSSL_DisableEventBubbling);
}

function EDSSL_DisableEventBubbling(pEvent)
{
    var lEventInfo = EDSSL_FindEventInfo(pEvent);
    EDSSL_CancelBubble(lEventInfo);
}

/*
Code for ShortCutKeyControl  -------------------------------------------------------------------------------
*/
/* Array for storing ShortCut Keys */
var EDSSL_ShortCutKeys = new Array();

/* Function for registering a new ShortCut Key */               
function EDSSL_RegisterShortCutKey(pObjectID, pKey, pAlt, pControl, pShift, pDescription)
{
    //debugger;                  
    EDSSL_ShortCutKeys[EDSSL_ShortCutKeys.length] = new Array(pObjectID, pKey, pAlt, pControl, pShift, pDescription);
}

function EDSSL_AddShortCutToolTips()
{
    var lControl, i;
    //alert('EDSSL_AddShortCutToolTips');
    for(i=0;i<EDSSL_ShortCutKeys.length;i++)
    {
        lControl = document.getElementById(EDSSL_ShortCutKeys[i][0]);
        if(lControl != undefined)
        {
            lControl.title += ' ' + EDSSL_ShortCutKeys[i][5];
        }
    }
}

/* Set varible to true, to show keycode for each keystroke */ 
var EDSSL_ShowKeyCodes = false;

/* Function which listens for keystrokes */
function EDSSL_ListenForShortCutKeys(pEvent)
{
    var i, lEvent;	                    
    lEvent = EDSSL_FindEventInfo(pEvent);
    //debugger;
    if(EDSSL_ShowKeyCodes) window.status = 'Keycode: ' + lEvent.keyCode;
    for(i=0; i<EDSSL_ShortCutKeys.length; i++)
    {
        if(lEvent.keyCode == EDSSL_ShortCutKeys[i][1])
        {	
            if(lEvent.altKey == EDSSL_ShortCutKeys[i][2] && lEvent.ctrlKey == EDSSL_ShortCutKeys[i][3] &&  lEvent.shiftKey == EDSSL_ShortCutKeys[i][4])
            {    
                //debugger;
                if(document.getElementById(EDSSL_ShortCutKeys[i][0]) != null)
                {
                    var lControl = document.getElementById(EDSSL_ShortCutKeys[i][0]);
                    if(lControl != undefined)
                    {
                        var lToolTip = lControl.title;
                        if(EDSSL_IsDisabled(lControl)) 
                        {
                            alert(lToolTip);
                        }
                        else 
                        {
                            window.status = 'Performing shortcut key action ""' + lToolTip + '""...'; 
                            if(EDSSL_GetBrowserType() == EDSSL_Browsers_Netscape && lControl.tagName == 'A')
                            {
                                document.location.href = lControl.href;
                            }
                            else
                            {
                                lControl.click();
                            }
                        }
                    }
                }
                else if(typeof(eval(EDSSL_ShortCutKeys[i][0])) == 'function')
                {
                    /* Execute function */
                    eval(EDSSL_ShortCutKeys[i][0] + '()');
                }                
                return false;
            }			
        }	
    }	
}

if(EDSSL_GetBrowserType() == EDSSL_Browsers_IE)
{
    EDSSL_AddEvent(window, 'onload', EDSSL_AddShortCutToolTips);
    EDSSL_AddEvent(document, 'onkeydown', EDSSL_ListenForShortCutKeys);
}


/* Open page in poup */
function EDSSL_OpenPopup(pURL)
{
    var lPosObj = undefined;
    try 
    { 
        lPosObj = top.document; 
    }
    catch (e) 
    { 
        lPosObj = document; 
    }
    var lPopupWidth = lPosObj.body.offsetWidth * 95 / 100;
    var lPopupHeight = lPosObj.body.offsetHeight * 95 / 100;
    var lPopupLeft = lPosObj.body.offsetLeft + ((lPosObj.body.offsetWidth - lPopupWidth) / 2);
    var lPopupTop = lPosObj.body.offsetTop + ((lPosObj.body.offsetHeight - lPopupHeight) / 2);
    window.open(pURL,"_blank","height=" + lPopupHeight + ",width=" + lPopupWidth + ",toolbar=no,resizable=yes,status=yes,modal=yes,top=" + lPopupTop + ",left=" + lPopupLeft + "");    
}



/* 
-------------------------
Lookup Consumer functions
-------------------------
*/
var EDS_LC_LookupHostPageUrl = "../../Pages/Common/LookupHostPage.aspx";
function EDS_LC_Popup(pURL, pTitle, pCrossDomain, pRelHeight, pRelWidth, pCallbackFunction, pPreferModalDialog)
{
    var lPosObj = undefined;
    try 
    { 
        lPosObj = top.document; 
    }
    catch (e) 
    { 
        lPosObj = document; 
    }
    var lPopupWidth = lPosObj.body.offsetWidth * pRelWidth / 100;
    var lPopupHeight = lPosObj.body.offsetHeight * pRelHeight / 100;
    var lPopupLeft = lPosObj.body.offsetLeft + ((lPosObj.body.offsetWidth - lPopupWidth) / 2);
    var lPopupTop = lPosObj.body.offsetTop + ((lPosObj.body.offsetHeight - lPopupHeight) / 2);
    if(window.showModalDialog && pPreferModalDialog) 
    {        
        if(pCrossDomain)
        {
            // Use LookupHost page
            var args = new Object();
            args.url = pURL; 
            args.title = pTitle;
            var dialogRtn = window.showModalDialog(EDS_LC_LookupHostPageUrl, args, 'dialogHeight: ' + lPopupHeight + 'px; dialogWidth: ' + lPopupWidth + 'px; dialogTop: ' + lPopupTop + 'px; dialogLeft: ' + lPopupLeft + 'px; edge: Raised; center: Yes; help: No; resizable: Yes; status: Yes;');
            if(dialogRtn!=undefined) 
            {
                pCallbackFunction(dialogRtn);                
            }
        }
        else
        {
            // Open page directly (solves window resizing bug in IE7)
            var args = new Object();
            args.title = pTitle;
            var dialogRtn = window.showModalDialog(pURL, args, 'dialogHeight: ' + lPopupHeight + 'px; dialogWidth: ' + lPopupWidth + 'px; dialogTop: ' + lPopupTop + 'px; dialogLeft: ' + lPopupLeft + 'px; edge: Raised; center: Yes; help: No; resizable: Yes; status: Yes;');
            if(dialogRtn!=undefined)
            {                
                pCallbackFunction(dialogRtn);                
            }
        }
    }
    else
    {
        var w = window.open(null, "_blank", "height=700,width=900,toolbar=no,resizable=yes,status=yes,modal=yes,top=150,left=150");
        w.document.open();
        w.document.writeln("<html>\n<frameset><frame src='" + pURL + "'/></frameset>\n</html>");
        w.document.close();
        w.returnLookupResult = pCallbackFunction;
    }
}


/*
// Grid Postback - Short naming for more efficient grid rendering 
function gP(pParameters)
{
    var lParamsArray = pParameters.split("|");
    var lArgument = "";
        
    // Sort not implpemented
    if(lParamsArray[1] == "E")
    {
        lArgument = "Edit";
    }
    else if(lParamsArray[1] == "S")
    {
        lArgument = "Select";
    }
    else if(lParamsArray[1] == "C")
    {
        lArgument = "Cancel";
    }
    else if(lParamsArray[1] == "P")
    {
        lArgument = "Page";
    }
    else if(lParamsArray[1] == "U")
    {
        lArgument = "Update";
    }
    else if(lParamsArray[1] == "D")
    {
        lArgument = "Delete";
    }
    else
    {
        alert("Dont know how to handle parameter string '" + pParameters + "'!");
        debugger;
    }
    
    __doPostBack("ctl00$CP$" + lParamsArray[0], lArgument + "$" + lParamsArray[2]);
}
*/
