
function isInvalidAjaxReturn(text){
	try{
		if(!text){
			return false;
		}
		
		if(text=="" || text=="<div></div>" || text=="<DIV></DIV>" || text.indexOf("We're sorry")>=0){
			return false;
		}
		return true;
	}catch(e){
		alert(e.message);
	}	
}

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 getScrollWidth()
	{
	   var w = window.pageXOffset ||
	           document.body.scrollLeft ||
	           document.documentElement.scrollLeft;
	           
	   return w ? w : 0;
	}
	
	function getScrollHeight()
	{
	   var h = window.pageYOffset ||
	           document.body.scrollTop ||
	           document.documentElement.scrollTop;
	           
	   return h ? h : 0;
	}
	
	function getPageWidth()
	{
	   var w = window.innerWidth ||
	           document.body.clientWidth ||
	           document.documentElement.clientWidth;
	           
	   return w ? w : 0;
	}
	
	function getPageHeight()
	{
	   var h = window.innerHeight ||
	           document.body.clientHeight ||
	           document.documentElement.clientHeight;
	           
	   return h ? h : 0;
	}
	
	

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)
{
    if (!str){
    	  return "";
    }
    
    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);
    return checkEmail2(fld1,fld1,emptyok,alrt);
}

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,alrt)
{
    if (isEmpty(fld1))
    {
        //alert(chooseAorAn(nam, true) +" " + nam +" is required.");
        if(alrt){
        	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 validate_textfield(nam,minval,maxval){

	var val = trim(nam.value);
	
	if(maxval==null){
		if(val.length>=minval){
			return true;
		}else{
			return false;
		}
	}else{
		if(val.length>=minval&&val.length<=maxval){
			return true;
		}else{
			return false;
		}
	}
}

function checkPassword(fld1,fld2,fld3){

	var pwd = trim(fld1.value);
	var reenter_pwd = trim(fld2.value);
	if(pwd==reenter_pwd){
		return true;
	}else{
		return false;
	}
	
}

/*
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;
}


function getRandom(){
	var max = 10000;
	var min = 1;
        var range = max - min;
        var rand = Math.random();
        return(min + Math.round(rand * range));
}


function pop_window(url,width,height){
	if (!width || width<=0){
		width=800;
	}
	if (!height || height<=0){
		height=600;
	}
	window.open(url,winName,'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width='+width+',height='+height);
}


function formatCurrency(num) {
	if (!num){
	  num="";
	}	
	num = ""+num;


	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
		num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') + '$' + num + '.' + cents);
}

function formatCurrency2(num) {
	if (!num){
	  num="";
	}	
	num = ""+num;

	num = num.toString().replace(/\$|\,/g,'');
	if(isNaN(num))
		num = "0";
	sign = (num == (num = Math.abs(num)));
	num = Math.floor(num*100+0.50000000001);
	cents = num%100;
	num = Math.floor(num/100).toString();
	if(cents<10)
		cents = "0" + cents;
	for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
		num = num.substring(0,num.length-(4*i+3))+','+
	num.substring(num.length-(4*i+3));
	return (((sign)?'':'-') +  num + '.' + cents);
}


	function getFloatValue(val){
	   var f = parseFloat(val);
	   if (isNaN(f))
	   	return 0;
	   else
	    return f;
	}

	function trimFloatValue(f){
	
		if (f>0){
			f +=0.001;
		}else{
			f -=0.001;
		}

		var s = ""+(f * 100);
		
	
		return parseInt(s)/100;
	}
	
	function formatMoney(f){
		
		f = trimFloatValue(getFloatValue(f));
		return formatCurrency2(f);
	}
	
	

	function getEvent(evnt)
	{
	    return (typeof(evnt)!='undefined' && evnt) ? evnt : ((typeof(event)!='undefined' && event) ? event : null);
	}
	
	
	function getEventKeypress(evnt)
	{
	    evnt = getEvent(evnt);
	    return (evnt.which) ? evnt.which : evnt.keyCode;
	}
	
	function attachDynamicKey(url){
		return attachKey(url);
	}
	
	
	function adjustMyImage(imgID, maxWidth){
	
		if (!imgID || !maxWidth){
			return;
		}
	
		try{
			var myImage = document.getElementById(imgID);
			if (!myImage){
				return;
			}
			
			var myWidth = myImage.width;
			var myHeight = myImage.height;
			if (myWidth>maxWidth){
			
				//alert("mywidth="+myWidth+",myHeight="+myHeight+",max="+maxWidth);
			
				var newWidth 	=maxWidth;
				var newHeight  	=parseInt(maxWidth/myWidth * myHeight);
				myImage.width = newWidth;
				myImage.height = newHeight;
				//alert("w="+newWidth+",h="+newHeight);
			}
		}catch(e){
		}
			
	}
	
	
	
var month_names = new Array("January", "February", "March", 
				"April", "May", "June", "July", "August", "September", 
				"October", "November", "December");

function formatDate(d){


	var curr_date = d.getDate();
	
	
	var curr_month = d.getMonth();
	
	
	var curr_year = d.getFullYear();
	
	return  month_names[curr_month] +" "+  curr_date +", "+curr_year;

}

function hide_obj(obj){
	if (obj){
		try{
			obj.style.display = "none";
		}catch(e){
		}
	}
}
function show_obj(obj){
	if (obj){
		try{
			obj.style.display = "";
		}catch(e){
		}
	}
}

function attachKey(url){
		url = ""+url;
		
		
		var pos = url.indexOf("&rk=");
		if (pos<0){
			pos = url.indexOf("?rk=");
		}
	  	if (pos>0){
	  		var pos2 = url.indexOf("&",pos+1);
	  		if (pos2<pos){
	  			url = url.substring(0,pos);
	  		}else{
	  			url = url.substring(0,pos) + url.substring(pos2);
	  		}
	  	}
	  	
	  	pos = url.indexOf("?");
	  	if (pos>=0){
			url = url +"&rk="+  getRandom();
		}else{
			url = url +"?rk="+  getRandom();
		}
		return url;	
}
	
	
	
function getElementX(e){
		var x=e.offsetLeft;
		while(e=e.offsetParent){
			x+=e.offsetLeft;
		}
		return x;
}
	
function getElementY(e){
		var y=e.offsetTop;
		while(e=e.offsetParent){
			y+=e.offsetTop;
		}
		return y;
}


   function detectItemFromArray(originalArray, itemToDetect) {
	      var j = 0;
	      while (j < originalArray.length) {
		      if (originalArray[j] == itemToDetect) {
			      return true;
		      } else { j++; }
	      }
	      return false;
    }
       
     //remove item (string or number) from an array
    function removeItemFromArray(originalArray, itemToRemove) {
	      var j = 0;
	      while (j < originalArray.length) {
		      // alert(originalArray[j]);
		      if (originalArray[j] == itemToRemove) {
		   		   originalArray.splice(j, 1);
		      } else { j++; }
	      }
	      // assert('hi');
	      return originalArray;
     }
      

	function getCurrentDomain(){
		var myLoc = ""+window.location;
		if (myLoc.indexOf("127.0.0.1")>=0){
			return "http://127.0.0.1:8080/agenttoolboxes/";
		}
		
		var myDomain ="";
		var slashCount =0;
		for (var i=0; i<myLoc.length; i++){
			var c = myLoc.charAt(i);
			if (c=='/'){
				slashCount++;
			}
			
			myDomain = myDomain +c;
			if (slashCount==3){
				return myDomain;
			}
			
		}
		
		return myDomain;
	}


	function count_letters(testText, letter){
		if (testText==null || testText=="" || letter==null || letter==""){
			return 0;
		}
		
		var letterCount =0;
		var pos = testText.indexOf(letter);
		while (pos>=0){
			letterCount++;
			pos += letter.length;
			pos = testText.indexOf(letter, pos);
		}
		
		return letterCount;
	}	      	
	
	function popupWindow2(url){
		window.open(url,'','toolbar=yes,location=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes,width=1200,height=800');
	}
	
	

	function isRadioChecked(formId, radioId){
	
	  try{
		
		var myRadioObj = eval(formId+"."+radioId);
		if (!myRadioObj){
			return false;
		}

		
		for (var i=0; i < myRadioObj.length; i++)
		   {
		   	var obj = myRadioObj[i];
		   	if (obj.checked)
		      	{
		      		return true;
		      	}
		   }

		 
		 return false;
		 
		}catch(e){
			return false;
		} 
	}

	