/**
 * COMMON DHTML FUNCTIONS
 * These are handy functions I use all the time.
 *
 * By Seth Banks (webmaster at subimage dot com)
 * http://www.subimage.com/
 *
 * Up to date code can be found at http://www.subimage.com/dhtml/
 *
 * This code is free for you to use anywhere, just keep this comment block.
 */

/**
 * X-browser event handler attachment and detachment
 * TH: Switched first true to false per http://www.onlinetools.org/articles/unobtrusivejavascript/chapter4.html
 *
 * @argument obj - the object to attach event to
 * @argument evType - name of the event - DONT ADD "on", pass only "mouseover", etc
 * @argument fn - function to call
 */
 
 var varImgBasePath;
 /*
    These are used for detecting the ajax postbacks whether they are begining or ending   
    --------------------------------------------------------------------------------------
 */
var pageRequestManager;
if(Sys!=null)
{
    pageRequestManager = Sys.WebForms.PageRequestManager.getInstance();
}
var postBackElement = "";

/*
    Variable for storing the functions text which are to be executed after the completion of ajax request
    ------------------------------------------------------------------------------------------------------
*/
var strFns_2_b_exe_aftr_ajax_rq="";

pageRequestManager.add_initializeRequest(initializeRequest);   
pageRequestManager.add_endRequest(endRequest);

function initializeRequest(sender, eventArgs) 
{   
}   
function endRequest(sender, eventArgs) 
{   
    if(strFns_2_b_exe_aftr_ajax_rq!="")
    {
        eval(strFns_2_b_exe_aftr_ajax_rq);
    }
}
/*
    Array for storing the pop up details
    ------------------------------------
*/
arrHelpObj = new Array();

function addEvent(obj, evType, fn)
{
    if (obj.addEventListener)
    {
        obj.addEventListener(evType, fn, false);
        return true;
    }
    else if (obj.attachEvent)
    {
        var r = obj.attachEvent("on"+evType, fn);
        return r;
    } 
    else 
    {
        return false;
    }
}
function removeEvent(obj, evType, fn, useCapture)
{
    if (obj.removeEventListener)
    {
        obj.removeEventListener(evType, fn, useCapture);
        return true;
    }
    else if (obj.detachEvent)
    {
        var r = obj.detachEvent("on"+evType, fn);
        return r;
    }
    else
    {
        alert("Handler could not be removed");
    }
}

/**
 * Code below taken from - http://www.evolt.org/article/document_body_doctype_switching_and_more/17/30655/
 *
 * Modified 4/22/04 to work with Opera/Moz (by webmaster at subimage dot com)
 *
 * Gets the full width/height because it's different for most browsers.
 */
function getViewportHeight() {
	if (window.innerHeight!=window.undefined) return window.innerHeight;
	if (document.compatMode=='CSS1Compat') return document.documentElement.clientHeight;
	if (document.body) return document.body.clientHeight; 

	return window.undefined; 
}
function getViewportWidth() {
	var offset = 17;
	var width = null;
	if (window.innerWidth!=window.undefined) return window.innerWidth; 
	if (document.compatMode=='CSS1Compat') return document.documentElement.clientWidth; 
	if (document.body) return document.body.clientWidth; 
}

/**
 * Gets the real scroll top
 */
function getScrollTop() {
	if (self.pageYOffset) // all except Explorer
	{
		return self.pageYOffset;
	}
	else if (document.documentElement && document.documentElement.scrollTop)
		// Explorer 6 Strict
	{
		return document.documentElement.scrollTop;
	}
	else if (document.body) // all other Explorers
	{
		return document.body.scrollTop;
	}
}
function getScrollLeft() {
	if (self.pageXOffset) // all except Explorer
	{
		return self.pageXOffset;
	}
	else if (document.documentElement && document.documentElement.scrollLeft)
		// Explorer 6 Strict
	{
		return document.documentElement.scrollLeft;
	}
	else if (document.body) // all other Explorers
	{
		return document.body.scrollLeft;
	}
}

/*
    function for disabling the controls during AJAX post backs.
    
    This function can be assigned to a control during any action for a server control at client side,
    by adding attributes by "Attributes.Add" to the server control through server script.

    The zeroth array element is default Prefix which is common for every clientid of the control generated by the server.
    So this is taken in to a variable CtrlPreFix.
    So for every control the clientId is combination of CtrlPreFix & arrObjs[] element.
    
    parObjs which has to be provided from server side.    
    parObjs is string contains the control ids(seperated by "," and doesn't include the CtrlPrefix) they are to be disabled.    
    Then after they are converted to array through javascript split() function.
    
*/
function DisableChildren(parObjs)
{
    var arrObjs, CtrlPreFix, varI, tempCtrlID;
    arrObjs = parObjs.split(',');
    CtrlPreFix = arrObjs[0];
    if(CtrlPreFix=="__Page_")//"__Page_" is generated if there is master page for the form.
    {
        CtrlPreFix = "";//Making 'CtrlPreFix' blank if the form has no master page
    }
    for(varI=1;varI<arrObjs.length;varI++)
    {
        tempCtrlID = CtrlPreFix + arrObjs[varI];
        
        document.getElementById(tempCtrlID).disabled = true;
        if(document.getElementById(tempCtrlID).tagName == "SELECT") // checking for a drop down type.
        {
            if(document.getElementById(tempCtrlID).options[0]!=null)
            {
                document.getElementById(tempCtrlID).options[0].selected=true;
                document.getElementById(tempCtrlID).options[0].text = 'Loading...';
            }
        }
    }
}

function HideObjects(parObjs)
{
    var arrObjs, CtrlPreFix, varI, tempCtrlID;
    arrObjs = parObjs.split(',');
    CtrlPreFix = arrObjs[0];
    if(CtrlPreFix=="__Page_")//"__Page_" is generated if there is master page for the form.
    {
        CtrlPreFix = "";//Making 'CtrlPreFix' blank if the form has no master page
    }
    for(varI=1;varI<arrObjs.length;varI++)
    {
        tempCtrlID = CtrlPreFix + arrObjs[varI];
        
        document.getElementById(tempCtrlID).style.visibility = "hidden";
    }
}

function HideAjaxProgress(parObj,parStyle)
{
    parObj = document.getElementById(parObj);
    parObj.style.display = parStyle;
}

function showHelp(parCtrlPrefix, parObjContainer, parHelpText, parHideObjs)
{
    var varWidth = "", arrHideObjs, varI ;
    
    parObjContainer = document.getElementById(parObjContainer);
    parObjContainer.style.position = "absolute";
    if(parHelpText!='')
    {
        //#B9c9Dc,#cfdfe5,#C5D6FC
        parHelpText = "<table bgcolor='transparent' cellspacing=0 cellpadding=0 ><tr><td valign='top'><img src='" + varImgBasePath + "leftArrow.ico'/></td><td valign='top' style='border:1px solid #90A1B7;background-color:#C5D6FC;padding:2px 2px;' class='vsmlTxt'>" + parHelpText + "</td></tr></table>"
    }
    else
    {
        varWidth = "";
    }
    
    parObjContainer.innerHTML = parHelpText;
    
    //To hide / resizing the controls the controls please uncomment this code.
    
    if(parHideObjs!="")
    {
        arrHideObjs = parHideObjs.split(",");
        
        for(varI=0;varI<arrHideObjs.length;varI++)
        {
            arrTempObj = arrHideObjs[varI].split("~|");
            parTempObj = document.getElementById(parCtrlPrefix + arrTempObj[0]);
            if(parHelpText!='')
            {
                varWidth = arrTempObj[1];
            }
            parTempObj.style.width = varWidth;
        }
    }
    
}
function assign_Functions(parType)
{
    parType = parType.toUpperCase();
    switch(parType)
    {
        case "HELP":
                    for(varI=0;varI<arrHelpObj.length;varI++)
                    {
                        var varCtrl_Prefix = arrHelpObj[varI][0];
                        var objSrcCtrl = varCtrl_Prefix + arrHelpObj[varI][1];
                        var objEve = arrHelpObj[varI][2];
                        var objRestore_Eve = arrHelpObj[varI][3];
                        var strContainer = arrHelpObj[varI][4];
                        var strHelpText = arrHelpObj[varI][5];
                        var strHideObjs = "";
                        
                        if(arrHelpObj[varI][6]!=null)
                            strHideObjs = arrHelpObj[varI][6];
                            
                        if(document.getElementById(objSrcCtrl)!=null)
                        {
                            eval("addEvent(document.getElementById('" + objSrcCtrl +"')." + objEve + " = function(){showHelp('" + varCtrl_Prefix + "','" + strContainer + "','" + strHelpText + "','" + strHideObjs + "');});");
                            eval("addEvent(document.getElementById('" + objSrcCtrl +"')." + objRestore_Eve + " = function(){showHelp('" + varCtrl_Prefix + "','" + strContainer + "','','" + strHideObjs + "');});");
                        }
                    }
                    break;
        case "FOCUS":
                    break;
    }
}

function chkDate(parDate)
{
	
	if(/^\d{1,2}\/\d{1,2}\/\d{4}$/.test(parDate))
	{

		var d, m , y, chkDt;
		
		d=parDate.substr(0,parDate.indexOf("/"));
		m=parDate.substring(parDate.indexOf("/")+1,parDate.lastIndexOf("/"));
		y=parDate.substr(parDate.lastIndexOf("/")+1);
	
		chkDt=new Date(y,m-1,d);
	
		if(chkDt.getDate() == parseInt(d) && chkDt.getMonth() == parseInt(m-1) && chkDt.getFullYear() == parseInt(y))
		{
			return true;
		}
		else
		{
			return false;
		}		
	}
	else
	{
		return false;	
	}
}
