// -----------------------------------------------------------------------------
// WESO Form Validation
//
// Copyright (C) 2002 Earnpin Lee
// Your Website Solution Sdn Bhd
// -----------------------------------------------------------------------------

// -----------------------------------------------------------------------------
// Initializing script  - setting global variables
// -----------------------------------------------------------------------------
var checkObjects		= new Array(); 	// Array containing the objects to validate.
var errors				= ""; 			// Variable holding the error message.
var returnVal			= false; 		// General return value. The validated form will only be submitted if true.
var language			= new Array(); 	// Language independent error messages!
var selectecLanguage	= "english";	// Choose between "english", "danish", "dutch", "french", "spanish", "russian", "portuguese"
language.english		= new Array();
language.danish			= new Array();
language.dutch			= new Array();
language.french			= new Array();
language.spanish		= new Array();
language.russian		= new Array();
language.portuguese		= new Array();
language.swedish		= new Array();
language.polish			= new Array();
language.brazport		= new Array(); // Brazilian Portuguese

// Error messages in english:
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";
	
// -----------------------------------------------------------------------------
// This function customized for MoneyForex project only
// enquiry_init - Define validation fields. Call this function in the onSubmit of the form
//
// need to empty checkObjects array before defining fields.
// -----------------------------------------------------------------------------
function enquiry_init()
{		
	checkObjects = new Array();	
	define('name','string','Name');
	define('phone','string','Phone');	
	define('email','email','Email');	
	define('verif_box','string','Verification Code');	
}	

// -----------------------------------------------------------------------------
// This function customized for MoneyForex project only
// maccount_init - Define validation fields. Call this function in the onSubmit of the form
//
// need to empty checkObjects array before defining fields.
// -----------------------------------------------------------------------------
function maccount_init()
{		
	checkObjects = new Array();	
	define('name','string','Full Name');
	define('country','string','Country');	
	define('email','email','E-mail Address');	
}	

// -----------------------------------------------------------------------------
// This function customized for MoneyForex project only
// demo_init - Define validation fields. Call this function in the onSubmit of the form
//
// need to empty checkObjects array before defining fields.
// -----------------------------------------------------------------------------
function demo_init()
{		
	checkObjects = new Array();	
	define('acctype','string','Account Type');
	define('fname','string','First Name');
	define('lname','string','Last Name');	
	define('country','string','Country');	
	define('email','email','Email');
	define('username','string','Username', 6, 12);	
	define('password','string','Password');	
	
}	

// -----------------------------------------------------------------------------
// This function customized for MoneyForex project only
// deposit_init - Define validation fields. Call this function in the onSubmit of the form
//
// need to empty checkObjects array before defining fields.
// -----------------------------------------------------------------------------
function deposit_init()
{		
	checkObjects = new Array();		
	define('fname','string','First Name');
	define('lname','string','Surname / Last Name');	
	define('email','email','E-mail Address');
	define('remitted','string','Remitted By');	
	define('amount','num','Exact Amount Sent');	
	define('verif_box','string','Verification Code');
}	

// -----------------------------------------------------------------------------
// This function customized for MoneyForex project only
// indiform01_init - Define validation fields. Call this function in the onSubmit of the form
//
// need to empty checkObjects array before defining fields.
// -----------------------------------------------------------------------------
function indiform01_init()
{		
	checkObjects = new Array();	
	define('fname','string','First Name');
	define('lname','string','Surname / Last Name');
	define('address','string','Street Address');
	define('country','string','Country');
	define('citizenship','string','Country of Citizenship');
	define('email','email','E-mail Address',null,null);
	define('remail','email','Re-Enter Email Address',null,null);
	define('password','string','Account Password', 4, 8);
	define('hearabout','string','Where did you hear about MoneyForex?');
}	

// -----------------------------------------------------------------------------
// This function customized for MoneyForex project only
// corporateform01_init - Define validation fields. Call this function in the onSubmit of the form
//
// need to empty checkObjects array before defining fields.
// -----------------------------------------------------------------------------
function corporateform01_init()
{		
	checkObjects = new Array();	
	define('company','string','Full Name of Company');
	define('registration','string','Registration / Incorporation Number');
	define('address','string','Street Address of Main Office');	
	define('country','string','Country');
	define('citizenship','string','Country of Citizenship');
	define('email','email','E-mail Address');
	define('remail','email','Re-Enter Email Address',null,null);
	define('fname','string','First Name');
	define('lname','string','Last Name');
	define('dob','string','Date of Birth');
	define('password','string','Account Password', 4, 8);
	define('hearabout','string','Where did you hear about MoneyForex?');

}	

// -----------------------------------------------------------------------------
// This function customized for MoneyForex project only
// corporateform02_init - Define validation fields. Call this function in the onSubmit of the form
//
// need to empty checkObjects array before defining fields.
// -----------------------------------------------------------------------------
function corporateform02_init()
{		
	checkObjects = new Array();	
	define('resolution_name','string','Name of Secretary');
	define('secretary','string','Name of Secretary Company');
	define('laws','string','Location');	
	define('trader01','string','First Trader\'s Name');
	define('title01','string','First Trader\'s Title');
	define('trader02','string','Second Trader\'s Name');
	define('title02','string','Second Trader\'s Title');	
}	

// -----------------------------------------------------------------------------
// 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;		
	}
	
	// Create Object. The name will be "V_something" where something is the "n" parameter above.
	eval("V_"+n+" = new formResult(x,type,HTMLname,min,max);");
	checkObjects[eval(checkObjects.length)] = eval("V_"+n);
}

// -----------------------------------------------------------------------------
// formResult - Used internally to create the objects
// -----------------------------------------------------------------------------
function formResult(form,type,HTMLname,min,max){
	this.form = form;
	this.type = type;
	this.HTMLname = HTMLname;
	this.min  = min;
	this.max  = max;
}

//------------------------------------------------------------------------------
// confirmValue - Used to confirm two field's value in form are the same
//------------------------------------------------------------------------------
function confirmValue(){
	var error = "";		
	
	//check email
	if(document.forms[0].email.value != document.forms[0].remail.value){			
		error = "Email and Re-Enter Email do not match";			
		returnVal = false;
	} 
	
	//write out error
	if(error != ""){
		alert(error);
	}
}

//------------------------------------------------------------------------------
// hearaboutValue - Used to replace other for hearabout 
//------------------------------------------------------------------------------
function hearaboutValue(){
	var error = "";		
	
	//check hearabout
	if(document.forms[0].hearabout.value == 'Other' && document.forms[0].other_specify.value == ''){			
		error = "Please specify where did you hear about MoneyForex?";			
		returnVal = false;
	} 
	
	//write out error
	if(error != ""){
		alert(error);
	}
}

//------------------------------------------------------------------------------
// confirmValue - Used to confirm two field's value in form are the same
//------------------------------------------------------------------------------
function checkRadio(){
	if (typeof document.forms[0].account!="undefined" && document.forms[0].name != 'deposit'){
     	//check radio
		if(document.forms[0].account[0].checked == 0 && document.forms[0].account[1].checked == 0 && document.forms[0].account[2].checked == 0 && document.forms[0].account[3].checked == 0){			
			errors+="-> Field 'This application is for a' is required\n";
		} 
		
		return errors;
  	}
}

// -----------------------------------------------------------------------------
// validate - Call this function onSubmit and return the "returnVal". (onSubmit="validate();return returnVal;")
// -----------------------------------------------------------------------------
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;
			
			//Debug alert line
			//alert("validateObject: "+validateObject+"\nvalidateObject.val: "+validateObject.val+"\nvalidateObject.len: "+validateObject.len+"\nvalidateObject.min,validateObject.max: "+validateObject.min+","+validateObject.max+"\nvalidateObject.type: "+validateObject.type);
			
			// Checking input. If "min" and/or "max" is defined the input has to be within the specific range
			if(validateObject.type == "num" || validateObject.type == "string"){
				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";
				}
			} else if(validateObject.type == "email"){
				// Checking existense of "@" and ".". The length of the input must be at least 5 characters. The "." must neither be preceding the "@" nor follow it.
				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";}
			}
		}
	}
	
	checkRadio();
	
	// Used to set the state of the returnVal. If errors -> show error messages in chosen language
	if(errors){
		alert(language[selectecLanguage].header.concat("\n"+errors));
		errors = "";
		returnVal = false;
	} else {
		returnVal = true;
	}
}
