// $Id: jquery.js,v 1.12.2.3 2008/06/25 09:38:39 goba Exp $ 

/*
 * jQuery 1.2.6 - New Wave Javascript
 *
 * Copyright (c) 2008 John Resig (jquery.com)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * Date: 2008-05-24 14:22:17 -0400 (Sat, 24 May 2008)
 * Rev: 5685
 */
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(H(){J w=1b.4M,3m$=1b.$;J D=1b.4M=1b.$=H(a,b){I 2B D.17.5j(a,b)};J u=/^[^<]*(<(.|\\s)+>)[^>]*$|^#(\\w+)$/,62=/^.[^:#\\[\\.]*$/,12;D.17=D.44={5j:H(d,b){d=d||S;G(d.16){7[0]=d;7.K=1;I 7}G(1j d=="23"){J c=u.2D(d);G(c&&(c[1]||!b)){G(c[1])d=D.4h([c[1]],b);N{J a=S.61(c[3]);G(a){G(a.2v!=c[3])I D().2q(d);I D(a)}d=[]}}N I D(b).2q(d)}N G(D.1D(d))I D(S)[D.17.27?"27":"43"](d);I 7.6Y(D.2d(d))},5w:"1.2.6",8G:H(){I 7.K},K:0,3p:H(a){I a==12?D.2d(7):7[a]},2I:H(b){J a=D(b);a.5n=7;I a},6Y:H(a){7.K=0;2p.44.1p.1w(7,a);I 7},P:H(a,b){I D.P(7,a,b)},5i:H(b){J a=-1;I D.2L(b&&b.5w?b[0]:b,7)},1K:H(c,a,b){J d=c;G(c.1q==56)G(a===12)I 7[0]&&D[b||"1K"](7[0],c);N{d={};d[c]=a}I 7.P(H(i){R(c 1n d)D.1K(b?7.V:7,c,D.1i(7,d[c],b,i,c))})},1g:H(b,a){G((b==\'2h\'||b==\'1Z\')&&3d(a)<0)a=12;I 7.1K(b,a,"2a")},1r:H(b){G(1j b!="49"&&b!=U)I 7.4E().3v((7[0]&&7[0].2z||S).5F(b));J a="";D.P(b||7,H(){D.P(7.3t,H(){G(7.16!=8)a+=7.16!=1?7.76:D.17.1r([7])})});I a},5z:H(b){G(7[0])D(b,7[0].2z).5y().39(7[0]).2l(H(){J a=7;1B(a.1x)a=a.1x;I a}).3v(7);I 7},8Y:H(a){I 7.P(H(){D(7).6Q().5z(a)})},8R:H(a){I 7.P(H(){D(7).5z(a)})},3v:H(){I 7.3W(19,M,Q,H(a){G(7.16==1)7.3U(a)})},6F:H(){I 7.3W(19,M,M,H(a){G(7.16==1)7.39(a,7.1x)})},6E:H(){I 7.3W(19,Q,Q,H(a){7.1d.39(a,7)})},5q:H(){I 7.3W(19,Q,M,H(a){7.1d.39(a,7.2H)})},3l:H(){I 7.5n||D([])},2q:H(b){J c=D.2l(7,H(a){I D.2q(b,a)});I 7.2I(/[^+>] [^+>]/.11(b)||b.1h("..")>-1?D.4r(c):c)},5y:H(e){J f=7.2l(H(){G(D.14.1f&&!D.4n(7)){J a=7.6o(M),5h=S.3h("1v");5h.3U(a);I D.4h([5h.4H])[0]}N I 7.6o(M)});J d=f.2q("*").5c().P(H(){G(7[E]!=12)7[E]=U});G(e===M)7.2q("*").5c().P(H(i){G(7.16==3)I;J c=D.L(7,"3w");R(J a 1n c)R(J b 1n c[a])D.W.1e(d[i],a,c[a][b],c[a][b].L)});I f},1E:H(b){I 7.2I(D.1D(b)&&D.3C(7,H(a,i){I b.1k(a,i)})||D.3g(b,7))},4Y:H(b){G(b.1q==56)G(62.11(b))I 7.2I(D.3g(b,7,M));N b=D.3g(b,7);J a=b.K&&b[b.K-1]!==12&&!b.16;I 7.1E(H(){I a?D.2L(7,b)<0:7!=b})},1e:H(a){I 7.2I(D.4r(D.2R(7.3p(),1j a==\'23\'?D(a):D.2d(a))))},3F:H(a){I!!a&&D.3g(a,7).K>0},7T:H(a){I 7.3F("."+a)},6e:H(b){G(b==12){G(7.K){J c=7[0];G(D.Y(c,"2A")){J e=c.64,63=[],15=c.15,2V=c.O=="2A-2V";G(e<0)I U;R(J i=2V?e:0,2f=2V?e+1:15.K;i<2f;i++){J d=15[i];G(d.2W){b=D.14.1f&&!d.at.2x.an?d.1r:d.2x;G(2V)I b;63.1p(b)}}I 63}N I(7[0].2x||"").1o(/\\r/g,"")}I 12}G(b.1q==4L)b+=\'\';I 7.P(H(){G(7.16!=1)I;G(b.1q==2p&&/5O|5L/.11(7.O))7.4J=(D.2L(7.2x,b)>=0||D.2L(7.34,b)>=0);N G(D.Y(7,"2A")){J a=D.2d(b);D("9R",7).P(H(){7.2W=(D.2L(7.2x,a)>=0||D.2L(7.1r,a)>=0)});G(!a.K)7.64=-1}N 7.2x=b})},2K:H(a){I a==12?(7[0]?7[0].4H:U):7.4E().3v(a)},7b:H(a){I 7.5q(a).21()},79:H(i){I 7.3s(i,i+1)},3s:H(){I 7.2I(2p.44.3s.1w(7,19))},2l:H(b){I 7.2I(D.2l(7,H(a,i){I b.1k(a,i,a)}))},5c:H(){I 7.1e(7.5n)},L:H(d,b){J a=d.1R(".");a[1]=a[1]?"."+a[1]:"";G(b===12){J c=7.5C("9z"+a[1]+"!",[a[0]]);G(c===12&&7.K)c=D.L(7[0],d);I c===12&&a[1]?7.L(a[0]):c}N I 7.1P("9u"+a[1]+"!",[a[0],b]).P(H(){D.L(7,d,b)})},3b:H(a){I 7.P(H(){D.3b(7,a)})},3W:H(g,f,h,d){J e=7.K>1,3x;I 7.P(H(){G(!3x){3x=D.4h(g,7.2z);G(h)3x.9o()}J b=7;G(f&&D.Y(7,"1T")&&D.Y(3x[0],"4F"))b=7.3H("22")[0]||7.3U(7.2z.3h("22"));J c=D([]);D.P(3x,H(){J a=e?D(7).5y(M)[0]:7;G(D.Y(a,"1m"))c=c.1e(a);N{G(a.16==1)c=c.1e(D("1m",a).21());d.1k(b,a)}});c.P(6T)})}};D.17.5j.44=D.17;H 6T(i,a){G(a.4d)D.3Y({1a:a.4d,31:Q,1O:"1m"});N D.5u(a.1r||a.6O||a.4H||"");G(a.1d)a.1d.37(a)}H 1z(){I+2B 8J}D.1l=D.17.1l=H(){J b=19[0]||{},i=1,K=19.K,4x=Q,15;G(b.1q==8I){4x=b;b=19[1]||{};i=2}G(1j b!="49"&&1j b!="H")b={};G(K==i){b=7;--i}R(;i<K;i++)G((15=19[i])!=U)R(J c 1n 15){J a=b[c],2w=15[c];G(b===2w)6M;G(4x&&2w&&1j 2w=="49"&&!2w.16)b[c]=D.1l(4x,a||(2w.K!=U?[]:{}),2w);N G(2w!==12)b[c]=2w}I b};J E="4M"+1z(),6K=0,5r={},6G=/z-?5i|8B-?8A|1y|6B|8v-?1Z/i,3P=S.3P||{};D.1l({8u:H(a){1b.$=3m$;G(a)1b.4M=w;I D},1D:H(a){I!!a&&1j a!="23"&&!a.Y&&a.1q!=2p&&/^[\\s[]?H/.11(a+"")},4n:H(a){I a.1C&&!a.1c||a.2j&&a.2z&&!a.2z.1c},5u:H(a){a=D.3k(a);G(a){J b=S.3H("6w")[0]||S.1C,1m=S.3h("1m");1m.O="1r/4t";G(D.14.1f)1m.1r=a;N 1m.3U(S.5F(a));b.39(1m,b.1x);b.37(1m)}},Y:H(b,a){I b.Y&&b.Y.2r()==a.2r()},1Y:{},L:H(c,d,b){c=c==1b?5r:c;J a=c[E];G(!a)a=c[E]=++6K;G(d&&!D.1Y[a])D.1Y[a]={};G(b!==12)D.1Y[a][d]=b;I d?D.1Y[a][d]:a},3b:H(c,b){c=c==1b?5r:c;J a=c[E];G(b){G(D.1Y[a]){2U D.1Y[a][b];b="";R(b 1n D.1Y[a])1X;G(!b)D.3b(c)}}N{1U{2U c[E]}1V(e){G(c.5l)c.5l(E)}2U D.1Y[a]}},P:H(d,a,c){J e,i=0,K=d.K;G(c){G(K==12){R(e 1n d)G(a.1w(d[e],c)===Q)1X}N R(;i<K;)G(a.1w(d[i++],c)===Q)1X}N{G(K==12){R(e 1n d)G(a.1k(d[e],e,d[e])===Q)1X}N R(J b=d[0];i<K&&a.1k(b,i,b)!==Q;b=d[++i]){}}I d},1i:H(b,a,c,i,d){G(D.1D(a))a=a.1k(b,i);I a&&a.1q==4L&&c=="2a"&&!6G.11(d)?a+"2X":a},1F:{1e:H(c,b){D.P((b||"").1R(/\\s+/),H(i,a){G(c.16==1&&!D.1F.3T(c.1F,a))c.1F+=(c.1F?" ":"")+a})},21:H(c,b){G(c.16==1)c.1F=b!=12?D.3C(c.1F.1R(/\\s+/),H(a){I!D.1F.3T(b,a)}).6s(" "):""},3T:H(b,a){I D.2L(a,(b.1F||b).6r().1R(/\\s+/))>-1}},6q:H(b,c,a){J e={};R(J d 1n c){e[d]=b.V[d];b.V[d]=c[d]}a.1k(b);R(J d 1n c)b.V[d]=e[d]},1g:H(d,e,c){G(e=="2h"||e=="1Z"){J b,3X={30:"5x",5g:"1G",18:"3I"},35=e=="2h"?["5e","6k"]:["5G","6i"];H 5b(){b=e=="2h"?d.8f:d.8c;J a=0,2C=0;D.P(35,H(){a+=3d(D.2a(d,"57"+7,M))||0;2C+=3d(D.2a(d,"2C"+7+"4b",M))||0});b-=29.83(a+2C)}G(D(d).3F(":4j"))5b();N D.6q(d,3X,5b);I 29.2f(0,b)}I D.2a(d,e,c)},2a:H(f,l,k){J e,V=f.V;H 3E(b){G(!D.14.2k)I Q;J a=3P.54(b,U);I!a||a.52("3E")==""}G(l=="1y"&&D.14.1f){e=D.1K(V,"1y");I e==""?"1":e}G(D.14.2G&&l=="18"){J d=V.50;V.50="0 7Y 7W";V.50=d}G(l.1I(/4i/i))l=y;G(!k&&V&&V[l])e=V[l];N G(3P.54){G(l.1I(/4i/i))l="4i";l=l.1o(/([A-Z])/g,"-$1").3y();J c=3P.54(f,U);G(c&&!3E(f))e=c.52(l);N{J g=[],2E=[],a=f,i=0;R(;a&&3E(a);a=a.1d)2E.6h(a);R(;i<2E.K;i++)G(3E(2E[i])){g[i]=2E[i].V.18;2E[i].V.18="3I"}e=l=="18"&&g[2E.K-1]!=U?"2F":(c&&c.52(l))||"";R(i=0;i<g.K;i++)G(g[i]!=U)2E[i].V.18=g[i]}G(l=="1y"&&e=="")e="1"}N G(f.4g){J h=l.1o(/\\-(\\w)/g,H(a,b){I b.2r()});e=f.4g[l]||f.4g[h];G(!/^\\d+(2X)?$/i.11(e)&&/^\\d/.11(e)){J j=V.1A,66=f.65.1A;f.65.1A=f.4g.1A;V.1A=e||0;e=V.aM+"2X";V.1A=j;f.65.1A=66}}I e},4h:H(l,h){J k=[];h=h||S;G(1j h.3h==\'12\')h=h.2z||h[0]&&h[0].2z||S;D.P(l,H(i,d){G(!d)I;G(d.1q==4L)d+=\'\';G(1j d=="23"){d=d.1o(/(<(\\w+)[^>]*?)\\/>/g,H(b,a,c){I c.1I(/^(aK|4f|7E|aG|4T|7A|aB|3n|az|ay|av)$/i)?b:a+"></"+c+">"});J f=D.3k(d).3y(),1v=h.3h("1v");J e=!f.1h("<au")&&[1,"<2A 7w=\'7w\'>","</2A>"]||!f.1h("<ar")&&[1,"<7v>","</7v>"]||f.1I(/^<(aq|22|am|ak|ai)/)&&[1,"<1T>","</1T>"]||!f.1h("<4F")&&[2,"<1T><22>","</22></1T>"]||(!f.1h("<af")||!f.1h("<ad"))&&[3,"<1T><22><4F>","</4F></22></1T>"]||!f.1h("<7E")&&[2,"<1T><22></22><7q>","</7q></1T>"]||D.14.1f&&[1,"1v<1v>","</1v>"]||[0,"",""];1v.4H=e[1]+d+e[2];1B(e[0]--)1v=1v.5T;G(D.14.1f){J g=!f.1h("<1T")&&f.1h("<22")<0?1v.1x&&1v.1x.3t:e[1]=="<1T>"&&f.1h("<22")<0?1v.3t:[];R(J j=g.K-1;j>=0;--j)G(D.Y(g[j],"22")&&!g[j].3t.K)g[j].1d.37(g[j]);G(/^\\s/.11(d))1v.39(h.5F(d.1I(/^\\s*/)[0]),1v.1x)}d=D.2d(1v.3t)}G(d.K===0&&(!D.Y(d,"3V")&&!D.Y(d,"2A")))I;G(d[0]==12||D.Y(d,"3V")||d.15)k.1p(d);N k=D.2R(k,d)});I k},1K:H(d,f,c){G(!d||d.16==3||d.16==8)I 12;J e=!D.4n(d),40=c!==12,1f=D.14.1f;f=e&&D.3X[f]||f;G(d.2j){J g=/5Q|4d|V/.11(f);G(f=="2W"&&D.14.2k)d.1d.64;G(f 1n d&&e&&!g){G(40){G(f=="O"&&D.Y(d,"4T")&&d.1d)7p"O a3 a1\'t 9V 9U";d[f]=c}G(D.Y(d,"3V")&&d.7i(f))I d.7i(f).76;I d[f]}G(1f&&e&&f=="V")I D.1K(d.V,"9T",c);G(40)d.9Q(f,""+c);J h=1f&&e&&g?d.4G(f,2):d.4G(f);I h===U?12:h}G(1f&&f=="1y"){G(40){d.6B=1;d.1E=(d.1E||"").1o(/7f\\([^)]*\\)/,"")+(3r(c)+\'\'=="9L"?"":"7f(1y="+c*7a+")")}I d.1E&&d.1E.1h("1y=")>=0?(3d(d.1E.1I(/1y=([^)]*)/)[1])/7a)+\'\':""}f=f.1o(/-([a-z])/9H,H(a,b){I b.2r()});G(40)d[f]=c;I d[f]},3k:H(a){I(a||"").1o(/^\\s+|\\s+$/g,"")},2d:H(b){J a=[];G(b!=U){J i=b.K;G(i==U||b.1R||b.4I||b.1k)a[0]=b;N 1B(i)a[--i]=b[i]}I a},2L:H(b,a){R(J i=0,K=a.K;i<K;i++)G(a[i]===b)I i;I-1},2R:H(a,b){J i=0,T,2S=a.K;G(D.14.1f){1B(T=b[i++])G(T.16!=8)a[2S++]=T}N 1B(T=b[i++])a[2S++]=T;I a},4r:H(a){J c=[],2o={};1U{R(J i=0,K=a.K;i<K;i++){J b=D.L(a[i]);G(!2o[b]){2o[b]=M;c.1p(a[i])}}}1V(e){c=a}I c},3C:H(c,a,d){J b=[];R(J i=0,K=c.K;i<K;i++)G(!d!=!a(c[i],i))b.1p(c[i]);I b},2l:H(d,a){J c=[];R(J i=0,K=d.K;i<K;i++){J b=a(d[i],i);G(b!=U)c[c.K]=b}I c.7d.1w([],c)}});J v=9B.9A.3y();D.14={5B:(v.1I(/.+(?:9y|9x|9w|9v)[\\/: ]([\\d.]+)/)||[])[1],2k:/75/.11(v),2G:/2G/.11(v),1f:/1f/.11(v)&&!/2G/.11(v),42:/42/.11(v)&&!/(9s|75)/.11(v)};J y=D.14.1f?"7o":"72";D.1l({71:!D.14.1f||S.70=="6Z",3X:{"R":"9n","9k":"1F","4i":y,72:y,7o:y,9h:"9f",9e:"9d",9b:"99"}});D.P({6W:H(a){I a.1d},97:H(a){I D.4S(a,"1d")},95:H(a){I D.3a(a,2,"2H")},91:H(a){I D.3a(a,2,"4l")},8Z:H(a){I D.4S(a,"2H")},8X:H(a){I D.4S(a,"4l")},8W:H(a){I D.5v(a.1d.1x,a)},8V:H(a){I D.5v(a.1x)},6Q:H(a){I D.Y(a,"8U")?a.8T||a.8S.S:D.2d(a.3t)}},H(c,d){D.17[c]=H(b){J a=D.2l(7,d);G(b&&1j b=="23")a=D.3g(b,a);I 7.2I(D.4r(a))}});D.P({6P:"3v",8Q:"6F",39:"6E",8P:"5q",8O:"7b"},H(c,b){D.17[c]=H(){J a=19;I 7.P(H(){R(J i=0,K=a.K;i<K;i++)D(a[i])[b](7)})}});D.P({8N:H(a){D.1K(7,a,"");G(7.16==1)7.5l(a)},8M:H(a){D.1F.1e(7,a)},8L:H(a){D.1F.21(7,a)},8K:H(a){D.1F[D.1F.3T(7,a)?"21":"1e"](7,a)},21:H(a){G(!a||D.1E(a,[7]).r.K){D("*",7).1e(7).P(H(){D.W.21(7);D.3b(7)});G(7.1d)7.1d.37(7)}},4E:H(){D(">*",7).21();1B(7.1x)7.37(7.1x)}},H(a,b){D.17[a]=H(){I 7.P(b,19)}});D.P(["6N","4b"],H(i,c){J b=c.3y();D.17[b]=H(a){I 7[0]==1b?D.14.2G&&S.1c["5t"+c]||D.14.2k&&1b["5s"+c]||S.70=="6Z"&&S.1C["5t"+c]||S.1c["5t"+c]:7[0]==S?29.2f(29.2f(S.1c["4y"+c],S.1C["4y"+c]),29.2f(S.1c["2i"+c],S.1C["2i"+c])):a==12?(7.K?D.1g(7[0],b):U):7.1g(b,a.1q==56?a:a+"2X")}});H 25(a,b){I a[0]&&3r(D.2a(a[0],b,M),10)||0}J C=D.14.2k&&3r(D.14.5B)<8H?"(?:[\\\\w*3m-]|\\\\\\\\.)":"(?:[\\\\w\\8F-\\8E*3m-]|\\\\\\\\.)",6L=2B 4v("^>\\\\s*("+C+"+)"),6J=2B 4v("^("+C+"+)(#)("+C+"+)"),6I=2B 4v("^([#.]?)("+C+"*)");D.1l({6H:{"":H(a,i,m){I m[2]=="*"||D.Y(a,m[2])},"#":H(a,i,m){I a.4G("2v")==m[2]},":":{8D:H(a,i,m){I i<m[3]-0},8C:H(a,i,m){I i>m[3]-0},3a:H(a,i,m){I m[3]-0==i},79:H(a,i,m){I m[3]-0==i},3o:H(a,i){I i==0},3S:H(a,i,m,r){I i==r.K-1},6D:H(a,i){I i%2==0},6C:H(a,i){I i%2},"3o-4u":H(a){I a.1d.3H("*")[0]==a},"3S-4u":H(a){I D.3a(a.1d.5T,1,"4l")==a},"8z-4u":H(a){I!D.3a(a.1d.5T,2,"4l")},6W:H(a){I a.1x},4E:H(a){I!a.1x},8y:H(a,i,m){I(a.6O||a.8x||D(a).1r()||"").1h(m[3])>=0},4j:H(a){I"1G"!=a.O&&D.1g(a,"18")!="2F"&&D.1g(a,"5g")!="1G"},1G:H(a){I"1G"==a.O||D.1g(a,"18")=="2F"||D.1g(a,"5g")=="1G"},8w:H(a){I!a.3R},3R:H(a){I a.3R},4J:H(a){I a.4J},2W:H(a){I a.2W||D.1K(a,"2W")},1r:H(a){I"1r"==a.O},5O:H(a){I"5O"==a.O},5L:H(a){I"5L"==a.O},5p:H(a){I"5p"==a.O},3Q:H(a){I"3Q"==a.O},5o:H(a){I"5o"==a.O},6A:H(a){I"6A"==a.O},6z:H(a){I"6z"==a.O},2s:H(a){I"2s"==a.O||D.Y(a,"2s")},4T:H(a){I/4T|2A|6y|2s/i.11(a.Y)},3T:H(a,i,m){I D.2q(m[3],a).K},8t:H(a){I/h\\d/i.11(a.Y)},8s:H(a){I D.3C(D.3O,H(b){I a==b.T}).K}}},6x:[/^(\\[) *@?([\\w-]+) *([!*$^~=]*) *(\'?"?)(.*?)\\4 *\\]/,/^(:)([\\w-]+)\\("?\'?(.*?(\\(.*?\\))?[^(]*?)"?\'?\\)/,2B 4v("^([:.#]*)("+C+"+)")],3g:H(a,c,b){J d,1t=[];1B(a&&a!=d){d=a;J f=D.1E(a,c,b);a=f.t.1o(/^\\s*,\\s*/,"");1t=b?c=f.r:D.2R(1t,f.r)}I 1t},2q:H(t,o){G(1j t!="23")I[t];G(o&&o.16!=1&&o.16!=9)I[];o=o||S;J d=[o],2o=[],3S,Y;1B(t&&3S!=t){J r=[];3S=t;t=D.3k(t);J l=Q,3j=6L,m=3j.2D(t);G(m){Y=m[1].2r();R(J i=0;d[i];i++)R(J c=d[i].1x;c;c=c.2H)G(c.16==1&&(Y=="*"||c.Y.2r()==Y))r.1p(c);d=r;t=t.1o(3j,"");G(t.1h(" ")==0)6M;l=M}N{3j=/^([>+~])\\s*(\\w*)/i;G((m=3j.2D(t))!=U){r=[];J k={};Y=m[2].2r();m=m[1];R(J j=0,3i=d.K;j<3i;j++){J n=m=="~"||m=="+"?d[j].2H:d[j].1x;R(;n;n=n.2H)G(n.16==1){J g=D.L(n);G(m=="~"&&k[g])1X;G(!Y||n.Y.2r()==Y){G(m=="~")k[g]=M;r.1p(n)}G(m=="+")1X}}d=r;t=D.3k(t.1o(3j,""));l=M}}G(t&&!l){G(!t.1h(",")){G(o==d[0])d.4s();2o=D.2R(2o,d);r=d=[o];t=" "+t.6v(1,t.K)}N{J h=6J;J m=h.2D(t);G(m){m=[0,m[2],m[3],m[1]]}N{h=6I;m=h.2D(t)}m[2]=m[2].1o(/\\\\/g,"");J f=d[d.K-1];G(m[1]=="#"&&f&&f.61&&!D.4n(f)){J p=f.61(m[2]);G((D.14.1f||D.14.2G)&&p&&1j p.2v=="23"&&p.2v!=m[2])p=D(\'[@2v="\'+m[2]+\'"]\',f)[0];d=r=p&&(!m[3]||D.Y(p,m[3]))?[p]:[]}N{R(J i=0;d[i];i++){J a=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];G(a=="*"&&d[i].Y.3y()=="49")a="3n";r=D.2R(r,d[i].3H(a))}G(m[1]==".")r=D.5m(r,m[2]);G(m[1]=="#"){J e=[];R(J i=0;r[i];i++)G(r[i].4G("2v")==m[2]){e=[r[i]];1X}r=e}d=r}t=t.1o(h,"")}}G(t){J b=D.1E(t,r);d=r=b.r;t=D.3k(b.t)}}G(t)d=[];G(d&&o==d[0])d.4s();2o=D.2R(2o,d);I 2o},5m:H(r,m,a){m=" "+m+" ";J c=[];R(J i=0;r[i];i++){J b=(" "+r[i].1F+" ").1h(m)>=0;G(!a&&b||a&&!b)c.1p(r[i])}I c},1E:H(t,r,h){J d;1B(t&&t!=d){d=t;J p=D.6x,m;R(J i=0;p[i];i++){m=p[i].2D(t);G(m){t=t.8r(m[0].K);m[2]=m[2].1o(/\\\\/g,"");1X}}G(!m)1X;G(m[1]==":"&&m[2]=="4Y")r=62.11(m[3])?D.1E(m[3],r,M).r:D(r).4Y(m[3]);N G(m[1]==".")r=D.5m(r,m[2],h);N G(m[1]=="["){J g=[],O=m[3];R(J i=0,3i=r.K;i<3i;i++){J a=r[i],z=a[D.3X[m[2]]||m[2]];G(z==U||/5Q|4d|2W/.11(m[2]))z=D.1K(a,m[2])||\'\';G((O==""&&!!z||O=="="&&z==m[5]||O=="!="&&z!=m[5]||O=="^="&&z&&!z.1h(m[5])||O=="$="&&z.6v(z.K-m[5].K)==m[5]||(O=="*="||O=="~=")&&z.1h(m[5])>=0)^h)g.1p(a)}r=g}N G(m[1]==":"&&m[2]=="3a-4u"){J e={},g=[],11=/(-?)(\\d*)n((?:\\+|-)?\\d*)/.2D(m[3]=="6D"&&"2n"||m[3]=="6C"&&"2n+1"||!/\\D/.11(m[3])&&"8q+"+m[3]||m[3]),3o=(11[1]+(11[2]||1))-0,d=11[3]-0;R(J i=0,3i=r.K;i<3i;i++){J j=r[i],1d=j.1d,2v=D.L(1d);G(!e[2v]){J c=1;R(J n=1d.1x;n;n=n.2H)G(n.16==1)n.4q=c++;e[2v]=M}J b=Q;G(3o==0){G(j.4q==d)b=M}N G((j.4q-d)%3o==0&&(j.4q-d)/3o>=0)b=M;G(b^h)g.1p(j)}r=g}N{J f=D.6H[m[1]];G(1j f=="49")f=f[m[2]];G(1j f=="23")f=6u("Q||H(a,i){I "+f+";}");r=D.3C(r,H(a,i){I f(a,i,m,r)},h)}}I{r:r,t:t}},4S:H(b,c){J a=[],1t=b[c];1B(1t&&1t!=S){G(1t.16==1)a.1p(1t);1t=1t[c]}I a},3a:H(a,e,c,b){e=e||1;J d=0;R(;a;a=a[c])G(a.16==1&&++d==e)1X;I a},5v:H(n,a){J r=[];R(;n;n=n.2H){G(n.16==1&&n!=a)r.1p(n)}I r}});D.W={1e:H(f,i,g,e){G(f.16==3||f.16==8)I;G(D.14.1f&&f.4I)f=1b;G(!g.24)g.24=7.24++;G(e!=12){J h=g;g=7.3M(h,H(){I h.1w(7,19)});g.L=e}J j=D.L(f,"3w")||D.L(f,"3w",{}),1H=D.L(f,"1H")||D.L(f,"1H",H(){G(1j D!="12"&&!D.W.5k)I D.W.1H.1w(19.3L.T,19)});1H.T=f;D.P(i.1R(/\\s+/),H(c,b){J a=b.1R(".");b=a[0];g.O=a[1];J d=j[b];G(!d){d=j[b]={};G(!D.W.2t[b]||D.W.2t[b].4p.1k(f)===Q){G(f.3K)f.3K(b,1H,Q);N G(f.6t)f.6t("4o"+b,1H)}}d[g.24]=g;D.W.26[b]=M});f=U},24:1,26:{},21:H(e,h,f){G(e.16==3||e.16==8)I;J i=D.L(e,"3w"),1L,5i;G(i){G(h==12||(1j h=="23"&&h.8p(0)=="."))R(J g 1n i)7.21(e,g+(h||""));N{G(h.O){f=h.2y;h=h.O}D.P(h.1R(/\\s+/),H(b,a){J c=a.1R(".");a=c[0];G(i[a]){G(f)2U i[a][f.24];N R(f 1n i[a])G(!c[1]||i[a][f].O==c[1])2U i[a][f];R(1L 1n i[a])1X;G(!1L){G(!D.W.2t[a]||D.W.2t[a].4A.1k(e)===Q){G(e.6p)e.6p(a,D.L(e,"1H"),Q);N G(e.6n)e.6n("4o"+a,D.L(e,"1H"))}1L=U;2U i[a]}}})}R(1L 1n i)1X;G(!1L){J d=D.L(e,"1H");G(d)d.T=U;D.3b(e,"3w");D.3b(e,"1H")}}},1P:H(h,c,f,g,i){c=D.2d(c);G(h.1h("!")>=0){h=h.3s(0,-1);J a=M}G(!f){G(7.26[h])D("*").1e([1b,S]).1P(h,c)}N{G(f.16==3||f.16==8)I 12;J b,1L,17=D.1D(f[h]||U),W=!c[0]||!c[0].32;G(W){c.6h({O:h,2J:f,32:H(){},3J:H(){},4C:1z()});c[0][E]=M}c[0].O=h;G(a)c[0].6m=M;J d=D.L(f,"1H");G(d)b=d.1w(f,c);G((!17||(D.Y(f,\'a\')&&h=="4V"))&&f["4o"+h]&&f["4o"+h].1w(f,c)===Q)b=Q;G(W)c.4s();G(i&&D.1D(i)){1L=i.1w(f,b==U?c:c.7d(b));G(1L!==12)b=1L}G(17&&g!==Q&&b!==Q&&!(D.Y(f,\'a\')&&h=="4V")){7.5k=M;1U{f[h]()}1V(e){}}7.5k=Q}I b},1H:H(b){J a,1L,38,5f,4m;b=19[0]=D.W.6l(b||1b.W);38=b.O.1R(".");b.O=38[0];38=38[1];5f=!38&&!b.6m;4m=(D.L(7,"3w")||{})[b.O];R(J j 1n 4m){J c=4m[j];G(5f||c.O==38){b.2y=c;b.L=c.L;1L=c.1w(7,19);G(a!==Q)a=1L;G(1L===Q){b.32();b.3J()}}}I a},6l:H(b){G(b[E]==M)I b;J d=b;b={8o:d};J c="8n 8m 8l 8k 2s 8j 47 5d 6j 5E 8i L 8h 8g 4K 2y 5a 59 8e 8b 58 6f 8a 88 4k 87 86 84 6d 2J 4C 6c O 82 81 35".1R(" ");R(J i=c.K;i;i--)b[c[i]]=d[c[i]];b[E]=M;b.32=H(){G(d.32)d.32();d.80=Q};b.3J=H(){G(d.3J)d.3J();d.7Z=M};b.4C=b.4C||1z();G(!b.2J)b.2J=b.6d||S;G(b.2J.16==3)b.2J=b.2J.1d;G(!b.4k&&b.4K)b.4k=b.4K==b.2J?b.6c:b.4K;G(b.58==U&&b.5d!=U){J a=S.1C,1c=S.1c;b.58=b.5d+(a&&a.2e||1c&&1c.2e||0)-(a.6b||0);b.6f=b.6j+(a&&a.2c||1c&&1c.2c||0)-(a.6a||0)}G(!b.35&&((b.47||b.47===0)?b.47:b.5a))b.35=b.47||b.5a;G(!b.59&&b.5E)b.59=b.5E;G(!b.35&&b.2s)b.35=(b.2s&1?1:(b.2s&2?3:(b.2s&4?2:0)));I b},3M:H(a,b){b.24=a.24=a.24||b.24||7.24++;I b},2t:{27:{4p:H(){55();I},4A:H(){I}},3D:{4p:H(){G(D.14.1f)I Q;D(7).2O("53",D.W.2t.3D.2y);I M},4A:H(){G(D.14.1f)I Q;D(7).4e("53",D.W.2t.3D.2y);I M},2y:H(a){G(F(a,7))I M;a.O="3D";I D.W.1H.1w(7,19)}},3N:{4p:H(){G(D.14.1f)I Q;D(7).2O("51",D.W.2t.3N.2y);I M},4A:H(){G(D.14.1f)I Q;D(7).4e("51",D.W.2t.3N.2y);I M},2y:H(a){G(F(a,7))I M;a.O="3N";I D.W.1H.1w(7,19)}}}};D.17.1l({2O:H(c,a,b){I c=="4X"?7.2V(c,a,b):7.P(H(){D.W.1e(7,c,b||a,b&&a)})},2V:H(d,b,c){J e=D.W.3M(c||b,H(a){D(7).4e(a,e);I(c||b).1w(7,19)});I 7.P(H(){D.W.1e(7,d,e,c&&b)})},4e:H(a,b){I 7.P(H(){D.W.21(7,a,b)})},1P:H(c,a,b){I 7.P(H(){D.W.1P(c,a,7,M,b)})},5C:H(c,a,b){I 7[0]&&D.W.1P(c,a,7[0],Q,b)},2m:H(b){J c=19,i=1;1B(i<c.K)D.W.3M(b,c[i++]);I 7.4V(D.W.3M(b,H(a){7.4Z=(7.4Z||0)%i;a.32();I c[7.4Z++].1w(7,19)||Q}))},7X:H(a,b){I 7.2O(\'3D\',a).2O(\'3N\',b)},27:H(a){55();G(D.2Q)a.1k(S,D);N D.3A.1p(H(){I a.1k(7,D)});I 7}});D.1l({2Q:Q,3A:[],27:H(){G(!D.2Q){D.2Q=M;G(D.3A){D.P(D.3A,H(){7.1k(S)});D.3A=U}D(S).5C("27")}}});J x=Q;H 55(){G(x)I;x=M;G(S.3K&&!D.14.2G)S.3K("69",D.27,Q);G(D.14.1f&&1b==1S)(H(){G(D.2Q)I;1U{S.1C.7V("1A")}1V(3e){3B(19.3L,0);I}D.27()})();G(D.14.2G)S.3K("69",H(){G(D.2Q)I;R(J i=0;i<S.4W.K;i++)G(S.4W[i].3R){3B(19.3L,0);I}D.27()},Q);G(D.14.2k){J a;(H(){G(D.2Q)I;G(S.3f!="68"&&S.3f!="1J"){3B(19.3L,0);I}G(a===12)a=D("V, 7A[7U=7S]").K;G(S.4W.K!=a){3B(19.3L,0);I}D.27()})()}D.W.1e(1b,"43",D.27)}D.P(("7R,7Q,43,85,4y,4X,4V,7P,"+"7O,7N,89,53,51,7M,2A,"+"5o,7L,7K,8d,3e").1R(","),H(i,b){D.17[b]=H(a){I a?7.2O(b,a):7.1P(b)}});J F=H(a,c){J b=a.4k;1B(b&&b!=c)1U{b=b.1d}1V(3e){b=c}I b==c};D(1b).2O("4X",H(){D("*").1e(S).4e()});D.17.1l({67:D.17.43,43:H(g,d,c){G(1j g!=\'23\')I 7.67(g);J e=g.1h(" ");G(e>=0){J i=g.3s(e,g.K);g=g.3s(0,e)}c=c||H(){};J f="2P";G(d)G(D.1D(d)){c=d;d=U}N{d=D.3n(d);f="6g"}J h=7;D.3Y({1a:g,O:f,1O:"2K",L:d,1J:H(a,b){G(b=="1W"||b=="7J")h.2K(i?D("<1v/>").3v(a.4U.1o(/<1m(.|\\s)*?\\/1m>/g,"")).2q(i):a.4U);h.P(c,[a.4U,b,a])}});I 7},aL:H(){I D.3n(7.7I())},7I:H(){I 7.2l(H(){I D.Y(7,"3V")?D.2d(7.aH):7}).1E(H(){I 7.34&&!7.3R&&(7.4J||/2A|6y/i.11(7.Y)||/1r|1G|3Q/i.11(7.O))}).2l(H(i,c){J b=D(7).6e();I b==U?U:b.1q==2p?D.2l(b,H(a,i){I{34:c.34,2x:a}}):{34:c.34,2x:b}}).3p()}});D.P("7H,7G,7F,7D,7C,7B".1R(","),H(i,o){D.17[o]=H(f){I 7.2O(o,f)}});J B=1z();D.1l({3p:H(d,b,a,c){G(D.1D(b)){a=b;b=U}I D.3Y({O:"2P",1a:d,L:b,1W:a,1O:c})},aE:H(b,a){I D.3p(b,U,a,"1m")},aD:H(c,b,a){I D.3p(c,b,a,"3z")},aC:H(d,b,a,c){G(D.1D(b)){a=b;b={}}I D.3Y({O:"6g",1a:d,L:b,1W:a,1O:c})},aA:H(a){D.1l(D.60,a)},60:{1a:5Z.5Q,26:M,O:"2P",2T:0,7z:"4R/x-ax-3V-aw",7x:M,31:M,L:U,5Y:U,3Q:U,4Q:{2N:"4R/2N, 1r/2N",2K:"1r/2K",1m:"1r/4t, 4R/4t",3z:"4R/3z, 1r/4t",1r:"1r/as",4w:"*/*"}},4z:{},3Y:H(s){s=D.1l(M,s,D.1l(M,{},D.60,s));J g,2Z=/=\\?(&|$)/g,1u,L,O=s.O.2r();G(s.L&&s.7x&&1j s.L!="23")s.L=D.3n(s.L);G(s.1O=="4P"){G(O=="2P"){G(!s.1a.1I(2Z))s.1a+=(s.1a.1I(/\\?/)?"&":"?")+(s.4P||"7u")+"=?"}N G(!s.L||!s.L.1I(2Z))s.L=(s.L?s.L+"&":"")+(s.4P||"7u")+"=?";s.1O="3z"}G(s.1O=="3z"&&(s.L&&s.L.1I(2Z)||s.1a.1I(2Z))){g="4P"+B++;G(s.L)s.L=(s.L+"").1o(2Z,"="+g+"$1");s.1a=s.1a.1o(2Z,"="+g+"$1");s.1O="1m";1b[g]=H(a){L=a;1W();1J();1b[g]=12;1U{2U 1b[g]}1V(e){}G(i)i.37(h)}}G(s.1O=="1m"&&s.1Y==U)s.1Y=Q;G(s.1Y===Q&&O=="2P"){J j=1z();J k=s.1a.1o(/(\\?|&)3m=.*?(&|$)/,"$ap="+j+"$2");s.1a=k+((k==s.1a)?(s.1a.1I(/\\?/)?"&":"?")+"3m="+j:"")}G(s.L&&O=="2P"){s.1a+=(s.1a.1I(/\\?/)?"&":"?")+s.L;s.L=U}G(s.26&&!D.4O++)D.W.1P("7H");J n=/^(?:\\w+:)?\\/\\/([^\\/?#]+)/;G(s.1O=="1m"&&O=="2P"&&n.11(s.1a)&&n.2D(s.1a)[1]!=5Z.al){J i=S.3H("6w")[0];J h=S.3h("1m");h.4d=s.1a;G(s.7t)h.aj=s.7t;G(!g){J l=Q;h.ah=h.ag=H(){G(!l&&(!7.3f||7.3f=="68"||7.3f=="1J")){l=M;1W();1J();i.37(h)}}}i.3U(h);I 12}J m=Q;J c=1b.7s?2B 7s("ae.ac"):2B 7r();G(s.5Y)c.6R(O,s.1a,s.31,s.5Y,s.3Q);N c.6R(O,s.1a,s.31);1U{G(s.L)c.4B("ab-aa",s.7z);G(s.5S)c.4B("a9-5R-a8",D.4z[s.1a]||"a7, a6 a5 a4 5N:5N:5N a2");c.4B("X-9Z-9Y","7r");c.4B("9W",s.1O&&s.4Q[s.1O]?s.4Q[s.1O]+", */*":s.4Q.4w)}1V(e){}G(s.7m&&s.7m(c,s)===Q){s.26&&D.4O--;c.7l();I Q}G(s.26)D.W.1P("7B",[c,s]);J d=H(a){G(!m&&c&&(c.3f==4||a=="2T")){m=M;G(f){7k(f);f=U}1u=a=="2T"&&"2T"||!D.7j(c)&&"3e"||s.5S&&D.7h(c,s.1a)&&"7J"||"1W";G(1u=="1W"){1U{L=D.6X(c,s.1O,s.9S)}1V(e){1u="5J"}}G(1u=="1W"){J b;1U{b=c.5I("7g-5R")}1V(e){}G(s.5S&&b)D.4z[s.1a]=b;G(!g)1W()}N D.5H(s,c,1u);1J();G(s.31)c=U}};G(s.31){J f=4I(d,13);G(s.2T>0)3B(H(){G(c){c.7l();G(!m)d("2T")}},s.2T)}1U{c.9P(s.L)}1V(e){D.5H(s,c,U,e)}G(!s.31)d();H 1W(){G(s.1W)s.1W(L,1u);G(s.26)D.W.1P("7C",[c,s])}H 1J(){G(s.1J)s.1J(c,1u);G(s.26)D.W.1P("7F",[c,s]);G(s.26&&!--D.4O)D.W.1P("7G")}I c},5H:H(s,a,b,e){G(s.3e)s.3e(a,b,e);G(s.26)D.W.1P("7D",[a,s,e])},4O:0,7j:H(a){1U{I!a.1u&&5Z.9O=="5p:"||(a.1u>=7e&&a.1u<9N)||a.1u==7c||a.1u==9K||D.14.2k&&a.1u==12}1V(e){}I Q},7h:H(a,c){1U{J b=a.5I("7g-5R");I a.1u==7c||b==D.4z[c]||D.14.2k&&a.1u==12}1V(e){}I Q},6X:H(a,c,b){J d=a.5I("9J-O"),2N=c=="2N"||!c&&d&&d.1h("2N")>=0,L=2N?a.9I:a.4U;G(2N&&L.1C.2j=="5J")7p"5J";G(b)L=b(L,c);G(c=="1m")D.5u(L);G(c=="3z")L=6u("("+L+")");I L},3n:H(a){J s=[];G(a.1q==2p||a.5w)D.P(a,H(){s.1p(3u(7.34)+"="+3u(7.2x))});N R(J j 1n a)G(a[j]&&a[j].1q==2p)D.P(a[j],H(){s.1p(3u(j)+"="+3u(7))});N s.1p(3u(j)+"="+3u(D.1D(a[j])?a[j]():a[j]));I s.6s("&").1o(/%20/g,"+")}});D.17.1l({1N:H(c,b){I c?7.2g({1Z:"1N",2h:"1N",1y:"1N"},c,b):7.1E(":1G").P(H(){7.V.18=7.5D||"";G(D.1g(7,"18")=="2F"){J a=D("<"+7.2j+" />").6P("1c");7.V.18=a.1g("18");G(7.V.18=="2F")7.V.18="3I";a.21()}}).3l()},1M:H(b,a){I b?7.2g({1Z:"1M",2h:"1M",1y:"1M"},b,a):7.1E(":4j").P(H(){7.5D=7.5D||D.1g(7,"18");7.V.18="2F"}).3l()},78:D.17.2m,2m:H(a,b){I D.1D(a)&&D.1D(b)?7.78.1w(7,19):a?7.2g({1Z:"2m",2h:"2m",1y:"2m"},a,b):7.P(H(){D(7)[D(7).3F(":1G")?"1N":"1M"]()})},9G:H(b,a){I 7.2g({1Z:"1N"},b,a)},9F:H(b,a){I 7.2g({1Z:"1M"},b,a)},9E:H(b,a){I 7.2g({1Z:"2m"},b,a)},9D:H(b,a){I 7.2g({1y:"1N"},b,a)},9M:H(b,a){I 7.2g({1y:"1M"},b,a)},9C:H(c,a,b){I 7.2g({1y:a},c,b)},2g:H(k,j,i,g){J h=D.77(j,i,g);I 7[h.36===Q?"P":"36"](H(){G(7.16!=1)I Q;J f=D.1l({},h),p,1G=D(7).3F(":1G"),46=7;R(p 1n k){G(k[p]=="1M"&&1G||k[p]=="1N"&&!1G)I f.1J.1k(7);G(p=="1Z"||p=="2h"){f.18=D.1g(7,"18");f.33=7.V.33}}G(f.33!=U)7.V.33="1G";f.45=D.1l({},k);D.P(k,H(c,a){J e=2B D.28(46,f,c);G(/2m|1N|1M/.11(a))e[a=="2m"?1G?"1N":"1M":a](k);N{J b=a.6r().1I(/^([+-]=)?([\\d+-.]+)(.*)$/),2b=e.1t(M)||0;G(b){J d=3d(b[2]),2M=b[3]||"2X";G(2M!="2X"){46.V[c]=(d||1)+2M;2b=((d||1)/e.1t(M))*2b;46.V[c]=2b+2M}G(b[1])d=((b[1]=="-="?-1:1)*d)+2b;e.3G(2b,d,2M)}N e.3G(2b,a,"")}});I M})},36:H(a,b){G(D.1D(a)||(a&&a.1q==2p)){b=a;a="28"}G(!a||(1j a=="23"&&!b))I A(7[0],a);I 7.P(H(){G(b.1q==2p)A(7,a,b);N{A(7,a).1p(b);G(A(7,a).K==1)b.1k(7)}})},9X:H(b,c){J a=D.3O;G(b)7.36([]);7.P(H(){R(J i=a.K-1;i>=0;i--)G(a[i].T==7){G(c)a[i](M);a.7n(i,1)}});G(!c)7.5A();I 7}});J A=H(b,c,a){G(b){c=c||"28";J q=D.L(b,c+"36");G(!q||a)q=D.L(b,c+"36",D.2d(a))}I q};D.17.5A=H(a){a=a||"28";I 7.P(H(){J q=A(7,a);q.4s();G(q.K)q[0].1k(7)})};D.1l({77:H(b,a,c){J d=b&&b.1q==a0?b:{1J:c||!c&&a||D.1D(b)&&b,2u:b,41:c&&a||a&&a.1q!=9t&&a};d.2u=(d.2u&&d.2u.1q==4L?d.2u:D.28.5K[d.2u])||D.28.5K.74;d.5M=d.1J;d.1J=H(){G(d.36!==Q)D(7).5A();G(D.1D(d.5M))d.5M.1k(7)};I d},41:{73:H(p,n,b,a){I b+a*p},5P:H(p,n,b,a){I((-29.9r(p*29.9q)/2)+0.5)*a+b}},3O:[],48:U,28:H(b,c,a){7.15=c;7.T=b;7.1i=a;G(!c.3Z)c.3Z={}}});D.28.44={4D:H(){G(7.15.2Y)7.15.2Y.1k(7.T,7.1z,7);(D.28.2Y[7.1i]||D.28.2Y.4w)(7);G(7.1i=="1Z"||7.1i=="2h")7.T.V.18="3I"},1t:H(a){G(7.T[7.1i]!=U&&7.T.V[7.1i]==U)I 7.T[7.1i];J r=3d(D.1g(7.T,7.1i,a));I r&&r>-9p?r:3d(D.2a(7.T,7.1i))||0},3G:H(c,b,d){7.5V=1z();7.2b=c;7.3l=b;7.2M=d||7.2M||"2X";7.1z=7.2b;7.2S=7.4N=0;7.4D();J e=7;H t(a){I e.2Y(a)}t.T=7.T;D.3O.1p(t);G(D.48==U){D.48=4I(H(){J a=D.3O;R(J i=0;i<a.K;i++)G(!a[i]())a.7n(i--,1);G(!a.K){7k(D.48);D.48=U}},13)}},1N:H(){7.15.3Z[7.1i]=D.1K(7.T.V,7.1i);7.15.1N=M;7.3G(0,7.1t());G(7.1i=="2h"||7.1i=="1Z")7.T.V[7.1i]="9m";D(7.T).1N()},1M:H(){7.15.3Z[7.1i]=D.1K(7.T.V,7.1i);7.15.1M=M;7.3G(7.1t(),0)},2Y:H(a){J t=1z();G(a||t>7.15.2u+7.5V){7.1z=7.3l;7.2S=7.4N=1;7.4D();7.15.45[7.1i]=M;J b=M;R(J i 1n 7.15.45)G(7.15.45[i]!==M)b=Q;G(b){G(7.15.18!=U){7.T.V.33=7.15.33;7.T.V.18=7.15.18;G(D.1g(7.T,"18")=="2F")7.T.V.18="3I"}G(7.15.1M)7.T.V.18="2F";G(7.15.1M||7.15.1N)R(J p 1n 7.15.45)D.1K(7.T.V,p,7.15.3Z[p])}G(b)7.15.1J.1k(7.T);I Q}N{J n=t-7.5V;7.4N=n/7.15.2u;7.2S=D.41[7.15.41||(D.41.5P?"5P":"73")](7.4N,n,0,1,7.15.2u);7.1z=7.2b+((7.3l-7.2b)*7.2S);7.4D()}I M}};D.1l(D.28,{5K:{9l:9j,9i:7e,74:9g},2Y:{2e:H(a){a.T.2e=a.1z},2c:H(a){a.T.2c=a.1z},1y:H(a){D.1K(a.T.V,"1y",a.1z)},4w:H(a){a.T.V[a.1i]=a.1z+a.2M}}});D.17.2i=H(){J b=0,1S=0,T=7[0],3q;G(T)ao(D.14){J d=T.1d,4a=T,1s=T.1s,1Q=T.2z,5U=2k&&3r(5B)<9c&&!/9a/i.11(v),1g=D.2a,3c=1g(T,"30")=="3c";G(T.7y){J c=T.7y();1e(c.1A+29.2f(1Q.1C.2e,1Q.1c.2e),c.1S+29.2f(1Q.1C.2c,1Q.1c.2c));1e(-1Q.1C.6b,-1Q.1C.6a)}N{1e(T.5X,T.5W);1B(1s){1e(1s.5X,1s.5W);G(42&&!/^t(98|d|h)$/i.11(1s.2j)||2k&&!5U)2C(1s);G(!3c&&1g(1s,"30")=="3c")3c=M;4a=/^1c$/i.11(1s.2j)?4a:1s;1s=1s.1s}1B(d&&d.2j&&!/^1c|2K$/i.11(d.2j)){G(!/^96|1T.*$/i.11(1g(d,"18")))1e(-d.2e,-d.2c);G(42&&1g(d,"33")!="4j")2C(d);d=d.1d}G((5U&&(3c||1g(4a,"30")=="5x"))||(42&&1g(4a,"30")!="5x"))1e(-1Q.1c.5X,-1Q.1c.5W);G(3c)1e(29.2f(1Q.1C.2e,1Q.1c.2e),29.2f(1Q.1C.2c,1Q.1c.2c))}3q={1S:1S,1A:b}}H 2C(a){1e(D.2a(a,"6V",M),D.2a(a,"6U",M))}H 1e(l,t){b+=3r(l,10)||0;1S+=3r(t,10)||0}I 3q};D.17.1l({30:H(){J a=0,1S=0,3q;G(7[0]){J b=7.1s(),2i=7.2i(),4c=/^1c|2K$/i.11(b[0].2j)?{1S:0,1A:0}:b.2i();2i.1S-=25(7,\'94\');2i.1A-=25(7,\'aF\');4c.1S+=25(b,\'6U\');4c.1A+=25(b,\'6V\');3q={1S:2i.1S-4c.1S,1A:2i.1A-4c.1A}}I 3q},1s:H(){J a=7[0].1s;1B(a&&(!/^1c|2K$/i.11(a.2j)&&D.1g(a,\'30\')==\'93\'))a=a.1s;I D(a)}});D.P([\'5e\',\'5G\'],H(i,b){J c=\'4y\'+b;D.17[c]=H(a){G(!7[0])I;I a!=12?7.P(H(){7==1b||7==S?1b.92(!i?a:D(1b).2e(),i?a:D(1b).2c()):7[c]=a}):7[0]==1b||7[0]==S?46[i?\'aI\':\'aJ\']||D.71&&S.1C[c]||S.1c[c]:7[0][c]}});D.P(["6N","4b"],H(i,b){J c=i?"5e":"5G",4f=i?"6k":"6i";D.17["5s"+b]=H(){I 7[b.3y()]()+25(7,"57"+c)+25(7,"57"+4f)};D.17["90"+b]=H(a){I 7["5s"+b]()+25(7,"2C"+c+"4b")+25(7,"2C"+4f+"4b")+(a?25(7,"6S"+c)+25(7,"6S"+4f):0)}})})();',62,669,'|||||||this|||||||||||||||||||||||||||||||||||if|function|return|var|length|data|true|else|type|each|false|for|document|elem|null|style|event||nodeName|||test|undefined||browser|options|nodeType|fn|display|arguments|url|window|body|parentNode|add|msie|css|indexOf|prop|typeof|call|extend|script|in|replace|push|constructor|text|offsetParent|cur|status|div|apply|firstChild|opacity|now|left|while|documentElement|isFunction|filter|className|hidden|handle|match|complete|attr|ret|hide|show|dataType|trigger|doc|split|top|table|try|catch|success|break|cache|height||remove|tbody|string|guid|num|global|ready|fx|Math|curCSS|start|scrollTop|makeArray|scrollLeft|max|animate|width|offset|tagName|safari|map|toggle||done|Array|find|toUpperCase|button|special|duration|id|copy|value|handler|ownerDocument|select|new|border|exec|stack|none|opera|nextSibling|pushStack|target|html|inArray|unit|xml|bind|GET|isReady|merge|pos|timeout|delete|one|selected|px|step|jsre|position|async|preventDefault|overflow|name|which|queue|removeChild|namespace|insertBefore|nth|removeData|fixed|parseFloat|error|readyState|multiFilter|createElement|rl|re|trim|end|_|param|first|get|results|parseInt|slice|childNodes|encodeURIComponent|append|events|elems|toLowerCase|json|readyList|setTimeout|grep|mouseenter|color|is|custom|getElementsByTagName|block|stopPropagation|addEventListener|callee|proxy|mouseleave|timers|defaultView|password|disabled|last|has|appendChild|form|domManip|props|ajax|orig|set|easing|mozilla|load|prototype|curAnim|self|charCode|timerId|object|offsetChild|Width|parentOffset|src|unbind|br|currentStyle|clean|float|visible|relatedTarget|previousSibling|handlers|isXMLDoc|on|setup|nodeIndex|unique|shift|javascript|child|RegExp|_default|deep|scroll|lastModified|teardown|setRequestHeader|timeStamp|update|empty|tr|getAttribute|innerHTML|setInterval|checked|fromElement|Number|jQuery|state|active|jsonp|accepts|application|dir|input|responseText|click|styleSheets|unload|not|lastToggle|outline|mouseout|getPropertyValue|mouseover|getComputedStyle|bindReady|String|padding|pageX|metaKey|keyCode|getWH|andSelf|clientX|Left|all|visibility|container|index|init|triggered|removeAttribute|classFilter|prevObject|submit|file|after|windowData|inner|client|globalEval|sibling|jquery|absolute|clone|wrapAll|dequeue|version|triggerHandler|oldblock|ctrlKey|createTextNode|Top|handleError|getResponseHeader|parsererror|speeds|checkbox|old|00|radio|swing|href|Modified|ifModified|lastChild|safari2|startTime|offsetTop|offsetLeft|username|location|ajaxSettings|getElementById|isSimple|values|selectedIndex|runtimeStyle|rsLeft|_load|loaded|DOMContentLoaded|clientTop|clientLeft|toElement|srcElement|val|pageY|POST|unshift|Bottom|clientY|Right|fix|exclusive|detachEvent|cloneNode|removeEventListener|swap|toString|join|attachEvent|eval|substr|head|parse|textarea|reset|image|zoom|odd|even|before|prepend|exclude|expr|quickClass|quickID|uuid|quickChild|continue|Height|textContent|appendTo|contents|open|margin|evalScript|borderTopWidth|borderLeftWidth|parent|httpData|setArray|CSS1Compat|compatMode|boxModel|cssFloat|linear|def|webkit|nodeValue|speed|_toggle|eq|100|replaceWith|304|concat|200|alpha|Last|httpNotModified|getAttributeNode|httpSuccess|clearInterval|abort|beforeSend|splice|styleFloat|throw|colgroup|XMLHttpRequest|ActiveXObject|scriptCharset|callback|fieldset|multiple|processData|getBoundingClientRect|contentType|link|ajaxSend|ajaxSuccess|ajaxError|col|ajaxComplete|ajaxStop|ajaxStart|serializeArray|notmodified|keypress|keydown|change|mouseup|mousedown|dblclick|focus|blur|stylesheet|hasClass|rel|doScroll|black|hover|solid|cancelBubble|returnValue|wheelDelta|view|round|shiftKey|resize|screenY|screenX|relatedNode|mousemove|prevValue|originalTarget|offsetHeight|keyup|newValue|offsetWidth|eventPhase|detail|currentTarget|cancelable|bubbles|attrName|attrChange|altKey|originalEvent|charAt|0n|substring|animated|header|noConflict|line|enabled|innerText|contains|only|weight|font|gt|lt|uFFFF|u0128|size|417|Boolean|Date|toggleClass|removeClass|addClass|removeAttr|replaceAll|insertAfter|prependTo|wrap|contentWindow|contentDocument|iframe|children|siblings|prevAll|wrapInner|nextAll|outer|prev|scrollTo|static|marginTop|next|inline|parents|able|cellSpacing|adobeair|cellspacing|522|maxLength|maxlength|readOnly|400|readonly|fast|600|class|slow|1px|htmlFor|reverse|10000|PI|cos|compatible|Function|setData|ie|ra|it|rv|getData|userAgent|navigator|fadeTo|fadeIn|slideToggle|slideUp|slideDown|ig|responseXML|content|1223|NaN|fadeOut|300|protocol|send|setAttribute|option|dataFilter|cssText|changed|be|Accept|stop|With|Requested|Object|can|GMT|property|1970|Jan|01|Thu|Since|If|Type|Content|XMLHTTP|th|Microsoft|td|onreadystatechange|onload|cap|charset|colg|host|tfoot|specified|with|1_|thead|leg|plain|attributes|opt|embed|urlencoded|www|area|hr|ajaxSetup|meta|post|getJSON|getScript|marginLeft|img|elements|pageYOffset|pageXOffset|abbr|serialize|pixelLeft'.split('|'),0,{}));
// $Id: drupal.js,v 1.41.2.4 2009/07/21 08:59:10 goba Exp $

var Drupal = Drupal || { 'settings': {}, 'behaviors': {}, 'themes': {}, 'locale': {} };

/**
 * Set the variable that indicates if JavaScript behaviors should be applied
 */
Drupal.jsEnabled = true;

/**
 * Attach all registered behaviors to a page element.
 *
 * Behaviors are event-triggered actions that attach to page elements, enhancing
 * default non-Javascript UIs. Behaviors are registered in the Drupal.behaviors
 * object as follows:
 * @code
 *    Drupal.behaviors.behaviorName = function () {
 *      ...
 *    };
 * @endcode
 *
 * Drupal.attachBehaviors is added below to the jQuery ready event and so
 * runs on initial page load. Developers implementing AHAH/AJAX in their
 * solutions should also call this function after new page content has been
 * loaded, feeding in an element to be processed, in order to attach all
 * behaviors to the new content.
 *
 * Behaviors should use a class in the form behaviorName-processed to ensure
 * the behavior is attached only once to a given element. (Doing so enables
 * the reprocessing of given elements, which may be needed on occasion despite
 * the ability to limit behavior attachment to a particular element.)
 *
 * @param context
 *   An element to attach behaviors to. If none is given, the document element
 *   is used.
 */
Drupal.attachBehaviors = function(context) {
  context = context || document;
  // Execute all of them.
  jQuery.each(Drupal.behaviors, function() {
    this(context);
  });
};

/**
 * Encode special characters in a plain-text string for display as HTML.
 */
Drupal.checkPlain = function(str) {
  str = String(str);
  var replace = { '&': '&amp;', '"': '&quot;', '<': '&lt;', '>': '&gt;' };
  for (var character in replace) {
    var regex = new RegExp(character, 'g');
    str = str.replace(regex, replace[character]);
  }
  return str;
};

/**
 * Translate strings to the page language or a given language.
 *
 * See the documentation of the server-side t() function for further details.
 *
 * @param str
 *   A string containing the English string to translate.
 * @param args
 *   An object of replacements pairs to make after translation. Incidences
 *   of any key in this array are replaced with the corresponding value.
 *   Based on the first character of the key, the value is escaped and/or themed:
 *    - !variable: inserted as is
 *    - @variable: escape plain text to HTML (Drupal.checkPlain)
 *    - %variable: escape text and theme as a placeholder for user-submitted
 *      content (checkPlain + Drupal.theme('placeholder'))
 * @return
 *   The translated string.
 */
Drupal.t = function(str, args) {
  // Fetch the localized version of the string.
  if (Drupal.locale.strings && Drupal.locale.strings[str]) {
    str = Drupal.locale.strings[str];
  }

  if (args) {
    // Transform arguments before inserting them
    for (var key in args) {
      switch (key.charAt(0)) {
        // Escaped only
        case '@':
          args[key] = Drupal.checkPlain(args[key]);
        break;
        // Pass-through
        case '!':
          break;
        // Escaped and placeholder
        case '%':
        default:
          args[key] = Drupal.theme('placeholder', args[key]);
          break;
      }
      str = str.replace(key, args[key]);
    }
  }
  return str;
};

/**
 * Format a string containing a count of items.
 *
 * This function ensures that the string is pluralized correctly. Since Drupal.t() is
 * called by this function, make sure not to pass already-localized strings to it.
 *
 * See the documentation of the server-side format_plural() function for further details.
 *
 * @param count
 *   The item count to display.
 * @param singular
 *   The string for the singular case. Please make sure it is clear this is
 *   singular, to ease translation (e.g. use "1 new comment" instead of "1 new").
 *   Do not use @count in the singular string.
 * @param plural
 *   The string for the plural case. Please make sure it is clear this is plural,
 *   to ease translation. Use @count in place of the item count, as in "@count
 *   new comments".
 * @param args
 *   An object of replacements pairs to make after translation. Incidences
 *   of any key in this array are replaced with the corresponding value.
 *   Based on the first character of the key, the value is escaped and/or themed:
 *    - !variable: inserted as is
 *    - @variable: escape plain text to HTML (Drupal.checkPlain)
 *    - %variable: escape text and theme as a placeholder for user-submitted
 *      content (checkPlain + Drupal.theme('placeholder'))
 *   Note that you do not need to include @count in this array.
 *   This replacement is done automatically for the plural case.
 * @return
 *   A translated string.
 */
Drupal.formatPlural = function(count, singular, plural, args) {
  var args = args || {};
  args['@count'] = count;
  // Determine the index of the plural form.
  var index = Drupal.locale.pluralFormula ? Drupal.locale.pluralFormula(args['@count']) : ((args['@count'] == 1) ? 0 : 1);

  if (index == 0) {
    return Drupal.t(singular, args);
  }
  else if (index == 1) {
    return Drupal.t(plural, args);
  }
  else {
    args['@count['+ index +']'] = args['@count'];
    delete args['@count'];
    return Drupal.t(plural.replace('@count', '@count['+ index +']'));
  }
};

/**
 * Generate the themed representation of a Drupal object.
 *
 * All requests for themed output must go through this function. It examines
 * the request and routes it to the appropriate theme function. If the current
 * theme does not provide an override function, the generic theme function is
 * called.
 *
 * For example, to retrieve the HTML that is output by theme_placeholder(text),
 * call Drupal.theme('placeholder', text).
 *
 * @param func
 *   The name of the theme function to call.
 * @param ...
 *   Additional arguments to pass along to the theme function.
 * @return
 *   Any data the theme function returns. This could be a plain HTML string,
 *   but also a complex object.
 */
Drupal.theme = function(func) {
  for (var i = 1, args = []; i < arguments.length; i++) {
    args.push(arguments[i]);
  }

  return (Drupal.theme[func] || Drupal.theme.prototype[func]).apply(this, args);
};

/**
 * Parse a JSON response.
 *
 * The result is either the JSON object, or an object with 'status' 0 and 'data' an error message.
 */
Drupal.parseJson = function (data) {
  if ((data.substring(0, 1) != '{') && (data.substring(0, 1) != '[')) {
    return { status: 0, data: data.length ? data : Drupal.t('Unspecified error') };
  }
  return eval('(' + data + ');');
};

/**
 * Freeze the current body height (as minimum height). Used to prevent
 * unnecessary upwards scrolling when doing DOM manipulations.
 */
Drupal.freezeHeight = function () {
  Drupal.unfreezeHeight();
  var div = document.createElement('div');
  $(div).css({
    position: 'absolute',
    top: '0px',
    left: '0px',
    width: '1px',
    height: $('body').css('height')
  }).attr('id', 'freeze-height');
  $('body').append(div);
};

/**
 * Unfreeze the body height
 */
Drupal.unfreezeHeight = function () {
  $('#freeze-height').remove();
};

/**
 * Wrapper around encodeURIComponent() which avoids Apache quirks (equivalent of
 * drupal_urlencode() in PHP). This function should only be used on paths, not
 * on query string arguments.
 */
Drupal.encodeURIComponent = function (item, uri) {
  uri = uri || location.href;
  item = encodeURIComponent(item).replace(/%2F/g, '/');
  return (uri.indexOf('?q=') != -1) ? item : item.replace(/%26/g, '%2526').replace(/%23/g, '%2523').replace(/\/\//g, '/%252F');
};

/**
 * Get the text selection in a textarea.
 */
Drupal.getSelection = function (element) {
  if (typeof(element.selectionStart) != 'number' && document.selection) {
    // The current selection
    var range1 = document.selection.createRange();
    var range2 = range1.duplicate();
    // Select all text.
    range2.moveToElementText(element);
    // Now move 'dummy' end point to end point of original range.
    range2.setEndPoint('EndToEnd', range1);
    // Now we can calculate start and end points.
    var start = range2.text.length - range1.text.length;
    var end = start + range1.text.length;
    return { 'start': start, 'end': end };
  }
  return { 'start': element.selectionStart, 'end': element.selectionEnd };
};

/**
 * Build an error message from ahah response.
 */
Drupal.ahahError = function(xmlhttp, uri) {
  if (xmlhttp.status == 200) {
    if (jQuery.trim(xmlhttp.responseText)) {
      var message = Drupal.t("An error occurred. \n@uri\n@text", {'@uri': uri, '@text': xmlhttp.responseText });
    }
    else {
      var message = Drupal.t("An error occurred. \n@uri\n(no information available).", {'@uri': uri });
    }
  }
  else {
    var message = Drupal.t("An HTTP error @status occurred. \n@uri", {'@uri': uri, '@status': xmlhttp.status });
  }
  return message.replace(/\n/g, '<br />');
}

// Global Killswitch on the <html> element
$(document.documentElement).addClass('js');
// Attach all behaviors.
$(document).ready(function() {
  Drupal.attachBehaviors(this);
});

/**
 * The default themes.
 */
Drupal.theme.prototype = {

  /**
   * Formats text for emphasized display in a placeholder inside a sentence.
   *
   * @param str
   *   The text to format (plain-text).
   * @return
   *   The formatted text (html).
   */
  placeholder: function(str) {
    return '<em>' + Drupal.checkPlain(str) + '</em>';
  }
};
;
// Global killswitch
if (Drupal.jsEnabled) {
  $(document).ready(bibleAutoAttach);
}

function bibleAutoAttach() {
  var span = $("<span></span>");
  span.attr("id", "SNData");
  span.css('top', '0');
  span.css('left', '0');
  span.css('color', '#000000');
  span.css('background', 'silver');
  span.css('zIndex', '999');
  span.css('textAlign', 'left');
  span.css('position', 'absolute');
  span.hide();

	for (i=0; i<6; i++) {
 		var img = $('<img class=vset />');
		img.attr("id", "vsetimg"+i);
		img.css('cursor', 'pointer');
		span.append(img);
	}
	var bibleimgurl = Drupal.settings.bibleimgurl;
	var chapverse;

  span.append($('<div id=sntext />'));
  $('body').append(span);
  var baseurl = window.location.href.substr(0, window.location.href.lastIndexOf('bible'));
  var ajaxobj;

  $("span.biblesn a")
    .mouseover(function(E) {
      var dat = ($(this).attr("href")).split('/');
      var SN = dat[dat.length-1];
      if (this.SN==SN) return;
      this.SN = SN;

      for (i=0; i<6; i++) {
	  		$("#vsetimg"+i).hide();
      }
		  span.width(300);
		  span.height(200);
      $('#sntext').html("Wait...["+SN+"]");
      span.css('left', $(this).offset().left + $(this).width());
      span.css('top', $(this).offset().top);
      span.show();
      ajaxobj = $.ajax({
        type: "GET",
        url: baseurl+"/bible/snajax/"+SN,
        success: function (data) {
          // Parse back result
          if (data=='""') { span.html('No Data of ['+SN+']'); return; }
          data = data.substring(1, data.length-2);
          lines = data.split('|');
          var HTMLStr = '';
          for (i=0; i<lines.length; i++)
          	HTMLStr += lines[i]+"<br/>";
      		$('#sntext').html(HTMLStr);
      		$("#sntext").show();
        },
        error: function (xmlhttp) {
          alert('An HTTP error '+ xmlhttp.status +' occured.\n');
        }
      });
      return false;
    })
    .mouseout(function() {
      span.hide();
      this.SN = "";
      ajaxobj.abort();
    });

  $("span.chap-verse")
    .mouseover(function(E) {
    	chapverse = $(this);
    	var alink = $(this).children("verse");

      $("#sntext").hide();
		  span.width(16*6);
		  span.height(16);
      var vsetpara = $(this).attr("vset");
      for (i=0; i<6; i++) {
	  		var imgsrc = bibleimgurl+ 'vset_'+i;
     		if (vsetpara.substr(i,1)=='1') imgsrc += '_dis';
     		imgsrc += '.gif';
				$("#vsetimg"+i).css('top', 0);
				$("#vsetimg"+i).attr("src", imgsrc);
	  		$("#vsetimg"+i).show();
      }
      span.css('left', alink.offset().left + alink.width());
      span.css('top', alink.offset().top);
      span.show();
    })
    .mouseout(function() {
      span.hide();
    });
 
  $("#SNData")
    .mouseover(function(E) {
    	span.show();
    })
    .mouseout(function() {
    	span.hide();
    });

  $("img.vset")
    .click(function(E) {
    	span.show();
      var dat = (chapverse.children("verse").attr("para")).split('/');
      var bls = dat[dat.length-1];
      var bid = dat[dat.length-2];
      var vsetno = E.target.id.substr(E.target.id.length-1,1);
      $.ajax({
        type: "GET",
        url: baseurl+"/bible/vset/ajax/"+bls+"/"+vsetno,
        success: function (data) {
        	data = data.replace(/"/g, '');
        	chapverse.attr("vset", data);
    			chapverse.children("span").empty();
        	var HTMLStr = '';
        	for (i=0; i<data.length; i++) {
        		if (data.substr(i,1)=='1') {
        			HTMLStr += '<img src='+ bibleimgurl+ 'vset_'+ i+ '.gif />';
        		}
        	}
        	chapverse.children("span").html(HTMLStr);
        	// refresh span
		      for (i=0; i<6; i++) {
			  		var imgsrc = bibleimgurl+ 'vset_'+i;
		     		if (data.substr(i,1)=='1') imgsrc += '_dis';
		     		imgsrc += '.gif';
						$("#vsetimg"+i).css('top', 0);
						$("#vsetimg"+i).attr("src", imgsrc);
			  		$("#vsetimg"+i).show();
		      }
        },
        error: function (xmlhttp) {
          alert('An HTTP error '+ xmlhttp.status +' occured.\n');
        }
      });
      return false;
    })
    .mouseout(function() {
    	span.hide();
    });

	$("span.vref")
		.hover(function(E) {
		  span.width(200);
		  span.height(100);
      span.css('left', $(this).offset().left + $(this).width() + 5);
      span.css('top', $(this).offset().top);
    	span.show();
      ajaxobj = $.ajax({
        type: "GET",
        url: baseurl+"/bible/ajax/vcontent/"+E.target.id,
        success: function (data) {
        	data = data.replace(/"/g, '');
      		span.html(data);
      		span.show();
        },
        error: function (xmlhttp) {
          alert('An HTTP error '+ xmlhttp.status +' occured.\n');
        }
      });
      return false;
		},
		function() {
    	span.hide();
    	span.html('');
		});
	$("input.selectall")
		.click(function() {
			var chk = $(this).attr("checked");
			$("input.mr_check").each(function() {
				this.checked = chk;
			})
		});
};
if (Drupal.jsEnabled) {
	$(document).ready(function() {  		
		$('span.bls').hover(function(E) {
      var scrollTop = parseInt($(document).scrollTop());
      var scrollLeft = parseInt($(document).scrollLeft());
      var docWidth = parseInt($(window).width());
      var docHeight = parseInt($(window).height());
      var winRight = scrollLeft + docWidth;
      var winBottom = scrollTop + docHeight;

	    var popup = $('#popup-'+this.id);
	    var leftShift = $(this).offset().left - $(this).position().left;
	    var topShift = $(this).offset().top - $(this).position().top;

      popup.css('visibility', 'visible');

      var popupwidth = parseInt(popup.css('width'));
      var posX = $(this).offset().left - scrollLeft - leftShift;
      if (posX + popupwidth + leftShift > docWidth) {
    	  posX = docWidth - popupwidth - leftShift - 5;
      }
      popup.css('left', posX);

      var popupheight = parseInt(popup.css('height'));
      var posY = $(this).offset().top + $(this).height() - topShift;
      if (posY + popupheight + topShift > winBottom) {
      	posY = winBottom - popupheight - topShift - 5;
      }
      popup.css('top', posY);
		},
		function() {
			$('#popup-'+this.id).css('visibility', 'hidden');
		});
		
		$('span.popup').hover(function(E) {
			E.target.style.visibility = "visible";
		},
		function(E) {
			E.target.style.visibility = "hidden";
		});
		
	});
}
;
var biblePopup;




/**
 * wrapper for safely using Firebug's console.debug
 * @param mesg
 * @return
 */
function bibleWidgetConsole(mesg) {
	if((typeof console != 'undefined') && (typeof console.debug != 'undefined') && (typeof console.debug == 'function')) {
		console.debug(mesg);
	}
}

if (Drupal.jsEnabled) {
        var bibleWidget = new Widget();
	$(document).ready(function() {
		if ($('#bible-widget-launcher-form').length > 0) {
			$('#bible-widget-launcher-form').find('#edit-submit-1').val('View');
		}
        // just to make life easier, set the ajax_path while page is loading to include
        // Drupal's base_path
        bibleWidget.ajax_base = bibleWidget.ajax_base;

		// set ajax start and end event handlers
		$().ajaxStart(bibleWidget.ajaxStart);
		$().ajaxStop(bibleWidget.ajaxStop);

        bibleWidget.addComponent('popup', new BibleWidgetPopup());
        bibleWidget.addComponent('navigation', new BibleWidgetNavigator());
        bibleWidget.addComponent('content', new BibleWidgetContent());
        bibleWidget.addComponent('search', new BibleWidgetSearch());
        bibleWidget.addComponent('favorites', new BibleWidgetFavorites());
        bibleWidget.addComponent('notes', new BibleWidgetNotes());

		// call function to override content pane items' onclick events
		bibleWidget.setEventHandlers();
	});
}

/**
 *The main widget class
 **/
function Widget() {
  // array of subcomponents
  this.components = new Array();
  // the containing DOM element
  this.container = null;
  // the current set of data
  this.data = new Array();
  // the current view state of the widget
  this.current = {bid: false, book: false, chapter: false, verse: false};
  // array for holding misc option data
  this.options = null;
  // path for sending AJAX requests
  this.ajax_base = "/bible/widget/ajax/";
  // keeps track of whether the widget is currently displayed
  this.showing = false;
  // placeholder used when rendering a verse item
  this.currentVerse = null;
  // placeholder used when rendering a chapter item
  this.currentChapter = null;
  // placeholder for boxy container
  this.boxy = null;
  // stores the size of the boxy window
  this.size = null;
  // initialize widget: create container div and append it to the body
  this.container = document.createElement('div');
  $(this.container).attr('id', 'widgetContainer').appendTo('body');
 
 
// This creates the Toggle Element and function 
function toggleWindow() {
	if ($('#toggleWidget').length == 0 ) {
		$('#widgetContainer').parent().find('a.boxy-close').before('<div id="toggleWidget"></div>');
	}

	$('#toggleWidget').click(function() {
		// this gets the widget size
		var widgetSize = bibleWidget.boxy.getContentSize();
		// this if/else see sets the needed classes to size the widget		
		if(widgetSize[0] <= 700) {
			bibleWidget.boxy.resize(970,widgetSize[1],function() {
         	$('#toggleWidget').addClass('fullSize');
				$('#widgetContainer').addClass('fullSize');
          });
		} else {
			bibleWidget.boxy.resize(666,widgetSize[1],function() {
				$('#toggleWidget').removeClass('fullSize');
				$('#widgetContainer').removeClass('fullSize');
         });
		 }
	 return false;
	});
	
/** Makes the containers for the Bible Widget become active **/
$('#bible_widget_quick_navagtion_form').click(function() {
 	$('#bible_widget_quick_navagtion_form').removeClass('inactive');
	$('#bible_widget_quick_navagtion_form').addClass('active');
	$('#bible_widget_search_form').removeClass('active');
	$('#bible_widget_search_form').addClass('inactive');
	return false;
});

$('#bible_widget_search_form').click(function() {
 	$(this).removeClass('inactive');
	$(this).addClass('active');
	$('#bible_widget_quick_navagtion_form').removeClass('active');
	$('#bible_widget_quick_navagtion_form').addClass('inactive');
	return false;
});

};
  
  
  /**** class functions ****/
  // output message to console
  this.console = function(str) {
    bibleWidgetConsole("(Widget) "+str);
  };

  // add a component to the widget
  this.addComponent = function(key, c) {
    this.console("Adding component: " + key);
    this.components[key] = c;
    if(typeof this.components[key].componentAdded == 'function') {
      this.components[key].componentAdded();
    }
  };

  // launch the widget
  this.launchWidget = function(launchOptions) {
    this.console("Launching widget");
    if(this.boxy == null) {
      
      $(this.container).load(
        this.ajax_base + 'navigator/widget/',
        null,
        function() {
          bibleWidget.boxy = new Boxy(bibleWidget.container, {
            title: "MyBible Widget",
            afterShow: bibleWidget.widgetShownHandler,
            afterDrop: bibleWidget.widgetDroppedHandler,
            fixed: false
          });
          bibleWidget.size = bibleWidget.boxy.getSize();
          bibleWidget.handleLaunchOptions(launchOptions);
        }
      );
    }
    else {
      this.boxy.show().toTop();
		this.handleLaunchOptions(launchOptions);
		toggleWindow();
    }
  };

  // process launch options
  this.handleLaunchOptions = function(options) {
    if(options == null) return;
    else {
      this.options = options;
    }
    if(options.view != null) {
      this.verifyDataAndDelegateOptions(options.view);
    }
    if(options.closePopup) {
      if(typeof biblePopup != 'undefined') {
        biblePopup.hide();
      }
    }
  };

  // verify that the data array contains info required to show view, then
  // set it as the current view
  this.verifyDataAndDelegateOptions = function(view) {
    var fetch = false;
    view.book = (view.book == null ? false : view.book);
    view.chapter = (view.chapter == null ? false : view.chapter);
    view.verse = (view.verse == null ? false : view.verse);
    
    if(bibleWidget.data[view.bid] == null) {
      fetch = true;
    }
    else if(view.book 
      && (bibleWidget.data[view.bid].books == null
      || bibleWidget.data[view.bid].books[view.book] == null)) {
      
      fetch = true;
    }
    else if(view.chapter 
      && (bibleWidget.data[view.bid].books[view.book].chapters == null
      || bibleWidget.data[view.bid].books[view.book].chapters[view.chapter] == null)) {

      fetch = true;
    }
    else if(view.verse 
      && (bibleWidget.data[view.bid].books[view.book].chapters[view.chapter].verses == null
      || bibleWidget.data[view.bid].books[view.book].chapters[view.chapter].verses[view.verse] == null)){

      fetch = true;
    }
    
    if(fetch) {
      this.console("Fetching data to show starting view");
      $.get(
        this.ajax_base + 'navigator/tree/' + this.buildContentPath(view),
        null,
        function(data) {
          var json = Drupal.parseJson(data);
          bibleWidget.updateData(json);
          bibleWidget.delegateOptions();
        }
      );
    }
    else {
      this.console("Switching to starting view without fetching data");
      this.delegateOptions();
    }
  };
  
  // allow components to act on options
  this.delegateOptions = function() {
    if(this.options.view) {
      this.updateCurrentView(this.options.view);
    }
    this.callComponentEvent('handleLaunchOptions');
  };

  // build the path for a given view in the format "bid/book/chapter/verse"
  this.buildContentPath = function(view) {
    var p = '';
    if(view != null && view.bid) {
      p += view.bid;
      if(view.book) {
        p += '/' + view.book;
        if(view.chapter) {
          p += '/' + view.chapter;
          if(view.verse) {
            p+= '/' + view.verse;
          }
        }
      }
    }

    return p;
  };

  this.widgetBehaviours = function(element) {
    bibleWidget.console("widgetBehaviors called");
  };

  // event handler for when the widget is shown
  this.widgetShownHandler = function() {
    bibleWidget.console("widget shown");
    bibleWidget.showing = true;
    bibleWidget.container = $('#widget_container');
    bibleWidget.callComponentEvent('widgetLaunchEvent');
    bibleWidget.setEventHandlers();
	 toggleWindow();
  };

  // event handler for when the widget is closed
  this.widgetDroppedHandler = function() {
    bibleWidget.console("widget dropped");
    bibleWidget.callComponentEvent('widgetCloseEvent');
    bibleWidget.showing = false;
  };

  // set all event handlers for the widget (and components)
  this.setEventHandlers = function() {
    this.console("Setting event handlers");

    // bind the widget launching event
    $('#bible-widget-launcher-form input[type=submit]').unbind('click').click(
      function() {
        bibleWidget.launchWidget();
        return false;
      }
    );

    // handle the "open in bible" link in the verse popup
    $('.bible_widget_popup_links a.bible-widget-launch')
      .unbind('click')
      .click(function(e) {
        bibleWidget.launchWidget();
        return false;
      });

    this.callComponentEvent('setEventHandlers');
  };

  // an AJAX request is starting
  this.ajaxStart = function() {
    bibleWidget.setLoading();
  };

  // indicate that data is loading
  this.setLoading = function() {
    this.console("setting widget as loading");
    if(this.showing) {
      if($('#bible_widget_navigation_form #loadingDiv').length == 0) {
        $('#bible_widget_navigation_form').prepend(
          $(document.createElement('div'))
            .addClass('message')
            .addClass('status')
            .attr('id', 'loadingDiv')
            .text('Loading')
        );
      }
    }
  };

  // remove "loading" indicator
  this.unsetLoading = function() {
    this.console("setting widget as not loading");
    $('#bible_widget_navigation_form #loadingDiv').remove();
  };

  // all AJAX requests have stopped
  this.ajaxStop = function() {
    bibleWidget.unsetLoading();
  };

  // update the data array
  this.updateData = function(newData) {
    this.console("Updating data");
    this.data = array_merge(newData, this.data);
    this.callComponentEvent('dataUpdated');
  };

  // change the array that indicates what the user is currently viewing.
  // this hook should only run when the data array contains all required info
  this.updateCurrentView = function(c) {
    this.console("Updating current view");
    this.current = c;
    this.callComponentEvent('currentViewUpdated');
  };

  // replace the data array
  this.replaceData = function(newData) {
    this.data = newData;
    this.callComponentEvent('dataUpdated');
  };

  // trigger event in all subcomponents
  this.callComponentEvent = function(event) {
    this.console("Triggering event: " + event);
    for(c in this.components) {
      if(typeof this.components[c][event] == 'function') {
        this.components[c][event]();
      }
    }
  };

  this.resetWidget = function() {
    this.console("Resetting widget");
    
    var view = {bid: this.current.bid, book: false, chapter: false, verse: false};
    $.get(
      this.ajax_base + 'navigator/content/' + view.bid,
      null,
      function(data) {
        bibleWidget.data = Drupal.parseJson(data);
        bibleWidget.updateCurrentView(view);
        bibleWidget.callComponentEvent('widgetResetEvent');
      }
    );

  };
}




/**
 * The class for handling the navigation form
 **/
var BibleWidgetNavigator = function() {

  this.navContainer = null;

  // for recording the current view, which may not match the widget's view
  this.localView = {bid: false, book: false, chapter: false, verse: false};

  // set event handlers for the form
  this.setEventHandlers = function() {
    if(this.navContainer != null) {
      // set event handler for changing drop-down menus
      $(this.navContainer).find('select').unbind('change').change(function() {
        bibleWidget.components.navigation.formValuesChanged(this);
      });
      
      // set event handler for clicking "go" button
      $(this.navContainer).find('#edit-navigator-submit').unbind('click').click(function() {
        bibleWidget.components.navigation.submitClicked();
        return false;
      });
    }
  };

  // handle the submit button
  this.submitClicked = function() {
    bibleWidgetConsole("BibleWidgetNavigator: submit button clicked");
    if(!this.localView.chapter) {
      $(this.navContainer).find('#edit-navigator-submit').attr('value', 'Select a chapter');
    }
    else {
      bibleWidget.updateCurrentView(this.localView);
    }
    
  };

  // the navigation form has been changed
  this.formValuesChanged = function(element) {
    bibleWidgetConsole("BibleWidgetNavigator: form value changed: " + element.name);
    // protect against selecting the null option
    var val = (element.value == "0" ? false : element.value);
    switch(element.name) {
      case 'bid':
        this.localView.bid = val;
        this.localView.book = false;
        this.localView.chapter = false;
        this.localView.verse = false;
        break;
      case 'book':
        this.localView.book = val;
        this.localView.chapter = false;
        this.localView.verse = false;
        break;
      case 'chapter':
        this.localView.chapter = val;
        this.localView.verse = false;
        // reset the submit button in case we've changed its text
        if(val) {
          $(this.navContainer).find('#edit-navigator-submit').attr('value', 'Go');
        }
        break;
      case 'verse':
        this.localView.verse = val;
        break;
    }
    this.verifyDataAndUpdateForm();
  };

  // check that the widget has all data required to update form elements.
  // If so, update form elements.  Otherwise, fetch from server.
  this.verifyDataAndUpdateForm = function() {
    var c = this.localView;
    // start from most specific and work up
    if(c.verse) {
      // nothing to fetch if verse is selected
    }
    else if(c.chapter) {
      // check if the data is there
      if((typeof bibleWidget.data[c.bid] == 'undefined')
        || (typeof bibleWidget.data[c.bid].books == 'undefined')
        || (typeof bibleWidget.data[c.bid].books[c.book] == 'undefined')
        || (typeof bibleWidget.data[c.bid].books[c.book].chapters == 'undefined')
        || (typeof bibleWidget.data[c.bid].books[c.book].chapters[c.chapter] == 'undefined')
        || (typeof bibleWidget.data[c.bid].books[c.book].chapters[c.chapter].verses == 'undefined')
      ) {
          // data is missing, so query it
          bibleWidgetConsole("BibleWidgetNavigator: fetching data["+c.bid+"].books["+c.book+"].chapters["+c.chapter+"].verses");
          $.get(
            bibleWidget.ajax_base + 'navigator/content/' + c.bid + '/' + c.book + '/' + c.chapter,
            null,
            function(data) {
              // update widget data with response, then update form
              var json = Drupal.parseJson(data);
              bibleWidget.updateData(json);
              bibleWidget.components.navigation.updateFormOptions();
            }
          );
      }
      else {
        // we have all data
        this.updateFormOptions();
      }
    }
    else if(c.book) {
      if((typeof bibleWidget.data[c.bid] == 'undefined')
        || (typeof bibleWidget.data[c.bid].books == 'undefined')
        || (typeof bibleWidget.data[c.bid].books[c.book] == 'undefined')
        || (typeof bibleWidget.data[c.bid].books[c.book].chapters == 'undefined')
      ) {

        // data is missing, so query it
        bibleWidgetConsole("BibleWidgetNavigator: fetching data["+c.bid+"].books["+c.book+"].chapters");
        $.get(
          bibleWidget.ajax_base + 'navigator/content/' + c.bid + '/' + c.book,
          null,
          function(data) {
            // update widget data with response, then update form
            var json = Drupal.parseJson(data);
            bibleWidget.updateData(json);
            bibleWidget.components.navigation.updateFormOptions();
          }
        );
      }
      else {
        // we have all the data we need
        this.updateFormOptions();
      }
    }
    else if(c.bid) {
      if((typeof bibleWidget.data[c.bid] == 'undefined')
        || (typeof bibleWidget.data[c.bid].books == 'undefined')
      ) {

        // query for book data
        bibleWidgetConsole("BibleWidgetNavigator: fetching data["+c.bid+"].books");
        $.get(
          bibleWidget.ajax_base + 'navigator/content/' + c.bid,
          null,
          function(data) {
            var json = Drupal.parseJson(data);
            bibleWidget.updateData(json);
            bibleWidget.components.navigation.updateFormOptions();
          }
        );
      }
      else {
        // we have all the data we need
        this.updateFormOptions();
      }
    }
  };

  // update options in form elements.  This assumes the widget data array already
  // contains all required data.
  this.updateFormOptions = function() {
    bibleWidgetConsole('BibleWidgetNavigator: updating form options');
    
    // start from most specific to least specific
    if(this.localView.verse) {
      $(this.navContainer).find('select#edit-verse').attr('value', this.localView.verse);
    }
    else if(this.localView.chapter) {
      bibleWidgetConsole('BibleWidgetNavigator::updateFormOptions: setting book options');
      var verseSelect = $(this.navContainer).find('select#edit-verse');
      $(verseSelect).children().remove()
        .end().append(new Option(' ', 0, true));
      this.createVerseOptions(this.localView);
      // ensure verse select is enabled
      $(verseSelect).attr('disabled', false);
    }
    else if(this.localView.book) {
      bibleWidgetConsole('BibleWidgetNavigator::updateFormOptions: setting chapter options');
      
      var chapterSelect = $(this.navContainer).find('select#edit-chapter');
      $(chapterSelect).children().remove();
      $(chapterSelect).append(new Option(' ', 0, true));
      this.createChapterOptions(this.localView);
      $(chapterSelect).attr('disabled', false);

      // empty out and disable verse drop-down
      $(this.navContainer).find('select#edit-verse').children().remove()
        .end().attr('disabled', true);
      
    }
    else if(this.localView.bid) {
      var bookSelect = $(this.navContainer).find('select#edit-book');
      $(bookSelect).children().remove();
      $(bookSelect).append(new Option(' ', 0, true));
      for(var i in bibleWidget.data[this.localView.bid].book_order) {
          var numericExpression = /^[0-9]+$/;
          if(i.match(numericExpression)){
          var book = bibleWidget.data[this.localView.bid].book_order[i];
          $(bookSelect.append('<option value="' + book + '">' + bibleWidget.data[this.localView.bid].books[book].fname + '</option>'));
        }
      }
    }
  };

  // set the container when the widget is launched
  this.widgetLaunchEvent = function() {
    this.navContainer = $('#bible_widget_navigation_form');
    this.updateLocalView(bibleWidget.current);
  };

  // the widget's view has changed, so update the form
  this.currentViewUpdated = function() {
    this.updateLocalView(bibleWidget.current);
    this.updateFormOptions();
  };

  // set the local representation of the current view
  this.updateLocalView = function(current) {
    bibleWidgetConsole("BibleWidgetNavigator: updating currently selected item");
    this.localView = current;
    this.renderFormElementsForView(this.localView);
    this.setFormValues(this.localView);
  };

  // populate drop-down menus to show the given view.  Assumes data array contains
  // all necessary info
  this.renderFormElementsForView = function(view) {
    // skip bid menu?

    // render book drop-down.  Only do this if options are not already populated
    if($(this.navContainer).find('#edit-book').children('option[value!=0]').length != hash_length(bibleWidget.data[view.bid].books)) {
      this.createBookOptions(view);
    }

    // see if we need to render chapter options
    if(view.book
      && ($(this.navContainer).find('#edit-chapter').children('option[value!=0]').length
        != hash_length(bibleWidget.data[view.bid].books[view.book].chapters))) {

      this.createChapterOptions(view);
    }

    // see if we need to render verse options
    if(view.chapter
      && ($(this.navContainer).find('#edit-verse').children('option[value!=0]').length
        != hash_length(bibleWidget.data[view.bid].books[view.book].chapters[view.chapter].verses))) {

      this.createVerseOptions(view);
    }
  };

  // fill in options for book drop-down based on data array
  this.createBookOptions = function(view) {
    var book = $(this.navContainer).find('#edit-book');
    $(book).children('option[value!=0]').remove();
    for(b in bibleWidget.data[view.bid].books) {
      //$(book).append(new Option(bibleWidget.data[view.bid].books[b].fname, b));
      $(book).append('<option value="' + b + '">' + bibleWidget.data[view.bid].books[b].fname + '</option>');
    }
  };

  // fill in options for chapter drop-down based on data array
  this.createChapterOptions = function(view) {
    bibleWidgetConsole("BibleWidgetNavigation: creating chapter options");
    var chapter = $(this.navContainer).find('#edit-chapter');
    $(chapter).children('option[value!=0]').remove();
    for(var i=1; i<=bibleWidget.data[view.bid].books[view.book].chap; i++) {
      // skip over chapters that are not in data array.  This can happen if the
      // user is searching
      if(typeof bibleWidget.data[view.bid].books[view.book].chapters[i] != 'undefined') {
        $(chapter).append('<option value="' + i + '">' + i + '</option>');
      }
    }
  };

  // fill in options for verse drop-down based on data array
  this.createVerseOptions = function(view) {
    bibleWidgetConsole("BibleWidgetNavigation:createVerseOptions");
    var verse = $(this.navContainer).find('#edit-verse');
    $(verse).children('option[value!=0]').remove();
    
    for(var i=1; i<=bibleWidget.data[view.bid].books[view.book].chapters[view.chapter].num_verses; i++) {
      if(typeof bibleWidget.data[view.bid].books[view.book].chapters[view.chapter].verses[i] != 'undefined') {
        $(verse).append('<option value="' + i + '">' + i + '</option>');
      }
    }
  };

  // sets all drop-downs to their correct values.  This assumes the form elements
  // have already been rendered
  this.setFormValues = function(view) {
    // set bible version value
    if(view.bid) {
      $(this.navContainer).find('#edit-bid').attr('value', view.bid);
    }

    // set book value
    if(view.book) {
      $(this.navContainer).find('#edit-book').attr('value', view.book);
      $(this.navContainer).find('#edit-chapter').attr('disabled', false);
    }
    else {
      // no book selected, so set book drop-down to blank option and disable sub-menus
      $(this.navContainer).find('#edit-book').attr('value', 0);
      $(this.navContainer).find('#edit-chapter').attr('disabled', true);
    }

    // set chapter value
    if(view.chapter) {
      $(this.navContainer).find('#edit-chapter').attr('value', view.chapter);
      $(this.navContainer).find('#edit-verse').attr('disabled', false);
    }
    else {
      $(this.navContainer).find('#edit-chapter').attr('value', 0);
      $(this.navContainer).find('#edit-verse').attr('disabled', true);
    }

    // set verse value
    if(view.verse) {
      $(this.navContainer).find('#edit-verse').attr('value', view.verse);
    }
    else {
      $(this.navContainer).find('#edit-verse').attr('value', 0);
    }
  };

};

/**
 * Class for handling the content pane
 * */
var BibleWidgetContent = function() {

  this.contentContainer = null;

  this.localView = null;

  // set up content pane when widget is launched
  this.widgetLaunchEvent = function() {
    this.contentContainer = $('#bible_widget_content');
    this.updateLocalView(bibleWidget.current);
  };

  // widget is resetting, so reset the state of the content pane
  this.widgetResetEvent = function() {
    this.localView = bibleWidget.current;
    this.renderBookList();
    this.setEventHandlers();
  };

  // set this component's current view
  this.updateLocalView = function(view) {
    this.localView = view;
    this.verifyDataAndRender();
  };

  // set event handlers for content pane
  this.setEventHandlers = function() {
	if(this.contentContainer != null) {
      $(this.contentContainer)
        .find('li')
        .unbind('click');
        
      $(this.contentContainer)
        .find('li')
        .click(function(eventObject) {
          //bibleWidget.components.content.itemClicked(eventObject.target);
          bibleWidget.components.content.itemClicked(this);
          eventObject.stopPropagation();
        })
        .css('cursor', 'pointer');
    }
  };

  // a content item has been clicked
  this.itemClicked = function(target) {
    
    bibleWidgetConsole("BibleWidgetContent: item clicked: " + target.id);

    // if the user is just clicking on an open item, close it and do nothing
    if($(target).hasClass('uncollapsed')) {
      $(target).removeClass('uncollapsed').addClass('collapsed')
        .find('div.item-list').remove();
      bibleWidgetConsole("BibleWidgetContent: closing open item "+target.id);
      return;
    }

    var targetData = target.id.split('-');
    if($(target).hasClass('bible-book')) {
      this.updateLocalView({
        bid: parseInt(targetData[1]),
        book: targetData[0],
        chapter: false,
        verse: false
      });
    }
    else if($(target).hasClass('bible-chapter')) {
      this.updateLocalView({
        bid: parseInt(targetData[2]),
        book: targetData[0],
        chapter: parseInt(targetData[1]),
        verse: false
      });
    }
    else if($(target).hasClass('bible-verse')) {
      this.updateLocalView({
        bid: parseInt(targetData[4]),
        book: targetData[3],
        chapter: parseInt(targetData[2]),
        verse: parseInt(targetData[1])
      });
    }
  };

  // hook that is run when the current view is updated.  Assumes data array
  // contains all necessary info
  this.currentViewUpdated = function() {
    this.localView = bibleWidget.current;
    this.renderContentPane();
  };

  // the content is going to be rendered, but first we need to make sure
  // that the widget actually has the data it needs
  this.verifyDataAndRender = function() {
    var c = this.localView;
    var fetch = false;
    
    if(c.verse
      && ((typeof bibleWidget.data[c.bid] == 'undefined')
      || (typeof bibleWidget.data[c.bid].books == 'undefined')
      || (typeof bibleWidget.data[c.bid].books[c.book] == 'undefined')
      || (typeof bibleWidget.data[c.bid].books[c.book].chapters == 'undefined')
      || (typeof bibleWidget.data[c.bid].books[c.book].chapters[c.chapter] == 'undefined')
      || (typeof bibleWidget.data[c.bid].books[c.book].chapters[c.chapter].verses == 'undefined')
      || (typeof bibleWidget.data[c.bid].books[c.book].chapters[c.chapter].verses[c.verse] == 'undefined')
    )) {
      fetch = true;
    }
    
    if(c.chapter
      && ((typeof bibleWidget.data[c.bid] == 'undefined')
      || (typeof bibleWidget.data[c.bid].books == 'undefined')
      || (typeof bibleWidget.data[c.bid].books[c.book] == 'undefined')
      || (typeof bibleWidget.data[c.bid].books[c.book].chapters == 'undefined')
      || (typeof bibleWidget.data[c.bid].books[c.book].chapters[c.chapter] == 'undefined')
      || (typeof bibleWidget.data[c.bid].books[c.book].chapters[c.chapter].verses == 'undefined')
    )) {
      fetch = true;
    }
    
    if(c.book 
      && ((typeof bibleWidget.data[c.bid] == 'undefined')
      || (typeof bibleWidget.data[c.bid].books == 'undefined')
      || (typeof bibleWidget.data[c.bid].books[c.book] == 'undefined')
      || (typeof bibleWidget.data[c.bid].books[c.book].chapters == 'undefined')
    )) {
      fetch = true;
    }

    if(c.bid
      && ((typeof bibleWidget.data[c.bid] == 'undefined')
      || (typeof bibleWidget.data[c.bid].books == 'undefined'))
    ) {
      fetch = true;
    }

    if(fetch) {
      $.get(
        this.buildFetchContentPath(c),
        null,
        function(data) {
          var json = Drupal.parseJson(data);
          bibleWidget.updateData(json);
          bibleWidget.updateCurrentView(bibleWidget.components.content.localView);
        }
      );
    }
    else {
      bibleWidget.updateCurrentView(this.localView);
    }

  };

  // update the content pane.  This assumes that the data array contains all info
  // required to show the current view
  this.renderContentPane = function() {
    bibleWidgetConsole("BibleWidgetContent: updating content pane");
    // check if we need to re-render the list of books
    if($(this.contentContainer).children('div.item-list').children('ul').length == 0) {
      bibleWidgetConsole("BibleWidgetContent: re-rendering entire content pane");
      this.renderBookList();
    }
    else {
      // otherwise, find the specific element that should have data attached to it
      if(this.localView.bid) {
          // check if we're looking at the correct bible version
          var bidItem = $(this.contentContainer).find('ul#bid-'+this.localView.bid);
          if(bidItem.length) {
            // we are, so render sub-items
            if(this.localView.book) {
              var bookItem = $(this.contentContainer).find('li#'+this.localView.book+'-'+this.localView.bid);
              if($(bookItem).children('div.item-list').length == 0) {
                // we have a current book, but no chapter list is showing, so render it
                $(bookItem).append(this.renderChapterList(this.localView.book));
                $(bookItem).removeClass('collapsed').addClass('uncollapsed');
              }
              else {
                // the book is "open". Check if we have a chapter to open as well
                if(this.localView.chapter) {
                  var chapterItem = $(bookItem).find('li#'+this.localView.book+'-'+this.localView.chapter+'-'+this.localView.bid);
                  if($(chapterItem).children('div.item-list').length == 0) {
                    $(chapterItem).append(this.renderVerseList(this.localView.chapter));
                    $(chapterItem).removeClass('collapsed').addClass('uncollapsed');
                  }
                  else {
                    // the chapter is "open". Check if we have a verse that should be highlighted
                    if(this.localView.verse) {
                      var id = 'verse-'+this.localView.verse+'-'+this.localView.chapter+'-'+this.localView.book+'-'+this.localView.bid;
                      $(chapterItem)
                        .find('li#'+id)
                        .addClass('active');
                      // make sure no other verses are marked as active
                      $('li.bible-verse.active[id!='+id+']').removeClass('active');
                    }
                  }
                }
              }
            }
          }
          else {
              bibleWidgetConsole("re-rendering entire content pane");
              this.renderBookList(false);
          }
      }
    }

    // scroll to the current item
    this.scrollToItem(this.localView);

    // set event handlers for any content that's changed
    this.setEventHandlers();
  };

  this.scrollToItem = function(view) {
    if(view.verse) {
      $(this.contentContainer).scrollTo(
        '#verse-'+view.verse+'-'+view.chapter+'-'+view.book+'-'+view.bid,
        200,
        {offset: -50}
      );
    }
    else if(view.chapter) {
      $(this.contentContainer).scrollTo(
        '#'+view.book+'-'+view.chapter+'-'+view.bid,
        200,
        {offset: -25}
      );
    }
    else if(view.book) {
      $(this.contentContainer).scrollTo(
        '#'+view.book+'-'+view.bid,
        200,
        {offset: -25}
      );
    }
    else {
      // otherwise, scroll to top
      $(this.contentContainer).scrollTo(0);
    }
  };

  this.renderOpenBookList = function(preserve) {
    if(preserve == null || !preserve) {
      $(this.contentContainer).children().remove();
    }

    var view = {bid: this.localView.bid, book: false, chapter: false, verse: false};
    var bookList = $(document.createElement('ul')).attr('id', 'bid-'+view.bid);
    for(b in bibleWidget.data[view.bid].books) {
      view.book = b;
      $(bookList).append(this.renderOpenBookItem(view));
    }

    $(this.contentContainer).append(
      $(document.createElement('div'))
        .addClass('item-list')
        .append(bookList)
    );
  };

  // creates the list of books in the current bid
  this.renderBookList = function(preserve) {
    // first, empty the content pane
    if(preserve == null || !preserve) {
      $(this.contentContainer).children().remove();
    }

    var bookList = $(document.createElement('ul')).attr('id', 'bid-'+this.localView.bid);
    for(var i in bibleWidget.data[this.localView.bid].book_order) {
      var currentBook = bibleWidget.data[this.localView.bid].book_order[i];
      if(typeof bibleWidget.data[this.localView.bid].books[currentBook] != 'undefined') {
        $(bookList).append(this.renderBookItem(currentBook));
      }
    }
    
    $(this.contentContainer).append(
      $(document.createElement('div'))
        .addClass('item-list')
        .append(bookList)
    );
  };

  // render a book with all its chapters open
  this.renderOpenBookItem = function(view) {
    var bookItem = $(document.createElement('li'))
      .attr('id', view.book + '-' + view.bid)
      .addClass('bible-book')
      .addClass('collapsible')
      .addClass('uncollapsed')
      .text(bibleWidget.data[view.bid].books[view.book].fname);

    $(bookItem)
      .append(this.renderOpenChapterList(view));

    return bookItem;
  };

  // renders the item data[view.bid].books[view.book].  Renders chapters
  // if the view should show them
  this.renderBookItem = function(bookIndex) {
    var bookItem = $(document.createElement('li'))
      .attr('id', bookIndex + '-' + this.localView.bid)
      .addClass('bible-book')
      .addClass('collapsible')
      .addClass('collapsed')
      .text(bibleWidget.data[this.localView.bid].books[bookIndex].fname);

    if(this.localView.book == bookIndex) {
      $(bookItem)
        .append(this.renderChapterList(bookIndex))
        .removeClass('collapsed')
        .addClass('uncollapsed');
    }
    
    return bookItem;
  };

  // render a list of all chapters under view
  this.renderOpenChapterList = function(view) {
    var chapterList = document.createElement('ul');
    for(c in bibleWidget.data[view.bid].books[view.book].chapters) {
      view.chapter = c;
      $(chapterList).append(this.renderOpenChapterItem(view));
    }

    return $(document.createElement('div')).addClass('item-list').append(chapterList);
  };


  // render the list of chapters for data[bid].books[bookIndex]
  this.renderChapterList = function(bookIndex) {
    var chapterList = document.createElement('ul');
    for(var i=1; i<=bibleWidget.data[this.localView.bid].books[bookIndex].chap; i++) {
      if(typeof bibleWidget.data[this.localView.bid].books[bookIndex].chapters[i] != 'undefined') {
        $(chapterList).append(this.renderChapterItem(i));
      }
    }

    return $(document.createElement('div')).addClass('item-list').append(chapterList);
  };

  // render a chapter item with all its verses showing
  this.renderOpenChapterItem = function(view) {
    var chapterItem = $(document.createElement('li'))
      .attr('id', view.book+'-'+view.chapter+'-'+view.bid)
      .addClass('bible-chapter')
      .addClass('collapsible')
      .addClass('uncollapsed')
      .text(bibleWidget.data[view.bid].books[view.book].chapters[view.chapter].text);

    bibleWidget.currentChapter = chapterItem;
    bibleWidget.callComponentEvent('createChapterItem');
    chapterItem = bibleWidget.currentChapter;
    bibleWidget.currentChapter = null;

    $(chapterItem)
      .append(this.renderOpenVerseList(view));

    return chapterItem;
  };

  // render the item data[current.bid].books[current.book].chapters[chapIndex].
  // Renders verses if the current view should show them.
  this.renderChapterItem = function(chapIndex) {
    var chapterItem = $(document.createElement('li'))
      .attr('id', this.localView.book+'-'+chapIndex+'-'+this.localView.bid)
      .addClass('bible-chapter')
      .addClass('collapsible')
      .addClass('collapsed')
      .text(bibleWidget.data[this.localView.bid].books[this.localView.book].chapters[chapIndex].text);

    // allow other components to modify this item
    bibleWidget.currentChapter = chapterItem;
    bibleWidget.callComponentEvent('createChapterItem');
    chapterItem = bibleWidget.currentChapter;
    bibleWidget.currentChapter = null;

    if(chapIndex == this.localView.chapter) {
      $(chapterItem)
        .append(this.renderVerseList(chapIndex))
        .removeClass('collapsed')
        .addClass('uncollapsed');
    }
    return chapterItem;
  };

  // render a list of all verses in the view
  this.renderOpenVerseList = function(view) {
    var verseList = $(document.createElement('ul')).addClass('verse-list');
    for(v in bibleWidget.data[view.bid].books[view.book].chapters[view.chapter].verses) {
      view.verse = v;
      $(verseList).append(this.renderOpenVerseItem(view));
    }

    return $(document.createElement('div')).addClass('item-list').append(verseList);
  };

  // render the list of verses belonging to a chapter
  this.renderVerseList = function(chapIndex) {
    var verseList = $(document.createElement('ul')).addClass('verse-list');
    for(v in bibleWidget.data[this.localView.bid].books[this.localView.book].chapters[this.localView.chapter].verses) {
      $(verseList).append(this.renderVerseItem(v));
    }

    return $(document.createElement('div')).addClass('item-list').append(verseList);
  };

  // render the verse specified by the view
  this.renderOpenVerseItem = function(view) {
    var verseItem = $(document.createElement('li'))
      .attr('id', 'verse-'+view.verse+'-'+view.chapter+'-'+view.book+'-'+view.bid)
      .addClass('bible-verse')
      .append(
        $(document.createElement('span'))
          .addClass('verse-context')
          .text(bibleWidget.data[view.bid].books[view.book].chapters[view.chapter].verses[view.verse].context)
      )
      .prepend('<b>'+view.verse+'</b> ');

    bibleWidget.currentVerse = verseItem;
    bibleWidget.callComponentEvent('createVerseItem');
    verseItem = bibleWidget.currentVerse;
    bibleWidget.currentVerse = null;

    if(view.verse == this.localView.verse) {
      $(verseItem).addClass('active');
    }
    return verseItem;
  };

  // render a specific verse
  this.renderVerseItem = function(verseIndex) {
    var verseItem = $(document.createElement('li'))
      .attr('id', 'verse-'+verseIndex+'-'+this.localView.chapter+'-'+this.localView.book+'-'+this.localView.bid)
      .addClass('bible-verse')
      .append(
        $(document.createElement('span'))
          .addClass('verse-context')
          .text(bibleWidget.data[this.localView.bid].books[this.localView.book].chapters[this.localView.chapter].verses[verseIndex].context)
      )
      .prepend('<b>'+verseIndex+'</b> ');

    bibleWidget.currentVerse = verseItem;
    bibleWidget.callComponentEvent('createVerseItem');
    verseItem = bibleWidget.currentVerse;
    bibleWidget.currentVerse = null;
    
    if(verseIndex == this.localView.verse) {
      $(verseItem).addClass('active');
    }

    return verseItem;
  };

  // build the path for sending an AJAX request to get content
  this.buildFetchContentPath = function(view) {
    var path = bibleWidget.ajax_base + 'navigator/content';
    if(view.bid) {
      path += '/' + view.bid;
    }
    if(view.book) {
      path += '/' + view.book;
    }
    if(view.chapter) {
      path += '/' + view.chapter;
    }
    if(view.verse) {
      path += '/' + view.verse;
    }
    return path;
  };

  // re-render the entire content pane
  this.renderAllData = function() {
    bibleWidgetConsole("Rendering entire content pane");
    this.renderBookList(false);
  };
};

/**
 * Class for handling search functionality
 **/
var BibleWidgetSearch = function() {

  // containing element for this component
  this.searchContainer = null;
  // placeholder for the search phrase
  this.searchKeywords = null;
  // placeholder for search result status
  this.searchDescription = null;

  // event handlers for the search form
  this.setEventHandlers = function() {
    if(this.searchContainer != null) {
      $(this.searchContainer).find('input#edit-search-submit')
        .unbind('click')
        .click(function() {
          bibleWidget.components.search.searchButtonClicked();
          return false;
        });

      $(this.searchContainer).find('input#edit-search-clear')
        .unbind('click')
        .click(function() {
          bibleWidget.components.search.clearButtonClicked();
          return false;
        });
    }
  };

  // if the user is conducting a search, highlight all matching words
  this.createVerseItem = function() {
    if(this.searchKeywords != null && this.searchKeywords.length > 0) {
      for(i in this.searchKeywords) {
        var r = new RegExp('('+this.searchKeywords[i]+')', 'gi');
        $(bibleWidget.currentVerse).find('span.verse-context').each(function() {
          this.innerHTML = this.innerHTML.replace(r, '<span class="highlight">$1</span>');
        });
      }
    }
  };

  // conduct a search
  this.searchButtonClicked = function() {
    bibleWidgetConsole("BibleWidgetSearch: conducting search");
    var kw = $(this.searchContainer).find('input#edit-search').attr('value');
    if(kw.length > 0) {
      this.conductSearch(kw);
    }
  };

  // clear the search and reset the widget
  this.clearButtonClicked = function() {
    bibleWidgetConsole("BibleWidgetSearch: clear button clicked");
    if(this.searchKeywords != null && this.searchKeywords.length > 0) {
      bibleWidget.resetWidget();
    }
  };

  // conduct the actual search
  this.conductSearch = function(keywords) {
    bibleWidgetConsole("BibleWidgetSearch: conducting search for "+keywords);
    $.get(
      bibleWidget.ajax_base + 'search/' + encodeURIComponent(keywords) + '/' + bibleWidget.current.bid,
      null,
      function(data) {
        var json = Drupal.parseJson(data);
        if(json.status == 'success') {
          bibleWidgetConsole("BibleWidgetSearch: search results: " + json.description);
          bibleWidget.components.search.searchKeywords = keywords.split(' ');
          bibleWidget.components.search.searchDescription = json.description;
          bibleWidget.replaceData(json.data);
          bibleWidget.components.search.showSearchResults();
        }
      }
    );
  };

  // display the search results in the content pane.  This assumes the data
  // array contains the search results
  this.showSearchResults = function() {
    // make sure the current view is not referencing an item that will not be displayed
    var c = bibleWidget.current;
    if(c.book && (typeof bibleWidget.data[c.bid].books[c.book] == 'undefined')) {
      c = {bid: c.bid, book: false, chapter: false, verse: false};
    }
    if(c.chapter && (typeof bibleWidget.data[c.bid].books[c.book].chapters[c.chapter] == 'undefined')) {
      c.chapter = false;
      c.verse = false;
    }
    if(c.verse && (typeof bibleWidget.data[c.bid].books[c.book].chapters[c.chapter].verses[c.verse] == 'undefined')) {
      c.verse = false;
    }
    bibleWidget.updateCurrentView(c);

    this.showResultsInContentPane();

    bibleWidget.setEventHandlers();
  };

  // display search results in content pane
  this.showResultsInContentPane = function() {
    bibleWidgetConsole("BibleWidgetSearch: showing results in content pane");
    // first, clear out content pane
    var pane = bibleWidget.components.content.contentContainer;
	 var count = this.searchDescription;
	 var trueCount = count/2;
    $(pane).empty();
    $(pane).append(
      $(document.createElement('p'))
        .addClass('search-message')
        .append(
          $(document.createElement('span'))
            .addClass('search-phrase')
            .text('You searched for "' + this.searchKeywords.join(' ') + '"')
          ).append(
            $(document.createElement('span'))
              .addClass('search-num-results')
              .text(trueCount +' results')
          )
    );

    bibleWidget.components.content.renderOpenBookList(true);
    $(pane).scrollTo(0);
  };

  // set up the component when the widget is shown
  this.widgetLaunchEvent = function() {
    this.searchContainer = $('div#bible_widget_search_form');
  };

  // reset the state of the widget
  this.widgetResetEvent = function() {
    $(this.searchContainer).find('input#edit-search').attr('value', '');
    this.searchDescription = null;
    this.searchKeywords = null;
  };
};


var BibleWidgetFavorites = function() {


	  this.setEventHandlers = function() {
		    bibleWidgetConsole("BibleWidgetFavorites::setEventHandlers");
	    // set event handler for verse popup link
	    $('.bible_widget_popup_links a.bible-widget-favorite')
	      .unbind('click')
	      .click(function(e) {
	        bibleWidget.components.favorites.popupFavoriteLinkClicked(this.id);
	        return false;
	      });
	  };

	  // modify the current verse item to add the favorite link
	  this.createVerseItem = function() {
	    if(bibleWidget.currentVerse == 'null') {
	      return null;
	    }

	    var verseData = $(bibleWidget.currentVerse).attr('id').split('-');
	    var v = bibleWidget.data[verseData[4]].books[verseData[3]].chapters[verseData[2]].verses[verseData[1]];
	    var link = $(document.createElement('p'))
	      .text('favorite')
	      .addClass('favorite-link')
	      .attr('id', 'favorite-'+verseData[4]+'-'+verseData[3]+'-'+verseData[2]+'-'+verseData[1])
	      .click(function(eventObject) {
	        bibleWidget.components.favorites.favoriteLinkClicked(this.id);
	        return false;
	      });
	    if((v.fav == null) || (v.fav == false)) {
	      $(link).addClass('addfavorite');
	    }
	    else {
	      $(link).addClass('removefavorite');
	    }
	    $(bibleWidget.currentVerse).prepend(link);
	  };

	  // the "favorite" link is clicked
	  this.favoriteLinkClicked = function(id) {
	    // id in the form favorite-[bid]-[book]-[chapter]-[verse]
	    bibleWidgetConsole("Favorite link clicked: "+id);
	    var vData = id.split('-');
	    
	    var v = bibleWidget.data[vData[1]].books[vData[2]].chapters[vData[3]].verses[vData[4]];
	    if(v.fav == null) {
	      $.get(
	        bibleWidget.ajax_base + 'favorites/set/' + v.vsid,
	        null,
	        function() {
	          $('#'+id).removeClass('addfavorite').addClass('removefavorite');
	          bibleWidget.data[vData[1]].books[vData[2]].chapters[vData[3]].verses[vData[4]].fav = v.vsid;
	        }
	      );
	    }
	    else {
	      $.get(
	        bibleWidget.ajax_base + 'favorites/unset/' + v.vsid,
	        null,
	        function() {
	          $('#'+id).addClass('addfavorite').removeClass('removefavorite');
	          bibleWidget.data[vData[1]].books[vData[2]].chapters[vData[3]].verses[vData[4]].fav = null;
	        }
	      );
	    }
	  };

	  // the favorite link in a verse popup has been clicked
	  this.popupFavoriteLinkClicked = function(id) {
	    var favLink = $('.content-wrapper a#'+id);
	    var popupFavLink = $('.boxy-inner a#'+id);
	    bibleWidgetConsole("Popup Favorite link clicked: "+id);
	    // make sure the link actually exists
	    if(favLink.length > 0) {
	      // id in format "favorite-[bid]-[book]-[chapter]-[verse]-[vsid]"
	      var vData = id.split('-');

	      if($(favLink).hasClass('removefavorite')) {
	    	  bibleWidgetConsole("Removing Favorite from "+id);
	        $.get(
	          bibleWidget.ajax_base + 'favorites/unset/' + vData[5],
	          null,
	          function() {
	        	  bibleWidgetConsole($(favLink));
	        	  bibleWidgetConsole("Adding addfavorite Class to "+id +" "+ vData[5]);
	            $(favLink).addClass('addfavorite');
	            $(favLink).removeClass('removefavorite');
	            $(favLink).text('Add to favorites');
	            $(popupFavLink).addClass('addfavorite');
	            $(popupFavLink).removeClass('removefavorite');
	            $(popupFavLink).text('Add to favorites');
	          }
	        );
	      }
	      else if($(favLink).hasClass('addfavorite')) {
	    	  bibleWidgetConsole("Adding Favorite for "+id);
	        $.get(
	          bibleWidget.ajax_base + 'favorites/set/' + vData[5],
	          null,
	          function() {
	        	  bibleWidgetConsole($(favLink));
	        	  bibleWidgetConsole("Adding removefavorite Class to "+ id +" " + vData[5]);
	            $(favLink).addClass('removefavorite');
	            $(favLink).removeClass('addfavorite');
	            $(favLink).text('Remove from favorites');
	            $(popupFavLink).addClass('removefavorite');
	            $(popupFavLink).removeClass('addfavorite');
	            $(popupFavLink).text('Remove from favorites');
	          }
	        );
	      }
	    }
	  };
	};


/**
 * The class that handles notes functionality
 **/
var BibleWidgetNotes = function() {
  this.notesOpen = false;
  this.notesContainer = null;
  this.launcherLink = null;
  this.uiContainer = null;
  this.localView = {bid: false, book: false, chapter: false, verse: false};

  // alter the verse that is being added to the content pane
  this.createVerseItem = function() {
    if(bibleWidget.currentVerse == null) {
      bibleWidgetConsole("BibleWidgetNotes: called to create verse item, but no item set");
      return;
    }
    else {
      bibleWidgetConsole("BibleWidgetNotes: called to create verse item for ID "+$(bibleWidget.currentVerse).attr('id'));
    }
    var verseData = $(bibleWidget.currentVerse).attr('id').split('-');
    var v = bibleWidget.data[verseData[4]].books[verseData[3]].chapters[verseData[2]].verses[verseData[1]];
    if(v.note_id != null) {
      $(bibleWidget.currentVerse).prepend(
        $(document.createElement('p'))
          .text('note')
          .addClass('note-link')
          .attr('id', 'note-'+verseData[4]+'-'+verseData[3]+'-'+verseData[2]+'-'+verseData[1])
          .click(function(eventObject) {
            bibleWidget.components.notes.verseNoteLinkClicked(this.id);
            return false;
          })
        );
    }
  };

  // the widget's view has been changed
  this.currentViewUpdated = function() {
    if(!this.notesOpen) {
      this.updateLocalView(bibleWidget.current);
    }
  };

  // change this component's view
  this.updateLocalView = function(view) {
    this.localView = view;
  };

  // the user has clicked on a verse's note link
  this.verseNoteLinkClicked = function(id) {
    var vData = id.split('-');
    this.updateLocalView({bid: vData[1], book: vData[2], chapter: vData[3], verse: vData[4]});
    this.openNotes();
  };

  // modify chapter li before adding it to the dom
  this.createChapterItem = function() {
    if(bibleWidget.currentChapter == null) {
      bibleWidgetConsole("BibleWidgetNotes: called to create chapter, but no item set");
      return;
    }
    chapData = $(bibleWidget.currentChapter).attr('id').split('-');
    $(bibleWidget.currentChapter).prepend(
      $(document.createElement('p'))
        .text('note')
        .addClass('chapter-note-link')
        .attr('id', 'note-'+chapData[0]+'-'+chapData[1]+'-'+chapData[2])
        .css('cursor', 'pointer')
        .click(function(eventObject) {
          bibleWidget.components.notes.chapterNoteLinkClicked(this.id);
          return false;
        })
      );
  };

  // the user has clicked on a chapter's note link
  this.chapterNoteLinkClicked = function(id) {
    bibleWidgetConsole("BibleWidgetNotes: chapter note link clicked "+id);
    // id is in form 'note-[book]-[chapter]-[bid]'
    var cData = id.split('-');
    this.updateLocalView({bid: cData[3], book: cData[1], chapter: cData[2], verse: false});
    this.openNotes();
  };

  // run when the widget is opened
  this.widgetLaunchEvent = function() {
    this.setContainer($('#bible-widget-notes'));
  };

  // set the containing DOM element for this object
  this.setContainer = function(element) {
    this.notesContainer = element;
    this.launcherLink = $(element).find('#bible-widget-notes-launcher a');
    this.uiContainer = $(element).find('#bible-widget-notes-content .wrapper-notes-content');
  };

  // set up event handlers for this component
  this.setEventHandlers = function() {
    bibleWidgetConsole("BibleWidgetNotes::setEventHandlers");
    if(this.notesContainer != null) {
      $(this.launcherLink).unbind('click').click(function() {
        bibleWidget.components.notes.launcherLinkClicked();
        return false;
      });

      if(this.notesOpen) {
        $(this.notesContainer)
          .find('#bible-widget-notes-content > p > a')
          .unbind('click')
          .click(function() {
            bibleWidget.components.notes.showOverview();
            return false;
          });

        $(this.uiContainer).find('select#edit-note-verse').change(this.verseSelectChangeHandler);
        $(this.uiContainer).find('input#edit-note-submit').click(this.submitNoteFormHandler);
        $(this.uiContainer).find('.note-overview-link').click(this.overviewLinkClickHandler);
      }
    }

    $('a.bible-widget-popup-notes')
      .unbind('click')
      .click(function() {
        bibleWidget.components.notes.popupNotesLinkClicked(this);
        return false;
      });
  };

  // show the book overview relative to the current view
  this.showOverview = function() {
    bibleWidgetConsole("BibleWidgetNotes: showing overview");
    var view = {bid: this.localView.bid, book: this.localView.book, chapter: false, verse: false};
    this.updateLocalView(view);
    this.openNotes();
  };

  // open the launch to a specific verse and allow user to take notes
  this.popupNotesLinkClicked = function(element) {
    var options = {showNotes: true, view: {}};
    // link id is in format popup_note-[bid]-[book]-[chapter]-[verse]
    var lData = element.id.split('-');
    options.view = {bid: lData[1], book: lData[2], chapter: lData[3], verse: lData[4]};
    bibleWidget.launchWidget(options);
  };

  // show a message in the note launcher area
  this.showNoteMessage = function(str) {
	// Check to see if the message is already appearing
	 if ($('#bible-widget-notes-launcher p').length < 1) {
		 //var img = $(document.createElement("img"))
		 //	.attr({ src : '/themes/goodbook/images/spacer.gif', title: 'hide'});

		 var link = $(document.createElement('a')).attr({ href : '#' });
		 link.append('&nbsp;&nbsp;&nbsp;&nbsp;');
//		 link.append(img);
		 link.click( 
                   function(e) {
                      $(this).parent().hide('fast', function() {
                    	  $(this).remove();
                      });
                      return false;
                   });

    $(this.notesContainer).children('#bible-widget-notes-launcher')
      .append(

        $(document.createElement('p'))
          .text(str)
          .append(link));
//          .append(img));

//            $(document.createElement('a'))
//            .href('#')
//            .html('<img src="/themes/goodbook/images/spacer.gif" />')
//            .click(function(e) {
//              $(this)
//                .parent()
//                .hide('fast', function() {
//                  $(this).remove();
//                });
//              return false;
//            })
//
//          )
//
//      );
	 };
  };

  // event handler for the launcher link
  this.launcherLinkClicked = function() {
    if(this.notesOpen) {
      this.closeNotes();
    }
    else {
      if(this.localView.bid && this.localView.book) {
        this.openNotes();
      }
      else {
        this.showNoteMessage("You must have a book selected to take notes");
      }
    }
  };

  // fetch the UI for notes
  this.getNotesUi = function() {
    var path = bibleWidget.ajax_base;
    path += 'notes/ui/' + this.localView.bid;
    path += '/' + this.localView.book;
    if(this.localView.chapter) {
      path += '/' + this.localView.chapter;
    }
    if(this.localView.verse) {
      path += '/' + this.localView.verse;
    }
    bibleWidgetConsole("BibleWidgetNotes:: fetching notes UI from " + path);

    $(this.uiContainer).load(
      path,
      null,
      function() {
        bibleWidget.components.notes.setEventHandlers();
      }
    );
  };

  
  this.overviewLinkClickHandler = function(event) {
    var element = event.target;
    bibleWidgetConsole("Overview link clicked: " + $(element).attr('id'));

    // id in the format "note-[bid]-[book]-[chapter]
    var chapterData = $(element).attr('id').split('-');
    var content = {
      bid: chapterData[1],
      book: chapterData[2],
      chapter: chapterData[3],
      verse: false,
      vsid: false
    };
    bibleWidget.components.notes.updateLocalView(content);

    bibleWidget.components.notes.getNotesUi();
    return false;
  };

  // the selected verse has changed
  this.verseSelectChangeHandler = function(event) {
    bibleWidgetConsole("Active verse id set to " + event.target.value);
    $(this.uiContainer).find('textarea[name=note_field]').attr('disabled', true);
    if(event.target.value != 0) {
      // get textarea ready for new input
      $(this.uiContainer).find('textarea[name=note_field]').text('Loading...');

      var path = bibleWidget.ajax_base;

      // update the component's local view by setting localView.verse.
      // unfortunately, we have to go to retarded lengths to do that:
      bibleWidget.components.notes.localView.verse = parseInt(
        $(bibleWidget.components.notes.uiContainer)
          .find('select[name=note_verse] option:selected')
          .text()
          .split(' ')[1]
      );

      path += 'notes/get/'+event.target.value;
      $.get(
        path, null, bibleWidget.components.notes.updateNoteFormHandler
      );
    }
  };

  // a vsid was queried for a note.  Update the form to reflect what was returned
  this.updateNoteFormHandler = function(data) {
    json = Drupal.parseJson(data);
    var note = {vsid: 0, note: '', bid: 0, book: 0, chapter: 0, note_id: 0};
    if(json.status) {
      note = json.note;
    }
    else {
      note.vsid = $(bibleWidget.components.notes.uiContainer)
        .find('select[name=note_verse]')
        .attr('value');
      note.bid = bibleWidget.components.notes.localView.bid;
      note.book = bibleWidget.components.notes.localView.book;
      note.chapter = bibleWidget.components.notes.localView.chapter;
    }
    bibleWidget.components.notes.setNoteFormValues(note);
  };

  // update the note form so it contains the given note
  this.setNoteFormValues = function(note) {
    bibleWidgetConsole("updating note form values");
    $(this.uiContainer).find('select[name=note_verse]').attr('value', note.vsid);
    $(this.uiContainer).find('textarea[name=note_field]').attr('value', note.note).attr('disabled', false);
    $(this.uiContainer).find('input[name=note_bid]').attr('value', note.bid);
    $(this.uiContainer).find('input[name=note_book]').attr('value', note.book);
    $(this.uiContainer).find('input[name=note_chapter]').attr('value', note.chapter);
    $(this.uiContainer).find('input[name=note_id]').attr('value', note.note_id);
  };

  // submit the note form
  this.submitNoteFormHandler = function() {
    bibleWidgetConsole("Submitting note form");
    bibleWidget.components.notes.saveCurrentNote();
    return false;
  };


  // generate a note from the form and send it to the server
  this.saveCurrentNote = function() {
    bibleWidgetConsole("Save note from form");
    var n = this.createNoteFromForm();
    var path = bibleWidget.ajax_base;
    path += 'notes/save/' + n.bid + '/' + n.book + '/' + n.chapter + '/' + n.verse + '/' + n.vsid;
    $.post(
      path,
      {
        note: n.note,
        note_id: n.note_id
      },
      function(data) {
//        var json = Drupal.parseJson(data);
        // assuming success here, which isn't safe
        bibleWidget.components.notes.noteSuccessfullySaved(data);
      },
      "json"
    );
  };

  // a note has been saved
  this.noteSuccessfullySaved = function(json) {
    this.showNoteMessage('Note Saved!');

    // update data array to add this note
    bibleWidget
      .data[this.localView.bid]
      .books[this.localView.book]
      .chapters[this.localView.chapter]
      .verses[this.localView.verse].note_id = json.note.note_id;
    bibleWidget
      .data[this.localView.bid]
      .books[this.localView.book]
      .chapters[this.localView.chapter]
      .verses[this.localView.verse].note = json.note.note;


    // find the verse item in the content pane for this note and add a
    // note link
    var selector = '#verse-'+this.localView.verse+'-'+this.localView.chapter+'-'+this.localView.book+'-'+this.localView.bid;
    var li = bibleWidget.components.content.contentContainer
      .find(selector);
    if((li.length > 0) && (li.find('p.note-link').length == 0)) {
      bibleWidget.currentVerse = li;
      var newLi = this.createVerseItem();
      bibleWidget.currentVerse = null;
    }

    this.showOverview();
  };

  // generate a note object from the current state of the form
  this.createNoteFromForm = function() {
    var note = {};
    note.vsid = $(this.uiContainer).find('select[name=note_verse]').attr('value');
    note.verse = $(this.uiContainer)
    .find('select[name=note_verse] option:selected')
    .text()
    .split(' ')[1];
    note.note = $(this.uiContainer).find('textarea[name=note_field]').attr('value');
    note.bid = $(this.uiContainer).find('input[name=note_bid]').attr('value');
    note.book = $(this.uiContainer).find('input[name=note_book]').attr('value');
    note.chapter = $(this.uiContainer).find('input[name=note_chapter]').attr('value');
    note.note_id = $(this.uiContainer).find('input[name=note_id]').attr('value');

    return note;
  };

  // open the notes component
  this.openNotes = function() {
    this.notesOpen = true;
    bibleWidgetConsole("opening notes");
    this.getNotesUi();
    $(this.launcherLink).text('Hide notes');
  };

  // close the notes component
  this.closeNotes = function() {
    // resize the
    this.notesOpen = false;
    bibleWidgetConsole("closing notes");
    $(this.uiContainer).empty();
    $(this.launcherLink).text('Show notes');
  };

  // look at the widget launch options and determine if any action needs to take place
  this.handleLaunchOptions = function() {
    if(bibleWidget.options == null){
      return;
    }

    if(bibleWidget.options.showNotes == true) {
      this.openNotes();
    }
  };
};





// the class that shows verses in popups
var BibleWidgetPopup = function() {

  this.setEventHandlers = function() {
    $('a.bible_widget_link')
      .unbind('click')
      .click(function(e) {
        bibleWidget.components.popup.popupLinkClicked(this);
        return false;
      });

    $('a.bible-widget-launch')
      .unbind('click')
      .click(function(e) {
        bibleWidget.components.popup.viewInBibleLinkClicked(this);
        return false;
      });
  };

  // show the current verse in the widget
  this.viewInBibleLinkClicked = function(element) {
    bibleWidgetConsole("launcher link clicked: "+element.id);
    var options = {view: {}};
    // id is in the format launch-[bid]-[book]-[chapter]-[verse]
    var lData = element.id.split('-');
    options.view = {bid: lData[1], book: lData[2], chapter: lData[3], verse: lData[4]};
    options.closePopup = true;
    bibleWidget.launchWidget(options);
  };

  // show the verse in popup window
  this.popupLinkClicked = function(element) {
    bibleWidgetConsole("popup link clicked: " + element.id);
    // if a popup is already visible, hide it before displaying the new one
    if(typeof biblePopup == 'undefined' || biblePopup.visible == false) {
      biblePopup = new Boxy('#popup_' + element.id, {title: $(element).text()});
    }
    else {
      biblePopup.hide(function() { biblePopup = new Boxy('#popup_'+element.id, {title:$(element).text()}); });
    }
    bibleWidget.setEventHandlers();
  };
  
};

/**
 * count the number of items in an associative array
 **/
function hash_length(a) {
  var i = 0;
  for(x in a) {
    i++;
  }
  return i;
}

/**
 * merge 2 objects into 1, similar to PHP's array_merge
 **/
function array_merge(newA, oldA) {
  var i;
  if((newA && (newA instanceof Array)) && (oldA && (oldA instanceof Array))) {
    for(i in oldA) {
      newA.push(oldA[i]);
    }
  }
  else if((newA && (newA instanceof Object)) && (oldA && (oldA instanceof Object))) {
    for(i in oldA) {
      if(i in newA) {
        if(typeof newA[i] == 'object' && typeof oldA[i] == 'object') {
          newA[i] = array_merge(newA[i], oldA[i]);
        }
        else {
          newA[i] = oldA[i];
        }
      }
      else {
        newA[i] = oldA[i];
      }
    }
  }

  return newA;
} 

	;
/* aqPaging v1.1 - Paging function with next and previous ranges.
   Copyright (C) 2008 Paul Pham <http://aquaron.com/~jquery/aqPaging>

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
(function($){
			 

			 
$.fn.aqPaging = function (options) {
   var opts = $.extend({ },$.fn.aqPaging.defaults,options);



   return this.each(function(){
      if (opts.pages <= 1) return false;

      if (!$('.aqPaging',this).length) {
         $.fn.aqPaging.defaults.uniqID++;
         $('<span class="aqPaging" id="aqPaging_'
            +$.fn.aqPaging.defaults.uniqID+'"><\/span>')
            .appendTo(this);

         $.fn.aqPaging.defaults.cbs[$.fn.aqPaging.defaults.uniqID]
            = opts.cb;

         $('.aqPaging',this).css(opts.css);
      }

      var $pager = $('.aqPaging',this);
      var pid = $pager.attr('id');

      var s = 1, e = opts.pages;
      var html = '';

      var offset = (opts.current > opts.max) ? 1 : 0;

      if (opts.pages > opts.max) {
         if (opts.current > opts.max)
            s = opts.max*parseInt((opts.current-offset)/opts.max);

         if (opts.current-offset+opts.max < opts.pages) 
            e = s + opts.max + offset;
      }

      for (var p=s; p<=e; p++)
         html += '<a href="javascript:void(0)" onclick="$.fn.aqPaging.flip(\''+pid+'\''
            +','+p+','+opts.pages+');">' + p + '<\/a> ';

      $pager.html(html);

      if (opts.current >= s && opts.current-opts.max > 0) {
         $pager.prepend('<a href="javascript:void(0)" onclick="$.fn.aqPaging.flip(\''
            +pid+'\''+','+(s-opts.max+1)+','+opts.pages +')">' 
            + (s-opts.max+1) + '<\/a> <i>&hellip;<\/i> ');
      }
      if ((opts.current-offset+opts.max) <= opts.pages && e != opts.pages) {
         $pager.append('<i>&hellip;<\/i>'
            +' <a href="javascript:void(0)" onclick="$.fn.aqPaging.flip(\''+pid+'\''+','
            +opts.pages+','+opts.pages +')">'+opts.pages+'<\/a> ');
      }

      var hi = ((opts.current-1)%opts.max) + ((offset+1)*offset);
      if (opts.css) {
         $pager.find('a').css(opts.aCss)
         .not(':eq('+hi+')').hover(
            function() { $(this).css(opts.hiCss) },
            function() { $(this).css(opts.loCss) }
         );
         $pager.find('i').css(opts.iCss);
         $pager.find('a').eq(hi).css(opts.hiCss);
      } else
         $pager.find('a').removeClass('aqPagingHi')
            .eq(hi).addClass('aqPagingHi');

      if (opts.flip)
         $.fn.aqPaging.flip(pid,opts.current,opts.pages);
   });
};

$.fn.aqPaging.flip = function(id,p,total) {
   var idx = id.replace(/aqPaging_/,'');
   var func = $.fn.aqPaging.defaults.cbs[idx];
   if (func) func(p);
   $('#'+id).parent().aqPaging({current: p, pages: total});
   return false;
};



$.fn.aqPaging.defaults = {
	
	cbs: [], current: 0, max: 4, uniqID: 0, flip: false,
	css: false,
	hiCss: {},
	loCss: {},
	aCss: {},
	iCss: {}
};
})(jQuery);;
/**
 * Boxy 0.1.4 - Facebook-style dialog, with frills
 *
 * (c) 2008 Jason Frame
 * Licensed under the MIT License (LICENSE)
 */
 
/*
 * jQuery plugin
 *
 * Options:
 *   message: confirmation message for form submit hook (default: "Please confirm:")
 * 
 * Any other options - e.g. 'clone' - will be passed onto the boxy constructor (or
 * Boxy.load for AJAX operations)
 */
jQuery.fn.boxy = function(options) {
    options = options || {};
    return this.each(function() {      
        var node = this.nodeName.toLowerCase(), self = this;
        if (node == 'a') {
            jQuery(this).click(function() {
                var active = Boxy.linkedTo(this),
                    href = this.getAttribute('href'),
                    localOptions = jQuery.extend({actuator: this, title: this.title}, options);
                    
                if (active) {
                    active.show();
                } else if (href.indexOf('#') >= 0) {
                    var content = jQuery(href.substr(href.indexOf('#'))),
                        newContent = content.clone(true);
                    content.remove();
                    localOptions.unloadOnHide = false;
                    new Boxy(newContent, localOptions);
                } else { // fall back to AJAX; could do with a same-origin check
                    if (!localOptions.cache) localOptions.unloadOnHide = true;
                    Boxy.load(this.href, localOptions);
                }
                
                return false;
            });
        } else if (node == 'form') {
            jQuery(this).bind('submit.boxy', function() {
                Boxy.confirm(options.message || 'Please confirm:', function() {
                    jQuery(self).unbind('submit.boxy').submit();
                });
                return false;
            });
        }
    });
};

//
// Boxy Class

function Boxy(element, options) {
    
    this.boxy = jQuery(Boxy.WRAPPER);
    jQuery.data(this.boxy[0], 'boxy', this);
    
    this.visible = false;
    this.options = jQuery.extend({}, Boxy.DEFAULTS, options || {});
    
    if (this.options.modal) {
        this.options = jQuery.extend(this.options, {center: true, draggable: false});
    }
    
    // options.actuator == DOM element that opened this boxy
    // association will be automatically deleted when this boxy is remove()d
    if (this.options.actuator) {
        jQuery.data(this.options.actuator, 'active.boxy', this);
    }
    
    this.setContent(element || "<div></div>");
    this._setupTitleBar();
    
    this.boxy.css('display', 'none').appendTo(document.body);
    this.toTop();

    if (this.options.fixed) {
        if (jQuery.browser.msie && jQuery.browser.version < 7) {
            this.options.fixed = false; // IE6 doesn't support fixed positioning
        } else {
            this.boxy.addClass('fixed');
        }
    }
    
    if (this.options.center && Boxy._u(this.options.x, this.options.y)) {
        this.center();
    } else {
        this.moveTo(
            Boxy._u(this.options.x) ? this.options.x : Boxy.DEFAULT_X,
            Boxy._u(this.options.y) ? this.options.y : Boxy.DEFAULT_Y
        );
    }
    
    if (this.options.show) this.show();

};

Boxy.EF = function() {};

jQuery.extend(Boxy, {
    
    WRAPPER:    "<table cellspacing='0' cellpadding='0' border='0' class='boxy-wrapper'>" +
                "<tr><td class='top-left'></td><td class='top'></td><td class='top-right'></td></tr>" +
                "<tr><td class='left'></td><td class='boxy-inner'></td><td class='right'></td></tr>" +
                "<tr><td class='bottom-left'></td><td class='bottom'></td><td class='bottom-right'></td></tr>" +
                "</table>",
    
    DEFAULTS: {
        title:                  null,           // titlebar text. titlebar will not be visible if not set.
        closeable:              true,           // display close link in titlebar?
        draggable:              true,           // can this dialog be dragged?
        clone:                  false,          // clone content prior to insertion into dialog?
        actuator:               null,           // element which opened this dialog
        center:                 true,           // center dialog in viewport?
        show:                   true,           // show dialog immediately?
        modal:                  false,          // make dialog modal?
        fixed:                  true,           // use fixed positioning, if supported? absolute positioning used otherwise
        closeText:              '[close]',      // text to use for default close link
        unloadOnHide:           false,          // should this dialog be removed from the DOM after being hidden?
        clickToFront:           false,          // bring dialog to foreground on any click (not just titlebar)?
        behaviours:             Boxy.EF,        // function used to apply behaviours to all content embedded in dialog.
        afterDrop:              Boxy.EF,        // callback fired after dialog is dropped. executes in context of Boxy instance.
        afterShow:              Boxy.EF,        // callback fired after dialog becomes visible. executes in context of Boxy instance.
        afterHide:              Boxy.EF,        // callback fired after dialog is hidden. executed in context of Boxy instance.
        beforeUnload:           Boxy.EF         // callback fired after dialog is unloaded. executed in context of Boxy instance.
    },
    
    DEFAULT_X:          50,
    DEFAULT_Y:          50,
    zIndex:             10001,
    dragConfigured:     false, // only set up one drag handler for all boxys
    resizeConfigured:   false,
    dragging:           null,
    
    // load a URL and display in boxy
    // url - url to load
    // options keys (any not listed below are passed to boxy constructor)
    //   type: HTTP method, default: GET
    //   cache: cache retrieved content? default: false
    //   filter: jQuery selector used to filter remote content
    load: function(url, options) {
        
        options = options || {};
        
        var ajax = {
            url: url, type: 'GET', dataType: 'html', cache: false, success: function(html) {
                html = jQuery(html);
                if (options.filter) html = jQuery(options.filter, html);
                new Boxy(html, options);
            }
        };
        
        jQuery.each(['type', 'cache'], function() {
            if (this in options) {
                ajax[this] = options[this];
                delete options[this];
            }
        });
        
        jQuery.ajax(ajax);
        
    },
    
    // allows you to get a handle to the containing boxy instance of any element
    // e.g. <a href='#' onclick='alert(Boxy.get(this));'>inspect!</a>.
    // this returns the actual instance of the boxy 'class', not just a DOM element.
    // Boxy.get(this).hide() would be valid, for instance.
    get: function(ele) {
        var p = jQuery(ele).parents('.boxy-wrapper');
        return p.length ? jQuery.data(p[0], 'boxy') : null;
    },
    
    // returns the boxy instance which has been linked to a given element via the
    // 'actuator' constructor option.
    linkedTo: function(ele) {
        return jQuery.data(ele, 'active.boxy');
    },
    
    // displays an alert box with a given message, calling optional callback
    // after dismissal.
    alert: function(message, callback, options) {
        return Boxy.ask(message, ['OK'], callback, options);
    },
    
    // displays an alert box with a given message, calling after callback iff
    // user selects OK.
    confirm: function(message, after, options) {
        return Boxy.ask(message, ['OK', 'Cancel'], function(response) {
            if (response == 'OK') after();
        }, options);
    },
    
    // asks a question with multiple responses presented as buttons
    // selected item is returned to a callback method.
    // answers may be either an array or a hash. if it's an array, the
    // the callback will received the selected value. if it's a hash,
    // you'll get the corresponding key.
    ask: function(question, answers, callback, options) {
        
        options = jQuery.extend({modal: true, closeable: false},
                                options || {},
                                {show: true, unloadOnHide: true});
        
        var body = jQuery('<div></div>').append(jQuery('<div class="question"></div>').html(question));
        
        // ick
        var map = {}, answerStrings = [];
        if (answers instanceof Array) {
            for (var i = 0; i < answers.length; i++) {
                map[answers[i]] = answers[i];
                answerStrings.push(answers[i]);
            }
        } else {
            for (var k in answers) {
                map[answers[k]] = k;
                answerStrings.push(answers[k]);
            }
        }
        
        var buttons = jQuery('<form class="answers"></form>');
        buttons.html(jQuery.map(answerStrings, function(v) {
            return "<input type='button' value='" + v + "' />";
        }).join(' '));
        
        jQuery('input[type=button]', buttons).click(function() {
            var clicked = this;
            Boxy.get(this).hide(function() {
                if (callback) callback(map[clicked.value]);
            });
        });
        
        body.append(buttons);
        
        new Boxy(body, options);
        
    },
    
    // returns true if a modal boxy is visible, false otherwise
    isModalVisible: function() {
        return jQuery('.boxy-modal-blackout').length > 0;
    },
    
    _u: function() {
        for (var i = 0; i < arguments.length; i++)
            if (typeof arguments[i] != 'undefined') return false;
        return true;
    },
    
    _handleResize: function(evt) {
        var d = jQuery(document);
        jQuery('.boxy-modal-blackout').css('display', 'none').css({
            width: d.width(), height: d.height()
        }).css('display', 'block');
    },
    
    _handleDrag: function(evt) {
        var d;
        if (d = Boxy.dragging) {
            d[0].boxy.css({left: evt.pageX - d[1], top: evt.pageY - d[2]});
        }
    },
    
    _nextZ: function() {
        return Boxy.zIndex++;
    },
    
    _viewport: function() {
        var d = document.documentElement, b = document.body, w = window;
        return jQuery.extend(
            jQuery.browser.msie ?
                { left: b.scrollLeft || d.scrollLeft, top: b.scrollTop || d.scrollTop } :
                { left: w.pageXOffset, top: w.pageYOffset },
            !Boxy._u(w.innerWidth) ?
                { width: w.innerWidth, height: w.innerHeight } :
                (!Boxy._u(d) && !Boxy._u(d.clientWidth) && d.clientWidth != 0 ?
                    { width: d.clientWidth, height: d.clientHeight } :
                    { width: b.clientWidth, height: b.clientHeight }) );
    }

});

Boxy.prototype = {
    
    // Returns the size of this boxy instance without displaying it.
    // Do not use this method if boxy is already visible, use getSize() instead.
    estimateSize: function() {
        this.boxy.css({visibility: 'hidden', display: 'block'});
        var dims = this.getSize();
        this.boxy.css('display', 'none').css('visibility', 'visible');
        return dims;
    },
                
    // Returns the dimensions of the entire boxy dialog as [width,height]
    getSize: function() {
        return [this.boxy.width(), this.boxy.height()];
    },
    
    // Returns the dimensions of the content region as [width,height]
    getContentSize: function() {
        var c = this.getContent();
        return [c.width(), c.height()];
    },
    
    // Returns the position of this dialog as [x,y]
    getPosition: function() {
        var b = this.boxy[0];
        return [b.offsetLeft, b.offsetTop];
    },
    
    // Returns the center point of this dialog as [x,y]
    getCenter: function() {
        var p = this.getPosition();
        var s = this.getSize();
        return [Math.floor(p[0] + s[0] / 2), Math.floor(p[1] + s[1] / 2)];
    },
                
    // Returns a jQuery object wrapping the inner boxy region.
    // Not much reason to use this, you're probably more interested in getContent()
    getInner: function() {
        return jQuery('.boxy-inner', this.boxy);
    },
    
    // Returns a jQuery object wrapping the boxy content region.
    // This is the user-editable content area (i.e. excludes titlebar)
    getContent: function() {
        return jQuery('.boxy-content', this.boxy);
    },
    
    // Replace dialog content
    setContent: function(newContent) {
        newContent = jQuery(newContent).css({display: 'block'}).addClass('boxy-content');
        if (this.options.clone) newContent = newContent.clone(true);
        this.getContent().remove();
        this.getInner().append(newContent);
        this._setupDefaultBehaviours(newContent);
        this.options.behaviours.call(this, newContent);
        return this;
    },
    
    // Move this dialog to some position, funnily enough
    moveTo: function(x, y) {
        this.moveToX(x).moveToY(y);
        return this;
    },
    
    // Move this dialog (x-coord only)
    moveToX: function(x) {
        if (typeof x == 'number') this.boxy.css({left: x});
        else this.centerX();
        return this;
    },
    
    // Move this dialog (y-coord only)
    moveToY: function(y) {
        if (typeof y == 'number') this.boxy.css({top: y});
        else this.centerY();
        return this;
    },
    
    // Move this dialog so that it is centered at (x,y)
    centerAt: function(x, y) {
        var s = this[this.visible ? 'getSize' : 'estimateSize']();
        if (typeof x == 'number') this.moveToX(x - s[0] / 2);
        if (typeof y == 'number') this.moveToY(y - s[1] / 2);
        return this;
    },
    
    centerAtX: function(x) {
        return this.centerAt(x, null);
    },
    
    centerAtY: function(y) {
        return this.centerAt(null, y);
    },
    
    // Center this dialog in the viewport
    // axis is optional, can be 'x', 'y'.
    center: function(axis) {
        var v = Boxy._viewport();
        var o = this.options.fixed ? [0, 0] : [v.left, v.top];
        if (!axis || axis == 'x') this.centerAt(o[0] + v.width / 2, null);
        if (!axis || axis == 'y') this.centerAt(null, o[1] + v.height / 2);
        return this;
    },
    
    // Center this dialog in the viewport (x-coord only)
    centerX: function() {
        return this.center('x');
    },
    
    // Center this dialog in the viewport (y-coord only)
    centerY: function() {
        return this.center('y');
    },
    
    // Resize the content region to a specific size
    resize: function(width, height, after) {
        if (!this.visible) return;
        var bounds = this._getBoundsForResize(width, height);
        this.boxy.css({left: bounds[0], top: bounds[1]});
        this.getContent().css({width: bounds[2], height: bounds[3]});
        if (after) after(this);
        return this;
    },
    
    // Tween the content region to a specific size
    tween: function(width, height, after) {
        if (!this.visible) return;
        var bounds = this._getBoundsForResize(width, height);
        var self = this;
        this.boxy.stop().animate({left: bounds[0], top: bounds[1]});
        this.getContent().stop().animate({width: bounds[2], height: bounds[3]}, function() {
            if (after) after(self);
        });
        return this;
    },
    
    // Returns true if this dialog is visible, false otherwise
    isVisible: function() {
        return this.visible;    
    },
    
    // Make this boxy instance visible
    show: function() {
        if (this.visible) return;
        if (this.options.modal) {
            var self = this;
            if (!Boxy.resizeConfigured) {
                Boxy.resizeConfigured = true;
                jQuery(window).resize(function() { Boxy._handleResize(); });
            }
            this.modalBlackout = jQuery('<div class="boxy-modal-blackout"></div>')
                .css({zIndex: Boxy._nextZ(),
                      opacity: 0.7,
                      width: jQuery(document).width(),
                      height: jQuery(document).height()})
                .appendTo(document.body);
            this.toTop();
            if (this.options.closeable) {
                jQuery(document.body).bind('keypress.boxy', function(evt) {
                    var key = evt.which || evt.keyCode;
                    if (key == 27) {
                        self.hide();
                        jQuery(document.body).unbind('keypress.boxy');
                    }
                });
            }
        }
        this.boxy.stop().css({opacity: 1}).show();
        this.visible = true;
        this._fire('afterShow');
        return this;
    },
    
    // Hide this boxy instance
    hide: function(after) {
        if (!this.visible) return;
        var self = this;
        if (this.options.modal) {
            jQuery(document.body).unbind('keypress.boxy');
            this.modalBlackout.animate({opacity: 0}, function() {
                jQuery(this).remove();
            });
        }
        this.boxy.stop().animate({opacity: 0}, 300, function() {
            self.boxy.css({display: 'none'});
            self.visible = false;
            self._fire('afterHide');
            if (after) after(self);
            if (self.options.unloadOnHide) self.unload();
        });
        return this;
    },
    
    toggle: function() {
        this[this.visible ? 'hide' : 'show']();
        return this;
    },
    
    hideAndUnload: function(after) {
        this.options.unloadOnHide = true;
        this.hide(after);
        return this;
    },
    
    unload: function() {
        this._fire('beforeUnload');
        this.boxy.remove();
        if (this.options.actuator) {
            jQuery.data(this.options.actuator, 'active.boxy', false);
        }
    },
    
    // Move this dialog box above all other boxy instances
    toTop: function() {
        this.boxy.css({zIndex: Boxy._nextZ()});
        return this;
    },
    
    // Returns the title of this dialog
    getTitle: function() {
        return jQuery('> .title-bar h2', this.getInner()).html();
    },
    
    // Sets the title of this dialog
    setTitle: function(t) {
        jQuery('> .title-bar h2', this.getInner()).html(t);
        return this;
    },
    
    //
    // Don't touch these privates
    
    _getBoundsForResize: function(width, height) {
        var csize = this.getContentSize();
        var delta = [width - csize[0], height - csize[1]];
        var p = this.getPosition();
        return [Math.max(p[0] - delta[0] / 2, 0),
                Math.max(p[1] - delta[1] / 2, 0), width, height];
    },
    
    _setupTitleBar: function() {
        if (this.options.title) {
            var self = this;
				// Added in this loop to give 2 different classes for modals and non modals				
				if (this.options.modal) {
						var tb = jQuery("<div class='title-bar modal'></div>").html("<h2>" + this.options.title + "</h2>");
						if (this.options.closeable) {
                		tb.append(jQuery("<a href='#' class='boxy-close'></a>").html(this.options.closeText));
            		}
				} else {
            		var tb = jQuery("<div class='title-bar'></div>").html("<h2>" + this.options.title + "</h2>");
						if (this.options.closeable) {
                		tb.append(jQuery("<a href='#' class='boxy-close modal'></a>").html(this.options.closeText));
            		}
					}

            if (this.options.draggable) {
                tb[0].onselectstart = function() { return false; }
                tb[0].unselectable = 'on';
                tb[0].style.MozUserSelect = 'none';
                if (!Boxy.dragConfigured) {
                    jQuery(document).mousemove(Boxy._handleDrag);
                    Boxy.dragConfigured = true;
                }
                tb.mousedown(function(evt) {
                    self.toTop();
                    Boxy.dragging = [self, evt.pageX - self.boxy[0].offsetLeft, evt.pageY - self.boxy[0].offsetTop];
                    jQuery(this).addClass('dragging');
                }).mouseup(function() {
                    jQuery(this).removeClass('dragging');
                    Boxy.dragging = null;
                    self._fire('afterDrop');
                });
            }
            this.getInner().prepend(tb);
            this._setupDefaultBehaviours(tb);
        }
    },
    
    _setupDefaultBehaviours: function(root) {
        var self = this;
        if (this.options.clickToFront) {
            root.click(function() { self.toTop(); });
        }
// Changed this to be boxy-close
        jQuery('.boxy-close', root).click(function() {
            self.hide();
            return false;
        }).mousedown(function(evt) { evt.stopPropagation(); });
    },
    
    _fire: function(event) {
        this.options[event].call(this);
    }
    
};
;
/**
 * jQuery.ScrollTo
 * Copyright (c) 2007-2008 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 9/11/2008
 *
 * @projectDescription Easy element scrolling using jQuery.
 * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
 * Tested with jQuery 1.2.6. On FF 2/3, IE 6/7, Opera 9.2/5 and Safari 3. on Windows.
 *
 * @author Ariel Flesler
 * @version 1.4
 *
 * @id jQuery.scrollTo
 * @id jQuery.fn.scrollTo
 * @param {String, Number, DOMElement, jQuery, Object} target Where to scroll the matched elements.
 *	  The different options for target are:
 *		- A number position (will be applied to all axes).
 *		- A string position ('44', '100px', '+=90', etc ) will be applied to all axes
 *		- A jQuery/DOM element ( logically, child of the element to scroll )
 *		- A string selector, that will be relative to the element to scroll ( 'li:eq(2)', etc )
 *		- A hash { top:x, left:y }, x and y can be any kind of number/string like above.
 * @param {Number} duration The OVERALL length of the animation, this argument can be the settings object instead.
 * @param {Object,Function} settings Optional set of settings or the onAfter callback.
 *	 @option {String} axis Which axis must be scrolled, use 'x', 'y', 'xy' or 'yx'.
 *	 @option {Number} duration The OVERALL length of the animation.
 *	 @option {String} easing The easing method for the animation.
 *	 @option {Boolean} margin If true, the margin of the target element will be deducted from the final position.
 *	 @option {Object, Number} offset Add/deduct from the end position. One number for both axes or { top:x, left:y }.
 *	 @option {Object, Number} over Add/deduct the height/width multiplied by 'over', can be { top:x, left:y } when using both axes.
 *	 @option {Boolean} queue If true, and both axis are given, the 2nd axis will only be animated after the first one ends.
 *	 @option {Function} onAfter Function to be called after the scrolling ends. 
 *	 @option {Function} onAfterFirst If queuing is activated, this function will be called after the first scrolling ends.
 * @return {jQuery} Returns the same jQuery object, for chaining.
 *
 * @desc Scroll to a fixed position
 * @example $('div').scrollTo( 340 );
 *
 * @desc Scroll relatively to the actual position
 * @example $('div').scrollTo( '+=340px', { axis:'y' } );
 *
 * @dec Scroll using a selector (relative to the scrolled element)
 * @example $('div').scrollTo( 'p.paragraph:eq(2)', 500, { easing:'swing', queue:true, axis:'xy' } );
 *
 * @ Scroll to a DOM element (same for jQuery object)
 * @example var second_child = document.getElementById('container').firstChild.nextSibling;
 *			$('#container').scrollTo( second_child, { duration:500, axis:'x', onAfter:function(){
 *				alert('scrolled!!');																   
 *			}});
 *
 * @desc Scroll on both axes, to different values
 * @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } );
 */
;(function( $ ){
	
	var $scrollTo = $.scrollTo = function( target, duration, settings ){
		$(window).scrollTo( target, duration, settings );
	};

	$scrollTo.defaults = {
		axis:'y',
		duration:1
	};

	// Returns the element that needs to be animated to scroll the window.
	// Kept for backwards compatibility (specially for localScroll & serialScroll)
	$scrollTo.window = function( scope ){
		return $(window).scrollable();
	};

	// Hack, hack, hack... stay away!
	// Returns the real elements to scroll (supports window/iframes, documents and regular nodes)
	$.fn.scrollable = function(){
		return this.map(function(){
			// Just store it, we might need it
			var win = this.parentWindow || this.defaultView,
				// If it's a document, get its iframe or the window if it's THE document
				elem = this.nodeName == '#document' ? win.frameElement || win : this,
				// Get the corresponding document
				doc = elem.contentDocument || (elem.contentWindow || elem).document,
				isWin = elem.setInterval;

			return elem.nodeName == 'IFRAME' || isWin && $.browser.safari ? doc.body
				: isWin ? doc.documentElement
				: this;
		});
	};

	$.fn.scrollTo = function( target, duration, settings ){
		if( typeof duration == 'object' ){
			settings = duration;
			duration = 0;
		}
		if( typeof settings == 'function' )
			settings = { onAfter:settings };
			
		settings = $.extend( {}, $scrollTo.defaults, settings );
		// Speed is still recognized for backwards compatibility
		duration = duration || settings.speed || settings.duration;
		// Make sure the settings are given right
		settings.queue = settings.queue && settings.axis.length > 1;
		
		if( settings.queue )
			// Let's keep the overall duration
			duration /= 2;
		settings.offset = both( settings.offset );
		settings.over = both( settings.over );

		return this.scrollable().each(function(){
			var elem = this,
				$elem = $(elem),
				targ = target, toff, attr = {},
				win = $elem.is('html,body');

			switch( typeof targ ){
				// A number will pass the regex
				case 'number':
				case 'string':
					if( /^([+-]=)?\d+(px)?$/.test(targ) ){
						targ = both( targ );
						// We are done
						break;
					}
					// Relative selector, no break!
					targ = $(targ,this);
				case 'object':
					// DOMElement / jQuery
					if( targ.is || targ.style )
						// Get the real position of the target 
						toff = (targ = $(targ)).offset();
			}
			$.each( settings.axis.split(''), function( i, axis ){
				var Pos	= axis == 'x' ? 'Left' : 'Top',
					pos = Pos.toLowerCase(),
					key = 'scroll' + Pos,
					old = elem[key],
					Dim = axis == 'x' ? 'Width' : 'Height',
					dim = Dim.toLowerCase();

				if( toff ){// jQuery / DOMElement
					attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] );

					// If it's a dom element, reduce the margin
					if( settings.margin ){
						attr[key] -= parseInt(targ.css('margin'+Pos)) || 0;
						attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0;
					}
					
					attr[key] += settings.offset[pos] || 0;
					
					if( settings.over[pos] )
						// Scroll to a fraction of its width/height
						attr[key] += targ[dim]() * settings.over[pos];
				}else
					attr[key] = targ[pos];

				// Number or 'number'
				if( /^\d+$/.test(attr[key]) )
					// Check the limits
					attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max(Dim) );

				// Queueing axes
				if( !i && settings.queue ){
					// Don't waste time animating, if there's no need.
					if( old != attr[key] )
						// Intermediate animation
						animate( settings.onAfterFirst );
					// Don't animate this axis again in the next iteration.
					delete attr[key];
				}
			});			
			animate( settings.onAfter );			

			function animate( callback ){
				$elem.animate( attr, duration, settings.easing, callback && function(){
					callback.call(this, target, settings);
				});
			};
			function max( Dim ){
				var attr ='scroll'+Dim,
					doc = elem.ownerDocument;
				
				return win
						? Math.max( doc.documentElement[attr], doc.body[attr]  )
						: elem[attr];
			};
		}).end();
	};

	function both( val ){
		return typeof val == 'object' ? val : { top:val, left:val };
	};

})( jQuery );;
// $Id: jstools.js,v 1.26 2008/04/03 17:59:37 nedjo Exp $

Drupal.preventSelect = function (elt) {
  // IE hack to prevent selection of the text when users click.
  if (document.onselectstart) {
    elt.onselectstart = function () {
      return false;
    }
  }
  else {
    $(elt).mousedown(function () {
      return false;
    });
  }
};

Drupal.url = function (path, query, fragment) {
  query = query ? query : '';
  fragment = fragment ? '#' + fragment : '';
  var base = Drupal.settings.basePath;
  if (!Drupal.settings.jstools.cleanurls) {
    if (query) {
      return base + '?q=' + path + '&' + query + fragment;
    }
    else {
      return base + '?q=' + path + fragment;
    }
  }
  else {
    if (query) {
      return base + path + '?' + query + fragment;
    }
    else {
      return base + path + fragment;
    }
  }
};

/**
 * Return the Drupal path portion of an href.
 */
Drupal.getPath = function (href) {
  href = Drupal.pathPortion(href);
  // 3 is the length of the '?q=' added to the url without clean urls.
  href = href.substring(Drupal.settings.basePath.length + (Drupal.settings.jstools.cleanurls ? 0 : 3), href.length);
  var chars = ['#', '?', '&'];
  for (i in chars) {
    if (href.indexOf(chars[i]) > -1) {
      href = href.substr(0, href.indexOf(chars[i]));
    }
  }
  return href;
};

/**
 * Add a segment to the beginning of a path.
 */
Drupal.prependPath = function (href, segment) {
  href = Drupal.pathPortion(href);
  // 3 is the length of the '?q=' added to the url without clean urls.
  var baseLength = Drupal.settings.jstools.basePath.length + (Drupal.settings.jstools.cleanurls ? 0 : 3);
  var base = href.substring(0, baseLength);
  return base + segment + '/' + href.substring(baseLength, href.length);
};

/**
 * Strip off the protocol plus domain from an href.
 */
Drupal.pathPortion = function (href) {
  // Remove e.g. http://example.com if present.
  var protocol = window.location.protocol;
  if (href.substring(0, protocol.length) == protocol) {
    // 2 is the length of the '//' that normally follows the protocol
    href = href.substring(href.indexOf('/', protocol.length + 2));
  }
  return href;
};

/**
 * Scroll to a given element's vertical page position.
 */
Drupal.scrollTo = function(el) {
  var pos = Drupal.absolutePosition(el);
  window.scrollTo(0, pos.y);
};

Drupal.elementChildren = function (element) {
  var children = [];
  for (i in element) {
    if (i.substr(0, 1) != '#') {
      children[children.length] = i;
    }
  }
  return children;
};

Drupal.elementProperties = function (element) {
  var properties = [];
  for (i in element) {
    if (i.substr(0, 1) == '#') {
      properties[properties.length] = i;
    }
  }
  return properties;
};

Drupal.parseQueryString = function (href) {
  query = Drupal.getQueryString(href);
  var args = {};
  var pairs = query.split("&");
  for(var i = 0; i < pairs.length; i++) {
    var pos = pairs[i].indexOf('=');
    if (pos == -1) continue;
    var argname = pairs[i].substring(0, pos);
    var value = pairs[i].substring(pos + 1);
    args[argname] = unescape(value.replace(/\+/g, " "));
  }
  return args;
};

Drupal.getQueryString = function (href) {
  if (href) {
    var index = href.indexOf('?');
    href = (index == -1) ? '' : href.substring(index + 1);
  }
  query = href ? href : location.search.substring(1);
  if (!Drupal.settings.jstools.cleanurls) {
    var index = query.indexOf('&');
    query = (index == -1) ? '' : query.substring(index + 1);
  }
  return query;
};

Drupal.pathMatch = function (path, paths, type) {
  // Convert paths into a regular expression.
  paths = '^' + paths + '$';
  paths = paths.replace(/\n/g, '$|^');
  paths = paths.replace(/\*/g, '.*');
  var search = path.search(new RegExp(paths)) > -1 ? true : false;
  return (type == 0) ? search : !search;
};

/**
 * Retrieves the absolute position of an element on the screen
 */
Drupal.absolutePosition = function (el) {
  var sLeft = 0, sTop = 0;
  var isDiv = /^div$/i.test(el.tagName);
  if (isDiv && el.scrollLeft) {
    sLeft = el.scrollLeft;
  }
  if (isDiv && el.scrollTop) {
    sTop = el.scrollTop;
  }
  var r = { x: el.offsetLeft - sLeft, y: el.offsetTop - sTop };
  if (el.offsetParent) {
    var tmp = Drupal.absolutePosition(el.offsetParent);
    r.x += tmp.x;
    r.y += tmp.y;
  }
  return r;
};

/**
 *  Returns the position of the mouse cursor based on the event object passed
 */
Drupal.mousePosition = function(e) {
  return { x: e.clientX + document.documentElement.scrollLeft, y: e.clientY + document.documentElement.scrollTop };
};;
// $Id: collapsiblock.js,v 1.8 2010/10/02 00:42:28 gagarine Exp $

Drupal.Collapsiblock = Drupal.Collapsiblock || {};

Drupal.behaviors.collapsiblock = function (context) {
  var cookieData = Drupal.Collapsiblock.getCookieData();
  var slidetype = Drupal.settings.collapsiblock.slide_type;
  var defaultState = Drupal.settings.collapsiblock.default_state;
  var slidespeed = parseInt(Drupal.settings.collapsiblock.slide_speed);
  var title = Drupal.settings.collapsiblock.block_title;
  var block = Drupal.settings.collapsiblock.block;
  var block_content = Drupal.settings.collapsiblock.block_content;
  $(block + ':not(.collapsiblock-processed)', context).addClass('collapsiblock-processed').each(function () {
    var id = this.id;
    var titleElt = $(title, this).not($('.content :header',this));
    if (titleElt.size()) {
      titleElt = titleElt[0];
      // Status values: 1 = not collapsible, 2 = collapsible and expanded, 3 = collapsible and collapsed, 4 = always collapsed
      var stat = Drupal.settings.collapsiblock.blocks[this.id] ? Drupal.settings.collapsiblock.blocks[this.id] : defaultState;
      if (stat == 1) {
        return;
      }

      titleElt.target = $(this).find(block_content);
      $(titleElt)
      .wrapInner('<a href="#" role="link" />')
      .addClass('collapsiblock')
      .click(function (e) {
        var st = Drupal.Collapsiblock.getCookieData();
        if ($(this).is('.collapsiblockCollapsed')) {
          $(this).removeClass('collapsiblockCollapsed');
          if (slidetype == 1) {
            $(this.target).slideDown(slidespeed).attr('aria-hidden', false); ;
          }
          else {
            $(this.target).animate({
              height:'show',
              opacity:'show'
            }, slidespeed);
          }

          // Don't save cookie data if the block is always collapsed.
          if (stat != 4) {
            st[id] = 1;
          }
        }
        else {
          $(this).addClass('collapsiblockCollapsed');
          if (slidetype == 1) {
            $(this.target).slideUp(slidespeed).attr('aria-hidden', true);
          }
          else {
            $(this.target).animate({
              height:'hide',
              opacity:'hide'
            }, slidespeed);
          }

          // Don't save cookie data if the block is always collapsed.
          if (stat != 4) {
            st[id] = 0;
          }
        }
        // Stringify the object in JSON format for saving in the cookie.
        var cookieString = '{ ';
        var cookieParts = [];
        $.each(st, function (id, setting) {
          cookieParts[cookieParts.length] = ' "' + id + '": ' + setting;
        });
        cookieString += cookieParts.join(', ') + ' }';
        $.cookie('collapsiblock', cookieString, {
          path: Drupal.settings.basePath
          });
        e.preventDefault();
      });
      // Leave active blocks uncollapsed. If the block is expanded, do nothing.
      if (stat ==  4 || (cookieData[id] == 0 || (stat == 3 && cookieData[id] == undefined)) && !$(this).find('a.active').size()) {
        $(titleElt).addClass('collapsiblockCollapsed');
        $(titleElt.target).hide();
      }
    }
  });
};

Drupal.Collapsiblock.getCookieData = function () {
  var cookieString = $.cookie('collapsiblock');
  return cookieString ? Drupal.parseJson(cookieString) : {};
};

  

;
/**
 * Cookie plugin
 *
 * Copyright (c) 2006 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
 *
 */

/**
 * Create a cookie with the given name and value and other optional parameters.
 *
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Set the value of a cookie.
 * @example $.cookie('the_cookie', 'the_value', { expires: 7, path: '/', domain: 'jquery.com', secure: true });
 * @desc Create a cookie with all available options.
 * @example $.cookie('the_cookie', 'the_value');
 * @desc Create a session cookie.
 * @example $.cookie('the_cookie', null);
 * @desc Delete a cookie by passing null as value. Keep in mind that you have to use the same path and domain
 *       used when the cookie was set.
 *
 * @param String name The name of the cookie.
 * @param String value The value of the cookie.
 * @param Object options An object literal containing key/value pairs to provide optional cookie attributes.
 * @option Number|Date expires Either an integer specifying the expiration date from now on in days or a Date object.
 *                             If a negative value is specified (e.g. a date in the past), the cookie will be deleted.
 *                             If set to null or omitted, the cookie will be a session cookie and will not be retained
 *                             when the the browser exits.
 * @option String path The value of the path atribute of the cookie (default: path of page that created the cookie).
 * @option String domain The value of the domain attribute of the cookie (default: domain of page that created the cookie).
 * @option Boolean secure If true, the secure attribute of the cookie will be set and the cookie transmission will
 *                        require a secure protocol (like HTTPS).
 * @type undefined
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */

/**
 * Get the value of a cookie with the given name.
 *
 * @example $.cookie('the_cookie');
 * @desc Get the value of a cookie.
 *
 * @param String name The name of the cookie.
 * @return The value of the cookie.
 * @type String
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */
jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        // CAUTION: Needed to parenthesize options.path and options.domain
        // in the following expressions, otherwise they evaluate to undefined
        // in the packed version for some reason...
        var path = options.path ? '; path=' + (options.path) : '';
        var domain = options.domain ? '; domain=' + (options.domain) : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};;

$(document).ready(function() {

  // Attach onclick event to document only and catch clicks on all elements.
  $(document.body).click(function(event) {
    // Catch only the first parent link of a clicked element.
    $(event.target).parents("a:first,area:first").andSelf().filter("a,area").each(function() {

      var ga = Drupal.settings.googleanalytics;
      // Expression to check for absolute internal links.
      var isInternal = new RegExp("^(https?):\/\/" + window.location.host, "i");
      // Expression to check for special links like gotwo.module /go/* links.
      var isInternalSpecial = new RegExp("(\/go\/.*)$", "i");
      // Expression to check for download links.
      var isDownload = new RegExp("\\.(" + ga.trackDownloadExtensions + ")$", "i");

      // Is the clicked URL internal?
      if (isInternal.test(this.href)) {
        // Is download tracking activated and the file extension configured for download tracking?
        if (ga.trackDownload && isDownload.test(this.href)) {
          // Download link clicked.
          var extension = isDownload.exec(this.href);
          _gaq.push(["_trackEvent", "Downloads", extension[1].toUpperCase(), this.href.replace(isInternal, '')]);
        }
        else if (isInternalSpecial.test(this.href)) {
          // Keep the internal URL for Google Analytics website overlay intact.
          _gaq.push(["_trackPageview", this.href.replace(isInternal, '')]);
        }
      }
      else {
        if (ga.trackMailto && $(this).is("a[href^=mailto:],area[href^=mailto:]")) {
          // Mailto link clicked.
          _gaq.push(["_trackEvent", "Mails", "Click", this.href.substring(7)]);
        }
        else if (ga.trackOutgoing && this.href) {
          if (ga.trackOutboundAsPageview) {
            // Track all external links as page views after URL cleanup.
            // Currently required, if click should be tracked as goal.
            _gaq.push(["_trackPageview", '/outbound/' + this.href.replace(/^(https?|ftp|news|nntp|telnet|irc|ssh|sftp|webcal):\/\//i, '').split('/').join('--')]);
          }
          else {
            // External link clicked.
            _gaq.push(["_trackEvent", "Outbound links", "Click", this.href]);
          }
        }
      }
    });
  });
});
;

Drupal.behaviors.gridselect_show = function (context) {
  $('#multi-grid-selector', context).show();
}
  
Drupal.behaviors.clickItem = function (context) {
  $('#multi-grid-selector #items li.item', context).click(function() {
      if ($(this).hasClass("disabled")) {
	return false;
      }

      var key_id = $(this).attr('id');
      var key = key_id.substring(4); // drop the key-

      var item = $('a', this);

      var curval = $(Drupal.settings.gridselect.gridselect_id).val();
      curval = curval ? curval : [];
      var newval = [];

      if ($(item).hasClass('selected')) {
	// Deselect
	$(item).removeClass('selected');
	$('#multi-grid-selector #selected-items #' + key_id).remove();

	// Remove the selected item from the form values
	for ($i = 0; $i < curval.length; $i++) {
	  if (curval[$i] == key) {
	    continue;
	  }
	  newval.push(curval[$i]);
	}
      }
      else {
	// Select

	// Deselect everything else if multiple is disabled
	if (!Drupal.settings.gridselect.multiple) {
	  $('a.selected').removeClass('selected');
	}
	
	$(item).addClass('selected');
	item_html = '<li class="item" id="sidebar-' + key_id + '">' + $(this).html() + '</li>';
	$('#multi-grid-selector #selected-items').append(item_html);      
	
	// Update the form with the latest value
	if (Drupal.settings.gridselect.multiple) {
	  curval.push(key);
	}
	else {
	  // Replace the value if multiple select is disabled
	  curval = new Array(key);
	}
	newval = curval;
      }

      $(Drupal.settings.gridselect.gridselect_id).val(newval);

      return false;
    });
}
;
// $Id: jquerymenu_no_animation.js,v 1.4 2010/05/05 07:50:55 aaronhawkins Exp $
Drupal.behaviors.jquerymenu = function(context) {
  $('ul.jquerymenu:not(.jquerymenu-processed)', context).addClass('jquerymenu-processed').each(function(){
    $(this).find("li.parent span.parent").click(function(){
      momma = $(this).parent();
      if ($(momma).hasClass('closed')){
        $(momma).removeClass('closed').addClass('open');
        $(this).removeClass('closed').addClass('open');
      }
      else{
        $(momma).removeClass('open').addClass('closed');
        $(this).removeClass('open').addClass('closed');
      }
    });
    showit = function() {
      $(this).children().show();
    }
    hideit = function() {
      $(this).children().hide();
    }
    $(this).find(".editbox").hover(showit, hideit);
  });
};
// $Id: og.js,v 1.9.2.3 2010/01/24 14:44:56 amitaibu Exp $

// Content type form
Drupal.behaviors.og_content_type = function() {
  // Disable the group limit textarea if the content type is not a standard group post
  $('input[name="og_content_type_usage"]').click(function(){
    if (!$('#edit-og-content-type-usage-group-post-standard').attr('checked')) {
      $('#edit-og-max-groups').attr('disabled','disabled');
    } else {
      $('#edit-og-max-groups').removeAttr('disabled');
    }
  });
  
  // Initial check to see if content type is standard group post
  if (!$('#edit-og-content-type-usage-group-post-standard').attr('checked')) {
    $('#edit-og-max-groups').attr('disabled','disabled');
  };
}


Drupal.verticalTabs = Drupal.verticalTabs || {};

Drupal.verticalTabs.og_nodeapi = function() {
  var values = [];
  $('.vertical-tabs-og_nodeapi #edit-og-groups :selected')
    .each(function (i, selected) {
      values[i] = $(selected).text();
    });

  return values.join(', ');
}

Drupal.verticalTabs.og = function() {
  var type = $('.vertical-tabs-og input[type=radio]:checked').val();
  
  switch (type) {
    case 'group':
      return Drupal.t('Group node');
      break;
      
    case 'omitted':
      return Drupal.t('May not be posted into a group.');
      break;
      
    case 'group_post_standard':
      return Drupal.t('Standard group post');
      break;
      
    case 'group_post_wiki':
      return Drupal.t('Wiki group post');
      break;
  }
}
;
// $Id: thickbox.js,v 1.8.2.19 2010/03/09 07:10:48 frjo Exp $

/*
 * Thickbox 3.1 - One Box To Rule Them All.
 * By Cody Lindley (http://www.codylindley.com)
 * Copyright (c) 2007 cody lindley
 * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
*/

// Initialize Thickbox.
Drupal.behaviors.initThickbox = function (context) {
  $('a,area,input', context).filter('.thickbox:not(.initThickbox-processed)').addClass('initThickbox-processed').click(function() {
    var t = this.title || this.name || null;
    var a = this.href || this.alt;
    var g = this.rel || false;
    tb_show(t,a,g);
    this.blur();
    return false;
  });
};

function tb_show(caption, url, imageGroup) { //function called when the user clicks on a thickbox link

  var settings = Drupal.settings.thickbox;
  tb_setBrowserExtra();

  try {
    if (typeof document.body.style.maxHeight === 'undefined') { //if IE 6
      $('body','html').css({height: '100%', width: '100%'});
      $('html').css('overflow','hidden');
      if (document.getElementById('TB_HideSelect') === null) { //iframe to hide select elements in ie6
        $('body').append('<iframe id="TB_HideSelect"></iframe><div id="TB_overlay"></div><div id="TB_window"></div>');
        // This is the Boxy layout to add to the thickbox style
        $("#TB_window").append("<div style='border: 10px solid #000;' class='boxy-wrapper'>"
        			+ "<div class='boxy-inner'></div>"
        	+ "</div>");
        $('#TB_overlay').click(tb_remove);
      }
    }
    else { //all others
      if (document.getElementById('TB_overlay') === null) {
    	  bibleWidgetConsole("all others");
        $('body').append('<div id="TB_overlay"></div><div id="TB_window"></div>');
  	  bibleWidgetConsole("appending overlay");
        // This is the Boxy layout to add to the thickbox style
        $("#TB_window").append("<div style='border: 10px solid #000;' class='boxy-wrapper'>"
        			+ "<div class='boxy-inner'></div>"
        	+ "</div>");
  	  bibleWidgetConsole("appending table");
        $('#TB_overlay').click(tb_remove);
      }
    }

    if ($.browserextra.macfirefox) {
      $('#TB_overlay').addClass('TB_overlayMacFFBGHack'); //use png overlay so hide flash
    }
    else {
      $('#TB_overlay').addClass('TB_overlayBG'); //use background and opacity
    }

    if (caption === null) {
      caption = '';
    }
    $('body').append('<div id="TB_load"></div>'); //add loader to the page
    $('#TB_load').show(); //show loader

    var baseURL;
    if (url.indexOf('?')!==-1) { //ff there is a query string involved
      baseURL = url.substr(0, url.indexOf('?'));
    }
    else {
      baseURL = url;
    }

    var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;
    var urlType = baseURL.toLowerCase().match(urlString);

    if (urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp') { //code to show images
    	  bibleWidgetConsole("urlType: "+ urlType);
      TB_PrevCaption = '';
      TB_PrevURL = '';
      TB_PrevHTML = '';
      TB_NextCaption = '';
      TB_NextURL = '';
      TB_NextHTML = '';
      TB_imageCount = '';
      TB_FoundURL = false;
      if (imageGroup) {
        TB_TempArray = $('a[rel=' + imageGroup + ']').get();
        for (TB_Counter = 0; ((TB_Counter < TB_TempArray.length) && (TB_NextHTML === '')); TB_Counter++) {
          var urlTypeTemp = TB_TempArray[TB_Counter].href.toLowerCase().match(urlString);
          if (!(TB_TempArray[TB_Counter].href == url)) {
            if (TB_FoundURL) {
              TB_NextCaption = TB_TempArray[TB_Counter].title;
              TB_NextURL = TB_TempArray[TB_Counter].href;
              TB_NextHTML = '<span id="TB_next">&nbsp;&nbsp;<a href="#">' + settings.next + '</a></span>';
            }
            else {
              TB_PrevCaption = TB_TempArray[TB_Counter].title;
              TB_PrevURL = TB_TempArray[TB_Counter].href;
              TB_PrevHTML = '<span id="TB_prev">&nbsp;&nbsp;<a href="#">' + settings.prev + '</a></span>';
            }
          }
          else {
            TB_FoundURL = true;
            if (TB_TempArray.length > 1) { // Don't show "Image 1 of 1".
              TB_imageCount = settings.image_count.replace(/\!current/, (TB_Counter + 1)).replace(/\!total/, TB_TempArray.length);
            }
          }
        }
      }

      // Modified to preload previous and next image.
      imgPreloader = new Image();
      prevImg = new Image();
      nextImg = new Image();
      imgPreloader.onload = function() {
        imgPreloader.onload = null;

        var TB_Links = $('a[class*="thickbox"]');
        var i = -1;
        TB_Links.each(function(n) { if (this.href == imgPreloader.src) { i = n; } });
        if (i != -1) {
          if (i > 0) { prevImg.src = TB_Links[i - 1].href; }
          if (i + 1 < TB_Links.length) { nextImg.src = TB_Links[i + 1].href; }
        }

        // Resizing large images - orginal by Christian Montoya edited by me.
        var pagesize = tb_getPageSize();
        var x = pagesize[0] - 100;
        var y = pagesize[1] - 100;
        var imageWidth = imgPreloader.width;
        var imageHeight = imgPreloader.height;
        if (imageWidth > x) {
          imageHeight = imageHeight * (x / imageWidth);
          imageWidth = x;
          if (imageHeight > y) {
            imageWidth = imageWidth * (y / imageHeight);
            imageHeight = y;
          }
        }
        else if (imageHeight > y) {
          imageWidth = imageWidth * (y / imageHeight);
          imageHeight = y;
          if (imageWidth > x) {
            imageHeight = imageHeight * (x / imageWidth);
            imageWidth = x;
          }
        }
        // End Resizing

        TB_WIDTH = imageWidth < 320 ? 350 : imageWidth + 30;
        TB_HEIGHT = imageHeight + 60;
        //$('#TB_window').append('<a href="" id="TB_ImageOff" title="' + settings.next_close + '"><img id="TB_Image" src="' + url + '" width="' + imageWidth + '" height="' + imageHeight + '" alt="' + caption + '" /></a><div id="TB_caption">' + caption + '<div id="TB_secondLine">' + TB_imageCount + TB_PrevHTML + TB_NextHTML + '</div></div><div id="TB_closeWindow"><a href="#" id="TB_closeWindowButton" title="' + settings.close + '">' + settings.close + '</a> ' + settings.esc_key + '</div>');
        $("#TB_window .boxy-inner").append("<div id='TB_title'>"
        		+ "<div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton'></a></div>"
        	+ "</div>"
        	+ "<a href='' id='TB_ImageOff' title='" + settings.next_close + "'>"
        		+ "<img id='TB_Image' src='"+url+"' width='" + imageWidth + "' height='" + imageHeight + "' alt='" + caption+"'/>"
        	+ "</a>"
        	+ "<div class='TB_gallery'>"
        		+ "<div id='TB_caption'>" + caption
        			+ "<div id='TB_secondLine'>" + TB_imageCount + TB_PrevHTML + TB_NextHTML + "</div>"
        		+ "<div>"
        	+ "</div>");
        $('#TB_closeWindowButton').click(tb_remove);

        if (!(TB_PrevHTML === '')) {
          function goPrev() {
            if ($(document).unbind('click',goPrev)) {$(document).unbind('click',goPrev);}
            $('#TB_window').remove();
            $('body').append('<div id="TB_window"></div>');
            tb_show(TB_PrevCaption, TB_PrevURL, imageGroup);
            return false;
          }
          $('#TB_prev').click(goPrev);
        }

        if (!(TB_NextHTML === '')) {
          function goNext() {
            $('#TB_window').remove();
            $('body').append('<div id="TB_window"></div>');
            tb_show(TB_NextCaption, TB_NextURL, imageGroup);
            return false;
          }
          $('#TB_next').click(goNext);
          $('#TB_ImageOff').click(goNext);
        }
        else {
          $('#TB_ImageOff').click(tb_remove);
        }

        document.onkeydown = function(e) {
          if (e == null) { // ie
            keycode = event.keyCode;
            escapeKey = 27;
          }
          else if ($.browser.safari || $.browser.opera) { // safari or opera
            keycode = e.which;
            escapeKey = 27;
          }
          else { // mozilla
            keycode = e.keyCode;
            escapeKey = e.DOM_VK_ESCAPE;
          }
          key = String.fromCharCode(keycode).toLowerCase();
          if (key == 'x' || key == 'c' || keycode == escapeKey) { // close
            tb_remove();
          }
          else if (key == 'n' || keycode == 39) { // display previous image
            if (!(TB_NextHTML == '')) {
              document.onkeydown = '';
              goNext();
            }
          }
          else if (key == 'p' || keycode == 37) { // display next image
            if (!(TB_PrevHTML == '')) {
              document.onkeydown = '';
              goPrev();
            }
          }
        };

        tb_position();
        $('#TB_load').remove();
        $('#TB_window').css({display:'block'}); //for safari using css instead of show
      };
	  bibleWidgetConsole("url: "+ url);
      imgPreloader.src = url;
    }
    else { //code to show html

      var queryString = url.replace(/^[^\?]+\??/,'');
      var params = tb_parseQuery( queryString );

      TB_WIDTH = (params['width']*1) + 30 || 650; //defaults to 650 if no paramaters were added to URL
      TB_HEIGHT = (params['height']*1) + 40 || 440; //defaults to 440 if no paramaters were added to URL
      ajaxContentW = TB_WIDTH - 50;
      ajaxContentH = TB_HEIGHT - 45;
      var IE = (navigator.appVersion.indexOf("MSIE")==-1) ? false : true;
      if (url.indexOf('TB_iframe') != -1) { // either iframe or ajax window
        urlNoQuery = url.split('TB_');
        $('#TB_iframeContent').remove();
        if (params['modal'] != 'true') { //iframe no modal
          //$('#TB_window').append('<div id="TB_title"><div id="TB_ajaxWindowTitle">' + caption + '</div><div id="TB_closeAjaxWindow"><a href="#" id="TB_closeWindowButton" title="' + settings.close + '">' + settings.close + '</a> ' + settings.esc_key + '</div></div><iframe frameborder="0" hspace="0" src="' + urlNoQuery[0] + '" id="TB_iframeContent" name="TB_iframeContent' + Math.round(Math.random()*1000) + '" onload="tb_showIframe()" style="width:' + (ajaxContentW + 29) + 'px;height:' + (ajaxContentH + 17) + 'px;"></iframe>');
          $("#TB_window .boxy-inner").append('<div id="TB_title"><div id="TB_ajaxWindowTitle">' + caption + '</div><div id="TB_closeAjaxWindow"><a href="#" id="TB_closeWindowButton" title="' + settings.close + '">' + settings.close + '</a><span class="escKey">' + settings.esc_key + '</span></div></div><iframe frameborder="0" hspace="0" src="' + urlNoQuery[0] + '" id="TB_iframeContent" name="TB_iframeContent"' + Math.round(Math.random()*1000) + '" onload="tb_showIframe()" style="width:' + (ajaxContentW + 29) + 'px;height:' + (ajaxContentH + 17) + 'px;"></iframe>');
        }
        else { //iframe modal
          $('#TB_overlay').unbind();
          //$('#TB_window').append('<iframe frameborder="0" hspace="0" src="' + urlNoQuery[0] + '" id="TB_iframeContent" name="TB_iframeContent' + Math.round(Math.random()*1000) + '" onload="tb_showIframe()" style="width:' + (ajaxContentW + 29) + 'px;height:' + (ajaxContentH + 17) + 'px;"></iframe>');
          $('#TB_window .boxy-inner').append('<iframe frameborder="0" hspace="0" src="' + urlNoQuery[0] + '" id="TB_iframeContent" name="TB_iframeContent' + Math.round(Math.random()*1000) + '" onload="tb_showIframe()" style="width:' + (ajaxContentW + 29) + 'px;height:' + (ajaxContentH + 17) + 'px;"></iframe>');
        }
      }
      else { // not an iframe, ajax
        if ($('#TB_window').css('display') != 'block') {
          if (params['modal'] != 'true') { //ajax no modal
            //$('#TB_window').append('<div id="TB_title"><div id="TB_ajaxWindowTitle">' + caption + '</div><div id="TB_closeAjaxWindow"><a href="#" id="TB_closeWindowButton" title="' + settings.close + '">' + settings.close + '</a> ' + settings.esc_key + '</div></div><div id="TB_ajaxContent" style="width:' + ajaxContentW + 'px;height:' + ajaxContentH + 'px"></div>');
            $('#TB_window .boxy-inner').append('<div id="TB_title"><div id="TB_ajaxWindowTitle">' + caption + '</div><div id="TB_closeAjaxWindow"><a href="#" id="TB_closeWindowButton" title="' + settings.close + '"></a><span class="escKey">' + settings.esc_key + '</span></div></div><div id="TB_ajaxContent" style="width:' + ajaxContentW + 'px;height:' + ajaxContentH + 'px"></div>');
            window.setTimeout("tb_focusFirstFormElement()", 1000);
          }
          else { //ajax modal
            $('#TB_overlay').unbind();
            //$('#TB_window').append('<div id="TB_ajaxContent" class="TB_modal" style="width:' + ajaxContentW + 'px;height:' + ajaxContentH + 'px;"></div>');
            $('#TB_window .boxy-inner').append('<div id="TB_ajaxContent" class="TB_modal" style="width:' + ajaxContentW + 'px;height:' + ajaxContentH + 'px;"></div>');
          }
        }
        else { //this means the window is already up, we are just loading new content via ajax
          $('#TB_ajaxContent')[0].style.width = ajaxContentW + 'px';
          $('#TB_ajaxContent')[0].style.height = ajaxContentH + 'px';
          $('#TB_ajaxContent')[0].scrollTop = 0;
          $('#TB_ajaxWindowTitle').html(caption);
        }
      }

      $('#TB_closeWindowButton').click(tb_remove);

      if (url.indexOf('TB_inline') != -1) {
        $('#TB_ajaxContent').append($('#' + params['inlineId']).children());
        $('#TB_window').unload(function () {
          $('#' + params['inlineId']).append($('#TB_ajaxContent').children()); // move elements back when you're finished
        });
        tb_position();
        $('#TB_load').remove();
        $('#TB_window').css({display:'block'});
      }
      else if (url.indexOf('TB_iframe') != -1) {
        tb_position();
        if ($.browser.safari || $.browserextra.iphone) { //safari needs help because it will not fire iframe onload
          $('#TB_load').remove();
          $('#TB_window').css({display:'block'});
        }
      }
      else {
        $.get(url += '&random=' + (new Date().getTime()),function(data) { //to do a post change this load method
        	bibleWidgetConsole(url);
        	if (IE){
        		$('#TB_ajaxContent').html(data);
        		tb_setBrowserExtra();
                tb_position();
                $('#TB_load').remove();
                Drupal.attachBehaviors('#TB_ajaxContent');
                $('#TB_window').css({display:'block'});
        	}
        	else{
                $('#TB_ajaxContent').html(data);
                tb_setBrowserExtra();
                tb_position();
                $('#TB_load').remove();
                Drupal.attachBehaviors('#TB_ajaxContent');
                $('#TB_window').css({display:'block'});
        	}
        });
      }
    }

    if (!params['modal']) {
      document.onkeyup = function(e) {
        if (e == null) { // ie
          keycode = event.keyCode;
          escapeKey = 27;
        }
        else if ($.browser.safari || $.browser.opera) { // safari or opera
          keycode = e.which;
          escapeKey = 27;
        }
        else { // mozilla
          keycode = e.keyCode;
          escapeKey = e.DOM_VK_ESCAPE;
        }
        key = String.fromCharCode(keycode).toLowerCase();
        if (keycode == escapeKey) { // close
          tb_remove();
        }
      };
    }

  }
  catch(e) {
    //nothing here
  }
}

//helper functions below
function tb_showIframe() {
  $('#TB_load').remove();
  $('#TB_window').css({display:'block'});
}

function tb_remove() {
  $('#TB_imageOff').unbind('click');
  $('#TB_overlay').unbind('click');
  $('#TB_closeWindowButton').unbind('click');
  $('#TB_window').fadeOut(400,function() {$('#TB_window,#TB_overlay,#TB_HideSelect').trigger('unload').unbind().remove();});
  $('#TB_load').remove();
  if (typeof document.body.style.maxHeight == 'undefined') { //if IE 6
    $('body','html').css({height: 'auto', width: 'auto'});
    $('html').css('overflow','');
  }
  document.onkeydown = '';
  document.onkeyup = '';
  return false;
}

function tb_position() {
  $('#TB_window').css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'});
  if (!($.browserextra.msie6)) { // take away IE6
    $('#TB_window').css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'});
  }
}

function tb_parseQuery( query ) {
  var Params = {};
  if ( ! query ) {return Params;}// return empty object
  var Pairs = query.split(/[;&]/);
  for ( var i = 0; i < Pairs.length; i++ ) {
    var KeyVal = Pairs[i].split('=');
    if ( ! KeyVal || KeyVal.length != 2 ) {continue;}
    var key = unescape( KeyVal[0] );
    var val = unescape( KeyVal[1] );
    val = val.replace(/\+/g, ' ');
    Params[key] = val;
  }
  return Params;
}

function tb_getPageSize() {
  var de = document.documentElement;
  var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
  var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
  arrayPageSize = [w,h];
  return arrayPageSize;
}

function tb_setBrowserExtra() {
  // Return if already set.
  if ($.browserextra) {
    return;
  }

  // Add iPhone, IE 6 and Mac Firefox browser detection.
  // msie6 fixes the fact that IE 7 now reports itself as MSIE 6.0 compatible
  var userAgent = navigator.userAgent.toLowerCase();
  $.browserextra = {
    iphone: /iphone/.test( userAgent ),
    msie6: /msie/.test( userAgent ) && !/opera/.test( userAgent ) && /msie 6\.0/.test( userAgent ) && !/msie 7\.0/.test( userAgent ) && !/msie 8\.0/.test( userAgent ),
    macfirefox: /mac/.test( userAgent ) && /firefox/.test( userAgent )
  };
}

function tb_focusFirstFormElement() {
  $('#TB_window form input[type=text]:first').focus();
}
;
// $Id: uc_roles.js,v 1.1.2.4 2009/07/21 14:37:19 islandusurper Exp $

/**
 * @file
 * Enable and disable expiration fields to prevent invalid configurations.
 */

/**
 * Disable duration amount when its type is "never".
 */
function _uc_role_expiration_disable_check(granularity, quantity) {
  // 'never' means there's no point in setting a duration.
  if ($(granularity).val() == 'never') {
    $(quantity).attr('disabled', 'disabled').val('');
  }
  // Anything besides 'never' should enable setting a duration.
  else {
    $(quantity).removeAttr('disabled');
  }
}

/**
 * Switch between relative and absolute expiration durations.
 */
function expiration_switcher() {
  if ($('#edit-expiration').val() == 'abs') {
    $("#edit-uc-roles-expire-relative-duration-wrapper").hide();
    $("#edit-uc-roles-expire-relative-granularity-wrapper").hide();
    $("#edit-uc-roles-by-quantity-wrapper").hide();
    $("#edit-uc-roles-expire-absolute-wrapper").show();
  }
  else {
    $("#edit-uc-roles-expire-absolute-wrapper").hide();
    $("#edit-uc-roles-expire-relative-duration-wrapper").show();
    $("#edit-uc-roles-expire-relative-granularity-wrapper").show();
    $("#edit-uc-roles-by-quantity-wrapper").show();
  }
}

/**
 * Set the default state for expiration duration.
 */
function expiration_switcher_default() {
  if ($('#edit-uc-roles-default-end-expiration').val() == 'abs') {
    $("#edit-uc-roles-default-length-wrapper").attr('style', 'display:none;');
    $("#edit-uc-roles-default-granularity-wrapper").attr('style', 'display:none;');
    $("#edit-uc-roles-default-by-quantity-wrapper").attr('style', 'display:none;');
    $("#edit-uc-roles-default-end-time-wrapper").removeAttr('style');
  }
  else {
    $("#edit-uc-roles-default-length-wrapper").removeAttr('style');
    $("#edit-uc-roles-default-granularity-wrapper").removeAttr('style');
    $("#edit-uc-roles-default-by-quantity-wrapper").removeAttr('style');
    $("#edit-uc-roles-default-end-time-wrapper").attr('style', 'display:none;');
  }
}

/**
 * Override the expiration duration default state.
 */
function uc_roles_expiration_default_override() {
  if ($('#edit-end-override').length == 0) {
    return;
  }

  if ($('#edit-end-override').attr('checked')) {
    $('#edit-expiration-wrapper').removeAttr('style');
    $('#edit-uc-roles-expire-absolute-wrapper').removeAttr('style');
    $('#edit-uc-roles-expire-relative-duration-wrapper').removeAttr('style');
    $('#edit-uc-roles-expire-relative-granularity-wrapper').removeAttr('style');
    $('#edit-uc-roles-by-quantity-wrapper').removeAttr('style');
    expiration_switcher();
  }
  else {
    $('#edit-expiration-wrapper').attr('style', 'display:none;');
    $('#edit-uc-roles-expire-relative-duration-wrapper').attr('style', 'display:none;');
    $('#edit-uc-roles-expire-relative-granularity-wrapper').attr('style', 'display:none;');
    $('#edit-uc-roles-by-quantity-wrapper').attr('style', 'display:none;');
    $('#edit-uc-roles-expire-absolute-wrapper').attr('style', 'display:none;');
  }
}

$(document).ready(
  function() {
    _uc_role_expiration_disable_check('#edit-uc-roles-expire-relative-granularity', '#edit-uc-roles-expire-relative-duration');
    _uc_role_expiration_disable_check('#edit-uc-roles-default-granularity', '#edit-uc-roles-default-length');
    _uc_role_expiration_disable_check('#edit-uc-roles-reminder-granularity', '#edit-uc-roles-reminder-length');
    uc_roles_expiration_default_override();
    expiration_switcher_default();
  }
);

// When you change the role expiration time select.
Drupal.behaviors.ucRoleExpirationTime = function(context) {
  $("#edit-expiration:not(.ucRoleExpirationTime-processed)", context).addClass('ucRoleExpirationTime-processed').change(
    function() {
      expiration_switcher();
    }
  );
}

// When you change the default role expiration time select.
Drupal.behaviors.ucRoleDefaultExpirationTimeDefault = function(context) {
  $("#edit-uc-roles-default-end-expiration:not(.ucRoleDefaultExpirationTimeDefault-processed)", context).addClass('ucRoleDefaultExpirationTimeDefault-processed').change(
    function() {
      expiration_switcher_default();
    }
  );
}

// When you change the role expiration time select.
Drupal.behaviors.ucRoleExpirationTimeDefault = function(context) {
  $("#edit-uc-roles-end-expiration:not(.ucRoleExpirationTimeDefault-processed)", context).addClass('ucRoleExpirationTimeDefault-processed').change(
    function() {
      expiration_switcher_default();
    }
  );
}

// When you change the role expiration granularity select.
Drupal.behaviors.ucRoleExpirationGranularity = function(context) {
  $('#edit-uc-roles-expire-relative-granularity:not(.ucRoleExpirationGranularity-processed)', context).addClass('ucRoleExpirationGranularity-processed').change(
    function() {
      _uc_role_expiration_disable_check('#edit-uc-roles-expire-relative-granularity', '#edit-uc-roles-expire-relative-duration');
    }
  );
}

// When you change the default role expiration granularity select.
Drupal.behaviors.ucRoleDefaultExpirationGranularity = function(context) {
  $('#edit-uc-roles-default-granularity:not(.ucRoleDefaultExpirationGranularity-processed)', context).addClass('ucRoleDefaultExpirationGranularity-processed').change(
    function() {
      _uc_role_expiration_disable_check('#edit-uc-roles-default-granularity', '#edit-uc-roles-default-length');
    }
  );
}

// When you change the default role expiration granularity select.
Drupal.behaviors.ucRoleReminderExpirationGranularity = function(context) {
  $('#edit-uc-roles-reminder-granularity:not(.ucRoleReminderExpirationGranularity-processed)', context).addClass('ucRoleReminderExpirationGranularity-processed').change(
    function() {
      _uc_role_expiration_disable_check('#edit-uc-roles-reminder-granularity', '#edit-uc-roles-reminder-length');
    }
  );
}

// When you change the default role expiration granularity select.
Drupal.behaviors.ucRoleExpirationEndOverride = function(context) {
  $('#edit-end-override:not(.ucRoleExpirationEndOverride-processed)', context).addClass('ucRoleExpirationEndOverride-processed').click(
    function() {
      uc_roles_expiration_default_override();
    }
  );
}

;
$(document).ready( function(){
  
  // set up collapsible behavior for course nav block
  $("#block-course-0 li.section").find('a:first').each(function (i) {
        $(this).click( function(event) {
			if($(this).parent().hasClass('active')) {
	  			$(this).removeClass('active');
      			$(this).parent().removeClass('active');
      			$(this).parent().children('div.item-list').children('ul.active').removeClass('active');
    		}
    		else {
				$(this).addClass('active');
      			$(this).parent().addClass('active');
        		$(this).parent().children('div.item-list').children('ul').addClass('active');
    		}
		return false;
		});
   });
  
  // This is to ensure that all active Menu items are shown as active during page loads
  $("ul.subsection li.active").find('a:first').addClass('active');

});
;

// Global Killswitch
if (Drupal.jsEnabled) {
  $(document).ready(function() {  
    // Close
    $("#block-admin_message-admin_message a.admin-message-close").click(function() {
      var href = $(this).attr("href");
      $.get(href);
      $(this).parent().slideUp('fast');
      return false;
    });
  });
}
;
// JS for era pages pagination - builds pagination links based on the menu links

if (Drupal.jsEnabled) {

  $(document).ready(function() {     
		
    var currentmenu = $("#block-taxonomy_context-2 li.expanded ul li.expanded ul li.expanded a.active");

    if (currentmenu!='') {
      var nextLI = currentmenu.parent().next();
      if (nextLI.children().get(0)) {
        var nextlink = nextLI.children().get(0).href
        var nexttext = nextLI.children().get(0).title
        $(".era-overview").find('a.next').attr('href', nextlink);
        $(".era-overview").find('a.next').html(nexttext);
      }

      var prevLI = currentmenu.parent().prev();
      if (prevLI.children().get(0)) {
        var prevlink = prevLI.children().get(0).href;
        var prevtext = prevLI.children().get(0).title;
        $(".era-overview").find('a.prev').attr('href', prevlink);
        $(".era-overview").find('a.prev').html(prevtext);
      }

    }

  });

}

;
/*
CSS Browser Selector v0.2.7
Rafael Lima (http://rafael.adm.br)
http://rafael.adm.br/css_browser_selector
License: http://creativecommons.org/licenses/by/2.5/
Contributors: http://rafael.adm.br/css_browser_selector#contributors
*/
var css_browser_selector = function() {var ua=navigator.userAgent.toLowerCase(),is=function(t){return ua.indexOf(t) != -1;},h=document.getElementsByTagName('html')[0],b=(!(/opera|webtv/i.test(ua))&&/msie (\d)/.test(ua))?('ie ie'+RegExp.$1):is('firefox/2')?'gecko ff2':is('firefox/3')?'gecko ff3':is('gecko/')?'gecko':is('opera/9')?'opera opera9':/opera (\d)/.test(ua)?'opera opera'+RegExp.$1:is('konqueror')?'konqueror':is('applewebkit/')?'webkit safari':is('mozilla/')?'gecko':'',os=(is('x11')||is('linux'))?' linux':is('mac')?' mac':is('win')?' win':'';var c=b+os+' js'; h.className += h.className?' '+c:c;}();
;
/* aqPaging v1.1 - Paging function with next and previous ranges.
   Copyright (C) 2008 Paul Pham <http://aquaron.com/~jquery/aqPaging>

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation, either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
(function($){
			 

			 
$.fn.aqPaging = function (options) {
   var opts = $.extend({ },$.fn.aqPaging.defaults,options);



   return this.each(function(){
      if (opts.pages <= 1) return false;

      if (!$('.aqPaging',this).length) {
         $.fn.aqPaging.defaults.uniqID++;
         $('<span class="aqPaging" id="aqPaging_'
            +$.fn.aqPaging.defaults.uniqID+'"><\/span>')
            .appendTo(this);

         $.fn.aqPaging.defaults.cbs[$.fn.aqPaging.defaults.uniqID]
            = opts.cb;

         $('.aqPaging',this).css(opts.css);
      }

      var $pager = $('.aqPaging',this);
      var pid = $pager.attr('id');

      var s = 1, e = opts.pages;
      var html = '';

      var offset = (opts.current > opts.max) ? 1 : 0;

      if (opts.pages > opts.max) {
         if (opts.current > opts.max)
            s = opts.max*parseInt((opts.current-offset)/opts.max);

         if (opts.current-offset+opts.max < opts.pages) 
            e = s + opts.max + offset;
      }

      for (var p=s; p<=e; p++)
         html += '<a href="javascript:void(0)" onclick="$.fn.aqPaging.flip(\''+pid+'\''
            +','+p+','+opts.pages+');">' + p + '<\/a> ';

      $pager.html(html);

      if (opts.current >= s && opts.current-opts.max > 0) {
         $pager.prepend('<a href="javascript:void(0)" onclick="$.fn.aqPaging.flip(\''
            +pid+'\''+','+(s-opts.max+1)+','+opts.pages +')">' 
            + (s-opts.max+1) + '<\/a> <i>&hellip;<\/i> ');
      }
      if ((opts.current-offset+opts.max) <= opts.pages && e != opts.pages) {
         $pager.append('<i>&hellip;<\/i>'
            +' <a href="javascript:void(0)" onclick="$.fn.aqPaging.flip(\''+pid+'\''+','
            +opts.pages+','+opts.pages +')">'+opts.pages+'<\/a> ');
      }

      var hi = ((opts.current-1)%opts.max) + ((offset+1)*offset);
      if (opts.css) {
         $pager.find('a').css(opts.aCss)
         .not(':eq('+hi+')').hover(
            function() { $(this).css(opts.hiCss) },
            function() { $(this).css(opts.loCss) }
         );
         $pager.find('i').css(opts.iCss);
         $pager.find('a').eq(hi).css(opts.hiCss);
      } else
         $pager.find('a').removeClass('aqPagingHi')
            .eq(hi).addClass('aqPagingHi');

      if (opts.flip)
         $.fn.aqPaging.flip(pid,opts.current,opts.pages);
   });
};

$.fn.aqPaging.flip = function(id,p,total) {
   var idx = id.replace(/aqPaging_/,'');
   var func = $.fn.aqPaging.defaults.cbs[idx];
   if (func) func(p);
   $('#'+id).parent().aqPaging({current: p, pages: total});
   return false;
};



$.fn.aqPaging.defaults = {
	
	cbs: [], current: 0, max: 4, uniqID: 0, flip: false,
	css: false,
	hiCss: {},
	loCss: {},
	aCss: {},
	iCss: {}
};
})(jQuery);;
/**
 * Boxy 0.1.4 - Facebook-style dialog, with frills
 *
 * (c) 2008 Jason Frame
 * Licensed under the MIT License (LICENSE)
 */
 
/*
 * jQuery plugin
 *
 * Options:
 *   message: confirmation message for form submit hook (default: "Please confirm:")
 * 
 * Any other options - e.g. 'clone' - will be passed onto the boxy constructor (or
 * Boxy.load for AJAX operations)
 */

//
// Boxy Class
jQuery.fn.boxy = function(options) {
    options = options || {};
    return this.each(function() {      
        var node = this.nodeName.toLowerCase(), self = this;
        if (node == 'a') {
            jQuery(this).click(function() {
                var active = Boxy.linkedTo(this),
                    href = this.getAttribute('href'),
                    localOptions = jQuery.extend({actuator: this, title: this.title}, options);
                    
                if (active) {
                    active.show();
                } else if (href.indexOf('#') >= 0) {
                    var content = jQuery(href.substr(href.indexOf('#'))),
                        newContent = content.clone(true);
                    content.remove();
                    localOptions.unloadOnHide = false;
                    Boxy(newContent, localOptions);
                } else { // fall back to AJAX; could do with a same-origin check
                    if (!localOptions.cache) {localOptions.unloadOnHide = true;}
                    Boxy.load(this.href, localOptions);
                }
                
                return false;
            });
        } else if (node == 'form') {
            jQuery(this).bind('submit.boxy', function() {
                Boxy.confirm(options.message || 'Please confirm:', function() {
                    jQuery(self).unbind('submit.boxy').submit();
                });
                return false;
            });
        }
    });
};

function Boxy(element, options) {
    
    this.boxy = jQuery(Boxy.WRAPPER);
    jQuery.data(this.boxy[0], 'boxy', this);
    
    this.visible = false;
    this.options = jQuery.extend({}, Boxy.DEFAULTS, options || {});
    
    if (this.options.modal) {
        this.options = jQuery.extend(this.options, {center: true, draggable: false});
    }
    
    // options.actuator == DOM element that opened this boxy
    // association will be automatically deleted when this boxy is remove()d
    if (this.options.actuator) {
        jQuery.data(this.options.actuator, 'active.boxy', this);
    }
    
    this.setContent(element || "<div></div>");
    this._setupTitleBar();
    
    this.boxy.css('display', 'none').appendTo(document.body);
    this.toTop();

    if (this.options.fixed) {
        if (jQuery.browser.msie && jQuery.browser.version < 7) {
            this.options.fixed = false; // IE6 doesn't support fixed positioning
        } else {
            this.boxy.addClass('fixed');
        }
    }
    
    if (this.options.center && Boxy._u(this.options.x, this.options.y)) {
        this.center();
    } else {
        this.moveTo(
            Boxy._u(this.options.x) ? this.options.x : Boxy.DEFAULT_X,
            Boxy._u(this.options.y) ? this.options.y : Boxy.DEFAULT_Y
        );
    }
    
    if (this.options.show) {this.show();}

};

Boxy.EF = function() {};

jQuery.extend(Boxy, {
    
    WRAPPER:    "<table cellspacing='0' cellpadding='0' border='0' class='boxy-wrapper'>" +
                "<tr><td class='top-left'></td><td class='top'></td><td class='top-right'></td></tr>" +
                "<tr><td class='left'></td><td class='boxy-inner'></td><td class='right'></td></tr>" +
                "<tr><td class='bottom-left'></td><td class='bottom'></td><td class='bottom-right'></td></tr>" +
                "</table>",
    
    DEFAULTS: {
        title:                  null,           // titlebar text. titlebar will not be visible if not set.
        closeable:              true,           // display close link in titlebar?
        draggable:              true,           // can this dialog be dragged?
        clone:                  false,          // clone content prior to insertion into dialog?
        actuator:               null,           // element which opened this dialog
        center:                 true,           // center dialog in viewport?
        show:                   true,           // show dialog immediately?
        modal:                  false,          // make dialog modal?
        fixed:                  true,           // use fixed positioning, if supported? absolute positioning used otherwise
        closeText:              '[close]',      // text to use for default close link
        unloadOnHide:           false,          // should this dialog be removed from the DOM after being hidden?
        clickToFront:           false,          // bring dialog to foreground on any click (not just titlebar)?
        behaviours:             Boxy.EF,        // function used to apply behaviours to all content embedded in dialog.
        afterDrop:              Boxy.EF,        // callback fired after dialog is dropped. executes in context of Boxy instance.
        afterShow:              Boxy.EF,        // callback fired after dialog becomes visible. executes in context of Boxy instance.
        afterHide:              Boxy.EF,        // callback fired after dialog is hidden. executed in context of Boxy instance.
        beforeUnload:           Boxy.EF         // callback fired after dialog is unloaded. executed in context of Boxy instance.
    },
    
    DEFAULT_X:          50,
    DEFAULT_Y:          50,
    zIndex:             10001,
    dragConfigured:     false, // only set up one drag handler for all boxys
    resizeConfigured:   false,
    dragging:           null,
    
    // load a URL and display in boxy
    // url - url to load
    // options keys (any not listed below are passed to boxy constructor)
    //   type: HTTP method, default: GET
    //   cache: cache retrieved content? default: false
    //   filter: jQuery selector used to filter remote content
    load: function(url, options) {
        
        options = options || {};
        
        var ajax = {
            url: url, type: 'GET', dataType: 'html', cache: false, success: function(html) {
                html = jQuery(html);
                if (options.filter) {html = jQuery(options.filter, html);}
                Boxy(html, options);
            }
        };
        
        jQuery.each(['type', 'cache'], function() {
            if (this in options) {
                ajax[this] = options[this];
                delete options[this];
            }
        });
        
        jQuery.ajax(ajax);
        
    },
    
    // allows you to get a handle to the containing boxy instance of any element
    // e.g. <a href='#' onclick='alert(Boxy.get(this));'>inspect!</a>.
    // this returns the actual instance of the boxy 'class', not just a DOM element.
    // Boxy.get(this).hide() would be valid, for instance.
    get: function(ele) {
        var p = jQuery(ele).parents('.boxy-wrapper');
        return p.length ? jQuery.data(p[0], 'boxy') : null;
    },
    
    // returns the boxy instance which has been linked to a given element via the
    // 'actuator' constructor option.
    linkedTo: function(ele) {
        return jQuery.data(ele, 'active.boxy');
    },
    
    // displays an alert box with a given message, calling optional callback
    // after dismissal.
    alert: function(message, callback, options) {
        return Boxy.ask(message, ['OK'], callback, options);
    },
    
    // displays an alert box with a given message, calling after callback iff
    // user selects OK.
    confirm: function(message, after, options) {
        return Boxy.ask(message, ['OK', 'Cancel'], function(response) {
            if (response == 'OK') {after();}
        }, options);
    },
    
    // asks a question with multiple responses presented as buttons
    // selected item is returned to a callback method.
    // answers may be either an array or a hash. if it's an array, the
    // the callback will received the selected value. if it's a hash,
    // you'll get the corresponding key.
    ask: function(question, answers, callback, options) {
        
        options = jQuery.extend({modal: true, closeable: false},
                                options || {},
                                {show: true, unloadOnHide: true});
        
        var body = jQuery('<div></div>').append(jQuery('<div class="question"></div>').html(question));
        
        // ick
        var map = {}, answerStrings = [];
        if (answers instanceof Array) {
            for (var i = 0; i < answers.length; i++) {
                map[answers[i]] = answers[i];
                answerStrings.push(answers[i]);
            }
        } else {
            for (var k in answers) {
                map[answers[k]] = k;
                answerStrings.push(answers[k]);
            }
        }
        
        var buttons = jQuery('<form class="answers"></form>');
        buttons.html(jQuery.map(answerStrings, function(v) {
            return "<input type='button' value='" + v + "' />";
        }).join(' '));
        
        jQuery('input[type=button]', buttons).click(function() {
            var clicked = this;
            Boxy.get(this).hide(function() {
                if (callback) {callback(map[clicked.value]);}
            });
        });
        
        body.append(buttons);
        
        Boxy(body, options);
        
    },
    
    // returns true if a modal boxy is visible, false otherwise
    isModalVisible: function() {
        return jQuery('.boxy-modal-blackout').length > 0;
    },
    
    _u: function() {
        for (var i = 0; i < arguments.length; i++){
            if (typeof arguments[i] != 'undefined') {return false;}
            return true;
        }
    },
    
    _handleResize: function(evt) {
        var d = jQuery(document);
        jQuery('.boxy-modal-blackout').css('display', 'none').css({
            width: d.width(), height: d.height()
        }).css('display', 'block');
    },
    
    _handleDrag: function(evt) {
        var d;
        if (d = Boxy.dragging) {
            d[0].boxy.css({left: evt.pageX - d[1], top: evt.pageY - d[2]});
        }
    },
    
    _nextZ: function() {
        return Boxy.zIndex++;
    },
    
    _viewport: function() {
        var d = document.documentElement, b = document.body, w = window;
        return jQuery.extend(
            jQuery.browser.msie ?
                { left: b.scrollLeft || d.scrollLeft, top: b.scrollTop || d.scrollTop } :
                { left: w.pageXOffset, top: w.pageYOffset },
            !Boxy._u(w.innerWidth) ?
                { width: w.innerWidth, height: w.innerHeight } :
                (!Boxy._u(d) && !Boxy._u(d.clientWidth) && d.clientWidth !== 0 ?
                    { width: d.clientWidth, height: d.clientHeight } :
                    { width: b.clientWidth, height: b.clientHeight }) );
    }

});

Boxy.prototype = {
    
    // Returns the size of this boxy instance without displaying it.
    // Do not use this method if boxy is already visible, use getSize() instead.
    estimateSize: function() {
        this.boxy.css({visibility: 'hidden', display: 'block'});
        var dims = this.getSize();
        this.boxy.css('display', 'none').css('visibility', 'visible');
        return dims;
    },
                
    // Returns the dimensions of the entire boxy dialog as [width,height]
    getSize: function() {
        return [this.boxy.width(), this.boxy.height()];
    },
    
    // Returns the dimensions of the content region as [width,height]
    getContentSize: function() {
        var c = this.getContent();
        return [c.width(), c.height()];
    },
    
    // Returns the position of this dialog as [x,y]
    getPosition: function() {
        var b = this.boxy[0];
        return [b.offsetLeft, b.offsetTop];
    },
    
    // Returns the center point of this dialog as [x,y]
    getCenter: function() {
        var p = this.getPosition();
        var s = this.getSize();
        return [Math.floor(p[0] + s[0] / 2), Math.floor(p[1] + s[1] / 2)];
    },
                
    // Returns a jQuery object wrapping the inner boxy region.
    // Not much reason to use this, you're probably more interested in getContent()
    getInner: function() {
        return jQuery('.boxy-inner', this.boxy);
    },
    
    // Returns a jQuery object wrapping the boxy content region.
    // This is the user-editable content area (i.e. excludes titlebar)
    getContent: function() {
        return jQuery('.boxy-content', this.boxy);
    },
    
    // Replace dialog content
    setContent: function(newContent) {
        newContent = jQuery(newContent).css({display: 'block'}).addClass('boxy-content');
        if (this.options.clone) {newContent = newContent.clone(true);}
        this.getContent().remove();
        this.getInner().append(newContent);
        this._setupDefaultBehaviours(newContent);
        this.options.behaviours.call(this, newContent);
        return this;
    },
    
    // Move this dialog to some position, funnily enough
    moveTo: function(x, y) {
        this.moveToX(x).moveToY(y);
        return this;
    },
    
    // Move this dialog (x-coord only)
    moveToX: function(x) {
        if (typeof x == 'number') {this.boxy.css({left: x});}
        else {this.centerX();}
        return this;
    },
    
    // Move this dialog (y-coord only)
    moveToY: function(y) {
        if (typeof y == 'number') {this.boxy.css({top: y});}
        else {this.centerY();}
        return this;
    },
    
    // Move this dialog so that it is centered at (x,y)
    centerAt: function(x, y) {
        var s = this[this.visible ? 'getSize' : 'estimateSize']();
        if (typeof x == 'number') {this.moveToX(x - s[0] / 2);}
        if (typeof y == 'number') {this.moveToY(y - s[1] / 2);}
        return this;
    },
    
    centerAtX: function(x) {
        return this.centerAt(x, null);
    },
    
    centerAtY: function(y) {
        return this.centerAt(null, y);
    },
    
    // Center this dialog in the viewport
    // axis is optional, can be 'x', 'y'.
    center: function(axis) {
        var v = Boxy._viewport();
        var o = this.options.fixed ? [0, 0] : [v.left, v.top];
        if (!axis || axis == 'x') {this.centerAt(o[0] + v.width / 2, null);}
        if (!axis || axis == 'y') {this.centerAt(null, o[1] + v.height / 2);}
        return this;
    },
    
    // Center this dialog in the viewport (x-coord only)
    centerX: function() {
        return this.center('x');
    },
    
    // Center this dialog in the viewport (y-coord only)
    centerY: function() {
        return this.center('y');
    },
    
    // Resize the content region to a specific size
    resize: function(width, height, after) {
        if (!this.visible) {return;}
        var bounds = this._getBoundsForResize(width, height);
        this.boxy.css({left: bounds[0], top: bounds[1]});
        this.getContent().css({width: bounds[2], height: bounds[3]});
        if (after) {after(this);}
        return this;
    },
    
    // Tween the content region to a specific size
    tween: function(width, height, after) {
        if (!this.visible) {return;}
        var bounds = this._getBoundsForResize(width, height);
        var self = this;
        this.boxy.stop().animate({left: bounds[0], top: bounds[1]});
        this.getContent().stop().animate({width: bounds[2], height: bounds[3]}, function() {
            if (after) {after(self);}
        });
        return this;
    },
    
    // Returns true if this dialog is visible, false otherwise
    isVisible: function() {
        return this.visible;    
    },
    
    // Make this boxy instance visible
    show: function() {
        if (this.visible) {return;}
        if (this.options.modal) {
            var self = this;
            if (!Boxy.resizeConfigured) {
                Boxy.resizeConfigured = true;
                jQuery(window).resize(function() { Boxy._handleResize(); });
            }
            this.modalBlackout = jQuery('<div class="boxy-modal-blackout"></div>')
                .css({zIndex: Boxy._nextZ(),
                      opacity: 0.7,
                      width: jQuery(document).width(),
                      height: jQuery(document).height()})
                .appendTo(document.body);
            this.toTop();
            if (this.options.closeable) {
                jQuery(document.body).bind('keypress.boxy', function(evt) {
                    var key = evt.which || evt.keyCode;
                    if (key == 27) {
                        self.hide();
                        jQuery(document.body).unbind('keypress.boxy');
                    }
                });
            }
        }
        this.boxy.stop().css({opacity: 1}).show();
        this.visible = true;
        this._fire('afterShow');
        return this;
    },
    
    // Hide this boxy instance
    hide: function(after) {
        if (!this.visible) {return;}
        var self = this;
        if (this.options.modal) {
            jQuery(document.body).unbind('keypress.boxy');
            this.modalBlackout.animate({opacity: 0}, function() {
                jQuery(this).remove();
            });
        }
        this.boxy.stop().animate({opacity: 0}, 300, function() {
            self.boxy.css({display: 'none'});
            self.visible = false;
            self._fire('afterHide');
            if (after) {after(self);}
            if (self.options.unloadOnHide) {self.unload();}
        });
        return this;
    },
    
    toggle: function() {
        this[this.visible ? 'hide' : 'show']();
        return this;
    },
    
    hideAndUnload: function(after) {
        this.options.unloadOnHide = true;
        this.hide(after);
        return this;
    },
    
    unload: function() {
        this._fire('beforeUnload');
        this.boxy.remove();
        if (this.options.actuator) {
            jQuery.data(this.options.actuator, 'active.boxy', false);
        }
    },
    
    // Move this dialog box above all other boxy instances
    toTop: function() {
        this.boxy.css({zIndex: Boxy._nextZ()});
        return this;
    },
    
    // Returns the title of this dialog
    getTitle: function() {
        return jQuery('> .title-bar h2', this.getInner()).html();
    },
    
    // Sets the title of this dialog
    setTitle: function(t) {
        jQuery('> .title-bar h2', this.getInner()).html(t);
        return this;
    },
    
    //
    // Don't touch these privates
    
    _getBoundsForResize: function(width, height) {
        var csize = this.getContentSize();
        var delta = [width - csize[0], height - csize[1]];
        var p = this.getPosition();
        return [Math.max(p[0] - delta[0] / 2, 0),
                Math.max(p[1] - delta[1] / 2, 0), width, height];
    },
    
    _setupTitleBar: function() {
        if (this.options.title) {
            var self = this;
            var tb = '';
				// Added in this loop to give 2 different classes for modals and non modals				
				if (this.options.modal) {
						tb = jQuery("<div class='title-bar modal'></div>").html("<h2>" + this.options.title + "</h2>");
						if (this.options.closeable) {
                		tb.append(jQuery("<a href='#' class='boxy-close'></a>").html(this.options.closeText));
            		}
				} else {
            		    tb = jQuery("<div class='title-bar'></div>").html("<h2>" + this.options.title + "</h2>");
						if (this.options.closeable) {
                		tb.append(jQuery("<a href='#' class='boxy-close modal'></a>").html(this.options.closeText));
            		}
					}

            if (this.options.draggable) {
                tb[0].onselectstart = function() { return false; };
                tb[0].unselectable = 'on';
                tb[0].style.MozUserSelect = 'none';
                if (!Boxy.dragConfigured) {
                    jQuery(document).mousemove(Boxy._handleDrag);
                    Boxy.dragConfigured = true;
                }
                tb.mousedown(function(evt) {
                    self.toTop();
                    Boxy.dragging = [self, evt.pageX - self.boxy[0].offsetLeft, evt.pageY - self.boxy[0].offsetTop];
                    jQuery(this).addClass('dragging');
                }).mouseup(function() {
                    jQuery(this).removeClass('dragging');
                    Boxy.dragging = null;
                    self._fire('afterDrop');
                });
            }
            this.getInner().prepend(tb);
            this._setupDefaultBehaviours(tb);
        }
    },
    
    _setupDefaultBehaviours: function(root) {
        var self = this;
        if (this.options.clickToFront) {
            root.click(function() { self.toTop(); });
        }
// Changed this to be boxy-close
        jQuery('.boxy-close', root).click(function() {
            self.hide();
            return false;
        }).mousedown(function(evt) { evt.stopPropagation(); });
    },
    
    _fire: function(event) {
        this.options[event].call(this);
    }
    
};

;
// JavaScript Document

function map_fuc() {
var lynchPin = $('.olControlLayerSwitcher div:eq(0)').next();

// hides the top Div
$('.olControlLayerSwitcher div:eq(0) span').hide();
// hides the bottom Div
lynchPin.next().hide();

lynchPin.children('div:eq(1)').remove();
lynchPin.children('div:eq(0)').remove();

$('.olControlLayerSwitcher input[name=Vector Layer]').attr('checked', false);

}


$( document ).ready( function(){

if ($('#videoContainer').length > 0) {
   createPlayer('false');
}


$('.videoTab').click(function() {
    var tabId = $(this).attr("rel");

   $('.wrapper-infoTabs').find('li').removeClass('active');
   $('.wrapper-infoInside').find('li').removeClass('active');
   $('#tab_'+tabId).addClass('active');
   $('#inside_'+tabId).addClass('active');

   return false;
});


/*** This is the cookie sniff to see if a user has seen a the watch video in an Era
I know it is ulgy and could be written better but I'm in a time rush - Tim ***/
 
if ($('div.eras').length > 0) {
   if ($.cookie("era_1") != 'yes') {
       $.cookie('era_1', 'no', {expires: 1000, path: '/'});
       var container = $('div.eras div.era').filter(function (index) {return index == 0; });
       container.find('a:first').attr({ href: "/category/file-under/22/era-watch" });
       container.find('a:first').click(function() {
         $.cookie('era_1', 'yes', {expires: 1000, path: '/'});
      });
    }
    
    if ($.cookie("era_2") != 'yes') {
       $.cookie('era_2', 'no', {expires: 1000, path: '/'});
       var container = $('div.eras div.era').filter(function (index) {return index == 1; });
       container.find('a:first').attr({ href: "/category/file-under/52/era-watch" });
       container.find('a:first').click(function() {
         $.cookie('era_2', 'yes', {expires: 1000, path: '/'});
      });
    }
    
    if ($.cookie("era_3") != 'yes') {
       $.cookie('era_3', 'no', {expires: 1000, path: '/'});
       var container = $('div.eras div.era').filter(function (index) {return index == 2; });
       container.find('a:first').attr({ href: "/category/file-under/78/era-watch" });
       container.find('a:first').click(function() {
         $.cookie('era_3', 'yes', {expires: 1000, path: '/'});
      });
    }
    
    if ($.cookie("era_4") != 'yes') {
       $.cookie('era_4', 'no', {expires: 1000, path: '/'});
       var container = $('div.eras div.era').filter(function (index) {return index == 3; });
       container.find('a:first').attr({ href: "/category/file-under/115/era-watch" });
       container.find('a:first').click(function() {
         $.cookie('era_4', 'yes', {expires: 1000, path: '/'});
      });
    }
    
    if ($.cookie("era_5") != 'yes') {
       $.cookie('era_5', 'no', {expires: 1000, path: '/'});
       var container = $('div.eras div.era').filter(function (index) {return index == 4; });
       container.find('a:first').attr({ href: "/category/file-under/116/era-watch" });
       container.find('a:first').click(function() {
         $.cookie('era_5', 'yes', {expires: 1000, path: '/'});
      });
    }
    
    if ($.cookie("era_6") != 'yes') {
       $.cookie('era_6', 'no', {expires: 1000, path: '/'});
       var container = $('div.eras div.era').filter(function (index) {return index == 5;});
       container.find('a:first').attr({ href: "/category/file-under/117/era-watch" });
       container.find('a:first').click(function() {
         $.cookie('era_6', 'yes', {expires: 1000, path: '/'});
      });
    }
    
    if ($.cookie("era_7") != 'yes') {
       $.cookie('era_7', 'no', {expires: 1000, path: '/'});
       var container = $('div.eras div.era').filter(function (index) {return index == 6; });
       container.find('a:first').attr({ href: "/category/file-under/118/era-watch" });
       container.find('a:first').click(function() {
         $.cookie('era_7', 'yes', {expires: 1000, path: '/'});
      });
    }

}



/*** Quick hack for the images swap ***/
//if ($('#block-taxonomy_context-2 .expanded .expanded').length > 0) {
//      
//   var resources = $('#block-taxonomy_context-2 .expanded .expanded li.leaf a').filter(function (index) {
//                  return index == 4;
//                });
//   resources.attr({ title: "Resources" });
//   resources.text("Resources" );
//   
//   if (resources.hasClass('active')) {
//      
//      $('.span-left-on h1.title ').text("Resources" );
//   };
//
//}



/* This turns off the links to the other eras for the moment */


if ($('div.eras').length > 0) {
   $('div.topmenu .links-menu :first-child').addClass('active');
}

if ($('div.status').length > 0 || $('div.error').length > 0) {
   setTimeout(function() {$('div.messages').fadeOut(2000);}, 15000); 
}

if ($('#block-course-0 .item-list .item-list').length > 0) {
   $('#block-course-0').find( 'a.active' ).parent().parent().parent().parent().addClass('active');
   $('div.course-navigation :first-child').addClass('prev');
}



if ($('.era-overview .next').length > 0) {
   var str = $('.era-overview .next:first').text();
   
   if (str == 'Learning Items') {
      $('.era-overview .prev').addClass('hide');
   }
   
   if (str == '') {
      $('.era-overview .next').addClass('hide');
   }
}

$('#footermsg').find('li:last').find('a').addClass('last');

/** Hack to change the text for /node/add/group **/
if ($('.form-node-add-group').length > 0) {
   $('.form-node-add-group').find('div.form-item:eq(4)').hide();
}
if ($('.view-header-group-events-page').length > 0) {
   $('h1.title').text('Events');
}

if ($('#license-invite-form').length > 0) {
   $('#license-invite-form').find('.description:first').text('Each of the invitees below will be granted 1 of your available subscription licenses.');
   $('#license-invite-form').find('.description:eq(2)').text('Enter an optional message for the email invite.');
}

/** This add the colspan="3" to the last th of the privatemsg/folders page **/
if ($('.pm-manage-folders').length > 0) {
   $('.pm-manage-folders').find('th:last').attr("colSpan", "3");
}

/* This turns off the links events audiences */
if ($('.event .og-audience').length > 0) {
   $('.og-audience').parent().hide();   
}

/* This sniffs the custom course and if no items are selected the save button can not be pressed */
if ($('#course-section-items-form').length > 0) {
   /* This keeps the user from saving unless they have choesn items */
   /*
   if ($('#section-items-container .form-items-content .form-item').length == 0) {
      $('#course-section-items-form #edit-submit').addClass('disabled');
      $('#course-section-items-form #edit-submit').click(function(){return false;});
   }
   */
   /* This keeps the user from clicking on any of the Course links on the left while adding items */
   $('.block-course li a').click(function(){return false;});
   $('.block-course li a').addClass('disabled');
   $('.block-course li.last').hide();
}

/* This adds the correct class to the Group admin TD in the table */
if ($('#license-form').length > 0) {
   $('#license-form table').find('td:eq(2)').addClass("adminToggle");
}

/* This adds the correct class the the Notes pagee */
if ($('.fieldset-filter-notes').length > 0) {
   $('p.userPages').addClass("notes-desc");
}

/* Quick hack for Profiles Tab */
if ($('body.search').length > 0) {
   var foo = $('.tabs li:eq(3) a').html();
   if (foo == "Profiles" ) {
      $('.tabs li:eq(3)').html('');
   }
}



if ($('div.nav-map').length > 0) {
   $('.era-breadcrumb-wrap').hide();
}

if ($('.form-search-profile').length > 0) {

   if ($('body.search .content dl.search-results').length == 0 ) {
      $('body.search .content ul:eq(0)').wrap('<div class="view-empty-Profile-Search"></div>');
   }

}

/** This is a hack to close the rat trap of users not going through the membership step of the sign-up */
if ($('.view-subscription-upgrade').length > 0) {
   $('.topmenu .links-menu a').attr({ href: "/user/upgrade/skip"});
   //$('.logo a').attr({ href: "/user/upgrade/skip"});
   $('.logo a').attr({ href: "/user/upgrade/skip"});
}

/* this is for the switching of the watch videos */
$('.tab-connection a').click(function() {
   var movieId = $(this).attr("rel");
   
    if($(this).parent().parent().parent().parent().hasClass("active")) {
      return false;
   } else {
      $('.tab-connection').parent().removeClass('active');
      $(this).parent().parent().parent().parent().addClass('active');
      playMovie(movieId);
   }
   return false;
});

/* this is for the toggle of the Map size */

$('div.mapToggle').click(function() {                                  
    if($(this).hasClass('large')) {
       $('.span-left-on').removeClass('fullMap');
       $('div.left').fadeIn(1250,function() { $('div.mapToggle').removeClass('large');} );
       
    } else {
       $('.content-wrapper div.left').fadeOut(1250, function() { 
             $('.span-left-on').addClass('fullMap');
            $('div.mapToggle').addClass('large');
            }
         );
    }
   return false;
});

/* this is for the toggle of the Course Items */
$('.toggleCourse').click(function() {                                  
   $(this).toggleClass('opened');
   $(this).parent().find('.wrap-course-items').toggle(); 
});

/* this is for the toggle of the Course Menus */
$('div.section-link img').click(function() {                                  
   $(this).toggleClass('closed');
   $(this).parent().next().toggle(); 
});

if ($('.view-display-id-page_7').length > 0) {
   $("div.span-right-on").addClass('view-content-era-videos-wrapper');
   $("div.right").addClass('wrapper-videoInfo');
}


/* hide discussion answer: assuming answer is marked with p.answer */
$('p.answer').hide().each(function(){$(this).before($('<p style="color:#0054a6;">&nbsp;See answer &raquo;</p>'));}).prev().mouseover(function(){$(this).css('cursor','pointer');}).click(function(){$(this).hide().next().slideDown();});


});


$(function(){
     

// This is the ID of element with the count on the page
   var count = $('#commentCount').html();
// Number of items on each page
   var elCount = '10';
// Number of pages to be built
   var pgCount = Math.ceil(count / elCount);
// Populate the total of pages to be built   
   $('#pgCount-total').text(count);


   $('#pagingBar').aqPaging({
         current: 1, flip: true,
         cb: function(div){
         
         // This shows what the current count is now
            if(count > 10) {
               var currentCount = div * 10;
               if(pgCount != div) {
                  $('#pgCount-current').text(currentCount);
               } else {
                  $('#pgCount-current').text(count);
               }
            } else {
               $('#pgCount-current').text(count);   
            }
            
            
            $('div.comment-block').css('display','none');
            
            $('#comment-block-'+div).css('display','block');
            
            
         }
      });
    $('#pagingBar').aqPaging({current: 1,pages: pgCount});


});

$(function() {
          
          Boxy.DEFAULTS.title = ' ';
          
          
          var hideSelect = $('select').css('visibility','hidden');
          var showSelect = $('select').css('visibility','visible');


/* This bit of code is for the alpha NDA */

          
          //
          // Modals
/*   
 if (window.location.hostname != "pastor.biblemesh.com"){
          if ($('#user-register').length > 0) {
             
            <!--$('#agree').click(function() {
               var options = { path: '/', expires: 10 };
               date.setTime(date.getTime() + (3 * 24 * 60 * 60 * 1000));
                //$.cookie('nda', 'yes', { path: '/', expires: date });
               //alert($.cookie(ADDITIONAL_COOKIE_NAME));
               setcookie(nda, '1', '5884000', '/');
            });-->
            
             
      
              new Boxy("<div class='view-NDA'><p>By clicking &quot;<b>I agree</b>&quot;, I am agreeing to be bound by this agreement and the terms set herein. This Non-Disclosure Agreement (this &quot;Agreement&quot;) shall begin today, (&quot;Effective Date&quot;) by and between myself (the &quot;User&quot;) and BI, Ltd. (the &quot;Company&quot;).  The User and Company are sometimes individually referred to as the &quot;Party&quot; and jointly as the &quot;Parties.&quot;</p>  <p>In the course of development and testing of a website devoted to Bible Education the User may learn or receive from the Company &quot;Information,&quot; as that term is later defined in this Agreement.  The Parties desire to establish and set forth their obligations with respect to the Information. </p><p>In consideration of the foregoing, the Parties agree as follows:</p><ol><li>The term &quot;Information&quot; shall include, but not be limited to, any and all information about the proposed website, software, computer programs, system architecture, systems developments, copyrights, trademarks, know-how and documentation which the User learns or receives from the Company or such Party&#39;s representatives or advisors.</li><li>The Parties consider all Information to be confidential and proprietary.  All Information shall at all times, and throughout the world, remain the sole property of the Company exclusively, all applicable rights in copyrights, trademarks,  and all other Information shall remain in the Company exclusively, and the User shall acquire no rights in or to such Information by reason of its disclosure hereunder.</li><li>The User shall indemnify the Company against all losses and expenses incurred by the Company (including but not limited to reasonable counsel fees and expenses) which result from the breach of any portion of this Agreement by the User.</li><li>This Agreement shall be effective as of the date first written above and shall continue in effect for <b>six (6) months</b>.</li><li>The Parties acknowledge and agree that money damages would not be a sufficient remedy for any breach of this Agreement and that the Company shall be entitled to equitable relief, including injunction and specific performance, as a remedy for any such breach.  Such remedies shall not be deemed to be the exclusive remedies for a breach of this Agreement but shall be in addition to all other remedies available at law or equity.</li><li>This Agreement shall be governed and construed in accordance with the laws of the state of New York.  The Parties hereby irrevocably and unconditionally consent to submit to the exclusive jurisdiction of the courts of the State of New York and of the United States of America located in a city of the Company&#39;s choosing within the State of New York.</li></ol><p>IN WITNESS WHEREOF, the parties hereto have caused this Agreement to be executed by their duly authorized respective officers as of the Effective Date.</p><p>By clicking &quot;<b>I Agree</b>&quot; I hereby agree to be bound by this agreement and its terms.</p><div class=' clearfix'><div class='wrap-btn'><div id='agree' class='boxy-close'>I Agree</div></div> <div class='wrap-btn-right'><div id='agree' class='cancel'><a href='http://www.google.com'>Cancel</a></div></div></div></div>", {
                modal: true, closeable: false, title: 'NON-DISCLOSURE AGREEMENT', 
                   afterShow: function() {$('select').css('visibility','hidden');}, 
                  afterHide: function() {$('select').css('visibility','visible');}
            });
          };
   };      
*/
          function newModal(listId,app) {
            if(app == 'brainspeed') {
               var titleTxt = 'Click the Close button to save your results';
               var closeMessage = 'Close';
            } else {
               var titleTxt = 'You must click the Quit button to save your test results';
               var closeMessage = 'Close';
            }
            
            if ($(window).height() <= 550) {
               
               new Boxy("<IFRAME SRC='http://www.iknow.co.jp/flash?swf="+ app +"&course_id="+ listId +"&lang=en' WIDTH='888' HEIGHT='580' frameborder='0' scrolling='no' class='wrapper-iknow'></IFRAME>", {
                modal: true, title: titleTxt, closeText: closeMessage, y: '0', 
                   unloadOnHide: true,
                   afterShow: function() {$('select').css('visibility','hidden');},
                   afterHide: function() { $('select').css('visibility','visible'); 
                  }
                  });

            } else {
               new Boxy("<IFRAME SRC='http://www.iknow.co.jp/flash?swf="+ app +"&course_id="+ listId +"&lang=en' WIDTH='888' HEIGHT='580' frameborder='0' scrolling='no' class='wrapper-iknow'></IFRAME>", {
                modal: true, title: titleTxt, closeText: closeMessage, 
                   unloadOnHide: true,
                   afterShow: function() {$('select').css('visibility','hidden');},
                   afterHide: function() { $('select').css('visibility','visible'); 
                  }
                  });
            }
         
              
             }
            
            // new iknow 
            $('.iknow, .launch-name a').click(function () {
             var width = 970;
             var height = 640;
             var left = (screen.availWidth - width) / 2;
             var top = (screen.availHeight - height) / 2;
             left = left < 0 ? 0 : left;
             top = top < 0 ? 0 : top;
             var app_window = window.open(
             this.href,
             'iknow_window',
             "height=" + height + ",width=" + width + ",left=" + left + ",top=" + top + ",resizable=yes"
             );
             app_window.opener = window;
             app_window.focus();

             return false;
            });
//          $('.iknow').click(function() {
//             var listId = $(this).attr("rel");
//             newModal(listId,'iknow');
//          });
//            
//            $('.dictation').click(function() {
//             var listId = $(this).attr("rel");
//             newModal(listId,'dictation');
//             });
//            
//            $('.brainSpeed').click(function() {
//             var listId = $(this).attr("rel");
//              newModal(listId,'brainspeed');
//          
//          });
          
          //
          // Progress widgets

          


          $('.itemsStudied').click(function() {
              var offset = $(this).offset();
              var left = $(window).width()/2 - 300;
              var top = $(window).height()/2 - 160;
              var user = $(this).attr("rel");
              new Boxy("<div class=''><iframe src='" + window.location.protocol + "//" + window.location.hostname + "/sites/all/themes/biblemesh/study.php?user=" + user + "' WIDTH='610' HEIGHT='225' frameborder='0' scrolling='no'></iframe></div>", {title: 'Studied Items',closeText: '', unloadOnHide: true}).moveTo(left,top);
              return false;
          });
          
          $('.itemsCompleted').click(function() {
              var offset = $(this).offset();
              var left = $(window).width()/2 - 300;
              var top = $(window).height()/2 - 160;
              var user = $(this).attr("rel");
              new Boxy("<div class=''><iframe src='" + window.location.protocol + "//" + window.location.hostname + "/sites/all/themes/biblemesh/completed.php?user=" + user + "' WIDTH='610' HEIGHT='225' frameborder='0' scrolling='no'></iframe></div>", {title: 'Completed Items',closeText: '', unloadOnHide: true }).moveTo(left,top);
              return false;
          });
          
          $('.timeStudied').click(function() {
              var offset = $(this).offset();
              var left = $(window).width()/2 - 300;
              var top = $(window).height()/2 - 160;
              var user = $(this).attr("rel");
              new Boxy("<div class=''><iframe src='" + window.location.protocol + "//" + window.location.hostname + "/sites/all/themes/biblemesh/time.php?user=" + user + "' WIDTH='610' HEIGHT='225' frameborder='0' scrolling='no'></iframe></div>", {title: 'Time Studied',closeText: '', unloadOnHide: true }).moveTo(left,top);
              return false;
          });
          

/*********************
   Walkthough videos
**********************/
         function tutorialModal(movie,name) { 
         
           new Boxy("<div class='movie-modal'><script type=\"text/javascript\" src=\"/sites/all/themes/biblemesh/js/jwplayer.js\"></script><div id=\"movie_player\"></div><script type=\"text/javascript\">jwplayer('movie_player').setup({flashplayer:'/sites/all/themes/biblemesh/movie/player.swf', provider:'video', width:'808', height:'535', 'controlbar.position':'bottom', file:'http://vidego-http.multicastmedia.com/"+movie+"', plugins:{'gapro-1':{accountid:'UA-17464006-1'}}});</script></div>", {modal: true, closeable: true, title: 'Video Tutorial'+name,unloadOnHide:true, y: '0',
              afterShow: function() {$('.wrapper-hompageMovie').css('visibility','hidden');$('.wrapper-hompageMovie-inside').css('visibility','hidden');}, 
              afterHide: function() {$('.wrapper-hompageMovie').css('visibility','visible');$('.wrapper-hompageMovie-inside').css('visibility','visible');}
                 });
            
         }
          
// Cookie for the Profile video
          if ($('body.user h1.profilename').length > 0) {
             if ($.cookie('tutorial') != 'yes') {
                tutorialModal('Walkthrough.sans.beta.ending.mp4','');
                $.cookie('tutorial', 'yes', {expires: 363, path: '/'});
                }
          }
         
         
//         $('.link-watch').click(function() {
//            tutorialModal('Walkthrough_Splash_Screen_Watch.mp4',' - Watch');
//            return false;
//         });
//         
//         $('.link-explore').click(function() {
//            tutorialModal('Walkthrough_Splash_Screen_Explore.mp4',' - Explore');
//            return false;
//         });
//         
//         $('.link-learn').click(function() {
//            tutorialModal('Walkthrough_Splash_Screen_Learn.mp4',' - Learn');
//            return false;
//         });
//         
//         $('.link-discuss').click(function() {
//            tutorialModal('Walkthrough_Splash_Screen_Discuss.mp4',' - Discuss');
//            return false;
//         });
         
          $('.launchVideo').click(function() {                                                                    
              tutorialModal('23245/mm/flvmedia/3711/W/a/l/Walkthrough.sans.beta.ending-527490-807710.mp4?cid=3711&aid=807710&afid=1000909','');
              return false;
          });


          
});;

