// Copyright © 2001 by Apple Computer, Inc., All Rights Reserved.
// Modified 2006 by Sebastian Weglarczyk (sweglarczyk@binaryminds.com).
//
// See http://www.oreillynet.com/pub/a/javascript/2001/08/10/form_valid.html for help.
//
// You may incorporate this Apple sample code into your own code
// without restriction. This Apple sample code has been provided "AS IS"
// and the responsibility for its operation is yours. You may redistribute
// this code, but you are not permitted to redistribute it as
// "Apple sample code" after having made changes.

// email

// 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 + "+ext.";
// Minimum no of digits in an international phone no.
var minDigitsInIPhoneNumber = 10;
var maxDigitsInIPhoneNumber = 20;

function $(element) {
	return document.getElementById(element);
}

function Error(check, fieldname, message) {
	this.check = check;
	this.fieldname = fieldname;
	this.message = message;
	return this;
}

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 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){
s=stripCharsInBag(strPhone,validWorldPhoneChars);
if((isInteger(s) && s.length >= minDigitsInIPhoneNumber) && (isInteger(s) && s.length <= maxDigitsInIPhoneNumber))
	return true
else	
	return false	
}

function ValidatePhoneNumber(Phone){
	if ((Phone==null)||(Phone=="")) return false ;
	if (checkInternationalPhone(Phone)==false)	return false;
	return true
 }

function checkPassword2(strng) {
	var error = "";
	if (strng == "") {
		error = "You didn't enter a password.\n";
	}

	var illegalChars = /[\W_]/; // allow only letters and numbers
	if ((strng.length < 6) || (strng.length > 20)) {
		error = "The password is the wrong length.\n";
	}
	else if (illegalChars.test(strng)) {
		error = "The password contains illegal characters.\n";
	}
	return error;
}

function checkEmail(strng) {
	var error = "";
	if (strng == "") {
		error = "You didn't enter an email address.\n";
	}
	var emailFilter=/^.+@.+\..{2,4}$/;
	if (!(emailFilter.test(strng))) {
		error = "Please enter a valid email address.\n";
	}
	else {
		//test email for illegal characters
		var illegalChars= /[\(\)\<\>\,\;\:\\\"\[\]]/
		if (strng.match(illegalChars)) {
			error = "The email address contains illegal characters.\n";
		}
	}
	return error;
}


// phone number - strip out delimiters and check for 10 digits

function checkPhone(strng) {
	var error = "";
	if (strng == "") {
		error = "You didn't enter a phone number.\n";
	}

	var stripped = strng.replace(/[\(\)\.\-\ ]/g, ''); //strip out acceptable non-numeric characters
	if (isNaN(parseInt(stripped))) {
		error = "The phone number contains illegal characters.";
	}
	if (!(stripped.length == 10)) {
		error = "The phone number is the wrong length. Make sure you included an area code.\n";
	}
	return error;
}


// password - between 6-8 chars, uppercase, lowercase, and numeral


function checkPassword(strng) {
	var error = "";
	if (strng == "") {
		error = "You didn't enter a password.\n";
	}

	var illegalChars = /[\W_]/; // allow only letters and numbers
	if ((strng.length < 6) || (strng.length > 20)) {
		error = "The password is the wrong length.\n";
	}
	
	return error;
}


// username - 4-10 chars, uc, lc, and underscore only.

function checkUsername(strng) {
	var error = "";
	if (strng == "") {
		error = "You didn't enter a username.\n";
	}

	var illegalChars = /\W/; // allow letters, numbers, and underscores
	if ((strng.length < 4) || (strng.length > 10)) {
		error = "The username is the wrong length.\n";
	}
	else if (illegalChars.test(strng)) {
		error = "The username contains illegal characters.\n";
	}
	return error;
}


// non-empty textbox

function isEmpty(strng,errmsg) {
	var error = "";
	errmsg = (errmsg != null) ? errmsg : "The mandatory text area has not been filled in."; 
	if (strng.length == 0) {
		error = errmsg + "\n";
	}
	return error;
}


// was textbox altered

function isDifferent(strng) {
	var error = ""; 
	if (strng != "Can\'t touch this!") {
		error = "You altered the inviolate text area.\n";
	}
	return error;
}


// exactly one radio button is chosen

function checkRadio(checkvalue,errmsg) {
	var error = "";
	errmsg = (errmsg != null) ? errmsg : "Please check a radio button."; 
	if (!(checkvalue)) {
		error = errmsg + "\n";
	}
	return error;
}


// valid selector from dropdown list

function checkDropdown(choice,errmsg) {
	var error = "";
	errmsg = (errmsg != null) ? errmsg : "You didn't choose an option from the drop-down list."; 
	if (choice == 0) {
		error = errmsg + "\n";
	}
	return error;
}


// valid checkboxes

function checkCheckboxes(chkBox,errmsg) {
	var error = "";
	errmsg = (errmsg != null) ? errmsg : "Please check at least one checkbox."; 
	var checkedFound = false;
	for (var i=0; i<chkBox.length; i++) {
		if (chkBox[i].checked == true) {
			checkedFound = true;
			break;
		}
	}
	if (!(checkedFound)) {
		error = errmsg + "\n";
	}
	return error;
}
