// **********************************************************************
//  HTML functions - Get Element Information
// **********************************************************************
function getElement(elementId)
{
    var element; 
    if (document.all) 
        element = document.all[elementId]; 
    else if (document.getElementById) 
        element = document.getElementById(elementId); 
    return element;
}

function getElementChecked(elementId)
{
    var element = getElement(elementId); 
    if (isElement(element) && isElement(element.checked))
		return element.checked;
	else
	    return false; 
}

function getElementDims(elementId) 
{ 
    var coords = {x: 0, y: 0, w: 0} 
    var element = getElement(elementId); 
    if (isElement(element))
    {
        coords.w = element.offsetWidth; 
        while (element) 
        {
            coords.x += element.offsetLeft; 
            coords.y += element.offsetTop; 
            element = element.offsetParent; 
        } 
    }
    return coords; 
} 

function getElementHTML(elementId)
{
    var element = getElement(elementId); 
    if (isElement(element) && isElement(element.innerHTML))
	    return element.innerHTML;
	else            
	    return ""; 
}

function getElementSelect(elementId)
{
    var sReturn = "";
    var element = getElement(elementId);
    if (isElement(element) && isElement(element.options))
	{
		for (var iLoop = 0; iLoop < element.options.length; iLoop ++)
		{
			if (element.options[iLoop].selected)
			{
				sReturn = element.options[iLoop].value;
				break;                  
			}
		}
    }

    return sReturn;
}

function getElementSelectText(elementId)
{
    var sReturn = "";
    var element = getElement(elementId);
    if (isElement(element) && isElement(element.options))
	{
		for (var iLoop = 0; iLoop < element.options.length; iLoop ++)
		{
			if (element.options[iLoop].selected)
			{
				sReturn = element.options[iLoop].text;
				break;                  
			}
		}
    }

    return sReturn;
}

function getElementValue(elementId)
{
    var element = getElement(elementId); 
    if (isElement(element) && isElement(element.value))
		return element.value;
	else
	    return ""; 
}

// **********************************************************************
//  HTML functions - Set Element Information
// **********************************************************************
function setElementBorder(elementId, sBorder)
{
    var element = getElement(elementId);
    if (isElement(element) && isElement(element.style))
	    element.style.border = sBorder;
}

function setElementChecked(elementId, bValue)
{
    var element = getElement(elementId); 
    if (isElement(element) && isElement(element.checked))
	    element.checked = bValue;
}

function setElementColor(elementId, sValue)
{
    var element = getElement(elementId);
    if (isElement(element) && isElement(element.style))
        element.style.color = sValue;
}

function setElementHTML(elementId, sValue)
{
    var element = getElement(elementId);
    if (isElement(element) && isElement(element.innerHTML))
        element.innerHTML = sValue;
}

function setElementSelect(elementId, sValue)
{
    var element = getElement(elementId);
    if (isElement(element) && isElement(element.options))
    {
		for (var iLoop = 0; iLoop < element.options.length; iLoop ++)
		{
			if (element.options[iLoop].value.toUpperCase() == sValue.toUpperCase())
			{
				element.options[iLoop].selected = true;
				break;                  
			}
		}
    }
}

function setElementSource(elementId, sSource)
{
    var element = getElement(elementId);
    if (isElement(element) && isElement(element.src))
        element.src = sSource;
}

function setElementValue(elementId, sValue)
{
    var element = getElement(elementId);
    if (isElement(element) && isElement(element.value))
        element.value = sValue;
}

function showElement(elementId, bShow)
{
    var element = getElement(elementId);
    if (isElement(element) && isElement(element.style))
        element.style.display = bShow ? "" : "none";
}

// **********************************************************************
//  HTML functions - Validation / Formatting
// **********************************************************************
function validateZip(sCountry, sValue)
{
    var bReturn = true;
    
    if (sCountry == "US" || sCountry == "CAN")
    {
        if (!isBlank(sValue))
        {
            if (sCountry == "US")
                bReturn = validZip(sValue);
        }
        else
            bReturn = false;
    }
    
    return bReturn;
}

function validInt(sValue)
{
	return /^-{0,1}\d+$/.test(sValue); 
}

function validFloat(sValue)
{
    return /^-{0,1}\d+\.?\d*$/.test(sValue);
}

function validPrice(sValue)
{
    return /^\d+\.?\d{0,2}$/.test(sValue);
}

function validZip(sValue)
{
    return /^\d{5}$|^\d{9}$|^\d{5}-\d{4}$/.test(sValue);
}

function isBlank(sCheck)
{
	return trim(sCheck).length == 0;
}

function isElement(element)
{
	return (typeof(element) != 'undefined' && element!=null);
}

function isVisible(elementId)
{
    var bReturn = false;
    var element = getElement(elementId);
    if (isElement(element))
    {
        if (isElement(element.style))
            bReturn = (element.style.display != 'none');
    }
    return bReturn;
}

function trim(sValue)
{
	return sValue.replace(/^\s*|\s*$/g,"");
}

function stripPrice(sPrice)
{
    return sPrice.replace(/[$,]/g,"");
}

//CWIM 71325 - Rounding issue mentioned by Elizabeth in dialog
//VM Created new helper function RoundUp because when trying to round say 8.415 up to 2 decimals
//the result is 8.41 instead of 8.42. This function will help it round correctly.
//Updated the function to use the generic round off parameter dec 
function roundUp(num,dec) {
    //Javascript returns (101.13*50)/100 as 50.564999999999999999  in place 50.565 so before rounding off at 2 digits add .00001 to compensate for the javascript calculation 
    num=num + (1/Math.pow(10,dec+3));
    return Math.round(num * Math.pow(10,dec))/Math.pow(10,dec);
   /*    
        var snum=num.toString();
        var dnew;
     //   var dNew=Math.round(num * 100)/100;
        if (snum.indexOf(".") == -1) 
        { 
            dNew=num; 
        }
        else
        {  
        var dotIndex =snum.indexOf(".") +1
			var noOfDecOrig=snum.length -dotIndex; //No of decimals in original string
			if (noOfDecOrig>dec)
			{
				var nextDecVal=snum.substring(dotIndex+dec,dotIndex+dec+1)
				if (nextDecVal>=5)
				{
					dNew=snum.substring(0,dotIndex+dec)*1 + (1/Math.pow(10,dec));
				}
				else
				{
					dNew=snum.substring(0,dotIndex+dec)*1;
				}
			}
			else
			{
				dNew=snum*1; 
			}
		}
		
		return dNew;
		
*/		
/*			    dNew=Math.round(num * 100)/100;        
			    var dDiff=num-dNew;
			    var sDiff=dDiff.toString();
			    sDiff=sDiff.substring(eval(sDiff.indexOf(".")+1),sDiff.length);
			    sDiff=sDiff.substring(eval(dec),eval(dec+2));
			    sDiff=parseInt(sDiff);
			    if (sDiff>45)
			    {
			        var dTol= 1 / Math.pow(10, dec+1);
			        if (dDiff>dTol) 
			        { 
			            var dPad= 1 / Math.pow(10, dec);
			            dNew=dNew+dPad;
			        }
			    }            
        }
        return dNew;
        */
	}

function formatPrice(fPrice)
{
    return formatNumber(fPrice, 2, ",", ".", "$", "", "", "");
}

// number formatting function
// copyright Stephen Chapman 24th March 2006
// permission to use this function is granted provided
// that this copyright notice is retained intact
function formatNumber(num,dec,thou,pnt,curr1,curr2,n1,n2) 
{
    var x = Math.round(num * Math.pow(10,dec));
    if (x >= 0) 
        n1=n2='';
    var y = (''+Math.abs(x)).split('');
    var z = y.length - dec;
    y.splice(z, 0, pnt);
    while (z > 3) 
    {
        z-=3;
        y.splice(z,0,thou);
    }
    var r = curr1+n1+y.join('')+n2+curr2;
    return r;
}

// **********************************************************************
//  HTML functions - Conversion
// **********************************************************************
function convertInteger(sValue)
{
    var iReturn;
    if (!isBlank(sValue))
    {
        if (validInt(sValue))
            iReturn = parseInt(sValue);
        else
            iReturn = 0; // Invalid number
    }
    else
        iReturn = 0; // Empty field

    return iReturn;
}

function convertInt(elementId)
{
    var iReturn;
    var sValue = getElementValue(elementId);
	iReturn = convertInteger(sValue);
    return iReturn;
}

function convertFloating(sValue)
{
    var fReturn;
    if (!isBlank(sValue))
    {
        if (validFloat(sValue))
          
			fReturn = parseFloat(sValue);
		
		else
            fReturn = 0.0; // Invalid number
    }
    else
        fReturn = 0.0; // Empty field

   	return fReturn;
	
}

function convertFloat(elementId)
{
    var fReturn;
    var sValue = getElementValue(elementId);
    fReturn = convertFloating(sValue);
    return fReturn;
}

// **********************************************************************
//  HTML functions - Pop-up
// **********************************************************************
var REMSWinHandle;     // Pop-up window handle.
var REMSTimerRefresh;  // Timer for refreshing the screen.
var REMSRefreshFlag;   // Flag for refreshing the screen.

function closePopUp()
{
    if (isElement(REMSWinHandle) && !REMSWinHandle.closed)
        REMSWinHandle.close();
}

function openCenterWin(url, iWidth, iHeight, bScroll, bResize)
{ 
    var fTop = (screen.height / 2) - (iHeight / 2); 
    var fLeft = (screen.width / 2) - (iWidth / 2); 
    var features= 'height=' + iHeight + ',width=' + iWidth + ',top=' + fTop+',left=' + fLeft + 
        ',toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=' + (bScroll ? 'yes' : 'no') + 
        ',resizable=' + (bResize ? 'yes' : 'no'); 
    REMSWinHandle = window.open(url, '', features);

    // Set up a screen refresh timer.
    resetRefresh();
    REMSTimerRefresh = setTimeout("refreshCheck()", 1);
} 

function openHelp(sUrl)
{
	openCenterWin(sUrl, 640, 480, true, false);
	return false;
}

function refreshCheck()
{
    if (isElement(REMSWinHandle) && REMSWinHandle.closed)
    {
        if (isElement(REMSRefreshFlag) && REMSRefreshFlag == 1)
        {
            resetRefresh();
            __doPostBack('','');
        }
    }
    REMSTimerRefresh = setTimeout("refreshCheck()", 1);
}

function resetRefresh()
{
    REMSRefreshFlag = 0;
    clearTimeout(REMSTimerRefresh);
}

function setRefreshFlag(iValue)
{
    REMSRefreshFlag = iValue;
}
