		function changecolour(objStr, colour) {
			var lyrStr = "";
			if (objStr.indexOf(",") != -1) {
				var arObjStr = objStr.split(",");
				for (var i = 0; i < arObjStr.length; i++)
					if (i == (arObjStr.length - 1))
						lyrStr += "document.layers[\"" + arObjStr[i] + "\"]";
					else
						lyrStr += "document.layers[\"" + arObjStr[i] + "\"].";
			}else{
				var arObjStr = new Array();
				arObjStr[0] = objStr;
			}
			
			var dc = arObjStr[arObjStr.length - 1];	
			if (document.getElementById) {
				if(document.getElementById(dc))document.getElementById(dc).style.color = colour;
			}else if (document.all){
				if(document.all[dc])document.all[dc].style.color = colour;
			}else if (document.layers){
				// untested ? dc = eval(lyrStr);
				// untested ? if(dc)dc.style.color = colour;
			}
		}
		
		function findObj(n, d) { //v3.0
		  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=findObj(n,d.layers[i].document); 
			
			//alert(x);
			return x;
		}
		
		//start validating
		function valid(formfield,desc,validation,colour) {
			
			var returnvalue=true;
			var errors='';
			var num=0;
			
			formfield = formfield.split("|");
			desc = desc.split("|");
			validation = validation.split("|");
		
			for (i=0; i<(validation.length); i+=1){
				
				var obj = new Object(findObj(formfield[i]));
				
				changecolour("div"+formfield[i],colour);

			  	var f = obj.value;
				var p=obj.value.indexOf('@');
				var e=obj.value.length-1;
				var v=validation[i];
				var d=desc[i];
				var n=Number(obj.value);
			
				//required field
				if (v=="R"){
					if (!f){
						num+=1;
						errors+=num+". "+d+ " is a required field.\n\n";
						changecolour("div"+formfield[i],"#cc0000");
						
					}
				}
				//email field
				if (v=="E"){
				  	if (!f) {
						num+=1;
						errors+=num+". Please enter your email address.\n\n";
						changecolour("div"+formfield[i],"#cc0000");
				  	}else if(p<1 || p==(e)){
						num+=1;
						errors+=num+". A valid email address is Required.\n\n";
						changecolour("div"+formfield[i],"#cc0000");
					}
				}
				//numbers only field
				if (v=="N"){
					if (!f){
						num+=1;
						errors+=num+". "+d+ " is a required field.\n\n";
						changecolour("div"+formfield[i],"#cc0000");
				  	}else if(!n){
						num+=1;
						errors+=num+". "+d+ " must contain numbers only.\n\n";
						changecolour("div"+formfield[i],"#cc0000");
					}
				}
				//illegal characters
				var matchthis = new RegExp("[\/><\,!\^\$\*\~\`\+\|\?@#%&\(\)\;:\{\}=\']","gi");
				
				if (v=="url"){
				  	if (f.match(matchthis)){
						num+=1;
						errors+=num+". "+f.match(matchthis)+ " is a restricted character.\n\n";
						changecolour("div"+formfield[i],"#cc0000");
					}
				}
			}
			if (errors){
			    alert('Requirements are as follows\n\n' + errors);
		    	returnvalue=false;
			}
			
			return returnvalue;
		}//HELP        (form field , message , type of validation)
// multiple validation can be done by using | as a delimiter.
// form field cannot be empty
// email : must be an email address
// url : must have no illegal characters for links etc.
// return onclick="return valid('new_category|gallery_image','Category|Image','url|required');"
