﻿//Master Javascript file
//version:   1.0
//author:    Chris Sanderson
//email:     chris.sanderson@headscape.co.uk
//website:   http://www.headscape.co.uk


// Add a class to the body so I can style differently depending on whether Javascript is enabled.
function jsEnabled() {
	$("body").addClass("jsenabled");
}

// Creates the corners on form elements
function formCorners() {
	$("input#sField, .mText form .fText, .mText form .fEmail, .mText form .fTextArea").wrap('<span class="TL"><span class="TR"><span class="BL"><span class="BR"></span></span></span></span>');
	$(".mText form").append('<span class="fTL"></span><span class="fTR"></span><span class="fBL"></span><span class="fBR"></span>');
}

// Creates the corners on highlight boxes
function highlightBoxCorners() {
	$(".mText .highlightBox").append('<span class="TL"></span><span class="TR"></span><span class="BL"></span><span class="BR"></span>');
}

// Add a border to related link images
function relLinkBorders() {
	$("#relatedLinks img, #mainBasket .itemCol img").wrap('<div class="linkImage"></div>');
	$("#relatedLinks .itemCol .linkImage, #mainBasket .itemCol .linkImage").append('<span class="border"></span>');
}

// Creates the corners on blockquote elements
function blockquoteCorners() {
	$("blockquote").append('<span class="bqTL"></span><span class="bqBR"></span>');
}

// Add corners to the home page guide feature tabs
function guideFeatureCorners() {
	$("#guideFeature ul li a").append('<span></span>');
	$("#guideFeature #gfImageCol").append('<span class="TR"></span>');
}

// Add corners and caption to content images
function contentImages() {
	$("img.imgLeft, img.imgRight, img.imageNoFloat").each( function() {
		divWrapper = '<div class="' + $(this).attr("class") + '" style="width: ' + $(this).width() + 'px;"></div>';
		if ($(this).parent().get(0).tagName=="A") {
			$(this).parent().wrap(divWrapper);
		} else {
			$(this).wrap(divWrapper);
		};
		$(this).removeAttr("class");
		if ($(this).attr("title")!="") {
			$(this).after('<p class="caption">' + $(this).attr("title") + "</p>");
		} else if ($(this).parent("a").attr("title")!="" && $(this).parent("a").attr("title")!=undefined) {
			$(this).after('<p class="caption">' + $(this).parent("a").attr("title") + "</p>");
		};
		if (!$(this).parent().hasClass("noOverlay")) {
			$(this).parent().append('<span class="TL"></span><span class="BR"></span>');
		}
	});
}

// Change the homepage main image and link when click on a FAQ link
function changeHomepageMainImage(position, file, title, description, url) {
//alert('position = ' + position);
//alert('file = ' + file + ', ' + 'title = ' + title + ', ' + 'description = ' + description + ', ' + 'url = ' + url);

  $("#gfImageCol").fadeOut("normal", function () {$("#gfImageCol").css({backgroundImage: 'url('+file+')'});});
  $("#gfImageCol").fadeIn("normal");

/*
  $("#gfImageCol").css({backgroundImage: 'url('+file+')'});
  $("#gfImageCol").fadeOut("normal");
  $("#gfImageCol").fadeIn("normal");
*/  
  $("#gfImage h4").html(title);
  $("#gfImage p").html(description + "<a class='more' href='" + url + "'>More</a>");
  $("#gfList li").removeAttr("id");
  //$("#gfList li a").removeAttr("href");
  $("#gfList li a").attr("href","#");
  $("#gfList li").eq(position - 1).attr("id","gfCurrent");
}

// Select the text in the search and shop basket quantity fields when clicked
function selectFormField() {
	$("#sField, #saField, #addToBasket input, #mainBasket input").focus( function() {
		$(this).select();
	});
}

// Remove the links on the homepage FAQ list text
function homepageFAQLinks() {
  if ($("#gfList")) {
    $("#gfList li a").attr("href","#");
  }
}


function isNumeric(sText) {
  var ValidChars = "0123456789.";
  var IsNumber=true;
  var Char;
 
  for (i = 0; i < sText.length && IsNumber == true; i++) {
    Char = sText.charAt(i); 
    if (ValidChars.indexOf(Char) == -1) {
      IsNumber = false;
    }
  }
  return IsNumber;
}


// Triggers a new information window when adding items to the shopping basket
function addToBasket() {
  $("#addToBasket").submit(
    function() {
      var id = jQuery(this).find('input[name=id]').val();
      var quantity = jQuery('#qty'+id).val();
      
      if (!isNumeric(quantity)) quantity = 1;
      jQuery('#qty'+id).val(quantity);
      var categoryid = jQuery(this).find('input[name=categoryid]').val();
      var code = jQuery(this).find('input[name=code]').val();
      var name = jQuery(this).find('input[name=name]').val();
      var tax = jQuery(this).find('input[name=tax]').val();
      var unitprice = jQuery(this).find('input[name=unitprice]').val();
      var unitweight = jQuery(this).find('input[name=unitweight]').val();
      var image = jQuery(this).find('input[name=image]').val();
      var shippable = jQuery(this).find('input[name=shippable]').val();

      var param = 'qty' + id + '=' + quantity + '&categoryid=' + categoryid + '&code=' + code + '&name=' + name + '&tax=' + tax + '&unitprice=' + unitprice + '&unitweight=' + unitweight + '&image=' + image + '&shippable=' + shippable;
      
      jQuery.ajax({
        type: 'post',
        url: '/ajax.aspx?action=addtobasket', 
        data: param,
        success: function(msg){
          var reg = new RegExp("[~]+", "g");
          var array = msg.split(reg);
          var totalquantity = array[0];
          var price = array[1];

          $("#basket").removeClass("hide").addClass("highlightBox");
          //$("#basket").html(msg);
          if (totalquantity == "1") {
            $("#basketItems").html('<span class="highlight">1</span> item<span class="highlight"> £' + price + '</span>');
          }
          else {
            $("#basketItems").html('<span class="highlight">' + totalquantity + '</span> items<span class="highlight"> £' + price + '</span>');
          }
          
          if (quantity == 0) {
            jQuery('#qty'+id).val("1");
          }
          
          $("#basket").append('<div class="popupContainer" id="addItemPopup"><div class="popup"></div></div>').children(".popupContainer#addItemPopup").hide();
          $(".popupContainer#addItemPopup .popup").load("/addtobasket.htm", function() {
            $(this).prepend('<p class="close"><a href="#" rel="close">Close <img src="/images/close_popup.gif" width="11" height="11" /></a></p>');
            $(this).corner({
              tl: { radius: 14 },
              tr: { radius: 14 },
              bl: { radius: 14 },
              br: { radius: 14 },
              antiAlias: true,
              autoPad: true,
              validTags: ["div"]}
            );
            $("html,body").animate({scrollTop: 0}, 500);
            $(".popupContainer#addItemPopup .popup a:has[@rel='close']").click(function() {
              $(".popupContainer#addItemPopup").fadeOut(1000, function () {
				$(this).remove();
			  });
              return false;
            });
            $("html,body").click(function() {
              $(".popupContainer#addItemPopup").fadeOut(1000, function () {
				$(this).remove();
			  });
            });
            $(this).parent().fadeIn(500);
            $("#addItemPopup").oneTime("6s", function() {$(this).fadeOut(1000);});
          });
          return false;
        }
      }); //ajax
		  return false;
    }
  );
  return false;
}

function trim(str) {
	if (str != null) {
		str = str.replace(/^\s+/, '');
		for (var i = str.length - 1; i >= 0; i--) {
			if (/\S/.test(str.charAt(i))) {
				str = str.substring(0, i + 1);
				break;
			}
		}
	}
	return str;
}

function getLinePrice(id, basket) {
  var line_price = 0;
  var i;

  var reg = new RegExp("[:]+", "g");
  var array;

  for (i = 0; i<basket.length; i++) {
    array = basket[i].split(reg);
    if (array[0] == id) {
      line_price = array[1];
    }
  }

  return line_price;
}

// Update the basket
function updateBasket() {
  $("#udButton").click(
    function() {
      var param = '';
      var line_price;
      
      $("input[@name^='qty']").each(
        function (i) {
          param = param + $(this).attr("name") + "=" + $(this).attr("value") + "&";
        }
      );
      param = param + "udButton=1"

      jQuery.ajax({
        type: 'post',
        url: '/ajax.aspx?action=updatebasket', 
        data: param,
        success: function(msg){
          var reg = new RegExp("[~]+", "g");
          var array = msg.split(reg);
          var quantity = array[0];
          var price = array[1];
          var basket = trim(array[2]);


          var reg = new RegExp("[-]+", "g");
		if (basket != null) {
          if (basket.length > 0) {
            array = basket.split(reg);
          }
		}

          if (quantity == "0") {
            $("#basket").addClass("hide");
            $("#mainBasket").fadeOut(1000);
            $("div[@class='proceedCheckout']").fadeOut(1000);
            $("div[@class='content']").html('<p>Your basket is currently empty.<br/><a href="/271/BackCare%27s_shop.html"><img class="formErrorIcon" width="154" height="25" alt="Continue shopping" src="/images/continueshopping.gif"/></a> on the main shop page.</p>');
          }
          else {
            //$("#basket").html(text);

            if (quantity == "1") {
              $("#basketItems").html('<span class="highlight">1</span> item<span class="highlight"> £' + price + '</span>');
            }
            else {
              $("#basketItems").html('<span class="highlight">' + quantity + '</span> items<span class="highlight"> £' + price + '</span>');
            }

            $("tr[@class='']").each(
              function (i) {
                line_price = getLinePrice($(this).attr("id"), array);
                if (line_price != '0') {
                  $(this).find("td.priceCol").html('£' + line_price);
                }
                else {
                  alert($(this).attr("id"));
                  $("tr[@id='" + $(this).attr("id") + "']").remove();
                }
              }
            );

            $("tr.subtotal > td.priceCol").html('£' + price + '<span class="BR"/>');
            $("tr.subtotal").addClass("highlight").removeClass("subtotal");
			$("#udButton img").attr("src", "/images/update_qty_highlight.gif");
            $("tr.highlight").oneTime("1s", function() {
				$(this).addClass("subtotal").removeClass("highlight");
				$("#udButton img").attr("src", "/images/update_qty.gif");
			});
          }

          return false;
        }
      }); //ajax
      
		  return false;
    }
  );
  return false;
}


// Remove an item from the basket
function removeFromBasket() {
  $("a.remove").click(
    function() {
      var id = jQuery(this).attr("alt");
      //alert(id);

      jQuery.ajax({
        type: 'get',
        url: '/ajax.aspx',
        data: 'action=removefrombasket&remove=' + id,
        success: function(msg){

          var reg = new RegExp("[~]+", "g");
          var array = msg.split(reg);
          var quantity = array[0];
          var price = array[1];
          
          if (quantity == "0") {
            $("#basket").addClass("hide");
            $("#mainBasket").fadeOut(1000);
            $("div[@class='proceedCheckout']").fadeOut(1000);
            $("div[@class='content']").html('<p>Your basket is currently empty.<br/><a href="/271/BackCare%27s_shop.html"><img class="formErrorIcon" width="154" height="25" alt="Continue shopping" src="/images/continueshopping.gif"/></a> on the main shop page.</p>');
          }
          else {
            //$("#basket").html(text);
            if (quantity == "1") {
              $("#basketItems").html('<span class="highlight">1</span> item<span class="highlight"> £' + price + '</span>');
            }
            else {
              $("#basketItems").html('<span class="highlight">' + quantity + '</span> item<span class="highlight"> £' + price + '</span>');
            }
            
            $("tr[@id='" + id + "']").remove();
            $("tr.subtotal > td.priceCol").html('£' + price + '<span class="BR"/>');
            $("tr.subtotal").addClass("highlight").removeClass("subtotal");
            $("tr.highlight").oneTime("1s", function() {$(this).addClass("subtotal").removeClass("highlight");});
          }
        }
      });
      return false;
    }
  );
    return false;
}

//Show or hide local services stuff on corporate search page
function hideShowSearchLocation() {
    $("a#showhide_corp_search").click(
        function() {
            if ($(this).is(".closed")) {
                $("#ukForm").show('fast');
                $(this).removeClass("closed");
                $(this).text("Unrestricted products & services search");
                $("select#ufUniqueID3").val('');
                //remove product items from list
                $("select#ufUniqueID3 option[value*='Products-']").remove();
            }
            else {
                $("#ukForm").hide('fast');
                $(this).addClass("closed");
                $(this).text("Restrict search to local services");
                $("input#ufUniqueID2").val('');
                $("select#ufUniqueID1").val('500');
                //put product items back in list
                $("select#ufUniqueID3 option[value*='']").remove();
                $("select#ufUniqueID4 option[value*='']").clone().appendTo("select#ufUniqueID3");
                $("select#ufUniqueID3").val('');
            }
        }
    )
}

//Limit comments to 1000 characters
function limitCommentLength() {
    var maxlimit = 1000;
    $("textarea#Comment-General-Comment").keypress(
    function(event) {
        var length = this.value.length;
        if (length >= maxlimit) {
            //allow only backspace, delete and arrow keys
            if (event.keyCode != 8 && event.keyCode != 46 && event.keyCode != 37 && event.keyCode != 38 && event.keyCode != 39 && event.keyCode != 40) {
                event.preventDefault();
            }
        }
    })
    $("textarea#Comment-General-Comment").keyup(
    function() {
        var length = this.value.length;

        if (length >= maxlimit) {
            this.value = this.value.substring(0, maxlimit);
        }
        //display remaining character count
        $("div#Comment-General-Comment-fieldWrapper div.label").html('<label for="Comment-General-Comment">Comment: * <span class="comment-chars">(' + (maxlimit - length) + ' characters left)</span></label>');
    })

    $("textarea#Comment-General-Comment").mouseover(
    function() {
        var length = this.value.length;

        if (length >= maxlimit) {
            this.value = this.value.substring(0, maxlimit);
            //display remaining character count
            $("div#Comment-General-Comment-fieldWrapper div.label").html('<label for="Comment-General-Comment">Comment: * <span class="comment-chars">(0 characters left)</span></label>');
        }
        else {
            $("div#Comment-General-Comment-fieldWrapper div.label").html('<label for="Comment-General-Comment">Comment: * <span class="comment-chars">(' + (maxlimit - length) + ' characters left)</span></label>');
        }
    })
}





// Loads up the various functions we are going to use
  $(document).ready(function() {
      jsEnabled();
      addToBasket();
      updateBasket();
      removeFromBasket();
      formCorners();
      highlightBoxCorners();
      relLinkBorders();
      blockquoteCorners();
      guideFeatureCorners();
      contentImages();
      selectFormField();
      homepageFAQLinks();
      hideShowSearchLocation();
      limitCommentLength();
  });