var strEx = "script|onClick|ondblClick|onload|onunload|ondragstart|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|onchange|onerror|onafterupdate|onbeforeeditfocus|onbeforeupdate|oncellchange|oncontextmenu|oncontrolselect|ondataavailable|ondatasetchanged|ondatasetcomplete|onerrorupdate|onhelp|onpropertychange|onreadystatechange|onrowenter|onrowexit|onrowsdelete|onrowsinserted|onselectstart|onstop"
var reg = new RegExp(strEx,"gi")

function fnValidField(){
	this.requiredField = RequiredFieldValidator;
	this.comparedField = CompareValidator;
	this.filterSpString = filterSpecialChar;
	this.delDangerString = delDangerousString;
	this.chkNonChar = chkNonwordChar;
	this.chkMoney = fnCheckMoneyfield;
	this.chkEmail = fnChkEmail;
	this.chkPhone = fnChkPhone;
	this.chkBirthday = fnChkBirthday;
}
/*
function delDangerousString(tarVal){
	return(tarVal.replace(reg,""));
}
*/
function delDangerousString(tarField){
	var arr = tarField.split(",");
	for(i=0;i<arr.length;i++)
	{
		eval("document.getElementById('" + arr[i] + "').value = document.getElementById('" + arr[i] + "').value.replace(reg,'')");
	}
}

function chkAlphabets(tarObj) {
	return(tarObj.search(/a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z/));
}
function chkNumbers(tarObj) {
	return(tarObj.search(/0|1|2|3|4|5|6|7|8|9/));
}
function chkNonwordChar(tarObj){
	return(tarObj.value.search(/\W/));
}
function filterSpecialChar(tarObj){
	var tarStr = tarObj.value;
	return(tarStr.replace(/\&|\?|\#|\'/g,""));
}
function RequiredFieldValidator(tarObj){
	return( (tarObj.value=="") ? false : true);			
}
function CompareValidator(tarObj1,tarObj2,doType,opt)
{
	var valA=tarObj1.value;
	var valB=tarObj2.value;
	var cndt = "";
	switch(doType){
		case "DATE":				
				if( (!fnChkDate(tarObj1.value)) || (!fnChkDate(tarObj2.value)) ){
					return(false);
				}
				cndt = "'" + valA + "'" + transOperater(opt) + "'" + valB + "'";
				break;			
		case "INTEGER":
				if( (!fnChkNum(valA)) || (!fnChkNum(valB)) ){
					return(false);
				}
				cndt = valA + transOperater(opt) + valB;
				break;				
		case "STRING":
				cndt = "'" + valA + "'" + transOperater(opt) + "'" + valB + "'";
				break;				
	}
	//return (eval("'" + valA + "'" + transOperater(opt) + "'" + valB + "'")) ? true : false;
	return (eval(cndt)) ? true : false;
}

function transOperater(optCode){
	var optCd;
	switch(optCode){
		case "BT":
				optCd=">";
				break;
		case "ST":
				optCd="<";
				break;
		case "BE":
				optCd=">=";
				break;
		case "SE":
				optCd="<=";
				break;
		case "EQ":
				optCd="==";
				break;
		case "NE":
				optCd="!=";
				break;		
		default:
				optCd="=="
	}
	return(optCd);
}
//check Numeral
function fnChkNum(tarVal){
	return(!isNaN(tarVal))
}
//check date function
function fnChkDate(str){ 
	num = new Date(str).getDate()
	arr = str.split("/");
	return((!(isNaN(num)))?((num < arr[2])?false:true):false);
} 

//check Birthday
function fnChkBirthday(birthday)
{
	var nowTime = (new Date()).getTime();
	if(Date.parse(birthday)+86400*1000 >= nowTime)
	{
		return "<tr><td valign=top>>></td><td>Invlalid birthday! Must not be greater than today.</td></tr>";
	}
	return "";
}

//check Phone number
function fnChkPhone(phone, errMsg)
{
	var len = phone.length;
	var arrayPhone = new Array();
	arrayPhone = phone.split("-");
	
	if(len == 0)
	{
      return "";
    }
    else if(len != 12)
    {
		//Revise Error Message
		return "<tr><td valign=top>>></td><td>Invalid " + errMsg + " format! (01)</td></tr>";
    }
    else if(arrayPhone.length != 3)
    {
		return "<tr><td valign=top>>></td><td>Invalid " + errMsg + " format! (02)</td></tr>";
    }
    else if(!(arrayPhone[0].length == 3 && arrayPhone[1].length == 3 && arrayPhone[2].length == 4))
    {
		return "<tr><td valign=top>>></td><td>Invalid " + errMsg + " format! (03)</td></tr>";
    }
    
	for(var i = 0; i < arrayPhone.length; i++)
	{  
		for(var j = 0; j < arrayPhone[i].length; j++)
		{
			var c= arrayPhone[i].charAt(j);
			if(!(c>="0"&&c<="9"))
			//CC:Revise Error Message - this error should be avoided by using INPUT MASK
			return "<tr><td valign=top>>></td><td>Invalid " + errMsg + "! Please key in digit only. (04)</td></tr>";
		}
	}
	return "";
}

//check Email funciton
function fnChkEmail(email)
{
	var len = email.length;
	if(len == 0)
	{
      return "";
    }
      
	for(var i=0;i<len;i++)
	{  
		var c= email.charAt(i);
		if(!((c>="A"&&c<="Z")||(c>="a"&&c<="z")||(c>="0"&&c<="9")||(c=="-")||(c=="_")||(c==".")||(c=="@")))
			return "<tr><td valign=top>>></td><td>Your Email address only can be a numeral,English letter Mark '-','_' and so on,Other marks all cannot use!</td></tr>";
	}
	
	
	//CC:Revise Error Message	
	//沒有'@'，或'@'在第一個字母，或'@'在最後一個字母
	if((email.indexOf("@")==-1)||(email.indexOf("@")==0)||(email.indexOf("@")==(len-1)))
		//return "<tr><td valign=top>>></td><td>Your Email address is illegal!(01)</td></tr>";
		return "<tr><td valign=top>>></td><td>Invalid email address format! (01)</td></tr>";
		
	//有'@', 並且在第一個'@'之後仍出現其他'@'
	if((email.indexOf("@")!=-1)&&(email.substring(email.indexOf("@")+1,len).indexOf("@")!=-1))
		//return "<tr><td valign=top>>></td><td>Your Email address is illegal!(02)</td></tr>";
		return "<tr><td valign=top>>></td><td>Invalid email address format! (02)</td></tr>";
	
	//沒有'.'，或'.'在第一個字母，或'.'在最後一個字母
	if( (email.indexOf(".") == -1) || (email.indexOf(".") == 0) || ( email.lastIndexOf(".") == (len-1)) )
		//return "<tr><td valign=top>>></td><td>Your Email address is illegal!(03)</td></tr>";
		return "<tr><td valign=top>>></td><td>Invalid email address format! (03)</td></tr>";
		
	return "";
}

var errMsg="";
function fnOpenAlertWin(url,errMsg){
	
	navigatorV = navigator.appVersion;
	if(navigatorV.indexOf("MSIE ")!=-1){
		IntNavigatorV = parseInt(navigatorV.substring(navigatorV.indexOf("MSIE ")+5,navigatorV.indexOf("; Windows")));
	}else{
		IntNavigatorV = 0;
	}

	if(IntNavigatorV>5){
		returnValue = window.showModalDialog(url,errMsg,"dialogHeight: 250px; dialogWidth: 400px; edge: Raised; center: Yes; help: No; resizable: Yes; status: No;");
	}else{
		window.open(url,"newWin","height=250,width=400,top=200,left=200,status=no,toolbar=no,resizable=yes,scrollbars=no");
	}
}
function fnCheckMoneyfield(xValue){
	var xMsg = "";
	var parseValue = parseFloat(xValue);
	if(parseValue != ""){
		xMsg += (!isNaN(parseValue)?"":"Error");
		if(xMsg == ""){
			xMsg+=  ((parseValue >= 0) ? "":"Error");
		}
		if(xMsg == ""){
			xMsg+= ((parseValue.indexOf(".") == -1) ? "":"Error");
		}
	}
	return(xMsg);
	
}
function fnResetFromElements(){	
	var tarObj;	
	if(document.MainFrm != null)
	{
		tarObj = document.MainFrm;
	}
	else if(document.Form1 != null)
	{
		tarObj = document.Form1;
	}
	
	if(tarObj != null)
	{
		for(i=0;i<tarObj.elements.length;i++){
			switch (tarObj.elements[i].type)
			{
				case "text":tarObj.elements[i].value = "";
					break;
				case "textarea":tarObj.elements[i].value = "";
					break;
				case "select-one": 
					if(tarObj.elements[i].length > 0)
						tarObj.elements[i].options[0].selected = true;
					break;
				case "checkbox": tarObj.elements[i].checked = false;
					break;
	//			default:
	//				alert(tarObj.elements[i].type)
			}
		}
		
	}
}


//JoinMember
function UpperChat(tarObject) {
	tarObject.value = tarObject.value.toUpperCase();
}
function LowerChat(tarObject) {
	tarObject.value = tarObject.value.toLowerCase();
}
			
function fnCheck_account(source, args) {
	var account = args.Value; 
	var pwd = document.getElementById("txtPassword").value;
	
	for(i = 0 ; i <account.length ; i++ ){
		if(account.charAt(i) == '_' && account.charAt(i-1) == '_' ){
			source.innerHTML = "<img src=../../UI/IMAGE/OPM_tab/i.gif>" + ErrMsg_01[0];
			args.IsValid = false;
			return;
		}
	}
	if( account.charAt( account.length - 1 ) == '_' ){
		source.innerHTML = "<img src=../../UI/IMAGE/OPM_tab/i.gif>" + ErrMsg_01[1];
		args.IsValid = false;
		return;
	}
	if(pwd.length > 0)
	{
		ValidatorValidate(document.getElementById("cvPW1"));
	}
	args.IsValid = true;
}

function fnCheck_password (source, args){
	var login = document.getElementById("txtUserID").value;
	var pwd = args.Value;

	if (!(chkNumbers(pwd) >=0 && chkAlphabets(pwd) >= 0)){
		source.innerHTML = "<img src=../../UI/IMAGE/OPM_tab/i.gif>" + ErrMsg_01[2];
		args.IsValid = false;
		return;
	}
	if (login.length != 0 && (login.indexOf(pwd) >= 0 || pwd.indexOf(login) >= 0)){
		source.innerHTML = "<img src=../../UI/IMAGE/OPM_tab/i.gif>" + ErrMsg_01[3];
		args.IsValid = false;
		return;
	}
	args.IsValid = true;
	
	ValidatorValidate(document.getElementById("cvPW2"));
	ValidatorValidate(document.getElementById("cvPW3"));
	ValidatorValidate(document.getElementById("cvPW4"));
}

function fnCheck_password2 (source, args){
	var pwd = document.getElementById("txtPassword").value;
	document.getElementById(document.getElementById(source.id).controltovalidate).value = document.getElementById(document.getElementById(source.id).controltovalidate).value.toUpperCase();
	var name = document.getElementById(document.getElementById(source.id).controltovalidate).value;
	if ((name.length > 2) && (pwd.indexOf(name) >= 0) ){
		switch(source.id)
		{
			case "cvPW2":
					source.innerHTML = "<img src=../../UI/IMAGE/OPM_tab/i.gif>" + ErrMsg_01[4];
					break;
			case "cvPW3":
					source.innerHTML = "<img src=../../UI/IMAGE/OPM_tab/i.gif>" + ErrMsg_01[5];
					break;
		}
		
		args.IsValid = false;
		return;
	}
	
	args.IsValid = true;
}

function fnCheck_password3 (source, args){
	var pwd = document.getElementById("txtPassword").value;
	var name = args.Value;
	if ((name.length > 2) && (pwd.indexOf(name) >= 0) ){
		source.innerHTML = "<img src=../../UI/IMAGE/OPM_tab/i.gif>" + ErrMsg_01[6];
		args.IsValid = false;
		return;
	}
	
	args.IsValid = true;
}

function fnCheck_birthday(source, args) {
	ValidatorValidate(document.getElementById("rvBirthday1"));
	ValidatorValidate(document.getElementById("rvBirthday2"));
	if(document.getElementById("rvBirthday2").isvalid)
	{
		var nowTime = (new Date()).getTime();
		if(Date.parse(args.Value)+86400*1000 >= nowTime)
		{
			source.innerHTML = "<img src=../../UI/IMAGE/OPM_tab/i.gif>" + ErrMsg_01[7];
			args.IsValid = false;
			return;
		}	
		args.IsValid = true;
	}
}

function fnChkctvPhone(source, args) {
	ValidatorValidate(document.getElementById("ctvPhone"));
}



//Member login
function fnCheck_accountSingIn(source, args) {
	var account = args.Value; 
	
	if(document.getElementById("rvUserID2").isvalid)
	{
		for(i = 0 ; i <account.length ; i++ ){
			if(account.charAt(i) == '_' && account.charAt(i-1) == '_' ){
				source.innerHTML = "<img src=../../UI/IMAGE/OPM_tab/i.gif>" + ErrMsg_02[0] + "<br>";
				args.IsValid = false;
				return;
			}
		}
		if( account.charAt( account.length - 1 ) == '_' ){
			source.innerHTML = "<img src=../../UI/IMAGE/OPM_tab/i.gif>" + ErrMsg_02[0] + "<br>";
			args.IsValid = false;
			return;
		}
	}
	args.IsValid = true;
}

function fnCheck_passwordSignIn (source, args){
	var login = document.getElementById("txtUserID").value;
	var pwd = args.Value;
	
	if(document.getElementById("rvPW2").isvalid)
	{
		if (!(chkNumbers(pwd) >=0 && chkAlphabets(pwd) >= 0)){
			source.innerHTML = "<img src=../../UI/IMAGE/OPM_tab/i.gif>" + ErrMsg_02[1];
			args.IsValid = false;
			return;
		}
		if (login.length != 0 && (login.indexOf(pwd) >= 0 || pwd.indexOf(login) >= 0)){
			source.innerHTML = "<img src=../../UI/IMAGE/OPM_tab/i.gif>" + ErrMsg_02[1];
			args.IsValid = false;
			return;
		}
	}
	args.IsValid = true;
}

//Check House Style
function fnCheck_HouseStyle(source, args) {
	if(args.Value == "0")
	{
		source.innerHTML = "<img src=../../UI/IMAGE/OPM_tab/i.gif>" + ErrMsg_03[1];
		args.IsValid = false;
		return;
	}
	args.IsValid = true;
}

//Check State
function fnCheck_State(source, args) {
	if(args.Value == "0")
	{
		source.innerHTML = "<img src=../../UI/IMAGE/OPM_tab/i.gif>" + ErrMsg_03[2];
		args.IsValid = false;
		return;
	}
	args.IsValid = true;
}

//Check Error
function fnCheckError(source, args) {
		ValidatorUpdateIsValid();
		if(!Page_IsValid)
		{
			alert("Please check your input for error!");
		}
}

//Check MaxWord
function fnCheck_MaxWord(source, args) {
	if(countWord(args.Value) > source.MaxWord)
		args.IsValid =false;
	else
		args.IsValid = true;
}

function fnWordCount(tarObj, showObj, maxWord) {
	counting = countWord(tarObj.value);
	if(counting > maxWord)
	{
		showObj.innerHTML = "(Word counts: <font color='red'>" + countWord(tarObj.value) + "</font> / " + maxWord + ")";
	}
	else
	{
		showObj.innerHTML = "(Word counts: " + countWord(tarObj.value) + " / " + maxWord + ")";
	}
}

function countWord(message) {
  var length = 0;
  for (i = 0; i < message.length ; i++) {
    if ( message.charCodeAt(i) > 255 ) {
      length += 2;
    } else {
      length++;
    }    
  }
  return length;
}

//Edit Profile
function fnCheck_CurrentPassword (source, args){
	var pwd = args.Value;

	if (!(chkNumbers(pwd) >=0 && chkAlphabets(pwd) >= 0)){
		source.innerHTML = "<img src=../../UI/IMAGE/OPM_tab/i.gif>" + ErrMsg_01[2];
		args.IsValid = false;
		return;
	}
	args.IsValid = true;
	
	ValidatorValidate(document.getElementById("cvPW2"));
	ValidatorValidate(document.getElementById("cvPW3"));
	ValidatorValidate(document.getElementById("cvPW4"));
}

//Change Password
function fnCheck_NewPassword (source, args){
    var login = document.getElementById("hidUserID").value;
	if (!(chkNumbers(args.Value) >=0 && chkAlphabets(args.Value) >= 0)){
		source.innerHTML = "<img src=../../UI/IMAGE/OPM_tab/i.gif>" + ErrMsg_01[2];
		args.IsValid = false;
		return;
	}
	if (login.length != 0 && (login.indexOf(args.Value) >= 0 || args.Value.indexOf(login) >= 0)){
		source.innerHTML = "<img src=../../UI/IMAGE/OPM_tab/i.gif>" + ErrMsg_01[3];
		args.IsValid = false;
		return;
	}
	
	args.IsValid = true;
}

//Check DropDrownList
function fnChkDropDownList(source, args)
{
	if(args.Value == "0")
	{
		args.IsValid = false;
		return;
	}
	args.IsValid = true;
}


//Use for passing parameter between two pages
function transferValue(sNewFormAction,name,value){
	//D alert(value);
	if(name=="CKV"){
		document.MainFrm.CKV.value = value;
		//alert(document.MainFrm.CKV.value);
	}
	else if(name == "Status"){
		document.MainFrm.Status.value = value;
		//alert(document.MainFrm.Status.value);
	}
	else if(name == "PCData")
	{
		document.MainFrm.PCData.value = value;
	}else if(name == "EBData"){
	   document.MainFrm.EBData.value = value;
	}
	document.forms[0].action = sNewFormAction;
	document.forms[0].__VIEWSTATE.name = 'NOVIEWSTATE';
	document.forms[0].submit();
}

/*use for checkbox select all*/
var isCheckRow = new Array();
function getObj( objID )
{
   return document.getElementById( objID );
}

function _SelectAll( prefix,s,chk )
{
   var oArr = _GetColl( prefix,s,chk );
   for( var o in oArr )
   {
      oArr[o].checked = true;
   }
}

function isSelectAll( prefix,s,chk ){
   var oArr = _GetColl( prefix,s,chk );
   for( var o in oArr )
   {
      if(!oArr[o].checked) return false;
   }
   return true;
}

function _RevSelect( prefix,s,chk )
{
   var oArr = _GetColl( prefix,s,chk );
   var tmpIdx = s-1;
   for( var o in oArr )
   {
      if(getObj(prefix+'__ctl'+tmpIdx+'_chkAll').checked){ //: 2009/3/9 Deep, change to dynamic parameter
         oArr[o].checked = true;
      }else {
         oArr[o].checked = false;
      }
   }
   _CheckSelect( prefix,s,chk );
}

function _GetColl( prefix,s,chk )
{
   var i = s;
   var oArr = new Array();
   while( true)
   {
      var o = getObj( prefix + '__ctl' + i + '_' + chk);
      if( o != null )
      {
         oArr.push( o );
      }
      else
      {
         break;
      }
      i++;
   }

   return oArr;
}

function getRowNum(cb_id, chk, s){ //: 計算checkbox所在的row number  //: 2009/3/9 Deep, add parameter s
//: 以 'dtgAPList__ctl12_checkPost' 為例 
   var preIndex = cb_id.indexOf("ctl"); //: preIndex = 11
   var postIndex = cb_id.indexOf(chk);  //: postIndex = 16
   var finalStr = cb_id.substring(preIndex,postIndex-1); //: finalStr = 'ctl12'
   finalStr = finalStr.substring(finalStr.indexOf("l")+1); //: finalStr = '12'
   return Number(finalStr)-s; //: return 9 (因為checkbox與row number相差3) //: 2009/3/9 Deep, update 3 to parameter s
}

function isDuplicate( item ){
   for(var r in isCheckRow){
      if(item==isCheckRow[r]){
         return true; // duplicate
      }
   }
   return false;   
}

function _CheckSelect( prefix,s,chk )
{
   var oArr = _GetColl( prefix,s,chk );
   for( var o in oArr )
   {
      //D alert(prefix + '_row' + getRowNum(oArr[o].id, chk, s));
      var rowObject = getObj(prefix + '_row' + getRowNum(oArr[o].id, chk, s));
      if(oArr[o].checked){
         if(isCheckRow.length !=0){
            if(!isDuplicate(rowObject)){
                  //D alert("push");
               isCheckRow.push(rowObject);
               }
         }else{ //: first select
            isCheckRow.push(rowObject);
         }
      }else{
            for(var t in isCheckRow){
               if(rowObject == isCheckRow[t] ){
                  //D alert("splice");
                  isCheckRow.splice(t,1);    
               }
            } 
               
      }
   }
   for(var r = 0; r<oArr.length; r++){
      var dRow = document.getElementById(prefix + '_row' + r);
      dRow.style.backgroundColor = "#F6F6F6";
   }
   for(var i in isCheckRow){
      isCheckRow[i].style.backgroundColor = "#FFFF66";
   }
   
   var tmpIdx = s-1;
   if(!isSelectAll(prefix,s,chk)){
      getObj(prefix+'__ctl'+tmpIdx+'_chkAll').checked = false;
   }else{
      getObj(prefix+'__ctl'+tmpIdx+'_chkAll').checked = true;
   }
}

//[ special case for Deposit Management
function trackDeposit(selectedCheckBox, selectedRow){
   var hiddenInput = document.getElementById('depositSelectedRecord');
   var hiddenInput_Chk = document.getElementById('depositSelectedChk');
   
   var checkBoxObj = getObj(selectedCheckBox);
   var rowObj = getObj(selectedRow);
   var tmpTransIDArr = hiddenInput.value.split(' ');
   
   if(checkBoxObj.checked){ //: add to record
      hiddenInput.value += rowObj.cells[0].innerHTML+" ";
      hiddenInput_Chk.value += checkBoxObj.id+" ";
   }else{ //: delete form record
      var tmpChkIDArr = hiddenInput_Chk.value.split(' ');
      for(var j in tmpTransIDArr){
         if(rowObj.cells[0].innerHTML == tmpTransIDArr[j]){
            var index = j;
            break;
         }
      }
      if(!index) alert("terrible error");
      tmpTransIDArr.splice(index, 1, "");
      tmpChkIDArr.splice(index, 1, "");
      
      hiddenInput.value = ""; //: clear first
      hiddenInput_Chk.value = ""; //: clear first
      
      for(var n in tmpTransIDArr){ //: put value
         hiddenInput.value += tmpTransIDArr[n]+" ";
         hiddenInput_Chk.value += tmpChkIDArr[n]+" ";
      }
   }
   //D alert(hiddenInput.value+"---"+hiddenInput_Chk.value);
}

function trackDeposit_checkAll(prefix,s,chk){
   var oArr = _GetColl( prefix,s,chk );
   //D alert(getObj(prefix+'__ctl2_chkAll').checked);
   for( var o in oArr )
   {
      var tmpRowId = prefix + '_row' + getRowNum(oArr[o].id, chk, s);
      trackDeposit(oArr[o].id, tmpRowId);
   }
}

function retroSelecedCheckBox(prefix,s,chk){
   var tmpTransID = getObj('depositSelectedRecord').value.split(' ');
   var tmpChkID = getObj('depositSelectedChk').value.split(' ');
   for(var i in tmpChkID){
      var tmpCheckBoxObj = getObj(tmpChkID[i]);
      if(tmpCheckBoxObj != null){
         var rowNum = getRowNum(tmpCheckBoxObj.id, chk, s);
         var dRow = getObj(prefix + '_row' + rowNum);
         for(var j in tmpTransID){
            if(dRow.cells[0].innerHTML == tmpTransID[j]){
               //: found
               tmpCheckBoxObj.checked = true;
               dRow.style.backgroundColor = "#FFFF66";
               break;
            }
         }
      }else{
         continue;
      }
   }
   if(getObj(prefix+'__ctl2_chkAll')!=null){
      getObj(prefix+'__ctl2_chkAll').checked = isSelectAll(prefix,s,chk);
   }
}
//]

/*use for checkbox select all*/

//[ 2008/5/19 deep, use for tab menubar to invoke linkbutton at Server side
function Redirect(btnID){
   document.getElementById(btnID).click();
}
//]