﻿var userAgent = navigator.userAgent.toLowerCase();
var browser = {
    version: (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1],
    safari: /webkit/.test(userAgent) && !/chrome/.test(userAgent),
    chrome: /chrome/.test(userAgent),
    opera: /opera/.test(userAgent),
    msie: /msie/.test(userAgent) && !/opera/.test(userAgent),
    mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent)
};

function pageLoad()
{
    $(":submit,:button,button,a.linkButton").button();

    $(".secureButton").button({
        icons: {
            secondary: 'ui-icon-locked'
        }, text: 'true'
    });

    $(".input-date").datepicker();

    // This is only selectable when Unobtrusive JavaScript is being used.
    $('input[data-val-required]').each(function (i)
    {
        var labelSelector = "label[for=" + $(this).attr("name") + "]";
        var label = $(this).parent().prev().children(labelSelector).first();
        label.append("<span>*</span>");
        label.children('span').addClass("mandatory");
    });

    $('div[id*=flexAccordion]').accordion({ active: false, collapsible: true, autoHeight: false, header: 'span.accordionItemHeading' });

    //$('input').tooltip();

    if (browser.msie)
    {
        if (browser.version < 9.0)
        {
            $('ul#mainNav').css("left", "-35px");
        }
    }

    formatErrorMessageBox();
    formatHighlightMessageBox();
    //setActiveMenuLinkStyling();
    setActiveLeftSideMenuLinkStyling();
    applyInputElementStyles();    
}

function applyCapsLockChecking()
{
    $('input[type="password"]').keypress(function (e)
    {
        var val = String.fromCharCode(e.which);
        if (val.toUpperCase() === val && val.toLowerCase() !== val && !e.shiftKey)
        {
            $('strong.capsLockMessage').remove();
            $(this).after('<strong style="color:Maroon;" class="capsLockMessage"><br />Caps Lock is on</strong>');
        }
        else
        {
            $('strong.capsLockMessage').remove();
        }
    });
}

function applyInputElementStyles()
{
    $('input[type="text"], input[type="password"], input[type="file"], textarea').focus(function () { $(this).addClass("activeInput"); });
    $('input[type="text"], input[type="password"], input[type="file"], textarea').blur(function () { $(this).removeClass("activeInput"); });
}

function RGBToHex(rgb)
{
    if (isStringNullOrEmpty(rgb) == false)
    {
        if (rgb.match(/^#.*$/))
        {
            return rgb;
        }

        rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);
        
        function hex(x)
        {
            return ("0" + parseInt(x).toString(16)).slice(-2);
        }

        return "#" + hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
    }
}

function applyHomeSplashParams()
{
    var a = $('body').append('<span class="primaryColor">&nbsp;</span>');
    var primaryColor = RGBToHex($('.primaryColor').css('color'));
    var b = $('body').append('<span class="secondaryColor"></span>');
    var secondaryColor = RGBToHex($('.secondaryColor').css('color'));
    var params = $('param[name=source]');
    var newValue = 'primaryColour=' + primaryColor + ', secondaryColour = ' + secondaryColor;
    var initParams = $('param[name=initParams]').first();
    $(initParams).first().attr('value', newValue); // value="primaryColour=' + primaryColor + ',secondaryColour=' + secondaryColor + '" />').insertAfter('param[name=source]');

    $('param[name=minRuntimeVersion]').after('<param name="initParams" value="primaryColour=#000000,secondaryColour=#FFFFFF" />');
    var l = $('param[name=initParams]');
}

function getPrimaryColor()
{
    var span = $('body').append('<span class="primaryColor">&nbsp;</span>').end();
    var primaryColor = RGBToHex($('.primaryColor').css('color'));

    if (isStringNullOrEmpty(primaryColor) == false)
    {
        return primaryColor;
    }

    return "#000000";
}

function getSecondaryColor()
{
    var a = $('body').append('<span class="secondaryColor">&nbsp;</span>').end();
    var secondaryColor = RGBToHex($('.secondaryColor').css('color'));

    if (isStringNullOrEmpty(secondaryColor) == false)
    {
        return secondaryColor;
    }

    return "#FFFFFF";
}

function setActiveMenuLinkStyling()
{
    $('#mainNav li a').each(function (i)
    {
        var labelSelector = $(this).attr("href");
        if (stringContains(window.location.toString(), labelSelector) && labelSelector != "/")
        {
            $(this).toggleClass('activeMenuLink', true);
        }
    });
}

function forceTopMenuActiveItemStyling(topMenuLinkTerm)
{
    $('#mainNav li a').each(function (i)
    {
        var labelSelector = $(this).attr("href");
        if (stringContains(topMenuLinkTerm, labelSelector) && labelSelector != "/")
        {
            $(this).toggleClass('activeMenuLink', true);
        }
    });
}

function setActiveLeftSideMenuLinkStyling()
{
    $('.twoColLeftMenuBar a').each(function (i)
    {
        var labelSelector = $(this).attr("href");
        if (stringContains(window.location.toString(), labelSelector) && labelSelector != "/")
        {
            $(this).toggleClass('activeMenuLink', true);
        }
    });
}

function stringContains(string, searchTerm)
{
    return (string.indexOf(searchTerm) != -1);
}

function formatErrorMessageBox()
{
    var errorSpan = $('.ui-state-error').first().children('span').first();

    if (errorSpan.text() != "")
    {
        $(errorSpan).prepend("<span class=\"ui-icon ui-icon-alert\" style=\"margin-left:0.3em;margin-right:0.3em;float:left\" />");
    }
}

function formatHighlightMessageBox()
{
    var highlightSpan = $('.ui-state-highlight').first().children('span').first();

    if (highlightSpan.text() != "")
    {
        $(highlightSpan).prepend("<span class=\"ui-icon ui-icon-info\" style=\"margin-left:0.3em;margin-right:0.3em;float:left\" />");
    }
}

function passwordStrengthCheck(passwd)
{
    var intScore = 0;

    // PASSWORD LENGTH
    if (passwd.length == 8) // length 8
    {
        intScore += 5;
    }
    else if (passwd.length > 8) // more than 8
    {
        intScore += 10;
    }

    // LETTERS
    if (passwd.match(/[a-z]/)) // [verified] at least one lower case letter
    {
        intScore += 5;
    }

    if (passwd.match(/[A-Z]/)) // [verified] at least one upper case letter
    {
        intScore += 5;
    }

    // NUMBERS
    if (passwd.match(/\d+/)) // [verified] at least one number
    {
        intScore += 5;
    }

    if (passwd.match(/(\d.*\d.*\d)/)) // [verified] at least three numbers
    {
        intScore += 5;
    }

    // SPECIAL CHAR
    if (passwd.match(/[!,@#$£%^&*?_~]/)) // [verified] at least one special character
    {
        intScore += 5;
    }

    if (passwd.match(/([!,@#$£%^&*?_~].*[!,@#$£%^&*?_~])/)) // [verified] at least two special characters
    {
        intScore += 5;
    }

    // COMBOS
    // [Verified] Upper Letters, Lower Letters, numbers and special characters
    if (passwd.match(/[a-z]/) && passwd.match(/[A-Z]/) && passwd.match(/\d/) && passwd.match(/[!,@#$£%^&*?_~]/))
    {
        intScore += 10;
    }

    return intScore;
}

function setPasswordMeter(pwdField, score)
{
    var meterContainer = $(pwdField).next('div.passwordStrengthMeter').first();
    var meter = $(meterContainer).find("div[id=passwordMeter]").first();
    var meterTextDisplay = $(meterContainer).find("strong").first();
    var pwdWidth = $(pwdField).width();

    if (score == 35)
    {
        meter.css("background-color", "Red"); // could animate
        meter.css("width", (pwdWidth * 0.25));
        meterContainer.css("color", "Red");
        meterTextDisplay.text("Weak");
    }
    else if (score > 35 && score <= 40)
    {
        meter.css("background-color", "Orange");
        meter.css("width", (pwdWidth * 0.5));
        meterContainer.css("color", "Orange");
        meterTextDisplay.text("Mediocre");
    }
    else if (score > 40 && score <= 45)
    {
        meter.css("background-color", "Purple");
        meter.css("width", (pwdWidth * 0.75));
        meterContainer.css("color", "Purple");
        meterTextDisplay.text("Strong");
    }
    else if (score > 45)
    {
        meter.css("background-color", "Green");
        meter.css("width", pwdWidth);
        meterContainer.css("color", "Green");
        meterTextDisplay.text("Very Strong");
    }
    else
    {
        meter.css("background-color", "Blue");
        meter.css("width", (pwdWidth * 0.1));
        meterContainer.css("color", "Blue");
        meterTextDisplay.text("Not acceptable");
    }
}

function htmlEncode(value)
{
    return $('<div/>').text(value).html();
}

function htmlDecode(value)
{
    return $('<div/>').html(value).text();
}

function isStringNullOrEmpty(stringValue)
{
    if (stringValue == null)
    {
        return true;
    }
    
    if (stringValue == "")
    {
        return true;
    }

    if (stringValue == undefined)
    {
        return true;
    }

    return false;
}

function isNullOrEmpty(field)
{
	if(typeof(field)=="undefined")
	{
		return true;
	}

	if(field.value == null)
	{
		return true;
	}
	
	if(field.value == "")
	{
		return true;
	}
	
	return false;
}
