﻿// ONLOAD FUNCTIONS
function loadFunctions() {
    cookieCheck();
    imageContextMenu();
}

// TOGGLE THE PLUS / MINUS IMAGES ON THE NAVIGATION EDITOR PAGE
// ------------------------------------------------------------
function togglePlusMinusImage(element_ref)
{
    // media/images/plus.jpg
    // media/images/minus.jpg
    if (document.getElementById) 
    { // DOM3 = IE5, NS6
        if (document.getElementById(element_ref).src.indexOf('media/images/plus.jpg') != -1)
        {
            var newSrc = document.getElementById(element_ref).src.replace('plus', 'minus');
            document.getElementById(element_ref).src = newSrc;
        }
        else
        {
            var newSrc = document.getElementById(element_ref).src.replace('minus', 'plus');
            document.getElementById(element_ref).src = newSrc;
        }
    }
    else 
    {
        if (document.all) 
        { //IS IE 4 or 5 (or 6 beta)
            if (eval("document.all." + layer_ref + ".src").indexOf('media/images/plus.jpg') != -1)
            {
                var newSrc = eval("document.all." + element_ref + ".src").replace('plus', 'minus');
                eval("document.all." + layer_ref + ".src = " + newSrc);
            }
            else
            {
                var newSrc = eval("document.all." + element_ref + ".src").replace('minus', 'plus');
                eval("document.all." + layer_ref + ".src = " + newSrc);
            }
        }
        if (document.layers) 
        { //IS NETSCAPE 4 or below
            if (document.layers[layer_ref].src.indexOf('media/images/plus.jpg') != -1)
            {
                var newSrc = document.layers[layer_ref].src.replace('plus', 'minus');
                document.layers[layer_ref].src = newSrc;
            }
            else 
            {
                var newSrc = document.layers[layer_ref].src.replace('minus', 'plus');
                document.layers[layer_ref].src = newSrc;
            }
        }
    }
}


function imageContextMenu() {
    if(document.images) {
        for(var i=0; i<document.images.length; i++){
            document.images[i].oncontextmenu = noContextMenu;
        }
    }
}
function noContextMenu() {
    return false;
}





// INSERT TEXT INTO A INPUT
//------------------------------
function setInputValue(input_ref, new_text)
{
    if (document.getElementById)
    { // DOM3 = IE5, NS6
        if (document.getElementById(input_ref) != null)
        {
            document.getElementById(input_ref).value = new_text;
        }
    }
    else
    {
        if (document.all)
        { // IS IE 4 or 5 (or 6 beta)
            eval("document.all." + input_ref + ".value = " + new_text);
        }
        if (document.layers)
        { // IS NETSCAPE 4 or below
            document.layers[input_ref].value = new_text;
        }
    }
}


// TOGGLE A LAYER'S VISIBILITY
// ---------------------------
function toggleLayerVisible(layer_ref) 
{
    if (document.getElementById) 
    { // DOM3 = IE5, NS6
        if (document.getElementById(layer_ref).style.display == 'block')
        {
            document.getElementById(layer_ref).style.display = 'none';
        }
        else
        {
            document.getElementById(layer_ref).style.display = 'block';
        }
    }
    else 
    {
        if (document.all) 
        { //IS IE 4 or 5 (or 6 beta)
            if (eval("document.all." + layer_ref + ".style.display") == "block")
            {
                eval("document.all." + layer_ref + ".style.display = none");
            }
            else
            {
                eval( "document.all." + layer_ref + ".style.display = block");
            }
        }
        if (document.layers) 
        { //IS NETSCAPE 4 or below
            if (document.layers[layer_ref].display == 'block')
            {
                document.layers[layer_ref].display = 'none';
            }
            else 
            {
                document.layers[layer_ref].display = 'block';
            }
        }
    }
}


// SHOW LAYER
// ----------
function showLayer(layer_ref)
{
    if (document.getElementById) 
    { // DOM3 = IE5, NS6
        document.getElementById(layer_ref).style.display = 'block';
    }
    else 
    {
        if (document.all) 
        { //IS IE 4 or 5 (or 6 beta)
            eval( "document.all." + layer_ref + ".style.display = block");
        }
        if (document.layers) 
        { //IS NETSCAPE 4 or below
            document.layers[layer_ref].display = 'block';
        }
    }
}


// HIDE LAYER
// ----------
function hideLayer(layer_ref)
{
    if (document.getElementById) 
    { // DOM3 = IE5, NS6
        document.getElementById(layer_ref).style.display = 'none';
    }
    else 
    {
        if (document.all) 
        { //IS IE 4 or 5 (or 6 beta)
            eval("document.all." + layer_ref + ".style.display = none");
        }
        if (document.layers) 
        { //IS NETSCAPE 4 or below
            document.layers[layer_ref].display = 'none';
        }
    }
}


// TOGGLE THE PLUS / MINUS IMAGES ON THE NAVIGATION EDITOR PAGE
// ------------------------------------------------------------
function togglePlusMinusImage(element_ref)
{
    // media/images/plus.jpg
    // media/images/minus.jpg
    if (document.getElementById) 
    { // DOM3 = IE5, NS6
        if (document.getElementById(element_ref).src.indexOf('media/images/plus.jpg') != -1)
        {
            var newSrc = document.getElementById(element_ref).src.replace('plus', 'minus');
            document.getElementById(element_ref).src = newSrc;
        }
        else
        {
            var newSrc = document.getElementById(element_ref).src.replace('minus', 'plus');
            document.getElementById(element_ref).src = newSrc;
        }
    }
//            else 
//            {
//                if (document.all) 
//                { //IS IE 4 or 5 (or 6 beta)
//                    if (eval("document.all." + layer_ref + ".style.display") == "block")
//                    {
//                        eval("document.all." + layer_ref + ".style.display = none");
//                    }
//                    else
//                    {
//                        eval( "document.all." + layer_ref + ".style.display = block");
//                    }
//                }
//                if (document.layers) 
//                { //IS NETSCAPE 4 or below
//                    if (document.layers[layer_ref].display == 'block')
//                    {
//                        document.layers[layer_ref].display = 'none';
//                    }
//                    else 
//                    {
//                        document.layers[layer_ref].display = 'block';
//                    }
//                }
//            }
}


// Click appropriate button for in-focus text input on Enter keypress
//      onkeydown="return submitOnEnter(event,'ButtonIdHere');"
// ------------------------------------------------------------------
function submitOnEnter(e,c)
{
    var keynum;
    var keychar;
    var numcheck;

    if(window.event) // IE
    {
        keynum = e.keyCode;
    }
    else if(e.which) // Netscape/Firefox/Opera
    {
        keynum = e.which;
    }


    if (keynum==13)
    {
        if (document.getElementById(c))
        {
            var btnToClick = document.getElementById(c)
            btnToClick.click();
        }
        return false;
    }
}

/* Checking Cookies */
function cookieCheck() {
    var errorbg = document.getElementById("cookie-error-bg");
    var errormsg = document.getElementById("cookie-error-msg");
    var errormessage = "";
    if (navigator.cookieEnabled == 0) {
        errormessage += "<div id=\"cookie-error-bg\" class=\"error-bg\" style=\"display: block;\"></div>" + "\n";
        errormessage += "<div id=\"cookie-error-msg\" class=\"error-msg\" style=\"display: block;\"><span class=\"closebutton\"><a href=\"javascript:close('cookie-error-bg|cookie-error-msg')\" title=\"Close\"><img src=\"/media/icons/cross.png\" alt=\"Close\" class=\"img-icon-small\" /></a></span>" + "\n";
        errormessage += "<p>You need to enable cookies to use this page.</p>" + "\n";
        errormessage += "</div>";
        document.body.innerHTML = document.body.innerHTML + errormessage;
    }
}


//DELETES TEXT FROM FORM ELEMENT
// -----------------------------------------------------------------------------
//       onfocus="delText(this)"
function delText(element) {
    if (element.value == element.defaultValue) {
        element.value = '';
    }
}

/* Closing top error messages */
function close(elementNames) {
    var elementsArray = elementNames.split("|");
    for(var i = 0; i < elementsArray.length; i++)
    {
        document.getElementById(trim(elementsArray[i])).style.display = "none";
    }
}

/* Trimming a string - EXTREMELY USEFUL */
function trim(str, chars) {
    return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function hideInputLabel(inputID) {
    //debugger;
	var input = document.getElementById(inputID);			
	var inputParameters = input.alt.split(":");
	var inputFictionalType = trim(inputParameters[0]);
	var inputDefaultValue = trim(inputParameters[1]);
    if(input.value == inputDefaultValue) {
		input.value = '';
    }
}

function showInputLabel(inputID) {
    //debugger;
	var input = document.getElementById(inputID);			
	var inputParameters = input.alt.split(":");
	var inputFictionalType = trim(inputParameters[0]);
	var inputDefaultValue = trim(inputParameters[1]);
    if(trim(input.value) == "") {
        input.value = inputDefaultValue;
    }
}


/* Validate Forms */
function validate(formElements) {
	var valid = new Array();
	var completed = true;
	var formFields = formElements.split(",");
	var strAlertMessage = '';
	for(i = 0; i < formFields.length; i++) {

		var validatedInput = document.getElementById(formFields[i]);
		var validatedInputParameters = validatedInput.alt.split(":");
		var inputType = trim(validatedInputParameters[0]);
		var inputDefaultValue = trim(validatedInputParameters[1]);
		if (validatedInputParameters[2]) {
		    var inputDefaultMessage = trim(validatedInputParameters[2]);
		} else {
            var inputDefaultMessage = "";
		}
		
		if (validatedInput.type == 'text' || validatedInput.type == 'password') {
			switch (inputType) {
			
				case 'Text':
					if (trim(validatedInput.value) == "" || trim(validatedInput.value).toLowerCase() == inputDefaultValue.toLowerCase()) {
					    if (inputDefaultMessage == "" ) {
						    strAlertMessage += 'Please fill your ' + inputDefaultValue + '\n';
						} else {
						    strAlertMessage += inputDefaultMessage + '\n';
						}
						validatedInput.style.borderColor = '#cd1414';
						validatedInput.focus();
						valid[i] = false;
					}
					else {
						valid[i] = true;
					}
					break;
					
				case 'Password':
					if (trim(validatedInput.value) == "" || validatedInput.value.toLowerCase() == inputDefaultValue.toLowerCase()) {
					    if (inputDefaultMessage == "" ) {
						    strAlertMessage += 'Please fill your ' + inputDefaultValue + '\n';
						} else {
						    strAlertMessage += inputDefaultMessage + '\n';
						}
						validatedInput.style.borderColor = '#cd1414';
						validatedInput.focus();
						valid[i] = false;
					}
					else {
						valid[i]= true;
					}
					break;
					
				case 'Email':
					if (trim(validatedInput.value) == "" || validatedInput.value.toLowerCase() == inputDefaultValue.toLowerCase()) {
					    if (inputDefaultMessage == "" ) {
						    strAlertMessage += 'Please fill your ' + inputDefaultValue + '\n';
						} else {
						    strAlertMessage += inputDefaultMessage + '\n';
						}
						validatedInput.style.borderColor = '#cd1414';
						validatedInput.focus();
						valid[i] = false;
					}
					else {
						var reTestString = /[-,a-z,A-Z,0-9,.,_]+@[-,a-z,A-Z,0-9,.,_]+\.[a-z,A-Z]+/i;
						if (reTestString.test(validatedInput.value)) {
							valid[i] = true;
						}
						else {
							strAlertMessage += 'Please enter correct email address \n';
							validatedInput.style.borderColor = '#cd1414';
							validatedInput.focus();
							valid[i] = false;
						}
					}
					break;
					
				case 'UKPostcode':
					if (trim(validatedInput.value) == "" || validatedInput.value.toLowerCase() == inputDefaultValue.toLowerCase()) {
				        if (inputDefaultMessage == "" ) {
    						strAlertMessage += 'Please fill your ' + inputDefaultValue + '\n';
					    } else {
					        strAlertMessage += inputDefaultMessage + '\n';
					    }
						validatedInput.style.borderColor = '#cd1414';
						validatedInput.focus();
						valid[i] = false;
					}
					else {
						var reTestString = /^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$/i;
						if (reTestString.test(validatedInput.value)) {
							valid[i] = true;
						}
						else {
							strAlertMessage += 'Please enter correct UK Postcode, like SW1A 1AA as they have in Buckingham Palace \n';
							validatedInput.style.borderColor = '#cd1414';
							validatedInput.focus();
							valid[i] = false;
						}
					}
					break;
				
				default:
					alert("Unknown Field type!");
					valid[i] = false;
					break;
					
			}
		} else if (validatedInput.type == 'checkbox') {
			if (validatedInput.checked == false) {
		        if (inputDefaultMessage == "" ) {
				    strAlertMessage += 'Please ' + inputDefaultValue + '\n';
			    } else {
			        strAlertMessage += inputDefaultMessage + '\n';
			    }
				validatedInput.focus();
				valid[i] = false;
			} else {
				valid[i] = true;
			}
		}	
	}
	
	for (i = 0; i < valid.length; i++) {
		if (valid[i]==false) {
			completed = false;
			alert(strAlertMessage);
			document.getElementById(formFields[i]).focus();
			break;
		}
	}
	if(completed) {
		return true;
	} else {
		return false;
	}
}

function elementToBeValidated(name, type, errorspan)
{
    this.ControlToValidate = name;
    this.TypeOfValidation = type;
    this.ErrorLocation = errorspan;
}


function validateForm(arElementsToBeValidated, language)
{
    var blnAllGood = true;

    for (var i = 0; i < arElementsToBeValidated.length; i++)
    {
        var myControl = eval(arElementsToBeValidated[i].ControlToValidate);
        if(!validateInput(myControl, language, arElementsToBeValidated[i].TypeOfValidation))
        {
            blnAllGood = false;
            if(document.all)
            {
                document.getElementById(arElementsToBeValidated[i].ErrorLocation).innerText = strErrorMessage;
            }
            else
            {
                document.getElementById(arElementsToBeValidated[i].ErrorLocation).textContent = strErrorMessage;
            }
            
        }
    }    
    return blnAllGood;
}

/* Global Validation */
var strErrorMessage = "";
function validateInput(element, locale, type) {
    strErrorMessage = "";
    switch(type) 
    {
        case "InvalidCharacters":        
            return noInvalidCharacters(element.value);
            break;
        case "Postcode":
            switch(locale) 
            {
                case "en-GB":
                    return UKPostcode(element.value);
                    break;
                case "de-DE":
                    return DEPostcode(element.value);
                    break;
                default:
                    return UKPostcode(element.value);
                    break;
            }
            break;
        case "Phonenumber":
            switch(locale) 
            {
                case "en-GB":
                    return UKPhonenumber(element.value);
                    break;
                case "de-DE":
                    return DEPhonenumber(element.value);
                    break;
                default:
                    return UKPhonenumber(element.value);
                    break;
            }
            break;
        case "URL":
            return URL(element.value);
            break;
        case "EmailAddress":
            return Email(element.value);
            break;
        case "Numeric":
            return Numeric(element.value);
            break;
        case "Date":
            switch(locale) 
            {
                case "en-GB":
                    return UKDate(element.value);
                    break;
                case "de-DE":
                    return DEDate(element.value);
                    break;
                default:
                    return UKDate(element.value);
                    break;
            }
            break;
        case "Required":
            return Required(element.value);
            break;
        case "RequiredOption":
            var blnOptionSelected = false;
            
            //grab the optiongroup from the form          
            
            if(element.length)
            {
                for(var i = 0; i < element.length && !blnOptionSelected; i++)
                {
                    if(element[i].checked)
                    {
                        blnOptionSelected = true;
                    }
                }
            }
            
            if(!blnOptionSelected)
            {
                strErrorMessage = "Please select an option";
            }
            else
            {
                strErrorMessage = "";
            }
            
            return blnOptionSelected;
            break
        case "RequiredDropDown":
            if(element.selectedIndex < 1)
            {
                strErrorMessage = "Please select an option"
                return false;
            }
            else
            {
                strErrorMessage = "";
                return true;
            }
            break;
    }
    
}


/* Validation Functions */
function Required(value) {
    if(trim(value) == "") 
    {
        strErrorMessage = "Required field is empty";
        return false;
    }
    else
    {
        strErrorMessage = "";
        return true;
    }
}

function noInvalidCharacters(value) {
    var regex = new RegExp(/^[-a-zA-Z0-9\,\s]+(\.[-a-zA-Z0-9\,\s]+)*$/);
    if(trim(value) != "" ) {
        if(regex.test(value) == true) {
            strErrorMessage = "";
            return true;
        } else {
            strErrorMessage = "Only letters, numbers, \"-\" and \",\" are allowed";
            return false;
        }
    }
}

function UKPostcode(value) {
    var regex = new RegExp(/^([A-PR-UWYZ0-9][A-HK-Y0-9][AEHMNPRTVXY0-9]?[ABEHMNPRVWXY0-9]? {1,2}[0-9][ABD-HJLN-UW-Z]{2}|GIR 0AA)$/i);
    if(trim(value) != "" ) {
        if(regex.test(value) == true ) {
            strErrorMessage = "";
            return true;
        } else {
            strErrorMessage = "Not valid UK postcode (SW1A 1AA)";
            return false;
        }
    }
}

function DEPostcode(value) {
    var regex = new RegExp(/\b((?:0[1-46-9]\d{3})|(?:[1-357-9]\d{4})|(?:[4][0-24-9]\d{3})|(?:[6][013-9]\d{3}))\b/i);
    if(trim(value) != "" ) {
        if(regex.test(value) == true ) {
            strErrorMessage = "";
            return true;
        } else {
            strErrorMessage = "Not valid german postcode (12345)";
            return false;
        }
    }
}

function UKPhonenumber(value) {
    var regex1 = new RegExp(/^(\+44\s?7\d{3}|\(?07\d{3}\)?)\s?\d{3}\s?\d{3}$/);
    var regex2 = new RegExp(/^(((\+44\s?\d{4}|\(?0\d{4}\)?)\s?\d{3}\s?\d{3})|((\+44\s?\d{3}|\(?0\d{3}\)?)\s?\d{3}\s?\d{4})|((\+44\s?\d{2}|\(?0\d{2}\)?)\s?\d{4}\s?\d{4}))(\s?\#(\d{4}|\d{3}))?$/);
    if(trim(value) != "" ) {
        if(regex1.test(value) == true || regex2.test(value) == true ) {
            strErrorMessage = "";
            return true;
        } else {
            strErrorMessage = "Not valid UK Phonenumber (0xx xxxx xxxx) or (+44 xx xxxx xxxx)";
            return false;
        }
    }
}

function DEPhonenumber(value) {
    var regex = new RegExp(/^((\+\d{1,3}(-| )?\(?\d\)?(-| )?\d{1,3})|(\(?\d{2,3}\)?))(-| )?(\d{3,4})(-| )?(\d{4})(( x| ext)\d{1,5}){0,1}$/);
    if(trim(value) != "" ) {
        if(regex.test(value) == true ) {
            strErrorMessage = "";
            return true;
        } else {
            strErrorMessage = "Not valid german Phonenumber (+49 xxx xxxxxxx)";
            return false;
        }
    }
}


function URL(value) {
    var regex = new RegExp(/http(s)?:\/\/([\w-]+\.)+[\w-]+(\/[\w- .\/?%&=]*)?/);
    if(trim(value) != "" ) {
        if(regex.test(value) == true ) {
            strErrorMessage = "";
            return true;
        } else {
            strErrorMessage = "Not valid URL (http://www.yourdomain.com)";
            return false;
        }
    }
}

function Email(value) {
    var regex = new RegExp(/^[\w-]+(\.[\w-]+)*@([a-z0-9-]+(\.[a-z0-9-]+)*?\.[a-z]{2,6}|(\d{1,3}\.){3}\d{1,3})(:\d{4})?$/);
    if(trim(value) != "" ) {
        if(regex.test(value) == true ) {
            strErrorMessage = "";
            return true;
        } else {
            strErrorMessage = "Not valid email (yourname@yourdomain.com)";
            return false;
        }
    }
}


function Numeric(value) {
    var regex = new RegExp(/^\d+?$/);
    if(trim(value) != "" ) {
        if(regex.test(value) == true ) {
            strErrorMessage = "";
            return true;
        } else {
            strErrorMessage = "Only numeric characters allowed";
            return false;
        }
    }
}

function UKDate(value) {
    var regex = new RegExp(/^(((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))))$/);
    if(trim(value) != "" ) {
        if(regex.test(value) == true ) {
            strErrorMessage = "";
            return true;
        } else {
            strErrorMessage = "Not valid UK date (dd/mm/yyyy)";
            return false;
        }
    }
}

function DEDate(value) {
    var regex = new RegExp(/^(((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))))$/);
    if(trim(value) != "" ) {
        if(regex.test(value) == true ) {
            strErrorMessage = "";
            return true;
        } else {
            strErrorMessage = "Not valid date (dd.mm.yyyy)";
            return false;
        }
    }
}


function RegexTest(expr, value, errmsg) {
    var regex = new RegExp(expr);
    if(trim(value) != "" ) {
        if(regex.test(value) == true ) {
            strErrorMessage = "";
            alert("Match");
            return true;
        } else {
            strErrorMessage = errmsg;
            alert(errmsg);
            return false;
        }
    }
}


/* Trimming a string */
function trim(str, chars) {
    return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
