function c5_noop() {}

function c5_FX_DURATION() { return 400; }

function c5_BORDERBUFFER() { return 5; }

function c5_getLeft(refObj) {
	xPos=refObj.offsetLeft;
	parentObj=refObj.offsetParent;
	while(parentObj != null) {xPos +=parentObj.offsetLeft;parentObj=parentObj.offsetParent}
	return xPos;
}

function c5_getTop(refObj) {
	yPos=refObj.offsetTop;
	parentObj=refObj.offsetParent;
	while(parentObj != null) {yPos +=parentObj.offsetTop;parentObj=parentObj.offsetParent}
	return yPos;
}

function c5_getPageOffset(win) {
	if(!win) win = window;
	var pos = {left:0,top:0};
	if(typeof win.pageXOffset != 'undefined') {
		// Mozilla/Netscape
		pos.left = win.pageXOffset;
		pos.top = win.pageYOffset;
	}
	else {
		var obj = (win.document.compatMode && win.document.compatMode == "CSS1Compat") ? win.document.documentElement : win.document.body || null;
		pos.left = obj.scrollLeft;
		pos.top = obj.scrollTop;
	}
	return pos;
}

function c5_addClass(element, value) {
	if (!element.className) {
		element.className = value;
	}
	else {
		var newClassName = element.className;
		newClassName += " ";
		newClassName += value;
		element.className = newClassName;
	}
}

function c5_printR(o, alertIt, indent) {
	if (typeof indent == "undefined")
		indent = "";
	var res = "";
	if (typeof o == "undefined")
		res = "undefined";
	else {
		var t = $type(o);
		var xDef = new Class({
			initialize: function(str){
				this.res = str;
			}
		});
		var x = new xDef('');
		if (t=="array" || t=="object" || t=="collection") {
			o.each(function(elem,i) {
				var t2 = $type(elem);
				if (t2=="array" || t2=="object" || t2=="collection" || t2=="element") {
					this.res += (indent+"["+i+"] ***"+t2+"***\n");
					this.res += c5_printR(elem, false, indent+"    ");
				}
				else {
					this.res += (indent+"["+i+"] "+elem+"\n");
				}
			}, x);
			res = x.res;
		}
		else
			res = ""+o;
	}
	if (alertIt)
		alert(res);
	else
		return res;
}

function c5_getPreviousElementFromDOM(referenceObj, mustHaveTagname/*=true*/) {
	if (typeof mustHaveTagname == "undefined")
		mustHaveTagname = true;
	var c;
	var prevObj;
	var parentObj = referenceObj.parentNode;
	for (c=0;c<parentObj.childNodes.length;c++) {
		if (mustHaveTagname && typeof parentObj.childNodes[c].tagName=="undefined")
			continue;
		if (parentObj.childNodes[c].id==referenceObj.id) {
			return prevObj;
		}
		prevObj = parentObj.childNodes[c];
	}
	return null;
}

function c5_getNextElementFromDOM(referenceObj, mustHaveTagname/*=true*/) {
	if (typeof mustHaveTagname == "undefined")
		mustHaveTagname = true;
	var c;
	var realc = 0;
	var f = -1;
	var nextObj = null;
	var parentObj = referenceObj.parentNode;
	for (c=0;c<parentObj.childNodes.length;c++) {
		if (mustHaveTagname && typeof parentObj.childNodes[c].tagName=="undefined")
			continue;
//alert(parentObj.childNodes[c] + " | " + parentObj.childNodes[c].tagName + " | " + parentObj.childNodes[c].className)
		if (parentObj.childNodes[c].id==referenceObj.id)
			f = realc+1;
		if (realc==f)
			nextObj = parentObj.childNodes[c];
		realc++;
	}
	if (f==-1)
		return null;
	else
		return nextObj;
}

function c5_debugTrace(str) {
	if ($('c5debugSpecial'))
		$('c5debugSpecial').innerHTML = str;
}

function c5_debugTraceAdd(str) {
	if ($('c5debugSpecial'))
		$('c5debugSpecial').innerHTML = $('c5debugSpecial').innerHTML+"<br>"+str;
}

function c5_encode(str) {
	var res = encodeURIComponent(str);
	res = res.replace("'", "%27");
	return res;
}

function c5_resizeLayerInWindow(layerName, minHeight, lowerOffset) {
	if (typeof(minHeight)=='undefined')
		minHeight = 100;
	if (typeof(lowerOffset)=='undefined')
		lowerOffset = 15;
	// mootools
	var ws = window.getSize();
	var oc = $(layerName).getCoordinates();
	var newHeight = Math.max(minHeight, ws.y - oc.top - lowerOffset);
	$(layerName).setStyle('height', newHeight);
}

/****************************************************************************************************
* LINK-POPUP FUNCS
****************************************************************************************************/

var c5_removeLinkPopupTimeout = -1;

function c5_generateLinkPopup(contentId) {
	if (typeof jQuery == "undefined")
		return;
	if (typeof jQuery('#c5content_'+contentId) == "undefined")
		return;
	if (c5_removeLinkPopupTimeout!=-1) {
		clearTimeout(c5_removeLinkPopupTimeout);
		c5_removeLinkPopupTimeout = -1;
		return;
	}
	jQuery('#c5globalLinkPopup').remove();
	var e = document.createElement("div");
	e.id = "c5globalLinkPopup";
	e.style.zIndex = 32000;
	e.style.position = 'absolute';
	e.style.display = 'none';
	e.innerHTML = jQuery('#c5content_'+contentId).html();
	jQuery(document.body).append(e);
	c5_repositionLinkPopup();
	jQuery('#c5globalLinkPopup').fadeIn();
}

function c5_repositionLinkPopup() {
	if (typeof jQuery('#c5globalLinkPopup') == "undefined")
		return;
	var OFF = 10;
	jQuery('#c5globalLinkPopup').css({
		'left':	(mouseX+OFF)+"px",
		'top': (mouseY+OFF)+"px"
	});
}

function c5_removeLinkPopup() {
	if (typeof jQuery('#c5globalLinkPopup') == "undefined")
		return;
	if (c5_removeLinkPopupTimeout!=-1) {
		clearTimeout(c5_removeLinkPopupTimeout);
		c5_removeLinkPopupTimeout = -1;
	}
	c5_removeLinkPopupTimeout = setTimeout('c5_removeLinkPopup2()', c5_FX_DURATION()/2+100);
}

function c5_removeLinkPopup2() {
	c5_removeLinkPopupTimeout = -1;
	//stm_hideLayer2('c5globalLinkPopup', c5_FX_DURATION()/2);
	if (typeof jQuery == "undefined")
		return;
	jQuery('#c5globalLinkPopup').fadeOut();
}

var MAX_DUMP_DEPTH = 10;

function c5_dumpObj(obj, name, indent, depth) {
	if (typeof indent == "undefined")
		indent = "";
	if (typeof depth == "undefined")
		depth = 0;
	if (typeof name == "undefined")
		name = obj.id;
	if (depth > MAX_DUMP_DEPTH) {
		return indent + name + ": <Maximum Depth Reached>\n";
	}
	if (typeof obj == "object") {
		var child = null;
		var output = indent + name + "\n";
		indent += "   ";
		for (var item in obj)
		{
			try {
				child = obj[item];
			} catch (e) {
				child = "<Unable to Evaluate>";
			}
			if (typeof child == "object") {
				output += c5_dumpObj(child, item, indent, depth + 1);
			} else {
				output += indent + item + ": " + child + "(" + typeof(child) + ")\n";
			}
		}
		return output;
	} else {
		return obj;
	}
}

/****************************************************************************************************
* C5-AJAX-LOADING
****************************************************************************************************/

var c5_ajaxLoadCounter = 0;
var c5_ajaxLoadCounterUpdated = 0;
var c5_ajaxLoadTimeout = -1;

function c5_showAjaxLoad() {
	if (c5_ajaxLoadTimeout!=-1)
		return;
	c5_ajaxLoadTimeout = 1;
	c5_showAjaxLoadRun();
}

function c5_showAjaxLayer() {
	c5_ajaxLoadCounter += 1;
	c5_showAjaxLoad();
}

function c5_hideAjaxLayer() {
	setTimeout("c5_hideAjaxLayer2()", 1000);
}

function c5_hideAjaxLayer2() {
	c5_ajaxLoadCounter -= 1;
}

function c5_showAjaxLoadRun() {
	setTimeout("c5_showAjaxLoadRun()", 200);
	if (c5_ajaxLoadCounter==0 && c5_ajaxLoadCounterUpdated==c5_ajaxLoadCounter)
		return;
	if (c5_ajaxLoadCounter<=0) {
		jQuery('#c5_ajax_loading').css({display:"none"});
	}
	else {
		jQuery('#c5_ajax_loading').css({display:"block", top:jQuery(document).scrollTop()+10});
	}
	c5_ajaxLoadCounterUpdated = c5_ajaxLoadCounter;
}

/****************************************************************************************************
* activeX activator, flash detector
****************************************************************************************************/

function c5_enableActiveX () {
	if (c5_getInternetExplorerVersion () != -1) {
		$each($$('.flash2activate'), function(e) {
			var html = e.innerHTML;
			e.innerHTML = html; // Write html back to container
		});
	}
}

function c5_getInternetExplorerVersion() {
	var rv = -1; // Return value assumes failure
	if (navigator.appName == 'Microsoft Internet Explorer') {
		var ua = navigator.userAgent;
		var re = new RegExp ("MSIE ([0-9]{1,}[\.0-9]{0,})");
		if (re.exec (ua) != null) {
			rv = parseFloat (RegExp.$1);
		}
	}
	return rv;
}

function c5_getFlashVersion() {
	try {
		try {
			var axo = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.6');
			try {
				axo.AllowScriptAccess='always';
			}
			catch(e) {
				return'6,0,0';
			}
		}
		catch(e) {}
		return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').replace(/\D+/g,',').match(/^,?(.+),?$/)[1];
	}
	catch(e) {
		try {
			if(navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin) {
				return(navigator.plugins["Shockwave Flash 2.0"]||navigator.plugins["Shockwave Flash"]).description.replace(/\D+/g,",").match(/^,?(.+),?$/)[1];
			}
		}
		catch(e) {}
	}
	return'0,0,0';
}

/****************************************************************************************************
* special trimmers
****************************************************************************************************/

function c5_leftTrim(s) {
	return(s.replace(/^\s+/,""));
}

function c5_rightTrim(s) {
	return(s.replace(/\s+$/,""));
}

function c5_trim(s) {
	return(s.replace(/\s+$/,"").replace(/^\s+/,""));
}

function c5_superTrim(s) {
	return(s.replace(/\s+/g," ").replace(/\s+$/,"").replace(/^\s+/,""));
}

function c5_make2Digits(n) {
	if (n<10)
		return "0"+n;
	else
		return n;
}

function c5_setNowForDate(formId, elementId, dateFormat) {
	var now = new Date();
	var res = dateFormat;
	res = res.replace(/d/, c5_make2Digits(now.getDate()));
	res = res.replace(/m/, c5_make2Digits(1+now.getMonth()));
	res = res.replace(/Y/, now.getFullYear());
	res = res.replace(/H/, c5_make2Digits(now.getHours()));
	res = res.replace(/i/, c5_make2Digits(now.getMinutes()));
	res = res.replace(/s/, c5_make2Digits(now.getSeconds()));
	var ob = null;
	eval("if (typeof document."+formId+" != 'undefined') ob = document."+formId+"."+elementId+";");
	if (ob == null || typeof ob == "undefined")
		ob = document.getElementById(elementId);
	eval("ob.value=res;");
}

function c5_showDatepickerForDate(formId, elementId, dateFormat) {
	var loc = {
		days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
		daysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
		daysMin: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
		months: ['January', 'February', 'March', 'April', 'Mai',  'June', 'July',  'September', 'October',  'November', 'December'],
		monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'Mai',  'Jun', 'Jul',  'Sep', 'Oct',  'Nov', 'Dec'],
		week: ['wk']
	};
	var lang2 = c5js_c5l().substring(0,2).toLowerCase();
	if (lang2=="de" || lang2=="at" || lang2=="ch") {
		loc = {
			days: ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'],
			daysShort: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
			daysMin: ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'],
			months: ['Januar', 'Februar', 'März', 'April', 'Mai',  'Juni', 'Juli', 'August', 'September', 'Oktober',  'November', 'Dezember'],
			monthsShort: ['Jan', 'Feb', 'Mrz', 'Apr', 'Mai',  'Jun', 'Jul', 'Aug', 'Sep', 'Okt',  'Nov', 'Dez'],
			week: ['wo']
		};
	}
	var now = new Date();
	var ob = null;
	eval("if (typeof document."+formId+" != 'undefined') ob = document."+formId+"."+elementId+";");
	if (ob == null || typeof ob == "undefined")
		ob = document.getElementById(elementId);
	jQuery(ob).DatePicker({
		date: jQuery(ob).val(),
		current: jQuery(ob).val(),
		format: dateFormat,
		onChange: function (formated, dates) {
			jQuery(ob).val(formated);
		},
		locale: loc
	});
	jQuery(ob).DatePickerShow();
}

/****************************************************************************************************
* jQuery Fixes
****************************************************************************************************/

// jQuery Position fix for chrome
jQuery.fn.stmPosition = function() {
	thisLeft = this.offset().left;
	thisTop = this.offset().top;
	thisParent = this.parent();
	parentLeft = thisParent.offset().left;
	parentTop = thisParent.offset().top;
	return {
		left: thisLeft-parentLeft,
		top: thisTop-parentTop
	}
}

