function resetDefaultValues(thisForm) {
    for( var i = 0; i < thisForm.elements.length; i++) {
        var type = thisForm.elements[i].type;

        if( type == 'checkbox' || type == 'radio' ) {
            thisForm.elements[i].checked = false;
        } else if( type == 'password' || type == 'text' || type == 'textarea' ) {
            thisForm.elements[i].value = "";
        }  else if( type == 'hidden' ) {
            thisForm.elements[i].value = "0";
        } else if( type == 'select-one' || type == 'select-multiple' || type == 'select' ) {
            for( var k = 0; k < thisForm.elements[i].options.length; k++ ) {
                if( thisForm.elements[i].options[k].value == 0 ) {
                    thisForm.elements[i].options[k].selected = true;
                } else if ( thisForm.elements[i].options[k].value == 'empty') {
                    thisForm.elements[i].options[k].selected = true;
                }
            }
        }
    }
}

function findElementsHorizontalPosition( obj ) {
    var curleft = 0;
    if( obj.offsetParent ) {
        while( obj.offsetParent ) {
            if( obj.getAttribute( "id" ) &&  obj.getAttribute( "id" ) == "Container" ) {
                obj = obj.offsetParent;
            } else {
                curleft += obj.offsetLeft;
                obj = obj.offsetParent;
            }
        }
    }//if offsetParent exists
    else if( obj.x )
        curleft += obj.x
    return curleft;
}

function findElementVerticalPosition( obj ) {
    //autoCompleter.debug( "findElementPosY();" );
    var curtop = 0;
    if( obj.offsetParent ) {
        while( obj.offsetParent ) {
            curtop += obj.offsetTop;
            obj = obj.offsetParent;
        }
    }//if offsetParent exists
    else if( obj.y )
        curtop += obj.y
    return curtop;
}

function toUpperCase( element1 ) {
    //element1.style.textTransform = "uppercase";
    element1.value=element1.value.toUpperCase();
}

function toUpperCaseAlphaNumericOnly( element1 ) {
    element1.style.textTransform = "uppercase";
    if( element1.value.match( /[a-z]/ ) ) {
        //element1.value = element1.value.substring(0,element1.value.indexOf(" ")) +element1.value.substring(element1.value.indexOf(" ")+1)
        element1.value = uppercase( element1.value );
    }
    if(element1.value.match( /[^a-z,A-Z,0-9]/ ) ) {
        element1.value = element1.value.replace(/[^a-z,A-Z,0-9]/i, "");
    }
}

//remove all but first spaces and capitalize
function upperCaseLeaveFirstSpace( val )
{    var addSpace = val.substring( 0, 1 ) == " ";

     val = val.replace( /\s+/g, "" );
     if( addSpace ){
        val = " " + val;
     }
     return( val.toString().toUpperCase() );
}

function toUpperCaseLeaveFirstSpace( element1 ) {
    element1.style.textTransform = "uppercase";
    element1.value = upperCaseLeaveFirstSpace( element1.value );
}

//remove all but single space. single space needed for autoselect
function leftSpaceTrim( str ) {
    var containsSpaces = str.value.length > 1 ? str.value.substring( 0, 2 ) == "  " : false;
    if( containsSpaces ){
        str.value = str.value.replace(/^\s+/, '');
        //str.value = " " + str.value;
    }
    return str;
}

function alphaNumeric( val )
{
     val = val.replace(/[\s,\\,\?,\,,\[,\],\-,\=,\`,\+,\,,\.,\/,\[,\],\;,\']/i, "");
     return( val.toString().toUpperCase() );
}

function numeric( val )
{
     val = val.replace(/[a-z,A-Z,\s,\\,\.,\?,\[,\],\-,\=,\`,\+,\,,\/,\[,\],\;,\',\$]/i, "");
     return( val.toString().toUpperCase() );
}

function float( val ){
     return val.toString().toUpperCase();
}

function formatCents( val )
{
     return( val / 100 );
}


/*function formatTime( e, timeInput )
{
    var evt = e || window.event;
    var keyPressed = evt.which || evt.keyCode;
    //if pressed backspace just return;
    //if ( window.event ) {
        if( keyPressed == 8 || keyPressed == 39 || keyPressed == 36 || keyPressed == 46 || keyPressed == 13 || keyPressed == 37) {
            return;
        }
    //}

    // make copy of time input string
    var enteredTime = timeInput.value;

    //remove all letters except amp
    enteredTime = enteredTime.replace(/[b-l,n-o,q-z,\\,\?,\.,\,,\[,\],\-,\=,\`,\+]/i, "");

    //add space inbetween time 12:33  and the am/pm if not military
    if ( enteredTime.length >  3 && enteredTime.substring( 0, enteredTime.indexOf( ":" ) ) <= 12  && enteredTime.substring( enteredTime.indexOf( ":" ) + 1, enteredTime.indexOf( ":" ) + 3).length == 2 && /([0-9]){2}/.test(enteredTime.substring( enteredTime.indexOf( ":" ) + 1, enteredTime.indexOf( ":" ) + 3) )&& enteredTime.substring( enteredTime.indexOf( ":" ) + 1, enteredTime.indexOf( ":" ) + 4).indexOf(" ")==-1 ) {
        enteredTime = enteredTime.substring( 0, enteredTime.indexOf( ":" ) + 3 ) + " " +  enteredTime.substring( enteredTime.indexOf( ":" ) + 3 );
    }

    //add : if not there
    if ( enteredTime.indexOf( ":" ) < 0 ) {
        if( enteredTime.length >= 1 && /([3-9])/.test(enteredTime.substring(0,1) ) ) {
            enteredTime = enteredTime.substring( 0, 1 ) + ":" +  enteredTime.substring( 2 );
        } else if ( enteredTime.length >=2 && /([0-9]{2})/.test(enteredTime.substring(0,2) ) ) {
            enteredTime = enteredTime.substring( 0, 2 ) + ":" +  enteredTime.substring( 2 );
        }
    }

    enteredTime = enteredTime.toUpperCase();

    //validate if time fully entered
    if( enteredTime.substring( enteredTime.indexOf( ":" ) ).length > 5 ) {
        validateTime( enteredTime );
    }  else if ( enteredTime.length >= 5 && enteredTime.substring( 0, 2 ) > 12 ) {
       validateTimeMilitary( enteredTime ); 
    }

    //only change text input value if changed this saves cursor being repositioned and end of input value
    if( enteredTime != timeInput.value )
        timeInput.value = enteredTime;
    return;
}
*/

function validateTime( val )
{
    if( !/^([01]?[0-9]|[2][0-3])(:[0-5][0-9]){1}(\s){1}(([AP])M){1}$/.test( val ) ) {
        alert( 'Time must be in format hh:mm AM/PM or hh:mm (if military).' );
    }
}

function validateTimeMilitary( val )
{
    if( !/^([01]?[0-9]|[2][0-3])(:[0-5][0-9]){1}$/.test( val ) ) {
        alert( 'Time must be in format hh:mm AM/PM or hh:mm (if military)!' );
    }
}



function disableOnSubmit( button ) {
        button.value = 'PROCESSING...';
        button.disabled = true;
}

function focusOnElement( elementName ) {
    var element = document.getElementsByName( elementName )[0];
    element.focus();
    element.select();
}

function addLoadEvent(func) {
    var oldonload = window.onload;
    if (typeof window.onload != 'function') {
        window.onload = func;
    } else {
        window.onload = function() {
            if (oldonload) {
                oldonload();
            }
            func();
        }
    }
}

function hideSearch( tableName ) {
    var searchFieldContainer = document.getElementById( "SearchFieldContainer" + tableName );

    if( searchFieldContainer.style.visibility == "hidden" ) {
        searchFieldContainer.style.visibility = "visible";
        searchFieldContainer.style.display = "";
        document.getElementById( "ArrowImage" + tableName ).setAttribute( "class", "minus-arrow" );
    } else {
        searchFieldContainer.style.visibility = "hidden";
        searchFieldContainer.style.display = "none";
        document.getElementById( "ArrowImage" + tableName ).setAttribute( "class", "plus-arrow" );
    }
}

function getPasswordSuggestions( password ) {
    var badWords = new Array('password', 'secret');

    var recommendations = new Array();

    var REGEX_sequential_repeat_x3 = /(.)\1{3}/;
    var REGEX_has_lowercase = /[a-z]/;
    var REGEX_has_uppercase = /[A-Z]/;
    var REGEX_has_digits = /[\d+]/;
    var REGEX_has_special_chars = /.[!,@,#,$,%,^,&,*,?,_,~,-,£,(,)]/;

    for ( var i = 0; i < badWords.length; i++) {
		if (password.toLowerCase() == badWords[i]) {
            recommendations.push("Don't use easily guessed words");
        }
	}

    if ( REGEX_sequential_repeat_x3.test( password ) ) {
        recommendations.push("Don't repeat the same letters or numbers a lot.");
    }

    if ( REGEX_has_lowercase.test( password ) && REGEX_has_uppercase.test( password ) ) {
    } else {
        recommendations.push("Mix uppercase and lowercase");
    }

    if ( REGEX_has_digits.test( password ) ) {
    } else {
        recommendations.push("Use numbers as well as letters")
    }

    if ( REGEX_has_special_chars.test( password ) ) { score++; }

    if ( password.length >= 6 ) {

    }
    else {
        recommendations.push("Use a longer password.")
    }


    return recommendations;
}

function handlePasswordQuality( password ) {
    var strength = new Array();

    strength[0] = new Array( "Very Strong", "#008000");
    strength[1] = new Array( "Strong", "#008000");
    strength[2] = new Array( "Medium", "#000000");
    strength[3] = new Array( "Weak", "#ff0000");
    strength[4] = new Array( "INVALID", "#ff0000");

    var passwordSuggestions = getPasswordSuggestions( password );

    var strengthValue = passwordSuggestions.length;
    if( strengthValue > 4 ) {
        strengthValue = 4;
    }

    document.getElementById( "passwordQuality" ).innerHTML = "Password Quality: " + strength[ strengthValue ][0];
    document.getElementById( "passwordQuality" ).style.color = strength[ strengthValue][1];
    if ( strengthValue >= 2 && password != "" ) {
        document.getElementById( "passwordQualitySuggestions" ).innerHTML = '<br/>Suggestions:<ul style="padding-left: 15px;">';

        for (var i=0; i < passwordSuggestions.length; i++) {
            document.getElementById( "passwordQualitySuggestions" ).innerHTML += "<li>" + passwordSuggestions[i] + "</li>";
        }
        document.getElementById( "passwordQualitySuggestions" ).innerHTML += "</ul>";
    } else {
        document.getElementById( "passwordQualitySuggestions" ).innerHTML = "";
    }
}
