function form_validation()
{
	if(ValidateForm("frm") == true)
	{
		//The form has passed validation
		document.frm.submit();
		//this.location.href='ApplicationFormAddToDB.aspx'+addFormToQueryString('frm')+'&page=0';
	}
	else
	{
		//The form has not passed validation
		return false;
	}
}

/*****************************************************************************
 * Function:		listPop
 * Description:		Populates an option list dynamically from an array.
 *
 ****************************************************************************/
function listPop( arrayName, selected, noValueText, keepWhiteSpace )
{
	//alert( "DEBUG: listPop( "+arrayName+","+ selected+","+noValueText+ ")" )
	var array = eval( arrayName );
	if ( array == null )
	{
		alert( "Error: listPop() Could not find array '" + arrayName + "'."  ); return;
	}
	
	if ( selected == null ) { selected=""; }
	else { 	if(keepWhiteSpace == null) selected = selected.replace(/\s*/g,"");}	// Get rid of white space.
	
	selected = selected.split(',');
	
	if (( noValueText != null ) && ( noValueText.length > 0 ))
	{
	  document.write('<option value=""');
	  if ( selected.length == 0 ) { document.write( ' selected' );} 
	  document.write('>' + noValueText + '</option>')
	}
	
	for ( var i = 0; i < array.length; i=i+2 ){
		if (array[i] != null && array[i] != "") {
			document.write('<option value="' + array[i] + '"')
			var listItem = array[i].replace(/^\s*/g,"")
			for ( var j = 0 ; j < selected.length ; j++ ){
				if( listItem == selected[j] ) document.write(' selected')
			}
			document.write('>' + array[i + 1] + '</option>')
		}
	}
}

/*****************************************************************************
 * Function:		IndexChange
 * Description:		redirects to the markets page with the correct group selected
 *
 ****************************************************************************/
function IndexChange(supergroupid){
	if(location.pathname.indexOf('index.aspx') == -1)
		location = "index.aspx?sg=" + supergroupid;
	else{
		location = location.pathname + "?sg=" + supergroupid;
	}
}

/*****************************************************************************
 * Function:		selectKeyDown
 * Description:		Reads keystrokes to select an option in a select box
 *					Note sstr is defined outside of the function so that
 *					more than one keystroke can be concatenated
 ****************************************************************************/
var sstr = '';

function selectKeyDown(s){
	var c, i;var x = false;if(event.keyCode==13){s.blur;return;}c = unescape('%' + event.keyCode.toString(16));sstr = sstr + c;for(i = 0;i<s.length;i++){if(s.options[i].text.slice(0,sstr.length).toLowerCase() == sstr){s.selectedIndex = i;x = true;break;}}if(!x){sstr='';s.value=sstr}
}


/*****************************************************************************
 * Function:		getQueryString
 * Description:		returns Querystring of current href (including leading '?')
 ****************************************************************************/
function getQueryString()
{
	var href=document.location.href;
	var qs='';
	if(href.indexOf('?')!=-1)
	{
		qs=href.substr(href.indexOf('?'));
		//alert(qs);
	}
	return qs;
}

function getQueryMsg()
{
	var href=document.location.href;
	var qs='';
	if(href.indexOf('=')!=-1)
	{
		qs=href.substr(href.indexOf('='));
		qs=qs.slice(1);
	}
	return qs;
}

function getQueryStringValue(name)
{
	var href=document.location.href;
	var qs='';
	var prefix='&';

	if(href.indexOf('?'+name+'=')!=-1)
	{
		prefix='?'
	}

	if(href.indexOf(prefix+name+'=')!=-1)
	{
		qs=href.substr(href.indexOf(prefix+name+'=')+1);

		if(qs.indexOf('&') != -1)
		{
			qs=qs.substr(0, qs.indexOf('&'));
		}

		qs=qs.substr(qs.indexOf('=')+1);
	}

	return unescape(qs);
}

function isDigit (c){
	if (c=="."  || c==":" || c=="," || c==" ")return true;
	return ((c >= "0") && (c <= "9"));
	}
	function IsNumeric(s){
	if(s.length == 1 && s == "-") return false;
	for (i = 0; i < s.length; i++)
	{
	var c = s.charAt(i);
	if (!isDigit(c))return false;
	}
	return true;
	}
function IsInteger(n){
	if(n != parseInt(n))
	return false;
	return true;
	}
function FocusField(f){
	//if((f.type == "text")){
	f.focus();if(eval(f.type == "text"))f.select();
	//}
}



/*
	function to extract every field in a form and add it to a string in the querystring (&x=y) format
*/
function addFormToQueryString(formName)
{
	var fields = eval('document.'+formName+'.elements');
	var qs=getQueryString();
	for(var i = 0;i<fields.length;i++)
	{
		var currField=fields[i];
		if(qs.length==0)qs=qs+'?';
		else	qs=qs+'&';
		qs=qs+currField.name+'='+currField.value;
	}
	//alert(qs.length);
	return qs;
}


/*
	function to validate every field in a form - 
	if it has a isMandatory attribute set to 'yes' then it checks for a value
	if it has an isNumeric attribute set to 'yes' then it checks for a numeric value
*/
function ValidateForm(formName)
{
	var fields = eval('document.'+formName+'.elements');

	for(var i = 0;i<fields.length;i++)
	{
		var currField=fields[i];
		var desc = "";
		desc = currField.getAttribute('desc');
		
		if(desc=="") {
			desc=currField.name;
		}

		var isMandatory = currField.getAttribute('isMandatory');
		var isCheckBox = currField.getAttribute('isCheckBox');
		var isLinkedWith = currField.getAttribute('isLinkedWith');
		var customError = currField.getAttribute('customError');
		var minChars = currField.getAttribute('minChars');
		var isNumeric = currField.getAttribute('isNumeric');
		var isInternationalPhoneNo = currField.getAttribute('isInternationalPhoneNo');
		var isEqualTo = currField.getAttribute('isEqualTo');
		var isDate = currField.getAttribute('isDate');
		var isEmail = currField.getAttribute('isEmail');
		var isUsername = currField.getAttribute('isUsername');
		var CustomManditory = currField.getAttribute('CustomManditory');	
		
		if(isMandatory)
		{
			if(isMandatory=='yes')
			{
				if(isCheckBox)
				{
					if(currField.checked == false)
					{
						alert('You must ' + desc);
						FocusField(currField);
						return false;
					}
				}

				if(currField.value.replace(' ','') == '')
				{
					alert('You need to enter a valid value for ' + desc);
					FocusField(currField);
					return false;
				}
			}
		}

		if(CustomManditory!='')
		{	
				
			
			if(eval(CustomManditory)==true)
			{
			
				if(isCheckBox)
				{
					if(currField.checked == false)
					{
						alert('You must ' + desc);
						FocusField(currField);
						return false;
					}
				}

				if(currField.value.replace(' ','') == '')
				{
					alert('You need to enter a valid value for ' + desc);
					FocusField(currField);
					return false;
				}
			}
		}


		if(isLinkedWith)
		{
			if(eval(isLinkedWith)==0)
			{
				if(customError)
				{
					alert(customError);
				}
				else
				{
					alert(desc + ' must be completed with a valid value');
				}

				FocusField(currField);
				return false;
			}
		}

		//only perform further validation if we have a value
		if(currField.value.replace(' ','') != '' || (isCheckBox && currField.checked == true))
		{
			if(minChars)
			{
				if(currField.value.length<minChars)
				{
					alert('The value for ' + desc + ' must contain at least '+minChars+' characters.');
					FocusField(currField);
					return false;
				}
			}
			
			if(isNumeric)
			{
				if(isNumeric=='yes')
				{
					if(!IsNumeric(currField.value))
					{
						alert('The value for ' + desc + ' must be numeric');
						FocusField(currField);
						return false;
					}
				}	
			}

			if(isInternationalPhoneNo)
			{
				if(isInternationalPhoneNo=='yes')
				{
					//Analyse the value of this field and make sure that it has only numbers
					//and certain symbols.
					if(checkInternationalPhone(currField.value)==false && currField.value!='')
					{
						alert(desc + ' can only contain numbers and symbols \'()- \' and must have at least '+minDigitsInIPhoneNumber+' digits.');
						FocusField(currField);
						return false
					}
				}
			}

			if(isEqualTo)
			{
				if(currField.value!=fields[isEqualTo].value)
				{
					alert(desc + ' must match');
					FocusField(currField);
					return false;
				}
			}

			if(isDate)
			{
				if(isDate=='yes')
				{
					if(!validateDate(currField.value))
					{
						alert(desc + ' must be a valid date in dd/mm/yyyy format');
						FocusField(currField);
						return false;
					}
				}
			}
			
			if(isEmail)
			{
				if(isEmail=='yes')

				{
					if(!IsEmail(currField.value))
					{
						alert(desc + ' must be a valid email address');
						FocusField(currField);
						return false;
					}
				}
			}
			if(isUsername)
			{
				if(isUsername=='yes')
				{
					
					if(IsInteger(currField.value))
					{
						alert(desc + ' Names must be non numeric');
						FocusField(currField);
						return false;
					}
				}
			}
		}
	}


	return true;
}

/*****************************************************************************
 * Function:		checkInternationalPhone
 * Description:		Validates input to see if the string contains only numbers and symbols
 ****************************************************************************/

var digits = "0123456789";
var phoneNumberDelimiters = "()- ";
var validWorldPhoneChars = phoneNumberDelimiters + "+";
var minDigitsInIPhoneNumber = 10;

function isInteger(s)
{   var i;
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function IsEmail(emailStr)
{
     var emailReg = "^[\\w-_\.]*[\\w-_\.]\@[\\w]\.+[\\w]+[\\w]$";
     var regex = new RegExp(emailReg);
     return regex.test(emailStr);
}

function stripCharsInBag(s, bag)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function checkInternationalPhone(strPhone){
s=stripCharsInBag(strPhone,validWorldPhoneChars);
return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}

/*****************************************************************************
 * Function:		validateDate
 * Description:		Checks date to make sure it is valid
 ****************************************************************************/

function validateDate(thisdate){
	var theDay, theMonth, theYear, dateArr;
	//alert(thisdate)
	dateArr = thisdate.split("/");
	theDay = dateArr[0];
	theMonth = dateArr[1];
	theYear = dateArr[2];

	if(!(theMonth >=1 && theMonth <=12))
		{
			return false;
		}
	
	if(!(theYear>=1900))
	{
		return false;
	}

	if(theMonth == 1 || theMonth == 3 || theMonth == 5 || theMonth == 7 || theMonth == 8 || theMonth == 10 || theMonth == 12)
		{
			if(!(theDay >= 1 && theDay <= 31))
			{
				return false;
			}
		}
		else if(theMonth == 2)
		{
			if(theDay == 29 && (!((theYear % 4) == 0)))
			{
				return false; //leap year check
			}
			
			if(!(theDay >= 1 && theDay <=29))
			{
				return false;//average feb 
			}
			else
			{
				return true;
			}
		}
		else
		{
			if(!(theDay >= 1 && theDay <= 30))
			{
				return false;
			}
		}
	return true;
}

//only checks for distance of 18 years at the moment - not very generic, should be rewritten to take distance as a parameter, and distance type (so we can do any distance in seconds or years, or days, whatever!)
//also this doesn't yet reject for dates between 17.5 and 18 years ago by the looks off things
function checkDateDistance()
{
	//Set the two dates
	today = new Date();
	var selectedDate = new Date(document.frm.year_dob.value, document.frm.month_dob.value - 1, document.frm.day_dob.value)
	var one_day=1000*60*60*24

	if(Math.ceil((today.getTime()-selectedDate.getTime())/(one_day)) >= (365*18))
	{
		return true;
	}
	else
	{
		return false;
	}
}

function validatePassword(SiteMode,Password){
	var validPass = true;
	var foundNumber = false;
	
	if ((Password.length < 6)||(Password.length > 20)){
		validPass = false;
	}
	if (SiteMode != "SIM"){
		for (var j = 0 ; j < Password.length ; j++){
			if (IsNumeric(Password.charAt(j))){
				foundNumber = true;
			}
		}
		if (foundNumber==false){
			validPass = false;
		}
	}
	return validPass;
}

function IsNumeric(sText){
	var ValidChars = "0123456789.";
	var IsNumber=true;
	var Char;
	for (i = 0; i < sText.length && IsNumber == true; i++) { 
		Char = sText.charAt(i); 
		if (ValidChars.indexOf(Char) == -1) {
			IsNumber = false;
		}
	}
	return IsNumber;
 }

function formatNumber(total,decimals)
 {
      var num = "" + parseFloat(total);
      if ( num == "NaN" )
         return num = "0.00";

      if ( num.indexOf(".") == -1 )
         return num += ".00";

      return (num+"0").substring(0,num.indexOf(".")+3);
}

function hideObject(divName)
{
	document.getElementById(divName).style.display = "none";
}


function showObject(divName)
{
	document.getElementById(divName).style.display = "block";
}

function changeDate(formElement)
{
	var yearSelect = document.getElementById(formElement);

	yearSelect.selectedIndex = yearSelect.length - 1;
}

			function resizeWindow(sIFrameLocation)
			{
				if(is_ie != false)
				{
					var pageLocation = ""+sIFrameLocation
					var resizePages = new Array('applicationform.html','applicationform1.html','applicationform2.html','applicationform3.html','applicationform4.html','applicationform5.html','applicationform6.html','applicationform7.html');
					var IFrame = document.getElementById('text');
					for (var i = 0; i < resizePages.length; i++)
					{
						if(pageLocation.indexOf(resizePages[i]) != -1)
						{
							document.getElementById('menuDIV').style.height = "550px";
							IFrame.style.height = "550px";
							break;
						}
						else
						{
							document.getElementById('menuDIV').style.height = "100%";
							IFrame.style.height = "380px";
						}
					}
				}
			}
			
function focusOnFirstField(){
	var element, tmpElement;
	for(var i=0; i < document.forms[0].elements.length; i++){
		tmpElement = document.forms[0].elements[i];
		if((tmpElement.type != 'hidden') && (tmpElement.disabled != true) && (tmpElement.readOnly != true)){tmpElement.focus(); break;}
	}
}

function GenerateYearCombo(numyears,NoneText,selectedYear){
	var curdate = new Date();
	var startYear = curdate.getFullYear();
	var reverse = false;
	if (eval(selectedYear) == null){
		selectedYear = 0;
	}
	if(numyears < 0){
		reverse = true;
	}
	
	if (NoneText != "" && typeof(NoneText) != 'undefined'){
		document.write('<option value="">'+NoneText+'</option>');
	}
	if (reverse==true){
		var i = startYear+numyears;
		for(i; i <= (startYear); i++){
			document.write('<option value="'+i+'"');
			if (selectedYear==i){
				document.write(' selected')
			}
			document.write('>'+i+'</option>');
		}
	}else{
		var i = startYear;
		for(i; i < (startYear+numyears); i++){
			document.write('<option value="'+i+'"');
			if (selectedYear==i){
				document.write(' selected')
			}
			document.write('>'+i+'</option>');
		}
	}
}
//-->