/**
 * 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) {
	if(isNaN(s)) return false;

	else 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 is not a whitespace.
		var c = s.charAt(i);
		if (bag.indexOf(c) == -1) returnString += c;
	}
	return returnString;
}

function checkInternationalPhone(strPhone){
	s = stripCharsInBag(strPhone,validWorldPhoneChars);
	return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}

function checkPhoneNo(id){
	var Phone = document.getElementById(id);

	if (checkInternationalPhone(Phone.value)==false){
		alert("Please Enter a Valid Phone Number")
		Phone.value=""
		Phone.focus()
		return false
	}
	return true
}

function isNumber(id) {
	var identity = document.getElementById(id);
	var s = identity.value;

	if(isNaN(s)) {
		alert("Please Enter a Valid Number");
		identity.value="";
		return false;
	}
	else return true;
}

function check_strongPassword(id){
	var testresults;
	var identity = document.getElementById(id);
	var str = identity.value;

	var filter=/(?=^.{6,10}$)(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%^&*()_+}{":;'?/>.<,])(?!.*\s).*$/

	if (filter.test(str))
		testresults=true;
	else{
		alert("Please input a valid strong password! It must be between 6 & 10 characters in length and contain at least:-\n\n1 uppercase character\n1 lowercase character\n1 digit\n1 special character\n\neg. N1tW_o@t");
		identity.value = "";
		identity.focus();
		testresults=false;
	}
	return (testresults)
}

function showInfo(engine) {
	var engineInfo;
	switch (engine) {
		case "JavaScript":
			engineInfo = ScriptEngineMajorVersion() + "." + ScriptEngineMinorVersion() + "." + ScriptEngineBuildVersion();
			break;
		case "VBScript":
			engineInfo = getVBSEngineInfo();
			break;
		case "PerlScript":
			if ( SelectedPSSupport(frm) ) { //frm.ClientTester_PS_SUPPORT.value == "true") {
				engineInfo = SelectedPSVersion(frm) // frm.ClientTester_PS_VERSION.value;
			} else {
				//engineInfo = "The PerlScript ActiveX engine is not available on your machine. \nYou can download ActivePerl (includes PerlScript) from ActiveState.com";
				engineInfo = "To use this feature you'll need to download and run this script directly from your machine.\n"
				engineInfo += "You will also require ActivePerl, which you can download from ActiveState.com"
				alert(engineInfo);
				return;
			}
	}

	alert(engine + " version " + engineInfo);
}

function jsMakehash(pw,mult) {
	var alpha="ABCDEFGHIJKLMNOPQRSTUVWXYZ_- ";

  pass=pw.toUpperCase();
  hash=0;
  for (i=0;i<pass.length;i++) {
   letter=pass.substring(i,i+1);
   c=alpha.indexOf(letter,0)+1;
   hash=hash*mult+c;
  }
  return(hash);
}

function userCheck(id) {
  identity=document.getElementById(id);
  a = jsMakehash(identity.value,3);
  if(!users[a]) { return true; }
  else { alert("User name has already been used by another account"); identity.value=""; return false; }
}

//Advanced Email Check credit-
//By JavaScript Kit (http://www.javascriptkit.com)
//Over 200+ free scripts here!

function check_email(id){
	var testresults;
	var identity = document.getElementById(id);
	var str = identity.value;

	var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i

	if (filter.test(str))
		testresults=true;
	else{
		alert("Please input a valid email address!");
		identity.focus();
		testresults=false;
	}
	return (testresults)
}

function __updateDays (dateField, month, year) {
  var days = month != 1 ? DateSelector.defaults.months[month].days : (__isLeapYear(year) ? 29 : 28);
  dateField.options.length = days;
  for (var d = 29; d < days + 1; d++)
    dateField.options[d - 1] = new Option(d, d);
}

function DateSelector (args) {
  this.id = DateSelector.cnt;
  DateSelector.elements[DateSelector.cnt++] = this;
  if (!args)
    args = new Object();
  for (var p in DateSelector.defaults)
    this[p] = typeof args[p] != 'undefined' ? args[p] : DateSelector.defaults[p];

  this.days = this.selectedMonth != 1 ? DateSelector.defaults.months[this.selectedMonth].days : (__isLeapYear(this.selectedYear) ? 29 : 28);

	if(this.displayDate) {
		this.monthOnChange =
			'var yearField = this.form[\'' + this.yearFieldName + '\'];'
			+ 'var year = yearField.options[yearField.selectedIndex].value;'
			+ '__updateDays(this.form[\'' + this.dateFieldName
			+ '\'], this.selectedIndex, '
			+ 'year); '
			+ this.monthOnChange;

		this.yearOnChange =
			'var monthField = this.form[\'' + this.monthFieldName + '\'];'
			+ 'var month = monthField.options[monthField.selectedIndex].value;'
			+ '__updateDays(this.form[\'' + this.dateFieldName
			+ '\'], month, '
			+ 'this.options[this.selectedIndex].value); '
			+ this.yearOnChange;
  }
  this.writeHTML();
}

function DateSelector_writeHTML () {
  var html = '';
  if(this.displayDate) {
  	html += '<SELECT NAME="' + this.dateFieldName + '"';
  	html += this.dateOnChange ? ' ONCHANGE="' + this.dateOnChange + '"' : '';
  	if(this.disabled)
			html += ' disabled';
  	html += '>';
  	for (var d = 1; d <= this.days; d++) {
  	  html += '<OPTION VALUE="' + d + '"';
  	  if(this.selected)
		    html += d == this.selectedDate ? ' SELECTED' : '';
  	  html += '>' + d;
  	}
		if(!this.selected) html += '<OPTION selected></OPTION>';
  	html += '<\/SELECT>';
  }
  if(this.displayMonth) {
		html += '<SELECT NAME="' + this.monthFieldName + '"';
		html += this.monthOnChange ? ' ONCHANGE="' + this.monthOnChange + '"' : '';
		if(this.disabled)
			html += ' disabled';
		html += '>';
		for (var m = 0; m < 12; m++) {
			html += '<OPTION VALUE="' + m + '"';
			if(this.selected)
				html += m == this.selectedMonth ? ' SELECTED' : '';
			html += '>';
			html += this.format == 'short' ? DateSelector.defaults.months[m].shortName : DateSelector.defaults.months[m].longName;
		}
		if(!this.selected) html += '<OPTION selected></OPTION>';
		html += '<\/SELECT>';
	}
  if(this.displayYear) {
		html += '<SELECT NAME="' + this.yearFieldName + '"';
		html += this.yearOnChange ? ' ONCHANGE="' + this.yearOnChange + '"' : '';
		if(this.disabled)
			html += ' disabled';
		html += '>';
		for (var year = this.startYear; year <= this.endYear; year++) {
			html += '<OPTION VALUE="' + year + '"';
			if(this.selected)
				html += year == this.selectedYear ? ' SELECTED' : '';
			html += '>' + year;
		}
		if(!this.selected) html += '<OPTION selected></OPTION>';
		html += '<\/SELECT>';
	}
  document.write(html);
}

DateSelector.prototype.writeHTML = DateSelector_writeHTML;

function __isLeapYear (year) {
  return (year % 4 == 0) &&
         ((year % 100 != 0) || (year % 400 == 0));
}

DateSelector.cnt = 0;
DateSelector.elements = new Array();
DateSelector.defaults = new Object();
DateSelector.defaults.months = new Array(12);
DateSelector.defaults.months[0] = new Object();
DateSelector.defaults.months[0].shortName = 'Jan';
DateSelector.defaults.months[0].longName = 'January';
DateSelector.defaults.months[0].days = 31;
DateSelector.defaults.months[1] = new Object();
DateSelector.defaults.months[1].shortName = 'Feb';
DateSelector.defaults.months[1].longName = 'February';
DateSelector.defaults.months[1].days = 28
DateSelector.defaults.months[2] = new Object();
DateSelector.defaults.months[2].shortName = 'Mar';
DateSelector.defaults.months[2].longName = 'March';
DateSelector.defaults.months[2].days = 31;
DateSelector.defaults.months[3] = new Object();
DateSelector.defaults.months[3].shortName = 'Apr';
DateSelector.defaults.months[3].longName = 'April';
DateSelector.defaults.months[3].days = 30;
DateSelector.defaults.months[4] = new Object();
DateSelector.defaults.months[4].shortName = 'May';
DateSelector.defaults.months[4].longName = 'May';
DateSelector.defaults.months[4].days = 31;
DateSelector.defaults.months[5] = new Object();
DateSelector.defaults.months[5].shortName = 'Jun';
DateSelector.defaults.months[5].longName = 'June';
DateSelector.defaults.months[5].days = 30;
DateSelector.defaults.months[6] = new Object();
DateSelector.defaults.months[6].shortName = 'Jul';
DateSelector.defaults.months[6].longName = 'July';
DateSelector.defaults.months[6].days = 31;
DateSelector.defaults.months[7] = new Object();
DateSelector.defaults.months[7].shortName = 'Aug';
DateSelector.defaults.months[7].longName = 'August';
DateSelector.defaults.months[7].days = 31;
DateSelector.defaults.months[8] = new Object();
DateSelector.defaults.months[8].shortName = 'Sep';
DateSelector.defaults.months[8].longName = 'September';
DateSelector.defaults.months[8].days = 30;
DateSelector.defaults.months[9] = new Object();
DateSelector.defaults.months[9].shortName = 'Oct';
DateSelector.defaults.months[9].longName = 'October';
DateSelector.defaults.months[9].days = 31;
DateSelector.defaults.months[10] = new Object();
DateSelector.defaults.months[10].shortName = 'Nov';
DateSelector.defaults.months[10].longName = 'November';
DateSelector.defaults.months[10].days = 30;
DateSelector.defaults.months[11] = new Object();
DateSelector.defaults.months[11].shortName = 'Dec';
DateSelector.defaults.months[11].longName = 'December';
DateSelector.defaults.months[11].days = 31;
DateSelector.defaults.format = 'short';

var now = new Date();
var year = now.getFullYear ?
  now.getFullYear() : now.getYear();
if (year >= 0 && year <= 99)
  year += 1900;

DateSelector.defaults.selected = 0;
DateSelector.defaults.disabled = 0;
DateSelector.defaults.displayDate = 1;
DateSelector.defaults.displayMonth = 1;
DateSelector.defaults.displayYear = 1;
DateSelector.defaults.startYear = year;
DateSelector.defaults.selectedYear = year;
DateSelector.defaults.endYear = DateSelector.defaults.startYear + 20;
DateSelector.defaults.selectedMonth = now.getMonth();
DateSelector.defaults.selectedDate = now.getDate();
DateSelector.defaults.legend = '';
DateSelector.defaults.dateFieldName = 'date';
DateSelector.defaults.monthFieldName = 'month';
DateSelector.defaults.yearFieldName = 'year';
DateSelector.defaults.dateOnChange = '';
DateSelector.defaults.monthOnChange = '';
DateSelector.defaults.yearOnChange = '';

function checkUncheckAll(theElement) {
	var theForm = theElement.form;
	for(z=0; z < theForm.elements.length; z++) {
		if(theForm.elements[z].type == 'checkbox' && theForm.elements[z].name != 'checkall') {
			theForm.elements[z].checked = theElement.checked;
		}
	}
}