/**
 * Beinhaltet alle Scripts die bei jedem Seitenaufruf ausgefuehrt werden sollen
 */
$(document).keydown(function(e) 
{
	if(e.keyCode == 27) // ESC
	{
		PowerHour.ResetGlobalPanel();
	}
});

$(document).ready(function()
{
	//Ein Request wurde geschickt
	$(document).ajaxSend(function(){PowerHour.Ajax.SetLoadingState(true);});
	//Alle Requests abgeschlossen
	$(document).ajaxStop(function(){PowerHour.Ajax.SetLoadingState();});
	
	$('#tooltipWhatShow').mouseoutclick(function()
	{
		if(!$('#tooltipWhatShow').is(':hidden'))
			$('#tooltipWhatShow').fadeOut();
	});
	
	$('#tooltipWhereShow').mouseoutclick(function()
	{
		if(!$('#tooltipWhereShow').is(':hidden'))
			$('#tooltipWhereShow').fadeOut();
	});
	
	$('#tooltipWhenShow').mouseoutclick(function()
	{
		if(!$('#tooltipWhenShow').is(':hidden'))
			$('#tooltipWhenShow').fadeOut();
	});
	
	$('#loginFormDiv').mouseoutclick(function()
	{
		if(!$('#loginFormDiv').is(':hidden'))
			$('#loginFormDiv').fadeOut();
	});
	/*
	$('#globalConfigPanel').mouseoutclick(function()
	{
		$('a.iconAwesomeToolbar.active').removeClass('active');
		$('#globalConfigPanel').hide();
	});
	*/
	var globalSearchRequest = null;	
		
	$('li#what_annoninput + input').setDefaultValue();
	$('input[name=what]').setDefaultValue();
	$('input[name=where]').setDefaultValue();
	$('input[name=when]').setDefaultValue();
	$('input#globalSearch').setDefaultValue();
	
	// Tooltip prüfen
	/*if($.cookie('hideToolbarHint') == null)
		$('#toolbarHint').show();*/
	
	PowerHour.Drinks.InitAutocomplete('#what',
		function(event, data, formatted) 
		{
			var val = $('#hiddenWhat').val();
			if(val.length > 0)
			{
				val += ",";
			}
			if(data['typeId'])
				val += 'd_';
			else
				val += 'dt_';
			val += data.id;
			$('#hiddenWhat').val(val);
		}
	);
	
	$("#where").jautocomplete('/locations/searchautocomplete', {
		dataType: "json",
		minChars: 1,
		max: 30,
		cacheLength : 0,
		selectFirst: false,
		multiple: true,
        multipleSeparator: ", ", 
        scrollHeight: 300,
		parse: function(data) 
		{
			return $.map(data, function(row) {
				return {
					data: row,
					value: row.id,
					result: row.name
				};
			});
		},
		formatItem: function(item) 
		{
			return item.name;
		},
		formatMatch: function(item)
		{
			return item.name;
		}
	});
	
	$("#where").result(function(event, data, formatted)
	{
		var val = $('#hiddenWhere').val();
		if(val.length > 0)
		{
			val += ",";
		}
		val += data.id;
		$('#hiddenWhere').val(val);
	});
	
	$('input[name=what],input[name=where]').keyup(function(e)
	{
		if($(this).val().length <= 0)
		{
			switch($(this).attr('name'))
			{
				case 'where':
					$('input[name=h2]').val('');
					break;
				case 'what':
					$('input[name=h1]').val('');
					break;
			}
		}
	});
	
	$('form[name=globalSearchForm]').submit(function(){return true;});
	
	/*
	 * Global Panel - Locations Search
	 */
	$("#globalSearch").keyup(function(e)
	{
		switch(e.keyCode)
		{
			// ENTER
			case 13:
				var href;
				if($('#awesomeContentBox li a.selected'))
					href = $('#awesomeContentBox li a.selected').attr('href');
				else if($('#awesomeContentBox li a.entry').length > 0)
					href = $('#awesomeContentBox li a.entry').eq(0).attr('href');
				
				if(href)
					window.location.href = href;
					
				return true;
			// KEY UP
			case 38:
				var elem = $('div#awesomeContentBox li a.selected');
				if(elem.length > 0)
				{
					elem.removeClass('selected');
					elem.parent('li').prev().children('a.entry').addClass('selected');						
				}
				else
				{
					$('div#awesomeContentBox li:last a.entry').addClass('selected');
				}
				return;	
			
			// KEY DOWN
			case 40:
				var elem = $('div#awesomeContentBox li a.selected');
				if(elem.length > 0)
				{
					elem.removeClass('selected');
					elem.parent('li').next().children('a.entry').addClass('selected');
				}
				else
				{
					$('#awesomeContentBox li:first a.entry').addClass('selected');
				}
				return;
			
			default:
				if($(this).val().length == 0 || e.keyCode == 27) 
				{
					PowerHour.ResetGlobalPanel();
					return false;
				}
				break;
		}
				
		if($(this).val().length > 1 && PowerHour.AwesomeGlobalSearch.LastSearchedText != $(this).val())
		{
			$('#routeContentBox').hide(); // Routen-Div verstecken
			$('#awesomeContentBox').show(); // AwesomeContent-Div anzeigen
			$(".whiteFlap .content a").removeClass('active');
			var q = $.trim($(this).val());
			
			if(globalSearchRequest != null)
				globalSearchRequest.abort();
			
			globalSearchRequest = $.post('/locations/globalsearch/', {'q' : q },
				function(data)
				{
					$('#searchResultsCounter').html('Deine Suche nach <strong>' + q + '</strong> ergab <strong>' + data.cnt + '</strong> Treffer');	
					
					$('#awesomeContentBox').html(data.html);
					$('#globalConfigPanel').show();	
					$('#awesomeContentBox li:first a.entry').addClass('selected');
				},'json');
		}
		PowerHour.AwesomeGlobalSearch.LastSearchedText = $(this).val();
	});
	
	/*
	 * Global Panel - Change User Position
	 */
	$("a.iconChangeUserPosition").click(function(e)
	{
		if($(this).hasClass('active')) 
		{
			PowerHour.ResetGlobalPanel();
			return false;
		}
		$('div#routeContentBox').hide(); // Routen-Div verstecken
		$('#awesomeContentBox').show(); // AwesomeContent-Div anzeigen
		$(".whiteFlap .content a").removeClass('active');
		$('#searchResultsCounter').html('');
		$('#globalConfigPanel').show();	
		$(this).addClass('active');
		$('#awesomeContentBox').html('<div id="globalChangeUserPositionMap"></div>');
		$('#searchResultsCounter').html('&Auml;ndere deinen Standort einfach per Drag\'n\'Drop');

		if(PowerHour.User.IsLoggedIn)
		{		
			PowerHour.GoogleMap.initializeWithMarker('globalChangeUserPositionMap', PowerHour.User.GetGeolocationMarker(function(latlng) { PowerHour.User.setGeolocation2DB(latlng); }), 13);
		}
		else
		{
			PowerHour.GoogleMap.initializeWithMarker('globalChangeUserPositionMap', PowerHour.User.GetGeolocationMarker());			
		}		
	});
	
	/*
	 * Global Panel - Deine Lieblingslocations
	 */
	$("a.iconFavouriteLocations").click(function(e)
	{
		if($(this).hasClass('active')) 
		{
			PowerHour.ResetGlobalPanel();
			return false;
		}
		$('div#routeContentBox').hide(); // Routen-Div verstecken
		$('#awesomeContentBox').show(); // AwesomeContent-Div anzeigen
		$(".whiteFlap .content a").removeClass('active');
		$('#searchResultsCounter').html('');
		
		$.post('/user/ajaxfavouritelocations/',
				function(data)
				{
					if(data.cnt > 0)
					{
						$('#searchResultsCounter').html('Deine ' + data.cnt + ' Lieblingslocations');	
					}
					else
					{
						$('#searchResultsCounter').html('');
					}
					
					$('#awesomeContentBox').html(data.html);
					$('#globalConfigPanel').show();
				},'json');
		
		$(this).addClass('active');
	});
	
	/*
	 * Global Panel - Favourite Links
	 */
	$("a.iconFavouriteLinks").click(function(e)
	{
		if($(this).hasClass('active')) 
		{
			PowerHour.ResetGlobalPanel();
			return false;
		}

		$('div#routeContentBox').hide(); // Routen-Div verstecken
		$('#awesomeContentBox').show(); // AwesomeContent-Div anzeigen
		$(".whiteFlap .content a").removeClass('active');
		$('#searchResultsCounter').html('');
		
		if(PowerHour.User.IsLoggedIn)
		{
			var additionalLinks = '<li><a class="entry" href="/user/routes">Meine Routen</a></li>';
		}
		else
		{
			var additionalLinks = '<li><a class="entry" href="/user/register">Mitglied werden</a></li>';
		}
			
		$('#awesomeContentBox').html('<ul><li><a class="entry" href="/locations/add">Location eintragen</a></li>' + additionalLinks + '</ul>');
		$('#globalConfigPanel').show();
		$('#searchResultsCounter').html('Quicklinks');
				
		$(this).addClass('active');
	});
	
	/*
	 * Global Panel - User Profile
	 */
	$("a.iconUserProfile").click(function(e)
	{
		if($(this).hasClass('active')) 
		{
			PowerHour.ResetGlobalPanel();
			return false;
		}

		$('div#routeContentBox').hide(); // Routen-Div verstecken
		$('#awesomeContentBox').show(); // AwesomeContent-Div anzeigen
		$(".whiteFlap .content a").removeClass('active');
		$('#searchResultsCounter').html('');
			
		$('#awesomeContentBox').html('<ul><li><a class="entry" href="/user/edit">Profil bearbeiten</a></li>'
										+'<li><a class="entry" href="/user/favouritelocations">Lieblingslocations</a></li>'
										+'<li><a class="entry" href="/user/nearlocations">Nahe Locations</a></li>'
										+'<li><a class="entry" href="/user/nearhappyhours">Nahe Happy Hours</a></li>'
										+'<li><a class="entry" href="/user/routes">Meine Routen</a></li>'
										+'<li><a class="entry" href="/user/changepassword">Passwort &auml;ndern</a></li>'
										+'<li><a class="entry" href="/user/changeemail">E-Mail Adresse &auml;ndern</a></li></ul>');
		$('#globalConfigPanel').show();
		$('#searchResultsCounter').html('Dein Profil');
				
		$(this).addClass('active');
	});
	
	/*
	 * Global Panel - Route Locations
	 */
	$("a.iconRouteLocations, a#cntRouteLocations").live('click',function(e)
	{
		var _this = $(this);
		
		if(_this.attr('id') == 'cntRouteLocations')
			 _this = $('a.iconRouteLocations');
		
			
		if(_this.hasClass('active')) 
		{
			PowerHour.ResetGlobalPanel();
			return false;
		}
		if(PowerHour.HappyHour.Find.Current.route.getHappyhoursCount() == 0)
			$('#noLocationsInRouteInfo').show();
		
		$('#awesomeContentBox').hide(); // AwesomeContent-Div ausblenden
		$('div#routeContentBox').show(); // Routen-Div anzeigen
		$(".whiteFlap .content a").removeClass('active');
			
		$('#globalConfigPanel').show();
		$('#searchResultsCounter').html('Partyroute');
				
		_this.addClass('active');
	});
	
	$("#globalConfigPanel a#closeButton").click(function()
	{
		PowerHour.ResetGlobalPanel();
	});
	
	$('#linkChangePosition').live('click', function()
	{
		PowerHour.User.ShowChangeGeolocationWindow();
		
		return false;
	});
	
	$('#searchform').submit(function()
	{
		$('input[name=what], input[name=where], input[name=when]').each(function()
		{
			if($(this).val() == $(this).attr('title'))
			{
				$(this).val('');
			}
		});
	});
	
	// Accordion bei Happy Hour Add
	$('.multipleAccordion div.head').click(function() 
	{
		var span = $(this).children("span");
		
		span.toggleClass("closed");
		
		$(this).next().toggle();
		
		span.toggleClass("open");
		return false;
	});
	
	// Accordion bei Locations View fuer Happy Hours
	$('.multipleAccordion a.head').live('click', function() 
	{
		$(this).parent().next().slideToggle();

		return false;
	});
	
	//$('.multipleAccordion .head').next().hide();
	
	// Loginfenster einblenden
	$('a[href="#login"]').live('click', function ()
	{		
		PowerHour.User.ShowLogin();
		if($(this).attr('class') != 'link') return false;
	});
	
	// Suchleiste - Tooltips einblenden
	$('div.inputDiv a').click(function()
	{
		PowerHour.Tooltips.showTooltip($(this).attr('id'));
	});
	
	// Suchleiste - Tooltips -> Bei Klick in Textfeld einfuegen
	$('ul.tooltipText li a').click(function()
	{
		//TODO variabel fuer alle 3 Boxen machen (ned fix "when"!)
		var rel = $(this).attr('rel');
		PowerHour.Tooltips.insertIntoField(rel,$(this).text().trim(), $(this).attr('href').replace(/\#/g,''));
		return false;
	});
	
	// Suchleiste - Tooltips - Uhrzeit in Textfeld einfuegen
	$('form#userChoiceWhen').submit(function()
	{
		PowerHour.Tooltips.insertTime();
		return false;
	});
	
	$('a.onlyLoggedIn').unbind('click');
	
	$('a.onlyLoggedIn').bind('click', function()
	{
		PowerHour.Alert("Sorry, f&uuml;r diese Funktion musst du eingeloggt sein.<br />Du kannst dich <a class='link' href='/user/register'>hier</a> kostenlos registrieren und viele Vorteile nutzen! :-) ", "Funktion nur f&uuml;r Mitglieder");
		return false;
	});
	
	/*
	 * List Navigation
	 */
	$('ul.listNavi li a').live('click', function()
	{
		// Content Block ausblenden
		var href = $(this).attr('href');
		var _this = $(this);
		
		if(_this.parent('li').hasClass('active'))
			return false;
		
		$('#contentBox').fadeOut(200, function() 
		{
			$.post(href,{}, function(data)
			{
				// Liste durchloopen und alten aktiven Tab inaktiv setzen
				$('ul.listNavi li').each(function (i) 
				{
					if ($(this).hasClass('active')) {
					  $(this).removeClass('active');
					}
				});
				
				// Formatierung fuer angeklickten Tab setzen
				_this.parent('li').addClass('active');
				
				$('#contentBox').html(data);
				$('#contentBox').fadeIn(400);
			});
		});
		return false;
	});
	
	/*
	 * GLOBAL - Send Bug Report
	 */ 
	$('a.sendBugReport').click(function()
	{	
		PowerHour.Prompt(	'', 
							'Bug Informationen senden', 
							[
							 {
								 name : 'information',
								 type : 'textarea',
								 label : 'Bitte beschreibe den Fehler m&ouml;glichst genau:'
							 }
							], 
							function(res)
							{
								if(res && res.information.length > 0)
								{
									$.post(	'/site/sendbugreport',
											{
												'information' : res.information
											},
											function(res)
											{
												if(res)
												{
													PowerHour.Alert('Danke f&uuml; deine Mithilfe!',':-)');		
												}
											});
								}
							});	
		return false;
	});
	
	/*
	 * GLOBAL - Hide Toolbar Hint
	 */
	$('#hideToolbarHint').click(function()
	{	
		$.cookie('hideToolbarHint', '1', { 'expires' : 30 });
		$('#toolbarHint').fadeOut();
	});
	
	if(PowerHour.Browser.SupportsGeolocation())
	{
		$('#divGeolocationInfo').show();
	}
	
});

/*
 * ******************************* DEFAULT VALUE / SEARCH *******************************************
 */

/**
 * Legt ein Default-Value fuer eine Textbox fest.
 * Wird auf die Textbox geklickt, die den Default-Value enthaelt, wird dieser aus der 
 * Textbox geloescht. Wird die Textbox ohne Eingabe verlassen, wird der Inhalt wieder
 * auf den Default-Value zurueckgesetzt.
 *
 * @param value string Default-Wert der Textbox
 * @param options Object
 *                  - class : CSS-Klasse der Textbox die den Default-Value enthaelt
 */
$.fn.setDefaultValue = function(options)
{
    var options = $.extend(
    						{ 
								css : 'txt_default'
							}, options);
    
    return this.each(function()
    {
        var $this = $(this);
        
        var value = $this.attr('title');
        
        $(this).attr('autocomplete','off');
        
        if($this.val().length <= 0 || $this.val() == value)
        {
            $this.addClass(options.css);
            $this.val(value);
        }
        
        $this.click(clear);
        
        $this.blur(fill);
        
        $this.focus(clear).blur();
        
        function clear()
        {
            if($this.hasClass(options.css) || $this.val() == value)
            {
                $this.val('');
                $this.removeClass(options.css);
            }
        }
        
        function fill()
        {
            if($this.val().length <= 0)
            {
                $this.addClass(options.css);
                $this.val(value);
            }
        }
        $(window).unload(clear); // Firefox-Autocomplete
    });  
};
/*@todo Diese Version umsetzen
$.fn.setDefaultValue = function(options)
{
    var options = $.extend(
    						{ 
								css : 'txt_default',
								values : new Array(),
								prefix : 'z.B. '
							}, options);
    
    return this.each(function()
    {
        var $this = $(this);
        
        var defaultValue = $this.attr('title');
        
        var iValue = 0;
        
        if(!options.values.hasValue(defaultValue))
        	options.values.push(defaultValue);
        
        if($this.val().length <= 0 || options.values.hasValue($this.val().replace(options.prefix,'')))
        {
            $this.addClass(options.css);
            $this.val(options.prefix + defaultValue);
        }
        
        $this.click(clear);
        
        $this.blur(fill);
        
        $this.focus(clear).blur();
        
        window.setInterval(fillWithNext, 1300);
        
        function clear()
        {
            if($this.hasClass(options.css) || options.values.hasValue($this.val().replace(options.prefix,'')))
            {
                $this.val('');
                $this.removeClass(options.css);
            }
        }
        
        function fill()
        {
            if($this.val().length <= 0)
            {
                $this.addClass(options.css);
                $this.val(options.prefix + defaultValue);
            }
        }
        
        function fillWithNext()
        {
    		if($this.hasClass(options.css) || options.values.hasValue($this.val()))
    		{
    			iValue = (iValue + 1 >= options.values.length) ? 0 : iValue + 1;
    			$this.val(options.prefix + options.values[iValue]);
    		}
        }
        
        $(window).unload(clear); // Firefox-Autocomplete
    });  
};*/
