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, obj) {
    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);
    this.obj = obj;
}

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(
            "/autostore/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 = "/autostore/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, or HI per specs
    if(fld != null) {
        if (fld.options[fld.selectedIndex].value == "AK" || 
            fld.options[fld.selectedIndex].value == "HI") { 
    
            alert("Please call Customer Service directly at " +
                 "1-xxx-xxx-xxxx for orders\n" +
                 "shipped or billed to " + fld.options[fld.selectedIndex].value);
            
           fld.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(
            "/autostore/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 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;
}

function validateProductErrorHandler() {
    var theDiv = document.getElementById(this.div);
    if (theDiv) {
        if (this.req.getResponseHeader("VALSPAR_MESSAGE")) {
            this.obj.value = "";
            this.obj.focus();
            theDiv.style.fontWeight = "bold";
            theDiv.style.color = "red";
            theDiv.innerHTML = this.req.getResponseHeader("VALSPAR_MESSAGE");
        }
        else {
            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 validateProductLoadDiv() {
    var theDiv = document.getElementById(this.div);

    if (theDiv) {
        var parts = theDiv.id.split("_");
        var num = parseInt(parts[1]);
        addRow(num + 1);
        theDiv.style.fontWeight = "bold";
        theDiv.style.color = "black";
        theDiv.innerHTML = this.req.responseText;
    }
}

function validateProduct(what, divId) {
    if (what.value == "") return;

    var div = document.getElementById(divId);
    if (div) {
        net.loadMessage = "<b>Validating product code, please wait...</b>";
        var productCall = new net.ContentLoader(
            "/autostore/store/verify_order.html?productCode=" + 
            what.value,
            validateProductLoadDiv,
            validateProductErrorHandler,
            "html",
            divId,
            "POST",
            what);
    }
    else {
        alert("Can't verify product - no display div available!");
    }
}

function onBlurHandle() {
    var parts = this.id.split("_");
    validateProduct(this, "div_" + parts[1]);
}

function addRow(num) {
    var tbl = document.getElementById("quick_shop_table");
    var noRows = tbl.rows.length - 2;
    var idx = num - 1;
    if (noRows == num) {
        var newRow = tbl.insertRow(noRows);
        var input = document.createElement("input");
        input.name = "productCode_" + idx;
        input.onblur = onBlurHandle;
        input.size=15;
        input.type="text";
        input.id = "productCode_" + num;
        var cell = newRow.insertCell(0);
        cell.appendChild(input);
        
        input = document.createElement("input");
        input.name = "quantity_" + idx;
        input.size=5;
        input.type="text";
        input.id = "quantity_" + num;
        cell = newRow.insertCell(1);
        cell.appendChild(input);
        
        input = document.createElement("div");
        input.id = "div_" + num;
        cell = newRow.insertCell(2);
        cell.appendChild(input);
    }
}

function validateQuantities(what) {
    var errors = false;
    for (var i = 0; i < what.elements.length; i++) {
        if (what.elements[i].type == "text" && what.elements[i].name.indexOf("productCode") >= 0 && what.elements[i].value != "") {
            var qty = parseInt(what.elements[i+1].value);
            
            errors = isNaN(qty);
            if (errors) {
                what.elements[i+1].style.borderColor = 'red';
                alert("Quantities must be numbers!");
                break;
            }
        }
    }
    return !errors;
}

function verifyAddToCart(formName) {
    var form = document.getElementById(formName);
    var greaterThanZero = false;
    for (var i = 0; i < form.elements.length; i++) {
        if (form.elements[i].type == "text" && form.elements[i].name.indexOf("product") >= 0 && form.elements[i].value != "") {
            var qty = parseInt(form.elements[i].value);
            
            if (isNaN(qty)) {
                form.elements[i].style.borderColor = 'red';
                alert("Quantities must be numbers!");
                return false;
            }

            if (qty > 0) {                
                greaterThanZero = true;
            }
        }
    }
    if (greaterThanZero == false) {
        alert("Please enter a quantity to add this item to the cart");
        return false;
    }
    return true;
}

function checkAccept(frm) {
    if(!frm.acceptTerms.checked) {
      alert("You must accept the terms at the bottom of the page to continue");
      frm.acceptTerms.focus();
      return false;
    }
    return true;
}