//function test() {	alert("here");}

/*
ajaxRequestUrl: http://site.yours/ajax.php
reloadStr	  : url, targetId, method=POST/GET
formParamStr  : formId, submitName
formActionStr : 
*/
function ajaxChildRequest(ajaxRequestUrl, reloadStr, formParamStr, formActionStr, closeWindow) {
	closeWindow = closeWindow || "yes";
	parameterStr = parameterStr || "";	
	var parameters = getParametersMap(parameterStr);
	if (parameters["formId"]) {
		parameters = getFormParameters(parameters["formId"], parameters["submitName"]);
	} 
	
	window.opener.ajaxReloadElement(ajaxRequestUrl, url, method, reloadIdsStr, parameters);
	
	if (closeWindow == "yes") {
		window.opener.focus();
		window.close();
	}
}

function ajaxDeleteConfirm(ajaxRequestUrl, reloadStr, controlParamStr, reloadStr2) {

	if (typeof(ajaxRequestUrl) != "undefined") {
		var inputs = document.getElementsByTagName("input");
		var prepare = false;
		for (var i = 0 ; i < inputs.length; i++) {
			if (inputs[i].checked) {
				prepare = true;
				break;
			}
		}
		
		if ((prepare) && (confirm(" All selected items will be deleted! Do you want to continue?"))) {
			ajaxRequest(ajaxRequestUrl, reloadStr, controlParamStr, reloadStr2);
		}
	}
}


/*
ajaxRequestUrl: http://your.site/ajax.php
reloadStr	  : url, targetId, method=POST/GET
	+  	formId, submitName, resultId (default="action-result"), closeWindow=yes/no
toolsParamStr : formId, submitName
reloadStr2 	  : url, targetId, method=POST/GET
*/

function ajaxRequest(ajaxRequestUrl, reloadStr, controlParamStr, reloadStr2){			
	//alert(reloadIdsStr);	
	reloadStr = reloadStr || "";
	reloadStr2 = reloadStr2 || "";
	controlParamStr = controlParamStr || "";	
	var reloadParameters = getParametersMap(reloadStr);
	var reloadParameters2 = getParametersMap(reloadStr2);
	var controlParameters = getParametersMap(controlParamStr);		
	
	//url & targetId should be set!
	if ((typeof(reloadParameters["url"])=="undefined")
	 || (typeof(reloadParameters["targetId"])=="undefined")) {
	 	return;
	}		
			
	if ((typeof(reloadParameters["formId"])!="undefined") || (reloadStr2.length!=0)) {
		//if this is form request - possible only one reload, submiting this form 
		//and then others			
		var formParameters = getFormParameters(
			reloadParameters["formId"], reloadParameters["submitName"]);
			
		var reloadId = reloadParameters["targetId"];
		var url = reloadParameters["url"];
		
		if (typeof(reloadParameters["method"])!="undefined")
			var method = reloadParameters["method"];
		else 
			var method = (formParameters.length > 0) ? "POST" : "GET";
		
		var additionalParameters = new Array();
		additionalParameters["reload"] = reloadParameters2;

		additionalParameters["control"] = controlParameters;
		additionalParameters["resultId"] = 
			(typeof(reloadParameters["resultId"])!="undefined")
				? reloadParameters["resultId"] : "action-result";								
		additionalParameters["closeWindow"] = 
			(typeof(reloadParameters["closeWindow"])!="undefined")
				? reloadParameters["closeWindow"] : "no";				
		
		if ((reloadId) && (reloadId.length > 0)) {			
			ajaxReload(ajaxRequestUrl, url, method, reloadId, 
					additionalParameters, formParameters);
		}				
			
	} else {
		//if this isn't form - only reload
		ajaxReloadElements(ajaxRequestUrl, reloadParameters, controlParameters);
	} 
				
}


function ajaxReloadElements(ajaxRequestUrl, reloadParameters, controlParameters) {
	reloadParameters = reloadParameters || new Array();
	//alert(reloadParameters);
	var reloadIdsStr = reloadParameters["targetId"];
	var reloadIds = (reloadIdsStr) ? reloadIdsStr.split(" ") : new Array();	
	
	var method = (typeof(reloadParameters["method"])!="undefined") 
			? reloadParameters["method"] : "GET";
			
	var additionalParameters = new Array();		
	additionalParameters["control"] = controlParameters;		
				
	for (var i = 0; i < reloadIds.length; i++) {	
		var url = reloadParameters["url"];
		var reloadId = reloadIds[i];	
	
		if ((reloadId) && (reloadId.length > 0)) {							 
			ajaxReload(ajaxRequestUrl, url, method, reloadId, additionalParameters);
		}
	}
}

function ajaxReload(ajaxRequestUrl, url, method, targetId, 
				additionalParameters, formParameters) {

	ajaxRequestUrl = ajaxRequestUrl || "ajax.php";
	method = method || "GET";
	url = url || "";	
	targetId = targetId || "";	
	formParameters = formParameters || new Array();
	
	additionalParameters = additionalParameters || new Array();
	//alert(additionalParameters["control"]["jsTreeItemId"]);
	if (targetId.indexOf("/" > 0)) elTargetId = getBlockTargetId(targetId);
	else elTargetId = targetId;
	
	var ajax = new sack();
	ajax.setVar("data-type", "AJAX");	
	ajax.setVar("url", url);
	ajax.setVar("action-url", url);
	ajax.setVar("target-id", targetId);
		
	if (formParameters) {
		for(name in formParameters) ajax.setVar(name, formParameters[name]);			
	}
	//alert(additionalParameters["control"]["jsTreeItemId"]);		
	ajax.arguments = additionalParameters;
		
	ajax.requestFile = ajaxRequestUrl;
	ajax.method = method;	
	ajax.element = elTargetId;
	ajax.onLoading = whenLoading;
	ajax.onLoaded = whenLoaded;
	ajax.onInteractive = whenInteractive;	
	ajax.onCompletion = whenCompleted;
	ajax.runAJAX();
}


function ajaxChangeTabRequest(ajaxRequestUrl, url, method, targetId, tabsListId, selectedId, reload){
	
	reload = reload || false;
	tabsListId = tabsListId || "";
	selectedId = selectedId || "";

	if ((unselectAllTabs(tabsListId, selectedId)) || reload)
		ajaxReload(ajaxRequestUrl, url, method, targetId, new Array());
}

function unselectAllTabs(tabsListId, selectedId) {
	var element = document.getElementById(tabsListId);
	var selectedElement = document.getElementById(selectedId);
		
	var unselectedClassName = selectedElement.className;
	
	if (unselectedClassName.indexOf('selected') == 0) return false;
	
	var refs = element.getElementsByTagName('li');	
	
	for (var i = 0; i < refs.length; i++) {		
		if (refs[i].className != unselectedClassName) {	
			selectedClassName = refs[i].className;
			refs[i].className = unselectedClassName;
			selectedElement.className = selectedClassName;
			break;
		}
	}
	return true;		
}

function whenLoading(){
	var e = this.element;
	e.innerHTML = "-"; //sending data
}

function whenLoaded(){
	var e = this.element;
	e.innerHTML = "/"; //data has been sent
}

function whenInteractive(){
	var e = this.element;
	e.innerHTML = "|"; //receiving
}

function whenCompleted(){	
	//tinymce									   
	if ((typeof(tinyMCE)!="undefined") && (typeof(tinyMCEreinit)!="undefined")) {
		tinyMCE.init(tinyMCEreinit);
	}	
	//jstree
	//alert("1 : " + this.arguments["control"]["jsTreeItemId"]);
	if (typeof(this.arguments["control"])!="undefined") {
		var jsTreeItemId = this.arguments["control"]["jsTreeItemId"];				
		
		if (typeof(jsTreeReinit)!="undefined") {		
			//if (this.element==jsTreeReinit) {	
				var element = document.getElementById(jsTreeReinit);
				if (element) {		
					var uls = element.getElementsByTagName("ul");
					if ((uls) && (uls instanceof HTMLCollection)) {
						ul = uls.item(0);				
						if (ul) {ul.className = "tree-default";}
						$(function() {					  
							jsTree = $.tree_create();		
							jsTree.init($("#"+jsTreeReinit));				
							if ((jsTreeItemId) && (jsTreeItemId.length > 0)) {
								var item = document.getElementById(jsTreeItemId);
								if (item) {
									var res = jsTree.select_branch($("#"+jsTreeItemId));																
									item.className = "open";
									var hrefs = item.getElementsByTagName("a");
									if (hrefs.length) {
										hrefs[0].className = "clicked";										
									}
								} 		
							}						
						});											
					}
				}
			//}
		}		
	}	
	

	var closeWindow = (typeof(this.arguments["closeWindow"])!="undefined") 
			? this.arguments["closeWindow"] : "no";
	var actionOk = true;

	var actionResultId = (typeof(this.arguments["resultId"])!="undefined") 
			? this.arguments["resultId"] : "";
	
	if (actionResultId.length > 0) {
		var element = document.getElementById(actionResultId);		
		if (element) {
			var value = element.value;
			if (typeof(value)!="undefined") {
				if ((value != "false") || (value != "0") || (value.indexOf("error") >=0 )) {
					actionOk = false;
					closeWindow = "no";
				}
			}
		}
	}				
	
	
	//reload
	if (typeof(this.arguments["reload"])!="undefined") {
		var reloadParameters = this.arguments["reload"];
			
		var element = document.getElementById("reload-url");
		if (element) {reloadParameters["url"] = element.value;}
					
		////alert(jsTreeItemId);
		
		//uncomment for DEBUG!!!
		//alert(reloadParameters["url"]);
		
		if (actionOk) {
			if ((closeWindow=="yes") || (closeWindow=="true")) {
				window.opener.ajaxReloadElements(this.requestFile, reloadParameters, this.arguments["control"]);
				window.opener.focus();
				window.close();
			} else {
				ajaxReloadElements(this.requestFile, reloadParameters, this.arguments["control"]);
			}
		}
	} 
}

function getBlockTargetId (targetId) {

	targets = targetId.split("/");
	elTargetId = targets[0];
	if (targets.length > 1) {
		parentElement = getParent(targets[0]);
		
		elTargetId = replaceString(targetId,"/","-");
				
		for (var i = 0; i < targets.length; i++) {
			removeElId = targets[i];
			removeEl = document.getElementById(removeElId);	
			if (removeEl) {
				removeEl.innerHTML = "";
				if (i == 0) removeEl.id = elTargetId;
			 	else removeEl.id = "";
				removeEl.className = "";
				//alert(removeEl.className);
			}
		}
	}
	return elTargetId;
}

