/* General stuff for login and registration layer */

var layerContentLoginRegLoaded = false;
var layerContentPwdForgottenLoaded = false;
var stylesToLoad = Array();
var scriptsToLoad = Array();
var currentLayerTarget = '';

/* Shows the global layer with the content rendered by the page
specified by the url parameter, using the POST target specified in
formTarget */
function showGlobalLayer(url, formTarget, elm) {
    currentLayerTarget = formTarget;
    var nextPage = getNextPageTypeFromUrl(formTarget);
    fireOmnitureOnLayerWithoutError(nextPage);
    var form = $('#layerForm');
    form[0].action = formTarget;
    $('#layerForm').load(url, function(response, status, xhr) {
        if (status == "error") { return false; }

        if (!layerContentLoginRegLoaded) {
            $.each(scriptsToLoad, loadScript);
            $.each(stylesToLoad, loadStyle);
            layerContentLoginRegLoaded = true;
        }

        window.setTimeout("weviWireInfoBubbleElements()", 3000);
        form.show();
        $('#globalLayer').show();
        //waitShowLightboxDialog();
        showLightboxDialog('#login-dialog', 'login-layer-mask');
        $('#login-dialog div.dialog-title').bind('click', function() { hideForm('#login-dialog'); });
        window.setTimeout("fixRightBorder()", 100);
        bindLoginRegFormHighlightingEvents();
        $("#login-dialog .dialog-title strong")[0].innerHTML = getLinkText(elm);
    });
}

waitShowLightboxDialog = function() {
    //    alert('waitShowLightboxDialog');
    // Fieser Hack für den FireFox 3.5 der anscheinend zu langsam ist.
    if ($('#login-dialog').outerHeight() > 550) {
        //        alert('waiting');
        setTimeout("waitShowLightboxDialog()", 50);
    }
    else {
        //        alert('executing');
        showLightboxDialog('#login-dialog', 'login-layer-mask');
        $('#login-dialog div.dialog-title').bind('click', function() { hideForm('#login-dialog'); });
        window.setTimeout("fixRightBorder()", 100);
        bindLoginRegFormHighlightingEvents();
        $("#login-dialog .dialog-title strong")[0].innerHTML = getLinkText(elm);
    }
}

getLinkText = function(elm) {
    if (elm.innerHTML.indexOf("<") == -1) {
        return elm.innerHTML;
    }
    else {
        var curelm;
        for (i = 0; i < elm.childNodes.length; i++) {
            curelm = elm.childNodes[i];
            if (curelm.innerHTML.indexOf("<") == -1) {
                return curelm.innerHTML;
            }
        }
    }
}

function fixRightBorder() {
    $('#dialog-right-border')[0].style.height = $('#layer-body').height() + "px";
}

function fixPwdRightBorder() {
    $('#password-forgotten-dialog-right-border')[0].style.height = $('#password-forgotten-layer-body').height() + "px";
}

function showPasswordLayer(url) {
    var form = $('#layerForm');
    form.load(url, function(response, status, xhr) {
        if (status == "error") { return false; }

        if (!layerContentPwdForgottenLoaded) {
            $.each(scriptsToLoad, loadScript);
            $.each(stylesToLoad, loadStyle);
            layerContentPwdForgottenLoaded = true;
        }
        weviWireInfoBubbleElements();
        form.show();
        $('#globalLayer').show();
        showLightboxDialog('#pwd-dialog', 'pwd-layer-mask');
        $('#pwd-dialog .dialog-body .right').height(0);
        window.setTimeout("fixPwdRightBorder()", 100);
        bindHighlightEvent("password-forgotten-regemail-input", "pwd-forgotten-loginemail-lbl", "input");
        $('#pwd-dialog div.dialog-title').bind('click', function() { hideForm('#pwd-dialog'); });
    });
}

/* Hides the global layer DIV */
function hideGlobalLayer() {
    $('#globalLayer').hide();
}

/* Registers a stylesheet url which has to be loaded bevore layer appears */
function registerStyle(url) {
    isLoaded = false;

    $.each(stylesToLoad, function(script) {
        if (url == script) {
            isLoaded = true;
        }
    });

    if (!isLoaded) {
        stylesToLoad.push(url);
    }
}

/* Registers a script url which has to be loaded bevore layer appears */
function registerScript(url) {
    isLoaded = false;

    $.each(scriptsToLoad, function(script) {
        if (url == script) {
            isLoaded = true;
        }
    });

    if (!isLoaded) {
        scriptsToLoad.push(url);
    }
}

/* Loads a stylesheet file from the given url */
function loadStyle(styleNr, url) {
    var isLoaded = false;

    $.each($('head link'), function(scriptTag) {
        if (this.href && this.href.toLowerCase().indexOf(url.toLowerCase()) > -1) {
            isLoaded = true;
        }
    });

    if (!isLoaded) {
        var snode = document.createElement('link');
        snode.setAttribute('rel', 'stylesheet');
        snode.setAttribute('type', 'text/css');
        snode.setAttribute('href', url);
        document.getElementsByTagName('head')[0].appendChild(snode);
    }
}

/* Loads a javascript file from the given url */
function loadScript(scriptNr, url) {
    var isLoaded = false;

    var selElem = $('head script');

    $.each($('head script'), function() {
        if (this.src && this.src.toLowerCase().indexOf(url.toLowerCase()) > -1) {
            isLoaded = true;
        }
    });

    if (!isLoaded) {
        var snode = document.createElement('script');
        snode.setAttribute('type', 'text/javascript');
        snode.setAttribute('src', url);
        document.getElementsByTagName('head')[0].appendChild(snode);
    }
}

function showLightboxDialog(selector, maskId) {
    var mask = $('#' + maskId);
    // set position of popup and mask after rendering the content
    var winW = $(window).width(), docH = $(document).height();
    mask.css({ 'width': winW, 'height': docH });
    mask.show();

    var modalWindow = $(selector);
    winW = Math.min($(window).width(), $('.content-area').width());
    var top = ($(window).height() - modalWindow.height()) / 3;
    top = top + $(window).scrollTop();
    modalWindow.css({ 'top': top, 'left': (winW - modalWindow.width()) / 2 }).show();
}

function showLoginRegForm() {
    $('#globalLayer').show();
    showLightboxDialog('#login-dialog', 'login-layer-mask');
    $('#login-dialog div.dialog-title').bind('click', function() { hideForm('#login-dialog'); });
    window.setTimeout("fixRightBorder()", 100);
    bindLoginRegFormHighlightingEvents();
}

function bindLoginRegFormHighlightingEvents() {
    bindHighlightEvent("loginemail-input", "loginemail-lbl", "input");
    bindHighlightEvent("loginpwd-input", "loginpwd-lbl", "input");
    bindHighlightEvent("regemail-input", "email1-lbl", "input");
    bindHighlightEvent("regpwd-input", "pass1-lbl", "input");
    bindHighlightEvent("regpwd-confirm-input", "pass2-lbl", "input");
}

function showPwdForm() {
    $('#globalLayer').show();
    showLightboxDialog('#pwd-dialog', 'pwd-layer-mask');
    $('#pwd-dialog .dialog-body .right').height(122);
    $('#pwd-dialog div.dialog-title').bind('click', function() { hideForm('#pwd-dialog'); });
}

function hideForm(selector) {
    $('#login-layer-mask').hide();
    $('#pwd-layer-mask').hide();
    $(selector).fadeOut();
    $('#layerForm').hide();
}

var lastLayerTargetPage = '';

var fireOmnitureOnLayerWithoutError = function(targetPage) {
    fireOmnitureOnLayer(targetPage, false);
};

var fireOmnitureOnLayerWithError = function(targetPage) {
    fireOmnitureOnLayer(targetPage, true);
};

var fireOmnitureOnLayer = function(targetPage, hasError) {
    if (lastLayerTargetPage != targetPage.toLowerCase() || hasError) {
        if (s && (targetPage != null) && (targetPage.length > 0)) {
            switch (targetPage.toLowerCase()) {
                case "parkdeck": s.pageName = 'B2C-Memberarea-Layer-Parkdeck'; break;
                case "framesearchjobs":
                case "searchsubscription": s.pageName = 'B2C-Memberarea-Layer-Searchjob'; break;
                default: return true;
            }
            if (s.pageName.length > 0 && hasError) {
                s.pageName = s.pageName + "-RegError";
            }
            s.events = 'event14';
            s.channel = 'B2C-Memberarea';
            var s_code = s.t();
            if (s_code) { document.write(s_code); }
        }
        lastLayerTargetPage = targetPage.toLowerCase();
    }
};

/* returns the current page */
function getNextPageTypeFromUrl(targetUrl) {
    var nextPageParamRegex = 'npt=([A-Za-z]*)[^A-Za-z]*';
    var v = new RegExp(nextPageParamRegex);
    var m = v.exec(targetUrl);
    return RegExp.$1;
}