/*
 * jquery.tools 1.1.2 - The missing UI library for the Web
 * 
 * [tools.tabs-1.0.4, tools.tooltip-1.1.3, tools.scrollable-1.1.2, tools.scrollable.navigator-1.0.2, tools.overlay-1.1.2, tools.expose-1.0.5]
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 * 
 * -----
 * 
 * jQuery JavaScript Library v1.3.2
 * http://jquery.com/
 *
 * Copyright (c) 2009 John Resig
 * Dual licensed under the MIT and GPL licenses.
 * http://docs.jquery.com/License
 *
 * Sizzle CSS Selector Engine - v0.9.3
 * Copyright 2009, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 * More information: http://sizzlejs.com/
 * 
 * -----
 * 
 * File generated: Tue Apr 13 23:00:23 GMT 2010
 */
(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad+V}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML='   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
(function(d){d.tools=d.tools||{};d.tools.tabs={version:"1.0.4",conf:{tabs:"a",current:"current",onBeforeClick:null,onClick:null,effect:"default",initialIndex:0,event:"click",api:false,rotate:false},addEffect:function(e,f){c[e]=f}};var c={"default":function(f,e){this.getPanes().hide().eq(f).show();e.call()},fade:function(g,e){var f=this.getConf(),j=f.fadeOutSpeed,h=this.getPanes();if(j){h.fadeOut(j)}else{h.hide()}h.eq(g).fadeIn(f.fadeInSpeed,e)},slide:function(f,e){this.getPanes().slideUp(200);this.getPanes().eq(f).slideDown(400,e)},ajax:function(f,e){this.getPanes().eq(0).load(this.getTabs().eq(f).attr("href"),e)}};var b;d.tools.tabs.addEffect("horizontal",function(f,e){if(!b){b=this.getPanes().eq(0).width()}this.getCurrentPane().animate({width:0},function(){d(this).hide()});this.getPanes().eq(f).animate({width:b},function(){d(this).show();e.call()})});function a(g,h,f){var e=this,j=d(this),i;d.each(f,function(k,l){if(d.isFunction(l)){j.bind(k,l)}});d.extend(this,{click:function(k,n){var o=e.getCurrentPane();var l=g.eq(k);if(typeof k=="string"&&k.replace("#","")){l=g.filter("[href*="+k.replace("#","")+"]");k=Math.max(g.index(l),0)}if(f.rotate){var m=g.length-1;if(k<0){return e.click(m,n)}if(k>m){return e.click(0,n)}}if(!l.length){if(i>=0){return e}k=f.initialIndex;l=g.eq(k)}if(k===i){return e}n=n||d.Event();n.type="onBeforeClick";j.trigger(n,[k]);if(n.isDefaultPrevented()){return}c[f.effect].call(e,k,function(){n.type="onClick";j.trigger(n,[k])});n.type="onStart";j.trigger(n,[k]);if(n.isDefaultPrevented()){return}i=k;g.removeClass(f.current);l.addClass(f.current);return e},getConf:function(){return f},getTabs:function(){return g},getPanes:function(){return h},getCurrentPane:function(){return h.eq(i)},getCurrentTab:function(){return g.eq(i)},getIndex:function(){return i},next:function(){return e.click(i+1)},prev:function(){return e.click(i-1)},bind:function(k,l){j.bind(k,l);return e},onBeforeClick:function(k){return this.bind("onBeforeClick",k)},onClick:function(k){return this.bind("onClick",k)},unbind:function(k){j.unbind(k);return e}});g.each(function(k){d(this).bind(f.event,function(l){e.click(k,l);return false})});if(location.hash){e.click(location.hash)}else{if(f.initialIndex===0||f.initialIndex>0){e.click(f.initialIndex)}}h.find("a[href^=#]").click(function(k){e.click(d(this).attr("href"),k)})}d.fn.tabs=function(i,f){var g=this.eq(typeof f=="number"?f:0).data("tabs");if(g){return g}if(d.isFunction(f)){f={onBeforeClick:f}}var h=d.extend({},d.tools.tabs.conf),e=this.length;f=d.extend(h,f);this.each(function(l){var j=d(this);var k=j.find(f.tabs);if(!k.length){k=j.children()}var m=i.jquery?i:j.children(i);if(!m.length){m=e==1?d(i):j.parent().find(i)}g=new a(k,m,f);j.data("tabs",g)});return f.api?g:this}})(jQuery);
(function(c){var d=[];c.tools=c.tools||{};c.tools.tooltip={version:"1.1.3",conf:{effect:"toggle",fadeOutSpeed:"fast",tip:null,predelay:0,delay:30,opacity:1,lazy:undefined,position:["top","center"],offset:[0,0],cancelDefault:true,relative:false,oneInstance:true,events:{def:"mouseover,mouseout",input:"focus,blur",widget:"focus mouseover,blur mouseout",tooltip:"mouseover,mouseout"},api:false},addEffect:function(e,g,f){b[e]=[g,f]}};var b={toggle:[function(e){var f=this.getConf(),g=this.getTip(),h=f.opacity;if(h<1){g.css({opacity:h})}g.show();e.call()},function(e){this.getTip().hide();e.call()}],fade:[function(e){this.getTip().fadeIn(this.getConf().fadeInSpeed,e)},function(e){this.getTip().fadeOut(this.getConf().fadeOutSpeed,e)}]};function a(f,g){var p=this,k=c(this);f.data("tooltip",p);var l=f.next();if(g.tip){l=c(g.tip);if(l.length>1){l=f.nextAll(g.tip).eq(0);if(!l.length){l=f.parent().nextAll(g.tip).eq(0)}}}function o(u){var t=g.relative?f.position().top:f.offset().top,s=g.relative?f.position().left:f.offset().left,v=g.position[0];t-=l.outerHeight()-g.offset[0];s+=f.outerWidth()+g.offset[1];var q=l.outerHeight()+f.outerHeight();if(v=="center"){t+=q/2}if(v=="bottom"){t+=q}v=g.position[1];var r=l.outerWidth()+f.outerWidth();if(v=="center"){s-=r/2}if(v=="left"){s-=r}return{top:t,left:s}}var i=f.is(":input"),e=i&&f.is(":checkbox, :radio, select, :button"),h=f.attr("type"),n=g.events[h]||g.events[i?(e?"widget":"input"):"def"];n=n.split(/,\s*/);if(n.length!=2){throw"Tooltip: bad events configuration for "+h}f.bind(n[0],function(r){if(g.oneInstance){c.each(d,function(){this.hide()})}var q=l.data("trigger");if(q&&q[0]!=this){l.hide().stop(true,true)}r.target=this;p.show(r);n=g.events.tooltip.split(/,\s*/);l.bind(n[0],function(){p.show(r)});if(n[1]){l.bind(n[1],function(){p.hide(r)})}});f.bind(n[1],function(q){p.hide(q)});if(!c.browser.msie&&!i&&!g.predelay){f.mousemove(function(){if(!p.isShown()){f.triggerHandler("mouseover")}})}if(g.opacity<1){l.css("opacity",g.opacity)}var m=0,j=f.attr("title");if(j&&g.cancelDefault){f.removeAttr("title");f.data("title",j)}c.extend(p,{show:function(r){if(r){f=c(r.target)}clearTimeout(l.data("timer"));if(l.is(":animated")||l.is(":visible")){return p}function q(){l.data("trigger",f);var t=o(r);if(g.tip&&j){l.html(f.data("title"))}r=r||c.Event();r.type="onBeforeShow";k.trigger(r,[t]);if(r.isDefaultPrevented()){return p}t=o(r);l.css({position:"absolute",top:t.top,left:t.left});var s=b[g.effect];if(!s){throw'Nonexistent effect "'+g.effect+'"'}s[0].call(p,function(){r.type="onShow";k.trigger(r)})}if(g.predelay){clearTimeout(m);m=setTimeout(q,g.predelay)}else{q()}return p},hide:function(r){clearTimeout(l.data("timer"));clearTimeout(m);if(!l.is(":visible")){return}function q(){r=r||c.Event();r.type="onBeforeHide";k.trigger(r);if(r.isDefaultPrevented()){return}b[g.effect][1].call(p,function(){r.type="onHide";k.trigger(r)})}if(g.delay&&r){l.data("timer",setTimeout(q,g.delay))}else{q()}return p},isShown:function(){return l.is(":visible, :animated")},getConf:function(){return g},getTip:function(){return l},getTrigger:function(){return f},bind:function(q,r){k.bind(q,r);return p},onHide:function(q){return this.bind("onHide",q)},onBeforeShow:function(q){return this.bind("onBeforeShow",q)},onShow:function(q){return this.bind("onShow",q)},onBeforeHide:function(q){return this.bind("onBeforeHide",q)},unbind:function(q){k.unbind(q);return p}});c.each(g,function(q,r){if(c.isFunction(r)){p.bind(q,r)}})}c.prototype.tooltip=function(e){var f=this.eq(typeof e=="number"?e:0).data("tooltip");if(f){return f}var g=c.extend(true,{},c.tools.tooltip.conf);if(c.isFunction(e)){e={onBeforeShow:e}}else{if(typeof e=="string"){e={tip:e}}}e=c.extend(true,g,e);if(typeof e.position=="string"){e.position=e.position.split(/,?\s/)}if(e.lazy!==false&&(e.lazy===true||this.length>20)){this.one("mouseover",function(h){f=new a(c(this),e);f.show(h);d.push(f)})}else{this.each(function(){f=new a(c(this),e);d.push(f)})}return e.api?f:this}})(jQuery);
(function(b){b.tools=b.tools||{};b.tools.scrollable={version:"1.1.2",conf:{size:5,vertical:false,speed:400,keyboard:true,keyboardSteps:null,disabledClass:"disabled",hoverClass:null,clickable:true,activeClass:"active",easing:"swing",loop:false,items:".items",item:null,prev:".prev",next:".next",prevPage:".prevPage",nextPage:".nextPage",api:false}};var c;function a(o,m){var r=this,p=b(this),d=!m.vertical,e=o.children(),k=0,i;if(!c){c=r}b.each(m,function(s,t){if(b.isFunction(t)){p.bind(s,t)}});if(e.length>1){e=b(m.items,o)}function l(t){var s=b(t);return m.globalNav?s:o.parent().find(t)}o.data("finder",l);var f=l(m.prev),h=l(m.next),g=l(m.prevPage),n=l(m.nextPage);b.extend(r,{getIndex:function(){return k},getClickIndex:function(){var s=r.getItems();return s.index(s.filter("."+m.activeClass))},getConf:function(){return m},getSize:function(){return r.getItems().size()},getPageAmount:function(){return Math.ceil(this.getSize()/m.size)},getPageIndex:function(){return Math.ceil(k/m.size)},getNaviButtons:function(){return f.add(h).add(g).add(n)},getRoot:function(){return o},getItemWrap:function(){return e},getItems:function(){return e.children(m.item)},getVisibleItems:function(){return r.getItems().slice(k,k+m.size)},seekTo:function(s,w,t){if(s<0){s=0}if(k===s){return r}if(b.isFunction(w)){t=w}if(s>r.getSize()-m.size){return m.loop?r.begin():this.end()}var u=r.getItems().eq(s);if(!u.length){return r}var v=b.Event("onBeforeSeek");p.trigger(v,[s]);if(v.isDefaultPrevented()){return r}if(w===undefined||b.isFunction(w)){w=m.speed}function x(){if(t){t.call(r,s)}p.trigger("onSeek",[s])}if(d){e.animate({left:-u.position().left},w,m.easing,x)}else{e.animate({top:-u.position().top},w,m.easing,x)}c=r;k=s;v=b.Event("onStart");p.trigger(v,[s]);if(v.isDefaultPrevented()){return r}f.add(g).toggleClass(m.disabledClass,s===0);h.add(n).toggleClass(m.disabledClass,s>=r.getSize()-m.size);return r},move:function(u,t,s){i=u>0;return this.seekTo(k+u,t,s)},next:function(t,s){return this.move(1,t,s)},prev:function(t,s){return this.move(-1,t,s)},movePage:function(w,v,u){i=w>0;var s=m.size*w;var t=k%m.size;if(t>0){s+=(w>0?-t:m.size-t)}return this.move(s,v,u)},prevPage:function(t,s){return this.movePage(-1,t,s)},nextPage:function(t,s){return this.movePage(1,t,s)},setPage:function(t,u,s){return this.seekTo(t*m.size,u,s)},begin:function(t,s){i=false;return this.seekTo(0,t,s)},end:function(t,s){i=true;var u=this.getSize()-m.size;return u>0?this.seekTo(u,t,s):r},reload:function(){p.trigger("onReload");return r},focus:function(){c=r;return r},click:function(u){var v=r.getItems().eq(u),s=m.activeClass,t=m.size;if(u<0||u>=r.getSize()){return r}if(t==1){if(m.loop){return r.next()}if(u===0||u==r.getSize()-1){i=(i===undefined)?true:!i}return i===false?r.prev():r.next()}if(t==2){if(u==k){u--}r.getItems().removeClass(s);v.addClass(s);return r.seekTo(u,time,fn)}if(!v.hasClass(s)){r.getItems().removeClass(s);v.addClass(s);var x=Math.floor(t/2);var w=u-x;if(w>r.getSize()-t){w=r.getSize()-t}if(w!==u){return r.seekTo(w)}}return r},bind:function(s,t){p.bind(s,t);return r},unbind:function(s){p.unbind(s);return r}});b.each("onBeforeSeek,onStart,onSeek,onReload".split(","),function(s,t){r[t]=function(u){return r.bind(t,u)}});f.addClass(m.disabledClass).click(function(){r.prev()});h.click(function(){r.next()});n.click(function(){r.nextPage()});if(r.getSize()<m.size){h.add(n).addClass(m.disabledClass)}g.addClass(m.disabledClass).click(function(){r.prevPage()});var j=m.hoverClass,q="keydown."+Math.random().toString().substring(10);r.onReload(function(){if(j){r.getItems().hover(function(){b(this).addClass(j)},function(){b(this).removeClass(j)})}if(m.clickable){r.getItems().each(function(s){b(this).unbind("click.scrollable").bind("click.scrollable",function(t){if(b(t.target).is("a")){return}return r.click(s)})})}if(m.keyboard){b(document).unbind(q).bind(q,function(t){if(t.altKey||t.ctrlKey){return}if(m.keyboard!="static"&&c!=r){return}var u=m.keyboardSteps;if(d&&(t.keyCode==37||t.keyCode==39)){r.move(t.keyCode==37?-u:u);return t.preventDefault()}if(!d&&(t.keyCode==38||t.keyCode==40)){r.move(t.keyCode==38?-u:u);return t.preventDefault()}return true})}else{b(document).unbind(q)}});r.reload()}b.fn.scrollable=function(d){var e=this.eq(typeof d=="number"?d:0).data("scrollable");if(e){return e}var f=b.extend({},b.tools.scrollable.conf);d=b.extend(f,d);d.keyboardSteps=d.keyboardSteps||d.size;this.each(function(){e=new a(b(this),d);b(this).data("scrollable",e)});return d.api?e:this}})(jQuery);
(function(b){var a=b.tools.scrollable;a.plugins=a.plugins||{};a.plugins.navigator={version:"1.0.2",conf:{navi:".navi",naviItem:null,activeClass:"active",indexed:false,api:false,idPrefix:null}};b.fn.navigator=function(d){var e=b.extend({},a.plugins.navigator.conf),c;if(typeof d=="string"){d={navi:d}}d=b.extend(e,d);this.each(function(){var i=b(this).scrollable(),f=i.getRoot(),l=f.data("finder").call(null,d.navi),g=null,k=i.getNaviButtons();if(i){c=i}i.getNaviButtons=function(){return k.add(l)};function j(){if(!l.children().length||l.data("navi")==i){l.empty();l.data("navi",i);for(var m=0;m<i.getPageAmount();m++){l.append(b("<"+(d.naviItem||"a")+"/>"))}g=l.children().each(function(n){var o=b(this);o.click(function(p){i.setPage(n);return p.preventDefault()});if(d.indexed){o.text(n)}if(d.idPrefix){o.attr("id",d.idPrefix+n)}})}else{g=d.naviItem?l.find(d.naviItem):l.children();g.each(function(n){var o=b(this);o.click(function(p){i.setPage(n);return p.preventDefault()})})}g.eq(0).addClass(d.activeClass)}i.onStart(function(o,n){var m=d.activeClass;g.removeClass(m).eq(i.getPageIndex()).addClass(m)});i.onReload(function(){j()});j();var h=g.filter("[href="+location.hash+"]");if(h.length){i.move(g.index(h))}});return d.api?c:this}})(jQuery);
(function(c){c.tools=c.tools||{};c.tools.overlay={version:"1.1.2",addEffect:function(e,f,g){b[e]=[f,g]},conf:{top:"10%",left:"center",absolute:false,speed:"normal",closeSpeed:"fast",effect:"default",close:null,oneInstance:true,closeOnClick:true,closeOnEsc:true,api:false,expose:null,target:null}};var b={};c.tools.overlay.addEffect("default",function(e){this.getOverlay().fadeIn(this.getConf().speed,e)},function(e){this.getOverlay().fadeOut(this.getConf().closeSpeed,e)});var d=[];function a(g,k){var o=this,m=c(this),n=c(window),j,i,h,e=k.expose&&c.tools.expose.version;var f=k.target||g.attr("rel");i=f?c(f):null||g;if(!i.length){throw"Could not find Overlay: "+f}if(g&&g.index(i)==-1){g.click(function(p){o.load(p);return p.preventDefault()})}c.each(k,function(p,q){if(c.isFunction(q)){m.bind(p,q)}});c.extend(o,{load:function(u){if(o.isOpened()){return o}var r=b[k.effect];if(!r){throw'Overlay: cannot find effect : "'+k.effect+'"'}if(k.oneInstance){c.each(d,function(){this.close(u)})}u=u||c.Event();u.type="onBeforeLoad";m.trigger(u);if(u.isDefaultPrevented()){return o}h=true;if(e){i.expose().load(u)}var t=k.top;var s=k.left;var p=i.outerWidth({margin:true});var q=i.outerHeight({margin:true});if(typeof t=="string"){t=t=="center"?Math.max((n.height()-q)/2,0):parseInt(t,10)/100*n.height()}if(s=="center"){s=Math.max((n.width()-p)/2,0)}if(!k.absolute){t+=n.scrollTop();s+=n.scrollLeft()}i.css({top:t,left:s,position:"absolute"});u.type="onStart";m.trigger(u);r[0].call(o,function(){if(h){u.type="onLoad";m.trigger(u)}});if(k.closeOnClick){c(document).bind("click.overlay",function(w){if(!o.isOpened()){return}var v=c(w.target);if(v.parents(i).length>1){return}c.each(d,function(){this.close(w)})})}if(k.closeOnEsc){c(document).unbind("keydown.overlay").bind("keydown.overlay",function(v){if(v.keyCode==27){c.each(d,function(){this.close(v)})}})}return o},close:function(q){if(!o.isOpened()){return o}q=q||c.Event();q.type="onBeforeClose";m.trigger(q);if(q.isDefaultPrevented()){return}h=false;b[k.effect][1].call(o,function(){q.type="onClose";m.trigger(q)});var p=true;c.each(d,function(){if(this.isOpened()){p=false}});if(p){c(document).unbind("click.overlay").unbind("keydown.overlay")}return o},getContent:function(){return i},getOverlay:function(){return i},getTrigger:function(){return g},getClosers:function(){return j},isOpened:function(){return h},getConf:function(){return k},bind:function(p,q){m.bind(p,q);return o},unbind:function(p){m.unbind(p);return o}});c.each("onBeforeLoad,onStart,onLoad,onBeforeClose,onClose".split(","),function(p,q){o[q]=function(r){return o.bind(q,r)}});if(e){if(typeof k.expose=="string"){k.expose={color:k.expose}}c.extend(k.expose,{api:true,closeOnClick:k.closeOnClick,closeOnEsc:false});var l=i.expose(k.expose);l.onBeforeClose(function(p){o.close(p)});o.onClose(function(p){l.close(p)})}j=i.find(k.close||".close");if(!j.length&&!k.close){j=c('<div class="close"></div>');i.prepend(j)}j.click(function(p){o.close(p)})}c.fn.overlay=function(e){var f=this.eq(typeof e=="number"?e:0).data("overlay");if(f){return f}if(c.isFunction(e)){e={onBeforeLoad:e}}var g=c.extend({},c.tools.overlay.conf);e=c.extend(true,g,e);this.each(function(){f=new a(c(this),e);d.push(f);c(this).data("overlay",f)});return e.api?f:this}})(jQuery);
(function(b){b.tools=b.tools||{};b.tools.expose={version:"1.0.5",conf:{maskId:null,loadSpeed:"slow",closeSpeed:"fast",closeOnClick:true,closeOnEsc:true,zIndex:9998,opacity:0.8,color:"#456",api:false}};function a(){if(b.browser.msie){var f=b(document).height(),e=b(window).height();return[window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth,f-e<20?e:f]}return[b(window).width(),b(document).height()]}function c(h,g){var e=this,j=b(this),d=null,f=false,i=0;b.each(g,function(k,l){if(b.isFunction(l)){j.bind(k,l)}});b(window).resize(function(){e.fit()});b.extend(this,{getMask:function(){return d},getExposed:function(){return h},getConf:function(){return g},isLoaded:function(){return f},load:function(n){if(f){return e}i=h.eq(0).css("zIndex");if(g.maskId){d=b("#"+g.maskId)}if(!d||!d.length){var l=a();d=b("<div/>").css({position:"absolute",top:0,left:0,width:l[0],height:l[1],display:"none",opacity:0,zIndex:g.zIndex});if(g.maskId){d.attr("id",g.maskId)}b("body").append(d);var k=d.css("backgroundColor");if(!k||k=="transparent"||k=="rgba(0, 0, 0, 0)"){d.css("backgroundColor",g.color)}if(g.closeOnEsc){b(document).bind("keydown.unexpose",function(o){if(o.keyCode==27){e.close()}})}if(g.closeOnClick){d.bind("click.unexpose",function(o){e.close(o)})}}n=n||b.Event();n.type="onBeforeLoad";j.trigger(n);if(n.isDefaultPrevented()){return e}b.each(h,function(){var o=b(this);if(!/relative|absolute|fixed/i.test(o.css("position"))){o.css("position","relative")}});h.css({zIndex:Math.max(g.zIndex+1,i=="auto"?0:i)});var m=d.height();if(!this.isLoaded()){d.css({opacity:0,display:"block"}).fadeTo(g.loadSpeed,g.opacity,function(){if(d.height()!=m){d.css("height",m)}n.type="onLoad";j.trigger(n)})}f=true;return e},close:function(k){if(!f){return e}k=k||b.Event();k.type="onBeforeClose";j.trigger(k);if(k.isDefaultPrevented()){return e}d.fadeOut(g.closeSpeed,function(){k.type="onClose";j.trigger(k);h.css({zIndex:b.browser.msie?i:null})});f=false;return e},fit:function(){if(d){var k=a();d.css({width:k[0],height:k[1]})}},bind:function(k,l){j.bind(k,l);return e},unbind:function(k){j.unbind(k);return e}});b.each("onBeforeLoad,onLoad,onBeforeClose,onClose".split(","),function(k,l){e[l]=function(m){return e.bind(l,m)}})}b.fn.expose=function(d){var e=this.eq(typeof d=="number"?d:0).data("expose");if(e){return e}if(typeof d=="string"){d={color:d}}var f=b.extend({},b.tools.expose.conf);d=b.extend(f,d);this.each(function(){e=new c(b(this),d);b(this).data("expose",e)});return d.api?e:this}})(jQuery);
/*

 * jQuery UI Effects 1.8

 *

 * Copyright (c) 2010 AUTHORS.txt (http://jqueryui.com/about)

 * Dual licensed under the MIT (MIT-LICENSE.txt)

 * and GPL (GPL-LICENSE.txt) licenses.

 * 

 * http://docs.jquery.com/UI/Effects/

 */
jQuery.effects||(function(g){g.effects={};g.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(l,k){g.fx.step[k]=function(m){if(!m.colorInit){m.start=j(m.elem,k);m.end=i(m.end);m.colorInit=true}m.elem.style[k]="rgb("+Math.max(Math.min(parseInt((m.pos*(m.end[0]-m.start[0]))+m.start[0],10),255),0)+","+Math.max(Math.min(parseInt((m.pos*(m.end[1]-m.start[1]))+m.start[1],10),255),0)+","+Math.max(Math.min(parseInt((m.pos*(m.end[2]-m.start[2]))+m.start[2],10),255),0)+")"}});function i(l){var k;if(l&&l.constructor==Array&&l.length==3){return l}if(k=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(l)){return[parseInt(k[1],10),parseInt(k[2],10),parseInt(k[3],10)]}if(k=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(l)){return[parseFloat(k[1])*2.55,parseFloat(k[2])*2.55,parseFloat(k[3])*2.55]}if(k=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(l)){return[parseInt(k[1],16),parseInt(k[2],16),parseInt(k[3],16)]}if(k=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(l)){return[parseInt(k[1]+k[1],16),parseInt(k[2]+k[2],16),parseInt(k[3]+k[3],16)]}if(k=/rgba\(0, 0, 0, 0\)/.exec(l)){return a.transparent}return a[g.trim(l).toLowerCase()]}function j(m,k){var l;do{l=g.curCSS(m,k);if(l!=""&&l!="transparent"||g.nodeName(m,"body")){break}k="backgroundColor"}while(m=m.parentNode);return i(l)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]};var e=["add","remove","toggle"],c={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};function f(){var n=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,o={},l,m;if(n&&n.length&&n[0]&&n[n[0]]){var k=n.length;while(k--){l=n[k];if(typeof n[l]=="string"){m=l.replace(/\-(\w)/g,function(p,q){return q.toUpperCase()});o[m]=n[l]}}}else{for(l in n){if(typeof n[l]==="string"){o[l]=n[l]}}}return o}function b(l){var k,m;for(k in l){m=l[k];if(m==null||g.isFunction(m)||k in c||(/scrollbar/).test(k)||(!(/color/i).test(k)&&isNaN(parseFloat(m)))){delete l[k]}}return l}function h(k,m){var n={_:0},l;for(l in m){if(k[l]!=m[l]){n[l]=m[l]}}return n}g.effects.animateClass=function(k,l,n,m){if(g.isFunction(n)){m=n;n=null}return this.each(function(){var r=g(this),o=r.attr("style")||" ",s=b(f.call(this)),q,p=r.attr("className");g.each(e,function(t,u){if(k[u]){r[u+"Class"](k[u])}});q=b(f.call(this));r.attr("className",p);r.animate(h(s,q),l,n,function(){g.each(e,function(t,u){if(k[u]){r[u+"Class"](k[u])}});if(typeof r.attr("style")=="object"){r.attr("style").cssText="";r.attr("style").cssText=o}else{r.attr("style",o)}if(m){m.apply(this,arguments)}})})};g.fn.extend({_addClass:g.fn.addClass,addClass:function(l,k,n,m){return k?g.effects.animateClass.apply(this,[{add:l},k,n,m]):this._addClass(l)},_removeClass:g.fn.removeClass,removeClass:function(l,k,n,m){return k?g.effects.animateClass.apply(this,[{remove:l},k,n,m]):this._removeClass(l)},_toggleClass:g.fn.toggleClass,toggleClass:function(m,l,k,o,n){if(typeof l=="boolean"||l===undefined){if(!k){return this._toggleClass(m,l)}else{return g.effects.animateClass.apply(this,[(l?{add:m}:{remove:m}),k,o,n])}}else{return g.effects.animateClass.apply(this,[{toggle:m},l,k,o])}},switchClass:function(k,m,l,o,n){return g.effects.animateClass.apply(this,[{add:m,remove:k},l,o,n])}});g.extend(g.effects,{version:"1.8",save:function(l,m){for(var k=0;k<m.length;k++){if(m[k]!==null){l.data("ec.storage."+m[k],l[0].style[m[k]])}}},restore:function(l,m){for(var k=0;k<m.length;k++){if(m[k]!==null){l.css(m[k],l.data("ec.storage."+m[k]))}}},setMode:function(k,l){if(l=="toggle"){l=k.is(":hidden")?"show":"hide"}return l},getBaseline:function(l,m){var n,k;switch(l[0]){case"top":n=0;break;case"middle":n=0.5;break;case"bottom":n=1;break;default:n=l[0]/m.height}switch(l[1]){case"left":k=0;break;case"center":k=0.5;break;case"right":k=1;break;default:k=l[1]/m.width}return{x:k,y:n}},createWrapper:function(k){if(k.parent().is(".ui-effects-wrapper")){return k.parent()}var l={width:k.outerWidth(true),height:k.outerHeight(true),"float":k.css("float")},m=g("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});k.wrap(m);m=k.parent();if(k.css("position")=="static"){m.css({position:"relative"});k.css({position:"relative"})}else{g.extend(l,{position:k.css("position"),zIndex:k.css("z-index")});g.each(["top","left","bottom","right"],function(n,o){l[o]=k.css(o);if(isNaN(parseInt(l[o],10))){l[o]="auto"}});k.css({position:"relative",top:0,left:0})}return m.css(l).show()},removeWrapper:function(k){if(k.parent().is(".ui-effects-wrapper")){return k.parent().replaceWith(k)}return k},setTransition:function(l,n,k,m){m=m||{};g.each(n,function(p,o){unit=l.cssUnit(o);if(unit[0]>0){m[o]=unit[0]*k+unit[1]}});return m}});function d(l,k,m,n){if(typeof l=="object"){n=k;m=null;k=l;l=k.effect}if(g.isFunction(k)){n=k;m=null;k={}}if(g.isFunction(m)){n=m;m=null}if(typeof k=="number"||g.fx.speeds[k]){n=m;m=k;k={}}k=k||{};m=m||k.duration;m=g.fx.off?0:typeof m=="number"?m:g.fx.speeds[m]||g.fx.speeds._default;n=n||k.complete;return[l,k,m,n]}g.fn.extend({effect:function(n,m,p,q){var l=d.apply(this,arguments),o={options:l[1],duration:l[2],callback:l[3]},k=g.effects[n];return k&&!g.fx.off?k.call(this,o):this},_show:g.fn.show,show:function(l){if(!l||typeof l=="number"||g.fx.speeds[l]){return this._show.apply(this,arguments)}else{var k=d.apply(this,arguments);k[1].mode="show";return this.effect.apply(this,k)}},_hide:g.fn.hide,hide:function(l){if(!l||typeof l=="number"||g.fx.speeds[l]){return this._hide.apply(this,arguments)}else{var k=d.apply(this,arguments);k[1].mode="hide";return this.effect.apply(this,k)}},__toggle:g.fn.toggle,toggle:function(l){if(!l||typeof l=="number"||g.fx.speeds[l]||typeof l=="boolean"||g.isFunction(l)){return this.__toggle.apply(this,arguments)}else{var k=d.apply(this,arguments);k[1].mode="toggle";return this.effect.apply(this,k)}},cssUnit:function(k){var l=this.css(k),m=[];g.each(["em","px","%","pt"],function(n,o){if(l.indexOf(o)>0){m=[parseFloat(l),o]}});return m}});g.easing.jswing=g.easing.swing;g.extend(g.easing,{def:"easeOutQuad",swing:function(l,m,k,o,n){return g.easing[g.easing.def](l,m,k,o,n)},easeInQuad:function(l,m,k,o,n){return o*(m/=n)*m+k},easeOutQuad:function(l,m,k,o,n){return -o*(m/=n)*(m-2)+k},easeInOutQuad:function(l,m,k,o,n){if((m/=n/2)<1){return o/2*m*m+k}return -o/2*((--m)*(m-2)-1)+k},easeInCubic:function(l,m,k,o,n){return o*(m/=n)*m*m+k},easeOutCubic:function(l,m,k,o,n){return o*((m=m/n-1)*m*m+1)+k},easeInOutCubic:function(l,m,k,o,n){if((m/=n/2)<1){return o/2*m*m*m+k}return o/2*((m-=2)*m*m+2)+k},easeInQuart:function(l,m,k,o,n){return o*(m/=n)*m*m*m+k},easeOutQuart:function(l,m,k,o,n){return -o*((m=m/n-1)*m*m*m-1)+k},easeInOutQuart:function(l,m,k,o,n){if((m/=n/2)<1){return o/2*m*m*m*m+k}return -o/2*((m-=2)*m*m*m-2)+k},easeInQuint:function(l,m,k,o,n){return o*(m/=n)*m*m*m*m+k},easeOutQuint:function(l,m,k,o,n){return o*((m=m/n-1)*m*m*m*m+1)+k},easeInOutQuint:function(l,m,k,o,n){if((m/=n/2)<1){return o/2*m*m*m*m*m+k}return o/2*((m-=2)*m*m*m*m+2)+k},easeInSine:function(l,m,k,o,n){return -o*Math.cos(m/n*(Math.PI/2))+o+k},easeOutSine:function(l,m,k,o,n){return o*Math.sin(m/n*(Math.PI/2))+k},easeInOutSine:function(l,m,k,o,n){return -o/2*(Math.cos(Math.PI*m/n)-1)+k},easeInExpo:function(l,m,k,o,n){return(m==0)?k:o*Math.pow(2,10*(m/n-1))+k},easeOutExpo:function(l,m,k,o,n){return(m==n)?k+o:o*(-Math.pow(2,-10*m/n)+1)+k},easeInOutExpo:function(l,m,k,o,n){if(m==0){return k}if(m==n){return k+o}if((m/=n/2)<1){return o/2*Math.pow(2,10*(m-1))+k}return o/2*(-Math.pow(2,-10*--m)+2)+k},easeInCirc:function(l,m,k,o,n){return -o*(Math.sqrt(1-(m/=n)*m)-1)+k},easeOutCirc:function(l,m,k,o,n){return o*Math.sqrt(1-(m=m/n-1)*m)+k},easeInOutCirc:function(l,m,k,o,n){if((m/=n/2)<1){return -o/2*(Math.sqrt(1-m*m)-1)+k}return o/2*(Math.sqrt(1-(m-=2)*m)+1)+k},easeInElastic:function(l,n,k,u,r){var o=1.70158;var q=0;var m=u;if(n==0){return k}if((n/=r)==1){return k+u}if(!q){q=r*0.3}if(m<Math.abs(u)){m=u;var o=q/4}else{var o=q/(2*Math.PI)*Math.asin(u/m)}return -(m*Math.pow(2,10*(n-=1))*Math.sin((n*r-o)*(2*Math.PI)/q))+k},easeOutElastic:function(l,n,k,u,r){var o=1.70158;var q=0;var m=u;if(n==0){return k}if((n/=r)==1){return k+u}if(!q){q=r*0.3}if(m<Math.abs(u)){m=u;var o=q/4}else{var o=q/(2*Math.PI)*Math.asin(u/m)}return m*Math.pow(2,-10*n)*Math.sin((n*r-o)*(2*Math.PI)/q)+u+k},easeInOutElastic:function(l,n,k,u,r){var o=1.70158;var q=0;var m=u;if(n==0){return k}if((n/=r/2)==2){return k+u}if(!q){q=r*(0.3*1.5)}if(m<Math.abs(u)){m=u;var o=q/4}else{var o=q/(2*Math.PI)*Math.asin(u/m)}if(n<1){return -0.5*(m*Math.pow(2,10*(n-=1))*Math.sin((n*r-o)*(2*Math.PI)/q))+k}return m*Math.pow(2,-10*(n-=1))*Math.sin((n*r-o)*(2*Math.PI)/q)*0.5+u+k},easeInBack:function(l,m,k,p,o,n){if(n==undefined){n=1.70158}return p*(m/=o)*m*((n+1)*m-n)+k},easeOutBack:function(l,m,k,p,o,n){if(n==undefined){n=1.70158}return p*((m=m/o-1)*m*((n+1)*m+n)+1)+k},easeInOutBack:function(l,m,k,p,o,n){if(n==undefined){n=1.70158}if((m/=o/2)<1){return p/2*(m*m*(((n*=(1.525))+1)*m-n))+k}return p/2*((m-=2)*m*(((n*=(1.525))+1)*m+n)+2)+k},easeInBounce:function(l,m,k,o,n){return o-g.easing.easeOutBounce(l,n-m,0,o,n)+k},easeOutBounce:function(l,m,k,o,n){if((m/=n)<(1/2.75)){return o*(7.5625*m*m)+k}else{if(m<(2/2.75)){return o*(7.5625*(m-=(1.5/2.75))*m+0.75)+k}else{if(m<(2.5/2.75)){return o*(7.5625*(m-=(2.25/2.75))*m+0.9375)+k}else{return o*(7.5625*(m-=(2.625/2.75))*m+0.984375)+k}}}},easeInOutBounce:function(l,m,k,o,n){if(m<n/2){return g.easing.easeInBounce(l,m*2,0,o,n)*0.5+k}return g.easing.easeOutBounce(l,m*2-n,0,o,n)*0.5+o*0.5+k}})})(jQuery);;
/**
 * 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;
    }
};
/**
 * jQuery History Plugin (balupton edition) - Simple History Handler/Remote for Hash, State, Bookmarking, and Forward Back Buttons
 * Copyright (C) 2008-2009 Benjamin Arthur Lupton
 * http://www.balupton.com/projects/jquery_history/
 *
 * This file is part of jQuery History Plugin (balupton edition).
 * 
 * jQuery History Plugin (balupton edition) is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as
 * published by the Free Software Foundation, either version 3 of the
 * License, or (at your option) any later version.
 * 
 * jQuery History Plugin (balupton edition) 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 Affero General Public License for more details.
 * 
 * You should have received a copy of the GNU Affero General Public License
 * along with jQuery History Plugin (balupton edition).  If not, see <http://www.gnu.org/licenses/>.
 *
 * @name jqsmarty: jquery.history.js
 * @package jQuery History Plugin (balupton edition)
 * @version 1.1.0-final
 * @date July 14, 2009
 * @category jquery plugin
 * @author Benjamin "balupton" Lupton {@link http://www.balupton.com}
 * @copyright (c) 2008-2009 Benjamin Arthur Lupton {@link http://www.balupton.com}
 * @license GNU Affero General Public License - {@link http://www.gnu.org/licenses/agpl.html}
 * @example Visit {@link http://jquery.com/plugins/project/jquery_history_bal} for more information.
 * 
 * 
 * I would like to take this space to thank the following projects, blogs, articles and people:
 * - jQuery {@link http://jquery.com/}
 * - jQuery UI History - Klaus Hartl {@link http://www.stilbuero.de/jquery/ui_history/}
 * - Really Simple History - Brian Dillard and Brad Neuberg {@link http://code.google.com/p/reallysimplehistory/}
 * - jQuery History Plugin - Taku Sano (Mikage Sawatari) {@link http://www.mikage.to/jquery/jquery_history.html}
 * - jQuery History Remote Plugin - Klaus Hartl {@link http://stilbuero.de/jquery/history/}
 * - Content With Style: Fixing the back button and enabling bookmarking for ajax apps - Mike Stenhouse {@link http://www.contentwithstyle.co.uk/Articles/38/fixing-the-back-button-and-enabling-bookmarking-for-ajax-apps}
 * - Bookmarks and Back Buttons {@link http://ajax.howtosetup.info/options-and-efficiencies/bookmarks-and-back-buttons/}
 * - Ajax: How to handle bookmarks and back buttons - Brad Neuberg {@link http://dev.aol.com/ajax-handling-bookmarks-and-back-button}
 *
 **
 ***
 * CHANGELOG
 **
 * v1.1.0-final, July 14, 2009
 * - Rewrote IE<8 hash code
 * - Cut down format to accept all hash types
 * 
 * v1.0.1-final, July 11, 2009
 * - Restructured a little bit
 * - Documented
 * - Cleaned go/request
 *
 * v1.0.0-final, June 19, 2009
 * - Been stable for over a year now, pushing live.
 * 
 * v0.1.0-dev, July 24, 2008
 * - Initial Release
 * 
 */

// Start of our jQuery Plugin
(function($)
{	// Create our Plugin function, with $ as the argument (we pass the jQuery object over later)
	// More info: http://docs.jquery.com/Plugins/Authoring#Custom_Alias
	
	// Debug
	if (typeof console === 'undefined') {
		console = typeof window.console !== 'undefined' ? window.console : {};
	}
	console.log			= console.log 			|| function(){};
	console.debug		= console.debug 		|| console.log;
	console.warn		= console.warn			|| console.log;
	console.error		= console.error			|| function(){var args = [];for (var i = 0; i < arguments.length; i++) { args.push(arguments[i]); } alert(args.join("\n")); };
	console.trace		= console.trace			|| console.log;
	console.group		= console.group			|| console.log;
	console.groupEnd	= console.groupEnd		|| console.log;
	console.profile		= console.profile		|| console.log;
	console.profileEnd	= console.profileEnd	|| console.log;
	
	// Declare our class
	$.History = {
		// Our Plugin definition
		
		// -----------------
		// Options
		
		options: {
			debug: false
		},
		
		// -----------------
		// Variables
		
		state:		'',
		$window:	null,
		$iframe:	null,
		handlers:	{
			generic:	[],
			specific:	{}
		},
		
		// --------------------------------------------------
		// Functions
		
		/**
		 * Format a hash into a proper state
		 * @param {String} hash
		 */
		format: function ( hash ) {
			// Format the hash
			hash = hash
				.replace(/^.*#/g, '') /* strip anything before the anchor in case we were passed a url */
				;
			
			// Return the hash
			return hash;
		},
		
		/**
		 * Get the current state of the application
		 */
        getState: function ( ) {
			var History = $.History;
			
			// Get the current state
			return History.state;
        },
		/**
		 * Set the current state of the application
		 * @param {String} hash
		 */
		setState: function ( state ) {
			var History = $.History;
			// Format the state
			state = History.format(state)
			
			// Apply the state
			History.state = state;
			
			// Return the state
			return History.state;
		},
		
		/**
		 * Get the current hash of the browser
		 */
		getHash: function ( ) {
			var History = $.History;
			
			// Get the hash
			var hash = History.format(window.location.hash || location.hash);
			
			// Return the hash
			return hash;
		},
		
		/**
		 * Set the current hash of the browser and iframe if present
		 * @param {String} hash
		 */
		setHash: function ( hash ) {
			var History = $.History;
			
			// Prepare hash
			hash = History.format(hash);
			
			// Write hash
			if ( typeof window.location.hash !== 'undefined' ) {
				if ( window.location.hash !== hash ) {
					window.location.hash = hash;
				}
			} else if ( location.hash !== hash ) {
				location.hash = hash;
			}
			
			// Done
			return hash;
		},
		
		/**
		 * Go to the specific state - does not force a history entry like setHash
		 * @param {String} to
		 */
		go: function ( to ) {
			var History = $.History;
			
			// Format
			to = History.format(to);
			
			// Get current
			var hash = History.getHash();
			var state = History.getState();
			
			// Has the hash changed
			if ( to !== hash ) {
				// Yes, update the hash
				// And wait for the next automatic fire
				History.setHash(to);
			} else {
				// Hash the state changed?
				if ( to !== state ) {
					// Yes, Update the state
					History.setState(to);
					
					// Trigger our change
					History.trigger();
				}
				
			}
			
			// Done
			return true;
		},
		
		/**
		 * Handle when the hash has changed
		 * @param {Event} e
		 */
		hashchange: function ( e ) {
			var History = $.History;
			
			// Get Hash
			var hash = History.getHash();
			
			// Handle the new hash
			History.go(hash);
			
			// All done
			return true;
		},
		
		/**
		 * Bind a handler to a hash
		 * @param {Object} state
		 * @param {Object} handler
		 */
		bind: function ( state, handler ) {
			var History = $.History;
			// 
			if ( handler ) {
				// We have a state specific handler
				// Prepare
				if ( typeof History.handlers.specific[state] === 'undefined' )
				{	// Make it an array
					History.handlers.specific[state] = [];
				}
				// Push new handler
				History.handlers.specific[state].push(handler);
			}
			else {
				// We have a generic handler
				handler = state;
				History.handlers.generic.push(handler);
			}
			
			// Done
			return true;
		},
		
		/**
		 * Trigger a handler for a state
		 * @param {String} state
		 */
		trigger: function ( state ) {
			var History = $.History;
			
			// Prepare
			if ( typeof state === 'undefined' ) {
				// Use current
				state = History.getState();
			}
			var i, n, handler, list;
			
			// Fire specific
			if ( typeof History.handlers.specific[state] !== 'undefined' ) {
				// We have specific handlers
				list = History.handlers.specific[state];
				for ( i = 0, n = list.length; i < n; ++i ) {
					// Fire the specific handler
					handler = list[i];
					handler(state);
				}
			}
			
			// Fire generics
			list = History.handlers.generic;
			for ( i = 0, n = list.length; i < n; ++i ) {
				// Fire the specific handler
				handler = list[i];
				handler(state);
			}
			
			// Done
			return true;
		},
		
		// --------------------------------------------------
		// Constructors
		
		/**
		 * Construct our application
		 */
		construct: function ( ) {
			var History = $.History;
			
			// Modify the document
			$(document).ready(function() {
				// Prepare the document
				History.domReady();
			});
			
			// Done
			return true;
		},
		
		/**
		 * Configure our application
		 * @param {Object} options
		 */
		configure: function ( options ) {
			var History = $.History;
			
			// Set options
			History.options = $.extend(History.options, options);
			
			// Done
			return true;
		},
		
		domReadied: false,
		domReady: function ( ) {
			var History = $.History;
			
			// console.log("domready in history");
			// Runonce
			if ( History.domRedied ) {
				return;
			}
			History.domRedied = true;
			
			// Define window
			History.$window = $(window);
			
			// Apply the hashchange function
			History.$window.bind('hashchange', this.hashchange);
			
			// Force hashchange support for all browsers
			setTimeout(History.hashchangeLoader, 200);
			
			// All done
			return true;
		},
		
		/**
		 * Enable hashchange for all browsers
		 */
		hashchangeLoader: function () {
			var History = $.History;
			
			// More is needed for non IE8 browsers
			if ( !($.browser.msie && parseInt($.browser.version) >= 8) ) {	
				// We are not IE8
			
				// State our checker function, it is used to constantly check the location to detect a change
				var checker;
				
				// Handle depending on the browser
				if ( $.browser.msie ) {
					// We are still IE
					// IE6, IE7, etc
				
					// Append and $iframe to the document, as $iframes are required for back and forward
					// Create a hidden $iframe for hash change tracking
					History.$iframe = $('<iframe id="jquery-history-iframe" style="display: none;"></$iframe>').prependTo(document.body)[0];
					
					// Create initial history entry
					History.$iframe.contentWindow.document.open();
					History.$iframe.contentWindow.document.close();
					
					// Define the checker function (for bookmarks)
					var iframeHit = false;
					checker = function ( ) {
						
						// Fetch
						var hash = History.getHash();
						var state = History.getState();
						var iframeHash = History.format(History.$iframe.contentWindow.document.location.hash);
						
						// Check if the browser hash is different
						if ( state !== hash ) {
							// Browser hash is different
							
							// Check if we need to update the iframe
							if ( !iframeHit ) {
								// Write a iframe/history entry in the browsers back and forward
								// alert('update iframe entry');
								History.$iframe.contentWindow.document.open();
								History.$iframe.contentWindow.document.close();
								// alert('update iframe entry.');
								
								// Update the iframe hash
								// alert('update iframe hash');
								History.$iframe.contentWindow.document.location.hash = hash;
								// alert('update iframe hash.');
							}
							
							// Reset
							iframeHit = false;
							
							// Fire
							// alert('hashchange');
							History.$window.trigger('hashchange');
							// alert('hashchange.');
						}
						else {
							// Browser hash is not different
							
							// Check if the iframe hash is different from the iframe state
							if ( state !== iframeHash ) {
								// Specify we were hit from the iframe
								iframeHit = true;
								
								// Update the browser hash
								// alert('set hash from iframe');
								History.setHash(iframeHash);
								// alert('set hash from iframe.');
							}
						}
						
					};
				}
				else {
					// We are not IE
					// Firefox, Opera, Etc
				
					// Define the checker function (for bookmarks, back, forward)
					checker = function ( ) {
						
						var hash = History.getHash();
						var state = History.getState();
						// Check
						if ( state !== hash ) {
							// State changes
							History.$window.trigger('hashchange');
						}
					};
				}
				
				// Apply the checker function
				setInterval(checker, 200);
			}
			else {
				// We are IE8
				
				// Fire the initial
				var hash = History.getHash();
				if ( hash ) {
					History.$window.trigger('hashchange');
				}
			}
			
			// Done
			return true;
		}
	
	}; // We have finished extending/defining our Plugin
	
	// --------------------------------------------------
	// Finish up
	
	// Instantiate
	$.History.construct();

// Finished definition

})(jQuery); // We are done with our plugin, so lets call it with jQuery as the argument
/*
 * jquery.tools 1.1.2 - The missing UI library for the Web
 * 
 * [tools.flashembed-1.0.4]
 * 
 * Copyright (c) 2009 Tero Piirainen
 * http://flowplayer.org/tools/
 *
 * Dual licensed under MIT and GPL 2+ licenses
 * http://www.opensource.org/licenses
 * 
 * -----
 * 
 * File generated: Tue Apr 06 17:40:51 GMT 2010
 */
(function(){var e=typeof jQuery=="function";var i={width:"100%",height:"100%",allowfullscreen:true,allowscriptaccess:"always",quality:"high",version:null,onFail:null,expressInstall:null,w3c:false,cachebusting:false};if(e){jQuery.tools=jQuery.tools||{};jQuery.tools.flashembed={version:"1.0.4",conf:i}}function j(){if(c.done){return false}var l=document;if(l&&l.getElementsByTagName&&l.getElementById&&l.body){clearInterval(c.timer);c.timer=null;for(var k=0;k<c.ready.length;k++){c.ready[k].call()}c.ready=null;c.done=true}}var c=e?jQuery:function(k){if(c.done){return k()}if(c.timer){c.ready.push(k)}else{c.ready=[k];c.timer=setInterval(j,13)}};function f(l,k){if(k){for(key in k){if(k.hasOwnProperty(key)){l[key]=k[key]}}}return l}function g(k){switch(h(k)){case"string":k=k.replace(new RegExp('(["\\\\])',"g"),"\\$1");k=k.replace(/^\s?(\d+)%/,"$1pct");return'"'+k+'"';case"array":return"["+b(k,function(n){return g(n)}).join(",")+"]";case"function":return'"function()"';case"object":var l=[];for(var m in k){if(k.hasOwnProperty(m)){l.push('"'+m+'":'+g(k[m]))}}return"{"+l.join(",")+"}"}return String(k).replace(/\s/g," ").replace(/\'/g,'"')}function h(l){if(l===null||l===undefined){return false}var k=typeof l;return(k=="object"&&l.push)?"array":k}if(window.attachEvent){window.attachEvent("onbeforeunload",function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){}})}function b(k,n){var m=[];for(var l in k){if(k.hasOwnProperty(l)){m[l]=n(k[l])}}return m}function a(r,t){var q=f({},r);var s=document.all;var n='<object width="'+q.width+'" height="'+q.height+'"';if(s&&!q.id){q.id="_"+(""+Math.random()).substring(9)}if(q.id){n+=' id="'+q.id+'"'}if(q.cachebusting){q.src+=((q.src.indexOf("?")!=-1?"&":"?")+Math.random())}if(q.w3c||!s){n+=' data="'+q.src+'" type="application/x-shockwave-flash"'}else{n+=' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'}n+=">";if(q.w3c||s){n+='<param name="movie" value="'+q.src+'" />'}q.width=q.height=q.id=q.w3c=q.src=null;for(var l in q){if(q[l]!==null){n+='<param name="'+l+'" value="'+q[l]+'" />'}}var o="";if(t){for(var m in t){if(t[m]!==null){o+=m+"="+(typeof t[m]=="object"?g(t[m]):t[m])+"&"}}o=o.substring(0,o.length-1);n+='<param name="flashvars" value=\''+o+"' />"}n+="</object>";return n}function d(m,p,l){var k=flashembed.getVersion();f(this,{getContainer:function(){return m},getConf:function(){return p},getVersion:function(){return k},getFlashvars:function(){return l},getApi:function(){return m.firstChild},getHTML:function(){return a(p,l)}});var q=p.version;var r=p.expressInstall;var o=!q||flashembed.isSupported(q);if(o){p.onFail=p.version=p.expressInstall=null;m.innerHTML=a(p,l)}else{if(q&&r&&flashembed.isSupported([6,65])){f(p,{src:r});l={MMredirectURL:location.href,MMplayerType:"PlugIn",MMdoctitle:document.title};m.innerHTML=a(p,l)}else{if(m.innerHTML.replace(/\s/g,"")!==""){}else{m.innerHTML="<h2>Flash version "+q+" or greater is required</h2><h3>"+(k[0]>0?"Your version is "+k:"You have no flash plugin installed")+"</h3>"+(m.tagName=="A"?"<p>Click here to download latest version</p>":"<p>Download latest version from <a href='http://www.adobe.com/go/getflashplayer'>here</a></p>");if(m.tagName=="A"){m.onclick=function(){location.href="http://www.adobe.com/go/getflashplayer"}}}}}if(!o&&p.onFail){var n=p.onFail.call(this);if(typeof n=="string"){m.innerHTML=n}}if(document.all){window[p.id]=document.getElementById(p.id)}}window.flashembed=function(l,m,k){if(typeof l=="string"){var n=document.getElementById(l);if(n){l=n}else{c(function(){flashembed(l,m,k)});return}}if(!l){return}if(typeof m=="string"){m={src:m}}var o=f({},i);f(o,m);return new d(l,o,k)};f(window.flashembed,{getVersion:function(){var m=[0,0];if(navigator.plugins&&typeof navigator.plugins["Shockwave Flash"]=="object"){var l=navigator.plugins["Shockwave Flash"].description;if(typeof l!="undefined"){l=l.replace(/^.*\s+(\S+\s+\S+$)/,"$1");var n=parseInt(l.replace(/^(.*)\..*$/,"$1"),10);var r=/r/.test(l)?parseInt(l.replace(/^.*r(.*)$/,"$1"),10):0;m=[n,r]}}else{if(window.ActiveXObject){try{var p=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7")}catch(q){try{p=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");m=[6,0];p.AllowScriptAccess="always"}catch(k){if(m[0]==6){return m}}try{p=new ActiveXObject("ShockwaveFlash.ShockwaveFlash")}catch(o){}}if(typeof p=="object"){l=p.GetVariable("$version");if(typeof l!="undefined"){l=l.replace(/^\S+\s+(.*)$/,"$1").split(",");m=[parseInt(l[0],10),parseInt(l[2],10)]}}}}return m},isSupported:function(k){var m=flashembed.getVersion();var l=(m[0]>k[0])||(m[0]==k[0]&&m[1]>=k[1]);return l},domReady:c,asString:g,getHTML:a});if(e){jQuery.fn.flashembed=function(l,k){var m=null;this.each(function(){m=flashembed(this,l,k)});return l.api===false?this:m}}})();
var EA = {
	"instances": {},
	"postAGFunctions": [],
	"postPGFunctions": [],
	
	"afterAgeGate": function(f) {
		if(EA.ageGateReady == false){
			EA.postAGFunctions.push(f);
		}else{
			f.call();
		}
	},
	
	"afterPromoGate": function(f) {
		if(EA.promoGateReady == false){
			EA.postPGFunctions.push(f);
		}else{
			f.call();
		}
	},
	
	// Called when the age gate is passed
	"triggerAgeGateReady": function() {
		if(EA.ageGateReady == false){
			for(var i in EA.postAGFunctions){
				$(EA.postAGFunctions[i]);
			}
			EA.ageGateReady = true;
		}
	},
	
	// Called when the promo gate is accepted/closed/already shown
	"triggerPromoGateReady": function() {
		if(EA.promoGateReady == false){
			for(var i in EA.postPGFunctions){
				$(EA.postPGFunctions[i]);
			}
			EA.promoGateReady = true;
		}
		
	},
	
	'ageGateReady':false,
	'promoGateReady':false,
	
	/* Flash URLs */
	'videoPlayerURL': '/videoplayer/editorialPod2.swf',
	'videoCarouselURL': '/videoplayer/editorialPod2-carousel.swf',
	'navURL': 'images/blur.swf'
};



Function.prototype.bindTo = function(scope) {
	var _function = this;
	
	return function() {
		return _function.apply(scope, arguments);
	}
};
//EA namespace must be defined
if(EA) {
	
	EA.Controller = function () {
		
		var stateChangeHandler = function (state) {
			var regex = new RegExp('^!*([^/!]+)(.*)');
	        var matches = regex.exec(state);
	        
	        if(matches !== null){
	            action = matches[1];
	        	if(this.actions[action] && typeof this.actions[action] == "function"){
	        		//First, clean up any actions currently being displayed.
	            	if(this.currentAction && this.cleanup[this.currentAction] && typeof this.cleanup[this.currentAction] == "function"){
	            		(this.cleanup[this.currentAction])(this.currentParams, action, matches[2]);
	            	}
	            	
	            	// Set the "current" action and parameters.
	            	this.currentAction = action;
	            	this.currentParams = matches[2];
	            	// Call the action.
	            	(this.actions[action])(matches[2]);
	        	}else{
	        		//throw new Error('Undefined action: '+action);
	        	}
	        }else{
	        	// This is the default action (nothing was passed)
	        	if(this.currentAction && this.cleanup[this.currentAction] && typeof this.cleanup[this.currentAction] == "function"){
            		(this.cleanup[this.currentAction])(this.currentParams);
            	}
	            
	        	if(beatManager.currentBeatData){
	        		setOmniValues('','','','','','',1,'','',omniSetPageTypeId(beatManager.currentBeatData.omnitag));
	        	}else{
	        		setOmniValues('','','','','','',1,'','',omniSetPageTypeId('BEATSLOADINGHOME'));
	        	}
	        	
	        	
	            this.currentAction = undefined;
	            this.currentParams = undefined;
	        }
	        
	        if(this.currentAction){
	        	if(this.titles.hasOwnProperty(this.currentAction)){
	        		EA.Controller.currentTitle = this.titles[this.currentAction];
	        	}
	        }else{
	        	EA.Controller.currentTitle = EA.Controller.baseTitle;
	        }
		};
		
        $.History.bind(stateChangeHandler.bindTo(this));
        
        // Rewrite URLs.
        $("a[rel~='history']").each(function(){
            var newHref = $(this).attr('href').replace(/^(.*)/, '#$1');
            
            $(this).attr('href', newHref);
        });
        
        this.actions = {};
        this.cleanup = {};
        this.titles = {};
    };
    
    EA.Controller.makeMediaURL = function (asset) {
    	switch(asset.type){
	    	case "videos":
	    		return "video/group="+asset.group+"&mediaid="+asset.id;
			case "swfs":
				return "flash/mediaid="+asset.id;
			case "wallpapers":
				return "wallpapers/group="+asset.group+"&mediaid="+asset.id;
			case "images":
				return "images/group="+asset.group+"&mediaid="+asset.id;
    	}
    };
    
    EA.Controller.baseTitle = "Action Game | Dead Space 2 | Visceral Games";
    EA.Controller.currentTitle = EA.Controller.baseTitle;
	
}else{
	throw new Error('Could not define the Controller because the EA namespace is not defined.');
}
if(EA) {	
	/* TwitterFeed(type, refreshRate)
	
	   type: "dev"|"fan" - chooses which stream to capture
	   refreshRate: the amount of time between refreshes of the feed, in milliseconds. 0 = don't refresh.
	*/
	EA.TwitterFeed = function (type, refreshRate) {
		   if(type == EA.TwitterFeed.TYPE_DEV){
			   this.url="http://api.twitter.com/1/statuses/user_timeline/deadspace.json?";
		   }else if(type == EA.TwitterFeed.TYPE_FAN){
			   this.url="http://search.twitter.com/search.json?q=%35deadspace+OR+@deadspace&";
		   }else{
			   throw new Error("Feed must be instantiated with a type of EA.TwitterFeed.TYPE_DEV or EA.TwitterFeed.TYPE_FAN.");
		   }
		   this.type = type;
		   this.since_id = null;
		   this.current=undefined;
		   this.isRefreshing = false;
		   this.tweets = [];

		   if(refreshRate > 0){
			   setInterval(this.refresh.bindTo(this), refreshRate);
		   }
		   this.refresh();
	}
	
	EA.TwitterFeed.TYPE_DEV = 'dev';
	EA.TwitterFeed.TYPE_FAN = 'fan';
	EA.TwitterFeed.EVENT_UPDATE = 'EA_TwitterFeed_TwitterFeedUpdated';
	
	EA.TwitterFeed.prototype.refresh = function () {
		var feed = this;

		// If this feed is already refreshing, skip this refresh.
	    if(feed.isRefreshing){
		    return;
	    }

		// Mark that this feed is in the process of refreshing.
	    feed.isRefreshing = true;

		/*
		  Construct the feed url & parameters.
		  If since_id is set, that means this feed has already been initialized,
		  and so we'll only want to request tweets that occurred after since_id;
		  this is a slightly different url construction.
		*/
		var u = feed.url;

		// If since_id is set, set the since_id parameter to only get new tweets.
	    if(feed.since_id != null){
	        u += "since_id="+feed.since_id+"&";
	    }
	    u += "callback=?";
	    
	    // Send out the request.
	    $.getJSON(u,
	    	    // Handler for the return. Only fires on success.
	            function(d){
		            // If the feed type is TYPE_FAN, the returned data is in a slightly
		            // different construction; grab the tweets from the 'results' array.
	                if(feed.type == EA.TwitterFeed.TYPE_FAN){
	                    d = d.results;
	                }
		            
		            var tweets = d;
		            
		            // Go through each returned tweet.
                    $.each(d, function(i,item){
	                   feed.tweets.unshift(item); // Add the item to the list.
	                   feed.current = (feed.current == undefined ? 0 : feed.current + 1); // Adjust the "current" item.
	                   
	                   if(feed.since_id < item.id){
	                	   feed.since_id = item.id; // Keep track of the highest id.
	                   }
	               });
 	               // Mark that the feed is done refreshing. Subsequent refreshes
 	               // will not be blocked. Fantastic.
	               feed.isRefreshing = false;
	               
	               if(tweets && tweets.length){
	            	   // Trigger an event that tweets were received.
		               var event = jQuery.Event(EA.TwitterFeed.EVENT_UPDATE);
		               event["feedType"] = feed.type;
		               event["tweets"] = tweets;
		               $('body').trigger(event);
	               }
	           }
        );
	};
	
	EA.TwitterFeed.prototype.prevTweet = function () {
		if(this.current == 0){
			return undefined;
		}else{
			if(this.tweets[this.current-1]){
				this.current -= 1;
				return this.tweets[this.current];
			}else{
				return undefined;
			}
		}
	};
	
	EA.TwitterFeed.prototype.currentTweet = function () {
		if(this.tweets[this.current]){
			return this.tweets[this.current];
		}else{
			return undefined;
		}
	};
	
	EA.TwitterFeed.prototype.nextTweet = function () {
		if(this.current == this.tweets.length){
			return undefined;
		}else{
			if(this.tweets[this.current+1]){
				this.current += 1;
				return this.tweets[this.current];
			}else{
				return undefined;
			}
		}
	};
	
	EA.TwitterFeed.formatTweet = function (tweet) {
		var from = tweet.from_user;
		if(from != undefined){
			from += ": ";
		}else{
			from = '';
		}
		
		var created_at = new Date(tweet.created_at);
		var hour = created_at.getHours();
		if(hour == 0){
			hour = 12;
		}else if(hour > 12){
			hour -= 12;
		}
		
		tweet.text = from + tweet.text + ' - ' + created_at.getMonth() + '/' + created_at.getDate() + '/' + created_at.getFullYear()
			+ ' ' + hour + ':' + created_at.getMinutes() + (created_at.getHours() > 12 ? 'PM' : 'AM');

		return tweet;
	};
	
}else{
	throw new Error('Could not define the TwitterFeed because the EA namespace is not defined.');
}
if(EA) {
	if(!EA.Effects){
		EA.Effects = {};
	}
	
	EA.Effects.Typewriter = function (target, refreshRate, fadeLevels, stepInterval) {
		this.text = '';
		this.pos = 0;
		this.fadeLevels = (fadeLevels? Math.max(1, fadeLevels) : 5);
		this.stepInterval = (stepInterval? Math.max(1, stepInterval) : 2);
		this.fadePos = -this.fadeLevels;
		this.caret = false;
		this.refreshRate = refreshRate;
		this.el = $(target);
		this.onFinish = function(){};
		
		this.interval = setInterval(this.nextFrame.bindTo(this), refreshRate);
		
		if(EA.Effects.Typewriter.instances){
			EA.Effects.Typewriter.instances.push(this);
		}else{
			EA.Effects.Typewriter.instances = [this];
		}
	};
	
	EA.Effects.Typewriter.pauseAll = function () {
		for(var i in EA.Effects.Typewriter.instances){
			clearInterval(EA.Effects.Typewriter.instances[i].interval);
		}
		EA.Effects.Typewriter.paused = true;
	};
	
	EA.Effects.Typewriter.resumeAll = function () {
		if(EA.Effects.Typewriter.paused){
			for(var i in EA.Effects.Typewriter.instances){
				var item = EA.Effects.Typewriter.instances[i];
				item.interval = setInterval(item.nextFrame.bindTo(item), item.refreshRate);
			}
			EA.Effects.Typewriter.paused = false;
		}
	};
	
	EA.Effects.Typewriter.prototype.setString = function (string) {
		this.text = string;
		this.finaltext = string;
		this.pos = 0;
		this.fadePos = -this.fadeLevels;
	};
	
	EA.Effects.Typewriter.prototype.nextFrame = function () {
		if(this.text == null){
			return;
		}
		
		var tweetHTML;
		if(this.fadePos < this.text.length){
			tweetHTML = (this.fadePos > 0 ? this.text.substr(0, this.fadePos) : "");
			this.text = this.text.replace(/(<([^>]+)>)/ig,""); 
			for(var i=Math.max(0,this.fadePos); i<=this.pos; i++){
				var opacity = (this.pos-i)/this.fadeLevels;
				tweetHTML += '<span style="opacity: '+opacity+';">'+this.text.charAt(i)+'</span>';
			}
			
			this.el.html(tweetHTML+"_");
			
			if(this.pos < this.text.length){
				this.pos = Math.min(this.text.length, this.pos + this.stepInterval);
			}
			
			this.fadePos = Math.min(this.text.length, this.fadePos + this.stepInterval);
		}else{
			tweetHTML = this.finaltext;
		}
		
		if(this.pos >= this.text.length){
			if(this.el.find('SPAN.caretBlink').length){
				this.caret = !this.caret;
				
				if(this.caret){
					this.el.find('SPAN.caretBlink').css('visibility','visible');
				}else{
					this.el.find('SPAN.caretBlink').css('visibility','hidden');
				}
			}else{
				this.el.html(this.finaltext+'<span class="caretBlink">_</span>');
				this.onFinish();
			}
		}
	};

	EA.Effects.Typewriter.prototype.fade = function (text) {
		
        this.fadePos++;
    };

}else{
	throw new Error('Could not define the Typewriter effect because the EA namespace is not defined.');
}
if(EA) {	
	/* Offer(container)	*/
	EA.Offer = function (container) {
		this.container = $(container);
		
		this.formContainer = this.container.find('.offerFormContainer');
		this.title = this.container.find('.vidOfferTxt')
		this.offerList = this.container.find('UL');
		
//		/*
//		 * Set up the login, offer, thanks, and error forms. 
//		 */
//		// Set up the forms
//		this.container.find('.cancel').click(this.hideForms.bindTo(this));
//		
//		//Login form.
//		this.loginForm = this.container.find('.loginForm');
//		this.loginForm.find('.buttonUseEmail A').click((function(){
//			this.loginForm.find('.emailForm').slideToggle();
//			return false;
//		}).bindTo(this));
//		this.loginForm.find('.imgOfferSubmit A').click(this.submitLoginForm.bindTo(this));
//		
//		// Offer form
//		this.offerForm = this.container.find('.offerFormFields');
//		this.offerForm.find('.imgOfferGetOffer A').click(this.submitOfferForm.bindTo(this));
//		
//		// Thanks form
//		this.thanksForm = this.container.find('.thanksForm');
//		this.thanksForm.find('.buttonOk A').click(this.hideForms.bindTo(this)); 
		
		// Error form
		this.errorForm = this.container.find('.errorForm');
		this.errorFormTimeout = null;
		
		// Initialize the scrollable, and the navigator plugin.
		this.scroller = this.container.find('.offerClip').scrollable({
			"size": 1,
			"items": "UL",
			"item": "LI",
			"onBeforeSeek": this.onBeforeSeek.bindTo(this),
			"clickable": false
		}).navigator({
			"navi": ".dotPagination",
			"api":true
		});
		
		this.nav = this.container.find('.dotPagination');
		
		// Facebook stuff.
		this.FBConnected = false;
		this.FBEmail = null;
		$('BODY').bind('facebook_ready', (function(){
			/*
			 * Now that the Facebook libs are ready, three things:
			 * 
			 * 1. Bind the login-with-email-perms function to the FB connect button.
			 * 2. Now that facebook is ready, check to see if the user is logged in with email perms.
			 * 3. Listen for any kind of changes.
			 */
			var offerBox = this;
			
			// 1. Bind the "log me in and ask for email perms" button.
			this.container.find('.imgOfferFbConnect A').click(this.loginViaFacebook.bindTo(this));
		
			// 2. Check to see if the user is logged in, and with email perms.
			this.handleLoginStatus();
			
			// 3. Listen for changes in the connect session.
			FB.Event.subscribe('auth.sessionChange', this.handleLoginStatus.bindTo(this));
			
		}).bindTo(this));
		
		this.offers = [];
	};
	
	EA.Offer.prototype.loginViaFacebook = function () {
		var offerBox = this;
		
		// Ask for email perms - or a session.
		FB.login(function(response) {}, {perms:'email'});
		return false;
	};
	
	EA.Offer.prototype.handleLoginStatus = function () {
		var offerBox = this;
		
		// Check on the login status.
		FB.getLoginStatus(function(response) {
			// Are we logged in?
			if(response.session){
				// Do we have email perms?
				FB.api(
			        {
			          method : 'Users.hasAppPermission',
			          ext_perm : 'email'
			        },
			        function(permResponse)  {
			        	// Is the permissions response equal to 1?
			        	if(permResponse && permResponse == 1){
			        		//Get the email and hide the login area.
			        		FB.api(
			        			{
									method: 'fql.query',
									query: 'SELECT email FROM user WHERE uid=' + response.session.uid
								},
								function(emailResponse) {
									offerBox.FBEmail = emailResponse[0].email;
									offerBox.FBConnected = true;
					        		offerBox.container.find('.loginFormArea').slideUp();
								}
	        			    );
			        	}else{
			        		//Logged in, but without perms. Show it!
			        		offerBox.container.find('.loginFormArea').slideDown();
			        		offerBox.FBConnected = false;
			        	}
			        }
				);
			}else{
				//Not logged in. Show it.
				offerBox.container.find('.loginFormArea').slideDown();
				offerBox.FBConnected = false;
			}
		});
	};
	
	EA.Offer.prototype.setOffers = function (offers) {
		// Save the new offer data.
		this.offers = offers;
		this.offerIndex = {};
		this.offerList.empty();
		var theOffer = this;
		
		// Build some HTML
		for(var i in this.offers){
			var listHTML = '';
			var thisOffer = this.offers[i];
			var customPageName;
			
			if(thisOffer.omnitag && thisOffer.omnitag != ""){
				customPageName = thisOffer.omnitag.toUpperCase();
			}else{
				customPageName = thisOffer.id;
			}
			
			var elOffer = $("<li></li>");
			var isCustom = false;
			
			if(this.offers[i].html.length){
				listHTML = this.offers[i].html;
				isCustom = true;
			}else{
				listHTML += '<div class="offerDisplayArea"><h3>'+this.offers[i].title+'</h3>';
				listHTML += '<span class="blurb">'+this.offers[i].text+'</span>';
				listHTML += '<a class="offerPrompt" href="'+this.offers[i].clickThruURL+'">' + this.offers[i].prompt + '</a>';
				listHTML += '<div class="errorTxt"></div>';
				listHTML += '</div>';
			}
			
			elOffer.html(listHTML).css('background', "transparent url('"+this.offers[i].imageURL+"') top left no-repeat");
			
			if(this.offers[i].type == "email"){
				// Set the class
				elOffer.addClass('emailOffer');
				
				if(!isCustom){
					// Add the login form.
					elOffer.find('SPAN').after(this.container.find('.loginForm').html());
					
					// Add the thanks area.
					var thanksHTML = '';
					thanksHTML += '<div class="offerThanksArea">';
					thanksHTML += '<h3>'+this.offers[i].title+'</h3>';
					thanksHTML += '<div class="imgOfferConTxt">'+this.offers[i].thanks+'</div>';
					thanksHTML += '</div>';
					elOffer.find('.offerDisplayArea').after(thanksHTML);
					
					// Set the "Use Email" button toggle.
					var area = elOffer.find('.emailForm');
					elOffer.find('.buttonUseEmail A').toggle(
						function () {
							area.slideDown();
							customPageNameAndReset(customPageName+"STEP2");
						},
						
						function () {
							area.slideUp();
						}
					);
				}else{
					// Bind a focus/blur function on the textbox.
					(function(){
						var promoTextVal = elOffer.find('.imgFormTxtBox').val();
						 
						elOffer.find('.imgFormTxtBox').focus(function(){
							if($(this).val() == promoTextVal){
								$(this).val("");
							}
						}).blur(function(){
							if($(this).val() == ""){
								$(this).val(promoTextVal);
							}
						});
					})();
					
					
				}
				
				var emailVal = $.cookie('deadspace_email');
				
				if(emailVal){
					elOffer.find('.imgFormTxtBox').val(emailVal);
				}
				
				// If connected, hide the login form area.
				if(this.FBConnected){
					elOffer.find('.loginFormArea').hide();
				}
				
				// Bind the "log me in and ask for email perms" button.
				elOffer.find('.imgOfferFbConnect A').click(this.loginViaFacebook.bindTo(this));
				elOffer.find('.imgOfferFbConnect A').click(function(){
					facebookLoginDestinationPageName = customPageName+"FBLOGGEDIN";
					omniLinkCallCustomPageAndAction(this, 'FBConnect_click', customPageName);
				});
				
				//Bind the submission to this.
				elOffer.find('.offerPrompt').click(function(){
					theOffer.submitEmailForm(this, thisOffer);
					return false;
				});
				
			}else{
				//Track clicks
				elOffer.find('.offerPrompt').click(function(){
					omniLinkCallCustomPageAndAction(this, 'AcceptOffer_click', customPageName);
				});
				
				if(this.offers[i].linkType == "externalLink"){
					elOffer.find('.offerPrompt').click(function(){
						window.open(thisOffer.clickThruURL, '_blank');
						return false;
					});
				}
			}
			
			// Add this element to the list.
			this.offerList.append(elOffer);
			
			//Add to the mappings between offerID and index.
			this.offerIndex[this.offers[i].id] = i;
		}
		
		
		// Reload the scroller.
		this.scroller.reload();
		this.onBeforeSeek(null,0);
		this.currentOffer = null;
	};
	
	EA.Offer.prototype.onBeforeSeek = function (event, nextIndex) {
		// Track the page view.
		if(mediaPlayer.offerVisible){
			if(mediaPlayer.offer.offers[nextIndex]){
				var offer = mediaPlayer.offer.offers[nextIndex];
				setTimeout((function(){
					var customPageName;
					
					if(offer.omnitag && offer.omnitag != ""){
						customPageName = offer.omnitag.toUpperCase();
					}else{
						customPageName = offer.id;
					}
					
					if(this.FBConnected){
						customPageName += "FBLOGGEDIN";
					}
					
					customPageNameAndReset(customPageName);
				}).bindTo(this), 0);
			}
		}
//		// Get the next title.
//		var nextOfferTitle = this.scroller.getItemWrap().find('DT').eq(nextIndex);
//		
//		// Clone the existing title and fade it out.
//		var oldTitle = this.title.clone(false);
//		oldTitle.css({"opacity":0.8});
//		oldTitle.appendTo(this.container);
//		oldTitle.animate({"opacity":0, "top":"+=10px"}, 400,function(){oldTitle.remove(); });
//		
//		// Fade in the new title.
//		this.title.css({"opacity":0});
//		this.title.html(nextOfferTitle.html());
//		this.title.animate({"opacity":1});
	};
	
	EA.Offer.prototype.showOffer = function (offerID) {
		//Go to that offer.
		if(this.offerIndex[offerID]){
			
			if(this.scroller.getIndex() == this.offerIndex[offerID]){
				//No need to scroll. But, do we need to fire off a page?
				this.onBeforeSeek(null, this.scroller.getIndex());
			}else{
				this.scroller.seekTo(this.offerIndex[offerID]);
			}
			
			this.currentOffer = offerID;
			
			return true;
		}else{
			return false;
		}
	};
	
	EA.Offer.prototype.submitEmailForm = function (elLink, offer) {
		// Track the click.
		var customPageName;
		if(offer.omnitag && offer.omnitag != ""){
			customPageName = offer.omnitag.toUpperCase();
		}else{
			customPageName = offer.id;
		}
		
		// Check the login form.
		var offerLI = this.offerList.find('LI').eq(this.offerIndex[offer.id]);
		var filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
		var email;
		
		if(this.FBConnected){
			// Use the facebook email.
			email = this.FBEmail;
			
			
		}else{
			// Use it from the form.
			var email = offerLI.find('.imgFormTxtBox').val();	

			$.cookie(
				"deadspace_email",
				email,
				{ 'expires': 365 }
			);
		}
		
		var filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
		if (!filter.test(email)) {
			this.showErrorForm("Please enter a valid email address.", offerLI);
			return false;
		}

		var disclaimer = offerLI.find('.disclaimer:checked').val();
		if(!disclaimer){
			this.showErrorForm("You need to opt-in to receive this content.", offerLI);
			return false;
		}
		
		if(this.FBConnected){
			setTimeout(function(){
				omniLinkCallCustomPageAndAction(elLink, 'AcceptOffer_click', customPageName+"FBLOGGEDIN");
			});
		}else{
			setTimeout(function(){
				omniLinkCallCustomPageAndAction(elLink, 'AcceptOffer_click', customPageName);
			});
		}
		
		
		//If we're here, we've made it through the tests.
		this.showThanksArea(email, offer, offerLI, customPageName);
		return false;
	};
	
	EA.Offer.prototype.showErrorForm = function (error, offerLI) {
		// Fade in error form.
		clearTimeout(this.errorFormTimeout);
		offerLI.find('.errorTxt').html(error).stop().animate({'opacity':1}, 'fast');
		this.errorFormTimeout = setTimeout(function(){
			offerLI.find('.errorTxt').animate({'opacity':0}, 1000);
		},2000);
	};
	
	EA.Offer.prototype.hideErrorForm = function () {
		// Fade out error form
		this.errorForm.fadeOut();
		return false;
	};
	
	EA.Offer.prototype.showThanksArea = function (email, offer, offerLI, customPageName) {
		// Grab the email from the textbox - temporary.
		//var email = offerLI.find('.imgFormTxtBox').val();	
		
		// Get the DOB from the Age Gate cookie.
		var DOB = ageGate.getCookieData()
		
		// Set some URLs.
		var emailTriggerURL = '/en_US/emailasset!index';
		var newsletterURL = '/en_US/newssub!index';
		var userURL = '/en_US/users!index';
		
		// Hide the offer area...
		offerLI.find('.offerDisplayArea').fadeOut('slow', function(){
			// Show the thanks area.
			offerLI.find('.offerThanksArea').fadeIn();
		});
		
		// pref center fix start
		var country = "";
		
		if (DOB.territory == "USA" || DOB.territory == null){
			country = "US";
		}else{
			country = DOB.territory;
		}
		// pref center fix end
			
		// Newsletter signup call.
		$.post(newsletterURL, 
				{
					'emailAddress': email,
					'country': country,
					'year': DOB.year,
					'month': (DOB.month < 10 ? '0'+DOB.month : DOB.month),
					'day': (DOB.day < 10 ? '0'+DOB.day : DOB.day),
					'optin': true,
					'requestorId': 'deadspacecom'
				},
				
				function(data, status, xhr){
					
				},
			
			'json');
		
		// Email Trigger
		$.post(emailTriggerURL, 
			{
				'emailAddress': email,
				'subject': offer.emailTriggerSubject,
				'imageSrcPath': offer.emailTriggerImageSrc,
				'imageLinkUrl': offer.clickThruURL,
				'secondaryLinkUrl': offer.emailTriggerWebImage,
				'purpose': offer.emailTriggerPurposeID,
				'ctaText': offer.emailTriggerCTAText
			},
			
			function(data, status, xhr){
				
			},
		
		'json');
		
		
		// User - try inserting first.
		$.post(userURL, 
			{
				'email': email,
				'type': 'insert',
				'newsletter': 'true',
				'country': country,
				'dobYear': DOB.year,
				'dobMonth': (DOB.month < 10 ? '0'+DOB.month : DOB.month),
				'dobDay': (DOB.day < 10 ? '0'+DOB.day : DOB.day)
			},
			
			function(data, status, xhr){
				// We're good unless it failed - then we need to update it.
				if(data.response[0] && data.response[0].code == "USER ALREADY EXISTS"){
					$.post(userURL, 
						{
							'email': email,
							'type': 'update',
							'newsletter': 'true',
							'country': country,
							'dobYear': DOB.year,
							'dobMonth': (DOB.month < 10 ? '0'+DOB.month : DOB.month),
							'dobDay': (DOB.day < 10 ? '0'+DOB.day : DOB.day)
						},
						
						function(updateData, updateStatus, updateXhr){
							
						},
					'json');
				}
				
				// Post that the offer was accepted, regardless.
				$.post(userURL, 
					{
						'email': email,
						'type': 'setoffer',
						'offerName': offer.id,
						'completed': "true"
					},
					
					function(data, status, xhr){
						
					},
				'json');
			},
		
		'json');
		
		//Track the success.
		customPageNameAndReset(customPageName+"SUCCESS");
	};
	
	EA.Offer.prototype.showOfferNav = function () {
		this.nav.fadeIn();
	};
	
	EA.Offer.prototype.hideOfferNav = function () {
		this.nav.fadeOut();
	};
	
}else{
	throw new Error('Could not define the Offer because the EA namespace is not defined.');
}
if(EA) {	
	
	EA.MediaPlayer = function (container) {
		this.container = $(container);
		this.mediaContainer = this.container.find('.MediaContainer');
		
		this.offerContainer = this.container.find('.offer');
		this.offer = new EA.Offer(this.offerContainer);
		this.offerVisible = false;
		
		this.playerOverlay = $(container).overlay({
            "api":true,
            "closeOnClick":false,
            "closeOnEsc": false,
            "expose":{color:'#000', opacity: 0.75, 'loadSpeed':1000, 'zIndex':9999},
            "onBeforeLoad": this.beforeShow.bindTo(this),
            "onBeforeClose": this.cleanUp.bindTo(this),
            "oneInstance": false
        });
        
		/*
		 * Video comments
		 */
		
		// Grab the comments container. This contains the tab and view/post comment area.
		this.commentsContainer = this.container.find('.commentTabDisplay');
		this.commentsContainerVisible = false;
		
		// Grab and set up the comment pane - this is the view/post comment area
		this.commentPane = this.container.find('.commentPane');
		this.commentPaneVisible = false;
		
		// Set up the tab to hide/show the comment pane.
		this.container.find('#commlink').click((function(){
			if(this.commentPaneVisible){
				// Hide
				this.commentPane.stop().animate({'top': -this.commentPane.height()+"px"});
			}else{
				// Show
				this.commentPane.stop().animate({'top': "0px"});
			}
			this.commentPaneVisible = !this.commentPaneVisible;
			return false;
		}).bindTo(this));
		
		// Set up event handlers for the "Add Comment"/"Post Comment" button.
		$('#postlink').click((function(){
			if(this.isPosting){
				// Post to facebook.
				this.postFacebookComment();
				
				// Hide the form.
				this.hideCommentForm();
			}else{
				// Show the post form.
				this.showCommentForm();
			}
			
			//Prevent the action from doing anything.
			$("#postlink").blur();
			return false;
			
		}).bindTo(this));
		
		// Set up a callback for when facebook gets connnected.
		// This is triggered when the bootstrap function is done.
		$("BODY").bind("facebook_ready", (function(){
			// If a callback has already been registered
			// (via this.waitForFacebookConnect()) then call it.
			if(this.fbConnectCallback) {
				this.fbConnectCallback();
			}
			// Note that we're connected.
			this.isFacebookConnected = true;
		}).bindTo(this));
		
		/*
		 * Wallpapers setup.
		 */
		this.wallpaperTabs = this.container.find('.downloadTabs');
		this.wallpaperTabsVisible = false;
		this.wallpaperScrollable = this.container.scrollable({
			'items': '.wallpaperContainer DL',
			'item': 'DT',
			'size': 1,
			'api': true,
			'onBeforeSeek': this.setWallpaperLinks.bindTo(this)
		});
		this.container.find('.wallpaperContainer, .offerLeftArrow, .offerRightArrow').mouseover(function(){
			$('.offerLeftArrow, .offerRightArrow').stop().animate({'opacity': 1});
		}).mouseleave(function(){
			$('.offerLeftArrow, .offerRightArrow').stop().animate({'opacity': 0.5});
		});
		
		// Grab and set up the buy now pane.
		this.buyTab = this.container.find('.buynowTab');
		
	};
	
	EA.MediaPlayer.prototype.cleanUp = function () {
		//Show the flash nav temporarily.
		beatManager.showBeatNav();
		
		/*
	     * SWF UI initialization
	     * 
	     * This must come first!
	     */
        this.container.find('#swf').empty().hide();
		this.mediaContainer.css('width', 656);
		this.mediaContainer.find('.close').css('left', 656);
		
		/*
		 * Video Carousel UI initialization
		 * 
		 * This must come after the SWF UI initialization.
		 * 
		 */
		$('#video').removeAttr("style");
		
		/*
		 * Video UI initialization
		 * 
		 * This must come after the Video Carousel UI initialization!
		 */
		this.mediaContainer.find('.background').css({left: 0, top:0, width:"auto", height:"auto" });
		// Hide the offer container by moving it beneath the video player.
		var MediaPlayerWidth = this.container.width();
		var MediaPlayerHeight = this.container.height();
        var MediaContainerWidth = parseInt(this.mediaContainer.css('width'));
        var OfferWidth = parseInt(this.offerContainer.css('width'));

        var MediaPlayerLeft = (MediaPlayerWidth - MediaContainerWidth)/2;
        var OfferLeft = MediaPlayerLeft + MediaContainerWidth - OfferWidth;
        
        this.mediaContainer.css({'top':'0px', 'left': MediaPlayerLeft});
        this.offerContainer.css({'top':'0px', 'left': OfferLeft});
        this.offerVisible = false;
        
        // Hide the comment pane.
    	var commentPaneHeight = parseInt(this.commentPane.css('height'));
        this.commentPane.css({'top': -commentPaneHeight+"px"});
        this.commentPaneVisible = false;
        
        // Hide the entire video comment section.
        var commentsContainerHeight = parseInt(this.commentsContainer.css('height'));
        this.commentsContainer.css({'top': MediaPlayerHeight-commentsContainerHeight+"px", "display":"none"});
        this.commentsContainerVisible = false;
        this.hideCommentForm();
        this.isPosting = false;
        
        // Empty and the video layer.
	    $('#video').empty().hide();
        
	    /*
	     * Wallpaper UI initialization
	     * 
	     * This must come after the SWF UI initialization!
	     */
	    // Hide the download tabs.
        var wallpaperTabsHeight = parseInt(this.wallpaperTabs.css('height'));
        this.wallpaperTabs.css({'top': MediaPlayerHeight-wallpaperTabsHeight+"px"});
        this.wallpaperTabsVisible = false;
        // Hide the wallpaper container and arrows
        this.container.find('.wallpaperContainer, .offerLeftArrow, .offerRightArrow').hide();
        // Hide the arrows.
        this.wallpaperTabs.hide();
        this.buyTab.hide().css('top',0);
	};
	
	EA.MediaPlayer.prototype.beforeShow = function () {
		
		//Clean up the player area.
        this.cleanUp();
        
        // Hide the flash nav temporarily.
        beatManager.hideBeatNav();
        
        //Initialize the player.
        this.initializePlayer();
        
        return true;
	};
	
	EA.MediaPlayer.prototype.initializePlayer = function () {
		/*
         * We're done. Determine how to initialize the player.
         */
        
        switch(this.mediaItem.type){
			case "video":
					this.initVideo();
				break;
			case "video-carousel":
				this.initVideoCarousel();
				break;
			case "images":
				this.initImage();
			break;
			
			case "wallpapers":
					this.initWallpaper();
				break;
				
			case "swfs":
					this.initSWF();
				break;
		}
	};
	
	EA.MediaPlayer.prototype.hide = function () {
		this.open = false;
		this.playerOverlay.close()
	};
	
	EA.MediaPlayer.prototype.show = function (mediaItem, homeURL) {
		// Track the page.
		// Wallpapers ("wallpapers") are tracked slightly separately.
		if(mediaItem.type != "wallpapers" && mediaItem.type != "video-carousel"){
			setTimeout(function(){
				var customPageName;
				
				if(mediaItem.omnitag && mediaItem.omnitag != ""){
					customPageName = mediaItem.omnitag.toUpperCase();
				}else{
					customPageName = mediaItem.id;
				}
				
				if(mediaOverlay.isOpened()){
					mediaOverlay.trackPage(customPageName);
				}else{
					customPageNameAndReset(customPageName);
				}
				
			}, 1);
		}
		
		//Set the close button's url.
		if(homeURL == undefined){
    		homeURL = "#";
		}
		this.container.find('.close').attr('href', homeURL);
		
		// Show the media item.
		if(this.open){
			this.changeTo(mediaItem);
		}else{
			this.mediaItem = mediaItem;
			
			this.playerOverlay.load();
			this.container.css('z-index', 10000);
			this.open = true;
		}
	};
	
	/**
	 * Changes the displayed media item.
	 */
	EA.MediaPlayer.prototype.changeTo = function (mediaItem) {
		/*
		 * When changing to another media item, the view is reset (elegantly) and then
		 * the new item is initialized.
		 */
		var MediaPlayerHeight = this.container.height();
		var transitionSpeed = 600;
		 
		/*
		 * For video, we need to:
		 *  
		 * 1. Fade out the swf.
		 * 2. Slide up the comment box, then hide it.
		 */
		this.container.find('#video').stop().fadeOut(transitionSpeed);
		
		this.commentPane.css({'top': -this.commentPane.height()+"px"});
        this.commentPaneVisible = false;
        
		var commentsContainerHeight = parseInt(this.commentsContainer.css('height'));
		this.commentsContainer.stop().css("display", "block").animate({'top': MediaPlayerHeight-commentsContainerHeight+"px"}, transitionSpeed);
		this.commentsContainerVisible = false;

		/*
		 * For wallpapers, we need to:
		 * 
		 * 1. Fade out the wallpaper area.
		 * 2. Slide up the download tabs.
		 */
		$('.wallpaperContainer, .offerLeftArrow, .offerRightArrow').stop().animate({'opacity':0}, function(){
			$('.wallpaperContainer, .offerLeftArrow, .offerRightArrow').hide();
		});
		this.wallpaperTabs.stop().animate({'top': MediaPlayerHeight-this.wallpaperTabs.height()+"px"}, transitionSpeed);
		
		
		/*
		 * For SWF, we need to:
		 *  
		 * 1. Fade out the swf.
		 * 2. Revert the width to 656. This also means adjusting the position of the offer box.
		 */
		this.container.find('#swf').stop().fadeOut(transitionSpeed);
		this.mediaContainer.css('width', 656);
		
		// Hide the offers for any transition.
		this.hideOffer();
		
		//Now, trigger a callback to initialize the player.
		clearTimeout(this.changeTimeout);
		this.changeTimeout = setTimeout( (function () {
			this.mediaItem = mediaItem;
			this.initializePlayer();
		}).bindTo(this), transitionSpeed+100); 
	};
	
	EA.MediaPlayer.prototype.initSWF = function () {
		this.mediaItem.width = parseInt(this.mediaItem.width);
		this.mediaItem.height = parseInt(this.mediaItem.height);
		
		$('#swf').empty().append('<div id="swf_replace"></div>');
		
		swfobject.embedSWF(
			this.mediaItem.fileURI,	// swf URL
			'swf_replace',			// containing element ID
			this.mediaItem.width,	// width
			this.mediaItem.height,	// height
			'9',				// version
			'http://static.flowplayer.org/swf/expressinstall.swf', //express install url
			
			//flashvars
			{}, 
			
			//params
			{
				'wmode': 'opaque',
		    	'allowfullscreen': 'true',
		        'allowscriptaccess': 'always',
		        'bgcolor': '#000000'
			},
			
			{}, //element attributes
			function(e){
				if(e && !e.success){
					$('#swf_replace').replaceWith("<div id=\"swf_replace\">Sorry, it seems you can't view this content. Try installing Adobe Flash Player here: <a href=\"http://get.adobe.com/flashplayer/\">http://get.adobe.com/flashplayer/</a></div>");
				}
			}
		);
		
		this.mediaContainer.find('.close').css('left', this.mediaItem.width);
		
		this.mediaContainer.css('width', this.mediaItem.width);
		this.mediaContainer.css('left', 0);
		
		/*
		 * Offer Container initialization
		 * 
		 * Because the swf may have an unusual size, the offer box needs to be adjusted.
		 */
		// Hide the offer container by moving it beneath the video player.
		var MediaPlayerWidth = this.container.width();
        var OfferWidth = parseInt(this.offerContainer.css('width'));

        var MediaPlayerLeft = (MediaPlayerWidth - this.mediaItem.width)/2;
        var OfferLeft = MediaPlayerLeft + this.mediaItem.width - OfferWidth;
        
        this.mediaContainer.css({'top':'0px', 'left': MediaPlayerLeft});
        this.offerContainer.css({'top':'0px', 'left': OfferLeft});
        
        this.container.find('#swf').stop().css({'display': 'block', 'opacity':0}).animate({"opacity": 1});
		if(this.offer.offers.length >0){
			this.showOffer(this.offer.offers[0].id);
			this.showOfferNav();
		}
	}
	
	EA.MediaPlayer.prototype.initImage = function () {
		// Build list HTML.
		var listHTML = '';
		var seekIndex = 0;
		
		if(this.mediaItem.images){
			for(var i in this.mediaItem.images){
				var img = this.mediaItem.images[i];
				listHTML += '<dt><img src="'+img.previewImage+'"></dt>';
				
				if(this.mediaItem.images[i].id == this.mediaItem.id){
					seekIndex = i;
				}
			}
		}else{
			listHTML += '<dt><img src="'+this.mediaItem.previewImage+'"></dt>';
		}
		
		// Set the HTML.
		this.container.find('.wallpaperContainer DL').html(listHTML);
		
		// Reload the scrollable and set up the download tabs.
		this.wallpaperScrollable.reload();
		setTimeout((function(){
			this.wallpaperScrollable.seekTo(seekIndex);
		}).bindTo(this), 500);
		
		// Show the components.
		$('.wallpaperContainer').stop().css({'display': 'block', 'opacity':0}).animate({"opacity": 1});
		
		if(this.mediaItem.images && this.mediaItem.images.length > 1){
			$('.offerLeftArrow, .offerRightArrow').stop().css({'display': 'block', 'opacity':0}).animate({"opacity": 1});
		}else{
			$('.offerLeftArrow, .offerRightArrow').stop().fadeOut();
		}
		
		// If the "purchase link" isn't empty, mess with the tab and show it.
		if(this.mediaItem.purchaseLink && this.mediaItem.purchaseLink.length){
			var MediaPlayerHeight = this.container.height();
			var mediaItem = this.mediaItem;
			
			this.buyTab.find('a').attr('href', this.mediaItem.purchaseLink);
			if(this.mediaItem.cta && this.mediaItem.cta.length){
				this.buyTab.find('a').html(this.mediaItem.cta);
			}else{
				this.buyTab.find('a').html('Buy Now!');
			}
			
			this.buyTab.find('a').unbind('click').click(function(){
				var customPageName;

				if(mediaItem.omnitag && mediaItem.omnitag != ""){
					customPageName = mediaItem.omnitag.toUpperCase();
					
				}else{
	    			customPageName = mediaItem.id;
	    		}
				omniLinkCallCustomPageAndAction(this, 'Buynow_click', customPageName);
				
				return true;
			});
			
			this.buyTab.stop().css({'display': 'block', 'opacity':0, 'left': 0}).animate({'top': MediaPlayerHeight+"px", "opacity":1}, 2000);
			
		}
		
		if(this.offer.offers.length >0){
			this.showOffer(this.offer.offers[0].id);
			this.showOfferNav();
		}
	};
	
	EA.MediaPlayer.prototype.initWallpaper = function () {		
		// Build list HTML.
		var listHTML = '';
		var seekIndex = 0;
		for(var i in this.mediaItem.images){
			var img = this.mediaItem.images[i];
			listHTML += '<dt><img src="'+img.previewImage+'"></dt>';
			
			if(this.mediaItem.images[i].id == this.mediaItem.id){
				seekIndex = i;
			}
		}
		
		// Set the HTML.
		this.container.find('.wallpaperContainer DL').html(listHTML);
		
		// Reload the scrollable and set up the download tabs.
		this.wallpaperScrollable.reload();
		setTimeout((function(){
			this.wallpaperScrollable.seekTo(seekIndex);
		}).bindTo(this), 500);
		
		this.setWallpaperLinks({}, 0);
		
		// Show the components.
		$('.wallpaperContainer').stop().css({'display': 'block', 'opacity':0}).animate({"opacity": 1});
		
		if(this.mediaItem.images.length > 1){
			$('.offerLeftArrow, .offerRightArrow').stop().css({'display': 'block', 'opacity':0}).animate({"opacity": 1});
		}else{
			$('.offerLeftArrow, .offerRightArrow').stop().fadeOut();
		}
		
		this.wallpaperTabs.stop().css({'display': 'block', 'opacity':0}).animate({"opacity": 1});
		if(this.offer.offers.length > 0){
			this.showOffer(this.offer.offers[0].id);
			this.showOfferNav();
		}
		var MediaPlayerHeight = this.container.height();
		this.wallpaperTabs.stop().animate({'top': MediaPlayerHeight+"px", "opacity":1}, 1000);
		
		
	};
	
	EA.MediaPlayer.prototype.setWallpaperLinks = function (event, nextIndex) {
		
		if(this.mediaItem.images == undefined)
			return true;
		
		//Track that the wallpaper was displayed
		nextIndex = parseInt(nextIndex, 10);
		
		var wallpaperItem = this.mediaItem.images[nextIndex];
		var customPageName;
		if(wallpaperItem.omnitag && wallpaperItem.omnitag != ""){
			customPageName = wallpaperItem.omnitag.toUpperCase();
		}else{
			customPageName = wallpaperItem.id;
		}
		
		setTimeout(function(){
			if(mediaOverlay.isOpened()){
				mediaOverlay.trackPage(customPageName);
			}else{
				customPageNameAndReset(customPageName);
			}
		}, 1);
		
		// When the scrollable changes items, we change the download URL as well.
		var image = this.mediaItem.images[nextIndex];
		
		if(image.downloadHD){
			this.wallpaperTabs.find('.downloadHD A').attr('href', image.downloadHD).unbind('click').click(function(){
				omniLinkCallCustomPageAndAction(this, 'Widescreen_click', customPageName);
			});
		}
		
		if(image.downloadStandard){
			this.wallpaperTabs.find('.downloadStandard A').attr('href', image.downloadStandard).unbind('click').click(function(){
				omniLinkCallCustomPageAndAction(this, 'Standard_click', customPageName);
			});
		}
		
		if(image.downloadiPhone){
			this.wallpaperTabs.find('.downloadiPhone A').attr('href', image.downloadiPhone).unbind('click').click(function(){
				omniLinkCallCustomPageAndAction(this, 'iPhone_click', customPageName);
			});
		}
	};
	
	EA.MediaPlayer.prototype.initVideo = function () {
		/*
		 * There's three things to do when setting up the MediaPlayer for video:
		 * 
		 * 1. Show the video comment area and other components.
		 * 2. Fetch Facebook data.
		 * 3. Embed the videoPlayer swf.
		 * 
		 */
		// 1. Show the video comment area and other components.
		// Animate the video comment section to drop down.
		var MediaPlayerHeight = this.container.height();
		this.commentsContainer.stop().css({'display': 'block', 'opacity':0, 'left': 0}).animate({'top': MediaPlayerHeight+"px", "opacity":1}, 2000);
		
		//2. Fetch Facebook data.
		this.getComments(this.mediaItem.facebookObjectId);

	    // 3. Embed the video.
	    $('#video').empty().append('<div id="video_replace"></div>');
	    swfobject.embedSWF(
	    	EA.videoPlayerURL,	// swf URL
			'video_replace',					// containing element ID
			'656',								// width
			'378',								// height
			'9',								// version
			'http://static.flowplayer.org/swf/expressinstall.swf', //express install url
			
			//flashvars
			{
		    	'debug': '0',
		    	'disableFlagged': 'true',
		    	'minage':'18',
		    	'matureContent':'0',
		    	'autoplay':'true',
		    	'configFile': this.mediaItem.xmlURL,
		    	'epItemDelay':'3000',
		    	'loopVideo': 'false',
		        'textColor':'#ffffff',
		        'btnOutColor': '#ffffff',
		        'btnOverColor': '#2d83f7',
		        'btnDownColor': '#155eca',
		        'controlsBGColor':'#000000',
		        'server':'http://www.ea.com/',
		        'infoLineXML':'http://www.ea.com/studio/videoSEO',
		        'locale':'http://www.ea.com/studio/videoLocale'
	        }, 
			
			//params
			{
				'wmode': 'opaque',
		    	'allowfullscreen': 'true',
		        'allowscriptaccess': 'always',
		        'bgcolor': '#000000'
			},
			
			{
				'class': 'EAVideoPlayer'
			}, //element attributes
			function(e){
				if(e && !e.success){
					$('#video_replace').replaceWith("<div id=\"video_replace\">Sorry, it seems you can't view this content. Try installing Adobe Flash Player here: <a href=\"http://get.adobe.com/flashplayer/\">http://get.adobe.com/flashplayer/</a></div>");
				}
			}
		);
	    
	    // Show the video swf area.
		$('#video').css({'display': 'block', 'opacity':0}).animate({"opacity": 1});
	};
	
	EA.MediaPlayer.prototype.initVideoCarousel = function () {
		/*
		 * There's three things to do when setting up the MediaPlayer for video:
		 * 
		 * 1. Show the video comment area and other components.
		 * 2. Fetch Facebook data.
		 * 3. Embed the videoPlayer swf.
		 * 
		 */
		// 1. Show the video comment area and other components.
		// Animate the video comment section to drop down.
		var MediaPlayerHeight = 530;
		this.commentsContainer.stop().css({'display': 'block', 'opacity':0, 'left':46}).animate({'top': MediaPlayerHeight+"px", "opacity":1}, 2000);
		this.mediaContainer.find('.background').css({left: 45, top:0, height:372, width:658 });
		
		// 2. Fetch Facebook data.
		var video_id = this.mediaItem.facebookObjectId;
		var video_url = 'http://www.facebook.com/video/video.php?v=' + video_id; 
		// set up all the links
		$('#videolink')[0].href = video_url;
		$('#likeslink')[0].href = video_url;
		$('#commlink')[0].href = video_url;
		
		//this.waitForFacebookConnect(function () {
		// uncomment this when FB likes freakin work again	FBManager.getLikes($('#likescount')[0],video_id);
	//	});
	    FBManager.getCachedComments($('.displayArea'),$('#postername'),$('#commentnum'),video_id); 

	    // 3. Embed the video.
	    $('#video').empty().append('<div id="video_replace"></div>').css('top', -8);
	    swfobject.embedSWF(
	    	EA.videoCarouselURL,	// swf URL
			'video_replace',					// containing element ID
			'770',								// width
			'545',								// height
			'9',								// version
			'http://static.flowplayer.org/swf/expressinstall.swf', //express install url
			
			//flashvars
			{
		    	'debug': '0',
		    	'disableFlagged': 'true',
		    	'minage':'18',
		    	'matureContent':'0',
		    	'autoplay':'true',
		    	'configFile': this.mediaItem.xmlURL,
		    	'epItemDelay':'3000',
		    	'loopVideo': 'false',
		        'textColor':'#ffffff',
		        'btnOutColor': '#ffffff',
		        'btnOverColor': '#2d83f7',
		        'btnDownColor': '#155eca',
		        'controlsBGColor':'#000000',
		        'server':'http://www.ea.com/',
		        'infoLineXML':'http://www.ea.com/studio/videoSEO',
		        'locale':'http://www.ea.com/studio/videoLocale'
	        }, 
			
			//params
			{
				'wmode': 'transparent',
		    	'allowfullscreen': 'true',
		        'allowscriptaccess': 'always'
			},
			
			{
				'class': 'EAVideoPlayer'
			}, //element attributes
			function(e){
				if(e && !e.success){
					$('#video_replace').replaceWith("<div id=\"video_replace\">Sorry, it seems you can't view this content. Try installing Adobe Flash Player here: <a href=\"http://get.adobe.com/flashplayer/\">http://get.adobe.com/flashplayer/</a></div>");
				}
			}
		);
	    
	    // 4. Fix the position of the close button and container.
	    this.mediaContainer.find('.close').css('left', 703);
		this.mediaContainer.css({'width': 703, 'left':0});
	    
		// 5. Fix the position of the offers
		// Hide the offer container by moving it beneath the video player.
		var MediaPlayerWidth = this.container.width();
        var OfferWidth = parseInt(this.offerContainer.css('width'));

        var MediaPlayerLeft = (MediaPlayerWidth - 770)/2;
        var OfferLeft = MediaPlayerLeft + 703 - OfferWidth;
        
        this.mediaContainer.css({'top':'0px', 'left': MediaPlayerLeft});
        this.offerContainer.css({'top':'0px', 'left': OfferLeft});
		
	    // Show the video swf area.
		$('#video').css({'display': 'block', 'opacity':0, 'width':770, 'height': 545, 'border':'none'}).animate({"opacity": 1});
	};
	
	EA.MediaPlayer.prototype.onVideoChange = function (video_id, omnitag) {
		this.getComments(video_id);
		
		setTimeout(function(){
			var customPageName;
			
			if(omnitag && omnitag != ""){
				customPageName = omnitag.toUpperCase();
				
				if(mediaOverlay.isOpened()){
					mediaOverlay.trackPage(customPageName);
				}else{
					customPageNameAndReset(customPageName);
				}
			}
		}, 1);
	}
	
	/**
	 * Fetches comments from Facebook
	 */
	EA.MediaPlayer.prototype.getComments = function (video_id) {
		// 2. Fetch Facebook data.
		if(video_id && video_id != ""){
			var video_url = 'http://www.facebook.com/video/video.php?v=' + video_id; 
			// set up all the links
			$('#videolink')[0].href = video_url;
			$('#likeslink')[0].href = video_url;
			$('#commlink')[0].href = video_url;
			
			//this.waitForFacebookConnect(function () {
			// uncomment this when FB likes freakin work again	FBManager.getLikes($('#likescount')[0],video_id);
		//	});
		    FBManager.getCachedComments($('.displayArea'),$('#postername'),$('#commentnum'),video_id); 
		}	
	}
	
	/**
	 * Shows the comment form textbox, hides the latest comment, and changes the "Add" button to "Post".
	 */
	EA.MediaPlayer.prototype.showCommentForm = function () {
		// Change the post button.
		$("#comment").val("");
		$("#postlink IMG").attr('src', 'images/button-post-comment.jpg').attr('alt', 'post comment');
		
		//Hide the message, and display the textbox.
		$('.commentArea').hide();
		$('.postArea').show();
		
		// Note that we're in posting mode.
		this.isPosting = true;
	};
	
	/**
	 * Fake out showing a user's posted comment
	 */
	EA.MediaPlayer.prototype.ShowUserComment= function (comment) {
		 var textelem = $('.displayArea');
		 var personelem = $('#postername');
		 var numelem = $('#commentnum');
		 textelem.html('<span class="your_comment">"' + comment + '"</span>');
		 personelem.html('<fb:name uid="loggedinuser" linked="true">Facebook User</fb:name>');
		 FB.XFBML.parse(document.getElementById('postername'));
	     personelem.fadeIn('slow',function(){});
		 textelem.fadeIn('slow',function(){});
		 var newDate = new Date();
		 var m_names = new Array("January", "February", "March", 
		"April", "May", "June", "July", "August", "September", 
		"October", "November", "December");
		 $('#commentdate').html(m_names[newDate.getMonth()] + ' ' + newDate.getDate() + ', ' + newDate.getFullYear());
		clearTimeout(this.commentPostedTimeout);
		this.commentPostedTimeout = setTimeout(function(){
			$('#comment_posted').stop().animate({'opacity':0}, 3000);
		}, 2000);

		$('#comment_posted').stop().html('Your comment was posted. Thank you.').animate({'opacity':1});
	}
		
	/**
	 * Re-Shows the comment form textbox, hides the latest comment, and changes the "Add" button to "Post".
	 */
	EA.MediaPlayer.prototype.reShowCommentForm = function (errorMsg) {
		clearTimeout(this.commentErrorTimeout);
		this.commentErrorTimeout = setTimeout(function(){
			$('#comment_error').stop().animate({'opacity':0}, 3000);
		}, 2000);
		
		$('#comment_error').stop().html(errorMsg).animate({'opacity':1});
		
		// Change the post button.
		$("#postlink IMG").attr('src', 'images/button-post-comment.jpg').attr('alt', 'post comment');
		
		//Hide the message, and display the textbox.
		$('.commentArea').hide();
		$('.postArea').show();
		
		// Note that we're in posting mode.
		this.isPosting = true;
	};
	
	/**
	 * Hides the comment form textbox, displays the latest comment, and changes the "Post" button to "Add".
	 */
	EA.MediaPlayer.prototype.hideCommentForm = function () {
		// Change the post button.
		$("#postlink IMG").attr('src', 'images/button-add-comment.jpg').attr('alt', 'add comment');
		
		//Hide the textbox, and display the message.
		$('.postArea').hide();
		$('.commentArea').show();
		
		// Note that we're in posting mode.
		this.isPosting = false;
	};
	
	/**
	 * Posts the text in the comment textbox to the current video on Facebook.
	 * 
	 * The video_id is to be taken from this.mediaItem.facebookID. For now, we default to '1384161211719'.
	 * If the comment form is blank, the form is simply hidden - in the case the user didn't mean or doesn't
	 * want to post anything. Otherwise, the user is taken through a connect flow (if needed) and the post
	 * is submitted.
	 */
	EA.MediaPlayer.prototype.postFacebookComment = function () {
		//var video_id = '1384161211719'; // don't post comments to live page, erk. Comments will appear here: 
		// http://www.facebook.com/#!/pages/Shiny-Things/375016674369
		var video_id = this.mediaItem.facebookObjectId; // for beta/prod/UAT only.
		
		
		// Get the "hideCommentForm" function bound to this MediaPlayer instance.
		// This is so we can call the function at a later time and in a different context,
		// (such as a facebook callback function) but the scope will be locked in.
		var hideCommentFormFunction = this.hideCommentForm.bindTo(this);
		var reShowCommentFormFunction = this.reShowCommentForm.bindTo(this);
		var ShowUserCommentFunction = this.ShowUserComment.bindTo(this);
		// Is the comment field non-empty?
		if($('#comment').val()) {
		// We have a comment! Do we have a connection session?
	    FB.getLoginStatus(function(response) {
			if(!response.session) { // no session. force a login, check perms, post comment if all worked ok.
				FB.login(function(response) {
					
			  		if (response.session) {
			    		if (response.perms && response.perms.indexOf('publish_stream')) {
				    		var session = FB.getSession();
							// now check if they like the page
									var ulike = false;
								    FB.api('/me/likes', function(result) {
								        var dsPageId = '18523496658';
										for(var x=0; x< result.data.length; x++){
											if(result.data[x].id == dsPageId) {
												ulike = true;
											}
										}
									if(ulike == false) {
										reShowCommentFormFunction('To comment, become part of the Dead Space community! Just click the “Like” button below.');	
									} else {
										FB.api(
								  			{
								    			'method': 'Comments.add',
												'object_id': video_id,
												'text': $('#comment').val(),
												'session_key': response.session.session_key
								  			},
								  			function(response) {
												if(response.error_msg) {
													reShowCommentFormFunction('Unable to post comment. Please try again.');
												} else {
													ShowUserCommentFunction($('#comment').val());
													//reShowCommentFormFunction('Comment Posted. Thank You.');
												}								
								  			}); // end call to fb.api for comment post
					         	   } // end else they are a fan
								}); // end call to fb.api for likes
					
			    			} 
			  			} 
				}, {perms:'publish_stream'});
		} else { // have a session, check perms
			FB.api(
	        {
	          method : 'Users.hasAppPermission',
	          ext_perm : 'publish_stream'
	        },
	        function(response) { 
	          if(!response || (response && response != 1)) { // we have no perms, force the perms dialog, then post
				FB.login(function(response) {
					if (response.session) {
						var session = FB.getSession();
				       // now check if they like the page
					    FB.api('/me/likes', function(result) {
					        var dsPageId = '18523496658';
					        var ulike = false;
							for(var x=0; x< result.data.length; x++){
								if(result.data[x].id == dsPageId) {
									ulike = true;
								}
							}
						// well, do they?
						if(ulike == false) {
							reShowCommentFormFunction('To comment, become part of the Dead Space community! Just click the “Like” button below.');	
						} else {
							FB.api(
								{
									'method': 'Comments.add',
									'object_id': video_id,
									'text': $('#comment').val(),
									'session_key': session.session_key
								},
								function(response) {
									if(response.error_msg) {
										reShowCommentFormFunction('Unable to post comment. Please try again.');
									} else {
										ShowUserCommentFunction($('#comment').val());
									//	reShowCommentFormFunction('Comment Posted. Thank You.');
									}
								});  // end call to fb.api to add comment
					  } // end else they like the page
					}); // end call to fb.api for likes
					}
					}, { perms: 'publish_stream' });
				
			 } else if(response && response == 1) { // we have perms - just go ahead and post
					var session = FB.getSession();
					// first check if they like the page
				    FB.api('/me/likes', function(result) { 
					    var ulike = false;
				        var dsPageId = '18523496658';
						for(var x=0; x< result.data.length; x++){
							if(result.data[x].id == dsPageId) {
								ulike = true;
							}
						}
					    if(ulike == false) {
							reShowCommentFormFunction('To comment, become part of the Dead Space community! Just click the “Like” button below.');	
					     } else {
					       FB.api(
				       	  {
						    'method': 'Comments.add',
						    'object_id': video_id,
						    'text': $('#comment').val(),
						    'session_key': session.session_key
					      },
					       function(response) {
						     if(response.error_msg) {
							   reShowCommentFormFunction('Unable to post comment. Please try again.');
						     } 	else {
									ShowUserCommentFunction($('#comment').val());
								//	reShowCommentFormFunction('Comment Posted. Thank You.');
							}
							
					       }); // end call to fb.api for comment post
				         } // end else they like the page
				     }); // end call to fb.api for likes
			} else {
				reShowCommentFormFunction('Unable to post comment. Please try again.');
			}
	    }); 
	}});// end wrapper to check for perms
		} else {
			// No comment, so just hide the form.
			//alert('no comment');
			this.hideCommentForm();
		}
		return false;
	};
	
	/**
	 * Sets a function (and only one function at a time) to be called if and when a Facebook Connect session begins.
	 * 
	 * Tony added this for running the Like query... but not sure if that made a difference.
	 */
	EA.MediaPlayer.prototype.waitForFacebookConnect = function (f) {
		if(this.isFacebookConnected){
			f.call(); // just call the function.
		}else{
			// Bind it to the facebook_ready event.
			this.fbConnectCallback = f;
		}
	};
	
	/**
	 * Hides the offer box.
	 */
	EA.MediaPlayer.prototype.hideOffer = function () {
		// Hide the offer container by moving it beneath the video player.
		var MediaPlayerWidth = this.container.width();
        var MediaContainerWidth = parseInt(this.mediaContainer.css('width'));
        var OfferWidth = parseInt(this.offerContainer.css('width'));

        var MediaPlayerLeft = (MediaPlayerWidth - MediaContainerWidth)/2;
        var OfferLeft = MediaPlayerLeft + MediaContainerWidth - OfferWidth;
        
        this.mediaContainer.animate({'left': MediaPlayerLeft});
        this.offerContainer.animate({'left': OfferLeft});
        this.offerVisible = false;
	};
	
	/**
	 * Show a particular offerID. Automatically opens the offer box if it's hidden.
	 * 
	 * @param offerID the ID of the offer to show.
	 */
	EA.MediaPlayer.prototype.showOffer = function (offerID) {
		var wasFound = true;
		
		if(this.offerVisible == false){
			this.offerVisible = true;
			
			// Hide the offer container by moving it beneath the video player.
			var MediaPlayerWidth = this.container.width();
	        var MediaContainerWidth = parseInt(this.mediaContainer.css('width'));
	        var OfferWidth = parseInt(this.offerContainer.css('width'));

	        var MediaPlayerLeft = (MediaPlayerWidth - MediaContainerWidth)/2 - OfferWidth/2;
	        var OfferLeft = MediaPlayerLeft + MediaContainerWidth;

            this.mediaContainer.animate({'left': MediaPlayerLeft});
            this.offerContainer.animate({'left': OfferLeft});
		}
		
		// This must come after the offer has initiated visibility.
		// It's for page tracking purposes...
		if(offerID){
			wasFound = this.offer.showOffer(offerID);
		}
	};
	
	/**
	 * Set the available offers. Passthru to the offer box.
	 * 
	 * @param offers array of data objects.
	 */
	EA.MediaPlayer.prototype.setOffers = function (offers) {
		this.offer.setOffers(offers);
	};
	
	/**
	 * Show the dot pagination for the offer box.
	 */
	EA.MediaPlayer.prototype.showOfferNav = function () {
		if(this.offer.offers.length > 1){
			this.offer.showOfferNav();
		}
	};
	
	/**
	 * Hide the dot pagination for the offer box.
	 */
	EA.MediaPlayer.prototype.hideOfferNav = function () {
		this.offer.hideOfferNav();
	};
	
}else{
	throw new Error('Could not define the MediaPlayer because the EA namespace is not defined.');
}

if(EA){
	EA.AgeGate = function (territoryData) {
		// Do a quick check on load.
		var cookieData = this.getCookieData();
		
		this.territoryData = territoryData;
		setOmniValuesForAgeGate();
		
		// Set up components.
		
		for(var i in this.territoryData) {
			var option = $("<option>"+this.territoryData[i].name+"</option>");
			option.val(this.territoryData[i].value)
			option.attr('title', this.territoryData[i].flag);
			
			$("#dsSelectCountries").append(option);
		}
		
		this.overlay = $('.ageGateContainer').overlay({
			'closeOnEsc': false,
			'closeOnClick': false,
			'api':true,
			'top':0,
			'left':0,
			'onLoad': function () {
				$("#dsSelectCountries, #dsAge").msDropDown();
			}
		});
		
		$('.ageSubmit INPUT').click((function(){
			var year = parseInt($('#dsYear').val(), 10);
			var month = parseInt($('#dsMonth').val(), 10);
			var day = parseInt($('#dsDay').val(), 10);
			var country = $('#dsSelectCountries').val();
			
			for(var i in this.territoryData) {
				if(this.territoryData[i].value == country){
					if(this.territoryData[i].url != "" && this.territoryData[i].url != "http://deadspace.ea.com"){
						window.location.href = this.territoryData[i].url;
						return false;
					}
				}
			}
			
			// Check that the form is even valid.
			if(this.checkData(year, month, day, country)){
				// It's valid - save it.
				this.saveForm(year, month, day, country);
				
				// Did it pass the age gate?
				if(this.passesAgeGate(year, month, day, country)){
					this.showSuccess();
				}else{
					this.showError();
				}
			}
			
			return false;
		}).bindTo(this));
		
		if(cookieData == false){
			// Show the form by default, since the cookie isn't present.
			this.overlay.load();
			
			// omniture call to load the age gate page			
			callAgeGatePage();		
		}else{
			// Is it valid?
			if(this.checkData(cookieData.year, cookieData.month, cookieData.day, cookieData.territory)){
				//Does it pass?
				if(this.passesAgeGate(cookieData.year, cookieData.month, cookieData.day, cookieData.territory)){
					//Go forward
					this.showSuccess();
				}else{
					//Stop - and show the error.
					this.showError();
					this.overlay.load();
					
					// omniture call to load the age gate fail tag					
					callAgeGateFailPage();					
				}
			}else{
				// Invalid cookie; ask them to go through it again.
				this.overlay.load();

				callAgeGatePage();
			}
		}
		
		return this;
	};
	
	EA.AgeGate.cookieName = 'deadspace2';
	
	EA.AgeGate.prototype.showSuccess = function () {
		this.overlay.close();
		
		$('#ageGate').hide();
		resetPageAfterAgeGate();
		EA.triggerAgeGateReady();
	};
	
	EA.AgeGate.prototype.showError = function () {
		$('#ageGate .ageForm').hide();
		$('#ageGate .error').show();
		callAgeGateFailPage();
	};
	
	EA.AgeGate.prototype.saveForm = function (year, month, day, country) {
		$.cookie(
			EA.AgeGate.cookieName,
			year+'|'+month+'|'+day+'|'+country,
			{ 'expires': 365 }
		);
	};
	
	EA.AgeGate.prototype.checkData = function (year, month, day, territory) {
		var now = new Date();
		var errorArea = $('#ageGate .ageForm .error');
		
		if(!isFinite(year)){
			this.showInvalidError('Please enter a valid year.');
			return false;
		}
		
		if(!isFinite(month)){
			this.showInvalidError('Please enter a valid month.');
			return false;
		}
		
		if(!isFinite(day)){
			this.showInvalidError('Please enter a valid day.');
			return false;
		}
		
		if(year > now.getFullYear() || year < 1900){
			this.showInvalidError('Please enter a valid year.');
			return false;
		}
		
		if(month > 12 || month < 1){
			this.showInvalidError('Please enter a valid month.');
			return false;
		}
		
		if(day > 31 || day < 1){
			this.showInvalidError('Please enter a valid day.');
			return false;
		}
		
		var isLeap = new Date(year,1,29).getDate() == 29;
		if(month == 2 && ((isLeap && day > 29) || (!isLeap && day > 28))){
			this.showInvalidError('Please enter a valid day.');
			return false;
		}
		
		return true;
	};
	
	EA.AgeGate.prototype.showInvalidError = function (error) {
		clearTimeout(this.invalidErrorTimeout);
		$('#ageGate .ageForm .error').stop().html(error).slideDown();
		this.invalidErrorTimeout = setTimeout(function(){$('#ageGate .ageForm .error').stop().html(error).slideUp();}, 3000);
	};
	
	EA.AgeGate.prototype.passesAgeGate = function (year, month, day, territory) {
		var now = new Date();
		var age = new Date(year, month-1, day);
		
		var gateAge = new Date(now.getFullYear()-17, now.getMonth(), now.getDate(), 0,0,0,0);
		
		if(gateAge.getTime() >= age.getTime()){
			return true;
		}else{
			return false;
		}
	};
	
	EA.AgeGate.prototype.getCookieData = function () {
		var cookieData = $.cookie(EA.AgeGate.cookieName);
		
		if(cookieData && cookieData != ''){
			var data = cookieData.split("|");
			
			return {
				"year":parseInt(data[0], 10),
				"month":parseInt(data[1], 10),
				"day":parseInt(data[2], 10),
				"territory":data[3]
			};
		}else{
			return false;
		}
	};
	
}else{
	throw new Error('Could not define the AgeGate because the EA namespace is not defined.');
}

if(EA){
	EA.PromoGate = function (promo, force) {
		this.promoItem = promo;
		
		//Get the cookie.
		var cookieData = $.cookie(EA.PromoGate.cookieName);
		
		if(promo){
			// Was the current promo already seen?
			var viewedPromos = [];
			var viewedThisPromo = false;
			
			if(cookieData){
				viewedPromos = cookieData.split(",");
				
				for(var i in viewedPromos){
					if(viewedPromos[i] == promo.id){
						viewedThisPromo = true;
						break;
					}
				}
			}
			
			if((force == undefined || force != true) && viewedThisPromo)
			{
				// Was already seen. Trigger that the promo gate is passed.
				
				EA.triggerPromoGateReady();
			}else{
				// Wasn't seen. Show it.
				this.setupOverlay(promo);
				this.promoGateOverlay.load();
				
				var customPageName;
	    		if(this.promoItem.omnitag && this.promoItem.omnitag != ""){
	    			customPageName = this.promoItem.omnitag.toUpperCase();
	    		}else{
	    			customPageName = this.promoItem.id;
	    		}
				customPageNameAndReset(customPageName);
				
				// Note that this was shown.
				viewedPromos.push(promo.id);
				$.cookie(
					EA.PromoGate.cookieName,
					viewedPromos.join(","),
					{ 'expires': 365 }
				);
			}
		}else{
			// No promos. Trigger that the promo gate is passed.
			EA.triggerPromoGateReady();
		}
		
		return this;
	};
	
	EA.PromoGate.cookieName = 'deadspace2promo';
	
	EA.PromoGate.prototype.setupOverlay = function () {
		var pg = $('#promoGate');
		
		switch(this.promoItem.promoGateType)
		{
			case "simple":
				this.setupSimpleGate();
				break;
			default:
				this.setupEmailGate();
		}
		
		
		//Set up the overlay.
		this.promoGateOverlay = pg.overlay({
			"api": true,
	        "closeOnClick":false,
	        "closeOnEsc": false,
	        "expose":{color:'#000', opacity:0.7, 'loadSpeed':400},
	        "oneInstance": false,
	        "onBeforeClose": (function(){
	        	// Track the click.
	    		var customPageName;
	    		if(this.promoItem.omnitag && this.promoItem.omnitag != ""){
	    			customPageName = this.promoItem.omnitag.toUpperCase();
	    		}else{
	    			customPageName = this.promoItem.id;
	    		}
	    		
	    		// Omniture track the closing
	    		setTimeout(function(){
	    			omniLinkCallCustomPageAndAction(pg.find('.promoX A')[0], 'PromoClose_click', customPageName);
	    		}, 1);
	    		
	        }).bindTo(this),
	        "onClose": (function(){
	        	// Track the underlying page.
	    		var customPageName;
	    		if(this.promoItem.omnitag && this.promoItem.omnitag != ""){
	    			customPageName = this.promoItem.omnitag.toUpperCase();
	    		}else{
	    			customPageName = this.promoItem.id;
	    		}
	    		
	    		// Omniture track the closing
	    		setTimeout(function(){
	    			setOmniValues('','','','','','',1,'','',omniSetPageTypeId(beatManager.currentBeatData.omnitag));
	    		}, 1);
	    		
	    		EA.triggerPromoGateReady()
	        	
	        }).bindTo(this)
		});
		
	};
	
	EA.PromoGate.prototype.setupEmailGate = function () {
		var pg = $('#promoGate');
		var promoTextVal = pg.find('#promoTxtBox').val();
		
		//Set the promo html.
		pg.html(this.promoItem.html);
		
		//Set some facny input effects.
		pg.find('#promoTxtBox').focus(function(){
			var me = $(this);
			
			if(promoTextVal == me.val()){
				me.val('');
			}
		}).blur(function(){
			var me = $(this);
			
			if(me.val() == ""){
				me.val(promoTextVal);
			}
		});
		
		//Set up the form and callbacks.
		pg.find('#promoSubmit').click(this.submitEmailOffer.bindTo(this));
		
	};
	
	EA.PromoGate.prototype.setupEmailGate = function () {
		var pg = $('#promoGate');
		var promoTextVal = pg.find('#promoTxtBox').val();
		
		//Set the promo html.
		pg.html(this.promoItem.html);
		
		//Set some facny input effects.
		pg.find('#promoTxtBox').focus(function(){
			var me = $(this);
			
			if(promoTextVal == me.val()){
				me.val('');
			}
		}).blur(function(){
			var me = $(this);
			
			if(me.val() == ""){
				me.val(promoTextVal);
			}
		});
		
		//Set up the form and callbacks.
		pg.find('#promoSubmit').click(this.submitEmailOffer.bindTo(this));
	};
	
	EA.PromoGate.prototype.setupSimpleGate = function () {
		var pg = $('#promoGate');
		var pgate = this;
		var customPageName;
		var clickURL;
		var linkType = this.promoItem.linkType;
		
		if(this.promoItem.omnitag && this.promoItem.omnitag != ""){
			customPageName = this.promoItem.omnitag.toUpperCase();
		}else{
			customPageName = this.promoItem.id;
		}
		
		// Set the background.
		pg.css('background', "transparent url('"+this.promoItem.promoGateBackgroundImage+"') no-repeat top left")
		
		// Clear out the promogate.
		pg.empty();
		
		if(this.promoItem.clickThruURL){
			clickURL = this.promoItem.clickThruURL;
			
			if(this.promoItem.promoGateButtonText && this.promoItem.promoGateButtonText != ""){
				var submitButton = $('<a href="'+this.promoItem.clickThruURL+'" class="simpleSubmit">'+this.promoItem.promoGateButtonText+'</a>');
				
				if(linkType != "internalLink"){
					submitButton.attr('target', "_blank");
				}
				
				submitButton.click(function(){
					// Omniture track
					setTimeout(function(){
						omniLinkCallCustomPageAndAction(submitButton[0], 'PromoSubmit_click', customPageName);
					}, 1);
				});
				pg.append(submitButton);
			}
			
			pg.click(function(e){
				var me = this;
				if(e.target==this){

					pgate.promoGateOverlay.close();
					
					if(linkType != "internalLink"){
						window.open(clickURL, "promoWindow");
					}else{
						window.location.href = clickURL;
					}
					
					// Omniture track
					setTimeout(function(){
						omniLinkCallCustomPageAndAction(me, 'PromoSubmit_click', customPageName);
					}, 1);
					
					
					return false;
				}
			});
		}
		
		// Append the "close" button.
		pg.append('<a href="#" class="close simpleClose" onclick="return false">CLOSE X</a>');
		
		
	};
	
	EA.PromoGate.prototype.submitEmailOffer = function () {
		var pg = $('#promoGate');
		
		// Track the click.
		var customPageName;
		if(this.promoItem.omnitag && this.promoItem.omnitag != ""){
			customPageName = this.promoItem.omnitag.toUpperCase();
		}else{
			customPageName = this.promoItem.id;
		}
		
		// Omniture track
		setTimeout(function(){
			omniLinkCallCustomPageAndAction(pg.find('#promoSubmit')[0], 'PromoSubmit_click', customPageName);
		}, 1);
		
		// Check the login form.
		var email = pg.find('#promoTxtBox').val();
		
		var filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
		if (!filter.test(email)) {
			this.showErrorForm("Please enter a valid email address.", customPageName);
			return false;
		}

		var disclaimer = pg.find('#promoCheckBox:checked').val();
		if(!disclaimer){
			this.showErrorForm("You need to opt-in to receive this content.", customPageName);
			return false;
		}
		
		// Email trigger.
		// Get the DOB from the Age Gate cookie.
		var promo = this.promoItem;
		var DOB = ageGate.getCookieData()
		
		// Set some URLs.
		var emailTriggerURL = '/en_US/emailasset!index';
		var newsletterURL = '/en_US/newssub!index';
		var userURL = '/en_US/users!index';
		
		// Hide the offer area...
		pg.find('.promoSubmit').animate({'opacity':0}, 'slow', function(){
			pg.find('.promoSubmit').html('Thank You.').animate({'opacity':1}, 'slow');
		})
		
		// pref center fix start
		var country = "";
		
		if (DOB.territory == "USA" || DOB.territory == null){
			country = "US";
		}else{
			country = DOB.territory;
		}
		// pref center fix end
			
		// Newsletter signup call.
		$.post(newsletterURL, 
				{
					'emailAddress': email,
					'country': country,
					'year': DOB.year,
					'month': (DOB.month < 10 ? '0'+DOB.month : DOB.month),
					'day': (DOB.day < 10 ? '0'+DOB.day : DOB.day),
					'optin': true,
					'requestorId': 'deadspacecom'
				},
				
				function(data, status, xhr){
					
				},
			
			'json');
		
		// Email Trigger
		$.post(emailTriggerURL, 
			{
				'emailAddress': email,
				'subject': promo.emailTriggerSubject,
				'imageSrcPath': promo.emailTriggerImageSrc,
				'imageLinkUrl': promo.clickThruURL,
				'secondaryLinkUrl': promo.emailTriggerWebImage,
				'purpose': promo.emailTriggerPurposeID,
				'ctaText': promo.emailTriggerCTAText
			},
			
			function(data, status, xhr){
				
			},
		
		'json');
		
		
		// User - try inserting first.
		$.post(userURL, 
			{
				'email': email,
				'type': 'insert',
				'newsletter': 'true',
				'country': country,
				'dobYear': DOB.year,
				'dobMonth': (DOB.month < 10 ? '0'+DOB.month : DOB.month),
				'dobDay': (DOB.day < 10 ? '0'+DOB.day : DOB.day)
			},
			
			function(data, status, xhr){
				// We're good unless it failed - then we need to update it.
				if(data.response[0] && data.response[0].code == "USER ALREADY EXISTS"){
					$.post(userURL, 
						{
							'email': email,
							'type': 'update',
							'newsletter': 'true',
							'country': country,
							'dobYear': DOB.year,
							'dobMonth': (DOB.month < 10 ? '0'+DOB.month : DOB.month),
							'dobDay': (DOB.day < 10 ? '0'+DOB.day : DOB.day)
						},
						
						function(updateData, updateStatus, updateXhr){
							
						},
					'json');
				}
				
				// Post that the offer was accepted, regardless.
				$.post(userURL, 
					{
						'email': email,
						'type': 'setoffer',
						'offerName': promo.id,
						'completed': "true"
					},
					
					function(data, status, xhr){
						
					},
				'json');
			},
		
		'json');
		
		//Track the success.
		setTimeout(function(){
			customPageNameAndReset(customPageName+":SUCCESS");
		}, 10);
		
		return false;
	};
	
	EA.PromoGate.prototype.showErrorForm = function (errorText, customPageName) {
		var pg = $('#promoGate');
		if(this.errorTimeout){
			clearTimeout(this.errorTimeout);
		}
		pg.find('.errorMessage').html(errorText).animate({'opacity': 1});
		
		this.errorTimeout = setTimeout(function(){
			pg.find('.errorMessage').animate({'opacity': 0}, 'slow');
		}, 4000);
		
		//Track the failure.
		setTimeout(function(){
			customPageNameAndReset(customPageName+":FAIL");
		}, 10);
	};
	
}else{
	throw new Error('Could not define the PromoGate because the EA namespace is not defined.');
}


if(EA){
	EA.MediaList = function (element) {
		this.mediaOverlay = $(element).overlay({
			"api": true,
	        "closeOnClick":false,
	        "closeOnEsc": false,
	        "expose":{color:'#000', opacity:1, 'loadSpeed':300},
	        "onClose": function(){ $('.mediaImgContainer').jScrollPaneRemove(); },
	        "oneInstance": false
		});
		
		this.currentCategory = 'loadingmedia';
		
		$.getJSON("/en_US/mediaoffer!allmedia", (function(mediaData, status){
			this.mediaData = mediaData.items;
			
			for(var i in this.mediaData){
				this.mediaData[i].categories = this.mediaData[i].categories.replace(/\]|\[| /g,'').split(',');
			}
			
			this.filter('trailers');
			
		}).bindTo(this));
	};
	
	EA.MediaList.prototype.load = function () {
		this.mediaOverlay.load();
	};
	
	EA.MediaList.prototype.close = function () {
		this.mediaOverlay.close();
	};
	
	EA.MediaList.prototype.isOpened = function () {
		return this.mediaOverlay.isOpened();
	};
	
	
	EA.MediaList.prototype.filter = function (category) {
		var mediaData = [];
		
		for(var i in this.mediaData){
			var item = this.mediaData[i];
			
			for(var c in item.categories){
				if(item.categories[c] == category){
					mediaData.push(item);
					break;
				}
			}
		}
		
		this.showItems(mediaData);
		this.currentCategory = category;
		
		if(this.isOpened()){
			this.trackOpen();
		}
	};
	
	EA.MediaList.prototype.trackOpen = function () {
		setTimeout((function(){
			customPageNameAndReset('MEDIAGALLERY'+this.currentCategory.toUpperCase());
		}).bindTo(this), 1)
	};
	
	EA.MediaList.prototype.trackPage = function (customPageName) {
		var mediaListPage = 'MEDIAGALLERY' + this.currentCategory.toUpperCase();
		
		// 1. get the current page name
		var basePageName = s_ea.pageName;
		var baseProp10 = s_ea.prop10;
		var baseProp15 = s_ea.prop15;
		
		s_ea.prop10 = customPageName;
		s_ea.prop15 = this.currentCategory;
		
		// 2. set the page name to your customPageName	
		setOmniValues('','','','','','',1,'','',omniSetPageTypeId(mediaListPage));	
		
		// 3. reset the page name to original value
		s_ea.pageName = basePageName;	
		s_ea.prop10 = baseProp10;
		s_ea.prop15 = baseProp15;
	};
	
	EA.MediaList.prototype.showItems = function (mediaData) {
		
		mediaData.sort(function(a,b){
			if(a.masterSortOrder){
				if(b.masterSortOrder){
					return a.masterSortOrder - b.masterSortOrder;
				}else{
					return 1;
				}
			}else{
				if(b.masterSortOrder){
					return -1;
				}else{
					return 0;
				}
			}
		});
		
		$('.mediaImageList').empty();
		
		for(var i in mediaData){
			(function(){
				var asset = mediaData[i];
				var link = "#medialist/"+EA.Controller.makeMediaURL(asset);
	    		var listItem = $('<li><a href="'+link+'"><img src="'+asset.imageURL+'" width="230" height="156" /></a><div class="slideUpDescription"><div class="layerTitleSmall">'+asset.title+'</div><div class="layerRegTxtSmall">'+asset.summary+'</div></div></li>');
				
//				listItem.click(function(){
//					mediaPlayer.setOffers([]);
//		    		mediaPlayer.show(asset);
//				});
				
				$('.mediaImageList').append(listItem);
				listItem[0].media = link;
			})();
			
			$('.mediaImageList LI').hover(function(){
				var slide = $(this).find('.slideUpDescription');
				slide.stop();
				
				slide.animate({'top': $(this).height()-slide.height(), 'opacity': '1'}, 200);
				
				slide.find('.layerTitle, .layerTitleSmall').stop().animate({'opacity':'1'},300);
				slide.find('.layerRegTxt, .layerRegTxtSmall').stop().animate({'opacity':'1'},800);
			}, function(){
				var slide = $(this).find('.slideUpDescription');
				slide.stop();
				
				slide.animate(
					{'opacity': '0', 'top': $(this).height()},
					{
						duration: 600,
						specialEasing: { opacity: 'linear', 'top': 'swing' }
					}
				);
				
				slide.find('div').stop().animate({'opacity':'0'}, 300);
			}).click(function(){
				window.location = this.media;
			});
		}
		if(this.isOpened()){
			$('.mediaImgContainer').jScrollPane({showArrows:true, reinitialiseOnImageLoad: true, scrollbarWidth:18, scrollbarMargin:0});
		}
	};
	
}else{
	throw new Error('Could not define the MediaList because the EA namespace is not defined.');
}


if(EA){
	EA.BeatManager = function (currentBeat) {
		if(EA.instances['BeatManager']){
			return EA.instances['BeatManager'];
		}else{
			EA.instances['BeatManager'] = this;
			
			this.initializedBeat = currentBeat;
			this.currentBeat = null;
			this.currentBeatData = null;
			this.beatAssets = {};
			
			// Get all of the beat info.
			$.getJSON("/en_US/mediaoffer!beatinfo", (function(data,status){
				this.beatData = data.beats;
				
				$.getJSON("/en_US/mediaoffer!beathome?beat="+currentBeat, (function(beatAssets){
					this.beatAssets[currentBeat] = beatAssets;
					EA.afterAgeGate(function(){
						beatManager.changeBeat(currentBeat);
					});
				}).bindTo(this));
				
				// For each beat, get the assets.
				for(var i in this.beatData){
					if(this.beatData[i].id != currentBeat){
						((function(){
							var id = this.beatData[i].id;
							
							$.getJSON("/en_US/mediaoffer!beathome?beat="+id, (function(beatAssets){
								this.beatAssets[id] = beatAssets;
							}).bindTo(this));
						}).bindTo(this))();
					}
				}
				
			}).bindTo(this));
			
			return this;
		}
	};
	
	EA.BeatManager.prototype.changeBeat = function (toBeat) {
		
		var theBeat;
		
		for(var i in this.beatData){
			if(this.beatData[i].id == toBeat){
				theBeat = this.beatData[i];
			}
		}
		
		if(theBeat){
			if(this.currentBeat){
				// Call the click action using the current beat's page.
				omniLinkCallCustomPageName($('.flashBeat')[0], theBeat.omnitag+"_click", this.currentBeatData.omnitag)
			}
			
			this.currentBeat = toBeat;
			this.currentBeatData = theBeat;
			
			// Call a new page.
			customPageName(theBeat.omnitag)
			
			var bgImage = new Image();
			bgImage.src = theBeat.background;
			bgImage.onload = function(){
				var bg = $('<div class ="bgTransition" style="background: url('+theBeat.background+') no-repeat top center; " />');
				bg.css('opacity', 0);
				
				$('.wrapperOutter').prepend(bg);
				
				bg.animate({"opacity":"1"}, 1000, function(){
					$('.wrapperOutter').css('background', 'url('+theBeat.background+') no-repeat top center');
					$('.wrapperOutter DIV.bgTransition:last').remove();
				});
			};
			
			$('.beatContainer IMG').fadeOut('slow');
			
			setTimeout(this.changeBeatAssets.bindTo(this), 600);
		}
	};
	
	EA.BeatManager.prototype.changeBeatAssets = function () {
		var beatData = this.beatAssets[this.currentBeat];
		var beat1tags = ['Trailer', 'Memorial', 'Shuttle', 'Cinco1', 'Nreturnswallpapers'];
		
		// This array holds image objects for background image loading.
		var imageLoader = [];
		
		imageLoader[0] = new Image();
		imageLoader[0].onload = (function(){
			$('.largeVid IMG').attr('src', this.src).fadeIn();
		}).bindTo(imageLoader[0]);
		imageLoader[0].src = beatData.asset1.thumbURL;
		
		// Set the title and description.
		$('.largeVid .layerTitle').html(beatData.asset1.title);
		$('.largeVid .layerRegTxt').html(beatData.asset1.summary);
		
		// Set up the link.
		$('.largeVid A').attr('href', '#video/group='+beatData.asset1.group+'&mediaid='+beatData.asset1.id).unbind('click');
		$('.largeVid').unbind('click');
		
		if(this.currentBeat != 'beat1'){
			$('.largeVid').click(function(){
				setTimeout((function(){
					omniLinkCall(this, beatData.asset1.omnitag+"_click");
				}).bindTo(this), 1);
				
				window.location = '#video/group='+beatData.asset1.group+'&mediaid='+beatData.asset1.id;
				return false;
			});
		}else{
			$('.largeVid').click(function(){
				setTimeout((function(){
					omniLinkCall(this, "Trailer_click");
				}).bindTo(this), 1);
				
				window.location = '#video/group='+beatData.asset1.group+'&mediaid='+beatData.asset1.id;
				return false;
			});
		}
		
		// The other 4 beat assets are looped through.
		for(var i=1; i<=4; i++) {
			var asset = beatData['asset'+(i+1)];
			
			
			// Begin background loading.
			imageLoader[i] = new Image();
			$('.sideImg'+i+' IMG').attr('src',  asset.thumbURL);
			(function(){
				var timeOut = i*100;
				imageLoader[i].onload = (function(){
					setTimeout((function(){this.fadeIn('slow')}).bindTo(this), timeOut);
				}).bindTo($('.sideImg'+i+' IMG'));
			})();
			imageLoader[i].src = asset.thumbURL;
			
			// Set the title and description.
			$('.sideImg'+i+' .layerTitleSmall').html(asset.title);
			$('.sideImg'+i+' .layerRegTxtSmall').html(asset.summary);	
			
			// Set the link according to the type.
			var link = '#'+EA.Controller.makeMediaURL(asset);
			
			$('.sideImg'+i+' A').attr('href', link);
			$('.sideImg'+i)[0].media = link;
			if(this.currentBeat != 'beat1'){
				$('.sideImg'+i)[0].omnitag = asset.omnitag;
			}else{
				$('.sideImg'+i)[0].omnitag = beat1tags[i];
			}
			
			
			$('.sideImg'+i).unbind('click').click(function(){
				setTimeout((function(){
					omniLinkCall(this, this.omnitag+"_click");
				}).bindTo(this), 1)
				window.location = this.media;
				return false;
			});
			
		}
	};
	
	EA.BeatManager.prototype.hideBeatNav = function () {
		$('#flashBeat').empty();
	};
	
	EA.BeatManager.prototype.showBeatNav = function () {
		$('#flashBeat').empty().append('<div id="flashBeat_replace"></div>');
		
		var currentBeat = this.initializedBeat;
		
		if(this.currentBeat){
			currentBeat = this.currentBeat;
		}
		
		swfobject.embedSWF(
			EA.navURL,	// swf URL
			'flashBeat_replace',		// containing element ID
			'960',				// width
			'115',				// height
			'9',				// version
			'http://static.flowplayer.org/swf/expressinstall.swf', //express install url
			
			//flashvars
			{
				'selectedBeat': currentBeat
			}, 
			
			//params
			{
				'wmode': 'transparent',
		    	'allowfullscreen': 'false',
		        'allowscriptaccess': 'always'
			},
			
			{}, //element attributes
			function(e){
				if(e && !e.success){
					$('#flashBeat_replace').replaceWith("<div id=\"flashBeat_replace\">Sorry, it seems you can't view this content. Try installing Adobe Flash Player here: <a href=\"http://get.adobe.com/flashplayer/\">http://get.adobe.com/flashplayer/</a></div>");
				}
			}
		);
		
	};
	
}else{
	throw new Error('Could not define the BeatManager because the EA namespace is not defined.');
}
/* Page-specific Omniture Calls */

// NRETURNS is the first beat
// Subsequent beats home page names will be set when the user clicks the main beat nav to load the new beats
var originalPageName;
var ageGateFailCallCounter;

// FBCONNECTGLOBAL custom omniLinkCall function
function omniLinkCallFB(thisParam, customLinkName){
	omniLinkCallCustomPageName(thisParam, customLinkName, 'FBCONNECTGLOBAL');
}

// COMMERCELIGHTBOX custom omniLinkCall function
function omniLinkCallPreOrder(thisParam, customLinkName){
	omniLinkCallCustomPageName(thisParam, customLinkName, 'COMMERCELIGHTBOX');
}

// DETAILSDS2 custom omniLinkCall function
function omniLinkCallDS2(thisParam, customLinkName){
	omniLinkCallCustomPageName(thisParam, customLinkName, 'DETAILSDS2');
}

// DETAILSDSE custom omniLinkCall function
function omniLinkCallDSE(thisParam, customLinkName){
	omniLinkCallCustomPageName(thisParam, customLinkName, 'DETAILSDSE');
}

// DETAILSDSE custom omniLinkCall function
function omniLinkCallDS1(thisParam, customLinkName){
	omniLinkCallCustomPageName(thisParam, customLinkName, 'DETAILSDS1');
}

// Global page-specific Omniture call for custom page names that take in the custom page name as a function param
function omniLinkCallCustomPageName(thisParam, customLinkName, customPageName){

	// 1. get the current page name
	var basePNa = s_ea.pageName;
	var baseProp10 = s_ea.prop10;
	
	s_ea.prop10 = customPageName;
	// 2. set the page name to your customPageName	
	setOmniValues('','','','','','',1,'','',omniSetPageTypeId(customPageName));	

	// 3. call omniLinkCall function
	omniLinkCall(thisParam, customLinkName);

	// 4. reset the page name to original value
	s_ea.pageName = basePNa;
	s_ea.prop10 = baseProp10;
}

function omniLinkCallCustomPageAndAction(thisParam, customLinkName, customPageName){

	// 1. get the current page name
	var basePNa = s_ea.pageName;
	var baseProp10 = s_ea.prop10;
	
	s_ea.prop10 = customPageName;
	
	// 2. set the page name to your customPageName	
	setOmniValues(thisParam,'o',customLinkName,'','','',0,'','',omniSetPageTypeId(customPageName));	

	// 3. reset the page name to original value
	s_ea.pageName = basePNa;
	s_ea.prop10 = baseProp10;
}

function omniLinkCallFacebookLoginClick(thisParam){
	var basePNf = s_ea.pageName;
	facebookLoginDestinationPageName = 'FBCONNECTGLOBALAUTH';
	setOmniValues('','','','','','',1,'','',omniSetPageTypeId('FBCONNECTGLOBAL'));
	omniLinkCall(thisParam, 'FBconnectGlobalAut_Click');
	s_ea.pageName = basePNf;
}

var facebookLoginDestinationPageName = 'FBCONNECTGLOBALAUTH';
function omniLinkCallFacebookLoginAuthIn(){
	var basePNfa = s_ea.pageName;
	setOmniValues('','','','','','',1,'','',omniSetPageTypeId(facebookLoginDestinationPageName));
	s_ea.pageName = basePNfa;
}

function omniLinkCallFacebookLoginAuthOut(){
	var basePNfo = s_ea.pageName;
	setOmniValues('','','','','','',1,'','',omniSetPageTypeId('FBCONNECTGLOBALAUTHLOGOUT'));
	s_ea.pageName = basePNfo;
}

function customPageNameAndReset(pageName){

	// 1. get the current page name
	var basePageName = s_ea.pageName;
	var baseProp10 = s_ea.prop10;
	
	s_ea.prop10 = pageName;
	// 2. set the page name to your customPageName	
	setOmniValues('','','','','','',1,'','',omniSetPageTypeId(pageName));	
	
	// 3. reset the page name to original value
	s_ea.pageName = basePageName;	
	s_ea.prop10 = baseProp10;
	
}

function customPageName(pageName){
	// 1. get the current page name
	originalProp10 = s_ea.prop10;
	originalPageName = s_ea.pageName;
	
	s_ea.prop10 = pageName;
	
	// 2. set the page name to your customPageName	
	setOmniValues('','','','','','',1,'','',omniSetPageTypeId(pageName));
}

function resetPageName(){
	if (originalPageName != ""){
		s_ea.pageName = originalPageName;
	}
}


var basePN = "";
var baseP10 = "";
var baseP11 = "";
var baseP12 = "";
var baseP17 = "";
var baseP18 = "";
var baseE18 = "";
var baseE30 = "";

function setOmniValuesForAgeGate(){
	basePN = s_ea.pageName;
	baseP10 = s_ea.prop10;
	baseP11 = s_ea.prop11;
	baseP12 = s_ea.prop12;
	baseP17 = s_ea.prop17;
	baseP18 = s_ea.prop18;
	
	baseE17 = s_ea.eVar17;
	baseE18 = s_ea.eVar18;
	baseE30 = s_ea.eVar30;
	
	//Per MJ:
	rsiP = s_account;
}

function callAgeGatePage(){	
	//Per MJ:
	 s_account=omniCheckHost("eaeacom,eagamedeadspace2global");
     modifyOmniRSI(s_account,0);
	
 	//Per DI:
 	s_ea.eVar17 = "INTL";
 	
	setOmniValues('','','','userid='+s_ea.prop1+',sitecode='+s_ea.prop2+',brand='+s_ea.prop3+',franchise='+s_ea.prop4+',game='+s_ea.prop5+',studio='+s_ea.prop7+',sitetype='+s_ea.prop9+',contenttitle=Age Gate,territory=GLOBAL,language=en_INTL,country=INTL,siteid=INTL:DEADSPACE2','userid='+s_ea.eVar1+',game='+s_ea.eVar3+',territory=INTL,recentsite=INTL:DEADSPACE2:DEADSPACE2,label='+s_ea.eVar34,'',1,'','','GLOBAL:INTL:GAMES:EARS:MKT:DEADSPACE:DEADSPACE2:DEADSPACE2:AGEGATE')
}

function callAgeGateFailPage(){
	if (ageGateFailCallCounter != 1){
		var rsiP = s_account;
		//s_account = omniCheckHost("eaeacom");
		//modifyOmniRSI(s_account,0)
		
		//Per MJ:
		s_account=omniCheckHost("eaeacom,eagamedeadspace2global");
        modifyOmniRSI(s_account,0);
		
		setOmniValues('','','','userid='+s_ea.prop1+',sitecode='+s_ea.prop2+',brand='+s_ea.prop3+',franchise='+s_ea.prop4+',game='+s_ea.prop5+',studio='+s_ea.prop7+',sitetype='+s_ea.prop9+',contenttitle=Age Gate,territory=GLOBAL,language=en_INTL,country=INTL,siteid=INTL:DEADSPACE2','userid='+s_ea.eVar1+',game='+s_ea.eVar3+',territory=INTL,recentsite=INTL:DEADSPACE2:DEADSPACE2,label='+s_ea.eVar34,'',1,'','','GLOBAL:INTL:GAMES:EARS:MKT:DEADSPACE:DEADSPACE2:DEADSPACE2:AGEGATEFAIL')
		//s_account = rsiP;
		//modifyOmniRSI(s_account,0)
		ageGateFailCallCounter = 1;
	}
}

function resetPageAfterAgeGate(){
    s_ea.prop10 = baseP10;
    s_ea.prop11 = baseP11;
    s_ea.prop12 = baseP12;
    s_ea.prop17 = baseP17;
    s_ea.prop18 = baseP18;
    
    s_ea.eVar17 = baseE17;
    s_ea.eVar18 = baseE18;
    s_ea.eVar30 = baseE30;
    s_ea.pageName = basePN;
    
    // hard-reset this again
    s_account = rsiP;
    
    //Per MJ:
    modifyOmniRSI(s_account,0);
}

function quizOmniLinkCall(clickName){
	customPageNameAndReset(clickName);
}

function omniLinkCallAsync(thisObj, clickName){
	setTimeout(function(){
		omniLinkCall(thisObj, clickName);
	}, 1)
}


