// Enumeration for most popular browser types
var BrowserAgents = {IE6:0, IE7:1, IE7plus:2, IE:3, Firefox:4, Opera:5, Other:6};

// This function returns the user's browser type
function GetBrowserAgent()
{ 
    if (navigator.userAgent.indexOf("MSIE") >= 0)
    {
        // If Internet Explorer then check the version
        var sVer = navigator.userAgent;
        sVer = sVer.substring(sVer.indexOf("MSIE") + 5, sVer.indexOf("MSIE") + 6);
        sVer = new Number(sVer);
        if (sVer < 6)
        {
            return BrowserAgents.IE;
        }
        else if (sVer == 6)
        {
            return BrowserAgents.IE6;
        }
        else if (sVer == 7)
        {
            return BrowserAgents.IE7;
        }
        else
        {
            return BrowserAgents.IE7plus;
        }        
    }
    else if (navigator.userAgent.indexOf("Firefox"))
    {
        return BrowserAgents.Firefox;
    }
    else if (navigator.userAgent.indexOf("Opera"))
    {
        return BrowserAgents.Opera;
    }
    else
    {
        return BrowserTypes.Other;
    }
}

function SetUniqueRadioButton(nameregex, current)
{
   re = new RegExp(nameregex);
   for(i = 0; i < document.forms[0].elements.length; i++)
   {
      elm = document.forms[0].elements[i]
      if (elm.type == 'radio')
      {
         if (re.test(elm.name))
         {
            elm.checked = false;
         }
      }
   }
   current.checked = true;
}

function DisableAllInputControls(a_ctlHolderId, a_bDisable)
{
    var ctlHolder = document.getElementById(a_ctlHolderId);
    var arrInputControls = ctlHolder.getElementsByTagName('INPUT');
    
    for (var i = 0; i < arrInputControls.length; i++)
    {
        if (a_bDisable)
        {
            arrInputControls[i].disabled = 'disabled';            
        }
        else
        {
            arrInputControls[i].disabled = '';
        }
    }
}

/*shows/hides element based on a radio button*/
function ShowHidePanel(pnlPanelId)
{
    var pnlPanel = document.getElementById(pnlPanelId);
    
    //alert(pnlPanel.className.indexOf('Main_Hidden'));
    if (pnlPanel.className.indexOf('Main_Hidden') >= 0)
        pnlPanel.className = pnlPanel.className.replace('Main_Hidden', 'Main_NotHidden');
    else
    {
        if (pnlPanel.className.indexOf('Main_NotHidden') >= 0)
            pnlPanel.className = pnlPanel.className.replace('Main_NotHidden', 'Main_Hidden');
        else
            pnlPanel.className += ' Main_Hidden';
    }
}

/*Register1.aspx - shows/hides element based on a radio button*/
function ShowHide(rb, pnl)
{
    if(document.getElementById(rb).checked)
        document.getElementById(pnl).className = 'Main_NotHidden';
    else
        document.getElementById(pnl).className = 'Main_Hidden';
}

/* Sets hint message in text box. The hint message
 * helps the user to know what to type into the textbox.
 */
function SetHintTextbox(a_ctlTextbox, a_sMessage, a_sHintCssClass)
{    
//alert('SetHintTextbox');
    if (a_ctlTextbox.value.length == 0)
    {
        a_ctlTextbox.className += (' ' + a_sHintCssClass);
        a_ctlTextbox.value = a_sMessage;
    }
}

/* Removes hint message for text box.
 */
function RemoveHintTextbox(a_ctlTextbox, a_sHintCssClass)
{
//alert('RemoveHintTextbox');
    if (a_ctlTextbox.className.indexOf(a_sHintCssClass) >= 0)
    {
        a_ctlTextbox.className = a_ctlTextbox.className.replace(a_sHintCssClass, '');
        a_ctlTextbox.value = '';
    }
}

/*Home.aspx*/
function ChangeStyle(ID, style)
{
    document.getElementById(ID).className = style
}

/* Descrioption
 * Summary: CheckBox control will seem as readonly.
 * Parameters:
 *              * a_oEvent - event object raised
 *              * a_ctlCheckBoxId - ClientId for the checkbox
 */
function CheckBoxReadonly(a_oEvent, a_ctlCheckBoxId)
{    
    var ctlCheckBox = document.getElementById(a_ctlCheckBoxId);
    if(ctlCheckBox)
    {        
        var bChecked = ctlCheckBox.checked;
        //alert(bChecked);
        ctlCheckBox.checked = !bChecked;
    }
}

/* Gets the first parent that has absolute position
*/
function ParentAbsolutePosition(ctlControl)
{
    var ctlTemp = ctlControl;
    while(ctlTemp != null)
    {
        if (ctlTemp.style
            && ctlTemp.style.position == 'absolute')
        {
            return ctlTemp;
        }
    
        if (ctlTemp.offsetParent)
        {
            ctlTemp = ctlTemp.offsetParent;
        }
        else if (ctlTemp.parentNode)
        {
            //alert(ctlTemp.parentNode);
            ctlTemp = ctlTemp.parentNode;
        }
        else 
        {            
            ctlTemp = null;
        }
    }
    return null;
}

/* Summary: Returns left offset of the control
   Parameters:
        * ctlControl - control which offset left is required
*/
function OffsetLeft(ctlControl)
{
    var ctlTemp = ctlControl;
    var nResult = 0;
    while(ctlTemp != null)
    {   
        nResult += ctlTemp.offsetLeft;                        
        
        if (ctlTemp.style
            && ctlTemp.style.position == 'absolute')
        {
            //alert(ctlTemp.offsetLeft);
            break;
        }
        
        ctlTemp = ctlTemp.offsetParent;                
    }
    return nResult;
}

/* Summary: Returns top offset of the control
   Parameters:
        * ctlControl - control which offset top is required
*/
function OffsetTop(ctlControl)
{
    var ctlTemp = ctlControl;
    var nResult = 0;
    while(ctlTemp != null)
    {                             
        if (GetBrowserAgent() == BrowserAgents.IE6
            || GetBrowserAgent() == BrowserAgents.IE7)
        {                    
            if (ctlTemp.offsetTop)
            {                
                nResult += ctlTemp.offsetTop;
            }
            
            if (ctlTemp.style
                && ctlTemp.style.position == 'absolute')
                break; 
        }
        else if (ctlTemp.offsetTop)            
        {    
            nResult += ctlTemp.offsetTop;                       
        }                       
               
        if (ctlTemp.offsetParent)
        {
            ctlTemp = ctlTemp.offsetParent;
        }
        else if (ctlTemp.parentNode)
        {
            //alert(ctlTemp.parentNode);
            ctlTemp = ctlTemp.parentNode;
        }
        else 
        {            
            ctlTemp = null;
        }
    }
    return nResult;
}

/* Summary: Returns the scroller possition on Y axis */
function ScrollY() {
    if (window.pageYOffset) 
    {
        return window.pageYOffset;
    }
    else 
    {
        if (document.documentElement && document.documentElement.scrollTop) 
        {
            return document.documentElement.scrollTop;
        }
        else if (document.body) 
        {
            return document.body.scrollTop;
        }
    }
    return 0;
}

/* Summary: Returns the scroller possition on X axis */
function ScrollX() {
    if (window.pageXOffset) 
    {
        return window.pageXOffset;
    }
    else 
    {
        if (document.documentElement && document.documentElement.scrollLeft) 
        {
            return document.documentElement.scrollLeft;
        }
        else if (document.body) 
        {
            return document.body.scrollLeft;
        }
    }
    return 0;
}

function ClientX(a_oEvent)
{
    if (window.event)
        a_oEvent = window.event;
        
	if (a_oEvent.pageX) 		
		return a_oEvent.pageX;	
	else if (a_oEvent.clientX) 		
		return a_oEvent.clientX;	
}

function ClientY(a_oEvent)
{
    if (window.event)
        a_oEvent = window.event;
        
	if (a_oEvent.pageY) 		
		return a_oEvent.pageY;	
	else if (a_oEvent.clientY) 		
		return a_oEvent.clientY;	
}

function IsMouseInside(a_oEvent, a_sElementId)
{
    var ctlElement = document.getElementById(a_sElementId);
    var nOffsetLeft = OffsetLeft(ctlElement);
    var nOffsetTop = OffsetTop(ctlElement);
    
    if ( nOffsetLeft < ClientX(a_oEvent) && ClientX(a_oEvent) < ctlElement.offsetWidth + nOffsetLeft
        && nOffsetTop < ClientY(a_oEvent) && ClientY(a_oEvent) < ctlElement.offsetHeight + nOffsetTop)
    {
        return true;
    }
    else
    {
        return false;
    }        
}

function WindowWidth()
{
    if (window.innerWidth) 
    {
        return window.innerWidth;
    }
    else 
    {
        if (document.documentElement && document.documentElement.clientWidth) 
        {
            return document.documentElement.clientWidth;
        }
        else if (document.body) 
        {
            return document.body.clientWidth;
        }
    }
    return 0;
}

function WindowHeight()
{
    if (window.innerHeight) 
    {
        return window.innerHeight;
    }
    else 
    {
        if (document.documentElement && document.documentElement.clientHeight) 
        {
            return document.documentElement.clientHeight;
        }
        else if (document.body) 
        {
            return document.body.clientHeight;
        }
    }
    return 0;
}

/* function description
 * Summary: This function is used to block the submit action if
 *          the confirmation is not valid.
 * Parameters:
 *              * e - event param
 *              * a_bConfirmResult - boolean confirmation result
 */
function Submit_Confirm(e, a_bConfirmResult)
{
    //alert('Submit_Confirm');
    if (a_bConfirmResult)
    {
        if(window.event)
        {
            e.returnValue = true
        }        
	    return true;
	}
    else
    {
        if(window.event)
        {
            e.returnValue = false;
        }
        else
        {
            e.preventDefault();
        }
	    return false;
    }
}

/* function description
 * Summary: This function is used to confirm password change
 * Parameters:
 *              * e - event param
 */
function AddUpLineItem_ConfirmChangePassword(e)
{
    //alert('AddUpLineItem_ConfirmChangePassword');
    var bConfirmation = confirm("Are you sure you want to add that item to the quotation total?");
    
    return Submit_Confirm(e, bConfirmation);
}

/* function description
 * Summary: This function is used to confirm password change
 * Parameters:
 *              * e - event param
 */
function RemoveDownLineItem_ConfirmChangePassword(e)
{
    //alert('RemoveDownLineItem_ConfirmChangePassword');
    var bConfirmation = confirm("Are you sure you want to remove that item from the quotation total?");
    
    return Submit_Confirm(e, bConfirmation);
}

/* function description
 * Summary: Gets the Flash Movie object that allows flash management
 *          with JavaScript
 * Parameters:
 *              * a_sMovieName - Flash Movie name
 */
function GetFlashMovieObject(a_sMovieName)
{       
    if (window.document[a_sMovieName]) 
    {      
      return window.document[a_sMovieName];
    }
    if (navigator.appName.indexOf("Microsoft Internet")==-1)
    {        
        if (document.embeds && document.embeds[a_sMovieName])
            return document.embeds[a_sMovieName]; 
    }
    else // if (navigator.appName.indexOf("Microsoft Internet")!=-1)
    {    
        //return document.getElementById(a_sMovieName + "IE");
        return document.getElementById(a_sMovieName);
    }
}

/* function description
 * Summary: Plays Flash Movie 
 * Parameters:
 *              * a_sMovieName - Flash Movie name
 */
function PlayFlashMovie(a_sMovieName)
{
    var oFlashMovie = GetFlashMovieObject(a_sMovieName); 
    //alert(oFlashMovie);
    if (oFlashMovie != null)
    {
        oFlashMovie.Play();    
    }
}

/* function description
 * Summary: Stops Flash Movie
 * Parameters:
 *              * a_sMovieName - Flash Movie name
 */
function StopFlashMovie(a_sMovieName)
{
    var oFlashMovie = GetFlashMovieObject(a_sMovieName); 
    if (oFlashMovie != null)
    {      
        oFlashMovie.StopPlay();
    }
}

/* function description
 * Summary: Rewinds Flash Movie
 * Parameters:
 *              * a_sMovieName - Flash Movie name
 */
function RewindFlashMovie(a_sMovieName)
{
    var oFlashMovie = GetFlashMovieObject(a_sMovieName);    
    if (oFlashMovie != null)
    {
        oFlashMovie.Rewind();    
    }
}

/* function description
 * Summary: Sets Flash Movie variable
 * Parameters:
 *              * a_sMovieName - Flash Movie name
 *              * a_sVariableName - Variable name
 *              * a_sVariableValue - Variable value
 */
function SetVariableFlashMovie(a_sMovieName, a_sVariableName, a_sVariableValue)
{
    var oFlashMovie = GetFlashMovieObject(a_sMovieName);    
    oFlashMovie.SetVariable(a_sVariableName, a_sVariableValue);
}

/* function description
 * Summary: Gets Flash Movie variable
 * Parameters:
 *              * a_sMovieName - Flash Movie name
 *              * a_sVariableName - Variable name
 */
function GetVariableFlashMovie(a_sMovieName, a_sVariableName)
{
    var oFlashMovie = GetFlashMovieObject(a_sMovieName, a_sVariableName);    
    return oFlashMovie.GetVariable(a_sVariableName);
}

/* function decription
 * Summary: Loads the help content into the IFRAME object
 * Parameters:
 *              * a_ctlFrameId - id for the IFRAME object where to load the help content
 *              * a_nItemId - Help item Id                
 */
function LoadHelpContent(a_ctlFrameId, a_nItemId, a_sHelpPageUrl)
{
    var ctlFrame = document.getElementById(a_ctlFrameId);
    ctlFrame.src = a_sHelpPageUrl + '?ID=' + a_nItemId;
}
