var isIE = false;

//global request and XML document objects
var req;

var obj_target;

//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);
     //alert(url);
     //alert(req.responseText);
     // 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();
         //alert(url);
         //alert(req.responseText);
     }
 }
}

//handle onreadystatechange event of req object
function processReqChange() {
 // only if req shows "loaded"
 if (req.readyState == 4) {
     // only if "OK"
     if (req.status == 200) {
         buildTopicList(obj_target);
      } else {
         alert("There was a problem retrieving the XML data:\n" +
             req.statusText);
      }
 }
}

//invoked by "Category" select element change;
//loads chosen XML document, clears Topics select
//element, loads new items into Topics select element
function loadDoc(evt, obj, url) {
 
    // equalize W3C/IE event models to get event object
    obj_target = obj;
    evt = (evt) ? evt : ((window.event) ? window.event : null);
 if (evt) {
     // equalize W3C/IE models to get event target reference
     // alert(evt.target);
     var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
     if (elem) {
         try {
         	loadXMLDoc(url);
		 } catch(e) {
             var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
             alert("Klaida. Negalima užkrauti duomenų iš serverio.\n"/* + msg + " - " + elem.selectedIndex*/);
             return;
         }
     }
 }
}

//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 {
     	if(result.firstChild)
         return result.firstChild.nodeValue;
        else
         return "";
     }
 } else {
     return "";
 }
}

//fill Topics select list with items from
//the current XML document
function buildTopicList(obj_target) {

	var items = req.responseXML.getElementsByTagName("item");
	
	obj_target.options.length = 0;
	obj_target.innerHTML = ""; 
   	obj_target.options[obj_target.length] = new Option( '-Rodyti visus-','', false, false); 
 	//alert(arr_title.length);

	var values = document.forms['save'].elements[obj_target.name+'_tmp'].value;
	var arr = values.split("::");
 	
 	for (var i = 0; i < items.length; i++) {

	     id_ = getElementTextNS("", "id", items[i], 0), document.createTextNode(getElementTextNS("", "id", items[i], 0));
	     title_ = getElementTextNS("", "title", items[i], 0), document.createTextNode(getElementTextNS("", "title", items[i], 0));
	     opt_ = getElementTextNS("", "opt", items[i], 0), document.createTextNode(getElementTextNS("", "opt", items[i], 0));
	
		if(opt_ == 1){
			var optgroup = document.createElement('OPTGROUP');
			optgroup.label = title_;
			obj_target.appendChild(optgroup);		
		}else{
			for(var j=0, selected=false; j<arr.length; j++){
				if(arr[j]==id_){
					selected = true;
				}
			}
			obj_target.options[obj_target.length] = new Option( title_, id_, false, selected);			
		}

	 }
	 document.forms['save'].elements[obj_target.name+'_tmp'].value = "";
}