// Common functions

function getCachedElement(elementID) {
	return document.getElementById(elementID);
}

inheritanceExtensions = { }	// namespace holder

inheritanceExtensions.extend = function(subClass, baseClass) {
   function inheritance() {
   }
   inheritance.prototype = baseClass.prototype;
   subClass.prototype = new inheritance();
   subClass.prototype.constructor = subClass;
   subClass.baseConstructor = baseClass;
   subClass.superClass = baseClass.prototype;
}

/*
function getFieldValue(aID) {
	var objField = document.getElementById(aID);
	if (objField != null) return escape(objField.value);
	 else return '';
}
*/

function extractValue(dataString, startPos) {
	if (startPos > 0) dataString = dataString.substring(startPos);
	var dataStringEnd = dataString.lastIndexOf('";');
	if (dataStringEnd > 0) dataString = dataString.substring(0, dataStringEnd)
	 else dataString = '';
	return dataString;
}

function getResponseBody(responseHtml) {
	var bodyStart = responseHtml.indexOf('<body>');
	var bodyEnd = responseHtml.indexOf('</body>');
	if (bodyStart > 0 && bodyEnd > bodyStart) responseHtml = responseHtml.substring(bodyStart+6, bodyEnd);
	return responseHtml;
}

function getReturnedValue(valueID, responseLines) {
	if (valueID == null || responseLines == null) return '';
	valueID += '="';
	var valueIDlength = valueID.length;
	for (var i=0; i<responseLines.length; i++) {
		if (responseLines[i].substring(0, valueIDlength) == valueID) return extractValue(responseLines[i], valueIDlength);
	}
	return '';	// Tole je treba mal bolj razmislit in pretestirat... Preveri, ce null evaluates isto kot Bool(false) in Int(0) ali ne... Poleg tega je verjetno ni pametneje, da vrnemo prazen string (''), lahko pa dodamo še en optional parameter defaultValue in ce vrednost ne obstaja, vrnemo njega.
				// Ko tole spreminjaš, preveri tudi vse vrstice po strani, ki uporabljajo odgovor te funkcije; ce ga bodo tudi po novem pravilno razumele...
}

function responseStatus(responseLines, expectedResult) {
	var aStatus = getReturnedValue('STATUS', responseLines);
	if (aStatus == expectedResult) return true;
	 else return false;
}

function isArray(aObject) {
	if (aObject == null) return false;
	return (aObject.constructor.toString().indexOf("Array") == -1)?false:true;
}

function ajaxObject(url, callbackFunction) {
	var objAjax = this;
	this.updating = false;
	this.abort = function() {
		if (objAjax.updating) {
			objAjax.updating = false;
			objAjax.AJAX.abort();
			objAjax.AJAX = null;
		}
	}
	this.update = function(passData, postMethod, errorIfBusy) {
		if (objAjax.updating) {
			if (errorIfBusy != null) alert(errorIfBusy);
			return false;
		}
		objAjax.AJAX = null;
		if (window.XMLHttpRequest) objAjax.AJAX = new XMLHttpRequest();
		 else objAjax.AJAX = new ActiveXObject("Microsoft.XMLHTTP");
		if (objAjax.AJAX == null) return false;
		 else {
			objAjax.AJAX.onreadystatechange = function() {
				if (objAjax.AJAX.readyState == 4) {
					objAjax.updating = false;
					objAjax.callback(objAjax.AJAX.responseText, objAjax.AJAX.status, objAjax.AJAX.responseXML);
					objAjax.AJAX = null;
				}
			}
			objAjax.updating = new Date();
			if (isArray(passData)) passData = this.passDataToString(passData);
			var uri=urlCall+'?ajaxCounter='+objAjax.updating.getTime();
			if (/post/i.test(postMethod)) {
				objAjax.AJAX.open("POST", uri, true);
				objAjax.AJAX.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				objAjax.AJAX.setRequestHeader("Content-Length", passData.length);
				objAjax.AJAX.send(passData);
			}
			else {
				objAjax.AJAX.open("GET", uri+'&'+passData, true);
				objAjax.AJAX.send(null);
			}
			return true;
		 }
	}
	this.passDataToString = function (pvPairs) {
		var postData = '';
		for (var param in pvPairs) {
			if (postData != '') postData += '&';
			postData += param + '=' + encodeURIComponent(pvPairs[param]);
		}
		return postData;
	}

	var urlCall = url;
	this.callback = callbackFunction || function () { };
}

