var xmlTile = null;
var xmlRequest;

function fnXMLProcessReqChange() {

	//alert (xmlRequest.getAllResponseHeaders());
	 	
    // only if req shows "loaded"
    if (xmlRequest.readyState == 4) {
        // only if "OK"
        if (xmlRequest.status == 200) {
        	//var x = xmlRequest.responseXML;
        	//alert (x);
        	//alert (xmlRequest.responseText);
            fnShowTile (xmlTile, xmlRequest.responseText);
        } else {
            throw new Error ("There was a problem retrieving the XML data:\n" + xmlRequest.statusText);
        }
    }
}

function fnXMLHttpRequest() {
	if (window.XMLHttpRequest) {
		var req = new XMLHttpRequest();
        req.onreadystatechange = fnXMLProcessReqChange;
		return req;
	} else if (window.ActiveXObject) {
		var req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = fnXMLProcessReqChange;
            return req;
        }
    }
    throw new Error ("XML Http is not supported");
}

function fnLoadTile (tileId, atileId, target) {
	if (target == undefined) target = 'xml.php';
	if (!atileId) throw new Error ("Blank tile");
	if (xmlTile) return;
	var tile = document.getElementById (tileId);
	//if (!tile) throw new Error ("Invalid tile");
	var atile = document.getElementById (atileId);
	if (!atile) throw new Error ("Invalid action tile");
	xmlRequest = fnXMLHttpRequest();
	xmlTile = atileId;
	if (atile.childNodes.length == 0) atile.innerHTML = 'Çàðåæäàíå...' + target;
	//throw new Error ("");
	xmlRequest.open ("POST", target, true);
	//xmlRequest.open ("POST", "http://localhost:8079/", true);

	xmlRequest.setRequestHeader ("Content-Language", "bg");
	xmlRequest.setRequestHeader ("Content-Charset", "windows-1251");
	xmlRequest.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded; charset=windows-1251");
	xmlRequest.setRequestHeader("Accept-Charset", "windows-1251"); 
	var txt = "caction=" + document.forms.form.action.value + 
  		"&param=" + document.forms.form.param.value + 
  		"&abase=" + document.forms.form.abase.value + 
  		fnGetFormData (tileId);
  		
  	xmlRequest.send (txt);

	//for GET
	//xmlRequest.open ("Get", '../core/xmlresponse.php?' + fnGetFormData (tileId), true);
	//xmlRequest.send (null);
	//end GET
}

function fnGetFormData (prefix) {
	
	var form = document.forms['form'];
	var felements = form.elements;
	var s = "";
	for (var i = 0; i < felements.length; i++) {
		var fel = felements[i];
		//alert (felements[i]);
		if (fel.name && fel.name.indexOf (prefix) === 0) {
			s += "&" + fel.name + "=";
			if (!(fel.nodeName == 'INPUT' && fel.type == 'checkbox' && fel.checked == false)) s += fnEscape (fel.value);
		}
	}
	return s;
}

function fnEscape (str) {
	
	var out = '';
	
	var translations = {
		'À' : '%C0', 'Á' : '%C1', 'Â' : '%C2', 'Ã' : '%C3',
		'Ä' : '%C4', 'Å' : '%C5', 'Æ' : '%C6', 'Ç' : '%C7',
		'È' : '%C8', 'É' : '%C9', 'Ê' : '%CA', 'Ë' : '%CB',
		'Ì' : '%CC', 'Í' : '%CD', 'Î' : '%CE', 'Ï' : '%CF',
		'Ð' : '%D0', 'Ñ' : '%D1', 'Ò' : '%D2', 'Ó' : '%D3',
		'Ô' : '%D4', 'Õ' : '%D5', 'Ö' : '%D6', '×' : '%D7',
		'Ø' : '%D8', 'Ù' : '%D9', 'Ú' : '%DA', 'Û' : '%DB', 
		'Ü' : '%DC', 'Ý' : '%DD', 'Þ' : '%DE', 'ß' : '%DF',
		'à' : '%E0', 'á' : '%E1', 'â' : '%E2', 'ã' : '%E3',
		'ä' : '%E4', 'å' : '%E5', 'æ' : '%E6', 'ç' : '%E7',
		'è' : '%E8', 'é' : '%E9', 'ê' : '%EA', 'ë' : '%EB',
		'ì' : '%EC', 'í' : '%ED', 'î' : '%EE', 'ï' : '%EF',
		'ð' : '%F0', 'ñ' : '%F1', 'ò' : '%F2', 'ó' : '%F3',
		'ô' : '%F4', 'õ' : '%F5', 'ö' : '%F6', '÷' : '%F7',
		'ø' : '%F8', 'ù' : '%F9', 'ú' : '%FA', 'ú' : '%FA', 
		'ü' : '%FC', 'ù' : '%FC', 'þ' : '%FE', 'ÿ' : '%FF'
	};
	
	for (var i = 0; i < str.length; i++) {
		var chr = str.charAt (i);
		var tr = translations[chr];
		if (tr !== undefined) {
			out += tr;
		} else {
			out += chr;
		}
	}
	return out;
}

function fnShowTile (tileId, text) {
	var tile = document.getElementById (tileId);
	if (!tile) throw new Error ("Invalid tile");
	
	
	var doc2 = (new DOMParser()).parseFromString(text, "text/xml");	
	try {
		var cnodes = doc2.documentElement.childNodes;
		//alert (cnodes[0].nodeName);
		//alert (cnodes[1].childNodes[0].data);
		//alert (cnodes[1].childNodes[0].data.length);
		for (var i = 0; i < cnodes.length; i++) {
			if (cnodes[i].nodeName == 'script') {
				for (var j = 0; j < cnodes[i].childNodes.length; j++) {
					if (cnodes[i].childNodes[j].nodeType == 8) {
						var js = cnodes[i].childNodes[j].data;
						eval (js);
						break;
					}
				}
				//if (j == cnodes[i].childNodes.length) alert ('no js found');
			}
			if (cnodes[i].nodeName == 'content') {
				for (var j = 0; j < cnodes[i].childNodes.length; j++) {
					if (cnodes[i].childNodes[j].nodeType == 8) {
						//alert ("found=" +cnodes[i].childNodes[j].data);
						tile.innerHTML = cnodes[i].childNodes[j].data
						break;
					}
				}
				//if (j == cnodes[i].childNodes.length) alert ('no html found');
			}
		}		
		//if (i == cnodes.length) alert ('no entries found');
	} catch (e) {
		alert ('errorka');
		//tile.innerHTML = text;		
	}
	//for (var q = 0; q < text.length; q++) if (text.charAt (q) == '\n') text = text.substr (0, q) + ' ' + text.substr (q + 1);
	//eval (doc2.documentElement.childNodes[1].childNodes[1].data);
	//alert (doc2.documentElement.childNodes[3].childNodes[1].data);
	//alert (text);
	
	//tile.innerHTML = text;
	xmlRequest = null;
	xmlTile = null;
	//if (fnInitTile != undefined) fnInitTile();
}





//<script>
//////////////////
// Helper Stuff //
//////////////////

// used to find the Automation server name
function getDomDocumentPrefix() {
	if (getDomDocumentPrefix.prefix)
		return getDomDocumentPrefix.prefix;
	
	var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
	var o;
	for (var i = 0; i < prefixes.length; i++) {
		try {
			// try to create the objects
			o = new ActiveXObject(prefixes[i] + ".DomDocument");
			return getDomDocumentPrefix.prefix = prefixes[i];
		}
		catch (ex) {};
	}
	
	throw new Error("Could not find an installed XML parser");
}

function getXmlHttpPrefix() {
	if (getXmlHttpPrefix.prefix)
		return getXmlHttpPrefix.prefix;
	
	var prefixes = ["MSXML2", "Microsoft", "MSXML", "MSXML3"];
	var o;
	for (var i = 0; i < prefixes.length; i++) {
		try {
			// try to create the objects
			o = new ActiveXObject(prefixes[i] + ".XmlHttp");
			return getXmlHttpPrefix.prefix = prefixes[i];
		}
		catch (ex) {};
	}
	
	throw new Error("Could not find an installed XML parser");
}

//////////////////////////
// Start the Real stuff //
//////////////////////////


// XmlHttp factory
function XmlHttp() {}

XmlHttp.create = function () {
	try {
		if (window.XMLHttpRequest) {
			var req = new XMLHttpRequest();
			
			// some versions of Moz do not support the readyState property
			// and the onreadystate event so we patch it!
			if (req.readyState == null) {
				req.readyState = 1;
				req.addEventListener("load", function () {
					req.readyState = 4;
					if (typeof req.onreadystatechange == "function")
						req.onreadystatechange();
				}, false);
			}
			
			return req;
		}
		if (window.ActiveXObject) {
			return new ActiveXObject(getXmlHttpPrefix() + ".XmlHttp");
		}
	}
	catch (ex) {}
	// fell through
	throw new Error("Your browser does not support XmlHttp objects");
};

// XmlDocument factory
function XmlDocument() {}

XmlDocument.create = function () {
	try {
		// DOM2
		if (document.implementation && document.implementation.createDocument) {
			var doc = document.implementation.createDocument("", "", null);
			
			// some versions of Moz do not support the readyState property
			// and the onreadystate event so we patch it!
			if (doc.readyState == null) {
				doc.readyState = 1;
				doc.addEventListener("load", function () {
					doc.readyState = 4;
					if (typeof doc.onreadystatechange == "function")
						doc.onreadystatechange();
				}, false);
			}
			
			return doc;
		}
		if (window.ActiveXObject)
			return new ActiveXObject(getDomDocumentPrefix() + ".DomDocument");
	}
	catch (ex) {}
	throw new Error("Your browser does not support XmlDocument objects");
};

// Create the loadXML method and xml getter for Mozilla
if (window.DOMParser &&
	window.XMLSerializer &&
	window.Node && Node.prototype && Node.prototype.__defineGetter__) {

	// XMLDocument did not extend the Document interface in some versions
	// of Mozilla. Extend both!
	XMLDocument.prototype.loadXML = 
	Document.prototype.loadXML = function (s) {
		
		// parse the string to a new doc	
		var doc2 = (new DOMParser()).parseFromString(s, "text/xml");
		
		// remove all initial children
		while (this.hasChildNodes())
			this.removeChild(this.lastChild);
			
		// insert and import nodes
		for (var i = 0; i < doc2.childNodes.length; i++) {
			this.appendChild(this.importNode(doc2.childNodes[i], true));
		}
	};
	
	
	/*
	 * xml getter
	 *
	 * This serializes the DOM tree to an XML String
	 *
	 * Usage: var sXml = oNode.xml
	 *
	 */
	// XMLDocument did not extend the Document interface in some versions
	// of Mozilla. Extend both!
	XMLDocument.prototype.__defineGetter__("xml", function () {
		return (new XMLSerializer()).serializeToString(this);
	});
	Document.prototype.__defineGetter__("xml", function () {
		return (new XMLSerializer()).serializeToString(this);
	});
}