/**
 * Mootools Extensions und allgemeine Funktionen auch für Ausgabeseiten
 */
/**
 * Logging in die Console von FireBug
 * @param string str Der Text, der Protokolliert werden soll
 * @param string level Der Loglevel (debug|info|warn|error)
 * @param boolean force Soll ein Alert ausgegeben werden, wenn die Konsole nicht verfügbar ist? 
 */
function devLog(str,level,force){
	if(force==undefined){ force=false; }
	var debugWindow=document.id('debug_window');
	/**
	 * Internet Explorer bzw. FireFox ohne der Erweiterung
	 * Firebug haben kein Element window.console
	 */
	if(window.console && window.console.log){
		if(level==undefined){ level='debug'; }
		/**
		 * Opera implementiert window.console für die Fehlerkonsole
		 * es gibt jedoch kein Element window.console.debug
		 */
		if(window.console.debug){
			if(level=='debug'){
				console.debug(str);
			}else if(level=='info'){
				console.info(str);
			}else if(level=='warn'){
				console.warn(str);
			}else if(level=='error'){
				console.error(str);
			}else{
				console.log(str); //Eigentlich auch wieder debug
			}
		}else{
			console.log(str); //Eigentlich auch wieder debug
		}
	}else{
		if(force==true && debugWindow==null){
			alert('Konsole nicht gefunden (FF mit FireBug). DEBUG: ' + str);
		}
	}
	if(debugWindow!=null){
		var text=new Element('pre',{
			'text':str,
			'styles':{
				'white-space':'pre-wrap'
			}
		});
		var d=new Element('div',{
			styles:{
				'display':'block'
			},
			'class':'debug_list'
		});
		text.inject(d);
		d.inject(debugWindow);
	}
}

var getTemplate=function(templateId,substitute){
	if(substitute==undefined){ substitute=false; }	
	var returnValue='';
	htTpl.each(function(item){
		if(item.id==templateId){
			if(substitute==true){
				returnValue=item.value.substitute(langTexts);
			}else{
				returnValue=item.value;
			}
		}
	});
	if(returnValue==''){ devLog('Kein Template mit Id ' + templateId + ' gefunden'); }
	return returnValue;
}

function getObjByName(parentObj,objName){
	devLog('getObjByName ' + parentObj.tagName + ' / ' + objName);
	var retObj=null;
	if(parentObj){
		//devLog('parentObjekt ist ok');
		if(parentObj.name && parentObj.name==objName){
			//devLog('das parentobject hat den namen');
			retObj=parentObj;
		}else if(parentObj.hasChildNodes()){
			//devLog('durchsuche childnodes');
			for(var i=0; i < parentObj.childNodes.length; i++){
				//devLog('vergleiche childNode ' + i);
				if(parentObj.childNodes[i].name){
					devLog('Vergleich: ' + parentObj.childNodes[i].name + '==' + objName);
				}else{
					devLog('parentObj.childNodes[' + i +'] Tag: ' + parentObj.childNodes[i].tagName + ' hat keinen Name');
				}
				if(parentObj.childNodes[i].name && parentObj.childNodes[i].name==objName){
					//devLog('childnode ' + i + ' passt');
					retObj=parentObj.childNodes[i];
					break;
				}else{
					//devLog('Rekursive Suche');
					retObj=getObjByName(parentObj.childNodes[i],objName);
					if(retObj!=null){ break; }
				}
			}
		}
	}
	//devLog('nichts gefunden');
	if(retObj!=null){ 
		devLog('getObjByName liefert ein Objekt'); 
	}else{
		devLog('getObjByName liefert null');
	}
	return retObj;
}

/**
 * Auslesen des aktuellen Seitennamens
 * Es werden der Pfad zur Datei, die Extension und eventuelle Parameter entfernt
 * @return string
 */
function getPage(){
	if(window.store==undefined){
		window.store={};
	}
	if(window.store.vars==undefined){
		window.store.vars={};
	}
	if(window.store.vars.page==undefined){
		window.store.vars.page='';
	}	
	if(store.vars.page==''){
		store.vars.page=location.href.replace(/^.+\//,'').replace(/\.(php|html)/,'').replace(/[?].+$/,'');
	}
	return store.vars.page;
}

/**
 * Funktion zum Formatieren eines Numerischen Wertes in eine Waehrung (Euro)
 * @param vPrice
 * @return string
 */
function getPriceFormat(vPrice){
	return '&euro; ' + vPrice.numberFormat(2,',','.');
}
/**
 * Funktion zum Formatieren eines Numerischen Wertes in eine Streckenangabe
 * @param {Float} vDistance - Strecke
 * @param {String} vUnit - Einheit der Strecke. Gesonderte Behandlung für Unit m (Meter)
 * @return string
 */
function getDistanceFormat(vDistance,vUnit){
	if(vUnit==undefined){ vUnit='m'; }
	if(vUnit=='m'){
		if(vDistance > 49999){
			vDistance=vDistance/1000;
			return vDistance.numberFormat(1,',','.') + ' km';
		}else if(vDistance > 999){
			vKm=(vDistance/1000).floor();
			vM=vDistance-vKm*1000;
			return vKm.numberFormat(0,',','.') + ' km ' + vM.numberFormat(0,',','.') + ' m';
		}else{			
			return vDistance.numberFormat(0,',','.') + ' m';
		}
	}else{
		return vDistance.numberFormat(0,',','.') + ' ' + vUnit;
	}
}

Number.implement({
	/**
	 * Property: numberFormat
	 * Format a number with grouped thousands.
	 * 
	 * Arguments:
	 * decimals, optional - integer, number of decimal percision; default, 2
	 * dec_point, optional - string, decimal point notation; default, '.'
	 * thousands_sep, optional - string, grouped thousands notation; default, ','
	 * 
	 * Returns:
	 * a formatted version of number.
	 * 
	 * Example:
	 * >(36432.556).numberFormat() // returns 36,432.56
	 * >(36432.556).numberFormat(2, '.', ',') // returns 36,432.56
	 */
	numberFormat : function(decimals, dec_point, thousands_sep) {
		decimals = Math.abs(decimals) + 1 ? decimals : 2;
		dec_point = dec_point || '.';
		thousands_sep = thousands_sep || ',';
		var matches = /(-)?(\d+)(\.\d+)?/.exec((isNaN(this) ? 0 : this) + ''); // returns matches[1] as sign, matches[2] as numbers and matches[3] as decimals
		var remainder = matches[2].length > 3 ? matches[2].length % 3 : 0;
		return (matches[1] ? matches[1] : '') + (remainder ? matches[2].substr(0, remainder) + thousands_sep : '') + matches[2].substr(remainder).replace(/(\d{3})(?=\d)/g, "$1" + thousands_sep) +
			   (decimals ? dec_point + (+matches[3] || 0).toFixed(decimals).substr(2) : '');
	},
	/**
	 * Liefert true wenn die Übergebene Zahl eine gerade Zahl ist, ansonsten false
	 * @return {Boolean} true bei gerader Zahl, false bei ungerader Zahl
	 */
	even: function(){
		if(this.toInt()%2 == 0){ return true; }else{ return false; }
	},
	/**
	 * Liefert true wenn die Übergebene Zahl eine ungerade Zahl ist, ansonsten false
	 * @return {Boolean} true bei ungerader Zahl, false bei gerader Zahl
	 */
	odd:function(){
		if(this.toInt()%2 == 0){ return false; }else{ return true; }
	}
});

Element.implement({
	hasEvent: function(eventType,fn) {
    	//get the element's events
    	var myEvents = this.retrieve('events');
    	//can we shoot this down?
    	return myEvents && myEvents[eventType] && (fn == undefined || myEvents[eventType].keys.contains(fn));
  	}
});

/**
 * @name basename
 * @function
 * @pararm {String} path Der Pfad einer Datei
 * Die Funktion liefert den Namen einer Datei ohne seinen Pfad zurück
 */
function basename(path){
	var bn=path.replace(/^.*[\/\\]/g, '');
	return bn;
}

/**
 * 
 */
function changePaste(){
	
}

function changeKeyCode(){
	if(window.event.keyCode==13){window.event.keyCode=9;}
}
	

