var xmlHttpRequestHandler = new Object();
xmlHttpRequestHandler.createXmlHttpRequest = function(){

  var XmlHttpRequestObject;
  if (typeof XMLHttpRequest != "undefined"){
   XmlHttpRequestObject = new XMLHttpRequest();
  }
  else if (window.ActiveXObject){
   // look up the highest possible MSXML version
   var tryPossibleVersions=["MSXML2.XMLHttp.5.0",
                            "MSXML2.XMLHttp.4.0",
                            "MSXML2.XMLHttp.3.0",
                            "MSXML2.XMLHttp",
                            "Microsoft.XMLHttp"];

  for (i=0; i< tryPossibleVersions.length; i++){
   try{
      XmlHttpRequestObject = new ActiveXObject(tryPossibleVersions[i]);
      break;
   }
   catch (xmlHttpRequestObjectError){
      //ignore
   }
  }
 }
 return XmlHttpRequestObject;
}

var net = new Object();
net.READY_STATE_UNINITIALIZED = 0;
net.READY_STATE_LOADING = 1;
net.READY_STATE_LOADED = 2;
net.READY_STATE_INTERACTIVE = 3;
net.READY_STATE_COMPLETE = 4;
net.ContentLoader = function(url, onload, onerror, contentType, div, method) {
    this.url = url;
    this.onload = onload;
    this.contentType = contentType;
    this.div = div;
    this.method = method;
    this.onerror = (onerror) ? onerror : this.defaultError;
    this.loadDoc(url, contentType, method);
}

net.ContentLoader.prototype = {
    loadDoc:function(url, contentType, method) {
        this.req = new xmlHttpRequestHandler.createXmlHttpRequest();

        if (this.req) {
            try {
                var loader = this;
                //this.div.innerHTML = "Please wait...";
                this.req.onreadystatechange = function() {
                    loader.onReadyState.call(loader);
                }
                if (url.indexOf("?") > 0) {
                    url += "&ts=" + new Date().getTime()
                }
                else {
                    url += "?ts=" + new Date().getTime()
                }

                if (method.toUpperCase() == "GET") {
                    this.req.open("GET", url, true);
                    this.req.send(null);
                }
                else {
                    var parameters = url.substr(url.indexOf("?") + 1);
                    this.req.open('POST', url, true);
                    this.req.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                    this.req.setRequestHeader("Content-length", parameters.length);
                    this.req.setRequestHeader("Connection", "close");
                    this.req.send(parameters);
                }
            }
            catch (err) {
                this.onerror.call(this);
            }
        }
    },
    onReadyState:function() {
        var req = this.req;
        var ready = req.readyState;
        var theDiv = document.getElementById(this.div);
        
        if (ready == net.READY_STATE_COMPLETE) {
            var httpStatus = req.status;
            if (httpStatus == 200 || httpStatus == 0) {
                this.onload.call(this);
            }
            else {
                this.onerror.call(this);
            }
        }
        else {
            //theDiv.innerHTML = "<br/><br/><b>Loading, please wait...</b>";
        }
    },
    defaultError:function() {
        alert("Error fetching data!"
            + "\n\nreadyState: " + this.req.readyState
            + "\nStatus: " + this.req.status
            + "\nHeaders: " + this.req.getAllResponseHeaders());
    }
}

function errorHandler() {
    var theDiv = document.getElementById(this.div);

    if (theDiv) {
        theDiv.style.color = "red";
        theDiv.innerHTML = "<b>Content not available!</b>" +
            "<br/><br/><b>Ready State: </b>" + this.req.readyState +
            "<br/><b>Status: </b>" + this.req.status +
            "<br/><b>Headers: </b><pre>" + this.req.getAllResponseHeaders() +
            "<br/>Page: <br/><br/>" + this.req.responseText + "</pre>";
    }
    else {
        alert("Content not available!"
            + "\n\nreadyState: " + this.req.readyState
            + "\nStatus: " + this.req.status
            + "\nHeaders: " + this.req.getAllResponseHeaders());
    }
}

function loadDiv() {
    var theDiv = document.getElementById(this.div);

    if (theDiv) {
        if (this.contentType == "html")
            theDiv.innerHTML = this.req.responseText;
        else if (this.contentType == "xml")
            theDiv.innerHTML = this.responseXML;
        else {
            theDiv.style.color = "red";
            theDiv.innerHTML = "<b>" + this.url + " could not e loaded. Content type " + this.contentType + " not supported!</b>";
        }
    }
}

function openWindow(url, width, height, parent) {
    window.open(url + "?parent=" + parent, "_blank", "height=" + height+ ", width=" + width);
}

function doReset(formObj, newAction) {
    if (formObj) {
        formObj.action = newAction;
        formObj.submit();
    }
}

function deleteAddress(id) {
    if (confirm("Deleting this address cannot be undone! Continue?")) {
        document.location.href = "deleteAddress.html?addressId=" + id;
    }
}

function deleteCategory(id, physical) {
    if (confirm("Deleteing this category will delete all children information including products!")) {
        document.location.href="deleteCategory.html?categoryId=" + id + "&physical=" + physical;
    }
}

function deleteProduct(id, physical) {
    var form = document.getElementById("deleteProduct");
    if (physical && physical == true) {
        if (confirm("Are you sure you want to delete from database. " +
            "\nThis action cannot be undone and will also delete all pictures associated with it!")) {
            form.productId.value = id;
            form.physical.value = true;
            form.submit();
        }
    }
    else if (confirm("Are you sure you want to delete this product and images assocaited with it?")) {
        form.productId.value = id;
        form.physical.value = false;
        form.submit();
    }
}

function doRelatedProducts() {
    var obj = document.getElementById("productForm");
    var id = "";

    if (obj && obj.productId) {
        if (obj.productId.length) {
            for (var i = 0; i < obj.productId.length; i++) {
                if (id != "" && obj.productId[i].checked) {
                    alert("Please choose only one product!");
                    return;
                }

                if (obj.productId[i].checked) {
                    id = obj.productId[i].value;
                }
            }
        }
        else {
            if (obj.productId.checked) {
                id = obj.productId.value;
            }
        }

        if (id != "") {
            var frm = document.getElementById("relatedProducts");
            frm.productId.value = id;
            frm.submit();
        }
        else {
            alert("You must select one product!");
        }
    }
    else {
        alert("No product available");
    }
}

function toggleDiv(divId) {
    var div = document.getElementById(divId);
    if (div) {
        if (div.style.display == "block") {
            div.style.display = "none";
        }
        else {
            div.style.display = "block";
        }
    }
}

function forgotPassword() {
    var form = document.getElementById("loginForm");

    if (form) {
        if (form.j_username.value == "") {
            alert("Please enter your username.");
        }
        else {
            document.location.href = "forgot_password.html?userName=" + form.j_username.value;
        }
    }
}

function addToCart(f, pid, qid) {
    var form = document.getElementById(f);
    var q = document.getElementById(qid);
    if (form) {
        if (q.value > 0) {
            form.quantity.value = q.value;
            form.productId.value = pid;
            form.submit();
        }
    }
    else {
        alert("No  cart form defined!");
    }
}

function nextPage(formId, divId) {
    var form = document.getElementById(formId);
    var div = document.getElementById(divId);

    if (form && div && false) {
        displayResults(
            divId,
            form.categoryId.value,
            form.categoryLevel.value,
            form.name.value,
            form.nextPage.value,
            form.recordsPerPage.value);
    }
    else if (form) {
        form.submit();
    }
    else {
        alert("Error trying to retrieve information!");
    }
}

function reDisplay(formId, divId) {
    var form = document.getElementById(formId);
    var div = document.getElementById(divId);

    if (form && div) {
        displayResults(
            divId,
            form.categoryId.value,
            form.categoryLevel.value,
            form.name.value,
            1,
            form.recordsPerPage.value);
    }
    else {
        alert("Error trying to retrieve information!");
    }
}

function previousPage(formId, divId) {
    var form = document.getElementById(formId);
    var div = document.getElementById(divId);

    if (form && div && false) {
        displayResults(
            divId,
            form.categoryId.value,
            form.categoryLevel.value,
            form.name.value,
            form.previousPage.value,
            form.recordsPerPage.value);
    }
    else if (form) {
        form.nextPage.value = form.previousPage.value;
        form.submit();
    }
    else {
        alert("Error trying to retrieve information!");
    }
}

function displayResults(divId, categoryId, categoryLevel, name, nextPage, recordsPerPage) {
    var div = document.getElementById(divId);

    if (div && false) {
        var productsLoader = new net.ContentLoader(
            "/hok/store/results_ajax.html?categoryId="
            + categoryId
            + "&categoryLevel="
            + categoryLevel
            + "&name="
            + name
            + "&nextPage="
            + nextPage
            + "&recordsPerPage="
            + recordsPerPage,
            loadDiv,
            errorHandler,
            "html",
            divId,
            "POST");
    }
    else {
        // Load initial results page to generate the div
        document.location.href = "/hok/store/results.html?categoryId=" + categoryId + "&categoryLevel=" + categoryLevel + "&name=" + name + "&nextPage=" + nextPage + "&recordsPerPage=" + recordsPerPage;
    }
}

//version = parseFloat(navigator.appVersion.split("MSIE")[1]);
//if (navigator.appName.toLowerCase().indexOf("microsoft") >= 0 && version < 7) {
//	alert("Your browser is not compatible with this store! Sorry...");
//	document.location.href = "http://www.microsoft.com/downloads/details.aspx?FamilyId=9AE91EBE-3385-447C-8A30-081805B2F90B&displaylang=en";
//}

function submitToPayPal(formName) {
    var form = document.getElementById(formName);
    
    if (form) {
        form.action = "./payflow.html";
        form.submit();
    }
}

function shippingHandler(checkbox, f) {
    var form = document.getElementById(f);
    
    if (form) {
        if (checkbox.checked) {
            form.shippingLastName.value = form.lastName.value;
            form.shippingFirstName.value = form.firstName.value;
            form.shippingAddressLine1.value = form.addressLine1.value;
            form.shippingAddressLine2.value = form.addressLine2.value;
            form.shippingState.value = form.state.value;
            form.shippingCity.value = form.city.value;
            form.shippingZipCode.value = form.zipCode.value;
            form.shippingCompanyName.value = form.companyName.value;
            form.shippingPhoneNumber.value = form.phone.value;
        }
        else {
            form.shippingLastName.value = "";
            form.shippingFirstName.value = "";
            form.shippingAddressLine1.value = "";
            form.shippingAddressLine2.value = "";
            form.shippingState.value = "";
            form.shippingCity.value = "";
            form.shippingZipCode.value = "";
            form.shippingCompanyName.value = "";
            form.shippingPhoneNumber.value = "";
        }
    }
    else {
        alert("No billing form defined!");
    }
}

function checkShipping(form) {
    if (form.shippingMethod[1] != null && form.shippingMethod[1].checked) {
        return confirm("Do you want to continue with Expedited Shipping?");
    }
    else {
        return true;
    }
}

function checkState(fld) { // do not allow ship or bill to AK, CA, or HI per specs
    if(fld != null) {
        if (fld.options[fld.selectedIndex].value == "AK" || 
            fld.options[fld.selectedIndex].value == "CA" || 
            fld.options[fld.selectedIndex].value == "HI") { 
    
            alert("Please call HOK directly at " +
                 "1-888-825-0954 for orders\n" +
                 "shipped or billed to " + fld.options[fld.selectedIndex].value);
            
           fld.selectedIndex = 0;
        }
    }
}

/**
function checkState(form) { // do not allow ship or bill to AK, CA, or HI per specs
    if(form.shippingState != null) {
        if (form.shippingState.options[form.shippingState.selectedIndex].value == "AK" || 
            form.shippingState.options[form.shippingState.selectedIndex].value == "CA" || 
            form.shippingState.options[form.shippingState.selectedIndex].value == "HI") { 
    
            alert("Please call HOK directly at " +
                 "1-888-825-0954 for orders\n" +
                 "shipped to " + form.state.options[form.shippingState.selectedIndex].value);
            
           form.shippingState.selectedIndex = 0;
        }
    }
    if(form.state != null) {
      alert("here");
      alert(form.state.value);
        if (form.state.options[form.state.selectedIndex].value == "AK" || 
            form.state.options[form.state.selectedIndex].value == "CA" || 
            form.state.options[form.state.selectedIndex].value == "HI") {
    
            alert("Please call HOK directly at " +
                 "1-888-825-0954 for orders\n" +
                 "billed to " + form.state.options[form.state.selectedIndex].value);
            
           form.state.selectedIndex = 0;
        }
    }
}
**/

function cookiesEnabled() {
    var enabled = false;
    document.cookie = "ValspaxCookieTest=Enabled";
    
    var allcookies = document.cookie;
    var pos = allcookies.indexOf("ValspaxCookieTest=");
    if (pos != -1) {
            var start = pos + 18;
            var end = allcookies.indexOf(";", start);
            if (end == -1) end = allcookies.length;
            var value = allcookies.substring(start,end);
            value = unescape(value);
            enabled = value == "Enabled";
    }
    return enabled;
}

function displayCookieMessage(divId) {
    var div = document.getElementById(divId);
    
    if (div) {
        div.style.display = 'block';
        var productsLoader = new net.ContentLoader(
            "/hok/includes/no_cookies.jsp",
            loadDiv,
            errorHandler,
            "html",
            divId,
            "POST");
    }
    else {
        alert("You must have cookies enabled in order to interact with this web-site!");
    }
}

function TDSError() {
    var theDiv = document.getElementById(this.div);
}

function hasTDS(selectObj, divId) {
    
    var div = document.getElementById(divId);
    var productId = selectObj.options[selectObj.selectedIndex].value;
    if (div && productId && productId != "-1") {
        var content = new net.ContentLoader(
            "/hok/store/associatedDocuments.html?docId="
            + productId,
            loadDiv,
            TDSError,
            "html",
            divId,
            "POST");
    }
}

function checkProductSelected(form) {
    if(form.selectProduct.selectedIndex == 0) {
      alert("Please select a product from the list");
    }
    return false;
}

function checkQty(f) {
    var i=0,e1, e2;
    var selected = false;
    var multiple = false;
    
    for(i = 0; i < f.elements.length; i++) {
      if(f.elements[i].type == 'select-one') {
        e1 = f.elements[i];    // select box
        e2 = f.elements[i+1];  // text box (quantity) 

        if(f.elements.length > 3) multiple = true;
        

        if((e1.options.length > 2 && e1.selectedIndex > 0) || 
           (e1.options.length > 2 && (isNumber(e2.value) && e2.value > 0)) || 
           (e1.selectedIndex > 1 || (isNumber(e2.value) && e2.value > 0))) {
          selected=true;
        }
        if(!multiple) {
            if((e1.selectedIndex == 0 && isNumber(e2.value) && e2.value > 0)  || 
            (e1.selectedIndex > 0 && (!isNumber(e2.value) | e2.value < 1))) {
              alert('Please select a product and enter a quantity to continue');
              if(!isNumber(e2.value) || e2.value == 0) e2.value = '';
              e2.focus();
              return false;
            }
        }

        if(multiple) {
            if(e1.options.length > 2) {
                if((e1.selectedIndex == 0 && (isNumber(e2.value) && e2.value > 0))  || 
                (e1.selectedIndex > 0 && (!isNumber(e2.value) || e2.value < 1))) {
                  alert('Please select a product and enter a quantity to continue');
                  if(e2.value == 0) e2.value = '';
                  e2.focus();
                  return false;
                }
            }
        }

      }
    }
   if(!selected) {
     alert('Please select a product and enter a quantity to add something to your cart');
     return false;
   }
   return true;
}

function isNumber(inputVal) {
  var val = inputVal.toString();
  for(var i=0; i<val.length; i++) {
   var oneChar = val.charAt(i);
   if(oneChar < '0' || oneChar > '9') return false;
  }
  return true;
}

function checkQuantity(val) {
  if(!isNumber(val.value)) {
    alert("Quantity must be numeric and greater than zero");
    return false;
  } else {
    return true;
  }
}

function validateQuantity(form) {
  var i=0, el, f=form;
  while(el = f.elements[i++]) {
    if(el.type == 'text') {
      if(!isNumber(el.value)) {
        alert("Quantity must be numeric and greater than zero");
        el.focus();
        return false;
      }
    }
  }
  return true;
}