//javascript checking varibales:

var required_fields = new Array(); // required fields
var email_fields = new Array (); //  email fields
var email_for_sms_fields = new Array ();
var phone_fields = new Array (); //phone field 0-9()-" "
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 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 act =  'select';
var pdf_fields = new Array (); //  pdf fields

//--------------------------------------------

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);
    try {
    	obj.focus();
    }  catch (e) {
	}
}



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) {
            alert(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_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;

}

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 validEmail(email, type)
{
  if (type == 'sms') {
  	email_regular_expression=new RegExp("^@([-!#\$%&'*+/0-9=?A-Z^_`a-z{|}~ ]+\\.)+[a-zA-Z]{2,5}\$");
  }
  if (type == 'phone') {
  	email_regular_expression=new RegExp("^([0-9( )\-]+)$");
  }
  if (type == 'email' || !type) {
  	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_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_pdf(form_name, fname, caption){
    eval("var obj = document."+form_name+".elements[\""+fname+"\"];");
    if (obj == undefined ) {return true;}

      if (obj.value.length !=0) {
            var num = obj.value.lastIndexOf(".");
            var pattern1 = /pdf/gi;

            if ( num >0) {
                var ras = obj.value.substr(num+1);

                if (!(pattern1.test(ras))){
                    obj_select(obj, "Please specify pdf 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_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) {
    eval("var obj = document."+form_name+".elements[\""+fname+"\"];");
    if (obj == undefined ) {return true;}

      if (obj.value.length !=0) {
            var num = obj.value.lastIndexOf(".");
            var pattern1 = /gif/gi;
            var pattern2 = /jpg/gi;
            var pattern3 = /jpeg/gi;

            if ( num >0) {
                var ras = obj.value.substr(num+1);

                if (!(pattern1.test(ras) || pattern2.test(ras) || pattern3.test(ras) )){
                    obj_select(obj, "Please specify gif or jpg 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 (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) {

     if (!find_elem(form, fname)) {
        return true;
     }
     if (!how_elements_enter(form, fname)) {
	 	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 < email_fields.length; i+=2) {
        if (!flag_email(form_name, email_fields[i],email_fields[i+1])) {
            return false;
        }
    }
    for (var i = 0; i < phone_fields.length; i+=2) {
        if (!flag_email(form_name, phone_fields[i],phone_fields[i+1], 'phone')) {
            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 < pdf_fields.length; i+=2) {
        if (!flag_pdf(form_name, pdf_fields[i],pdf_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 < image_fields.length; i+=3) {

        if (!flag_img(form_name, image_fields[i],image_fields[i+1],image_fields[i+2])) {
            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;

}

  function ltrim ( s )
  {
      return s.replace( /^\s*/, "" );
  }

  function rtrim ( s2 )
  {
      return s2.replace( /\s*$/, "" );
  }

  function trim ( s )
  {
      return rtrim(ltrim(s));
  }
