/* **************************************************************************
   Overall parameters *******************************************************
   ************************************************************************** */

var HINT = false;

/* **************************************************************************
   Overall functions ********************************************************
   ************************************************************************** */

function GetElement(pElementIdOrName, pIndex) {
    pIndex = pIndex || 0;

    if(document.getElementById(pElementIdOrName))
        return document.getElementById(pElementIdOrName);
    else if(document.getElementsByName(pElementIdOrName)[pIndex])
        return document.getElementsByName(pElementIdOrName)[pIndex];
    else
        return false;
}

function GetValue(pElementIdOrName, pIndex) {
    pIndex = pIndex || 0;

    var vElement = GetElement(pElementIdOrName, pIndex);

    if(vElement)
        return vElement.value;
    else
        return false;
}

function SetValue(pElementIdOrName, pValue, pIndex) {
    pIndex = pIndex || 0;

    var vElement = GetElement(pElementIdOrName, pIndex);
    if(vElement)
        vElement.value = pValue;
}

function SetHTML(pElementIdOrName, pValue, pIndex) {
    pIndex = pIndex || 0;

    var vElement = GetElement(pElementIdOrName, pIndex);
    if(vElement)
        vElement.innerHTML = pValue;
}

/* **************************************************************************
   Onload *******************************************************************
   ************************************************************************** */

$(document).ready(function() {

    $("table#table_user").tableFilter();

    $('#table_user').tablesorter({
          sortList: [[0,0]]
        , headers: {8: {sorter: false}, 9: {sorter: false}, 10: {sorter: false}}
    });
    
    $("#generate_password").click(function() {
        var vPassword = $.password();

        $("#password").val(vPassword);
        
		$("#password").removeClass('error');

		PasswordStrength(vPassword, 'password');


    });

    $("#generate_password").click(function() {
        var vPassword = $.password();

        $("#password").val(vPassword);

		$("#password").removeClass('error');

		PasswordStrength(vPassword, 'password');

    });

});

/* **************************************************************************
   Generic functions ********************************************************
   ************************************************************************** */

function ValidateAndSubmit(pThis, pMandatoryInputs) {
    pMandatoryInputs = pMandatoryInputs.length ? pMandatoryInputs : [];

    var vToBeFilled = pMandatoryInputs.length;

    jQuery.each(pMandatoryInputs, function() {
        if($("#" + this).val() == '' )
            $("#" + this).addClass('input_error');
        else
            vToBeFilled--;
    });

    if(vToBeFilled)
        alert('Please provide all mandatory inputs.');
    else
        pThis.form.submit();
}

function Submit_Login(pThis) {
    var vMandatoryInputs = [  'username'
                            , 'password'];
                        
    ValidateAndSubmit(pThis, vMandatoryInputs);
}

function Submit_SignUp(pThis) {
    var vMandatoryInputs = [  'org_name'
                            , 'org_type'
                            , 'addr_1'
                            , 'county'
                            , 'email'
                            , 'phone'
                            , 'captcha'];

    ValidateAndSubmit(pThis, vMandatoryInputs);
}

function Submit_AddUser(pThis) {
    var vMandatoryInputs = [  'firstname'
                            , 'surname'
                            , 'password'];

    ValidateAndSubmit(pThis, vMandatoryInputs);
}

function Submit_EditUser(pThis) {
    var vMandatoryInputs = [  'firstname'
                            , 'surname'
                            , 'password'];

    ValidateAndSubmit(pThis, vMandatoryInputs);
}

function TestEmail(pEmail) {
    var vEmailPattern = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;

    return vEmailPattern.test(pEmail);
}

function ValidateMandatory(pThis) {
	if(jQuery.trim(pThis.value) == '')
        $("#" + pThis.name).addClass('error');
    else {
        if(pThis.name == 'email') {
            if(TestEmail(pThis.value))
                $("#" + pThis.name).removeClass('error');
            else
                $("#" + pThis.name).addClass('error');
        } else
            $("#" + pThis.name).removeClass('error');
    }
}

function ActiveField(pThis) {
	$("#" + pThis.name).removeClass('error');
}

function ValidateEmail(pThis) {
    if(TestEmail(pThis.value))
        $("#" + pThis.name).removeClass('error');
    else
		if (pThis.value != '')
		{
	        $("#" + pThis.name).addClass('error');
		}
}

function HideHint() {
	if(HINT)
		HINT = false;
	else 
		$("#hint_div").remove();
}

function ShowHint(pObj, pText) {
	HideHint();

	var vHintDiv = document.createElement('div');
	$(vHintDiv).attr('id', 'hint_div');
	$(vHintDiv).addClass('hint_div');
	var vCloseImg = '<div class="close_img" onclick="HideHint();">x</div>';
	$(vHintDiv).html(vCloseImg + "<b>" + pText + "</b>");
	$(vHintDiv).css("left", ($(pObj).position().left - 140));
	$(vHintDiv).css("top", ($(pObj).position().top + 4 + $("#hint").get(0).scrollTop));
	$("#hint").append(vHintDiv);
	if(pText.length > 14) {
		$(vHintDiv).css("width", (pText.length * 6.5) + 35);
		$(vHintDiv).css("left", ($(pObj).position().left - $(vHintDiv).width()));
	}

	HINT = true;
}
