/**
 * jQuery Cookie plugin
 *
 * Copyright (c) 2010 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */
jQuery.cookie=function(key,value,options){if(arguments.length>1&&String(value)!=="[object Object]"){options=jQuery.extend({},options);if(value===null||value===undefined){options.expires=-1;}
if(typeof options.expires==='number'){var days=options.expires,t=options.expires=new Date();t.setDate(t.getDate()+days);}
value=String(value);return(document.cookie=[encodeURIComponent(key),'=',options.raw?value:encodeURIComponent(value),options.expires?'; expires='+options.expires.toUTCString():'',options.path?'; path='+options.path:'',options.domain?'; domain='+options.domain:'',options.secure?'; secure':''].join(''));}
options=value||{};var result,decode=options.raw?function(s){return s;}:decodeURIComponent;return(result=new RegExp('(?:^|; )'+encodeURIComponent(key)+'=([^;]*)').exec(document.cookie))?decode(result[1]):null;};

// own scripts
jQuery(document).ready(function() {
	
/* 
 * Alle E-Mail Adressen bekommen ein no-wrap
 */	
 	//jQuery('a').attr("href").match("/mailto\:/").css('white-space', 'no-wrap');
	
/* 
 * Fügt nötigen HTML Code für Buttons ein
 * buttonOverlay öffnet im Overlay mit typeNum = 123
 */
	jQuery('a.button').each(
		function(){
			jQuery(this).wrap('<div class="cta">');
			jQuery(this).wrapInner('<span class="linkbox"></span>');
			jQuery(this).prepend('<span class="btn"></span>');
		}
	);
	jQuery('a.buttonOverlay').each(
		function(){
			jQuery(this).wrap('<div class="cta">');
			jQuery(this).wrapInner('<span class="linkbox"></span>');
			jQuery(this).prepend('<span class="btn"></span>');
			jQuery(this).attr('rel', 'shadowbox[Mixed];width=840;height=410');
			if (jQuery(this).attr('href').toString().search(new RegExp(/\?/))) {
				jQuery(this).attr('href', jQuery(this).attr('href') + '?type=123');
			} else {
				jQuery(this).attr('href', jQuery(this).attr('href') + '&type=123');
			}
		}
	);
	
// WAI-ARIA per Skript zuweisen - agbewandelt von https://github.com/yatil/accessifyhtml5.js 
	var fixes = {
        'body'		   		: { 'role':          'application'   },
        '#header'   		: { 'role':          'banner'        },
        '#footer'   		: { 'role':          'contentinfo'   },
        '.news'       		: { 'role':          'article'       },
        '#col2_content'     : { 'role':          'complementary' },
        '#mainnav'          : { 'role':          'navigation'    },
        '.hlist'           	: { 'role':          'navigation'    }
    };
    jQuery.each(fixes,
        function(index, item) {
            jQuery(index).attr(item);
        }
    );
	
// gleichhohe Boxen auf der Startseite	
	var maxHeight = 0;
	jQuery("#index .subcolumns .sideboxinner").each(function(){
	   if (jQuery(this).height() > maxHeight) { maxHeight = jQuery(this).height(); }
	});
	jQuery("#index .subcolumns .sideboxinner").height(maxHeight);
 
// Bildergalerie bei Häuser
	if (jQuery("#haeuser .tabs").length){
		jQuery(".tabs").accessibleTabs({
			tabhead: "div.thumb",
			currentInfoText: 'aktueller Tab: ',
			currentInfoClass: 'hideme',
			fx:"fadeIn"
		});

		var liste = jQuery(".tabs-list");
		jQuery(".tabs .content .tabhead").addClass("hideme");
		jQuery(".tabbody a").wrap('<div class="linkwrapper" />');
		liste.find("li:last").css("border-bottom", "none");
		liste.prepend("<li class='openlist'><a href='#'>Bildermenü öffnen</a></li>");
		var kids = liste.find("a").not(":first");
		kids.addClass("hideme");

		jQuery(".tabs-list a").bind('click', function(event) {
		  if(kids.is(".hideme")) {
			kids.removeClass("hideme").addClass("show");
			jQuery("li.openlist a").text("Bildermenü schließen").toggleClass("open");
			event.preventDefault();
			} else {
				kids.removeClass("show").addClass("hideme");
				jQuery("li.openlist a").text("Bildermenü öffnen").toggleClass("open");
				event.preventDefault();
			}
		});
		
	}

// Selektor bei den Suchergebnissen 
// @todo: Hier fehlt noch ein Skript, das die Selektion auf eine bestimmte Ergebnismenge beschränkt oder erweitert. 
//	if (jQuery("div.pagehead").length) {
//		jQuery("div.pagehead").append('<div class="type-select"><label for="pageselect">Ergebnisse pro Seite</label><select name="pageselect" id="pageselect" size="1"><option value="option1">10</option><option value="option2">20</option><option value="option3">50</option><option value="option4">100</option></select></div>');
//	}

// FAQ-Tabs bei Rat & Hilfe
	
	if ( jQuery(".rat-tabs").length ) {
		jQuery(".rat-tabs").accessibleTabs({
			tabhead: "h3",
			currentInfoText: 'aktueller Tab: ',
			currentInfoClass: 'hideme',
			saveState: false
		});
		jQuery(".tabhead").addClass("hideme");
	}

// Jahresarchiv auf- und zuklappen 
// @todo: muss noch angehübscht werden!  
	jQuery(".archiv .year a").click(function(e) {
		jQuery(this).toggleClass("open");
		jQuery(this).siblings("ul").toggleClass("hideme");
		e.preventDefault();
	});

// ======================= Fontsizer ==========================
// Schriftskalierer hinzufügen
	var fontsizerstructure = "<ul id='fontsizer'><li>Schriftgröße anpassen:</li><li id='small' title='Text verkleinern'>A-</li><li id='neutral' class='active' title='Text in Normalgröße'>A</li><li id='big' title='Text vergrößern'>A+</li></ul>";
	jQuery(fontsizerstructure).appendTo("#breadcrumbcnt");
// Tooltip des Schriftskalierers
/**
 * --------------------------------------------------------------------
 * jQuery tree plugin
 * Author: Scott Jehl, scott@filamentgroup.com
 * Copyright (c) 2009 Filament Group 
 * licensed under MIT (filamentgroup.com/examples/mit-license.txt)
 * zusammengestrichen
 * --------------------------------------------------------------------
 */
jQuery.fn.tooltip=function(){return jQuery(this).each(function(){var ttID='tooltip-'+Math.round(Math.random()*10000);var tooltip=jQuery('<div class="tooltip" role="tooltip" id="'+ttID+'"></div>');tooltip.text(jQuery(this).attr('title'));jQuery(this).removeAttr('title').attr('aria-describedby',ttID).mouseover(function(e){tooltip.appendTo('body').removeClass('tooltip-hidden').attr('aria-hidden',false).css({top:e.pageY-tooltip.outerHeight()+30,left:e.pageX-105});}).mouseout(function(){tooltip.addClass('tooltip-hidden').attr('aria-hidden',true);});tooltip.addClass('tooltip-hidden').attr('aria-hidden',true).appendTo('body');});};

	jQuery("#fontsizer li").tooltip();

	jQuery("#small, #neutral, #big").live('mouseover', function(event) {
		jQuery(this).css("cursor","pointer");
	});

	// Schriftgröße abfragen und setzen
	var fontsize = jQuery.cookie('fs');
    if(fontsize>0) {
		jQuery('body').css('font-size', fontsize + 'px');
		
		switch(fontsize) {
			case "14": 	jQuery("#neutral").addClass("active");
						jQuery("#small, #big").removeClass("active");
						break;
			case "10": 	jQuery("#small").addClass("active");
						jQuery("#neutral, #big").removeClass("active");
						break;
			case "20": 	jQuery("#big").addClass("active");
						jQuery("#small, #neutral").removeClass("active");
						break;
				}
		}
	
	// Font-sizer
   jQuery('#neutral').click(function() {
	jQuery.cookie('fs', '14', { expires: 365 });
   	jQuery('body').css('font-size', '14px');
	jQuery(this).addClass("active");
	jQuery("#small, #big").removeClass("active");
   });
   jQuery('#small').click(function() {	
	jQuery.cookie('fs', '10', { expires: 365 });
   	jQuery('body').css('font-size', '10px');
	jQuery(this).addClass("active");
	jQuery("#neutral, #big").removeClass("active");
   });
   jQuery('#big').click(function() {
	jQuery.cookie('fs', '20', { expires: 365 });
   	jQuery('body').css('font-size', '20px');
	jQuery(this).addClass("active");
	jQuery("#neutral, #small").removeClass("active");
   });

   // jQuery('#neutral').click(function() {
   // 	jQuery('body').css('font-size', '14px');
   // });
   // jQuery('#small').click(function() {	
   // 	jQuery('body').css('font-size', '10px');
   // });
   // jQuery('#big').click(function() {
   // 	jQuery('body').css('font-size', '20px');
   // });

// ===========================================================================

	
	// Clear Default Search String on Focus
	swap_val = [];
	jQuery("input:text, input:password").each(function(i){
		swap_val[i] = jQuery(this).val();
		jQuery(this).focusin(function(){
			if (jQuery(this).val() == swap_val[i]) {
				jQuery(this).val("");
			}
		}).focusout(function(){
			if (jQuery.trim(jQuery(this).val()) == "") {
				jQuery(this).val(swap_val[i]);
			}
		});
	});
	
/* ===================================== */
	
	/* Einbindung des toggle-Skriptes */
	jQuery('.rat-tabs dd').slideToggle("fast");
	jQuery(".rat-tabs dt").css('cursor', 'pointer');
	jQuery('.rat-tabs dt').each(function() {
		var button = jQuery(this);
		var panel = button.next().attr({role: 'group'}).labelWith(button);
		button
			.attr({
				role: 'button',
				'aria-expanded': 'false',
				tabindex: 0
			})
			//.controlsThis(panel)
			.bind('ariaclick', function(){
				// button.toggleClass("open");
				button.toggleClass("open").add(panel).attr('aria-expanded', String( button.is('[aria-expanded=false]') ) );
				panel.slideToggle('fast');
			});
	});
	

});

/* Toggle-Skript von Alexander Farkas */
(function(jQuery){

/* a11y-helper */
/*
 * gibt die ID eines Elements zurück und erstellt falls nötig eine
 * 
 */
if(!jQuery.fn.getID){
	var uId = new Date().getTime();
	jQuery.fn.getID = function(setAll){
		
		function setID(){
			var id 		= this.getAttribute('id');
			if(!id){
				id = 'ID-' + (uId++);
				this.setAttribute('id', id);
			}
			return id;
		}
		if(this[0]){
			if(setAll){
				this.each(setID);
			}
			return setID.call(this[0]);
		}
		return undefined;
	};
}

jQuery.each({
	labelWith: 'aria-labelledby',
	describeWith: 'aria-describedby',
	ownsThis: 'aria-owns',
	controlsThis: 'aria-controls',
	activateThis: 'aria-activedescendant'
}, function(name, prop){
	jQuery.fn[name] = function(elem){
		return this.attr(prop, jQuery(elem).getID());
	};
});

/*
 * eingabeunabhängiges click event sowohl für normalerweise klickbare als auch nicht klickbare elemnte geeignet
 */
var preventclick = false;
		
function handleAriaClick(e){
	
	if(!preventclick && (!e.keyCode || e.keyCode === 13)){
		//ToDo:  || e.keyCode === jQuery.ui.keyCode.SPACE
		preventclick = true;
		setTimeout(function(){
			preventclick = false;
		}, 1);
		return jQuery.event.special.ariaclick.handler.apply(this, arguments);
	} else if(preventclick && e.type == 'click'){
		e.preventDefault();
		return false;
	}
	return undefined;
}
jQuery.event.special.ariaclick = {
	setup: function(){
		jQuery(this).bind('click keydown', handleAriaClick);
        return true;
    },
	teardown: function(){
        jQuery(this).unbind('click keydown', handleAriaClick);
        return true;
    },
    handler: function(e){
        e.type = 'ariaclick';
        return jQuery.event.handle.apply(this, arguments);
    }
};


})(jQuery);
