﻿function getAbsoluteLeft(objectId) {
	// Get an object left position from the upper left viewport corner
	// Tested with relative and nested objects
	o = document.getElementById(objectId)
	oLeft = o.offsetLeft            // Get left position from the parent object
	while(o.offsetParent!=null) {   // Parse the parent hierarchy up to the document element	
		oParent = o.offsetParent    // Get parent object reference
		oLeft += oParent.offsetLeft // Add parent left position
		o = oParent
	}
	// Return left postion
	return oLeft
}

function getAbsoluteTop(objectId) {
	// Get an object top position from the upper left viewport corner
	// Tested with relative and nested objects
	o = document.getElementById(objectId)
	oTop = o.offsetTop            // Get top position from the parent object
	while(o.offsetParent!=null) { // Parse the parent hierarchy up to the document element
		oParent = o.offsetParent  // Get parent object reference
		oTop += oParent.offsetTop // Add parent top position
		o = oParent
	}
	// Return top position
	return oTop
}

function GetDropDownValue(ddl)
{
    return ddl.options[ddl.selectedIndex].value;
}

function Trim(str)
{
    var m = str.match(/^\s*(\S+(\s+\S+)*)\s*$/);
    return (m == null) ? "" : m[1];
}

function ReturnObjById(strId) {
    var tempObj = document.getElementById(strId);    
	return tempObj;
}

function ClearAllChildren(node)
{
    while (node.hasChildNodes())
    {
        node.removeChild(node.firstChild);
    }
}

function MirrorObjects(ctl1,ctl2)
{
	ctl1.style.top = ctl2.style.top;
	ctl1.style.left = ctl2.style.left;
	ctl1.style.width = ctl2.offsetWidth;
	ctl1.style.height = ctl2.offsetHeight;
	ctl1.style.display = ctl2.style.display;
}

function CreateDateFromString(strValue)
{
    var strSeparator = null;
    if(strValue.indexOf('-') > -1)
        strSeparator = "-";
    else if(strValue.indexOf('.') > -1)
        strSeparator = ".";
    else
        strSeparator = "/";
        
    var arrayDate = strValue.split(strSeparator);
    
    if(arrayDate[2].length == 2)
    {    
        arrayDate[2] = "20" + arrayDate[2];
    }
    return new Date(Number(arrayDate[2]),(Number(arrayDate[0]) - 1),Number(arrayDate[1]));
}

function ValidateDate( strValue ) {
    if(strValue == "")
        return false;

    var objRegExp = /^\d{1,2}(\-|\/|\.)\d{1,2}\1\d{2,4}$/
    if(!objRegExp.test(strValue))
            return false;

    var strSeparator = null;
    if(strValue.indexOf('-') > -1)
        strSeparator = "-";
    else if(strValue.indexOf('.') > -1)
        strSeparator = ".";
    else
        strSeparator = "/";
        
    var arrayDate = strValue.split(strSeparator);
    
    if(arrayDate[0].length == 1)
    {
        arrayDate[0] = "0" + arrayDate[0];
        strValue = arrayDate[0] + strSeparator + arrayDate[1] + strSeparator + arrayDate[2];        
    }
    
    if(arrayDate[1].length == 1)
    {
        arrayDate[1] = "0" + arrayDate[1];
        strValue = arrayDate[0] + strSeparator + arrayDate[1] + strSeparator + arrayDate[2];        
    }
    
    if(arrayDate[2].length == 2)
    {
        arrayDate[2] = "20" + arrayDate[2];
        strValue = arrayDate[0] + strSeparator + arrayDate[1] + strSeparator + arrayDate[2];
    }
    
    if(arrayDate[2].length != 4)
        return false
    
    var arrayLookup = { '01' : 31, '03' : 31, '04' : 30, '05' : 31, '06' : 30, '07' : 31,
            '08' : 31, '09' : 30, '10' : 31, '11' : 30, '12' : 31 }
    var intDay = parseInt(arrayDate[1],10); 

    if(arrayLookup[arrayDate[0]] != null) 
    {
        if(intDay <= arrayLookup[arrayDate[0]] && intDay != 0)
            return true;
    }

    var intMonth = parseInt(arrayDate[0],10);
    if (intMonth == 2) 
    { 
        var intYear = parseInt(arrayDate[2]);
        if (intDay > 0 && intDay < 29) 
        {
            return true;
        }
        else if (intDay == 29) 
        {
            if ((intYear % 4 == 0) && (intYear % 100 != 0) || (intYear % 400 == 0)) 
            {
                return true;
            }   
        }
    } 
    return false;
}

Type.registerNamespace('eSales');

eSales.ObjectAbsoluteBounds = function(object)
{
    var tempObject = object;    
    var y = 0;
    while( tempObject != null ) {
        y += tempObject.offsetTop;
        tempObject = tempObject.offsetParent;
    }
    
    tempObject = object;
    var x = 0;
    while( tempObject != null ) {
        x += tempObject.offsetLeft;
        tempObject = tempObject.offsetParent;
    }
    
    return new Sys.UI.Bounds(x, y, object.offsetWidth, object.offsetHeight);
}

eSales.ClearAllChildNodes = function(ctl)
{
    if (!ctl) return;
    while(ctl.firstChild) ctl.removeChild(ctl.firstChild); 
}
    
var Page = new Object();

Page.Print = function()
{
    window.print();
}

Page.Validate = function(validationGroup)
{    
    Page_IsValid = true;
    
    if(Page_ValidationActive)
    {
        for(var i = 0; i < Page_Validators.length; i++)
        {                   
            if(validationGroup == null)   
            {
                ValidatorValidate(Page_Validators[i],null,null);
                if(!Page_Validators[i].isvalid)
                    Page_IsValid = false;
            }
            else
            {                  
                if(Page_Validators[i].validationGroup == validationGroup)
                {
                    ValidatorValidate(Page_Validators[i],validationGroup,null);                    
                    if(!Page_Validators[i].isvalid)
                        Page_IsValid = false;                 
                }                    
            }
        }
        
        if(!Page_IsValid)
        {
            // This is causing the validtor text to hide
            ValidationSummaryOnSubmit(validationGroup);    
        }  
    }        
            
    return Page_IsValid;
}

Page.ValidateValidator = function(validatorID)
{
    if(Page_ValidationActive)
    {
        for(var i = 0; i < Page_Validators.length; i++)
        {             
            if(Page_Validators[i].id == validatorID)
            {
                ValidatorValidate(Page_Validators[i],Page_Validators[i].validationGroup,null);
                return Page_Validators[i].isvalid;
            }
        }
    }
}

Page.ResetAllValidators = function()
{
    for(var i = 0; i < Page_Validators.length; i++)
    {
        ReturnObjById(Page_Validators[i].id).style.display = 'none';
    }
}

Page.ResetAllValidationSummaries = function()
{
    for(var i = 0; i < Page_ValidationSummaries.length; i++)
    {   
        Page_ValidationSummaries[i].style.display = "none";
    }
}

Page.OnTimeOut = function()
{
    alert('There was a problem with your last request. Please refresh the page and try again later.');
}

Page.OnError = function(error)
{
    var stackTrace = error.get_stackTrace();
    var message = error.get_message();
    var statusCode = error.get_statusCode();
    var exceptionType = error.get_exceptionType();
    var timedout = error.get_timedOut();
   
    alert("Stack Trace: " +  stackTrace + "\n" +
        "Service Error: " + message + "\n" +
        "Status Code: " + statusCode + "\n" +
        "Exception Type: " + exceptionType + "\n" +
        "Timedout: " + timedout);
}

Page.IE6ShowDropDownLists = function()
{
    if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)) 
    {                    
        var tagElements = document.getElementsByTagName('SELECT'); 
        for (var x = 0; x < tagElements.length; x++)
            tagElements[x].style.visibility = '';
    }
}

Page.IE6HideDropDownLists = function()
{
    if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)) 
    {                    
        var tagElements = document.getElementsByTagName('SELECT'); 
        for (var x = 0; x < tagElements.length; x++)
            tagElements[x].style.visibility = 'hidden';
    }
}

Page.UpdateQueryString = function(queryString, name, value)
{
    var url = queryString.split('?')[0];
    var params = queryString.split('?')[1];
    
    if (params !== null && params !== undefined)
    {
        var found = false;
        var newParams = null;
        var pairs = params.split('&');
        for (var x = 0; x < pairs.length; x++)
        {
            if (pairs[x].split('=')[0] == name)
            {
                if (newParams === null)
                    newParams = name + "=" + value;
                else
                    newParams += "&" + name + "=" + value;
                found = true;
            }
            else
            {
                if (newParams === null)
                    newParams = pairs[x];
                else
                    newParams += "&" + pairs[x];
            }                        
        }
        
        if (!found)
        {
            if (newParams === null)
                newParams = name + "=" + value;
            else
                newParams += "&" + name + "=" + value;
        }
            
        return url + "?" + newParams;
    }
    else
    {
        return url + "?" + name + "=" + value;
    }
}

Page.QueryString = function(name)
{
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]" + name + "=([^&#]*)";
    var regex = new RegExp(regexS);
    var results = regex.exec(window.location.href);
    if(results == null)
        return "";
    else
        return results[1];
}

Page.URLDecodedQueryString = function(name)
{
    name = Page.QueryString(name);
    name = name.replace(/%2b/g, "PPPLLLUUUSSS");
    name = Page.URLDecode(name);
    name = name.replace(/PPPLLLUUUSSS/g, "+");
    return name;
}

Page.URLEncode = function(name)
{
    name = name.replace(/\+/g, "+PPPLLLUUUSSS+");       
    name = escape(name);
    return name = name.replace(/\+PPPLLLUUUSSS\+/g, "%2b");
}

Page.URLDecode = function(name)
{
    return unescape(name).replace(/\+/g, " ");
}

Page.StopEvent = function(evt)
{
   if (!evt)
   {
     if (window.event)
	    evt = window.event;
     else
	    return;
   }
   if (evt.cancelBubble != null)
      evt.cancelBubble = true;
   if (evt.stopPropagation)
      evt.stopPropagation();
   if (evt.preventDefault)
      evt.preventDefault();
   if (window.event)
      evt.returnValue = false;
   if (evt.cancel != null)
      evt.cancel = true;
}

// Begin Please Wait
var PleaseWait = new Object();

PleaseWait.Show = function()
{
    ReturnObjById('PleaseWait_Div').style.top = parseInt(document.documentElement.scrollTop + (document.documentElement.clientHeight/2) - 100) + 'px';
    ReturnObjById('PleaseWait_Div').style.left = '370px';
    ReturnObjById('PleaseWait_IFrame').style.display = 'inline';
    ReturnObjById('PleaseWait_Div').style.display = 'inline';
    MirrorObjects(ReturnObjById('PleaseWait_IFrame'),ReturnObjById('PleaseWait_Div'));
}

PleaseWait.Hide = function()
{
    ReturnObjById('PleaseWait_Div').style.display = 'none';
    ReturnObjById('PleaseWait_IFrame').style.display = 'none';
}