//############################## [CMS PORTAL] - AJAX ENGINE
//### ver. 1.0 [2009-03-10]
//###
//### Copyright by CN Design Marcin Czechowski
//###
//### cndesign.pl   biuro@cndesign.pl
//###
//### All rights reserved.
//############################################



var getHTTPObject = function()
{
 var xhr = false;

 if (window.XMLHttpRequest)
 {
  xhr = new XMLHttpRequest();
 }
 else if (window.ActiveXObject)
 {
  try
  {
   xhr = new ActiveXObject("Msxml2.XMLHTTP");
  }
  catch (e)
  {
   try
   {
	xhr = new ActiveXObject("Microsoft.XMLHTTP");
   }
   catch (e)
   {
	xhr = false;
   }
  }
 }
 return xhr;
};



var container, url, canvas, data, loading, callback, request;

//////// obiekt obsługujący żądania akajsowe
function Hijax()
{
	//// mechanizm wyzwalający żądanie np. formularz lub linki
	this.setContainer = function(value)
	{
		container = document.getElementById(value);
	};


	//// ścieżka do pliku na serwerze
	this.setUrl = function(value)
	{
		url = value;
	};
	

	//// fragment strony www ulegający aktualizacji
	this.setCanvas = function(value)
	{
		canvas = document.getElementById(value);
	};


	//// przechwytywanie i formatowanie danych wysyłanych do serwera
	this.captureData = function()
	{
		if (container.nodeName.toLowerCase() == "form")
		{
			var query = "";

			for (var i=0; i < container.elements.length; i++)
			{
				query += container.elements[i].name;
				query += "=";
				query += encodeURIComponent(container.elements[i].value);
				query += "&";
			}

			data = query;
			return !start();
		}
		else
		{
			var links = container.getElementsByTagName("a");

			for (var i=0; i < links.length; i++)
			{
				links[i].onclick = function()
				{
					var query = this.getAttribute("href").split("?")[1];
					url += "?"+query;

					return !start();
				};
			}
			
			links = null;
		}
	};


	//// funkcja loading wykonana w momencie rozpoczęcia żądania ajaksowego
	this.setLoading = function(value)
	{
	//	document.getElementById(value).innerHTML = "<div align=center><img src='/gfx/layout/loader.gif' alt='Proszę czekać...'></div>";

		box = document.getElementById(value);
		box.setAttribute("class","loading");
		box.setAttribute("className","loading");

		parent_box = box.parentNode;
		
		var loading_div = document.createElement("div");
		loading_div.setAttribute("id","loading_div");

        var image_div = document.createElement("div");
		image_div.setAttribute("id","image_div");

		var loading_img = document.createElement("img");
		loading_img.setAttribute("src","/gfx/layout/loading.gif");
		loading_img.setAttribute("alt","Proszę czekać...");

		box.insertBefore(loading_div, box.firstChild);
        loading_div.appendChild(image_div);

//        parent_box.insertBefore(loading_div, box);
//		parent_box.appendChild(loading_div);

		image_div.appendChild(loading_img);
	};
	

	//// funkcja wywoływana po zakończeniu żądania ajaksowego
	this.setCallback = function(value)
	{
		box = document.getElementById(value);
		parent_box = box.parentNode;

		loading_img = document.getElementById('loading_img');
		parent_box.removeChild(loading_img);

//		box.setAttribute("class","");
	};
}



// inicjacja ajaxa
var start = function()
{
 request = getHTTPObject();

 if (!request || !url)
 {
  return false;
 }
 else
 {
  initiateRequest();
 }
}


// initiateRequest
var initiateRequest = function()
{
	if (loading)
	{
		loading();
	}

	request.onreadystatechange = completeRequest;

	if (data)
	{
		request.open("POST", url, true);
		request.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		request.send(data);
	}
	else
	{
		request.open("GET", url, true);
		request.send(null);
	}
};


// completeRequest
var completeRequest = function()
{
	if (request.readyState == 4)
	{
		if (request.status == 200 || request.status == 304)
		{
			if (canvas)
			{
				canvas.innerHTML = request.responseText;
			}

			if (callback)
			{
//				setTimeout(callback(),3000);
				callback();
			}
		}
		else
		{
			alert("Błąd: " + request.status);
		}
	}
};








// recommend module
function recommend_go(lang)
{
	if (validate_recommend(lang))
	{
		var xhr = new Hijax();

		xhr.setContainer("recommend_form");
		xhr.setUrl("includes/recommend.include.ajax.php?recommend=send&l="+lang);

		xhr.captureData();

		xhr.setLoading("recommend_box");

//		xhr.setCanvas("recommend_box");
		xhr.setCanvas("image_div");

//		xhr.setCallback("recommend_box");
	}
}