function getDocumentClientHeight()
{
    return document.body.clientHeight;
}

function getDocumentClientWidth()
{
    return document.body.clientWidth;
}


function encode(text) 
{
	return escape(text).replace(/\+/g, "%2B");
}

function alphaFirst(str) {
	var re = new RegExp("([A-Za-z].*)");
	return (re.exec(str) != null && RegExp.$1 == str);
}



// Do not use the two functions below to get width and height of document client area
// In IE, the value will not include scroll bar; In FF and Safari, the value will include scrollbar
function getDocumentHeight()
{
	if (window.innerHeight)
        return window.innerHeight;
	else 
        return document.body.clientHeight;
}

function getDocumentWidth()
{
	if (window.innerWidth)
		return window.innerWidth ;
	else  
		return document.body.clientWidth;
}


function makeVisible(elem)
{
	if (elem != null)
		elem.style.visibility = 'visible';
}

function visible(elem, on )
{
	if (elem != null)
		elem.style.visibility = on ? 'inherit' : 'hidden';
}


function endsWith(str, token)
{

	return str != null && token != null && str.indexOf(token) == str.length-token.length;
}


function trim(str)
{
    return str.replace(/^\s+/,"").replace(/\s+$/,"");
}

function onlyDigitsAndChars(str)
{
    var re = new RegExp("([A-Za-z0-9]+)");
    return (re.exec(str)!=null && RegExp.$1==str);
}

function onlyDigits(str)
{
    var re = new RegExp("([0-9]+)");
    return (re.exec(str)!=null && RegExp.$1==str);
}



function checkZipCode(f, bIsCanada)
{
  var v = f.value;
  var n = bIsCanada ? 6 : 5;
  if(!onlydigits(f) || v.length != n)
  {
    if ( bIsCanada )
        alert('Please enter a valid '+n+' digit Postal Code.');
    else
        alert('Please enter a valid '+n+' digit Zip Code.');
    return false;
  }
  return true;
}

function isValidUSZipCode(value)
{
    var re = /^\d{5}([\-]\d{4})?$/;
    return (re.test(value));
}



function checkEmailValue(s_email,alrt)
{

    if ((s_email.length < 6) ||
       (s_email.indexOf('@',0) < 1) ||
       (s_email.lastIndexOf('@') != s_email.indexOf('@',0)) ||
       (s_email.lastIndexOf('@') > (s_email.length - 5)) ||
       (s_email.lastIndexOf('.') > (s_email.length - 3)) ||
       (s_email.lastIndexOf('.') < (s_email.length - 5)) ||
       (s_email.indexOf('..',0) > -1) ||
       (s_email.indexOf('@.',0) > -1))
    {
        if (alrt)
        {
            alert('Please enter a valid e-mail address.');
        }
        return false;
    }

	if ((s_email.indexOf(' ',0) > -1) ||
		(s_email.indexOf(',',0) > -1) ||
		(s_email.indexOf('"',0) > -1) ||
		(s_email.indexOf(':',0) > -1) ||
		(s_email.indexOf('>',0) > -1) ||
		(s_email.indexOf('<',0) > -1))
	{
		if (alrt)
		{
			alert('Please enter a valid e-mail address. We does not accept e-mail addresses with quotation marks, commas, colons, spaces, or greater than or less than signs.');
		}
		return false;
	}

    
    if ((s_email.indexOf('.@',0) > -1))
    {
        if (alrt)
        {
            alert('Please proofread this email address.  It may contain an error.');
        }
    }
    return true;
}


function checkEmailPrefix(s_email)
{

    if (s_email.indexOf('@',0) >= 2 &&
        s_email.lastIndexOf('@') == s_email.indexOf('@',0) &&
        s_email.indexOf('..',0) < 0 &&
        s_email.indexOf(' ',0) < 0  &&
        s_email.indexOf(',',0) < 0  &&
	    s_email.indexOf('"',0) < 0  &&
	    s_email.indexOf('>',0) < 0  &&
	    s_email.indexOf('<',0) < 0)
    {
        return true;
    }
    return false;
}


function checkEmail(fld1,emptyok,alrt)
{
    
    fld1.value = trim(fld1.value);
    if(checkEmail2(fld1,fld1,emptyok,alrt)){
    	return true;
    }else{
    	fld1.focus();
    	return false;
    }
}

function checkEmail2(fld1,fld2,emptyok,alrt)
{
    var s_email = fld1.value;

    if (s_email != fld2.value)
    {
        alert('E-mail addresses must match.');
        return false;
    }
    if (emptyok && s_email.length==0)
    {
        return true;
    }
    return checkEmailValue(s_email,alrt);
}


function checkCreditCardNumber(fld1,fld2)
{

    var cardnum = fld1.value;
    if(cardnum.length > 0) cardnum = cardnum.replace(/ /gi,'');
    if(cardnum.length > 0) cardnum = cardnum.replace(/-/gi,'');

    if (cardnum.length<13 || cardnum.length>20)
    {
        alert("Credit card numbers must contain between 13 and 20 digits.");
        return false;
    }
    if (!onlyDigits(cardnum))
    {
        alert("Credit card numbers must contain only digits.");
        return false;
    }

    

    var no_digit = cardnum.length;
    var oddoeven = no_digit & 1;
    var sum = 0;

    for (var count = 0; count < no_digit; count++)
    {
        var digit = parseInt(cardnum.charAt(count),10);
        if (!((count & 1) ^ oddoeven))
        {
            digit *= 2;
            if (digit > 9)
            digit -= 9;
        }
        sum += digit;
    }
    if (sum % 10 != 0)
    {
        alert("Credit card number is not valid.  Please check that all digits were entered correctly.");
        return false;
    }

    if (fld2 != null)
        fld2.value = cardnum;
    else
        fld1.value = cardnum;
    return true;
}


function isValEmpty(val,nam)
{
    if (val == null)
        return true;

    val = new String(val);

	return (val.length == 0) || (val.search(/\S/) < 0);
}


function isHTMLValEmpty(val)
{
    if (val == null || val.length == 0) 
        return true;
    val = val.replace(/&nbsp;|<(?!NL)[^>]*>/gi, '');
    return val.search(/\S/) < 0;
}


function isEmpty(fld1,nam)
{
    var val = fld1.value;
    return isValEmpty(val,nam);
}


function nvl(val,val2)
{
    return val == null ? val2 : val;
}

function emptyIfNull(val)
{
	return val == null ? '' : val;
}

function nullIfEmpty(val)
{
	return isValEmpty(val) ? null : val;
}


function checkNotEmpty(fld1,nam)
{
    if (isEmpty(fld1))
    {
        //alert(chooseAorAn(nam, true) +" " + nam +" is required.");
        alert(nam +" is required.");
        
         try { 
			fld1.focus();
			fld1.select();
         } catch (e) { } 
        return false;
    }

    return true;
}



function chooseAorAn(sField, capsflag)
{
    
    var sReturn = (capsflag ? "A":"a");
    var cVowels = ['a','e','i','o','u'];
    var iLength = cVowels.length;
    sField = sField.toLowerCase();

    for (var i = 0; i < iLength; i++)
    {
      if (sField.charAt(0) == cVowels[i])
      {
        sReturn = sReturn + "n";
        break;
      }
    }

    return sReturn;
}

function dollarsString(amount)
{
    var temp = amount;
    DigitStrings = new Array('zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine');
    TeenStrings = new Array('ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eightteen', 'nineteen');
    DecadeStrings = new Array('zero', 'ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety');
    result = '';
    if (temp >= 1000)
    {
        result = result + dollars_string(Math.floor(temp/1000)) + 'thousand ';
        temp = temp % 1000;
    }
    if (temp >= 100)
    {
        result = result + DigitStrings[Math.floor(temp/100)] + ' hundred ';
        temp = temp % 100;
    }
    if (temp >= 20)
    {
        result = result + DecadeStrings[Math.floor(temp/10)] + ' ';
        temp = temp % 10;
    }
    if (temp >= 10)
    {
        result = result + TeenStrings[Math.floor(temp-10)] + ' ';
        temp = temp - Math.floor(temp);
    }
    else if ((amount == 0) || (temp > 0))
    {
        result = result + DigitStrings[Math.floor(temp)] + ' ';
        temp = temp - Math.floor(temp);
    }
    return result;
}


function amountString(amount)
{
    var cents = Math.floor((amount-Math.floor(amount))*100+0.5);
    var centstring = (cents < 10) ? '0'+cents.toString() : cents.toString();
    var dollarstring = dollarsString(Math.floor(amount));
    return dollarstring.charAt(0).toUpperCase() + dollarstring.substr(1) + 'and ' + centstring + '/100';
}

function formatRate(a,p)
{
  var returnMe;
    if (isNaN(parseFloat(a)))
  {
        returnMe= '';
  }
  else
  {
    var s=(a<0);
    if (s) a=-a;
   var d=Math.floor(a);
   var c=Math.floor((a-d)*(p?10:100)+0.5);
    if (a == d+c/(p?10:100))
    {
      if (c==(p?10:100)) {d++;c=0;}
      var cs=p?c.toString():((c < 10)?'0'+c.toString():c.toString());
      returnMe = (s?'-':'')+d.toString()+'.'+cs+(p?'%':'');
   }
    else
      returnMe = (s?'-':'')+a+(p?'%':'');
  }
  return returnMe;
}





function isLeapYear(year)
{
    return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0));
}

function getRadioValue(radio)
{
    var val = '';
    for (var i=0; i < radio.length; i++)
    {
        if (radio[i].checked == true)
        {
            val = radio[i].value;
            break;
        }
    }
    return val;
}



function checkPassword(fld1,fld2,alrt,strictcheck,fld3,len)
{
    var strict = (strictcheck == true || strictcheck == null);
    var msg = getpassworderror(fld1,fld2,strict,fld3,len);
    if (msg != null)
    {
        if (alrt) alert(msg);
        return false;
    }
    else
        return true;
}

function getPasswordError(fld1,fld2,strictcheck,fld3,len)
{
  var strict = (strictcheck == true || strictcheck == null);
	var val = fld1.value;
	if (len == null)
		len = 6;
	msg = "";

    if (fld1.value != fld2.value)
    {
        msg += "Passwords don\'t match.\n";
    }
    else if (!strict)
    {
        if (val.length == 0)
            msg = "Passwords cannot be empty.\n";
    }
    else
    {
        if (val.length < len)
        {
			msg += "Passwords must be at least {1} characters long.\n".replace("{1}", String(len));
        }
        if (!/[A-Za-z]/.test(val))
        {
            msg += "Passwords must contain at least one letter (A-Z).\n";
        }
        if (!/[0-9!@#$%^&*.:;~'`*",_|= \<\>\/\\\+\?\-\(\)\[\]\{\}]/.test(val))
        {
            msg += "Passwords must contain at least one number or special character.\n";
        }
        if (!/^[A-Za-z0-9!@#$%^&*.:;~'`*",_|= \<\>\/\\\+\?\-\(\)\[\]\{\}]+$/.test(val))
        {
            msg += "Passwords may contain only letters, numbers, and special characters.\n";
        }
    }
    if (msg.length == 0 && fld3 != null)
    {
        var oldval = fld3.value;
        var charDiffCount = 0;
        for (i=0;i < val.length; i++)
        {
            var c = val.charAt(i);
            if (oldval.indexOf(c) == -1)
                charDiffCount++;
        }
        if (charDiffCount < 2)
            msg = "Old and new passwords are too similar.";
    }
	if (msg.length > 0)
        return msg;
    else
    	return null;
}

function getParameter( param )
{
    var re = new RegExp(".*[?&]"+param+"=([^&]*)");
    var matches = re.exec( document.location.href.toString() ) ;
    return matches != null && matches.length > 0 ? matches[1] : null;
}


//////////////////////////// custom function ///////////////////////////////


function init(){

	Element.hide('loading');
	Element.show('body');
	
	
	
	initList();	
}

function initList(){

	var selectAllBox = $("selectAllBox");

	if(selectAllBox){
		selectAllBox.onclick = checkAll;
	}
	
	
	if($("listHeader")){
		var tds = $A($("listHeader").getElementsByTagName("td"));
		
		
		tds.each(function(td,index){
			td.className = "listheader";
		});
		
		var rows = $A($("listBody").getElementsByTagName("tr"));
		rows.each(function(row,index){
			if(index%2==0){

				row.className = "listtexthl";
			}else{
				row.className = "listtext";
			}
		});
	
	}
	
}


/*
function checkRow(index){
	var id =document.getElementsByName("ids")[index];
	
	id.checked = !id.checked;
	
	var row = $("listBody").getElementsByTagName("tr")[index];
	
	if(id.checked){
		row.className="rowChecked";
	}else{
		if(index%2==0){
			row.className = "odd";
		}else{
			row.className = "";
		}	
	}

}
*/

//check all checkbox 
function checkAll()
{
	var nodes =$A(document.getElementsByName("ids"));
	nodes.each(function(node){
		node.checked = $("selectAllBox").checked;
	});

}

//validate checkboxes is selected
function checkSelected(nodes,alrt){
	var isSelected = false;
	var nodes =$A(nodes);
	
	nodes.each(function(node){
		if(node.checked){
			isSelected = true;
		}
	});
	
    
    if(!isSelected&&alrt){
    	alert('No record checked.');
    }
    
    return isSelected;
}


//check delete 
function checkDelete(nodes){
	if(checkSelected(nodes,true)){
		return confirm('Are you sure you want to delete those records checked?',0 + 32 + 1,'Information');
	}
	return false;
}



function scrollDiv()
{
		var srcDiv		=document.getElementById('div__body');
		var destDiv		=document.getElementById('div__label');
		if (srcDiv!=null && destDiv!=null)
			destDiv.scrollLeft	=srcDiv.scrollLeft;
		//document.getElementById('div__label').scrollLeft = document.getElementById('div__body').scrollLeft;
}

function convertText(objText){
	if(objText==null){
		return "";
	}else{
		return objText.data;
	}
}

function getRandom(){
		var max = 10000;
		var min = 1;
        var range = max - min;
        var rand = Math.random();
        return(min + Math.round(rand * range));
}	

function popupWindow(url,winName,width,height){
	window.open(url,winName,'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width='+width+',height='+height);

}