$(document).ready(function() {
	$('#header').pngFix();
	windowResize();
	//loginShow();
	loginFunctions();
	searchFunctions();
	tooltip();
	// OnClick-Bindung der Slider-Buttons anhand ihrer CSS-Klasse
	$('.gallery-button-next').click(slideLeft);
	$('.gallery-button-previous').click(slideRight);
	$('.gallery-button-next-teaser').click(slideLeftTeaser);
	$('.gallery-button-previous-teaser').click(slideRightTeaser);

	// Themen Menü
	$("#left-sidebar li.folder a").click(function() {
		// Session aktualisieren
		if ($(this).parent().hasClass('folder')) {
			if ($(this).hasClass('active')) {
				updateOpenTopics($(this).parent().attr("cmdb:tid"), 'close');
			} else {
				updateOpenTopics($(this).parent().attr("cmdb:tid"), 'open');
			}
		}
		// nun auf-/zuklappen
		$(this).toggleClass('active').parent().children('ul').slideToggle(300);
		if ($(this).parent().hasClass('l1')) {
			$(this).parent().toggleClass('active');
		}
	});

});
window.onresize = windowResize;
function contentloader(url) {
    // Dialog
	$("#lightbox-container").load(url);
	$('#lightbox-container').dialog({
		modal: true, 
		width: 650, 
		title: url,
		open: function(event, ui) {
			$("#lightbox-container").css( 'display' , 'none' );
			$("#lightbox-container").fadeIn(500);
		},
		close: function(event, ui) {
			$("#lightbox-container").fadeOut(500);
			$('#lightbox-container').dialog('destroy');
			$("#lightbox-container").css( 'display' , 'none' );
		}
	});
}

function windowResize(){
	var windowWidth = window.innerWidth;
	if (!$.browser.mozilla) {
		windowWidth = document.documentElement.clientWidth;
	}
	if (windowWidth < 1250) {		
		$('#main').css({
			'width': '887px'
		});
		$('.gallery-slider-wrapper').css({
			'width': '887px'
		});
		$('.gallery-viewport').css({
			'width': '840px'
		});
	} else {
		var mainWidth = windowWidth - 360;
		var galleryViewportWidth = windowWidth - 401;
		$('#main').css({
			'width': mainWidth + 'px'
		});
		$('.gallery-slider-wrapper').css({
			'width': mainWidth + 'px'
		});
		$('.gallery-viewport').css({
			'width': galleryViewportWidth + 'px'
		});
	}
	$('.gallery-slider-wrapper-teaser').css({
		'width': '900px'
	});
	$('.gallery-viewport-teaser').css({
		'width': '838px'
	});
}
function loginShow(){
	$('#show-login').click(function(){
		$('#login-error-box').hide();
		$('#loginbox').show("normal");
	});
}
function loginFunctions(){
 	$('#login-username').click(function(){
 		$('#login-username').attr('value', '');
 	});
	$('#login-password').click(function(){
		$('#login-password').attr('value', '');
	});
 	$('#password-clear').show();
 	$('#login-password').hide();
 	$('#password-clear').focus(function() {
 	    $('#password-clear').hide();
 	    $('#login-password').show();
 	    $('#login-password').focus();
 	});
 	$('#login-password').blur(function() {
 	    if($('#login-password').val() == '') {
 	        $('#password-clear').show();
 	        $('#login-password').hide();
 	    }
 	});

	$('#close-login-dialog').click(function(){
		$('#loginbox').hide("normal");
	});

}
function searchFunctions() {
	$('#searchword').click(function(){
		$('#searchword').attr('value', '');
	});
}
function tooltip() {
	$('#main a.image-item').tooltip( {
		track: true,
		delay: 0,
		showURL: false,
		fade: 250,
		top: -150,
  		bodyHandler: function() { 
			return $('<div style="width: ' + $(this).attr("cmdb:preview_width") + 'px;"/>').html( '<img src="' + $(this).attr("cmdb:preview") + '"><br>' + $(this).attr("cmdb:caption")  + '<br><i>Archiv-ID: ' + $(this).attr("cmdb:mid") + '</i>' );
  		}
	});	
}
/*
 * Ab hier hauptsÃ¤chlich Old-School mit globalen Variablen
 * --> keine DOM-Erweiterung, deswegen EinschrÃ¤nkungen (Animation hÃ¶rt auf,
 * wenn man bei einem anderen Slider auf einen Button klickt u.Ã¤.)
 */
var slideObject = null; // Element, welches gescrollt werden soll
var slideDirection = 0; // Sliderichtung: 0 nach links, 1 nach rechts
var sliderCount = 0;

/*
 * Funktion zum Erstellen der Pager-Buttons 
 */
function createPager(){
	var sliderElements = $(".gallery-slider-wrapper");
	
	//alert(sliderElements.length);
	
	sliderElements.each(function(el){
		parentElement = sliderElements[el];
		children = $(parentElement).find(".gallery-panel-element");
		//alert(children.length);
		
		// Kindbreite auslesen
		childWidth = children[0].offsetWidth;
		//alert(childWidth);
		
		// Viewportbreite auslesen
		viewport = $(parentElement).find(".gallery-viewport");
		var viewportWidth = viewport[0].offsetWidth;
		//alert(viewportWidth);
		
		// Anzahl der "Seiten" = Kindbreite * Kinder / Viewportbreite
		pageCount = (children.length * childWidth) / viewportWidth;
		
		// Wrapper fÃ¼r die Icons anlegen, falls net angelegt, sonst Ã¼berschreiben
		var pageWrap = $(parentElement).find(".gallery-pagerwrap")[0];
		if (pageWrap != null && pageWrap != undefined) {
			var children = $(pageWrap).find(".gallery-page-icon");
			children.each(function(e){
				pageWrap.removeChild(children[e]);
			});
			parentElement.removeChild(pageWrap);
		}
		$(parentElement).append("<div class='gallery-pagerwrap'></div>");
		
		//alert(pageCount);
		
		// Slideelement
		panel = $(parentElement).find(".gallery-panel")[0];
		panel.setAttribute("id", "__slidePanel" + sliderCount);
		
		// Einzelne Icons anlegen
		for(var i = 0; i < pageCount; i++){
			//console.debug(i);
			if (i > 0) {
				klassName = "gallery-page-icon";
			}
			else{
				klassName = "gallery-page-icon-highlight";
			}
			slideDirection = 1;
			$(parentElement).find(".gallery-pagerwrap").append("<div class='"+klassName+"' onclick='slideTo("+ (i * viewportWidth) +", \"__slidePanel"+ sliderCount +"\");toggleHighlight(this);'> </div>");
		}
		sliderCount += 1;
	});
}

/*
 * Eventhandler fÃ¼r den Next-Button
 * --> Slide nach links
 */
function slideLeft(event) {
	// Normalisieren des Elements, welches den Event verarbeitet
	issuer = event.target ? event.target : event.srcElement;
	// Elternelementelement holen
	parentElement = issuer.parentNode;
	// Slider holen
	var elements = $('.gallery-panel');
	elements.each(function(el, i){
		//alert(elements[el]);
		if (elements[el].parentNode.parentNode == parentElement){
			slideObject = elements[el];
			slideDirection = 0;
			leftString = elements[el].style.left;			
			target = (Number(leftString.substr(0, leftString.length - 2)) -  slideObject.parentNode.offsetWidth + 164);
			//console.debug(elements[el].style.left);
			slide(target, 80, 70);
		}
	});
}

/*
 * Eventhandler fÃ¼r den Previous-Button
 * --> Slide nach rechts
 */
function slideRight(event) {
	// Normalisieren des Elements, welches den Event verarbeitet
	issuer = event.target ? event.target : event.srcElement;
	// Elternelementelement holen
	parentElement = issuer.parentNode;
	// Slider holen
	var elements = $('.gallery-panel');
	elements.each(function(el, i){
		//alert(elements[el]);
		if (elements[el].parentNode.parentNode == parentElement){
			slideObject = elements[el];
			slideDirection = 1;
			leftString = elements[el].style.left;
			target = (Number(leftString.substr(0, leftString.length - 2)) + slideObject.parentNode.offsetWidth - 164);
			// console.debug(elements[el].style.left);
			slide(target, 80, 70);
		}
	});
}

/*
 * Hilfsfunktion fÃ¼r die Scrollanimation
 */
function slide(target, offset, delay){
	if (slideObject == null) return;
	viewPort = slideObject.parentNode;	
	//alert(target);
	children = $(parentElement).find(".gallery-panel-element").length + 1;
	//children = slideObject.childNodes.length / fix;
	viewPortWidth = viewPort.offsetWidth;
	childrenWidth = (-1) * 168 * (children) + viewPortWidth;
	
	leftString = slideObject.style.left;
	left = Number(leftString.substr(0, leftString.length - 2));

	// Nach Sliderichtung unterscheiden, da die Extremwerte berÃ¼cksichtigt werden wollen
	// --> Scroll-Lock 
	if (slideDirection == 1 && left < target && left < 0 && slideObject != null) {
		// // console.debug((left + offset));
		
		// Extremwerte festlegen - so wird verhindert, dass Ã¼ber die Grenzen gescrollt wird
		if (left + offset < 0) {
			slideObject.style.left = (left + offset) + "px";
			$(slideObject.parentNode.parentNode).find(".gallery-button-previous")[0].style.backgroundImage = "url(/css/images/default/button-slider-left.gif)";
			$(slideObject.parentNode.parentNode).find(".gallery-button-next")[0].style.backgroundImage = "url(/css/images/default/button-slider-right.gif)";
		}
		else{
			slideObject.style.left = "0px";
			$(slideObject.parentNode.parentNode).find(".gallery-button-previous")[0].style.backgroundImage = "url(/css/images/default/button-slider-left-inactive.gif)";
			$(slideObject.parentNode.parentNode).find(".gallery-button-previous")[0].style.cursor = "default";
			$(slideObject.parentNode.parentNode).find(".gallery-button-next")[0].style.backgroundImage = "url(/css/images/default/button-slider-right.gif)";
		}
		// Es soll weiteranimiert werden
		window.setTimeout("slide("+ target +","+ offset +","+ delay +")", delay);
	}
	else if (slideDirection == 0 && left > target && left > childrenWidth && slideObject != null) {
		// console.debug(slideObject.id + " " + childrenWidth + " " + (left - offset));
		if (left - offset > childrenWidth) {
			slideObject.style.left = (left - offset) + "px";
			$(slideObject.parentNode.parentNode).find(".gallery-button-previous")[0].style.backgroundImage = "url(/css/images/default/button-slider-left.gif)";
			$(slideObject.parentNode.parentNode).find(".gallery-button-next")[0].style.backgroundImage = "url(/css/images/default/button-slider-right.gif)";
		}
		else{
			slideObject.style.left = (childrenWidth) + "px";
			$(slideObject.parentNode.parentNode).find(".gallery-button-next")[0].style.backgroundImage = "url(/css/images/default/button-slider-right-inactive.gif)";
			$(slideObject.parentNode.parentNode).find(".gallery-button-next")[0].style.cursor = "default";
			$(slideObject.parentNode.parentNode).find(".gallery-button-previous")[0].style.backgroundImage = "url(/css/images/default/button-slider-left.gif)";
		}
		window.setTimeout("slide("+ target +","+ offset +","+ delay +")", delay);
	}
	else{
		// Animation ist abgeschlossen - slideObject wird auf null gesetzt. 
		slideObject = null;
	}
}

function slideTo(target, elementId){	
	element = $("#" + elementId)[0];
	target = (-1) * target;
	slideDirection = 0;
	if (element.offsetLeft < target) slideDirection = 1;
	slideObject = element;
	slide(target, 80, 70);
}

function toggleHighlight(obj){
	var e = $(obj.parentNode).find(".gallery-page-icon-highlight");
	e.each(function(index){
		e[index].className = "gallery-page-icon";
	});
	obj.className = "gallery-page-icon-highlight";
}

/* TEASER TEASER TEASER
 * Ab hier hauptsÃ¤chlich Old-School mit globalen Variablen
 * --> keine DOM-Erweiterung, deswegen EinschrÃ¤nkungen (Animation hÃ¶rt auf,
 * wenn man bei einem anderen Slider auf einen Button klickt u.Ã¤.)
 */
var slideObjectTeaser = null; // Element, welches gescrollt werden soll
var slideDirectionTeaser = 0; // Sliderichtung: 0 nach links, 1 nach rechts
var sliderCountTeaser = 0;

/*
 * Funktion zum Erstellen der Pager-Buttons 
 */
function createPagerTeaser(){
	var sliderElements = $(".gallery-slider-wrapper-teaser");
	
	//alert(sliderElements.length);
	
	sliderElements.each(function(el){
		parentElement = sliderElements[el];
		children = $(parentElement).find(".gallery-panel-element-teaser");
		//alert(children.length);
		
		// Kindbreite auslesen
		childWidth = children[0].offsetWidth;
		//alert(childWidth);
		
		// Viewportbreite auslesen
		viewport = $(parentElement).find(".gallery-viewport-teaser");
		var viewportWidth = viewport[0].offsetWidth;
		//alert(viewportWidth);
		
		// Anzahl der "Seiten" = Kindbreite * Kinder / Viewportbreite
		pageCount = (children.length * (childWidth + 20)) / viewportWidth;
		
		// Wrapper fÃ¼r die Icons anlegen, falls net angelegt, sonst Ã¼berschreiben
		var pageWrap = $(parentElement).find(".gallery-pagerwrap-teaser")[0];
		if (pageWrap != null && pageWrap != undefined) {
			var children = $(pageWrap).find(".gallery-page-icon-teaser");
			children.each(function(e){
				pageWrap.removeChild(children[e]);
			});
			parentElement.removeChild(pageWrap);
		}
		$(parentElement).append("<div class='gallery-pagerwrap-teaser'></div>");
		
		//alert(pageCount);
		
		// Slideelement
		panel = $(parentElement).find(".gallery-panel-teaser")[0];
		panel.setAttribute("id", "__slidePanelTeaser" + sliderCountTeaser);
		
		// Einzelne Icons anlegen
		for(var i = 0; i < pageCount; i++){
			//console.debug(i);
			if (i > 0) {
				klassName = "gallery-page-icon-teaser";
			}
			else{
				klassName = "gallery-page-icon-highlight-teaser";
			}
			slideDirectionTeaser = 1;
			$(parentElement).find(".gallery-pagerwrap-teaser").append("<div class='"+klassName+"' onclick='slideToTeaser("+ (i *  (childWidth + 10)) +", \"__slidePanelTeaser"+ sliderCountTeaser +"\");toggleHighlightTeaser(this);'> </div>");
		}
		sliderCountTeaser += 1;
	});
}

/*
 * Eventhandler fÃ¼r den Next-Button
 * --> Slide nach links
 */
function slideLeftTeaser(event) {
	// Normalisieren des Elements, welches den Event verarbeitet
	issuer = event.target ? event.target : event.srcElement;
	// Elternelementelement holen
	parentElement = issuer.parentNode;
	// Slider holen
	var elements = $('.gallery-panel-teaser');
	elements.each(function(el, i){
		//alert($(elements[el]).children()[1]);
		if (elements[el].parentNode.parentNode == parentElement){
			slideObjectTeaser = elements[el];
			slideDirectionTeaser = 0;
			leftString = elements[el].style.left;			
			target = (Number(leftString.substr(0, leftString.length - 2)) - $(elements[el]).children()[1].offsetWidth) - 2;
			//console.debug(target);
			slideTeaser(target, 25, 25);
		}
	});
}

/*
 * Eventhandler fÃ¼r den Previous-Button
 * --> Slide nach rechts
 */
function slideRightTeaser(event) {
	// Normalisieren des Elements, welches den Event verarbeitet
	issuer = event.target ? event.target : event.srcElement;
	// Elternelementelement holen
	parentElement = issuer.parentNode;
	// Slider holen
	var elements = $('.gallery-panel-teaser');
	elements.each(function(el, i){
		//alert(elements[el]);
		if (elements[el].parentNode.parentNode == parentElement){
			slideObjectTeaser = elements[el];
			slideDirectionTeaser = 1;
			leftString = elements[el].style.left;
			target = (Number(leftString.substr(0, leftString.length - 2)) + $(elements[el]).children()[1].offsetWidth) + 2;
			// console.debug(elements[el].style.left);
			slideTeaser(target, 25, 25);
		}
	});
}

/*
 * Hilfsfunktion fÃ¼r die Scrollanimation
 */
function slideTeaser(target, offset, delay){
	if (slideObjectTeaser == null) return;
	viewPort = slideObjectTeaser.parentNode;	
	//alert(target);
	children = $(parentElement).find(".gallery-panel-element-teaser").length ;
	viewPortWidth = viewPort.offsetWidth;
	childrenWidth = (-1) * 846 * (children) + viewPortWidth;
	
	leftString = slideObjectTeaser.style.left;
	left = Number(leftString.substr(0, leftString.length - 2));
	if (slideDirectionTeaser == 1 && left < target && left < 0 && slideObjectTeaser != null) {
		if (left + offset < 0) {
			slideObjectTeaser.style.left = (left + offset) + "px";
			$(slideObjectTeaser.parentNode.parentNode).find(".gallery-button-previous-teaser")[0].style.backgroundImage = "url(/css/images/default/button-slider-left-teaser.gif)";
			$(slideObjectTeaser.parentNode.parentNode).find(".gallery-button-next-teaser")[0].style.backgroundImage = "url(/css/images/default/button-slider-right-teaser.gif)";
		}
		else{
			slideObjectTeaser.style.left = "0px";
			$(slideObjectTeaser.parentNode.parentNode).find(".gallery-button-previous-teaser")[0].style.backgroundImage = "url(/css/images/default/button-slider-left-inactive-teaser.gif)";
			$(slideObjectTeaser.parentNode.parentNode).find(".gallery-button-previous-teaser")[0].style.cursor = "default";
			$(slideObjectTeaser.parentNode.parentNode).find(".gallery-button-next-teaser")[0].style.backgroundImage = "url(/css/images/default/button-slider-right-teaser.gif)";
		}
		window.setTimeout("slideTeaser("+ target +","+ offset +","+ delay +")", delay);
	}
	else if (slideDirectionTeaser == 0 && left > target && left > childrenWidth && slideObjectTeaser != null) {
		if (left - offset > childrenWidth) {
			slideObjectTeaser.style.left = (left - offset) + "px";
			$(slideObjectTeaser.parentNode.parentNode).find(".gallery-button-previous-teaser")[0].style.backgroundImage = "url(/css/images/default/button-slider-left-teaser.gif)";
			$(slideObjectTeaser.parentNode.parentNode).find(".gallery-button-next-teaser")[0].style.backgroundImage = "url(/css/images/default/button-slider-right-teaser.gif)";
		}
		else{
			slideObjectTeaser.style.left = (childrenWidth) + "px";
			$(slideObjectTeaser.parentNode.parentNode).find(".gallery-button-next-teaser")[0].style.backgroundImage = "url(/css/images/default/button-slider-right-inactive-teaser.gif)";
			$(slideObjectTeaser.parentNode.parentNode).find(".gallery-button-next-teaser")[0].style.cursor = "default";
			$(slideObjectTeaser.parentNode.parentNode).find(".gallery-button-previous-teaser")[0].style.backgroundImage = "url(/css/images/default/button-slider-left-teaser.gif)";
		}
		window.setTimeout("slideTeaser("+ target +","+ offset +","+ delay +")", delay);
	}
	else{
		slideObjectTeaser = null;
	}
}

function slideToTeaser(target, elementId){	
	element = $("#" + elementId)[0];
	target = (-1) * target;
	slideDirectionTeaser = 0;
	if (element.offsetLeft < target) slideDirectionTeaser = 1;
	slideObjectTeaser = element;
	slideTeaser(target, 25, 25);
}

function toggleHighlightTeaser(obj){
	var e = $(obj.parentNode).find(".gallery-page-icon-highlight-teaser");
	e.each(function(index){
		e[index].className = "gallery-page-icon-teaser";
	});
	obj.className = "gallery-page-icon-highlight-teaser";
}

function login(targetURL) {
	var userid = $("#login-username").attr('value');
	var passwd = $("#login-password").attr('value');
	$.ajax({
		type: 'POST',
  		url: '/CMDB/',
  		data: { action: '502', username: userid, password: passwd },
  		dataType: 'xml',
  		success: function(res) {
			var status = $('authenticated', res).text();
			if (status == 1) {
				window.location.href = targetURL;
  			} else {
				$('#login-error-msg').text('Benutzername/Kennwort ist falsch!');
				$('#login-error-box').show();
			}
		}
	});
}

function addToBasket(mid) {
	$.ajax({
		type: 'POST',
  		url: '/CMDB/',
  		data: { action: '506', id: mid },
  		dataType: 'xml',
  		success: function(res) {
			var success = $(res).find('success').text();
			if (success == 'true') {
				$.jGrowl("Bild wurde hinzugefügt", {
					closer: false,
					life: 1500
				});
  			}
		}
	});
}

function updateOpenTopics(tid, mode) {
	$.ajax({
		type: 'POST',
  		url: '/CMDB/',
  		data: { action: '507', tid: tid, mode: mode },
  		dataType: 'xml'
	});
}

function showLoginDialog() {
	$('#login-error-box').hide();
	$('#loginbox').show("normal");
}
