/*
Enhanced form validation
skip all inline javascript ...... almost
Last modified: 2006-10-12
Mitch dot Leung at Ion Global dot com
usage:	
<span id="lblvalid##">text</span>
highlight input title,## is the ID number from 1 to N
<input validid="##" class="userDefinedClass isEmail isBlank etc" ... />
mark the required fields and use CLASS to set the validate methods
*/
var validateArr=[];
var methodArr=['isEmail','isBlank','isSelect','isDigit','isSignUpCheck','isCheck','isEqual','isValidDate','isAlphabet','isAlphaNumeric','isPhoneNo'];
var f;
function validateMethod(__class){
var methods=[];
for(j=0;j<methodArr.length;j++){
if(__class.indexOf(methodArr[j])!=-1)methods.push(methodArr[j]);
}
return methods;
}
String.prototype.trim=function(){
return this.replace(/^\s*|\s*$/g,"");
}
var isFormValidateInited=false;
function initFormValidate(ev){
if(!isFormValidateInited){
var docforms=document.getElementsByTagName("form");
if(docforms) f=docforms[0];
if(f){
var el=f.elements;
var str="";
for(i=0;i<el.length;i++){
var e=el[i];
var validid=e.getAttribute("validid");
if(validid!=null){
var myMethods=validateMethod(e.className);
validateArr.push([parseInt(validid),e,myMethods]);
}
}
f.onsubmit=function(){return validate();};
f.onreset=function(){return clrerr();};
}
isFormValidateInited=true;
}
if(ev!='calendar'&&typeof(followInitCheck)=="function")followInitCheck();
}
function changefields(radio){
var el=document.getElementsByTagName("input");
for(i=0;i<el.length;i++){
if(el[i].checked&&el[i].name==radio.name){
var e=el[i];
if(e.value=="existing"){
toggleEl('divReserveNum',1);
toggleEl('divCheckinout',1);
}else if(e.value=="making"){
toggleEl('divReserveNum',0);
toggleEl('divCheckinout',1);
}else if(e.value=="general"){
toggleEl('divReserveNum',0);
toggleEl('divCheckinout',0);
}
}
}
}
function validate(){
if(!f)return false;
var strError='';
var errObj=null;
for(var i=0;i<validateArr.length;i++){
var e=validateArr[i][1];
var retVal=false;
for(var j=0;j<validateArr[i][2].length;j++){
var checkItem=(validateArr[i][2][j]=='isSelect') ? e :((validateArr[i][2][j]=='isCheck') ? e.name : e.value.trim());
if(validateArr[i][2][j]=="isEqual"){
var param2=document.getElementById(e.className.substring(e.className.indexOf('isEqual_')+8,e.className.length)).value.trim();
retVal=eval(validateArr[i][2][j]+'(checkItem,param2)');
}else if(validateArr[i][2][j]=="isValidDate"){
	if (checkItem!='')
	{
		var oMonth=document.getElementById(e.className.substring(e.className.indexOf('isDateM_')+8,e.className.length).substring(0,e.className.substring(e.className.indexOf('isDateM_')+8,e.className.length).indexOf(' ')));
		month = oMonth.options[oMonth.selectedIndex].value;
		var year=document.getElementById(e.className.substring(e.className.indexOf('isDateY_')+8,e.className.length).substring(0,e.className.substring(e.className.indexOf('isDateY_')+8,e.className.length).indexOf(' '))).value.trim();
		checkItem = month+'/'+checkItem+'/'+year;
		retVal=eval(validateArr[i][2][j]+'(checkItem)');
	}else retVal=true;
}else{
retVal=eval(validateArr[i][2][j]+'(checkItem)');
}
if(!retVal)break;
}
var refId=validateArr[i][0];
var obj;
do{
obj=document.getElementById('lblvalid'+(refId--));
}while(!obj);
if(!retVal){
if(obj)obj.className='mandatory';
if(errObj==null)errObj=e;
strError+="error";
}else{
if(obj)obj.className='';
}
}
errMsgObj=document.getElementById('warnmsg');
if(strError==''){
if(errMsgObj)errMsgObj.innerHTML='';
//f.submit();
return true;
}else{
var errMsg="";
var strUrl=window.location.href+ '';
if(strUrl.indexOf("/jp/")!=-1){
errMsg="赤く表示された項目をご記入ください";
}else if(strUrl.indexOf("/sc/")!=-1){
errMsg="下列红色显示的各栏需要更正。";
}else if(strUrl.indexOf("/tc/")!=-1){
errMsg="下列紅色顯示的各欄需要更正。";
}else{
errMsg="The field(s) shown in red below require correction.";
}
if(errMsgObj)errMsgObj.innerHTML=errMsg;
errObj.focus();
return false;
}
return false;
}
function clrerr(){
errMsgObj=document.getElementById('warnmsg');
if(errMsgObj)errMsgObj.innerHTML="";
for(var i=0;i<validateArr.length;i++){
var e=validateArr[i][1];
var refId=validateArr[i][0];
var obj;
do{
obj=document.getElementById('lblvalid'+(refId--));
}while(!obj);
if(obj)obj.className='';
}
return true;
}
function isDigit(str){
if(str.length<=0)return false;
var filter=/^([0-9]+)$/;
if(filter.test(str))
return true;
else
return false;
}
function isSelect(e){
for(var i=0;i<e.options.length;i++){
if(e.options[i].selected&&e.options[i].value!="")return true;
}
return false;
}
function isCheck(__name){
var els=f.getElementsByTagName("input");
for(var i=0;i<els.length;i++){
var e=els[i];
if((e.type=="checkbox"||e.type=="radio")&&e.name==__name&&e.checked)return true;
}
return false;
}
function isSignUpCheck(__name){
var arr=["ctl00_content_cbPromotions","ctl00_content_cbEvent"];
var flag=false;
for(i=0;i<arr.length;i++){
var e=document.getElementById(arr[i]);
if(e){
if(e.checked){
flag=true;
break;
}
}
}
return flag;
}
function isBlank(str){
return(str=="") ? false : true;
}
function isValidDate(str){
return(isDate(str));
}
function isDate(dateStr) {

var datePat = /^(\d{1,2})(\/|-)(\d{1,2})(\/|-)(\d{4})$/;
var matchArray = dateStr.match(datePat); // is the format ok? mm/dd/yyyy

if (matchArray == null) {
return false;
}

month = matchArray[1]; // p@rse date into variables
day = matchArray[3];
year = matchArray[5];

if (month < 1 || month > 12) { // check month range
return false;
}

if (day < 1 || day > 31) {
return false;
}

if ((month==4 || month==6 || month==9 || month==11) && day==31) {
return false;
}

if (month == 2) { // check for february 29th
var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
if (day > 29 || (day==29 && !isleap)) {
return false;
}
}
return true; // date is valid
}
function isEqual(str,str2){
return(str==str2);
}
function isEmail(str){
	if(str==""){	
		return false;
	}else{
		var filter=/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		if(filter.test(str))
			return true;
		else
			return false;
		}
	return false;
}
// If the element's string matches the regular expression it is all letters
function isAlphabet(elem){
	var alphaExp = /^[a-zA-Z ]+$/;
	if(elem.match(alphaExp)){
		return true;
	}else{
		return false;
	}
}
// If the element's string matches the regular expression it is numbers and letters
function isAlphaNumeric(elem){
	var alphaExp = /^[0-9a-zA-Z]+$/;
	if (elem.trim()!="")
	{
		if(elem.match(alphaExp)){
			return true;
		}else{
			return false;
		}
	}else{
		return true;
	}
}
// If the element's string matches the regular expression it is numbers and letters
function isPhoneNo(elem){
	var alphaExp = /^[0-9 +-]+$/;
	if (elem.trim()!="")
	{
		if(elem.match(alphaExp)){
			return true;
		}else{
			return false;
		}
	}else{
		return true;
	}
	
}
var followInitCheck;
if(typeof(window.onload)=="function")followInitCheck=window.onload;
window.onload=initFormValidate;
