/*
	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','isHKID'];
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() {
  // Strip leading and trailing white-space
  return this.replace(/^\s*|\s*$/g, "");
}
function initCheck(){
	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){
		    /*
        if (e.type=="checkbox" && (e.name=="ctl00$content$cbPromotions" || e.name=="ctl00$content$cbEvent")){
          e.name = "ctl00$content";
        }
        */
		    var myMethods = validateMethod(e.className);
				validateArr.push( [parseInt(validid), e, myMethods] );
			}
		}
		f.onsubmit = function(){return validate();};
		f.onreset = function(){return clrerr();};
	}
	if (typeof(followInitCheck)=="function"){
		followInitCheck();
	}
}
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{
				retVal = eval(validateArr[i][2][j]+'(checkItem)');
			}
			if (!retVal){
				break;
			}
		}
		//var retVal = eval(validateArr[i][2]+'(checkItem)');
		var refId = validateArr[i][0];
		var obj;
		do {
			obj = document.getElementById('lblvalid' + (refId--));
		} while (!obj);
		if (!retVal){
			if (obj) obj.className = 'mandatoryHighlight';
			if (errObj == null) errObj = e;
			strError += "error";
		} else {
			if (obj) obj.className = '';
		}
	}
	errMsgObj = document.getElementById('warnmsg');
	if (strError==''){
		if (errMsgObj){
			errMsgObj.innerHTML = '';
		}
		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){
	/*
	if (e.options[e.options.selectedIndex].value != ""){
		return true;
	}else{
		return false;
	}
*/
	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 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;
}
function isHKID(str){
	var filter  = /^([A-Z][0-9]{2,4})+$/;
	if (filter.test(str)){
		return true;
	}else{
		return false;
	}
}
var followInitCheck;
if (typeof(window.onload)=="function"){
	followInitCheck=window.onload;
}
window.onload=initCheck;
