var isIE = false;

var req;
var type;
var target;
var optional;
var elemTrigger;
function loadXMLDoc(url ) {
    // branch for native XMLHttpRequest object
    if (target) {
		target.disabled = true;
	}
    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 == 4) {
        // only if "OK"
	if (req.status == 200 ) {
        if( type == 'tariffs' ) {
			getTariff(); 
		}
		else if( type == 'persons' ) {
			buildSelect( target ); 
		}
		else if( type == 'executor_organisations' ) {
			buildSelect( target );
		}
		else if( type == 'managers' ) {
			buildSelect( target ); 
		}
		else if( type == 'managers_admins' ) {
			buildSelect( target ); 
		}
		else if( type == 'codes' ) {
			buildSelect( target ); 
		}
		else if( type == 'programs' ) {
			buildSelect( target ); 
		}
		else if( type == 'countries' ) {
			buildSelect( target ); 
		}
		else if( type == 'budget_org' ) {
			buildSelect( target ); 
		}
		else if( type == 'organisation_types' ) {
			buildSelect( target ); 
		}
		else if( type == 'backdonor_contracts' ) {
			buildSelect( target ); 
		}
	} else {
            alert("There was a problem retrieving the XML data:\n" + req.statusText);
	}
    if (target) {
		target.disabled = false;
	}
		
    }
	if( type == 'executor_organisations'){
			type == 'persons';
			target = document.getElementById('person_id');
			loadXMLDoc( 'index.php?action=xml&object=persons&id=' + optional.options[optional.selectedIndex].value+'&'+Math.floor(Math.random() * 10) );
	}
}

function loadDoc(evt, type_in, target_in, optional_in ) {
	
//	alert( type_in + target_in + optional_in);
	
	type = type_in;
	target = target_in;
	evt = (evt) ? evt : ((window.event) ? window.event : null);
	optional = optional_in;
	var url = '';
	if (evt) {
		var elem = (evt.target) ? evt.target : ((evt.srcElement) ? evt.srcElement : null);
		var elemTrigeer = (evt.target) ? evt.target : null;
		if (elem ) {
			try {
				if (elem.selectedIndex >= 0 || elem.value != '' ) {
					if( type == 'managers' ) {
						url = 'index.php?action=xml&object=managers&class_id='+ optional_in +'&organisation_id=' + elem.options[elem.selectedIndex].value;
					} else if( type == 'backdonor_contracts' ) {
						url = 'index.php?action=xml&object=backdonor_contracts&organisation_id=' + elem.options[elem.selectedIndex].value;
					} else if( type == 'managers_admins' ) {
						url = 'index.php?action=xml&object=managers&type=admin&class_id='+ optional_in +'&organisation_id=' + elem.options[elem.selectedIndex].value;
					}
					else if( type == 'codes' ) {
						url = 'index.php?action=xml&object=codes&class='+ optional_in +'&code=' + elem.form.code.value;
					} else if( type == 'budget_org' ) {
						url = 'index.php?action=xml&object=tariffs&organisation_id=' + elem.form.organisation_id.value;
					} else if( type == 'organisation_types' ) {
						// Walk checkboxes with types
						boxes = $$('input[type="checkbox"]');
						url = 'index.php?action=xml&object=organisations';
						for(x=0; x< boxes.length; ++x) {
							if (boxes[x].readAttribute('id').substr(0,22) == 'search_category_org_id') {
								if (Form.Element.getValue(boxes[x].readAttribute('id'))) {
									url += '&orgcat[]=' + encodeURIComponent(Form.Element.getValue(boxes[x].readAttribute('id')));
								}
							}
						}
					} else {
						url = 'index.php?action=xml&object='+type+'&id=' + elem.options[elem.selectedIndex].value+'&'+Math.floor(Math.random() * 10);
					}
					loadXMLDoc( url );
				}
			}
			catch(e) {
				var msg = (typeof e == "string") ? e : ((e.message) ? e.message : "Unknown Error");
				alert("Unable to get XML data:\n" + msg);
				return;
			}
		}
	}
}

// retrieve text of an XML document element, including
// elements using namespaces
function getElementTextNS(prefix, local, parentElem, index) {
    var result = "";
    if (prefix && isIE) {
        result = parentElem.getElementsByTagName(prefix + ":" + local)[index];
    } else {
        result = parentElem.getElementsByTagName(local)[index];
    }
    if (result) {
        if (result.childNodes.length > 1) {
            return result.childNodes[1].nodeValue;
        } else {
			if( result.childNodes[0] ) return result.childNodes[0].nodeValue;
			else  return "";   		
        }
    } else {
        return "";
    }
}

function getTariff() {
	var items = req.responseXML.getElementsByTagName("item");
	document.budget.tariff.value = getElementTextNS("", "tariff", items[0], 0);
}


// add item to select element the less
// elegant, but compatible way.
function appendToSelect(select, value, content) {
    var opt;
    opt = document.createElement("option");
    opt.value = value;
    opt.appendChild(content);
    select.appendChild(opt);
}



// fill Topics select list with items from
// the current XML document
function buildSelect( select, content_xml ) {
	// empty Topics select list content
	clearSelect(select);
	
	if( content_xml ) items = content_xml.getElementsByTagName("item");
	else {
		var items = req.responseXML.getElementsByTagName("item");
	}

	// loop through <item> elements, and add each nested
    // <title> element to Topics select element
    for (var i = 0; i < items.length; i++) {
        appendToSelect(select, getElementTextNS("", "id", items[i], 0),document.createTextNode( getElementTextNS("", "name", items[i], 0) ));
    }
}

function clearSelect (select) {
	while (select.length > 0) { select.remove(0); }
}
function buildTextString( field ) {
	// empty Topics select list content
	//alert( field.value );
	//field.value = '';

    var items = req.responseXML.getElementsByTagName("item");
	// loop through <item> elements, and add each nested
    // <title> element to Topics select element
    string = '';
    for (var i = 0; i < items.length; i++) {
        string = string + getElementTextNS("", "name", items[i], 0);
    }
    //alert( string);
    field.value = string;
}

Effect.divSwap = function(element,container){
    var div = document.getElementById(container);
    var nodeList = div.childNodes;
	if(Element.visible(element)==false){
		for(i=0;i<nodeList.length;i++){
			if(nodeList.item(i).nodeName=="DIV" && nodeList.item(i).id!=element){
				if(Element.visible(nodeList.item(i))==true){
					Effect.Fade(nodeList.item(i),{duration: 0.1})
				}
			}
		}
		Effect.Appear(element,{duration: 0.1})
	}
}


