var sAlphaNumericChars = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
var sFileNameChars = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ. _-\\:/';
var sTelephoneChars = '+1234567890 ()';
var sEmailChars = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@-._';
var sNumericChars = '1234567890';
var sAlphaChars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';


	function clearOtherFormButtons(apartFrom,value){
		alert(apartFrom.value);
		var buttons = document.getElementsByTagName("button");
				
		for(var i = 0;i < buttons.length;i++){
			var thisButton = buttons[i];
			
			if(thisButton != apartFrom){
				//thisButton.value = "";
				//alert("clear " + thisButton.Id);
			} else {
				alert("dont clear");
				thisButton.value = value;
				//thisButton.value = apartFrom.getAttribute("value");
			}
		}
	}
	
	function isDefined(sString){
		var bResult = true;
		
		if(String(sString) == ''){
			bResult = false;
		}
		if(String(sString) == 'undefined'){
			bResult = false;
		}
		if(String(sString) == 'null'){
			bResult = false;
		}
			
		return(bResult);
	}

	function isInitialised(sString){
		var bResult = true;
		
		if(String(sString) == 'undefined'){
			bResult = false;
		}
		if(String(sString) == 'null'){
			bResult = false;
		}
			
		return(bResult);
	}


	function isTelephone(sValue,sMode){

		var bResult = true;
		var iLength = 0;
		
		if(isDefined(sValue) && sValue != ''){
		
			bResult = checkValidChars(sValue,sTelephoneChars);
			
			if(bResult){
				iLength = sValue.length;
				
				bResult = ((iLength > 2) && (iLength < 20));
			}			
		}
		
		return(bResult);		
		
	}

	function isDate(sValue,sMode){
		var bResult = true;
		var re= /\d{2}\/\d{2}\/\d{4}$/;
		
		// Sanitise parameters
		if(!isDefined(sValue)) sValue = '' ;
		
		sValue = sValue.toString().replace(' ','');
		sValue = sValue.substr(0,10);
		//alert(sValue);
		
		if((sValue == '') || (sValue == '//') || (sValue == 'dd/mm/yyyy')){
		
			if(sMode == 'mandatory') bResult = false;
			
		} else {
		
			bResult = re.test(sValue);
					
			if (bResult) {
			  
			  // Check range of day and month
			  var bits = sValue.split('/');
			  
			  var day   = Number(bits[0]);
			  var month = Number(bits[1]);
			  var year  = Number(bits[2]);
			  
			  // Ok, some explanation.  In javascript, months run from 0 to 11, hence the month - 1.
			  // If you try to instantiate a js date object with an invalid date it quietly changes
			  // the date to a valid one and doesn't error.  Great.  So we check the day and month
			  // after instantiating the object.  If they've been changed, it wasn't a valid date.
			  
			  oDate = new Date( year, month - 1, day, 0, 0 ,0 ,0 );
			  
			  bResult = ( ( oDate.getDate() == day ) && ( oDate.getMonth() == ( month - 1 ) ) );
			  
			  if (bResult){
				// Final check as SQL will not accept any dates earlier than 1/1/1753
				bResult = (year > 1752);
			  }
			  
			}
			
		}
		
		return(bResult);		
	}

	function afterMinDate(sValue, sMinDate, sMode)
	{
		return(compareDates(sValue, sMode, sMinDate, true));
	}
	
	function beforeMaxDate(sValue, sMaxDate, sMode)
	{
		return(compareDates(sValue, sMode, sMaxDate, false));
	}
	
	function compareDates(sValue, sMode, sCompareDate, bTestIfGreater)
	{
		//alert('compare dates [' + sValue + '] [' + sMode + '] [' + sCompareDate + '] [' + bTestIfGreater + ']');
		//added by Rory to validate whether a date is between given min and max values(if specified).
		var bResult = true;
		var chosenDate;
		var compareDate;
		var dateArray;
		var datePat = /^(.+)\/(.+)\/(.+)$/;
					
		if(sValue == '//'){
			sValue = '';
		}
		
		// manupulate compare date if necessary..
		/*
		sCompareDate = sCompareDate.toString().toLowerCase();

		if(sCompareDate.indexOf('today') > -1){
			day = 0,month = 0,year = 0;
			
			if(sCompareDate == 'today'){
				today = new Date();
			
				year = today.getFullYear();
				month = today.getMonth();
				day = today.getDate();
			}
			
			if(month < 10){
				month = '0' + month;
			}
			if(day < 10){
				day = '0' + day;
			}

			sCompareDate = year + '/' + month + '/' + day;
			alert('new compare date ' + sCompareDate);
		}
		*/
		
		
		
		if(!isDefined(sValue)) sValue = '' ;
		if(!isDefined(sCompareDate)) sMinDate = '' ;
		if(!isDefined(sMode)) sMode = '' ;
		if(!isDefined(bTestIfGreater)) bTestIfGreater = false ;
		
		//alert('compare dates [' + sValue + '] [' + sMode + '] [' + sCompareDate + '] [' + bTestIfGreater + ']');
		
		// added check for '' as isDate returns true for this
		if(sValue != ''){
			if(isDate(sValue, sMode))
			{
				//alert(' in date check ');
				dateArray = sValue.match(datePat);
				chosenDate = new Date(dateArray[3], dateArray[2]-1, dateArray[1]);
				
				if(sCompareDate != "" && isDate(sCompareDate, sMode))
				{
					dateArray = sCompareDate.match(datePat);
					compareDate = new Date(dateArray[3], dateArray[2]-1, dateArray[1]);
					
					if(bTestIfGreater)
					{
						//check if date is greater than the comparison date
						if (chosenDate < compareDate)
						{
							bResult = false;
						}				
					}
					else
					{
						//check if date is less than the comparison date
						if (compareDate < chosenDate)
						{
							bResult = false;
						}				
					}
				}
			}
		}
		return(bResult);			
	}
	
	
	
	function IsEmail(sEmail)
	{
		var bResult = true;
		
		if(isDefined(sEmail) && sEmail != ''){
		
			var filter = /^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/
			bResult = filter.test(sEmail)
			
		}
		
		return(bResult);
	}


	function IsPostCode(sPostCode)
	{
		var bResult = false;
		
		if(isDefined(sPostCode) && sPostCode != '') {
		
			// Allows no space in the postcode (use /^\w{1,2}\d{1,2}\w{0,1} \d\w{2}$/.test(sPostCode) if you want to enforce a space)
			if (/^\w{1,2}\d{1,2}\w{0,1}\s*\d\w{2}$/.test(sPostCode)){
				bResult = true;
			}
			
			if(sPostCode.toLowerCase() == 'bfpo'){
				bResult = true;
			}
		} else {
			
			bResult = true;
			
		}

		return bResult;
	}

	function isUrl(sValue) {
		
		var bResult = false;
		
		if(isDefined(sValue) && sValue != '') {
		
			sValue = String(sValue);
		
			bResult = /^http(s?):\/\/w*/ig.test(sValue);
			
			if(!bResult) bResult = /^mailto:\w*/ig.test(sValue);
					
	 		if(!bResult) bResult = /^ftp:\/\/\w*/ig.test(sValue);
				
		 } else {
			
			bResult = true;
			
		 }
		 
		 return bResult;
	}

	
	// check that a string only contains valid characters
	function checkValidChars(sValue,sValidChars){
		var iCount, sTempValue, bResult = true, sChar;
		
		if(!isInitialised(sValue)){
		
			return(false);
		
		}
		
		sTempValue = String(sValue);
		
		for(iCount = 0;iCount < sTempValue.length;iCount++) {
			sChar = sTempValue.substr(iCount,1);
			
			if(sValidChars.indexOf(sChar) == -1){
				bResult = false;
				break;
			} 
		}

		return(bResult);
	}

	// check that a string does not contain any invalid characters
	function checkInValidChars(sValue,sInValidChars){
		var iCount, sTempValue, bResult = true, sChar;
		
		if(!isInitialised(sValue)){
		
			return(false);
		
		}
		
		sTempValue = String(sValue);
		
		for(iCount = 0;iCount < sTempValue.length;iCount++){
			sChar = sTempValue.substr(iCount,1);
			
			if(sInValidChars.indexOf(sChar) != -1){
				bResult = false;
				break;
			}
		}
		return(bResult);
	}

function updateCategoryCheckboxesField(sElementName){
	// get all checkboxes for this field

	aCheckboxes = findFormElements(sElementName);	// Returns a string array of element id's starting with sElementName
	sResult = "";

	for(i = 0;i < aCheckboxes.length;i++){
	
		// Ignore main element
		if(aCheckboxes[i] != sElementName){
		
			oElement = genericGetElementByID(aCheckboxes[i]);

			if(oElement != null){
				sValue = genericGetElementValue(oElement);

				if(sValue == 'true'){
					
					nameBits = aCheckboxes[i].split('_');
					
					if(nameBits.length == 2){
						sResult += nameBits[1] + ',';
					}
				}
			}
		}
	}

	oElement = genericGetElementByID(sElementName);
	if(oElement != null){
		oElement.value = sResult;
	} else {
		//alert('error');
	}
	
	return(sResult);
}

function validate(bCurrentlyOK, sFormName, sElementName, sType, sError, sMode, sCompareField, sMinLength, sMaxLength, sMinValue, sMaxValue,showError){
//	alert(showError);
	if(!isDefined(showError)){
		showError = true;
	}
/*
alert(
	"bCurrentlyOK : "+ bCurrentlyOK  + "\r"+
	"sFormName : "+ sFormName + "\r"+
	"sElementName : "+ sElementName  + "\r"+
	"sType : "+ sType  + "\r"+
	"sError : "+ sError  + "\r"+
	"sMode : "+ sMode  + "\r"+
	"sCompareField : "+ sCompareField  + "\r"+
	"sMinLength : "+ sMinLength  + "\r"+
	"sMaxLength : "+ sMaxLength  + "\r"+
	"sMinValue : "+ sMinValue  + "\r"+
	"sMaxValue : "+ sMaxValue
);
*/
	var sValue = '';

		
	switch(sType){
		case 'file' :
			bCurrentlyOK = true;
			break;
		case 'date'	:
			//updateDateField(sElementName);
			
			bCurrentlyOK = validateElement(bCurrentlyOK,sFormName,sElementName,'fulldate',sError,sMode,'',sMinLength,sMaxLength,sElementName, sMinValue, sMaxValue,showError);
			
			
			
			break;

		case 'phone'	:
			//updateTelephoneField(sElementName);
			
			bCurrentlyOK = validateElement(bCurrentlyOK,sFormName,sElementName,'fulltelephone',sError,sMode,'',sMinLength,sMaxLength,sElementName, sMinValue, sMaxValue,showError);
			break;

		case 'categorycheckboxes'	:
			updateCategoryCheckboxesField(sElementName);
			break;


		case 'fulldate'	:
			//alert('date ' + sMinValue + ' ' + sMaxValue);
			updateDateField(sElementName);
			
			bCurrentlyOK = validateElement(bCurrentlyOK,sFormName,sElementName,'fulldate',sError,sMode,'',sMinLength,sMaxLength,sElementName+'_day', sMinValue, sMaxValue,showError);
			break;

		case 'fulltelephone'	:
			updateTelephoneField(sElementName);
			bCurrentlyOK = validateElement(bCurrentlyOK,sFormName,sElementName,'fulltelephone',sError,sMode,'',sMinLength,sMaxLength,sElementName+'_std', sMinValue, sMaxValue,showError);
			break;
		
		case 'plaindate'	:
		case 'dob'	:
			updateDateField(sElementName);

			var oElement = genericGetElementByID(sElementName);
		
			if(oElement != null){
				sValue = genericGetElementValue(oElement);
				
			}			
			bCurrentlyOK = validateElement(bCurrentlyOK,sFormName,sElementName+'_day','day',sError,sMode,'',sMinLength,sMaxLength,sElementName+'_day', sMinValue, sMaxValue,showError);
			if (bCurrentlyOK){
				bCurrentlyOK = validateElement(bCurrentlyOK,sFormName,sElementName+'_month','month',sError,sMode,'',sMinLength,sMaxLength,sElementName+'_month', sMinValue, sMaxValue,showError);

				if (bCurrentlyOK){
					bCurrentlyOK = validateElement(bCurrentlyOK,sFormName,sElementName+'_year','year',sError,sMode,'',sMinLength,sMaxLength,sElementName+'_year', sMinValue, sMaxValue,showError);
				}
			}
			
		break;

		case 'telephone'	:
			bCurrentlyOK = validateElement(bCurrentlyOK,sFormName,sElementName+'_std',sType,sError,sMode,'','3','20',sElementName+'_std', sMinValue, sMaxValue,showError);
			
			if (bCurrentlyOK){
				bCurrentlyOK = validateElement(bCurrentlyOK,sFormName,sElementName+'_number',sType,sError,sMode,'','3','20',sElementName+'_number', sMinValue, sMaxValue,showError);
			}
		break;
		
		case 'time'	:
			updateTimeField(sElementName);
			
			bCurrentlyOK = validateElement(bCurrentlyOK,sFormName,sElementName,'time',sError,sMode,'',sMinLength,sMaxLength,sElementName+'_hour', sMinValue, sMaxValue,showError);
			break;
		
		default	:
			bCurrentlyOK = validateElement(bCurrentlyOK, sFormName, sElementName, sType, sError, sMode, sCompareField,sMinLength,sMaxLength,sElementName, sMinValue, sMaxValue,showError) ;
		break ;
	
	}
	return(bCurrentlyOK);
}

function updateDateField(sFieldName){
	var oFullElement = null, oDayElement = null, oMonthElement = null, oYearElement = null;
	
	oFullElement = genericGetElementByID(sFieldName);
	oDayElement = genericGetElementByID(sFieldName + '_day');
	oMonthElement = genericGetElementByID(sFieldName + '_month');
	oYearElement = genericGetElementByID(sFieldName + '_year');
	
	// Ensure always in the format dd/mm/yyyy
	var sDay = oDayElement.value ;
	if (sDay.length == 1) {	sDay = '0'+sDay;}
	
	var sMonth = oMonthElement.value ;
	if (sMonth.length == 1) {sMonth = '0'+sMonth;}
	
	var sResult = sDay + '/' + sMonth + '/' + oYearElement.value;
	
	oFullElement.value = sResult;
	
	return(sResult);
}

function updateTimeField(sFieldName){
	var oFullElement = null, oDayElement = null, oMonthElement = null, oYearElement = null;
	
	oFullElement = genericGetElementByID(sFieldName);
	oHourElement = genericGetElementByID(sFieldName + '_hour');
	oMinuteElement = genericGetElementByID(sFieldName + '_minute');
	oSecondElement = genericGetElementByID(sFieldName + '_second');
	
	var sResult = oHourElement.value + ':' + oMinuteElement.value + ':' + oSecondElement.value;
	
	oFullElement.value = sResult;
	
	return(sResult);
}

function updateTelephoneField(sFieldName){
	var oFullElement = null, oSTDElement = null, oNumberElement = null;
	
	oFullElement = genericGetElementByID(sFieldName);
	oSTDElement = genericGetElementByID(sFieldName + '_std');
	oNumberElement = genericGetElementByID(sFieldName + '_number');
	
	oFullElement.value = oSTDElement.value + ' ' + oNumberElement.value;
	
	return(oFullElement.value);
}

function validateElement(bCurrentlyOK, sFormName, sElementName, sType, sError, sMode, sCompareField, sMinLength, sMaxLength, sFocusElement, sMinValue, sMaxValue,showError){
	if(!isDefined(showError)){
		showError = true;
	}

	var oElement = null, sValue = '', aBits = null, sInfo = '', sLengthCheck = '';

	if(!isInitialised(sMinLength)){
		sMinLength = '';		
	}

	if(!isInitialised(sMaxLength)){
		sMaxLength = '';		
	}
			
	if(!isInitialised(sMinValue)){
		sMinValue = '';		
	}
	
	if(!isInitialised(sMaxValue)){
		sMaxValue = '';		
	}
	
	if(sType.indexOf(':') > 0){
		aBits = sType.split(':');
		sType = aBits[0];
		sInfo = aBits[1];
	}
	
	if(bCurrentlyOK){
		oElement = genericGetElementByID(sElementName);
		
		if(oElement != null){
		
			sValue = genericGetElementValue(oElement);

			sLengthCheck = String(sValue).replace('\r','');
			sLengthCheck = sLengthCheck.replace('\n','');
			
			//alert(sElementName + "[" + sValue + "]");

			if(sMode == 'mandatory'){
				bCurrentlyOK = (sLengthCheck.replace(' ','') != '');
			}
			
			if(sValue != ''){
	
				if(sType == 'fulldate')
					{
						//run the date via a regex
						re = /^(((0[1-9]|[12]\d|3[01])\/(0[13578]|1[02])\/((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|[12]\d|30)\/(0[13456789]|1[012])\/((1[6-9]|[2-9]\d)\d{2}))|((0[1-9]|1\d|2[0-8])\/02\/((1[6-9]|[2-9]\d)\d{2}))|(29\/02\/((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))))$/;
						myArray = sValue.match(re);
						if((myArray == null) && (sMode == "mandatory"))
						{
						//Failed regex 
							sError = 'Please enter the date in a valid UK format e.g. 01/07/2008.'
							bCurrentlyOK = false;
						};

					}
	
				if(sMinLength != ''){
					if(Number(sLengthCheck.length) < Number(sMinLength)){
						sError = 'Please enter a minimum of ' + sMinLength + ' characters.'
						bCurrentlyOK = false;
					}
				}
			
				if(sMaxLength != ''){
					if(Number(sLengthCheck.length) > Number(sMaxLength)){
						var charactersOver = Number(sLengthCheck.length) - Number(sMaxLength);
						sError = 'Please enter a maximum of ' + sMaxLength + ' characters. You are currently ' + charactersOver + ' characters over the maximum length.'
						bCurrentlyOK = false;
					}
				}
				
				if(bCurrentlyOK){
					switch(sType){
					
						case 'alpha':
						
							bCurrentlyOK = checkValidChars(String(sValue),sAlphaChars);
							break;
							
						case 'alphanumeric':
						
							bCurrentlyOK = checkValidChars(String(sValue),sAlphaNumericChars);
							break;
							
						case 'compare':
						
							bCurrentlyOK = false ;
							
							if ((sCompareField != 'undefined') && (sCompareField != '')){
								var oCmpElement = genericGetElementByID(sCompareField);
								if(oCmpElement != null){
								
									bCurrentlyOK = (String(sValue) == String(genericGetElementValue(oCmpElement)))
										 	
								}else{
									sError = 'Invalid field name, '+sCompareField+', specified in form XML ';
								}
							}else{
								sError = 'Compare field name not specified in form XML.';
							}
							break;
							
						case 'day':
						
							if(sValue == 'dd' && sMode != 'mandatory'){
								
							} else {
								bCurrentlyOK = checkValidChars(String(sValue),sNumericChars) && ((Number(sValue) >= 1) && (Number(sValue) <= 31));
							}
							break;
							
						case 'email':

							bCurrentlyOK = IsEmail(String(sValue));
							break;
							
						case 'filename':
							
							bCurrentlyOK = checkValidChars(String(sValue),sFileNameChars);
							break;
							
						case 'fulldate':
							bCurrentlyOK = isDate(String(sValue),sMode);
							if(bCurrentlyOK)
							{
								if(afterMinDate(sValue, sMinLength, sMode) == false)
								{
									bCurrentlyOK = false;
									sError = "Date specified is before the allowed minimum: " + sMinLength;
								}
							}

							if(bCurrentlyOK)
							{
								if(beforeMaxDate(sValue, sMaxLength, sMode) == false)
								{
									bCurrentlyOK = false;
									sError = "Date specified is after the allowed maximum: " + sMaxLength;
								}
							}

							break;
							
						case 'fulltelephone':
							if(sMode != 'mandatory' && sValue == ' '){
								bCurrentlyOK = true;
							} else {
								bCurrentlyOK = isTelephone(String(sValue));
							}
							break;

						case 'month':
						
							if(sValue == 'mm' && sMode != 'mandatory'){
								
							} else {
								bCurrentlyOK = checkValidChars(String(sValue),sNumericChars) && ((Number(sValue) >= 1) && (Number(sValue) <= 12));		
							}
							break;
						
						case 'notdefault':
						
							if(sInfo != ''){
									bCurrentlyOK = (String(sValue) != String(sInfo));
							}
							break;
						
						case 'numeric':
						
							bCurrentlyOK = checkValidChars(String(sValue),sNumericChars);
							
							if (bCurrentlyOK && (sMinValue != '')){
								bCurrentlyOK = (Number(sValue) >= sMinValue) ;
							}
							
							if (bCurrentlyOK && (sMaxValue != '')){
								bCurrentlyOK = (Number(sValue) <= sMaxValue) ;
							}

							break;
						
						case 'password':
						
							// Security policies enforce password rules
							break;
						
						case 'postcode':
						
							bCurrentlyOK = IsPostCode(String(sValue));
							break;
							
						case 'telephone':
						
							bCurrentlyOK = checkValidChars(String(sValue),sTelephoneChars);
							break;
							
						case 'text'	:
						
							bCurrentlyOK = String(sValue) != '';
							break;
						
						case 'time':
						
							bCurrentlyOK = true;  // Yay!
							break;
							
						case 'year'	:

							if(sValue == 'yyyy' && sMode != 'mandatory'){
								
							} else {
								bCurrentlyOK = checkValidChars(String(sValue),sNumericChars);
							}

							break;

					}			
				}
			}
		}
		
		if(!bCurrentlyOK){	
			
			if ((sError == 'default') || (sError == '')){
				switch (sType){
					case 'telephone'	:	sError = 'Please enter a valid Telephone number.';		break;
					case 'email'		:	sError = 'Please enter a valid E-mail address.';		break;
					case 'postcode'		:	sError = 'Please enter a valid Post Code.';				break;
					case 'day'			:	sError = 'Please enter a valid Day.';					break;
					case 'month'		:	sError = 'Please enter a valid Month.';					break;			
					case 'year'			:	sError = 'Please enter a valid Year.';					break;
					case 'password'		:	sError = 'Please enter a valid Password.';				break;
					case 'compare'		:	sError = 'Fields do not match. Please reconfirm.';		break;
					case 'alphanumeric'	:	sError = 'Please enter alpha numeric characters only.';	break;
					case 'alpha'		:	sError = 'Please enter alpha characters only.';			break;
					case 'numeric'		:	sError = 'Please enter numeric characters only.';		break;
					default				:	sError = 'Invalid Entry.' ;								break;
				}
			}
				
			if(showError){
				alert(sError);
				
				if(isDefined(sFocusElement)){
					setFocusedElement(sFormName,sFocusElement);
				} else {
					setFocusedElement(sFormName,sElementName);
				}
				
			}
		}
	}
	
	return(bCurrentlyOK);
}

function checkDenyList(currentlyOK,formElementName,errorMessage,denyList){
	//alert('check deny list');
	var result = true;
	if(currentlyOK){
		var element = genericGetElementByID(formElementName);
		
		if(element != null){
			var elementValue = genericGetElementValue(element);	
			//alert(elementValue);
			
			for(var index=0;index < denyList.length;index++){
				//alert(denyList[index]);
				if(elementValue == denyList[index]){
					result = false;
					alert(errorMessage);
				}
			}
		}
	}
	
	return(result);
}

function checkAllowList(currentlyOK,formElement,denyList){
	alert('check deny list');
}


function validateValidChars(currentlyOK,formElementName,error,validChars){
	var result = true;
	var errorChars = "";
	if(currentlyOK){
		var element = genericGetElementByID(formElementName);
		if(element != null){
			var elementValue = genericGetElementValue(element);	
			
			for(var i=0;i < elementValue.length;i++){
				var char = elementValue.charAt(i);
				
				if(validChars.indexOf(char) == -1){
					result = false;
					errorChars += char;
				}			
			}
			
			if(!result){
				alert(error + " The following characters (" + errorChars + ") are not allowed");
			}
		}
	}
	return(result);
}


function setMultiEditHiddenField(elementName,elements,seperator){
	var hiddenElement = $(elementName);
	var value = '';
	
	for(var i=1;i<=elements;i++){
		var element = $(elementName + '_' + i);
		
		if(element){
			value += element.value;
		}
	}
	hiddenElement.value = value;
}