/* 
    This is the source code for the validation function. 
    Add the following code just after the </HEAD> in the files where the 
    generalised validation functionality is required. 
    <SCRIPT language="JavaScript1.2" src="gen_validation.js"></SCRIPT> 
*/ 

    /* 
    *   File : gen_validation.js 
    *     
    *   Author : Prasanth M J 
    *   
    *   CreativeProgrammers.com - 
	*	Turn your Programming Expertise into Achievements!
    *   Visit http://www.creativeprogrammers.com 
    *     
    *   Email : prasanth@creativeprogrammers.com
    */ 
//---------------------------------EMail Check ------------------------------------ 

/*  checks the validity of an email address entered 
*   returns true or false 
*   
*/ 
function dw$(words){
	document.write(words);
}
function Array2DVar(x,y) {     // 定義二維陣列原型
	this.length = x;
	this.x = x;        // x 維度長度
	this.y = y;        // y 維度長度
	for(var i = 0; i < this.length; i++)  // 初始各元素值為 null
		this[i] = new Array(y);    // this 代表物件本身
}

function dw_page(max_page,this_page,page_name,sqlstr){
	if(sqlstr != "undefined" && sqlstr != null){
		if(sqlstr.indexOf(" ")>=0){
			sqlstr = sqlstr.replace(" ","%20");
		}
	}
	
	var last_page = "";
	var next_page = "";
	var this_sql = "";
	
	if(this_page - 1 > 0 )
		last_page = this_page - 1;
	else
		last_page = 1;

	if(this_page + 1 < max_page )
		next_page = this_page + 1 ;
	else if(max_page == 0)
		next_page = 1;
	else
		next_page = max_page;

	if(sqlstr != null && sqlstr != ""){
		last_page += sqlstr;
		next_page += sqlstr;
		this_sql += sqlstr;
	}


	if(this_page % 10 != 0 && this_page != 0)
		start_page = (this_page - this_page % 10);
	else
		start_page = this_page - this_page;

	
	if( (start_page + 1 ) + 10 > max_page) {
		max_show_page = max_page;
	}
	else{
		max_show_page = start_page + 10;
	}


	var html_code = '<table width="100%" border="0" cellspacing="0" cellpadding="0">'+
						'<tr>'+
						  '<td height="25" align="center"><table border="0" cellspacing="0" cellpadding="0">'+
							'<tr>'+
							  '<td width="15"><a href='+page_name+'?this_page='+ last_page + this_sql + '><img lt="'+ cyn_last_page +'" src="Images/pre-icon.gif" width="11" height="11" border="0"></a></td>'+
							 ' <td><table border="0" cellspacing="0" cellpadding="0">'+
								'<tr class="black-n">';
	if(max_page == 0){
		show_page = "<strong>"+this_page+"<strong>";
		html_code += '<td width="30" align="center" class="page-n">'+show_page+'</td>';
	}
	for(var i = 1 + start_page ; i <= max_show_page ; i++){
		var show_page = "<a href=\"./"+page_name+"?this_page="+i+""+this_sql+"\">"+i+"</a>";
		if( i == this_page )
			show_page = "<strong>"+this_page+"<strong>";
		html_code += '<td width="30" align="center" class="page-n">'+show_page+'</td>';
		if( max_page != 1 && i != max_show_page)
			html_code += '<td width="1" align="center" bgcolor="#333333"><img src="Images/space.gif" width="1" height="1"></td>';
	}
	html_code +=     			'</tr>'+
							  '</table></td>'+
							  '<td width="15" align="right"><a href='+page_name+'?this_page='+ next_page + this_sql + '><img alt="'+ cyn_next_page +'" src="Images/next-icon.gif" width="11" height="11" border="0"></a></td>'+
							'</tr>'+
						  '</table></td>'+
						'</tr>'+
					  '</table>';
	dw$(html_code);
}





function validateEmail(email)
{
// a very simple email validation checking. 
// you can add more complex email checking if it helps 
    var splitted = email.match("^(.+)@(.+)$");
    if(splitted == null) return false;
    if(splitted[1] != null )
    {
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }
    if(splitted[2] != null)
    {
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null) 
      {
	    var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
	    if(splitted[2].match(regexp_ip) == null) return false;
      }// if
      return true;
    }
return false;
}

/* function validateData 
*  Checks each field in a form 
*  Called from validateForm function 
*/ 
function validateData(FormName, objName, objHeadline, strValidateStr, strError) 
{ 
    if(objName=="" && objHeadline=="")
        return true;

    var obj = eval("document."+FormName+"."+objName);
    var obj_value = "";	
    var obj_length = "";

    
    var epos = strValidateStr.search("="); 
    var  command  = ""; 
    var  cmdvalue = ""; 
    if(epos >= 0) 
    { 
     command  = strValidateStr.substring(0,epos); 
     cmdvalue = strValidateStr.substr(epos+1); 
    } 
    else 
    { 
     command = strValidateStr; 
    } 

	if(command!="checked") {
		obj_value = eval("document."+FormName+"."+objName+".value");
		obj_length = obj_value.length;
	}

    switch(command) 
    { 
        case "req": 
        case "required": 
         { 
           if(obj_length == 0) 
           { 
              if(!strError || strError.length ==0) 
              { 
                //strError = objValue.name + " : Required Field"; 
                strError = objHeadline + " : "+cyn_warning_required_item; 
              }//if 
              alert(strError); 
              return false; 
           }//if 
           break;             
         }//case required 
        case "maxlength": 
        case "maxlen": 
          { 
             if(obj_length >  eval(cmdvalue)) 
             { 
               if(!strError || strError.length ==0) 
               { 
                 strError = objHeadline + " :  "+cyn_warning_exceed_letters+" "+cmdvalue+" "+cyn_warning_letters; 
               }//if 
               alert(strError + "\n["+cyn_warning_current_letters+" = " + obj_length + " ]"); 
               return false; 
             }//if 
             break; 
          }//case maxlen 
        case "minlength": 
        case "minlen": 
           { 
             if( obj_length <  eval(cmdvalue)) 
             { 
               if(!strError || strError.length ==0) 
               { 
               strError = objHeadline + " : "+cyn_warning_not_enough_letters+" " + cmdvalue + " "+cyn_warning_letters; 
               }//if               
               alert(strError + "\n["+cyn_warning_current_letters+" = " + obj_length + " ]"); 
               return false;                 
             }//if 
             break; 
            }//case minlen 
        case "alnum": 
        case "alphanumeric": 
           { 
              var charpos = obj_value.search("[^A-Za-z0-9]"); 
              if(obj_length > 0 &&  charpos >= 0) 
              { 
               if(!strError || strError.length ==0) 
                { 
                  strError = objHeadline+": "+cyn_warning_incorrect_letters; 
                }//if 
                alert(strError + "\n ["+cyn_warning_invalid_letters_at+" " + eval(charpos+1)+"]"); 
                return false; 
              }//if 
              break; 
           }//case alphanumeric 
        case "num": 
        case "numeric": 
           { 
           var regexp_num =/^[0-9]+(\.[0-9]{1,2})?$/;
			if(!obj_value.match(regexp_num)) {
				if(!strError || strError.length ==0) { 
                  strError = objHeadline+": "+cyn_warning_enter_valid_int_value+" ";
                }//if    
				alert(strError);
                return false; 
              }//if 
              break;               
           }//numeric 
        case "alphabetic": 
        case "alpha": 
           { 
              var charpos = obj_value.search("[^A-Za-z]"); 
              if(obj_length > 0 &&  charpos >= 0) 
              { 
                  if(!strError || strError.length ==0) 
                { 
                  strError = objHeadline+": "+cyn_warning_enter_valid_str_value+" "; 
                }//if                             
                alert(strError + "\n ["+cyn_warning_invalid_letters_at+" " + eval(charpos+1)+"]"); 
                return false; 
              }//if 
              break; 
           }//alpha 
        case "email": 
          { 
               if(!validateEmail(obj_value)) 
               { 
                 if(!strError || strError.length ==0) 
                 { 
                    strError = objHeadline+":  "+cyn_warning_enter_valid_email+" "; 
                 }//if                                               
                 alert(strError); 
                 return false; 
               }//if 
           break; 
          }//case email 
        case "lt": 
        case "lessthan": 
         { 
            if(isNaN(obj_value)) 
            { 
              alert(objHeadline+": "+cyn_warning_enter_valid_int_value+" "); 
              return false; 
            }//if 
            if(eval(obj_value) >=  eval(cmdvalue)) 
            { 
              if(!strError || strError.length ==0) 
              { 
                strError = objHeadline + " : "+cyn_warning_value_smaller_than+" "+ cmdvalue; 
              }//if               
              alert(strError); 
              return false;                 
             }//if             
            break; 
         }//case lessthan 
        case "gt": 
        case "greaterthan": 
         { 
            if(isNaN(obj_value)) 
            { 
              alert(objHeadline+": "+cyn_warning_enter_valid_int_value+""); 
              return false; 
            }//if 
             if(eval(obj_value) <=  eval(cmdvalue)) 
             { 
               if(!strError || strError.length ==0) 
               { 
                 strError = objHeadline + " : "+cyn_warning_value_bigger_than+" "+ cmdvalue; 
               }//if               
               alert(strError); 
               return false;                 
             }//if             
            break; 
         }//case greaterthan 
        case "regexp": 
         { 
            if(!obj_value.match(cmdvalue)) 
            { 
              if(!strError || strError.length ==0) 
              { 
                strError = objHeadline+": "+cyn_warning_enter_valid_str_value+""; 
              }//if                                                               
              alert(strError); 
              return false;                   
            }//if 
           break; 
         }//case regexp 
        case "dontselect":     { 
			//alert(obj.selectedIndex+"####"+obj.options[obj.selectedIndex].text+"####"+obj.options[obj.selectedIndex].value);
			if(obj.selectedIndex == null  || (obj.options[obj.selectedIndex].text=="" &&  obj.options[obj.selectedIndex].value=="") ) {
				if(!strError || strError.length ==0) { 
					strError = objHeadline+": "+cyn_warning_please_choose_at_least_one; 
				}//if                                                               
				alert(strError); 
				return false;                                   
			} 
			break; 
         }//case dontselect 
        case "checked":   { 
			var select_flag = false;
			for(var i=0; i<obj.length; i++) {
				if(obj[i].checked==true) {
					select_flag = true;
					break;
				}
			}
			if(select_flag==false) {
				if(!strError || strError.length ==0) { 
					strError = objHeadline+": "+cyn_warning_please_choose_at_least_one; 
				}//if                                                               
				alert(strError); 
				return false;                                   
			} 
			break; 

         }//case must_select 
	}//switch 
    return true; 
} 

/* 
* function validateForm 
* the function that can be used to validate any form 
* returns false if the validation fails; true if success 
* arguments : 
*   FormName     : the form object 
*   arrObjDesc : an array of objects describing the validations to conduct on each 
*        input item. 
*          The array should consist of one object per input item in the order the input 
*          elements are present in the form. Each object consist of zero or more validation 
*          objects. Each of these validation object is a pair consisting of the validation 
*          descriptor string and an optional Error message. 
*/ 

function validateForm(FormName, arrObjDesc) { 
    for(var itrobj=0; itrobj < arrObjDesc.length; itrobj++){ 

        for(var itrdesc=0; itrdesc < arrObjDesc[itrobj].length ;itrdesc++) {
            if(arrObjDesc[itrobj][itrdesc][0]=="" && arrObjDesc[itrobj][itrdesc][1] =="") {
                break;	
			}
            if(validateData(FormName, arrObjDesc[itrobj][itrdesc][0], arrObjDesc[itrobj][itrdesc][1], arrObjDesc[itrobj][itrdesc][2], arrObjDesc[itrobj][itrdesc][3]) == false)  { 
                //eval("document."+FormName+"."+arrObjDesc[itrobj][itrdesc][0]+".focus()");
				return false; 
				
            }//if 
        }//for 
    }
	return true;
} 
