var debug = false;
(function ($) {
    if(window.init){ return; }
    window.init = true;
    $.fn.reverse = [].reverse; 
    $.easing.easeInOutExpo = (function(){
        var pow = Math.pow;
        return function (x, t, b, c, d) { return t === 0 ? b : t === d ? b + c : (t /= d / 2) < 1 ? c / 2 * pow(2, 10 * --t) + b : c / 2 * (-pow(2, -10 * --t) + 2) + b; };
    }());
    
    //$(function () {
        var win = $(window),
            doc = $(document);

        (function ( bgImages ) {
        return;
            var currentElement = null,
                images = ["island01.jpg","island02.jpg","beach01.jpg","beach02.jpg"],
                loadedImages = [],
                backgroundContainer = $("#background_container"),
                getNextImageSrc = (function () {
                    var imageIndex = 0;
                    return function () {
                        if (++imageIndex >= loadedImages.length) {
                            imageIndex = 0;
                        }
                        return loadedImages[imageIndex];
                    };
                } ()),
                sizeBackground = function () {
                    if (!currentElement || !currentElement) { return; }
                    var img = currentElement.find("img"),
                        imgHeight = img.height(),
                        imgWidth = img.width(),
                        docHeight = $(window).height(),
                        docWidth = doc.width(),
                        adjHeight, adjWidth;
                    // squares make height equal to
                    // largest of document width or height
                    if (imgHeight === imgWidth) {
                        adjHeight = adjWidth = Math.max(docHeight, docWidth);
                    }
                    else {
                        // height is key
                        if (docHeight / imgHeight > docWidth / imgWidth) {
                            adjHeight = docHeight;
                            adjWidth = docHeight * imgWidth / imgHeight;
                        }
                        // width is key
                        else {
                            adjWidth = docWidth;
                            adjHeight = docWidth * imgHeight / imgWidth;
                        }
                    }
                    if(img[0]){
                        img.css({"height":adjHeight,"width":adjWidth, "left": (adjWidth - docWidth) / -2, "top": (adjHeight - docHeight) / -2 });
                    }
                    else{
                        // try again in a second
                        setTimeout(function(){
                            setImage(getNextImageSrc());
                        },1000);
                    }
                },
                setImage = (function () {
                    var timer = null;
                    return function (src, firstRun) {
                        if (currentElement) {
                            currentElement.css("zIndex", 0);
                        }
                        var oldElement = currentElement;
                        currentElement = $('<div class="background_image"><img src="' + src + '" /></div>').prependTo(bgImages);
                        sizeBackground();

                        currentElement.animate({ "opacity": "1" }, firstRun ? 0 : 1000, function () {
                            oldElement && oldElement.remove();
                        });

                        clearTimeout(timer);
                        timer = setTimeout(function () {
                            setImage(getNextImageSrc());
                        }, 40000);
                        if(window["debug"]!==false){
                            var bgCounterDiv = $("#background_counter");
                            var start = (new Date());
                            if(!bgCounterDiv[0]){
                                bgCounterDiv = $("<div id='background_counter' style='position:absolute;top:0;left:0;z-index:2'></div>");
                                backgroundContainer.append(bgCounterDiv);
                            }
                            setTimeout(function(){
                                var diff = 40 - Math.round(((new Date) - start)/1000);
                                if(diff >= 0){
                                    bgCounterDiv.html(diff);
                                    setTimeout(arguments.callee, 1000);
                                }
                            },1000);
                        }
                    };
                } ()),
                imgOnload = (function () {
                    var done = false;
                    return function () {
                        loadedImages.push(this.src);
                        if (done) { return; }
                        done = true;
                        win.resize(sizeBackground);
                        setImage(this.src, true);
                        $("<div class='textShadow' style='cursor:pointer;position:absolute;left:10px;bottom:10px;z-index:9'>Show Background</div>").click(function(){
                            var doShow = this.innerHTML === "Show Background";
                            if($.browser.msie){
                                $("#mainContainer > div.container").css({"visibility":doShow ? "hidden" : "visible"});
                            }
                            else{
                                $("#mainContainer > div.container").stop().animate({"opacity":doShow ? 0 : 1},500,"linear",function(){
                                    if(doShow){
                                        var cont = $("#mainContainer")[0];
                                    }
                                });
                            }
                            this.innerHTML =  doShow ? "Show Content" : "Show Background";
                        }).appendTo( "#mainContainer" );
                    };
                } ());
            // preload the images
            if (window["Image"]) {
                var randomInitalImage = Math.floor( Math.random()*images.length );
                // start downloading a random image
                // then load the others...
                var img = new Image();
                    img.onload = imgOnload;
                    img.src = "/images/bg/" + images[randomInitalImage];
                for (var i in images) {
                    if(i!==randomInitalImage){
                        var img = new Image();
                        img.onload = function(){
                            loadedImages.push(this.src);
                        };
                        img.src = "/images/bg/" + images[i];
                    }
                }
            }
        } ( $("#background_images") ));




        $("#home_imageScroller").each(function(){
            var imageScrollerContainer = $("#home_imageScrollerContainer");
            var imagesContainer = $("#home_images");
            var posHistory = [];
            $(".home_button a", this).click(function(){
                var goLeft = false;
                if(this.parentNode.id === "buttonLeft"){
                    goLeft = true;
                }
                var lastElementPosition = 0;
                var images = imagesContainer.find("img");

                if(goLeft){
                    var pos = posHistory.pop();
                    if(pos!=null){
                        imagesContainer.stop().animate({"left": pos}, 750, "easeInOutExpo");
                    }
                }
                else{
                    var containerMax = imageScrollerContainer.width() - imagesContainer.position().left;
                    images.each(function(){
                        var elementPosition = $(this).position().left;
                        if(elementPosition < containerMax){
                            lastElementPosition = elementPosition;
                        }
                        else{
                            posHistory.push(imagesContainer.position().left || 0);
                            imagesContainer.stop().animate({"left": -lastElementPosition}, 750, "easeInOutExpo");
                            return false;
                        }
                    });
                }
                return false;
            });

        });


        // overlay
        (function(){
            var startpage = document.location.hash.replace(/^#/,""),
                overlay = $("#overlay"),
                content = $("div.content",overlay),
                blocker = $("#overlayBlocker"),
                loadPage = (function(){
                    var trys = 0,
                        ajax = null,
                        show = function(html){
                            if(html){
                                content.html(html);
                            }
                            blocker.show();
                            overlay.show();
                            return false;
                        },
                        hide = function(){
                            window.location.hash="";
                            abort();
                            blocker.hide();
                            overlay.hide();
                            return false;
                        },
                        abort = function(){
                            if(ajax!=null){
                                ajax.abort();
                                ajax=null;
                            }
                        },
                        showLoading = function(){
                            abort();
                            show("<div class=pad><h1>Loading Content</h1><div id=overlayContent>Please wait...</div></div>");
                        };

                    overlay.find("a.close").add(blocker).click(hide);
                    doc.bind("keyup.overlay",function(e){
                        if(e.keyCode===27 && overlay.is(":visible")){
                            hide();
                        }
                    });
                    return function(url){
                        showLoading();
                        ajax = (function(url){
                            return $.ajax({
                                "url":url,
                                "success":function(data){
                                    window.location.hash = url;
                                    trys=0;
                                    show(data||"");
                                },
                                "complete":function(){
                                    ajax=null;
                                },
                                "error":function(){
                                    // try loading the page 4 times...
                                    if(++trys < 4){
                                        arguments.callee.apply(this,arguments);
                                    }
                                    else{
                                        trys=0;
                                        show("<div class=pad><h1>Error</h1><div id=overlayContent>There was a problem with the resource (<em>" + url + "</em>) you requested.<br />The page could not be displayed.<br /><br />You can <a href='" + url + "' class=overlay title='Try Again'>try again</a> or come back later.</div></div>");
                                    }
                                }
                            });
                        }(url));
                        return false;
                    };
                }());
            
            startpage && loadPage(startpage);

            doc.delegate("a.overlay", "click", function(){
                loadPage($(this).attr("href"));
                return false;
            });

        }());



        //tooltips
        doc.delegate(".tooltip","mouseover",function(){
            var offset = $(this).offset(),
                left = offset.left+10,
                top = offset.top-20;
                $(".tooltipDiv").remove();
                $("<div class='tooltipDiv' style='left:"+left+"px;top:"+top+"px;'>"+$(this).attr("rel")+"</div>").appendTo("body");
        }).delegate(".tooltip","mouseout",function(){
                $(".tooltipDiv").remove();
        });


        // contact
        (function(){
            var doErrors = function(self, errors){
                var errorDiv = self.find(".errors");
                    errorDiv = errorDiv[0] ? errorDiv : $("<div class='errors'></div>").prependTo(self);
                    errorDiv.html(errors.join("<br />"));
                };
            doc.delegate("form.ajax input[type=submit]","click",function(){
                var self = $(this).closest("form"),
                    errors = [],
                    // validate
                    name = $.trim($("input[name=txtName]", self).val()),
                    email = $.trim($("input[name=txtEmail]", self).val());
                if(!name){
                    errors.push("Name is required.");
                }
                if(!email){
                    errors.push("Email address is required.");
                }

                if(errors.length!==0){
                    doErrors(self,errors);
                }
                else{
                    self.find(".errors").empty();
                    var values = self.serialize();
                    self.find("input[type=submit]").val("Sending").attr("disabled","disabled");
                    $.ajax({
                        "url":self.attr("action"),
                        "type":"post",
                        "data":values,
                        "success":function(data){
                            if(data===("true")){
                                self.closest("div").html("<h3>Message Sent Successfully</h3><br />An email has been sent to a Tommy's Island representative.<br /><br /><a href='/contact' class='overlay'>Send another</a>");
                            }
                            else{
                                doErrors(self,["An email could not be sent at this time."]);
                            }
                        },
                        "complete":function(){
                            self.find("input[type=submit]").val("Send").removeAttr("disabled");
                        }
                    });
                }

                return false;
            });
        }());
        

        //brands
        (function(){
            doc.delegate("#brandLinks a","click",function(){
                var siblings = $(this.parentNode).find("a");
                var index = siblings.index(this);
                $("#brandlist li").each(function(){
                    var self = $(this);
                    if(index === 0 || self.attr("rel").indexOf(index) > -1){
                        self.show()
                    }else{
                        self.hide()
                    }
                });
                siblings.removeClass("brandSelected");
                $(this).addClass("brandSelected");
                
                return false;
            })
        }());



        //promo
        $("a.promoLink").click(function(){
            var id = "promoForPrint",
                $iframe = $("<iframe id="+id+" style='display:none' src='/promoForPrint?url=" + this.href + "' />");
            if($("#"+id)[0]){
                $("#"+id).remove();
            }
            $("body").append($iframe);
            return false;
        });
        


        //fix IE
        if(window.IERoundies){
            $(function(){
                var find = function(){
                    var selectors = [".contentBackground",".home_button a"];
                
                    for(var s in selectors){
                        $(selectors[s]).each(function(){
                            IERoundies.call(this);
                        });
                    }
                };
                find();
                setInterval(find,1000);
            });
        }


   // });

} (jQuery));
