function ajaxCreateObject()
{
	var aoVer = ["MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp","Microsoft.XMLHttp"]; 
	if(typeof ActiveXObject != "undefined") { 
		for (var i = 0; i < aoVer.length; i++) { 
			try { return new ActiveXObject(aoVer[i]); } 
			catch (e) {} 
		}
	} else if (typeof XMLHttpRequest != "undefined") { 
		try { return new XMLHttpRequest(); } 
		catch(e) {} 
	} else {
		throw new Error("Could not create XML HTTP Request.");
	}
	
	return new Error("Could not create XML HTTP Request.");
}

function ajaxQueryString(formElements)
{
	var aParam = new Array(); 
	
	if (formElements != '') {
		var element = formElements.split(',');
		
		// create string from FORM elements which will be used in a URL
		for (var i=0; i < element.length; i++ ) {
			//alert(element[i]);
			if (document.getElementById(element[i])) {
				var sParam = encodeURIComponent(element[i]) + '=' + encodeURIComponent(document.getElementById(element[i]).value);
				aParam.push(sParam);
			}
		}
	}
	
	return aParam.join("&"); 
}

function ajaxRequest(ajaxObject, method, callScript, callFunction, formElements, forwardElements, cacheControl)
{
	// Check for parameters existence
	if (!ajaxObject)			return false;
	if (!method)				method			= 'GET'; else method = method.toUpperCase(); // set method to upper case
	if (!callScript)			callScript		= 'ajaxscript.php';
	if (!callFunction)			callFunction	= 'ajaxFormValidate';
	if (!formElements)			formElements	= '';
	if (!forwardElements)		forwardElements	= '';
	if (cacheControl && 
		cacheControl == 'true')	cacheControl = true; else cacheControl = false;
	
	// create URL
	var url	= callScript + "?timeStamp=" + new Date().getTime();
	
	switch(method) {
		case 'GET':
			if (forwardElements != '')
				var queryString = url + "&" + forwardElements;
			else
				var queryString = url + "&" + ajaxQueryString(formElements);
			
			ajaxObject.open("GET", queryString, true);
			ajaxObject.onreadystatechange = eval(callFunction);
			if (cacheControl) 
				ajaxObject.setRequestHeader("Cache-Control:", "no-cache"); // Do not use Cache for this request
			ajaxObject.send(null);
			break;  
		case 'POST':
			if (forwardElements != '')
				var queryString = forwardElements;
			else
				var queryString = ajaxQueryString(formElements);
		
			ajaxObject.open("POST", url, true);
			ajaxObject.onreadystatechange = eval(callFunction);
			ajaxObject.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			if (cacheControl) 
				ajaxObject.setRequestHeader("Cache-Control:", "no-cache"); // Do not use Cache for this request
			ajaxObject.send(queryString);
			break;
		case 'HEAD':
			break;
		default:
			// code to be executed if method is different from case GET, POST and HEAD
	}
	
	return true;
}


// funkcije koje s startuju u zavisnosti od akcije


function ajaxFormValidate(ajaxObject)
{
	if (!ajaxObject) return false;
	switch(ajaxObject.readyState) {
		case 0 : // Uninitialized
			break;
		case 1 : // Loading
			break;
		case 4 : // Complete
			if(ajaxObject.status == 200) {
				var responseType = oXmlHttp.getResponseHeader("Content-Type"); 
				if (responseType == "text/xml") { 
					var returnedData = ajaxObject.responseXML;
				} else if (responseType == "text/plain") { 
					var returnedData = ajaxObject.responseText;
				} else { 
					alert("Unexpected content received."); 
				} 
			}
			break;
	}
	
	return true;
}

function ajaxCheckHeader(ajaxObject)
{
	if (!ajaxObject)	return false;
	if(ajaxObject.readyState == 4) {
		if(ajaxObject.status == 200) {
			var sHeaders = oXmlHttp.getAllResponseHeaders(); 
			var aHeaders = sHeaders.split(/\r?\n/); 
			for (var i=0; i < aHeaders.length; i++) alert(aHeaders[i]); 
		}
	}
	
	return true;
}


/*
===================
OPIS FUNKCIONISANJA
===================

Skript je napravnjen da je moguce kreirati vise AJAX objekata na jednoj strani.

AJAX objekat se kreira funkcijom:

		var xmlHttp = ajaxCreateObject();
		
Aktiviranje akcije putem AJAX-a vrsi se na taj nacin sto se pozove funkcija ajaxRequest() 
u okviru nekog dogadjaja i proslede odgovarajuci parametri:

		onclick="ajaxRequest(ajaxObject, method, callScript, callFunction, formElements, cacheControl)"
		
Nisu svi parametri funkcije ajaxRequest() obavezni. Njihov opis je sledeci:
	
	- ajaxObject 	- Kreirani AJAX objekat, u primeru je to "xmlHttp" (OBAVEZAN)
	- method		- metoda kako ce se proslediti podaci (GET, POST, HEAD) 
					  ako se ne navede podrazumeva se GET metoda
	- callScript	- Naziv skripta (PHP, ASP...) koji se poziva ovom funkcijom
					  ako se ne navede podrazumeva se "ajaxscript.php"
	- callFunction	- Naziv funkcije koja ce se aktivirati da obradi informacije koje je skript vratio
					  ako se ne navede podrazumeva se "ajaxFormValidate"
	- formElements	- ukoliko je potrebno proslediti elemente forme navesti ID elemenata razdvojenih zarezom
					  ako se ne navede podrazumeva se da se ne prosledjuju podaci forme
	- forwardElements-ukoliko je potrebno proslediti elemente koji nisu u formi, vec se generisu u letu
					  navesti podatke, kao sto se prosledjuju GET metodom. Npr.:
					  'prom1=vred1&prom2=vred2&prom3=vred3'
	- cacheControl	- da li isprazniti "cache" i forsirati stalno nove podatke (sporije)
					  ako se ne navede podrazumeva se da se koristi 'cache"
					  vrednosti mogu biti 'true' i 'false'

*/



/*
	PROVERA POSTOJANJA FAJLA
*/
function isFileExists(ajaxObject, chkFile)
{	
	if (!ajaxObject) return false;
	try {    
		ajaxObject.open("HEAD", chkFile, false);
		ajaxObject.send(null);
		return (ajaxObject.status == 200) ? true : false;
    } catch(er) {
		return false;          
	}
}


/*
	Funkcija koja poziva objekat kreiran za FF ili IE
*/
function get_object(which)
{
	if (document.all)
		return eval ("document.all." + which);
	else
		return eval ("document.getElementById('" + which + "')");
}

/*
	Funkcija uzitava JavaScript fajl, dinamicno na izvornu stranu
*/
function loadJSFile(fileName)
{
	var scriptPlace			= document.createElement('script');
	scriptPlace.type		= 'text/javascript';
	scriptPlace.src			= fileName;
	document.getElementsByTagName('head')[0].appendChild(scriptPlace);
}

/*
	Funkcija uzitava JavaScript sadrzaj, dinamicno na izvornu stranu
*/
function loadJSContent(content)
{
	var scriptPlace			= document.createElement('script');
	scriptPlace.type		= 'text/javascript';
	scriptPlace.innerHTML	= content;
	document.getElementsByTagName('head')[0].appendChild(scriptPlace);  
}

function array2string(anArray, delimiter)
{
	var returnString = '';
	for(var i=0; i<anArray.length; i++) {
		returnString += anArray[i] + delimiter;
	}
	
	return returnString;
}