var search = null;
var domain = "/";

/*
 * Weiterleiten an die Suchseite
 */
function RedirectToSearch() {
	window.location = domain + "Suche/" + $("#s").val().replace(/\s+/g, "+");
	return false;
}

/*
 * Objekt, das alle Suchparameter beinhaelt
 */
function SearchData(str) {
	////die objekte, die wir von der brightcove-api zurueckbekommen haben
	this.results = new Array();
		
	////der suchstring, der uebergeben wurde
	this.searchString = str;
	////anzahl der videos pro seite
	this.videosPerPage = 9;
	////akutelle seite, auf der wir uns befinden -1
	this.page = 0;
	////anzahl, nach wievielen zeichen die beschreibung gekuerzt wird
	this.cut = 65;
	////anzahl an verfuegbaren seiten
	this.pageCount = 0;
	////die Sortierung von Videos
	this.order = "";
	this.limit = 1;
	
	////Gibt an, ob der Text durchsucht werden soll
	this.requestText = true;
	////Gibt an, ob die Tags durchsucht werden sollen
	this.requestTags = false;
	
	////Gibt an, ob der Text durchsucht wurde
	this.textRequested = false;
	////Gibt an, ob die Tags durchsucht wurden
	this.tagsRequested = false;
	
	this.SetOrder = function(order) {
		$("#order option[value="+order+"]").attr("selected", "selected");
		this.order = order;
	};
	
	this.SetLimit = function(limit) {
		$("#dateLimit option[value="+limit+"]").attr("selected", "selected");
		this.limit = limit;
	};
	
	return this;
}

function ExtendedSearch() {
	var limit = $("#dateLimit option:selected").val();
	var order = $("#order option:selected").val();
	
	//keyword/aktuelle seite/order/limit
	window.location = domain + "Suche/" + search.searchString + "/" + search.page + "/" + order + "/" + limit;
	return false;
}

/*
 * Fragt per Ajax die Brightcove-API ab und fuegt die JSON-Objekte zum Suchobjekt-Array hinzu
 */		
function RequestData() {
	if (!search.textRequested && search.requestText) {
		RequestTextData();
		return;
	}
	
	if (!search.tagsRequested  && search.requestTags) {
		RequestTagData();
		return;
	}
	
	HandleData();
}

function RequestTextData() {
	$.getJSON(domain+"ajax/suche.php", { func: "text", order: search.order, keyword: search.searchString, countperpage: search.videosPerPage, page: search.page, limit: search.limit },
	function (data) {
		if (data['total_count'] && data['items'] && data['items'] != "null") {
			for (var i=0; i < data["items"].length; i++) {
				AddSearchResult(data["items"][i]);
			}
		}
		
		search.textRequested = true;
		RequestData();
	});
}

function RequestTagData() {
	$.getJSON(domain+"ajax/suche.php", { func: "tags", order: search.order, keyword: search.searchString, countperpage: search.videosPerPage, page: search.page, limit: search.limit }, 
	function (data) {
		if (data['total_count'] && data['items'] && data['items'] != "null") {
			for (var i=0; i < data["items"].length; i++) {
				AddSearchResult(data["items"][i]);
			}
		}
		
		search.tagsRequested = true;
		RequestData();
	});
}

/*
 * Wird nach den Ajaxaufrufen aufgerufen und bereitet die Suchseite auf
 */
function HandleData() {
	$(".extendedSearch").show();

	if (search.results.length <= 0) {
		$("#searchstring").html("Ihre Suche nach <span>" + search.searchString + "</span> ergab 0 Treffer");
		$('#result').html("");
		return;
	}
	
	$("#searchstring").html("Ihre Suche nach <span>" + search.searchString + "</span> ergab <span>" + search.results.length + "</span> Treffer");
	$('#result').html("");
	$('#searchnavigation').prepend("<div style='float:left; margin-right:20px;'>"+WritePageString(search.results.length)+"</div>");
	
	var count = search.results.length > search.videosPerPage ? search.videosPerPage * ((search.page * 1) + 1) : search.results.length;
	var start = count - search.videosPerPage > 0 ? count - search.videosPerPage : 1;
	start = start == 1 ? 1 : start + 1;
	count = count > search.results.length ? search.results.length : count;
	
	var startstr = "";
	
	if (start == count)
		startstr = count;
	else
		startstr = start+"-"+count;
	
	$('#result').append("<div class='anzahl'><span>"+startstr+"</span> von <span>"+search.results.length+"</span></div>");
	
	for (var i = search.videosPerPage * (search.page * 1); i < search.videosPerPage * ((search.page * 1) + 1); i++) {		
		if (!search.results[i]) continue;
		
		$('#result').append("<div class='searchitem'>"+BuildSearchResult(search.results[i], i)+"</div>");
	}
}

/*
 * Funktion, die ein html Tag für ein Suchobjekt zurueckgibt
 */
function BuildSearchResult(item, cur) {
	var str = ""
	str += "<div class='searchbox'>";
		str += "<div class='number'>";
			var num = "";
			if (search.page <= 0)
				num = (cur + 1);
			else {
				num = cur + 1;
			}
			str += num;
		str += "</div>";
		str += "<div>";
			str += "<div>"+FormatTimestamp(item.releaseDate)+"</div>";
			str += "<div style='float:left;'><a href='"+domain +"Video/"+item.player+"/?bctid="+item.id+"'><img width='81' src='" + item.thumbnailURL + "' /></a></div>";
			str += "<div class='videoTitle'><a href='"+domain +"Video/"+item.player+"/?bctid="+item.id+"'>"+item.name+"</a></div>";
			
			var desc = item.shortDescription.length + item.name.length > search.cut ? item.shortDescription.substr(0, search.cut - item.name.length) + " ..." : item.shortDescription;
			
			str += "<div><a href='"+domain +"Video/"+item.player+"/?bctid="+item.id+"'>"+desc+" &raquo;</a></div>";
		str += "</div>";
	str += "</div>";
	
	return str;
}

/*
 * Funtkion, die den HTML-Tag für den 1-2-3-4-Container zurueckgibt
 */
function WritePageString(count) {
	search.pageCount = Math.ceil(count / search.videosPerPage);
	var string = "";
	
	for (i = 0; i < search.pageCount; i++) {
		if (search.order != "") {
			if (i == search.page)
				string += "<div class='active'><a href='"+domain+"Suche/"+search.searchString+"/"+i+"/"+search.order+"/"+search.limit+"'>"+(i+1)+"</a></div>";
			else
				string += "<div class='unactive'><a href='"+domain+"Suche/"+search.searchString+"/"+i+"/"+search.order+"/"+search.limit+"'>"+(i+1)+"</a></div>";
		}
		else {
			if (i == search.page)
				string += "<div class='active'><a href='"+domain+"Suche/"+search.searchString+"/"+i+"'>"+(i+1)+"</a></div>";
			else
				string += "<div class='unactive'><a href='"+domain+"Suche/"+search.searchString+"/"+i+"'>"+(i+1)+"</a></div>";

		}
	}

	return string;
}

function FormatTimestamp(timestamp) {
	var date = new Date(timestamp * 1);
	return date.getDate() + "." + (date.getMonth() + 1) + "." + date.getFullYear();
}

function AddSearchResult(item) {
	for (i = 0; i < search.results.length; i++) {
		if (search.results[i]['id'] == item['id']) return;
	}
	
	search.results.push(item);
}

/*
	id
	shortDescription
	longDescription
	creationDate
	publishedDate
	lastModifiedDate
	linkURL
	linkText
	tags -> array()
	videoStillURL
	thumbnailURL
	referenceId
	length
	economics
	playsTotal
	playsTrailingWeek
*/
