/*
 * On completion of finding a venue the user clicks Create my VenueMap
 * and this function will then open the step 2 procedure
 */
var show_Step2 =
{
	showLayer: function(layerToShow){
		var oldButtonDiv = document.getElementById('createVenueMap' + (parseInt(layerToShow)-1));
		var postcode = document.getElementById('postcode').value;
		var venueName = document.getElementById('venuename').value;
		var hotelId = document.getElementById('hotelid').value;
		if(document.getElementById('locateyourselfstep2').style.display == 'none' && document.getElementById('iframewrapper').style.display == 'none' && layerToShow == '2' && postcode != '' && venueName != '' && hotelId == ''){
			oldButtonDiv.src = "/images/create_grey_dark_grey.gif";
			document.getElementById('locateyourselfstep2').style.display = 'block';
			document.getElementById('iframewrapper').style.display = 'block';
			document.getElementById('createVenueMap2').style.display = 'block';
			document.getElementById('locate_bottom').src = "/images/locate_yourself_bottom2.png";

		} else if(document.getElementById('locateyourselfstep2').style.display == 'block' && document.getElementById('iframewrapper').style.display == 'none' && layerToShow == '2' && postcode != '' && venueName != '' && hotelId != ''){
			oldButtonDiv.src = "/images/create_grey_dark_grey.gif";
			document.getElementById('iframewrapper').style.display = 'block';
			document.getElementById('createVenueMap2').style.display = 'block';
			document.getElementById('locate_bottom').src = "/images/locate_yourself_bottom2.png";
		} else if(document.getElementById('locateyourselfstep2').style.display == 'block' && document.getElementById('iframewrapper').style.display == 'block' && layerToShow == '2' && postcode != '' && venueName != '' && hotelId != ''){
			oldButtonDiv.src = "/images/create_grey_dark_grey.gif";
			document.getElementById('createVenueMap2').style.display = 'block';
			document.getElementById('locate_bottom').src = "/images/locate_yourself_bottom2.png";
		} else if(document.getElementById('locateyourselfstep2').style.display == 'block' && document.getElementById('iframewrapper').style.display == 'block' && layerToShow == '2'){
			oldButtonDiv.src = "/images/create_grey_dark_grey.gif";
			document.getElementById('createVenueMap2').style.display = 'block';
			document.getElementById('locate_bottom').src = "/images/locate_yourself_bottom2.png";
		}

		if(document.getElementById('locateyourselfstep3').style.display == 'none' && layerToShow == '3'){
			if(document.getElementById('password').value != document.getElementById('repassword').value){
				alert("The passwords do not match!");
			} else if(document.getElementById('eventname').value == '' && document.getElementById('eventyes').isChecked == 'true'){
				document.getElementById('eventname').focus();
				alert("Please provide an Event name!");
			} else if(checkValidation(document.getElementById('emailaddress')) != ''){
				alert(checkValidation(document.getElementById('emailaddress')));
				document.getElementById('emailAddress').focus();
			} else {

				//document.getElementById('locateyourselfstep3').style.display = 'block';
				//document.getElementById('createVenueMap2').style.display = 'none';
				//document.getElementById('locate_bottom').src = "/images/locate_yourself_bottom.png";

				document.getElementById('clickme').style.display = 'none';
				document.getElementById('processing').style.display = 'block';

				var pageAction = document.getElementById('pageAction').value;
				var geoh = document.getElementById('geoh').value;
				var geov = document.getElementById('geov').value;
				var venueName = escape(document.getElementById('venuename').value);
				var postcode = document.getElementById('postcode').value;
				var emailAddress = document.getElementById('emailaddress').value;
				var password = document.getElementById('password').value;
				var eventName = escape(document.getElementById('eventname').value);
				var startDay = document.getElementById('startday').options[document.getElementById('startday').selectedIndex].value;
				var startMonth = document.getElementById('startmonth').options[document.getElementById('startmonth').selectedIndex].value;
				var endDay = document.getElementById('endday').options[document.getElementById('endday').selectedIndex].value;
				var endMonth = document.getElementById('endmonth').options[document.getElementById('endmonth').selectedIndex].value;
				var startCheck = document.getElementById('startcheck').checked ? 'NotKnown' : '';
				var endCheck = document.getElementById('endcheck').checked ? 'NotKnown' : '';
				var refCode = document.getElementById('referalcode').value;
				var mailTo = document.getElementById('mailTo').value;
				//var refCode = "";
				var hotelId = document.getElementById('hotelid').value;
				var hotelName = document.getElementById('hotelname').value;
				if(document.getElementById('zoomLevel').options){
					var zoomLevel = document.getElementById('zoomLevel').options[document.getElementById('zoomLevel').selectedIndex].value;
				} else {
					var zoomLevel = "6";
				}

				var url = "/Objects/SaveVenueMap.php?";
				url += "pageAction=" + pageAction + "&geoh=" + geoh + "&geov=" + geov + "&venuename=" + venueName;
				url += "&postcode=" + postcode + "&emailaddress=" + emailAddress + "&mailTo=" + mailTo + "&eventname=" + eventName;
				url += "&startday=" + startDay + "&startmonth=" + startMonth + "&endday=" + endDay + "&endmonth=" + endMonth;
				url += "&startcheck=" + startCheck + "&endcheck=" + endCheck + "&password=" + password + "&referalid=" + refCode + "&hotelid=" + hotelId + "%23" + hotelName;
				url += "&zoomLevel=" + zoomLevel;
				AjaxObject.ajaxinit(url);
			}
		}
	}
}

/*
 * This will check if the selected radio button is checked or not it will also
 * change the rest of the group depending on the value of this radio button
 */
var selectEvent =
{
	selectRadio: function(selectedButton, unselectedButton){
		if(selectedButton.isChecked == 'true'){
			selectedButton.src = "/images/radio_unchecked.gif";
			selectedButton.isChecked = 'false';
			unselectedButton.src = "/images/radio_checked.gif";
			unselectedButton.isChecked = 'true';
		} else {
			selectedButton.src = "/images/radio_checked.gif";
			selectedButton.isChecked = 'true';
			unselectedButton.src = "/images/radio_unchecked.gif";
			unselectedButton.isChecked = 'false';
		}

		if(selectedButton.id == 'eventyes' && selectedButton.isChecked == 'true' && document.getElementById('eventsSelection').style.display == 'none'){
			document.getElementById('eventsSelection').style.display = 'block';
			document.getElementById('createmap2').src = "/images/create_grey_dark_grey.gif";
			document.getElementById('userdetails').style.display = 'block';
			show_Step2.showLayer(2);
			/*if(document.getElementById('eventname').value != ''){
				UpdateFieldName.eventName(document.getElementById('eventname').value);
			}*/
		} else if(selectedButton.id == 'eventno' && selectedButton.isChecked == 'true' && document.getElementById('eventsSelection').style.display == 'none'){
			document.getElementById('eventsSelection').style.display = 'none';
			document.getElementById('userdetails').style.display = 'block';
			document.getElementById('createmap2').src = "/images/create_grey_dark_grey.gif";
			show_Step2.showLayer(2);
			//UpdateFieldName.eventName(document.getElementById('venuename').value);
			document.getElementById('eventname').value = "";
		}  else {
			document.getElementById('eventsSelection').style.display = 'none';
			document.getElementById('createmap2').src = "/images/create_green_dark_grey.gif";
			//UpdateFieldName.eventName(document.getElementById('venuename').value);
			document.getElementById('eventname').value = "";
		}
	}
}

/*
 * This will check if the selected radio button is checked or not it will also
 * change the rest of the group depending on the value of this radio button
 */
var selectHotel =
{
	selectRadio: function(selectedButton, radioId, parentWrapper){
		var allRadios = parentWrapper.getElementsByTagName('img');
		if(selectedButton.isChecked == 'false'){
			selectedButton.src = "/images/radio_checked.gif";
			selectedButton.isChecked = 'true';
		}

		for(var i = 0; i < allRadios.length; i++){
			if(allRadios[i].id != selectedButton.id && allRadios[i].id.indexOf('yeshotel_') > -1 && allRadios[i].isChecked == 'true'){
				allRadios[i].src = "/images/radio_unchecked.gif";
				allRadios[i].isChecked = "false";
			}
		}

		if(selectedButton.id.indexOf('yeshotel_') > -1 && selectedButton.isChecked == 'true' && (selectedButton.hotelId && selectedButton.hotelId != '' )){
			document.getElementById('hotelid').value = selectedButton.hotelId;
			document.getElementById('hotelname').value = escape(selectedButton.hotelTitle);
			document.getElementById('geoh').value = selectedButton.geoh;
			document.getElementById('geov').value = selectedButton.geov;
			document.getElementById('showHideIframe').style.display = "none";
		}  else {
			document.getElementById('hotelid').value = "";
			document.getElementById('hotelname').value = "";
			document.getElementById('showHideIframe').style.display = "block";
		}
		show_Step2.showLayer(2);
	}
}

/*
 * This will change the checkbox image depending on if its selected or not
 */
var dateNotKnown =
{
	setStartDate: function(checkBox){
		if(checkBox.ischecked == 'true'){
			checkBox.src = "/images/checkbox_unselected.gif";
			checkBox.ischecked = "false";
		} else {
			checkBox.src = "/images/checkbox_selected.gif";
			checkBox.ischecked = "true";
		}
	}
}

// Globals set for the key press timer
var SOfirstKeyTime = null;
var SOkeyPresses = 0;
var SOmaxAveragedKeyPresses = 8;
var SOminSearchChars = 6;
var SOtypeGapMS = null;
var SOlastKeyTime = null;
var SOmonitorPause = true;
var SOdefinitePauseMS = 2000;
var SOpauseMultiple = 3;
var SOpauseCheckMS = 400;

/*
 * THis object will check each key press of the keyboard in the postcode text field
 * and check it is either a number or alphanumeric character.
 */
var checkPostcode =
{

	monitorUserInput : function(){
		if (SOmonitorPause && SOkeyPresses > 0)
		{
			// If we get here, something's been typed which may be the end of what the user intends.

			var nowTime = (new Date()).getTime();

			var pauseThresholdMS = SOdefinitePauseMS;
			// Has the user typed enough for us to have determined typing speed? If so, we can override
			// the conservative default with our better idea of typing speed.

			if (SOtypeGapMS != null){
				pauseThresholdMS = Math.floor(SOtypeGapMS * SOpauseMultiple);
			}

			// Check to see if the time elapsed is long enough to constitute a pause:
			var paused = (nowTime - SOlastKeyTime) > pauseThresholdMS;

			if (paused){
				// If we've paused, then switch off monitoring and do a submission:
				SOmonitorPause = false;
				showPostcodeAjax.loader(document.getElementById('ajaxPostcode'));
				//document.getElementById('sendRequest').src = "/images/create_green_light_grey.gif";
				document.getElementById('postcode').blur();
				SOfirstKeyTime = null;
				SOkeyPresses = 0;
				SOmaxAveragedKeyPresses = 8;
				SOminSearchChars = 6;
				SOtypeGapMS = null;
				SOlastKeyTime = null;
				SOmonitorPause = true;
				SOdefinitePauseMS = 2000;
				SOpauseMultiple = 3;
				SOpauseCheckMS = 1000;
			}
		}

		// call this function again later:
		setTimeout( function(){checkPostcode.monitorUserInput()},SOpauseCheckMS);
	},

	keyValue: function(element, e){
		if(e == null){
			e = window.event;
		}

		var key=(typeof event != 'undefined') ? window.event.keyCode : e.keyCode;

		//Ok this is a big test an here are the keys associated:
		// 65 to 90 is a to z
		// 48 to 57 is 0 to 9
		// 13 is the enter key
		// 32 is the space bar
		// 16 is the shift key
		// 20 is the caps lock key
		if((key < 65 || key > 90) && (key < 48 || key > 57) && (key != 13) && (key != 32) && (key != 16) && (key != 20)){
			element.value = element.value.substring(0, element.value.length-1);
		}
		element.value = element.value;


		var nowTime = (new Date()).getTime();
		SOkeyPresses++;

		// if we've not recorded a sample yet, then initialise the sampling
		if (SOkeyPresses == 1){
			// initialise the sampling period
			SOfirstKeyTime = nowTime;
		} else if (SOkeyPresses == SOmaxAveragedKeyPresses){
			// work out the average key press speed
			SOtypeGapMS = Math.floor((nowTime - SOfirstKeyTime)/SOmaxAveragedKeyPresses);
		}

		// If we've got enough characters potentially to do a search, kick off the monitoring for the user pausing:
		if (SOkeyPresses == SOminSearchChars){
			checkPostcode.monitorUserInput();
		}

		SOlastKeyTime = nowTime;

	},

	checkNow : function(){
		var venueName = document.getElementById('venuename');

		if(venueName.value == ''){
			alert('Please supply a venue name');
			venueName.focus();
		} else if(venueName.value.indexOf('"') > -1){
			alert('Please remove double quotes from the venue name');
			venueName.focus();
		} else {
			showPostcodeAjax.loader(document.getElementById('ajaxPostcode'));
			document.getElementById('postcode').blur();
		}
	},

	resetHotels : function(formEle){
		formEle.value = "";
		document.getElementById('locateyourselfstep2').style.display = 'none';
		document.getElementById('hotellistwrapper').style.display = 'none';
		document.getElementById('iframewrapper').style.display = 'none';
		document.getElementById('createVenueMap2').style.display = 'none';
		document.getElementById('createVenueMap1').style.display = 'block';
		//document.getElementById('sendRequest').src = "/images/create_grey_light_grey.gif";
		document.getElementById('locate_bottom').src = "/images/locate_yourself_bottom.png";

		document.getElementById('hotellistwrapper').innerHTML = '';
	}
}

/*
 * This object will check when the user has entered a @ symbol and then change the create button to the
 * green version.  It will need to check if the event radios are yes or no also
 */
var CheckEmail =
{
	isEmail : function(thisField, e, radioButton){
		/*if(e == null){
			e = window.event;
		}

		var key=(typeof event != 'undefined') ? window.event.keyCode : e.keyCode;*/
		var letters = thisField.value

		// Check the key code is an @ symbol
		if(letters.indexOf("@") > -1){
			document.getElementById('createmap2').src = "/images/create_green_dark_grey.gif";
		} 
	}
}

/*
 * This object will either show or remove the spinning ajax image
 */
var showAjaxInput =
{
	loader: function(inputField){
		inputField.style.backgroundImage = "url(/images/ajax-loader-small.gif)";
		inputField.style.backgroundPosition = "right";
		inputField.style.backgroundRepeat = "no-repeat";
	},

	remove: function(inputField){
		inputField.style.backgroundImage = "";
	}
}

/*
 * This object will change the div image to the ajax loading image
 */
var showPostcodeAjax =
{
	loader: function(ajaxImage){
		if(ajaxImage.style.display == 'none'){
			ajaxImage.style.display = 'block';

			var title = escape(document.getElementById('venuename').value);
			//var refCode = document.getElementById('referalcode').value;
			// As we are on the onblur event we want to check the postcode with ajax
			var url = "/Objects/PostcodeChecker.php?postcode=" + document.getElementById('postcode').value + "&title=" + title + "&isHotelList=hotelList";
			AjaxObject.ajaxinit(url);
		}
	}
}


/*
 * This object will handle all the ajax requests
 */

var AjaxObject =
{

	ajaxHandle : null,
	success : false,
	items : null,

	// Ajax Initialiser
	ajaxinit : function( url )
	{
		// Add a random number to avoid pre-caching
		url += (url.indexOf('?') == -1 ? '?' : '&') + "rnd=" + Math.random();

		if ( window.XMLHttpRequest ) {
			AjaxObject.ajaxHandle = new XMLHttpRequest();
		} else if ( window.ActiveXObject ) {
			AjaxObject.ajaxHandle = new ActiveXObject("Microsoft.XMLHTTP");
		} else {
			alert("Your browser is not supported");
		}

		if ( AjaxObject.ajaxHandle ) {
			var l = this;
			AjaxObject.ajaxHandle.onreadystatechange = function() {
				l.ajaxReadyStateProcessor.call(l);
			}
			try{
				//searchAjaxIcon(this.fieldInput);
				//alert(url);
				AjaxObject.ajaxHandle.open("GET", url, true);
				AjaxObject.ajaxHandle.send(null);
			} catch (e){
				//alert( "HandleFailure: " +this.ajaxHandle.readyState + "--" + e.message + " -- " + e.lineNumber);
			}
		}
	},

	// Ajax On Ready State Processor
	ajaxReadyStateProcessor : function()
	{
		try
		{
			// alert("HEADERS: " + this.ajaxHandle.getAllResponseHeaders());
			if (AjaxObject.ajaxHandle.readyState == 4 && AjaxObject.ajaxHandle.status == 200)
			{
				try
				{
					if(AjaxObject.ajaxHandle.responseText != ''){
						eval(AjaxObject.ajaxHandle.responseText);
					}

				}
				catch(Exceptisad)
				{
					//alert(Exceptisad.message);
				}
			}
		}
		catch ( exception )
		{
			// alert("READYSTATE: " + this.ajaxHandle.readyState + " - " + exception.message + " -- " + exception.lineNumber);
		}
	}
};

var VenueMapsEditor =
{
	getPlacement : function( geoh, geov)
	{
		document.getElementById('geoh').value = geoh;
        document.getElementById('geov').value = geov;
	}


};

var CopyText =
{
	copy: function(inElement){
		if (inElement.createTextRange) {
			Copied = inElement.createTextRange();
			Copied.execCommand("Copy");
		} else {
			var flashcopier = 'flashcopier';
			if(!document.getElementById(flashcopier)) {
				var divholder = document.createElement('div');
				divholder.id = flashcopier;
				document.body.appendChild(divholder);
			}
			document.getElementById(flashcopier).innerHTML = '';
			var embed = document.createElement("embed");
			embed.src = "/flash/_clipboard.swf";
			embed.FlashVars = "clipboard=" + encodeURIComponent(inElement.value);
			embed.width = "0";
			embed.height = "0";
			embed.type = "application/x-shockwave-flash";
			document.getElementById(flashcopier).appendChild(embed);
		}
	}
};

var ChangeDate = {
	changeToFields : function(fromDayValue, fromMonthValue, toDayField, toMonthField){
		for(var i = 0; i < toDayField.length; i++){
			if(fromDayValue == toDayField[i].value){
				toDayField[i].selected = true;
			}
		}
		for(var i = 0; i < toMonthField.length; i++){
			if(fromMonthValue == toMonthField.options[i].value){
				toMonthField.options[i].selected = true;
			}
		}
	},
	checkDaysToMonths : function(fromDayValue, fromMonthValue, toDayValue, toMonthField){
		if(parseInt(toDayValue) < parseInt(fromDayValue) && fromMonthValue == toMonthField.options[toMonthField.selectedIndex].value && (toMonthField.selectedIndex + 1) < toMonthField.options.length){
			toMonthField.options[toMonthField.selectedIndex + 1].selected = true;
		}
	}
};

var UpdateFieldName = {
	venueName : function(name){

		if(document.getElementById('showHideIframe').style.display == 'block'){
			if(document.getElementById('eventsSelection').style.display == 'block'){
				var url = "/Objects/RefreshIframe.php?varNames[]=venueName&values[]=" + escape(document.getElementById("eventname").value);
				url += "&varNames[]=eventName&values[]=" + escape(document.getElementById("venuename").value + ", London " + document.getElementById('postcode').value.substring(0, document.getElementById('postcode').value.length - 3));
				AjaxObject.ajaxinit(url);
			} else {
				var url = "/Objects/RefreshIframe.php?varNames[]=venueName&values[]=" + escape(document.getElementById("venuename").value);
				url += "&varNames[]=eventName&values[]=London " + escape(document.getElementById('postcode').value.substring(0, document.getElementById('postcode').value.length - 3));
				AjaxObject.ajaxinit(url);
			}
		}
	},

	eventName : function(name){
			if(document.getElementById('eventsSelection').style.display == 'block'){
				var url = "/Objects/RefreshIframe.php?varNames[]=venueName&values[]=" + escape(document.getElementById("eventname").value);
				url += "&varNames[]=eventName&values[]=" + escape(document.getElementById("venuename").value + ", London " + document.getElementById('postcode').value.substring(0, document.getElementById('postcode').value.length - 3));
				AjaxObject.ajaxinit(url);
			} else {
				var url = "/Objects/RefreshIframe.php?varNames[]=venueName&values[]=" + escape(document.getElementById("venuename").value);
				url += "&varNames[]=eventName&values[]=London " + escape(document.getElementById('postcode').value.substring(0, document.getElementById('postcode').value.length - 3));
				AjaxObject.ajaxinit(url);
			}
	}
}

var UpdateIframe = {
	showHotels : function(showHotels){
			if(document.all){
				var VenueMap = document.getElementById('venuemap');
			} else {
				var VenueMap = window.frames['venuemap'];
			}

			if(showHotels.checked){
				VenueMap.hideShow("SHOW");
			} else {
				VenueMap.hideShow("HIDE");
			}
	},
	changeZoomLevel : function(selectObj){
			if(document.all){
				var VenueMap = document.getElementById('venuemap');
			} else {
				var VenueMap = window.frames['venuemap'];
			}
			VenueMap.changeZoomLevel(selectObj.options[selectObj.selectedIndex].value);
	}
}

function checkValidation(formInput) {

    if (typeof(formInput) != "object") {
        alert("Validation not supported on this browser.");
        return(false);
    }

    var message = '';

    if (stringEmpty(formInput.value)) {
        message = "Error! There is no input value entered.";
    } else if (noAtSign( formInput.value )) {
        message = "Error! The address \"" + formInput.value + "\" does not contain an '@' character.";
    } else if (nothingBeforeAt(formInput.value)) {
        message = "Error! The address \"" + formInput.value;
        message += "\" must contain at least one character before the '@' character";
    } else if (noLeftBracket(formInput.value)) {
        message = "Error! The address \"" + formInput.value;
        message += "\" contains a right square bracket ']',\nbut no corresponding left square bracket '['.";
    } else if (noRightBracket(formInput.value)) {
        message = "Error! The address \"" + formInput.value;
        message += "\" contains a left square bracket '[',\nbut no corresponding right square bracket ']'.";
    } else if (noValidPeriod(formInput.value)) {
        message = "Error! The address \"" + formInput.value + "\" must contain a period ('.') character.";
    } else if (noValidSuffix(formInput.value)) {
        message = "Error! The address \"" + formInput.value;
        message += "\" must contain a two, three or four character suffix.";
    }
	
	return message;
}

function checkValid (formField) {
    if ( checkValidation ( formField ) == true ) {
        alert ( 'E-Mail Address Validates OK' );
    }

    return ( false );
}

function stringEmpty (formField) {
    // CHECK THAT THE STRING IS NOT EMPTY
    if ( formField.length < 1 ) {
        return ( true );
    } else {
        return ( false );
    }
}

function noAtSign (formField) {
    // CHECK THAT THERE IS AN '@' CHARACTER IN THE STRING
    if (formField.indexOf ('@', 0) == -1) {
        return ( true )
    } else {
        return ( false );
    }
}

function nothingBeforeAt (formField) {
    // CHECK THERE IS AT LEAST ONE CHARACTER BEFORE THE '@' CHARACTER
    if ( formField.indexOf ( '@', 0 ) < 1 ) {
        return ( true )
    } else {
        return ( false );
    }
}

function noLeftBracket (formField) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN CHECK FOR LEFT BRACKET
    if ( formField.indexOf ( '[', 0 ) == -1 && formField.charAt (formField.length - 1) == ']') {
        return ( true )
    } else {
        return ( false );
    }
}

function noRightBracket (formField) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN CHECK FOR RIGHT BRACKET
    if (formField.indexOf ( '[', 0 ) > -1 && formField.charAt (formField.length - 1) != ']') {
        return ( true );
    } else {
        return ( false );
    }
}

function noValidPeriod (formField) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN WE ARE NOT INTERESTED
    if (formField.indexOf ( '@', 0 ) > 1 && formField.charAt (formField.length - 1 ) == ']')
        return ( false );

    // CHECK THAT THERE IS AT LEAST ONE PERIOD IN THE STRING
    if (formField.indexOf ( '.', 0 ) == -1)
        return ( true );

    return ( false );
}

function noValidSuffix(formField) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN WE ARE NOT INTERESTED
    if (formField.indexOf('@', 0) > 1 && formField.charAt(formField.length - 1) == ']') {
        return ( false );
    }

    // CHECK THAT THERE IS A TWO OR THREE CHARACTER SUFFIX AFTER THE LAST PERIOD
    var len = formField.length;
    var pos = formField.lastIndexOf ( '.', len - 1 ) + 1;
    if ( ( len - pos ) < 2 || ( len - pos ) > 4 ) {
        return ( true );
    } else {
        return ( false );
    }
}