﻿var DEBUG_PASSPORT = false;
var DEBUG_PASSPORT_ERRORS = true;
var PassportManager = Class.create({
    initialize: function() {
        if (DEBUG_PASSPORT) console.group('Passport Initialize method');
        this._insertHTMLStructureIntoDOM();
        if (DEBUG_PASSPORT) console.debug('HTML Structure inserted');
        this.fadeManager = new FadeManager();
        this.panels = [];
        this.errorOnData = false;
        this.currentPassportName = '';
        this.changeToPanel = '';
        this.components = [];
        this.showMini = true;
        if (DEBUG_PASSPORT) console.debug('Default init values setted');
        if (DEBUG_PASSPORT) console.groupEnd();
    },
    addToCart: function(dataFormatted) {
        this._showMiniCartAreaWaiting();
        new Ajax.Request('/home.aspx/AddToCartToBasket', {
            contentType: 'application/json',
            postBody: Object.toJSON(dataFormatted),
            onSuccess: function(response) {
                var error = response.responseText.evalJSON().d;
                this.showPopupError(error);
                this._loadMiniCart();


            } .bind(this)
        });
    },
    showPopupError: function(error) {

        error = error.without(null, '');


        var totalMessages = error.size();

        if (totalMessages > 0) {
            var errorHTML = '<ul>';
            error.each(function(item) {
                errorHTML += '<li>' + item + '</li>';
            } .bind(this));
            errorHTML += '</ul>';
            var popupError = $$('.popUpAlert')[0];

            popupError.select('h2')[0].update('SHOPPING CART');
            var desc = popupError.select('p')[0];
            desc.update('');
            desc.insert({ top: errorHTML });
            this.fadeManager.fadeSpecificArea();


            var left = parseInt(($$('body')[0].getWidth() - popupError.getWidth()) / 2);

            popupError.setStyle({
                zIndex: 60,
                'left': left + 'px',
                'top': '200px'
            });

            $$('body')[0].insert({ top: popupError });
            popupError.show();
        }
    },
    addEventToCart: function(dataFormatted) {
        this._showMiniCartAreaWaiting();
        new Ajax.Request('/home.aspx/AddItemEventToBasket', {
            contentType: 'application/json',
            postBody: Object.toJSON(dataFormatted),
            onSuccess: function(response) {
                var error = response.responseText.evalJSON().d;
                this.showPopupError([error]);
                this._loadMiniCart();
            } .bind(this)
        });
    },
    _insertHTMLStructureIntoDOM: function() {
        var body = $$('body')[0];
        body.insert({
            top: new Element('div', {
                'id': 'PassportArea'
            }).insert({
                bottom: new Element('div', {
                    'id': 'PassportAreaReady'
                })
            }).insert({
                bottom: new Element('div', {
                    'id': 'PassportAreaWaiting'
                })
            })
        });
        body.insert({
            top: new Element('div', {
                'id': 'MiniCartArea'
            }).insert({
                bottom: new Element('div', {
                    'id': 'MiniCartAreaReady'
                })
            }).insert({
                bottom: new Element('div', {
                    'id': 'MiniCartAreaWaiting'
                })
            })
        });
        this.passportArea = $('PassportArea');
        this.miniCartArea = $('MiniCartArea');
        this.passportAreaReady = $('PassportAreaReady');
        this.miniCartAreaReady = $('MiniCartAreaReady');
        this.passportAreaWaiting = $('PassportAreaWaiting');
        this.miniCartAreaWaiting = $('MiniCartAreaWaiting');
        this._applyStyleToStructure();
        var x = '<div class="panelContainer">' +
                '    <div class="panelHeader">' +
                '    </div>' +
                '    <div class="panelContent" style="text-align: center; padding: 20px 0;">' +
                '        <img src="/images/passport/loading2.gif" alt="" /><br /><br />Loading information, please wait.' +
                '    </div>' +
                '</div>';
        var y = '<div class="miniCartHeader">' +
                '    <div class="miniCartHeaderDetail">' +
                '        <div class="bodyHeader"><div class="leftCorner"></div><div class="rightCorner"></div></div>' +
                '    </div>' +
                '</div>' +
                '<div class="miniCartBody waiting">' +
                '    <img src="/images/passport/loading2.gif" /><br /><br />Loading information, please wait.' +
                '</div>';
        this.passportAreaWaiting.update(x);
        this.miniCartAreaWaiting.update(y);
    },
    _applyStyleToStructure: function() {
        var header = $('header');
        var passportPosition = [header.offsetLeft, (header.offsetTop + header.getHeight())];
        var miniCartPosition = [(header.offsetLeft + header.getWidth() - 201), (header.offsetTop + 115)];

        this.passportArea.setStyle({
            position: 'absolute',
            backgroundColor: '#ffffff',
            zIndex: 20,
            width: '800px',
            display: 'none',
            left: passportPosition[0] + 'px',
            top: passportPosition[1] + 'px'
        });

        this.miniCartArea.setStyle({
            position: 'absolute',
            zIndex: 20,
            width: '201px',
            display: 'none',
            left: miniCartPosition[0] + 'px',
            top: miniCartPosition[1] + 'px'
        });
    },
    _showMiniCartAreaWaiting: function() {
        this.miniCartArea.show();
        this.miniCartAreaReady.hide();
        this.miniCartAreaWaiting.show();
    },
    _showMiniCartAreaReady: function() {
        this.miniCartArea.show();
        this.miniCartAreaWaiting.hide();
        this.miniCartAreaReady.show();
    },
    _showPassportAreaWaiting: function() {
        this.passportArea.show();
        this.passportAreaReady.hide();
        this.passportAreaWaiting.show();
    },
    _showPassportAreaReady: function() {
        this.passportArea.show();
        this.passportAreaWaiting.hide();
        this.passportAreaReady.show();
    },
    _loadMiniCart: function() {
        this._showMiniCartAreaWaiting();
        var data = null;
        var html = null;
        var onHTMLandDataReady = function() {
            if (html != null && data != null) {
                this.miniCartAreaReady.update(html);
                var rowTemplate = new Template('<tr><td style="vertical-align: top; padding-right: 4px;"><input type="hidden" value="#{LineItemID}|#{PromoCode}" /><img src="/images/passport/cross.png" class="deleteItemOnMiniCart" title="Delete Item" alt="Delete Item" /></td><td>(#{Quantity}) #{DisplayProduct} $#{Price}</td></tr>');
                var totalItems = data.size();
                var totalQuantity = 0;
                if (totalItems > 0) {
                    var htmlRows = '';
                    var totalPrice = 0.00;
                    data.each(function(item) {
                        totalQuantity += parseInt(item.Quantity);
                        item.Price = item.Price.toFixed(2);
                        totalPrice += parseFloat(item.Price) * parseInt(item.Quantity);
                        htmlRows += rowTemplate.evaluate(item);
                    });
                    $('miniCartItems').update(htmlRows);
                    $('miniCartSubtotalPrice').update('$' + totalPrice.toFixed(2));

                    if (totalQuantity == 1) {
                        $('miniCartTotalItems').update('(1 item)');
                    }
                    else {
                        $('miniCartTotalItems').update('(' + totalQuantity + ' items)');
                    }
                }
                else {
                    $('miniCartItems').update('<tr><td colspan="2">There are no items in your cart.</td></tr>');
                    $('miniCartTotalItems').update('(0 items)');
                    $('miniCartSubtotalPrice').update('$0.00');
                }
                this.miniCartAreaReady.select('img.deleteItemOnMiniCart').each(function(el) {
                    el.setStyle({ 'cursor': 'pointer' });
                    el.onClickWithContext(this, function(event) {
                        el = event.findElement();
                        this.ItemToDeleteEl = el;
                        var popup = $('removeConfirmation');
                        var miniCartBodyEl = $$('.miniCartBody')[0];
                        miniCartBodyEl.insert({ top: popup });
                        //console.log(el.positionedOffset());
                        popup.setStyle({
                            'position': 'absolute',
                            'top': (el.positionedOffset()[0] + 64) + 'px',
                            'left': '4px'
                        });
                        popup.show();
                    });
                } .bind(this));
                $$('input.YesButton')[0].onClickWithContext(this, function(event) {
                    this._showMiniCartAreaWaiting();
                    var itemToDelete = this.ItemToDeleteEl.previousSiblings()[0].readAttribute('value');
                    var splitted = itemToDelete.split('|');
                    new Ajax.Request('/home.aspx/RemoveItemMiniShoppingCart', {
                        contentType: 'application/json',
                        postBody: Object.toJSON({
                            ItemID: splitted[0],
                            PromoCodeID: splitted[1]
                        }),
                        onSuccess: function(response) {
                            this._loadMiniCart();
                        } .bind(this)
                    });
                });

                $$('input.NoButton')[0].onClickWithContext(this, function(event) {
                    var popup = $('removeConfirmation');
                    popup.hide();
                });

                $$('input.closeBtn', 'input.xcloseBtn').each(function(el) {
                    el.onClickWithContext(this, function() {
                        $$('.popUpAlert')[0].hide();
                        this.fadeManager.unfadeSpecificArea();
                    });
                } .bind(this));

                $$('input.addPCodeButton')[0].onClickWithContext(this, function() {

                    var promo = $F($$('input.promocodeInputTxt')[0]).trim();

                    if (promo != '') {
                        new Ajax.Request('/home.aspx/ApplyPromoCodeInMiniShoppingCart', {
                            contentType: 'application/json',
                            postBody: Object.toJSON({
                                promoCode: promo
                            }),
                            onSuccess: function(response) {

                                var error = response.responseText.evalJSON().d;

                                if (error == 'promocodesave') {

                                    //show: Your Promocode was sucessfull saved
                                    this.showPopupError(['Your Promocode was sucessfull saved']);
                                    this._loadMiniCart();
                                }
                                else {
                                    var message = '';
                                    switch (error) {
                                        case 'promocodeinvalid':
                                            message = 'Your Promo code was invalid, Please try again';
                                            break;
                                        case 'promocodeexhausted':
                                            message = 'Your Promo code was Exhausted, Please try again';
                                            break;
                                        case 'promocodeexist':
                                            message = 'The Promo code already exits in your order';
                                            break;
                                        case 'promocodenotsuccess':
                                            message = 'Your Promo Code has been added to your shopping cart but it will be applied later';
                                            break;
                                    }
                                    if (message != '') {
                                        this.showPopupError([message]);
                                    }
                                }
                            } .bind(this)
                        });
                    }
                } .bind(this));

                new Ajax.Request('/home.aspx/ShowSaveCartLink', {
                    contentType: 'application/json',
                    onSuccess: function(response) {
                        var result = response.responseText.evalJSON().d;
                        if (result == 'Y') {
                            $('hplRetrieveCart').up().hide();
                            $('hplSaveCart').up().show();
                            //$('hplSaveCart').update('<a id="hplSaveCart" href="javascript:void(0);">Save Cart</a>');
                        }
                        else if (result == 'N') {
                            $('hplSaveCart').up().hide();
                            $('hplRetrieveCart').up().show();

                            //saveCart.update('<a id="hplRetrieveCart" href="javascript:void(0);" onclick="RetrieveCart(); return false;">Retrieve Cart</a>');
                        }

                        $('hplRetrieveCart').onClickWithContext(this, function() {
                            RetrieveCart();
                        });

                        var hplSaveCart = $('hplSaveCart');
                        if (hplSaveCart != undefined) {
                            hplSaveCart.onClickWithContext(this, function() {
                                this.fadeManager.fadeSpecificArea();
                                var popup = $('dvSaveCartControlNotLogged');
                                $$('body')[0].insert({ top: popup });
                                popup.show();
                                var left = parseInt(($$('body')[0].getWidth() - popup.getWidth()) / 2);
                                popup.setStyle({ 'left': left + 'px', 'top': '150px' });
                            });
                            var popupx = $('dvSaveCartControlNotLogged');
                            popupx.select('.close_button, [id=btnSaveSession]').each(function(el) {
                                el.onClickWithContext(this, function() {
                                    popupx.hide();
                                    this.fadeManager.unfadeSpecificArea();
                                });
                            } .bind(this));

                        }



                    } .bind(this)
                });

                //$$('.miniCartHeaderDetail')[0].setStyle({ 'cursor': 'pointer' });
                //$$('.miniCartHeaderDetail')[0].onClickWithContext(this, function () {
                //    this.close();
                //} .bind(this));

                if (this.miniCartArea) {
                    var minShopCartClose = this.miniCartArea.down('input[name=btnCloseCart]');
                    if (minShopCartClose != undefined) {
                        Event.observe(minShopCartClose, 'mouseover', function() {
                            minShopCartClose.setStyle('background-position: 0 0;');
                            //document.title = "cart close on mouseover";
                        })

                        Event.observe(minShopCartClose, 'mouseout', function() {
                            minShopCartClose.setStyle('background-position: 0px -22px;');
                            //document.title = "cart close on mouseout";
                        })

                        Event.observe(minShopCartClose, 'click', function() {
                            this.close();
                        } .bind(this))
                    }
                }


                this.miniCartAreaReady.select('.proceedToCheckout img')[0].setStyle({ 'cursor': 'pointer' });
                this.miniCartAreaReady.select('.proceedToCheckout img')[0].onClickWithContext(this, function(event) {
                    window.location = ViewCartPage;
                });

                if (DEBUG_PASSPORT) console.debug('Merged MiniShoppingCart HTML and DATA');
                this._showMiniCartAreaReady();
                if (DEBUG_PASSPORT) console.debug('Showed MiniCartAreaReady');
            }
        } .bind(this);
        new Ajax.Request('/shoppingcart/MiniShoppingCart.aspx', {
            onSuccess: function(response) {
                var responseText = response.responseText;
                var ajaxContentBegin = '<!--AjaxContentBegin-->';
                var ajaxContentEnd = '<!--AjaxContentEnd-->';
                responseText = responseText.slice(responseText.indexOf(ajaxContentBegin) + ajaxContentBegin.length, responseText.lastIndexOf(ajaxContentEnd));
                html = responseText;
                if (DEBUG_PASSPORT) console.debug('Loaded MiniShoppingCart HTML');
                onHTMLandDataReady();
            } .bind(this)
        });
        new Ajax.Request('/home.aspx/GetMiniShoppingCartInfo', {
            contentType: 'application/json',
            onSuccess: function(response) {
                data = response.responseText.evalJSON().d.evalJSON();
                if (DEBUG_PASSPORT) console.debug('Loaded MiniShoppingCart DATA');
                onHTMLandDataReady();
            } .bind(this)
        });
    },
    _applyRules: function() {
        var splitted = this.data.Rules[0].split('Panel_tcm-');
        splitted.each(function(item) {
            if (item != '') {
                var splitted2 = item.split('|');
                var ind = [];
                for (var i = 1; i < splitted2.size(); i++) {
                    if (splitted2[i] != '') {
                        var splitted3 = splitted2[i].split(',');
                        ind.push({ id: splitted3[0], value: splitted3[1] });
                    }
                }
                this.components.push(ind);
            }
        } .bind(this));
    },
    _doWork: function() {

        if (DEBUG_PASSPORT) console.group('Passport DoWork method');
        this._cancelSubmitEvent();
        if (DEBUG_PASSPORT) console.debug('Form Submit canceled for each Panel');
        this._setupHeader();
        if (DEBUG_PASSPORT) console.debug('Panel header setted');
        if (!this.errorOnData) {
            if (DEBUG_PASSPORT) console.debug('Trying to merge Passport HTML and DATA');
            this._applyRules();
            this._bindDataForPanels();

        }
        if (DEBUG_PASSPORT) console.debug('Trying to bind general button commands');
        this._bindEventsForCommandButtons();
        if (DEBUG_PASSPORT) console.debug('Binded general buttons on each Panel');
        if (this.changeToPanel != '') {
            this.switchPanel(this.changeToPanel);
            this.changeToPanel = '';
        }
        this._showPassportAreaReady();
        this.setInlinePanelHeight();
        //excute omniture for the first panel
        if (this.changeToPanel == '') {
            var panelId = '';
            var first = true;
            this.passportAreaReady.select('.panelContainer').each(function(el) {
                if (first) {
                    panelId = el.readAttribute('id');
                }
                first = false;
            } .bind(this));

            //omniture
            //alert('omni');
            try {
                var script = this.scripts[0];
                //alert(script);
                eval(script);
                //alert('script inserted on window object');
                var func = 'window.' + panelId + '_Omniture();';
                //alert('trying to execute ' + func);
                eval(func);
                //alert('executed');
            }
            catch (ex) {
                alert('Error on omniture script: ' + ex);
            }
            //omniture

        }
        if (DEBUG_PASSPORT) console.info('Showed PassportAreaReady');
        if (DEBUG_PASSPORT) console.groupEnd();
    },
    _cancelSubmitEvent: function() {
        this.passportAreaReady.select('.panelForm').each(function(el) {
            el.observe('submit', function(e) {
                e.stop();
                return false;
            });
        });
    },
    _setupOtherProducts: function() {
        new Ajax.Request('/home.aspx/GetPassportList', {
            contentType: 'application/json',
            onSuccess: function(response) {
                var data = response.responseText.evalJSON().d.evalJSON();
                var otherProducts = '<div class="viewOtherProducts">' +
										'<select name="ChangePassport">' +
											'<option value="">View Other Products</option>';
                data.each(function(item) {
                    otherProducts += '<option value="' + item.PassportValue + '">' + item.PassportText + '</option>';
                });
                otherProducts += '</select></div>';
                var firstHeader = this.passportAreaReady.select('.panelContainer .panelHeader')[0];
                var headerButtons = firstHeader.select('.headerButtons')[0];
                if (headerButtons != undefined) {
                    headerButtons.remove();
                    firstHeader.insert({ bottom: otherProducts });
                    firstHeader.insert({ bottom: headerButtons });
                }
                else {
                    firstHeader.insert({ bottom: otherProducts });
                }


                firstHeader.select('select[name=ChangePassport]')[0].observe('change', function() {
                    var formData = this.passportAreaReady.select('.panelForm')[0].serialize(true);
                    if (formData.ChangePassport != '') {
                        var splitted = formData.ChangePassport.split('|');
                        var passportName = splitted[0];
                        if (splitted[1] != undefined) {
                            this.changeToPanel = splitted[1];
                        }
                        this.changePassport(passportName);
                    }
                } .bind(this));


            } .bind(this)
        });
    },
    _setupHeader: function() {
        var commands = ' <div class="headerButtons"><div class="expandOrCollapse">' +
                            '<input height="22" type="button" width="30" class="collapseButton2" alt="" />' +
                        '</div>' +
                        '<div class="close">' +
                            '<input height="22" type="button" width="30" class="closeButton" alt="" />' +
                        '</div></div>';
        this._setupOtherProducts();
        var panelPosition = 0;
        var first = true;
        this.passportAreaReady.select('.panelContainer').each(function(panelContainer) {
            var panelHeader = panelContainer.select('.panelHeader')[0];

            panelHeader.insert({ bottom: commands });

            if (first) {
                first = false;
                //panelHeader.select('.expandOrCollapse input')[0].writeAttribute({ 'class': 'collapseButton2' });
                var exp = panelHeader.select('.expandOrCollapse input')[0];
                exp.removeClassName('collapseButton');
                exp.removeClassName('collapseButton2');
                exp.removeClassName('expandButton');
                exp.removeClassName('expandButton2');
                exp.addClassName('collapseButton2');

            }
            else {
                panelHeader.select('.step h1')[0].update('STEP ' + (panelPosition + 1) + ': ');
                panelHeader.select('.close')[0].hide();
                //panelHeader.select('.expandOrCollapse input')[0].writeAttribute({ 'class': 'expandButton' });
                var exp = panelHeader.select('.expandOrCollapse input')[0];
                exp.removeClassName('collapseButton');
                exp.removeClassName('collapseButton2');
                exp.removeClassName('expandButton');
                exp.removeClassName('expandButton2');
                exp.addClassName('expandButton');
                panelContainer.select('.panelContent')[0].hide();
            }

            panelPosition++;
        } .bind(this));
    },
    _bindDataForPanels: function() {
        var panelPosition = 0;

        this.passportAreaReady.select('.panelContainer').each(function(panelContainer) {
            var panelInstance = this.panels[panelPosition];
            panelInstance.data = this.data.Data[panelPosition];
            //console.log(panelInstance.data);
            panelInstance.components = this.components[panelPosition];
            try {
                panelInstance.applyComponentsVisibility();
                panelInstance.doWork();
            }
            catch (ex) {
                if (DEBUG_PASSPORT_ERRORS) alert('Internal Panel Error [' + panelInstance.panelId + ']: ' + ex);
            }
            panelPosition++;
        } .bind(this));
    },
    _bindEventsForCommandButtons: function() {
        var noButton = $$('.addAnotherItem input[name=inputNoButton]')[0];
        var yesButton = $$('.addAnotherItem input[name=inputYesButton]')[0];
        if (noButton != undefined) {
            noButton.stopObserving('click');
            noButton.onClickWithContext(this, function(event) {

                var popup = $$('.addAnotherItem')[0];
                popup.hide();
                this.fadeManager.unfadeSpecificArea();
                var current = this.getSelectedPanel();
                this.goNextPanel(current);

            });
        }

        if (yesButton != undefined) {
            yesButton.stopObserving('click');
            yesButton.onClickWithContext(this, function(event) {
                var popup = $$('.addAnotherItem')[0];
                popup.hide();
                this.fadeManager.unfadeSpecificArea();

            });
        }
        var checkout = this.passportAreaReady.select('[name=inputCheckoutButton]')[0];
        if (checkout != undefined) {
            checkout.onClickWithContext(this, function(event) {
                window.location = ViewCartPage;
            });
        }

        this.passportAreaReady.select('.panelHeader').each(function(el) {
            el.onClickWithContext(this, function(event) {
                var obj = event.findElement();

                if (obj.readAttribute('name') != 'ChangePassport' && obj.readAttribute('class') != 'closeButton') {
                    var panelId = el.up(0).readAttribute('id');
                    this.switchPanel(panelId);
                }
            });
        } .bind(this));



        this.passportAreaReady.select('div.close input').each(function(el) {
            el.onClickWithContext(this, function() {
                this.close();
            });
        } .bind(this));
        this.passportAreaReady.select('input.closePopUp').each(function(el) {
            el.onClickWithContext(this, function(event) {
                el = event.findElement();
                el.up(2).hide();
            });
        } .bind(this));
        this.passportAreaReady.select('input.closeButton').each(function(el) {
            el.onClickWithContext(this, function(event) {
                el = event.findElement();
                el.up(2).hide();
            });
        } .bind(this));
        this.passportAreaReady.select('input.closeCalendar').each(function(el) {
            el.onClickWithContext(this, function(event) {
                el = event.findElement();
                el.up(1).hide();
            });
        } .bind(this));
        this.passportAreaReady.select('.titlePopup').each(function(el) {
            el.onClickWithContext(this, function(event) {
                el = event.findElement();
                var id = el.readAttribute('id');
                if (id != undefined && id != null && id != '') {
                    id = id.substring(6, id.length);
                    $$('.popupPanel').invoke('hide');
                    var popup = this.passportAreaReady.select('[id=' + id + ']')[0];
                    var left = parseInt((800 - popup.getWidth()) / 2);
                    popup.show();
                    popup.setStyle({ 'left': left + 'px' });
                }
            });
        } .bind(this));
        this.passportAreaReady.select('input[name=inputBackButton]').each(function(button) {
            button.onClickWithContext(this, function() {
                this.goPreviousPanel(this.getSelectedPanel());
            });
        } .bind(this));
        this.passportAreaReady.select('a[class=backBtn]').each(function(button) {
            button.onClickWithContext(this, function() {
                this.goPreviousPanel(this.getSelectedPanel());
            });
        } .bind(this));
        this.passportAreaReady.select('input[name=inputNextButton]').each(function(button) {
            button.onClickWithContext(this, function() {
                this.goNextPanel(this.getSelectedPanel());
            });
        } .bind(this));
        this.passportAreaReady.select('a[class=nextBtn]').each(function(button) {
            button.onClickWithContext(this, function() {
                this.goNextPanel(this.getSelectedPanel());
            });
        } .bind(this));
    },

    open: function(passportName) {
        try {
            if (DEBUG_PASSPORT) console.group('Passport Open method');
            this.currentPassportName = passportName;
            if (DEBUG_PASSPORT) console.debug('SET currentPassportName = ' + this.currentPassportName);
            this.fadeManager.fadePage();
            if (DEBUG_PASSPORT) console.debug('Page faded');
            this._showMiniCartAreaWaiting();
            if (DEBUG_PASSPORT) console.debug('Showed MiniCartAreaWaiting');
            if (this.showMini) {
                this._showPassportAreaWaiting();
                if (DEBUG_PASSPORT) console.debug('Showed PassportAreaWaiting');
            }
            this._loadMiniCart();

            if (this.showMini) {
                this._loadPassportHTML();
            }
            if (DEBUG_PASSPORT) console.groupEnd();
        }
        catch (ex) {
            alert(ex);
        }
    },
    changePassport: function(passportName) {
        if (DEBUG_PASSPORT) console.group('Passport ChangePassport method');
        this.currentPassportName = passportName;
        if (DEBUG_PASSPORT) console.debug('SET currentPassportName = ' + this.currentPassportName);
        this._showPassportAreaWaiting();
        if (DEBUG_PASSPORT) console.debug('Showed PassportAreaWaiting');
        if (DEBUG_PASSPORT) console.groupEnd();
        this._loadPassportHTML();
    },
    _loadPassportHTML: function() {
        new Ajax.Request('/shoppingcart/' + this.currentPassportName + '.aspx', {
            onSuccess: function(response) {
                var responseText = response.responseText;
                var ajaxContentBegin = '<!--PassportTicketsStart-->';
                var ajaxContentEnd = '<!--PassportTicketsEnd-->';
                responseText = responseText.slice(responseText.indexOf(ajaxContentBegin) + ajaxContentBegin.length, responseText.lastIndexOf(ajaxContentEnd));
                this.scripts = responseText.extractScripts();
                responseText = responseText.stripScripts();
                try {
                    this.passportAreaReady.update(responseText);
                }
                catch (ex) {
                }



                if (DEBUG_PASSPORT) console.debug('Loaded Passport HTML');
                this._loadPassportData();
            } .bind(this)
        });
    },
    _loadPassportData: function() {
        this.errorOnData = false;
        try {
            if (DEBUG_PASSPORT) console.group('Before loading Passport DATA');
            if (DEBUG_PASSPORT) console.debug('Detecting panels in the current Passport');
            this.passportId = this.passportAreaReady.select('div')[0].readAttribute('id');
            var panelPosition = 0;
            this.panels.clear();
            this.passportAreaReady.select('.panelContainer').each(function(panelContainer) {
                var panelId = panelContainer.readAttribute('id');
                var tridionPanelId = panelContainer.up(1).readAttribute('id');
                if (DEBUG_PASSPORT) console.debug(panelId + ' founded');
                eval('this.panels.push(new ' + panelId + 'Panel(this, tridionPanelId, panelPosition));');
                panelPosition++;
            } .bind(this));
            var strParams = '';
            if (DEBUG_PASSPORT) console.debug('Building strParams to obtain Passport DATA');

            this.panels.each(function(panelInstance) {
                strParams += panelInstance.panelId;
                var hdnVC = panelInstance.panelHTML.select('[name=hdnVirtualCatalog]')[0];
                if (hdnVC != undefined) {
                    strParams += '|' + hdnVC.readAttribute('value');
                }
                if (panelInstance.strParams != undefined) {
                    panelInstance.strParams.each(function(val) {
                        strParams += '|' + val;
                    });
                }
                strParams += ';';
            });
            if (DEBUG_PASSPORT) console.info('strParams:');
            if (DEBUG_PASSPORT) console.log(strParams);
            if (DEBUG_PASSPORT) console.groupEnd();
        }
        catch (ex) {
            this.errorOnData = true;
            if (DEBUG_PASSPORT) console.debug('Loaded Passport DATA (empty)');
            if (DEBUG_PASSPORT_ERRORS) alert('Internal Passport Error: ' + ex);
        }

        var pb = Object.toJSON({
            passportID: this.passportId,
            dataEntry: '',
            strParams: strParams
        });
        new Ajax.Request('/home.aspx/GetPassportInfo', {
            contentType: 'application/json',
            postBody: pb,
            onSuccess: function(response) {
                this.data = response.responseText.evalJSON().d;
                if (this.data == "") {
                    this.errorOnData = true;
                    if (DEBUG_PASSPORT) console.debug('Loaded Passport DATA (empty)');
                }
                else {
                    this.data = this.data.evalJSON();
                }
                if (DEBUG_PASSPORT) console.debug('Loaded Passport DATA');
                this._doWork();
            } .bind(this),
            onFailure: function(response) {
                if (DEBUG_PASSPORT) console.warn('Failed to retrieve DATA for Passport');
                this.errorOnData = true;
                this._doWork();
            } .bind(this)
        });
    },
    getSelectedPanel: function() {
        var panelId;
        this.passportAreaReady.select('.panelContent').each(function(panelContent) {
            var display = panelContent.getStyle('display');
            if (display == 'table' || display == 'block') {
                panelId = panelContent.up().readAttribute('id');
            }
        });
        return panelId;
    },
    goNextPanel: function(currentPanelId) {
        var nextPanel = $$('#' + currentPanelId)[0].up(1).next();

        if (nextPanel != null) {
            var isPanel = false;
            var id = nextPanel.readAttribute('id');
            if (id != undefined && id != null) isPanel = id.startsWith('Panel_tcm');
            if (isPanel) {
                var nextPanelId = nextPanel.select('.panelContainer')[0].readAttribute('id');
                this.switchPanel(nextPanelId);
            }
        }
    },
    goPreviousPanel: function(currentPanelId) {
        var previousPanelId = $$('#' + currentPanelId)[0].up(1).previous().select('.panelContainer')[0].readAttribute('id');
        this.switchPanel(previousPanelId);
    },
    switchPanel: function(panelId) {
        var currentPanel = this.getSelectedPanel();
        var panelElToCollapse = null;
        var panelElToExpand = null;
        if (currentPanel != undefined) {
            var panelElToCollapse = $$('[id=' + currentPanel + '] .panelContent')[0];
        }
        var first = true;
        if (panelId == currentPanel) {
            this.passportAreaReady.select('.panelContent').each(function(panelContent) {
                var panelContainer = panelContent.up();
                if (first) {
                    var exp = panelContainer.select('.expandOrCollapse input')[0];
                    exp.removeClassName('collapseButton');
                    exp.removeClassName('collapseButton2');
                    exp.removeClassName('expandButton');
                    exp.removeClassName('expandButton2');
                    exp.addClassName('expandButton2');
                }
                else {
                    var exp = panelContainer.select('.expandOrCollapse input')[0];
                    exp.removeClassName('collapseButton');
                    exp.removeClassName('collapseButton2');
                    exp.removeClassName('expandButton');
                    exp.removeClassName('expandButton2');
                    exp.addClassName('expandButton');
                }
                if (first) {
                    first = false;
                }
            });
        }
        else {
            var position = 0;
            panelElToExpand = $$('[id=' + panelId + '] .panelContent')[0];
            this.passportAreaReady.select('.panelContent').each(function(panelContent) {
                var panelContainer = panelContent.up();
                if (panelContainer.readAttribute('id') == panelId) {
                    //omniture
                    try {
                        var script = this.scripts[position];
                        eval(script);
                        var func = 'window.' + panelId + '_Omniture();';
                        eval(func);
                    }
                    catch (ex) {
                        alert('Error on omniture script: ' + ex);
                    }
                    //omniture
                    if (first) {
                        var exp = panelContainer.select('.expandOrCollapse input')[0];
                        exp.removeClassName('collapseButton');
                        exp.removeClassName('collapseButton2');
                        exp.removeClassName('expandButton');
                        exp.removeClassName('expandButton2');
                        exp.addClassName('collapseButton2');
                    }
                    else {
                        var exp = panelContainer.select('.expandOrCollapse input')[0];
                        exp.removeClassName('collapseButton');
                        exp.removeClassName('collapseButton2');
                        exp.removeClassName('expandButton');
                        exp.removeClassName('expandButton2');
                        exp.addClassName('collapseButton');
                    }
                }
                else {
                    if (first) {
                        var exp = panelContainer.select('.expandOrCollapse input')[0];
                        exp.removeClassName('collapseButton');
                        exp.removeClassName('collapseButton2');
                        exp.removeClassName('expandButton');
                        exp.removeClassName('expandButton2');
                        exp.addClassName('expandButton2');
                    }
                    else {
                        var exp = panelContainer.select('.expandOrCollapse input')[0];
                        exp.removeClassName('collapseButton');
                        exp.removeClassName('collapseButton2');
                        exp.removeClassName('expandButton');
                        exp.removeClassName('expandButton2');
                        exp.addClassName('expandButton');
                    }
                }
                if (first) {
                    first = false;
                }
                position++;
            } .bind(this));
        }
        $$('.panelHeader').each(function(el) {
            el.stopObserving("click");
        });
        if (panelElToCollapse != null) {
            Effect.BlindUp(panelElToCollapse, { duration: 0.6 });
        }
        if (panelElToExpand != null) {
            Effect.BlindDown(panelElToExpand, { duration: 0.6 });
        }
        var t = setTimeout(this.switchEventPanelAgain.bind(this), 600);
    },
    switchEventPanelAgain: function() {
        this.passportAreaReady.select('.panelHeader').each(function(el) {
            el.onClickWithContext(this, function(event) {
                var obj = event.findElement();

                if (obj.readAttribute('name') != 'ChangePassport' && obj.readAttribute('class') != 'closeButton') {
                    var panelId = el.up(0).readAttribute('id');
                    this.switchPanel(panelId);
                }
            });
        } .bind(this));
    },
    setIndividualInlinePanelHeight: function(panelId) {
        var panelHeight = $(panelId).getHeight();
        var panelHeaderHeight = $$('[id=' + panelId + '] .panelHeader')[0].getHeight();
        var panelContentHeight = panelHeight - panelHeaderHeight;
        $$('[id=' + panelId + '] .panelContent')[0].setStyle({ 'height': panelContentHeight + 'px' });
    },
    setInlinePanelHeight: function() {
        this.passportAreaReady.select('.panelContainer').each(function(panelContainer) {
            var panelId = panelContainer.readAttribute('id');
            var panelContent = panelContainer.select('.panelContent')[0];
            var panelContentDisplay = panelContent.getStyle('display');
            if (panelContentDisplay == 'none') {
                panelContent.show();
                this.setIndividualInlinePanelHeight(panelId);
                panelContent.hide();
            }
            else {
                this.setIndividualInlinePanelHeight(panelId);
            }
        } .bind(this));
    },
    close: function() {
        this.passportArea.hide();
        this.miniCartArea.hide();
        this.fadeManager.unfadePage();
    }
});

var UOPassport;
var isDomLoaded = false;

document.observe("dom:loaded", function() {
    isDomLoaded = true;
});

function openPassport() {
    if (isDomLoaded && UOPassport == undefined) {
        UOPassport = new PassportManager();
    }
    if (UOPassport != undefined) {
        UOPassport.open('PassportParkTickets');
    }
}

function openPassportName(name) {
    if (UOPassport == undefined) {
        UOPassport = new PassportManager();
    }
    UOPassport.open(name);
}

function OpenMiniShoppingCart() {
    if (UOPassport == undefined) {
        UOPassport = new PassportManager();
    }
    UOPassport.showMini = false;
    UOPassport.open('PassportParkTickets');
}
