 // Note that associative arrays cannot be created as instances of the built-in Array object. You must use a constructor function to create one.
function mmRangeClass() {
  for (var i = 0; i < arguments.length; ++i) {
    this[mmRangeClass.arguments[i]] = new mmRange();
  }
}

function mmRange() {
  this.min    = null
  this.height = null
}

// Uncomment this and put in your own ranges....
/*var mmRanges = new mmRangeClass("Height","Weight","Weight_to_Height","Chest","Waist","Chest_Breadth","Front_Length","Back_Length","end");
mmRanges["Height"].min = 60;
mmRanges["Height"].max = 84;
mmRanges["Weight"].min = 100;
mmRanges["Weight"].max = 300;
mmRanges["Weight_to_Height"].min = 1.6;
mmRanges["Weight_to_Height"].max = 3.5;
mmRanges["Chest"].min = 30;
mmRanges["Chest"].max = 55;
mmRanges["Waist"].min = 26;
mmRanges["Waist"].max = 55;
mmRanges["Chest_Breadth"].min = 7;
mmRanges["Chest_Breadth"].max = 14;
mmRanges["Front_Length"].min = 12;
mmRanges["Front_Length"].max = 19;
mmRanges["Back_Length"].min = 14;
mmRanges["Back_Length"].max = 22;
*/

var reFloat = /^((\d+(\.\d*)?)|((\d*\.)?\d+))$/;

var defaultEmptyOK = false



function validRange( lookup, formfield, conversionfactor, fielddesc) {

	if (( (mmRanges[lookup].min * conversionfactor) > formfield.value) || ( (mmRanges[lookup].max * conversionfactor) < formfield.value)) {

		alert( fielddesc + ' Out of bounds. Valid values are between  ' + Math.round((mmRanges[lookup].min * conversionfactor)) + ' & ' + Math.round(( mmRanges[lookup].max * conversionfactor)));

		formfield.focus();

		return false;

	}

	else {

		return true;

	}	

}



// trim

function trim(s) {

  while (s.substring(0,1) == ' ') {

    s = s.substring(1,s.length);

  }

  while (s.substring(s.length-1,s.length) == ' ') {

    s = s.substring(0,s.length-1);

  }

  return s;

}



// Check whether string s is empty.

function isEmpty(s)

{   

	return ((s == null) || (s.length == 0))

}



function isEmailAddr(email)

{

  var result = false;

  var theStr = new String(email);

  var index = theStr.indexOf("@");

  if (index > 0)

  {

    var pindex = theStr.indexOf(".",index);

    if ((pindex > index+1) && (theStr.length > pindex+1))

	result = true;

  }

  return result;

}



//Validate Check Box
function isChecked( objFormField, strMsg) {
     var strValue= objFormField.checked;
     if ( !strValue) {
	  if ( !isEmpty( strMsg)) {
          	alert( strMsg);
	  }
          objFormField.focus();
          return false;
     }
     return true;
  }     

function validRequired(formField,fieldLabel)
{
	var result = true;
	if (formField.value == "")
	{
		alert('Please enter a value for  ' + fieldLabel +'.');
		formField.focus();
		result = false;
	}
	return result;
}

function allDigits(str)
{
	return inValidCharSet(str,"0123456789");
}

function inValidCharSet(str,charset)
{
	var result = true;
	// Note: doesn't use regular expressions to avoid early Mac browser bugs	
	for (var i=0;i<str.length;i++)
		if (charset.indexOf(str.substr(i,1))<0)
		{
			result = false;
			break;
		}
	return result;
}

function validEmail(formField,fieldLabel,required)
{
	var result = true;
	if (required && !validRequired(formField,fieldLabel))
		result = false;
	if (result && ((formField.value.length < 3) || !isEmailAddr(formField.value)) )
	{
		alert("Please enter a complete email address in the form: yourname@yourdomain.com");
		formField.focus();
		result = false;
	}
  return result;
}

function validNum(formField,fieldLabel,required)
{
	var result = true;
	if (required && !validRequired(formField,fieldLabel))
		result = false;
 	if (result)
 	{
 		if (!allDigits(formField.value))
 		{
 			alert('Please enter a number for the "' + fieldLabel +'" field.');
			formField.focus();		
			result = false;
		}
	} 
	return result;
}

// isFloat ( formfield [, BOOLEAN emptyOK])
// 
// True if string s is an unsigned floating point (real) number. 
//
// Also returns true for unsigned integers. If you wish
// to distinguish between integers and floating point numbers,
// first call isInteger, then call isFloat.
//
// Does not accept exponential notation.
//
// For explanation of optional argument emptyOK,
// see comments of function isInteger.
function isFloat (formField,fieldLabel)
{   
	s = formField.value;
	if (isEmpty(s)) 
       if (isFloat.arguments.length == 1) return defaultEmptyOK;
       else return (isFloat.arguments[1] == true);

    return reFloat.test(s)
}

function validInt(formField,fieldLabel,required)
{
	var result = true;
	if (required && !validRequired(formField,fieldLabel))
		result = false;
 	if (result)
 	{
 		var num = parseInt(formField.value,10);
 		if (isNaN(num))
 		{
 			alert('Please enter a number for the "' + fieldLabel +'" field.');
			formField.focus();		
			result = false;
		}
	} 

	return result;
}

function validDate(formField,fieldLabel,required)
{
	var result = true;
	if (required && !validRequired(formField,fieldLabel))
		result = false;

 	if (result)
 	{
 		var elems = formField.value.split("/");
 		result = (elems.length == 3); // should be three components
 		if (result)
 		{
 			var year = parseInt(elems[0],10);
 			var month = parseInt(elems[1],10);
  			var day = parseInt(elems[2],10);
			//
			result = allDigits(elems[0]) && (month > 0) && (month < 13) &&
					 allDigits(elems[1]) && (day > 0) && (day < 32) &&
					 allDigits(elems[2]) && ((elems[2].length == 2) || (elems[2].length == 4));
 		}
  		if (!result)
 		{
 			alert('Please enter a date in the format YYYY/MM/DD for the "' + fieldLabel +'" field.');
			formField.focus();		
		}
	} 
	return result;

}

function validTime(formField,fieldLabel,required)
{
	var result = true;
	if (required && !validRequired(formField,fieldLabel))
		result = false;

 	if (result)
 	{
 		var elems = formField.value.split(":");
 		result = (elems.length == 2); // should be three components
 		if (result)
 		{
 			var hour   = parseInt(elems[0],10);
 			var minute = parseInt(elems[1],10);
			//
			result = allDigits(elems[0]) && (hour >= 0) && (hour < 24) &&
					 allDigits(elems[1]) && (minute < 60);
 		}
  		if (!result)
 		{
 			alert('Please enter a time in the format hh:mm for the "' + fieldLabel +'" field where hh is 0-23 and mm is 0-59.');
			formField.focus();		
		}
	} 
	return result;

}

function isdefined( variable)
{
    return (typeof(window[variable]) == "undefined")?  false: true;
}

function get_radio_value( formfield)
{
	for (var i=0; i < formfield.length; i++) {
   		if (formfield[i].checked) {
			return formfield[i].value;
		}
   }
	return '';
}

function validateRegistration(theForm)

{
	theForm.f_dvdcode.className      = 'inp';
	theForm.f_firstname.className    = 'inp';
	theForm.f_lastname.className     = 'inp';
	theForm.f_email.className        = 'inp';
	theForm.f_country.className      = 'inp';
	theForm.f_purchased_at.className = 'inp';
	//
	if ( !validRequired(theForm.f_dvdcode,'DVD Code')) {
		theForm.f_dvdcode.focus();
		theForm.f_dvdcode.className = 'form_error';
		return false;
	}
	//
	if ( !validRequired(theForm.f_firstname,'First Name')) {
		theForm.f_firstname.focus();
		theForm.f_firstname.className = 'form_error';
		return false;
	}
	//
	if ( !validRequired(theForm.f_lastname,'Last Name')) {
		theForm.f_lastname.focus();
		theForm.f_lastname.className = 'form_error';
		return false;
	}
	//
	if ( !validEmail(theForm.f_email,'Email', true)) {
		theForm.f_email.focus();
		theForm.f_email.className = 'form_error';
		return false;
	}
	//
	/*if ( !validRequired(theForm.f_country,'Country')) {
		theForm.f_country.focus();
		theForm.f_country.className = 'form_error';
		return false;
	}*/
	//
	if ( !validRequired( theForm.f_purchased_at,'Purchased At', true)) {
		theForm.f_purchased_at.focus();
		theForm.f_purchased_at.className = 'form_error';
		return false;
	}
	//
	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 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);
	return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}

function validPhone( objfield, fieldLabel, required) {
	var Phone = objfield
	if ( required) {	
		if ((Phone.value==null)||(Phone.value=="")){
			alert("Please enter a valid phone number for " + fieldLabel);
			Phone.focus();
			return false;
		}
	}
	if (checkInternationalPhone(Phone.value)==false){
		alert("Please enter a valid phone number for " + fieldLabel);
		Phone.focus();
		return false;
	}
	return true;
 }
