
// a post message cucc csak akkor muxik ha ez meg van adva!
var clientMsgPostURL = "";

// csinalj egy textarea-t es az id-je legyen debug!
var debugLogCounter = 0;
function debugLog(msg)
{
	var debArea = $('debug');
	if(debArea)
		debArea.value = debugLogCounter + ": " + msg + "\n" + debArea.value;
	debugLogCounter++;
}

// az uzenetet ajax-szal felkuldi a szerverre, ami lehet barmilyen log tipus
function postMessage(msg, msgType)
{
	//alert(clientMsgPostURL);
	if(clientMsgPostURL == '')
		return;
	
	if(msgType == undefined)
		msgType = "info";
	
	var navigInfo = new Array();
	navigInfo.push("request url: '"+location.href+"'");
	navigInfo.push("appCodeName: "+navigator.appCodeName);
	navigInfo.push("appMinorVersion: "+navigator.appMinorVersion);
	navigInfo.push("appName: "+navigator.appName);
	navigInfo.push("appVersion: "+navigator.appVersion);
	navigInfo.push("browserLanguage: "+navigator.browserLanguage);
	navigInfo.push("cookieEnabled: "+navigator.cookieEnabled);
	navigInfo.push("platform: "+navigator.platform);
	navigInfo.push("systemLanguage: "+navigator.systemLanguage);
	navigInfo.push("userAgent: "+navigator.userAgent);
	navigInfo.push("userLanguage: "+navigator.userLanguage);
	navigInfo = navigInfo.join("\n");
	
	params = new Hash();
	params.set("msg", msg);
	params.set("msgType", msgType);
	params.set("navigInfo", navigInfo);
	
	//alert("sending msg: url: "+clientMsgPostURL);
	var req = new Ajax.Request(clientMsgPostURL, {parameters: params, method: 'post'});
}

function postError(msg)
{
	msg += "\n------ stacktrace\n"+getStackTrace();
	postMessage(msg, "error");
}
function postDebug(msg)
{
	postMessage(msg, "debug");
}
function postInfo(msg)
{
	postMessage(msg, "info");
}
function postWarn(msg)
{
	msg += "\n------ stacktrace\n"+getStackTrace();
	postMessage(msg, "warn");
}


// prototype $()-ral keres, viszont ha nem talál küld hibát
function getElementWithId(elementId)
{
	var obj = $(elementId);
	if(obj)
		return obj;
	
	postError("element with elementId='"+elementId+"' not found!");
}


// prototype Array-t alakit normal array-ba
function prototypeArrayToNormalArray(protoArr)
{
	var arr = new Array();
	for(i=0; i<protoArr.length; i++)
	{
		arr.push(protoArr[i]);
	}
	
	return arr;
}



/**
 * A form elemeinek értékét egy hash (prototype api) objektumba rakja át.
 * @param formId
 * @return a hash objektum vagy null ha hiba történt
 */
function getFormElementsAsParamsHash(formId)
{
	var formObj = $(formId);
	if (formObj)
	{
		var params = new Hash();
		var elementCount = formObj.elements.length;
		for (var i=0; i<elementCount; i++)
		{
			var element = formObj.elements[i];
			if (element.type != "submit")
				params.set(element.name, element.value);
		}
		return params;
	}
	else
	{
		return null;
	}
}

/**
 * Sima form küldés.
 * @param formId
 */
function sendFormById(formId)
{
	//alert("sending form: "+formId);
	
	var formObj = $(formId);
	if(formObj)
		formObj.submit();
}

/**
 * Adott url-böl kiszedi a paramétereket és key=>value formában visszakapod egy Hash objektumban
 * @param url
 * @return Hash benne key=>value formában a paramok
 */
function getRequestParametersHashFromUrl(url)
{
	var params = new Hash();
	
	var questionMarkIndex = url.indexOf("?");
	var anchorStartIndex = url.indexOf("#");

	// kivágjuk a paramétereket!
	if(questionMarkIndex >= 0)
	{
		var paramsPartSubstring = null;
		if(anchorStartIndex >= 0)
			paramsPartSubstring = url.substring(questionMarkIndex + 1, anchorStartIndex);
		else
			paramsPartSubstring = url.substring(questionMarkIndex + 1, url.length);
		
		var paramsArray = paramsPartSubstring.split("&");
		for(var i=0; i<paramsArray.length; i++)
		{
			var paramString = paramsArray[i];
			
			// most az = mentén kell szétbontani
			var paramArray = paramString.split("=");
			if(paramArray.length > 2)
				// az érték részben volt = jel, úgyhogy ezeket össze kell vonni
				paramArray[1] = paramArray.slice(1).join("=");

			if(paramArray.length == 2)
				params.set(paramArray[0], paramArray[1]);
		}
	}
	
	return params;
}

/**
 * Fogja a formodat, a benne lévö elemeket hozzákombinálja a form action url-jéhez és get
 * formában küldi el
 * @param formId
 * @param doLocationReplace ha true akkor location replace van ha false akkor csak siman mint egy linkkattintás
 */
function sendFormByIdAsRequest(formId, doLocationReplace)
{
	var formObj = $(formId);
	if(formObj)
	{
		var formParams = getFormElementsAsParamsHash(formId);
		if(formParams != null)
		{
			var url = formObj.action;
			var questionMarkIndex = url.indexOf("?");
			var anchorStartIndex = url.indexOf("#");

			// param-ok hash-ben az url-böl
			var reqParams = getRequestParametersHashFromUrl(url);
			var keys = formParams.keys();
			for(var i=0; i<keys.length; i++)
			{
				reqParams.set(keys[i], formParams.get(keys[i]));
			}
			// mostanra az azonosak felülíródtak a formmal a többi meg bekerült
			
			var newUrl = null;
			var paramsString = reqParams.toQueryString();
			if(questionMarkIndex >= 0)
				newUrl = url.substring(0, questionMarkIndex);
			else
				newUrl = url;
			if(paramsString.length > 0)
				newUrl += "?" + paramsString;
			if(anchorStartIndex >= 0)
				newUrl += url.substring(anchorStartIndex, url.length);
			url = newUrl;
			
			//alert(url);
			
			if(doLocationReplace)
				document.location.replace(url);
			else
				document.location.href = url;
			
		}
	}
}

 
/**
 * POST-tal kuld el egy kerest adott url-re.
 * A trukk az hogy dinamikusan csinal egy formot, amit azutan elkuld...
 * @param url
 * @param postValuesHash
 * @return
 */
 function sendPostRequest(url, postValuesHash) {
	 
	 var formObj = document.createElement("form");
	 formObj.id = "_fake";
	 formObj.action = url;
	 formObj.method = "POST";
	 document.body.appendChild(formObj);
	 
	 var keys = postValuesHash.keys();
	 for(var i=0; i<keys.length; i++) {
		 var key = keys[i];
		 var value = postValuesHash.get(key);
		 
		 var fieldObj = document.createElement("input");
		 fieldObj.name = key;
		 fieldObj.value = value;
		 formObj.appendChild(fieldObj);
	 }

	 formObj.submit();
 }

/**
 * Visszaadja a browser ablak szélességét
 * @return int
 */
function getViewportWidth()
{
	 var viewportwidth;
	 
	 if (typeof window.innerWidth != 'undefined')
	 {
	      viewportwidth = window.innerWidth;
	 }
	// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
	 else if (typeof document.documentElement != 'undefined'
	     && typeof document.documentElement.clientWidth !=
	     'undefined' && document.documentElement.clientWidth != 0)
	 {
	       viewportwidth = document.documentElement.clientWidth;
	 }
	 // older versions of IE
	 else
	 {
	       viewportwidth = document.getElementsByTagName('body')[0].clientWidth;
	 }

	 return viewportwidth;
}

/**
 * Visszaadja a browser ablak magasságát
 * Greybox ablakra is mukodik!
 * @return int
 */
function getViewportHeight()
{
	 var viewportheight;
	 
	 if (typeof window.innerWidth != 'undefined')
	 {
	      viewportheight = window.innerHeight;
	 }
	// IE6 in standards compliant mode (i.e. with a valid doctype as the first line in the document)
	 else if (typeof document.documentElement != 'undefined'
	     && typeof document.documentElement.clientWidth !=
	     'undefined' && document.documentElement.clientWidth != 0)
	 {
	       viewportheight = document.documentElement.clientHeight;
	 }
	 // older versions of IE
	 else
	 {
	       viewportheight = document.getElementsByTagName('body')[0].clientHeight;
	 }
	 
	 return viewportheight;
}
 
 
//useful...
 function getStackTrace() {
 	var callstack = [];
 	var isCallstackPopulated = false;
 	try {
 		i.dont.exist += 0; // doesn't exist- that's the point
 	} catch (e) {
 		if (e.stack) { //Firefox
 			var lines = e.stack.split("\n");
 			for ( var i = 0, len = lines.length; i < len; i++) {
 				if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
 					callstack.push(lines[i]);
 				}
 			}
 			//Remove call to printStackTrace()
 			callstack.shift();
 			isCallstackPopulated = true;
 		} else if (window.opera && e.message) { //Opera
 			var lines = e.message.split("\n");
 			for ( var i = 0, len = lines.length; i < len; i++) {
 				if (lines[i].match(/^\s*[A-Za-z0-9\-_\$]+\(/)) {
 					var entry = lines[i];
 					// Append next line also since it has the file info
 					if (lines[i + 1]) {
 						entry += " at " + lines[i + 1];
 						i++;
 					}
 					callstack.push(entry);
 				}
 			}
 			//Remove call to printStackTrace()
 			callstack.shift();
 			isCallstackPopulated = true;
 		}
 	}
 	if (!isCallstackPopulated) { //IE and Safari
 		var currentFunction = arguments.callee.caller;
 		while (currentFunction) {
 			var fn = currentFunction.toString();
 			var fname = fn.substring(fn.indexOf("function") + 8, fn
 					.indexOf("("))
 					|| "anonymous";
 			callstack.push(fname);
 			currentFunction = currentFunction.caller;
 		}
 	}
 	return (callstack);
 }

// Prototype api-ban az Element.getStyle('id', 'margin-right') stringkent ezt adja: '7px' - logikusan...
// ez meg segit ebbol kiszedni a numerikus erteket...
function getStylePixelValue(styleReturned) {
	if(styleReturned.substring(styleReturned.length-2) != "px")
		return 0;
	return parseInt(styleReturned.substring(0, styleReturned.length-2));
}

// adott id-ju elemet lekeresi, es abban a html elemeket bejarva az utolso
// bekezdesrol stb. leveszi az also margot
 function removeContentLastMargin(containerElementId)
 {
 	var containerObj = $(containerElementId);
 	if(containerObj)
 	{
 		var childElements = containerObj.getElementsBySelector( 'p', 'li', 'table');
 		if(childElements.length > 0)
 		{
 			var lastElement = childElements[childElements.length - 1];
 			lastElement.setStyle({marginBottom: '0px'});
 		}
 	}
 }


/**
 * Kepeknel tudjuk hasznalni. Megadjuk mi a bounding box merete, ez meg kiszamolja a kep
 * uj mereteit aranytartoan. Ha a kep elfer a dobozban, akkor nem bantja a meretet.
 * 
 * @return Array bennez az uj szelesseg es magassag
 */
 /*
function scaleElementIfNeededKeepAspect(origWidth, origHeight, boxWidth, boxHeight)
{
	var newWidth = origWidth;
	var newHeight = origHeight;
	var doScale = false;

	var aspectRatio = origHeight / origWidth;
	
		if(scalingPolicy == "width" || scalingPolicy == "full")
		{
			// max szelesseg jatszik
			var maxWidth = getMaxElementWidth();
			//alert("maxWidth: "+maxWidth+", pic width: "+newWidth);
			
			if(maxWidth > 0 && newWidth > maxWidth)
			{
				// maximalunk vizszintesen
				newWidth = maxWidth;
				//newHeight = Math.round(newWidth * aspectRatio);
				newHeight = Math.floor(newWidth * aspectRatio);

				//alert("width scaled! maxWidth: "+maxWidth+", newWidth: "+newWidth+", newHeight: "+newHeight);
				
				doScale = true;
			}
		}
		if(scalingPolicy == "full")
		{
			// max magassag jatszik!
			var maxHeight = getMaxElementHeight();
			//alert("maxHeight: "+maxHeight+", newWidth: "+newWidth+", newHeight: "+newHeight);
			
			if(maxHeight > 0 && newHeight > maxHeight)
			{
				// maximalunk fuggoben
				newHeight = maxHeight;
				//newWidth = Math.round(newHeight / aspectRatio);
				newWidth = Math.floor(newHeight / aspectRatio);

				//alert("height scaled! maxHeight: "+maxHeight+", newWidth: "+newWidth+", newHeight: "+newHeight);
				
				doScale = true;
			}
		}
	
	if(doScale || elementType == "video")
		scaleElement(newWidth, newHeight);
	
	// ha van callback fuggveny akkor most jon
	if(typeof(elementScaleDone) == "function")
		elementScaleDone(newWidth, newHeight);
}

*/
 
