var DEBUG = false;
var chooserLastUrl = "";
var chooserRefinedData;
var chooserFormWatcher;
var chooserResultsCache = {};
var chooserResultsCacheHomePage;
var chooserResultsCacheControlFlag = true;

//food Group, Body,sweetness,bottle price,style (type), country
var facetIDs = ['5032', '4022', '9048', '5040', '15074', '15076', '15078', '15080', '19060', '21060', '23060', '22066'];
var facetNames = ['Style', 'Country', 'Grape Variety', 'Food Group', 'Region', 'Body', 'Sweetness', 'Price', 'Awards', 'Bottle Size', 'WineMaker', 'Alcohol Percentage'];

$(document).ready(function() {
    //Overwrite float left in default.css, needed for share this
	$('#a2apage_border').parent().css('float', 'none');
});

function switchResultView() {
    var defaultPos = $("DIV.resultsprefnav DIV.view").css("background-position");

    // fix nasty IE behaviour
    if (defaultPos == 'undefined' || defaultPos == null) {
    	defaultPos = $("DIV.resultsprefnav DIV.view").css("background-position-x") + ' ' + $("DIV.resultsprefnav DIV.view").css("background-position-y");
    }
    //console.log(defaultPos);
    $("DIV.resultsprefnav DIV.view INPUT.simple").hover(
    function () {
        $("DIV.resultsprefnav DIV.view").css({
            "background-position": "0 17px"
        });
    },
    function () {
        $("DIV.resultsprefnav DIV.view").css({
            "background-position": defaultPos
        });
    });

    $("DIV.resultsprefnav DIV.view INPUT.detailed").hover(
    function () {
        $("DIV.resultsprefnav DIV.view").css({
            "background-position": "-190px 17px"
        });
    },
    function () {
        $("DIV.resultsprefnav DIV.view").css({
            "background-position": defaultPos
        });
    });

    $("DIV.resultsprefnav DIV.view INPUT.expanded").hover(
    function () {
        $("DIV.resultsprefnav DIV.view").css({
            "background-position": "-129px 17px"
        });
    },
    function () {
        $("DIV.resultsprefnav DIV.view").css({
            "background-position": defaultPos
        });
    });
}

function wineInfoPanel() {
    $("DIV.resultspanel").each(function (i) {
        $(this).css({
            "z-index": $(this).css("z-index") - i
        });
    });

    $("DIV.wineinfo A").show();
    $("DIV.wineinfo UL").each(function (i) {

    	// this code removed for now - it was part of the original 26 delivery, but breaks in IE8
    	// because z-index = 'auto' - ..it seems bonkers anyway.

    	//$(this).parents("DIV.wineinfo").css({
        //    "z-index": $(this).parents("DIV.wineinfo").css("z-index") - i
        //});

    	var infosize = $(this).find("LI").size();

        if (infosize % 2 != 0) {
            infosize++;
        }
        infosize = infosize / 2;

        switch (infosize) {
        case 1:
            $(this).css({
                "height": "52px",
                "overflow": "hidden",  "backgroundImage": "url('../../../../LW/img/bg/wineinfobg2.gif')"
            });
            if (jQuery("#special-offer-page").length > 0){
				$(this).css({
                "height": "52px",
                "overflow": "hidden"
           		});
			}
            $(this).siblings("A").hide();
            break;
        case 2:
            $(this).css({
                "height": "104px",
                "overflow": "hidden",  "backgroundImage": "url('../../../../LW/img/bg/wineinfobg2.gif')"
            });
            $(this).siblings("A").hide();
            break;
        case 3:
            $(this).css({
                "height": "156px",
                "overflow": "hidden"
            });
            $(this).parents("DIV.wineinfo").css({
                "backgroundImage": "url('../../../../LW/img/bg/wineinfobg2.gif')"
            });
            $(this).siblings("A").hide();
            break;
        case 4:
            $(this).css({
                "height": "208px",
                "overflow": "hidden"
            });
            $(this).parents("DIV.wineinfo").css({
                "backgroundImage": "url('../../../../LW/img/bg/wineinfobg2.gif')"
            });
			$("#product-details-page DIV.wineinfo").css({
				"background": "transparent url(../../../../LW/img/bg/wineinfobg.gif) no-repeat bottom left"
			});
            $(this).siblings("A").hide();
            break;
        case 5:
            $(this).css({
                "height": "208px",
                "overflow": "hidden"
            });
            $(this).parents("DIV.wineinfo").css({
                "backgroundImage": "url('../../../../LW/img/bg/wineinfobg2.gif')"
            });
			$("#product-details-page DIV.wineinfo").css({
				"background": "transparent url(../../../../LW/img/bg/wineinfobg.gif) no-repeat bottom left"
			});
			if (jQuery("#special-offer-page").length > 0){
				$(this).css({
                "height": "52px",
                "overflow": "hidden"
           		});
			}
            break;
		case 6:
            $(this).css({
                "height": "208px",
                "overflow": "hidden"
            });
            $(this).parents("DIV.wineinfo").css({
                "backgroundImage": "url('../../../../LW/img/bg/wineinfobg2.gif')"
            });
			$("#product-details-page DIV.wineinfo").css({
				"background": "transparent url(../../../../LW/img/bg/wineinfobg.gif) no-repeat bottom left"
			});
            break;
        default:
            $(this).css({
                "height": "104px",
                "overflow": "hidden"
            });
        }


        var infoBlockCount = infosize;

        infosize = (infosize * 52);

        $(this).siblings("A").css({"outline": "none"});
        $(this).siblings("A").click(function (e) {
            var state = $(this).text();
            if (state == "Show all") {
                $(this).siblings("UL").animate({height: infosize}, 1000);
                e.preventDefault();
                $(this).text("Close");
                $(this).css({"backgroundImage": "url('assets/img/bg/up.gif')",
                    "margin-left": "117px"
                });
            }
            else {
				 if (jQuery("#special-offer-page").length > 0) {
                    $(this).siblings("UL").animate({
                        height: "52px"
                    },
                    1000);
                }
                else {

                	// find size of closed box
                    switch (infoBlockCount) {
                    	case 1: boxSize = "52px" ; break;
                    	case 2: boxSize = "104px"; break;
                    	case 3: boxSize = "156px"; break;
                    	case 4: boxSize = "208px"; break;
                    	case 5: boxSize = "208px"; break;
                    	case 6: boxSize = "208px"; break;

                    	default: boxSize = "104px";
                    }

                    $(this).siblings("UL").animate({
                        height: boxSize
                    },
                    1000);
				}
                e.preventDefault();
                $(this).text("Show all");
                $(this).css({
                    "backgroundImage": "url('assets/img/bg/dwn.gif')",
                    "margin-left": "112px"
                });
            }

        });

    });
}

function inArray(value, array) {
    var i;
    for (i = 0; i < array.length; i++) {
        if (array[i] == value) {
            return true;
        }
    }
    return false;
};

function getParam(string, parameter) {
    var filter = /parameter=([\\w\\d]+)/;
    var testRegEx = new RegExp(filter);
    var result = testRegEx.exec(string);
    if (result) {
        return result[0];
    } else {
        return 'null';
    }
}

function genericRegex(string, regex) {
    var poRE = new RegExp(regex);
    var m = poRE.exec(string);
    if (m) return m[1];
    else return false;
}

// dev server
// var ajaxURL = 'http://laithwaites:8080/LW/jsp/templates/article/chooserResults.jsp';
// var pageURL = genericRegex(window.location.href,/http:\/\/([\/\.\:\d\w]+)chooserPage.jsp/g);
// if on chooser page - need to figure out script/noscript version
var pageURL = genericRegex(window.location.href, /(http.+?)(?:chooserPage|chooserPageNoScript).jsp/g);

// otherwise default to the script version
if (!pageURL) {
    pageURL = genericRegex(window.location.href, /(http.*?:\/\/[^\/]+)/g);
    pageURL = pageURL + '/LW/jsp/templates/article/';
}

var ajaxURL = pageURL + 'chooserResults.jsp';

var imagePath = '/LW/img/';

$(document).ready(function () {

	// wine planner page
		if( $('DIV.summaryBox').length > 0 ){

			$('DIV.plannerTabs UL LI A').click( function(e){
				var tabAction = $(this).attr('href');
				//alert(tabAction);
				//e.preventDefault();
			} );

			//tooltips
			//var productID = $('DIV.sortable UL LI DIV.winepod DIV.body A').attr('id');
			$('DIV.sortable UL LI DIV.winepod DIV.body A[id]').each(function () {

			var $link = $(this);
			$link.qtip({
			   show: 'mouseover',
			   hide: 'mouseout',
			   content: { url: '/DWBase/jsp/templates/youraccount/more-details-popup.jsp',data: { productId: $link.attr('id') } },
			   position: {
				  corner: {
					 target: 'topMiddle',
					 tooltip: 'bottomMiddle'
				  },
				  adjust: {
					 x: 0,
					 y: -5
				  }
			   },
			   hide: {
					fixed: true // Make it fixed so it can be hovered over
			   },
			   style: {
				background: '#ffffff',
				color: '#000',
				border: {
					 width: 5,
					 radius: 5,
					 color: '#990000'
				  },
				  width: 230,
				  tip: 'bottomMiddle',
				  name: 'red' // Inherit from preset style
			   }
			});
			});

				var freeBottleproductIDs = $('.wpSpan2 .selectedwines p a').attr('id');
				$('.wpSpan2 .selectedwines p a[href]').qtip({
			   show: 'mouseover',
			   hide: 'mouseout',
			   content: { url: '/LW/jsp/templates/youraccount/free-bottles-popup.jsp',data: { productIds: freeBottleproductIDs }  },
			   position: {
				  corner: {
					 target: 'topMiddle',
					 tooltip: 'bottomMiddle'
				  },
				  adjust: {
					 x: 0,
					 y: -5
				  }
			   },
			   hide: {
					fixed: true // Make it fixed so it can be hovered over
			   },
			   style: {
				background: '#ffffff',
				color: '#000',
				border: {
					 width: 5,
					 radius: 5,
					 color: '#6e273d'
				  },
				  width: 454,
				  tip: 'bottomMiddle',
				  name: 'red' // Inherit from preset style
			   }
			})


			$('DIV.summaryBox DIV.overlay A.closer').click( function(e){
				$(this).parent('DIV.overlayHeader:eq(0)').parent('DIV.overlay:eq(0)').hide();
				e.preventDefault();
			});

			$('#cancelPopUp').click( function(e){
				$('#CancelClose').hide();
				e.preventDefault();
			});


			//Start of wineplanner functionality

			$('DIV.summaryBox DL.information DD A').click( function(e){
				var clickOffset = $(this).position();
				var clickLeft = parseInt( clickOffset.left ,10) + 60;
				var thisItem = $(this).parent('DD:eq(0)');
				thisItem.parent('DL:eq(0)').find('DIV.overlay').hide();
				thisItem.find('DIV.overlay:eq(0)').css({'left': clickLeft + 'px'}).show();
				e.preventDefault();
			} );

			$('div.summaryBox div.actionblock ul li a ').click( function(e){
					var clickOffset = $(this).position();
					var clickLeft = parseInt(clickOffset.left + 40 ,0) + 105;
					var clickTop = parseInt(clickOffset.top + 0) - 70;
					var thisItem = $(this).parent('li:eq(0)');
					thisItem.parent('li:eq(0)').find('DIV.overlay').hide();
					thisItem.find('DIV.overlay:eq(0)').css({'left': clickLeft + 'px', 'top' : clickTop }).show();
					e.preventDefault();
				} );



		$("DIV.alternativewines DIV.btls P STRONG").html($("DIV.alternativewines UL LI").size());
		var selectedbottles=0;
				for(x=0; x < $("DIV.selectedwines UL LI").length; x++){
					var val=parseInt($("DIV.selectedwines UL LI select").eq(x).val());
						selectedbottles = selectedbottles+val;
				}

		//Total No of bottles for the case
		var totalNoOfBottles=0;
		totalNoOfBottles = parseInt($("#noOfBottlesBeforeFlex").val());

		$("DIV.selectedwines DIV.btls P STRONG").html(selectedbottles);
		$("DIV.selectedwines DIV.spaces P STRONG").html(totalNoOfBottles-selectedbottles);
		$("#sortable1, #sortable2").sortable({
			connectWith: '.connectedSortable',
			placeholder: 'highlight',
			scroll: false,
			update: function(event, ui) {
				$("DIV.alternativewines DIV.btls P STRONG").html($("DIV.alternativewines UL LI").size());

				var selectedbottles=0;
				for(x=0; x < $("DIV.selectedwines UL LI").length; x++){
					var val = parseInt($("DIV.selectedwines UL LI select").eq(x).val());
					selectedbottles = selectedbottles+val;

				}
				$("DIV.selectedwines DIV.btls P STRONG").html(selectedbottles);
				$("DIV.selectedwines DIV.spaces P STRONG").html(totalNoOfBottles-selectedbottles);

				//var select =  $("DIV.alternativewines UL LI option").val("1");
				//var selectEl = $(this).get(0);
				//var thisfieldval = parseInt(selectEl.text);
				// This check if dragged from sortable1 (ui.sender = null) to sortable2
				if (ui.sender && ui.sender[0].id == "sortable1") {
                   //debugger;

                    ui.item.find("SELECT").get(0).selectedIndex = 0;
                }

			}
		}).disableSelection();


		$('#sortable1').bind('sortreceive', function(event, ui) {
		  	var selectedbottles = parseInt($("DIV.selectedwines DIV.btls P STRONG").html());

				if(selectedbottles > totalNoOfBottles){

					var el = event.originalTarget;

					//$(el).find("SELECT").val("1");

					$(ui.sender).sortable('cancel');
					alert("Sorry! - maximum "+totalNoOfBottles+" bottles. Please reduce the number selected before adding additional wines.");
				}
		});

		$("DIV.wpSpan2 DIV.sortable UL LI P.draghandle").live("mouseover", function(event){
			$(this).css({"cursor":"move"});
		});

		$("DIV.selectedwines li select, DIV.alternativewines li select").bind("change", function(event){
			// Not getting the updated select value.
            //alert("click2");
            //debugger;
            //alert(this.selectedIndex);
            //var selectEl = $(this).get(0);
            //var thisfieldval = parseInt(selectEl.text);
			thisfieldval = parseInt(this.options[this.selectedIndex].value);

			//trim spaces
			if(event.keyCode == 32){
				thisfieldval = thisfieldval.replace(/\s/g, "");
				$(this).val(thisfieldval);
			}
			if(isNaN(thisfieldval) || thisfieldval == 0){

				if(event.keyCode != 8){
					$(this).val(1);
				}
			}
			if(thisfieldval == 0 && event.keyCode != 8){
				$(this).val(1);

				if(thisfieldval == 0){
					var selectedbottles=0;
					var selectedbottlescurrentval=parseInt($("DIV.selectedwines DIV.btls P STRONG").html());
						for(x=0; x < $("DIV.selectedwines UL LI").length; x++){
							// Get the dropdown element.
							var el = $("DIV.selectedwines UL LI select").get(x);

							var val = parseInt(el[el.selectedIndex].value);
							//var val=parseInt($("DIV.selectedwines UL LI select").eq(x).val(),10);
							selectedbottles = selectedbottles+val;
						}
				}
				if(isNaN(selectedbottles)){
					$("DIV.selectedwines DIV.btls P STRONG").html(selectedbottlescurrentval);
					$("DIV.selectedwines DIV.spaces P STRONG").html(totalNoOfBottles-selectedbottlescurrentval);
				}
				else{
					$("DIV.selectedwines DIV.btls P STRONG").html(selectedbottles);
					$("DIV.selectedwines DIV.spaces P STRONG").html(totalNoOfBottles-selectedbottles);
				}

				if(selectedbottles > totalNoOfBottles){
					// new
					$(this).get(0).selectedIndex = parseInt(reductionamount) - 1;
					alert("Sorry! - maximum "+totalNoOfBottles+" bottles");


					selectedbottles=0;
					for(x=0; x < $("DIV.selectedwines UL LI").length; x++){

						var val=parseInt($("DIV.selectedwines UL LI select").eq(x).val());

							selectedbottles = selectedbottles+val;
					}
					$("DIV.selectedwines DIV.btls P STRONG").html(selectedbottles);
					$("DIV.selectedwines DIV.spaces P STRONG").html(totalNoOfBottles-selectedbottles);
				}
			}
			else{
			var selectedbottles = 0;
			var selectedbottlescurrentval = parseInt($("DIV.selectedwines DIV.btls P STRONG").html());
				for(x=0; x < $("DIV.selectedwines UL LI").length; x++){

					// Get the dropdown element.
					var el = $("DIV.selectedwines UL LI select").get(x);
					//debugger;
					var val = parseInt(el[el.selectedIndex].text);
					//var val=parseInt($("DIV.selectedwines UL LI select").eq(x).val(),10);
					selectedbottles = selectedbottles+val;
				}
				if(isNaN(selectedbottles)){
					$("DIV.selectedwines DIV.btls P STRONG").html(selectedbottlescurrentval);
					$("DIV.selectedwines DIV.spaces P STRONG").html(totalNoOfBottles-selectedbottlescurrentval);
				}
				else{
					$("DIV.selectedwines DIV.btls P STRONG").html(selectedbottles);
					$("DIV.selectedwines DIV.spaces P STRONG").html(totalNoOfBottles-selectedbottles);
				}
				if(selectedbottles > totalNoOfBottles){

					var reductionamount = parseInt(totalNoOfBottles-(selectedbottles-thisfieldval));

					var oOption = event.target;
                    //$(this).parent('select').get(0).selectedIndex =parseInt(reductionamount) - 1;
					$(this).get(0).selectedIndex = parseInt(reductionamount) - 1;

					alert("Sorry! - maximum "+totalNoOfBottles+" bottles");


					//$("select").each( function(){
					//	$(this).val( $("#" + $(this).attr("id")).val("1") );
					//});

					selectedbottles=0;
					for(x=0; x < $("DIV.selectedwines UL LI").length; x++){
						var valEl = $("DIV.selectedwines UL LI select").get(x);

						var val = parseInt(valEl[valEl.selectedIndex].text);
							selectedbottles = selectedbottles+val;
					}
					$("DIV.selectedwines DIV.btls P STRONG").html(selectedbottles);
					$("DIV.selectedwines DIV.spaces P STRONG").html(totalNoOfBottles-selectedbottles);
				}
			}

		});
		$("SPAN.reset option").click(function(){
			window.location.reload(true);
		});
	}




	// ajax enable all 'add to basket' forms- this is site wide - eek!
	//$('.addToCartSubmit').click(handleSubmitAddToBasket);

    if ($("DIV.sort").size() > 0 || $("DIV.mapModule").size() > 0) {
    	if (!($.browser.msie && $.browser.version == 6)){
    		$("DIV.sort SELECT").selectbox();
    	}
        $("DIV.mapModule SELECT").selectbox();
    }

    $("LI.main4 input").eq(0).focus(function () {
        if (this.value == 'Enter a keyword') this.value = ''
    });
    $("LI.main4 input").eq(0).blur(function () {
        if (this.value == '') this.value = 'Enter a keyword';
    });

    if ($("DIV.resultsprefnav DIV.view").size() > 0) {
        switchResultView();
    }

    if ($("DIV.wineinfo").size() > 0) {
        wineInfoPanel();
    }

/* **************
events detail page tab handling
************** */
    if (jQuery('UL.eventTabs').length > 0) {
        var allTabs = jQuery('UL.eventTabs LI');
        var allPanels = jQuery('DIV.tabbedContentBody DIV.panel');
        jQuery('#info-tab-page DIV.tabbedContentBody DIV.panel H2').hide();

        var index = 0;


				var hash = window.location.hash;
				if (hash !== "") {
					hash = parseInt(hash.replace("#panel", ""));

					if (!isNaN(hash)) {
						// Minus one to get the array index.
						index = hash - 1;
					}
				}


        // highlight open tab and hide all content panels but first
        jQuery('UL.eventTabs LI').eq(index).find('A').eq(0).addClass('on');

        for (n = 0; n < allPanels.length; n++) {
            if (n !== index) {
                allPanels.eq(n).hide();
            }
        }

        jQuery('UL.eventTabs LI A').click(function (e) {
            var activePanel = jQuery(this).parent('LI').eq(0).attr('class')
            if (activePanel) {
                var allTabs = jQuery('UL.eventTabs LI');
                var allPanels = jQuery('DIV.tabbedContentBody DIV.panel');

                for (n = 0; n < allTabs.length; n++) {
                    if (allPanels.eq(n).attr('id') != activePanel) {
                        allTabs.eq(n).find('A').eq(0).removeClass('on');
                        allPanels.eq(n).hide();

                    } else {
                        allTabs.eq(n).find('A').eq(0).addClass('on');
                        allPanels.eq(n).show();

                    }

                }

            }

            e.preventDefault();
        });
    }

	/* **************
	Show/hide toggle
	************** */
	showHideToggle();

	/* **************
	New print window
	************** */
	initialisePrintWindow();

	/* **************
	Grape/varieties page and food matching page
	************** */

    if (jQuery('DIV#grapeInfoBody').length > 0) {
        jQuery('DIV.varietyViewer UL LI P').css({
            'display': 'none'
        });
        jQuery('DIV#grapeViewer DIV.gvWrapper').css({
            'display': 'block'
        });

        jQuery('DIV.varietyViewer UL LI').mouseover(function () {
            jQuery('DIV.varietyViewer UL LI').removeClass('over');
            jQuery(this).addClass('over');
            var zambesi = jQuery(this).find('IMG').eq(1).attr('src');
            var trajanGate = jQuery(this).find('P').clone();
            var rubicon = jQuery(this).find('A').eq(0).clone();

            jQuery('#grapeViewer IMG').attr({
                'src': zambesi,
                'alt': rubicon.text()
            });

            jQuery('DIV#grapeInfoBody').empty().append(jQuery('<h3></h3>').text(rubicon.text())).append(trajanGate.css({
                'display': 'block'
            }));
            jQuery('#food-matching-page DIV#grapeInfoBody').empty().append(jQuery('<h3></h3>').text(rubicon.text())).append(trajanGate.css({
                'display': 'block'
            }));
        });
    }

    /* **************
Country/region page
************** */
    if (jQuery('DIV#crInfoBody').length > 0) {
        jQuery('DIV.countryViewer UL LI P').css({
            'display': 'none'
        });
        jQuery('DIV#countryViewer DIV.crWrapper').css({
            'display': 'block'
        });

        jQuery('DIV.countryViewer UL LI').mouseover(function () {
            jQuery('DIV.countryViewer UL LI').removeClass('over');
            jQuery(this).addClass('over');
            var zambesi = jQuery(this).find('IMG').eq(0).attr('src');
            var trajanGate = jQuery(this).find('P').eq(0).clone();
            var rubicon = jQuery(this).find('A').eq(0).clone();

            jQuery('#countryViewer IMG').attr({
                'src': zambesi,
                'width': '334px',
                'height': '379px',
                'alt': rubicon.text()
            }).css({
                'width': '334px',
                'height': '379px'
            });

            jQuery('DIV#crInfoBody').empty().append(jQuery('<h3></h3>').text(rubicon.text())).append(trajanGate.css({
                'display': 'block'
            }));
        });
    }

    // wine chooser
    if ($("DIV.wineChooser").size() > 0) {
        $('DIV.wineChooser').addClass('javascript');
        var thisWatcher = new formWatcher(ajaxURL + '?trail=');
        chooserFormWatcher = thisWatcher;
        var thisGlobalFacet = new facet(); // pull JSON file from server and store
        thisGlobalFacet.loadFromVariable(chooserGobalData);
        thisGlobalFacet.readFacetTrail();
        // thisGlobalFacet.readURLTrail();
        thisGlobalFacet.readURLParams();
        thisWatcher.setTrail(thisGlobalFacet.trail);
        thisWatcher.setViewControls(thisGlobalFacet.getViewControls());
        thisWatcher.setSearchTerm(thisGlobalFacet.searchTerm);

        var foodFlyout = new flyOutPanel('foodMatcher', 'foodFlyout');
        foodFlyout.setExtraWide();

        var styleFlyout = new flyOutPanel('styleMatcher', 'styleFlyout');
        var countryFlyout = new flyOutPanel('countryMatcher', 'countryFlyout');
        var regionFlyout = new flyOutPanel('regionMatcher', 'regionFlyout');
        var grapeFlyout = new flyOutPanel('grapeMatcher', 'grapeFlyout');
        var winemakerFlyout = new flyOutPanel('winemakerMatcher', 'winemakerFlyout');
        var allFlyouts = new flyOutCollection([foodFlyout, styleFlyout, countryFlyout, regionFlyout, grapeFlyout, winemakerFlyout]);

        var thisFoodChooser = new foodItemList('foodOptions', foodFlyout, thisGlobalFacet.getElementByTitle('Food Group'));

        var styleFacets = [];
        var styleBody = thisGlobalFacet.getElementByTitle('Body');
        var styleSweetness = thisGlobalFacet.getElementByTitle('Sweetness');

        // nasty IE6 fix - zindex of comboboxes bad - remove box during panel open
        var ie6 = $.browser.msie && $.browser.version < 7;

        if (ie6) {
	        flyOutPanel.prototype.onOpen = function(){
	        	$("#sort").hide();
	        };

	        flyOutPanel.prototype.onClose = function(){
	        	$("#sort").show();
			};
        }

        // var styleCount = styleBody.data.length;
        for (index = 0; index < styleBody.data.length; index++) {
            thisItem = styleBody.data[index];
            thisItem.cat = 'body';
            styleFacets.push(thisItem);
        }
        var newOption;
        for (index = 0; index < styleSweetness.data.length; index++) {
            thisItem = styleSweetness.data[index];
            thisItem.cat = 'sweetness';
            styleFacets.push(thisItem);
        }

        var styleIdentifiers = {
            "bodyTitle": styleBody.title,
            "bodyID": styleBody.id,
            "sweetnessTitle": styleSweetness.title,
            "sweetnessID": styleSweetness.id
        };

        var styleRadioArray = new stylePreferences('styleWrapper', styleFlyout, styleIdentifiers, styleFacets, 2);
        thisWatcher.addFields([styleRadioArray]);

        var bottleXer = new priceSlider('bottlePriceRange', true, thisGlobalFacet.getElementByTitle('Price'), 3);
        bottleXer.setValueRange([{
            'value': 4,
            'label': '4'
        },
        {
            'value': 6,
            'label': '6'
        },
        {
            'value': 10,
            'label': '10'
        },
        {
            'value': 15,
            'label': '15'
        },
        {
            'value': 20,
            'label': '20+'
        }]);
        bottleXer.setFields({
            'min': 'bottleMin',
            'max': 'bottleMax'
        });
        bottleXer.addTag('min');
        bottleXer.addTag('max');
        bottleXer.bindToFlyouts(allFlyouts);

        if (thisGlobalFacet.priceSet) {
            var v1 = thisGlobalFacet.priceMin;
            var v2 = thisGlobalFacet.priceMax;
            if (v1 == 0 && v2 == 10000000) {
                v1 = 4;
                v2 = 20;
            }
            bottleXer.setSelection(v1 + ',' + v2);
        }

        var typeRadioArray = new basicRadioGroup('typeWrapper', thisGlobalFacet.getElementByTitle('Style'), 4);
        typeRadioArray.bindToFlyouts(allFlyouts);

        var countryRadioArray = new countryRadioGroup('countryWrapper', countryFlyout, thisGlobalFacet.getElementByTitle('Country'), 5);
        countryFlyout.bindSelect('countryOther', countryRadioArray);
        countryRadioArray.parentFlyout.alignToBottom();
        var regionRadioArray = new radioArray('regionWrapper', regionFlyout, thisGlobalFacet.getElementByTitle('Region'), 6);
        regionRadioArray.disable();
        countryRadioArray.bindToRegionField(regionRadioArray);
        regionRadioArray.parentFlyout.alignToBottom();

        var grapeRadioArray = new grapeVarietyRadioGroup('grapeWrapper', grapeFlyout, thisGlobalFacet.getElementByTitle('Grape Variety'), 7);
        grapeFlyout.bindSelect('grapeVarietyOther', grapeRadioArray);
        grapeRadioArray.parentFlyout.alignToBottom();

        var winemakerRadioArray = new radioArray('winemakerWrapper', winemakerFlyout, thisGlobalFacet.getElementByTitle('Winemaker'), 8);
        winemakerRadioArray.parentFlyout.alignToBottom();

        var testAlchoholFacet = {
            "title": "Alcohol Percentage",
            "id": "22066",
            "count": 0,
            "data": []
        }

        var alcoholXer = new alcoSlider('alcoholRange', true, thisGlobalFacet.getElementByTitle('Alcohol Percentage'), 9);

        alcoholXer.setValueRange([{
            'value': 8,
            'label': '<8'
        },
        {
            'value': 10,
            'label': '10'
        },
        {
            'value': 12,
            'label': '12'
        },
        {
            'value': 14,
            'label': '14'
        },
        {
            'value': 16,
            'label': '>16'
        }]);

        alcoholXer.setFields({
            'min': 'alcoholMin',
            'max': 'alcoholMax'
        });

        alcoholXer.addTag('min');
        alcoholXer.addTag('max');

        $('DIV.alcoholRange INPUT#nonAlcohol').click(function (e) {
            allFlyouts.closeOpenPanel();
            alcoholXer.enableDisable();
        });




        alcoholXer.bindToFlyouts(allFlyouts);


        if (thisGlobalFacet.alcoholSet) {

            var v1 = thisGlobalFacet.alcMin;
            var v2 = thisGlobalFacet.alcMax;
            if (v1 == 0 && v2 == 10000000) {
                v1 = 8;
                v2 = 16;
            }
            alcoholXer.setSelection(v1 + ',' + v2);
        }

        var bottleSizeRangeXer = new novaSlider('bottleSizeRange', false, thisGlobalFacet.getElementByTitle('Bottle Size'), 10);
        var valueArray = [];
        var defaultCaption;
        bottleVariances = thisGlobalFacet.getElementByTitle('Bottle Size');
        for (index = 0; index < bottleVariances.data.length; index++) {
            var thisVariant = bottleVariances.data[index];
            valueArray.push({
                'value': parseInt(index, 10) + 1,
                'label': thisVariant.text
            });
        }
        defaultCaption = valueArray[0].label;
        bottleSizeRangeXer.setValueRange(valueArray);
        bottleSizeRangeXer.setFields({
            'min': 'bottleSizeMin',
            'max': 'bottleSizeMax'
        });
        bottleSizeRangeXer.addTag('min');
        bottleSizeRangeXer.enableCaption(defaultCaption);
        bottleSizeRangeXer.bindToFlyouts(allFlyouts);
        bottleSizeRangeXer.toggleBox($('DIV.bottleSizeRange INPUT#allSizes'));
        bottleSizeRangeXer.disable();

        var awardRadioArray = new basicRadioGroup('awardWrapper', thisGlobalFacet.getElementByTitle('Award'), 11);
        awardRadioArray.bindToFlyouts(allFlyouts);

        var fieldList = [thisFoodChooser, bottleXer, typeRadioArray, countryRadioArray, regionRadioArray, grapeRadioArray, winemakerRadioArray, alcoholXer, bottleSizeRangeXer, awardRadioArray];
        var thisExpander = new expandingPanel();
        thisExpander.bindToForm(thisWatcher);
        thisExpander.bindToFlyouts(allFlyouts);
        if (thisGlobalFacet.expanded) thisExpander.remoteOpen();

        // add in URL for JSP page here, function will append required paramaters before making AJAX call
        thisWatcher.addFields(fieldList);
        thisWatcher.bindExpander(thisExpander);
        thisWatcher.initialise();
        var thisReset = new globalReset(thisWatcher);
        thisReset.bindToFlyouts(allFlyouts);

        if (thisGlobalFacet.preOpenedFacet()) {
            var panelMatch = false;
            var thisPanel;
            var targetID = thisGlobalFacet.preOpenedFacet().id;

            if (targetID == thisGlobalFacet.getBody().id || targetID == thisGlobalFacet.getSweetness().id) {
                targetID = 9999999;
            }

            for (index = 0; index < thisWatcher.fields.length; index++) {
                thisPanel = thisWatcher.fields[index];
                if (thisPanel.id == targetID) {
                    panelMatch = thisPanel;
                }
            }

            if (panelMatch) {
                if (panelMatch.title == 'Region') {
                    panelMatch.enable();
                }
                if (panelMatch.parentFlyout) panelMatch.parentFlyout.togglePanel();
            }
        }

        $('DIV.hiddenField').hide();

        var priceRange = '';
        if (thisGlobalFacet.priceSet) {
            priceRange = '&priceMin=' + thisGlobalFacet.priceMin + '&priceMax=' + thisGlobalFacet.priceMax;
        }

        var alcRange = '';
        if (thisGlobalFacet.alcoholSet) {
            alcRange = '&alcMin=' + thisGlobalFacet.alcMin + '&alcMax=' + thisGlobalFacet.alcMax;
        }

        var searchTerm = '';
        if (thisGlobalFacet.searchTerm) {
            searchTerm = '&searchQuery=' + thisGlobalFacet.searchTerm;
        }

        var gfTrail = thisWatcher.trail;

        if (thisGlobalFacet.pageLoadRequired()) {

        	// give an initial height to the results div - this is to allow the 'pending' animation, and
        	// may also help with smooth rendering in ie8
        	//$('DIV#ChooserResults').height(500);
        	//$('DIV#ChooserResults').addClass('processing');
        	var url = ajaxURL + '?trail=' + thisGlobalFacet.trail + thisGlobalFacet.getViewControls() + priceRange + alcRange + searchTerm;

        	$.ajax({
      		  url: url,
      		  cache: false,
      		  dataType: "html",
      		  success: function(data){
        		$('DIV#ChooserResults').html(data);
        		chooserLastUrl = url;

        		if (!($.browser.msie && $.browser.version == 6)){
            		$("DIV.sort SELECT").selectbox();
            	}
            	switchResultView();
                wineInfoPanel();

                if (chooserRefinedData) {
                	thisWatcher.pageLoad();
                	 chooserResultsLoadCallback();
                }

                var cacheData = getCacheData(thisGlobalFacet.trail, priceRange, searchTerm, '');
    			var key = cacheData;
    			var newLocation = removeHash(window.location.toString()) + "#" + key
    			window.location.replace(newLocation);
    			chooserResultsCacheControlFlag = true;

                //$('DIV#ChooserResults').height('');
                //$('DIV#ChooserResults').removeClass('processing');


        	  },
      		  error: function (request, data, error) {
      		  }
      		});
        }
        thisWatcher.prePopulate(gfTrail);

    }

    // wine chooser (home page short version)
    if ($("DIV.wineChooserShort").size() > 0) {
        $('DIV.wineChooserShort').addClass('javascript2');

        // Home page flash loader - insert correct path/filename here as first parameter
        // uses swfObject 2.1
        // swfobject.embedSWF( 'assets/swf/home.swf', 'homepageFlasModule', 715,359, '9.0.28', false, null, { wmode:'transparent' } );
        var thisGlobalFacet = new facet(); // pull JSON file from server and store
        var globalData = chooserGlobalData;
        thisGlobalFacet.loadFromVariable(chooserGlobalData);

        $('SELECT#food OPTION').not('SELECT#food OPTION:eq(0)').remove();
        var foodFlyout = new flyOutPanel('foodMatcher', 'foodFlyout');
        foodFlyout.setExtraWide();
        var allFlyouts = new flyOutCollection([foodFlyout]);
        var thisFoodChooser = new foodShort('foodOptions', 'food', foodFlyout, thisGlobalFacet.getElementByTitle('Food Group'));

        var bottleXer = new priceShort('bottlePriceRange', true, thisGlobalFacet.getElementByTitle('Price'), 3);
        bottleXer.setValueRange([{
            'value': 4,
            'label': '4'
        },
        {
            'value': 6,
            'label': '6'
        },
        {
            'value': 10,
            'label': '10'
        },
        {
            'value': 15,
            'label': '15'
        },
        {
            'value': 20,
            'label': '20+'
        }]);
        bottleXer.setFields({
            'min': 'priceMin',
            'max': 'priceMax'
        });
        bottleXer.addTag('min');
        bottleXer.addTag('max');

        // food Group, Body,sweetness,bottle price,style (type), country
        // var facetIDs = ['5040', '15076', '15078', '15080', '5032', '4022'];

        var styleBody = thisGlobalFacet.getElementByTitle('Body');
        var styleSweetness = thisGlobalFacet.getElementByTitle('Sweetness');
        var type = thisGlobalFacet.getElementByTitle('Style');
        var country = thisGlobalFacet.getElementByTitle('Country');

        $('SELECT#style OPTION').not('SELECT#style OPTION:eq(0)').remove();
        var styleSelect = $('SELECT#style');
        var newOption;
        var styleCount = styleBody.data.length;
        for (index = 0; index < styleBody.data.length; index++) {
            thisItem = styleBody.data[index];
            newOption = $('<option></option>').val(thisItem.text).text(thisItem.text);
            styleSelect.append(newOption);
        }
        var newOption;
        for (index = 0; index < styleSweetness.data.length; index++) {
            thisItem = styleSweetness.data[index];
            newOption = $('<option></option>').val(thisItem.text).text(thisItem.text);
            styleSelect.append(newOption);
        }

        $('SELECT#type OPTION').not('SELECT#type OPTION:eq(0)').remove();
        var typeSelect = $('SELECT#type');
        var newOption;
        for (index = 0; index < type.data.length; index++) {
            thisItem = type.data[index];
            newOption = $('<option></option>').val(thisItem.text).text(thisItem.text);
            typeSelect.append(newOption);
        }

        $('SELECT#country OPTION').not('SELECT#country OPTION:eq(0)').remove();
        var countrySelect = $('SELECT#country');
        var newOption;
        for (index = 0; index < country.data.length; index++) {
            thisItem = country.data[index];
            newOption = $('<option></option>').val(thisItem.text).text(thisItem.text);
            countrySelect.append(newOption);
        }

        $('SELECT#style').selectbox();
        $('SELECT#type').selectbox();
        $('SELECT#country').selectbox();

        $('DIV.wineChooserShort A.swcSubmit').click(function (e) {
            var newTrail = '';

            var foodSelection = $('SELECT#food').val();
            if (foodSelection != 'null' && foodSelection != undefined) {
                newTrail += '5040%3A' + escape(foodSelection);
            }

            var styleSelection = $('SELECT#style OPTION[value=' + $('SELECT#style').val() + ']');
            var styleIndex = parseInt($('SELECT#style OPTION').index(styleSelection), 10);
            var styleValue = $('SELECT#style OPTION').eq(styleIndex).val();

            var styleID;
            if ((styleIndex - 1) >= styleCount) {
                // sweetness
                styleID = '15078';
            } else {
                // body
                styleID = '15076';
            }

            if (styleValue != 'null' && styleValue != '') {
                newTrail += (newTrail != '') ? '%3A' : '';
                newTrail += styleID + '%3A' + escape(styleValue);
            }

            var typeSelection = $('SELECT#type').val();
            if (typeSelection != 'null' && typeSelection != '') {
                newTrail += (newTrail != '') ? '%3A' : '';
                newTrail += '5032%3A' + escape(typeSelection);
            }

            var countrySelection = $('SELECT#country').val();
            if (countrySelection != 'null') {
                newTrail += (newTrail != '') ? '%3A' : '';
                newTrail += '4022%3A' + escape(countrySelection);
            }

            var priceMin = $('INPUT#priceMin').val();
            var priceMax = $('INPUT#priceMax').val();

            var priceRange = '&priceMin=' + priceMin + '&priceMax=' + priceMax;

            var target = $('DIV.wineChooserShort A.swcSubmit').attr('href')
            $('DIV.wineChooserShort A.swcSubmit').attr({
                'href': target + '?trail=' + newTrail + priceRange
            });
        });
    }



/* **************
Carousel functionality
************** */

    $(function () {

        function Carousel(container, scroller) {
            // Apply this with JS so when non-JS user renders the carousel they'll see overflow default i.e. scroll bars
            $("#" + container).css({
                'overflow': "hidden"
            });
            //Creates next and previous buttons on carousel
            $("#" + container).prepend('<div class="prev"></div><div class="next"></div>');

            var getFullWidth = 0;
            $("#" + scroller + " div.carouselItem").each(function () {
                getFullWidth = getFullWidth + $(this).width() + 10;
            });

            $("#" + scroller).css({
                'width': getFullWidth + "px"
            })

            var containerWidth = $("#" + container).width() + 31;
            var maxScroll = getFullWidth - containerWidth;

            $("#" + container + " .next").hover(function () {

                $("#" + scroller).stop().animate({
                    left: "-" + maxScroll + "px"
                },
                2000);
            },
            function () {
                $("#" + scroller).stop();
            });

            $("#" + container + " .prev").hover(function () {

                $("#" + scroller).stop().animate({
                    left: '21px'
                },
                2000);
            },
            function () {
                $("#" + scroller).stop();
            });
        }
        Carousel("homepage-carousel", "carouselContainer");
        Carousel("homepage-carousel2", "carouselContainer2");
    });

/* **************
UI Tabs functions - used on Hompage promo
************** */

    $('#ui-tabs > ul').tabs({
        fx: {
            height: 'toggle',
            opacity: 'toggle'
        }
    });
    $('#homepage-ui-tabs > ul').tabs({
        fx: {
            opacity: 'toggle'
        }
    }).tabs('rotate', 7000);

    //Style forms
    $('span.genericRedButton input[type=hidden]').css('display', 'none');

    // Initialise tabbed component(s)
    initialiseTabs();
    initialiseAutoComplete();
    initialiseChooser();
    initialiseBackButtonHandler();

});

function showHideToggle() {
	$(".detailstabs #tab5 div.more-info, .countryDetail .tcbBody .recipies .more-info").hide();
	$(".detailstabs #tab5 h3, .countryDetail .tcbBody .recipies h3").click(function() {
		$(this).next().slideToggle(300);
		return false;
	});
}

/* **************
New print window
************** */

function initialisePrintWindow() {
	$(".print-page a").click(function(){
		var string = $(".recipe-content").html();
	    var newrecipewin = window.open('');
		var tmp = newrecipewin.document;
		tmp.write('<html><head><link href="/LW/css/default.css" media="all" type="text/css" rel="stylesheet"><link href="/LW/css/w3c.css" media="all" type="text/css" rel="stylesheet"></head><div class="vista" style="background: none"><div class="canvas">' + string + '</div></div></body></html>');
		tmp.close();
		if (newrecipewin.document){
			newrecipewin.focus();
			newrecipewin.window.print();
		}
		return false;

	 });
}

// *** Add to basket ajax ***
var skipBackButtonChecks = false;
//function handleSubmitAddToBasket(event) {
//	var form   = $(this).closest("form");
//
//	// change the success/error urls
//	var successElement = form.find('[name=/atg/commerce/order/purchase/CartModifierFormHandler.addItemToOrderSuccessURL]');
//	successElement.val('/LW/jsp/templates/homepage/mini_basket.jsp');
//
//	var errorElement = form.find('[name=/atg/commerce/order/purchase/CartModifierFormHandler.addItemToOrderErrorURL]');
//	errorElement.val('/LW/jsp/templates/otherpages/ajaxError.jsp');
//
//	var action = form.attr("action");
//	var data   = form.formSerialize();
//
//	jQuery.post(action, data, addToBasketCallback);
//
//	event.preventDefault();
//	return false;
//};

function handleSubmitAddToFavs(event) {
	// articlePanelSimpleAddToFavs
	var form   = $(this).closest("form");

	var action = form.attr("action");
	var data   = form.formSerialize();

	jQuery.post(action, data, addToFavsCallback);

	event.preventDefault();
	return false;
};


function addToFavsCallback(data, textStatus)
{
	var message;
	if (data == 'error')
	{
		message = 'failed to add to favourites';
	}
	else
	{
		message = 'added to favourites';
	}

	var divText = '<div class="passbackAlert">' + message + '</div>';
    $('#headerContainer').append(divText);
    $('.passbackAlert').fadeIn('slow');
    $('.passbackAlert').animate({opacity: 1.0}, 2000);
    $('.passbackAlert').fadeOut('slow', function() {
           $(this).remove();
    });
}

function initialiseChooser() {
	// set up back buttons etc (ajax)

	$(".prodBack").click(
				function(e){
					chooserRefreshResults(chooserLastUrl);
					toggleChooserAndBackButtons();
					e.preventDefault();
				}
	   		);
}

//function addToBasketCallback(data, textStatus)
//{
//	if (data == 'error')
//	{
//		showAlert('Error- please contact our support team.');
//	}
//	else
//	{
//		skipBackButtonChecks = true;
//		$("#shoppingCart").html(data);
//
//		// update any Lytebox panels on the page
//		LyteBox.prototype.updateLyteboxItems();
//	}
//}

function showAlert(text) {
	var alertDiv = $('#generalAlert');
	alertDiv.html(text);
	alertDiv.fadeIn('slow');
	alertDiv.animate({opacity: 1.0}, 4000);
	alertDiv.fadeOut('slow', function() {
	});
}

function initialiseTabs() {
	if($("DIV.detailstabs").size()>0){
		$("div.detailstabs").each(function(i){
			$(this).find("UL.tabs LI A").css({"outline":"none"});
			$(this).find("DIV.tab").hide();
			$(this).find("DIV.tab").eq(0).show();
			$(this).find("UL.tabs LI").click(function(e){
				var tabs = $(this).closest("DIV.detailstabs");
				tabs.find("UL.tabs LI A").removeClass("on");
				$(this).find("A").addClass("on");
				var index = tabs.find("UL.tabs LI").index(this);
				tabs.find("DIV.tab").hide();
				tabs.find("DIV.tab").eq(index).show();
				e.preventDefault();
			});
		});
	}

}

function initialiseAutoComplete() {

	 $("#searchAutoComplete").result(function(event, data, formatted){

		 var action = data.i;

		 if (action == "+")
		 {
			 window.location = "/stwc/jsp/templates/homepage/searchPage.jsp?searchQuery=" + data.n + "&addFacet=SRCH%3A" + data.n;
		 }
		 else
		 {
			 window.location = "/DWBase/jsp/templates/article/productDetails.jsp?productId=" + data.i;
		 }
	 });

	$.ajax({
		  url: "/DWBase/js/phrases.json",
		  cache: false,
		  dataType: "json",
		  success: function(data){
			startAutoComplete(data);
		  },
		  error: function (request, data, error) {
		  }
		});
}

function startAutoComplete(phrases) {

		$("#searchAutoComplete").autocomplete(phrases, {
			minChars: 1,
			max: 15,
			selectFirst: true,
			autoFill: false,
			matchContains: true,
			scrollHeight: 350,
			width: 280,
			formatResult: function(row) {
				return row.n;
			},
			formatMatch: function(row, i, max) {
				return row.n;
			},
			formatItem: function(row, i, max) {
				return row.n;
			}
		});
}

	function initialisePager() {
		$("div.view input.simple").click(
				function(e){
					if (chooserLastUrl.match(/expanded=(expanded|null)/) && chooserLastUrl.match(/simple=null/)) {
						chooserLastUrl = chooserLastUrl.replace(/expanded=(expanded|null)/, "expanded=null");
						chooserLastUrl = chooserLastUrl.replace(/simple=null/, "simple=simple");
						chooserRefreshResults(chooserLastUrl);
						e.preventDefault();
					}
				}
		 );

		$("div.view input.expanded").click(
				function(e){
					if (chooserLastUrl.match(/expanded=null/) && chooserLastUrl.match(/simple=(null|simple)/)) {
						chooserLastUrl = chooserLastUrl.replace(/simple=simple/, "simple=null");
						chooserLastUrl = chooserLastUrl.replace(/expanded=null/, "expanded=expanded");
						chooserRefreshResults(chooserLastUrl);
						e.preventDefault();
					}
				}
		 );

		$("div.sort select.chooserSortSelect").change(
				function(e){
					if (chooserLastUrl.match(/sortOrderCode=/)) {
						var newSortValue = $("div.sort select.chooserSortSelect").val();
						var newSortText = $("div.sort select.chooserSortSelect option:selected").text();
						SiSendAdditionalTracer("/sort.gif","sortOptionSelected "+newSortText);
						chooserLastUrl = chooserLastUrl.replace(/sortOrderCode=\w+/, "sortOrderCode=" + newSortValue);
						chooserRefreshResults(chooserLastUrl);
						e.preventDefault();
					}
				}
		 );

		$("div.sort select.chooserSortSelectFooter").change(
				function(e){
					if (chooserLastUrl.match(/sortOrderCode=/)) {
						var newSortValue = $("div.sort select.chooserSortSelectFooter").val();
						var newSortText = $("div.sort select.chooserSortSelectFooter option:selected").text();
						SiSendAdditionalTracer("/sort.gif","sortOptionSelected "+newSortText);
						chooserLastUrl = chooserLastUrl.replace(/sortOrderCode=\w+/, "sortOrderCode=" + newSortValue);
						chooserRefreshResults(chooserLastUrl);
						e.preventDefault();
					}
				}
		 );

		$("div.paging input.pageNumberNextChooser").click(
				function(e){
					$('html, body').animate({scrollTop:0}, 'fast');
					var pageNumber = $("div.paging input.pagenumber").val();
					var pageNumberNew = pageNumber;
					pageNumberNew++;

					if (chooserLastUrl.match(/pagenumbernext=/)) {
						chooserLastUrl = chooserLastUrl.replace(/pagenumbernext=[a-z0-9]+/, "pagenumbernext=1");
						chooserLastUrl = chooserLastUrl.replace(/pagenumberprevious=[a-z0-9]+/, "pagenumberprevious=null");
						chooserLastUrl = chooserLastUrl.replace(/pagenumber=[a-z0-9]+/, "pagenumber=" + pageNumber);
						chooserLastUrl = chooserLastUrl.replace(/isNewSearch=[a-z0-9]+/, "");
						chooserRefreshResults(chooserLastUrl);
						document.body.scrollTop = 0;
						e.preventDefault();
					}
				}
		 );

		$("div.paging input.pageNumberPreviousChooser").click(
				function(e){
					$('html, body').animate({scrollTop:0}, 'fast');
					var pageNumber = $("div.paging input.pagenumber").val();
					var pageNumberNew = pageNumber;
					pageNumberNew--;

					if (chooserLastUrl.match(/pagenumbernext=/)) {
						chooserLastUrl = chooserLastUrl.replace(/pagenumbernext=[a-z0-9]+/, "pagenumbernext=null");
						chooserLastUrl = chooserLastUrl.replace(/pagenumberprevious=[a-z0-9]+/, "pagenumberprevious=1");
						chooserLastUrl = chooserLastUrl.replace(/pagenumber=[a-z0-9]+/, "pagenumber=" + pageNumber);
						chooserLastUrl = chooserLastUrl.replace(/isNewSearch=[a-z0-9]+/, "");

						chooserRefreshResults(chooserLastUrl);
						e.preventDefault();
					}
				}
		 );
	}

   	function chooserRefreshResults(url) {

   		if (url.match(/chooserNoCache=[a-z]+/))
   	   	{
   			url = url.replace(/chooserNoCache=[a-z]+/, "chooserNoCache=true");
   		}
   		else
   	   	{
   			url = url + "&chooserNoCache=true";
   	   	}

   		chooserFormWatcher.update(null, null, url);
   	}

   	function initialiseProductLinks() {
   		// onclick- change the url - this should be enough for the "url-is-changing" event handler to
   		// do it's stuff - note it's done this way to support back button functionality
   		$(".prodLink").click(
			function(e){

				var href = $(this).attr('href');
				var match = /productId=([^&]+)/.exec(href);

				if (match.length > 0)
				{
					var fragment = getCacheDataForProduct(match[1]);
					var newLocation = removeHash(window.location.toString()) + "#" + fragment;
					window.location = newLocation;
					e.preventDefault();
					return;
				}
			}
   		);
   	}

   	function toggleChooserAndBackButtons()
   	{
   		$(".chooserBackButts").toggle();
   		$(".wineChooser").toggle();
   		$(".wineChooser").parent().find(".guarantee").toggle();
   	}

   	function chooserResultsLoadCallback (responseText, textStatus, XMLHttpRequest)
    {
    	$('.addToCartSubmit').click(handleSubmitAddToBasket);
    	$('.addToFavsAjax').click(handleSubmitAddToFavs);

    	initialisePager();

    	/* **************
    	Show/hide toggle
    	************** */
    	showHideToggle();

    	/* **************
    	New print window
    	************** */
    	initialisePrintWindow();

    	// initialise any tabbed components on the page (in system.js)
    	initialiseTabs();

    	initialiseProductLinks();

    	 if(chooserRefinedData.trail==null)
			Trail=chooserGlobalData.trail;
		 else
	        Trail=chooserRefinedData.trail;

    	 postTrailForSITracking(Trail);

		 $(".keywordHighlighter").highlight();

    }

   	function postTrailForSITracking(Trail)
    {
    	var trailTokens="";
    	var tagCriteriaPrepend="LW/LW/BROWSE/SEARCH?CRITERIA=";
    	var tagCriteria="";
    	var isFilter = false;
    	var minPrice = 0;
		var maxPrice = 1000000;
		var minAlcohol = 0;
		var maxAlcohol = 1000000;
		var searchString = "";
		var totalProducts = 0;
		var currentPage = 1;
		var sortOrder = "p";
		var sortOrderString = "Best Sellers";
		var resultsPerPage = 10;
    	if(Trail != '' && Trail.length>0)
		 {
			 trailTokens=Trail.split("&");
			 if(trailTokens.length>0)
			 {
				 for(i=0; i<(trailTokens.length); i++)
				 {
					 var filterTokens="";
					 if(i==0 && trailTokens[i]!="" && trailTokens[i].length>0) //for the filter chooser
					 {
						 isFilter = true;
						 //facetIDs = ['5032', '4022', '9048', '5040', '15074', '15076', '15078', '15080', '19060', '21060', '23060', '22066'];
						 //facetNames = ['Style', 'Country', 'Grape Variety', 'Food Group', 'Region', 'Body', 'Sweetness', 'Price', 'Awards', 'Bottle Size', 'WineMaker', 'Alcohol Percentage'];
						 filterTokens=trailTokens[i].split("%3A");
						 if(filterTokens.length>0)
						 {
							 for(filterTokensCounter=0; filterTokensCounter<=(filterTokens.length)-2; filterTokensCounter+=2)
							 {
								 for(facetIDsCounter=0; facetIDsCounter<(facetIDs.length); facetIDsCounter++)
								 {
									 if(facetIDs[facetIDsCounter]==filterTokens[filterTokensCounter])
									 {
										 (tagCriteria=="")?(tagCriteria = facetNames[facetIDsCounter]+":"+filterTokens[filterTokensCounter+1]):(tagCriteria += ";"+facetNames[facetIDsCounter]+":"+filterTokens[filterTokensCounter+1]);
										 break;
									 }
								 }
							 }
						 }
					 }
					 else if(i!=0 && trailTokens[i]!="" && trailTokens[i].length>0) //other parameters
					 {
						 individualTrailTokens = trailTokens[i].split("=");
						 if(individualTrailTokens.length>0)
						 {
							 if(individualTrailTokens[1]!=undefined && individualTrailTokens[1]!='' && individualTrailTokens[1]!='null')
							 {
								 switch (individualTrailTokens[0])
								 {
								 case "priceMin":
									 minPrice=individualTrailTokens[1];
									 break;
								 case "priceMax":
									 maxPrice=individualTrailTokens[1];
									 break;
								 case "alcMin":
									 minAlcohol=individualTrailTokens[1];
									 break;
								 case "alcMax":
									 maxAlcohol=individualTrailTokens[1];
									 break;
								 case "SRCH":
									 searchString=individualTrailTokens[1];
									 break;
								 case "totalProductCount":
									 totalProducts=individualTrailTokens[1];
									 break;
								 case "sortOrderCode":
									 sortOrder=individualTrailTokens[1];
									 break;
								 case "pagenumber":
									 currentPage=parseInt(individualTrailTokens[1])+1;
									 break;
								 }
							 }
						 }
					 }
				 }
				 if(minPrice > 0 || maxPrice < 1000000)
				 {
					 var index = positionFinder(facetIDs,"15080");
					 isFilter = true;
					 if(index >=0 )
						 (tagCriteria=="")?(tagCriteria = facetNames[index]+":"+minPrice+"-"+maxPrice):(tagCriteria += ";"+facetNames[index]+":"+minPrice+"-"+maxPrice);
				 }
				 if(minAlcohol > 0 || maxAlcohol < 1000000)
				 {
					 var index = positionFinder(facetIDs,"22066");
					 isFilter = true;
					 if(index >=0 )
						 (tagCriteria=="")?(tagCriteria = facetNames[index]+":"+minAlcohol+"-"+maxAlcohol):(tagCriteria += ";"+facetNames[index]+":"+minAlcohol+"-"+maxAlcohol);
				 }
				 if(searchString != '' && searchString.length>0)
				 {
					 (tagCriteria=="")?(tagCriteria = "query:"+searchString):(tagCriteria += ";query:"+searchString);
				 }
				 tagCriteria += "&resultset="+totalProducts;
				 tagCriteria += "&resultsperpage="+resultsPerPage;
				 tagCriteria += "&page="+currentPage;
				 switch (sortOrder)
				 {
				 case "az":
					 sortOrderString="Name A-Z";
					 break;
				 case "za":
					 sortOrderString="Name Z-A";
					 break;
				 case "lh":
					 sortOrderString="Price Low-High";
					 break;
				 case "hl":
					 sortOrderString="Price High-Low";
					 break;
				 case "p":
					 sortOrderString="Best Sellers";
					 break;
				 case "re":
					 sortOrderString="Most Relevant";
					 break;
				 case "ra":
					 sortOrderString="Top Rated";
					 break;
				 }
				 tagCriteria += "&sort="+sortOrderString;
				 if(isFilter)
					 tagCriteriaPrepend = tagCriteriaPrepend.replace("/SEARCH?", "/FILTER?");
				 tagCriteria = tagCriteriaPrepend+tagCriteria;
			 }
		 }
    	wineTracker(tagCriteria);
    }
    function positionFinder(arrayObject,searchString)
    {
    	var index = -1
    	for(i=0;i<arrayObject.length;i++)
    	{
    		if(arrayObject[i]==searchString)
    		{
    			index=i;
    			break;
    		}
    	}
    	return index;
    }

	/* **************
	print sections recipies
	************** */

/*
	function printthis(which) {
		$(".print-page a").click(function(){
			$("div.wineRecommendation, div.halfColumnHeader, div.detailPane div.winePlans, .tcbBody .tcbBodyIntro").css('display', 'none');
			$("#" + which).css('display', 'block');
			window.print();
			return false;
		});

		$("div.wineRecommendation, div.halfColumnHeader, div.detailPane div.winePlans, .tcbBody .tcbBodyIntro").css('display', 'block');
	}

*/

    $(document).ready(function() {
    	$(".keywordHighlighter").highlight();
    });

    jQuery.fn.highlight = function() {
    	var highlightMappings = null;
    	var urlBase = '/LW/jsp/templates/allaboutwine/';

    	if (highlightMappings == null) {
    		initHighlighter(this);
    		return this;
    	}

    	function initHighlighter(target) {
    		$.get("/LW/js/keywordMap.json", null, function(data) {
    			highlightMappings = data;

    			target.each(function() {
    				innerHighlight(this, highlightMappings);
    			});

    		}, 'json');
    	}

    	function innerHighlight(node, highlightMappings) {
    		var skip = 0;
    		if (node.nodeType == 3) {
    			var text = node.data.toUpperCase();
    			for (var pat in highlightMappings) {
    				var pos = text.indexOf(pat.toUpperCase());
    				if (pos >= 0) {
    					var url = highlightMappings[pat];
    					var spannode = document.createElement('a');

    					if (url.match("^/")) {
    						$(spannode).attr('href', url);
    					}
    					else {
    						$(spannode).attr('href', urlBase + url);
    					}


    					$(spannode).attr('class', 'red');
    					spannode.className = 'highlight';
    					var middlebit = node.splitText(pos);
    					var endbit = middlebit.splitText(pat.length);

    					if (contextCheck(pos, node, middlebit, endbit)) {
    						var middleclone = middlebit.cloneNode(true);
    						spannode.appendChild(middleclone);
    						middlebit.parentNode.replaceChild(spannode, middlebit);
    					}

    					skip = 1;
    				}
    			}
    		} else if (node.nodeType == 1 && node.childNodes
    				&& !/(script|style)/i.test(node.tagName)) {
    			for ( var i = 0; i < node.childNodes.length; ++i) {
    				i += innerHighlight(node.childNodes[i], highlightMappings);
    			}
    		}
    		return skip;
    	}

    	function contextCheck(pos, node, middlebit, endbit) {

    		if (middlebit.parentNode.tagName == 'A') {
    			return false;
    		}

    		var before = node.nodeValue;
    		var after = endbit.nodeValue;

    		if ((!before || /[ \>\"\,\.\'\!]$/.test(before))
    				&& (!after || /^[ \>\"\,\'\.\!]/.test(after))) {
    			return true;
    		} else {
    			return false;
    		}

    	}
    };

    function initialiseBackButtonHandler() {

    	var fullUrl = window.location.toString();
    	if (fullUrl.indexOf("?") == -1 && fullUrl.indexOf("#") == -1) {
    		chooserResultsCacheHomePage = $('DIV#ChooserResults').html();
    	}

		chooserResultsCache[''] = getCacheData('','','');

		// if we arrive from url containing a trail- assume we can immediately repaint the results window
		var startUrl = $.param.fragment();
		if (startUrl.toString().indexOf("_trail=") > -1) {
			chooserResultsCacheControlFlag = false;
		}

    	  // Bind an event to window.onhashchange that, when the history state changes,
    	  // gets the url from the hash and displays either our cached content or fetches
    	  // new content to be displayed.
    	  $(window).bind( 'hashchange', function(e) {
    	    var url = $.param.fragment();

    	    if (chooserResultsCacheControlFlag) {
    	    	chooserResultsCacheControlFlag = false;
    	    	return;
    	    }

    	    var cacheData = parseCacheData(url);

    	    if (cacheData.product.length > 0)
    	    {
    	    	showProductPage(cacheData.product);
    	    	return;
    	    }

    	    // if in cache - use it...
   	    //if ( chooserResultsCache[ url ] ) {

    	    	if (!cacheData) {
    	    		// nothing sane in the hash string
    	    		alert('string match failed for url --->' + url + '<---');
    	    		return;
    	    	}

    	    	if ($(".wineChooser").css('display') == 'none')
    	    	{
    	    		toggleChooserAndBackButtons();
    	    	}

    	    	var content;

    	    	if (url == '' && chooserResultsCacheHomePage != undefined)
    	    	{
    	    		content = chooserResultsCacheHomePage;
    	    	}
    	    	var thisReset = new globalReset(chooserFormWatcher);
    	    	thisReset.resetItemsNoUpdate();
    	    	chooserFormWatcher.update(null, null, null, cacheData.trail, cacheData.range, cacheData.search, content);
    	    	//chooserFormWatcher.prePopulate(cacheData.trail);
    	    	//chooserFormWatcher.pageLoad();


    	    //}
    	  });

    	  // Since the event is only triggered when the hash changes, we need to trigger
    	  // the event now, to handle the hash the page may have loaded with.
    	  $(window).trigger( 'hashchange' );
    }

function showProductPage(product) {
	$('html, body').animate({scrollTop:0}, 'fast');

	var url = '/DWBase/jsp/templates/article/productDetailsMinimal.jsp?minimal=true&productId=' + product;

	$('DIV#ChooserResults').addClass('processing');

	 $.ajax({
		   url: url,

		   success: function(data){

				var $visible = $(".chooserBackButts:visible")

				if ($visible.length == 0) {
					toggleChooserAndBackButtons();
				}

				$('DIV#ChooserResults').html(data);

				if (!($.browser.msie && $.browser.version == 6)){
					$("DIV.sort SELECT").selectbox();
				}

				wineInfoPanel();

				$('DIV#ChooserResults').removeClass('processing');

				chooserResultsLoadCallback();

			},
			error: function(data) {
				alert("err:" + data);
			},

			complete: function (XMLHttpRequest, textStatus) {
			}
	 	});
}

function removeHash(url) {
    	var i = url.indexOf("#");
    	if (i > -1)
    	{
    		url = url.substr(0,i);
    	}
    	return url;
}

function getCacheDataForProduct(product) {
	 var fragment = $.param.fragment();
	 var cacheData;
	 var index = fragment.indexOf('_p=');

	 if (index == -1) {
		 cacheData = getCacheData('','', '', product);
	 }
	 else
	 {
		 cacheData = fragment.toString().substr(0, index + 3);
		 cacheData = cacheData + product;
	 }

	 return cacheData;
}

function getCacheData(trail, range, search, product) {
	var data = '_trail='+replIn(trail) +'_range='+replIn(range)+'_search='+replIn(search) + '_p='+product;
	return data;
}

function parseCacheData(text) {
	var regEx = /_trail=(.*?)_range=(.*?)_search=(.*?)_p=(.*?)$/;
	var results = regEx.exec(text);
	var returnObject = {};

	if (!results) {
		returnObject.trail = '';
		returnObject.range = '';
		returnObject.search = '';
		returnObject.product = '';
	}
	else {

		returnObject.trail = replOut(results[1]);
		returnObject.range = replOut(results[2]);
		returnObject.search = replOut(results[3]);
		returnObject.product = results[4];
	}

	return returnObject;
}

function repl(text, from, to) {
	var regEx = new RegExp(from, "g");
	var result = text.replace(regEx, to);
	return result;
}


function replIn(text) {
	text = repl(text, '&', '~');
	text = repl(text, '%', ',');
	return text;
}

function replOut(text) {
	text = repl(text, '~', '&');
	text = repl(text, ',', '%');
	return text;
}


