	// -----------------------------------------------------------------------------
	//	General Routines
	// -----------------------------------------------------------------------------

	function isNull(argvalue) {
		if (typeof argvalue + "" == "undefined" || argvalue === null || argvalue == '')
			return true;
		else
			return false;
	}

	function hideLayer( id ){
		if(document.getElementById){
			if (!isNull( document.getElementById(id) )) {
				document.getElementById(id).style.visibility = "hidden";
				document.getElementById(id).style.display = "none";
			}
		} else if (document.all) {
			if (!isNull( document.all[id] )) {
				document.all[id].style.visibility = "hidden";
				document.all[id].style.display = "none";
			}
		} else if (document.layers){
			if (!isNull( document.layers[id] )) {
				document.layers[id].display = "hidden";
			}
		}
	}

	// Show DIV layer
	function showLayer( id ){
		if(document.getElementById){
			if (!isNull( document.getElementById(id) )) {
				document.getElementById(id).style.visibility = "visible";
				document.getElementById(id).style.display = "block";
			}
		} else if (document.all) {
			if (!isNull( document.all[id] )) {
				document.all[id].style.visibility = "visible";
				document.all[id].style.display = "block";
			}
		} else if (document.layers){
			if (!isNull( document.layers[id] )) {
				document.layers[id].display = "visible";
			}
		}
	}

    // List an Ojects properties
    function dumpObject(o, objName) {
            var result = ""
            count = 0
            for (var i in o) {
                    result += o + "." + i + "=" + o[i] + "\n"
                    count++
                    if (count == 25) {
                            alert(result)
                            result = ""
                            count = 0
                    }
            }
            alert(result)
    }

	// Remove the leading space/s of an argument.
	function ltrim(argvalue) {
		while (1) {
			if (argvalue.substring(0, 1) != " ")
				break;
			argvalue = argvalue.substring(1, argvalue.length);
		}
		return argvalue;
	}

	// Remove the trailing space/s of an argument.
	function rtrim(argvalue) {
		while (1) {
			if (argvalue.substring(argvalue.length - 1, argvalue.length) != " ")
				break;
			argvalue = argvalue.substring(0, argvalue.length - 1);
		}
		return argvalue;
	}

	// Remove both the leading and the trailing space/s of an argument.
	function trim(argvalue) {
		var tmpstr = argvalue;
		var tmpstr = ltrim(tmpstr);
		return rtrim(tmpstr);
	}

	// -----------------------------------------------------------------------------
	//	State Management Routines
	// -----------------------------------------------------------------------------

	function StateManager(eventObj) {
		var formObj = eventObj.form;
		if (typeof formObj + "" == "undefined" || formObj == null || formObj == '') {
			var formObj = eval('document.' + eventObj.name);
		}

		switch (eventObj.name) {
			case "mandatory_info":
				// If mandatory_info screen, ensure all dropdowns are specified
				if (typeof formObj.mylanguage.options + "" != "undefined" && (
					!formObj.mylanguage.selectedIndex ||
					!formObj.mylanglevel.selectedIndex ||
					!formObj.mylocation.selectedIndex ||
					!formObj.mycoursetype.selectedIndex ||
					!formObj.mystartdate.selectedIndex ||
					!formObj.mynumweeks.selectedIndex )) {
					alert(TRANSLATION_SPECIFY_ALL_FIELDS);
					return false;
				}
				else {
					formObj.pn.value = '2';
					formObj.target='_top';

					// move user to secure zone for remaining pages.
					// Verify that languagesabroad.com is prefixed by www
					if (document.location.hostname == 'languagesabroad.com') {
						formObj.action='https://www.languagesabroad.com' + document.location.pathname;
					}
					else {
						//lmit.Apr18.2010 - testing
						formObj.action='https://' + document.location.hostname + document.location.pathname;
						//formObj.action='http://' + document.location.hostname + document.location.pathname;
					}
				}
				break;

			case "mylocation":
				if ( eventObj.selectedIndex && trim(eventObj.options[eventObj.selectedIndex].value) == '') {
					for (i = eventObj.options.length - 1; i; i--) {
						if (eventObj.options[i].defaultSelected) {
							eventObj.options[i].selected = true;
							return true;
						}
					}
					eventObj.options[0].selected = true;
					break;
				}
				ValidateDependencies(eventObj);
				formObj.submit();
				break;

			case "mystartdate":
				if ( eventObj.selectedIndex && trim(eventObj.options[eventObj.selectedIndex].value) == '') {
					for (i = eventObj.options.length - 1; i; i--) {
						if (eventObj.options[i].defaultSelected) {
							eventObj.options[i].selected = true;
							return true;
						}
					}
					eventObj.options[0].selected = true;
					break;
				}
				ValidateDependencies(eventObj);
				formObj.submit();
				break;

			case "page_2":
				// Perform page validation
				var isPriceChecked = 0;
				for (var i = 0; i < eventObj.length; i++) {
					if (eventObj[i].checked)
						var isPriceChecked = i+1;
				}
				if (!isPriceChecked) {
					alert(TRANSLATION_CHOOSE_PRICE_PACKAGE);
					return false;
				}
				formObj.submit();
				break;

			case "page_3":
				// Nothing to validate, go to page 4
				formObj.submit();
				break;

			case "page_4":
				// Verify that student has checked the terms and conditions checkbox.
				if (!terms_and_cond.document.forms[0].agree_terms.checked) {
					alert(TRANSLATION_MUST_AGREE_TO_TERMS);
					return false;
				}
				formObj.submit();
				break;

			case "page_5":
				// Create Javascript Objects out of PHP Array names
				var firstname_Obj = formObj.elements['personalinfo[firstname]'];
				var lastname_Obj = formObj.elements['personalinfo[lastname]'];
				var address_Obj = formObj.elements['personalinfo[address]'];
				var apt_Obj = formObj.elements['personalinfo[apt]'];
				var city_Obj = formObj.elements['personalinfo[city]'];
				var stateprov_Obj = formObj.elements['personalinfo[stateprov]'];
				var country_Obj = formObj.elements['personalinfo[country]'];
				var zipcode_Obj = formObj.elements['personalinfo[zipcode]'];
				var sexismale_Obj = formObj.elements['personalinfo[sexismale]'];
				var dob_m_Obj = formObj.elements['personalinfo[dob_m]'];
				var dob_d_Obj = formObj.elements['personalinfo[dob_d]'];
				var dob_y_Obj = formObj.elements['personalinfo[dob_y]'];
				var homenum_Obj = formObj.elements['personalinfo[homenum]'];
				var worknum_Obj = formObj.elements['personalinfo[worknum]'];
				var faxnum_Obj = formObj.elements['personalinfo[faxnum]'];
				var email_Obj = formObj.elements['personalinfo[email]'];
				var citizenship_Obj = formObj.elements['personalinfo[citizenship]'];
				var howheard_Obj = formObj.elements['personalinfo[howheard]'];
				var emergencyname_Obj = formObj.elements['personalinfo[emergencyname]'];
				var emergencynum_Obj = formObj.elements['personalinfo[emergencynum]'];

				if (trim(firstname_Obj.value) == "" || trim(firstname_Obj.value).length < 2) {
					alert(TRANSLATION_NEED_FIRSTNAME);
					firstname_Obj.focus();
					firstname_Obj.select();
					return false;
				}
				else if (trim(lastname_Obj.value) == "" || trim(lastname_Obj.value).length < 2) {
					alert(TRANSLATION_NEED_LASTNAME);
					lastname_Obj.focus();
					lastname_Obj.select();
					return false;
				}
				else if (!isWords(firstname_Obj.value)) {
					alert(TRANSLATION_BAD_FIRSTNAME);
					firstname_Obj.focus();
					firstname_Obj.select();
					return false;
				}
				else if (!isWords(lastname_Obj.value)) {
					alert(TRANSLATION_BAD_LASTNAME);
					lastname_Obj.focus();
					lastname_Obj.select();
					return false;
				}
				else if (trim(address_Obj.value) == "" || trim(address_Obj.value).length < 5) {
					alert(TRANSLATION_SPECIFY_ADDRESS);
					address_Obj.focus();
					address_Obj.select();
					return false;
				}
				else if (trim(city_Obj.value) == "" || trim(city_Obj.value).length < 3) {
					alert(TRANSLATION_SPECIFY_CITY);
					city_Obj.focus();
					city_Obj.select();
					return false;
				}
				else if (trim(stateprov_Obj.value) == "" || trim(stateprov_Obj.value).length < 2) {
					alert(TRANSLATION_SPECIFY_STATE);
					stateprov_Obj.focus();
					stateprov_Obj.select();
					return false;
				}
				else if (country_Obj.options[0].selected) {
					alert(TRANSLATION_SPECIFY_COUNTRY);
					country_Obj.focus();
					return false;
				}
				else if (trim(zipcode_Obj.value) == "" || trim(zipcode_Obj.value).length < 4) {
					alert(TRANSLATION_SPECIFY_POSTAL);
					zipcode_Obj.focus();
					zipcode_Obj.select();
					return false;
				}
				else if (!isZipcode(zipcode_Obj.value)) {
					alert(TRANSLATION_BAD_POSTAL);
					zipcode_Obj.focus();
					zipcode_Obj.select();
					return false;
				}
				else if (sexismale_Obj.options[0].selected) {
					alert(TRANSLATION_SPECIFY_SEX);
					sexismale_Obj.focus();
					return false;
				}
				else if ( dob_m_Obj.options[0].selected || dob_d_Obj.options[0].selected || dob_y_Obj.options[0].selected ) {
					alert(TRANSLATION_SPECIFY_DOB);
					if ( dob_m_Obj.options[0].selected ) {
						dob_m_Obj.focus();
					}
					else if ( dob_d_Obj.options[0].selected ) {
						dob_d_Obj.focus();
					}
					else if ( dob_y_Obj.options[0].selected ) {
						dob_y_Obj.focus();
					}
					return false;
				}
				else if (trim(homenum_Obj.value) != "" && !isPhoneFax(homenum_Obj.value)) {
					alert(TRANSLATION_BAD_HOMEPHONE);
					homenum_Obj.focus();
					homenum_Obj.select();
					return false;
				}
				else if (trim(worknum_Obj.value) != "" && !isPhoneFax(worknum_Obj.value)) {
					alert(TRANSLATION_BAD_WORKPHONE);
					worknum_Obj.focus();
					worknum_Obj.select();
					return false;
				}
				else if (trim(homenum_Obj.value) == "" && trim(worknum_Obj.value) == "") {
					alert(TRANSLATION_SPECIFY_PHONE);
					homenum_Obj.focus();
					homenum_Obj.select();
					return false;
				}
				else if (trim(faxnum_Obj.value) != "" && !isPhoneFax(faxnum_Obj.value)) {
					alert(TRANSLATION_BAD_FAX);
					faxnum_Obj.focus();
					faxnum_Obj.select();
					return false;
				}
				else if (!isEmail(email_Obj.value)) {
					alert(TRANSLATION_SPECIFY_EMAIL);
					email_Obj.focus();
					email_Obj.select();
					return false;
				}
				else if (citizenship_Obj.options[0].selected) {
					alert(TRANSLATION_SPECIFY_CITIZENSHIP);
					citizenship_Obj.focus();
					return false;
				}
				else if (howheard_Obj.options[0].selected) {
					alert(TRANSLATION_SPECIFY_HOWHEARD);
					howheard_Obj.focus();
					return false;
				}
				else if (trim(emergencyname_Obj.value) == "" || trim(emergencyname_Obj.value).length < 3) {
					alert(TRANSLATION_SPECIFY_ALERT_NAME);
					emergencyname_Obj.focus();
					emergencyname_Obj.select();
					return false;
				}
				else if (trim(emergencynum_Obj.value) == "" || !isPhoneFax(emergencynum_Obj.value)) {
					alert(TRANSLATION_SPECIFY_ALERT_PHONE);
					emergencynum_Obj.focus();
					emergencynum_Obj.select();
					return false;
				}

				formObj.submit();
				break;

			case "page_6":
				formObj.submit();
				break;

			case "page_7":
				document.location.href = 'http://' + document.location.hostname;
				break;


			default:
				ValidateDependencies(eventObj);
				formObj.submit();
		}
		return true;
	}

	function ValidateDependencies(eventObj) {
		var formObj = document.mandatory_info;

		// validate dependencies
		switch (eventObj.name) {
			case "mylanguage":
				formObj.mylanglevel.selectedIndex = 0;
			case "mylanglevel":
				formObj.mylocation.selectedIndex = 0;
			case "mylocation":
				formObj.mycoursetype.selectedIndex = 0;
			case "mycoursetype":
				formObj.mystartdate.selectedIndex = 0;
			case "mystartdate":
				formObj.mynumweeks.selectedIndex = 0;
		}
	}

	function isWords (inputVal) {
		var inputStr = inputVal.toString();
		inputStr = trim(inputStr.toLowerCase());

		if (inputStr == "")
			return false;
		for (var i=0; i<inputStr.length; i++) {
			var aChar = inputStr.charAt(i);
			if ((aChar < "0" || aChar > "9") && (aChar < "a" ||
				  aChar > "z") && !(aChar == " " || aChar == "," ||
				  aChar == ";" || aChar == ":" || aChar == "." ||
				  aChar == "\n" || aChar == "\r" ||
				  aChar == "_" || aChar == "&" || aChar == "-")) {
				return false;
			}
		}
		return true;
	}

	function isEmail(argvalue) {
		argvalue = trim(argvalue);
		if (argvalue == "")
			return false;

  		if (argvalue.indexOf(" ") != -1)
			return false;
		else if (argvalue.indexOf("@") == -1)
			return false;
		else if (argvalue.indexOf("@") == 0)
			return false;
		else if (argvalue.indexOf("@") == (argvalue.length-1))
			return false;

  		arrayString = argvalue.split("@");

		if (arrayString[1].indexOf(".") == -1)
			return false;
		else if (arrayString[1].indexOf(".") == 0)
			return false;
		else if (arrayString[1].charAt(arrayString[1].length-1) == ".") {
			return false;
		}
		return true;
	}

	function isPhoneFax (inputVal) {
		var inputStr = inputVal.toString();
		inputStr = trim(inputStr.toLowerCase());

		if (inputStr == "")
			return false;
		for (var i=0; i<inputStr.length; i++) {
			var aChar = inputStr.charAt(i);
			if ((aChar < "0" || aChar > "9") && !(aChar == " " || aChar == "/" || aChar == "(" || aChar == ")" || aChar == "x" || aChar == "," || aChar == "-")) {
				return false;
			}
		}
		return true;
	}

	function isZipcode (inputVal) {
		var inputStr = inputVal.toString();
		inputStr = trim(inputStr.toLowerCase());

		if (inputStr == "")
			return false;
		for (var i=0; i<inputStr.length; i++) {
			var aChar = inputStr.charAt(i);
			if ((aChar < "0" || aChar > "9") && (aChar < "a" ||
				  aChar > "z") && !(aChar == " " || aChar == "-")) {
				return false;
			}
		}
		return true;
	}


	// -----------------------------------------------------------------------------
	//	Popup DHTML Routines
	// -----------------------------------------------------------------------------

	function showInlinePopup(language_code, page_number, param_header, param_name) {
		if (!trim(language_code) || !trim(page_number) || !trim(param_header) || !trim(param_name)) {
			alert( TRANSLATION_PARAMETER_MISSING );
			return (0);
		}
		showLayer('popup_scroll');
		popup_scroll_frame.document.location.href='showmsg.php?l='+language_code+'&t=popup_html&p='+page_number+'&h='+param_header+'&n='+param_name;
		return (1);
	}
	function closeInlinePopup() {
		popup_scroll_frame.close();
		hideLayer('popup_scroll');
		return (1);
	}

