var basketURL;
var checkoutURL;
var rootURL;
var contentBackup;

$(document).ready(function()
{
    $('#addressFinder').prepend('<p>Address Finder<br /><input name="postcode" onkeypress="enterCheck(event)" id="postcode" value="Postcode" class="postcodebox" onfocus="inputBoxContent(this)" /><a class="findaddress" href="javascript:getPostcodeLookup();"><img src="' + rootURL + '/interface/btn_findaddress.gif" alt="Find Address" /></a></p><div class="popup" title="Postcode Lookup"></div>');
    if($('.iptPostCode').attr('value') == "")
    {
        $('.address_manual').append('<a href="javascript:;" onclick="toggleDiv(\'hide_address\')">If you don\'t know your postcode or have an overseas address please click here</a>');
    }
    else
    {
        $(".hide_address").show();
    }
    $(".addressRadio").change( AddressChoiceChange ).click( AddressChoiceChange );
    $('.basket').addClass('scripted');
    AddressChoiceChange();
    
    $('.reveal_header').click( function () {
        var mySection = $(this).siblings('.reveal_section');
        if($(this).hasClass('active')) {
            $(this).removeClass('active');
            mySection.stop(true,true).show().animate({ height: 'hide' }, 'slow');
        }
        else {
            $(this).addClass('active');
            mySection.stop(true,true).hide().animate({ height: 'show' }, 'slow');
        }
    });
		
	var GETDATA = new Array();
	var sGet = window.location.search;
	if (sGet) // if has a value...
	{
		sGet = sGet.substr(1);
		var sNVPairs = sGet.split("&");
		for (var i = 0; i < sNVPairs.length; i++)
		{
			var sNV = sNVPairs[i].split("=");
			var sName = sNV[0];
			var sValue = sNV[1];
			
			if(sName == "q")
			{
				$("#q").attr('value',sValue);
			}
		}
	}
});

function activateInteractions()
{
   ajaxBasketForms();
   dragActivate();
}

function displayBasket()
{
    if($('#basket').hasClass('basket_down'))
    {
       $('#basket').removeClass("basket_down").animate({ marginTop: 0 }, 'slow');
       $('#basket').find('#basket_content').animate({ height: 'hide' }, 'slow');
       $('#basket').find('#basket_buttons').animate({ height: 'hide' }, 'slow');  
       $('#basket').find('.basket_header').animate({ height: 'hide' }, 'slow');
       $('#thetrolley').animate({ height: '70' }, 'slow'); 
    }
    else
    {
        $('#basket').addClass("basket_down").animate({ marginTop: -170 }, 'slow');
        $('#basket').find('#basket_content').animate({ height: 'show' }, 'slow');
        $('#basket').find('#basket_buttons').animate({ height: 'show' }, 'slow');
        $('#basket').find('.basket_header').animate({ height: 'show' }, 'slow');
        $('#thetrolley').animate({ height: '250' }, 'slow'); 
    }
}

function iframeCheck()
{
    if($('#basket').css('margin-top') != '0px' || $('#basket').css('margin-top') != 'auto')
    {
        $('#basket').removeClass("basket_down").css('margin-top', '0px');
        $('#thetrolley').css('height', '70px');
    }
}

function linkConvert(myLink)
{
    myLink = myLink.substring(0,myLink.lastIndexOf('.'));
    myLink += '.xml';
    myLink = myLink.replace('..','.');
    return myLink;
}

function loadBasket()
{
    $.ajax(
    {
      type: "GET",
      url: rootURL + 'wine.store/shoppingcart/summary.json',
      cache: false,
      dataType: "json",
      success: function(xml){
        buildBasket(xml);
      },
      error: function(xml){
        buildBasket(xml);
      }
    });
}

function formatCurrency(myNum)
{
	myString = myNum.toString();
	if(myString.indexOf(".")>0)
	{
		myChar = parseInt(myString.charAt(myString.lastIndexOf(".")+3));
		myNum = parseFloat(myString.substring(0, myString.lastIndexOf(".")+3));
		if(myChar>4)
			myNum = (Math.round(myNum*100)+1)/100;
	    myString = myNum.toString();
	    if(myString.indexOf(".")== myString.length-2)
	        myString += "0";
 	}
 	else
 	{
 	    myString += ".00";
 	}
	return '&pound;' + myString;
}
function ajaxBasketForms()
{
    $(document).ready(function()
    {
        $('form').each(function() {
        if($(this).attr('target') == "thetrolley" && !$(this).hasClass('ajaxed'))
        {
            $(this).addClass('ajaxed').submit( function()
            {
                if(!$('#basket').hasClass('basket_down'))
                {
                    displayBasket();
                }
                var action = rootURL + 'wine.store/shoppingcart/update.json';
                var params = {};
                $(this).find('input').each( function() {
                    thisName = (this.name || this.id)
                    if(thisName && (thisName != " "))
                    {
                        params[thisName] = this.value;
                    }
                });
                contentBackup = $('.basket_padding').html();
                $('.basket_padding').html('<img src="'+rootURL+'interface/loading.gif" alt="Loading" class="loadingImage" />');
                $.ajax(
                {
                  type: "GET",
                  url: action,
                  cache: false,
                  dataType: "json",
                  data: params,
                  success: function(xml) {
                    buildBasketContent(xml);
                  }
                });
                return false;
            });
        }
    });
    });
}

function buildBasketContent(xml)
{
   var xml = xml;
   var numBottles = 0;
   var totalBottles = 0;
   var totalBottlesPrice= 0;
   var totalCases = 0;
   var totalCasesPrice = 0;
   var totalItems = 0;
   var totalLineCost = formatCurrency(0);
   if(!location.hash)
   	scrollTo(0,0);
   if(xml.UpdateMessages)
       {
          $('.basket_padding').html(contentBackup);
          for(i=0;i<xml.UpdateMessages.AllMessages.length;i++)
          {
            if($(".errorPopup").hasClass('ui-dialog-content'))
            {
                $(".errorPopup").dialog("open");
            }
            else
            {
                $(".errorPopup").dialog({
		            bgiframe: true,
		            width: 350,
		            position: 'center',
		            resizable: true
	            });
	           }
	           var messageText = xml.UpdateMessages.AllMessages[i].Message.replace(/\n/g, "<br />");
	        $(".ui-dialog-content").css('display','block').html(messageText);
          }
       }
   else
   {
       if(xml)
       {
            if(xml.TotalOrderItemQuantity > 0)
            {
                totalLineCost = formatCurrency(xml.TotalLineCost);
                totalItems = xml.TotalOrderItemQuantity;
                for(i=0;i<xml.OrderLines.length;i++)
                {
                    var myOrderLine = xml.OrderLines[i];
                    var myAttributes = myOrderLine.SkuOffering.Sku.Attributes;
                    var bottleProduct;
                    for(j=0;j<myAttributes.length;j++)
                    {
                        if(myAttributes[j].Definition.Code == "MUST-ORDER-AS-PART-OF-MIXED-CASE")
                        {
                            bottleProduct = myAttributes[j].Value;
                        }
                    }
                    for(j=0;j<myAttributes.length;j++)
                    {
                        if(myAttributes[j].Definition.Code == "BOTTLES-PER-CASE")
                        {
                            if(bottleProduct)
                            {
                                totalBottles += myOrderLine.Quantity;
                                totalBottlesPrice += myOrderLine.ActualLineCost;
                                break;
                            }
                            else
                            {
                                totalCases += myOrderLine.Quantity;
                                totalCasesPrice += myOrderLine.ActualLineCost;
                                break;
                            }
                        }
                    }
                }
                numBottles = totalBottles % 12;
            }
           }
           html = '<div class="basket_detail">'+ totalCases;
           if(totalCases == 1) 
           {
            html += " Case";
           }
           else
           {
            html += " Cases";
           }
           html += '</div><strong>'+ formatCurrency(totalCasesPrice) +'</strong><div class="clear"></div>';
           html += '<div class="basket_detail">'+ totalBottles;
           if(totalBottles == 1) 
           {
            html += " Mix Bottle";
           }
           else
           {
            html += " Mix Bottles";
           } 
           html += '</div><strong>'+ formatCurrency(totalBottlesPrice) +'</strong><div class="clear"></div><div class="bottles">';
           for(i=0;i<12;i++)
           {
               var bottleLink = 'icon_singlebottle.gif';
               if(totalBottles == 0)
               {
                   bottleLink = 'icon_fullbottle.gif'; 
               }
               if(numBottles-1 >= i  || (numBottles == 0 && (totalCases > 0 || totalBottles > 0)))
               {
                html += '<img src="'+ rootURL +'interface/'+ bottleLink +'" alt="Wine Bottle" />';
               }
               else
               {
                html += '<img src="'+ rootURL +'interface/icon_emptybottle.gif" alt="Bottle Required" />';
               }
           }
           html += '<div class="clear"></div></div>';
           if(numBottles > 0 || (numBottles == 0 && totalCases == 0 && totalBottles == 0) )
           {
            html += '<div class="bottles_total">Mix bottles in multiples of 12</div>';
           }
           else
           {
            html += '<div class="bottles_total">&nbsp;</div>';
           }
           if(numBottles == 0 && (totalBottles > 0 || totalCases > 0))
           {
           	$('#checkout_button').attr('href', checkoutURL.replace(/&amp;/g, "&"));
           }
           html += '<div class="errorPopup"></div>';
           $('.basket_padding').html(html);
           $('.basket_total').html('<a href="javascript:displayBasket();"><span>Total:</span> ' + totalLineCost + '</a>');
           if(totalItems > 0)
           {
             $('#basket').addClass("basket_down").css({ marginTop: -170 });
             $('#basket').find('#basket_content').show();
             $('#basket').find('#basket_buttons').show();
             $('#basket').find('.basket_header').show();
             $('#thetrolley').show(); 
           }
    }
}

function buildBasket(xml)
{
   var html = '<div class="basket_header"><a href="javascript:displayBasket();"><span>Shopping Basket</span></a></div><div class="basket scripted"><div id="basket_content"><div class="basket_padding">';
   html += '</div></div><div class="basket_total"></div><div id="basket_buttons"><div class="basket_view"><a href="' + basketURL + '"><span>View Basket</span></a></div></div>';
   html += '<div class="basket_checkout"><a id="checkout_button" href="' + basketURL + '"><span>Checkout</span></a></div></div>';
   $("#basket").html(html);
   buildBasketContent(xml);
}

function inputBoxContent(myInput)
{
    switch(myInput.value)
    {
        case "Search":
        case "Username":
        case "E-mail address":
        case "Password":
        case "House no/Name":
        case "Enter Code":
        case "Postcode":
            myInput.value = "";
            break;
    }
}

function inputBoxBlankCheck(myInput, defaultValue)
{
    if(myInput.value == "")
    {
        myInput.value = defaultValue;
    }
}

function changedTextarea(mytextArea,limitID)
{
	myString = mytextArea.value;
	if(myString.length <= 150)
	{
		document.getElementById(limitID).value = 150 - myString.length;
	}
	else
	{
		document.getElementById(limitID).value = 150 - myString.length;
		alert('Your message is too long');
		return false;
	}
}

function dragActivate()
{
   $(document).ready(function()
   { 
    $('.icon_section').addClass('draggable').draggable({
	    helper: 'clone',
		opacity: 0.35
    });
    
    $('.product_detail_left img.photoMargins').addClass('draggable').draggable({
	    helper: 'clone',
		opacity: 0.35
    });
	
	
    $('#basket').droppable({
	    accept: '.icon_section, img.photoMargins',
	    activeClass: 'activeBasket',
	    drop: function(ev, ui) {
	        var myForm
	        if(!$('#basket').hasClass('basket_down'))
            {
                displayBasket();
            }
            if(ui.draggable.hasClass('icon_section'))
            {
               var myNumber = ui.draggable.parent().find('form').length-1;
		       myForm = ui.draggable.parent().find('form:eq('+myNumber+')');
		    }
		    else
		    {
		        myForm = ui.draggable.parent().parent().parent().find('form:eq(0)');
		    }
		    var action = rootURL + 'wine.store/shoppingcart/update.json';
            var params = {};
            myForm.find('input').each( function() {
                thisName = (this.name || this.id)
                if(thisName && (thisName != " "))
                {
                    params[thisName] = this.value;
                }
            });
            $('.basket_padding').html('<img src="'+rootURL+'interface/loading.gif" alt="Loading" class="loadingImage" />');
            $.ajax(
            {
              type: "POST",
              url: action,
              cache: false,
              dataType: "json",
              data: params,
              success: function(xml) {
                buildBasketContent(xml);
              }
            });
	    }
    });
    });
}

function getPostcodeLookup()
{
    var action = rootURL + 'wine.store/addresses/find.json';
    var params = {};
    params['postCode'] = $('#postcode').attr('value');
    if($(".popup").hasClass('ui-dialog-content'))
    {
        $(".popup").dialog("open");
    }
    else
    {
        $(".popup").dialog({
		    bgiframe: true,
		    width: 350,
		    height: 400,
		    resizable: true,
		    position: 'center'
	    });
	}
	$(".ui-dialog-content").css('display','block').html('<span class="aligncenter"><img src="'+rootURL+'interface/loading.gif" alt="Loading" /></span>');
	$.ajax(
    {
      type: "GET",
      url: action,
      cache: false,
      dataType: "json",
      data: params,
      success: function(data) {
        applyPostcodeLookup(data);
      }
    });
}

var addrData;

function applyPostcodeLookup(data) 
{
    addrData = data;
    if (addrData.Addresses == null)
    {
    	var myError = "";
    	for (i = 0; i < addrData.Notifications.AllMessages.length; i++)
    	{
    		var message = addrData.Notifications.AllMessages[i].Message;
    		if (message == "Sorry, an error occured. Please enter your address manually")
    		{
    			message = "Sorry, the post code was not found - there may be a problem with our address lookup system. Please enter your address manually";
    		}
    		myError += message + '<br />';
    	}
    	$(".ui-dialog-content").html('<span class="aligncenter">' + myError + '</span>');
    }
    else if (addrData.Addresses.length == 0)
    {
    	$(".ui-dialog-content").html('<span class="aligncenter">Sorry, the post code was not found - there may be a problem with our address lookup system. Please enter your address manually</span>');
    }
    else if (addrData.Addresses.length == 1)
    {
    	populateAddress(addrData.Addresses[0]);
    }
    else
    {
    	var myHTML = '';
    	for (var i = 0; i < addrData.Addresses.length; i++)
    	{
    		myHTML += '<a class="postcodeLink" href="javascript:populateAddress(addrData.Addresses[' + i + ']);">' + addrData.Addresses[i].Address1 + ', ' + addrData.Addresses[i].Address2 + ', ' + addrData.Addresses[i].City + ', ' + addrData.Addresses[i].State + ', ' + addrData.Addresses[i].PostCode + '</a>';
    	}
    	$(".ui-dialog-content").html(myHTML);
    }
}

function populateAddress(addressNode)
{
    $(".iptAddr1").attr('value', addressNode.Address1);
    $(".iptAddr2").attr('value', addressNode.Address2);
    $(".iptCity").attr('value', addressNode.City);
    $(".iptState").attr('value', addressNode.State);
    $(".iptPostCode").attr('value', addressNode.PostCode);
    $(".iptCountry").attr('value', addressNode.CountryCode);
    if($(".hide_address").css('display') == "none")
    {
        $(".hide_address").stop(true,true).animate({height:'show'},'slow');
        $('.address_manual').hide();
    }
    $(".popup").dialog('close');
}

function AddressChoiceChange()
{
    if($(".addressRadio[value='-1']").length > 0)
    {
        var checked = $(".addressRadio[value='-1']")[0].checked;
        if (checked)
        {
            $("#newAddressPanel").stop(true,true).animate({height:'show'},'slow');
        }
        else
        {
            if($("#newAddressPanel").css('display') == "block")
            {
                $("#newAddressPanel").stop(true,true).animate({height:'hide'},'slow');
            }
        }
    }
}

function multiplyQty(myTextBox)
{
    myid = myTextBox.id;
    myid = myid.substring(1,myid.length);
    $(myTextBox).parent().find('.quantity').attr('value',myTextBox.value*12);
}

function toggleDiv(sClass)
{
    if($('.'+sClass).css('display') == "block")
    {
        $('.'+sClass).stop(true,true).animate({height:'hide'},'slow');
    }
    else
    {
        $('.'+sClass).stop(true,true).animate({height:'show'},'slow');
    }
}

// show / hide element depending on whether checkbox is selected
function toggleVisibleByCheckBox(checkbox, elementId) 
{
    if (checkbox.checked) 
    {
        $('#' + elementId).stop(true, true).animate({ height: 'show' }, 'slow');
    }
    else
    {
        $('#' + elementId).stop(true, true).animate({ height: 'hide' }, 'slow');        
    }       
}

function enterCheck(evt)
{
    var charCode;

    var evt = (evt) ? evt : event;
    if(evt.charCode) {
        charCode = evt.charCode;
    } else if(evt.which) {
        charCode = evt.which;
    } else {
        charCode =  evt.keyCode;
    }
    if(charCode == 13)
    {
        $(".findaddress").click();
        return false;
    }
}