﻿function addListener(element, type, expression, bubbling){
  bubbling = bubbling || false;
  if(window.addEventListener) { // Standard
    element.addEventListener(type, expression, bubbling);
    return true;
  } else if(window.attachEvent) { // IE  
    element[type+expression]=function(e){expression(e, element)};
    element.attachEvent('on' + type, element[type+expression]);
    return true;
  } else {
    return false;
  }
}

function removeListener(element, type, expression, bubbling){
  bubbling = bubbling || false;
  if(window.removeEventListener) { // Standard
    element.removeEventListener(type, expression, bubbling);
    return true;
  }else if(window.detachEvent) {
    element.detachEvent('on'+type, element[type+expression]);
    element[type+expression] = null;
    return true;
  }else{
    return false;
  }
}

function entity(str, mode) {
	str = (str) ? str : "";
	mode = (mode) ? mode : "string";

	var e = document.createElement("div");
	e.innerHTML = str;

	if (mode == "numeric") {
		return "&#" + e.innerHTML.charCodeAt(0) + ";";
	}
	else if (mode == "utf16") {
		var un = e.innerHTML.charCodeAt(0).toString(16);
		while (un.length < 4) un = "0" + un;
		return "\\u" + un;
	}
	else return e.innerHTML;
}

function clearNode($obj){
  if ($obj!=null && $obj.parentNode!=null){
    var $new = $obj.cloneNode(false);
    $obj.parentNode.replaceChild($new, $obj);
    return $new;
  }else{
    return $obj;
  }
}

function getLoadingDiv(){
  var $det = document.createElement("div");
  $det.id="cardDetails";
  $det.innerHTML = "<p>Loading please wait.</p>";
  
  var $loading;
  $loading = document.createElement("div");
  $loading.className="loading";
  
  var $loadingInner = document.createElement("div");
  $loading.appendChild($loadingInner);

  $det.insertBefore($loading, $det.childNodes[0]);
    
  
  return $det;
}

Array.prototype.contains=function($str){
  var $blFound = new Boolean();
  for (var i = 0;i<this.length;i++){
       if($str==this[i]){
      $blFound=true;
    }
  }
  return $blFound;
}

Object.prototype.getName=function(){
  var $str = new String(this.toSource())
  return $str.match(/^[^{]*{([^:]+):/)[1]
}

String.prototype.rTrim = function(){
    var $whitespace = new String(" \t\n\r");
    var $s = this;
    if ($whitespace.indexOf(this.charAt(this.length-1)) != -1) {
    var i = $s.length - 1;       // Get length of string
    while (i >= 0 && $whitespace.indexOf($s.charAt(i)) != -1) { i--; }
      $s = $s.substring(0, i+1);
    }
    return $s;
}

String.prototype.lTrim = function(){
  var $whitespace = new String(" \t\n\r");
  var $s = this;
  if($whitespace.indexOf(this.charAt(0)) !=-1){
  var $i = 0
  while($whitespace.indexOf($s.charAt($i)) != -1 && $i<$s.length){$i++}
  $s = $s.substring($i, $s.length)
  }
  return $s;
}

String.prototype.trim=function(){
  return this.rTrim().lTrim();
}

function addLoadEvent(func) {
  addListener(window, "load", func, false);
}

function hookup(){
    document.getElementById("pDate").appendChild(document.createTextNode(formatDate()));
    var $srchBox = null;
    var $obj=document.getElementById("headerSearch").getElementsByTagName('input');
      
    for (var i=0;i<$obj.length;i++){
      if ($obj[i].id.match('txtSearch')){
        $srchBox = $obj[i];
      }
    }

    if($srchBox!=null){
      addListener($srchBox, "focus", productSearch_Focus, false);
      addListener($srchBox, "keypress", searchKeyPress, false);
      $srchBox.onblur = function(){productSearch_Blur();};
    }
    loadAdvanced();
    wireAddButtons();
    wireFilters();
    wirePages();
    externalLinks();
    addPrint();
}

function addPrint(){
  var $div = document.getElementById("divPrint");
  if($div!=null){
    var $btn = document.createElement("input");
    $btn.type="submit";
    $btn.id="btnPrint";
    $btn.value="Print Page";
    $btn.className="noprint";
    $div.appendChild($btn);
    addListener($btn, 'click', printPage, false)
  }
}

function printPage(e, $src){
  if($src==null){
    $src = this;
  }

  window.print();

  if(e.preventDefault){
    e.preventDefault();
  }else{
    e.returnValue=false;
  }
}

function searchKeyPress(e, $src){
  if($src==null){
    $src = this;
  }

  var $char = null;
  if(e.which){
    $char = e.which;
  }else if(window.event){
    $char = e.keyCode;
  }
  
  if ($char == 13){
    $src.parentNode
    var $obj=document.getElementById("headerSearch").getElementsByTagName('input');
      
    for (var i=0;i<$obj.length;i++){
      if ($obj[i].id.match('btnSearch')){
        if(e.preventDefault){
          e.preventDefault();
        }else{
          e.returnValue=false;
        }
        $obj[i].click();
      }
    }
  }
}

function checkKeyword(){
  var $obj;
  var $blRet = new Boolean();
  $blRet=true;
  $obj=document.getElementById("headerSearch").getElementsByTagName('input');
  for (var i=0;i<$obj.length;i++){
    if ($obj[i].id.match('txtSearch')){
      if ($obj[i].value=='' || $obj[i].value=='Please enter search term'){
        alert('Please enter a search term');
        $blRet=false;
      }else{
        $blRet=true
      }
    }
  }
  return $blRet;
}

function wirePages(){
  
  var $obj;
  if(document.getElementById("gridHead")!=null){
    $obj = document.getElementById("gridHead").getElementsByTagName("a");
    for (var i=0;i<$obj.length;i++){
      $obj[i].onclick=function(){return pageChange(this);}
    }
  }
  if(document.getElementById("gridFoot")!=null){  
    $obj = document.getElementById("gridFoot").getElementsByTagName("a");
    for (var i=0;i<$obj.length;i++){
      $obj[i].onclick=function(){return pageChange(this);}
    }
  }
}

function pageChange($src){
  var $page=$src.href.match(/&page=([0-9]+)/)[1];
  var $old;
  if($page!=null){
    $old = document.forms['aspnetForm'].elements['page'].value;
    document.forms['aspnetForm'].elements['page'].value=$page;
    document.forms['aspnetForm'].submit();
    document.forms['aspnetForm'].elements['page'].value=$old;
    return false;
  }else{
    return true;
  }
}

function wireAddButtons(){
  var $obj = document.getElementsByTagName("input");
  for (var i=0;i<$obj.length;i++){
    if ($obj[i].id.match(/btnAdd$/)){
      addListener($obj[i], "click", btnAdd_Click, false);
    }else if($obj[i].id.match("txtQty")){
      addListener($obj[i], "keypress", txtQty_keypress, false);
      addListener($obj[i], "focus", txtQty_Focus, false);
    }   
  }
}

function wireFilters(){
  if(document.getElementById("groups")!=null){
    var $prods = document.getElementById("groups").getElementsByTagName("a");
    for (var i=0;i<$prods.length;i++){
      $prods[i].onclick=function(){return addFilter(this, "fgroups");}
    }
  }
  if(document.getElementById("manf")!=null){
    var $manf = document.getElementById("manf").getElementsByTagName("a");
    for (var i=0;i<$manf.length;i++){
      $manf[i].onclick=function(){return addFilter(this, "fmanf");}
    }
  }
  if(document.getElementById("filters") != null){
    var $filters = document.getElementById("filters").getElementsByTagName("a");
    for (var i=0;i<$filters.length;i++){
      $filters[i].onclick=function(){return removeFilter(this);}
    }
  }
}

function removeFilter($sender){
  var $type=null;var $old;var $old2;
  if($sender.text==undefined){
    if($sender.innerText.match("Product Group")!=null){
      $type="fgroups";
    }else if($sender.innerText.match("Manufacturer")!=null){
      $type="fmanf";
    }
  }else{ 
    if($sender.text.match("Product Group")!=null){
      $type="fgroups";
    }else if($sender.text.match("Manufacturer")!=null){
      $type="fmanf";
    }
  }
  if($type!=null){
    $old = document.forms['aspnetForm'].elements[$type].value;
    $old2=document.forms['aspnetForm'].elements['page'];
    document.forms['aspnetForm'].elements[$type].value="";
    document.forms['aspnetForm'].elements['page'].value="1"
    document.forms['aspnetForm'].submit();
    document.forms['aspnetForm'].elements[$type].value=$old;
    document.forms['aspnetForm'].elements['page'].value=$old2;
    return false;
  }else{
    return true;
  }
}

function addFilter($sender, $pId){
  var $hidden;var $old;var $new=null;var $old2;
  $hidden=document.forms['aspnetForm'].elements[$pId];
  $old=$hidden.value;
  $old2=document.forms['aspnetForm'].elements['page'];
  if($sender.text==undefined){
    $new = $sender.innerText;
  }else{
    $new = $sender.text;
  }
  if($new!=null){
    $hidden.value = $new;
    document.forms['aspnetForm'].elements['page'].value="1"
    document.forms['aspnetForm'].submit();
    $hidden.value=$old;
    document.forms['aspnetForm'].elements['page'].value=$old2;
    return false;
  }else{
    return true;
  }
}

function externalLinks(){
  var $links = document.getElementsByTagName('a');
  var $rel;
  for (var i = 0;i<$links.length;i++){
    if ($links[i].rel=='external'){
      $links[i].setAttribute('target', 'blank');
    }
  }
}

function productSearch(){
    $search = document.getElementById("ctl00_txtSearch");
    if ($search.value.rTrim() == "" || $search.value =="Please enter search term"){
    alert("Please enter a search term");
    return false;
    }else{
    return true;
    }
}

function productSearch_Focus(e, $src){
  if($src==null){
    $src = this;
  }

  if ($src.value =="Please enter search term"){
    $src.value = "";
  }else{
    $src.select();
  }
}

function productSearch_Blur(){
    $search = document.getElementById("ctl00_txtSearch");
    if ($search.value.rTrim() ==""){
        $search.value = "Please enter search term";
    }
}


function showHide($show, $hide){
    var $showClass = document.getElementById($show).className;
    var $hideClass = document.getElementById($hide).className;
    document.getElementById($show).className = $showClass.replace("hide", "").rTrim();
    document.getElementById($hide).className = $hideClass + " hide";
}

function formatDate(){
    var Today = new Date();
    var day, month, dayDate;
    switch (Today.getDay()) {
        case 0:day = "Sunday";break;
        case 1:day = "Monday";break;
        case 2:day = "Tuesday";break;
        case 3:day = "Wednesday";break;
        case 4:day = "Thursday";break;
        case 5:day = "Friday";break;
        case 6:day = "Saturday";break;
    }
    switch (Today.getMonth()) {
        case 0:month = "January";break;
        case 1:month = "February";break;
        case 2:month = "March";break;
        case 3:month = "April";break;
        case 4:month = "May";break;
        case 5:month = "June";break;
        case 6:month = "July";break;
        case 7:month = "August";break;
        case 8:month = "September";break;
        case 9:month = "October";break;
        case 10:month = "November";break;
        case 11:month = "December";break;
    }
    dayDate = Today.getDate();
    if (dayDate == 1 || dayDate == 21 || dayDate == 31 ){
        dayDate=dayDate+"st";
    } else if (dayDate == 2 || dayDate == 22 ){
        dayDate=dayDate+"nd";
    } else if (dayDate == 3 || dayDate == 23 ){
        dayDate=dayDate+"rd";
    } else {
        dayDate=dayDate+"th"
    }
    year=Today.getYear()
    if (year<2000){
        year+=1900
    }
    return (dayDate + " " + month + ", " + year);
}

function btnAdd_Click(e, $src){
  if(e.preventDefault){
    e.preventDefault();
  }else{
    e.returnValue=false;
  }  

  if($src==null){
    $src = this;
  }
  var $sku=null;
  var $qty=null;
  var $arr = $src.parentNode.getElementsByTagName("input");
  for(var i=0;i<$arr.length;i++){
    if ($arr[i].id.match("hdnSku")){
      $sku = $arr[i].value;
    }else if ($arr[i].id.match("txtQty")){
      $qty = $arr[i].value;
      if (!($qty.match(/^[-]?[0-9]+$/))){
        $qty = null;
      }else{
      $arr[i].value=0;
      $arr[i].select();
      }
    }
  }
  if(document.getElementById($sku+"added")!=null){
    $src.parentNode.removeChild(document.getElementById($sku+"added"));
  }

  if(!($sku==null||$qty==null||$qty==0)){
    addToBasket($sku, $qty, $src)
  }

  if(e.preventDefault){
    e.preventDefault();
  }else{
    e.returnValue=false;
  }  
}

function txtQty_keypress(e, $src){

  if($src==null){
    $src = this;
  }
  var $char = null;
  if(e.which){
    $char = e.which;
  }else if(window.event){
    $char = e.keyCode;
  }
    
  if($char==13){
    var $sub = document.getElementById($src.id.replace("txtQty", "btnAdd"));
    $sub.click();   
    if(e.preventDefault){
      e.preventDefault();
    }else{
      e.returnValue=false;
    }  
  }
}

function txtQty_Focus(e, $src){
  if($src==null){
    $src = this;
  }
  
  $src.select();
}


function removeElement($el){
  $el.parentNode.removeChild($el);
}

function insertAfter(node, referenceNode){
  if(referenceNode.nextSibling!=null){
    referenceNode.parentNode.insertBefore(node, referenceNode.nextSibling);
  }else{
    referenceNode.parentNode.appendChild(node);
  }
}

function logClick($loc, $ban){
  startClickLog("locId=" + $loc + "&banId=" + $ban);
}

/* ----------- Advanced Searching ----------------------- */
var $advJson;

function advOnload(){
  var $selects = document.getElementsByTagName("select");
  for (var i=0; i<$selects.length;i++){
    if ($selects[i].id.match(/productsLB$/)){
      $selects[i].onchange=function(){updateManfs(this)};
    }  
  }
}

function updateManfs($select){
  var $arrSelected = [];

  var $manSelect = null;  
  var $selects = document.getElementsByTagName("select");
  for (var i=0; i<$selects.length;i++){
    if ($selects[i].id.match(/manfLB$/)){
      $manSelect = $selects[i];
    }  
  }

  if($manSelect!=null){  
    for (var i=0; i<$select.length; i++){
      if ($select.options[i].selected){
        $arrSelected[$arrSelected.length]= 'p' + $select.options[i].value;
      }
    }
  
    if (($arrSelected.length==0) || ($arrSelected[0] == "pAll")){
      $arrSelected = ["pAll"];
    }
  
    var $manu = [];
    var $options = [];
    for (var i=0; i<$arrSelected.length; i++){
      var $pg = $advJson.ProductGroups[$arrSelected[i]];
      if ($pg!=undefined && $pg.length>0){
        for(var j=0;j<$pg.length; j++){
          var $exists = $manu.contains($pg[j].Name);
          if($exists==false){
            var $name = $pg[j].Name;
            $manu[$manu.length]= $name;
            $options[$options.length]= $pg[j];
          }  
        } 
      }      
    }

    clearSelect($manSelect);

    if($options.length==0){
      $manSelect.options[$manSelect.options.length] = new Option(":: None Available ::", "0", false, false);
    }else{ 
      $options.sort(sortByName);

      $manSelect.options[$manSelect.options.length] = new Option("All", "-1", false, false);
      for (var i=0;i<$options.length;i++){
        $manSelect.options[$manSelect.options.length] = new Option($options[i].Name, $options[i].ID, false, false);
      }  
    }
  }
}

function sortByName(a,b){
  var x = a.Name.toLowerCase();
  var y = b.Name.toLowerCase();
  return ((x < y) ? -1 : ((x > y) ? 1 : 0));
}

function clearSelect($select){
  for(var i=$select.options.length-1;i>=0;i--){
    $select.removeChild($select.options[i]);
  }

}

/* ----------- Form Validation -------------------------- */


function validate($obj){
  var $inputs = document.getElementById($obj).getElementsByTagName("input");
  var $bl = true;
  for (var i=0;i<$inputs.length;i++){
  var $par = $inputs[i].parentNode;
  if($par.childNodes[$par.childNodes.length - 1].className=="red"){
  removeElement($par.childNodes[$par.childNodes.length - 1]);
  }
  var $classes = $inputs[i].className.split(" ");
    var $blinput = true;
    for(var j=0;j<$classes.length;j++){
      switch($classes[j]){
        case "req": 
          if(!valRequired($inputs[i])){
            var $span = document.createElement("span");
            $span.innerHTML = "Required.";
            $span.className="red";
            $inputs[i].parentNode.appendChild($span);
            $blinput = $bl = false;
            
           } 
           break;
        case "email":
           if(!valEmail($inputs[i])){
            var $span = document.createElement("span");
              $span.innerHTML = "<br />Must be an email address.";
              $span.className="red";
              $inputs[i].parentNode.appendChild($span);
              $blinput = $bl = false;
            }
            break;           
        default: 
          break;
      }  
      if (!$blinput){
        break;
      }
    }
  }
  return $bl;
}

function valRequired($obj){
  if($obj.value.trim().length==0){
    return false;
  }else{
    return true;  
  }
}

function valEmail($obj){
 var $value = $obj.value;
 var $pattern = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
 if(!$pattern.test($value)){
   return false;
 }else{
   return true;
 }
}

/* ----------- AJAX Scripts -------------------------- */

function loadAdvanced(){
  var $req=null;
  if (window.XMLHttpRequest){
    $req = new XMLHttpRequest();
  }
  else if(window.ActiveXObject){
    $req = new ActiveXObject("Microsoft.XMLHTTP");
  }
  if ($req!=null){
    $req.open("POST","advancedsearchloader.axd",true);
    $req.onreadystatechange=function(){Advanced_stateChange($req)};
    $req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    $req.setRequestHeader("Content-length", 0);
    $req.setRequestHeader("Connection", "close");
    $req.send('');    
  }
}

function Advanced_stateChange($req){
    // if xmlhttp shows "loaded"

    if ($req.readyState==4){
    // if "OK"
        if ($req.status==200){
            if($req.responseText.length > 0){   
              eval($req.responseText);
              advOnload();
            }          
        }
    }
}

function addToBasket($sku, $qty, $src){
    var $req2=null;
    if (window.XMLHttpRequest){
        $req2 = new XMLHttpRequest();
    }
    else if(window.ActiveXObject){
        $req2 = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if ($req2!=null){
        var $url;
        var $params = "sku=" + $sku + "&qty=" + $qty;
        /*$url = "/ajax/additem.aspx";*/
        $url = "addToBasket.axd";
        $req2.onreadystatechange= function(){addToBasket_stateChange($req2, $sku, $src)};
        $req2.open("POST",$url,true);
        $req2.setRequestHeader("Content-type", "application/x-www-form-urlencoded");     
        $req2.setRequestHeader("Content-length", $params.length);
        $req2.setRequestHeader("Connection", "close");
        $req2.send($params);
    }
}

function addToBasket_stateChange($req, $sku, $src){
    // if xmlhttp shows "loaded"
    if ($req.readyState==4){
    // if "OK"
        if ($req.status==200){
            eval($req.responseText);
            if($addToBasket != null){
              var $div = document.createElement("p");
              $div.className = "background";
              $div.id = $sku + "added"
              var $text = document.createTextNode($addToBasket.Result);
              $div.appendChild($text);
              $src.parentNode.appendChild($div);
              
              if ($addToBasket.Basket != null){
                /*--- Update the basket summary ---*/
                $text = document.createTextNode($addToBasket.Basket.Products);
                var $span = document.createElement("span");
                $span.id="spnProducts";
                $span.appendChild($text);
                var $spanOld = document.getElementById("spnProducts");
                $spanOld.parentNode.replaceChild($span, $spanOld);
                
                $text = document.createTextNode(entity($addToBasket.Basket.Amount, "string"));
                $span = document.createElement("span");
                $span.id="spnTotal";
                $span.className="b highlightb";
                $span.appendChild($text);
                
                $spanOld = document.getElementById("spnTotal");
                $spanOld.parentNode.replaceChild($span, $spanOld);
              }
            }
        }
    }
}

function startClickLog($params){

    var req2;
    req2=null;
    if (window.XMLHttpRequest){
        req2 = new XMLHttpRequest();
    }
    else if(window.ActiveXObject){
        req2 = new ActiveXObject("Microsoft.XMLHTTP");
    }
    
    if (req2!=null){
        var $url;
        $url = "logClick.axd";
        req2.open("POST",$url,true);
        req2.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        req2.setRequestHeader("Content-length", $params.length);
        req2.setRequestHeader("Connection", "close");
        req2.send($params);
    }
}

function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\\\\s)" + className + "(\\\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}

function largeImg(){

  var $img = document.getElementById("prodImg");
  if($img!=null){
    addListener($img, "click", showLarge, false);
    var $p = document.createElement("p");
    $p.appendChild(document.createTextNode('Click image to enlarge'));
    $p.style.textAlign = "center";
    insertAfter($p, $img);
  }
}

function showLarge(e, $src){

  if($src==null){
    $src = this;
  }

  var $div = document.createElement('div');
  var $large = document.createElement('img');
  $large.src = $src.src.replace('/products/', '/products/big/');
  $large.alt = $src.alt;
  $large.style.position="relative";
  $div.style.position="absolute";
  $div.style.backgroundColor="#FFFFFF";
  $div.style.textAlign="center";
  $div.style.top="10px";
  $div.style.right="0";
  $div.style.border="2px solid #333333";
  
  var $title = document.createElement('div');
  $title.appendChild(document.createTextNode('Click to close'));
  $title.style.color = "#FFFFFF";
  $title.style.backgroundColor = "#333333";
  $title.style.position="relative";
  $title.style.width = "400px";
  $title.style.textAlign="center";
  $div.appendChild($title);
  $div.appendChild($large);
  
  $src.parentNode.appendChild($div);
  addListener($div, "click", removeLarge, false);
}

function removeLarge(e, $src){

  if($src==null){
    $src = this;
  }
  
  removeListener($src, "click", removeLarge, false);
  removeElement($src);
}

addLoadEvent(hookup);

var intI = 0;
function btnSubDisable() {

    if (intI > 0) {
        document.getElementById('ctl00_content1_btnSub').disabled = true;
    }
    else {
        intI = 1;
    }
}
