﻿$(function () {

    /* Guided Navigation
    ****************************/
    if ($(".breadBox").height() > 0) {
        $(".mainContainer").css("background-position", "0px " + ($(".breadBox").height() + 40) + "px");
    }

    /* Brand Menu
    ****************************/
    $(".brandMenu .listItem").hover(function () {
        var menuItem = $(this);

        menuItem.addClass('over');

        if (menuItem.attr('subIds') == '' || menuItem.attr('loaded') == '1')
            return;

        var ids = {
            tabDimensions: menuItem.attr('tabIds'),
            subDimensions: menuItem.attr('subIds')
        };

        $.rcn.content.getMenu(ids, function (info) {
            if (info.Items.length > 0) {
                var html = tmpl("topMenuTemplate", { Items: info.Items });
                $('.subSiteMenu', menuItem).html(html);
            } else {
                $('.subSiteMenu', menuItem).hide();
            }
            menuItem.attr('loaded', 1);
        }, function (info) {
            // Error ?
        });
    }, function () {
        $(this).removeClass('over');
    });

    $('#brandBoutiquesPanelLink').click(getBrandThemeVertical);
    $('#brandBoutiquesPanel').popup($("#brandBoutiquesPanelLink"), $("#closeConcept, #subStorePanelLink"), null, 0);

    function getBrandThemeVertical() {
        renderBrandThemeVertical('/XmlResource.axd?r=MenuBrand_XML', '#flash_container_brand_vertical2', loadBrandVerticalFlash);
    };

    function loadBrandVerticalFlash() {
        var brand_vertical = new SWFObject("//media.redcatsnordic.com/ellos/images/generic/brand_theme_menu/vert_menu.swf", "vert_menu", "191", "345", "9", "#FFFFFF");
        brand_vertical.addParam("wmode", "transparent");
        brand_vertical.addParam("allowScriptAccess", "always");
        brand_vertical.addVariable("xmlPath", "/XmlResource.axd?r=MenuBrand_XML_Endeca");
        brand_vertical.write("flash_container_brand_vertical");
    }

    function renderBrandThemeVertical(xmlFile, container, callback) {
        $("#brandBoutiquesPanelLink").unbind('click', getBrandThemeVertical);

        $.get(xmlFile, function (d) {

            $(d).find('Store').each(function () {

                var title = $(this).attr("title");
                var link = $(this).find('link').text();

                var html = '<a class="arrowLink brandThemeMenu" href="' + link + '" >';
                html += title;
                html += '</a><br>';

                $(container).append($(html));
            });
            callback();
        });
    }

    /* Login layer
    ****************************/
    function initLoginLayer() {
        $('#registerLink').click(function () {
            $.rcn.ui.login.hide();
            $.rcn.ui.createUser.show($.rcn.sourceOfRegisterPage.LoginLayer);
        });

        $('a.#loginbutton').click(function () {
            if ($('div.#loginArea').validate().form()) {
                var username = $('input.#loginusername').val();
                var password = $('input.#loginpassword').val();
                $('div.#loginWorking').show();
                $('div.#loginArea').hide();
                $.rcn.membership.login(username, password,
                    function () {
                        if ($.rcn.ui.login.afterLogin)
                            $.rcn.ui.login.afterLogin();
                        $('div.#loginLayer').jqmHide();
                    },
                    function () {
                        $('div.#loginWorking').hide();
                        $('div.#loginArea').show();
                        loginFailure();
                    }
                );
            }
        });

        $('a.#createUser').click(function () {
            if ($('div.#createUserArea').validate().form()) {
                var username = $('input.#registerUsername').val();
                var password = $('input.#registerPassword').val();
                var acceptNewsLetter = $('input.#acceptNewsLetter').is(':checked');
                $('div.#registerWorking').show();
                $('div.#createUserArea').hide();
                $.rcn.membership.createUser(
                    username,
                    password,
                    acceptNewsLetter,
                    function (messages) {
                        createUserHandler(messages);
                    },
                    function (err) {
                        $('div.#registerWorking').hide();
                        $('div.#createUserArea').show();
                        if (err)
                            $('#registerError').text(err);
                        else
                            createUserServerError();
                    }
                );
            }
        });

        $('a.#btnFetchPersonal').click(function () {
            var civicno = $.trim($('input.#registerCivicNo').val());
            if (civicno.length > 0 && $.validator.methods.civicNumber(civicno)) {
                $('div.#fetchPersonalArea').hide();
                $('div.#applyForCredit').hide();
                $('div.#fetchPersonalWorking').show();
                $.rcn.customer.lookupPersonalData(
                    civicno,
                    function (info) {
                        $('div.#fetchPersonalWorking').hide();
                        $('div.#fetchPersonalArea').show();

                        if (info.Errors.length > 0) {
                            fetchPersonalInfoHandler(info);
                        }
                        else {
                            $('input.#registerFirstName').val(info.FirstName);
                            $('input.#registerLastName').val(info.LastName);
                            $('input.#registerStreet').val(info.Street);
                            $('input.#registerCO').val(info.COAddress);
                            $('input.#registerZipCode').val(info.ZipCode);
                            $('input.#registerCity').val(info.City);
                            $('input.#registerMobilePhone').val(info.MobilePhone);
                        }
                        if (info.CanApplyForCredit) {
                            $('div.#applyForCredit').slideDown('slow');
                        }
                        else {
                            $('div.#applyForCredit').hide();
                        }
                    },
                    function (err) {
                        $('div.#fetchPersonalWorking').hide();
                        $('div.#fetchPersonalArea').show();
                    });
            }
        });

        $('a.#btnRegisterCustomer').click(function () {
            if ($('div.#moreInfoContent').validate().form()) {
                $('div.#registerCustomerWorking').show();
                $('div.#moreInfoContent').hide();
                var customer =
                {
                    "civicNumber": $('input.#registerCivicNo').val(),
                    "applyForCredit": $('input[name=registerApplyForCredit]:radio:checked').val() == '1',
                    "firstName": $('input.#registerFirstName').val(),
                    "lastName": $('input.#registerLastName').val(),
                    "street": $('input.#registerStreet').val(),
                    "zipCode": $('input.#registerZipCode').val(),
                    "city": $('input.#registerCity').val(),
                    "coAddress": $('input.#registerCO').val(),
                    "mobilePhone": $('input.#registerMobilePhone').val(),
                    "gender": $('input[name=registerGender]:radio:checked').val(),
                    "postalDeliveryNotification": $('input[name=registerPostalDeliveryNotification]:radio:checked').val(),
                    "marketingchannel": $('input[name=registerOfferSms]:radio:checked').val(),
                    "acceptTerms": $('input.#registerAcceptTerms').is(':checked')
                };
                $.rcn.customer.create(
                    customer,
                    function (messages) {
                        createCustomerHandler(messages);
                    },
                    function (err) {
                        $('div.#registerCustomerWorking').hide();
                        $('div.#moreInfoContent').show();
                        createCustomerServerError();
                    });
            }
        });
    }

    /* Product Layer
    ****************************/
    var pid = $.rcn.getQueryParameter('pid');
    if (pid.length > 0)
        $.rcn.ui.product.show(pid);

    /* NoticeBoard
    ****************************/
    function setNotificationBubble() {
        $('.notificationBubble').fadepopup($(".notificationIconLink"), $(".closePanelLink, .newsLetterPanelLink, .offerCodePanelLink, .cartPanelLink"), $(".notificationBubble"), 400);
    }

    /* Sitetoolbar
    ****************************/
    $('a.#showCreateUser').click(function () {
        $.rcn.ui.createUser.show($.rcn.sourceOfRegisterPage.Header);
    });
    $.rcn.bind($.rcn.events.loggedIn, function () {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(initToolbar);
        $.rcn.ui.loader.show();
        $.rcn.ui.reloadPage();
    });
    $.rcn.bind($.rcn.events.loggedOut, function () {
        Sys.WebForms.PageRequestManager.getInstance().add_endRequest(initToolbar);
        $.rcn.ui.reloadPage();
    });

    function initToolbar() {
        $('a.#showlogin').click(function () {
            $.rcn.ui.login.show();
        });
        setNotificationBubble();
        initBasket();
        initOfferCodePanel();
        Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(initToolbar);
    }

    initLoginLayer();
    initToolbar();

    /* AccountMenu
    ****************************/
    $.rcn.bind($.rcn.events.loggedIn, function () {
        $('ul.#ypLoggedOutNavigation').hide();
        $('ul.#ypLoggedInNavigation').css('display', '');
        $('a.#ypShowLogin').hide();
        $('a.#ypToPage').show();
    });

    function initAccountMenu() {
        $('a.#ypShowLogin').click(function () {
            $.rcn.ui.login.afterLogin = function () {
                window.location = $.rcn.settings.url.myPage;
            };
            $.rcn.ui.login.show();
        });
    }

    initAccountMenu();

    $(".ypHover").hover(function () {
        $("#ypLoggedInNavigation").show();
        $(".column2b").addClass('columnSelected');
    },
    function () {
        $("#ypLoggedInNavigation").hide();
        $(".column2b").removeClass('columnSelected');
    });

    /* 
    ****************************/

    /* Content Search
    TODO HAR FIX THIS CRAPPY JAVASCRIPT
    ****************************/

    function urlParts(url) {
        var urlParts = /^(https?:\/\/.+?)?(\/.+?)(\?.*?)?$/.exec(url);
        return {
            "server": urlParts[1] ? urlParts[1] : "",
            "path": urlParts[2] ? urlParts[2] : "",
            "query": urlParts[3] ? urlParts[3] : ""
        };
    }

    $('a.search').live("click", contentSearchLinkClickHandler);

    $('#SearchTerm').live('keypress', function (e) {
        if (e.which == 13) {
            e.preventDefault();
            $('#SearchTerm').blur();
            navigateToSearchUrl();
            return false;
        }
    });

    function contentSearchLinkClickHandler(e) {
        e.preventDefault();
        navigateToSearchUrl();
        return false;
    };

    function navigateToSearchUrl() {
        var terms = $("#SearchTerm").val().trim().replace(/[&-]/g, ' ');
        if (terms.length > 1) {
            terms = terms.split(/\s+/);
            var searchTerm = '';
            $.each(terms, function (index, term) {
                var bookingNumber = getBookingNumber(term);
                if (bookingNumber != null)
                    searchTerm = searchTerm + bookingNumber + '+';
                else
                    searchTerm = searchTerm + (term.trim().length > 0 ? term.trim() + '+' : '');
            });
            if (searchTerm.length > 0)
                searchTerm = searchTerm.slice(0, -1);

            url = $('a.#SearchLink').attr('href').replace('searchTerm', searchTerm).replace('%7c1%7c', '%7c' + terms.length + '%7c');
            var parts = urlParts(url);
            window.location.href = encodeURI(parts.path + parts.query);
        }
    };

    function getBookingNumber(value) {
        var m = value.match(/^\d{3}[\.-]?\d{4}$/);
        if (m == null)
            return null;
        return m[0].replace(/[\.-]?/g, '');
    }

    function initTypeAhead() {
        if ($("#SearchTerm").length > 0) {
            $("#SearchTerm").autocomplete("/Content/GetTypeAhead", {
                dataType: 'json',
                minChars: 2,
                selectFirst: false,
                matchSubset: false,
                parse: function (data) {
                    var array = new Array();
                    for (var i = 0; i < data.length; i++) {
                        array[array.length] = { data: data[i], value: data[i], result: data[i] };
                    }
                    return array;
                },
                formatItem: function (item) {
                    return item;
                }
            }).result(function (event, item) {
                $("#SearchTerm").val(item);
                $("a.#SearchLink").trigger("click");
            });
        }
    }

    initTypeAhead();

    /* 
    ****************************/

    /* Tooltip for labels
    ****************************/
    $('.label1, .label2, .label3, .label4').tooltip({
        positionLeft: false,
        track: false,
        top: -73,
        left: 160,
        fixPNG: true,
        showBody: ' - '
    });
    /* 
    ****************************/

    /* Tooltip for split payment
    ****************************/
    
    $('.splitPaymentToolTipResultListList').tooltip({
        positionLeft: false,
        track: false,
        top: -84,
        left: 165,
        fixPNG: true,
        showBody: ' - '
    });

    $('.splitPaymentToolTipClothesline').tooltip({
        positionLeft: false,
        track: false,
        top: 19,
        left: 100,
        fixPNG: true,
        extraClass: "arrowUp",
        showBody: ' - '
    });
    /* 
    ****************************/

    /* Textarea truncation, limit to 2 rows (Found in ResultList.ascx/Clothesline.ascx using jquery.dotdotdot-1.1.3.js)
    ****************************/
    $('.limitTwoRowsWithDots').dotdotdot({
        'height': 30,
        'wrap': 'letter'
    });

    $('.limitTwoRowsWithDotsClothesline').dotdotdot({
        'height': 24,
        'wrap': 'letter'
    });
    /* 
    ****************************/
});

