/**
 ** The following are the ajax package definitions for async requests
 **/
var ajaxpackage=new Object();
ajaxpackage.basedomain="http://"+window.location.hostname;
ajaxpackage.ajaxobj = new xmlHttpRequestHandler.createXmlHttpRequest();
ajaxpackage.filetype="xml";
ajaxpackage.addrandomnumber=1 //Set to 1 or 0. 1 to append ts to avoid caching.
ajaxpackage.msdsAction = "/hok/store/msdsRequest.html";
ajaxpackage.upcAction = "/msds/upcValidation.do";
ajaxpackage.tdsAction = "/tds/tdsVerifier.do";
ajaxpackage.item = new Object();
ajaxpackage.upc = new Object();
ajaxpackage.div = new Object();
ajaxpackage.form = new Object();
ajaxpackage.docType = new Object();

// (ajaxpackage.msdsAction, params, processDocumentPost, "xml", false)
ajaxpackage.postAjaxRequest = function(url, parameters, callbackfunc, filetype, async){
    ajaxpackage.ajaxobj = new xmlHttpRequestHandler.createXmlHttpRequest(); //recreate ajax object to defeat cache problem in IE
    var valid = false;
    if (this.ajaxobj){
        this.filetype=filetype
        if (async) this.ajaxobj.onreadystatechange = callbackfunc;
        this.ajaxobj.open('POST', url, async);
        this.ajaxobj.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        this.ajaxobj.setRequestHeader("Content-length", parameters.length);
        this.ajaxobj.setRequestHeader("Connection", "close");
        
        if (ajaxpackage.addrandomnumber==1) //Further defeat caching problem in IE?
            var parameters=parameters+"&ts=" + new Date().getTime();
            
        this.ajaxobj.send(parameters);
        
        if (!async) {
            return processMSDSPost(this.ajaxobj);
        }
    }
}

/**
 ** Function to mimic selectSingleNode method that is supported in IE so that
 ** it works in firefox.
 **/
function SelectSingleNode(xmlDoc, elementPath) {
    if(window.ActiveXObject) {
        return xmlDoc.selectSingleNode(elementPath);
    }
    else {
       var xpe = new XPathEvaluator();
       var nsResolver = xpe.createNSResolver( xmlDoc.ownerDocument == null ? xmlDoc.documentElement : xmlDoc.ownerDocument.documentElement);
       var results = xpe.evaluate(elementPath,xmlDoc,nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE, null);
       return results.singleNodeValue; 
    }
}

/**
 ** Asynchronous function that handles the response form the server for the
 ** document requests.
 **/
function processDocumentPost() {
    var myajax = ajaxpackage.ajaxobj;
    if (myajax.readyState == 4){ //if request of file completed
        if (myajax.status==200 || window.location.href.indexOf("http")==-1){ //if request was successful or running script locally
            var xml = myajax.responseXML;
            if (xml) {
                var node = SelectSingleNode(xml, "//status");
                //var code = node.selectNodes("@code")[0].value;
                var code = node.getAttribute("code");
                if (code == 200) {
                    ajaxpackage.div.innerHTML = "";
                    if (ajaxpackage.docType == "UPC") {
                        ajaxpackage.form.op.value = "upcMSDS";
                    }
                    if (document.msdsform)
                        document.msdsform.submit();
                }
                else if (code == 404) {
                    ajaxpackage.div.style.color = "red";
                    ajaxpackage.div.innerHTML = ajaxpackage.docType + " for " + ajaxpackage.item + " has not been published.";
                }
                else {
                    ajaxpackage.div.style.color = "red";
                    ajaxpackage.div.innerHTML = node.firstChild.nodeValue;
                }
            }
            else {
                ajaxpackage.div.style.color = "red";
                ajaxpackage.div.innerHTML = "<b>An Error Has Ocurred </b>";
            }
        }
        else {
            ajaxpackage.div.style.color = "red";
            ajaxpackage.div.innerHTML = "<b>An Error Has Ocurred - Error code: " + myajax.status + "</b>";
        }
    }
    else {
        ajaxpackage.div.style.color = "black";
        ajaxpackage.div.innerHTML = "<b>Please wait...</b>";
    }
}

function processMSDSPost(ajaxobj) {
    var valid = false;
    var useDiv = ajaxpackage.div != null && ajaxpackage.div.id != null && document.getElementById(ajaxpackage.div.id) != null;
//    alert("ajaxobj.status="+ajaxobj.status);
    if (ajaxobj.status==200 || window.location.href.indexOf("http")==-1){ //if request was successful or running script locally
        var xml = ajaxobj.responseXML;
//        alert("xml="+xml);
        if (xml) {
            var node = SelectSingleNode(xml, "//status");
            var code = node.getAttribute("code");
            if (code == "200") {
                if (useDiv) ajaxpackage.div.innerHTML = "";
                if (ajaxpackage.docType == "UPC") {
                    ajaxpackage.form.op.value = "upcMSDS";
                }
                valid = true;
            }
            else if (code == "404") {
                if (useDiv) {
                    ajaxpackage.div.style.color = "white";
                    ajaxpackage.div.innerHTML = ajaxpackage.docType + " for " + ajaxpackage.item + " has not been published.";
                }
                else alert(ajaxpackage.docType + " for " + ajaxpackage.item + " has not been published.");
            }
            else {
                if (useDiv) {
                    ajaxpackage.div.style.color = "white";
                    ajaxpackage.div.innerHTML = node.firstChild.nodeValue;
                }
                else alert(node.firstChild.nodeValue);
            }
        }
        else {
            if (useDiv) {
                ajaxpackage.div.style.color = "white";
                ajaxpackage.div.innerHTML = "<b>An Error Has Ocurred </b>";
            }
            else alert("An Error Has Ocurred");
        }
    }
    else {
        if (useDiv) {
            ajaxpackage.div.style.color = "white";
            ajaxpackage.div.innerHTML = "<b>An Error Has Ocurred - Error code: " + ajaxobj.status + "</b>";
        }
        else alert("An Error Has Ocurred - Error code: " + ajaxobj.status);
    }
    return valid;
}

function itemByKeyword(item, keyword, divId) {
    // Initialize object
    ajaxpackage.div = document.getElementById(divId);
    ajaxpackage.item = item;
    ajaxpackage.docType = "MSDS";
    ajaxpackage.validateOp = new String("validateByKeyword");
    ajaxpackage.getOp = new String("msdsByKeyword");
    ajaxpackage.keyword = new String(keyword);
    ajaxpackage.form = null;
    var valid = false;
    var params = "op=" + ajaxpackage.validateOp + "&item=" + encodeURI(ajaxpackage.item) + "&keyword=" + ajaxpackage.keyword;
    valid = ajaxpackage.postAjaxRequest(ajaxpackage.msdsAction, params, processDocumentPost, "xml", false);

    if (valid) {
        document.location.href = ajaxpackage.msdsAction + "?op=" + ajaxpackage.getOp + "&item=" + encodeURI(ajaxpackage.item) + "&keyword=" + ajaxpackage.keyword;
    }
}

function upcRequest(what) {
    // Initialize object
    ajaxpackage.form = what;
    ajaxpackage.div = document.getElementById("msdsDiv");
    ajaxpackage.upc = what.upc.value;
    ajaxpackage.docType = "UPC";
    ajaxpackage.upcAction = what.action;
    var valid = false;

    if (ajaxpackage.upc != "" && ajaxpackage.upc.length == 12) {
        var params = "op=upc&upc=" + encodeURI(ajaxpackage.upc);
        valid = ajaxpackage.postAjaxRequest(ajaxpackage.upcAction, params, processDocumentPost, "xml", false);
    }
    else {
        ajaxpackage.div.innerHTML = "<b>Invalid UPC entered</b>";   
    }
    return valid;
}

function checkSize(what) {
	var theName = parseInt(what.name.substring(what.name.length - 1)) + 1;
	var frmObject = eval('document.msdsform.item_no' + theName);
    if (frmObject && what.maxLength == what.value.length) {
        frmObject.focus();
    }
}

function validateItemForm() {
    var frm = document.msdsform;
    
    if (frm.item.value == "") {
        alert("Please enter a valid item number. Thank you!");
        frm.item.select();
        frm.item.focus();
        return false;
    }
    else {
        frm.item.value = frm.item.value.toUpperCase();
        if(frm.item.value.indexOf(".") != -1) {
         frm.item.value = frm.item.value.substring(0, frm.item.value.indexOf("."));
        }
        return true;
    }
}

function validateForm() {
	if(document.msdsform.item_no1.value.length != 1)
	{
		alert('Please enter a valid 1 digit number.  Thank you!');
		document.msdsform.item_no1.select();
		document.msdsform.item_no1.focus();
		return;
	}
	if(document.msdsform.item_no2.value.length != 5)
	{
		alert('Please enter a valid 5 digit number.  Thank you!');
		document.msdsform.item_no2.select();
		document.msdsform.item_no2.focus();
		return;
	}
	if(document.msdsform.item_no3.value.length != 5)
	{
		alert('Please enter a valid 5 digit number.  Thank you!');
		document.msdsform.item_no3.select();
		document.msdsform.item_no3.focus();
		return;
	}
	if(document.msdsform.item_no4.value.length != 1)
	{
		alert('Please enter a valid 1 digit number.  Thank you!');
		document.msdsform.item_no4.select();
		document.msdsform.item_no4.focus();
		return;
	}
	var upc = document.msdsform.item_no1.value +
			  document.msdsform.item_no2.value +
			  document.msdsform.item_no3.value +
			  document.msdsform.item_no4.value;
	if (upc.length > 0) {
		document.msdsform.upc.value = upc;
                if (upcRequest(document.msdsform)) document.msdsform.submit();
	}			  
	else {
		alert("An error has ocurred trying to read the UPC entered!");
	}
}

function hokMSDS() {
    var b = validateItemForm();
    if(b) { 
      var f = document.msdsform;
      itemByKeyword(f.item.value, f.keyword.value, "msdsErr");

    }
}

function hasMsds(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/checkMSDS.html?productId="
            + productId,
            loadDiv,
            MSDSError,
            "html",
            divId,
            "POST");
    }
}

function MSDSError() {
    var theDiv = document.getElementById(this.div);
}
