var arrAnnouncements = new Array(); // globales Array, das alle Announcements beinhaltet
var anyAnnouncementZoomedIn = false;

//Konstruktor
function Announcement(announceDiv){
	var self = this;
	this.div = announceDiv;
	this.mauswarueberelement = false;
	this.zoomBackFlag = false;
	this.div.style.position="absolute";
	this.div.style.top="0px"; //initial = 0, damit der wert ueberhaupt gesetzt is
	this.div.style.left="0px";
	this.div.style.width = "0px";  //initial = 0
	this.div.style.height = "0px";
	this.inInterval;
	this.outInterval;
	this.inIntervalAktiv = false;
	this.outIntervalAktiv = false;
	this.orig_width;
	this.orig_height;
	this.orig_x;
	this.orig_y;
	this.h1Elem = announceDiv.getElementsByTagName('h1')[0];	//titel
	this.h2Elem = announceDiv.getElementsByTagName('h2')[0];	//Strasse, Ort
	this.h4Elem = announceDiv.getElementsByTagName('span')[0];	//Oeffnungszeiten
	this.textElem = announceDiv.getElementsByTagName('div')[0]; //Text rechts
	this.img =  announceDiv.getElementsByTagName('img')[0];
	this.ueberschrift = announceDiv.getElementsByTagName('h1')[0].childNodes[0].nodeValue;  //nur der Text
	this.text =  announceDiv.getElementsByTagName('div')[0].childNodes[0].nodeValue;			//nur der Text
	this.img.onmouseover = function(){innerElementMouseOver(self);}
	this.bgImg = document.createElement("img");
	this.bgImg.style.behavior = "url('lib/iepngfix/iepngfix.htc')";
	this.bgImg.src="media/windows/window_zoom_trans_green.png";
	this.bgImg.style.zIndex="1";
	this.bgImg.style.width = "300px";
	this.bgImg.style.height = "262px";
	this.div.appendChild(this.bgImg);	
	this.div.style.width = "300px";
	this.div.style.height = "262px";
	this.oeffZeiten = document.createElement("div");
	this.oeffZeiten.style.position="absolute";
	this.oeffZeiten.appendChild(this.h4Elem);
	this.oeffZeiten.style.display="none";
	this.oeffZeiten.style.left="20px";
	this.oeffZeiten.style.bottom="38px";
	this.oeffZeiten.onmouseover = function(){innerElementMouseOver(self);}
	this.div.appendChild(this.oeffZeiten);	
	this.h1Elem.style.marginTop = "20px";  //headline
	this.h1Elem.style.marginLeft = "20px";
	this.h1Elem.style.position = "absolute";
	this.h1Elem.onmouseover = function(){innerElementMouseOver(self);}
	this.h2Elem.style.marginTop = "37px"; //subheadline
	this.h2Elem.style.marginLeft = "20px";
	this.h2Elem.style.position = "absolute";
	this.h2Elem.onmouseover = function(){innerElementMouseOver(self);}

	this.div.onmouseover = function(){announcementToFront(self);}
	this.div.onmouseout = function() {announcementToBack(self);}	
	
	this.textElem.style.position="absolute";
	this.textElem.style.width = "250px";
	this.textElem.style.top = "61px";	
	this.textElem.style.marginLeft = textMarginLeft+"px";
	this.textElem.style.display="none";
	this.textElem.onmouseover = function(){innerElementMouseOver(self);}
	this.img.style.position="absolute";
	this.img.style.top="63px";
	this.img.style.left="20px";
	//filialfinder-button
	this.linkButton = announceDiv.getElementsByTagName('a')[0];	//titel
	if(this.linkButton)
		this.linkButton.onmouseover = function(){innerElementMouseOver(self);}
}

//holt alle Announcements aus dem DOM, erstellt daraus Objekte und speichert sie im Array arrAnnouncements
function getAllAnnouncements(){
	var arrAnnounces = getElementsByClassName_inBody("announcement");
	for (var i=0;i<arrAnnounces.length;i++){
		var tmpAnnounce = new Announcement(arrAnnounces[i]);
		arrAnnouncements[arrAnnouncements.length] = tmpAnnounce;
	}	
}

//wird im body onload aufgerufen
function createAnnouncements(){
	arrWindowSize = getInnerWindowSize(); // innerWindowSize fuer mittige Positionierung, WICHTIG: wegen IE6 erst nach onload aufrufen! 
	getAllAnnouncements();
	for(var i =0; i<arrAnnouncements.length;i++){
		arrAnnouncements[i].orig_x = arrAnnounceInfos[i + 1]['x']-parseInt(min_zoom_width/2); //um mittig zu positionieren, nicht links oben
		arrAnnouncements[i].orig_y = arrAnnounceInfos[i + 1]['y']-parseInt(min_zoom_height/2);
		//jetzt positionieren:
		arrAnnouncements[i].div.style.left = arrAnnouncements[i].orig_x + 'px';
		arrAnnouncements[i].div.style.top = arrAnnouncements[i].orig_y + 'px';		
		arrAnnouncements[i].div.style.width = min_zoom_width+"px";		
		arrAnnouncements[i].div.style.height = min_zoom_height + 'px';
		//sichtbar machen:
		arrAnnouncements[i].div.style.display="block";
	}	
}

function announcementToFront(announceObj){
	//  ( doppelten Mouseover vermeiden           )   (kein anderes zoomt gerade jetzt )    (keins ist gerade aufgezoomt)                                                 (Groesse muss klein sein)
	if ((currentZoomingAnnouncementToFront != announceObj)&&(currentZoomingAnnouncementToBack != announceObj)&& (currentZoomingAnnouncementToFront==null) && (parseInt(announceObj.div.style.width) < max_zoom_width) ){
		clearInterval(announceObj.outInterval);
		announceObj.outIntervalAktiv = false;
		var arrMitte = new Array(parseInt(arrWindowSize[0]/2),parseInt(arrWindowSize[1]/2)); // [0] mitte_x, [1] mitte_y
		if(parseInt(announceObj.div.style.left)+parseInt(min_zoom_width/2) < arrMitte[0]){
			if(parseInt(announceObj.div.style.top)+parseInt(min_zoom_height/2) < arrMitte[1]){ //keine Bewegung
				pxToMove_x = 0;				
				pxToMove_y = 0;
			}			
			else { // bewegung nach rechts oben
				pxToMove_x = 0;
				pxToMove_y = (-1)*pxToZoom_height;
			}			
		}
		else{ // bewegung nach links unten oder links oben
			if(parseInt(announceObj.div.style.top)+parseInt(min_zoom_height/2) < arrMitte[1]){  // links unten
				pxToMove_x = (-1)*pxToZoom_width;
				pxToMove_y = 0;
			}
			else{  //links oben
				pxToMove_x = (-1)*pxToZoom_width;
				pxToMove_y = (-1)*pxToZoom_height;
			}
		}
			
		changeZIndex(announceObj); //bringt das announceObj vor alle anderen Announcements
		currentZoomingAnnouncementToFront = announceObj;
		//wenn bereits ein anderes aufgezoomt ist, dann dieses klein-zoomen:
		if(announcementZommedIn!=null){
			//versucht das "zittern" zu fixen, hat nicht geklappt:
			/*for(var i=0;i<arrAnnouncements.length;i++){ //alle ZoomIn-Intervalle loeschen
				clearInterval(arrAnnouncements[i].inInterval);
			}*/
			announcementToBack(announcementZommedIn);
		}
		//vergroessern:
		announceObj.inIntervalAktiv = true;
		announceObj.inInterval = window.setInterval(function callFunc(){ toFrontHelp(announceObj); },zoomSpeed);
	}
}
function toFrontHelp(announceObj){
			//console.log(announceObj.ueberschrift+"    in: "+announceObj.inIntervalAktiv+"   out: "+announceObj.outIntervalAktiv+"         F");
	var old_right = parseInt(announceObj.div.style.left)+ parseInt(announceObj.div.style.width);
	var old_bottom = parseInt(announceObj.div.style.top)+ parseInt(announceObj.div.style.height);
	if(parseInt(announceObj.div.style.width) < (max_zoom_width-pxToZoom_width)){

		//das ganze Div, in dem die Tabelle liegt, mitzoomen:
		announceObj.div.style.width = parseInt(announceObj.div.style.width)+pxToZoom_width+'px';
		announceObj.div.style.height = parseInt(announceObj.div.style.height)+pxToZoom_height+'px';
		//bgImg mitzoomen:
		announceObj.bgImg.style.width = parseInt(announceObj.bgImg.style.width)+pxToZoom_width+"px";
		announceObj.bgImg.style.height = parseInt(announceObj.bgImg.style.height)+pxToZoom_height+"px";
		//ggf. in die Mitte bewegen:
		if(pxToMove_x<0)
			announceObj.div.style.left = old_right -parseInt(announceObj.div.style.width) +'px';
		if(pxToMove_y<0)
			announceObj.div.style.top = old_bottom -parseInt(announceObj.div.style.height) +'px';
	}
	else{  //Text einfuegen
		window.clearInterval(announceObj.inInterval);
		announceObj.inIntervalAktiv = false;

		//pixel fuer letzte bewegung berechnen
		last_pxToMove_x=0;
		last_pxToMove_y=0;
		if(pxToMove_x<0)		
			last_pxToMove_x = (-1)*(max_zoom_width - parseInt(announceObj.div.style.width));
		else
			last_pxToMove_x=0;
		
		if(pxToMove_y<0)				
			last_pxToMove_y = (-1)*(max_zoom_height - parseInt(announceObj.div.style.height));
		else
			last_pxToMove_y=0;
		
		//letzter zoomSchritt: 
		announceObj.div.style.width = max_zoom_width+'px';
		announceObj.div.style.height = max_zoom_height+'px';
		announceObj.bgImg.style.width = max_zoom_width+'px';
		announceObj.bgImg.style.height = max_zoom_height+'px';
		//und ein letztes mal mitbewegen falls noetig:
		announceObj.div.style.left = parseInt(announceObj.div.style.left)+last_pxToMove_x+'px';
		announceObj.div.style.top = parseInt(announceObj.div.style.top)+last_pxToMove_y+'px';

		announceObj.oeffZeiten.style.display="block";
		announceObj.textElem.style.display="block";
		if(announceObj.linkButton)
			announceObj.linkButton.style.display="block";
		currentZoomingAnnouncementToFront = null;
		announceObj.bgImg.src="media/windows/window_zoom_opaque_green.png";
		announcementZommedIn = announceObj;
	}
}
function announcementToBack(announceObj){

	announceObj.zoomBackFlag = true;
	//if(globalFlag){
		if(announceObj.mauswarueberelement){
			announceObj.zoomBackFlag=false;
			announceObj.mauswarueberelement = false;
		}
	//}
	window.setTimeout(function() {foo(announceObj);}, 200); //um mouseout bei innerem element zu verhindern
}
function foo(announceObj){
		if(announceObj.zoomBackFlag){ //um mouseout bei inneren elementen zu verhindern
		
		if ((currentZoomingAnnouncementToBack != announceObj)&&(currentZoomingAnnouncementToFront != announceObj) && (parseInt(announceObj.div.style.width) > min_zoom_width)){
			
			window.clearInterval(announceObj.inInterval);
			announceObj.inIntervalAktiv = false;
			announceObj.mauswarueberelement = false;
			currentZoomingAnnouncementToBack = announceObj;			
			//pixel fuer die Bewegung berechnen:
			pxToMoveBack_x = (announceObj.orig_x - parseInt(announceObj.div.style.left))/zoom_steps;
			pxToMoveBack_y = (announceObj.orig_y - parseInt(announceObj.div.style.top))/zoom_steps;
			//elemente entfernen:
			announceObj.textElem.style.display="none";
			announceObj.oeffZeiten.style.display="none";
			if(announceObj.linkButton)
				announceObj.linkButton.style.display="none";
			//Backgroundimage aendern:
			announceObj.bgImg.src="media/windows/window_zoom_trans_green.png";
			announcementZommedIn = null;
			//verkleinern:
			announceObj.outIntervalAktiv = true;
			announceObj.outInterval = setInterval(function callFunc(){ toBackHelp(announceObj); },zoomSpeed-15);
		}
	}
}
function toBackHelp(announceObj){
		//console.log(announceObj.ueberschrift+"     in: "+announceObj.inIntervalAktiv+"   out: "+announceObj.outIntervalAktiv+"         B");
	if(announceObj.outIntervalAktiv){//wichtig damit das zittern nicht auftritt
		if(parseInt(announceObj.div.style.width) > min_zoom_width){
			//das ganze Div, in dem die Tabelle liegt, mitzoomen:
			announceObj.div.style.width = parseInt(announceObj.div.style.width)-pxToZoom_width+'px';
			announceObj.div.style.height = parseInt(announceObj.div.style.height)-pxToZoom_height+'px';
			//bgImg mitzoomen:
			announceObj.bgImg.style.width = parseInt(announceObj.bgImg.style.width)-pxToZoom_width+"px";
			announceObj.bgImg.style.height = parseInt(announceObj.bgImg.style.height)-pxToZoom_height+"px";	
			//zurueck bewegen:
			announceObj.div.style.left = parseInt(announceObj.div.style.left)+pxToMoveBack_x+'px';
			announceObj.div.style.top = parseInt(announceObj.div.style.top)+pxToMoveBack_y+'px';	
		}
		else{ //wegen Rundungsfehlern am Ende wieder auf startgroesse setzen:
			clearInterval(announceObj.outInterval);
			announceObj.outIntervalAktiv = false;
				
			announceObj.div.style.width = min_zoom_width+'px';
			announceObj.div.style.height = min_zoom_height+'px';
			announceObj.bgImg.style.width = min_zoom_width+'px';
			announceObj.bgImg.style.height = min_zoom_height+'px';
			//wieder an richtige Position setzen:
			announceObj.div.style.top = announceObj.orig_y+"px";
			announceObj.div.style.left = announceObj.orig_x+"px";
			currentZoomingAnnouncementToBack = null;
			//globalFlag=true;
		}
	}
	else{//wichtig damit das zittern nicht auftritt
		clearInterval(announceObj.outInterval);
		announceObj.outIntervalAktiv = false;	
		//console.log(announceObj.ueberschrift+":   back terminated");	
	}
}

function changeZIndex(movingAnnouncement){ //bringt das sich bewegende Announcement nach vorne
	for (var i =0;i<arrAnnouncements.length;i++){
		if(arrAnnouncements[i] != movingAnnouncement)
			arrAnnouncements[i].div.style.zIndex = 10;
		else
			arrAnnouncements[i].div.style.zIndex = 11;
	}	
}


function innerElementMouseOver(annO){
	annO.mauswarueberelement = true;
/*	if(!announcementZommedIn)zoomBackFlag = false;
	else
		if(announcementZommedIn==annO) {		*/
			annO.zoomBackFlag = false;				
	/*	}*/
}

