var sdi = {
    "baseUrl": "",

    init : function(baseUrl){
        this.baseUrl = baseUrl;

        $.ajaxSetup({
            cache: false
        });
    },

    util : {
        /*
         * to use popups in a page, include this line in a page's document.ready: "sdi.util.popups.init();"
         * this will create any link that has a class of "popup" or "new-window" into a popup
         */
        popups : {
            init : function() {
                //popups by "class='popup'"
                sdi.util.popups.doPopUps();

                //popups by "class='new-window'"
                $('a.new-window').live("click", function(){
                    window.open(this.href);
                    return false;
                });
            },

            doPopUps : function() {
                var linkRE = new RegExp(/popup(?:(\d+)x(\d+))?/);
                var match;

                $("a").each(function() {
                    var thisLink = $(this);
                    if (match = linkRE.exec(thisLink.attr("class"))) {
                        var width = match[1] ? isNaN(match[1]) ? 650 : match[1] : 650;
                        var height = match[2] ? isNaN(match[2]) ? 625 : match[2] : 625;
                        sdi.util.popups.createPopupOpener(thisLink, width, height);
                    }
                });
            },

            createPopupOpener : function(link, width, height) {
                link.click(function() {
                    window.open(this.href, "", "top=40,left=40,width=" + width + ",height=" + height + ",resizable=yes,scrollbars=yes,toolbar=yes");
                    return false;
                });
            }
        }, //popups


        cookies : {
            createCookie : function(name,value,days) {
                var expires = "";
                if (days) {
                    var date = new Date();
                    date.setTime(date.getTime()+(days*24*60*60*1000));
                    expires = "; expires="+date.toGMTString();
                }
                document.cookie = name+"="+value+expires+"; path=/";
            },

            readCookie : function(name) {
                var nameEQ = name + "=";
                var ca = document.cookie.split(';');
                for(var i=0;i < ca.length;i++) {
                    var c = ca[i];
                    while (c.charAt(0)==' ') c = c.substring(1,c.length);
                    if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
                }
                return null;
            },

            eraseCookie : function(name) {
                createCookie(name,"",-1);
            }

        }, //cookies

        modalPopup : {
            init : function(){
                $('#modalPopup').dialog({
                    autoOpen: false,
                    resizable: true,
                    draggable: false,
                    modal: true,
                    position: 'top',
                    width: 600,
                    height: 400
                });

                $("a.modalPopup").click(function(){
                    var thisLink = $(this);
                    var href  = thisLink.attr("href");

                    $('#modalPopup').dialog("open");
                    $("#modalPopupContent").load(href, function(responseText, textStatus, XMLHttpRequest){
                        $("#modalPopup").dialog( "option", "title", $("#modalPopupContent h1"));
						$("#modalPopupContent").show();
                    });

                    return false;
                });
            }
        },

        flashVideoPopup : {
            swfLoaded: false,

            init : function(linkId, swfId){
                var swf = $("#" + swfId);
                swf.dialog({
                    width: 584,
                    height: 383,
                    position: 'top',
                    modal: true,
                    autoOpen: false
                });

                //click handler for toggle button
                $("#" + linkId).click(function() {
                    if(!sdi.util.flashVideoPopup.swfLoaded){
                        swf.load("/flash/video.html");
                        sdi.util.flashVideoPopup.swfLoaded = true;
                    }
                    
                    swf.dialog("open");
                    return false;
                });

            }
        },

        showNumCartItems : function(){
        	if(sdi.cart !== undefined) {
	            sdi.cart.ajax.getNumCartItems({}, function(data){
	                $("#numCartItems").text(data["numCartItems"]);
	            });
        	}

        }

    } //util

};

sdi.CategoryFilter = {
    useProductId: true,

    init : function(useProductId){
        sdi.CategoryFilter.useProductId = useProductId;

        $("#selectAll").click(function(){
            sdi.CategoryFilter.toggleAllCheckboxes($("input[name='categorySelect']"), true);
            return false;
        });

        $("#selectNone").click(function(){
            sdi.CategoryFilter.toggleAllCheckboxes($("input[name='categorySelect']"), false);
            return false;
        });

        $("input[name='categorySelect']").click(function(){
            sdi.CategoryFilter.toggleAttractions($("input[name='categorySelect']"));
        });

        sdi.CategoryFilter.toggleAttractions($("input[name='categorySelect']"));

    },

    toggleAllCheckboxes: function (checkboxes, allChecked){
        for(i = 0; i < checkboxes.length; i++){
            checkboxes[i].checked = allChecked;
        }

        this.toggleAttractions(checkboxes);
    },

    toggleAttractions: function (checkboxes) {
        var selectedCategories = [];
        var i;

        if($("input[name='categorySelect']:checked").size() == $("input[name='categorySelect']").size()){
            selectedCategories.push("all");
        } else {
            for(i = 0; i < checkboxes.length; i++){
                if(checkboxes[i].checked){
                    selectedCategories.push(checkboxes[i].value);
                }
            }
        }

        var visibleCount = 0;
        var ind = attractionList.length;
        for(i = 0; i < ind; i++) {
            var attraction = attractionList[i];
            var attributes = attraction["attributes"];
            var attractionCode = attraction["code"];
            var attractionUidPk = attraction["uidPk"];

            var displayAttraction = false;
            for(var j = 0; j < selectedCategories.length; j++){
                var catCode = selectedCategories[j];
                var attributeValue = attributes[catCode];

                if (attributeValue != undefined && attributeValue) {
                    displayAttraction = true;
                }
            }

            if (displayAttraction) {
                if(this.useProductId){
                    this.showAttractionById(attractionUidPk);
                } else {
                    this.showAttractionByCode(attractionCode);
                }
                visibleCount++;
            } else {
                if(this.useProductId){
                    this.hideAttractionById(attractionUidPk);
                } else {
                    this.hideAttractionByCode(attractionCode);
                }
            }
        }

        $("#numAttractionsDisplayed").text(visibleCount);
    },


    showAttractionByCode: function (attrCode) {
        $("#" + attrCode + "_dt").show();
        $("#" + attrCode + "_dd").show();
    },

    hideAttractionByCode: function (attrCode){
        $("#"+attrCode+"_dt").hide();
        $("#"+attrCode+"_dd").hide();
    },

    showAttractionById: function (attrId) {
        $("#li_" + attrId).show();
    },

    hideAttractionById: function (attrId){
        $("#li_" + attrId).hide();
    }

};

sdi.google = {};

sdi.google.trackEvent = function(category, action, label){
    try{
        _gaq.push(["_trackEvent", category, action,  label]);
    } catch(err){}
};

sdi.google.trackEventValue = function(category, action, label, value){
    try{
        _gaq.push(["_trackEvent", category, action,  label, value]);
    } catch(err){}
};

sdi.async = {};

sdi.async.addScript = function(src, callback){
    var head = document.getElementsByTagName("head")[0] || document.documentElement;
    var script = document.createElement("script");
    script.type = 'text/javascript';
    script.src = src;

    // Handle Script loading
    var done = false;

    // Attach handlers for all browsers
    script.onload = script.onreadystatechange = function() {
        if ( !done && (!this.readyState || this.readyState === "loaded" || this.readyState === "complete") ) {
            done = true;

            if(callback){
                callback.call();
            }

            // Handle memory leak in IE
            script.onload = script.onreadystatechange = null;
        }
    };


    head.appendChild( script);
};

sdi.attractionModal = {
    init : function(){
        $("a.attrModal").click(function(){
            var thisLink = $(this);
            var code  = thisLink.attr("rel");
            sdi.attractionModal.open(code);
            return false;
        });

        $('#attrModal').dialog({
            autoOpen: false,
            resizable: true,
            draggable: false,
            modal: true,
            position: 'top',
            width: 600,
            height: 600
        });
    },

    open : function(code){
        $('#attrModal').dialog("open");
        $("#modalLoading").show();
        $("#modalContent").hide();
        $("#modalContent").load(sdi.baseUrl + "/attraction-modal.ep?pID=" + code, function(responseText, textStatus, XMLHttpRequest){
            $("#modalLoading").hide();
            $("#modalContent").show();
        });
    }

};

sdi.powerreviews = {
    "pageId": "",
    "sort": "",
    "page": 0,

    init: function(pageId, sort, page){
        this.pageId = pageId;
        this.sort = sort;
        this.page = page;
    },

    nextPage: function(){
        this.page++;
        try {
        	sdi.google.trackEvent('Reviews', 'nextPage', this.pageId);
        } catch(err) {}
        
        return this.stateChange();
    },

    prevPage: function(){
        this.page--;
        try {
        	sdi.google.trackEvent('Reviews', 'prevPage', this.pageId);
        } catch(err) {}
        
        return this.stateChange();
    },

    sortList: function(sort){
        this.sort = sort;
        this.page = 1;
        try {
        	sdi.google.trackEvent('Reviews', 'sortPage-' + sort, this.pageId);
        } catch(err) {}
        
        return this.stateChange();
    },

    stateChange: function(){
        $("#prReviewEngineDiv").load(sdi.baseUrl + "/pr-summary.ep?productCode="+this.pageId+"&sort="+this.sort+"&page="+this.page);

        return false;
    }

};

