var ie = false;
if(document.uniqueID) ie = true;
//var url = document.URL.substring(0,document.URL.search(/[a-zA-Z0-9_-]*\.php/));

/// Create an XMLHttpRequest object to make an AJAX request.
function AJAXgetHttpRequest()
{
	var http_request = false;
	
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType) http_request.overrideMimeType('text/xml');
	} else if (window.ActiveXObject) { // IE
		try {
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	}

	return http_request;
}


/// Send an AJAX request to the server.
/// Parameters:
///  data: contains parameters what sent to the server (data.params)
/// Return value: true = ok, false = sending failed
function AJAXsendRequest(data)
{
	var http_request = AJAXgetHttpRequest('POST');
	if (!http_request) {
		alert('error: no http request');
		return false;
	}

	// send request
	http_request.open('POST', '/admin/ajax.php', true);
	http_request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');	
	http_request.onreadystatechange = function() { AJAXgetAnswer(http_request, data); };

	var post = '';
	for(var param in data.params)
		post += param+'='+data.params[param]+'&';
	http_request.send(post);

	return true;
}

/// Incoming AJAX answer. Callback.
/// Parameters:
///  http_request: AJAX answer object
///  data: array to store incoming xml
function AJAXgetAnswer(http_request, data)
{
	if(http_request.readyState != 4) return;
	if (http_request.status != 200) {
		alert('error: status '+http_request.status);
		return false;
	}
	if(data.debug) alert(http_request.responseText);
	data.xml = http_request.responseXML;
	data.callback.call(null,data);
}

/// Search for a child tag (not recursive!).
/// Parameters:
///   obj: object, DOM object
///   name: string, tag name (without <>)
/// Return value: object, DOM object (or NULL).
function AJAXgetTag(obj, name)
{
	if(!obj || !obj.childNodes || !obj.childNodes.length)
		return null; // check for valid DOM object and for childrens
	obj = obj.firstChild;
	while(obj) {
		if(obj.nodeName == name) return obj;
		obj = obj.nextSibling;
	}
	
	return null;
}

/// Search for the next tag (sibling) with the same name on the same level.
/// Parameters:
///   obj: object, DOM object
/// Return value: object, DOM object (or NULL).
function AJAXgetNextTag(obj)
{
	if(!obj || !obj.nextSibling)
		return null; // check for valid DOM object and sibling
	
	var name = obj.nodeName;
	while(obj = obj.nextSibling) {
		if(obj.nodeType == 1 && obj.nodeName == name)
			return obj;
	}
			
	return null;
}

/// Return a tag text content, eg <sample>THIS WILL BE THE RESULT</sample>.
/// Warning! Just the first text will be the result.
/// Parameters:
///  obj: object, XML tag (DOM object)
/// Return value: string, value of the tag
function AJAXgetTagValue(obj)
{
	if(!obj || !obj.childNodes || !obj.childNodes[0] || !obj.childNodes[0].data) return "";
	return obj.childNodes[0].data;
}

function getRequest(Search,Mode,Target)
{
//	var params_list = ['type'];
	var data = {};

	// clear and disable target <select
	data.targetobj = Get(Target);
	data.targetobj.disabled = true;
	data.targetobj.options.length = 0;
	if(data.targetobj.onchange) data.targetobj.onchange.call(data.targetobj); // call onchange function
	data.params = {};
	data.params.mode = Mode;
//	for(var param in params_list) {
//		if(!document.forms[0][params_list[param]].value.length) return; // check empty inputs
//		data.params[params_list[param]] = document.forms[0][params_list[param]].value;
//	}
	data.params.search=Search
	data.callback = getAnswer;
	data.debug = false;

	data.targetobj.options[0] = new Option('...', '');
	
	AJAXsendRequest(data);
}

function getRequest2(Search1,Search2,Mode,Target)
{
//	var params_list = ['type'];
	var data = {};

	// clear and disable target <select
	data.targetobj = Get(Target);
	data.targetobj.disabled = true;
	data.targetobj.options.length = 0;
	if(data.targetobj.onchange) data.targetobj.onchange.call(data.targetobj); // call onchange function
	data.params = {};
	data.params.mode = Mode;
//	for(var param in params_list) {
//		if(!document.forms[0][params_list[param]].value.length) return; // check empty inputs
//		data.params[params_list[param]] = document.forms[0][params_list[param]].value;
//	}
	data.params.search1=Search1
	data.params.search2=Search2
	data.callback = getAnswer;
	data.debug = false;

	data.targetobj.options[0] = new Option('...', '');
	
	AJAXsendRequest(data);
}


function getTextRequest(Search,Mode,Target)
{
	var data = {};

	// clear and disable target <div
	data.targetobj = Get(Target);
//	data.targetobj.disabled = true;
	data.targetobj.value='';
	if(data.targetobj.onchange) data.targetobj.onchange.call(data.targetobj); // call onchange function
	data.params = {};
	data.params.mode = Mode;
	data.params.search=Search;
	data.callback = getTextAnswer;
	data.debug = false;

	AJAXsendRequest(data);
}

function getAnswer(data)
{	
	var answer = AJAXgetTag(data.xml,'answer');
	var adat = AJAXgetTag(answer,'adat');
	
	// add new <OPTIONs to the <SELECT
	var i = 0;
//	data.targetobj.options[i].text = '-';
//	alert(adat);
	while(adat) {
		data.targetobj.options[i++] = new Option(
			AJAXgetTagValue(AJAXgetTag(adat,'nev')),
			AJAXgetTagValue(AJAXgetTag(adat,'id'))
		);
		adat = AJAXgetNextTag(adat);
	}
	data.targetobj.disabled = false;
}

function getTextAnswer(data)
{	
	var answer = AJAXgetTag(data.xml,'answer');
	var adat = AJAXgetTag(answer,'adat');
	
	// add new <OPTIONs to the <SELECT
	var i = 0;
//	data.targetobj.options[i].text = '-';
//	alert(adat);
	while(adat) {
		/*data.targetobj.options[i++] = new Option(
			AJAXgetTagValue(AJAXgetTag(adat,'nev')),
			AJAXgetTagValue(AJAXgetTag(adat,'id'))
		);*/
		data.targetobj.value=AJAXgetTagValue(AJAXgetTag(adat,'nev'));
		adat = AJAXgetNextTag(adat);
	}
//	data.targetobj.disabled = false;
}

/// init a callback to a function called on an event (different in IE/Mozilla)
function InitCallback(obj,type,funct){
	//IE, Opera
	if(obj.attachEvent)
		obj.attachEvent('on'+type,funct);
		
	//Safari, Mozilla
	else if(obj.addEventListener)
 		obj.addEventListener(type,funct,true);
}

/// destroy callback (different in IE/Mozilla)
function DestroyCallback(obj,type,funct)
{
	//IE, Opera
	if(obj.detachEvent)
		obj.detachEvent('on'+type,funct);
	
	//Safari, Mozilla
	else if(obj.removeEventListener)
		obj.removeEventListener(type,funct,true);
}

