//alert("1");
//javascript checking varibales:

var required_fields = new Array(); // required fields
var password_fields = new Array(); // password fields
var equal2_fields = new Array(); // equal fields grouped pairs (fname1, caption1, fname2, caption2)
var email_fields = new Array (); //  email fields
var email_for_sms_fields = new Array ();
var zip_fields = new Array (); //  zip fields
var required_checkbox = new Array(); //  checkboxes
var numeric_fields = new Array(); // numeric fields
var numeric_fields_positiv = new Array(); // positiv numeric fields
var split_email = new Array(); // emails separated with '\n' in textarea
var required_one_of_list = new Array(); // fields/chexboxes set
//var required_one_of_list_group = new Array(); // fields/chexboxes set sevral group
var cc_number_fields = new Array(); // valid credit card number
var limit_number_fields = new Array();// numbers interval, example from -20,5 to 75
var limit_digit_fields = new Array(); 
var date_fields = new Array(); // valid date (date in select boxes)
var date_fields_single = new Array(); // valid date (date in input format mm/dd/yyyy)
var date_interval_fields = new Array(); // end date not before start date
var image_fields = new Array();
var count_elements = new Array();
var page_fields = new Array();
var numeric_interval_fields = new Array();

var act =  'select';

//--------------------------------------------

function confirm_del(  page, todo, name){
        if (name == undefined) {
            name = 'item';
        }
		
        str = "Do you really want to delete "+name+"?";
        if (confirm(str)) {
         
			var fl = submit_action_form(page, todo);            
            return false;
        } else {
            return false;
        }
}
function confirm_del_checkbox(page, todo,  name) {
    form = document.action_form;
    flag1 = false;
    var i = 0;
    while (form.elements[i]){
       if ((form.elements[i].type == 'checkbox') && (form.elements[i].checked) ){
            flag1 = true;
            break;
       }

       ++i;
    }
      if (flag1) {
            if (name == undefined) {
                name = 'item';
            }
            str = "Do you really want to delete "+name+"(s)?";
            
            if (confirm(str)) {
                submit_action_form(page, todo); 
                return 1;
            } else {
                return 0;
            }
    
    }  else {
            alert('Select '+name+'(s) first.');
            return false;
    }         
}

function confirm_del1(  page, todo,  str){
        if (name == undefined) {
            name = 'item';
        }
        
        if (confirm(str)) {
            var fl = submit_action_form(page, todo);            
            return 1;
        } else {
            return 0;
        }
}
function obj_focus(obj, message) {
	
    window.alert(message);
    obj.focus();
}



function obj_select(obj, message) {
    window.alert(message);
    obj.focus();
    obj.select();
}
function validatedate_m(m,d,y,desc)
{

    var msg = "";
    if (m<1 || m>12) {
         msg=desc+" is not a valid date";
         return msg;
    }
    
    var date = new Date(y, m, 0); 
    var last_day = date.getDate();
    
    if(d>last_day)
    {
        msg=desc+" is not a valid date";
    }
    
    return msg;
}
function is_date (val) {
    regular = new RegExp("^([0-9]){2}/([0-9]){2}/([0-9]){4}\$");
     return regular.test(trim(val));
}

function flag_limit_digit(form_name, fname, digit, caption) {
     eval("var obj = document."+form_name+".elements[\""+fname+"\"];");
        if (obj == undefined || obj.value=='') {return true;}
        
        if (obj.value !='') {
            regular = new RegExp("^([0-9]){"+digit+"}\$");
            if (!regular.test(trim(obj.value))) {
                var s = '';
                if (digit != 1) {
                     s = 's';
                }
                obj_select(obj, caption+" must include "+digit+" digit"+s+".");
                return false;
            } else return true;
         } else return true;
}

function flag_date_format (form_name, fname, caption) {
      eval("var obj = document."+form_name+".elements[\""+fname+"\"];");
        if (obj == undefined || obj.value=='') {return true;}
        
        if (obj.value !='') {
            if (!is_date(obj.value)) {
                 obj_select(obj, "Wrong date format.");
                return false;
            }
            var str = new String (trim(obj.value));
            
            var a = str.split("/");
            var msg = validatedate_m(a[0],a[1],a[2],caption); 
             if (msg!='') {
                obj_focus(obj, msg);
                return false;
             } else return true;    
        } else return true;
      
}

function flag_date(form_name, m,d,y, caption){
    eval('var obj_m = document.'+form_name+'.elements["'+m+'"];');
    eval('var obj_d = document.'+form_name+'.elements["'+d+'"];');
    eval('var obj_y = document.'+form_name+'.elements["'+y+'"];');
 
	
        if (obj_m == undefined || obj_m.value=='') {return true;}
        if (obj_d == undefined || obj_d.value=='') {return true;}
        if (obj_y == undefined || obj_y.value=='') {return true;}
        var msg = validatedate_m(obj_m.value, obj_d.value, obj_y.value, caption);
        if (msg.length != 0) {
            obj_focus(obj_m, msg);
            return false;
         } else return true;
    
}

function flag_date_interval(form_name, m,d,y, caption, m1,d1,y1, caption1) {
    eval('var obj_m = document.'+form_name+'.elements["'+m+'"];');
    eval('var obj_d = document.'+form_name+'.elements["'+d+'"];');
    eval('var obj_y = document.'+form_name+'.elements["'+y+'"];');
    eval('var obj_m1 = document.'+form_name+'.elements["'+m1+'"];');
    eval('var obj_d1 = document.'+form_name+'.elements["'+d1+'"];');
    eval('var obj_y1 = document.'+form_name+'.elements["'+y1+'"];');
	
	
	
    if (obj_m == undefined || obj_m.value=='') {return true;}
    if (obj_d == undefined || obj_d.value=='') {return true;}
    if (obj_y == undefined  || obj_y.value=='' ) {return true;}
    if (obj_m1 == undefined || obj_m1.value=='') {return true;}
    if (obj_d1 == undefined || obj_d1.value=='') {return true;}
    if (obj_y1 == undefined || obj_y1.value=='') {return true;}
    
    var s_date = new Date(obj_y.value, obj_m.value, obj_d.value);
    var e_date = new Date(obj_y1.value, obj_m1.value, obj_d1.value);
   
	if (s_date>e_date) {
        obj_focus(obj_m, caption1+' cannot be before '+caption);
        return false;
    } else {
        return true;
    } 
    
    
}
function flag_numeric_interval(form_name, fname, caption, fname1, caption1) {
  eval('var obj = document.'+form_name+'.elements["'+fname+'"];');
  eval('var obj_2 = document.'+form_name+'.elements["'+fname1+'"];');
  if (obj == undefined ||  obj.value=='') {return true;}
  if (obj_2 == undefined || obj_2.value=='') {return true;}
  
   if (isNaN(trim(obj.value))) {
            obj_select(obj, "Please enter numeric value for '"+caption+"'.");
            return false;
  } 
   if (isNaN(trim(obj_2.value))) {
            obj_select(obj_2, "Please enter numeric value for '"+caption1+"'.");
            return false;
  }
  var n1 = new Number(obj.value);
  var n2 = new Number(obj_2.value);
  if (n1>n2) {
        obj_focus(obj, '\''+caption1+'\' cannot be before \''+caption+'\'');
        return false;
   } else {
        return true;
   } 

}
function flag_required(form_name, fname, caption){
    eval('var obj = document.'+form_name+'.elements["'+fname+'"];');
        
        if (obj == undefined ) {return true;}
        if ((trim(obj.value).length) == 0) {
            
            if (obj.type.indexOf('select')!=-1) {
                act = 'select';
            } else {
                act = 'enter';
            }
            obj_focus(obj, "Please "+act+" '"+caption+"'.");
            return false;
         } else return true;
    
}

//stub
function flag_password(form_name, fname){
	return true;
}

function flag_equal2(form_name, fname1, caption1, fname2, caption2){
    eval("var obj1 = document."+form_name+".elements[\""+fname1+"\"];");
    if (obj1 == undefined ) {return true;}
    
    eval("var obj2 = document."+form_name+".elements[\""+fname2+"\"];");
    if (obj2 == undefined ) {return true;}
    
    if (obj1.value == obj2.value) {
    	return true;
    } else {
    	   if (isNaN(trim(obj1.value))) {
               obj_select(obj1 , "Fields "+caption1+" and "+caption2+" should be equal.");
               return false;
    	   } 
    	
    	return false;
    }
}

function flag_checkbox(form_name, fname, caption){
    eval("var obj = document."+form_name+".elements[\""+fname+"\"];");
        if (obj == undefined ) {return true;}
        if (!obj.checked) {
            obj_focus(obj, ""+caption+".");
            return false;
         } else return true;
    
    
}
function validPage(page) {
	p=new RegExp("^[-0-9a-zA-Z_.\/]+\$");
	return p.test(page);
}

function validEmail(email, type)
{
  if (type == 'sms') {	
  	email_regular_expression=new RegExp("^@([-!#\$%&'*+/0-9=?A-Z^_`a-z{|}~ ]+\\.)+[a-zA-Z]{2,5}\$");
  }  else {
  	email_regular_expression=new RegExp("^([-!#\$%&'*+./0-9=?A-Z^_`a-z{|}~ ])+@([-!#\$%&'*+/0-9=?A-Z^_`a-z{|}~ ]+\\.)+[a-zA-Z]{2,5}\$");   // email_regular_expression= '^.+@.+\\..+$';  // simple one
  }
  return email_regular_expression.test(email);
}

function flag_page (form_name, fname, caption) {
	 eval("var obj = document."+form_name+".elements[\""+fname+"\"];");
        if (obj == undefined ) {return true;}
        if ((trim(obj.value).length) != 0) {
            
            if (!validPage(obj.value)) {
                 obj_select(obj,"Your '"+caption+"' is invalid!" + '\n' + "Please type in valid '"+caption+"'.");
                 return false;
            } else {
                 return true;
            }
        } else {
            return true;
        }
}
function flag_email(form_name, fname, caption, type){
    eval("var obj = document."+form_name+".elements[\""+fname+"\"];");
        if (obj == undefined ) {return true;}
        if ((trim(obj.value).length) != 0) {
            
            if (!validEmail(obj.value, type)) {
                 obj_select(obj,"Your '"+caption+"' is invalid!" + '\n' + "Please type in valid '"+caption+"'.");
                 return false;
            } else {
                 return true;
            }
        } else {
            return true;
        }
}

function flag_zip(form_name, fname, caption){
    eval("var obj = document."+form_name+".elements[\""+fname+"\"];");
        if (obj == undefined ) {return true;}
        var v=trim(obj.value).length;
        if (v != 0) {
        
            if (v<5) {
                 obj_select(obj,"Incorrect '"+caption+"'.");
                 return false;
            } else {
                 return true;
            }
        }  else {
            return true;
        }
}
function flag_num(form_name, fname, caption){
    eval("var obj = document."+form_name+".elements[\""+fname+"\"];");
    if (obj == undefined ) {return true;}
        if (isNaN(trim(obj.value))) {
            obj_select(obj, "Please enter numeric value for '"+caption+"'.");
            return false;
         } else return true;
    
    
}
function flag_num_pos(form_name, fname, caption){
    eval("var obj = document."+form_name+".elements[\""+fname+"\"];");
    if (obj == undefined ) {return true;}
        if (isNaN(trim(obj.value))) {
            obj_select(obj, "Please enter numeric value for '"+caption+"'.");
            return false;
         } else if (trim(obj.value)<0) {
            obj_select(obj, "Please enter positive numeric value for '"+caption+"'.");
            return false;
         } else return true;
}

function flag_img(form_name, fname, caption, size, file_ext) {
    eval("var obj = document."+form_name+".elements[\""+fname+"\"];");
    if (obj == undefined ) {return true;}
      if (file_ext == '' || file_ext == undefined ) {
	  	file_ext = new Array('gif', 'jpg');
	  }
      if (obj.value.length !=0) {
            var num = obj.value.lastIndexOf(".");
            
            if ( num >0) {
                var ras = obj.value.substr(num+1);
               	fl = false;
				str = '';
				for (i=0; i<file_ext.length; i++) {
					if (str) {
						str += ' or ';
					}
					str += file_ext[i];
					var pattern1 = new  RegExp(file_ext[i],"gi");
					if (pattern1.test(ras)) {
						fl = true;
					}
					if (file_ext[i] == 'jpg') {
						var pattern1 = /jpeg/gi;
						if (pattern1.test(ras)) {
							fl = true;
						}
					}
				}
                if (!fl){
                    obj_select(obj, "Please specify "+str+" file for '"+caption+"'.");
                    return false;
                }
                
            } else {
                obj_select(obj, "Your path for '"+caption+"' is invalid!" + '\n' + "Please type in valid path.");
                return false;
            }
            return true;
     } else {
        obj_select(obj, "Please enter path for '"+caption+"'.");
       //return true;
     }
}

function flag_limit_number(form_name, fname, min_, max_, caption) {
    eval("var obj = document."+form_name+".elements[\""+fname+"\"];");
	
	if (obj == undefined ) {return true;}
    
	if (min_!='') {
		min_ = new Number(min_);
	}
	if (max_!='') {
		max_ = new Number(max_);
	}
	
	if (isNaN(trim(obj.value))) {
            obj_select(obj, "Please enter numeric value for '"+caption+"'.");
            return false;
    } else if (min_!='' && obj.value<min_) {
            obj_select(obj, "Please enter numeric value for '"+caption+"'  that is greater or equal to "+min_+".");
            return false;
    } else if (max_!='' && obj.value>max_) {
            obj_select(obj, "Please enter numeric value for '"+caption+"' that is less or equal to "+max_+".");
            return false;
    } else {
        return true;
    }
}


function validateCCNum(cardType,cardNum)
{
   var result = false;
   cardType = cardType.toUpperCase();
   
   var cardLen = cardNum.length;
   var firstdig = cardNum.substring(0,1);
   var seconddig = cardNum.substring(1,2);
   var first4digs = cardNum.substring(0,4);
   switch (cardType)
   {
      case "VISA":
         result = ((cardLen == 16) || (cardLen == 13)) && (firstdig == "4");
         break;
      case "AMEX":
         var validNums = "47";
         result = (cardLen == 15) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
         break;
      case "MASTERCARD":
         var validNums = "12345";
         result = (cardLen == 16) && (firstdig == "5") && (validNums.indexOf(seconddig)>=0);
         break;
      case "DISCOVER":
         result = (cardLen == 16) && (first4digs == "6011");
         break;
      case "DINERS":
         var validNums = "068";
         result = (cardLen == 14) && (firstdig == "3") && (validNums.indexOf(seconddig)>=0);
         break;
   }
   return result;
}

function LuhnCheck(str)
{
  var result = true;
  var sum = 0;
  var mul = 1;
  var strLen = str.length;
  for (i = 0; i < strLen; i++)
  {
    var digit = str.substring(strLen-i-1,strLen-i);
    var tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }
  if ((sum % 10) != 0)
    result = false;
  return result;
}

function flag_cc_number (form_name, fname, type) {
    
    eval("var obj = document."+form_name+".elements[\""+fname+"\"];");
    eval ("var obj2 = document."+form_name+".elements[\""+type+"\"];");
    if (obj == undefined ) {return true;}
    if (obj2 == undefined ) {return true;}
    if (obj.value == '' ) {
        return true;
    }
    var fl = flag_num_pos(form_name, fname, 'Credit Card Number');
    if (fl) {
        if (!validateCCNum(obj2.value, obj.value) || !LuhnCheck(obj.value)) {
            obj_select(obj, "Invalid Credit Card Number.");
            return false;
        } else {
            return true;
        }
    } else {
        return false;
    } 
}

function flag_one_of_list(form, fname, caption) {
	   
	 var t = fname;
	
	 if (fname[0] == undefined || fname[0].length == '1') {
	 	fname = new Array(t);
	 }
	
	 // || fname[0].length == '1'
	 var fl = false;
	 var kol = 0;
	 for (i=0; i<fname.length; i++) {
		 if (find_elem(form, fname[i])) {
        	fl = true;
			kol+=how_elements_enter(form, fname[i]);
     	}
	 }
	 if (!fl) {
	 	return true;
	 }
     if (!kol) {
	 	if (act == undefined) {
			act ='select';
		}
        alert("Please "+act+" at least one " +caption+ ".");
        return false;
     } else {
        return true;
     }
}
function find_elem(form, elem) {
    var i = 0;
    var fl = false;
  
    while (form.elements[i]){
          if ( form.elements[i].name.indexOf(elem) != -1 ){
            fl = true;
            break;
          }
        
          ++i;
    }
    return fl;
}


function how_elements_enter( form, elem) {
    var i = 0;
    var k = 0;
   
	
    while (form.elements[i]){
          if ( form.elements[i].name.indexOf(elem) != -1 ){
            if (form.elements[i].type == 'checkbox' || form.elements[i].type == 'radio') {
                if (form.elements[i].checked) {
                    k++;
                }
            } else {
				act = 'enter';
                if (trim(form.elements[i].value) != '') {
                    k++;
                }
				
				
            }
          }
        
          ++i;
    }
	
    return k;
}


function test_count_elem(form_name, fname, det, num,  caption) {
	eval("var obj = document."+form_name+".elements[\""+fname+"\"];");
    if (obj == undefined ) {return true;}
	var str = new String(obj.value);
	if (det == '\n') {
		if (browser.isIE) {
            str2 = String.fromCharCode(13);
           
        } else if (browser.isNSCompatible || browser.isNS) {
            str2 = String.fromCharCode(10);
           
        } else {
            return true;
        }
	} else {
		str2 = det;
	}
	 var arr_1 = str.split(str2);
     var arr_new = new Array();
     var k = 0;
     for(var i=0; i<arr_1.length; i++) {
          if (trim(arr_1[i]) == '') {
               continue;
           } else {
		   		k++;
		   }
	}
	if (k>num) {
		 obj_focus(obj, 'A maximum of '+num+' '+caption+' can be entered.');
         return false;
	} else {
		return true;
	}
	
	
}


function test_emails( form_name, fname, del2, num, caption, desc1, desc2) {
        if (caption == '' || caption==undefined) {
            caption = 'Email';
        }
        if (desc1 == '' || desc1==undefined ) {
            desc1 = "Please enter "+caption;
        }
        if (desc2 == '' || desc2==undefined) {
            desc2 = "Your '"+caption+"' is invalid!" + '\n' + "Please type in valid '"+caption+"'";
        }
        if (num == '' || num==undefined) {
            num = 1;
        }
        
        eval("var obj = document."+form_name+".elements[\""+fname+"\"];");
        
        if (obj == undefined ) {return true;}
        
        var str = new String(obj.value);
        
        if (browser.isIE) {
            str2 = String.fromCharCode(13);
            str1 = String.fromCharCode(10);
        } else if (browser.isNSCompatible || browser.isNS) {
            str2 = String.fromCharCode(10);
            str1 = String.fromCharCode(13);
        } else {
            return true;
        }
        var arr_1 = str.split(str2);
        var arr_new = new Array();
        var k = 0;
        for(var i=0; i<arr_1.length; i++) {
            if (trim(arr_1[i]) == '') {
                continue;
            } else {
                var p = arr_1[i].indexOf(str1);
                if (p != -1) {
                    arr_1[i] = arr_1[i].substr(p+1);
                }
                arr_new[k] = arr_1[i];
                k++;
            }
        }
         obj.value= arr_new.join(str2);
         
         for(var i=0; i<arr_new.length; i++) {
            if (del2 != '') {
                var str_2 = new String(arr_new[i]);
                var arr_2 = str_2.split(del2);
                if (num <= arr_2.length) {
                    email = arr_2[num-1];
                } else {
                    email = '';
                }
            } else {
                email = arr_new[i];
            }
            if (trim(email) == '') {
                obj_focus(obj, desc1);
                return false;
            } else {
                if (!validEmail(email)) {
                    obj_focus(obj, desc2);
                    return false;
                }
            }
         }
        
         return true;
    
    }




function test_f(form, form_name) {        
  	
    for (var i = 0; i < required_fields.length; i+=2) {
      
	    if (!flag_required(form_name,required_fields[i],required_fields[i+1])) {
            return false; 
        } 
    }
    
    for (var i = 0; i < password_fields.length; i++) {
        if (!flag_password(form_name, password_fields[i])) {
            return false;
        }
    }
    
    for (var i = 0; i < equal2_fields.length; i+=4) {
        if (!flag_equal2(form_name, equal2_fields[i], equal2_fields[i+1], equal2_fields[i+2], equal2_fields[i+3])) {
            return false;
        }
    }
        
    for (var i = 0; i < email_fields.length; i+=2) {
        if (!flag_email(form_name, email_fields[i],email_fields[i+1])) {
            return false;
        }
    }
	for (var i = 0; i < email_for_sms_fields.length; i+=2) {
        if (!flag_email(form_name, email_for_sms_fields[i],email_for_sms_fields[i+1], 'sms')) {
            return false;
        }
    }
    
    for (var i = 0; i < numeric_fields.length; i+=2) {
        if (!flag_num(form_name,numeric_fields[i],numeric_fields[i+1])) {
            return false; 
        } 
    }
    for (var i = 0; i < numeric_fields_positiv.length; i+=2) {
        if (!flag_num_pos(form_name,numeric_fields_positiv[i],numeric_fields_positiv[i+1])) {
            return false; 
        } 
    }
    
    
     for (var i = 0; i < required_checkbox.length; i+=2) {
        if (!flag_checkbox(form_name,required_checkbox[i],required_checkbox[i+1])) {
            return false; 
        } 
    }
    
    for (var i = 0; i < zip_fields.length; i+=2) {
        if (!flag_zip(form_name, zip_fields[i],zip_fields[i+1])) {
            return false;
        }
    }
    for (var i = 0; i < required_one_of_list.length; i+=2) {
        if (!flag_one_of_list(form, required_one_of_list[i],required_one_of_list[i+1])) {
            return false;
        }
    }
	
    for (var i = 0; i < cc_number_fields.length; i+=2) {
        
        if (!flag_cc_number(form_name, cc_number_fields[i],cc_number_fields[i+1])) {
            return false;
        }
    }
    for (var i = 0; i < limit_number_fields.length; i+=4) {
        
        if (!flag_limit_number(form_name, limit_number_fields[i],limit_number_fields[i+1], limit_number_fields[i+2], limit_number_fields[i+3])) {
            return false;
        }
    }
    
    for (var i = 0; i < date_fields.length; i+=4) {
       
        if (!flag_date(form_name, date_fields[i],date_fields[i+1], date_fields[i+2], date_fields[i+3])) {
            return false;
        }
    }
    for (var i = 0; i < date_interval_fields.length; i+=8) {
        
        if (!flag_date_interval(form_name, date_interval_fields[i],date_interval_fields[i+1], date_interval_fields[i+2], date_interval_fields[i+3], date_interval_fields[i+4],date_interval_fields[i+5], date_interval_fields[i+6], date_interval_fields[i+7])) {
            return false;
        }
    }
    for (var i = 0; i < date_fields_single.length; i+=2) {
        
        if (!flag_date_format(form_name, date_fields_single[i],date_fields_single[i+1])) {
            return false;
        }
    }
	 for (var i = 0; i <  page_fields.length; i+=2) {
        
        if (!flag_page(form_name,  page_fields[i], page_fields[i+1])) {
            return false;
        }
    }
   
     for (var i = 0; i < image_fields.length; i+=4) {
       
        if (!flag_img(form_name, image_fields[i],image_fields[i+1],image_fields[i+2],image_fields[i+3])) {
            return false;
        }
    }
	 for (var i = 0; i < numeric_interval_fields.length; i+=4) {
       
        if (!flag_numeric_interval(form_name, numeric_interval_fields[i],numeric_interval_fields[i+1],numeric_interval_fields[i+2],numeric_interval_fields[i+3])) {
            return false;
        }
    }
	
     for (var i = 0; i < limit_digit_fields.length; i+=3) {
        
        if (!flag_limit_digit(form_name, limit_digit_fields[i],limit_digit_fields[i+1],limit_digit_fields[i+2])) {
            return false;
        }
    }
    
    for (var i = 0; i < split_email.length; i+=4) {
        
        del2 = split_email[i+2];
        num = split_email[i+1];
        
        if (!test_emails(form_name, split_email[i], del2, num,split_email[i+3])) {
            return false;
        }
    }
	for (var i = 0; i < count_elements.length; i+=4) {
        if (!test_count_elem(form_name, count_elements[i], count_elements[i+1], count_elements[i+2], count_elements[i+3])) {
            return false;
        }
    }
	
    
    
    return true;
    
}