/**
 * author: pbRoberts
 */

var READY_STATE_UNITIALIZED=0;
var READY_STATE_LOADING=1;
var READY_STATE_LOADED=2;
var READY_STATE_INTERACTIVE=3;
var READY_STATE_COMPLETE=4;
var HTTP_OK = 200;

/**
 * An object to encapsulate the ICD9 data.
 */
function _opt() {
	this.value;
	this.label;
}

function callback_GetFamilies() {
	if (dataRequest.readyState == READY_STATE_COMPLETE) {
		if (dataRequest.status == HTTP_OK) {
			var opts = optsArray(dataRequest.responseXML, "families");
			setFamilies(opts);
		}
	}
}

function callback_GetSizeRanges() {
	if (dataRequest.readyState == READY_STATE_COMPLETE) {
		if (dataRequest.status == HTTP_OK) {
			var opts = optsArray(dataRequest.responseXML, "sizeRanges");
			setSizeRanges(opts);
		}
	}
}

function callback_GetSizeRangesAndFamilies() {
	if (dataRequest.readyState == READY_STATE_COMPLETE) {
		if (dataRequest.status == HTTP_OK) {
			var sOpts = optsArray(dataRequest.responseXML, "sizeRanges");
			var fOpts = optsArray(dataRequest.responseXML, "families");
			setSizeRanges(sOpts);
			setFamilies(fOpts);
			var load = document.getElementById("loading");
			if(load){
				load.style.display = "none";
			}
		}
	}
}

function genFamilyParams(action, lineId, sizeRange) {
	var params = "action=" + encodeURIComponent(action) + "&lineId=" + encodeURIComponent(lineId);
	if (sizeRange != null) { params += "&sizeRange=" + encodeURIComponent(sizeRange); }
	return params;
}

function genSizeRangeParams(action, lineId, familyId) {
	var params = "action=" + encodeURIComponent(action) + "&lineId=" + encodeURIComponent(lineId);
	if (familyId != null) { params += "&familyId=" + encodeURIComponent(familyId); }
	return params;
}

function genSizeRangeAndFamilyParams(action, lineId) {
	return "action=" + encodeURIComponent(action) + "&lineId=" + encodeURIComponent(lineId);
}

function getFamilies(action, lineId, sizeRange) {
	var AJAX_SERVLET = cp + "/AjaxServlet";
	dataRequest = getXMLHttpRequest();
	dataRequest.onreadystatechange = callback_GetFamilies;
	dataRequest.open("POST", AJAX_SERVLET, true);
	dataRequest.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
	dataRequest.send(genFamilyParams(action, lineId, sizeRange));
}

function getSizeRanges(action, lineId, familyId) {
	var AJAX_SERVLET = cp + "/AjaxServlet";
	dataRequest = getXMLHttpRequest();
	dataRequest.onreadystatechange = callback_GetSizeRanges;
	dataRequest.open("POST", AJAX_SERVLET, true);
	dataRequest.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
	dataRequest.send(genSizeRangeParams(action, lineId, familyId));
}

function getSizeRangesAndFamilies(action, lineId) {
	var AJAX_SERVLET = cp + "/AjaxServlet";
	dataRequest = getXMLHttpRequest();
	dataRequest.onreadystatechange = callback_GetSizeRangesAndFamilies;
	dataRequest.open("POST", AJAX_SERVLET, true);
	dataRequest.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
	dataRequest.send(genSizeRangeAndFamilyParams(action, lineId));
}

function getXMLHttpRequest() {
	var xhr = null;
	if (window.XMLHttpRequest) {
		xhr = new XMLHttpRequest();
	} else if (typeof ActiveXObject != "undefined") {
		xhr = new ActiveXObject("MicroSoft.XMLHTTP");
	}
	return xhr;
}

function optsArray(xml, tagName) {
	var opts = new Array();
	var optNodes = xml.getElementsByTagName(tagName)
	for (var i = 0; (optNodes != null) && (i < optNodes.length); i++) {
		var opt = new _opt();
		opt.value = (optNodes[i].getElementsByTagName("value"))[0].childNodes[0].nodeValue;
		opt.label = (optNodes[i].getElementsByTagName("label"))[0].childNodes[0].nodeValue;
		opts[i] = opt;
	}
	return opts;
}



