/*/////////////////////////////////////////////////////////////////////////////////
Javascript Library
Version 1.80
Copyright by Net Communication Management
/////////////////////////////////////////////////////////////////////////////////*/
/*/////////////////////////////////////////////////////////////////////////////////
         DomReadyFunctions (wird aufgerufen sobald das js geladen wurde)
	im Header muss stehen: var drf=new Array();
	Beispiel: drf.push(function(){
		alert('Diese Funktion Wird Aufgerufen, sobald das Dokument geladen wurde');
	});
	Warum?
		Da das JavaScript erst am Ende des Dokumentes geladen wird, sind im Body 
		auch keine Funktionen verfügbar. und window.addEvent gibt es auch nocht 
		nicht. Vorsicht! document.write-Funktionen sollten nicht verwendet werden!
/////////////////////////////////////////////////////////////////////////////////*/
/**
 * @projectDescription DomReadyFunctions (wird aufgerufen sobald das js geladen wurde)
 */
if(typeof drf!="undefined"){
	drf.each(function(el){
		el();
	});
	drf = new Array();
}

/*/////////////////////////////////////////////////////////////////////////////////
                                       popup
	öffnet ein neuse Fenster,
	obj = Link der das Fenster öffnet
	width = Breite des Fensters
	height = Höhe des Fensters
	Beispiel:
		1. <a href="http://www.example.com" onclick="return popup(this,200,150);">Link</a>
		2. <a href="http://www.example.com" onclick="return popup(this);">Link</a>
/////////////////////////////////////////////////////////////////////////////////*/
/**
 * @projectDescription öffnet ein neues Browserfenster falls möglich, ansonsten wird die url des Links direkt aufgerufen.
 * @param {LinkObject} obj
 * @param {Breite} w
 * @param {Hoehe} h
 * @return {Boolean} 
 */

function popup(obj,width,height) {
	var url = $(obj).getProperty('href');
	if (!url || url==""){
		return true;
	}
	if(width && height){
		var args = 'width='+width+',height='+height+',resizable=yes';
	}
	else{
		var args = 'resizable=yes,hotkeys=yes,location=yes,menubar=yes,scrollbars=yes,status=yes,toolbar=yes';
	}
	var pop = window.open(url,'popwin_'+new Date().getTime(),args);
	return (pop) ? false : true;
}

/*/////////////////////////////////////////////////////////////////////////////////
                                 parseExternalLinks
	öffnet Links mit target="_blank" oder rel="external" in einem neuen Fenster
/////////////////////////////////////////////////////////////////////////////////*/
/**
 * @projectDescription öffnet Links mit target="_blank" oder rel="external" in einem neuen Fenster (sollte in der loadComplete-Funktion aufgerufen werden)
 */
function parseExternalLinks(){
	$$('a[rel=external]').each(function(e){
		e.setProperty('target','_blank');
	});
}

/*/////////////////////////////////////////////////////////////////////////////////
                                 Ajax - getsrc
	Diese Funktion ist veraltet, verwende stattdessen die Mootools Ajax-Class!!
	getsrc füllte den elementContainer mit dem Quellcode von der angegebenen url
	
	url = der url der geladen werden soll
	elementContainer = das Element oder die id des Elements in das der ankommende 
	                   Quelltext geschrieben werden soll
	statusContainer = das Element oder die id des Elements in dem die Loading-
	                  message ausgegeben werden soll
	callBackFunc = die Funktion die onLoadComplete ausgeführt werden soll
	
	Beispiel:
		<a href="datei.htm" onclick="getsrc(this.href,'ec','sc',ajfunc);return false;">Link</a>

/*/////////////////////////////////////////////////////////////////////////////////
function getsrc(url,elementContainer,statusContainer,callBackFunc){

	var req = new Request({
                
            url: url,
            
			onRequest: function(txt){
				if($(statusContainer)){
					$(statusContainer).innerHTML = '<blink>Loading...<\/blink>';
				}
				else{
					$(elementContainer).innerHTML = '<blink>Loading...<\/blink>';
				}
			},
			
            onSuccess: function(txt){
               if($(statusContainer)){
					$(statusContainer).innerHTML = '&nbsp;';
				}

			   $(elementContainer).innerHTML = txt;
               
			   if(callBackFunc){
					callBackFunc();
			   }
            }
        });

        req.send();
}


/*/////////////////////////////////////////////////////////////////////////////////
                                Ajax - postform
    Diese Funktion ist veraltet, verwende stattdessen die Mootools Ajax-Class!!
	postform schickt eine Form per method "post" an den angegebenen url und gibt 
	den Response in den elementContainer aus

	url = der url der geladen werden soll
	formid = das Element oder die id des Elements dessen Formularfelder geschickt 
	         werden sollen
	elementContainer = das Element oder die id des Elements in das der ankommende 
	                   Quelltext geschrieben werden soll
	statusContainer = das Element oder die id des Elements in dem die Loading-
	                  message ausgegeben werden soll
	callBackFunc = die Funktion die onLoadComplete ausgeführt werden soll
	
	Beispiel:
		<form action="datei.php" onsubmit="postform(this.action,this,'ec','sc',ajfunc);return false;">
	
/////////////////////////////////////////////////////////////////////////////////*/
function postform(url,formid,elementContainer,statusContainer,callBackFunc){
	var getSrcAjax = new Ajax(url, {update:$(elementContainer), data:$(formid), method:'post'});
	if($(statusContainer)){
		getSrcAjax.statusContainer = statusContainer;
	}
	getSrcAjax.addEvent('onComplete',(function(){
		if($(this.statusContainer)){
			$(this.statusContainer).setHTML('&nbsp;');
		}
	}).bind(getSrcAjax));
	if($type(callBackFunc)=='function'){
		getSrcAjax.addEvent('onComplete',callBackFunc);	
	}
	getSrcAjax.request();
	if($(statusContainer)){
		$(statusContainer).setHTML('<blink>Loading...<\/blink>');
	}
	else{
		$(elementContainer).setHTML('<blink>Loading...<\/blink>');
	}
	return getSrcAjax;
}

/*/////////////////////////////////////////////////////////////////////////////////

                                    JS Kalender
	Beispiel:
		kalender = new Calender(document.getElementById('jscalender'), 'de');
		kalender.callBackFunction = function(tag,monat,jahr){
			document.forms[0].vdd.value = tag;
			document.forms[0].vmm.value = monat;
			document.forms[0].vyy.value = jahr;
			kalender.hide();
		}
	callBackFunction wird aufgerufen wenn auf ein Datum geklickt wird
/////////////////////////////////////////////////////////////////////////////////*/
/**
 * @projectDescription JS Kalender, callBackFunction wird aufgerufen wenn auf ein Item geklickt wird
 * @param {String} obref
 * @param {String} lang
 */
function Calender(obref, lang, now, von_arr, bis_arr, valid_week_days){
	var self = this;
	var locked = false;
	this.obref = obref;
	this.day_names_l = new Array();
	this.month_names_l = new Array();
	this.day_names_l['de'] = new Array('Mo','Di','Mi','Do','Fr','Sa','So');
	this.month_names_l['de'] = new Array('Jänner','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember');
	this.day_names_l['en'] = new Array('Mo','Tu','We','Th','Fr','Sa','Su');
	this.month_names_l['en'] = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
	this.day_names_l['fr'] = new Array('Lu','Ma','Me','Je','Ve','Sa','Di');
	this.month_names_l['fr'] = new Array('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre');
	this.day_names_l['it'] = new Array('Lun','Mar','Mer','Gio','Ven','Sab','Dom');
	this.month_names_l['it'] = new Array('gennaio','febbraio','marzo','aprile','maggio','giugno','luglio','agosto','settembre','ottobre','novembre','dicembre');
	this.day_names = this.day_names_l[lang];
	this.month_names = this.month_names_l[lang];
	this.days = new Array();
	this.now = now; /* Wird von PHP gesetzt */
	this.nowtime = 0;
	this.von_arr = von_arr;
	this.bis_arr = bis_arr;
	this.valid_week_days = valid_week_days; 
	// umrechnen von 7 auf 0 für sonntag
	if(this.valid_week_days){
		for(i=0;i<this.valid_week_days.length;i++){
			this.valid_week_days[i] = this.valid_week_days[i] < 7 ? this.valid_week_days[i] : this.valid_week_days[i]-7;
		}
	}
        
	/**
	 * @projectDescription initialisiert den Kalender und befüllt den Container mit HTML-Code
	 */
	this.init = function(){
		$(document.body).addEvent('click', this.bodyClick.bind(this));
		$(this.obref).addEvent('click', this.selfClick.bind(this));
		html_output = '<div class="jsc_head"><a class="jsc_back" href="javascript:void(0);">&laquo;</a><h2></h2><a class="jsc_next" href="javascript:void(0);">&raquo;</a></div>\n';
		html_output += '<div class="jsc_body">\n';
		for(i=0;i<7;i++){
			html_output += '<span>' + self.day_names[i] + '</span>\n';
		}
		zw=0;
		for(i=0;i<41;i++){
			zw++;
			if(zw==6 || zw==7){
				html_output += '<a href="javascript:void(0);" class="jsc_special"></a>\n';
			}
			else{
				html_output += '<a href="javascript:void(0);"></a>\n';
			}
			if(zw==7){
				zw=0;
			}
		}
		html_output += '<a class="jsc_close" href="javascript:void(0);">x</a>\n';
		html_output += '</div>';
		self.obref.innerHTML = html_output;
		self.obref.getElementsByTagName('a')[self.obref.getElementsByTagName('a').length-1].onclick = function(){
			self.hide();
		};
		self.obref.getElementsByTagName('a')[0].onclick = function(){
			if(self.akt_month>1){
				self.setDate(self.akt_month-1, self.akt_year);
			}
			else{
				self.setDate(12, self.akt_year-1);
			}
		};
		self.obref.getElementsByTagName('a')[1].onclick = function(){
			if(self.akt_month<12){
				self.setDate(self.akt_month+1, self.akt_year);
			}
			else{
				self.setDate(1, self.akt_year+1);
			}
		};
		for(i=2;i<43;i++){
			self.obref.getElementsByTagName('a')[i].onclick = function(){
				self.itemOnClick(this);
			}
		};
		zw = new Date();
	};
	/**
	 * @projectDescription blendet den Kalender ein
	 */
	this.show = function(){
		self.obref.style.display = 'block';
		this.selfClick();
	};
	/**
	 * @projectDescription blendet den Kalender aus
	 */
	this.hide = function(){
		self.obref.style.display = 'none';	
	};
	/**
	 * @projectDescription wird ausgeführt wenn auf das Kalender-Element geklickt wird.
	 */
	this.selfClick = function(){
		this.locked=true;
		(function(){this.locked=false}).delay(20,this);
	};
	/**
	 * @projectDescription wird ausgeführt wenn auf das Body-Element geklickt wird.
	 */
	this.bodyClick = function(){
		if(!this.locked){
			this.hide();
		}
	};
	/**
	 * @projectDescription setzt Monat und Jahr
	 */
	this.setDate = function(month, year){
		self.akt_month = month;
		self.akt_year = year;
		blankdays = new Date(year,month-1,1).getDay();
		blankdays += -1;
		if(blankdays<0){
			blankdays=6;
		}
		for(i=27;month-1==new Date(year,month-1,i).getMonth();i++){
			maxdays = i;
		}
		for(i=0;i<blankdays+1;i++){
			self.days[i] = '';
		}
		for(i=i-1;i<maxdays+blankdays;i++){
			self.days[i] = i-blankdays+1;
		}
		for(;i<41;i++){
			self.days[i] = '';
		}
		self.aktualHTML();
	};
	/**
	 * @projectDescription aktualisiert den HTML-Code des Kalenders
	 */
	this.aktualHTML = function(){
		self.obref.getElementsByTagName('h2')[0].innerHTML = self.month_names[self.akt_month-1] + ' ' + self.akt_year;
		for(i=0;i<self.days.length;i++){
			self.obref.getElementsByTagName('a')[i+2].innerHTML = self.days[i];
			self.obref.getElementsByTagName('a')[i+2].className = self.obref.getElementsByTagName('a')[i+2].className.replace(/jsc_blank/gi, '');
			self.obref.getElementsByTagName('a')[i+2].className = self.obref.getElementsByTagName('a')[i+2].className.replace(/jsc_disabled/gi, '');
			if(self.days[i]==""){
				self.obref.getElementsByTagName('a')[i+2].className += " jsc_blank";
			}
			if(this.now > 0){
				this.nowtime_date = new Date(self.akt_year,self.akt_month-1,self.days[i]);
				this.nowtime = Math.round(this.nowtime_date.getTime() / 1000);
				is_in = 1;
				if(this.von_arr.length > 0){
					is_in = 0;
					for(j=0;j<this.von_arr.length;j++){
						if(this.von_arr[j] <= this.nowtime && this.bis_arr[j] >= this.nowtime){
							is_in = 1;
						}
					}
				}
				if(is_in==1 && this.valid_week_days){
					is_in = 0;
					for(j=0;j<this.valid_week_days.length;j++){
						if(this.valid_week_days[j] == this.nowtime_date.getDay()){
							is_in = 1;
							break;
						} 
					}
				}

				if(this.now >= this.nowtime || !is_in){
					self.obref.getElementsByTagName('a')[i+2].className += " jsc_disabled";
				}
			}
		}
	};
	/**
	 * @projectDescription wird aufgerufen wenn ein Item ausgewält wird
	 * @param {Object} obj
	 */
	this.itemOnClick = function(obj){
		if(obj.innerHTML!=''){

                    if( this.now ){
                            this.nowtime_date = new Date(self.akt_year,self.akt_month-1,obj.innerHTML*1);
                            this.nowtime = Math.round(new Date(self.akt_year,self.akt_month-1,obj.innerHTML*1).getTime() / 1000);
                            if(this.von_arr.length > 0){
                                    is_in = 0;
                                    for(j=0;j<this.von_arr.length;j++){
                                            if(this.von_arr[j] <= this.nowtime && this.bis_arr[j] >= this.nowtime){
                                                    is_in = 1;
                                            }
                                    }
                            }
                            if(is_in==1 && this.valid_week_days){
                                    is_in = 0;
                                    for(j=0;j<this.valid_week_days.length;j++){
                                            if(this.valid_week_days[j] == this.nowtime_date.getDay()){
                                                    is_in = 1;
                                                    break;
                                            } 
                                    }
                            }
                            if(this.now <= this.nowtime && ( (this.von_arr.length > 0 && is_in) ||  this.von_arr.length == 0) ){
                                    self.callBackFunction(obj.innerHTML*1,self.akt_month,self.akt_year);
                            }
                    } else {
                            self.callBackFunction(obj.innerHTML*1,self.akt_month,self.akt_year);
                    }
		}
	};
	this.hide();
	this.init();
	self.setDate(zw.getMonth()+1,zw.getFullYear());
}

/*/////////////////////////////////////////////////////////////////////////////////
                                getCurrentStyle
    Diese Funktion ist veraltet, verwende stattdessen Mootools getStyle()!!
	
	getCurrentStyle gibt den aktuellen wert einer CSS-Eigenschaft zurück.

	obj = das Element
	prop = die gewünschte CSS-Eigenschaft
	
/*/////////////////////////////////////////////////////////////////////////////////

function getCurrentStyle(obj, prop){  // Gibt den Wert des abgefragten CSS-Wertes zurück
	return $(obj).getStyle(prop);
}

        
function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}






