// Generic Form Validation
// Copyright (C) 2000 Jacob Hage - [jacobhage@hotmail.com]
// Distributed under the terms of the GNU Library General Public License
// Altered by G&G - George Stathis - Gina Theodorly (www.gandg.gr)

var checkObjects= new Array(); 	
var errors= ""; 			
var returnVal= false; 		
var language= new Array(); 	
var selectecLanguage= "english";	

language.english= new Array();

language.english.header	= "The following error(s) occured:"
language.english.start	= "->";
language.english.field	= " Field ";
language.english.require= " is required";
language.english.min	= " and must consist of at least ";
language.english.max	= " and must not contain more than ";
language.english.minmax	= " and no more than ";
language.english.chars	= " characters";
language.english.num	= " and must contain a number";
language.english.email	= " must contain a valid e-mail address";

function define(n,type,HTMLname,min,max,d){
	var p, i, 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;

if (checkObjects[i].form.value)
{
	var tmpv=checkObjects[i].form.value;
	if (tmpv)
	{
			validateObject.len 		= tmpv.length;
	}
}
			validateObject.min 		= checkObjects[i].min;
			validateObject.max 		= checkObjects[i].max;
			validateObject.type 	= checkObjects[i].type;
			if(validateObject.type == "num" || validateObject.type == "string" || validateObject.type == "string1" || validateObject.type == "select"){
				if((validateObject.type == "num" && validateObject.len <= 0) || (validateObject.type == "num" && isNaN(validateObject.val))){
				    errors += language[selectecLanguage].start +
				              language[selectecLanguage].field +
					      validateObject.HTMLname +
					      language[selectecLanguage].require +
					      language[selectecLanguage].num+"\n";
					      
				} else if (validateObject.min && validateObject.max && (validateObject.len < validateObject.min || validateObject.len > validateObject.max)){
				    errors += language[selectecLanguage].start +
				              language[selectecLanguage].field +
					      validateObject.HTMLname +
					      language[selectecLanguage].require +
					      language[selectecLanguage].min +
					      validateObject.min +
					      language[selectecLanguage].minmax +
					      validateObject.max +
					      language[selectecLanguage].chars+"\n";

				} else if (validateObject.min && !validateObject.max && (validateObject.len < validateObject.min)){
				    errors += language[selectecLanguage].start +
				              language[selectecLanguage].field +
					      validateObject.HTMLname +
					      language[selectecLanguage].require +
					      language[selectecLanguage].min +
					      validateObject.min +
					      language[selectecLanguage].chars+"\n";

				} else if (validateObject.max && !validateObject.min &&(validateObject.len > validateObject.max)){
				    errors += language[selectecLanguage].start +
				              language[selectecLanguage].field +
					      validateObject.HTMLname +
					      language[selectecLanguage].require +
					      language[selectecLanguage].max +
					      validateObject.max +
					      language[selectecLanguage].chars+"\n";

				} else if (!validateObject.min && !validateObject.max && validateObject.len <= 0){
				    errors += language[selectecLanguage].start +
				              language[selectecLanguage].field +
					      validateObject.HTMLname +
					      language[selectecLanguage].require+"\n";
				}
 				if (validateObject.type == "string1" && validateObject.val.indexOf(" ") != -1) {
				    errors += language[selectecLanguage].start +
				              language[selectecLanguage].field +
					      validateObject.HTMLname +
					      language[selectecLanguage].oneString+"\n";
				}
				if (validateObject.type == "string" && ((validateObject.val == '') || (typeof(validateObject.val)=="undefined"))) {
				    errors += language[selectecLanguage].start +
				              language[selectecLanguage].field +
					      validateObject.HTMLname +
					      language[selectecLanguage].require+"\n";
				}
				if (validateObject.type == "select" && validateObject.form.selectedIndex == 0) {
				    errors += language[selectecLanguage].start +
				              language[selectecLanguage].field +
					      validateObject.HTMLname +
					      language[selectecLanguage].require+"\n";
				}
			} else if(validateObject.type == "email"){
				
				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[selectecLanguage].start +
				              language[selectecLanguage].field +
					      validateObject.HTMLname +
					      language[selectecLanguage].email+"\n";
			        }
			}
		}
	}
	if(errors){
		alert(language[selectecLanguage].header.concat("\n"+errors));
		errors = "";
		returnVal = false;
	} else {
		returnVal = true;
	}
	return returnVal;
}
