var Url = {
   // public method for url encoding
   encode : function (string) {
      return escape(this._utf8_encode(string));
   },
 
   // public method for url decoding
   decode : function (string) {
      return this._utf8_decode(unescape(string));
   },
 
   // private method for UTF-8 encoding
   _utf8_encode : function (string) {
      string = string.replace(/\r\n/g,"\n");
      var utftext = "";
      for (var n = 0; n < string.length; n++) {
         var c = string.charCodeAt(n);
         if (c < 128) {
            utftext += String.fromCharCode(c);
         }
         else if((c > 127) && (c < 2048)) {
            utftext += String.fromCharCode((c >> 6) | 192);
            utftext += String.fromCharCode((c & 63) | 128);
         }
         else {
            utftext += String.fromCharCode((c >> 12) | 224);
            utftext += String.fromCharCode(((c >> 6) & 63) | 128);
            utftext += String.fromCharCode((c & 63) | 128);
         }
 
      }
      return utftext;
   },
 
   // private method for UTF-8 decoding
   _utf8_decode : function (utftext) {
      var string = "";
      var i = 0;
      var c = c1 = c2 = 0;
      while ( i < utftext.length ) {
         c = utftext.charCodeAt(i);
         if (c < 128) {
            string += String.fromCharCode(c);
            i++;
         }
         else if((c > 191) && (c < 224)) {
            c2 = utftext.charCodeAt(i+1);
            string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
            i += 2;
         }
         else {
            c2 = utftext.charCodeAt(i+1);
            c3 = utftext.charCodeAt(i+2);
            string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
         }
      }
      return string;
   }
}

function doFilter() {
   if (document.getElementById("filter").sortby[0].checked) strSortby = document.getElementById("filter").sortby[0].value;
   if (document.getElementById("filter").sortby[1].checked) strSortby = document.getElementById("filter").sortby[1].value;
   if (document.getElementById("filter").sortby[2].checked) strSortby = document.getElementById("filter").sortby[2].value;
   if (document.getElementById("filter").sortby[3].checked) strSortby = document.getElementById("filter").sortby[3].value;

   if (document.getElementById("brand"))
      strBrand = (document.getElementById("brand").value != "" ? "/" + document.getElementById("brand").value : '');
   else
      strBrand = '';

   if (document.getElementById("branded"))
      strBranded = (document.getElementById("branded").value != "" ? "/" + document.getElementById("branded").value : '');
   else
      strBranded = '';

   strCategory = (document.getElementById("category").value != "" ? "/" + document.getElementById("category").value : document.getElementById("currentcategory").value);

   if (document.getElementById("branded") && document.getElementById("category").value == '') strCategory = '';

   document.location = strBranded + strCategory + strBrand + "?sortby=" + strSortby;
}

function openWindow(url, name, parms) {
   var win = window.open("/showimage.php?" + url, name, "width=200, height=200, top=10, left=10, resizable=1");
   if (parseInt(navigator.appVersion) >= 4) { win.window.focus(); }
}

function showBigImage() {
   strImage = document.getElementById("imga").src;
   strImage = strImage.substr( strImage.indexOf("?") + 7 );
   strImage = strImage.substr( 0, strImage.indexOf("&") );
   openWindow( strImage, 'Image', '' );
}

function swapImage(strSuffix, intWidthS, intHeightS, intWidthH, intHeightH) {
   strImage = document.getElementById("imga").src;
   strImage = strImage.substr( strImage.indexOf("?") + 7 );
   strImage = strImage.substr( 0, strImage.indexOf("&") );
   strSmall = "/thumbnail.php?image=" + strImage + "&width=" + intWidthS + "&height=" + intHeightS;

   strImage = document.getElementById("img" + strSuffix).src;
   strImage = strImage.substr( strImage.indexOf("?") + 7 );
   strImage = strImage.substr( 0, strImage.indexOf("&") );
   strBig = "/thumbnail.php?image=" + strImage + "&width=" + intWidthH + "&height=" + intHeightH;

   document.getElementById("imga").src = strBig;
   document.getElementById("img" + strSuffix).src = strSmall;
}

var iAutoplayKey = 0;
var iFlash = "";

function Fade(id, opacStart, opacEnd, millisec) {
   var speed = Math.round(millisec / 100);
   var timer = 0;

   if(opacStart > opacEnd) {
      for(i = opacStart; i >= opacEnd; i--) {
         setTimeout("SetFade(" + i + ",'" + id + "')", (timer * speed));
         timer++;
      }
   } else if(opacStart < opacEnd) {
      for(i = opacStart; i <= opacEnd; i++) {
         setTimeout("SetFade(" + i + ",'" + id + "')", (timer * speed));
         timer++;
      }
   }
}

function SetFade(opacity, id) {
   var object = document.getElementById(id).style;
   object.opacity = (opacity / 100);
   object.MozOpacity = (opacity / 100);
   object.KhtmlOpacity = (opacity / 100);
   object.filter = "alpha(opacity=" + opacity + ")";
}

function FadeImage(divid, imageid, imagefile, millisec) {
   var speed = Math.round(millisec / 100);
   var timer = 0;

   document.getElementById(divid).style.backgroundImage = "url(" + document.getElementById(imageid).src + ")";
   SetFade(0, imageid);
   document.getElementById(imageid).src = imagefile;
   document.getElementById(imageid).onload = function() {
      for(i = 0; i <= 100; i++) {
         setTimeout("SetFade(" + i + ",'" + imageid + "')",(timer * speed));
         timer++;
      }
   }

   iAutoplayKey = Math.random();
   SlideAutoplay();
}

function ZoomImage() {
   strImage = document.getElementById("SlideShow_Img").src;
   if (strImage.indexOf("?") > 0) {
      strImage = strImage.substr( strImage.indexOf("?") + 7 );
      strImage = strImage.substr( 0, strImage.indexOf("&") );
   }
   // SetFade(0, 'SlideShow_Background');
   SetFade(0, 'SlideShow_Enlarge');

   document.getElementById("SlideShow_Background").style.display = 'block';
   document.getElementById("SlideShow_Enlarge").style.display = 'block';
   document.getElementById("SlideShow_Enlarge").src = strImage

   document.getElementById("SlideShow_Enlarge").onLoad = function() {
      if (document.getElementById("SlideShow_Enlarge").offsetHeight > 600) document.getElementById("SlideShow_Enlarge").style.height = "600px";
      Fade('SlideShow_Background', 0, 40, 500);
   }
}

function ZoomShow() {
   if (document.getElementById(iFlash)) document.getElementById(iFlash).style.width = '0px';

   if (document.getElementById("SlideShow_Enlarge").offsetWidth > document.documentElement.clientWidth - 100) document.getElementById("SlideShow_Enlarge").style.width = (document.documentElement.clientWidth - 100) + "px";
   if (document.getElementById("SlideShow_Enlarge").offsetHeight > document.documentElement.clientHeight - 100) document.getElementById("SlideShow_Enlarge").style.height = (document.documentElement.clientHeight - 100) + "px";

   document.getElementById("SlideShow_Enlarge").style.left = (document.documentElement.clientWidth / 2) - (document.getElementById("SlideShow_Enlarge").offsetWidth / 2) + 'px';
   document.getElementById("SlideShow_Enlarge").style.top = (document.documentElement.clientHeight / 2) - (document.getElementById("SlideShow_Enlarge").offsetHeight / 2) + 'px';
   Fade('SlideShow_Enlarge', 0, 100, 500);
   iAutoplayKey = 0;
}

function ZoomHide() {
   if (document.getElementById(iFlash)) document.getElementById(iFlash).style.width = '100%';
   document.getElementById("SlideShow_Background").style.display = 'none';
   document.getElementById("SlideShow_Enlarge").style.display = 'none';
   SlideAutoplay();
}

function ZoomLoaded(iIndex, iKey) {
   if (iKey && iKey != iAutoplayKey) return;

   sIndex += iIndex;
   if (sIndex < 0) for (x = 0; x < sImages.length; x++) if (sImages[x] && sImages[x] != "") sIndex = x;
   if (!sImages[sIndex] || sImages[sIndex] == "") sIndex = 0;
   FadeImage('SlideShow', 'SlideShow_Img', sImages[sIndex], 200);
}

function SlideAutoplay() {
   iAutoplayKey = Math.random();
   if (bAutoplay > 0) setTimeout("ZoomLoaded(1, " + iAutoplayKey + ")", bAutoplay);
}

function SlideInit() {
   SetFade(0, 'SlideShow_Magnify');
   SetFade(25, 'SlideShow_Left');
   SetFade(25, 'SlideShow_Right');

   document.getElementById("SlideShow_Img").src = sImages[sIndex];
   document.getElementById("SlideShow_Magnify").style.width = iImageWidth + "px";
   document.getElementById("SlideShow_Magnify").style.height = iImageHeight + "px";

   if (sImages[1] == "" && sImages[2] == "" && sImages[3] == "") {
      document.getElementById("SlideShow_Left").style.display = "none";
      document.getElementById("SlideShow_Right").style.display = "none";
      document.getElementById("SlideShow_Thumbs").style.display = "none";
   }

   document.getElementById('SlideShow_Thumbs').innerHTML = "";
   x = 0;
   while (sImages[x]) {
      if (sImages[x] != "") document.getElementById('SlideShow_Thumbs').innerHTML += "<img src=\"" + sImages[x].replace("width=" + iImageWidth, "width=" + iImageSmallWidth).replace("height=" + iImageHeight, "height=" + iImageSmallHeight) + "\" width=\"" + iImageSmallWidth + "\" height=\"" + iImageSmallHeight + "\" border=0 onclick=\"sIndex = " + x + ";FadeImage('SlideShow', 'SlideShow_Img', '" + sImages[x] + "', 200)\">";
      x++;
   }

   SlideAutoplay();
}


function SubmitRegistration() {
   document.getElementById('RegistrationSubmit').value = "Checking";
   document.getElementById('RegistrationSubmit').disabled = true;

   objFields = document.getElementById("registration").getElementsByTagName("*");
   for (intX in objFields) if (objFields[intX].value) objFields[intX].value = Trim(objFields[intX].value);

   if (!ValidateRegistration()) {
      document.getElementById('RegistrationSubmit').value = "Submit";
      document.getElementById('RegistrationSubmit').disabled = false;
   } else {
      document.getElementById('RegistrationSubmit').value = "Submitting";

      var strPOST = "";
      var e = document.getElementById("registration").elements;
      
      for (var i = 0; i < e.length; i++) if (e[i].name) strPOST += e[i].name + "=" + Url.encode(e[i].value) + "&";
      strPOST += "cusnewsletter=" + (document.getElementById("cusnewsletter").checked ? "1" : "0") + "&";
      strPOST += "custerms=" + (document.getElementById("custerms").checked ? "1" : "0") + "&";

      HTTPRequest(document.domain, "/updateaccount", strPOST);
   }
}

function ValidateRegistration() {
   var filterStandard = /^([ 0-9a-zA-Z\@\_\.\-áéíóúÁÉÍÓÚ])+$/;
   var filterEmail = /^([a-zA-ZáéíóúÁÉÍÓÚ0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
   var filterPhone = /^([ 0-9()+\-\.])+$/;
   var filterPostcode = /^([ 0-9a-zA-Z])+$/;
   var filterOther = /^([ a-zA-ZáéíóúÁÉÍÓÚ()\',+-\.])+$/;

   // Reformat postcode if it is a UK one
   document.getElementById("cuspostalcode").value = document.getElementById("cuspostalcode").value.replace(/ /g, "");
   document.getElementById("cusdpostalcode").value = document.getElementById("cusdpostalcode").value.replace(/ /g, "");
   if (document.getElementById("cuspostalcode").value.length == 7) document.getElementById("cuspostalcode").value = document.getElementById("cuspostalcode").value.substr(0, 4) + ' ' + document.getElementById("cuspostalcode").value.substr(4, 3);
   if (document.getElementById("cuspostalcode").value.length == 6) document.getElementById("cuspostalcode").value = document.getElementById("cuspostalcode").value.substr(0, 3) + ' ' + document.getElementById("cuspostalcode").value.substr(3, 3);
   if (document.getElementById("cuspostalcode").value.length == 5) document.getElementById("cuspostalcode").value = document.getElementById("cuspostalcode").value.substr(0, 2) + ' ' + document.getElementById("cuspostalcode").value.substr(2, 3);
   if (document.getElementById("cusdpostalcode").value.length == 7) document.getElementById("cusdpostalcode").value = document.getElementById("cusdpostalcode").value.substr(0, 4) + ' ' + document.getElementById("cusdpostalcode").value.substr(4, 3);
   if (document.getElementById("cusdpostalcode").value.length == 6) document.getElementById("cusdpostalcode").value = document.getElementById("cusdpostalcode").value.substr(0, 3) + ' ' + document.getElementById("cusdpostalcode").value.substr(3, 3);
   if (document.getElementById("cusdpostalcode").value.length == 5) document.getElementById("cusdpostalcode").value = document.getElementById("cusdpostalcode").value.substr(0, 2) + ' ' + document.getElementById("cusdpostalcode").value.substr(2, 3);


   // Check account information
   if (document.getElementById("cusmandatory")) {
      if (!filterStandard.test(document.getElementById("cusreference").value)) { alert("Please enter a username, only numbers and letters are allowed."); document.getElementById("cusreference").select(); return false; }
      if (!filterStandard.test(document.getElementById("cuspassword").value) || document.getElementById("cuspassword").value.length < 6) { alert("Please enter a password, minimum length is 6, only numbers and letters are allowed."); document.getElementById("cuspassword").select(); return false; }
   }
   if (!filterEmail.test(document.getElementById("cusemailaddress").value)) { alert("Please enter a valid email address."); document.getElementById("cusemailaddress").select(); return false; }


   // Check invoice address
   strIAddress = document.getElementById("cusname").value + document.getElementById("cusaddressline1").value + document.getElementById("cusaddressline2").value + document.getElementById("cusaddressline3").value + document.getElementById("custown").value + document.getElementById("cuscounty").value + document.getElementById("cuspostalcode").value + document.getElementById("cuscountry").value + document.getElementById("custelephoneno").value;
   if (!filterOther.test(document.getElementById("cusname").value)) { alert("Please enter an invoice contact name, only letters are allowed."); document.getElementById("cusname").select(); return false; }
   if (!filterStandard.test(document.getElementById("cusaddressline1").value)) { alert("Please enter invoice address line 1, only numbers and letters are allowed."); document.getElementById("cusaddressline1").select(); return false; }
   if (document.getElementById("cusaddressline2").value != "" && !filterStandard.test(document.getElementById("cusaddressline2").value)) { alert("Please enter a valid invoice address line 2, only numbers and letters are allowed."); document.getElementById("cusaddressline2").select(); return false; }
   if (document.getElementById("cusaddressline3").value != "" && !filterStandard.test(document.getElementById("cusaddressline3").value)) { alert("Please enter a valid invoice address line 3, only numbers and letters are allowed."); document.getElementById("cusaddressline3").select(); return false; }
   if (!filterOther.test(document.getElementById("custown").value)) { alert("Please enter an invoice town, only letters are allowed."); document.getElementById("custown").select(); return false; }
   if (!filterOther.test(document.getElementById("cuscounty").value)) { alert("Please enter an invoice county, only letters are allowed."); document.getElementById("cuscounty").select(); return false; }
   if (!filterPostcode.test(document.getElementById("cuspostalcode").value)) { alert("Please enter an invoice postcode, only numbers and letters are allowed."); document.getElementById("cuspostalcode").select(); return false; }
   if (!filterPhone.test(document.getElementById("custelephoneno").value)) { alert("Please enter an invoice telephone number, only numbers are allowed."); document.getElementById("custelephoneno").select(); return false; }


   // Check delivery address
   strDAddress = document.getElementById("cusdname").value + document.getElementById("cusdaddressline1").value + document.getElementById("cusdaddressline2").value + document.getElementById("cusdaddressline3").value + document.getElementById("cusdtown").value + document.getElementById("cusdcounty").value + document.getElementById("cusdpostalcode").value + document.getElementById("cusdcountry").value + document.getElementById("cusdtelephoneno").value;
   if (strIAddress != strDAddress && strDAddress != document.getElementById("cuscountry").value) {
      if (!filterOther.test(document.getElementById("cusdname").value)) { alert("Please enter an delivery contact name, only letters are allowed."); document.getElementById("cusdname").select(); return false; }
      if (!filterStandard.test(document.getElementById("cusdaddressline1").value)) { alert("Please enter delivery address line 1, only numbers and letters are allowed."); document.getElementById("cusdaddressline1").select(); return false; }
      if (document.getElementById("cusdaddressline2").value != "" && !filterStandard.test(document.getElementById("cusdaddressline2").value)) { alert("Please enter a valid delivery address line 2, only numbers and letters are allowed."); document.getElementById("cusdaddressline2").select(); return false; }
      if (document.getElementById("cusdaddressline3").value != "" && !filterStandard.test(document.getElementById("cusdaddressline3").value)) { alert("Please enter a valid delivery address line 3, only numbers and letters are allowed."); document.getElementById("cusdaddressline3").select(); return false; }
      if (!filterOther.test(document.getElementById("cusdtown").value)) { alert("Please enter an delivery town, only letters are allowed."); document.getElementById("cusdtown").select(); return false; }
      if (!filterOther.test(document.getElementById("cusdcounty").value)) { alert("Please enter an delivery county, only letters are allowed."); document.getElementById("cusdcounty").select(); return false; }
      if (!filterPostcode.test(document.getElementById("cusdpostalcode").value)) { alert("Please enter an delivery postcode, only numbers and letters are allowed."); document.getElementById("cusdpostalcode").select(); return false; }
      if (!filterPhone.test(document.getElementById("cusdtelephoneno").value)) { alert("Please enter an delivery telephone number, only numbers are allowed."); document.getElementById("cusdtelephoneno").select(); return false; }
   }

   // Check terms and conditions
   if (!document.getElementById("custerms").checked) { alert("Before proceeding you must agree to our terms and conditions."); document.getElementById("custerms").focus(); return false; }
   
   return true;
}

function Trim(str, chars) {
   return LTrim(RTrim(str, chars), chars);
}

function LTrim(str, chars) {
   chars = chars || "\\s";
   return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function RTrim(str, chars) {
   chars = chars || "\\s";
   return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function HTTPRequest(strHost, strURI, strPost) {
   var http = false;

   try {
      http = new ActiveXObject('Msxml2.XMLHTTP');
   } catch (e) {
      try {
         http = new ActiveXObject('Microsoft.XMLHTTP');
      } catch (e2) {
         try {
            http = new XMLHttpRequest();
         } catch (e3) {
            http = false;
         }
      }
   }

  if (http) {
      http.onreadystatechange = function() {
         if (http.readyState == 4) {
            if (http.status == 200) {
               try {
                  eval(http.responseText);
               } catch (e3) {
                  alert(http.responseText);
                  alert("Response from server has caused an error.");
               }
            } else if (http.status > 0) {
               alert("An error has occured while communicating with the server.");
            }
         }
      };

      strMethod = (strPost != "" ? "POST" : "GET");
      http.open(strMethod, strURI,  true);
      if (strPost) {
         http.setRequestHeader("Host", strHost);
         http.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
         http.setRequestHeader("Cookie", "PHPSESSID=b4uqbg19g1g2tcs43l50onk816; path=/");
         http.setRequestHeader("Content-length", strPost.length);
      }
      http.setRequestHeader("Connection", "close");
      http.send(strPost);
   }
}

