﻿
// BEGIN: Utils
	function getEl(el){
		return document.getElementById(el);
	}
	
	function getElementsByClassName (className, tag, elm){
		var testClass = new RegExp('(^|\\\\s)' + className + '(\\\\s|$)');
		var tag = tag || '*';
		var elm = elm || document;
		var elements = (tag == '*' && elm.all)? elm.all : elm.getElementsByTagName(tag);
		var returnElements = [];

		for(var i=0, len=elements.length; i<len; i++){
			var current = elements[i];
			if(testClass.test(current.className)){
				returnElements.push(current);
			}
		}
		return returnElements;
	}

	var Form = {
		init: function(){
		},
		toggle: function(){ for(var i=0, len=arguments.length; i<len; i++){ var id = arguments[i]; getEl(id).style.display === 'block' ? this.hide(id) : this.show(id); } return this; },
		show: function(id){ getEl(id).style.display='block'; return this; },
		hide: function(id){ getEl(id).style.display='none'; return this; },
		enable: function(id){ getEl(id).disabled = false; return this; },
		disable: function(id){ getEl(id).disabled = true; return this; }
	}
// END: Utils


// BEGIN: login - Field Operations
    var passed = 1;
    var sPartnerName = "HotelSmartSuite";
    var sPartnerDir = "HotelSmartSuite";


    function aggregateErrors(){
        var errors = getElementsByClassName('errortext');
        var errorList = '';

        for(var i=0, len=errors.length; i<len; i++){
		      var error = errors[i].innerHTML.replace(/^\s+|\s+$/g,'');
				
            if(error && error!='' && errors[i].id != 'MainFormError'){
				    errorList += "<li style='text-align:left;margin-left:100px;'>" + error + "<\/li>";
				}
        }

        return "<ol>" +errorList+ "<\/ol>";
    }


    function clearErrorFields() {

        eSiteOwnerNameError = getEl("loginAccountUsername.error");
        eSiteOwnerNameError.innerHTML = "";

        eSiteOwnerPassError = getEl("loginAccountPassword.error");
        eSiteOwnerPassError.innerHTML = "";

    }

     function nonNullFields() {
        // reset all the variables
        passed = 1;
        clearErrorFields();

        // run the tests
        if (document.login_form.loginAccountUsername.value.length < 3) {
            eSiteOwnerNameError = getEl("loginAccountUsername.error");
            eSiteOwnerNameError.innerHTML = "User Name must be at least 3 characters";
            passed = 0;
        }
        if (document.login_form.loginAccountPassword.value.length == 0) {
            eSiteOwnerPassError = getEl("loginAccountPassword.error");
            eSiteOwnerPassError.innerHTML = "Password must be at least 3 characters";
            passed = 0;
        }
        
        return passed;
    }

    function doSubmit(){
        passed = nonNullFields();        
        if ( passed == 1 && removeForbiddenChars("loginform") ) {
             window.document.login_form.submit();
        } else {
				eMainFormError = getEl("MainFormError");
				eMainFormError.innerHTML = "<img src='images/error_alert.gif' alt='Alert' border='0' width='41' height='42' align='left'>We encountered some problems processing your login. Please correct the entries highlighted in red." + aggregateErrors();

        		window.scrollTo(0,0);
        }
    }

    // Conditional dispay of US/Canada vs. International Phone number fields
    function render(input, displayElementID, hideElementID){
        if (input.checked){
            getEl(displayElementID).style.display="block";
            getEl(hideElementID).style.display="none";
        }
    }

// END: login - Field Operations


// BEGIN: Content login - Field Validation

var FORBIDDEN_CHAR_ERROR = "This field cannot contain the following character(s): &quot;, &lt;, &gt;, ; ";
/**
 * Checks all input fields on loginform DOM object to ensure there are no forbidden characters
 *  or forbidden character sequences that could break the page output.
 * @param: form - the ID of the form object.
 * @return true if no forbidden chars found, or cannot validate
 * @return false if forbidden chars found in field.
 */
function removeForbiddenChars( form ){

    if ( !document.getElementById ) return true; //return if js version is not supported
    //Suggestion: Display js disabled message on page

    var objForm = "";

    //Get all field elements in form
    if ( getEl(form) ){ //Ensure loginform exists
        objForm = getEl(form);
    }
    else{
        return true; //Just return true on error for now
    }

    var names = "";
    //Find forbidden elements in all fields in fieldsets
    for( i = 0; i < form.length; i++ ) { //search in form
        var fieldsets = objForm.getElementsByTagName('fieldset'); //search within all fieldsets
		  
        for ( j = 0; j < fieldsets.length; j++ ){
            var elements = fieldsets[j].getElementsByTagName('input'); //search only input fields
            for ( k = 0; k < elements.length; k++){
                if ( elements[k].type == "text" ){ //search only text input fields
                        names += elements[k].name + ", ";
                        var forbidden = getForbiddenChars(elements[k].value);
                        if ( forbidden.length > 0 ){
                            elements[k].value = ""; //set invalid string to empty
                            var eID = elements[k].name + ".error"; //Append .error to the forbidden field name
                            if (getEl(eID)){
                                getEl(eID).innerHTML = FORBIDDEN_CHAR_ERROR;
                            }
                            return false;
                        }
                }
            }
        }
    }
    return true;
}


/**
 * Returns a string containing forbidden characters found in the parameter string
 * @param s String to find forbidden characters from
 * @return empty string if no forbidden characters found in parameter string
 * @return string containing forbidden characters found in parameter string
 */
function getForbiddenChars( s ){
    var forbiddenChars = "";

    if( s.indexOf("\"") > -1 ){
        forbiddenChars += "&quot; ";
    }
    if( s.indexOf("<") > -1){
        forbiddenChars += "&lt; ";
    }
    if( s.indexOf(">") > -1){
        forbiddenChars += "&gt; ";
    }
    if( s.indexOf(";") > -1){
        forbiddenChars += ";";
    }

    return forbiddenChars;
}

// END: Content login - Field Validation

