/*



 +-------------------------------------------------------------------+



 |                  J S - C H E C K F O R M   (v1.3)                 |



 |                                                                   |



 | Copyright Gerd Tentler               www.gerd-tentler.de/tools    |



 | Created: Oct. 23, 2001               Last modified: Jun. 17, 2006 |



 +-------------------------------------------------------------------+



 | This program may be used and hosted free of charge by anyone for  |



 | personal purpose as long as this copyright notice remains intact. |



 |                                                                   |



 | Obtain permission before selling the code for this program or     |



 | hosting this software on a commercial website or redistributing   |



 | this software over the Internet or in any other medium. In all    |



 | cases copyright must remain intact.                               |



 +-------------------------------------------------------------------+







======================================================================================================







 ARGUMENTS:







  - form-name or -number



  - 'field:title:type:minimum length'[, ...]  (type = number / mail / url / date(format) / [none])







 Example:







 checkForm('frm1', 'name:::2', 'age::number:1', 'eMail:e-mail:mail:1', 'homepage::url:0',



           'birthday::date(dmy):1');







------------------------------------------------------------------------------------------------------



 This script was tested with the following systems and browsers:







 - Windows XP: IE 6, NN 7, Opera 7, Firefox 1



 - Mac OS X:   IE 5, Safari 1







 If you use another browser or system, this script may not work for you - sorry.







 NOTE: Safari 1 on Mac OS X does only accept dates between Jan. 1, 1901 and Dec. 31, 2037 as valid.



======================================================================================================



*/



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



// Language settings



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







var msgNumber  = "must be a number";



var msgEMail   = "must be a valid e-mail address";



var msgPhone   = "must be a valid one";



var msgURL     = "must be a web address";



var msgDate    = "must be a date";



var msgFillOut = "Please fill out";



var msgNoForm  = "Form does not exist";



var msgNoField = "Field does not exist";



//var msgUnsecured = "Please Choose";







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



// Functions



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







function _trim(str) {



  if(str) {



    str = str.replace(/^\s+/, "");



    str = str.replace(/\s+$/, "");



  }



  return str;



}







function _isDate(year, month, day) {



  month--;



  if(year < 100) year += 2000;



  var d = new Date(year, month, day);



  return ((day == d.getDate()) && (month == d.getMonth()) && (year == d.getFullYear()));



}







function checkForm() {



	var args = checkForm.arguments;

	var f = args[0];

	var msg = "";

	var arr, field, title, type, minLength, elem, val, cnt, nr, i, j;

	var format, d, day, month, year;

	var valid_phone = /^\(\d\d\d\) \d\d\d-\d\d\d\d$/;

	var valid_url = /^(https?|ftp):\/\/([a-z0-9._-]+:[a-z0-9._-]+@)?[a-z0-9äöüÄÖÜ#._\/~% -]+(\?([a-z0-9_-]+(=[a-zA-Z0-99äöüÄÖÜß+%?_-]+&?)?)*)?$/i;

	var valid_mail = /^[a-z0-9._-]+@[a-z0-9äöüÄÖÜ.-]+\.[a-z]{2,4}$/i;

	

	if(document.forms[f]) {

		for(i = 1; i < args.length; i++) {

			arr = args[i].split(":");

			field = _trim(arr[0]);

			title = _trim(arr[1]);

			if(!title) title = field;

			type = _trim(arr[2].toLowerCase());      

			minLength = _trim(arr[3]);

			elem = document.forms[f].elements[field];

			if(elem) {

				val = _trim(elem.value);

				if(val != "") {

					if(type == "number") {

						val = val.replace(",", ".");

						if(isNaN(val))

						{

							msg += '"' + title + '" ' + msgNumber + "\n";

							elem.value = "";

						}

					}

					else if(type == "phonenumber" && val.search(valid_phone) == -1)

					{

						msg += '"' + title + '" ' + msgPhone + "\n";

						document.getElementById("home_phone1").value = "";

						document.getElementById("home_phone2").value = "";

						document.getElementById("home_phone3").value = "";

					}

					else if(type == "mail" && val.search(valid_mail) == -1)

					{

						msg += '"' + title + '" ' + msgEMail + "\n";

						elem.value = "";

					}

					else if(type == "url" && val.search(valid_url) == -1)

					{

						msg += '"' + title + '" ' + msgURL + "\n";

						elem.value = "";

					}

					else if(type.indexOf("date") != -1) {

						if(type.indexOf("(") != -1) format = type.substr(type.indexOf("("));

						else format = "(dmy)";

						d = val;

						for(j = 1; j < format.length - 1; j++) {

							cnt = d.search(/[^0-9]/);

							if(cnt == -1) cnt = d.length;

							nr = d.substr(0, cnt);

							nr = parseInt(nr.replace(/^0/, ''));

							switch(format.charAt(j)) {

								case "d": day = nr; d = d.substr(cnt + 1); break;

								case "m": month = nr; d = d.substr(cnt + 1); break;

								case "y": year = nr; d = d.substr(cnt + 1); break;

							}

						}

						if(!_isDate(year, month, day)) 

						{

							msg += '"' + title + '" ' + msgDate + "\n";

							elem.value = "";

						}

					}

				}

				if(minLength) {

					if(elem.length) {

						if(elem.options) {

							for(j = cnt = 0; j < elem.options.length; j++) {

								if(elem.options[j].selected && elem.options[j].value != "") cnt++;

							}

						}

						else for(j = cnt = 0; j < elem.length; j++) {

							if(elem[j].checked) cnt++;

						}

					}

					else if(elem.type == "checkbox") cnt = elem.checked ? 1 : 0;

					else cnt = val.length;

					if(cnt < minLength)

					{

						msg += msgFillOut + ' "' + title + '"\n';

						elem.value = "";

					}

				}

			}

			else msg += msgNoField + ': "' + field + '"\n';

		}

		if(msg) 

		{

			alert(msg);
			return false;

			/*document.getElementById("first_name").value = "" ;

			document.getElementById("last_name").value = "" ;

			document.getElementById("state").value = "" ;

			document.getElementById("home_phone1").value = "" ;

			document.getElementById("home_phone2").value = "" ;

			document.getElementById("home_phone3").value = "" ;

			document.getElementById("alternate_phone1").value = "" ;

			document.getElementById("alternate_phone2").value = "" ;

			document.getElementById("alternate_phone3").value = "" ;

			document.getElementById("eMail").value = "" ;

			document.getElementById("unsecured_debt").value = "" ;

			document.getElementById("first_name").focus() ;*/

		}

		else {
				document.forms[f].submit();
				return true;
		}

	}

	else{
		alert(msgNoForm + ': "' + f1 + '"');
		return false;
	}

}



function phoneNumber()

	{

		document.f1.phonenumber.value = "(" + document.f1.home_phone1.value + ") " + document.f1.home_phone2.value + "-" + document.f1.home_phone3.value;

		//alert(document.f1.phonenumber.value);

	}

	

function formvalidation()

 {

	

 	if(document.getElementById("first_name").value.length == 0 || document.getElementById("last_name").value.length==0 ||document.getElementById("home_phone1").value.length == 0 || document.getElementById("home_phone2").value.length == 0 || document.getElementById("home_phone3").value.length == 0 ||document.form1.state.selectedIndex==0|| document.form1.creditcarddebt.selectedIndex == 0)

	

	{

	alert("Please Fill all Required Fields");

	 /*document.getElementById("first_name").value = "" ;

	 document.getElementById("last_name").value = "" ;

	 document.getElementById("state").value = "" ;

	 document.getElementById("home_phone1").value = "" ;

	 document.getElementById("home_phone2").value = "" ;

	 document.getElementById("home_phone3").value = "" ;

	 document.getElementById("alternate_phone1").value = "" ;

	 document.getElementById("alternate_phone2").value = "" ;

	 document.getElementById("alternate_phone3").value = "" ;

	 document.getElementById("eMail").value = "" ;

	 document.getElementById("employmentstatus").value = "" ;

	 document.getElementById("creditcarddebt").value = "" ;

	 document.getElementById("comments").text = "" ;

	 document.getElementById("first_name").focus();*/

	 return false;

    }

    else if(phoneValidate() == false )

	{

		document.getElementById("home_phone1").value = "" ;

	 	document.getElementById("home_phone2").value = "" ;

		document.getElementById("home_phone3").value = "" ;

		return false;

	}

	else if(checkEmail(document.getElementById("eMail").value) == false)  

	{

		document.getElementById("eMail").value = "" ;

		return false;

	}

	else 

		 return true;

    

 }

 /**

 * DHTML phone number validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)

 */



// Declaring required variables

var digits = "0123456789";

// non-digit characters which are allowed in phone numbers

var phoneNumberDelimiters = "()- ";

// characters which are allowed in international phone numbers

// (a leading + is OK)

var validWorldPhoneChars = phoneNumberDelimiters + "+";

// Minimum no of digits in an international phone no.

var minDigitsInIPhoneNumber = 10;



function isInteger(s)

{   var i;

    for (i = 0; i < s.length; i++)

    {  

        // Check that current character is number.

        var c = s.charAt(i);

        if (((c < "0") || (c > "9"))) return false;

    }

    // All characters are numbers.

    return true;

}

function trim(s)

{   var i;

    var returnString = "";

    // Search through string's characters one by one.

    // If character is not a whitespace, append to returnString.

    for (i = 0; i < s.length; i++)

    {  

        // Check that current character isn't whitespace.

        var c = s.charAt(i);

        if (c != " ") returnString += c;

    }

    return returnString;

}

function stripCharsInBag(s, bag)

{   var i;

    var returnString = "";

    // Search through string's characters one by one.

    // If character is not in bag, append to returnString.

    for (i = 0; i < s.length; i++)

    {  

        // Check that current character isn't whitespace.

        var c = s.charAt(i);

        if (bag.indexOf(c) == -1) returnString += c;

    }

    return returnString;

}



function checkInternationalPhone(strPhone){

var bracket=3

strPhone=trim(strPhone)

if(strPhone.indexOf("+")>1) return false

if(strPhone.indexOf("-")!=-1)bracket=bracket+1

if(strPhone.indexOf("(")!=-1 && strPhone.indexOf("(")>bracket)return false

var brchr=strPhone.indexOf("(")

if(strPhone.indexOf("(")!=-1 && strPhone.charAt(brchr+2)!=")")return false

if(strPhone.indexOf("(")==-1 && strPhone.indexOf(")")!=-1)return false

s=stripCharsInBag(strPhone,validWorldPhoneChars);

return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);

}



function phoneValidate(){

    //var Phone=document.form1.home_phone1

	var Phonenum=document.form1.home_phone1.value+document.form1.home_phone2.value+document.form1.home_phone3.value;

	



    if (checkInternationalPhone(Phonenum)==false){

        alert("Please Enter a Valid Phone Number");

        document.form1.home_phone1.value="" ;

		document.form1.home_phone2.value="" ;

		document.form1.home_phone3.value="" ;

        document.form1.home_phone1.focus()

        return false;

    }

    return true;

 }

 

 function checkEmail(inputvalue)

 {	

    var pattern=/^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;

    if(pattern.test(inputvalue))

	{         

		return true;   

    }

	

	else

	{   alert("Please Valid Email Id");

		document.form1.eMail.value = "" ;

		document.form1.eMail.focus()

		return false; 

		

    }

}

 





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



