﻿$(document).ready(function() {
    $("input.datepicker").datepicker({ dateFormat: 'dd M yy' });
    $('#overlay').fadeTo(0, 0);

    $("table.manageData a.link").click(function(evt) {
        evt.preventDefault();
        $('#downloadingPanelID').fadeIn();
        $('#overlay').css('visibility', 'visible');
        $('#overlay').fadeTo("slow", 0.7);
    });

    $('#btnDownloadAll').live('click', function(evt) {
        evt.preventDefault();
        $('#downloadingPanelID').fadeIn();
        $('#overlay').css('visibility', 'visible');
        $('#overlay').fadeTo("slow", 0.7);
    });

    $('#btnClearSearch').click(function(evt) {
        evt.preventDefault();
        $('input.datepicker').val("");
        $('#txtDownloadSearch').val("");
    });
    
    $(".filePopupHolder a#downloadClose").click(
		function(evt) {
		    evt.preventDefault();
		    $('#downloadingPanelID').fadeOut();
		    $('#overlay').fadeTo("slow", 0, function() { $('#overlay').css('visibility', 'hidden') });
		}
	);

    $("input.autoClear").one("focus", function() {
        $(this).val("");
    });
});

function lclResizeCentreCol() {
}

function CheckWebIRPlusTermsAndConditions(sifrAvailable) {
    $.ajax({
        type: 'POST',
        url: '/Modules/Content/WebIRPlus/Default.aspx/CheckWebIRPlusTermsAndConditions',
        dataType: 'json',
        data: '{}',
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            if (data.d) {
                LoginToIpreo();
            } else {
                ShowTermsAndConditions(sifrAvailable);
            }
        }
    });
}

function AcceptTermsAndConditions() {
    $('#WebIRPlusTermsAndConditions').hide(0, function () { $(this).remove(); });
    $.ajax({
        type: 'POST',
        url: '/Modules/Content/WebIRPlus/Default.aspx/AcceptWebIRPlusTermsAndConditions',
        dataType: 'json',
        data: '{}',
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            LoginToIpreo();
        }
    });
}

function LoginToIpreo() {
    $.ajax({
        type: 'POST',
        url: '/Modules/Content/WebIRPlus/Default.aspx/GetIpreoUserToken',
        dataType: 'json',
        data: '{}',
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            if (data.d.BlankTarget) {
                var objWindow = window.open(data.d.URL, "_blank");
                $('#overlayScreen').fadeOut($(this).css('visibility', 'hidden'));
                $('.overlay').remove();
            } else {
                window.location.href = data.d.URL;
            }
        }
    });
}

this.ShowTermsAndConditions = function (sifrAvailable) {
    Revolution.LayoutPath = '/Modules/Layout/Default.aspx';

    $('body').append('<div id="WebIRPlusTermsAndConditions" class="overlay"><div class="topWrapper"><div class="top"><a class="overlayClose"></a><div class="tr"></div><div class="tl"></div></div></div><div class="right"><div class="left"><div class="overlayContent"><div class="overlayContentInnerContainer"></div><div class="ajaxLoaderContainer"><div class="ajaxLoader"></div></div></div></div></div><div class="bottomWrapper"><div class="bottom"><div class="br"></div><div class="bl"></div></div></div></div>');

    var a = $('#WebIRPlusTermsAndConditions').get(0);
    $(a).css('width', '200px');
    $(a).css('left', (($(window).width() - $(a).width()) / 2));
    $(a).css('top', (($(window).scrollTop() + 40)));
    $('#overlayScreen').width($(window).width()).height($('body').outerHeight());
    $('#overlayScreen').show().css('visibility', 'hidden').css('visibility', 'visible').fadeTo(400, 0.7);
    $(a).show().css('visibility', 'visible').css('visibility', 'visible').show();
    showTermsOverlayContent(a, sifrAvailable);
}

function showTermsOverlayContent(o, sifrAvailable) {
    Revolution.GetLayout('WebIRPlusTermsAndConditions', function (l) {
        $(o).find('div.overlayContentInnerContainer').html(l);
        ShowOverlayContent(o, function () {
            //callback
            if (sifrAvailable) {
                sIFR.replace(blissBold, {
                    selector: 'h2.pageTitleH1',
                    css: '.sIFR-root { color: #04476f; }',
                    wmode: 'transparent'
                });
            }
            $(o).find('a.decline').unbind('click').click(function (evt) {
                evt.preventDefault();
                $(o).hide(0, function () { $(this).remove(); });
                $('#overlayScreen').fadeOut($(this).css('visibility', 'hidden'));
                $('.overlay').remove();
            });
        });
    });

    function ShowOverlayContent(o, c) {
        var renderDelay = 100;
        if ($.browser.msie) {
            renderDelay = 400;
        }
        //$(o).oneTime(renderDelay, function () {
            $(o).find('div.ajaxLoaderContainer').hide();
            $(o).animate({
                width: $(o).find('div.overlayContentInner').outerWidth() + 32,
                left: ($(window).width() / 2) - (($(o).find('div.overlayContentInner').outerWidth() + 32) / 2)
            }, 400, function () { $(o).find('div.overlayContentInner').css('position', 'relative'); });
            $(o).find('div.overlayContentInnerContainer').animate({
                height: $(o).find('div.overlayContentInner').outerHeight(),
                width: $(o).find('div.overlayContentInner').outerWidth()
            }, 400, function () {
                var ic = $(this);
                //$(this).oneTime(400, function () {
                ic.css('height', 'auto');
                //});
                if (!$.browser.msie) {
                    $(o).find('div.overlayContentInner').fadeTo(0, 0).css('visibility', 'visible').fadeTo(300, 1, function () {
                        $(o).find('a.overlayClose').unbind('click').click(function () {
                            $(o).hide(0, function () { $(this).remove(); });
                            $('#overlayScreen').fadeOut($(this).css('visibility', 'hidden'));
                            $('.overlay').remove();
                        });
                        if (typeof (c) == 'function') { c(); }
                    });
                } else {
                    $(o).find('div.overlayContentInner').css('visibility', 'visible');
                    $(o).find('a.overlayClose').unbind('click').click(function (evt) {
                        evt.preventDefault();
                        $(o).hide(0, function () { $(this).remove(); });
                        $('#overlayScreen').fadeOut($(this).css('visibility', 'hidden'));
                        $('.overlay').remove();
                    });
                    if (typeof (c) == 'function') { c(); }
                }
            });
        //});
    }
}

//---------------------------------\\
//       PASSWORD MANAGEMENT       \\
//---------------------------------\\
var AttemptLogon = function(lowStrength) {
    $('.loginError').hide();
    $('.loginError').html('');
    if ($('#txtUsername').val() != '' && $('#txtPassword').val() != '') {
        PageMethods.AttemptClientLogon($('#txtUsername').val(), $('#txtPassword').val(), AttemptClientLogonOnComplete, PageMethodOnError, '');
    } else {
        $('.loginError').show();
        $('.loginError').html('<p>' + SiteLabel.TXT500 + '</p>');
    }

    function AttemptClientLogonOnComplete(result, txtresult, methodName) {
        if (result[0] == 'true') {
            if (result[1] == 0) {
                window.location = result[2];
            } else if (result[1] == 1) {
                ShowFirstTimePasswordChangeOverlay(result[3], $('#txtUsername').val(), lowStrength);
            } else if (result[1] == 2) {
                ShowChangePassOverlay(result[3], $('#txtUsername').val(), lowStrength);
            }
        } else {
            $('.loginError').show();
            $('.loginError').html(result[1]);
        }
    }
}

// initial overlay
var ShowFirstTimePasswordChangeOverlay = function (encryptedContactID, username, lowStrength) {
    PageMethods.BuildSecurityQuestionDropdownOptions(BuildSecurityQuestionDropdownOptionsOnComplete, PageMethodOnError, '');

    function BuildSecurityQuestionDropdownOptionsOnComplete(result, txtresult, methodName) {
        var overlayStr = ''
		    + ' <div class="overlay-mainContainer" style="">'
		    + '		<h2 class="">Change Password</h2>'
		    + '		' + $('#divINITIALPWCHANGE').html()
		    + '		<ul class="formContainer">'
		    + '			<li><label id="lblNewPass" for="txtNewPass" class="inlineLabel floatLeft">New Password:</label><input type="password" class="textInput floatRight" id="txtNewPass" /><div class="clear"></div></li>'
		    + '			<li><label id="lblConfirmPass" for="txtConfirmPass" class="inlineLabel floatLeft">Confirm Password:</label><input type="password" class="textInput floatRight" id="txtConfirmPass" /><div class="clear"></div></li>'
		    + '		</ul>';
        if (!lowStrength) {
            overlayStr += '		<p><span class="strong">Security question:</span> ' + $('#divINITIALPWCHANGEDescription').html() + '</p>'
		        + '		<ul class="formContainer">'
		        + '			<li><label id="lblSecurity" for="ddlSecurity" class="inlineLabel floatLeft">Security Question:</label><select class="textInput floatRight" id="ddlSecurity" onchange="CheckOwnQuestion();">' + result + '</select><div class="clear"></div></li>'
		        + '			<li id="liOwnQuestion" style="display: none;"><label id="lblOwnQuestion" for="txtOwnQuestion" class="inlineLabel floatLeft">Question:</label><input type="text" class="textInput floatRight" id="txtOwnQuestion" /><div class="clear"></div></li>'
		        + '			<li><label id="lblAnswer" for="txtAnswer" class="inlineLabel floatLeft">Answer:</label><input type="text" class="textInput floatRight" id="txtAnswer" /><div class="clear"></div></li>';
        }
        overlayStr += "			<li><input type=\"submit\" class=\"submitButton\" value=\"Submit\" onclick=\"SubmitFirstTimePasswordChange('" + encryptedContactID + "','" + username + "'," + lowStrength + ");\" /></li>"
		    + '		</ul>'
		    + '     <div class="validError">'
		    + '     </div>'
		    + '	</div>';
        overlayFunctions.GenerateOverlay(overlayStr);
        $('#core-overlay-close').click(function (evt) {
            evt.preventDefault();
            overlayFunctions.HideOverlay();
            PageMethods.ClientLogout(null, null, '');
        });
    }
}

var CheckOwnQuestion = function() {
    if ($('.overlay-mainContainer #ddlSecurity').val() == -1)
        $('#liOwnQuestion').show();
    else
        $('#liOwnQuestion').hide();
}

var FirstTimePasswordChangeIsValid = function(lowStrength) {
    $('.overlay-mainContainer div.validError').html('');
    $('.overlay-mainContainer .error').each(function(index) {
        $(this).removeClass('error');
    });
    var valid = true;
    var errorMessage = '';

    if ($('.overlay-mainContainer #txtNewPass').val() == '') {
        valid = false;
        $('#lblNewPass').addClass('error');
        errorMessage += '<p>' + 'You must enter a password' + '</p>';
    } else if (!ValidatePassword($('.overlay-mainContainer #txtNewPass').val(), lowStrength)) {
        valid = false;
        $('.overlay-mainContainer #lblNewPass').addClass('error');
        errorMessage += '<p>' + 'Your password is invalid.' + '</p>';
    } else if ($('.overlay-mainContainer #txtConfirmPass').val() == '') {
        valid = false;
        $('.overlay-mainContainer #lblConfirmPass').addClass('error');
        errorMessage += '<p>' + 'You must confirm your password.' + '</p>';
    } else if ($('.overlay-mainContainer #txtConfirmPass').val() != $('.overlay-mainContainer #txtNewPass').val()) {
        valid = false;
        $('.overlay-mainContainer #lblNewPass').addClass('error');
        $('.overlay-mainContainer #lblConfirmPass').addClass('error');
        errorMessage += '<p>' + 'Your passwords do not match.' + '</p>';
    }
    if ($('.overlay-mainContainer #ddlSecurity').val() == '0') {
        valid = false;
        $('.overlay-mainContainer #lblSecurity').addClass('error');
        errorMessage += '<p>' + 'You must select a security question.' + '</p>';
    }
    else if ($('.overlay-mainContainer #ddlSecurity').val() == '-1' && $('.overlay-mainContainer #txtOwnQuestion').val() == '') {
        valid = false;
        $('.overlay-mainContainer #lblOwnQuestion').addClass('error');
        errorMessage += '<p>' + 'You have not entered a question.' + '</p>';
    }
    else if ($('.overlay-mainContainer #txtAnswer').val() == '') {
        valid = false;
        $('.overlay-mainContainer #lblAnswer').addClass('error');
        errorMessage += '<p>' + 'You must enter a security answer.' + '</p>';
    }

    if (errorMessage != '') {
        $('.overlay-mainContainer div.validError').html(errorMessage);
    }

    return valid;
}

var SubmitFirstTimePasswordChange = function (encryptedContactID, username, lowStrength) {
    if (FirstTimePasswordChangeIsValid(lowStrength)) {
        if (lowStrength) {
            PageMethods.SubmitFirstTimeLowStrengthPasswordChange(encryptedContactID, username, $('.overlay-mainContainer #txtNewPass').val(), !lowStrength, SubmitFirstTimePasswordChangeOnComplete, PageMethodOnError, '');
        } else {
            PageMethods.SubmitFirstTimePasswordChange(encryptedContactID, username, $('.overlay-mainContainer #txtNewPass').val(), $('.overlay-mainContainer #ddlSecurity').val(),
                $('.overlay-mainContainer #ddlSecurity :selected').text(), $('.overlay-mainContainer #txtOwnQuestion').val(),
                $('.overlay-mainContainer #txtAnswer').val(), !lowStrength, SubmitFirstTimePasswordChangeOnComplete, PageMethodOnError, '');
        }
    }

    function SubmitFirstTimePasswordChangeOnComplete(result, txtresult, methodName) {
        overlayFunctions.HideOverlayPanel();
        window.setTimeout(function () {
            ShowPassChangedOverlay();
            $('#core-overlay-close').click(function (evt) {
                evt.preventDefault();
                overlayFunctions.HideOverlay();
                window.location = result;
            });
        }, 1000);
    }
}

// change pass overlay
var ShowChangePassOverlay = function(encryptedContactID, username, lowStrength) {
    var overlayStr = ''
		+ ' <div class="overlay-mainContainer" style="">'
		+ '		<h2 class="">Change Password</h2>'
		+ '		<p>' + $('#div90DAYPWCHANGE').html() + '</p>'
		+ '		<ul class="formContainer">'
		+ '			<li><label for="txtNewPass" class="inlineLabel floatLeft">New Password:</label><input type="password" class="textInput floatRight" id="txtNewPass" /><div class="clear"></div></li>'
		+ '			<li><label for="txtConfirmPass" class="inlineLabel floatLeft">Confirm Password:</label><input type="password" class="textInput floatRight" id="txtConfirmPass" /><div class="clear"></div></li>'
		+ "			<li><input type=\"submit\" class=\"submitButton\" value=\"Submit\" onclick=\"SubmitPasswordChange(false, '" + encryptedContactID + "','" + username + "', " + lowStrength + ");\" /></li>"
		+ '		</ul>'
	    + '     <div class="validError">'
	    + '     </div>'
		+ '	</div>';
    overlayFunctions.GenerateOverlay(overlayStr);
}

var SubmitPasswordChange = function (askSecurityQuestion, encryptedContactID, username, lowStrength) {
    if (PasswordChangeIsValid(askSecurityQuestion, encryptedContactID, lowStrength)) {
        var answer = '';
        if (askSecurityQuestion)
            answer = $('#txtAnswer').val();
        PageMethods.CheckSecurityAnswer(askSecurityQuestion, encryptedContactID, answer, CheckSecurityAnswerOnComplete, PageMethodOnError, '');
    }

    function CheckSecurityAnswerOnComplete(result, txtresult, methodName) {
        if (result == 0) {
            PageMethods.SubmitPasswordChange(encryptedContactID, username, $('#txtNewPass').val(), !askSecurityQuestion, !lowStrength, SubmitPasswordChangeOnComplete, PageMethodOnError, '');
        } else if (result == 1) {
            $('#lblSecQues').addClass('error');
            $('#txtSecQues').addClass('error');
            $('#txtAnswer').addClass('error');
            $('div.validError').html('<p>The security answer you have entered does not match our records. Please check your answer and re-submit.</p>');
        } else if (result == 2) {
            $('#lblSecQues').addClass('error');
            $('#txtSecQues').addClass('error');
            $('#txtAnswer').addClass('error');
            $('div.validError').html('<p>' + $('#divCHANGEPWVALIDATION').html() + '</p>');
        }
    }

    function SubmitPasswordChangeOnComplete(result, txtresult, methodName) {
        overlayFunctions.HideOverlayPanel();
        window.setTimeout(function() {
            ShowPassChangedOverlay(askSecurityQuestion);
            $('#core-overlay-close').click(function(evt) {
                evt.preventDefault();
                overlayFunctions.HideOverlay();
                window.location = result;
            });
        }, 1000);
    }
}

var PasswordChangeIsValid = function (askSecurityQuestion, encryptedContactID, lowStrength) {
    $('.overlay-mainContainer div.validError').html('');
    $('.overlay-mainContainer .error').each(function (index) {
        $(this).removeClass('error');
    });
    var valid = true;
    var errorMessage = '';
    
    if ($('#txtNewPass').val() == '') {
        valid = false;
        $('#lblNewPass').addClass('error');
        errorMessage += '<p>' + 'You must enter a password' + '</p>';
    } else if (!ValidatePassword($('#txtNewPass').val(), lowStrength)) {
        valid = false;
        $('#lblNewPass').addClass('error');
        errorMessage += '<p>' + 'Your password is invalid.' + '</p>';
    } else if ($('#txtConfirmPass').val() == '') {
        valid = false;
        $('#lblConfirmPass').addClass('error');
        errorMessage += '<p>' + 'You must confirm your password.' + '</p>';
    } else if ($('#txtConfirmPass').val() != $('#txtNewPass').val()) {
        valid = false;
        $('#lblNewPass').addClass('error');
        $('#lblConfirmPass').addClass('error');
        errorMessage += '<p>' + 'Your passwords do not match.' + '</p>';
    }
    if (askSecurityQuestion && $('#txtAnswer').val() == '') {
        valid = false;
        $('#lblAnswer').addClass('error');
        errorMessage += '<p>' + 'You must enter a security answer.' + '</p>';
    }

    if (errorMessage != '') {
        if ($('.overlay-mainContainer div.validError').length)
            $('.overlay-mainContainer div.validError').html(errorMessage);
        else
            $('div.validError').html(errorMessage);
    }

    return valid;
}

// change email overlay
var ShowEmailOverlay = function(forgotMode) {
    var overlayStr = ''
		+ ' <div class="overlay-mainContainer" style="">';
    if (forgotMode)
        overlayStr += '		<h2 class="">Forgot Password</h2>'
    else
        overlayStr += '		<h2 class="">Change Password</h2>'
    overlayStr += '		<p>' + $('#divCHANGEPWREQUEST').html() + '</p>'
		+ '		<ul class="formContainer">'
		+ '			<li><label id="lblEmail" for="txtEmail" class="inlineLabel floatLeft">Email Address:</label><input type="text" class="textInput floatRight" id="txtEmail" /><div class="clear"></div></li>'
		+ '			<li><input type="submit" class="submitButton" onclick=\"SubmitEmailForPasswordChange(' + forgotMode + ');\" value="Submit"></li>'
		+ '		</ul>'
	    + '     <div class="validError">'
	    + '     </div>'
		+ '	</div>';
    overlayFunctions.GenerateOverlay(overlayStr);
}

var SubmitEmailForPasswordChange = function(forgotMode) {
    if (EmailIsValid()) {
        PageMethods.SubmitPasswordChangeEmailRequest($('#txtEmail').val(), forgotMode, SubmitEmailForPasswordChangeOnComplete, PageMethodOnError, '');
    }

    function SubmitEmailForPasswordChangeOnComplete(result, txtresult, methodName) {
        overlayFunctions.HideOverlayPanel();
        if (result) {
            window.setTimeout(function() {
                ShowValidationMatchOverlay();
                $('#core-overlay-close').click(function(evt) {
                    evt.preventDefault();
                    overlayFunctions.HideOverlay();
                });
            }, 1000);
        } else {
            window.setTimeout(function() {
                ShowValidationErrorOverlay();
                $('#core-overlay-close').click(function(evt) {
                    evt.preventDefault();
                    overlayFunctions.HideOverlay();
                });
            }, 1000);
        }
    }
}

var EmailIsValid = function(askSecurityQuestion, encryptedContactID) {
    $('.overlay-mainContainer div.validError').html('');
    $('.overlay-mainContainer .error').each(function(index) {
        $(this).removeClass('error');
    });
    var valid = true;
    var errorMessage = '';
    var emailRegEx = /^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+$/;

    if ($('#txtEmail').val() == '') {
        valid = false;
        $('#lblEmail').addClass('error');
        errorMessage += '<p>' + 'You must enter your email address.' + '</p>';
    } else if (!emailRegEx.test($('#txtEmail').val())) {
        valid = false;
        $('#lblEmail').addClass('error');
        errorMessage += '<p>' + 'Your email address is invalid.' + '</p>';
    }

    if (errorMessage != '') {
        $('.overlay-mainContainer div.validError').html(errorMessage);
    }

    return valid;
}

// Validation Match overlay
var ShowValidationMatchOverlay = function() {
    var overlayStr = ''
		+ ' <div class="overlay-mainContainer" style="">'
		+ '		<h2 class="">Request Submitted</h2>'
		+ '		<p>' + $('#divPWREQUESTSUBMITTED').html() + '</p>'
		+ '	</div>';
    overlayFunctions.GenerateOverlay(overlayStr);
}

// Validation Error overlay
var ShowValidationErrorOverlay = function() {
    var overlayStr = ''
		+ ' <div class="overlay-mainContainer" style="">'
		+ '		<h2 class="">Email Address Not Found</h2>'
		+ '		<p>' + $('#divEMAILNOTFOUND').html() + '</p>'
		+ '	</div>';
    overlayFunctions.GenerateOverlay(overlayStr);
}

// password changed
var ShowPassChangedOverlay = function(generateOverlay) {
    var overlayStr = ''
		+ ' <div class="overlay-mainContainer" style="">'
		+ '		<h2 class="">Password Changed</h2>'
		+ '		' + $('#divPWCHANGECONFIRMATION').html()
		+ '	</div>';
    if (generateOverlay)
        overlayFunctions.GenerateOverlay(overlayStr);
    else
        overlayFunctions.GenerateOverlayPanel(overlayStr);
}

function PageMethodOnError(error, userContext, methodName) {
    var message = 'Error';
    if (error !== null) {
        message = message + ': ' + error.get_message();
    }
    alert(message);
    return false;
}

var overlayFunctions = new function() {
    this.c = '#core-overlay-container';
    this.ct = '#core-overlay-content';
    this.showHideSpeed = 300;
    var scrollTopSpeed = 400;
    this.prevScrollTop = 0;

    // general framework
    this.GenerateOverlay = function(content) {
        var outputStr = ''
		+ '<div id="core-overlay-container" class="core-overlayFunctions">'
		+ ' <div id="core-overlay-content">'
		+ ' 	<div id="overlay-header"></div>'
		+ '			' + content
		+ ' </div>'
		+ ' <a id="core-overlay-close" href="#"></a>'
		+ '</div>';
        $('body').append(outputStr);

        $('#overlay').show();
        $('#overlay').css({ 'visibility': 'visible', 'width': '100%', 'height': '100%' });
        $('#overlay').fadeTo(overlayFunctions.showHideSpeed, 0.7);

        PositionOverlay(window);

        overlayFunctions.prevScrollTop = $(window).scrollTop();
        $('html,body').animate({ scrollTop: 0 }, scrollTopSpeed);

        $(overlayFunctions.c).fadeIn(overlayFunctions.showHideSpeed);

        $('#core-overlay-close').click(function(evt) {
            evt.preventDefault();
            overlayFunctions.HideOverlay();
        });
    }

    this.GenerateOverlayPanel = function(content) {
        var outputStr = ''
		+ '<div id="core-overlay-container" class="core-overlayFunctions">'
		+ ' <div id="core-overlay-content">'
		+ ' 	<div id="overlay-header"></div>'
		+ '			' + content
		+ ' </div>'
		+ ' <a id="core-overlay-close" href="#"></a>'
		+ '</div>';
        $('body').append(outputStr);

        PositionOverlay(window);

        overlayFunctions.prevScrollTop = $(window).scrollTop();
        $('html,body').animate({ scrollTop: 0 }, scrollTopSpeed);

        $(overlayFunctions.c).fadeIn(overlayFunctions.showHideSpeed);

        $('#core-overlay-close').click(function(evt) {
            evt.preventDefault();
            overlayFunctions.HideOverlay();
        });
    }

    // Positions the overlay relative to the window
    var PositionOverlay = function(parentObj) {
        var startWidth = 200;
        var startHeight = 200;
        var startOffsetLeft = ($(parentObj).width() / 2) - ((startWidth + $(overlayFunctions.c).outerWidth() - $(overlayFunctions.c).innerWidth()) / 2);
        var startOffsetTop = ($(parentObj).height() / 2) - ((startHeight + $(overlayFunctions.c).outerHeight() - $(overlayFunctions.c).innerHeight()) / 2);

        var offsetTop;
        var offsetLeft;
        if ($(parentObj).height() < ($(overlayFunctions.ct).innerHeight() + $(overlayFunctions.c).outerHeight() - $(overlayFunctions.c).innerHeight() + 20))
            offsetTop = 10;
        else
            offsetTop = startOffsetTop - ($(overlayFunctions.ct).innerHeight() - startHeight) / 2;
        if ($(parentObj).width() < (($(overlayFunctions.ct).innerWidth() + $(overlayFunctions.c).outerWidth()) - $(overlayFunctions.c).innerWidth()) + 20)
            offsetLeft = 8;
        else
            offsetLeft = startOffsetLeft - ($(overlayFunctions.ct).innerWidth() - startWidth) / 2;

        $(overlayFunctions.c).animate({
            width: $(overlayFunctions.ct).innerWidth(),
            /*height: $(overlayFunctions.ct).outerHeight(),*/
            left: offsetLeft,
            top: offsetTop
        }
		, overlayFunctions.showHideSpeed
		, function() {
		    $(overlayFunctions.c).fadeTo(0, 0);
		    $(overlayFunctions.c).css({ 'visibility': 'visible', 'filter': 'auto' });
		    $(overlayFunctions.c).fadeTo(overlayFunctions.showHideSpeed, 1);
		});
    }

    this.HideOverlay = function() {
        $(overlayFunctions.c).fadeTo(overlayFunctions.showHideSpeed, 0, function() {
            $(overlayFunctions.c).remove();
        });
        $('#overlay').fadeTo(overlayFunctions.showHideSpeed, 0, function() {
            $('#overlay').css('visibility', 'hidden');
        });
        $('html,body').animate({ scrollTop: overlayFunctions.prevScrollTop }, scrollTopSpeed);
    }

    this.HideOverlayPanel = function() {
        $(overlayFunctions.c).fadeTo(overlayFunctions.showHideSpeed, 0, function() {
            $(overlayFunctions.c).remove();
        });
    }
}

var ValidatePassword = function (password, lowStrength) {
    if (lowStrength) {
        if (password.length < 3 || password.length > 20) {
            return false;
        } else {
            return true;
        }
    } else {
        var error = 0;
        var errorChar = 1;
        var errorNum = 1;
        var errorlChar = 1;
        var erroruChar = 1;
        var errorSymb = 1;

        var reLCaseChar = "abcdefghijklmnopqrstuvwxyz"
        var reUCaseChar = "ABCDEFGHIJKLMNOPQRSTUVWQYZ"
        var reSymbols = "~!@#$%^*()_-={}|:;<>?,."
        var reNum = "1234567890"
        var validChars = reNum + reLCaseChar + reUCaseChar + reSymbols;
        var reAllChar = reLCaseChar + reUCaseChar
        var passwordLength = 8;

        // iterate through string and check against allowed character list
        for (x = 0; x < password.length; x++) {
            c = password.charAt(x);
            if (validChars.indexOf(c) == -1) {
                error = 1;
                break;
            }
        }

        // check to make sure contains numbers 
        for (x = 0; x < password.length; x++) {
            c = password.charAt(x);
            if (reNum.indexOf(c) != -1) {
                errorNum = 0;
                break;
            }
        }

        // check to make sure contains lcase characters
        for (x = 0; x < password.length; x++) {
            c = password.charAt(x);
            if (reLCaseChar.indexOf(c) != -1) {
                errorlChar = 0;
                break;
            }
        }

        // check to make sure contains Ucase characters
        for (x = 0; x < password.length; x++) {
            c = password.charAt(x);
            if (reUCaseChar.indexOf(c) != -1) {
                erroruChar = 0;
                break;
            }
        }

        // check to make sure contains special characters
        for (x = 0; x < password.length; x++) {
            c = password.charAt(x);
            if (reSymbols.indexOf(c) != -1) {
                errorSymb = 0;
                break;
            }
        }

        errorChar = 0;


        // display appropriate message
        if ((error == 1) || (password.length < passwordLength) || (errorChar == 1) || (errorNum == 1) || (erroruChar == 1) || (errorlChar == 1) || (errorSymb == 1)) {
            return false;
        }
        return true;
    }
}

//---------------------------------\\
//             PANMURE             \\
//        ACCOUNT MANAGEMENT       \\
//---------------------------------\\
var Panmure = new function () {
    this.CreateNewAccount = function () {
        if (Panmure.ValidateCreateNewAccountForm()) {
            $.ajax({
                type: 'POST',
                url: '/Modules/Account/Create.aspx/CheckAccountExists',
                dataType: 'json',
                data: '{"username" : "' + $('#txtEmail').val() + '"}',
                contentType: 'application/json; charset=utf-8',
                success: function (data) {
                    if (data.d) {
                        alert('You have already requested access to the Panmure Gordon IR SRA Portal.\nIf you wish to discuss your request please contact Wayne Slyfield at Panmure Gordon on +44 (0)20 7614 8319.');
                    } else {
                        $.ajax({
                            type: 'POST',
                            url: '/Modules/Account/Create.aspx/CreateAccount',
                            dataType: 'json',
                            data: '{"firstName" : "' + $('#txtFirstName').val() + '","lastName" : "' + $('#txtLastName').val()
                            + '","organisation" : "' + $('#txtOrganisation').val() + '","issueName" : "' + $('#txtIssueName').val()
                            + '","jobTitle" : "' + $('#txtJobTitle').val() + '","telephone" : "' + $('#txtTelephone').val()
                            + '","email" : "' + $('#txtEmail').val() + '"}',
                            contentType: 'application/json; charset=utf-8',
                            success: function () {
                                Panmure.ShowCreateNewAccountConfirmation();
                            },
                            error: function () {
                                alert('Unknown Error');
                            }
                        });
                    }
                },
                error: function () {
                    alert('Unknown Error');
                }
            });
        }
    }

    this.ValidateCreateNewAccountForm = function () {
        $('.newAccountForm li').removeClass('formError');
        $('.newAccountForm div.formError').remove();

        var valid = true;
        var message = '';
        var myRegExp = /^([a-zA-Z0-9])+([\.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(\.[a-zA-Z0-9_-]+)+$/;

        $('input.mandatory').each(function (index) {
            if ($(this).val().trim() == '') {
                valid = false;
                message = '<li>You must complete all mandatory fields.</li>'

                $(this).closest('li').addClass('formError');
            }
        });
        if ($('#txtEmail').val() != '' && !myRegExp.test($('#txtEmail').val())) {
            valid = false;
            message += '<li>You must provide a valid email address.</li>';
            $('#overlayContainer #txtEmail').closest('li').addClass('formError');
        }

        if (message != '')
            $('.newAccountForm h2').eq(0).after('<div class="formError"><ul>' + message + '</ul></div>');

        return valid;
    }

    this.ShowCreateNewAccountConfirmation = function () {
        $.get("/Modules/Layout/Default.aspx?s=CreateAccountConfirmation", function (l) {
            overlayFunctions.GenerateOverlay(l);
            $('#core-overlay-close').unbind('click').click(function () {
                $('#core-overlay-container').fadeOut(function () {
                    window.location.href = '/';
                });
            });
        });
    }

    this.ApproveAccount = function (contactID) {
        $.ajax({
            type: 'POST',
            url: '/Modules/Account/Approve.aspx/ApproveRejectContact',
            dataType: 'json',
            data: '{"approve" : true, "contactID" : ' + contactID + '}',
            contentType: 'application/json; charset=utf-8',
            success: function () {
                var objWindow = window.open(location.href, "_parent");
                objWindow.close();
            },
            error: function () {
                alert('Unknown Error');
            }
        });
    }

    this.RejectAccount = function (contactID) {
        $.ajax({
            type: 'POST',
            url: '/Modules/Account/Approve.aspx/ApproveRejectContact',
            dataType: 'json',
            data: '{"approve" : false, "contactID" : ' + contactID + '}',
            contentType: 'application/json; charset=utf-8',
            success: function () {
                var objWindow = window.open(location.href, "_parent");
                objWindow.close();
            },
            error: function () {
                alert('Unknown Error');
            }
        });
    }
}

//---------------------------------\\
//             INTRANET            \\
//---------------------------------\\
var Intranet = new function() {
    var MethodSrc = '/Homepages/Intranet/Default.aspx/';
    var Thankyou;

    function ShowOverlayContent(o, c, onClose, isSubOverlay) {
        $(o).find('div.spinner').hide();
        $(o).find('div.overlayContentInnerContainer').animate({ height: $(o).find('div.overlayContentInner').outerHeight() }, 400, function() {
            $(o).find('div.overlayContentInner').fadeTo(0, 0).css('visibility', 'visible').fadeTo(300, 1, function() {
                $(o).find('a.overlayClose').click(function() {
                    $(o).fadeOut(function() { $(this).remove(); });
                    if (!isSubOverlay) {
                        $('#overlayScreen').fadeOut($(this).css('visibility', 'hidden'));
                    }
                    if (typeof (onClose == 'function')) {
                        onClose();
                    }
                });
                if (typeof (c) == 'function') { c(); }
            });
        });
    }

    this.ShowAddClientPageOverlay = function(onClose, isSubOverlay, parentOverlay) {
        Revolution.GenerateOverlay('AddClientPageOverlay', isSubOverlay, parentOverlay, function(o) {
            Revolution.GetLayout('NewClientPage', function(l) {
                l = l.replace(/\{ProjectName\}/, 'Add Client');
                $(o).find('div.overlayContentInner').html(l);
                $(o).find('div.overlayContentInnerContainer').height($(o).find('div.overlayContentInnerContainer').height());

                $(o).find('#txtOrganisation').autocomplete({
                    minLength: 1,
                    delay: 300,
                    source: function(request, response) {
                        $.ajax({
                            type: 'POST',
                            url: MethodSrc + 'GetClients',
                            dataType: 'json',
                            data: '{"searchTerm" : "' + request.term + '"}',
                            contentType: 'application/json; charset=utf-8',
                            success: function(data) {
                                response(data.d);
                            }
                        });
                    },
                    select: function(event, ui) {
                        $(this).val(ui.item.Name);
                        $(this).next('input[type=\'hidden\']').val(ui.item.ID);
                        return false;
                    }
                }).data("autocomplete")._renderItem = function(ul, item) {
                    return $("<li></li>").data("item.autocomplete", item).append("<a>" + item.Name + " <br /><span>[ID: " + item.ID + "]</span></a>").appendTo(ul);
                };
                $(o).find('#txtGandalfCode').autocomplete({
                    minLength: 1,
                    delay: 300,
                    source: function(request, response) {
                        $.ajax({
                            type: 'POST',
                            url: MethodSrc + 'GetFolders',
                            dataType: 'json',
                            data: '{"searchTerm" : "' + request.term + '"}',
                            contentType: 'application/json; charset=utf-8',
                            success: function(data) {
                                response(data.d);
                            }
                        });
                    },
                    select: function(event, ui) {
                        $(this).val(ui.item.Name);
                        $(this).next('input[type=\'hidden\']').val(ui.item.ID);
                        return false;
                    }
                }).data("autocomplete")._renderItem = function(ul, item) {
                    return $("<li></li>").data("item.autocomplete", item).append("<a>" + item.Name + " <br /><span>[ID: " + item.ID + "]</span></a>").appendTo(ul);
                };
                Revolution.InitUIElements(o, MethodSrc, 'clientpage');
                ShowOverlayContent(o, function() { }, function() {
                    if (typeof (onClose) == 'function') {
                        onClose();
                    }
                }, isSubOverlay);
                $(o).find('div.overlayContentInner input.submitButton').click(function(e) {
                    e.preventDefault();
                    if (Revolution.ValidateForm(o)) {
                        //ReplaceWithSpinner($(o).find('div.overlayContentInner a.submitForm'), 32)
                        var externalURL = $('#txtPageName').val();
                        if (externalURL != "") {
                            externalURL = externalURL.toLowerCase();
                            externalURL = externalURL.replace(/[^a-zA-Z 0-9]+/g, '');
                            externalURL = externalURL.replace(/ +/gi, "-");
                            externalURL = externalURL.replace(/\.+/gi, "-");
                            externalURL = externalURL.replace(/'+/gi, "");
                            externalURL = externalURL.replace(/\/+/gi, "/");
                            if (externalURL.lastIndexOf("/") == externalURL.length - 1 || externalURL.lastIndexOf("-") == externalURL.length - 1)
                                externalURL = externalURL.substring(0, externalURL.length - 1);
                            externalURL = '/' + externalURL + '.aspx';
                        }
                        $(o).find('div.overlayContentInner').fadeTo(0, 0);
                        Revolution.DoWebMethod(MethodSrc + 'CreateNewPage', '{"page":' + Revolution.CompileItem(o) + ',"externalURL":"' + externalURL + '"}', function(r) {
                            if (r.d != '') {
                                alert(r.d);
                            } else {
                                Revolution.GetLayout('ThankyouPage', function(l) {
                                    l = l.replace(/\{ProjectName\}/, 'Add Client');
                                    $(o).find('div.overlayContentInner').html(l);
                                    $(o).find('div.overlayContentInner div.successNormalText').html(Intranet.Thankyou);
                                    $(o).find('div.overlayContentInnerContainer').height($(o).find('div.overlayContentInnerContainer').innerHeight());
                                    ShowOverlayContent(o, function() { }, function() {
                                        if (typeof (onClose) == 'function') {
                                            onClose();
                                        }
                                    }, isSubOverlay);
                                    $(o).find('div.overlayContentInner').fadeIn();
                                    $(o).find('div.overlayContentInner input.closeButton').click(function(e) {
                                        $(o).find('a.overlayClose').click();
                                    });
                                });
                            }
                        });
                    }
                });
            });
        });
    };
}
