/* ------------------------
   common known variables 
   (like constants)
   ------------------------ */

var sAjaxLoaderSrc = '/totoya/cache/core/clib/admin/framework/skin/default/media/ajaxloader.gif';
var sAjaxLoaderImg = '<img src="'+sAjaxLoaderSrc+'">';
if(typeof YAHOO == "object") {
	var Dom = YAHOO.util.Dom,
	    Event = YAHOO.util.Event;
}
/* ------------------------
    onLoad-Handling
   ------------------------ */

var todoOnLoad = new Array();

function doOnLoad() {
    for(i=0; i<todoOnLoad.length; i++) {
        eval(todoOnLoad[i]);
    }
}
function addOnLoad(cmd) {
    todoOnLoad[todoOnLoad.length] = cmd;
}

window.onload = doOnLoad;


/* ------------------------
    onResize-Handling
   ------------------------ */

var todoOnResize = new Array();

function doOnResize() {
    for(i=0; i<todoOnResize.length; i++) {
        eval(todoOnResize[i]);
    }
}
function addOnResize(cmd) {
    todoOnResize[todoOnResize.length] = cmd;
}
window.onresize = doOnResize;


/* ------------------------
    standard functions lib
   ------------------------ */

function log(o) {
	if(typeof console == "object"){
		if(typeof console.log == "function") {
			top.console.log(o);
		}
	}
}

function _(id) {
    return document.getElementById(id);
}

function removeAllChildNodes(obj) {
	while(obj.firstChild) {
		obj.removeChild(obj.firstChild);
	}
}

// AJAX HANDLING
function convert2PostData(obj, aOuterElements) {
	var ret="";
	var seperator="";
	for(var i in obj) {
		if(typeof obj[i] == "function") {
			continue;
		}
		if(typeof obj[i] == "object" || typeof obj[i] == "array" ) {
			if(typeof aOuterElements != "array" && typeof aOuterElements != "object") {
				aOuterElements = new Array();
			}
			aOuterElements.push(i);
			ret += convert2PostData(obj[i], aOuterElements);
			aOuterElements.pop();
		} else {
			if(typeof aOuterElements == "array" || typeof aOuterElements == "object") {
				seperator="&";
				ret += seperator;
				for(var k in aOuterElements) {
					 if(k==0) {
						ret += aOuterElements[0];
					 }
					 else {
					 	ret += "["+aOuterElements[k]+"]";
					 }
				}
				ret += "["+i+"]";
			} 
			else {
				ret += seperator;
				ret += i;
			}
			ret += '=' + encodeURIComponent(obj[i]);
			seperator="&";
		}
	}
	delete aOuterElements;
	return ret;
}

function yuiAjaxRequest(sClass, sFunction, oData, oCallback) {
	if(typeof YAHOO == "object") {
		var sUrl = '/ajax/' + sClass + '/' + sFunction;
		return YAHOO.util.Connect.asyncRequest('POST', sUrl, oCallback, convert2PostData(oData));
	}
}

function parseAjaxResponse(o) {
	var data = eval('(' + o.responseText + ')');
	if(data.sFlag != "Error"){
		for(i in data.aDomHtml) {
			//log("changing innerHTML from "+data.aDomHtml[i].sId);
			_(data.aDomHtml[i].sId).innerHTML = data.aDomHtml[i].sHtml;
		}
		eval(data.sScripts);
	}else{
		alert(data.mData);
		return false;
	}
	return data.mData;
}

// CALLBACK HANDLING
function executeCallback(oCallbackObject, mAdditionalParam) {
	var ret;
	// no callback -> nothing to do!
	if(oCallbackObject == null) {
		return false;
	}
	
	// initialize CB Temp Store
	if(typeof oCallbackObject == "object") {
		var oTempStore = {
			"fFunction"	: oCallbackObject.fFunction,
			"oScope"	: oCallbackObject.oScope,
			"mParam"	: oCallbackObject.mParam
		};
		delete oCallbackObject;
		oCallbackObject = null;
	}
	else {
		var oTempStore = {
			"fFunction"	: oCallbackObject,
			"oScope"	: null,
			"mParam"	: {}
		};
	
	}
	
	// add additional param
	if(mAdditionalParam != null) {
		$.extend(oTempStore.mParam, mAdditionalParam);
	}
	
	// if there is a valid function -> execute callback!
	if(typeof oTempStore.fFunction == "function") {
		if(oTempStore.oScope) {
			ret = oTempStore.fFunction.apply(oTempStore.oScope, [oTempStore.mParam]);
		}
		else {
			ret = oTempStore.fFunction(oTempStore.mParam);
		}
	}
	return ret;
}


function cloneObject(oObj) {
	Object.prototype.clone = function() {
		var tmp = this.constructor();
		for(var i in this)  {
			if(typeof this[i] == "object" && this[i] != null) {
				tmp[i] = this[i].clone();
			}
			else {
		 		tmp[i] = this[i];
		 	}
		}
		return tmp;
	};
	var tmp = oObj.clone();
	delete Object.prototype.clone;
	return tmp;
}

function arrayIndexOf(oObject, sElement) {
		for(i in oObject) {
			if(oObject[i]==sElement) {
				return i;
			}
		}
		return -1;
	}














