function ValidateEmail(str){
	if(str == "" || str == null)
		return false;
	
	emailRegex = /^[a-z0-9]([a-z0-9_\-\.]*)@([a-z0-9_\-\.]*)(\.[a-z]{2,4}(\.[a-z]{2}){0,2})$/i;	
	var s = new String();
	var arr;
	s = str;
	
	//allow emails separated by ";"
	arr = s.split(";");
	
	//alert(arr.length);
	for (i=0;i<arr.length;i++){
		//alert(arr[i]);
		if (!emailRegex.test(arr[i]))
			return false;
	}
	return true;
}
function validateURL(str){
    
    wordTextRegex = /^(http|https):\/\/([\w-]+\.)+[\w-]+(\/[\w\-\ \.\/\?\%\&\=]*)?$/;//  $/;
    return wordTextRegex.test(str);
    
}
function ValidatePlainText(str){
	wordTextRegex = new RegExp("^[-a-zA-Z0-9_!/\.\ \+\,\n\r\t\?\-\@\(\)]*$");
	return wordTextRegex.test(str);
}
function ValidatePlainTextAddr(str){
	wordTextRegex = /^([-a-zA-Z0-9_\.\/\ \+\,\n\-\@\(\)])*$/;
    return wordTextRegex.test(str);
}
function ValidatePlainTextEmailBody(str){
	return true;
	//wordTextRegex = /^([-a-zA-Z0-9_\'\.\/\ \!\+\,\n\r\\?\t\-\@\(\)])*$/;
    //return wordTextRegex.test(str);
}
function ValidateCharLetterNoSpace(str){
	wordTextRegex = /^([a-zA-Z0-9)])*$/;
    return wordTextRegex.test(str);
}
function ValidateNumeric(str){
	numRegex = new RegExp("^([0-9]?)*$");
	return numRegex.test(str);
}
function ValidateLetterText(str){
	return true;
	//wordTextRegex = new RegExp("^[-a-zA-Z0-9_!:/\&\$\"\.\ \+\,\n\r\?\-\@\(\)]*$");
    //return wordTextRegex.test(str);
}
function ValidateMoney(str){
	priceRegex = new RegExp("^([0-9]+([\.][0-9]{0,2})?)$");
	return priceRegex.test(str);
}
function trimElement(aElement){
	if(!aElement)
		return;
   var temp = aElement.value;
   var regexTrim = /^(\s*)$/;
    //check for all spaces
    if(regexTrim.test(temp)) {
       temp = temp.replace(regexTrim, '');
       if( temp.length == 0){
		aElement.value = temp;
		return;
       }
    }
   regexTrim = /^(\s*)([\W\w]*)(\b\s*$)/;
   if (regexTrim.test(temp)){ 
      temp = temp.replace(regexTrim, '$2'); 
    }
	aElement.value = temp;
}
function trimForm(aForm){
 if(aForm == null)
    return false;
 
    var i=0;
  for(i = 0;i < aForm.elements.length; ++i){
    //take only non-disabled text elements
    if (aForm.elements[i].disabled == true || aForm.elements[i].readOnly == true ||
	   (aForm.elements[i].type!="text" && aForm.elements[i].type!="password"))
	        continue;
     
    if(trimElement(aForm.elements[i]))
       return false;
  }
  return true;
}
/* 
Checks a specific checkbox/radio before displaying the page
Params:
		objTheForm - <form> object that the field is in
		strElement - name of the element
		strValue - value to search for
Usage:
<form name="aForm">
 <input type="radio" value="1" name="mailinglist">
 <script type="text/javascript" language="JavaScript">SelectItem(document.forms["aForm"], "mailinglist", 1);<'/script>
</form>		
*/
function CheckItem(objTheForm, strElement, strValue){
	
  if(!objTheForm || strElement=="")
   return;
   
  var objCheck =  objTheForm.elements[strElement];
  if(!objCheck)
   return;
   
  //if more than one checkboxes in the group
  if(objCheck.length){
    for(x=0; x<objCheck.length; x++){
   	  if(objCheck[x].value==strValue){
	   objCheck[x].checked = true;
     }
   }
  }
  else{
    if(objCheck.value==strValue)
        objCheck.checked = true;
  } 
}

/* 
Selects a specific item in a select box before displaying the page
Params:
		objTheForm - <form> object that the <select> is in
		strElement - name of the <select> element
		strValue - value to search for
Usage:
<form name="aForm">
 <select name="aList">
  <option value=1>Data1</option>
  <option value=1>Data2</option>
 </select>
 <script type="text/javascript" language="JavaScript">SelectItem(document.all.item("aForm"), "aList", 1);<'/script>
</form>		
*/
function SelectItem(objTheForm, strElement, strValue){
 if(!objTheForm || strElement=="")
  return;
 
 var objSelect =  objTheForm.elements[strElement];
 if(!objSelect)
  return;
 
 for(x=0; x<objSelect.length; x++){
      if(objSelect[x].value==strValue){
       objSelect.selectedIndex = x;
       break;
      }
    }
}
//checks if at least one check box is checked
// Params:
//		   strFormName - name of form
//		   strElementName - name of checkbox item/group
// Returns <true> if at least one item is checked
function IsCheckboxChecked(strFormName, strElementName){
	bChecked = false;
	var i=0;
    
    //check we have an element by this name in the form, return if not
    if(!document.forms[strFormName].elements[strElementName])
     return false;
    
    //if group of checkboxes
    if(document.forms[strFormName].elements[strElementName].length){
		//check at least one is checked
		for(i=0; i<document.forms[strFormName].elements[strElementName].length; i++){
		  if(document.forms[strFormName].elements[strElementName][i].checked==true){
	        bChecked=true;
	        break;
	      }
		}
    }
    else{
		//only one checkbox
		if(document.forms[strFormName].elements[strElementName].checked==true)
		 bChecked = true;
    }
    
	return bChecked;
}
function CheckUnCheckAll(strFormName, strElementName, bCheck){
	//check we have an element by this name in the form, return if not
    if(!document.forms[strFormName].elements[strElementName])
     return false;
     
     var i=0;
    
    //if group of checkboxes
    if(document.forms[strFormName].elements[strElementName].length){
		//check at least one is checked
		for(i=0; i<document.forms[strFormName].elements[strElementName].length; i++){
		  document.forms[strFormName].elements[strElementName][i].checked = bCheck;
		}
    }
    else{
		//only one checkbox
		document.forms[strFormName].elements[strElementName].checked = bCheck;
    }
}
function IsDateInPast(day, month, year){
	expr = new Date(month + "/" + day + "/" +  year);
	today = new Date();
	today.setDate(1);
	today.setHours(0,0,0,0)
	if(expr<today){
      return true; 
    }
    return false;
}
//Validate expiration date of credit card
//Params:
//			month - string representing two digits of month (01-12)
//			year - string representing LAST TWO DIGITS of year (00,01, etc)
// Returns:
//			<true> if expiration date valid, otherwise returns <false>
function ValidateExpirationDate(month, year){
	//validate expiration date
	expr = new Date(month + "/01/" +  year);
	today = new Date();
	today.setDate(1);
	today.setHours(0,0,0,0)
	if(expr<today){
      //alert("Illegal expiration date.");
      return false; 
    }
    return true;
}

//Validate credit card num
function ValidateCardNumber(cardtype, cardnumber)
{
  /*'Credit card validation algorithm
  'by Mark Dixon, Ives Development
  ' Additions by Uri Bahar
  'Derived from http://prope.insa-lyon.fr/~fcoppola/credit.html
  'parameter:
  '				cardtype  - char representing card type
  '				cardnumber - a string containing the card number to be validated.
  '							May contain non-numeric characters (spaces, dashes)
  ' 
  'Return value:
  '  True if the card number is good, False if the number is bad
  */	
  
  //alert(cardtype + ":" + cardnumber);
	var nCheckSum, fDbl, nCharPos, nChar, bResult, strChar, iLen,i=0;
	bResult = true;
	cardnumber = new String(cardnumber);
	
	//get first char and string len
	strChar = cardnumber.charAt(0);//   Left((cardnumber), 1)
	iLen = cardnumber.length
	
	//first do checks per card
	if (cardtype == "Visa"){
		//Visa numbers are 16 or 13 long and begin with 4
		if ((iLen != 16 && iLen != 13) || strChar != "4")
		  bResult = false;
	}
	else if (cardtype == "MasterCard"){
		//MasterCard numbers are 16 long and begin with 5
		if (iLen != 16 || strChar != "5")
		  bResult = false;
	}
	else if (cardtype == "Amex")	{
		//American Express numbers are 15 long and begin with 3
		if (iLen != 15 || strChar != "3")
		  bResult = false;
	}
	else if (cardtype == "Discover")	{
		s = cardnumber.substring(0,4)
		//Discover numbers are 16 long and begin with 6011
		if (iLen != 16 || s != "6011")
		  bResult = false;
	}
	else{
		bResult = false; 
	} 
	
	//if ok so far, do more checking, otherwise, we're done
	if (bResult != true)
		return false;
		
	fDbl = false;
	nCheckSum = 0;
	
	//Read the card number from right to left
	for(i=cardnumber.length-1; i>=0; i--){
		nChar =  cardnumber.charCodeAt(i) - 48;
		if (nChar >= 0 && nChar <= 9){
			if(fDbl){
				nChar = nChar * 2;
				if(nChar >= 10)
				 nChar = nChar - 9;
			}
			
			nCheckSum = nCheckSum + nChar;
			fDbl = !fDbl;
		}
	}
	
	if ((nCheckSum % 10) == 0)
		return true;
	else
		return false;
	
}
function checkCookie(b){
	document.cookie = "check";
	if(document.cookie == ""){
	    if(b == true){
		 alert("Dear Member,\nThe functionality of this website requires Cookies to be enabled.\nPlease click the \"How to enable cookies?\" link on the page for instructions on how to modify your browser's setting and try to log in again.");
		}
		return false;
	}
	return true;	
}
