/**
 * Accessible Tabs - jQuery plugin for accessible, unobtrusive tabs
 * Build to seemlessly work with the CCS-Framework YAML (yaml.de) not depending on YAML though
 * @requires jQuery - tested with 1.4.2 but might as well work with older versions
 *
 * english article: http://blog.ginader.de/archives/2009/02/07/jQuery-Accessible-Tabs-How-to-make-tabs-REALLY-accessible.php
 * german article: http://blog.ginader.de/archives/2009/02/07/jQuery-Accessible-Tabs-Wie-man-Tabs-WIRKLICH-zugaenglich-macht.php
 * 
 * code: http://github.com/ginader/Accessible-Tabs
 * please report issues at: http://github.com/ginader/Accessible-Tabs/issues
 *
 * Copyright (c) 2007 Dirk Ginader (ginader.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 ** Version: 1.9.1
 */

 // We assume there could be multiple sets of tabs on a page, so,
 // the unique id for each invididual tab's heading is identified with params q and r (e.g., id="accessibletabscontent0-2")
(function(a){function o(e,h){if(t&&window.console&&window.console.log)h?window.console.log(h+": ",e):window.console.log(e)}var t=true;a.fn.extend({getUniqueId:function(e,h,j){return e+h+(j===undefined?"":"-"+j)},accessibleTabs:function(e){var h={37:-1,38:-1,39:+1,40:+1},j={top:"prepend",bottom:"append"};this.options=a.extend({wrapperClass:"content",currentClass:"current",tabhead:"h4",tabheadClass:"tabhead",tabbody:".tabbody",fx:"show",fxspeed:"normal",currentInfoText:"current tab: ",currentInfoPosition:"prepend",
currentInfoClass:"current-info",tabsListClass:"tabs-list",syncheights:false,syncHeightMethodName:"syncHeight",cssClassAvailable:false,saveState:false,autoAnchor:false,pagination:false,position:"top",wrapInnerNavLinks:"",firstNavItemClass:"first",lastNavItemClass:"last"},e);var b=this;return this.each(function(l){var c=a(this),k="",r=0,m=[];a(c).wrapInner('<div class="'+b.options.wrapperClass+'"></div>');a(c).find(b.options.tabhead).each(function(d){var f="";if(elId=a(this).attr("id")){if(elId.indexOf("accessibletabscontent")===
0)return;f=' id="'+elId+'"'}var g=b.getUniqueId("accessibletabscontent",l,d);d=b.getUniqueId("accessibletabsnavigation",l,d);m.push(g);if(b.options.cssClassAvailable===true){var n="";if(a(this).attr("class")){n=a(this).attr("class");k+='<li id="'+d+'"><a'+f+""+(' class="'+n+'"')+' href="#'+g+'">'+a(this).html()+"</a></li>"}}else k+='<li id="'+d+'"><a'+f+' href="#'+g+'">'+a(this).html()+"</a></li>";a(this).attr({id:g,"class":b.options.tabheadClass,tabindex:"-1"});r++});if(b.options.syncheights&&a.fn[b.options.syncHeightMethodName]){a(c).find(b.options.tabbody)[b.options.syncHeightMethodName]();
a(window).resize(function(){a(c).find(b.options.tabbody)[b.options.syncHeightMethodName]()})}var i="."+b.options.tabsListClass;if(!a(c).find(i).length)a(c)[j[b.options.position]]('<ul class="clearfix '+b.options.tabsListClass+" tabamount"+r+'"></ul>');a(c).find(i).append(k);a(c).find(b.options.tabbody).hide();a(c).find(b.options.tabbody+":first").show();a(c).find("ul."+b.options.tabsListClass+">li:first").addClass(b.options.currentClass).addClass(b.options.firstNavItemClass).find("a")[b.options.currentInfoPosition]('<span class="'+
b.options.currentInfoClass+'">'+b.options.currentInfoText+"</span>").parents("ul."+b.options.tabsListClass).children("li:last").addClass(b.options.lastNavItemClass);b.options.wrapInnerNavLinks&&a(c).find("ul."+b.options.tabsListClass+">li>a").wrapInner(b.options.wrapInnerNavLinks);a(c).find("ul."+b.options.tabsListClass+">li>a").each(function(d){a(this).click(function(f){f.preventDefault();c.trigger("showTab.accessibleTabs",[a(f.target)]);b.options.saveState&&a.cookie&&a.cookie("accessibletab_"+c.attr("id")+
"_active",d);a(c).find("ul."+b.options.tabsListClass+">li."+b.options.currentClass).removeClass(b.options.currentClass).find("span."+b.options.currentInfoClass).remove();a(this).blur();a(c).find(b.options.tabbody+":visible").hide();a(c).find(b.options.tabbody).eq(d)[b.options.fx](b.options.fxspeed);a(this)[b.options.currentInfoPosition]('<span class="'+b.options.currentInfoClass+'">'+b.options.currentInfoText+"</span>").parent().addClass(b.options.currentClass);a(a(this).attr("href")).focus().keyup(function(g){if(h[g.keyCode]){b.showAccessibleTab(d+
h[g.keyCode]);a(this).unbind("keyup")}})});a(this).focus(function(){a(document).keyup(function(f){h[f.keyCode]&&b.showAccessibleTab(d+h[f.keyCode])})});a(this).blur(function(){a(document).unbind("keyup")})});if(b.options.saveState&&a.cookie){i=a.cookie("accessibletab_"+c.attr("id")+"_active");o(a.cookie("accessibletab_"+c.attr("id")+"_active"));i!==null&&b.showAccessibleTab(i,c.attr("id"))}if(b.options.autoAnchor&&window.location.hash){i=a("."+b.options.tabsListClass).find(window.location.hash);i.size()&&
i.click()}if(b.options.pagination){var p='<ul class="pagination">';p+='    <li class="previous"><a href="#{previousAnchor}"><span>{previousHeadline}</span></a></li>';p+='    <li class="next"><a href="#{nextAnchor}"><span>{nextHeadline}</span></a></li>';p+="</ul>";i=a(c).find(".tabbody");var s=i.size();i.each(function(d){a(this).append(p);var f=d+1;if(f>=s)f=0;var g=d-1;if(g<0)g=s-1;d=a(this).find(".pagination");var n=d.find(".previous");n.find("span").text(a("#"+m[g]).text());n.find("a").attr("href",
"#"+m[g]).click(function(q){q.preventDefault();a(c).find(".tabs-list a").eq(g).click()});d=d.find(".next");d.find("span").text(a("#"+m[f]).text());d.find("a").attr("href","#"+m[f]).click(function(q){q.preventDefault();a(c).find(".tabs-list a").eq(f).click()})})}})},showAccessibleTab:function(e,h){o("showAccessibleTab");var j=this;if(h){var b=a("#"+h),l=b.find("ul."+j.options.tabsListClass+">li>a");b.trigger("showTab.accessibleTabs",[l.eq(e)]);l.eq(e).click()}else return this.each(function(){var c=
a(this);c.trigger("showTab.accessibleTabs");var k=c.find("ul."+j.options.tabsListClass+">li>a");c.trigger("showTab.accessibleTabs",[k.eq(e)]);k.eq(e).click()})},showAccessibleTabSelector:function(e){o("showAccessibleTabSelector");if(e=a(e))e.get(0).nodeName.toLowerCase()=="a"?e.click():o("the selector of a showAccessibleTabSelector() call needs to point to a tabs headline!")}})})(jQuery);

