﻿function autoTab(maxLength, elem, nextElem) {
				if (elem.value.length == maxLength) {
					nextElem.focus();
				}
}


/*************************************************
	Validator v1.05
	code by 我佛山人
	wfsr@msn.com
*************************************************/
 Validator = {
	Require : /.+/,
	Email : /^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$/,
	Phone : /^((\(\d{2,3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/,
	Mobile : /^((\(\d{2,3}\))|(\d{3}\-))?13\d{9}$/,
	Url : /^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,
	IdCard : "this.IsIdCard(value)",
	Currency : /^\d+(\.\d+)?$/,
	Number : /^\d+$/,
	Zip : /^[1-9]\d{5}$/,
	QQ : /^[1-9]\d{4,8}$/,
	Integer : /^[-\+]?\d+$/,
	Double : /^[-\+]?\d+(\.\d+)?$/,
	English : /^[A-Za-z]+$/,
	Chinese :  /^[\u0391-\uFFE5]+$/,
	Username : /^[a-z]\w{3,}$/i,
	UnSafe : /^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/,
	IsSafe : function(str){return !this.UnSafe.test(str);},
	SafeString : "this.IsSafe(value)",
	Filter : "this.DoFilter(value, getAttribute('accept'))",
	Limit : "this.limit(value.length,getAttribute('min'),  getAttribute('max'))",
	LimitB : "this.limit(this.LenB(value), getAttribute('min'), getAttribute('max'))",
	Date : "this.IsDate(value, getAttribute('min'), getAttribute('format'))",
	Repeat : "value == document.getElementsByName(getAttribute('to'))[0].value",
	Range : "getAttribute('min') < (value|0) && (value|0) < getAttribute('max')",
	Compare : "this.compare(value,getAttribute('operator'),getAttribute('to'))",
	Custom : "this.Exec(value, getAttribute('regexp'))",
	Group : "this.MustChecked(getAttribute('name'), getAttribute('min'), getAttribute('max'))",
	ErrorItem : [document.forms[0]],
	ErrorMessage : ["\t\t\t\t"],
	Validate : function(theForm, mode){
		var obj = theForm || event.srcElement;
		var count = obj.elements.length;
		this.ErrorMessage.length = 1;
		this.ErrorItem.length = 1;
		this.ErrorItem[0] = obj;
		for(var i=0;i<count;i++){
			with(obj.elements[i]){
				var _dataType = getAttribute("dataType");
				if(typeof(_dataType) == "object" || typeof(this[_dataType]) == "undefined")  continue;
				this.ClearState(obj.elements[i]);
				if(getAttribute("require") == "false" && value == "") continue;
				switch(_dataType){
					case "IdCard" :
					case "Date" :
					case "Repeat" :
					case "Range" :
					case "Compare" :
					case "Custom" :
					case "Group" : 
					case "Limit" :
					case "LimitB" :
					case "SafeString" :
					case "Filter" :
						if(!eval(this[_dataType]))	{
							this.AddError(i, getAttribute("msg"));
						}
						break;
					default :
						if(!this[_dataType].test(value)){
							this.AddError(i, getAttribute("msg"));
						}
						break;
				}
			}
		}
		if(this.ErrorMessage.length > 1){
			mode = mode || 1;
			var errCount = this.ErrorItem.length;
			switch(mode){
			case 2 :
				for(var i=1;i<errCount;i++)
					this.ErrorItem[i].style.color = "black";
			case 1 :
				alert(this.ErrorMessage.join("\n"));
				this.ErrorItem[1].focus();
				break;
			case 3 :
				for(var i=1;i<errCount;i++){
				try{
					var span = document.createElement("SPAN");
					span.id = "__ErrorMessagePanel";
					span.style.color = "red";
					this.ErrorItem[i].parentNode.appendChild(span);
					span.innerHTML = this.ErrorMessage[i].replace(/\d+:/,"*");
					}
					catch(e){alert(e.description);}
				}
				this.ErrorItem[1].focus();
				break;
			default :
				alert(this.ErrorMessage.join("\n"));
				break;
			}
			return false;
		}
		//	document.myform.submit();
		return true;
	},
	limit : function(len,min, max){
		min = min || 0;
		max = max || Number.MAX_VALUE;
		return min <= len && len <= max;
	},
	LenB : function(str){
		return str.replace(/[^\x00-\xff]/g,"**").length;
	},
	ClearState : function(elem){
		with(elem){
			if(style.color == "black")
				style.color = "";
			var lastNode = parentNode.childNodes[parentNode.childNodes.length-1];
			if(lastNode.id == "__ErrorMessagePanel")
				parentNode.removeChild(lastNode);
		}
	},
	AddError : function(index, str){
		this.ErrorItem[this.ErrorItem.length] = this.ErrorItem[0].elements[index];
		this.ErrorMessage[this.ErrorMessage.length] = this.ErrorMessage.length + ":" + str;
	},
	Exec : function(op, reg){
		return new RegExp(reg,"g").test(op);
	},
	compare : function(op1,operator,op2){
		switch (operator) {
			case "NotEqual":
				return (op1 != op2);
			case "GreaterThan":
				return (op1 > op2);
			case "GreaterThanEqual":
				return (op1 >= op2);
			case "LessThan":
				return (op1 < op2);
			case "LessThanEqual":
				return (op1 <= op2);
			default:
				return (op1 == op2);            
		}
	},
	MustChecked : function(name, min, max){
		var groups = document.getElementsByName(name);
		var hasChecked = 0;
		min = min || 1;
		max = max || groups.length;
		for(var i=groups.length-1;i>=0;i--)
			if(groups[i].checked) hasChecked++;
		return min <= hasChecked && hasChecked <= max;
	},
	DoFilter : function(input, filter){
return new RegExp("^.+\.(?=EXT)(EXT)$".replace(/EXT/g, filter.split(/\s*,\s*/).join("|")), "gi").test(input);
	},
	IsIdCard : function(number){
		var date, Ai;
		var verify = "10x98765432";
		var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
		var area = ['','',''];
		var re = number.match(/^(\d{2})\d{4}(((\d{2})(\d{2})(\d{2})(\d{3}))|((\d{4})(\d{2})(\d{2})(\d{3}[x\d])))$/i);
		if(re == null) return false;
		if(re[1] >= area.length || area[re[1]] == "") return false;
		if(re[2].length == 12){
			Ai = number.substr(0, 17);
			date = [re[9], re[10], re[11]].join("-");
		}
		else{
			Ai = number.substr(0, 6) + "19" + number.substr(6);
			date = ["19" + re[4], re[5], re[6]].join("-");
		}
		if(!this.IsDate(date, "ymd")) return false;
		var sum = 0;
		for(var i = 0;i<=16;i++){
			sum += Ai.charAt(i) * Wi[i];
		}
		Ai +=  verify.charAt(sum%11);
		return (number.length ==15 || number.length == 18 && number == Ai);
	},
	IsDate : function(op, formatString){
		formatString = formatString || "ymd";
		var m, year, month, day;
		switch(formatString){
			case "ymd" :
				m = op.match(new RegExp("^((\\d{4})|(\\d{2}))([-./])(\\d{1,2})\\4(\\d{1,2})$"));
				if(m == null ) return false;
				day = m[6];
				month = m[5]*1;
				year =  (m[2].length == 4) ? m[2] : GetFullYear(parseInt(m[3], 10));
				break;
			case "dmy" :
				m = op.match(new RegExp("^(\\d{1,2})([-./])(\\d{1,2})\\2((\\d{4})|(\\d{2}))$"));
				if(m == null ) return false;
				day = m[1];
				month = m[3]*1;
				year = (m[5].length == 4) ? m[5] : GetFullYear(parseInt(m[6], 10));
				break;
			default :
				break;
		}
		if(!parseInt(month)) return false;
		month = month==0 ?12:month;
		var date = new Date(year, month-1, day);
        return (typeof(date) == "object" && year == date.getFullYear() && month == (date.getMonth()+1) && day == date.getDate());
		function GetFullYear(y){return ((y<30 ? "20" : "19") + y)|0;}
	}
 }
	
function confirmSubmit()
{ 
	if (Validator.Validate(document.myform,2)) {
		document.myform.submit();
	}
};


function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}


function langTC() {
  var lang = location.href;
  
  if (lang.indexOf("?")!=-1) {
    if (lang.indexOf("lang")!=-1) {
    lang = lang.replace("lang=en", "lang=tc");         
    } else {
      lang = lang+ "&lang=tc";
    }    
  } else {
    lang = lang+ "?lang=tc";
  }  
  location.href = lang;
}

function langEN() {
  var lang = location.href;
  if (lang.indexOf("?")!=-1) {
    if (lang.indexOf("lang")!=-1) {
      lang = lang.replace("lang=tc", "lang=en");         
    } else {
      lang = lang+ "&lang=en";
    }
  } else {
    lang = lang+ "?lang=en";
  }

  location.href = lang;
}


function formReset () {
	document.myForm.reset();
}
function formSubmit (obj) {
	document.myForm.submit();
}

function regFormSubmit () {
	if (Validator.Validate(document.myForm,2)) {
		document.myForm.submit();
	}
}


function authCodeReset() {
	var f = document.myForm;
f.t1.value="";
f.t2.value="";
f.t3.value="";
f.t4.value="";
f.a1.value="";
f.a2.value="";
f.a3.value="";
f.a4.value="";
f.b1.value="";
f.b2.value="";
f.b3.value="";
f.b4.value="";	
f.c1.value="";
f.c2.value="";
f.c3.value="";
f.c4.value="";	
f.d1.value="";
f.d2.value="";
f.d3.value="";
f.d4.value="";	
}
	
function authCodeSubmit()
{ 
	var myNum = new Array();
	var f = document.myForm;
	 myNum[0] = f.t1.value+f.t2.value+f.t3.value+f.t4.value;
	 myNum[1] = f.a1.value+f.a2.value+f.a3.value+f.a4.value;
	 myNum[2] = f.b1.value+f.b2.value+f.b3.value+f.b4.value;	
	 myNum[3] = f.c1.value+f.c2.value+f.c3.value+f.c4.value;	
	 myNum[4] = f.d1.value+f.d2.value+f.d3.value+f.d4.value;	
	 myNum[5] = f.e1.value+f.e2.value+f.e3.value+f.e4.value;	
	 myNum[6] = f.f1.value+f.f2.value+f.f3.value+f.f4.value;	
	 myNum[7] = f.g1.value+f.g2.value+f.g3.value+f.g4.value;	
	 myNum[8] = f.h1.value+f.h2.value+f.h3.value+f.h4.value;	
	 myNum[9] = f.i1.value+f.i2.value+f.i3.value+f.i4.value;	
	 

	 if(checkDouble(myNum)) {
	 	// alert(myNum[0]);alert(myNum[3]);
	 	alert('验证码不能重覆，请重新检查');
	 	return;
	 }
	 	 
	 var passFlag = false;
	 var errFlag = true;
	 //check all null
	 var emptyFlag = true;
	 var errMsg = "";
	 for (var i=0; i<myNum.length; i++) {
	 	 if (myNum[i]!="") {
	 	 	 emptyFlag = false;	
	 	 }
	 }
	 
	 if (emptyFlag) {
	 	alert("请输入最少一组验证码");
	 } else {
			 for (var i=0; i<myNum.length; i++) {
			 	 if (myNum[i]!="" && checkMyForm(myNum[i])==false) {
			 	 	 errMsg += "验证码 "+ (i+1) + " 需 18 位数字\n";
			 	 }
			 }	 
			 if (errMsg !="") {
			 	alert(errMsg);
			 } else {
			 	//alert(errMsg);
			 	if (!checkIsNum(f.security_code.value)) {
			 		alert("请输入校验码");
			 		f.security_code.focus();
			 	} else {
			 		document.getElementById('btnSubmit').style.display  = "none";
	 				document.getElementById('btnReset').style.display  = "none";
	 				document.getElementById('divProcess').style.display  = "block";
			 		document.myForm.submit();
			 	}
			 }			 
	 }


	 
//	alert(g1);
//	var result = checkMyForm(g1) ;
//	alert(result);
	/*if (Validator.Validate(document.myForm,2)) {
		document.myForm.submit();
	}*/
};

function checkDouble(arrNum) {
        var flag = false;
        outer_loop: 
		for (i=0; i<arrNum.length;i++) {
				var tmp = arrNum[i];
				if( tmp == "") {
					continue;
				}
				var start = i+1;
				for (j=start; j<arrNum.length;j++) {
					if (tmp==arrNum[j]) {
				//	alert("OK");
						flag = true;
						break outer_loop; 
					}
					
				}
		}
   // alert(flag);
    return flag;
    
}

function checkIsNum(num) {
		var pattern = /\d{4}/;
		var result = pattern.test(num);
		if (result) {
			return true;
		} else {
			return false;
		}
}

function checkMyForm(num) {
	var pattern = /\d{18}/;
		var result = pattern.test(num);
		if (result) {
			return true;
		} else {
			return false;
		}
}

function confirmSubmit2()
{ 
var agree=confirm("Confirm to submit the data ?");
if (agree)
	return true ;
else
	return false ;
};

function putIF(hldr,x,y,w,h,url)
       // description of the arguments below
{
   holder=document.getElementById(hldr); //wrap around div
   holder.style.display='block';  // the div gets styled
   holder.style.left=x;
   holder.style.width=w;
   IF=document.createElement('iframe');  // iframe is created in the DOM
   IF.setAttribute('height', h);  // simple DOM methods
   IF.setAttribute('width', w);
   IF.setAttribute("src", url);
   holder.appendChild(IF); // now we add it to the div
   holder.innerHTML+='<button onclick="closeIF(this.parentNode)">Close</button>';
     // final step is to put in additional controls
}
function closeIF(obj)
// the close is simple we just clear out the div
{
      obj.innerHTML='';
      obj.style.display='none';
}

//Start From Validation
function attachFormHandlers()
{
  // Ensure we're working with a 'relatively' standards 
  // compliant browser
  if (document.getElementsByTagName)
  {

    var objForm = document.getElementsByTagName('form');
    for (var iCounter=0; iCounter<objForm.length; iCounter++)
      objForm[iCounter].onsubmit = function(){return checkForm(this);}
  }
}
function resetColor(){
    var objField = document.getElementsByTagName('input');        
    for (var iFieldCounter=0; iFieldCounter<objField.length; iFieldCounter++){
      objField[iFieldCounter].style.background="#ffffff";
      var parent = objField[iFieldCounter].parentNode;
      if (parent.hasChildNodes()) {
        for (i=0; i<parent.childNodes.length; i++) {
          var currentNode = parent.childNodes[i];
          if (currentNode.nodeName.toLowerCase() == "img") {
            parent.removeChild(currentNode);
          }
        }
      }
      
    }
}


function checkForm(objForm)
{
  var arClass, bValid;
  var errObj = new Array();
  var objField = objForm.getElementsByTagName('input');
  resetColor();

  for (var iFieldCounter=0; iFieldCounter<objField.length; iFieldCounter++){
    // Allow for multiple values being assigned to the class attribute
    arClass = objField[iFieldCounter].className.split(' ');
    inLoop:
    for (var iClassCounter=0; iClassCounter<arClass.length; iClassCounter++){
      switch (arClass[iClassCounter]){
        case 'string':
           bValid = isString(objField[iFieldCounter].value.replace(/^\s*|\s*$/g, ''));
           if (bValid == false) {
              errObj.push(iFieldCounter);  
              break inLoop;
           }
           break;
        case 'number' :
           bValid = isNumber(objField[iFieldCounter].value);  
            if (bValid == false) {
              errObj.push(iFieldCounter);  
               break inLoop;
           }
           break;
        case 'digi' :
           bValid = check8(objField[iFieldCounter].value);
           if (bValid == false) {
              errObj.push(iFieldCounter);  
               break inLoop;
           }
           break; 
        case 'formatDate' :
           bValid = isDateFormat(objField[iFieldCounter].value);
           if (bValid == false) {
              errObj.push(iFieldCounter);  
               break inLoop;
           }
           break;            
        case 'email' :
           bValid = isEmail(objField[iFieldCounter].value);
           if (bValid == false) {
              errObj.push(iFieldCounter);  
               break inLoop;
           }
           break;
        default:
           bValid = true;
      }
    }
  
  }
  
  if (errObj.length>=0) {
  	var theMessage="";
    for (var i=0; i<errObj.length; i++) {   
      var errorIndicator=document.createElement('img');
				errorIndicator.alt="error";
				errorIndicator.src="images/alert.gif";
      var parent = objField[errObj[i]].parentNode;
      parent.appendChild(errorIndicator);
      
      theMessage = theMessage + "Please review the value you provided for <b>"  + objField[errObj[i]].name + "</b><br />" ;
    }
    //alert('Please review the value you provided for ' + objField[errObj[0]].name);
    
    var err = document.getElementById("errMsg");
    err.style.display="block";


    err.innerHTML = theMessage;
    objField[errObj[0]].select();
    objField[errObj[0]].focus();
    
    return false;
  } else {
  	err.style.display="none";
    return true;
  }
}

function isString(strValue)
{
  return (typeof strValue == 'string' && strValue != '' && isNaN(strValue));
}

function isNumber(strValue)
{
  return (!isNaN(strValue) && strValue != '');
}

function isEmail(strValue)
{
  var objRE = /^[\w-\.\']{1,}\@([\da-zA-Z-]{1,}\.){1,}[\da-zA-Z-]{2,}$/;

  return (strValue != '' && objRE.test(strValue));
}

function check8(strValue){
var x = strValue;
 var filter  = /^[\w]{1,2}$/;
 if (filter.test(x)) return true;
  else return false;
}

function isDateFormat (strValue) {
var x = strValue;
if (x =='') {
	return true;
} else {
	 var filter  = /^(\d{4})(\/|-)(\d{1,2})(\/|-)(\d{1,2})$/;
	 if (filter.test(x)) return true;
	  else return false;
}
}

//End From Validation
