<!--

function getElementObject(formobj,name){
	//var propertyform = document.forms['wconfig'];	
	for (var i = 0; i <  formobj.elements.length; i++) {
	        formElement = formobj.elements[i];	
			if(formElement.name == name){
				//alert(formElement.name);
				return formElement;	
			}	
	}	
}




function validateElement(formObj,elementToCheck,type,validation,errorMsg,mandatory,maxlength){
	//alert("validate " + elementToCheck + " of type ("+type+")");
	formElement = getElementObject(formObj,elementToCheck);
	if(formElement.name == elementToCheck){		
		richtext = false;
		// Textarea
		if(type=="textarea" || type=="content" ){		
			if (maxlength == ''){
				if(eval("window." + elementToCheck + "MaxLength")){
					maxlength = eval(elementToCheck + "MaxLength");
				} else {
					maxlength = '10000';
				}
			}

			// Make sure there is at least one alphanumeric character.
			var checkOK = "-()ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890%";
			var checkStr = formElement.value;
			var validText = false;

			formElement.value = checkStr;
			for (b = 0;  b < checkStr.length;  b++){
				if(!validText){
					ch = checkStr.charAt(b);
					for (j = 0;  j < checkOK.length;  j++){
						if (ch == checkOK.charAt(j)){validText = true; break;}
					}	
				}	
			}		
			if(!validText){formElement.value = "";}
			if(!richtext){
				if (formElement.value.length > maxlength) {
					allValid = false;
					if(errorMsg==elementToCheck){
						msg += elementToCheck + " is too long - maximum field size is " + maxlength + " characters";
						//msg += errorMsg + " is too large.";
					} else {	
					msg += errorMsg + "\n";
					}
				}
			}
			if (mandatory == 'yes' && escape(formElement.value).length < 1) {
				allValid = false;
				msg += errorMsg + "\n";
			}
			return;
		}

		// Select
		//else if(type=="select"){	
		//		if(formElement.name == elementToCheck) {
					// get the selected value
		//				var selectedValue = formElement[formElement.selectedIndex].value;
		//				if (mandatory == 'yes' && escape(selectedValue).length < 1) {
		//					allValid = false;
		//					msg += errorMsg + "\n";
		//				}
	    //                    return;
		//		}
		//}		
		
		// Checkbox
		else if(type=="checkbox"){
      checkBoxCollection = document.getElementsByName(elementToCheck);
      noneChecked = true;
			if (mandatory == 'yes') {
				for(cbc=0;cbc<checkBoxCollection.length;cbc++){
					if(checkBoxCollection[cbc].checked){noneChecked = false;}
				}
				if(noneChecked) {
 					allValid = false;
					msg += errorMsg + "\n";
				}
                                 
			}
	  	return;
		}

		// Multi Checkbox
		else if(type=="multicheckbox"){
			checkBoxCollection = document.getElementsByName(elementToCheck);
			noneChecked = true;
			if (mandatory == 'yes') {
				for(cbc=0;cbc<checkBoxCollection.length;cbc++){
					if(checkBoxCollection[cbc].checked){noneChecked = false;}
				}
				if(noneChecked) {
					allValid = false;
					msg += errorMsg + "\n";
				}			
			}
	  	return;
		}		
	
		// Number validation (is this being used anywhere?)
		else if(validation=="number"){
			var checkOK_number = "1234567890";
			var checkStr = escape(formElement.value); 

			if (mandatory == 'yes' && checkStr.length < 1) {
				allValid = false;
				msg += errorMsg + "\n";
			} else {
				for (b = 0;  b < checkStr.length;  b++){
					ch = checkStr.charAt(b);
					for (j = 0;  j < checkOK_number.length;  j++)
						if (ch == checkOK_number.charAt(j))
						break;
					if (j == checkOK_number.length){
						allValid = false;
						msg += errorMsg + "\n";
						break;
					}
				}
			}
			return;
		}
	
		// Time validation (Is there an example of this)?
		else if(validation=="time"){
			var checkOK_time = "1234567890&#58;";
			var checkStr = formElement.value; 

			if (mandatory == 'yes' && checkStr.length < 1) {
				allValid = false;
				msg += errorMsg + "\n";
			}
			else {
				for (b = 0;  b < checkStr.length;  b++){
					ch = checkStr.charAt(b);
					for (j = 0;  j < checkOK_time.length;  j++)
						if (ch == checkOK_time.charAt(j))
						break;
					if (j == checkOK_time.length){
						allValid = false;
						msg += errorMsg + "\n";
						break;
					}
				}
			}
			return;
		}
		

       // Need to ensure the field does not contain :: or ||
        else if(validation=="fileupload_title"){
                var checkStr = formElement.value;

                if (mandatory == 'yes' && checkStr.length < 1) {
                        allValid = false;
                        msg += errorMsg + "\n";
                }
                else {
                        if (checkStr.indexOf("||")!=-1 || checkStr.indexOf("::")!=-1){
                                allValid = false;
                                msg += errorMsg + " (must not contain :: or ||)\n";
                        }
                }
                return;
        }

	
		// Not really validation but method need to concatenate date on submit. - Copy yyyy-mm-dd from select to hidden field : No real need to validate since there will always be a value present 
		else if(validation=="time"){
			var day   = eval("form." + elementToCheck + "day[form." + elementToCheck + "day.selectedIndex].value");
			var month = eval("form." + elementToCheck + "month[form." + elementToCheck + "month.selectedIndex].value");
			var year  = eval("form." + elementToCheck + "year[form." + elementToCheck + "year.selectedIndex].value");
			
			formElement.value = year+'-'+month+'-'+day;
			return;
		}

		// Used to ensure that a time cannot be set as 00:00
		else if(validation=="timeofday"){
			var hourObj = getElementObject(formObj,elementToCheck + "hour");
			var minuteObj = getElementObject(formObj,elementToCheck + "minute");
			var hour   = hourObj[hourObj.selectedIndex].value;
			var minute = minuteObj[minuteObj.selectedIndex].value;
			if (hour=="00" && minute=="00") {
				allValid = false;
				msg += "Time must not be 00:00\n";
			}				
			return;
		}

		// Checks recurring dates to enure no conflict
		else if(validation=="recurring-dates"){
			// First set the RepeatUntilDate correctly as this usually sits in the form AFTER the recurring-date validation
			// and so has not been set correctly by the time the Recurring validation occurs.
			var	recurEndDateObj_day = document.getElementById('RepeatUntilDateday');
			var	recurEndDateObj_month = document.getElementById('RepeatUntilDatemonth');			
			var	recurEndDateObj_year = document.getElementById('RepeatUntilDateyear');
						
			var ed_day   = recurEndDateObj_day[recurEndDateObj_day.selectedIndex].value;
			var ed_month = recurEndDateObj_month[recurEndDateObj_month.selectedIndex].value;
			var ed_year  = recurEndDateObj_year[recurEndDateObj_year.selectedIndex].value;
			if (ed_day != "null" && ed_month != "null" && ed_year != "null")	{
				document.getElementById('RepeatUntilDate').value = ed_year+'-'+ed_month+'-'+ed_day;
			}	else {
				document.getElementById('RepeatUntilDate').value = '';
			}				
			
			// Have had to hard code these as no current way of passing names of elements through to this function at the moment.
			var	recurEndDateObj = document.getElementById('RepeatUntilDate');
			var endDateObj = document.getElementById('EndDate');
			var startDateObj = document.getElementById('StartDate');
			var repeatTypeObj = document.getElementsByName('RepeatType');
			var repeatTypeObj2 = document.getElementById('RepeatType')[1];	
			var repeatTypeObj3 = document.getElementById('RepeatType')[2];	
			var repeatModifierObj = document.getElementById('RepeatModifier');				
			var repeatPeriodObj = document.getElementById('RepeatPeriod');	

			// First lets create date objects for the dates we know.
			targetDate = createDate(startDateObj.value);
			startDate = createDate(startDateObj.value);
			endDate = createDate(endDateObj.value);
			recurDate = createDate(recurEndDateObj.value);
			
			// If no repeat..... make sure that the startdate is earlier than the enddate
			//if(repeatTypeObj[0].checked){
				if(startDate > endDate){
	          		allValid = false;
	          		msg += "Event start date " + "is later than your event end date\n";
	        	}					
			//}
			
			// If incrementing.....	
			if(repeatTypeObj[1].checked){
				// Calculate number of days,months or years to add to start date.
				timeToAdd = 0;
				if(repeatPeriodObj.value=="day"){timeToAdd = 1;}
				if(repeatPeriodObj.value=="week"){timeToAdd = 7;}
				if(repeatPeriodObj.value=="month"){timeToAdd = 1;}
				if(repeatPeriodObj.value=="year"){timeToAdd = 1;}		
		
				// Modify the count based on what the repeatModifierObj is set to
				if(repeatModifierObj.value=="every"){timeToAdd = timeToAdd*1;}
				if(repeatModifierObj.value=="every other"){timeToAdd = timeToAdd*2;}
				if(repeatModifierObj.value=="every third"){timeToAdd = timeToAdd*3;}		
				if(repeatModifierObj.value=="every fourth"){timeToAdd = timeToAdd*4;}
				if(repeatModifierObj.value=="every fifth"){timeToAdd = timeToAdd*5;}
				if(repeatModifierObj.value=="every sixth"){timeToAdd = timeToAdd*6;}			
						
				var daysToAdd = ""; var monthsToAdd = ""; var yearsToAdd = "";
				
				if(repeatPeriodObj.value=="day" || repeatPeriodObj.value=="week"){
					//alert("day/week " + startDate.getDate());
					daysToAdd = startDate.getDate() + timeToAdd;
				} else if(repeatPeriodObj.value=="month"){
					//alert("month " + startDate.getMonth());
					monthsToAdd = startDate.getMonth() + timeToAdd;
				} else if(repeatPeriodObj.value=="year"){
					//alert("year " + startDate.getYear());
					yearsToAdd = startDate.getYear() + timeToAdd;
				}
				
				// Recreate new date object
				if(daysToAdd!=""){
					targetDate = createDate(startDate.getYear() + '-' + parseInt(startDate.getMonth()+1) + '-' + daysToAdd);
				}
				if(monthsToAdd!=""){
					targetDate = createDate(startDate.getYear() + '-' + parseInt(monthsToAdd+1) + '-' + startDate.getDate());
				}
				if(yearsToAdd!=""){
					targetDate = createDate(yearsToAdd + '-' + parseInt(startDate.getMonth()+1) + '-' +  startDate.getDate());
				}	
							
				if(targetDate < endDate){				
					allValid = false;
					msg += errorMsg + "\n";
				}	

				// check to see if out targetdate (the next event) is greater than the recurring date
				if(recurDate <= endDate) {
					allValid = false;
					msg += "Recurring events must start after\nend of initial event\n";
				}
						
			}	
			
			// If period .....	
			if(repeatTypeObj[2].checked){
				// This checks for the next occurence of the selected date.  If the first occurence falls before the end date
				// then an error gets reported.
				N = 0;
				if(repeatModifierObj.value=="first"){N = 1;}
				if(repeatModifierObj.value=="second"){N = 2;}
				if(repeatModifierObj.value=="third"){N = 3;}		
				if(repeatModifierObj.value=="fourth"){N = 4;}
				if(repeatModifierObj.value=="last"){N = 0;}				

				X = 1;
				if(repeatPeriodObj.value=="monday"){X = 1;}
				if(repeatPeriodObj.value=="tuesday"){X = 2;}
				if(repeatPeriodObj.value=="wednesday"){X = 3;}
				if(repeatPeriodObj.value=="thursday"){X = 4;}
				if(repeatPeriodObj.value=="friday"){X = 5;}
				if(repeatPeriodObj.value=="saturday"){X = 6;}		
				if(repeatPeriodObj.value=="sunday"){X = 0;}									
				// Get full year of start date
				var D;
				var Y = startDate.getYear();
				var M = parseInt(startDate.getMonth()+1);
				if(N=="0"){M = M+1;}
				
				//alert(N + ", " + X + ", " + Y + ", " + M);
				// NthXdayOfYM(N, X, Y, M)  X = Sun=0..Sat=6 Sun=7.. , M=1..12, N=0 for last of prev mth.
  				with (D = new Date(Y, M-1, 1))
    				{ setDate(7*N - 6 + (7+X-getDay())%7 ) }
    				
				// The date is calculated based on this start date month first. So check that this date in the month is not before the start date to begin with.
				// If it is then recalculate the next months date.
				if(D<startDate){
	  				with (D = new Date(Y, M, 1))
	    				{ setDate(7*N - 6 + (7+X-getDay())%7 ) }
				}
							
				// Now check that this date is not less than the end date
				if(D < endDate){				
					allValid = false;
					msg += errorMsg + "\n";
				}	
			
			}
			return;
		}


		// Not really validation but method needs to modify url appropriately.
		else if(validation=="url"){
			var checkStr = formElement.value; 
			if (mandatory == 'yes' && checkStr.length < 1) {
				allValid = false;
				msg += errorMsg + "\n";
			}
			else {
				/* check there is no http:// */
				if(checkStr.indexOf("http://")!=-1 || checkStr.indexOf(" ")!=-1){
					allValid = false;
					msg += errorMsg + "\n";
				}
				
			}	
			return;
		}		
				
	
		// Word validation
		else if(validation=="word"){
			var checkOK = "%20-()ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
			var checkStr = escape(formElement.value); 

			if (mandatory == 'yes' && checkStr.length < 1) {
				allValid = false;
				msg += errorMsg + "\n";
			}
			else {
				for (b = 0;  b < checkStr.length;  b++){
					ch = checkStr.charAt(b);
					for (j = 0;  j < checkOK.length;  j++)
						if (ch == checkOK.charAt(j))
						break;
					if (j == checkOK.length){
						allValid = false;
						msg += errorMsg + "\n";
						break;
					}
				}
			}
			return;
		}
		
		
		// Password validation
		else if(validation=="password"){
			pwdok = true;
			if (mandatory == 'yes' && escape(formElement.value).length < 8) {
				allValid = false;
				pwdok = false;
				msg += errorMsg+"\n";
			}
			else if (pwdok)	// check for whitespace
			{
				whitespace = ' \t\n\r';
				for (c = 0; c < escape(formElement.value).length; c++)
				{
					ch = formElement.value.charAt(c);
					if (whitespace.indexOf(ch) != -1)
					{
						pwdok = false;
						allValid = false;
						msg += errorMsg + "\n";
						break;
					}
				}
			}
	  	return;
		}
		
	
		// e-mail validation
		else if(validation=="e-mail"){
			if (mandatory == 'yes' && escape(formElement.value).length < 1) {
				allValid = false;
				msg += errorMsg + "\n";
			}
			else {
				// Returns true if val vaguely resembles an email address and is not empty, false otherwise
				if ((escape(formElement.value).length > 0) && (formElement.value.indexOf("@") == -1 || formElement.value.indexOf(".") == -1)) {
					allValid = false;
					msg += errorMsg + "\n";
				}
			}
      return;
		}
		
		
		// Filename validation
		else if(validation=="filename"){
			var checkOK_number = "1234567890"; 
			var checkStr = escape(formElement.value); 
			var loadedFile =  document.getElementById(formElement.name + '_original') ;
			if (mandatory == 'yes' && checkStr.length < 1 && (loadedFile == null || loadedFile.value.length  < 1 ) ) 
			{
				allValid = false;
				msg += errorMsg + "\n";
			}
			else {
				var pos, ch;
		 		var val = formElement.value;
        			var platform, separator, version;
        			if(val == null) return(false);
       				platform = navigator.platform;

       			if (platform.indexOf("Win") == 0) {
        				separator = "\\";
        			} 
        
        			else if (platform.indexOf("Mac") == 0) {
			 		var IE4 = (document.all && !document.getElementById) ? true : false;
					var NS4 = (document.layers) ? true : false;
					var IE5 = (document.all && document.getElementById) ? true : false;
					var N6 = (document.getElementById && !document.all) ? true : false;

			            	if (IE4) 		{ separator = "%2F"; }
			             else if (IE5) 	{ separator = "/"; }
			        	else if (N6)  	{ separator = ":"; }
			        	else if (NS4) { separator = "/"; }
			       	else 		{ separator = "/"; }

        			} 
        			else { 		        
        				separator = "/";				 
        			}
        
			       var seppos = val.lastIndexOf(separator);
			       seppos++;
			      	for(pos = seppos; pos < val.length; pos++) {
	                		ch = val.charAt(pos);
			            if(! 
			            		(
			            			((ch >= 'A') && (ch <= 'Z')) ||
			            			((ch >= 'a') && (ch <= 'z')) ||
			                   		((ch >= '0') && (ch <= '9')) ||
			                    	((ch == '_') || (ch == '.') || (ch == '-') || (ch == '/') || (ch == '/')) 
			             		)
			             	) {						                  
			                 	allValid = false;
						msg += errorMsg + "\n";
						break;
			                } 
			        }

	       		lcval=val.toLowerCase();

	      		if(lcval.length<=4) {}
      			else if(lcval.lastIndexOf(".zip") == lcval.length-4) {}
				else if(lcval.lastIndexOf(".pdf") == lcval.length-4) {}
				else if(lcval.lastIndexOf(".csv") == lcval.length-4) {}
				else if(lcval.lastIndexOf(".txt") == lcval.length-4) { }
				else if(lcval.lastIndexOf(".htm") == lcval.length-4) {}
				else if(lcval.lastIndexOf(".doc") == lcval.length-4) {}
				else if(lcval.lastIndexOf(".rtf") == lcval.length-4) {}
				else if(lcval.lastIndexOf(".wav") == lcval.length-4) {}
				else if(lcval.lastIndexOf(".mov") == lcval.length-4) {}
				else if(lcval.lastIndexOf(".mpg") == lcval.length-4) {}
				else if(lcval.lastIndexOf(".mp3") == lcval.length-4) {}
				else if(lcval.lastIndexOf(".mer") == lcval.length-4) {}
				else if(lcval.lastIndexOf(".ppt") == lcval.length-4) {}
				else if(lcval.lastIndexOf(".xls") == lcval.length-4) {}
				else if(lcval.lastIndexOf(".exe") == lcval.length-4) {}
				else if(lcval.lastIndexOf(".html") == lcval.length-5) {}
				else if(lcval.lastIndexOf(".jsp") == lcval.length-4) {}

				else {						        
//						        			allValid = false;
//										msg += errorMsg+ "\n";
				}
			}
			return;	
	}

		// Audio filename validation
		else if(validation=="audiofile"){
			var checkOK_number = "1234567890"; 
			var checkStr = escape(formElement.value); 
			var loadedFile =  document.getElementById(formElement.name + '_original') ;
			if (mandatory == 'yes' && checkStr.length < 1 && (loadedFile == null || loadedFile.value.length  < 1 ) ) 
			{
				allValid = false;
				msg += errorMsg + "\n";
			}
			else {
				var pos, ch;
		 		var val = formElement.value;
        			var platform, separator, version;
        			if(val == null) return(false);
       				platform = navigator.platform;

       			if (platform.indexOf("Win") == 0) {
        				separator = "\\";
        			} 
        
        			else if (platform.indexOf("Mac") == 0) {
			 		var IE4 = (document.all && !document.getElementById) ? true : false;
					var NS4 = (document.layers) ? true : false;
					var IE5 = (document.all && document.getElementById) ? true : false;
					var N6 = (document.getElementById && !document.all) ? true : false;

			            	if (IE4) 		{ separator = "%2F"; }
			             else if (IE5) 	{ separator = "/"; }
			        	else if (N6)  	{ separator = ":"; }
			        	else if (NS4) { separator = "/"; }
			       	else 		{ separator = "/"; }

        			} 
        			else { 		        
        				separator = "/";				 
        			}
        
			       var seppos = val.lastIndexOf(separator);
			       seppos++;
			      	for(pos = seppos; pos < val.length; pos++) {
	                		ch = val.charAt(pos);
			            if(! 
			            		(
			            			((ch >= 'A') && (ch <= 'Z')) ||
			            			((ch >= 'a') && (ch <= 'z')) ||
			                   		((ch >= '0') && (ch <= '9')) ||
			                    	((ch == '_') || (ch == '.') || (ch == '-') || (ch == '/') || (ch == '/')) 
			             		)
			             	)
			             {
			             	allValid = false;
			             	msg += errorMsg + "\n";
			             	break;
			             } 
			        }

	       		lcval=val.toLowerCase();

	      		if(lcval.length<=4) {}
      			else if(lcval.lastIndexOf(".mp3") == lcval.length-4) {}
				else if(lcval.lastIndexOf(".aac") == lcval.length-4) {}
				else if(lcval.lastIndexOf(".ra") == lcval.length-3) {}
				else if(lcval.lastIndexOf(".ram") == lcval.length-4) { }
				else if(lcval.lastIndexOf(".wma") == lcval.length-4) {}
				else
				{						        
					allValid = false;
					msg += errorMsg+ "\n";
				}
			}
			return;	
	}	
	
	 else {
			var elemCount = 0;
			elemCount = elementCount(document.wconfig,elementToCheck)
			if(mandatory == 'yes' && elemCount > 1){
				if(checkMultiParamRegister(elementToCheck) ){
				} else {
					if(escape(formElement.value).length < 1){
					multiParams[multiParams.length] = elementToCheck + ',false';
					allValid = false;
					msg += errorMsg+"\n";
					} else {
						multiParams[multiParams.length] = elementToCheck + ',true';
					}
				}
			}
			if (mandatory == 'yes' && escape(formElement.value).length < 1) {
				if(elemCount > 1){
				} else {
					allValid = false;
					msg += errorMsg + "\n";
				}
			}
		  return;
	  }
	}	   	
}	
//-->
