// global flag
var isIE = false;
var iconId;
var iconId;
var selectname;
var statusMessageId;
var emptySelectionLabel;
// global request and XML document objects
var req;

var siteId = new Object();
var defaultOption = new Object();

// retrieve XML document (reusable generic function);
// parameter is URL string (relative or complete) to
// an .xml file whose Content-Type is a valid XML
// type, such as text/xml; XML source must be from
// same domain as HTML file
function loadXMLDoc(url) {
    // branch for native XMLHttpRequest object
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = processReqChange;
        req.open("GET", url, true);
        req.send(null);
    // branch for IE/Windows ActiveX version
    } else if (window.ActiveXObject) {
        isIE = true;
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = processReqChange;
            req.open("GET", url, true);
            req.send();
        }
    }
}

// handle onreadystatechange event of req object
function processReqChange() {
    // only if req shows "loaded"
	if (req.readyState == 1) {
		//document.getElementById(selectname).className = 'ajaxSelect inactive';
		document.getElementById(iconId).src = '/cms/sitewide/images/loading.gif';
		document.getElementById(iconId).alt = 'options are loading, please stand by...';
		document.getElementById(statusMessageId).innerHTML = 'options are loading, please stand by...';
	 }
	if (req.readyState == 4) {
        // only if "OK"
		//alert('req.status'+req.status);
        if (req.status == 200) {
            //alert('response ok');
			//alert(iconId);
			document.getElementById(iconId).src = '/cms/sitewide/images/loaded.gif';
			document.getElementById(iconId).alt = '';
			document.getElementById(statusMessageId).innerHTML = 'options have been loaded';
            //alert('calling buildTopicList');
			buildTopicList();
         } else {
            alert("There was a problem retrieving the XML data:\n" +
                req.statusText);
			document.getElementById(iconId).alt = 'ERROR ON LOADING DATA';
			document.getElementById(statusMessageId).innerHTML = 'ERROR ON LOADING DATA';
         }
    }
}



// element, loads new items into Topics select element
function loadDoc(selectedValue, aSelectName, aIconId, aSpanId, aPickerType, aSelectmethod, aStatusMessageId, aQueryParam,aEmptySelectionLabel) {
            try {
					statusMessageId = aStatusMessageId;
					selectname = aSelectName;
					iconId = aIconId;
					spanId = aSpanId;
					emptySelectionLabel = aEmptySelectionLabel;
					var baseUrl = "/cms/servlet/selectpicker?pickertype=" + escape(aPickerType) + "&selectname=" + escape(aSelectName) + "&selectedvalue=" + escape(selectedValue) + "&selectmethod=" + aSelectmethod;
					
					if (aQueryParam.length != 0 ){
						baseUrl = baseUrl + "&"+aQueryParam;
					}
					
					if(siteId[aSelectName] != null && siteId[aSelectName].length != 0){
						baseUrl = baseUrl + "&siteId=" + siteId[aSelectName];
					}
					 
					if(defaultOption[aSelectName] != null && defaultOption[aSelectName].length != 0){
						baseUrl = baseUrl + "&addDefaultOption=true";
					}
					 
					//alert(baseUrl);
					//window.location = baseUrl;
					loadXMLDoc(baseUrl);
            }
            catch(e) {
				var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
                alert("Unable to get XML data:\n" + msg);
                return;
            }
}

//sets a default option flag , than calls loadDoc
function loadDocWithDefault(selectedValue, aSelectName, aIconId, aSpanId, aPickerType, aSelectmethod, aStatusMessageId, aQueryParam,aEmptySelectionLabel) {
	defaultOption[aSelectName] = "true";
	loadDoc(selectedValue, aSelectName, aIconId, aSpanId, aPickerType, aSelectmethod, aStatusMessageId, aQueryParam,aEmptySelectionLabel);
}

//gets the site id selected in the aSiteSelectName dropdown, than calls loadDoc
function loadChainedDoc(aSiteSelectName, selectedValue, aSelectName, aIconId, aSpanId, aPickerType, aSelectmethod, aStatusMessageId, aQueryParam,aEmptySelectionLabel) {
	siteId[aSelectName] = document.getElementById(aSiteSelectName).value;
	loadDoc(selectedValue, aSelectName, aIconId, aSpanId, aPickerType, aSelectmethod, aStatusMessageId, aQueryParam,aEmptySelectionLabel);
}


// retrieve text of an XML document element, including
// elements using namespaces
function getElementTextNS(prefix, local, parentElem, index) {
    var result = "";
    if (prefix && isIE) {
        // IE/Windows way of handling namespaces
        result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
    } else {
        // the namespace versions of this method
        // (getElementsByTagNameNS()) operate
        // differently in Safari and Mozilla, but both
        // return value with just local name, provided
        // there aren't conflicts with non-namespace element
        // names
        result = parentElem.getElementsByTagName(local)[index];
    }
    if (result) {
        // get text, accounting for possible
        // whitespace (carriage return) text nodes
        if (result.childNodes.length > 1) {
            return result.childNodes[1].nodeValue;
        } else {
            return result.firstChild.nodeValue;
        }
    } else {
        return "n/a";
    }
}

// add item to select element the less
// elegant, but compatible way.
function appendToSelect(select, value, content,selected,title) {
    var opt;
    opt = document.createElement("option");
	opt.value = value;
	opt.title = title;
	opt.selected = selected;
    opt.appendChild(content);
    select.appendChild(opt);
}

// fill Topics select list with items from
// the current XML document
function buildTopicList() {
    //alert('buildTopicList');
    //var select = document.createElement('select');
	var selectElement = req.responseXML.getElementsByTagName("select");
	var selectBoxname =  getElementTextNS("", "selectname", selectElement[0], 0);
    var oldSelect = document.getElementById(selectBoxname);
	var select = document.createElement("select");
	select.setAttribute("onClick",oldSelect.getAttribute("onClick"));
	select.setAttribute("class",oldSelect.getAttribute("class"));
	select.setAttribute("onchange",oldSelect.getAttribute("onchange"));
	select.setAttribute("id",oldSelect.getAttribute("id"));
	//alert(getElementTextNS("", "selectname", selectElement[0], 0));
	select.setAttribute("name",selectBoxname);
	select.removeAttribute("onClick");
	//select.setAttribute("onClick","");
	select.options.length = 0;

	if(emptySelectionLabel != ""){
		appendToSelect(select,'0',document.createTextNode(emptySelectionLabel),'false');
	}
	
    var items = req.responseXML.getElementsByTagName("option");
    //alert("items length:" + items.length);
    // loop through <item> elements, and add each nested
    // <title> element to Topics select element
    for (var i = 0; i < items.length; i++) {

		var valueElement = items[i].getElementsByTagName("value");
        var selected = valueElement[0].getAttribute("selected") == "true";
		appendToSelect(select, getElementTextNS("", "value", items[i], 0),document.createTextNode(getElementTextNS("", "label", items[i], 0)),selected,getElementTextNS("", "label", items[i], 0));

    }
	document.getElementById(spanId).innerHTML = '';
	document.getElementById(spanId).appendChild(select);
	//document.getElementById(selectBoxname).className = 'ajaxSelect';
	document.getElementById(selectBoxname).focus();
}
