function isValidEmail(inputStr) {
	var testValue = inputStr.indexOf("@")
	if(!(testValue > 0)){  return false }
	if(!(inputStr.indexOf(".",(testValue + 1)) > (testValue + 1))) { return false}
	return true		
}			

function isAcceptedEmailHost(inputStr) {
	//inputStr = inputStr.replace(/^\s*([\s\S]*\S+)\s*$|^\s*$/,'$1');
	inputStr = remove_whitespace(inputStr);
	var idxAt = inputStr.indexOf("@");
	idxAt = idxAt + 1;
	var theHost	= inputStr.substr(idxAt);
	theHost		= theHost.toUpperCase(); 
	// you can add more companies (in uppercase) by replacing the 2nd and 3rd yahoo.com's below.. etc..
	if ( (theHost == "YAHOO.COM") || (theHost == "HOTMAIL.COM") || (theHost == "YAHOO.COM") ) { 
		return false;
	} else {
		return true;
	}
}
function remove_whitespace(s) {
    //Match spaces at beginning and end of text and replace
    //with null strings
	s = s.toString();
    return s.replace(/\s/g,'');
}
function isBlank(inputStr)
{
	var len=inputStr.length
	var i
	for (i=0; i<len; ++i) {
		if(inputStr.charAt(i)!= " ") 
		return false
	}
	return true
}
 function ResetUI(focusObj, ErrMsg)
{
	if (ErrMsg > "") {
		alert(ErrMsg);
	}
	focusObj.focus();
	return (false);
}

function submit_form_if_checked(theForm, theObjName, theErrorMsg) {
	var is_checked = false;
	for (var i=0;i<theForm.elements.length;i++) {
		if ( (theForm.elements[i].type == 'checkbox') && (theForm.elements[i].name == theObjName) ) {
			if (theForm.elements[i].checked) {
				is_checked = true; break;
			}
		}
	}
	if (is_checked) { 
		theForm.submit();
	} else {
		if ( !( isBlank(theErrorMsg) ) ) alert(theErrorMsg);
		return(0);
	}
}

function isUnchecked(theObj) {
	var is_checked = false;
	if ( theObj ) {	
		//alert('len: '+theObj.length);
		if ( theObj.length ) {
			for (var i=0;i<theObj.length;i++) {
				if (theObj[i].checked) is_checked = true;
			}
		} else {
			if (theObj.checked) is_checked = true;
		}
	}
	if (is_checked) { return(0); } else { return(1); }
}

function getNumChecked(theObj) {
	var num_checked = 0;
	if ( theObj ) {	
		if ( theObj.length ) {
			for (var i=0;i<theObj.length;i++) {
				if (theObj[i].checked) num_checked++;
			}
		} else {
			if (theObj.checked) num_checked++;
		}
	}
	return(num_checked);
}

function isUnselected(theObj) {
	var is_selected = false;
	for (var i=0;i<theObj.length;i++) {
		if (theObj[i].selected) is_selected = true;
	}
	if (is_selected) { return(0); } else { return(1); }
}
function isSelected(theObj) {
	var is_selected = false;
	for (var i=0;i<theObj.length;i++) {
		if (theObj[i].selected) is_selected = true;
	}
	if (is_selected) { return(1); } else { return(0); }
}
function clear_select_list(the_obj) {
    for (var i = the_obj.length;i > 0;i--)
        the_obj.options[0] = null;
}

function unset_select_list(the_obj) {
	the_obj.selectedIndex = -1;
}
function set_checked(theObj, the_val) {
	for (var i=0;i<theObj.length;i++) {
		if (theObj[i].value == the_val) theObj[i].checked = true;
	}
}
function get_checked(theObj) {
	for (var i=0;i<theObj.length;i++) {
		if (theObj[i].checked) return(theObj[i].value);
	}
}
function get_selected(theObj, is_mult) {
	if ( (is_mult == null) || (is_mult == "undefined") ) {
		for (var i=0;i<theObj.length;i++) {
			if (theObj[i].selected) return(theObj[i].value);
		}
	} else {
		the_vals = new Array();
		for (var i=0;i<theObj.length;i++) {
			if (theObj[i].selected) {
				the_vals.push(theObj[i].value);
			}
		}
		return(the_vals);
	}
}
function get_selected_text(theObj, is_mult) {
	if ( (is_mult == null) || (is_mult == "undefined") ) {
		for (var i=0;i<theObj.length;i++) {
			if (theObj[i].selected) return(theObj[i].text);
		}
	} else {
		the_vals = new Array();
		for (var i=0;i<theObj.length;i++) {
			if (theObj[i].selected) {
				the_vals.push(theObj[i].text);
			}
		}
		return(the_vals);
	}
}
function set_select_list(theObj, the_val, set_default) {
	if ( set_default == null ) { set_default = true; }
	var bSet = false;
	if ( typeof(the_val) == 'string' ) {
		for (var i=0;i<theObj.length;i++) {
			if ( (theObj[i].value == the_val) || (theObj[i].text == the_val) ) {
				theObj[i].selected = true;
				bSet = true;
			}
		}
		
	}
	if ( !(bSet) && (set_default) ) {
		if ( theObj.length > 0 ) {
			theObj.selectedIndex = 0;
		}
	}
}



function set_elements_equal(src_obj, dest_obj) {
	alert(src_obj.type);
//	if (src_obj.type == dest_obj.type) {
	if (src_obj.type == 'checkbox') {
		
	} else if (src_obj.type == 'checkbox') {
		
	}
}

function disable_form_elements(theForm, aElements) {
	for (var i in aElements) {
		if ( theForm.elements[ aElements[i] ] ) {
			disable_element( theForm.elements[ aElements[i] ] );
		}
	}
}
function enable_form_elements(theForm, aElements) {
	for (var i in aElements) {
		if ( theForm.elements[ aElements[i] ] ) {
			enable_element( theForm.elements[ aElements[i] ] );
		}
	}
}

function isDisabled(obj) {
	if ( obj.disabled )	{ return true; }
	else				{ return false; }
}

function disable_element(obj)	{	
	if (obj) {  
		obj.value=''; 
		obj.style.background='#eeeeee';
		obj.disabled = true;
		if( obj.type.indexOf('select-one') >=0 ) { obj.selectedIndex = 0; }
	}
}
function enable_element(obj)	{	
	if (obj) { 
		obj.disabled = false;
		obj.style.background='#ffffff';
	}
}

function ReplaceQuotes(s) {return s.replace(/\"/g, "'");}

function isAddress1(ss, min, max){
	var inputStr = ss.toString()
	var BadChar = "~!@$%^*_+|`={}<>?[];"
	var inputStr2 = BadChar.toString()
	var SearchItem = " "
	if (inputStr == null || inputStr == ""){// can not empty
		return false
	}
	if((inputStr.length > 0) && (inputStr.search(SearchItem) == 0)){//no leading space
		return false
	}
	if ((inputStr.length >= min)&&(inputStr.length <= max)){
		for (var i = 0; i < inputStr.length; i++){
			for (var j = 0; j < inputStr2.length; j++){
				if((inputStr.charAt(i) == inputStr2.charAt(j))){
					return false;
				}
			}
		}
		return true;
	}
	else{
		return false;
	}
}

function isAllowedCharsOnly(ss,OkChar) {
	var inputStr	= ss.toString()
	var match
	for (var i = 0; i < inputStr.length; i++){
		match = false;
		for (var j = 0; j < OkChar.length; j++){
			if(inputStr.charAt(i) == OkChar.charAt(j)){
				match=true;
				j=OkChar.length;
			}
		}
		if(!match){
			return false;
		}
	}	
	return true;
}
function isDecimalOnly(ss){
	var inputStr	= ss.toString()
	var OkChar		= ".1234567890"
	return isAllowedCharsOnly(ss,OkChar);
}
function isCurrencyOnly(ss){
	var inputStr	= ss.toString()
	var OkChar		= ".1234567890$,"
	return isAllowedCharsOnly(ss,OkChar);
}
function isZipOnly(ss){
	var inputStr	= ss.toString()
	var OkChar		= "-1234567890"
	return isAllowedCharsOnly(ss,OkChar);
}
function isCreditCardNumberOnly(ss){
	var inputStr	= ss.toString()
	var OkChar		= "-1234567890"
	return isAllowedCharsOnly(ss,OkChar);
}
function isCreditCardNumberMaskedOnly(ss){
	var inputStr	= ss.toString()
	var OkChar		= "-1234567890*"
	return isAllowedCharsOnly(ss,OkChar);
}
function isPhoneOnly(ss){
	var inputStr	= ss.toString()
	var OkChar		= "-1234567890"
	return isAllowedCharsOnly(ss,OkChar);
}

var phone_field_length=0;
function TabNext(obj,event,len,next_field) {
if (event == "down") {
	phone_field_length=obj.value.length;
	}
else if (event == "up") {
	if (obj.value.length != phone_field_length) {
		phone_field_length=obj.value.length;
		if (phone_field_length == len) {
			next_field.focus();
			}
		}
	}
}
function isAlphaNumericOnly(ss,min,max,bolSpace){
	var inputStr	= ss.toString()
	var OkChar
	var match
	if ( isEmpty(min) ) min = 1;
	if ( isEmpty(max) ) max = 1000;
	if((inputStr.length >= min)&&(inputStr.length <= max)){
		if(bolSpace)	{ OkChar	= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1234567890"	}
		else			{ OkChar	= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"	}
		return isAllowedCharsOnly(ss,OkChar);
	} else {
		return false;
	}
}

function isAlphaOnly(ss,min,max,bolSpace){
	var inputStr = ss.toString()
	var OkChar
	var match
	if ( isEmpty(min) ) min = 1;
	if ( isEmpty(max) ) max = 1000;
	if((inputStr.length >= min)&&(inputStr.length <= max)){
		if(bolSpace)	{ OkChar =  "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz"	}
		else			{ OkChar =  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"	}
		return isAllowedCharsOnly(ss,OkChar);
	} else {
		return false;
	}
	
}
function isName(ss,min,max,bolSpace){
	var inputStr = ss.toString()
	var OkChar
	var match
	if ( isEmpty(min) ) min = 1;
	if ( isEmpty(max) ) max = 1000;
	if((inputStr.length >= min)&&(inputStr.length <= max)){
		if(bolSpace)	{ OkChar =  "ABCDEFGHIJKLMNOPQRSTUVWXYZ'.- abcdefghijklmnopqrstuvwxyz"	}
		else			{ OkChar =  "ABCDEFGHIJKLMNOPQRSTUVWXYZ'.-abcdefghijklmnopqrstuvwxyz"	}
		return isAllowedCharsOnly(ss,OkChar);
	} else {
		return false;
	}
	
}

function isNumericOnly(ss,min,max,bolSpace){
	var inputStr = ss.toString()
	var OkChar
	var match
	var testVal;
	if ( isEmpty(min) ) min = 1;
	if ( isEmpty(max) ) max = 1000000000;
	
	//alert('min: '+min+'\n'+'max: '+max+'\n'+'ss: '+inputStr.length+'\n');
	if((inputStr.length >= min)&&(inputStr.length <= max)){
		if(bolSpace)	{ OkChar =  "12345 67890"	}
		else			{ OkChar =  "1234567890"	}
		return isAllowedCharsOnly(ss,OkChar);
	} else {
		return false;
	}
	
}
function getDecimalOnly(ss){
	var OkChar =  ".1234567890";
	return getAllowedCharsOnly(ss, OkChar);
}
function getNumericOnly(ss, bolSpace){
	var OkChar;
	if(bolSpace)	{ OkChar =  "12345 67890"	}
	else			{ OkChar =  "1234567890"	}
	return getAllowedCharsOnly(ss, OkChar);
}
function getZipOnly(ss){
	var OkChar =  "-1234567890"
	return getAllowedCharsOnly(ss, OkChar);
}
function getPhoneOnly(ss){
	var OkChar =  "-1234567890"
	return getAllowedCharsOnly(ss, OkChar);
}
function getAlphaNumericOnly(ss, bolSpace){
	var OkChar;
	if(bolSpace)	{ OkChar	= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz 1234567890"	}
	else			{ OkChar	= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"	}
	return getAllowedCharsOnly(ss, OkChar);
}
function getAlphaOnly(ss, bolSpace){
	var OkChar;
	if(bolSpace)	{ OkChar =  "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz"	}
	else			{ OkChar =  "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"	}
	return getAllowedCharsOnly(ss, OkChar);
}
function getAllowedCharsOnly(ss, OkChar){
	var inputStr = ss.toString()
	var newVal = "";
	for(var i = 0; i < inputStr.length; i++){
		for (var j = 0; j < OkChar.length; j++){
			if((inputStr.charAt(i) == OkChar.charAt(j))){
				newVal += inputStr.charAt(i)
			}
		}
	}
	return newVal;
}

function isEmpty(s) {
	if (s == undefined) return true;
	if (argExists(s)) return true;
	var inputStr = s.toString();
	// the first one executes them all.... therefore it is better the last way...
	//return ((s == null) || (inputStr == null) || (inputStr.length == 0) || isBlank(inputStr) ); 
	if (s == null)					return true;
	else if (inputStr == null)		return true;
	else if (inputStr.length == 0)	return true;
	else if (isBlank(inputStr) )	return true;
	else 							return false;
}

function argExists(fieldName) {
    return ((typeof(args) != "undefined") &&
            (args != null) &&
            (fieldName != "") &&
            (typeof(args[fieldName]) != "undefined") &&
            (args[fieldName] != null));
}


function isFloat(s, emptyOK)
{
// Returns true if valid float
  if(isEmpty(s))
    if(isFloat.arguments.length == 1) return false;
    else return (emptyOK == true);

  AlreadyHaveDecimalPoint = new Number(0);
  for(i = new Number(0); i < s.length; i++)
  {
    if((s.charAt(i) >= "0") && (s.charAt(i) <= "9")) continue;
    if(s.charAt(i) != ".") return false;
    if(AlreadyHaveDecimalPoint == 1) return false;
    AlreadyHaveDecimalPoint = 1;
  }
  return true;
}

function isCurrency(s, emptyOK)
{
// Returns true if valid currency
  if(!isFloat(s, emptyOK)) return false;
  if (s=="0") return false;
	pos = new Number(0);
  for(i = new Number(s.length) - 1; i >= 0; i--)
  {
    pos++;
    if(s.charAt(i) == ".")
			if(pos > 3) return false;
			else return true;
  }
  return true;
}

function isNumber(s, emptyOK)
{
// Returns true if positive number
  if(isEmpty(s))
    if(isNumber.arguments.length == 1) return false;
    else return (emptyOK == true);

  for(i =0; i < s.length; i++)
    if(!((s.charAt(i) >= "0") && (s.charAt(i) <= "9"))) return false;
  return true;
}

function isWhiteSpace(s)
{
  var whitespace = " \t\n\r";
  if(isEmpty(s)) return true;

  for(i = new Number(0); i < s.length; i++)
    if(whitespace.indexOf(s.charAt(i)) == -1) return false;

  return true;
}

function isEmail(s, emptyOK)
{
// Must conform to a@b.c
  s = s.toString()
  if(!emptyOK) { emptyOK = false; }
  if(isEmpty(s)) return (emptyOK == true);

  i = new Number(s.indexOf("@", 1));
  if(i == -1) return false;

  i = (s.indexOf(".", i + 2));
  if(i == -1) return false;
  
  return (s.length > i + 1);
}

function isFullPhoneNbr(ss, emptyOK)
{
	var OkChar =  "-1234567890() "
	return getAllowedCharsOnly(ss, OkChar);
}
function isPhoneNbrPart(nbr, numLenReq, emptyOK)
{
	if(!emptyOK) { emptyOK = false; }
	if(isEmpty(nbr)) return (emptyOK == true);
	if (!isNumber(nbr)) return false;
	if ( nbr.length < numLenReq ) return false;
	return true;
}

function isPhoneNbr(areacode, exchange, nbr, emptyOK)
{
  
  if(isEmpty(areacode.value + exchange.value + nbr.value)){
    if(isPhoneNbr.arguments.length == 3) return false;
    else return (emptyOK == true);
  }

  if(!isNumber(areacode.value + exchange.value + nbr.value)) return false;
  else
  {
    if (!isNumber(exchange.value + nbr.value)) return false;
    else
      if (!isNumber(nbr.value)) return false;
  }
  return true;
}
function isInArray(the_obj, the_val)
{
	var found = false;
	for(j = 0; j < the_obj.length; j++){
		if(the_val == the_obj[j]){
			found = true;
			continue;
		}
	}
	return found;
}
function isInSelectList(theObj, the_val)
{
	var found = false;
	for(i = 0; i < theObj.length; i++){
		if ( (theObj[i].value == the_val) || (theObj[i].text == the_val) ) {
			found = true;
			continue;
		}
	}
	return found;
}

function open_window(the_file_path, the_window_name, the_width, the_height, resizable, do_reposition, do_scroll) {
	if (the_window_name == '')	the_window_name		= 'Popup';
	if (the_width == '')		the_width			= '300';
	if (the_height == '')		the_height			= '300';
	if (resizable == '')		resizable			= 'no';
	if (do_scroll == '')		do_scroll			= 'no';
	var windowXY									= '';
	
	if (do_reposition != 'N') {
		if (window.screen) {
	    	var the_screenX = Math.floor((screen.availWidth-the_width)/2);
		    var the_screenY = Math.floor((screen.availHeight-the_height)/2);
			windowXY = ',screenX='+the_screenX+',screenY='+the_screenY+',left='+the_screenX+',top='+the_screenY;
		}
	}
	windowHandle = window.open('',the_window_name,'scrollbars='+do_scroll+',status=no,width='+the_width+',height='+the_height+',resizable='+resizable+windowXY)
	windowHandle.location.href = the_file_path;
	windowHandle.focus();
}


String.prototype.lpad = function (size,PaddingCharacter) { 
  var dif = size - this.length ; 
  var s = this;

  if (dif > 0) { 
    for (;dif!=0;dif+=-1) {	s = PaddingCharacter + s;}
  }
  return(s);
}
String.prototype.rpad = function (size,PaddingCharacter) { 
  var dif = size - this.length ; 
  var s = this;

  if (dif > 0) { 
    for (;dif!=0;dif+=-1) {	s = s + PaddingCharacter;}
  }
  return(s);
}

/*
Validate.prototype.isValidCreditCardNumber = function(cardNumber, cardType)
{
  var isValid = false;
  var ccCheckRegExp = /[^\d ]/;
  isValid = !ccCheckRegExp.test(cardNumber);

  if (isValid)
  {
    var cardNumbersOnly = cardNumber.replace(/ /g,"");
    var cardNumberLength = cardNumbersOnly.length;
    var lengthIsValid = false;
    var prefixIsValid = false;
    var prefixRegExp;

    switch(cardType)
    {
      case "mastercard":
        lengthIsValid = (cardNumberLength == 16);
        prefixRegExp = /^5[1-5]/;
        break;

      case "visa":
        lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
        prefixRegExp = /^4/;
        break;

      case "amex":
        lengthIsValid = (cardNumberLength == 15);
        prefixRegExp = /^3(4|7)/;
        break;

      default:
        prefixRegExp = /^$/;
        alert("Card type not found");
    }

    prefixIsValid = prefixRegExp.test(cardNumbersOnly);
    isValid = prefixIsValid && lengthIsValid;
  }

  if (isValid)
  {
    var numberProduct;
    var numberProductDigitIndex;
    var checkSumTotal = 0;

    for (digitCounter = cardNumberLength - 1; 
      digitCounter >= 0; 
      digitCounter--)
    {
      checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
      digitCounter--;
      numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
      for (var productDigitCounter = 0;
        productDigitCounter < numberProduct.length; 
        productDigitCounter++)
      {
        checkSumTotal += 
          parseInt(numberProduct.charAt(productDigitCounter));
      }
    }

    isValid = (checkSumTotal % 10 == 0);
  }

  return isValid;
}
*/

function isValidCardNumber (strNum) 
{
   var nCheck = 0;
   var nDigit = 0;
   var bEven  = false;
   
   for (n = strNum.length - 1; n >= 0; n--) 
   {
      var cDigit = strNum.charAt (n);
      if (isDigit (cDigit))
      {
         var nDigit = parseInt(cDigit, 10);
         if (bEven)
         {
            if ((nDigit *= 2) > 9)
               nDigit -= 9;
         }
         nCheck += nDigit;
         bEven = ! bEven;
      }
      else if (cDigit != ' ' && cDigit != '.' && cDigit != '-')
      {
         return false;
      }
   }
   return (nCheck % 10) == 0;
}
function isDigit (c)
{
   var strAllowed = "1234567890";
   return (strAllowed.indexOf (c) != -1);
}
function isCardTypeCorrect (strNum, type)
{
   var nLen = 0;
   for (n = 0; n < strNum.length; n++)
   {
      if (isDigit (strNum.substring (n,n+1)))
         ++nLen;
   }
   
   if (type == 'Visa')
      return ((strNum.substring(0,1) == '4') && (nLen == 13 || nLen == 16));
   else if (type == 'Amex')
      return ((strNum.substring(0,2) == '34' || strNum.substring(0,2) == '37') && (nLen == 15));
   else if (type == 'Master Card')
      return ((strNum.substring(0,2) == '51' || strNum.substring(0,2) == '52'
              || strNum.substring(0,2) == '53' || strNum.substring(0,2) == '54'
              || strNum.substring(0,2) == '55') && (nLen == 16));
   else
      return false;
   
}

function mod10 (ccnum) {
  var sum = 0;
  for (var i = ccnum.length - 1; i >= 0; i -= 2)
    sum += ccnum.charAt(i) * 1 + ccnum.charAt(i - 1) * 2 - (ccnum.charAt(i - 1) >= 5 ? 9 : 0);
  return ( sum % 10 == 0 );
}
// Visa: 4111111111111111 (4 and 15 1's)
// MasterCard: 5555555555555557 (15 5's and a 7)
// American Express: 377777777777770 (3 and 13 7's and a 0)
// Discover: 6011111111111117 (60 and 13 1's and a 7)


var undefined;
function isUndefined(property) {
  return (typeof property == 'undefined');
}

function displayDate() {
	var months = new makeArray('Jan','Feb','Mar',
	    'Apr','May','June','July','Aug','Sept',
	    'Oct','Nov','Dec');
		
	var days = new makeArray("Sun","Mon","Tue","Wed","Thur","Fri","Sat","Sun");
	
	var date = new Date();
	var day  = date.getDate();
	var weekday  = date.getDay();
	var month = date.getMonth() + 1;
	var yy = date.getYear();
	var year = (yy < 1000) ? yy + 1900 : yy;
	var hour = date.getHours();
	var minutes = padout(date.getMinutes());
	var ampm = "AM";
	if (hour > 12) { hour = hour - 12; ampm = "PM"; }
	if (hour == 0) { hour = 12; ampm = "AM"; }

	document.write (days[weekday+1] + " " + months[month] + ' ' + day + nths(day) + ", " + year + '<br>' + hour + ":" + minutes + " " + ampm);
}
function padout(number) { return (number < 10) ? '0' + number : number; }
function showStatus(text) { window.setTimeout('window.status="' + text + '"', 1); }
// This is a function for all locators to use.
function goLocation( loc, trgt)
{
	if( loc != null)
		{
		if( (loc.length > 0) && (loc.toLowerCase() != 'default'))
			window.open( loc, trgt);
		}	
}

function makeArray() {
     for (i = 0; i<makeArray.arguments.length; i++)
          this[i + 1] = makeArray.arguments[i];
}

function nths(day) {
     if (day == 1 || day == 21 || day == 31) return 'st';
     if (day == 2 || day == 22) return 'nd';
     if (day == 3 || day == 23) return 'rd';
     return 'th';
}
