/* 

MAD.js is an in-house e-commerce javascript library
copyright 2009,2010 MAD Productions

version 1.3

*/
var MAD = {};

//Core functions
MAD.core = (function() {

    //do a little browser test
    //  var _browser = {
    //		ie:(window.ActiveXObject) ? true : false
    //	};

    //specify card image paths
    var _cardImgs = {
        delta: "url(/common/images/checkout/delta.gif) no-repeat",
        electron: "url(/common/images/checkout/electron.gif) no-repeat",
        maestro: "url(/common/images/checkout/maestro.gif) no-repeat",
        mastercard: "url(/common/images/checkout/mastercard.gif) no-repeat",
        solo: "url(/common/images/checkout/solo.gif) no-repeat",
        visa: "url(/common/images/checkout/visa.gif) no-repeat",
        amex: "url(/common/images/checkout/amex.gif) no-repeat"
    };

    //function to handle chaning credit card logo in checkout
    var _changeCard = function(e, args) {

        //get the id of the select box el from config obj
        var selectEl = (args.id != null) ? document.getElementById(args.id) : null;

        //get the id of the span to hold the card image
        var imgEl = (args.imgId != null) ? document.getElementById(args.imgId) : null;

        //get the selected card (jumping through hoops for IE)
        var cardIndex = selectEl.selectedIndex;
        var cardChoice = selectEl[cardIndex].text.toLowerCase();

        //remove image if first option selected
        (cardIndex == 0) ? imgEl.style.background = "none" : null;

        //get path to image
        var imgPath = _cardImgs[cardChoice];

        //set bg image of span
        imgEl.style.background = imgPath;

    };

    //bookmark
    var _bookmark = function(title, url) {
        if (window.sidebar) {
            window.sidebar.addPanel(title, url, "");
        } else if (document.all) {
            window.external.AddFavorite(url, title);
        } else if (window.opera && window.print) {
            return true;
        }
    };


    //fix open/closed address boxes on post-back pages
    var _closeAddress = function() {
        $(this).parent().find(".genericAddress").slideUp(700);
        $(".slideParentSame").children("div").addClass("existingOn").removeClass("existingOff");
        $(".slideParentDiff").children("div").addClass("existingOff").removeClass("existingOn");
    };

    var _openAddress = function() {
        $(this).parent().find(".genericAddress").slideDown(700);
        $(".slideParentSame").children("div").addClass("existingOff").removeClass("existingOn");
        $(".slideParentDiff").children("div").addClass("existingOn").removeClass("existingOff");
    };

    var _checkEnabled = function(el) {
    if ($(el).hasClass("disabled")) {
            return false;
        }
        else {
            return true;
        }
    };

    //return public methods
    return {
        changeCard: _changeCard,
        bookmark: _bookmark,
        checkEnabled: _checkEnabled
    }
})();

MAD.lightBox = (function() {

    var _init = function() {
        $(".overlay").click(function() {
            if (!$(".modal").is(":visible")) {
                $(".lightbox").hide();
                $(".expandedContent").hide();
                $(this).hide();
            }
        });

        $(".lightbox .btn_close").attr("href", "javascript:MAD.lightBox.hide();");
    }

    var _show = function(id) {
        $(id).css("top", ($(window).height() - $(id).height()) / 2 + $(window).scrollTop() + "px");
        $(id).css("left", ($(window).width() - $(id).width()) / 2 + $(window).scrollLeft() + "px");
        $('.overlay').show();
        $(id).show();
        return false;
    }

    var _hide = function() {
        $(".lightbox").hide();
        $(".overlay").hide();
        //return false;
    }

    //return public methods
    return {
        init: _init,
        show: _show,
        hide: _hide
    }
})();

MAD.treepodia = (function() {
    var _acc;
    var _accID;
    var _skus = [];
    var _vids;
    var _product;

    var _init = function(account) {
        _accID = account;
        _getAccount();
    }

    var _getAccount = function() {
        if (_acc === undefined) {
            _acc = Treepodia.getAccount(_accID);
        }
    }

    var _showLB = function(Video, title, prodURL) {
        MAD.lightBox.show(".lbTreepodia");

        _getProductVideo(Video, function(videoController) {
            videoController.setAutoplay(true);
            videoController.setWidth(554);
            videoController.setHeight(351);
            videoController.setWmode('transparent');
            videoController.show('swfDiv');
        });

        $('.lbTreepodia').find('h5').html(title);

        if (prodURL.length > 0) {
            $('.lbTreepodia').find('a.btn_viewProductLarge').css("display", "block");
            $('.lbTreepodia').find('a.btn_viewProductLarge').attr('href', prodURL);
        }
        else {
            $('.lbTreepodia').find('a.btn_viewProductLarge').css("display", "none");
            $('.lbTreepodia').find('a.btn_viewProductLarge').attr('href', '');
        }

        $(".lbTreepodia a.btn_close").click(function() { MAD.treepodia.stopVideo(Video); });

        $(".overlay").click(function() {
            if (!$(".modal").is(":visible")) {
                $(".lightbox").hide();
                $(".expandedContent").hide();
                $(this).hide();
            }
            MAD.treepodia.stopVideo(Video);

            $(".overlay").click(function() {
                if (!$(".modal").is(":visible")) {
                    $(".lightbox").hide();
                    $(".expandedContent").hide();
                    $(this).hide();
                }
            });
        });
    }

    var _stopVideo = function(Video) {
        _getProductVideo(Video, function(vc) {
            vc.setAutoplay(false);
            vc.setWidth(554);
            vc.setHeight(351);
            vc.setWmode('transparent');
            vc.show('swfDiv');
        });
    }

    var _playVideo = function(Video, title) {
        _showLB(Video, title, '');
    }

    var _getProduct = function(sku) {
        _product = Treepodia.getProduct(_accID, sku);
    }

    var _getProductVideo = function(sku, handler) {
        _getProduct(sku);
        _product.requestVideo(handler);
    }

    var _logAddBasket = function(sku) {
        if (_product === undefined) {
            _getProduct(sku);
        }
        _product.logAddToCart();
    }

    //return public methods
    return {
        init: _init,
        playVideo: _playVideo,
        showLB: _showLB,
        logAddBasket: _logAddBasket,
        getProductVideo: _getProductVideo
    }
})();

//Product Related Functions
MAD.products = (function() {
    var _Products = [];

    //Add product to collection
    var _addProduct = function(o) {
        _Products[o.id] = o;
    }

    //Finds a product in the array
    var _findProduct = function(i) {
        return _Products[i];
    }

    // LARGE PRODUCT IMAGE LIGHT BOX - (PRODUCT OBJECT)
    function enlargeProduct(i) {
        var enProd = i;
        $('.lbEnlargeProduct').find('img').attr('src', '');
        $('.lbEnlargeProduct').find('h5').html(enProd.brandName + ' ' + enProd.name);
        $('.lbEnlargeProduct').find('.commMsg').html(enProd.commercialMsg);
        $('.lbEnlargeProduct').find('img').attr('src', enProd.image);
        $('.lbEnlargeProduct').find('a.btn_viewProdDetails').attr('href', enProd.href);
        $(".lbEnlargeProduct").click(function() {
            MAD.lightBox.hide();
        });
        showLightBox('.lbEnlargeProduct');
    }

    //Displays the product with id i in the specified enlarged container
    var _showProduct = function(target, sender, i) {
        var link = $(sender).find('h3 a').attr('href');

        target = '#' + target;

        var aTitle = $(target + '_aTitle');
        aTitle.attr('href', link);
        $(target + '_aView').attr('href', link);
       // $(target + '_imgProduct').parents('a').attr('href', link);
		$('.image').find('a').attr('href', link);
  	    var img = $(target + '_imgProduct');
        img.attr('src', $(sender).find('.i1 img').attr('src'));
        img.attr('width', $(sender).find('.i1 img').attr('width'));
        img.attr('height', $(sender).find('.i1 img').attr('height'));

		if ($(sender).find('.brandimage').length) {
			$('.brandimage').find('a').attr('href', link);
			var brandImg = $(target + '_imgBrand');
			brandImg.attr('src', $(sender).find('.brandimage img').attr('src'));
        	brandImg.attr('width', $(sender).find('.brandimage img').attr('width'));
        	brandImg.attr('height', $(sender).find('.brandimage img').attr('height'));
		}
		if ($(sender).find('.i2').length) {
			var img2 = $(target + '_imgProduct2');
			img2.attr('src', $(sender).find('.i2 img').attr('src'));
        	img2.attr('width', $(sender).find('.i2 img').attr('width'));
        	img2.attr('height', $(sender).find('.i2 img').attr('height'));
		}
		if ($(sender).find('.swatches').length) {
		//	alert($(target).attr('id'));
			$(target + '_imgProduct2').closest('div').hide();
			var swatches = $(sender).find('.swatches').html();
			$(target).find('.swatches').html(swatches)
		}
		else {
			$(target).find('.swatches').hide();
		}

        var o = _findProduct(i);

        // ENLARGE IMAGE FROM HOVER POPUP
        $(".magnify").click(function() {
            enlargeProduct(o);
            return false;
        });

        aTitle.html('<strong>' + o.brandName + '</strong> ' + o.name);
        aTitle.title = o.brandName + ' ' + o.name;

		// SASH
		if ($(sender).find('.sash').length) {
			var baseBg = $(sender).find('.sash').css('background-image');
			$(target + '_Sash').css({background: baseBg});
			
			$(target + '_Sash').attr('class', $(sender).find('.sash').attr('class'));
		}
		else {
			$(target + '_Sash').css('background', 'none');
			$(target + '_Sash').attr('class', 'sash');
		}
		
		// PRICE BUSTER
		if ($(sender).hasClass('pricebuster')) {
			$(target).addClass('pricebuster');	
		}
		else {
			$(target).removeClass('pricebuster');
		}
		
		// SALE
		if ($(sender).hasClass('sale')) {
			$(target).addClass('sale');	
		}
		else {
			$(target).removeClass('sale');
		}
		
		// PLAY MORE FOR LESS
		if ($(sender).hasClass('play-more')) {
			$(target).addClass('play-more');	
		}
		else {
			$(target).removeClass('play-more');
		}

        // COMMERCIAL MESSAGE
        $(target + '_CommMsg').html(o.commercialMsg);

        //Rating needs moving so it changes the class
        //document.getElementById(target + "_Rating").innerHTML = o.rating;

        if (o.price == "HIDE") {
            $(target + '_Price').html('<a href="' + o.href + '" title="Click for price">Click for price</a>');
            $(target + '_Save').html('');
            $(target + '_RRP').html('');
        }
        else if (o.price == "titleist") {
			$(target + '_Price').html('<a href="#"><strong></strong></a>');	
			$(target + '_Save').html('');
            $(target + '_RRP').html('');
		}
        else {
            $(target + '_Price').html(o.price);

            //if (o.save > 0) {
                //$(target + '_Save').html('SAVE <span>' + o.save + '%</span>');
                //$(target + '_RRP').html('MRRP &pound;' + o.rrp);
            if (o.save.length > 0){
                $(target + '_Save').html(o.save + '%</span>');
                $(target + '_RRP').html('MRRP &pound;' + o.rrp);
            }
            else {
                $(target + '_Save').html('');
                $(target + '_RRP').html('');
            }
        }


        var aVideo = $(target + '_aVideo');
        if (!(o.video == 'NOVID')) {
            aVideo.attr('href', "javascript:MAD.treepodia.showLB('" + o.video + "','" + o.brandName + " " + o.name + "','" + o.href + "');");
            aVideo.css({ display: 'block' });
        }
        else {
            aVideo.css({ display: 'none' });
        }

        var divDeal = $(target + '_Deal');
        if (o.discount) {
            if (o.discount.type == "GIFT") {
                divDeal.css({ display: 'none' });
				if (o.discount.value == "100") {
                    // FREE GIFT
                    divDeal.html('<a href="' + o.discount.href + '" title="' + o.discount.name + '"><img src="' + o.discount.image + '" /></a><span class="fg-copy"><span class="fg">FREE GIFT</span><br /><a href="' + o.discount.href + '" title="' + o.discount.name + '">' + o.discount.name + '</a><br/><span class="val">Value &pound;' + o.discount.price + '</span></span>');
                	
					divDeal.css({ display: 'block' });
				}
            // HOVER STATE DEAL ALERT FOR OTHER DEALS - TEMP TAKEN OUT
			//	else {
//                    //% off
//                    divDeal.html('<strong>' + o.discount.value + '% OFF <a href="' + o.discount.href + '" title="' + o.discount.name + '">' + o.discount.name + '</a></strong><br/>Value &pound;' + o.discount.price + ' Save &pound;' + o.discount.save);
//                }
            }
//            else if (o.discount.type == "MULTI") {
//                //Multibuy
//                divDeal.html('<strong>MULTIBUY <a href="' + o.discount.href + '" title="MULTIBUY Buy ' + o.discount.value + ' for &pound;' + o.discount.price + '">Buy ' + o.discount.value + ' for &pound;' + o.discount.price + '</a></strong>');
//            }
        }
        else {
			// TEST FREE GIFT IN HOVER STATE - FORCED INJECTION
			// divDeal.html('<a href="#" title="#"><img src="#" width="60" height="40" /></a><span class="fg-copy"><span class="fg">FREE GIFT</span><br /><a href="#" title="#">Mizuno Golf MX-700 Hot Metal Fairway</a><br/><span class="val">Value &pound;89.99</span></span>');
			
           divDeal.html('');
           divDeal.css({ display: 'none' });
        }

        var divRating = $(target + '_Rating');          
        var divOOS = $(target + '_OOS');
        var divAIS = $(target + '_AIS');
        
        if (o.oos <= 0 || o.ais > 0) {
            divRating.removeClass("rating norating stockWarning stockWarningStoreOnly");
            if (o.oos <= 0) divRating.addClass("stockWarning").html('Out of Stock');
            if (o.ais > 0) divRating.addClass("stockWarningStoreOnly").html('Available in Store');   
        }
		else {     
            if (o.rating > 0) {
                divRating.removeClass("rating norating stockWarning stockWarningStoreOnly").addClass("rating");
				var inheritRating = $(sender).find(".count").css('width');
                divRating.html('<div class="count" style="width:' + inheritRating + ';"></div>');
            }
            else {
				divRating.removeClass("rating norating stockWarning stockWarningStoreOnly").addClass("norating").html("<!-- -->");
            }        
        }
    }

    // PRODUCT HOVER FUNCTION
    var slightDelay;
    var dynamicClass;
	var objTopPad;
	var top;
	var left;
	
    var _attachProductHover = function() {
       $('.withHover').hoverIntent({
            sensitivity: 3, // number = sensitivity threshold (must be 1 or higher)    
            interval: 200, // number = milliseconds for onMouseOver polling interval    
            timeout: 0, // number = milliseconds delay before onMouseOut    
            over: function() {
            	dynamicClass = ($(this).parents('div').attr('class') + 'Hover');
                
				var pos = $(this).offset();
				left = pos.left;
				top = pos.top;
				objTopPad = parseInt($(this).css("padding-top"));
				
				left -= 19;
				top -= (38 - objTopPad);
				$('.productPopupContainer').css({ left: left, top: top});
				var proddiv = $(this);
				MAD.products.showProduct(enlargeContID, proddiv, proddiv.attr('prod'));
				$('.productPopupContainer').mouseover()
            },
            out: function() {
                //
            }
        }); 
	}
	
	var _productPopupHover = function() {
        $('.productPopupContainer').hover(function(event) {
			$('.productPopup').addClass(dynamicClass);
			$('.productPopupContainer').show();
        }, function() {
		   	$('.productPopup').removeClass(dynamicClass);
    		$('.productPopupContainer').hide();
        });
  	}



    //return public methods
    return {
        addProduct: _addProduct,
        findProduct: _findProduct,
        Products: _Products,
        showProduct: _showProduct,
        attachProductHover: _attachProductHover,
        productPopupHover: _productPopupHover
    }

})();
//Namespace dummy object
MAD.entities = {};

//Class to represent a Product
MAD.entities.product = function(ID, Name, BrandName, Href, Image, CommercialMsg, Price, RRP, Save, Rating, Video, OOS, AIS, Discount) {
    this.id = ID;
    this.name = Name;
    this.brandName = BrandName;
    this.href = Href;
    this.image = Image;
    this.commercialMsg = CommercialMsg;
    this.price = Price;
    this.rrp = RRP;
    this.save = Save;
    this.rating = Rating;
    this.video = Video;
    this.oos = OOS;
    this.ais = AIS;
    this.discount = Discount;    
};
MAD.entities.discount = function(Type, Value, Name, Price, Save, Href,Image) {
    this.type = Type;
    this.value = Value;
    this.name = Name;
    this.price = Price;
    this.save = Save;
    this.href = Href;
    this.image = Image;
};


//Namespace dummy object
MAD.pages = {};

//Pages Init Functions
MAD.pages.all = (function() {

    //Add product to collection
    var _init = function() {
        _miniBasket();
        _newsletter();
        _assistant();
        _searchDropDown();
        _navDelay();
		_carouselTips();
        //_impulseCarousel();
    }

 var _miniBasket = function() {
        // MINI BASKET
		$("#header #basket-summary").hover(function() {
           	$("#header #basket-summary #your-basket").toggleClass("open");
			//$("#header #basket-summary #expanded-basket").stop(true,true).slideDown('slow');
			$("#header #basket-summary #expanded-basket").css({right: 0});
		}, function() {
			//$("#header #basket-summary #expanded-basket").stop(true,true).slideUp('slow', function() {
    			$("#header #basket-summary #expanded-basket").css({right: 9999});
				$("#header #basket-summary #your-basket").removeClass("open");
			//});
		});
			
			
//			var parentObj = $(this).parent();
//			parentObj.find(".ieShim").slideToggle(); // IE6 IFRAME SHIM FIX
//            
//			// CALL TAB ON CALLBACK FOR SMOOTH ANIMATION
//			if (parentObj.find(".expandedContent").is(":hidden")) {
//				parentObj.find("a.expand").addClass("open");
//				parentObj.find(".expandedContent").stop(true,true).slideDown('slow');
//			}
//			else {
//				parentObj.find(".expandedContent").stop(true,true).slideUp('slow', function() {
//    				parentObj.find("a.expand").removeClass("open");	
//				});
//			}
//            
//			$("ul.preferences li a.expand").not(this).removeClass("open");
//            $("ul.preferences li a.expand").not(".open").parent().find(".expandedContent").hide();
//			$("ul.preferences li").not(parentObj).find(".ieShim").hide();
//			return false;
//		});
//
//		// MINI BASKET CLOSE
//		$("#header ul.preferences li .expandedContent a.closeBox").click(function() {
//            var closeObj = $(this).parent();
//			closeObj.parent().find(".ieShim").hide();
//			closeObj.slideUp('slow', function() {
//    			closeObj.parent().find("a.expand").removeClass("open");	
//			});
//			return false;
//        });
    }


    var _newsletter = function() {

        // EMAIL NEWSLETTER SIGNUP
        $(".newsletterEmail").focus(function() {
             if ($(this).attr("value") == "- Enter Email Address -") {
				 $(this).val("");
			 }
        });

        $(".newsletterEmail").blur(function() {
            if ($(this).attr("value") == "") {
                $(this).val("- Enter Email Address -");
            }
        });
    }

     var _assistant = function() {
        // FLY OUT ASSISTANT
		
		$('#assistant').css('left', (($(window).width() / 2)-508) + "px").show();
		$(window).resize(function() {
			$('#assistant').css('left', (($(window).width() / 2)-508) + "px");
		});
		
		$('#assistant #share-open').click(function() {
			if ($('#assistant .share').hasClass('open')) {
				$('#assistant .share').animate({width: ['0px', 'swing']}, 300, function() {
					$('#assistant .share').removeClass('open');
					$('#assistant #share-open').css('left', '30px');																		  
				});
			}
			else {
				$('#assistant .share').animate({width: '218px'}, 300, function() {
					$('#assistant #share-open').css('left', '248px');
					$('#assistant .share').addClass('open');
				});
			}
			return false;
		});
//		$(window).scroll(function() {
//    		$('#assistant').css('top', $(this).scrollTop() + "px");
 //   		$('#assistant').stop(true,true).animate({ top: ($(this).scrollTop() + "px") },500,'linear');
		//	.stop(true,true).animate({ top: ($(window).height() + $(document).scrollTop() - 42) }, 0, 'linear');
//		});
    }

    var _searchDropDown = function() {
        // SEARCH DROPDOWN HOVER
        $("#search-drop .product").live("mouseover mouseout", function() {
            $(this).toggleClass("hovered");
        });
    }

    var _impulseCarousel = function() {
//		$(".impulse-content .impulseCarousel").jCarouselLite({
//			btnNext: ".impulse-content #next",
//	        btnPrev: ".impulse-content #prev",
//			visible: 1,
//			circular: false
//		});
		for (i = 1; i <= 2; i++) {
		    if ($(".ImpCarousel" + i).length) {
		        $(".ImpCarousel" + i + " .impulseCarousel").jCarouselLite({
		            btnNext: ".ImpCarousel" + i + " #next",
		            btnPrev: ".ImpCarousel" + i + " #prev",
		            visible: 1,
		            circular: false
		        });
				if ($(".ImpCarousel" + i + " li").length < 2) {
					$(".ImpCarousel" + i + " #next").addClass('disabled');
				}
			}
		}
		
		if ($(".ImpCarousel1").length) {
		    $(".ImpCarousel2").hide();
		}

    }


    var _navDelay = function() {
        $(".topLevel > li").hoverIntent({
            sensitivity: 3, // number = sensitivity threshold (must be 1 or higher)    
            interval: 200, // number = milliseconds for onMouseOver polling interval    
            timeout: 0, // number = milliseconds delay before onMouseOut    
            over: function() {
                $(this).addClass("open");
            },
            out: function() {
                $(this).removeClass("open");
            }
        });
    }

	var _carouselTips = function() {
		$('.control').hover(function() {
			if (!$(this).hasClass("disabled")) {
				$(this).find('.carouselTip').stop(false,true).fadeIn(300);
			}
		},
  		function () {
			$(this).find('.carouselTip').stop(false,true).fadeOut(300);
		});	
	}


    var _IE6 = function() {
        //        $(".topLevel > li").live('mouseover mouseout', function(event) {
        //            if (event.type == 'mouseover') {
        //                $(this).addClass("ieHover");
        //            }
        //            else {
        //                $(this).removeClass("ieHover");
        //            }
        //        });

        $(window).scroll(function() {
            $('.toolbarContainer').stop().animate({ top: ($(window).height() + $(document).scrollTop() - 42) }, 0, 'linear');
        });
    }

    //return public methods
    return {
        init: _init,
        navDelay: _navDelay,
        impulseCarousel: _impulseCarousel,
		carouselTips: _carouselTips,
        IE6: _IE6
    }
})();


//Pages Init Functions
MAD.pages.home = (function() {

    //Add product to collection
    var _init = function() {
        _saleCarousel();
    }
	

    var _saleCarousel = function() {
        for (i = 1; i <= 5; i++) {
            if ($(".custom-carousel-block" + i).length > 0) {
                $(".custom-carousel-block" + i + " .customCarousel").jCarouselLite({
                    btnNext: ".custom-carousel-block" + i + " .next" + i,
                    btnPrev: ".custom-carousel-block" + i + " .prev" + i,
                    visible: 1,
                    scroll: 1,
                    circular: false
                });
				if ($(".custom-carousel-block" + i + " li").length < 2) {
		        $(".custom-carousel-block" + i + " .next" + i).addClass('disabled');
		    }
            } 	   
		}
		
    }

    //return public methods
    return {
        init: _init
    }
})();

//Pages Init Functions
//MAD.pages.product = (function() {
//
//    //Add product to collection
//    var _init = function() {
//
//    }
//
//    //return public methods
//    return {
//        init: _init
//    }
//})();

function stockCount(qtyselected, stockcount) {
    if (qtyselected > stockcount) {
        //alert('Not enough stock, number available is ' + stockcount);
        alert('Not enough stock');
        //qtyselected=stockcount;
    }
    return qtyselected;
}

