var AjaxIsRunning = false;

// ------------------------------------------
// freemap ajax helper functions
// ------------------------------------------
// Options: 
// TargetId  - elementid
// Callback
// CallbackFailed
// PostParams = name=111&help=abc
// PostForm
// BeforeHTML
// AfterHTML
// FailedHTML
// NoProgress - true
function Ajax(URL, Options) {
	var request = null;
	AjaxIsRunning = true;
	if (!Options['BeforeHTML'])	Options['BeforeHTML'] = "";
	if (!Options['AfterHTML'])	Options['AfterHTML'] = "";
	if (!Options['FailedHTML'])	Options['FailedHTML'] = "";
	if (!Options['TargetId'])	Options['TargetId'] = "";
	if (!Options['NoProgress'])	Options['NoProgress'] = false;
	// 
	if (Options['TargetId'] != "") {
		if (typeof ThemeOpenArea == "function") {
			Options['TargetId'] = ThemeOpenArea(Options['TargetId'], URL, Options);
		}
	}
	//
	if (Options['PostForm']) {
		var f = document.getElementById(Options['PostForm']); 
		var Params = "";
		for( var i = 0; i < f.elements.length; i++ ) { 
			if (f.elements[i].type == "checkbox") {
				if (f.elements[i].checked) {
					Params += ((Params == "") ? "":"&") + f.elements[i].name + '=' + encodeURI(f.elements[i].value);
				}
			} else {
				Params += ((Params == "") ? "":"&") + f.elements[i].name + '=' + encodeURI(f.elements[i].value);
			}
		}	 
		if (!Options['PostParams']) {
			Options['PostParams'] = "";
		}
		Options['PostParams'] = ((Options['PostParams'] == "") ? "":"&") + Params;
	}
	if (Options['PostParams']) 
		Method = "POST";
	else
		Method = "GET";
	//
	try { 
		request = new XMLHttpRequest();
	} catch(e) {
		try { 
			request = new ActiveXObject('Microsoft.XMLHTTP'); 
		} catch(e) {
		}
	}
	var Text = "";
	if (request != null) {
		request.onreadystatechange = function() {
			if (request.readyState == 4) {
				if (request.status == 200) {
					Text = RemoveUTF8Header(request.responseText);
					if (Options['Callback']) {
						Text = Options['Callback'](Text);
					}
					if (Options['TargetId'] != "") {
						document.getElementById(Options['TargetId']).innerHTML = Options['BeforeHTML'] + Text + Options['AfterHTML'];
						runScripts( document.getElementById(Options['TargetId']));
					}			
				} else {
					if (Options['CallbackFailed']) {
						Text = Options['CallbackFailed'];
					}
					if (Options['TargetId'] != "") {
						document.getElementById(Options['TargetId']).innerHTML = Options['FailedHTML'];
					} else {
						alert("Problem retrieving XML data");
					}
				}
				AjaxIsRunning = false;
			} 
		}
	}
	
	if ((Options['TargetId'] != "") && (!Options['NoProgress'])) {
		ele = document.getElementById(Options['TargetId']);
		if (ele) 
		    document.getElementById(Options['TargetId']).innerHTML = "<img src='./img/loader.gif' alt='' />";
		   else
		    alert("Ajax - element " + Options['TargetId'] + " doesn't exists !");
	}
	request.open(Method,  URL + '&Ajax=' + Options['TargetId'], true);
	if (Options['PostParams']) {
		request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		request.setRequestHeader("Content-length", Options['PostParams'].length);
		request.setRequestHeader("Connection", "close");	
		request.send(Options['PostParams']);
	} else {
		request.send(null);
	}
}

function Sjax(URL, Options) {
    if (!Options['TargetId'])	Options['TargetId'] = "";
    
    if (window.XMLHttpRequest) {                    
        AJAX = new XMLHttpRequest();                
    } else {                                        
        AJAX = new ActiveXObject("Microsoft.XMLHTTP");
    }                                                 
    if (AJAX) {                                       
        AJAX.open("GET", URL, false);                             
        AJAX.send(null);                                                                      
        Text = AJAX.responseText;                    
	if (Options['TargetId'] != "") {
		if (typeof ThemeOpenArea == "function") {
			Options['TargetId'] = ThemeOpenArea(Options['TargetId'], URL, Options);
		}
	}
	if (Options['TargetId'] != "") {
	    document.getElementById(Options['TargetId']).innerHTML = Text;
	    runScripts(document.getElementById(Options['TargetId']));
	}			
					                                         
        return Text;                                                                          
    } else {                                                                                  
        return false;                                                                         
    }              
}

 
//function ajaxCallback() {
//	div.innerHTML= request.responseText;
//	runScripts(div); //run all scripts now contained in the target div element
//}

function runScripts(e) {
	if (e.nodeType != 1) return; //if it's not an element node, return

	if (e.tagName.toLowerCase() == 'script') {
		eval(e.text); //run the script
	} else {
		var n = e.firstChild;
		while ( n ) {
			if ( n.nodeType == 1 ) {
				runScripts( n ); //if it's an element node, recurse
			}
			n = n.nextSibling;
		}
	}
}
