// Generic Form Validation

// Jacob Hage (jacob@hage.dk)

var foundBy		= "";

var checkObjects	= new Array();

var errors		= "";

var passChk = false;

var returnVal		= false;

var language		= new Array();



var j;

var validAlpha = "abcdefghijklmnopqrstuvwxyz";

var validNumeric = "0123456789";

var temp;

var alphaOK = false;

var numericOK = false;



language["header"]	= "Please check the following fields:"

language["start"]	= "->";

language["field"]	= " ";

language["require"]	= " ";

language["min"]		= "and must consist of at least ";

language["max"]		= " and must not contain more than ";

language["minmax"]	= " and no more than ";

language["chars"]	= " characters";

language["num"]		= "must contain a number";

language["email"]	= " must contain a valid e-mail address";

language["password"]	= " must contain a number and a letter";

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

// define - Call this function in the beginning of the page. I.e. onLoad.

// n = name of the input field (Required)

// type= string, num, email (Required)

// min = the value must have at least [min] characters (Optional)

// max = the value must have maximum [max] characters (Optional)

// d = (Optional)

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

function define(n, type, HTMLname, min, max, d) {

var p;

var i;

var x;



if (!d) d = document;

if ((p=n.indexOf("?"))>0&&parent.frames.length) {

	d = parent.frames[n.substring(p+1)].document;

	n = n.substring(0,p);

}



if (!(x = d[n]) && d.all) x = d.all[n];

	for (i = 0; !x && i < d.forms.length; i++) {

		x = d.forms[i][n];

	}



	for (i = 0; !x && d.layers && i < d.layers.length; i++) {

		x = define(n, type, HTMLname, min, max, d.layers[i].document);

		return x;       

	}



	eval("V_"+n+" = new formResult(x, type, HTMLname, min, max);");

	checkObjects[eval(checkObjects.length)] = eval("V_"+n);

}



function formResult(form, type, HTMLname, min, max) {

	this.form = form;

	this.type = type;

	this.HTMLname = HTMLname;

	this.min  = min;

	this.max  = max;

}



function validate() {

	if (checkObjects.length > 0) {

		errorObject = "";

		for (i = 0; i < checkObjects.length; i++) {

			validateObject = new Object();

			validateObject.form = checkObjects[i].form;

			validateObject.HTMLname = checkObjects[i].HTMLname;

			validateObject.val = checkObjects[i].form.value;

			validateObject.len = checkObjects[i].form.value.length;

			validateObject.min = checkObjects[i].min;

			validateObject.max = checkObjects[i].max;

			validateObject.type = checkObjects[i].type;

			

			switch (validateObject.type) {

				case "num":

					if ((validateObject.len <= 0) || (isNaN(validateObject.val))) {

						errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['num'] + "\n";

					} else if (validateObject.min && validateObject.max && (validateObject.len < validateObject.min || validateObject.len > validateObject.max)) {

						errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['min'] + validateObject.min + language['minmax'] + validateObject.max+language['chars'] + "\n";

					} else if (validateObject.min && !validateObject.max && (validateObject.len < validateObject.min)) {

						errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['min'] + validateObject.min + language['chars'] + "\n";

					} else if (validateObject.max && !validateObject.min &&(validateObject.len > validateObject.max)) {

						errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['max'] + validateObject.max + language['chars'] + "\n";

					} else if (!validateObject.min && !validateObject.max && validateObject.len <= 0) {

						errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + "\n";

					}

					break;

					

				case "string":

					if (validateObject.min && validateObject.max && (validateObject.len < validateObject.min || validateObject.len > validateObject.max)) {

						errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['min'] + validateObject.min + language['minmax'] + validateObject.max+language['chars'] + "\n";

					} else if (validateObject.min && !validateObject.max && (validateObject.len < validateObject.min)) {

						errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['min'] + validateObject.min + language['chars'] + "\n";

					} else if (validateObject.max && !validateObject.min &&(validateObject.len > validateObject.max)) {

						errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['max'] + validateObject.max + language['chars'] + "\n";

					} else if (!validateObject.min && !validateObject.max && validateObject.len <= 0) {

						errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + "\n";

					}

					break;

					

				case "email":

					// Checking existense of "@" and ".". 

					// Length of must >= 5 and the "." must 

					// not directly precede or follow the "@"

					if ((validateObject.val.indexOf("@") == -1) || (validateObject.val.charAt(0) == ".") || (validateObject.val.charAt(0) == "@") || (validateObject.len < 6) || (validateObject.val.indexOf(".") == -1) || (validateObject.val.charAt(validateObject.val.indexOf("@")+1) == ".") || (validateObject.val.charAt(validateObject.val.indexOf("@")-1) == ".")) {

						errors += language['start'] + language['field'] + validateObject.HTMLname + language['email'] + "\n";

					}

					break;

					

				case "password":

					if (validateObject.min && !validateObject.max && (validateObject.len < validateObject.min)) {

						errors += language['start'] + language['field'] + validateObject.HTMLname + language['require'] + language['min'] + validateObject.min + language['chars'] + "\n";

					}

					if (validateObject.val != document.rego.tmp_m_Password.value) {

						errors += "-> Your passwords don't match. Please re-enter." + "\n";

					}

					

					for (j=0; j<validateObject.len; j++) {

						temp = "" + validateObject.val.substring(j, j+1);

						if (validAlpha.indexOf(temp) > 0) alphaOK = true;

						if (validNumeric.indexOf(temp) > 0) numericOK = true;

					}

					if (!alphaOK || !numericOK) {

						errors += "-> Your password must contain numbers and letters." + "\n";

					}

					

					break;

			}

	

	if (validateObject.type == "num" || validateObject.type == "string") {



	} else if(validateObject.type == "email") {



		}

	}

}



//Use this example to check radio dials and check boxes, [i] represent each item for that element e.g. if you have 3 radio dials loop the for statement 3 times.

//for (i = 0; i < 5; i++){if (document.formName.elementName[i].checked){foundBy = true;break;}else{foundBy = false;}} if(!foundBy){errors += "-> You must select one of the 5 options for Free Games" + "\n";foundBy = false;}



if (window.location.href.indexOf('register.asp') >= 0) {

	if (eval("document.rego.agree")) {

		if (!document.rego.agree.checked) {

			errors += "-> You must agree to the Conditions of Use." + "\n";

		}

	}

}





if (errors) {

alert(language["header"].concat("\n" + errors));

errors = "";

returnVal = false;

} else {

returnVal = true;

   }

}



////////////////////////////////////////

// Get radio and check box values

// parse buttonGroup. eg. document.frm.fieldName

////////////////////////////////////////

function getSelectedRadio(buttonGroup) {

   // returns the array number of the selected radio button or -1 if no button is selected

   if (buttonGroup[0]) { // if the button group is an array (one button is not an array)

      for (var i=0; i<buttonGroup.length; i++) {

         if (buttonGroup[i].checked) {

            return i

         }

      }

   } else {

      if (buttonGroup.checked) { return 0; } // if the one button is checked, return zero

   }

   // if we get to this point, no radio button is selected

   return -1;

} // Ends the "getSelectedRadio" function



function getSelectedRadioValue(buttonGroup) {

   // returns the value of the selected radio button or "" if no button is selected

   var i = getSelectedRadio(buttonGroup);

   if (i == -1) {

      return "";

   } else {

      if (buttonGroup[i]) { // Make sure the button group is an array (not just one button)

         return buttonGroup[i].value;

      } else { // The button group is just the one button, and it is checked

         return buttonGroup.value;

      }

   }

} // Ends the "getSelectedRadioValue" function





function getSelectedCheckbox(buttonGroup) {

   // Go through all the check boxes. return an array of all the ones

   // that are selected (their position numbers). if no boxes were checked,

   // returned array will be empty (length will be zero)

   var retArr = new Array();

   var lastElement = 0;

   if (buttonGroup[0]) { // if the button group is an array (one check box is not an array)

      for (var i=0; i<buttonGroup.length; i++) {

         if (buttonGroup[i].checked) {

            retArr.length = lastElement;

            retArr[lastElement] = i;

            lastElement++;

         }

      }

   } else { // There is only one check box (it's not an array)

      if (buttonGroup.checked) { // if the one check box is checked

         retArr.length = lastElement;

         retArr[lastElement] = 0; // return zero as the only array value

      }

   }

   return retArr;

} // Ends the "getSelectedCheckbox" function



function getSelectedCheckboxValue(buttonGroup) {

   // return an array of values selected in the check box group. if no boxes

   // were checked, returned array will be empty (length will be zero)

   var retArr = new Array(); // set up empty array for the return values

   var selectedItems = getSelectedCheckbox(buttonGroup);

   if (selectedItems.length != 0) { // if there was something selected

      retArr.length = selectedItems.length;

      for (var i=0; i<selectedItems.length; i++) {

         if (buttonGroup[selectedItems[i]]) { // Make sure it's an array

            retArr[i] = buttonGroup[selectedItems[i]].value;

         } else { // It's not an array (there's just one check box and it's selected)

            retArr[i] = buttonGroup.value;// return that value

         }

      }

   }

   return retArr;

} // Ends the "getSelectedCheckBoxValue" function





function openBrWindow(theURL,winName,features) { //v2.0

  window.open(theURL,winName,features);

}



function closenrefresh(){

	opener.location.reload(); 

	self.close(); 

}


