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.loadMessage = "<br/><br/><b>Loading, please wait...</b>";
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 = net.loadMessage;
        }
    },
    defaultError:function() {
        alert("Error fetching data!"
            + "\n\nreadyState: " + this.req.readyState
            + "\nStatus: " + this.req.status
            + "\nHeaders: " + this.req.getAllResponseHeaders());
    },
    
    getElementContent: function(element, tagName) {
        var childElement = element.getElementsByTagName(tagName)[0];
        return (childElement.text != undefined) ? childElement.text : childElement.textContent;
    }
}

function errorHandler() {
    var theDiv = document.getElementById(this.div);

    if (theDiv) {
        if (this.req.getResponseHeader("VALSPAR_MESSAGE")) {
            theDiv.innerHTML = this.req.getResponseHeader("VALSPAR_MESSAGE");
        }
        else {
            theDiv.style.color = "red";
            theDiv.innerHTML = "<b>Content not available!</b>" +
                "<br/><pre>" + 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);
    theDiv.style.color = "";

    if (theDiv) {
        if (this.contentType == "html")
            theDiv.innerHTML = this.req.responseText;
        else if (this.contentType == "xml")
            theDiv.innerXML = this.responseXML;
        else {
            theDiv.style.color = "red";
            theDiv.innerHTML = "<b>" + this.url + " could not e loaded. Content type " + this.contentType + " not supported!</b>";
        }
    }
}

function synchSelects(aForm) {
	if (aForm.country.options[aForm.country.selectedIndex].value != 'United States') {
		aForm.state.selectedIndex = 0;
		aForm.state.disabled = true;
	
	} else {
		if(aForm.country.options[aForm.country.selectedIndex].value == 'United States') {
				aForm.state.disabled = false;			
		}
	}
}

function submitSearch() {
  document.locForm.action = "distributors/displayDistributors.jsp";
  document.locForm.action = "<%=request.getContextPath()%>/distributors/distDiplay.jsp";
	document.locForm.submit();
}

function getMSDS(pNumber, lan) {
    var form = document.getElementById("get_msds_form");
    if (lan == undefined || lan.length <= 0) 
        lan = "EN";
    var fmt = "USA";
    if (lan == "CE" || lan == "CF") fmt = "CAN";
    form.language.value = lan;
    form.item.value = pNumber;
    form.format.value = fmt;
    form.submit();
}

function getTDS(id, lan) {
    var form = document.getElementById("get_tds_form");
    if (lan == undefined || lan.length <= 0) 
        lan = "EN";
    form.language.value = lan;
    form.id.value = id;
    form.submit();
}

function loadOptions() {
    var select = document.getElementById("product");
    var xml = this.req.responseXML;
    var theDiv = document.getElementById(this.div);    
    
    if (theDiv) theDiv.innerHTML = "";
    
    if (xml) {
        select.length = 0;
        var entries = xml.getElementsByTagName('entry');
        
        for (var i = 0; i < entries.length; i++) {
            var text = this.getElementContent(entries[i], 'optionText');
            var value = this.getElementContent(entries[i], 'optionValue');
            try {
                select.add(new Option(text, value), null);
            }
            catch(err) {
                select.add(new Option(text, value));
            }
        }
    }
    else {
        alert(xml);
    }
}

function populateDropdown(locale, divId) {
    net.loadMessage = "";
    var productCall = new net.ContentLoader(
        "/valsparwood/tdsproductsdropdown?locale=" + 
        locale,
        loadOptions,
        errorHandler,
        "xml",
        divId,
        "POST",
        null);       
}

function isValidObject(objToTest) {
    if (null == objToTest) return false;
    if ("undefined" == typeof(objToTest)) return false;
    return true;
}
function getDistributorsReportByLocale(selectObj, divId) {
    
    var form = document.getElementById("pForm");
    
    if (selectObj.selectedIndex > 0) {
        clearErrors();
        net.loadMessage = "<br/><br/><b>Loading, please wait...</b>";
        var key = escape(selectObj.options[selectObj.selectedIndex].text);
        var localeString = "";
        
        // For Anne's Mozilla issue...
        if (isValidObject(form) == false) {
            locale = document.getElementById("locale");
        }
        
        for (var i = 0; i < form.locale.length; i++) {
            if (form.locale[i].checked) {
                localeString = form.locale[i].value;
                break;
            }
        }
        var productCall = new net.ContentLoader(
            "/valsparwood/distPortal/wooddistributorsreportservlet?product=" + 
            key + "&locale=" + localeString,
            loadDiv,
            errorHandler,
            "html",
            divId,
            "POST",
            null);       
    }
}

function clearErrors() {
    var div = document.getElementById("errors");
    
    if (div) div.innerHTML = "";
}

function getMSDSReportByLocale(selectObj, divId) {

    var form = document.getElementById("pForm");

    if (selectObj.selectedIndex > 0) {
        clearErrors();
        net.loadMessage = "<br/><br/><b>Loading, please wait...</b>";
        var key = escape(selectObj.options[selectObj.selectedIndex].text);
        var localeString = "";
        for (var i = 0; i < form.locale.length; i++) {
            if (form.locale[i].checked) {
                localeString = form.locale[i].value;
                break;
            }
        }
        var productCall = new net.ContentLoader(
            "/valsparwood/msds/msdsreport?product=" + 
            key + "&locale=" + localeString,
            loadDiv,
            errorHandler,
            "html",
            divId,
            "POST",
            null);       
    }
}
