/*
Form validation script
BBC Worldwide
July 2008
Simon Chisnall

Operation:

*/

function Validation(rF)  {
	
	var reqFieldsAry = rF;
	
	this.run = function(f) {

		var error = false;
		
		//clear old message if present
		if(document.getElementById("errorMsg")){
			errorMsg = document.getElementById("errorMsg");
			if ( errorMsg.hasChildNodes() ){
				while ( errorMsg.childNodes.length >= 1 ){
					errorMsg.removeChild( errorMsg.firstChild );       
				} 
			}	
		}
		
		ul = document.createElement('ul');
			
		for (i=0;i<reqFieldsAry.length;i++)	{
	
			switch (reqFieldsAry[i][1]) {
	
					case "text":
						if(document.getElementById(reqFieldsAry[i][0]).value == ""){
							this.addMsg(i,reqFieldsAry[i][0],reqFieldsAry[i][2]);
							error = true;
						}
						break;
	
					case "email":
	
						if((document.getElementById(reqFieldsAry[i][0]).value == "") || (document.getElementById(reqFieldsAry[i][0]).value.indexOf("@") == -1)){
							this.addMsg(i,reqFieldsAry[i][0],reqFieldsAry[i][2]);
							error = true;
						}
						break;
	
					case "checkbox":
	
						if(document.getElementById(reqFieldsAry[i][0]).checked == false){
							this.addMsg(i,reqFieldsAry[i][0],reqFieldsAry[i][2]);
							error = true;
						}
						break;
	
					case "radio":
						/* loops through all fields with same name, checking for checked value */
						radioAry = document.getElementsByName(reqFieldsAry[i][0]);
						answered = false;
						for (z=0;z<radioAry.length;z++)	{
							if (radioAry[z].checked == true ) {
								answered = true;
								break;
							}
						}
						if (answered == false){
							this.addMsg(i,radioAry[0].id,reqFieldsAry[i][2]);
							error = true;
						}
						break;
	
					case "dropdown":
						/*compares value with original*/
						var dropbox = document.getElementById(reqFieldsAry[i][0]);
						if(dropbox[dropbox.selectedIndex].text == dropbox.options[0].text){
							this.addMsg(i,reqFieldsAry[i][0],reqFieldsAry[i][2]);
							error = true;
						}
						break;
						
					case "different": 
						/* compares two strings and checks they are different */
						if(document.getElementById(reqFieldsAry[i][0]).value == document.getElementById(reqFieldsAry[i][2]).value){
							this.addMsg(i,reqFieldsAry[i][0],reqFieldsAry[i][3]);
							error = true;
						}
						break;
				}
		
		} /* end for loop */


		if (error == false){
			return true;
		} else {
			this.showMsg(f);
			return false;
		}
	
	};
	

	this.addMsg = function(msgnum,target,string) {
			
			li = document.createElement('li');
			li.appendChild(document.createTextNode(string));
			ul.appendChild(li);
			
			
	};
	
	this.showMsg = function(f) {
			if(!document.getElementById("errorMsg")){
				msg = document.createElement('div');
				msg.id = "errorMsg";
				msg.setAttribute('style', 'color:red; text-align:left');
				msg.appendChild(document.createElement('p'));
				msg.childNodes[0].appendChild(document.createTextNode("The following errors occurred:"));
				msg.appendChild(ul);
				f.parentNode.insertBefore(msg,f);
			} else {
				errorMsg.appendChild(document.createElement('p'));
				errorMsg.childNodes[0].appendChild(document.createTextNode("The following errors occurred:"));
				errorMsg.appendChild(ul);
				f.parentNode.insertBefore(errorMsg,f);
				
			}
			
			window.location = "#errorMsg";
	}
	
	this.createMsg = function(){
		
		msg.appendChild(document.createElement('p'));
		msg.childNodes[0].appendChild(document.createTextNode("The following errors occurred:"));
		ul = document.createElement('ul');
		msg.appendChild(ul);
		return msg;
	}
			
			
}





