var VFNZShop = window.VFNZShop || {};

VFNZShop.StandingData = {
	Markup : {
		AjaxLoader      : "<div><p class=\"ajaxloader\">loading...</p></div>",
		ShowDetailsLink : "<a href=\"#\">show details</a>",
		HideDetailsLink : "<a href=\"#\">hide details</a>",
		AddToCartButton : "<a href=\"recommend.html\" class=\"textBtnRed button add\" title=\"buy [Produktname]\"><span>Add to cart</span></a>",
		CartItemsShown  : "<a href=\"#\"><span id=\"itemcount\">item not shown</span> <span class=\"more\">Show all</span></a>",
		CartTotals      : "<div><div class=\"cartProduct\">Ongoing monthly total</div><div class=\"cartPrice\">$0.00</div><div class=\"cartProduct\">Total payments today</div><div class=\"cartPrice bold\">$0.00</div></div>"   
	},
	Uri : {
		PlanDetails         : "mockup_plandetail.html",
		PreviousOrders      : "mockup_orderdetail.html",
		MobileCompare       : "mobile_compare.html",
		AddToCompare        : "mockup_addtocompare.html",
		RemoveFromCompare   : "mockup_removefromcompare.html"
	},
	MobileComparison : {
	  MaximumNumber : 4
	}
};//VFNZShop.StandingData
VFNZShop.Pages = {
    "accessory_details.html" : {
        js : [  
          { library : "css/1.2/js/shop_nz_accessory_details.js"}
        ]
    },
    "accessory_listing.html" : {
        js : [       
          { library : "css/1.2/js/shop_nz_accessory_listing.js" } 
        ]
    },
    "accessory_listing_special.html" : {
        js : [       
          { library : "css/1.2/js/shop_nz_accessory_listing.js" } 
        ]
    },
    "broadband_details.html" : {
        js : [ 
          { library : "css/1.2/js/shop_nz_broadband_details.js" }
        ]
    },
    "broadband_plans_configurator.html" : {
        js : [ 
            { library : "css/1.2/js/jquery.dimensions.js" },
            { library : "css/1.2/js/ui.mouse.js" },   
            { library : "css/1.2/js/ui.slider.js" },
            { library : "css/1.2/js/shop_nz_broadband_plans_configurator.js" }
        ]
    },
    "cart_details.html" : {
        js : [
            { library : "css/1.2/js/shop_nz_cart_details.js" }
        ]
    },
    "cart_details-personal.html" : {
        js : [
            { library : "css/1.2/js/shop_nz_cart_details_personal.js" }
        ]
    },
        "cart_details-business.html" : {
        js : [
            { library : "css/1.2/js/shop_nz_cart_details_business.js" }
        ]
    },        
    "cart_login.html" : {
      js : [
        { library : "css/1.2/js/shop_nz_cart_login.js" }
      ]
    },
    "cart_confirmation.html" : {
      js : [
         { library : "css/1.2/js/shop_nz_cart_confirmation.js" }
      ]
    },
    "cart_thank-you.html" : {
        js : [
          { library : "css/1.2/js/shop_nz_cart_thankyou.js" }
        ]
    },    
    "mobile_listing.html" : {
        js : [ 
            { library : "css/1.2/js/shop_nz_mobile_listing.js" }  
        ]
    },
    "mobile_listing_mostpopular.html" : {
        js : [ 
            { library : "css/1.2/js/shop_nz_mobile_listing.js" }  
        ]
    },
    "mobile_listing_newrelease.html" : {
        js : [ 
            { library : "css/1.2/js/shop_nz_mobile_listing.js" }  
        ]
    },
    "mobile_listing_special.html" : {
        js : [ 
            { library : "css/1.2/js/shop_nz_mobile_listing.js" }  
        ]
    },
    "mobile_listing_toprated.html" : {
        js : [ 
            { library : "css/1.2/js/shop_nz_mobile_listing.js" }  
        ]
    },        
    "mobile_listing_brand.html" : {
        js : [ 
            { library : "css/1.2/js/shop_nz_mobile_listing.js" }  
        ]
    },     
    "home.html" : {
        js : [ 
            { library : "css/1.2/js/shop_nz_home.js" } 
        ]
    },    
    "homephone_details.html" : {
        js : [ 
            { library : "css/1.2/js/shop_nz_homephone_details.js" }  
        ]
    },
    "homephone_listing.html" : {
        js : [ 
            { library : "css/1.2/js/shop_nz_homephone_listing.js" }  
        ]
    },
    "mobile_compare.html" : {
        js : [ 
            { library : "css/1.2/js/shop_nz_mobile_compare.js" }    
        ]
    },
    "plans_configurator.html" : {
        js : [ 
            { library : "css/1.2/js/jquery.dimensions.js" },
            { library : "css/1.2/js/ui.mouse.js" },   
            { library : "css/1.2/js/ui.slider.js" },
            { library : "css/1.2/js/shop_nz_plans_configurator.js" }  
        ]
    },
    "plans_homepage.html" : {
        js : [ 
            // { library : "css/1.2/js/shop_nz_plans_homepage.js" }  
        ]
    }, 
    "overlay_slideshow.html" : {
        js : [
               //{ library : "css/1.2/js/shop_nz_overlay_slideshow.js" }
        ]
    },
    "recommend.html" : {
        js : [  
            // { library : "css/1.2/js/shop_nz_recommend.js"}
        ]
    },
    "recommend_plan.html" : {
        js : [  
            { library : "css/1.2/js/shop_nz_recommend_plan.js"}
        ]
    },   
    "special_details.html" : {
        js : [       
            { library : "css/1.2/js/shop_nz_mobile_details.js" }    
        ]
    },        
    "special_listing.html" : {
        js : [     
            { library : "css/1.2/js/shop_nz_special_listing.js" } 
        ]
    },
    "special_listing_mobileinternet.html" : {
        js : [     
            { library : "css/1.2/js/shop_nz_special_listing.js" } 
        ]
    },
    "special_listing_homephones.html" : {
        js : [     
            { library : "css/1.2/js/shop_nz_special_listing.js" } 
        ]
    },
    "special_listing_accessories.html" : {
        js : [     
            { library : "css/1.2/js/shop_nz_special_listing.js" } 
        ]
    },
    "store_login.html" : {
        js : [ 
            { library : "css/1.2/js/shop_nz_store_login.js" }    
        ]
    }
};//VFNZShop.Pages

var $j = jQuery.noConflict();											// use $j instead of $ to avoid other library conflicts
$j(document).ready(function(){
    VFNZShop.Common().ready();
});

VFNZShop.Common = function() {

  function slideTop() {
    $j("#help_shopping a").parents("dt").removeClass("selected").next("dd").removeClass("show").slideUp("normal");
  }//slideTop
  function slideTopDown() {
    $j("#help_shopping a").parents("dt").addClass("selected").next("dd").addClass("show").slideDown("normal");
  }//slideTopDown
  function showMid() {
    $j("#using_mobile a").parents("dt").addClass("selected").next("dd").removeClass("hidden").addClass("show");
  }//showMid
  function showBot() {
    $j("#about_plans a").parents("dt").addClass("selected").next("dd").removeClass("hidden").addClass("show");
  }//showBot
  function hideMid() {
    $j("#using_mobile a").parents("dt").removeClass("selected").next("dd").addClass("hidden").removeClass("show");
  }//hideMid   
  function hideBot() {
    $j("#about_plans a").parents("dt").removeClass("selected").next("dd").addClass("hidden").removeClass("show");
  }//hideBot
  function slideMidDown() {
    $j("#using_mobile a").parents("dt").addClass("selected").next("dd").slideDown("normal").addClass("show");
  }//slideMidDown
  function slideMidUp() {
    $j("#using_mobile a").parents("dt").removeClass("selected").next("dd").slideUp("normal", function() {
      $j("#using_mobile").next("dd").removeClass("show");
    });
  }//slideMidUp
  
  var toggleHelpSupportSection = function() {
    var s = $j(".helpMod .selected");         //get currently selected
    var e = $j(this);                         //whats the event
    switch ($j(s).get(0).id) {
      case "help_shopping" :
        switch ($j(e).parents("dt").get(0).id) {
          case "using_mobile" :
            slideTop(); showMid();        
            break;
          case "about_plans" :
            slideTop(); showBot();        
            break;
        }
        break;
      case "using_mobile" :
        switch ($j(e).parents("dt").get(0).id) {
          case "help_shopping" :
            slideTopDown(); hideMid();
            break;
          case "about_plans" :
            slideMidUp(); showBot();      
            break;
        }    
        break;
      case "about_plans" :
        switch ($j(e).parents("dt").get(0).id) {
          case "help_shopping" :
            slideTopDown(); hideBot();
            break;
          case "using_mobile" :
            slideMidDown(); hideBot();  
            break;
        }    
        break;
    }
    return false;
  }//toggleHelpSupportSection  

  var validateMobileNumber = function() {
    g_no = /[^\d ]/;
	  if ((g_no.test($j("#upgradeMobileNumber").val())) || ($j("#upgradeMobileNumber").val().replace(new RegExp(/\s+/),"").length == 0)) {
	    VFNZShop.Common().showDialog(VFNZShop.Common.checkNumberError);
		  return false;
	  }else{
	    alert("FORM POST TO ATG");
	  }
  }//validateMobileNumber
  
  var closeCheckError = function() {
		VFNZShop.Common().hideDialog();
  }//closeCheckError
    
  var showCoverageChecker = function() {
    VFNZShop.Common().showDialog(VFNZShop.Common.coverageChecker);
	  return false;
	reloadChecker();  
  }//showCoverageChecker

	function reloadChecker() {
		document.getElementById(cfca).contentDocument.location.reload(true);
	}

  var closeCoverageChecker = function() {
		VFNZShop.Common().hideDialog();
  }//closeCoverageChecker

  var toggleCartContents = function(){
    if ($j("#cartAllItems").hasClass("hidden")) {
      showCartContents();    
    }else{
      $j("#cartAllItems div:first").slideUp("fast", function() {
        $j("#cartAllItems").removeClass("show").addClass("hidden");
        $j("#cartAllItems").next().removeClass("selected");      
        var ic = " item";
        if (calcCartCount() > 1)
          ic += "s";
        $j("#itemcount").text(calcCartCount() + ic + " not shown");
        $j(".cartMod .modCopy dl dt a span:last-child").text("Show all").css("margin-left","15px");;
      });
    }
    return false;
  }//toggleCartContents
  
  var showCartContents = function(){
    $j("#cartAllItems").removeClass("hidden").addClass("show");
    $j("#cartAllItems div").css("display","none");  
    $j("#cartAllItems div").slideDown("fast");
    $j("#cartAllItems").next().addClass("selected");
    $j("#itemcount").text("All items shown");
    $j(".cartMod .modCopy dl dt a span:last-child").text("Hide last (" + calcCartCount() +")").css("margin-left","6px");
  }//showCartContents  
  
  var deleteCartItem = function(){
    alert("POST TO ATG");
  }//deleteCartItem 
  
  var calcCartCount = function(){
    var cc = 0;
    var ch = $j(".cartMod dl .carthead");
    for (var i = 0, l = ch.length; i < l; i++) {
      if ($j(ch[i]).text().replace(new RegExp(/\D+/),"") != "")
        cc += parseInt($j(ch[i]).text().replace(new RegExp(/\D+/),""));
    }
    return cc;
  }//calcCartCount
  
  var round2DP = function(n) {
    ans = n * 1000
    ans = Math.round(ans /10) + ""
    while (ans.length < 3) {ans = "0" + ans}
    len = ans.length
    ans = ans.substring(0,len-2) + "." + ans.substring(len-2,len)
    return ans
  }//round2DP

  var getSku = function (e) { 
    var sku = "";
    var skuElement = $j(e).parents("div[id^='sku_']").get(0);
    if ($j(skuElement).length > 0) 
      sku = skuElement.id.replace('sku_','');
    return sku;
  }//getSku

  var MobilesAvailableForCompare = function() {
    var allPhones = $j("div[id^='sku_']");
    for (var i=0;i<allPhones.length;i++) {
      var currentPhone = allPhones[i];
      var currentPhoneSku = currentPhone.id.replace('sku_','');         
      //iterate through all mobile phones in 'Compare Phones' panel
      var phonesToCompare = $j("a[id^='cp_sku_']")
      var foundPhone="false";
      for(var j = 0; j < phonesToCompare.length; j ++){
        if(foundPhone!="true"){
          var currentPhoneToCompareId = phonesToCompare[j].id.replace('cp_sku_','');     
          //if the main phone and phone to compare have same id's we set the main phone as already existing in compare phones panel
          if(currentPhoneSku == currentPhoneToCompareId) {                     
            foundPhone = "true";
            var currentCompareLink = $j(currentPhone).find(".compareLink");
            var compareLink = currentCompareLink.parents().eq(0);
            compareLink.removeClass("not_selected").addClass("selected");
            //adjust the new layout of the now added phone
            var anchor = $j(compareLink).find("a");
            anchor[0].innerHTML = "Added to compare";
          }
        }
      }
    }
  }//MobilesAvailableForCompare
  
  var ComparePhoneCheck = function() {
    var e = this;
    var childElements = $j(e).children();
    var phonesToCompare = $j("a[id^='cp_sku_']");
    if(phonesToCompare.length <= 1) {
      showComparePhoneError();
      return false;
    }
  }//ComparePhoneCheck

  var compareLinkRemove = function() {
    var e = this;
    e = $j(e).parents(".comparePhone");
    var childElements = $j(e).children();
    var CpSkuId = childElements[1].id.replace('cp_sku_','');

    // sync call to ATG
    $j.ajax( {
		  type     : "GET",
			url      : VFNZShop.StandingData.Uri.RemoveFromCompare,
			data     : "sku=" + CpSkuId,
			dataType : "json",
			cache    : false,
			async    : false,
			complete : function(response) { 
        var r = JSON.eval(response.responseText);
				if (r.status == 1) {	
					var divOfComparedPhones = $j(e).parents().eq(0);
					$j(e).remove();
					var newhtml = "<div class='comparePhone'><img src='css/1.2/img/placeholders/compare_wirframeSmall.gif' alt='' /></div>";
					var divOfComparedPhonesChildren = $j(divOfComparedPhones).children();
					var lastComparedPhone = divOfComparedPhonesChildren[2];
					$j(newhtml).insertAfter(lastComparedPhone);
          var skuElements = $j("div[id^='sku_']");
          var elementRemoved = "false";
          for (var i=0;i<skuElements.length;i++){
            if(elementRemoved=="false"){
              var skuElementCurrent = skuElements[i];
              var mobileDetailsSku = skuElementCurrent.id.replace('sku_','');
              if (CpSkuId==mobileDetailsSku) {
                var compareLink = $j(skuElementCurrent).find(".compareLink");
                //Check if we have a compare link to set to selected
                if(compareLink.length>0) {
                  var compareLinkParent = compareLink.parents().eq(0);
                  compareLinkParent.removeClass("selected").addClass("not_selected");
                  var anchor = $j(compareLinkParent).find("a")  ;
                  anchor[0].innerHTML = "Compare mobile";
                }  
                elementRemoved = "true";
              }
            }
          }            
          $j(e).unbind('click',VFNZShop.Common().compareLinkRemove);   // remove click wireup
        }else{
          showRemoveFromCompareError(r.header, r.message);             // load site overlay with error
        }
			}
		});    
		return false;                                       // event wired against a tag - stops it from firing and scrolling up top of screen
  }//compareLinkRemove
  
  var compareLink = function(e) {
    // sync call to ATG
    $j.ajax( {
		  type     : "GET",
			url      : VFNZShop.StandingData.Uri.AddToCompare,
			data     : "sku=" + VFNZShop.Common().getSku(e),
			dataType : "json",
			cache    : false,
			async    : false,
			complete : function(response) { 
          var r = JSON.eval(response.responseText);
          var phonesToCompare = $j(".comparePhone");
          var foundEmptySlot="false";
          var numberOfPhones = phonesToCompare.length;
          if (r.status == 1) {
            for(var i = 0; i < numberOfPhones; i ++) {
              if(foundEmptySlot!="true"){
                var phone = phonesToCompare[i];
                var childElements = $j(phone).children();
                if(childElements.length<2){
                  //Add the right innerHTML
                  var skuValue = VFNZShop.Common().getSku(e);
                  //find the index of the Product in the ATG
                  var ATG_Product_Index = 0;
                  var foundIndex = 0;
                  for(var productIndex = 0; productIndex<ATG.Products.length;productIndex++) {
                    if(ATG.Products[productIndex].sku==skuValue)
                      foundIndex = productIndex;
                  }
                  //add the phone image to the compare phones module
                  var imageUrl = ATG.Products[foundIndex].thumbnail;
                  phone.innerHTML = "<a href=\"mobile_details.html\" title=\"See full details of the [product name] - $[price]\"><img src='"+imageUrl+"' alt='' /></a><a id='cp_sku_"+skuValue+"' class='btnDelete' title=\"Remove [product name] - $[price]\">Remove</a>";
                  //adjust the new layout of the now added phone
                  $j(e).addClass("selected");          // change compare link appearance 
                  var anchor = $j(e).find("a")  ;
                  anchor[0].innerHTML = "Added to compare";
                  $j(phone).children(".btnDelete").bind('click',VFNZShop.Common().compareLinkRemove);
                  foundEmptySlot = "true";
               		VFNZShop.Common().showDialog(VFNZShop.Common.addToCompare);
                  setTimeout(hideDialog,4000);
                }
              }
            }
            //Throw an error if it could not add the phone, this is because the 'phones to compare' are fill with phones
            if(foundEmptySlot=="false")
              showAddToCompareError("An error occurred whilst attempting to add this Mobile for comparison","You can only compare at most 4 phones, please remove a phone and try again"); 
            $j(e).unbind('click',VFNZShop.Common().compareLink);   // remove click wireup
          }else{
            showAddToCompareError(r.header, r.message);             // load site overlay with error
          }
      }
      //window.location = windowRedirect;
    });
    var PhonesInCompareList = $j("a[id^='cp_sku_']").length;
    if(PhonesInCompareList==1) {
      //we dont redirect so return false to stop redirects
      //if there are more than 1 phone in the compare module then the href will redirect to the compare mobile page
      return false;
    }
  }//compareLink
  
  

  function goToMobileCompare() {
     window.location.href = VFNZShop.StandingData.Uri.MobileCompare;
  }//goToMobileCompare

 	var addToCompareError;				// overlay for Add To Compare error message
	var compareLinkError;
	var addToCompare;
	var checkNumberError;
	var coverageChecker;

	function showAddToCompareError(h,m) {
	  var errorMessageOverlay = $j("#errorMsg");
	  VFNZShop.Common.addToCompareError.find("#errorHdr").text(h);
	  VFNZShop.Common.addToCompareError.find("#errorMsg").text(m);
		VFNZShop.Common().showDialog(VFNZShop.Common.addToCompareError);
	}//showAddToCompareError  
	
	function showRemoveFromCompareError(m) {
	  VFNZShop.Common.addToCompareError.find("#errorMsg").text(m);
		VFNZShop.Common().showDialog(VFNZShop.Common.addToCompareError);
	}//showRemoveFromCompareError 
	
	function showComparePhoneError() {
	  //VFNZShop.Common.compareLinkError.find("#errorMsg").text(m);
		VFNZShop.Common().showDialog(VFNZShop.Common.compareLinkError);
	}//showComparePhoneError 
	
	function closeAddToCompareError() {
		VFNZShop.Common().hideDialog();
	}//closeAddToCompareError
  
	var resetSearch = function () {
		resetField(this,'Search');
	}//resetSearch
	
	var eventWireUps = function() {
		//  search input field
		$j(".searchField").blur(resetSearch);
		$j(".searchField").focus(resetSearch);

    $j("#mainsearch").find("a[href='#']").click(VFNZShop.Common().SearchClicked);
    $j(".loginField").find("a[href='#']").click(VFNZShop.Common().NotYetImplementedAlert);
    $j(".firstLevelNav").find("a[href='#']").click(VFNZShop.Common().NotYetImplementedAlert);
    $j(".secondLevelNav").find("a[href='#']").click(VFNZShop.Common().NotYetImplementedAlert);
    $j(".globalNav").find("a[href='#']").click(VFNZShop.Common().NotYetImplementedAlert);
    $j(".metaNav").find("a[href='#']").click(VFNZShop.Common().NotYetImplementedAlert);
    $j(".footer").find("a[href='#']").click(VFNZShop.Common().NotYetImplementedAlert);
    // cart module
    $j(".cartMod .modCopy dl dt a").click(VFNZShop.Common().toggleCartContents);
    $j(".cartMod h2 a span:last").click(VFNZShop.Common().toggleCartContents);    
		$j(".cartMod .modCopy .btnDelete").click(VFNZShop.Common().deleteCartItem);    	
		// compare module
		$j(".compareMod .modCopy .btnDelete").bind('click',VFNZShop.Common().compareLinkRemove);
    $j(".compareMod ul li a").bind('click',VFNZShop.Common().ComparePhoneCheck);			
	  $j("#compareLinkError .closeOverlay").click(VFNZShop.Common().closeAddToCompareError);      
	  $j("#addToCompare .closeOverlay").click(VFNZShop.Common().closeAddToCompareError);      
    // help module
		$j(".helpMod dt a").click(VFNZShop.Common().toggleHelpSupportSection);
		// upgrades offers module
		$j(".upgradeMod #btnSubmit span").click(VFNZShop.Common().validateMobileNumber);
	  $j("#checkNumberError .closeOverlay").click(closeCheckError);      
	  // coverage checker
	  $j("#checkCoverageNow").click(VFNZShop.Common().showCoverageChecker);
	  $j("#coverageChecker .closeOverlay").click(closeCoverageChecker);
	  $j("#printLink").click(VFNZShop.Common().printDialog);    
	  
	  //Overlay Slidehow events
	    $j("#thumbsHolder .enable").find("img[id^='thumbnail_']").parent().parent().click(ThumbnailClicked);


        $j(".slideshowPlay").click(PlaySlideShow);  
	}//eventWireUps
	
//OverlaySlideShow Functions
 var moreImages = function(e) {
    // sync call to ATG
//    $j.ajax( {
//		  type     : "GET",
//			url      : VFNZShop.StandingData.Uri.AddToCompare,
//			data     : "sku=" + VFNZShop.Common().getSku(e),
//			dataType : "json",
//			cache    : false,
//			async    : false,
//			complete : function(response) { 
//          var r = JSON.eval(response.responseText);
//          var phonesToCompare = $j(".comparePhone");
//          var foundEmptySlot="false";
//          var numberOfPhones = phonesToCompare.length;
//          if (r.status == 1) {
//            for(var i = 0; i < numberOfPhones; i ++) {
//              if(foundEmptySlot!="true"){
//                var phone = phonesToCompare[i];
//                var childElements = $j(phone).children();
//                if(childElements.length<2){
//                  //Add the right innerHTML
//                  var skuValue = VFNZShop.Common().getSku(e);
//                  //find the index of the Product in the ATG
//                  var ATG_Product_Index = 0;
//                  var foundIndex = 0;
//                  for(var productIndex = 0; productIndex<ATG.Products.length;productIndex++) {
//                    if(ATG.Products[productIndex].sku==skuValue)
//                      foundIndex = productIndex;
//                  }
//                  //add the phone image to the compare phones module
//                  var imageUrl = ATG.Products[foundIndex].thumbnail;
//                  phone.innerHTML = "<a href=\"mobile_details.html\" title=\"See full details of the [product name] - $[price]\"><img src='"+imageUrl+"' alt='' /></a><a id='cp_sku_"+skuValue+"' class='btnDelete' title=\"Remove [product name] - $[price]\">Remove</a>";
//                  //adjust the new layout of the now added phone
//                  $j(e).addClass("selected");          // change compare link appearance 
//                  var anchor = $j(e).find("a")  ;
//                  anchor[0].innerHTML = "Added to compare";
//                  $j(phone).children(".btnDelete").bind('click',VFNZShop.Common().compareLinkRemove);
//                  foundEmptySlot = "true";
//               		VFNZShop.Common().showDialog(VFNZShop.Common.addToCompare);
//                  setTimeout(hideDialog,4000);
//                }
//              }
//            }
//            //Throw an error if it could not add the phone, this is because the 'phones to compare' are fill with phones
//            if(foundEmptySlot=="false")
              showOverlaySlideShow(); 
//            $j(e).unbind('click',VFNZShop.Common().compareLink);   // remove click wireup
//          }else{
//            showAddToCompareError(r.header, r.message);             // load site overlay with error
//          }
//      }
//      //window.location = windowRedirect;
//    });
//    var PhonesInCompareList = $j("a[id^='cp_sku_']").length;
//    if(PhonesInCompareList==1) {
//      //we dont redirect so return false to stop redirects
//      //if there are more than 1 phone in the compare module then the href will redirect to the compare mobile page
//      return false;
//    }


  }//moreImages
function showOverlaySlideShow() {
    var slideshowOverlay = $j("#slideshow");
    VFNZShop.Common().showDialog(slideshowOverlay);
    $j("div.blockMsg").addClass("gallery");
}//showAddToCompareError   
  
 var imageLoaded = true;
 
  function increaseOpacity(opacity, maxOpacity, fadeInid)
  {
 
        if($j("#"+fadeInid).hasClass("hidden"))
        {
            setInitalOpacity(fadeInid);
            $j("img[id^='large_image_']").addClass("hidden");
            $j("#"+fadeInid).removeClass("hidden")
        }
        changeOpacity(opacity, fadeInid);
        if(opacity >= maxOpacity)
        {
            imageLoaded = true;
            //all thumbnail 'a' tags get their href value
            var thumbnails = $j("img[id^='thumbnail_']").parent().parent();
            for(var i=0;i<thumbnails.length;i++)
            {
                var thumbnail = $j(thumbnails).addClass("enable").removeClass("disable");   
            }

        } 

  }
  function decreaseOpacity(opacity, minOpacity, fadeOutId, fadeInId, millisec)
  {
    //all thumbnail 'a' tags lose their href value
    $j("img[id^='thumbnail_']").parent().parent().removeClass("enable").addClass("disable");

    changeOpacity(opacity, fadeOutId);
    if(opacity <= minOpacity)
    {
    
        $j("#"+fadeOutId).addClass("hidden");
        ImageFadeIn(fadeInId, 0, 100, millisec);
    }    
  }  
  function setInitalOpacity(id)
  {
      var object = $j("#"+id).get(0).style;
      object.opacity = (0);
      object.MozOpacity = (0);
      object.KhtmlOpacity = (0);
      object.filter = "alpha(opacity=" + 0 + ")";
  }
  function changeOpacity(opacity, id) {
      var object = $j("#"+id).get(0).style;
      object.opacity = (opacity / 100);
      object.MozOpacity = (opacity / 100);
      object.KhtmlOpacity = (opacity / 100);
      object.filter = "alpha(opacity=" + opacity + ")";
      
  }

    function SwapOutImages(image1, image2, millisec) {
        var image1Id = $j(image1).get(0).id;
        var image2Id = $j(image2).get(0).id;
        ImageFadeOut(image1Id, image2Id, 0, 100, millisec);       
            
  }

  function ImageFadeOut(id1, id2, opacStart, opacEnd, millisec) {
      //set the new images inital opacity
    if(id1=="large_image_flash")
    {
      var fadeOutId = id1;
      var fadeInId = id2;
      decreaseOpacity(opacStart, opacEnd, fadeOutId, fadeInId, millisec);
    }
    else
    {
      //speed for each frame
      var speed = Math.round(millisec / 100);
      var timer = 0;
      var fadeOutId = id1;
      var fadeInId = id2;
      //determine the direction for the blending, if start and end are the same nothing happens
      var current_opacity = opacEnd;
      for(var i = opacEnd; i >= opacStart; i--) 
      {
          setTimeout(function(){ var x = current_opacity; current_opacity --; decreaseOpacity(x, opacStart, fadeOutId, fadeInId, millisec); },(timer * speed));
          timer++;
      }
    }
  }
  
 function ImageFadeIn(id1, opacStart, opacEnd, millisec) {
    //set the new images inital opacity
    if(id1=="large_image_flash")
    {
      var fadeInId = id1;
      increaseOpacity(opacEnd, opacEnd, fadeInId);
    }
    else
    {
      //speed for each frame
      var speed = Math.round(millisec / 100);
      var timer = 0;
      var fadeInId = id1;
      //determine the direction for the blending, if start and end are the same nothing happens
      var current_opacity = opacStart;
      for(var i = opacStart; i <= opacEnd; i++)
      {
          setTimeout(function(){ var x = current_opacity; current_opacity ++; increaseOpacity(x, opacEnd, fadeInId); },(timer * speed));
          timer++;
      }

    }
 
  }
    function ThumbnailClicked() {
        if($j(this).hasClass("enable"))
        {
            if($j("#btnSlideShow").hasClass("slideshowPause"))
            {
                $j("#btnSlideShow").removeClass("slideshowPause").addClass("slideshowPlay");
                $j("#btnSlideShow").find("a").text("Play Slideshow");
                $j("img[id^='large_image_']").addClass("hidden");
            }
            
            var currentlyActiveThumbnail = $j("#thumbsHolder").find(".active");
            var currentlyActiveThumbnailImage = $j(currentlyActiveThumbnail).parent().find("img");
            var currentActiveLargeImage = $j("#"+currentlyActiveThumbnailImage.get(0).id.replace("thumbnail","large_image"));
            $j(currentlyActiveThumbnail).removeClass("active");

            var clickedThumbnail = $j(this);
            var clickedThumbnailImage = $j(clickedThumbnail).parent().find("img");
            var clickedLargeImage = $j("#"+clickedThumbnailImage.get(0).id.replace("thumbnail","large_image"));
            SwapOutImages(currentActiveLargeImage,clickedLargeImage,500);
             $j(clickedThumbnail).addClass("active");
         }
        return false;
  }
  function PlaySlideShow() {
        //get Initial Image
        var e = $j(this);

        if(e.hasClass("slideshowPlay"))
        {   
            e.removeClass("slideshowPlay").addClass("slideshowPause");
            $j(e).find("a").text("Pause Slideshow");
            setTimeout(function(){ IterateImages() },3000);

        }
        else
        {
            e.addClass("slideshowPlay").removeClass("slideshowPause");
            $j(e).find("a").text("Play Slideshow");
        }
        return false;

  }
  function IterateImages(){
        if($j("#btnSlideShow").hasClass("slideshowPause")){
            var currentlyActiveThumbnail = $j("#thumbsHolder").find(".active");
            var currentlyActiveThumbnailImage = $j(currentlyActiveThumbnail).parent().find("img");
            var currentActiveLargeImage = $j("#"+currentlyActiveThumbnailImage.get(0).id.replace("thumbnail","large_image"));
            $j(currentlyActiveThumbnail).removeClass("active");
            
            //next image
            var currentActiveThumbnailId = $j(currentlyActiveThumbnailImage).get(0).id;
            var nextThumbnail;
            if(currentActiveThumbnailId=="thumbnail_front")
            {
                nextThumbnail = $j("#thumbnail_left").parent().parent();
            }
            else if(currentActiveThumbnailId=="thumbnail_left")
            {
                nextThumbnail = $j("#thumbnail_back").parent().parent();
            }
            else if(currentActiveThumbnailId=="thumbnail_back")
            {
                nextThumbnail = $j("#thumbnail_right").parent().parent();
            }
            else if(currentActiveThumbnailId=="thumbnail_right")
            {
                nextThumbnail = $j("#thumbnail_size").parent().parent();
            }
            else
            {
                nextThumbnail = $j("#thumbnail_front").parent().parent();
            }      
            var nextThumbnailImage = $j(nextThumbnail).parent().find("img");
            var nextLargeImage = $j("#"+nextThumbnailImage.get(0).id.replace("thumbnail","large_image"));
            //set all large images to hidden
            var t = $j("img[id^='large_image_']").addClass("hidden");
            //only show the currently selected image
            $j(currentActiveLargeImage).removeClass("hidden");
            SwapOutImages(currentActiveLargeImage,nextLargeImage,1000);
            $j(nextThumbnail).addClass("active"); 


                setTimeout(function(){ IterateImages() },5000);            
            }
                 

  }
//OverlaySlideShow Functions

  var printDialog = function() {
    window.print();
  }//printDialog
  
	var repButton = function(formId, buttonId) {
		if ($j(formId).length == 0 || $j(buttonId).length == 0) return;
		var button = $j(buttonId);
		var text = button.val();
		var color = button.attr("className"); // f.e. inputBtnRed
		color = color.slice(8); // f.e. Red
		switch (color) {
			case "Red":
			case "Purple":
			case "Grey":
			case "GreyOnRed":
			case "Purple":
				break;
			default:
				color = "Red";
		}
		$j(buttonId).removeClass().addClass("hide").after("<a href='#' class='textBtn"+color+" formBtn'><span>"+text+"</span></a>");
	} //repButton

	function addBehavior() {
		// search go button
		$j("#mainsearch a:last-child").click(function(){
			$j("#mainsearch").submit();
		});
	}//addBehavior
	
	function SearchClicked(){
  	alert("User has requested to :\t\tPERFORM A SEARCH" +
      "\n\nBehavior:\t\t\t\tPage requested has not been built by AIM");
      return false;
	}//SearchClicked
	
	function NotYetImplementedAlert(){
    var e = this.text;
    var throwError = true;
    if(e.indexOf("Shopping cart")>=0) {
        throwError = false;
    }
    if(throwError) {
      alert("User has requested to :\t\tNAVIGATE TO ANOTHER PART OF THE WEBSITE" +
      "\n\nBehavior:\t\t\t\tPage requested has not been built by AIM");
      return false;
	  }
	}//NotYetImplementedAlert
  
  var addSpecialFlash = function() {
    var sa = $j(".specialFlash");
    for (var i = 0, l = sa.length; i < l; i++) {
      if ($j(sa[i]).children("h3").length > 0) {                        
        var s, swf, w, h, p;
        var cl = $j(sa[i]).get(0).className;
        var c  = cl.split(" ");
        if ($j(sa[i]).children("h3").children("a").length > 0) {
          s = $j(sa[i]).children("h3").children("a").text();
          s = $j.trim(s.replace($j(sa[i]).children("h3").children("a").contents().text(),""));
          p = $j(sa[i]).children("h3").children("a").children("span").text();
        }else{
          s = $j(sa[i]).children("h3").text();
          s = $j.trim(s.replace($j(sa[i]).children("h3").contents().text(),""));      
          p = $j(sa[i]).children("h3").children("span").text();
        }
        var ta = s.split(" ");
        switch (c[2]) {
          case "details"    : swf = "css/1.2/swf/special_details.swf"; w = "90"; h = "80"; break;                                          
          case "listing"    : swf = "css/1.2/swf/special_listing.swf"; w = "170"; h = "52";  break;                                 
          case "listingAcc" : swf = "css/1.2/swf/special_listing_accessories.swf"; w = "165"; h = "52";  break;                
          default           : swf = ""; break;
        }
        if (swf != "") {
          var so = new SWFObject(swf, "Special", w, h, "8", "#ffffff");
          so.addParam("wmode","transparent");
          if ($j(sa[i]).children("h3").children("a").length > 0) so.addVariable("vLink",$j(sa[i]).children("h3").children("a").attr("href"));                
          so.addVariable("vColor",c[1]);
          if (ta.length > 0) so.addVariable("vFirstWord",ta[0]);
          if (ta.length > 1) so.addVariable("vSecondWord",ta[1]);
          so.addVariable("vPrice",p);
          if ($j(sa[i]).children("span").length > 0) so.addVariable("vText",$j(sa[i]).children("span").text());            
          so.write($j(sa[i]).get(0).id);                 
        }
      } 
    }
  }//addSpecialFlash
  
  var ready = function() {
    addSpecialFlash();
  
    if(typeof VFNZShop.Common.addToCompareError == "undefined")
 	      VFNZShop.Common.addToCompareError = $j("#addToCompareError");				// overlay for Add To Compare error message
	  if(typeof VFNZShop.Common.compareLinkError == "undefined")
	      VFNZShop.Common.compareLinkError = $j("#compareLinkError");
	  if(typeof VFNZShop.Common.addToCompare == "undefined")
	      VFNZShop.Common.addToCompare = $j("#addToCompare");
	  if(typeof VFNZShop.Common.checkNumberError == "undefined")
	      VFNZShop.Common.checkNumberError = $j("#checkNumberError");
	  if(typeof VFNZShop.Common.coverageChecker == "undefined")
	      VFNZShop.Common.coverageChecker = $j("#coverageChecker");	      
	      
		// smarten up the search button link
		repButton('#mainsearch', '#searchButton');
		
		eventWireUps();
		addBehavior();
		
		var path = window.location.pathname;
		var page = path.substring(path.lastIndexOf('/') + 1);
		
    $j.getScript("/css/1.2/js/json.js");
	  $j.getScript("/css/1.2/js/jquery.blockUI.js");
	 
	  if (VFNZShop.Pages[page] != null) {
      $j.each(VFNZShop.Pages[page].js, function() {           // dynamically load required js libaries
        $j.getScript(this.library);
      });
    }

	}//ready	
	
  var setActiveTab = function(e) {
    var temp = $j(".tgtTabContent");
    $j(e).parents("ul").children(".activeTab").removeClass("activeTab");         // remove currently active tab
    $j(".tgtTabContent").addClass("hidden");                                     // hide all tab content
    $j(e).parents("li").addClass("activeTab");                                   // set active tab
    $j("#" + $j(e).parents("li").get(0).id + "content").removeClass("hidden");   // show respective tab content
  }//setActiveTab
   
  var initTab = function() {
    $j("#tabCont").find(".tgtTabContent:gt(0)").addClass("hidden");
    $j(".tab a[@href^='#tab']").removeAttr("href");
  }//initTab
  
  var showDialog = function(message) {
    var messageDialog = message.eq(0);
    //Note incase the site overlay does not have a class 'siteOverlay' we add it for all cases so
    // So we must also remove in case it already has this class
    messageDialog.removeClass("hidden").removeClass("siteOverlay").addClass("siteOverlay").addClass("show");
    $j.blockUI(messageDialog);
  }//showDialog
	
	var hideDialog = function() {
    var messageDialog = $j(".siteOverlay.show");
    messageDialog.removeClass("show").addClass("hidden");
    
	  $j.unblockUI();
	}//hideDialog    
    
	return {
	  validateMobileNumber        : validateMobileNumber,
	  showCoverageChecker         : showCoverageChecker,
	  toggleHelpSupportSection    : toggleHelpSupportSection,
    toggleCartContents          : toggleCartContents,
    deleteCartItem              : deleteCartItem,
		addToCompareError           : addToCompareError,
		showComparePhoneError       : showComparePhoneError,
		addToCompare                : addToCompare,
		closeAddToCompareError      : closeAddToCompareError,
		checkNumberError            : checkNumberError,
		coverageChecker             : coverageChecker,
		MobilesAvailableForCompare  : MobilesAvailableForCompare,
		ComparePhoneCheck           : ComparePhoneCheck,
		compareLink                 : compareLink,
		moreImages                  : moreImages,
		compareLinkError            : compareLinkError,
		compareLinkRemove           : compareLinkRemove,
		getSku                      : getSku,
		ready                       : ready,
		repButton                   : repButton,
		round2DP                    : round2DP,
		setActiveTab                : setActiveTab,
		initTab                     : initTab,
    NotYetImplementedAlert      : NotYetImplementedAlert,
    SearchClicked               : SearchClicked,
		showDialog                  : showDialog,
		hideDialog                  : hideDialog,
		printDialog                 : printDialog
	}
	
}//VFNZShop.Common

// Classes
VFNZShop.Plan = function(p) {

	var name = p.name || "No Plan Name specified";
	var sku = p.sku || "No SKU specified";
	var minutes = parseInt(p.minutes) || 0;
	var dataAllowance = typeof p.dataAllowance == "undefined" ? -1 : p.dataAllowance;
	var txts = parseInt(p.txts) || 0;
	var terms = p.terms || [ ];
	var bestmates = p.bestmates || 0;
	var	getTermPrice = function(term) {
		var price = 0;
		if (terms.length > 0) price = terms[0].price;
		if (terms.length > 1) {																	// this plan is available in multiple terms	
			for (var j = 1, tl = terms.length; j < tl; j++){					
				if (terms[j].months == term) {								
					price = terms[j].price;
					break;
				}			
			}
		}
		return price;
	}//getTermPrice
	
	var getDefaultPrice = function() {
		var price = 0;
		if (terms.length > 0) price = terms[0].price;
		return price;		
	}//getDefaultPrice
	
	var getDefaultTerm = function() {
		var term = 12;              
		if (terms.length > 0) term = terms[0].months;
		return term;	
	}//getDefaultTerm
	
	return {
		name : name,
		sku : sku,
		minutes : minutes,
		dataAllowance : dataAllowance,
		txts : txts,
		bestmates : bestmates,
		terms : terms,
		getTermPrice : getTermPrice,
		getDefaultPrice : getDefaultPrice,
		getDefaultTerm : getDefaultTerm
	}

};//VFNZShop.Plan
