//Die Variablen mit Index dran sind für die Indexseite, deren Aufbau anders ist als der Rest
var clickedAllNews = false;
var dateFormat = 'd.m.Y';
var newsID = 'newsID';
var containerIDIndex = 'newsContainer';
var containerID = 'newsArtikel';
var pictureIntervalTime = 10000;
var stdPicture = 'Texturen/logo.png';
var newsArticleString =
'<div id="newsArtikelAnzeigen">' + 
	'<div id="newsArtikel">' + 
		'<div id="newsArtikelOben">' + 
			'<img class="schliessenButton" title="Fenster schlie&szlig;en" alt="Dialog beenden" src="./Texturen/stop.png">' + 
		'</div>' + 
		'<div id="newsArtikelMitte">' + 
			'<div class="newsArtikelText">' +
				'<div class="newsArtikelInhalt"></div>' + 
			'</div>' + 
		'</div>' + 
		'<div id="newsArtikelUnten"></div>' + 
	'</div>' + 
'</div>';
var topnewsString = 
'<div id="topNews" class="' + containerIDIndex + '">' +
	'<input type="hidden" class="' + newsID + '" value="{NEWSID}">' +
	'<div class="newsBild floatLeft">' +
		'<img class="previewBild" alt="Top News Bild" src="{NEWSPREVIEW}">' +
	'</div>' +
	'<div class="newsText floatRight">' +
		'<div class="newsInhalt"><span class="newsUeberschrift">{NEWSTITLE}</span><br>{NEWSTEXT}</div>' +
		'<div class="mehrLink">' +
			'<span class="erstellungsdatum">{NEWSDATE}</span>' + 
			'<span class="mannschaftsName">{BELONGS}</span>' +
			'<span class="mehr">mehr &raquo;</span>' + 
		'</div>' +
	'</div>' +
'</div>';
var newsStringAllIndex =
'<div class="newsReihe clearBoth">' +
	'{FIRSTCONTAINER}' + 
	'{SECONDCONTAINER}' +
'</div>';
var newsStringIndex = 
'<div class="' + containerIDIndex + ' newsCon{NEWSFLOAT} floatLeft">' +
	'<input type="hidden" class="' + newsID + '" value="{NEWSID}">' +
	'<div class="newsText floatRight">' +
		'<div class="newsInhalt"><span class="newsUeberschrift">{NEWSTITLE}</span><br>{NEWSTEXT}</div>' +
		'<div class="mehrLink">' +
			'<span class="erstellungsdatum">{NEWSDATE}</span>' + 
			'<span class="mannschaftsName">{BELONGS}</span>' +
			'<span class="mehr">mehr &raquo;</span>' + 
		'</div>' +
	'</div>' +
'</div>';
var newsString = 
'<div class="' + containerID + '">' +
	'<input type="hidden" class="' + newsID + '" value="{NEWSID}">' +
	'<div class="newsBild floatLeft">' +
		'<img class="previewBild" alt="Top News Bild" src="{NEWSPREVIEW}">' +
	'</div>' +
	'<div class="newsText floatRight">' +
		'<div class="newsInhalt"><span class="newsUeberschrift">{NEWSTITLE}</span><br>{NEWSTEXT}</div>' +
		'<div class="mehrLink">' +
			'<span class="erstellungsdatum">{NEWSDATE}</span>' + 
			'<span class="mannschaftsName">{BELONGS}</span>' +
			'<span class="mehr">mehr &raquo;</span>' + 
		'</div>' +
	'</div>' +
'</div>';
var newsPicture = '<div class="newsArtikelBilder"><img src="{PICTURESRC}" alt="NewsArtikelBilder" class="aktuellesBildNews newsArtikelIMG" />' +
					'<img src="{PICTURENEXTSRC}" alt="NewsArtikelBilder" class="nachfolgendesBildNews newsArtikelIMG"></div>';
var newsArticleInnerString = '<span class="newsUeberschrift">{NEWSTITLE}</span><br><br><div class="newsteaser">{NEWSTEASER}</div>{NEWSTEXT}'; 
var emptyNewsString	= '<div class="keineNews">Es gibt zur Zeit keine Neuigkeiten in diesem Bereich!</div>';
var emptyNewsArchiveString	= '<div class="keineNews">Es befinden sich noch keine Newsartikel im Archiv!</div>';

/**
 * Erzeugt ein News-Objekt.
 * 
 * @param site			Die Seitenid
 * @param callback		Die Callback-Funktion die als Übergabe gegeben ist
 * @param index			Ist es eine Index-Seite (besonderes aussehen?)
 * @param limit			Ist ein Limit an News gesetzt?
 * @param archive		Ist ein Archiv gemeint?
 * @param kategorie		Sollen Werte nur aus einer bestimmten Kategorie gesucht werden (ID der Kategorie)
 */
function News(site, callback, index, limit, archive, kategorie){
	kategorie = parseInt(kategorie, 10);
	
	//Funktionen
	this.loadNews = ladeNews;
	this.callback = callback;
	this.createNews = baueNews;
	this.createHTML = baueHTML;
	this.newsEvents = bindeNewsEvents;
	this.newsSize = berechneNewsConBreite;
	this.loadPopUp = zeigePopUpAn;
	this.hidePopUp = versteckePopUp;
	this.searchNews = sucheNews;
	this.timer = timerFunktion;
	
	//Variablen
	this.index = index != null && index != undefined && index == true ? true : false;
	this.limit = limit != null && limit != undefined && (limit > 0 || limit == true) ? '&Limit=1' : '';
	this.archive = archive != null && archive != undefined && (archive > 0 || archive == true) ? '&Archiv=1' : '';
	this.category = kategorie != null && kategorie != undefined && kategorie >= 0 ? ('&Kategorie=' + kategorie) : '';
	this.isArchive = archive != null && archive != undefined && (archive > 0 || archive == true) ? true : false;
	this.site = site;
	this.topnews = false;
	this.news = null;
	this.newsHTML = '';
	this.activeNews = null;
	this.activeImage = null;
	this.pictureIntervalTime = pictureIntervalTime;
	this.pictureInterval = null;
	
	//Den String zum Größer machen des Artikels hinzufügen
	if($('#newsArtikelAnzeigen').length <= 0)		$('body').append(newsArticleString);
	
	//Initialaufrufe
	this.loadNews();
}

/**
 * Lädt die News (AJAX)
 */
function ladeNews(){
	var post = 'AJAXArt=1&SeitenID=' + this.site + this.limit + this.archive + this.category;
	var self = this;
	
	//AJAX-Request senden
	$.ajax({
		async: "async",
		url: "PHP/News.ajax.php",
		type: "POST",
		dataType: "json",
		data: post,							//Daten suchen
		success: function(data, status){
			//News bauen
			self.createNews(data);
			
			//An der jeweiligen Stelle anzeigen, dies wird über eine callback ermöglicht.
			self.callback();
			
			//Events und größen setzen
			self.newsEvents();
			self.newsSize();
		},
		error: function(xmlhttp, statzs, error){
			alert('Fehler bei der Kommunikation. Bitte wenden Sie sich an Ihren Administrator!');
		}
	});
}

/**
 * Baut die News und speichert sie in den jeweiligen Variablen.
 * 
 * @param data		Alle News
 * @return String	Die HTML-Daten der News
 */
function baueNews(data){
	this.news = data;
	//Noch keine Topnews gesetzt
	this.topnews = false;
	
	if(data && data != null && data.length > 0){
		var count = 1;
		var temp = '';
		//Alle Daten durchlaufen
		for(i in data){
			var news = data[i];
			var newsHTML = this.createHTML(news);
			
			//Index oder nicht?
			if(this.index == true){
				//Keine Topnews
				if(news.Topnews != 1){
					//Ungerade => neue Zeile
					if(count++ & 1){
						this.newsHTML += temp;
						temp = newsStringAllIndex;
						//Wird Links angeordnet und zum Container hinzugefügt
						newsHTML = newsHTML.replace(/{NEWSFLOAT}/g, 'Left');
						temp = temp.replace(/{FIRSTCONTAINER}/g, newsHTML);
					}
					else{
						//Wird Rechts angeordnet und zum Container hinzugefügt
						newsHTML = newsHTML.replace(/{NEWSFLOAT}/g, 'Right');
						temp = temp.replace(/{SECONDCONTAINER}/g, newsHTML);
					}
				}
				else{
					//Topnews
					this.newsHTML = newsHTML + this.newsHTML;
				}
			}
			else{
				this.newsHTML += newsHTML;
			}
		}
		//Den zweiten Container entfernen, da falls er nicht gesetzt ist nicht angezeigt werden soll
		if(this.index == true)		temp = temp.replace(/{SECONDCONTAINER}/g, '');
		
		//Das letzte auch nochmal der Variable hinzufügen
		this.newsHTML += temp;
	}
	else{
		//Je nachdem ob eine News, oder Archiv
		this.newsHTML = this.archive != '' ?  emptyNewsArchiveString : emptyNewsString;
	}
}

/**
 * Baut den HTML-String einer News.
 * 
 * @param news		Die News die gebaut werden soll.
 * @return String	Der HTML-String
 */
function baueHTML(news){
	var HTML = '';
	
	//Index oder nicht?
	if(this.index == true){
		if(news.Topnews == 1){
			//Nur eine Topnews erlaubt
			if(this.topnews == true)	return '';
			
			var previewImage = '';
			if(news.Bilder && news.Bilder.length > 0)	previewImage = news.Bilder[0].Pfad;
			else										previewImage = stdPicture;
			
			this.topnews = true;
			
			HTML = topnewsString;
			HTML = HTML.replace(/{NEWSPREVIEW}/g, previewImage);
		}
		else{
			HTML = newsStringIndex;
		}
		HTML = HTML.replace(/{BELONGS}/g, '(' + news.Belongs + ')');
	}
	else{
		var previewImage = '';
		if(news.Bilder && news.Bilder.length > 0)	previewImage = news.Bilder[0].Pfad;
		else										previewImage = stdPicture;
		HTML = newsString;
		HTML = HTML.replace(/{NEWSPREVIEW}/g, previewImage);
		HTML = HTML.replace(/{BELONGS}/g, '(' + news.Belongs + ')');
	}
	
	HTML = HTML.replace(/{NEWSID}/g, news.ID);
	HTML = HTML.replace(/{NEWSTITLE}/g, formatiereDiv(news.Title));
	HTML = HTML.replace(/{NEWSTEXT}/g, formatiereDiv(news.Teaser));
	HTML = HTML.replace(/{NEWSDATE}/g, formatiereDate(dateFormat, mysqlTimeStampToDate(news.Timestamp)));
	
	return HTML;
}

/**
 * Bindet die News Events
 */
function bindeNewsEvents(){
	var self = this;
	
	$('#newsArtikelAnzeigen').unbind();
	$('#newsArtikelAnzeigen').click(function(){
		if(clickedAllNews == false)		self.hidePopUp();
		else							clickedAllNews = false;
	});
	$('#newsArtikelAnzeigen *').unbind();
	$('#newsArtikelAnzeigen *').click(function(){
		clickedAllNews = true;
	});
	$('.mehrLink').unbind();
	$('.mehrLink').click(function(){
		//ID der news suchen
		var news = $(this).parents('.' + (self.index == true ? containerIDIndex : containerID)).find('.' + newsID).val();
		
		self.loadPopUp(news);
		self.timer();
	});
	$('.schliessenButton').unbind();
	$('.schliessenButton').click(function(){
		self.hidePopUp();
	});
	$(document).keydown(function(eventObject){
		if(eventObject.keyCode == '27'){
			self.hidePopUp();
		}
	});
}

/**
 * Berechnet die Breite der jeweiligen Container und stellt sie dar.
 */
function berechneNewsConBreite(){
	window.berechneContentHoehe();
	if(this.isArchive == false){
		var newsWrapperHoehe = $('#news').height();
		var anzahlNewsCons = $('#news .newsArtikel').length;
		//var newsConsHoehe = anzahlNewsCons * ($('#news .newsArtikel').height() + 10);
		var newsConsHoehe = anzahlNewsCons * (parseInt($('#news .newsArtikel:first').css('height'), 10) + 10);
		if(newsWrapperHoehe > newsConsHoehe){
			$('#news .newsArtikel').css('width', '496px');
			$('#news .newsText').css('width', '225px');
		}
	}
	else{
		var archivWrapperHoehe = $('#archiv').height();
		var anzahlArchivCons = $('#archiv .newsArtikel').length;
		var archivConsHoehe = anzahlArchivCons * ($('#archiv .newsArtikel').height() + 10);
		if(archivWrapperHoehe > archivConsHoehe){
			$('#archiv .newsArtikel').css('width', '496px');
			$('#archiv .newsText').css('width', '225px');
		}
	}
	
	$('#newsArtikel').css('margin-top', (document.documentElement.clientHeight - 580) / 2);
}

/**
 * Zeigt die News im PopUp an.
 * 
 * @param id		Die ID der News
 */
function zeigePopUpAn(id){
	var news = this.searchNews(id);
	this.activeNews = null;
	if(news != null){
		this.activeNews = news;
		this.activeImage = null;
		var artikel = $('#newsArtikelMitte');
		var artikelInhalt = newsArticleInnerString;
		var picture = newsPicture;
		
		artikelInhalt = artikelInhalt.replace(/{NEWSTITLE}/, formatiereDiv(news.Title));
		artikelInhalt = artikelInhalt.replace(/{NEWSTEASER}/, formatiereDiv(news.Teaser));
		artikelInhalt = artikelInhalt.replace(/{NEWSTEXT}/, formatiereDiv(news.Text));
		
		//Das Bild wird entfernt
		$(artikel).find('.newsArtikelBilder').remove();
		
		//Ein bild vorhanden, oder es muss ein Standardbild benutzt werden
		if(news.Bilder && news.Bilder.length > 0){
			picture = picture.replace(/{PICTURESRC}/g, news.Bilder[0].Pfad);
		}
		else{
			picture = picture.replace(/{PICTURESRC}/g, stdPicture);
		}
		
		this.activeImage = 0;
		
		//Nächstes Bild
		var next = '';
		if(news.Bilder.length > 1){
			next = news.Bilder[1].Pfad;
			this.activeImage = 1;
		}
		picture = picture.replace(/{PICTURENEXTSRC}/g, next);
		
		$(artikel).find('.newsArtikelText').before(picture);
		$('.aktuellesBildNews').fadeIn(1000);
		
		$(artikel).find('.newsArtikelInhalt').empty().append(formatiereDiv(news.Title));
		$(artikel).find('.newsArtikelInhalt').empty().append(artikelInhalt);
		$('#newsArtikelAnzeigen').fadeIn(1000);
	}
}

function versteckePopUp(){
	$('#newsArtikelAnzeigen').fadeOut(1000);
	//Time beenden
	this.timer(true);
}

/**
 * Sucht nach einer bestimmten News.
 * 
 * @param id		Die ID der News.
 * @return Object	Das Objekt der gesuchten News (null => kein Ergebnis)
 */
function sucheNews(id){
	var news = null;
	
	if(id && id > 0){
		//Nach der richtigen News suchen
		for(i in this.news){
			var tempNews = this.news[i];
			
			if(tempNews.ID == id)	return tempNews;
		}
	}
	
	return news;
}

function timerFunktion(schliessen){
	if(schliessen && schliessen == true){
		clearInterval(this.pictureInterval);
	}
	else{
		//Nur wenn Bilder vorhanden sind
		if(this.activeImage != null && this.activeNews != null && this.activeNews.Bilder.length > 1){
			var self = this;
			this.pictureInterval = setInterval(function(){neuesBildTimer(self);}, this.pictureIntervalTime);
		}
	}
}

function neuesBildTimer(objekt){
	var bilder = objekt.activeNews.Bilder;
	var active = 0;
	//Muss das nächste oder das Erste Bild genommen werden
	if((bilder.length - 1) > objekt.activeImage){
		active = objekt.activeImage + 1;
	}
	objekt.activeImage = active;
	
	$('.aktuellesBildNews').fadeOut(2000);
	$('.nachfolgendesBildNews').fadeIn(2000);
	var aktuell = $('.aktuellesBildNews');
	var naechstes = $('.nachfolgendesBildNews');
	$(naechstes).addClass('aktuellesBildNews').removeClass('nachfolgendesBildNews');
	$(aktuell).addClass('nachfolgendesBildNews').removeClass('aktuellesBildNews');
	
	//Bild nach 3 Sekunden austauschen (damit der Überblendeffekt nicht gestört wird)
	setTimeout(function(){
		$('.nachfolgendesBildNews').attr('src', CD_ROOT + bilder[objekt.activeImage].Pfad);
	}, 3000);	
}
