/*
 * 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
 *
 * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
 * Revision: 6246
 */
(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)})}});
/*
 * 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/
 */
(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}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(){
  var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;

  // The base Class implementation (does nothing)
  this.Class = function(){};
 
  // Create a new Class that inherits from this class
  Class.extend = function(prop) {
    var _super = this.prototype;
   
    // Instantiate a base class (but only create the instance,
    // do not run the init constructor)
    initializing = true;
    var prototype = new this();
    initializing = false;
   
    // Copy the properties over onto the new prototype
    for (var name in prop) {
      // Check if we are overwriting an existing function
      prototype[name] = typeof prop[name] == "function" &&
        typeof _super[name] == "function" && fnTest.test(prop[name]) ?
        (function(name, fn){
          return function() {
            var tmp = this._super;
           
            // Add a new ._super() method that is the same method
            // but on the super-class
            this._super = _super[name];
           
            // The method only need to be bound temporarily, so we
            // remove it when we are done executing
            var ret = fn.apply(this, arguments);       
            this._super = tmp;
           
            return ret;
          };
        })(name, prop[name]) :
        prop[name];
    }
   
    // The dummy class constructor
    function Class() {
      // All construction is actually done in the init method
      if ( !initializing && this.init )
        this.init.apply(this, arguments);
    }
   
    // Populate our constructed prototype object
    Class.prototype = prototype;
   
    // Enforce the constructor to be what we expect
    Class.constructor = Class;

    // And make this class extendable
    Class.extend = arguments.callee;
   
    return Class;
  };
})();
;
/*** $Id$ ***/
function json(){}
function json_init()
{
  var m = { '\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\' };
  var s = new Object();

  s['boolean'] = function (x) { return String(x); };
  s['null'   ] = function (x) { return "null";    };
  s['number' ] = function (x) { return isFinite(x) ? String(x) : 'null'; };
  s['array'  ] = function (x)
  {
    var a = ['['], b, f, i, l = x.length, v;
    for (i = 0; i < l; i += 1) {
      v = x[i];
      f = s[typeof v];
      if (f) {
        v = f(v);
        if (typeof v == 'string') {
         if (b) {
            a[a.length] = ',';
          }
          a[a.length] = v;
          b = true;
        }
      }
    }
    a[a.length] = ']';
    return a.join('');
  };

  s['object'] = function (x) {
    if (x) {
      if (x instanceof Array) return s.array(x);
      var a = ['{'], b, f, i, v;
      for (i in x) {
        v = x[i];
        f = s[typeof v];
        if (f) {
          v = f(v);
          if (typeof v == 'string') {
            if (b) a[a.length] = ',';
            a.push(s.string(i), ':', v);
            b = true;
          }
        }
      }
      a[a.length] = '}';
      return a.join('');
    }
    return 'null';
  };

  s['string'] = function (x) {
    if (/[\"\\\x00-\x1f]/.test(x)) {
      x = x.replace(/([\x00-\x1f\\"])/g, function(a, b) {
        var c = m[b];
        if (c) return c;
        c = b.charCodeAt();
        return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
      });
    }
    return '"' + x + '"';
  };

  json.serialize = function (obj)
  {
    obj = obj || false;
    return s[ typeof(obj) ](obj);
  };

  json.deserialize = json.unserialize = function (str)
  {
    try
    {
      return (/^(\"(\\.|[^"\\\n\r])*?"|[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t])+?$/.test(str)) && eval('(' + str + ')');
    }
    catch (e)
    {
      return false;
    }
  };
}

json_init();
;
/**
 * 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 = $.extend({}, options); // clone object since it's unexpected behavior if the expired property were changed
            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
        }
        // NOTE 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.fn.extend(
{
	/**
	 * Wrapper over bind that enables you to connect events to objects, not just callbacks
	 *
	 * @param type {String} Event type (click,focus,etc)
	 * @param obj {Object} The object you want to bind the event to
	 * @param method {String|Function} Either a string method name or function reference to call on obj
	 * @param args {Array} Optional arguments to pass to the callback (instead of the default ones)
	 */
	connect: function( type, obj, method, args )
	{
		return this.each( function()
		{
			var f = function()
			{
				var a = args || [this].concat(jQuery.makeArray(arguments));
				var r = (typeof method == 'string' ? obj[method].apply(obj, a ) : method.apply(obj, a ));
				return typeof r == 'boolean' ? r : false;
			};

			var ccache = jQuery.data(this,'connect:'+type) || [];
			ccache.push([obj,method,f]);
			jQuery.data(this,'connect:'+type,ccache);
			$(this).bind(type,f);
		});
	},

	/**
	 * Disconnect your connected events from the target object
	 *
	 * @param type {String} Event type (click,focus,etc)
	 * @param obj {Object} The object you want to disconnect the event from
	 * @param method {String|Function} Either a string method name or function that you used in your connect
	 */
	disconnect: function( type, obj, method )
	{
		return this.each(function()
		{
			var ccache = jQuery.data(this,'connect:'+type) || [];
			var hdlrs  = [];
			var ncache = [];
			var elmt   = this;

			jQuery.each(ccache, function(i,rec)
			{
				if (rec[0]==obj && rec[1]==method)
				{
					hdlrs.push(rec[2]);
				}
				else
				{
					ncache.push(rec);
				}
			});

			jQuery.each(hdlrs, function(i,hdlr)
			{
				$(elmt).unbind(type,hdlr);
			});

			jQuery.data(this,'connect:'+type,ncache.length ? ncache : false);

		});
	},

	/**
	 * Wrapper over live that enables you to connect events to objects, not just callbacks
	 *
	 * @param type {String} Event type (click,focus,etc)
	 * @param obj {Object} The object you want to bind the event to
	 * @param method {String|Function} Either a string method name or function reference to call on obj
	 * @param args {Array} Optional arguments to pass to the callback (instead of the default ones)
	 */
	liveConnect: function( type, obj, method, args )
	{
		var f = function()
		{
			var a = args || [this].concat(jQuery.makeArray(arguments)); 
			var r = (typeof method == 'string' ? obj[method].apply(obj, a ) : method.apply(obj, a ));
			return typeof r == 'boolean' ? r : false; 
		};

		var cacheid = 'liveconnect:'+type+':'+this.selector;
		var ccache  = jQuery.data(window,cacheid) || [];
		ccache.push([obj,method,f]);
		jQuery.data(window,cacheid,ccache);
		$(this.selector).live(type, f);
		return this;
	},

	/**
	 * Disconnect your live connected events from the target object
	 *
	 * @param type {String} Event type (click,focus,etc)
	 * @param obj {Object} The object you want to disconnect the event from
	 * @param method {String|Function} Either a string method name or function that you used in your connect
	 */
	liveDisconnect: function ( type, obj, method )
	{
		var cacheid= 'liveconnect:'+type+':'+this.selector;
		var ccache = jQuery.data(window,cacheid) || [];
		var hdlrs  = [];
		var ncache = [];
		var elmt   = this;

		jQuery.each(ccache, function(i,rec) 
		{ 
			if (rec[0]==obj && rec[1]==method)
			{
				hdlrs.push(rec[2]);
			}
			else
			{
				//Dont kill it, add it back to the cache for later
				ncache.push(rec);
			}
		});

		jQuery.each( hdlrs, function(i,hdlr) 
		{ 
			$(elmt).die(type,hdlr); 
		});

		jQuery.data(window,cacheid, ncache.length ? ncache : false);
		return this;
	},

	/**
	 * Test whether x and y are on this jquery element
	 *
	 * @param x {Number} The x position
	 * @param y {Number} The y position
	 * @return {Boolean} True if it hits, false if it doesn't
	 */
	hitTest: function (x,y)
	{
		var o  = this.getPosition();
		var ox = o.left;
		var oy = o.top;
		var w  = this[0].offsetWidth;
		var h  = this[0].offsetHeight;
		var ex = ox+w;
		var ey = oy+h;

		return ( x >= ox && y >= oy && x <= ex && y <= ey ) ? true : false;
	},

	/**
	 * Get the left and top positions for this element, essentially the x,y coordinates
	 *
	 * @return {Object} Left and Top coordinates
	 */
	getPosition: function ()
	{
		return this.eq(0).position();
	},

	/**
	 * Replace this dom element with html content
	 *
	 * @param value {String} The content you want to replace this dom element with
	 */
	replaceWith: function( value )
	{
		return this.each( function ()
		{
				var e = $(this);
				var p = e.parent();
				var s = e.prev();
				e.remove();

				if (s[0])
				{
					s.after(value);
				}
				else
				{
					p.prepend(value);
				}
		});
	},

	/**
	 * Search for html elements inside this selector and make image tags with png's transparent using IE filter hack
	 */
	fixPngImage: function()
	{
		if (!$.browser.msie || parseInt($.browser.version) >= 7.0 )
		{
			return this;
		}

		this.filter('[src$=png]').each( function ()
		{
			var i = $(this);
			i.after( '<div style="display:block; width: '+i.width()+'px; height: '+ i.height() +'px; padding: 0px; margin: 0px; filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + i.attr('src') + '\', sizingMethod=\'image\');" ></div>').hide();
		});

		return this;
	},

	/**
	 * Search for html elements inside this selector and fix background png's using IE filter hack
	 */
	fixPngBackground: function()
	{
		if (!$.browser.msie || parseInt($.browser.version) >= 7.0 )
		{
			return this;
		}

		return this.each( function()
		{
			this.style.backgroundImage = '';
			var m = this.currentStyle.backgroundImage.match(/^url\("([^"]+)"\)/);

			if (!m || !m[1])
			{
				return;
			}

			var sz = this.currentStyle.backgroundRepeat == 'no-repeat' ? 'crop' : 'scale';
			this.style.backgroundImage = 'none';
			this.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+m[1]+'", sizingMethod="'+sz+'")';
		});
	},

	/**
	 * Fixes the png background images on hover for IE6.  Will add a "hover" class to the element on mouseover.
	 * @return {Object} returns itself so it can be chainable
	 */
	fixHoverPngBackground: function()
	{
		if ($.browser.msie && $.browser.version < 7)
		{
			var fn = function()
			{
				this.style.backgroundImage = "";
				$(this).toggleClass("hover").fixPngBackground();
			};

			return this.each(function()
			{
				$(this).mouseover(fn).mouseout(fn).fixPngBackground();
			});
		}
		return this;
	},

	/**
	 * Sits idle before returning control.  Works well in chain.
	 */
	idle: function(time, callback)
	{
		return this.animate({delay: 1}, time, callback);
	}
});

jQuery.extend({
	/**
	 * Dynamically loads a stylesheet
	 * @param {String} url
	 */
	getStyle: function(url)
	{
		if (url && typeof jQuery._syn.loaded_ui[url] == "undefined")
		{
			jQuery._syn.loaded_ui[url] = true;
			var ts = (new Date()).getTime();
			url += ((url.match(/\?/)) ? '&' : '?')+'_='+ts;
			$("head").eq(0).append('<link href="'+url+'" rel="stylesheet" type="text/css" />');
		}
	},

	/**
	 * Dynamically loads an array of stylesheets optionally prepending a prefix
	 * @param {Array} urls
	 * @param {String} prefix
	 */
	getStyles: function(urls, prefix)
	{
		urls_array = $.makeArray(urls);
		$.each(urls_array, function(i, url)
		{
			$.getStyle(prefix+url);
		});
	},

	/**
	 * Dynamically removes a stylesheet
	 * @param {String} url
	 */
	removeStyle: function(url)
	{
		if (url)
		{
			var ts_url = $("head").find("link[href^="+url+"?_]").attr('href');
			$("head").find("link[href="+ts_url+"]").remove();
			if (url && typeof jQuery._syn.loaded_ui[url] != "undefined")
			{
				jQuery._syn.loaded_ui[url] = null;
				delete jQuery._syn.loaded_ui[url];
			}
		}
	},

	/**
	 * Dynamically removes an array of stylesheets optionally prepending a prefix
	 * @param {Array} urls
	 * @param {String} prefix
	 */
	removeStyles: function(urls, prefix)
	{
		urls_array = $.makeArray(urls);
		$.each(urls_array, function(i, url)
		{
			$.removeStyle(prefix+url);
		});
	},

	/**
	 * Dynamically loads a number of scripts, optionally calling the callback once all scripts have been loaded (or failed)
	 * @param {Array} urls
	 * @param {Function} callback
	 * @param {String} prefix
	 */
	getScripts: function(urls, callback, prefix)
	{
		if (urls.length == 0)
		{
			callback();
			return;
		}

		var prefix = (prefix) ? prefix : "";
		urls = $.makeArray(urls);

		if (jQuery._syn.loaded_ui[prefix+urls[0]])
		{
			$.getScripts(urls.slice(1), callback, prefix);
		}
		else
		{
			$.getScript(prefix+urls[0], function()
			{
				jQuery._syn.loaded_ui[prefix+urls[0]] = true;
				$.getScripts(urls.slice(1), callback, prefix);
			});
		}
	}
});

(function(){

	var ajax_original = jQuery.ajax;

	jQuery.extend({

		ajax: function(options)
		{
			if (!options.jsCache)
			{
				ajax_original(options);
				return;
			}
		
			var param_key = (typeof(options.data) == 'string') ? options.data : json.serialize(options.data || {});
			var cacheid = options.url + '|' + param_key;
			var cache   = jQuery.data(window, cacheid);
			var success_orig = options.success;

			if ( cache )
			{
				success_orig.apply(options,cache);
				return;
			}

			options.success = function(req,status)
			{
				jQuery.data( window, cacheid, [req,status] );
				this.success = success_orig;
				success_orig.call(this,req,status);
			}

			ajax_original(options);
		}

	});

})();


jQuery._syn = {
	loaded_ui: []
};
;
/**
 * The ajax webservices communication class.
 * @constructor
 */
Syn.Comm = Class.extend(
{

	/**
	 * Initialize the portal webservices class. This is called automatically by the default constructor.
	 * @member Syn.Comm
	 * @param url {String} Location of portal webservices 
	 */
	init: function (url)
	{
		this.url = url;
		this.requests = {};
		this.nextRequestId = 0;
	},

	/**
	 * Call a webservice on the server 
	 * @member Syn.Comm
	 * @param classname {String} The class on the server you wish to call
	 * @param method {String} The method you wish to call on classname
	 * @param data {Mixed} Any data structure you want to serialize and pass to the server
	 * @param cb1 {Function|Object} Can be either a function or an object. If a function is passed, this will be called with the result. If an object is passed, the object will be the target 'this' of the cb2 method.
	 * @param cb2 {String|Function} The method to call on cb1 if an object was passed. Can be a string method name or a function reference.
	 */
	call: function (classname,method,data,cb1,cb2)
	{
		var callBackObj = {};
		
		if (typeof cb1 == 'function' )
		{
			callBackObj.callback = cb1;
			callBackObj.cb_obj   = false;
		}

		else if ( typeof cb1 == 'object' )
		{
			callBackObj.cb_obj = cb1;
			callBackObj.callback = cb2;
		}

		var robj = {
			'class'  : classname,
			'method' : method,
			'data'   : data
		};

		if (cb1)
		{
			this.requests[this.nextRequestId] = $.ajax({
				type: "POST",
				url: this.url,
				data: json.serialize(robj),
				contentType: 'application/json',
				success: this.onSuccessFunc(callBackObj, this.nextRequestId)
			});
			this.nextRequestId++;
		}
		else
		{
			return json.deserialize($.ajax({
				type: "POST",
				async: false,
				url: this.url,
				data: robj,
				contentType: 'application/json'
			}).responseText);
		}
	},
	
	/**
	 * Cancels all outstanding requests in this.requests and deletes them from this.requests
	 * @member Syn.Comm
	 */
	cancelAll: function()
	{
		for (var requestId in this.requests)
		{
			// We need to make sure there is a request to cancel
			if(typeof this.requests[requestId] != 'undefined')
			{
				this.requests[requestId].abort();
				this.requests[requestId]=null;
				delete this.requests[requestId];
			}
		}
	},
	
	/**
	 * Returns a function that is used when a webservice call is completed
	 * @member Syn.Comm
	 * @param callBackObj {Object} The object containing the callback data for this request
	 * @param requestId {Number} The number of the request coming from this object (1...n)
	 */
	onSuccessFunc: function(callBackObj, requestId)
	{
		var that = this;
		
		/**
		* The function that actually occurs when a request is complete.
		* @member Syn.Comm
		* @param responseText {String} The response text for a request
		* @param responseMessage {String} The response message for a request
		*/
		return function onSuccess(responseText, responseMessage)
		{
			var result = window["eval"]("(" + responseText + ")");
			
			if ( callBackObj.cb_obj )
			{
				(typeof callBackObj.callback == "string") ? callBackObj.cb_obj[callBackObj.callback](result) :callBackObj.callback.call(callBackObj.cb_obj, result);
			}
			else
			{
				callBackObj.callback(result);
			}
			
			//The request is done, delete the request from this Syn.Comm instance
			that.requests[requestId]=null;
			delete that.requests[requestId];
		}
	}
});
;
/**
 * Create a component instance.
 * @constructor
 */
Syn.Component = Class.extend(
{
	/**
	 * Initialize the component class. This is called automatically by the default constructor.
	 * In the config object, the following attributes are generally supplied
	 *   - {String} type The type of this component, eg (horoscope,movies,etc)
	 *   - {String} uid (v1) The unique identifier for this component instance
	 *   - {String} event_id (v2) The unique identifier for this component instance
	 *   - {String} ajaxtoken A data packet needed to reconstruct the component via webservices
	 * @member Syn.Component
	 * @param {Object} config
	 */
	init: function (config)
	{
		this.type      = config['type'] || '';
		this.uid       = config['uid'];
		this.config    = config;
		this.uid_esc   = this.uid.replace(/(:|\|)/g,'\\$1');
		this.ajaxtoken = config['ajaxtoken'];
		this.comp      = $('#'+this.uniqueKey());
	},

	/**
	 * Get the instance uid
	 * @member Syn.Component
	 * @return {String} The uid
	 */
	getUid: function ()
	{
		return this.uid;
	},

	/**
	 * Get the dom identifier for this simple 'key'. The key value gets expanded to the id of this unique instance of the component.
	 * @member Syn.Component
	 * @param {String} key A simple identifier that appears in your component
	 * @param {bool} no_escape Whether or not to escape the : in the key
	 * @return {String} The expanded per-instance identifier
	 */
	uniqueKey: function (key, no_escape)
	{
		var prefix = this.type ? this.type+'_' : '';

		if (no_escape)
		{
			return prefix+(key!=null ? key+'_' : '')+this.uid;
		}

		return prefix+(key!=null ? key+'_' : '')+this.uid_esc;
	},

	/**
	 * Return the jquery object for this component instance for this simple key
	 * @member Syn.Component
	 * @param {String} key A simple identifier that appears in your component
	 * @return {Object} The jquery object
	 */
	uniqueElmt: function (key)
	{
		return $('#'+this.uniqueKey(key));
	},

	/**
	 * Returns the jquery object for the entire component
	 * @return {Object} The component jquery object
	 */
	container: function ()
	{
		return this.uniqueElmt();
	},

	/**
	 * Submit some form elements via ajax to the component webservice. Will result in the component reloading with new settings.
	 * @param {Array} vals An array of form values to submit
	 * @param {Array} extra_opts
	 */
	submit: function (vals, extra_opts)
	{
		extra_opts = extra_opts||{};
		// Framework request
		if (this.config['uri'])
		{
			var self = this;
			var data = {};
			for (i in vals)
			{
				data[i] = vals[i];
			}

			data['_uri']        = data['_uri'] || this.config['uri'];
			data['_parent_uri'] = data['_parent_uri'] || this.config['parent_uri'];
			data['_root_url']   = Syn.Config.Framework.PortalRoot;
			data['_client_uri'] = 'client://client_config/'+Syn.Config.Framework.Client+'/';
			data['_site_uri']   = 'site://site_config/'+Syn.Config.Framework.Site+'/';

			if (extra_opts['render_wrapper'])
			{
				data['_render_wrapper'] = 1;
			}

			if (extra_opts['app_server'])
			{
				data._is_jsonp = 1;

				rq = {
					'url':         Syn.Config.Framework.AppServer + '_/',
					'contentType': 'application/json',
					'success':     function (x){ self.result(x); },
					'dataType':    'jsonp',
					'data':        data
				};
			}
			else
			{
				 rq = {
					'url':         Syn.Config.Framework.PortalRoot + '_/',
					'type':        'post',
					'contentType': 'application/json',
					'success':     function (x){ self.result(x); },
					'dataType':    'json',
					'data':        json.serialize(data)
				};
			}

			if (extra_opts.cache)
			{
				rq.jsCache = true;
			}

			$.ajax(rq);
			return;
		}

		// Perform the Troy ajax request
		if (!this.ajaxtoken)
		{
			return;
		}

		var packet = {'type':this.type, 'uid':this.uid, 'ajaxtoken':this.ajaxtoken, 'prefs':vals };

		if (extra_opts && extra_opts['norender'])
		{
			packet['norender'] = true;
		}

		this.comm = new Syn.Comm(Syn.Config.WebservicesUrl);
		this.comm.call('ComponentService', 'submit', packet, this, 'result');
	},

	/**
	 * Gets a component given a uri, parent uri and vals.
	 * @member Syn.Component
	 * @param {String} component_uri A uri of the component to render
	 * @param {String} parent_uri A uri of the parent uri for the component to render
	 * @param {Object} vals The values you wish to submit to the component
	 * @param obj {Object} The object that holds callback method.
	 * @param method {String|Function} Either a string method name or function used for callback.  (Optional)
	 * @param args {Array} Optional args for the callback.  (Optional)
	*/
	getComponent: function(component_uri, parent_uri, vals, obj, method)
	{
		return Syn.ComponentUtils.getComponent(component_uri, parent_uri, vals, obj, method);
	},

	loadUxAssets: function(res, callback)
	{
		return Syn.ComponentUtils.loadUxAssets(res, callback);
	},

	/**
	 * The target of the ajax component webservice. Replaces the component content.
	 * @param {mixed} res The content returned from the webservice
	 */
	result: function (res)
	{
		this.hideLoading();

		/**
		 * In case a Troy AJAX call has 'norender' set to true the response will be an empty string.
		 */
		if (!res)
		{
			return;
		}

		if (typeof res == 'string' && res)
		{
			this.container().replaceWith(res);
			return;
		}

		var self = this;
		var callback = function ()
		{
			if ( res['data'] )
			{
				self.onAjaxUpdate(res['data']);
			}
			else
			{
				var repl_target = res['has_wrapper'] ? self.wrapper() : self.container();
				repl_target.replaceWith(res['content']);
				var instance = Syn.ComponentMgr.getInstanceByUid(res.init.event_id);

				if (instance && instance != self)
				{
					Syn.ComponentMgr.remove(self);
				}
			}
		};

		this.loadUxAssets(res, callback);
	},

	/**
	 * Default ajax update handler, override this in subclasses to recieve the ajax update event
	 * @param {Object} config An associative array of config params
	 */
	onAjaxUpdate: function(config)
	{
		return;
	},

	/**
	 * Find a jquery element inside the component container
	 * @param {String} selector The jquery selector to execute inside the component container
	 * @return {Object} The jquery response object
	 */
	find: function(selector)
	{
		return $( '#'+this.uniqueKey()+ ( selector ? ' '+selector : '') );
	},

	/**
	 * Show the loading indicator.
	 * Options can be specified in the opts parameter.  The following opts are accepted:
	 *    target: {Object} A jQuery object where the loading layer will reside inside. [optional]
	 *    class: {String} An additional class name to use on the loading layer. [optional]
	 *
	 * @param {Object} opts Options for the loading layer
	 */
	showLoading: function(opts)
	{
		opts = opts || {};
		var loading = this.uniqueElmt("loading");
		var target  = opts["target"] || this.container();

		if (!loading.size())
		{
			loading = $("<div>").attr("id", this.uniqueKey("loading", true))
			                    .addClass("loading");

			// If the user specified an additional class, add it as well.
			if (opts["class"])
			{
				loading.addClass(opts["class"]);
			}
		}

		loading.css({
			width: target.outerWidth(),
			height: target.outerHeight()
		}).show();

		target.prepend(loading);

		return true;
	},

	/**
	 * Hide the loading indicator
	 */
	hideLoading: function()
	{
		this.uniqueElmt('loading').hide();
	},

	/**
	 * Loads scripts asynchronously and calls a callback when all scripts are done loading.
	 *
	 * @param scripts {Array|String} Array  of javascripts to load or String (for 1 js file to load)
	 * @param obj {Object} The object that holds callback method.
	 * @param method {String|Function} Either a string method name or function used for callback.
	 * @param number {int} The script index to start loading (Not required; defaults to 0)
	 * @member Syn.Component
	 */
	loadJs: function(scripts, obj, method, args, number)
	{
		var that = this;
		scripts = (typeof scripts == "string") ? [scripts] : scripts;
		number = number || 0;
		args = args || [];

		$.getScript(Syn.Config.PortalRoot+'js/'+scripts[number], function()
		{
			//Load the next one if we can
			if ((number+1) < scripts.length)
			{
				that.loadJs(scripts, obj, method,args, number+1);
			}
			else
			{
				//Do our callback now that we are done!
				(typeof method == 'string') ? obj[method].apply(obj, args ) : method.apply(obj, args );
			}
		});
	},

	/**
	 * Get the jquery handle to the component wrapper
	 * @return {Object} The wrapper container jquery object or the component container if no wrapper exists.
	 */
	wrapper: function()
	{
		// The Framework wrapper
		if (this.uniqueElmt('wrapper').length)
		{
			return this.uniqueElmt('wrapper');
		}

		/* Note: the wrap_sel selector has to iterate sub-nodes bcs the id's are not actually
			 unique for wrappers. :( Bad Troy, Bad.
		*/
		var res = this.uid.match(/^(\d+)[\w\:]*_([\w\d]+)$/);
		var wrap_sel = '#body_col_'+ res[1] +' div.comp_container[id=syn_comp_' + res[2] + ']';
		return $(wrap_sel).length ? $(wrap_sel) : this.container();
	},

	/**
	 * Remove the component and wrapper from the page.
	 */
	remove: function(options)
	{
		options = options || [];

		if ( Syn.ComponentMgr )
		{
			Syn.ComponentMgr.remove(this);
		}

		var target = options['target'] == 'wrapper' ? this.wrapper() : this.container();

		if (options['fade_out'])
		{
			target.fadeOut(options['fade_out'], function(){ $(this).remove(); } );
		}
		else
		{
			target.remove();
		}
	},

	/**
	 * Popup a component
	 * @param options {Object} Options
	 {
		 * component {Object | String} (Uri/avs if string)(Optional)
		 * - uri {String} Component Uri To Popup
		 * - params {Object} parameters passed to the component
		 * title {String} Title of component (Optional, overrides popup component title)
		 * layout {String} Layout of popup component, ie controls width (Optional, single|double|triple) 300px,612px, 960px) If not provided, defaults to single)
		 * css_class {String} CSS Class of popup component (Optional, If not provided, uses name of popup component)
		 * show_loading {String} true|false (Optional)
		 * draggable: true|false (Optional)
		 * closeable: true|false (Optional)
		 * resizable: true|false (Optional)
		 * modal: true|false (Optional)
		 * close_on_blur: true|false (Optional)
		 * show_title: true|false (Optional)
		 * center: "screen"|"component"| "#element_id" (Optional)
		 * max_popups: 1,2,3... (Optional) Defaults to 1)
		 * top: xxx (Optional)
		 * left: xxx (Optional)
		 * width: xxx (Optional)
		 * height: xxx (Optional)
	 }
	 *
	 * @param obj {Object} The object that holds callback method.
	 * @param method {String|Function} Either a string method name or function used for callback.  (Optional)
	 * @param args {Array} Optional args for the callback.  (Optional)
	 *
	 */
	popup: function(options, obj, method, args)
	{
		var that = this;
		var load_fn = function()
		{
			if (!that.syn_popup)
			{
				that.syn_popup = new Syn.Popup();
			}

			//If we want to center the popup over the component OR we have not specified a center + left + top
			if (options && options['center'] && options['center'] == 'component'
			 || (options && !options['center'] && !options['left'] && !options['top']))
			{
				options['center'] = '#'+that.uniqueKey();
			}

			that.syn_popup.popup(options, obj, method, args);
		};


		if (this.config['uri'])
		{
			//Load in Syn.Popup framework version
			$.getScripts(["en_US/globals/javascripts/framework/synpopup.js"], load_fn, Syn.Config.Framework.AssetsRoot);
		}
		else
		{
			//Load in Syn.Popup legacy
			$.getScripts(["framework/synpopup.packed.js"], load_fn, Syn.Config.PortalRoot+"js/");
		}
	},

	/**
	 * Live connects a tags for link submissions via ajax.
	 * @param {String|Object} sel
	 * @param {String|Function} method
	 */
	hrefToAjax: function(sel, method, extra_opts)
	{
		var obj = sel;
		if (typeof(obj) == "string")
		{
			obj = this.container().find(sel);
		}

		var self = this;
		obj.live("click", function()
		{
			if (method)
			{
				var a = [this];
				(typeof(method) == "string") ? self[method].apply(self, a) : method.apply(self, a);
			}

			var params = self.queryStrToObject($(this).attr("href"));
			self.submit(params,extra_opts);

			return false;
		});
	},

	/**
	 * Converts a query string to an object.
	 * @param {String} query_string
	 * @return {Array}
	 */
	queryStrToObject: function(query_string)
	{
		// query_string can be just a query string, or it can be a URL.  If it's a URL
		// with no query string, return an empty object.
		if (query_string.match(/^https?:\/\//) && query_string.indexOf("?") === -1)
		{
			return {};
		}

		var qs = query_string.match(/(?:^|\?)([^?]+)#?(?=#|$)/);
		qs = (qs) ? qs[1] : '';

		var params = qs.split(/&/);

		var arr = {};
		for (i = 0; i < params.length; ++i)
		{
			// PHP and JavaScript encode spaces differently.  Actually, PHP encodes spaces differently
			// as well.  http_build_query() in PHP encodes spaces as + (whereas rawurlencode() does %20).
			// JavaScript on the other hand encodes spaces a %20 only and doesn't encode the plus.  To fix this
			// we'll manually decode the plus as a space and then decode the rest.
			var keyvalue = params[i].split(/=/);
			var key = keyvalue[0];
			key = key.replace(/\+/g, ' ');
			key = decodeURIComponent(key);

			var value = keyvalue[1];
			if (value)
			{
				value = value.replace(/\+/g, ' ');
				value = decodeURIComponent(value);
			}
			arr[key] = (value) ? value : '';
		}

		return arr;
	},

	encodeDomId: function(str)
	{
	  return str.replace(/\W/g, function (char)
	  {
		return '-'+char.charCodeAt(0).toString(16);
	  });
	},

	decodeDomId: function(str)
	{
	  return str.replace(/\-([0-9a-f]{2})/ig, function (str,hex)
	  {
		return String.fromCharCode(parseInt(hex,16));
	  });
	}
});
;
/**
 * The Syn.ComponentMgr Static Class
 * @class Syn.ComponentMgr
 */
Syn.ComponentMgr =
{
	/**
	 * Map of component instances by class
	 * @member Syn.ComponentMgr
	 */
	instancesByClass: {},

	/**
	 * Map of instances by uid
	 * @member Syn.ComponentMgr
	 */
	instancesByUid: {},

	/**
	 * Instantiate a component instance
	 * @member Syn.ComponentMgr
	 */
	instantiate: function(config)
	{
		config['uid'] = config['uid'] || config['event_id'];

		var exists = Syn.ComponentMgr.instancesByUid[config['uid']];

		if (exists && exists.config['class_name'] == config['class_name'])
		{
			exists.onAjaxUpdate(config);
			return exists;
		}

		if (config["class_name"])
		{
			var instance = new (window["eval"](config['class_name']))(config);
			var inst_class_cache = Syn.ComponentMgr.instancesByClass[config['class_name']] || [];
			Syn.ComponentMgr.instancesByClass[config['class_name']] = inst_class_cache;

			inst_class_cache.push(instance);
			Syn.ComponentMgr.instancesByUid[instance.uid] = instance;
			return instance;
		}

		return false;
	},

	/**
	 * Get an array of instances of a particular component class
	 * @param {String} class The class of component to
	 * @return {Array} An array of instances
	 */
	getInstancesByClass: function(cclass)
	{
		return Syn.ComponentMgr.instancesByClass[cclass] || [];
	},

	/**
	 * Get an instance of a component based on uid
	 * @param {String} uid The uid of the component
	 * @return {Object} The component instance
	 */
	getInstanceByUid: function(uid)
	{
		return Syn.ComponentMgr.instancesByUid[uid];
	},

	/**
	 * Remove a component instance from the component manager
	 * @param {Object} instance The instance to be removed from the page
	 */
	remove: function(instance)
	{
		var class_arr;
		class_arr = Syn.ComponentMgr.instancesByClass[instance.config['class_name']];

		if (!class_arr)
		{
			return;
		}

		for (var i=0; i<class_arr.length; i++ )
		{
			if (class_arr[i] == instance)
			{
				class_arr.splice(i,1);
				break;
			}
		}

		if ( Syn.ComponentMgr.instancesByUid[instance.uid] == instance )
		{
			delete Syn.ComponentMgr.instancesByUid[instance.uid];
		}

		if (window['dd_writeCookie'])
		{
			dd_writeCookie();
		}
	}
};
;
/**
 * Create a Popup instance.
 * @constructor
 */
Syn.Popup = Class.extend(
{
	/**
	 * Initialize the Popup class. This is called automatically by the default constructor.
	 * @member Syn.Popup
	 */
	init: function ()
	{
		if (typeof Syn.Popup.popup_instance_uid == 'undefined')
		{
			Syn.Popup.popup_instance_uid = 0;
		}
		this.popup_instance_uid = Syn.Popup.popup_instance_uid++;
		this.popup_counter = 0;
		this.current_popup = false;
	},

	/**
	 * Popup a component
	 * @param options {Object} Options
	 {
		 * component {Object | String} (Uri/avs if string)(Optional)
		 * - uri {String} Component Uri To Popup
		 * - params {Object} parameters passed to the component
		 * title {String} Title of component (Optional, overrides popup component title)
		 * layout {String} Layout of popup component, ie controls width (Optional, single|double|triple) 300px,612px, 960px) If not provided, defaults to single)
		 * css_class {String} CSS Class of popup component (Optional, If not provided, uses name of popup component)
		 * show_loading {String} true|false (Optional)
		 * draggable: true|false (Optional)
		 * closeable: true|false (Optional)
		 * resizable: true|false (Optional)
		 * modal: true|false (Optional)
		 * close_on_blur: true|false (Optional)
		 * show_title: true|false (Optional)
		 * center: "screen"|"#element_id" (Optional)
		 * max_popups: 1,2,3... (Optional) Defaults to 1)
		 * top: xxx (Optional)
		 * left: xxx (Optional)
		 * width: xxx (Optional)
		 * height: xxx (Optional)
	 }
	 *
	 * @param obj {Object} The object that holds callback method.
	 * @param method {String|Function} Either a string method name or function used for callback.  (Optional)
	 * @param args {Array} Optional args for the callback.  (Optional)
	 *
	 */
	popup: function(options, obj, method, args)
	{
		var that = this;
		var options = options || {};
		var args = args || [];
		options['max_popups'] = options['max_popups'] || 1;
		options['title'] = options['title'] || "";
		options['component_zone'] = 'zone://popup/'+(this.popup_instance_uid)+"/"+this.popup_counter++;
		options['show_loading'] = (typeof options['show_loading'] != 'undefined') ? options['show_loading'] : true;
		var callback_fn = function(result)
		{
			if (result)
			{
				if (options['show_loading'])
				{
					$('#popup_loading_indicator').remove();
				}

				if (that.popup_counter > options['max_popups'] && that.current_popup)
				{
					$(that.current_popup).remove();
				}
				//Appends popup to the end of the body
				$(document.body).append(result.content);
				that.current_popup  = $(document.body).find(".syn_popup:last")[0];

				if (typeof method == 'string')
				{
					obj[method].apply(obj, [that.current_popup].concat(args));
				}
				else if(typeof method != 'undefined' && method)
				{
					method.apply(obj, [that.current_popup].concat(args));
				}
			}
		};

		var left = options['left'];
		var top = options['top'];

		if (options['center'] && options['center'] == 'screen')
		{
			left = ($(window).width() / 2) + ($(window).scrollLeft()) + 'px';
			top = ($(window).height()/2) + ($(window).scrollTop()) + 'px';
		}
		else if (options['center'] && $(options['center']).length > 0)
		{
			options['parent_key'] = $(options['center']).attr('id');
			left = ($(options['center']).offset().left) + ($(options['center']).width() / 2) + 'px';
			top = ($(options['center']).offset().top) + ($(options['center']).height() / 2) + 'px';
		}

		if (options['show_loading'])
		{
			$(document.body).append('<div id="popup_loading_indicator"></div>');
			$('#popup_loading_indicator').css({'left': left,'top': top});
		}
		
		var params = (options['component'] && options['component']['params']) ? options['component']['params'] : {};
		params['popup_component'] = options['component']['uri'] ? options['component']['uri'] : options['component'] || '';
		
		//If an action parameter is specified, rename it to popup_action and delete action
		if (params['action'])
		{
			params['popup_action'] = params['action'];
			params['action'] = null;
			delete params['action'];
		}

		//Append popup parameters to params array
		for (key in options)
		{
			if (key !='component')
			{
				params['popup_'+key] = options[key];
			}
		}

		Syn.ComponentUtils.getComponent(
			'component://Synacor/Portal/Components/Popup/',
			options['component_zone'],
			params,
			this,
			callback_fn);
	}
});;
/**
 * Tracking metrics namespace. 
 */
Syn.Tracking = {};

/**
 * Tracking module for images
 */
Syn.Tracking.Image =
{
	/**
	 * Record parameters to the tracking system
	 * @member Syn.Tracking.Image 
	 * @param {Object} params
	 */
	record: function(params)
	{
		var args = params['args'];
		var dt   = new Date();
		args['ts'] = dt.getTime();
		var img = document.createElement('img');
		var url = Syn.Config.PortalRoot + 'images/track/track.gif?' + jQuery.param( args );
		img.src = url;
		$(document.body).append(img);
	}
};

/**
 * Tracking Module for Omniture
 */
Syn.Tracking.Omniture =
{
	/**
	 * Record parameters to the tracking system
	 * @member Syn.Tracking.Image 
	 * @param {Object} params
	 */
	record: function(params)
	{
		var om = Syn.Config.Omniture;
		var args = params['args'];
		var s=s_gi(om['account']);

		if (!s)
		{
			return;
		}

		s.pageName = om['page_name'];
		s.server   = om['server'];
		s.channel  = om['context'];

		var track_vars = [];

		for ( k in om['omniture_variable_mappings'] )
		{
			var om_key = om['omniture_variable_mappings'][k] || k;
			s[ om_key ] = args[k]; 			
			track_vars.push( om_key );
		}

		s.linkTrackVars = track_vars.join(',');

		var s_code= params['event'] == 'load' ||  params['event'] == 'ready' ? s.t() : s.tl();

		if (s_code)
		{
			$('head').append(s_code);
		}
	}
};


jQuery.fn.extend( 
{
	/**
	 * Wrapper over bind that enables you to connect events to objects, not just callbacks
	 *
	 * @param type {String} Event type (click,focus,etc)
	 * @param obj {Object} The object you want to bind the event to
	 * @param method {String|Function} Either a string method name or function reference to call on obj
	 * @param args {Array} Optional arguments to pass to the callback (instead of the default ones) 
	 */
	track: function( params ) 
	{
		var module = params['module'];
		var args   = params['args'];
		var ev_t   = params['event'];
		var live   = params['live'];
		var defer  = params['defer'];

		if ( !Syn.Tracking[module] )
		{
			return this;
		}

		return this[ live ? 'live' : 'bind' ]( ev_t, function (ev) 
		{
			if (params['defer'] == 'unload')
			{
				$(window).unload(  function(){ Syn.Tracking[module].record(params); } );
			}

			else if (typeof( params['defer'] ) == 'number' )
			{
				setTimeout( function(){ Syn.Tracking[module].record(params); }, params['defer']  ); 
			}

			else
			{
				Syn.Tracking[module].record(params);
			}

			return true;
		}); 
	}
});
;
function __syn_showTabbedComponent(tab, pzi, index)
{
	var i = 0;
	var container       = document.getElementById('tabbed_component_' + pzi + '_container');
	var componentToShow = document.getElementById('tabbed_component_' + pzi + '_' + index);
	if (!container || !componentToShow)
	{
		return;
	}

	// Hide all other components
	for (i = 0; i < container.childNodes.length; i++)
	{
		var componentDiv = container.childNodes[i];
		if (componentDiv.style && componentDiv != componentToShow)
		{
			componentDiv.style.display = 'none';
		}
	}

	// Show the selected component
	componentToShow.style.display = 'block';
	componentToShow.className     = 'on';

	var parentList = tab.parentNode;
	// Get default class name
	var defaultClassName = '';
	for (i = 0; i < parentList.childNodes.length; i++)
	{
		var element = parentList.childNodes[i];
		if (element != tab && element.className != 'on' && element.className && element.className != 'undefined')
		{
			defaultClassName = element.className;
			break;
		}
	}
	// Deselected all tabs 
	for (i = 0; i < parentList.childNodes.length; i++)
	{
		var element = parentList.childNodes[i];

		if (element.nodeName.toLowerCase() == 'li')
		{
			element.className = defaultClassName;
		}
	}

	// Set selected tab to on
	tab.className = 'on';
}

/***** Expedia javascript functions *****/

var divs = new Array('syn_exp_travel_flight', 'syn_exp_travel_car', 'syn_exp_travel_hotel', 'syn_exp_travel_cruise');

function syn_show_exp(obj)
{
	for (var i = 0; i < divs.length; i++)
	{
		if (document.getElementById(obj) && obj == divs[i])
		{
			document.getElementById(obj).style.display='block';
		}
		
		else if(document.getElementById(divs[i]))
		{
			document.getElementById(divs[i]).style.display='none';
		}
	}
}

function syn_check_exp(obj)
{
	if (document.getElementById(obj))
	{
		document.getElementById(obj).checked=true;
	}
}
;
/***** Utility functions *****/

Number.prototype.NaN0 = function()
{ 
	return isNaN(this) ? 0 : this;
}

function Utils()
{
}

Utils.getPosition = function(e)
{
	var root_offset_y = e.offsetTop;
	if (navigator.userAgent.indexOf('MSIE') != -1) 
	{
		e = e.offsetParent;
	}

	var left = 0;
	var top = 0;
	while (e.offsetParent)
	{
		left += e.offsetLeft + (e.currentStyle ? (parseInt(e.currentStyle.borderLeftWidth)).NaN0() : 0);
		top += e.offsetTop  + (e.currentStyle ? (parseInt(e.currentStyle.borderTopWidth)).NaN0() : 0);
		e = e.offsetParent;
	}

	left += e.offsetLeft + (e.currentStyle ? (parseInt(e.currentStyle.borderLeftWidth)).NaN0() : 0);
	top += e.offsetTop  + (e.currentStyle ? (parseInt(e.currentStyle.borderTopWidth)).NaN0() : 0);

	return { 
		x: left,
		y: top + (navigator.userAgent.indexOf('MSIE') != -1 ? root_offset_y : 0) 
	};
}

Utils.mouseCoords = function(ev)
{	
	if (!ev) 
	{
		var ev = window.event; 
	}

	if (ev.pageX || ev.pageY)
	{
		return {
			x: ev.pageX,
			y: ev.pageY
		};
	} 
	else if (ev.clientX || ev.clientY)
	{
		return {
			x: ev.clientX + document.body.scrollLeft + document.documentElement.scrollLeft,
			y: ev.clientY + document.body.scrollTop + document.documentElement.scrollTop
		};
	}
	else
	{
		return {
			x: 0,
			y: 0
		};
	}
}

Utils.getMouseOffset = function(target, ev)
{
	var docPos = getPosition(target);
	var mousePos = mouseCoords(ev ? ev : window.event);
	return {
		x: mousePos.x - docPos.x,
		y: mousePos.y - docPos.y
	};
}

Utils.getPageSize = function()
{
	var pageWidth = 0, pageHeight = 0;
	if (typeof( window.innerWidth ) == 'number')
	{
		//Non-IE
		pageWidth = window.innerWidth;
		pageHeight = window.innerHeight;
	}
	else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight))
	{
		//IE 6+ in 'standards compliant mode'
		pageWidth = document.documentElement.clientWidth;
		pageHeight = document.documentElement.clientHeight;
	}
	else if (document.body && (document.body.clientWidth || document.body.clientHeight))
	{
		//IE 4 compatible
		pageWidth = document.body.clientWidth;
		pageHeight = document.body.clientHeight;
	}

	return {
		x: pageWidth,
		y: pageHeight
	};
}

Utils.hitTest = function(element, x, y)
{
	var pos = Utils.getPosition(element);
	var ex  = pos.x;
	var ey  = pos.y;
	var ew  = elmt.offsetWidth;
	var eh  = elmt.offsetHeight;
	
	return (x >= ex && x <= ex + ew && y >= ey && y <= ey + eh) ? true : false;
}

Utils.horizontalHitTest = function(element, y)
{
	var pos = Utils.getPosition(element);
	var ey  = pos.y;
	var eh  = element.offsetHeight;
	
	return (y >= ey && y <= ey + eh) ? true : false;
}

Utils.addListener = function(event, method, use_capture)
{
	use_capture = use_capture ? use_capture : false;

	if (typeof window.addEventListener != 'undefined')
	{
		window.addEventListener(event, method, use_capture); // gecko, safari, konqueror and standard.
	}
	else if (typeof document.attachEvent != 'undefined')
	{
		document.attachEvent('on' + event, method); // IE
	}
	else
	{
		window['on' + event] = method;
	}
}

Utils.disableSelection = function(element) 
{
	element.onselectstart = function() 
	{
		return false;
	};
	//element.unselectable = 'on';
	element.style.MozUserSelect = 'none';
}

/***** Portal Events Handler *****/

function PortalEvents(){}

PortalEvents.listeners =
{
'onLoad'   :[],
'mouseMove':[],
'mouseDown':[],
'mouseUp'  :[]
};

PortalEvents.addListener = function (event,method,object)
{
	PortalEvents.listeners[event].push( {'method':method,'object':object} );
}

PortalEvents.onEvent = function (type,ev)
{
	ev = ev || window.event;

	var ls = PortalEvents.listeners[type];

	for (var i=0; i<ls.length; i++ )
	{
		var listener = ls[i];

		if ( typeof(listener['object']) == 'object' )
		{
			var target = listener['object'];
			target[listener['method']](ev);
		}
		else
		{
			listener['method'](ev);
		}
	}
}


// Install events
Utils.addListener('mousedown', function(ev) { PortalEvents.onEvent( 'mouseDown' , ev); }, false);
Utils.addListener('mouseup', function(ev) { PortalEvents.onEvent( 'mouseUp'   , ev); }, false);
Utils.addListener('mousemove', function(ev) { PortalEvents.onEvent( 'mouseMove' , ev);  }, false);

/***** Legacy functions *****/

function hide_overlay_elements(id)
{
	var element = document.getElementById(id)
	element.setAttribute('forced_hidden', 'true');
	element.style.visibility = 'hidden';
}

function show_overlay_elements(id)
{
	var element = document.getElementById(id)
	element.removeAttribute('forced_hidden');
	element.style.visibility = 'visible';
}

function hide_disruptive_overlay_elements()
{
	if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
        {
                var ieversion=new Number(RegExp.$1)
                if (ieversion >= 6 && ieversion < 7) // only hide elements if the browser is ie6
                {
			hide_elements_by_tag(['iframe', 'object', 'embed']);
		}
	}
}

function show_disruptive_overlay_elements()
{
	if (/MSIE (\d+\.\d+);/.test(navigator.userAgent))
        {
                var ieversion=new Number(RegExp.$1)
                if (ieversion >= 6 && ieversion < 7) // only show elements if the browser is ie6
                {
			show_elements_by_tag(['iframe', 'object', 'embed']);
		}
	}
}

function hide_elements_by_tag(element_names)
{
	for (var h = 0; h < element_names.length; h++)
	{
		var elements = document.getElementsByTagName(element_names[h]);
		for (var j = 0; j < elements.length; j++)
		{
			if (elements[j].style.visibility != 'hidden')
			{
				elements[j].setAttribute('forced_hidden', 'true');
				elements[j].style.visibility = 'hidden';
			}
		}
	}
}

function show_elements_by_tag(element_names)
{
	for (var h = 0; h < element_names.length; h++)
	{
		var elements = document.getElementsByTagName(element_names[h]);
		for (var j = 0; j < elements.length; j++)
		{
			if (elements[j].getAttribute('forced_hidden') == 'true')
			{
				elements[j].removeAttribute('forced_hidden');
				elements[j].style.visibility = 'visible';
			}
		}
	}
}

function SYNACOR_findObj(n, d)
{
	var p, i, x;
	if (!d)
	{
		d = document;
	}
	if ((p = n.indexOf("?")) > 0 && parent.frames.length)
	{
		d = parent.frames[n.substring(p + 1)].document;
		n = n.substring(0, p);
	}
	if (!(x=d[n]) && d.all)
	{
		x = d.all[n];
	}
	for (i = 0; !x && i < d.forms.length; i++)
	{
		x = d.forms[i][n];
	}
	for (i = 0; !x && d.layers && id.layers.length; i++)
	{
		x = SYNACOR_findObj(n, d.layers[i].document);
	}
	if (!x && d.getElementById)
	{
		x = d.getElementById(n);
	}

	return x;
}

function find_pos_x(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
	{
		curleft += obj.x;
	}
	
	return curleft;
}

function find_pos_y(obj)
{
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
	{
		curtop += obj.y;
	}
	return curtop;
}

function SYNACOR_Snap() 
{
	var args = SYNACOR_Snap.arguments;
	var x = 0;
	var y = 0;

	for (offset = 0; offset < args.length; offset += 4)
	{
		var source_element = args[offset];
		var move_element = args[offset + 1];
		var dest_x = parseInt(args[offset + 2]);
		var dest_y = parseInt(args[offset + 3]);

		source_element = document.getElementById(source_element);
		move_element   = document.getElementById(move_element);
		if (!source_element || !move_element)
		{
			return;
		}

		x = find_pos_x(source_element);
		y = find_pos_y(source_element);

		try
		{
			move_element.style.left = (x + dest_x) + 'px';
			move_element.style.top  = (y + dest_y) + 'px';
		}
		catch (e)
		{
			try
			{
				move_element.offsetLeft = x + dest_x;
				move_element.offsetTop  = y + dest_y;
			}
			catch (e)
			{
			}
		}
	}
	return;
}


function SYNACOR_showHideLayers()
{ //v6.0
	var i, p, v, obj, vv, vd;
	var args = SYNACOR_showHideLayers.arguments;
	for (i = 0; i < (args.length-2); i += 3)
	{
		if ((obj = SYNACOR_findObj(args[i])) != null)
		{
			v = args[i + 2];
			if (obj.style)
			{
				obj = obj.style;
				vv  = (v == 'show') ? 'visible' : (v == 'hide') ? 'hidden' : v;
				vd  = (v == 'show') ? 'block'   : (v == 'hide') ? 'none'   : v;
			}
			obj.visibility=vv;
			obj.display=vd;
		}
	}
}

function getXMLRequestObject()
{
	try	
	{
		return new ActiveXObject('Msxml2.XMLHTTP')
	}
	catch (exception) 
	{
		try 
		{
			return new ActiveXObject('Microsoft.XMLHTTP');
		}
		catch (exception)
		{
			try
			{
				return new XMLHttpRequest()
			}
			catch (exception)
			{
				return false;
			}
		}
	}
}

function get_cdata(dom, tag)
{
	var tag = dom.getElementsByTagName(tag);
	if (!tag || tag.length < 1 || !tag[0].firstChild ||	!tag[0].firstChild.data)
	{
		return '';
	}
	return tag[0].firstChild.data;
}

function get_attribute(dom, tag, attribute)
{
	var tag = dom.getElementsByTagName(tag);
	if (!tag || tag.length < 1 || !tag[0].attributes ||
	     tag[0].attributes.length < 1 || !tag[0].attributes.getNamedItem(attribute))
	{
		return '';
	}
	
	return tag[0].attributes.getNamedItem(attribute).value;
}

function hide_id(id_to_hide)
{
	var what = document.getElementById(id_to_hide);
	if (what)
	{
		what.style.display='none';
	}
}

function base64encode(str)
{
	var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
	var out;
	var i;
	var len;
	var c1;
	var c2;
	var c3;
	var len = str.length;
	var i = 0;
	out = "";
	while (i < len)
	{
		c1 = str.charCodeAt(i++) & 0xff;
		if (i == len)
		{
			out += base64EncodeChars.charAt(c1 >> 2);
			out += base64EncodeChars.charAt((c1 & 0x3) << 4);
			out += "==";
			break;
		}
		c2 = str.charCodeAt(i++);
		if (i == len)
		{
			out += base64EncodeChars.charAt(c1 >> 2);
			out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
			out += base64EncodeChars.charAt((c2 & 0xF) << 2);
			out += "=";
			break;
		}
		c3 = str.charCodeAt(i++);
		out += base64EncodeChars.charAt(c1 >> 2);
		out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
		out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
		out += base64EncodeChars.charAt(c3 & 0x3F);
	}
	return out;
}

function trimStr(str)
{
	str = str.replace(/^\s*/, "");
	str = str.replace(/\s*$/, "");
	
	return str;
}

function add_event_listener(oRef, en, fn)
{
	obj = (typeof oRef == 'string')? document.getElementById(oRef) : oRef;
	if (window.addEventListener) 
	{
		obj.addEventListener(en, fn, false);
	}
	else if (window.attachEvent) 
	{
		obj.attachEvent('on'+en, fn);
	}
}

function remove_event_listener(oRef, en, fn)
{
	obj = (typeof oRef == 'string') ? document.getElementById(oRef) : oRef;
	if (window.addEventListener) 
	{
		obj.removeEventListener(en, fn, false);
	}
	else if (window.attachEvent) 
	{
		obj.detachEvent('on' + en, fn);
	}
}


function reg_repl_esc(text)
{
	return text.replace(/\$/g, '&#36;');
}


/**
 * Deprecated, do not use
 */
function openWindow(theURL, winName, features)
{
	window.open(theURL, winName, features);
}


function SYNACOR_swapImgRestore()
{ //v3.0
	var i, x;
	var a = document.SYNACOR_sr;
	for (i = 0; a && i < a.length && (x = a[i]) && x.oSrc; i++)
	{
		x.src = x.oSrc;
	}
}



function SYNACOR_swapImage() 
{ //v3.0
	var i, j = 0, x;
	var a = SYNACOR_swapImage.arguments;

	document.SYNACOR_sr = new Array;
	for (i = 0; i < (a.length - 2); i += 3)
	{
		if ((x = SYNACOR_findObj(a[i])) != null)
		{
			document.SYNACOR_sr[j++] = x;
			if (!x.oSrc)
			{
				x.oSrc = x.src;
			}
			x.src = a[i + 2];
		}
	}
}

function waterimg(arg) 
{
       window.location = arg;
}

function addLoadEvent(fn)
{
	if (window.addEventListener)
	{
		window.addEventListener('load', fn, false);
	}
	else if (window.attachEvent)
	{
		window.attachEvent('onload', fn);
	}
};
/**
 * Ajax JavaScript framework
 * Loosely based off of the Prototype JavaScript framework
 *    Prototype is (c) 2005 Sam Stephenson <sam@conio.net>
 *    Prototype is freely distributable under the terms of an MIT-style license.
 *    For details, see the Prototype web site: http://prototype.conio.net/
 */

SynAjax_Request_Events =
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];


function getTransport() 
{
	try	
	{
		return new ActiveXObject('Msxml2.XMLHTTP')
	}
	catch (exception) 
	{
		try 
		{
			return new ActiveXObject('Microsoft.XMLHTTP');
		}
		catch (exception)
		{
			try
			{
				return new XMLHttpRequest()
			}
			catch (exception)
			{
				return false;
			}
		}
	}
}

SynAjax = function()
{
	var self = new Object();

	self.transport = getTransport();
	
	self.request = function(url, options) 
	{
		this.doRequest(null, url, options);
	}

	self.update = function(element_id, url, options)
	{
		this.doRequest(element_id, url, options);
	}

	self.doRequest = function(element_id, url, options)
	{
		this.url        = url;
		this.options    = options;
		this.updater    = element_id;
		this.parameters = this.options.parameters || '';

		try 
		{
			if (this.options.method == 'get')
			{
				this.url += (this.url.match(/\?/) ? '&' : '?') + this.parameters;
			}

			var loader = this;
			this.transport.onreadystatechange = function()
			{
				loader.onStateChange.call(loader);
			}
			this.transport.open(this.options.method, this.url, true);
			this.setRequestHeaders();

			var body = this.options.postBody ? this.options.postBody : this.parameters;
			this.transport.send(this.options.method == 'post' ? body : null);

		}
		catch (exception) 
		{ }
	}

	self.setRequestHeaders = function() 
	{
		var requestHeaders =
			['X-Requested-With', 'XMLHttpRequest'];

		if (this.options.method == 'post') 
		{
			requestHeaders.push('Content-type',	'application/x-www-form-urlencoded');

			/**
			 * Force "Connection: close" for Mozilla browsers to work around
			 * a bug where XMLHttpReqeuest sends an incorrect Content-length
			 * header. See Mozilla Bugzilla #246651.
			 */
			if (this.transport.overrideMimeType)
				requestHeaders.push('Connection', 'close');
		}

		if (this.options.requestHeaders)
		{
			requestHeaders.push.apply(requestHeaders, this.options.requestHeaders);
		}

		for (var i = 0; i < requestHeaders.length; i += 2)
		{
			this.transport.setRequestHeader(requestHeaders[i], requestHeaders[i+1]);
		}
	}

	self.onStateChange = function()
	{
		if (!this.transport)
		{
			if (this.transport == 'undefined')
			{
				return;
			}
		}

		var event = SynAjax_Request_Events[this.transport.readyState];

		if (this.transport.readyState != 1)
		{
			if (event == 'Complete')
			{
				if (this.updater != null)
				{
					var element = document.getElementById(this.updater);
					try 
					{
						element.innerHTML = this.transport.responseText;
					}
					catch (exception)
					{ }
				}

				try
				{
					this.options.onComplete(this.transport);
				}
				catch (exception)
				{ }

				if ((this.header('Content-type') || '').match(/^text\/javascript/i))
				{
					this.evalResponse();
				}
			}

			// Avoid memory leak in MSIE: clean up the oncomplete event handler 
			if (event == 'Complete')
			{
				this.transport.onreadystatechange = function(){};
			}
		}
	}

	self.header = function(name)
	{
		try
		{
			return this.transport.getResponseHeader(name);
		}
		catch (exception)
		{
			return null;
		}
	}

	self.evalResponse = function()
	{
		try
		{
			return eval(this.transport.responseText);
		}
		catch (exception)
		{
			return null;
		}
	}

	return self;
}
;
/**** $Id: login.js,v 1.4 2008/06/30 16:09:07 rhorn Exp $ ****/

function hideSubmitButton()
{
	document.getElementById('login_button').style.display = 'none';
	document.getElementById('login_processing').style.display = 'block';
	return true;
}

function showSubmitButton()
{
	document.getElementById('login_button').style.display = 'block';
	document.getElementById('login_processing').style.display = 'none';
	return true;
}

function login_xml_response_handler(req)
{
	// split result by |
	var result = req.responseText.split('|');

	if (result[0] == 'OK')
	{
		// result was ok
		// result[1] has bounceto value
		try
		{
			if (result[1].length > 0 && result[1].match(/^javascript:/))
			{
				var js_to_eval = result[1].replace(/^javascript:/, '');
				eval(js_to_eval);
			}
			else if (result[1].length > 0 && result[1].indexOf('undefined') == -1)
			{
				window.location.href = result[1];
			}
			else
			{
				window.location.reload();
			}
		}
		catch (e)
		{
			window.location.reload();
		}
		//hide_login();
	}
	else
	{
		showSubmitButton();
		// invalid user or password
		document.getElementById('login_error').innerHTML = result[1];
		document.getElementById('login_error').style.display = 'block';
	}
}

function logout_xml_response_handler(req)
{
	// split result by |
	var result = req.responseText.split('|');

	if (result[0] == 'OK')
	{
		try
		{
			window.location.reload();
		}
		catch (e)
		{
			window.location.href = result[1];
		}
	}
}

function logout_send_xml_http_request()
{
	var url = Syn.Config.PortalRoot + 'files/charter/ajaxapi/login.php';
	params = 'action=logout';

	new SynAjax().request(url,
	{
		method: 'post',
		parameters: params,
		onComplete: logout_xml_response_handler
	}
	);
	return false;
}

function login_send_xml_http_request(username, passwd, bounceto, remember_me)
{
	document.getElementById('login_error').style.display = 'none';
	var url = Syn.Config.PortalRoot + 'files/charter/ajaxapi/login.php'; 
	var params  = 'username=' + encodeURIComponent(username);
	params += '&passwd=' + encodeURIComponent(passwd);
	params += '&bounceto=' + encodeURIComponent(bounceto);
	params += '&remember_me=' + encodeURIComponent(remember_me);
	params += '&action=login';
	new SynAjax().request(url,
	{
		method: 'post',
		parameters: params,
		onComplete: login_xml_response_handler
	}
	);
}

function viewport_width()
{
	return self.innerWidth || (document.documentElement.clientWidth || document.body.clientWidth);
}

function viewport_height()
{
	return self.innerHeight || (document.documentElement.clientHeight || document.body.clientHeight);
}

function scrollsize_height()
{
	var test1 = document.body.scrollHeight;
	var test2 = document.body.offsetHeight
	if (test1 > test2)
	{
		return document.body.scrollHeight;
	}
	else
	{
		return document.body.offsetHeight;
	}
}

function scrollsize_width()
{
	return self.scrollWidth || (document.documentElement.scrollWidth || document.body.scrollWidth);
}

function my_scroll_top()
{
	return self.scrollTop || (document.documentElement.scrollTop || document.body.scrollTop);
}

function viewport_size()
{
	return { width: viewport_width(), height: viewport_height() };
}

function hide_adwrapper()
{
	var hadwrapper = document.getElementById('hide_adwrapper');
	if (hadwrapper)
	{
		if (hadwrapper.style.visibility = 'visible')
		{
			hadwrapper.style.visibility = 'hidden';
		}
	}
}

function show_adwrapper()
{
	var hadwrapper = document.getElementById('hide_adwrapper');
	if (hadwrapper)
	{ 
		if (hadwrapper.style.visibility = 'hidden')
		{
			hadwrapper.style.visibility = 'visible';
		}
	}
}

function hide_naughty_wmps()
{
	var wmps = new Array('wmp_vid_player', 'fl_vid_player');
	for (var i = 0; i < wmps.length; i++)
	{
		var owmps = document.getElementById(wmps[i]);
		if (owmps)
		{
			owmps.style.visibility='hidden';
		}
	}		
}

function reveal_naughty_wmps()
{
	var wmps = new Array('wmp_vid_player', 'fl_vid_player');
	for (var i = 0; i < wmps.length; i++)
	{
		var owmps = document.getElementById(wmps[i]);
		if (owmps)
		{
			owmps.style.visibility='visible';
		}
	}	
}

function hide_naughty_iframes()
{
	var ad_frames = document.getElementsByTagName('iframe');
	for (var h = 0; h < ad_frames.length; h++)
	{
		var f = ad_frames[h];
		if (f.style.visibility != 'hidden')
		{
			f.setAttribute('forced_hidden', 'true');
			f.style.visibility = 'hidden';
		}
	}
}

function reveal_naughty_iframes()
{
	var ad_frames = document.getElementsByTagName('iframe');
	for (var h = 0; h < ad_frames.length; h++)
	{
		var f = ad_frames[h];
		if (f.getAttribute('forced_hidden') == 'true')
		{
			f.style.visibility = 'visible';
			f.removeAttribute('forced_hidden');
		}
	}
}

function hide_naughty_tags()
{
	var types = ['embed'];
	for (var i=0;i<types.length;i++)
	{
		var tags = document.getElementsByTagName(types[i]);
		for (var j=0;j<tags.length;j++)
		{
			var tag = tags[j];
			if (tag.style.visibility = 'visible')
			{
				tag.style.visibility = 'hidden';
				tag.setAttribute('forced_hidden',true);
			} 
		}
	}
}

function reveal_naughty_tags()
{
	var types = ['embed'];

	for (var i=0;i<types.length;i++)
	{
		var tags = document.getElementsByTagName(types[i]);
		for (var j=0;j<tags.length;j++)
		{
			var tag = tags[j];
			if (tag.getAttribute('forced_hidden'))
			{
				tag.style.visibility = 'visible';
				tag.setAttribute('forced_hidden',false);
			} 
		}
	}
}

function hide_login()
{
	var loginCont = document.getElementById('login_cont');
	var modalCover = document.getElementById('modal_cover');
	reveal_naughty_iframes();
	reveal_naughty_wmps();
	reveal_naughty_tags();
	show_adwrapper();
	loginCont.style.display  = 'none';
	modalCover.style.display = 'none';

	// for IE 6, we hide the dropdowns
	if (navigator.userAgent.indexOf("MSIE 6") > 0)
	{
		login_show_dropdowns();
	}
}

function show_login()
{
	//var vW = 2500;
	var vW = viewport_width();
	var vH = viewport_height();
	var vS = viewport_size();
	var sH = scrollsize_height();
	var sW = scrollsize_width();
	var sT = my_scroll_top();
	var loginCont = document.getElementById('login_cont');
	var modalCover = document.getElementById('modal_cover');
	var closeLogin = document.getElementById('close_login');
	closeLogin.onclick = hide_login;
	window.onscroll = window.onresize = function (e)
	{
		var Client =
		{
			myScrollTop: function()
			{
				return self.scrollTop || (document.documentElement.scrollTop || document.body.scrollTop);
			}
		};
		var sT = Client.myScrollTop();
		loginCont.style.top = ((vH - 295)/2) + sT + 'px';
	};

	hide_naughty_iframes();
	hide_naughty_wmps();
	hide_naughty_tags();
	hide_adwrapper();

	// for IE 6, we hide the dropdowns.
	if (navigator.userAgent.indexOf("MSIE 6") > 0)
	{
		login_hide_dropdowns();
	}

	document.getElementById('login_error').innerHTML = '';
	document.getElementById('login_error').style.display = 'block';
	loginCont.style.width = '600px';
	loginCont.style.height = '295px';
	loginCont.style.clear = 'all';
	loginCont.style.left = (vW - 600) / 2 + 'px';
	loginCont.style.top = (vH - 295) / 2 + 'px';
	loginCont.style.display = 'block';

	if (sH < vH)
	{
		modalCover.style.height = vH + 'px';
	}
	else
	{
		modalCover.style.height = sH + 'px';
	}

// -----------------------------------------------------------------------------------

//
// getPageSize()
// Returns array with page width, height and window width, height
// Core code from - quirksmode.org
// Edit for Firefox by pHaez
//
function getPageSize()
{
	var xScroll, yScroll;
	if (window.innerHeight && window.scrollMaxY)
	{	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	}
	else if (document.body.scrollHeight > document.body.offsetHeight)
	{
		// all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	}
	else 
	{ 
		// Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) 
	{	
		// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientHeight) 
	{ 
		// Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} 
	else if (document.body) 
	{ 
		// other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if (yScroll < windowHeight)
	{
		pageHeight = windowHeight;
	} 
	else 
	{ 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if (xScroll < windowWidth)
	{	
		pageWidth = windowWidth;
	} 
	else 
	{
		pageWidth = xScroll;
	}
	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}

// -----------------------------------------------------------------------------------

var arrayPageSize = getPageSize();
//modalCover.setWidth('modal_cover', arrayPageSize[0]);
//modalCover.style.width = 100 + '%';
//modalCover.style.width = 'auto';
		
if (navigator.userAgent.indexOf("MSIE 6") > 0)
{
	modalCover.style.width = arrayPageSize[0] + 'px';
	//modalCover.style.width = '100%';
}
else
{
	modalCover.style.width = 100 + '%';
	modalCover.style.minWidth = 968 + 'px';
}

modalCover.style.position = 'absolute';
modalCover.style.top = '0px';
modalCover.style.left = '0px';
modalCover.style.display = 'block';
modalCover.style.overflow = 'hidden';
loginCont.style.display = 'block';
//Element.toggle(modalCover);
//Element.toggle(loginCont);

document.getElementById('__syn_login_username').focus();
}

function login_hide_dropdowns()
{
	var elements = document.getElementsByTagName('select');
	var i = 0;
	for (i = 0; i < elements.length; i++)
	{
		if (elements[i].type == 'select-one')
		{
			elements[i].style.display = 'none';
		}
	}
	if (typeof window.pldv_hide_overlay == 'function')
	{
		pldv_hide_overlay()
	};
}

function login_show_dropdowns()
{
	var elements = document.getElementsByTagName('select');
	var i = 0;
	for (i = 0; i < elements.length; i++)
	{
		if (elements[i].type == 'select-one')
		{
			elements[i].style.display = '';
		}
	}
	if (typeof window.pldv_show_overlay == 'function')
	{
		pldv_show_overlay()
	};
}

function auto_login()
{
	if (!__LOGGED_IN__ && document.location.search.indexOf("message=secondary_login") != -1)
	{
		var login_form_div = document.getElementsByTagName('DIV');
		var len = login_form_div.length;
		while (len--)
		{
			if (login_form_div[len].className == 'login_form')
			{
				login_form_div = login_form_div[len];
				break;
			}
		}
		if (!login_form_div)
		{
			alert("Login Disabled, define class 'login_form'");
			return;
		}
		var myLoginForm = login_form_div.getElementsByTagName('form');
		if (!myLoginForm || myLoginForm.length == 0)
		{
			alert("Login Disabled, define element 'form' in class 'login_form'");
			return;
		}

		var regexS = "[\\?&]bounceto=([^&#]*)";
		var regex = new RegExp( regexS );
		var tmpURL = window.location.href;
		var results = regex.exec( tmpURL );
		var bounceto = window.location.href;

		if ( results != null )
		{
			bounceto = results[1]; // do not unescap
		}

		myLoginForm[0].action = bounceto;
		myLoginForm[0].onsubmit = _login_form_onsubmit;
		show_login();
	}
}

function _login_form_onsubmit()
{
	var username;
	var password;
	var remember_me = (document.getElementById('__syn_login_remeber_me').checked ? 'Y' : '');
	var inputs = this.getElementsByTagName('input');
	for (l = 0; l < inputs.length; l++)
	{
		if (inputs[l].className == 'username')
		{
			username = inputs[l].value;
		}
		if (inputs[l].className == 'passwd')
		{
			password = inputs[l].value;
		}
	}
	login_send_xml_http_request(username, password, this.action, remember_me);
	return false;
}

function _login_a_onclick()
{
	var login_form_div = document.getElementsByTagName('DIV');
	var len = login_form_div.length;
	while (len--)
	{
		if (login_form_div[len].className == 'login_form')
		{
			login_form_div = login_form_div[len];
			break;
		}
	}
	if (!login_form_div)
	{
		alert("Login Disabled, define class 'login_form'");
		return;
	}
	var myLoginForm = login_form_div.getElementsByTagName('form');
	if (!myLoginForm || myLoginForm.length == 0)
	{
		alert("Login Disabled, define element 'form' in class 'login_form'");
		return;
	}
	myLoginForm[0].action = this.href;
	myLoginForm[0].onsubmit = _login_form_onsubmit;
	show_login();
	return false;
}

function _login_catcher(e)
{
	var target = e.target || e.srcElement;
	var a_element = null;
	var l_element = null;
	var parent = target;

	for (var i=0; i < 6; i++)
	{
		if (!a_element && parent.tagName == "A")
		{
			a_element = parent;
			if (a_element.login_capture)
			{
				return;
			}
		}
		if (!l_element && parent.className == "site_login")
		{
			l_element = parent;
			break;
		}
		parent = parent.parentNode ? parent.parentNode : parent.parentElement;
		if (parent == null)
		{
			return;
		}
	}

	if (!a_element || !l_element)
	{
		return;
	}

	a_element.onclick = _login_a_onclick;
	a_element.login_capture = true;
	return true;
}

if (!__LOGGED_IN__)
{
	if (window.document && window.document.addEventListener)
	{
		window.document.addEventListener('mousedown', _login_catcher, false);
	}
	else if(window.document && window.document.attachEvent)
	{
		window.document.attachEvent('onmousedown', _login_catcher);
	}
}

function createRequestObject() 
{
	FORM_DATA = new Object();
	// The Object ("Array") where our data will be stored.
	separator = ',';
	// The token used to separate data from multi-select inputs
	query = '' + this.location;
	// Get the current URL so we can parse out the data.
	// Adding a null-string '' forces an implicit type cast
	// from property to string, for NS2 compatibility.
	query = query.substring((query.indexOf('?')) + 1);
	// Keep everything after the question mark '?'.

	if (query.length < 1) 
	{ 
		return false; 
	}  // Perhaps we got some bad data?

	keypairs = new Object();
	numKP = 1;
	// Local vars used to store and keep track of name/value pairs
	// as we parse them back into a usable form.

	while (query.indexOf('&') > -1) 
	{
		keypairs[numKP] = query.substring(0,query.indexOf('&'));
		query = query.substring((query.indexOf('&')) + 1);
		numKP++;
		// Split the query string at each '&', storing the left-hand side
		// of the split in a new keypairs[] holder, and chopping the query
		// so that it gets the value of the right-hand string.
	}

	keypairs[numKP] = query;
	// Store what's left in the query string as the final keypairs[] data.

	for (i in keypairs) 
	{
		keyName = keypairs[i].substring(0,keypairs[i].indexOf('='));
		// Left of '=' is name.
		keyValue = keypairs[i].substring((keypairs[i].indexOf('=')) + 1);
		// Right of '=' is value.
		while (keyValue.indexOf('+') > -1) 
		{
			keyValue = keyValue.substring(0,keyValue.indexOf('+')) + ' ' + keyValue.substring(keyValue.indexOf('+') + 1);
			// Replace each '+' in data string with a space.
		}

		keyValue = unescape(keyValue);
		// Unescape non-alphanumerics

		if (FORM_DATA[keyName]) 
		{
			FORM_DATA[keyName] = FORM_DATA[keyName] + separator + keyValue;
			// Object already exists, it is probably a multi-select input,
			// and we need to generate a separator-delimited string
			// by appending to what we already have stored.
		} 
		else 
		{
			FORM_DATA[keyName] = keyValue;
			// Normal case: name gets value.
		}
	}
	return FORM_DATA;
}
FORM_DATA = createRequestObject();

if (FORM_DATA['message'] == 'bad_password')
{
	addLoadEvent(_login_a_onclick);
}

function focusGoogleBar()
{
	if (document.getElementById('q'))
	{
		// use try to eliminate IE7 error
		try
		{
			document.getElementById('q').focus();
		}
		catch (e)
		{
		
		}
	}
}
function addLoadEvent(fn)
{
	if (window.addEventListener)
	{
		window.addEventListener('load', fn, false)
	}
	else if (window.attachEvent)
	{
		window.attachEvent('onload', fn);
	}
}
;
$(document).ready(function(){var premiums=$('#left_nav .premium_services > li').size();var random_premium=(Math.floor(Math.random()*premiums));$('#left_nav .premium_services > li:eq('+random_premium+') ul').slideToggle().prev('h1').children('.trigger').toggleClass('nav_open');if(random_premium!==0&&random_premium!=2){$('#left_nav .comp_container_premiumspotlight:has(img)').wrap('<li class="spotlight"></li>');$('#left_nav .comp_container_premiumspotlight:has(img)').show()}$('#left_nav .container h1 ~ ul:not(.closed)').prev().children('.trigger').addClass('nav_open');var path=location.pathname;if(path.indexOf('/customization/')>=0){$('#left_nav .premium_services').addClass('closed');$('#left_nav .my_account').removeClass('closed')}$('#left_nav .trigger, #left_nav .container > h1 > span').click(function(){$(this).parent().next('ul').slideToggle('normal');$(this).parent().children('.trigger').toggleClass('nav_open')});$('#h-nav-dd-holder #left_nav .level_1 > .container, #site_container_800 #left_nav .level_1 > .container').hover(function(){$(this).children('ul:eq(0)').show();$(this).children('h1').children('.trigger').toggleClass('nav_open')},function(){$(this).children('ul:eq(0)').hide();$(this).children('h1').children('.trigger').toggleClass('nav_open')})});;
Syn.Tv={};Syn.Rd={};if($.fn.tv_ajax_version===undefined){var root=Syn.Config.PortalRoot;root=(typeof(root)!='undefined')?root:Syn.Config.Framework.PortalRoot;$.getScript(root+'js/3rdparty/jquery/plugins/jquery.tvajax.packed.js')}
;
$(document).ready(function(){if($("#hide_toggle").size()){$("#hide_toggle").get(0).onmouseover=function(){};$("#hide_toggle").get(0).onmouseout=function(){}}});
;
Syn.Tv.Lib={siXml:null,dragX:0,dragY:0,curChanRange:0,progDetailsAjax:function(cid,lst_id,prvdr,zipcode,anchor_id){hide_disruptive_overlay_elements();Syn.Tv.Lib.selectView(0);var div=Syn.Tv.Lib.mkDiv();var xmod=(find_pos_x(document.getElementById(anchor_id))>450)?-400:50;$(div).html(Syn.Tv.Lib.progDetailsWait());SYNACOR_Snap(anchor_id,div.id,xmod,-70);Syn.Tv.Lib.mkView(div);$(window).bind('resize',Syn.Tv.Lib.mkView);$(div).bind('onmouseover',Syn.Tv.Lib.selectView);$.fn.tvAjax({type:'GET',url:(Syn.Config.PortalRoot+'tv/listingdetails_xml.php'),data:{cid:cid,lid:lst_id,p:prvdr,z:zipcode},success:function(xml){Syn.Tv.Lib.dispDiv(Syn.Tv.Lib.progDetails(xml))},dataType:'xml',cache:false})},progDetailsWait:function(){var b='<table width="350" border="0" cellspacing="0" cellpadding="3">';b+='<tr bgcolor="#84A4DF" id="rd_dragArea" style="cursor:move" height="25"><td class="tvlist_search_popup_header">&nbsp;Program Information</td><td align="right" class="tvlist_search_popup_header">';b+='<tr class="search_criteria search_criteria_header" bgcolor="#e2e2e2"><td colspan="2"><b style="font-size:12px"><br />Retrieving Program Information</b><br /><br /></td></tr>';b+='<tr id="tv_details_wait"><td colspan="2" valign="top"><br /><br /><img src="'+Syn.Config.PortalRoot+'tv/images/loadingfinal.gif" alt="Retrieving Program Information, Please Wait" border="0" style="margin-right:10px" /><br /><br /></td></tr>';return(b+'</table>')},progDetails:function(xml){var ep_ttl=Syn.Tv.Lib.getXml(xml,'episode_title');var ex_desc=Syn.Tv.Lib.getXml(xml,'extended_description');var net_src=Syn.Tv.Lib.getXml(xml,'network_source');var lang=Syn.Tv.Lib.getXml(xml,'language');var a_tmstr=Syn.Tv.Lib.getXml(xml,'air_timestring');var a_tm=Syn.Tv.Lib.getXml(xml,'air_time');var dur_str=Syn.Tv.Lib.getXml(xml,'duration_string');var dur=Syn.Tv.Lib.getXml(xml,'duration');var mpaa_r=Syn.Tv.Lib.getXml(xml,'mpaa_rating');var tv_r=Syn.Tv.Lib.getXml(xml,'tv_rating');var show_url=Syn.Tv.Lib.getXml(xml,'show_url');Syn.Tv.Lib.siXml=xml;var b='<table width="350" border="0" cellspacing="0" cellpadding="3">';b+='<tr bgcolor="#84A4DF" id="rd_dragArea" style="cursor:move" height="25"><td class="tvlist_search_popup_header">&nbsp;Program Information</td><td align="right" class="tvlist_search_popup_header">';b+='<a href="javascript:Syn.Tv.Lib.hideDiv();" title="Close"><img src="'+Syn.Config.PortalRoot+'tv/images/button_close.png" width="14" height="12" border="0" align="absmiddle" alt="Close" /></a></td></tr>';if(show_url!=""){b+='<tr class="search_criteria search_criteria_header" bgcolor="#e2e2e2"><td colspan="2"><b style="font-size:12px"><a href="'+show_url+'">'+Syn.Tv.Lib.getXml(xml,'full_title').toUpperCase()+'</a></b><br />'}else{b+='<tr class="search_criteria search_criteria_header" bgcolor="#e2e2e2"><td colspan="2"><b style="font-size:12px">'+Syn.Tv.Lib.getXml(xml,'full_title').toUpperCase()+'</b><br />'}if(Syn.Tv.Lib.getXml(xml,'repeat')==1){b+='(Re-run)&nbsp;'}b+=ep_ttl+'</td></tr>';b+='<tr class="search_criteria"><td class="search_criteria_header" colspan="2" align="right"  bgcolor="#e2e2e2"><b>';var ihdr='<div class="tvlib_icon_cont"> <img src="'+Syn.Config.PortalRoot+'tv/images/icons/';if(Syn.Tv.Lib.getXml(xml,'hdtv')==1){b+=ihdr+'hdtv.gif" alt="HDTV" height="12" border="0" align="absmiddle" /> &nbsp;&nbsp;'}if(Syn.Tv.Lib.getXml(xml,'cc')==1){b+=ihdr+'cc.gif" alt="Closed Caption" height="12" border="0" align="absmiddle" /> &nbsp;&nbsp;'}if(Syn.Tv.Lib.getXml(xml,'stereo')==1){b+='<span class="tvlist_grid_icons">Stereo</span></div>&nbsp;&nbsp;'}if(Syn.Tv.Lib.getXml(xml,'sap')==1){b+=ihdr+'sap.gif" alt="SAP" height="12" border="0" align="absmiddle" /> &nbsp;&nbsp;'}b+='</b></td></tr></table>';b+='<table width="350" border="0" cellspacing="0" cellpadding="3">';var no_det=true;if(Syn.Tv.Lib.getXml(xml,'genre')!=""){no_det=false;b+='<tr class="search_criteria"><td valign="top" class="search_popup_cat">CATEGORY</td><td valign="top">';all_cats=Syn.Tv.Lib.getXml(xml,'genre');cat=all_cats.split(",");if(cat.length<=3){b+=all_cats.replace(/,/g,",&nbsp;")+'<br />'}else{b+=cat[0]+", "+cat[1]+", "+cat[2]+'<br />'}b+="</td></tr>"}if((ep_ttl!="")||(ex_desc!="")){b+='<tr><td class="tvlib_bg_spacer" colspan="2" height="1" background="'+Syn.Config.PortalRoot+'tv/images/spacer_gray.png"><img src="'+Syn.Config.PortalRoot+'tv/images/spacer_gray.png" height="1" width="1" alt="" /></td></tr>';no_det=false;b+='<tr class="search_criteria"><td valign="top" class="search_popup_cat">SYNOPSIS</td><td valign="top">';if(ep_ttl!=""){b+='<b>'+ep_ttl+':&nbsp;</b><br />'}if(ex_desc!=""){b+=ex_desc+'<br />'}b+="</td></tr>"}var e='';if(net_src!=""){e+=net_src.toUpperCase()+' &nbsp;'}if(a_tmstr!=""){e+=a_tmstr+' &nbsp;'}else if(a_tm!=""){e+=a_tm+' &nbsp;'}if(dur_str!=""){e+='('+dur_str+')<br />'}else if(dur!=""){e+='('+dur+')<br />'}if(lang!=""){e+='Language: '+lang}if(e!=''){no_det=false;b+='<tr><td class="tvlib_bg_spacer" colspan="2" height="1" background="'+Syn.Config.PortalRoot+'tv/images/spacer_gray.png"><img src="'+Syn.Config.PortalRoot+'tv/images/spacer_gray.png" height="1" width="1" alt="" /></td></tr>';b+='<tr class="search_criteria"><td valign="top" class="search_popup_cat">DETAILS</td><td valign="top">'+e+'</td></tr>'}if(no_det){b+='<tr class="search_criteria"><td valign="top" class="search_popup_cat">&nbsp</td><td valign="top">Program Information Not Available.</td></tr>'}if(Syn.Tv.Lib.getXml(xml,'cast')!=""){b+='<tr><td class="tvlib_bg_spacer" colspan="2" height="1" background="'+Syn.Config.PortalRoot+'tv/images/spacer_gray.png"><img src="'+Syn.Config.PortalRoot+'tv/images/spacer_gray.png" height="1" width="1" alt="" /></td></tr>';b+='<tr class="search_criteria"><td valign="top" class="search_popup_cat">STARRING</td><td valign="top">'+Syn.Tv.Lib.getXml(xml,'cast')+'<br /></td></tr>'}var e='';if(mpaa_r!=""){e+='<span class="tvlist_grid_icons">'+mpaa_r+'</span>'+'<br />'}if(tv_r!=""){var rhdr='<span class="tvlist_grid_icons">'+tv_r+'</span> ';e+=rhdr+'<br />'}var rlf=(tv_r.substr(0,2)=='TV');var rls=rlf?'<a href="'+Syn.Config.PortalRoot+'tv/'+Syn.Tv.Data.ratingLink+'#'+tv_r+'">':'';var rle=rlf?'</a>':'';if(e!=''){b+='<tr><td class="tvlib_bg_spacer" colspan="2" height="1" background="'+Syn.Config.PortalRoot+'tv/images/spacer_gray.png"><img src="'+Syn.Config.PortalRoot+'tv/images/spacer_gray.png" height="1" width="1" alt="" /></td></tr>';b+='<tr class="search_criteria"><td valign="top" class="search_popup_cat">RATINGS &amp; WARNINGS</td><td valign="top">'+rls+e+rle+'</td></tr>'}b+='</table>';if(Syn.Tv.Data.dvrServiceEnabled>=1){b+=Syn.Rd.Lib.recDvrList(xml,1)}return b},requestGrid:function(st_ts,e_ts,id,prvdr,dev,cids,mode,grid_batch,set_sz,zipcode,adv,cat,no_cust){id='#'+id;if($(id)[0]==null){return}Syn.Tv.Lib.showTvWait(id);Syn.Tv.Lib.curChanRange=grid_batch;$.fn.tvAjax({type:'GET',url:(Syn.Config.PortalRoot+'tv/grid_interface.php'),data:{valid_user:((Syn.Tv.Data.dvrServiceEnabled>=1)?1:0),start_ts:st_ts,end_ts:e_ts,provider:prvdr,device:dev,mode:mode,zipcode:zipcode,advanced:adv,category:cat,no_cust:no_cust,cids:cids,grid_channel_batch:grid_batch,grid_set_size:set_sz},success:function(txt){$(id)[0].innerHTML=txt;Syn.Tv.Lib.hideTvWait(id)},dataType:'text',cache:false})},showTvWait:function(id){if($(id).length&&$("#tv_indicator").length){$(id).css("opacity",.3);var id_t=$(id).offset().top;var id_b=id_t+$(id).height();var win_h=$(window).height();var win_t=$(window).scrollTop();var win_b=win_t+win_h;$("#tv_indicator").css({position:"absolute",top:((((id_b-id_t)<win_h)?(id_t+((id_b-id_t)/ 2)) : (((id_t + win_h) > win_b) ? (id_t + ((win_b - id_t) /2)):(win_t+((win_b>id_b)?((id_b-win_t)/ 2) : ((win_b - win_t) /2)))))-($("#tv_indicator").height()/2))+"px",left:($(id).offset().left+($(id).width()/2)-($("#tv_indicator").width()/2))+"px"}).show()}},hideTvWait:function(id){if($(id).length&&$("#tv_indicator").length){$(id).css("opacity",1);try{$(id)[0].style.removeAttribute('filter')}catch(err){}$("#tv_indicator").hide()}},setTabDate:function(ptt,ctt){var purl=Syn.Config.PortalRoot+'tv/images/t2_c';var pid='#grid_tab';$(pid+'_left'+ptt).attr('src',purl+'4.png');$(pid+ptt).css({background:'url(images/t2_c5.png)'});$(pid+'_right'+ptt).attr('src',purl+'6.png');$(pid+'_left'+ctt).attr('src',purl+'1.png');$(pid+ctt).css({background:'url(images/t2_c2.png)'});$(pid+'_right'+ctt).attr('src',purl+'3.png')},toggleDisp:function(){var i,args=arguments;for(i=0;i<(args.length-1);i+=2){$('#'+args[i]).toggle()}},resetSearch:function(){$('#search_string')[0].value='';$("#partial_match1")[0].checked=true;$("#partial_match2")[0].checked=false;$("#su_category")[0].selectedIndex=0;$("#next_days")[0].selectedIndex=2;$("#listing_type1")[0].checked=true;$("#listing_type2")[0].checked=false;$("#su_title")[0].checked=true;$("#su_actor")[0].checked=false;$("#su_description")[0].checked=false;$("#su_episode_title")[0].checked=false;$("#tv_channel")[0].selectedIndex=0;$("#sort_by1")[0].checked=false;$("#sort_by2")[0].checked=true},mkView:function(div,sx){var pgSz=new Array($(document).width(),$(document).height(),$(window).width(),$(window).height());var sPos=new Array($(window).scrollLeft(),$(window).scrollTop());var xm=10;var ym=10;div=(div&&div.id)?div:$('#details')[0];div.style.display='block';var dx=find_pos_x(div);var dy=find_pos_y(div);var dw=div.offsetWidth;var dh=div.offsetHeight;var ndx=0;var ndy=0;var is_xs_vis=((pgSz[0]>pgSz[2])?1:0);var is_ys_vis=((pgSz[1]>pgSz[3])?1:0);var xs_sz=20;var ys_sz=20;if(!sx){if((dx+dw)>(sPos[0]+pgSz[2]-(is_ys_vis*ys_sz))){ndx=-1*((dx+dw)-(sPos[0]+pgSz[2])+xm+(is_ys_vis*ys_sz))}}if((dy+dh)>(sPos[1]+pgSz[3]-(is_xs_vis*xs_sz))){ndy=-1*((dy+dh)-(sPos[1]+pgSz[3])+ym+(is_xs_vis*xs_sz))}SYNACOR_Snap(div.id,div.id,ndx,ndy);dx=find_pos_x(div);dy=find_pos_y(div);ndx=0;ndy=0;if(!sx){if(dx<sPos[0]){ndx=(sPos[0]-dx)+xm}}if(dy<sPos[1]){ndy=(sPos[1]-dy)+ym}SYNACOR_Snap(div.id,div.id,ndx,ndy);$('#rd_dragArea').bind('mousedown',Syn.Tv.Lib.startDrag);return false},mkDiv:function(color){if(!$('#details').length){d=document.createElement('div');d.id="details";d.style.position='absolute';d.style.border='1px solid #999999';d.style.padding='5px';d.style.filter='progid:DXImageTransform.Microsoft.Shadow(color=gray,direction=135)';$('body')[0].appendChild(d)}var d=$('#details');d.css('background-color',((!color)?'#fff':color));d.css('width','');d.hide();return d[0]},dispDiv:function(b,sv,a_id,x,y){if(b&&(b!='')){Syn.Tv.Lib.mkDiv();$('#details')[0].innerHTML=b;if(a_id){SYNACOR_Snap(a_id,'details',x,y)}if(!sv){Syn.Tv.Lib.mkView()}else{$('#details').show();$('#rd_dragArea').bind('mousedown',Syn.Tv.Lib.startDrag)}}return false},hideDiv:function(){show_disruptive_overlay_elements();$('#details').hide();Syn.Tv.Lib.selectView(1);$(window).unbind('resize',Syn.Tv.Lib.mkView)},startDrag:function(ev){var opos=$('#details').offset();Syn.Tv.Lib.dragX=ev.clientX-opos.left;Syn.Tv.Lib.dragY=ev.clientY-opos.top;$(document).bind('mousemove',Syn.Tv.Lib.moveDrag);$('#details').bind('mouseup',Syn.Tv.Lib.stopDrag)},moveDrag:function(ev){$('#details').css({left:(ev.clientX-Syn.Tv.Lib.dragX),top:(ev.clientY-Syn.Tv.Lib.dragY)})},stopDrag:function(ev){$(document).unbind('mousemove',Syn.Tv.Lib.moveDrag);$('#details').unbind('mouseup',Syn.Tv.Lib.stopDrag)},selectView:function(disp){if($.browser.msie){var sel=document.getElementsByTagName('select');for(i=0;i<sel.length;i++){sel[i].style.visibility=disp?'':'hidden'}}},dvrUserValidate:function(trans_id,trans_id_t,he){$.fn.tvAjax({type:'GET',url:(Syn.Config.PortalRoot+'tv/rd_val_usr_xml.php'),data:{tid:trans_id,tt:trans_id_t,he:he},success:function(v_req){if(Syn.Tv.Lib.getXml(v_req,'status')=='SUCCESS'){var oact=parseInt(Syn.Tv.Data.dvrServiceEnabled);var nact=Syn.Tv.Data.dvrServiceEnabled=(Syn.Tv.Lib.getXml(v_req,'active_status')!='inactive')?(parseInt(Syn.Tv.Lib.getXml(v_req,'active_device_count'))):0;if(nact){$('#dvr_menu').show();$('#rd_legend').show();if(!oact){$.getScript(Syn.Config.PortalRoot+'js/tv/rd_misc.packed.js');$.getScript(Syn.Config.PortalRoot+'js/tv/rd_dig.packed.js',function(){Syn.Rd.Lib.getRecList(null,0,1)});var href='<link type="text/css" rel="stylesheet" href="'+Syn.Config.PortalRoot+'styles/rd_styles';$('head').append(href+'.css" />');$('head').append(href+'_dig.css" />')}else if(oact!=nact){Syn.Rd.Lib.getRecList(null,0,1)}}else{$('#dvr_menu').hide();$('#rd_legend').hide();if(oact){Syn.Rd.Lib.abortRecList();setTimeout('Syn.Rd.Lib.getRecList(null,1,1,1)',100)}}}},dataType:'xml',cache:false})},getXml:function(req_dom,tag){return(!req_dom)?'':get_cdata(((!req_dom.responseXML)?req_dom:req_dom.responseXML),tag)},getIdxXml:function(req_dom,s_tag){var dom,new_dom,i;if(!req_dom){return''}dom=new_dom=(!req_dom.responseXML)?req_dom:req_dom.responseXML;for(i=2;i<arguments.length;i+=2){if((arguments[i]!=null)&&(arguments[i+1]!=null)){new_dom=(new_dom==null)?dom:Syn.Tv.Lib.getDom(new_dom,arguments[i],parseInt(arguments[i+1]))}}return(new_dom!=null)?get_cdata(new_dom,s_tag):''},getDom:function(req_dom,tag,idx){if(!req_dom){return null}var dom=(!req_dom.responseXML)?req_dom:req_dom.responseXML;var new_dom=dom.getElementsByTagName(tag);return((!new_dom)||(new_dom.length<(idx+1))||(!new_dom[idx]))?null:new_dom[idx]}};;
/**
 * Is the browser a version of Internet Explorer?
 *
 * @var int
 */
var isIE = $.browser.msie;

$(document).ready(function()
{
	if (!$("#pldv_home").size())
	{
		$("body").append('<div id="pldv_home"></div><div id="pldv_shrink"></div><div id="pldv_container"><a id="pldv" /><div id="flpl_ad" class="pldv_ad_invisible">&nbsp;</div><span class="pldv_resizer" id="pldv_resizer"></span><span class="vich_corner_t_l"></span><span class="vich_corner_t_r"></span><span class="vich_corner_b_l"></span><span class="vich_corner_b_r"></span><div class="pldv_bg_left"></div><div class="pldv_bg_backer"></div><div id="pldv_dragbar"><a href="#" onclick="pldv_hide(); return false;"><span class="pldv_closer"></span></a></div><div id="pldv_player"></div><div id="pldv_meta"><p class="init">&nbsp;</p></div></div>');
	}
});

/***** AVS Overridable Settings *****/
var pldv_player_width  = 385;
var pldv_player_height = 282;
var pldv_init_x = "center";
var pldv_init_y = "center"; 
var pldv_side_margin = 3;
// Minimum size the player will be allowed to resize to. 0 if no minimum
var pldv_min_w = 450;
var pldv_min_h = 330;
var pldv_vid_id; 

var pldv_alt_div_content = "No video has been loaded.  Please click a video to view.";

var pldv_div, pldv_player_div;
var pldv_id = "pldv_container";
var pldv_player_div_id = "pldv_player"; 

var pldv_status = 0;
var pldv_minimized = false;
var pldv_hide_immediate_override = false;
var pldv_animating = false;

// The following are all required for the floating player.  Meta can be used with the player in static mode if desired.
var pldv_meta_div, pldv_dragbar_div, pldv_home_div, pldv_home_shrink_div, pldv_resizer;

var pldv_meta_div_id = "pldv_meta";
var pldv_dragbar_div_id = "pldv_dragbar";
var pldv_home_div_id = "pldv_home";
var pldv_home_shrink_div_id = "pldv_shrink";
var pldv_resizer_id = "pldv_resizer";

// Used to record the location and offset of the player div before minimization so it can be restored later.
var pldv_slidehome_pos_x, pldv_sh_offset_x, pldv_sh_offset_y;

var pldv_use_doc_el;
if (document.compatMode && document.compatMode != "BackCompat")
{
	pldv_use_doc_el = true;
}
else
{
	pldv_use_doc_el = false;	
} 

/***** AVS Overridable Settings *****/
var flpl_skins_dir = Syn.Config.PortalRoot + "video/flpl_skins/";
var flpl_buffer_time = 2;
var flpl_ad_buffer_time = 1;
var flpl_scalemode = "letterbox";
var flpl_default_volume = 75; 
var flpl_alt_use_css = true;
var flpl_alt_ad_w = 300;
var flpl_alt_ad_h = 250;

var flpl_alt_ad_div_id = "flpl_ad"; // Not AVS overridable - no where else to put var though

var flpl_object;
var flpl_vid, flpl_login_status, flpl_username, flpl_stored_volume;
var flpl_play_time, flpl_play_status, flpl_volume, flpl_viewmode; // These are sent from flpl_object to JS.
var flpl_bg_color = "121a1c";
var flpl_skin_array;
var flpl_skin_id = "default";

var flpl_width = 385;
var flpl_height = 282;
var flpl_stored_volume_cookiename = "syna_flpl_volume_store";
var flpl_stored_volume_days_to_expire = 365;
var flpl_playing_ad = false;

var flpl_video_api_url = Syn.Config.PortalRoot + "files/video/video_api.php";
var flpl_playlist_api_url = "playlist_api.php";
var flpl_billing_api_url = "/"; // Functionality currently does not exist
var flpl_billing_success_url = "/"; // Functionality currently does not exist
var flpl_login_function = "vpjs_show_login";

// Override this path var as necessary in JS if player is used on a page
// outside of the video directory.
var flpl_player_swf_path = Syn.Config.PortalRoot + "video/flpl_player.swf";

// External Ad variables.  If LightningCast Ads are being used, and LC banners need to be displayed outside of the flash player...
var flpl_alt_ad_div, flpl_alt_ad_url, flpl_alt_ad_clickurl;

// Standalone variables.  Determine if the player is being used in standalone (non status-API) mode.
// These vars only get set locally.  No DB/API/AVS retrieval.
var flpl_standalone_mode_on = true;	// This only gets set to true locally if using standalone mode.
var flpl_standalone_skin_xml, flpl_standalone_vid_url, flpl_standalone_ad, flpl_standalone_duration;

var flpl_standalone_autostart = false;

// Playlisting flag.  Gets set to true if playlisting functionality is active.
var flpl_playlisting_on = false;
// If playlisting is being used, this should be set to the next video ID. 
var flpl_playlist_nextvid;

flpl_stored_volume = flpl_read_vol_cookie();
if (flpl_stored_volume == null)
{
	// No volume cookie stored.  So, set it to the default volume.
	flpl_stored_volume = flpl_default_volume;
}

/***** PLDV FUNCTIONS *****/

/**
 * pldv_initialize should be used upon page load to initialize the pldv_div and prepare for possible use
 * of the FVP/WMP on the current page.
 *
 * @param {String} div_id This should be the ID of the div that will become the pldv_div (player div).
 *						The FVP/WMP will be loaded within this div.
 */
function pldv_initialize(div_id)
{
	// Called during document onload.
	if (!pldv_status)
	{
		if (div_id != null)
		{
			pldv_id = div_id;
		}

		pldv_status = 1;
		pldv_div = document.getElementById(pldv_id);
		
		if (pldv_div == null)
		{
			pldv_status = 0;
		}
		else
		{
			// Initialize object references
			flpl_alt_ad_div = (flpl_alt_ad_div_id) ? document.getElementById(flpl_alt_ad_div_id) : false;
			
			pldv_player_div = document.getElementById(pldv_player_div_id);
			pldv_meta_div = (pldv_meta_div_id) ? document.getElementById(pldv_meta_div_id) : false;
			pldv_dragbar_div = (pldv_dragbar_div_id) ?  document.getElementById(pldv_dragbar_div_id) : false;
			pldv_player_div.innerHTML = "";
			pldv_resizer = (pldv_resizer_id) ?  document.getElementById(pldv_resizer_id) : false;
			pldv_home_div = (pldv_home_div_id) ? document.getElementById(pldv_home_div_id) : false;
			pldv_home_shrink_div = (pldv_home_div_id) ? document.getElementById(pldv_home_shrink_div_id) : false;
			
			
			// Initialize drag bar and resize handle.
			if (pldv_resizer)
			{
				new pldv_resizehandle(pldv_resizer);
			}

			if (pldv_dragbar_div)
			{
				new pldv_dragbar(pldv_dragbar_div);
			}
			
			if (pldv_player_width > 0)
			{
				flpl_width = pldv_player_width;
				pldv_player_div.style.width= pldv_div.style.width  =  pldv_player_width + "px";
			} 
			else
			{
				pldv_player_div.style.width= pldv_div.style.width  = "1px";
			}
			
			if (pldv_player_height > 0)
			{
				flpl_height = pldv_player_height;
				pldv_player_div.style.height = pldv_player_height + "px";
			}
			
			// Set X and Y of player div, determining center of visible browser window.
			if (pldv_init_x == "center")
			{
				// find the center of the window.
				// then, find the center of the flpl_container.
				var docwidth = pldv_getDocumentDims().width;
				
				// half of the docwidth, minus half of the player width, plus any scroll offset, will give us our x.
				pldv_init_x = (docwidth/2) - (pldv_player_width/2) + pldv_getWindowOffsetX();
			}

			if (pldv_init_y == "center")
			{
				// find the center of the window.
				// then, find the center of the flpl_container.
				var docheight = pldv_getDocumentDims().height;
				// half of the docheight, minus half of the player height, plus any scroll offset, will give us our y.
				pldv_init_y = (docheight/2) - (pldv_player_height/2) + pldv_getWindowOffsetY();
				// If in playlisting mode, this will be screwed up by the very large meta area that will be displayed below
				// the player.  So, subtract a bit to make sure the player doesn't go offstage.
				if (flpl_playlisting_on)
				{
					pldv_init_y = pldv_init_y - 80;
					if (pldv_init_y < 0) 
					{
						pldv_init_y = 0;
					}
				}
			}
			
			// Set X and Y location of player div, not centered.
			if (pldv_init_x >= 0)
			{
				pldv_div.style.left = pldv_check_offsetX(pldv_init_x, pldv_player_width) + "px";
			}

			if (pldv_init_y >= 0)
			{
				var new_style_top_string = pldv_check_offsetY(pldv_init_y, pldv_player_height);
				if (new_style_top_string < 0)
				{
					new_style_top_string = "0";
				}
				pldv_div.style.top = new_style_top_string + "px";
			}

			if (!pldv_min_w)
			{
				pldv_min_w = 0;
			}

			if (!pldv_min_h)
			{
				pldv_min_h = 0;
			}
		}
	}
}

/**
 * pldv_show is a function that is called by pldv_playvideo, and can be called on its own.  If the player is in
 * a minimized state, this will cause a slide animation and then cause the player to be visible.  If the appropriate
 * player does not yet exist, it calls the corresponding create function to initialize it.
 *
 * @param {String} which_player This optional var should be "flpl", indicating which player to load.
 *								If not set, the player div will load alternate content instead.
 * @return bool false
 */
function pldv_show(which_player)
{
	// Initialize the player div if it isn't already.
	pldv_initialize();
	
	// Check to see if the player is minimized.
	if (which_player)
	{	
		
		if (pldv_minimized)
		{
			pldv_slide_animate(pldv_home_shrink_div_id, pldv_home_div_id, "restore");
		}
		
		// Now, create the appropriate object and/or embed code for the specified player, and initialize
		// said player.
		switch(which_player)
		{
			case "flpl":
				// Eventually, rename flpl_object to flpl_object for consistency.
				if (pldv_status != 2)
				{
					flpl_create();
				}
				break;

			// End switch
		}
	}
	else
	{
		flpl_hide_ext_ad();
		// The desired player wasn't specified.  So, if an active player exists in minimized state, show it.
		// Otherwise, do nothing.
		
		if (pldv_status > 0)
		{
			// If player is minimized, returns it from minimized position.
			// Wrapper for pldv_slideback, located in video_div_movement.js .
			if (pldv_minimized == true)
			{
				pldv_slide_animate(pldv_home_shrink_div_id, pldv_home_div_id, "restore");
			}
			if (pldv_status == 1) 
			{
				// pldv_status == 1.  In this case, show alternate innerHTML content, which can be promotional.
				pldv_player_div.innerHTML = pldv_alt_div_content;
			}
		} 
	}
	

		
	return false;
}

/**
 * pldv_hide is a function that can be called directly to minimize the pldv_div and make it invisible.
 * This will start a slide animation, pldv_slide_animate, located in video_div_movement.js
 *
 * @return bool false
 */
function pldv_hide()
{
	// If player is currently visible, minimizes it.
	if (flpl_object && (pldv_status == 2))
	{
		flpl_hide_ext_ad();
		flpl_object.minimize();
	}
	if (!pldv_minimized && pldv_div)
	{	
		 pldv_slide_animate(pldv_home_shrink_div_id, pldv_home_div_id, "minimize", false);
	}
	return false;
}

/**
 * pldv_hide_player a function that can be called directly to unload FVP or WMP from the pldv_div.
 * Any currently loaded media will also be unloaded, and the player div will load pldv_alt_div_contents instead.
 *
 * @return bool false
 */
function pldv_hide_player()
{
	flpl_hide_ext_ad();
	
	if ((pldv_status == 2) && flpl_object)
	{
		if (flpl_object.purgeVideo)
		{
			flpl_object.purgeVideo();
		}
	}

	if (pldv_status > 1)
	{
		pldv_player_div.innerHTML = pldv_alt_div_content;
		pldv_status = 1;
	}
	
	return false;
}


/***** FLPL Functions *****/

/**
 * flpl_create is called by pldv_show if flpl_object does not yet exist.  The function creates the object/embed
 * code appropriate to the current browser, with information from JS variables.  Assigns this code to the player div.
 *
 * @param {String} bgcolor This is the (optional) background color (hex code without #) that will be used for the FVP.  
 *                         If not set, black will be used.
 */
function flpl_create(bgcolor)
{
	if (bgcolor == null)
	{	
		if (flpl_bg_color == null)
		{	
			// if no master bg color is set, use black.
			bgcolor = flpl_bg_color = "000000";
		}
		else
		{
			// there was a master color set, use it.
			bgcolor = flpl_bg_color;
		}
	}
	else
	{
		// bgcolor param was passed in, override the existing bg color.
		flpl_bg_color = bgcolor;
	}
	
	// If player side margins were specified, allow for side margins now.
	var sidemargin_divtext = "";
	if (pldv_side_margin > 0)
	{
		sidemargin_divtext = '<div style="width: ' + pldv_side_margin + '%; float: left; height: 20px;"></div><div style="width: '+ pldv_side_margin + '%; float: right; height: 20px;"></div>';
	}
	var tempwidth = (100 - (2*pldv_side_margin)) + "%";

	// Assemble Flash object or embed tag.
	var flash_code = sidemargin_divtext;
	if (isIE)
	{
		flash_code += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0"';
		flash_code += 'width="100%" height="100%" id="flpl_player">';
		flash_code += '<param name="movie" value="' + flpl_player_swf_path + '" />';
		flash_code += '<param name="quality" value="high" />';
		flash_code += '<param name="scale" value="noscale" />';
		flash_code += '<param name="salign" value="lt" />';
		flash_code += '<param name="bgcolor" value="#'+ bgcolor +'" />';
		flash_code += '<param name="wmode" value="opaque" />';
		flash_code += '<param name="swliveconnect" value="true" />';
		flash_code += '<param name="allowfullscreen" value="true" />';
		flash_code += '<param name="allowscriptaccess" value="always" />';
		flash_code += '</object>';
	}
	else
	{
		flash_code += '<div style="width: ' + tempwidth + '; height: 100%; float: left;">';
		flash_code += '<embed src="' + flpl_player_swf_path + '" quality="high" scale="noscale" allowfullscreen="true" ';
		flash_code += 'allowscriptaccess="always" salign="lt" bgcolor="#'+ bgcolor +'" width="100%" height="100%" wmode="opaque" ';
		flash_code += 'name="flpl_player" swliveconnect="true" type="application/x-shockwave-flash" '
		flash_code += 'pluginspage="http://www.macromedia.com/go/getflashplayer" /></div>';
	}

	flpl_sort_skins();

	// Assign flash code to player div and set player status.
	pldv_player_div.innerHTML = flash_code;
	pldv_status = 2;
}

/***** flpl_object REQUEST AND REPLY functions.  Allows coordination of variable data between JS and flpl_object. *****/

/**
 * flpl_request_initialize is a function that is called by FVP as soon as videoplayer.swf loads, in order to retrieve initial
 * variables and settings from JS.  At this time, since it is certain that the FVP has loaded completely, the reference to
 * the FVP is made (and stored in flpl_object) for future use.  See documentation for more information.
 *
 * @return object send_to_flash This is an object containing various values needed to set up initial state of FVP.
 */
function flpl_request_initialize()
{
	flpl_object = isIE ? document.getElementById("flpl_player") : document["flpl_player"];
	
	if (flpl_width == 0)
	{
		flpl_width = pldv_player_width;
	}
	if (flpl_height == 0)
	{
		flpl_height = pldv_player_height;
	}
	if (!flpl_standalone_mode_on)
	{
		flpl_standalone_mode_on = false;
	}
	
	// Make sure the right SIZE skin is being used, if more than one is available.
	flpl_check_skin(flpl_width, flpl_height);
	
	var send_to_flash = {
		flpl_skins_dir: flpl_skins_dir,
		flpl_video_api_url: flpl_video_api_url,
		flpl_billing_api_url: flpl_billing_api_url,
		flpl_billing_success_url: flpl_billing_success_url,
		flpl_username: flpl_username,
		flpl_ad_buffer_time: flpl_ad_buffer_time,
		flpl_login_function: flpl_login_function,
		flpl_stored_volume: flpl_stored_volume,
		flpl_init_width: flpl_width, 
		flpl_init_height: flpl_height,
		flpl_standalone: flpl_standalone_mode_on
	};

	return send_to_flash;
}

/**
 * flpl_request_standalone is a function that is called by FVP after flpl_request_initialize, if flpl_standalone_mode_on
 * has been set to true.  This indicates that the FVP should operate in "standalone" mode, which can be used when API
 * calls are limited or not needed, for special cases where video URLs will be provided directly in Javascript or HTML,
 * such as the case of certain mini-sites or promotional pages.
 * Information on variables:
 * 		flpl_standalone_skin_xml: this can be empty/null if API will be used to retrieve skin XML, or can
 *								contain the path or URL to an XML file containing special stand alone skin XML.
 *		flpl_standalone_vid_url: (required) This is the url to the media that will be played in FVP upon load.
 *		flpl_standalone_ad: this can be empty/null if no LightningCast ad is needed, or should be an LC Affiliate:site pair
 *							if LC ads are desired.
 *		flpl_standalone_autostart: this is a boolean indicating if the specified media should automatically start
 *							after loading.  Can be empty/null but if so will default to true in FVP.
 *       flpl_standalone_duration: this is an integer or float, representing the duration of the flash video in seconds.
 *                           This is optional - should be used if a long-duration HTTP video is used and metadata isn't
 *                           arriving at the player fast enough.  If the progress bar misbehaves with an HTTP video in
 *                           standalone mode, use this!
 * @return object send_to_flash This is an object containing various values needed to set up standalone mode in FVP.
 */
function flpl_request_standalone()
{
	var send_to_flash = {
		flpl_standalone_skin_xml: flpl_standalone_skin_xml,
		flpl_standalone_vid_url: flpl_standalone_vid_url,
		flpl_standalone_ad: flpl_standalone_ad,
		flpl_standalone_autostart: flpl_standalone_autostart,
		flpl_standalone_duration: flpl_standalone_duration
	};
						
	return send_to_flash;
}

/**
 * flpl_request_buffer_time is a function that is called by FVP before playing back a normal (non-ad) video.
 * The value represents how many seconds of video should be buffered before playback will begin.
 *
 * @return int flpl_buffer_time This is the positive integer representing buffer time in seconds.
 */
function flpl_request_buffer_time()
{
	return flpl_buffer_time;
}

/**
 * flpl_request_login_status is a function that is called by FVP if user requests a video that requires login, 
 * and they are not already logged in, FVP will call flpl_login_function (whatever JS function that value represents).
 * Afterwards, this function is polled by flpl_object to see if the login attempt was successful.
 *
 * @return string flpl_login_status This should be "success", "failed", or a null or empty value.
 */
function flpl_request_login_status()
{
	return flpl_login_status;
}

/**
 * flpl_request_username is a function that is called by FVP to request the current username.
 * This will happen when the FVP receives Status XML about a video that indicates that login is required.
 * If the user logs in successfully after such, the FVP will execute this function to retrieve the current username.
 *
 * @return string flpl_username This should be the current username string that will be used by FVP to retrieve
 *                                 new Status XML after login.
 */
function flpl_request_username()
{
	// Gets called after successful login, to update the flash player.
	return flpl_username;
}

/**
 * flpl_reply_jiffy is a function that is called by FVP on interval (multiple times per second)
 * to make sure that JS has current information about FVP's properties.  FVP also checks JS
 * vars for any changes that have occurred since last update, so this function is the MAJOR
 * method of communication both to and from the FVP and Javascript.
 *
 * @param {Object} responseObject This object contains current playback time and playback status (optional).
 * @return object send_to_flash This object contains JS information pertinent to FVP that may have
 *                                 changed since last flpl_reply_jiffy was called.
 */
function flpl_reply_jiffy(responseObject)
{
	// This is called by the flpl_object about 6 times per second (depends on what FPS is set in videoplayer.swf).
	// The player sends relevant information to JS, such as playback time and player status.
	// When called, JS sends current information back to the player.
	if (responseObject)
	{	// Make sure to set the JS vars only if Flash sent data.  flpl_object may call this function without params at startup.
		flpl_play_time = responseObject.flpl_play_time;
		flpl_play_status = responseObject.flpl_play_status;
		if ((flpl_play_status == "error") && (flpl_playing_ad))
		{
			flpl_hide_ext_ad();
		}
	}

	var send_to_flash = {
		flpl_vid_id: flpl_vid,
		flpl_skin_id: flpl_skin_id,
		flpl_scalemode: flpl_scalemode,
		flpl_viewmode: flpl_viewmode,
		flpl_skin_width: flpl_width,
		flpl_skin_height: flpl_height
	};

	// Reset width and height indicators for now, or flpl_object will attempt resize every 1/12 second.
	flpl_width = 0;
	flpl_height = 0;
	return send_to_flash;
}

/**
 * flpl_reply_user_event is a function that is called by FVP when a user
 * changes a setting via a button or control within the FVP.  These settings include
 * volume, viewmode, and scalemode.
 *
 * @param {Object} responseObject - contains the current values of volume, viewmode and scalemode from FVP (required).
 */
function flpl_reply_user_event(responseObject)
{
	if (responseObject.flpl_volume != null)
	{
		flpl_volume = responseObject.flpl_volume;
		if (flpl_volume > -1)
		{
			// Write the current volume to a cookie for later.
			flpl_create_vol_cookie();
			flpl_stored_volume = flpl_volume;
		}
	}
	if (responseObject.flpl_viewmode != null)
	{
		flpl_viewmode = responseObject.flpl_viewmode;
	}
	if (responseObject.flpl_scalemode != null)
	{
		flpl_scalemode = responseObject.flpl_scalemode;
	}
}


/**
 * flpl_setviewmode is a function used to set the viewmode of the FVP.
 * Viewmode options include "minimize", "double", "default".  Other viewmode
 * values used within FVP inclulde "normal" and "fullscreen", but these cannot be
 * used via JS.  The FVP will update with this value when it executes its next
 * flpl_reply_jiffy cycle.
 * Detail of mode types:  
 *    "minimize" will call pldv_hide and cause a minimization animation.
 *    "double" will cause the player (and div) to resize to twice the width
 *        and height of the "default" size of the current skin, but no larger
 *        than the currently visible document area.
 *    "default" will cause the player (and div) to resize to the initial width
 *        and height that it originally loaded as (if the user has resized it since load).
 * Usage: This function can be called directly, in case html/javascript controls
 * are needed for the player to adjust this setting.  Otherwise, this is not
 * used internally.
 *
 * @param {String} mode A string representing one of the three modes.
 */
function flpl_setviewmode(mode)
{
	// Sets the viewmode of the player.  Options are "minimize", "double", "default".  
	// Cannot force player to "fullscreen" from JS.
	if (flpl_object && (flpl_viewmode !="minimize")) 
	{
		flpl_object.set_viewmode(mode);
	}
}

/**
 * flpl_set_ext_ad is a function that is called when an external LightningCast banner ad is
 * to be displayed.  This function is called via the FVP only if the flpl_alt_ad_div has been set.
 * If flpl_alt_ad_div has not been set, the external banner will not be used.  This function sets
 * the url and click url variables with values passed from FVP, which obtains them via the LightningCast
 * Ad API.
 *
 * @param {String} ban_url The source URL of the banner ad, which should be a SWF, JPG, GIF or PNG (required).
 * @param {String} img_click_url A url that the banner should navigate to if the user clicks it (required).
 */
function flpl_set_ext_ad(ban_url, img_click_url)
{
	if (flpl_alt_ad_div)
	{
		flpl_alt_ad_url = ban_url;
		flpl_alt_ad_clickurl = img_click_url;
	}
}

/**
 * flpl_show_ext_ad is a function that is called when an external LightningCast banner ad is
 * to be displayed.  This function is called via the FVP, after flpl_set_ext_ad has been called.
 *
 */
function flpl_show_ext_ad()
{
	flpl_playing_ad = true;
	if (flpl_alt_ad_div && (flpl_alt_ad_url != ""))
	{
		var swf_found = flpl_alt_ad_url.indexOf(".swf");
		var banner_code = "";
		
		if (flpl_alt_use_css)
		{
			flpl_alt_ad_div.className = "pldv_ad_visible";
		}
		
		// Clean up any old ad swf that might be hanging around.
		var old_flash_ad = document.getElementById("flpl_banner");
		if (old_flash_ad)
		{
			old_flash_ad = null;		
		}
		
		if (swf_found >= 0)
		{
			// Handle SWF Banner.  How to handle onclick?
			// need to split url to extract any loadvars.

			if (isIE)
			{
				banner_code += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0"';
				banner_code += 'width="'+ flpl_alt_ad_w +'" height="'+ flpl_alt_ad_h +'" id="flpl_banner">';
				banner_code += '<param name="movie" value="'+ flpl_alt_ad_url +'" />';
				banner_code += '<param name="quality" value="high" />';
				banner_code += '<param name="scale" value="noscale" />';
				banner_code += '<param name="salign" value="lt" />';
				banner_code += '<param name="swliveconnect" value="true" />';
				banner_code += '<param name="allowscriptaccess" value="always" />';
				banner_code += 	'</object>';
			}
			else
			{
				banner_code += '<embed src="'+ flpl_alt_ad_url +'" quality="high" scale="noscale" ';
				banner_code += 'allowscriptaccess="always" salign="lt" width="'+ flpl_alt_ad_w +'" height="'+ flpl_alt_ad_h +'" ';
				banner_code += 'name="flpl_banner" swliveconnect="true" type="application/x-shockwave-flash" '
				banner_code += 'pluginspage="http://www.macromedia.com/go/getflashplayer" />';
			}
		}
		else
		{
			// Handle Image Banner
			banner_code = '<img src="' + flpl_alt_ad_url + '" onclick="flpl_go_ext_ad_url(); return false;" style="cursor: pointer;" alt="" />';
		}
		flpl_alt_ad_div.innerHTML = banner_code;
	}
}

/**
 * flpl_vid_complete is triggered when the current video loaded into the Flash player has ended.
 * This is needed to trigger the next video to play if the playlisting functionality is active.
 * The function is called from within the flpl_object. No parameters or return values.
 *
 */
function flpl_vid_complete()
{
	if (flpl_playlisting_on)
	{
		// Playlisting is active, so set the video id to the next up in the playlist.
		if (flpl_playlist_nextvid && (flpl_playlist_nextvid != flpl_vid))
		{
			pldv_playvideo(flpl_playlist_nextvid, "flash");
			// We can't just change the video id alone and let the flpl_object 
			// pick up the new video id alone, because we will need to repopulate 
			// the video's metadata area with new playlisted material, and metatdata
			// population only occurs if pldv_playvideo is called.
		}
	}
}

/**
 * flpl_go_ext_ad_url is executed on an onclick event, when an external LightningCast banner ad
 * has been clicked, if the LC banner is a jpg, gif or png.  Assigned in flpl_show_ext_ad.  It
 * opens the banner ad's clickurl in a new window.
 *
 */
function flpl_go_ext_ad_url()
{
	if (flpl_alt_ad_clickurl != "")
	{
		var ad_win = window.open(flpl_alt_ad_clickurl, "ad_win");
	}
}

/**
 * flpl_hide_ext_ad is a function that hides the external LightningCast clickable banner div,
 * if present.  Called by the FVP after ad playback is done, as well as pldv_hide, pldv_hide_player
 * and pldv_show, to make sure the ad div isn't visible at an inappropriate time.
 *
 */
function flpl_hide_ext_ad()
{
	flpl_playing_ad = false;
	if (flpl_alt_ad_div)
	{
		flpl_alt_ad_div.innerHTML = "";
		if (flpl_alt_use_css) 
		{
			flpl_alt_ad_div.className = "pldv_ad_invisible";
		}
	}
}

/// FLPL Cookie Functions ///
/**
 * flpl_create_vol_cookie writes the current flpl_volume to a cookie.
 * Called by flpl_reply_user_event.
 *
 */
function flpl_create_vol_cookie()
{
	var name = flpl_stored_volume_cookiename;
	var value = flpl_volume;

	// Set up the expiration date.
	var days = flpl_stored_volume_days_to_expire;
	var date = new Date();
	date.setTime(date.getTime() + (days*24*60*60*1000));
	var expires = "; expires=" + date.toGMTString();

	// Write the cookie.
	document.cookie = name + "=" + value + expires + "; path=/";
}



/**
 * flpl_read_vol_cookie looks for a stored previous flpl_volume from a cookie.
 * Called when this JS file loads.
 *
 * @return int (percentage stored volume) or null
 */
function flpl_read_vol_cookie()
{
	var name = flpl_stored_volume_cookiename;
	var name_equal = name + "=";
	var cookie_array = document.cookie.split(';');

	// Go through the document's cookies and look for the volume cookie.
	for (var i=0; i < cookie_array.length; i++)
	{
		var cookie = cookie_array[i];
		while (cookie.charAt(0)==' ')
		{
			cookie = cookie.substring(1,cookie.length);
		}
		if (cookie.indexOf(name_equal) == 0)
		{
		   // Found the volume cookie, return the value.
			var volume = parseInt(cookie.substring(name_equal.length,cookie.length));
			return volume;
		}
	}
	// Didn't find the cookie, return null instead.
	return null;
}

/** 
 * flpl_sort_skins sorts flpl_skin_array if it contains any objects.  
 * Called when flpl_object is created so that skins are ordered from smallest to 
 * largest in flpl_skin_array - so that skin switching works properly.  
 * Prepares flpl_skin_array for evaluation by flpl_check_skin in video_div_movement.js.  
 *
 */ 
function flpl_sort_skins() 
{ 
	if (flpl_skin_array && (flpl_skin_array.length > 0))
	{ 
		for (var i = 0; i < flpl_skin_array.length; i++) 
		{ 
			// Parse for nulls, and change to int values.  
			if (flpl_skin_array[i].minw == null) 
			{ 
				flpl_skin_array[i].minw = 0; 
			} 

			if (flpl_skin_array[i].minh == null) 
			{ 
				flpl_skin_array[i].minh = 0; 
			} 

			if (flpl_skin_array[i].maxw == null) 
			{ 
				flpl_skin_array[i].maxw = 50000; 
			} 

			if (flpl_skin_array[i].maxh == null) 
			{ 
				flpl_skin_array[i].maxh = 50000; 
			} 
		} 

		// Now, sort widthwise.  
		flpl_skin_array.sort(flpl_by_minwidth); 
	
		// Now, sort heightwise.  
		flpl_skin_array.sort(flpl_by_minheight); 
	} 
} 


 
/** 
 * flpl_by_minwidth is used by flpl_sort_skins, as a sorting function.  
 * Allows sorting of array items using minw and maxw property.  
 *
 * @param {Object} a - first item to be sorted 
 * @param {Object} b - second item to be sorted 
 * @return int (-1, 0 or 1) which denotes order 
 */ 
function flpl_by_minwidth(a, b) 
{ 
	// Helper for flpl_sort_skins 
	var a_min_width = a.minw; 
	var b_min_width = b.minw; 

	if (a_min_width < b_min_width) 
	{ 
		return -1; 
	} 

	if (a_min_width > b_min_width) 
	{ 
		return 1; 
	} 

	// Minimum values are the same!  So now check maxw property.  
	var a_max_width = a.maxw; 
	var b_max_width = b.maxw; 

	if (a_max_width < b_max_width) 
	{ 
		return -1; 
	} 

	if (a_max_width > b_max_width) 
	{ 
		return 1; 
	} 

	// All width properties match.  
	return 0; 
} 
 
/** 
 * flpl_by_minheight is used by flpl_sort_skins, as a sorting function.  
 * Allows sorting of array items using minh and maxh property.  
 *
 * @param {Object} a - first item to be sorted 
 * @param {Object} b - second item to be sorted 
 * @return int (-1, 0 or 1) which denotes order 
 */ 
function flpl_by_minheight(a, b) 
{ 
	// Helper for flpl_sort_skins 
	var a_min_height = a.minh; 
	var b_min_height = b.minh; 

	if (a_min_height < b_min_height) 
	{ 
		return -1; 
	} 

	if (a_min_height > b_min_height) 
	{ 
		return 1; 
	} 
            
	// Minimum values are the same!  So now check maxw property.  
	var a_max_height = a.maxh; 
	var b_max_height = b.maxh; 

	if (a_max_height < b_max_height) 
	{ 
		return -1; 
	} 

   	if (a_max_height > b_max_height) 
	{ 
		return 1; 
	} 
            
	// All height properties match.  
	return 0; 
}



/**
 * pldv_slide_animate is a set of functions used to animate the minimization or return from minimization of
 * the floating player div.  When used to minimize, the floating player div is moved to an invisible position
 * and an animation div is assigned to the previous width, height and location as the player div.
 * The animation div is then moved and resized until it matches the size of the finish_el.
 * When used to "restore", the animation element starts off at the same size and location as the
 * "home" div, and is resized and moved until it matches the previous location of the floating player div.
 * The floating player div is then made visible.  At the end of both cycles, the animation div becomes invisible.
 *
 * @param {String} ani_el The id of the div that is to be used to animate.
 * @param {String} finish_el The id of the target div, that the ani_el will move to.
 * @param {String} end_state Should either be "minimize" or "restore".
 * @param {boolean} unload Optional param, when used with end_state == "minimize", will
 *							unload any video present in the flash player.
 */
function pldv_slide_animate(ani_el, finish_el, end_state, unload)
{
	if (unload == null)
	{
		unload = false;
	}
	
	var slide_obj =document.getElementById(ani_el);
	var finish_obj = document.getElementById(finish_el);
	var startX, startY, endX, endY;
	var startWidth, startHeight, endWidth, endHeight;
	var w_d, h_d, x_d, y_d;
	var self, interval;	
	var speed = 30;
	var interval_time = 20;
	
	if (end_state && (slide_obj) && (finish_obj))
	{
		switch (end_state)
		{
			case "minimize":
				if ((parseInt(pldv_div.style.left) > -50)&&(slide_obj.style.display != "block"))
				{
					startX = parseInt(pldv_div.style.left);
					startY = parseInt(pldv_div.style.top);
					endX = parseInt(pldv_getOffsetX(finish_el));
					endY = parseInt(pldv_getOffsetY(finish_el));
					startWidth = parseInt(pldv_getOffsetWidth(pldv_id));
					startHeight = parseInt(pldv_getOffsetHeight(pldv_id));
					endWidth = parseInt(pldv_getOffsetWidth(finish_el));
					endHeight = parseInt(pldv_getOffsetHeight(finish_el));	
					start_slide();
				}
				break;
			case "restore":
				if ((parseInt(pldv_div.style.left) < -50)&&(slide_obj.style.display != "block"))
				{
					startX = parseInt(pldv_getOffsetX(finish_el));
					startY = parseInt(pldv_getOffsetY(finish_el));
					endX = parseInt(pldv_slidehome_pos_x);
					endY = parseInt(pldv_getOffsetY(pldv_id));
					startWidth = parseInt(pldv_getOffsetWidth(finish_el));
					startHeight = parseInt(pldv_getOffsetHeight(finish_el));
					endWidth = parseInt(pldv_getOffsetWidth(pldv_id));
					endHeight = parseInt(pldv_getOffsetHeight(pldv_id));
					
					endX = pldv_check_offsetX(endX, endWidth, pldv_sh_offset_x);
					if ((endX != parseInt(pldv_slidehome_pos_x)) && (endX != -3000))
					{
						pldv_slidehome_pos_x = endX + "px";
					}
					
					endY = pldv_check_offsetY(endY, endHeight, pldv_sh_offset_y);
					pldv_div.style.top = endY + "px";

					start_slide();
				}
			default:
				break;
		}
	}
	
	/**
	 * Begins the animation by making the animation div visible setting its start location.
	 */
	function start_slide() 
	{
		pldv_animating = true;
		self = this;
		slide_obj.style.width = startWidth + "px";
		slide_obj.style.height = startHeight + "px";
		slide_obj.style.left = startX + "px";
		slide_obj.style.top = startY + "px"
		slide_obj.style.display = "block";
		
		if (end_state == "minimize")
		{
			// Store the current x location of the player div, and move it so it is not visible.
			// Cannot use style.display = none or opacity = 0, since that would unload the player object.
			// So, to get around this, move it to an absolute negative position.
			if (parseInt(pldv_div.style.left) != -3000)
			{
				pldv_slidehome_pos_x = pldv_div.style.left;
			}
						
			// set pldv_sh_offset.  These values will be used to reset the pldv_div position on restore, if user scrolls the browser window.
			pldv_sh_offset_x = parseInt(pldv_div.style.left) + offsetx;
			pldv_sh_offset_y = parseInt(pldv_div.style.top) + offsety;
			
			pldv_div.style.left = "-3000px";
			
			if (pldv_status == 2)
			{	
				// If flash player loaded...
				if (unload)
				{
					// unload the current video or swf from the player.
					flpl_object.unload();
					flpl_vid = "";
				}
				else
				{
					// If flash plugin is installed, cease playback, since the player will be hidden.
					if (flpl_object)
					{
						flpl_object.pbk_pause();
					}
				}
			}
		}
		w_d = (startWidth < endWidth) ? 1 : -1;
		h_d = (startHeight < endHeight) ? 1 : -1;
		x_d = (startX < endX) ? 1 : -1;
		y_d = (startY < endY) ? 1 : -1;
		
		// Create the animation interval.
		interval = setInterval(slide_check, interval_time);
	};



	/** 
	 * Executed on an interval, this function periodically changes the size and location of the
	 * animation div to simulate shrinking or stretching for minimization or restore.
	 */
	function slide_check()
	{
		var width_ended = true;
		var height_ended = true;
		var x_ended = true;
		var y_ended = true;

		if (end_state == "restore")
		{
			// put a check in to see if the login window is working.
			if (pldv_hide_immediate_override)
			{
				slide_obj.style.width = endWidth + "px";
				slide_obj.style.height = endHeight + "px";
				slide_obj.style.left = endX + "px";
				slide_obj.style.top = endY + "px";
				width_ended = true;
				height_ended = true;
				x_ended = true;
				y_ended = true;
			}
			
		}

		if (parseInt(slide_obj.style.width) != endWidth)
		{
			width_ended = false;
			slide_obj.style.width = (parseInt(slide_obj.style.width) + (w_d*speed)) + "px";
			if (Math.abs(parseInt(slide_obj.style.width) - endWidth) < (1.5 * speed))
			{
				slide_obj.style.width = endWidth + "px";
				width_ended = true;
			}
		}
		if (parseInt(slide_obj.style.height) != endHeight)
		{
			height_ended = false;
			slide_obj.style.height = (parseInt(slide_obj.style.height) + (h_d*speed)) + "px";
			if (Math.abs(parseInt(slide_obj.style.height) - endHeight) < (1.5 * speed))
			{
				slide_obj.style.height = endHeight + "px";
				height_ended = true;
			}
		}
		if (parseInt(slide_obj.style.left) != endX)
		{
			x_ended = false;
			slide_obj.style.left = (parseInt(slide_obj.style.left) + (x_d*speed)) + "px";
			if (Math.abs(parseInt(slide_obj.style.left) - endX) < (1.5 * speed))
			{
				slide_obj.style.left = endX + "px";
				x_ended = true;
			}
		}
		if (parseInt(slide_obj.style.top) != endY)
		{
			y_ended = false;
			slide_obj.style.top = (parseInt(slide_obj.style.top) + (y_d*speed)) + "px";
			if (Math.abs(parseInt(slide_obj.style.top) - endY) < (1.5 * speed))
			{
				slide_obj.style.top = endY + "px";
				y_ended = true;
			}
		}
	
		if (width_ended && height_ended && x_ended && y_ended)
		{	
			pldv_animating = false;
			// Destination size/location reached.  Stop the interval, and perform any final actions.	
			if (end_state == "minimize")
			{
				slide_obj.style.display = "none";
				pldv_minimized = true;
			}
			else
			{
				slide_obj.style.display = "none";
				if (!pldv_hide_immediate_override)
				{
					pldv_div.style.left = pldv_slidehome_pos_x;
				
					// If the flpl_object exists, tell it to activate its return-from-minimization code.
					if (flpl_object)
					{
						flpl_object.unmini();
					}
			
					// Reset minimization and viewmode flags.
					pldv_minimized = false;
					if (flpl_viewmode == "minimize")
					{
						flpl_viewmode = "normal";
					}
				}
				else
				{
					pldv_hide_immediate_override = false;
				}	
			}
			clearInterval(interval);
		}
	};
}

//////////////////////// Dragging and resize handle functions.

/**
 * pldv_resizehandle is a class used to allow a div within pldv_div to act as
 * a resize handle to resize pldv_div and pldv_player_div if the user desires.
 * Object el must be assigned to an existing div before becoming a resize handle.
 * Usage:  if (pldv_resizer) new pldv_resizehandle(pldv_resizer);
 * Found in video_players.js, within pldv_initialize.
 *
 * @constructor
 * @param {Object} el This is a reference to the div that should be used as the resize handle (required).
 */
function pldv_resizehandle(el)
{
	// These vars keep track of any old document mouseup or mousemove assignments.
	var old_mouseup, old_mousemove;
	
	// Assign mousedown for the div
	el.onmousedown = resize_mousedown;
	
	/**
	 * resize_enddrag is a method of pldv_resizehandle, and is executed when user
	 * releases the mouse button after clicking on the resize div.
	 */
	function resize_enddrag()
 	{
		// Occurs when user stops dragging.
		// Causes the flpl_object to rescale itself to fit the newest size of the pldv_player_div.
		
		// Reset any old existing mouse behaviors that may have existed before the resize event.
		document.onmouseup = old_mouseup;
		document.onmousemove = old_mousemove;
		
		var new_width = parseInt(pldv_player_div.style.width);
		var new_height = parseInt(pldv_player_div.style.height);
		
		
		// Resize for Flash Video Player
		if (pldv_status == 2)
		{	  
			flpl_resize(new_width, new_height, "normal");
		}
	}


	
	/**
	 * resize_drag is a method of pldv_resizehandle, and is executed when user
	 * releases the mouse button after clicking on the resize div.
	 *
	 * @param {Event} e The event activated upon mousemove after user clicks resize handle.
	 * @return false
	 */
	function resize_drag(e)
	{
		// Occurs repeatedly while user moves mouse after clicking on the resize handle.
		// Resizes the pldv_player_div.
		// The flpl objects only get resized after the user releases the mouse.
		e = e || window.event;
		
		// Get the height of the metadata display area and the height of the dragbar.
		var meta_height = parseInt(pldv_getOffsetHeight(pldv_meta_div_id));
		var drag_height = parseInt(pldv_getOffsetHeight(pldv_dragbar_div_id));
		
		// Get the real browser window inner dimensions.
		var dimensions = pldv_getDocumentDims();
		var docwidth = dimensions.width;
		var docheight = dimensions.height;
		
		// Determine the scrolled offset of the window - if user has scrolled down or to the right on the page.
		var offsetx = pldv_getWindowOffsetX();
		var offsety = pldv_getWindowOffsetY();
		
		// Find the width and height of the player div, in relation to the mouse position and the upper left corner of the div.
		var this_width = e.clientX - parseInt(pldv_div.style.left);
		var this_height = e.clientY  - parseInt(pldv_div.style.top) - meta_height;
		
		// Check to make sure the user isn't resizing out of bounds.
		var total_width = parseInt(pldv_getOffsetWidth(el.id));
		var total_height = this_height + meta_height + drag_height;
		var height_check = e.clientY + parseInt(pldv_getOffsetHeight(el.id))/2;
		if (((this_width + total_width) < docwidth)
				&& (e.clientX < docwidth)
				&& (total_height < docheight) 
				&& (height_check < docheight))
		{
			// check minimium sizes	
			if ((this_width + offsetx) < pldv_min_w)
			{
				this_width = pldv_min_w - offsetx;
			}
			if ((this_height + offsety) < pldv_min_h)
			{
				this_height = pldv_min_h - offsety;
			}

			pldv_set_div_size(this_width + offsetx + 5 , this_height + offsety - (parseInt(pldv_getOffsetWidth(el.id))));
		}
		return false;
	}


	
	/**
	 * resize_mousedown is a method of pldv_resizehandle, and is executed when user
	 * presses the mouse button over the resize div.
	 *
	 * @param {Event} e The event activated upon mousedown when user clicks resize handle.
	 * @return false
	 */
	function resize_mousedown(e)
	{
		// Initiates a drag event, occurs when user clicks the resize handle.
		e = e || window.event;
		
		var target = (e && e.target) || (window.event && window.event.srcElement);
		// We may need to prevent WMP from resizing in FireFox.
		// Save any existing mouseup/mousemove functions that may have been set before the user resized.
		old_mouseup = document.onmouseup;
		old_mousemove = document.onmousemove;
		if (target == el)
		{
			// Only begin dragging if the mousedown event occurred from the resize handle.
			resize_enddrag();	// Make sure no other mousedrags are happening at the moment.
			document.onmouseup = resize_enddrag;
			document.onmousemove = resize_drag;
		}
		return false;
	}
}


/**
 * pldv_dragbar is a class used to allow a div within pldv_div to act as
 * a draggable handle to reposition pldv_div and pldv_player_div if the user desires.
 * Object el must be assigned to an existing div before becoming a dragbar.
 * Usage: if (pldv_dragbar_div) new pldv_dragbar(pldv_dragbar_div);
 * Found in video_players.js, within pldv_initialize.
 *
 * @param {Object} el This is a reference to the div that should be used as the dragbar handle (required).
 */
function pldv_dragbar(el)
{
	var click_offsetx = 0;
	var click_offsety = 0;
	var old_mouseup, old_mousemove;
	
	old_mouseup = document.onmouseup;
	old_mousemove = document.onmousemove;
	
	el.onmouseup = enddrag;
	el.onmousedown = drag_mousedown;
	
	/**
	 * enddrag is a method of pldv_dragbar, and is executed when user
	 * releases the mouse button and/or when dragging is complete.
	 * @param {Event} e The event activated upon mouseup when user releases the mouse after clicking the drag handle.
	 */
	function enddrag(e)
	{
		// Occurs when user releases mouse after dragging.
		document.onmouseup = old_mouseup;
		document.onmousemove = old_mousemove;
	}
	
	/**
	 * drag is a method of pldv_dragbar, and is executed repeatedly as the user
	 * moves the mouse after clicking the dragbar handle div.  The function
	 * repositions the player div appropriately within the browser window, disallowing
	 * position adjustment outside of the visible browser window area.
	 * @param {Event} e The event activated upon mousemove when drags mouse after clicking drag handle.
	 * @return false
	 */
	function drag(e)
	{
		// Occurs when user moves mouse (drags) after a mousedown occurs on the dragbar element.
		e = e || window.event;
		if ((parseInt(pldv_getOffsetX(pldv_id)) > -50)&&(!pldv_minimized))
		{
			// Determine the scrolled offset of the window - if user has scrolled down or to the right on the page.
			var offsetx = pldv_getWindowOffsetX();
			var offsety = pldv_getWindowOffsetY();
		
			var dimensions = pldv_getDocumentDims();
			var docwidth = dimensions.width;
			var docheight = dimensions.height;
			// Window restraints - prevents user from dragging pldv_div outside of the current window boundaries.
			if ((e.clientX - click_offsetx - offsetx + parseInt(pldv_getOffsetWidth(pldv_id))  < docwidth)
				&& (e.clientX - click_offsetx - offsetx > 0))	
			{
	  			pldv_div.style.left = (e.clientX - click_offsetx) + "px" ;
			} 
			if ((e.clientY - offsety - click_offsety + parseInt(pldv_getOffsetHeight(pldv_id)) < docheight )
				&& (e.clientY - click_offsety - offsety > 0)) 
			{
				pldv_div.style.top = (e.clientY - click_offsety) + "px";
			} 
		}
		else
		{
			// The user may have clicked the flpl_object's minimize button while near the edge of the browser window, while
			// a drag event was still active.  If so, stop the drag event so that the minimize animation isn't interrupted.
			enddrag();
		}
		return false;
	}
	
	/**
	 * drag_mousedown is a method of pldv_dragbar, and is executed when user clicks
	 * the drag handle div.  This starts the drag cycle.
	 * @param {Event} e The event activated upon mousedown when user clicks the drag handle.
	 * @return false
	 */
	function drag_mousedown(e)
	{
		// Occurs when user clicks down on the dragging element.
		e = e || window.event;
		var target = (e && e.target) || (window.event && window.event.srcElement); 
		if (target.id == el.id)
		{
			enddrag(); // Make sure any other drag events are cleared.
   			click_offsetx = parseInt(e.clientX) - parseInt(pldv_getOffsetX(pldv_id));
			click_offsety = parseInt(e.clientY) - parseInt(pldv_getOffsetY(pldv_id));
			old_mouseup = document.onmouseup;
			old_mousemove = document.onmousemove;
			document.onmouseup = enddrag;
			document.onmousemove = drag;
		}

		return false;
	}
}

///////////// Resizing functions for setting size of pldv_div and pldv_player_div, and rescaling flpl_object.


/**
 * flpl_resize is a function used to resize the flash video player and the pldv_player_div.
 * It is used when the player div has been resized (ie via the resize handle).
 * @param {int} new_width This is the desired new width of the player div.
 * @param {int} new_height This is the desired new height of the player div.
 * @param {String} mode This is the viewmode, which is passed to the Flash player.
 */
function flpl_resize(new_width, new_height, mode)
{
	// Resizes the flash video player and the pldv_player_div.
	if (flpl_object)
	{
		pldv_set_div_size(new_width, new_height);

		// Now, reset the skin if necessary.
		flpl_check_skin(new_width, new_height);

		// Need to wait a moment before telling the flash object to resize so the player doesn't scale before the div is done sizing.
		setTimeout('flpl_object.resize_skin(' + new_width + ', ' + new_height + ', "' + mode + '");', 35);	
	}
}

/**
 * flpl_check_skin is a function used to make sure the appropriate skin is being used
 * when the flash player is resized, in case there is more than one skin available in 
 * the flpl_skin_array.
 * @param {int} new_width This is the new width of the player.
 * @param {int} new_height This is the new height of the player.
 */
function flpl_check_skin(new_width, new_height)
{
	// If there are multiple sizes of skins available, chooses the correct one for the particular width and height.
	// Performed on flpl_resize, as well as when switching from WMP to FLV playback.

	var new_id = flpl_skin_id;
	if ((flpl_skin_array != null) && (flpl_skin_array.length > 0))
	{	
		var found = false;
		for (i = 0; i < flpl_skin_array.length; i++)
		{
			if (found)
			{
				break;
			}
			if ((new_width >= flpl_skin_array[i].minw)
				&& (new_height >= flpl_skin_array[i].minh))
			{	
				new_id = flpl_skin_array[i].id;
				if ((new_width <= flpl_skin_array[i].maxw)&&(new_height <= flpl_skin_array[i].maxh))
				{
					found = true;
				}
			} 
		}		
	}
	if (new_id != flpl_skin_id)
	{
		flpl_skin_id = new_id;
	}
}

/**
 * flpl_resize_restricted is a wrapper for flpl_resize, only to be used in special cases.
 * When the flash player viewmode is set to "double" or "default", the player div gets
 * resized, and we need to make sure that the player isn't resized larger than the
 * visible area of the document in the browser.  See documentation.
 *
 * @param {int} new_width This is the desired new width of the player div.
 * @param {int} new_height This is the desired new height of the player div.
 * @param {String} mymode This is the viewmode, which is passed to the Flash player.
 */
function flpl_resize_restricted(new_width, new_height, mymode)
{
	if (flpl_object)
	{
		var dimensions = pldv_getDocumentDims();
		var docwidth = dimensions.width;
		var docheight = dimensions.height;
		var offsetx = pldv_getWindowOffsetX();
		var offsety = pldv_getWindowOffsetY();
		var meta_height = parseInt(pldv_getOffsetHeight(pldv_meta_div_id));
		var dragbar_height = parseInt(pldv_getOffsetHeight(pldv_dragbar_div_id));
		if (docwidth < (new_width + parseInt(pldv_getOffsetX(pldv_id)) - offsetx ))
		{	
			// first, move to flush left, then check again.
			pldv_div.style.left = (0 + offsetx) + "px";
			if (docwidth < (new_width + offsetx))
			{
				new_width = docwidth-2;
			}
		}
		if (docheight < (new_height + parseInt(pldv_getOffsetY(pldv_id)) - offsety ))
		{
			// set y coord to 0
			pldv_div.style.top = (0 + offsety) + "px";
			if (docheight < (new_height + offsety))
			{
				new_height = docheight - (meta_height + dragbar_height)-2;
			}
		}
		flpl_resize(new_width, new_height, mymode);
	}	
}

/**
 * pldv_set_div_size is function used to set the pldv_player_div and pldv_div width and height.
 * It can be called when the Flash player is loading a new skin, or when the player div is
 * being resized.
 *
 * @param {int} new_width This is the desired new width of the player div.
 * @param {int} new_height This is the desired new height of the player div.
 */
function pldv_set_div_size(new_width, new_height)
{
	// Resizes pldv_div (width only since height will stretch) and pldv_player_div.
	if (!new_width)
	{
		new_width = parseInt(pldv_player_div.style.width);
	}
	if (!new_height)
	{
		new_height = parseInt(pldv_player_div.style.height);
	}
	if ((pldv_player_div)&&(new_width > 20)&&(new_height > 20))
	{
		var old_width = pldv_player_div.style.width;
		pldv_player_div.style.width = new_width + "px";
		
		// check to make sure the window isn't shrinking further than the largest item in the div....
		var meta_width = parseInt(pldv_getOffsetWidth(pldv_meta_div_id));
		var dragbar_width = parseInt(pldv_getOffsetWidth(pldv_dragbar_div_id));
		var actual_width = parseInt(pldv_getOffsetWidth(pldv_player_div_id));
		
		if ((meta_width > actual_width))// && (dragbar_width > actual_width))
		{	
			if (parseInt(old_width) >= meta_width)
			{
				pldv_player_div.style.width = old_width;
			}
			else
			{
				pldv_player_div.style.width  = (meta_width + 10) + "px";
			}
			pldv_div.style.width = pldv_getOffsetWidth(pldv_player_div_id)+"px";
			
			// Now, if the new width is SIGNIFICANTLY smaller than the meta width, stop the mousedrag event, to prevent
			// weird video artifacts.
			if ((meta_width - actual_width) > 15)
			{
				document.onmouseup();
			}
		}
		else
		{
			pldv_div.style.width = pldv_getOffsetWidth(pldv_player_div_id)+"px";
		}
		// Because the metadata height may change, we have to check height as well.
		var meta_height = parseInt(pldv_getOffsetHeight(pldv_meta_div_id));
		var dragbar_height = parseInt(pldv_getOffsetHeight(pldv_dragbar_div_id));
			
		pldv_player_div.style.height = new_height + "px";
		flpl_width = new_width;
		flpl_height = new_height;
	}
}


////////////// Helpers - these determine various size/position information for <div>s that might not have a styled size/position.

/**
 * pldv_getOffsetHeight is function used to determine the actual height of a div
 * that may not have a style.height property.
 *
 * @param {String} id This is the id of the div whose height needs to be determined.
 * @return int The height in pixels of the div.
 */
function pldv_getOffsetHeight(id)
{
	// Returns actual height of elements that may not have a style.height property.
	var h = 0;
	var o;
	var d = document.getElementById(id);
	if('number' == typeof d.offsetHeight) 
	{
		h = d.offsetHeight;
	}
	else if ((o = document.defaultView) && o.getComputedStyle) 
	{
		h = o.getComputedStyle(d, null).height;
	}
	return h;
}

/**
 * pldv_getOffsetWidth is function used to determine the actual width of a div
 * that may not have a style.width property.
 *
 * @param {String} id This is the id of the div whose width needs to be determined.
 * @return int The width in pixels of the div.
 */
function pldv_getOffsetWidth(id)
{
	// Returns actual width of elements that may not have a style.width property.
	var w = 0;
	var o;
	var d = document.getElementById(id);
	if ('number' == typeof d.offsetWidth)
	{
		w = d.offsetWidth;
	}
	else if ((o = document.defaultView) && o.getComputedStyle)
	{
		w = o.getComputedStyle(d, null).width;
	}
	return w;
}

/**
 * pldv_getOffsetX is function used to determine the x position of a div
 * that may not have a style.left property.  Position is from left of browser.
 *
 * @param {String} id This is the id of the div whose x position needs to be determined.
 * @return int The position in pixels of the div, from the left side of the document window.
 */
function pldv_getOffsetX(id)
{
	// Returns X position of elements that may not have a style.left property.
	// Relative to browser window.
	var obj = document.getElementById(id);
	var curleft = 0;
	var parent_el=obj.offsetParent; 
	curleft = obj.offsetLeft;
	while (parent_el!=null)
	{ 
		curleft+=parent_el.offsetLeft; 
		parent_el=parent_el.offsetParent; 
	} 
	return curleft;
}

/**
 * pldv_getOffsetY is function used to determine the y position of a div
 * that may not have a style.top property.  Position is from top of browser.
 *
 * @param {String} id This is the id of the div whose y position needs to be determined.
 * @return int The position in pixels of the div, from the top of the document window.
 */
function pldv_getOffsetY(id)
{
	// Returns Y position of elements that may not have a style.top property.
	// Relative to browser window.
	var obj = document.getElementById(id);
	var curtop = 0;
	var parent_el=obj.offsetParent; 
	curtop = obj.offsetTop;
	while (parent_el!=null)
	{ 
		curtop+=parent_el.offsetTop; 
		parent_el=parent_el.offsetParent; 
	} 
	return curtop;
}

/**
 * pldv_getDocumentDims is function used to determine the width and height of the document
 * visible within the browser window, minus the width and height of any visible scrollbars.
 *
 * @return object The width and height of the client window.  Access via object.width and object.height.
 */
function pldv_getDocumentDims()
{
	// Determines the dimensions inside the browser window document area (user viewable), minus scrollbar width/height if present.
	var docwidth, docheight;
	var tempVersion = navigator.appVersion.toLowerCase();
	tempVersion = tempVersion.split("msie");
	tempVersion = tempVersion[1];
	var ieVersion = isIE ? parseInt(tempVersion) : null;
	var vert_scroll = 0;
	var horiz_scroll = 0;
	if (isIE)
	{
		docwidth = pldv_use_doc_el ? document.documentElement.clientWidth : document.body.offsetWidth;
		docheight = pldv_use_doc_el ? document.documentElement.clientHeight : document.body.offsetHeight;
	} 
	else 
	{
		docwidth = window.innerWidth;
		docheight = window.innerHeight;
	}
	 	
	// Check to see if scrollbars are present.  IE7's docwidth & height already take into account scroll widths,
	// but in FF, we need to subtract the width and height of the scrollbars appropriately.
	if (!isIE)
	{
		vert_scroll =  (document.body.scrollHeight - docheight > 0) ? 18 : 0;
		horiz_scroll =  (document.body.scrollWidth - docwidth > 0) ? 16 : 0;
	}
	docwidth = docwidth - vert_scroll - 2;
	docheight = docheight - horiz_scroll - 2;
	return({width: docwidth, height: docheight});
}

/**
 * pldv_getWindowOffsetX is function used to determine the scrolled offset width of the browser window.
 *
 * @return int offsetx The scroll offset width.
 */
function pldv_getWindowOffsetX()
{
	if (isIE)
	{
		offsetx = pldv_use_doc_el ? document.documentElement.scrollLeft : document.body.scrollLeft;
	}
	else 
	{
		offsetx = pageXOffset;
	}
	return offsetx;
}

/**
 * pldv_getWindowOffsetY is function used to determine the scrolled offset height of the browser window.
 *
 * @return int offsety The scroll offset height.
 */
function pldv_getWindowOffsetY()
{
	if (isIE)
	{
		offsety =  pldv_use_doc_el ? document.documentElement.scrollTop : document.body.scrollTop;
	}
	else 
	{
		offsety = pageYOffset;
	}
	return offsety;
}


/**
 * pldv_check_offsetX is function used to determine if the given x position of the floating player div
 * is within the viewable scrolled area of the browser window, and if not, returns a new value.
 *
 * @param {int} x_pos - required, the x position of the pldv_div, relative to the very left of the document
 * @param {int} width - required, the width of the pldv_div
 * @param {int} replace_pos - optional, the new value to use if the given x is bad
 * @return int x_pos - the usable x position.
 */
function pldv_check_offsetX(x_pos, width, replace_pos)
{
	if (!replace_pos)
	{
		replace_pos = 0;
	}
	var offsetx = pldv_getWindowOffsetX();
	var dimensions = pldv_getDocumentDims();
	var docwidth = dimensions.width;

	if ((x_pos < offsetx)||((x_pos + width) > (offsetx + docwidth)))
	{
		// the old x location of the player div is outside of the scrolled viewable area of the browser, adjust.
		x_pos = replace_pos + offsetx;
						
		if ((x_pos + width + 15) > (offsetx + docwidth))
		{
			// Check to make sure the right edge of player is within the scrollable area after repositioning.
			x_pos = offsetx + docwidth - width - 20;
		}			
	}
	return x_pos;
}

/**
 * pldv_check_offsetY is function used to determine if the given y position of the floating player div
 * is within the viewable scrolled area of the browser window, and if not, returns a new value.
 *
 * @param {int} y_pos - required, the y position of the pldv_div, relative to the very top of the document
 * @param {int} height - required, the height of the pldv_div
 * @param {int} replace_pos - optional, the new value to use if the given y is bad
 * @return int y_pos - the usable y position.
 */
function pldv_check_offsetY(y_pos, height, replace_pos)
{
	if (!replace_pos)
	{
		replace_pos = 0;
	}
	var offsety = pldv_getWindowOffsetY();
	var dimensions = pldv_getDocumentDims();
	var docheight = dimensions.height;

	if ((y_pos < offsety)||((y_pos + height) > (offsety + docheight)))
	{
		// the old y location of the player div is outside of the scrolled viewable area of the browser, adjust.
		y_pos = replace_pos + offsety;
						
		if ((y_pos + height + 15) > (offsety + docheight))
		{
			// Check to make sure the bottom edge of player is within the scrollable area after repositioning.
			y_pos = offsety + docheight - height - 20;
		}
	}
	return (y_pos < 0) ? 0 : y_pos;
}

/**
 * pldv_hide_immediate is a function that can be called directly to make pldv_div invisible WITHOUT animation.
 * Can be used by functions that need to temporarily make the player invisible, like login functions.
 */
function pldv_hide_immediate()
{
	if (pldv_div && (!pldv_minimized || pldv_animating)) // && (parseInt(pldv_div.style.left) > 0))
	{
		pldv_hide_immediate_override = true;
		if (parseInt(pldv_div.style.left) > 0)
		{
			pldv_slidehome_pos_x = pldv_div.style.left;
		}

		// set pldv_sh_offset.  These values will be used to reset the pldv_div position on restore, if user scrolls the browser window.
		pldv_sh_offset_x = parseInt(pldv_div.style.left) + pldv_getWindowOffsetX();
		pldv_sh_offset_y = parseInt(pldv_div.style.top) + pldv_getWindowOffsetY();

		if (pldv_status == 2)
		{
			// If flash player loaded...
			// cease playback, since the player will be hidden.
			flpl_object.pbk_pause();
		}
		pldv_div.style.left = "-3000px";
		pldv_minimized = true;
	}
}

/**
 * pldv_show_immediate is a function that can be called directly to make pldv_div visible WITHOUT animation.
 * Should ONLY be used to make the div visible again after calling pldv_hide_immediate. 
 */
function pldv_show_immediate()
{
	if (pldv_div && pldv_minimized)
	{
		pldv_hide_immediate_override = false;
		endX = parseInt(pldv_slidehome_pos_x);
		endY = parseInt(pldv_getOffsetY(pldv_id));
		endWidth = parseInt(pldv_getOffsetWidth(pldv_id));
		endHeight = parseInt(pldv_getOffsetHeight(pldv_id));

		endX = pldv_check_offsetX(endX, endWidth, pldv_sh_offset_x);

		if ((endX != parseInt(pldv_slidehome_pos_x)) && (parseInt(endX) != -3000))
		{
			pldv_slidehome_pos_x = endX + "px";
		}

		endY = pldv_check_offsetY(endY, endHeight, pldv_sh_offset_y);
		pldv_div.style.top = endY + "px";
		pldv_div.style.left = pldv_slidehome_pos_x;
		// If the flpl_object exists, tell it to activate its return-from-minimization code.
		if (flpl_object)                       
		{       
			flpl_object.unmini();                        
		}
		pldv_minimized = false;
		if (flpl_viewmode == "minimize")              
		{
			flpl_viewmode = "normal";   
		}
	}
} 


/**
 * Play a video from a URL
 * @param {String} vidurl}
 * @return bool
 */
function pldv_playurl(vidurl)
{
	vpjs_logging_api(vidurl, flpl_username, 'flashstandalonevideo');

	flpl_standalone_vid_url = vidurl;
	
	flpl_standalone_duration = null;

	pldv_show("flpl");
	return false;
}

/**
 * Simply hit our logging URL when playing popup videos.
 * @param {int} vid
 * @param {String} username
 * @param {String} message
 */
function vpjs_logging_api(vid, username, message)
{
	$.get(flpl_video_api_url, {
		op: "log",
		vid: vid,
		username: username,
		message: message
	});
}
;
Syn.TvGrid=Syn.TvGrid||{};Syn.TvListingsBar={filterType:'',timeSlot:'',bsts:new Date(),showPopup:function(asset_id){this.syn_popup.popup({component:'{layout=doublewide}tv_vod_popup:asset_id='+asset_id,draggable:true,closeable:true,resizable:false,show_title:false,show_loading:true,center:'screen'},this);return false},filterGridBy:function(filterType,elm){$("#tv_channel .tv_search_filter a").css('background','#2D5575');elm.css('background','#234159');Syn.TvListingsBar.filterType=filterType;Syn.TvListingsBar.updateGrid()},updateGrid:function(){var cname='';var st;var sDay=$("#tv_channel select.tv_search_date option:selected").val();var sTime=$("#tv_channel select.tv_search_time option:selected").val();$("#tv_channel div.tv_search_whatson a").removeClass("tv_white_arrow");switch(Syn.TvListingsBar.timeSlot){case'primetime':cname="tv_search_primetime";st=Syn.TvGrid.pt_ts;sTime=Syn.TvGrid.pt_hr;sDay=Syn.TvGrid.pt_day_ts;break;case'now':var bets=new Date();var st3,et3,curhr;cname="tv_show_now";st=Syn.TvGrid.now_ts+(((et3=Math.floor(bets.getTime()/1800000))-(st3=Math.floor(Syn.TvListingsBar.bsts.getTime()/1800000)))*1800);sTime=((curhr=(Syn.TvGrid.now_hr+(Math.floor(et3/ 2) - Math.floor(st3 /2))))%24);sDay=(Syn.TvGrid.now_day_ts+(((curhr>23)?Math.floor(curhr/24):0)*86400));break;default:case'select':var tdiff=(Syn.TvGrid.trans_hr-Math.floor(sDay/3600));st=parseInt(sDay,10)+parseInt(sTime*3600,10)+(((tdiff>=0)&&(sTime>tdiff))?parseInt(Syn.TvGrid.tfix,10):0);break}if(cname){$("#tv_channel div.tv_search_whatson a."+cname).addClass(cname?'tv_white_arrow':'')}$("#tv_channel select.tv_search_time option[value="+sTime+"]").attr('selected','selected');$("#tv_channel select.tv_search_date option[value="+sDay+"]").attr('selected','selected');Syn.TvGrid.s_ts=st;if(Syn.TvListingsBar.filterType=='all'){Syn.TvListingsBar.filterType='';Syn.TvGrid.batch=Syn.Tv.Lib.curChanRange}if(typeof Syn.Tv.Lib.hideDiv=='function'){Syn.Tv.Lib.hideDiv()}Syn.Tv.Lib.requestGrid(Syn.TvGrid.s_ts,(parseInt(Syn.TvGrid.s_ts,10)+parseInt(Syn.TvGrid.gridwindows,10)),Syn.TvGrid.container,Syn.TvGrid.provider,Syn.TvGrid.device,'',Syn.TvGrid.displaymode,Syn.TvGrid.batch.toString(),Syn.TvGrid.gridsize,Syn.TvGrid.zipcode,Syn.TvGrid.gridview,Syn.TvListingsBar.filterType,'1')},toggleGridView:function(){Syn.TvGrid.gridview=$("#tv_gridview option:selected").val();Syn.TvListingsBar.updateGrid()},changeNumChannels:function(){Syn.TvGrid.gridsize=$("#tv_gridsize option:selected").val();Syn.TvGrid.batch=0;Syn.TvListingsBar.updateViewSettings();Syn.TvListingsBar.updateGrid()},toggleSettings:function(){$("#tv_channel #tv_settings_menu").toggle();$("#tv_channel #tv_advanced_search").hide();if($("#tv_channel #tv_advanced_search").css('display')=='block'){Syn.TvListingsBar.toggleAdvancedSearch()}$("#tv_channel .tv_search_whatson").show();$("#tv_channel .tv_search_filter").show();$("#tv_channel .tv_search_date").show();$("#tv_channel .tv_search_time").show()},toggleAdvancedSearch:function(){if($("#tv_channel #tv_settings_menu").css('display')=='block'){$("#tv_channel #tv_settings_menu").hide()}else{$("#tv_channel #tv_advanced_search").toggle()}if($("#tv_channel #tv_advanced_search").css('display')=='block'){$("#basic_search_partial_match").remove();$("#tv_channel .tv_search_whatson").hide();$("#tv_channel .tv_search_filter").hide();$("#tv_channel .tv_search_date").hide();$("#tv_channel .tv_search_time").hide()}else{$("#tv_channel .tv_search_whatson").show();$("#tv_channel .tv_search_filter").show();$("#tv_channel .tv_search_date").show();$("#tv_channel .tv_search_time").show()}},toggleDvrMenu:function(){Syn.Rd.Lib.menuAjax()},updateViewSettings:function(){$.post('customize_api.php',{'tv_gridsize':Syn.TvGrid.gridsize,'submit':'Go'})},updateGridView:function(){$.post('customize_api.php',{'tv_gridview':$("#tv_gridview option:selected").val(),'submit':'Go'})},init:function(){this.syn_popup=new Syn.Popup();if(Syn.TvGrid.dvr=="open"){Syn.Rd.Lib.menuAjax()}$("#tv_channel a.tv_search").click(function(){Syn.TvListingsBar.toggleAdvancedSearch();return false});$("#tv_channel #dvr_menu").click(function(){Syn.TvListingsBar.toggleDvrMenu();return false});$("#tv_channel a.tv_settings").click(function(){Syn.TvListingsBar.toggleSettings();return false});$("#tv_gridview").change(function(){Syn.TvListingsBar.updateGridView();Syn.TvListingsBar.toggleGridView();return false});$("div.advclose a").click(function(){Syn.TvListingsBar.toggleAdvancedSearch();$("#tv_settings_menu").hide();return false});$("a.advreset").click(function(){Syn.TvListingsBar.toggleAdvancedSearch();return false});$("#tv_gridsize").change(function(){Syn.TvListingsBar.changeNumChannels();return false});$("#tv_channel a.tv_search_primetime").click(function(){Syn.TvListingsBar.timeSlot='primetime';Syn.TvGrid.batch=Syn.Tv.Lib.curChanRange;Syn.TvListingsBar.updateGrid();return false});$("#tv_channel a.tv_show_now").click(function(){Syn.TvListingsBar.timeSlot='now';Syn.TvGrid.batch=Syn.Tv.Lib.curChanRange;Syn.TvListingsBar.updateGrid();return false});$("#tv_channel select.tv_search_time").change(function(){Syn.TvListingsBar.timeSlot='select';Syn.TvGrid.batch=Syn.Tv.Lib.curChanRange;Syn.TvListingsBar.updateGrid();return false});$("#tv_channel select.tv_search_date").change(function(){Syn.TvListingsBar.timeSlot='select';Syn.TvGrid.batch=Syn.Tv.Lib.curChanRange;Syn.TvListingsBar.updateGrid();return false});$("#tv_channel .tv_search_filter a.tv_filter_sports").click(function(){Syn.TvListingsBar.filterGridBy('sports',$(this));return false});$("#tv_channel .tv_search_filter a.tv_filter_news").click(function(){Syn.TvListingsBar.filterGridBy('news',$(this));return false});$("#tv_channel .tv_search_filter a.tv_filter_comedy").click(function(){Syn.TvListingsBar.filterGridBy('comedy',$(this));return false});$("#tv_channel .tv_search_filter a.tv_filter_kids").click(function(){Syn.TvListingsBar.filterGridBy('kids',$(this));return false});$("#tv_channel .tv_search_filter a.tv_filter_hdtv").click(function(){Syn.TvListingsBar.filterGridBy('hdtv',$(this));return false});$("#tv_channel .tv_search_filter a.tv_filter_education").click(function(){Syn.TvListingsBar.filterGridBy('educational',$(this));return false});$("#tv_channel .tv_search_filter .tv_filter_all").click(function(){Syn.TvListingsBar.filterGridBy('all',$(this));return false})}};$(document).ready(function(){Syn.TvListingsBar.init()});;
Syn.WhatToWatch=Syn.Component.extend({init:function(config){this._super(config);this.mode=null;this.syn_tv_pop=new Syn.TvPopup(config);this.syn_tv_pop.removePopups();this.uniqueElmt("tv_watch").find("a.wtw_ondemand_asset").connect("click",this,"createPopup");this.uniqueElmt("what_to_watch_right").find("a.also_ondemand_asset").connect("click",this,"createPopup");this.uniqueElmt("what_to_watch_left").find("a.ondemand_asset").connect("click",this,"createPopup");this.uniqueElmt("wtw_today").find("a").connect("click",this,"showTab",["today"]);this.uniqueElmt("wtw_tomorrow").find("a").connect("click",this,"showTab",["tomorrow"]);this.uniqueElmt("wtw_ondemand").find("a").connect("click",this,"showTab",["ondemand"])},createPopup:function(element){return this.syn_tv_pop.showPopup(element,"tv_vod_popup")},showTab:function(tab_name,mode){this.mode=mode;this.submit({"wtw_tab":tab_name,"wtw_mode":mode});this.highlightTab(tab_name,mode);return false},highlightTab:function(tab_name){if(this.mode=="details"){this.uniqueElmt("tabbed_nav").find("li").removeClass("on");this.uniqueElmt("wtw_"+tab_name+"_details").addClass("on")}else{this.uniqueElmt("tv_tabbed_nav li").find("li").removeClass("on");this.uniqueElmt("wtw_"+tab_name).addClass("on")}}});;
Syn.TvVod=Syn.Component.extend({tab_id:null,tab_name:null,menu_id:null,tv_ma:"off",setting_details:"off",page_num:1,order:"title|asc",search:0,old_search_terms:null,default_search_input:"Actors, Titles, Genres, Directors, Descriptions",table_with_menu:true,tab_has_landing:true,init:function(config){this._super(config);var syn_tv_pop=new Syn.TvPopup();this.syn_tv_pop=new Syn.TvPopup(config);this.syn_tv_pop.removePopups();this.old_search_terms=(config.old_search_terms)?config.old_search_terms:this.old_search_terms;this.search=(config.search)?config.search:this.search;this.tv_ma=(config.tv_ma)?config.tv_ma:this.tv_ma;this.setting_details=(config.setting_details)?config.setting_details:this.setting_details;this.uniqueElmt("tv_vod_settings").connect("click",this,"showHideSettings");this.setSettings();this.uniqueElmt("tv_ma").find("a").connect("click",this,"changeTvma");this.tab_id=(config.tab_id)?config.tab_id:this.tab_id;this.tab_name=(config.tab_name)?config.tab_name:this.tab_name;this.menu_id=(config.menu_id)?config.menu_id:this.menu_id;this.order=(config.order)?config.order:this.order;this.page_num=(config.page_num)?config.page_num:this.page_num;this.table_with_menu=(config.table_with_menu!=undefined)?config.table_with_menu:this.table_with_menu;this.tab_has_landing=(config.tab_has_landing!=undefined)?config.tab_has_landing:this.tab_has_landing;$.cookie(this.uniqueKey('tv_ma',true),this.tv_ma);this.uniqueElmt("tv_vod_tab").find("a").connect("click",this,"changeTab");this.uniqueElmt("tv_vod_menu").find("a").connect("click",this,"changeMenu");this.uniqueElmt("tv_vod_list_header").find("a").connect("click",this,"changeOrder");this.uniqueElmt("pagination").find("a").connect("click",this,"changePage");this.uniqueElmt("vod_search_input").connect("focus",this,"clearDefault");this.uniqueElmt("vod_search_input").connect("blur",this,"restoreDefault");this.uniqueElmt("vod_search_form").connect("submit",this,"doSearch");this.uniqueElmt("tv_vod_assets").find("a").connect("click",this,"createPopup");if(!this.table_with_menu){this.uniqueElmt("table_with_menu").removeClass("table_with_menu")}this.uniqueElmt("tv_vod_tab").find("a").each(function(){$(this).track({"module":"Image","event":"click","args":{"sc_cid":"tvvodpage_tvvod_"+$(this).attr("title").toLowerCase()}})});if(this.tab_name=="movies"){var tab_name=this.tab_name;this.uniqueElmt("tv_vod_menu").find("a").each(function(){if($(this).attr("title")!=''){$(this).track({"module":"Image","event":"click","args":{"sc_cid":"tvvodpage_tvvod_"+tab_name+'_'+$(this).attr("title").toLowerCase()}})}})}if(this.tab_name=="movies"){this.uniqueElmt("tv_vod_menu").find("ul li ul").hide();var obj=this;this.uniqueElmt("tv_vod_menu").find("ul li a").each(function(){if($(this).attr("rel")==obj.menu_id){$(this).parents("li").eq(0).find("ul").show()}});this.uniqueElmt("tv_vod_menu").find("ul li ul li a").each(function(){if($(this).attr("rel")==obj.menu_id){$(this).parents("ul").show()}})}},createPopup:function(element){return this.syn_tv_pop.showPopup(element,"tv_vod_popup")},doSearch:function(element,e){var search_terms=this.uniqueElmt("vod_search_input").attr("value");if(search_terms!=this.default_search_input){search_terms=search_terms.replace(/[^\w$\/:.!#?\(\)& -]/g,'');if(search_terms&&this.old_search_terms!=search_terms){this.syn_tv_pop.removePopups();this.showIndicator();this.submit({tv_ma:this.tv_ma,setting_details:this.setting_details,search:1,search_terms:search_terms})}}},changeTab:function(element,e){if($(element).attr("rel")!=this.tab_id||this.tab_has_landing&&this.menu_id!=null&&this.menu_id!=""){this.syn_tv_pop.removePopups();this.showIndicator();this.submit({tab_id:$(element).attr("rel"),tv_ma:this.tv_ma,setting_details:this.setting_details})}},changeMenu:function(element,e){if($(element).attr("rel")!=this.menu_id){this.syn_tv_pop.removePopups();this.showIndicator();document.location.hash=this.container().attr("id");this.submit({menu_id:$(element).attr("rel"),tab_id:this.tab_id,tv_ma:this.tv_ma,setting_details:this.setting_details})}},changeOrder:function(element,e){var tmp=this.order.split("|");var new_order=$(element).attr("rel")+"|asc";if(tmp[0]==$(element).attr("rel")){if(tmp[1]=="asc"){new_order=tmp[0]+"|desc"}else{new_order=tmp[0]+"|asc"}}this.syn_tv_pop.removePopups();this.showIndicator();this.submit({order:new_order,menu_id:this.menu_id,tab_id:this.tab_id,tv_ma:this.tv_ma,setting_details:this.setting_details,search:this.search,search_terms:this.old_search_terms})},changeTvma:function(element,e){var new_tv_ma="off";if(this.tv_ma=="off"){new_tv_ma="on"}this.syn_tv_pop.removePopups();this.showIndicator();document.location.hash=this.container().attr("id");this.submit({order:this.order,menu_id:this.menu_id,tab_id:this.tab_id,tv_ma:new_tv_ma,setting_details:"on",search:this.search,search_terms:this.old_search_terms})},changePage:function(element,e){if($(element).attr("rel")!=this.page_num){this.syn_tv_pop.removePopups();this.showIndicator();document.location.hash=this.container().attr("id");this.submit({page_num:$(element).attr("rel"),tv_ma:this.tv_ma,setting_details:this.setting_details,tab_id:this.tab_id,order:this.order,menu_id:this.menu_id})}},showHideSettings:function(){if(this.setting_details=="on"){this.uniqueElmt("tv_ma").hide();this.setting_details="off"}else{this.uniqueElmt("tv_ma").show();this.setting_details="on"}},setSettings:function(){if(this.tv_ma=="off"){this.uniqueElmt("tv_ma_off").show();this.uniqueElmt("tv_ma_on").hide()}else{this.uniqueElmt("tv_ma_on").show();this.uniqueElmt("tv_ma_off").hide()}if(this.setting_details=="on"){this.uniqueElmt("tv_ma").show()}else{this.uniqueElmt("tv_ma").hide()}},showIndicator:function(){var x=(this.uniqueElmt("tv_vod_listings_container").width()/2)-(this.uniqueElmt("tv_vod_indicator").width()/2);var height=this.uniqueElmt("tv_vod_listings_container").height();if(height<200){height=200;this.uniqueElmt("tv_vod_listings_container").css("height",height+"px")}this.uniqueElmt("tv_vod_indicator").css("left",x+"px");this.uniqueElmt("tv_vod_modal").css("height",height+"px");this.uniqueElmt("tv_vod_modal").css("opacity",.8);this.uniqueElmt("tv_vod_modal").show();this.uniqueElmt("tv_vod_indicator").show()},clearDefault:function(element,e){if($(element).val()==this.default_search_input){$(element).attr("value","")}},restoreDefault:function(element,e){if($(element).val()==""){$(element).attr("value",this.default_search_input)}}});;
/**
 * Provide onclick functionality for the TV help buttons
 *
 * @package agdistis
 * @version $Id: tv_help.js,v 1.4 2009/11/20 15:56:07 jlu Exp $
 */
$(document).ready(
	function()
	{

		// these functions are populated by synlib.js, but the code scanner needs placeholders here

		var hide_disruptive_overlay_elements = hide_disruptive_overlay_elements || function () { };
		var show_disruptive_overlay_elements = show_disruptive_overlay_elements || function () { };


		var repl_id = 'tv_popup_replacement_container',
		    repl, pop_cont, pop;

		// move popup to end of DOM

		$('body').append('<div id="' + repl_id + '"><div class="tv_nav_info"></div></div>');
		repl = $('#' + repl_id);
		$('.tv_nav_info', repl).css('position', 'static').append($('#tv_popup_container').remove());
		pop_cont = $('#tv_popup_container').css('position', 'static');
		pop = $('#tv_popup').css('position', 'absolute');

		$("#tv_ordering_instructions").click(
			function(ev)
			{
				var top = $('#tv_ordering_instructions').offset().top + 20,
				    left = ev.pageX - 305;

				pop.css({top: top + 'px', left: left + 'px'});

				hide_disruptive_overlay_elements();
				pop_cont.show();
				return false;
			}
		);

		// IE6 breaks links displayed over a transparent png background
		// this makes the whole popup clickable for closing (IE6 only)
		var closer = ($.browser.msie && $.browser.version == '6.0') ? pop : $('#tv_popup_close');

		closer.click(
			function()
			{
				pop_cont.hide();	
				show_disruptive_overlay_elements();
				return false;
			}
		);
	}
);
;
Syn.WhatToWatchDetails=Syn.Component.extend({init:function(config){this._super(config);this.mode=null;this.syn_tv_pop=new Syn.TvPopup(config);this.syn_tv_pop.removePopups();this.uniqueElmt("tv_watch").find("a.wtw_ondemand_asset").connect("click",this,"createPopup");this.uniqueElmt("what_to_watch_right").find("a.also_ondemand_asset").connect("click",this,"createPopup");this.uniqueElmt("what_to_watch_left").find("a.ondemand_asset").connect("click",this,"createPopup");this.uniqueElmt("wtw_today_details").find("a").connect("click",this,"showTab",["today","details"]);this.uniqueElmt("wtw_tomorrow_details").find("a").connect("click",this,"showTab",["tomorrow","details"]);this.uniqueElmt("wtw_ondemand_details").find("a").connect("click",this,"showTab",["ondemand","details"])},createPopup:function(element){return this.syn_tv_pop.showPopup(element,"tv_vod_popup")},showTab:function(tab_name,mode){this.mode=mode;this.submit({"wtw_tab":tab_name,"wtw_mode":mode});this.highlightTab(tab_name,mode);return false},highlightTab:function(tab_name){if(this.mode=="details"){this.uniqueElmt("tabbed_nav").find("li").removeClass("on");this.uniqueElmt("wtw_"+tab_name+"_details").addClass("on")}else{this.uniqueElmt("tv_tabbed_nav li").find("li").removeClass("on");this.uniqueElmt("wtw_"+tab_name).addClass("on")}}});;
Syn.TvPpv=Syn.Component.extend({init:function(config){this._super(config);this.syn_tv_pop=new Syn.TvPopup(config);this.syn_tv_pop.removePopups();this.uniqueElmt("select_event_assets").connect("click",this,"reloadComponent",["event"]);this.uniqueElmt("select_movie_assets").connect("click",this,"reloadComponent",["movie"]);this.uniqueElmt("movie_assets").find("a").connect("click",this,"createPopup");this.uniqueElmt("event_assets").find("a").connect("click",this,"createPopup")},createPopup:function(element){return this.syn_tv_pop.showPopup(element,"tv_ppv_popup")},reloadComponent:function(asset_type){this.syn_tv_pop.removePopups();this.submit({"selected_asset_type":asset_type},this.showIndicator())},showIndicator:function(){var x=(this.uniqueElmt("asset_container").width()/ 2) - (this.uniqueElmt("payperview_indicator").width() /2);var height=this.uniqueElmt("asset_container").height();this.uniqueElmt("payperview_modal").css("height",height+"px");this.uniqueElmt("payperview_indicator").css("left",x+"px");this.uniqueElmt("payperview_modal").show();this.uniqueElmt("payperview_indicator").show()}});;
Syn.TvOndemandTopTen=Syn.Component.extend({top_ten_type:"MOD",top_ten_type_name:"Movies",init:function(config){this._super(config);this.top_ten_type=(config.top_ten_type)?config.top_ten_type:this.top_ten_type;this.top_ten_type_name=(config.top_ten_type_name)?config.top_ten_type_name:this.top_ten_type_name;this.syn_tv_pop=new Syn.TvPopup(config);this.syn_tv_pop.removePopups();this.uniqueElmt("topten_tabbed_nav").find("a").connect("click",this,"changeTab");this.uniqueElmt("topten_assets").find("a.ondemand_topten_asset").connect("click",this,"createPopup");this.uniqueElmt("topten_tabbed_nav").find("a").each(function(){$(this).track({"module":"Image","event":"click","args":{"sc_cid":"tvondemandtopten_"+$(this).attr("title").toLowerCase()}})});var obj=this;this.uniqueElmt("topten_assets").find("a.ondemand_topten_asset").each(function(){$(this).track({"module":"Image","event":"click","args":{"sc_cid":"tvondemandtopten_"+obj.top_ten_type_name.toLowerCase()+'_'+$(this).attr("title").toLowerCase()}})})},createPopup:function(element){return this.syn_tv_pop.showPopup(element,"tv_vod_popup")},changeTab:function(element,e){if($(element).attr("rel")!=this.top_ten_type){this.submit({top_ten_type:$(element).attr("rel")})}}});;
Syn.AjaxTabbed=Syn.Component.extend({init:function(config){this._super(config);this.tab_count=config.tab_count;this.tab_on=config.tab_on;for(var i=0;i<this.tab_count;i++){if(i!=this.tab_on){this.uniqueElmt('tab'+i).connect('click',this,'changeTab',[i])}}this.uniqueElmt('select').connect('change',this,'changeSelect')},changeTab:function(on){for(var i=0;i<this.tab_count;i++){this.uniqueElmt('tab'+i).removeClass('on');if(i==on){this.uniqueElmt('tab'+i).addClass('on')}}if(this.uniqueElmt('tabcontent').length>0){this.uniqueElmt('loading').show().height(this.uniqueElmt('tabcontent').height())}if(this.uniqueElmt('tabcontent_vert').length>0){this.uniqueElmt('loading').show().height(this.uniqueElmt('tabcontent_vert').height())}this.submit({'tab':on});return false},changeSelect:function(selbox){this.changeTab($(selbox).val())}});
;
Syn.TvDcc={initPage:function(){var query_string_val=Syn.TvDcc.getQueryStringValue("vod_search_asset");var syn_tv_pop=new Syn.TvPopup({uid:"_"});syn_tv_pop.removePopups();if(query_string_val){syn_tv_pop.showPopup(query_string_val.substr(0,10),"tv_vod_popup")}$("div.tv_dcc").find(".dcc-container").find(".tv_ondemand_dcc_asset").click(function(){syn_tv_pop.showPopup($(this).attr("rel").substr(0,10),"tv_vod_popup");return false});$("div.tv_dcc").find(".dcc-container").find(".tv_ondemand_dcc_asset").each(function(){var data=$(this).attr("rel");if(data){$(this).track({"module":"Image","event":"click","args":{"sc_cid":"tvvodpage_dcc_"+data.substring(10).toLowerCase()}})}});var asset_title=null;if(query_string_val){asset_title=query_string_val.substring(10)}else{asset_title=Syn.TvDcc.getQueryStringValue("search_terms")}if(asset_title){$(window).track({"module":"Image","event":"load","args":{"sc_cid":"tvppvpage_dcc_"+decodeURIComponent(asset_title.toLowerCase())}})}},getQueryStringValue:function(key){var qs_regexp=new RegExp("(?:\\?|&)"+key+"=([^&]+)");var match=window.location.search.match(qs_regexp);return(match)?match[1]:false}};$(document).ready(Syn.TvDcc.initPage);;
Syn.TvPopup=Syn.Component.extend({init:function(config){if(config){this._super(config)}},showPopup:function(asset,component){this.removePopups();var asset_id=($(asset).attr("rel"))?$(asset).attr("rel"):asset;var asset_type=($(asset).attr("id"))?$(asset).attr("id"):null;var component_string="{layout=doublewide}"+component+":asset_id="+asset_id;component_string+=(asset_type)?"&asset_type="+asset_type:"";this.popup({component:component_string,draggable:true,closeable:true,resizable:false,show_title:false,show_loading:true,close_on_blur:true,center:"screen"},this,"popupReady");return false},popupReady:function(element){Syn.TvPopup.current_popup=element},removePopups:function(){if($(Syn.TvPopup.current_popup).size()&&Syn.TvPopup.current_popup){$(Syn.TvPopup.current_popup).remove()}return true}});;
if(typeof deconcept=="undefined"){var deconcept=new Object()}if(typeof deconcept.util=="undefined"){deconcept.util=new Object()}if(typeof deconcept.SWFObjectUtil=="undefined"){deconcept.SWFObjectUtil=new Object()}deconcept.SWFObject=function(swf,id,w,h,ver,c,quality,xiRedirectUrl,redirectUrl,detectKey){if(!document.getElementById){return}this.DETECT_KEY=detectKey?detectKey:'detectflash';this.skipDetect=deconcept.util.getRequestParameter(this.DETECT_KEY);this.params=new Object();this.variables=new Object();this.attributes=new Array();if(swf){this.setAttribute('swf',swf)}if(id){this.setAttribute('id',id)}if(w){this.setAttribute('width',w)}if(h){this.setAttribute('height',h)}if(ver){this.setAttribute('version',new deconcept.PlayerVersion(ver.toString().split(".")))}this.installedVer=deconcept.SWFObjectUtil.getPlayerVersion();if(!window.opera&&document.all&&this.installedVer.major>7){deconcept.SWFObject.doPrepUnload=true}if(c){this.addParam('bgcolor',c)}var q=quality?quality:'high';this.addParam('quality',q);this.setAttribute('useExpressInstall',false);this.setAttribute('doExpressInstall',false);var xir=(xiRedirectUrl)?xiRedirectUrl:window.location;this.setAttribute('xiRedirectUrl',xir);this.setAttribute('redirectUrl','');if(redirectUrl){this.setAttribute('redirectUrl',redirectUrl)}};deconcept.SWFObject.prototype={useExpressInstall:function(path){this.xiSWFPath=!path?"expressinstall.swf":path;this.setAttribute('useExpressInstall',true)},setAttribute:function(name,value){this.attributes[name]=value},getAttribute:function(name){return this.attributes[name]},addParam:function(name,value){this.params[name]=value},getParams:function(){return this.params},addVariable:function(name,value){this.variables[name]=value},getVariable:function(name){return this.variables[name]},getVariables:function(){return this.variables},getVariablePairs:function(){var variablePairs=new Array();var key;var variables=this.getVariables();for(key in variables){variablePairs[variablePairs.length]=key+"="+variables[key]}return variablePairs},getSWFHTML:function(){var swfNode="";if(navigator.plugins&&navigator.mimeTypes&&navigator.mimeTypes.length){if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","PlugIn");this.setAttribute('swf',this.xiSWFPath)}swfNode='<embed type="application/x-shockwave-flash" src="'+this.getAttribute('swf')+'" width="'+this.getAttribute('width')+'" height="'+this.getAttribute('height')+'" style="'+this.getAttribute('style')+'"';swfNode+=' id="'+this.getAttribute('id')+'" name="'+this.getAttribute('id')+'" ';var params=this.getParams();for(var key in params){swfNode+=[key]+'="'+params[key]+'" '}var pairs=this.getVariablePairs().join("&");if(pairs.length>0){swfNode+='flashvars="'+pairs+'"'}swfNode+='/>'}else{if(this.getAttribute("doExpressInstall")){this.addVariable("MMplayerType","ActiveX");this.setAttribute('swf',this.xiSWFPath)}swfNode='<object id="'+this.getAttribute('id')+'" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+this.getAttribute('width')+'" height="'+this.getAttribute('height')+'" style="'+this.getAttribute('style')+'">';swfNode+='<param name="movie" value="'+this.getAttribute('swf')+'" />';var params=this.getParams();for(var key in params){swfNode+='<param name="'+key+'" value="'+params[key]+'" />'}var pairs=this.getVariablePairs().join("&");if(pairs.length>0){swfNode+='<param name="flashvars" value="'+pairs+'" />'}swfNode+="</object>"}return swfNode},write:function(elementId){if(this.getAttribute('useExpressInstall')){var expressInstallReqVer=new deconcept.PlayerVersion([6,0,65]);if(this.installedVer.versionIsValid(expressInstallReqVer)&&!this.installedVer.versionIsValid(this.getAttribute('version'))){this.setAttribute('doExpressInstall',true);this.addVariable("MMredirectURL",escape(this.getAttribute('xiRedirectUrl')));document.title=document.title.slice(0,47)+" - Flash Player Installation";this.addVariable("MMdoctitle",document.title)}}if(this.skipDetect||this.getAttribute('doExpressInstall')||this.installedVer.versionIsValid(this.getAttribute('version'))){var n=(typeof elementId=='string')?document.getElementById(elementId):elementId;n.innerHTML=this.getSWFHTML();return true}else{if(this.getAttribute('redirectUrl')!=""){document.location.replace(this.getAttribute('redirectUrl'))}}return false}};deconcept.SWFObjectUtil.getPlayerVersion=function(){var PlayerVersion=new deconcept.PlayerVersion([0,0,0]);if(navigator.plugins&&navigator.mimeTypes.length){var x=navigator.plugins["Shockwave Flash"];if(x&&x.description){PlayerVersion=new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/,"").replace(/(\s+r|\s+b[0-9]+)/,".").split("."))}}else if(navigator.userAgent&&navigator.userAgent.indexOf("Windows CE")>=0){var axo=1;var counter=3;while(axo){try{counter++;axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+counter);PlayerVersion=new deconcept.PlayerVersion([counter,0,0])}catch(e){axo=null}}}else{try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7")}catch(e){try{var axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");PlayerVersion=new deconcept.PlayerVersion([6,0,21]);axo.AllowScriptAccess="always"}catch(e){if(PlayerVersion.major==6){return PlayerVersion}}try{axo=new ActiveXObject("ShockwaveFlash.ShockwaveFlash")}catch(e){}}if(axo!=null){PlayerVersion=new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(","))}}return PlayerVersion};deconcept.PlayerVersion=function(arrVersion){this.major=arrVersion[0]!=null?parseInt(arrVersion[0]):0;this.minor=arrVersion[1]!=null?parseInt(arrVersion[1]):0;this.rev=arrVersion[2]!=null?parseInt(arrVersion[2]):0};deconcept.PlayerVersion.prototype.versionIsValid=function(fv){if(this.major<fv.major)return false;if(this.major>fv.major)return true;if(this.minor<fv.minor)return false;if(this.minor>fv.minor)return true;if(this.rev<fv.rev)return false;return true};deconcept.util={getRequestParameter:function(param){var q=document.location.search||document.location.hash;if(param==null){return q}if(q){var pairs=q.substring(1).split("&");for(var i=0;i<pairs.length;i++){if(pairs[i].substring(0,pairs[i].indexOf("="))==param){return pairs[i].substring((pairs[i].indexOf("=")+1))}}}return""}};deconcept.SWFObjectUtil.cleanupSWFs=function(){var objects=document.getElementsByTagName("OBJECT");for(var i=objects.length-1;i>=0;i--){objects[i].style.display='none';for(var x in objects[i]){if(typeof objects[i][x]=='function'){objects[i][x]=function(){}}}}};if(deconcept.SWFObject.doPrepUnload){if(!deconcept.unloadSet){deconcept.SWFObjectUtil.prepUnload=function(){__flash_unloadHandler=function(){};__flash_savedUnloadHandler=function(){};window.attachEvent("onunload",deconcept.SWFObjectUtil.cleanupSWFs)};window.attachEvent("onbeforeunload",deconcept.SWFObjectUtil.prepUnload);deconcept.unloadSet=true}}if(!document.getElementById&&document.all){document.getElementById=function(id){return document.all[id]}}var getQueryParamValue=deconcept.util.getRequestParameter;var FlashObject=deconcept.SWFObject;var SWFObject=deconcept.SWFObject;;
/**
 * jCarouselLite - jQuery plugin to navigate images/any content in a carousel style widget.
 * @requires jQuery v1.2 or above
 *
 * http://gmarwaha.com/jquery/jcarousellite/
 *
 * Copyright (c) 2007 Ganeshji Marwaha (gmarwaha.com)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 * Version: 1.0.1
 * Note: Requires jquery 1.2 or above from version 1.0.1
 */

/**
 * Creates a carousel-style navigation widget for images/any-content from a simple HTML markup.
 *
 * The HTML markup that is used to build the carousel can be as simple as...
 *
 *  <div class="carousel">
 *      <ul>
 *          <li><img src="image/1.jpg" alt="1"></li>
 *          <li><img src="image/2.jpg" alt="2"></li>
 *          <li><img src="image/3.jpg" alt="3"></li>
 *      </ul>
 *  </div>
 *
 * As you can see, this snippet is nothing but a simple div containing an unordered list of images.
 * You don't need any special "class" attribute, or a special "css" file for this plugin.
 * I am using a class attribute just for the sake of explanation here.
 *
 * To navigate the elements of the carousel, you need some kind of navigation buttons.
 * For example, you will need a "previous" button to go backward, and a "next" button to go forward.
 * This need not be part of the carousel "div" itself. It can be any element in your page.
 * Lets assume that the following elements in your document can be used as next, and prev buttons...
 *
 * <button class="prev">&lt;&lt;</button>
 * <button class="next">&gt;&gt;</button>
 *
 * Now, all you need to do is call the carousel component on the div element that represents it, and pass in the
 * navigation buttons as options.
 *
 * $(".carousel").jCarouselLite({
 *      btnNext: ".next",
 *      btnPrev: ".prev"
 * });
 *
 * That's it, you would have now converted your raw div, into a magnificient carousel.
 *
 * There are quite a few other options that you can use to customize it though.
 * Each will be explained with an example below.
 *
 * @param an options object - You can specify all the options shown below as an options object param.
 *
 * @option btnPrev, btnNext : string - no defaults
 * @example
 * $(".carousel").jCarouselLite({
 *      btnNext: ".next",
 *      btnPrev: ".prev"
 * });
 * @desc Creates a basic carousel. Clicking "btnPrev" navigates backwards and "btnNext" navigates forward.
 *
 * @option btnGo - array - no defaults
 * @example
 * $(".carousel").jCarouselLite({
 *      btnNext: ".next",
 *      btnPrev: ".prev",
 *      btnGo: [".0", ".1", ".2"]
 * });
 * @desc If you don't want next and previous buttons for navigation, instead you prefer custom navigation based on
 * the item number within the carousel, you can use this option. Just supply an array of selectors for each element
 * in the carousel. The index of the array represents the index of the element. What i mean is, if the
 * first element in the array is ".0", it means that when the element represented by ".0" is clicked, the carousel
 * will slide to the first element and so on and so forth. This feature is very powerful. For example, i made a tabbed
 * interface out of it by making my navigation elements styled like tabs in css. As the carousel is capable of holding
 * any content, not just images, you can have a very simple tabbed navigation in minutes without using any other plugin.
 * The best part is that, the tab will "slide" based on the provided effect. :-)
 *
 * @option mouseWheel : boolean - default is false
 * @example
 * $(".carousel").jCarouselLite({
 *      mouseWheel: true
 * });
 * @desc The carousel can also be navigated using the mouse wheel interface of a scroll mouse instead of using buttons.
 * To get this feature working, you have to do 2 things. First, you have to include the mouse-wheel plugin from brandon.
 * Second, you will have to set the option "mouseWheel" to true. That's it, now you will be able to navigate your carousel
 * using the mouse wheel. Using buttons and mouseWheel or not mutually exclusive. You can still have buttons for navigation
 * as well. They complement each other. To use both together, just supply the options required for both as shown below.
 * @example
 * $(".carousel").jCarouselLite({
 *      btnNext: ".next",
 *      btnPrev: ".prev",
 *      mouseWheel: true
 * });
 *
 * @option auto : number - default is null, meaning autoscroll is disabled by default
 * @example
 * $(".carousel").jCarouselLite({
 *      auto: 800,
 *      speed: 500
 * });
 * @desc You can make your carousel auto-navigate itself by specfying a millisecond value in this option.
 * The value you specify is the amount of time between 2 slides. The default is null, and that disables auto scrolling.
 * Specify this value and magically your carousel will start auto scrolling.
 *
 * @option speed : number - 200 is default
 * @example
 * $(".carousel").jCarouselLite({
 *      btnNext: ".next",
 *      btnPrev: ".prev",
 *      speed: 800
 * });
 * @desc Specifying a speed will slow-down or speed-up the sliding speed of your carousel. Try it out with
 * different speeds like 800, 600, 1500 etc. Providing 0, will remove the slide effect.
 *
 * @option easing : string - no easing effects by default.
 * @example
 * $(".carousel").jCarouselLite({
 *      btnNext: ".next",
 *      btnPrev: ".prev",
 *      easing: "bounceout"
 * });
 * @desc You can specify any easing effect. Note: You need easing plugin for that. Once specified,
 * the carousel will slide based on the provided easing effect.
 *
 * @option vertical : boolean - default is false
 * @example
 * $(".carousel").jCarouselLite({
 *      btnNext: ".next",
 *      btnPrev: ".prev",
 *      vertical: true
 * });
 * @desc Determines the direction of the carousel. true, means the carousel will display vertically. The next and
 * prev buttons will slide the items vertically as well. The default is false, which means that the carousel will
 * display horizontally. The next and prev items will slide the items from left-right in this case.
 *
 * @option circular : boolean - default is true
 * @example
 * $(".carousel").jCarouselLite({
 *      btnNext: ".next",
 *      btnPrev: ".prev",
 *      circular: false
 * });
 * @desc Setting it to true enables circular navigation. This means, if you click "next" after you reach the last
 * element, you will automatically slide to the first element and vice versa. If you set circular to false, then
 * if you click on the "next" button after you reach the last element, you will stay in the last element itself
 * and similarly for "previous" button and first element.
 *
 * @option visible : number - default is 3
 * @example
 * $(".carousel").jCarouselLite({
 *      btnNext: ".next",
 *      btnPrev: ".prev",
 *      visible: 4
 * });
 * @desc This specifies the number of items visible at all times within the carousel. The default is 3.
 * You are even free to experiment with real numbers. Eg: "3.5" will have 3 items fully visible and the
 * last item half visible. This gives you the effect of showing the user that there are more images to the right.
 *
 * @option start : number - default is 0
 * @example
 * $(".carousel").jCarouselLite({
 *      btnNext: ".next",
 *      btnPrev: ".prev",
 *      start: 2
 * });
 * @desc You can specify from which item the carousel should start. Remember, the first item in the carousel
 * has a start of 0, and so on.
 *
 * @option scrool : number - default is 1
 * @example
 * $(".carousel").jCarouselLite({
 *      btnNext: ".next",
 *      btnPrev: ".prev",
 *      scroll: 2
 * });
 * @desc The number of items that should scroll/slide when you click the next/prev navigation buttons. By
 * default, only one item is scrolled, but you may set it to any number. Eg: setting it to "2" will scroll
 * 2 items when you click the next or previous buttons.
 *
 * @option beforeStart, afterEnd : function - callbacks
 * @example
 * $(".carousel").jCarouselLite({
 *      btnNext: ".next",
 *      btnPrev: ".prev",
 *      beforeStart: function(a) {
 *          alert("Before animation starts:" + a);
 *      },
 *      afterEnd: function(a) {
 *          alert("After animation ends:" + a);
 *      }
 * });
 * @desc If you wanted to do some logic in your page before the slide starts and after the slide ends, you can
 * register these 2 callbacks. The functions will be passed an argument that represents an array of elements that
 * are visible at the time of callback.
 *
 *
 * @cat Plugins/Image Gallery
 * @author Ganeshji Marwaha/ganeshread@gmail.com
 */

(function($) {                                          // Compliant with jquery.noConflict()
$.fn.jCarouselLite = function(o) {
    o = $.extend({
        btnPrev: null,
        btnNext: null,
        btnGo: null,
        mouseWheel: false,
        auto: null,

        speed: 200,
        easing: null,

        vertical: false,
        circular: true,
        visible: 3,
        start: 0,
        scroll: 1,

        beforeStart: null,
        afterEnd: null
    }, o || {});

    return this.each(function() {                           // Returns the element collection. Chainable.
		this.o = o;

        var running = false, animCss=o.vertical?"top":"left", sizeCss=o.vertical?"height":"width";
        var div = $(this), ul = $("ul", div), tLi = $("li", ul), tl = tLi.size(), v = o.visible;

        if(o.circular) {
            ul.prepend(tLi.slice(tl-v-1+1).clone())
              .append(tLi.slice(0,v).clone());
            o.start += v;
        }

        var li = $("li", ul), itemLength = li.size(), curr = o.start;
        div.css("visibility", "visible");

        li.css({overflow: "hidden", float: o.vertical ? "none" : "left"});
        ul.css({margin: "0", padding: "0", position: "relative", "list-style-type": "none", "z-index": "1"});
        div.css({overflow: "hidden", position: "relative", "z-index": "2", left: "0px"});

        var liSize = o.vertical ? height(li) : width(li);   // Full li size(incl margin)-Used for animation
        var ulSize = liSize * itemLength;                   // size of full ul(total length, not just for the visible items)
        var divSize = liSize * v;                           // size of entire div(total length for just the visible items)

        li.css({width: li.width(), height: li.height()});
        ul.css(sizeCss, ulSize+"px").css(animCss, -(curr*liSize));

        div.css(sizeCss, divSize+"px");                     // Width of the DIV. length of visible images

		var self = this;
        if(o.btnPrev)
            $(o.btnPrev).click(function() {
                return self.go(curr-o.scroll);
            });

        if(o.btnNext)
            $(o.btnNext).click(function() {
                return self.go(curr+o.scroll);
            });

        if(o.btnGo)
            $.each(o.btnGo, function(i, val) {
                $(val).click(function() {
                    return self.go(o.circular ? o.visible+i : i);
                });
            });

        if(o.mouseWheel && div.mousewheel)
            div.mousewheel(function(e, d) {
                return d>0 ? self.go(curr-o.scroll) : self.go(curr+o.scroll);
            });

        if(o.auto)
            setInterval(function() {
                self.go(curr+o.scroll);
            }, o.auto+o.speed);

        function vis() {
            return li.slice(curr).slice(0,v);
        };

        this.go = function(to) {
            if(!running) {

                if(o.beforeStart)
                    o.beforeStart.call(this, vis());

                if(o.circular) {            // If circular we are in first or last, then goto the other end
                    if(to<=o.start-v-1) {           // If first, then goto last
                        ul.css(animCss, -((itemLength-(v*2))*liSize)+"px");
                        // If "scroll" > 1, then the "to" might not be equal to the condition; it can be lesser depending on the number of elements.
                        curr = to==o.start-v-1 ? itemLength-(v*2)-1 : itemLength-(v*2)-o.scroll;
                    } else if(to>=itemLength-v+1) { // If last, then goto first
                        ul.css(animCss, -( (v) * liSize ) + "px" );
                        // If "scroll" > 1, then the "to" might not be equal to the condition; it can be greater depending on the number of elements.
                        curr = to==itemLength-v+1 ? v+1 : v+o.scroll;
                    } else curr = to;
                } else {                    // If non-circular and to points to first or last, we just return.
                    if(to<0 || to>itemLength-v) return;
                    else curr = to;
                }                           // If neither overrides it, the curr will still be "to" and we can proceed.

                running = true;

                ul.animate(
                    animCss == "left" ? { left: -(curr*liSize) } : { top: -(curr*liSize) } , o.speed, o.easing,
                    function() {
                        if(o.afterEnd)
                            o.afterEnd.call(this, vis());
                        running = false;
                    }
                );
                // Disable buttons when the carousel reaches the last/first, and enable when not
                if(!o.circular) {
                    $(o.btnPrev + "," + o.btnNext).removeClass("disabled");
                    $( (curr-o.scroll<0 && o.btnPrev)
                        ||
                       (curr+o.scroll > itemLength-v && o.btnNext)
                        ||
                       []
                     ).addClass("disabled");
                }

            }
            return false;
        };
    });
};

function css(el, prop) {
    return parseInt($.css(el[0], prop)) || 0;
};
function width(el) {
    return  el[0].offsetWidth + css(el, 'marginLeft') + css(el, 'marginRight');
};
function height(el) {
    return el[0].offsetHeight + css(el, 'marginTop') + css(el, 'marginBottom');
};

})(jQuery);
;
Syn.VideoEmbedded=Syn.Component.extend({ad_animation_timeout:0,ad_clickurl:"",ad_h:250,ad_so:null,ad_url:"",ad_w:300,carousel:false,pid:'',player_ad_buffer_time:1,player_bg_color:"ffffff",player_buffer_time:2,player_created:false,player_default_volume:75,player_height:205,player_object:null,player_scalemode:"letterbox",player_playbackstatus:"",player_playtime:"",player_skins_dir:Syn.Config.PortalRoot+"video/flpl_skins/",player_skin_id:"embrqembed",player_so:null,player_status:0,player_swf_path:Syn.Config.PortalRoot+"video/flpl_player.swf",player_username:"",player_viewmode:"default",player_volume:75,player_width:258,player_vid_id:0,player_video_api_url:Syn.Config.PortalRoot+"files/video/video_api.php",playing_ad:false,selected_plist_item:0,stored_volume_days_to_expire:365,skip_first_ad:false,tid:'',vertical:false,visible:3,init:function(config){this._super(config);var self=this;this.carousel=(config.carousel)?config.carousel:false;this.pid=(config.pid)?config.pid:'';this.player_skin_id=(config.sid)?config.sid:this.player_skin_id;this.tid=(config.tid)?config.tid:'';this.vertical=(config.vertical)?config.vertical:this.vertical;this.visible=(config.visible)?config.visible:this.visible;this.player_height=(config.player_height)?config.player_height:this.player_height;this.player_width=(config.player_width)?config.player_width:this.player_width;this.skip_first_ad=(config.skip_first_ad!==undefined)?Boolean(config.skip_first_ad):this.skip_first_ad;Syn.VideoEmbedded.addInstance(this);this.uniqueElmt().find("li.plist-item").connect("click",this,"playVideo");this.uniqueElmt("flash_placeholder").connect("click",this,"startVideo");this.uniqueElmt("flash_ad_close_button").connect("click",this,"hideAd");this.uniqueElmt("flash_placeholder").find(".embd_flash_play").fixPngBackground();if($.browser.msie&&parseFloat($.browser.version)<7.0){var fn=function(){this.style.backgroundImage='';$(this).toggleClass("embd_flash_play_on");self.uniqueElmt("flash_placeholder").find(".embd_flash_play").fixPngBackground()};this.uniqueElmt("flash_placeholder").find(".embd_flash_play").mouseover(fn).mouseout(fn)}if(this.carousel){this.uniqueElmt("carousel").jCarouselLite({btnPrev:"#"+this.uniqueKey("previous"),btnNext:"#"+this.uniqueKey("next"),circular:false,scroll:parseFloat(this.visible),vertical:this.vertical,visible:parseFloat(this.visible),beforeStart:function(){self.carouselBeforeStart()}});var retfalse=function(){return false};this.uniqueElmt("previous").click(retfalse);this.uniqueElmt("next").click(retfalse)}var i=0;this.uniqueElmt("carousel").find(">ul>li").each(function(){this.lipos=i++});this.playNextVideo(true);if(this.uniqueElmt("flash_placeholder").find(".embd_flash_placeholder_title").size()){if($(this.selected_plist_item).size()){this.uniqueElmt("flash_placeholder").find(".embd_flash_placeholder_title span").html($(this.selected_plist_item).find("a.title").attr("title"));this.uniqueElmt("flash_placeholder").find(".embd_flash_placeholder_provider_date").html($(this.selected_plist_item).find("div.provider_date").html())}}},playNextVideo:function(dont_play,is_autoplay){var element=(this.selected_plist_item)?$(this.selected_plist_item).next():this.uniqueElmt().find("li.plist-item").eq(0);if(element.size()&&!element.hasClass("void")){if(!dont_play&&this.carousel){var lipos=element.get(0).lipos;var to=lipos-(lipos%this.uniqueElmt("carousel").get(0).o.scroll);this.uniqueElmt("carousel").get(0).go(to)}this.playVideo(element,null,dont_play,is_autoplay)}},startVideo:function(dont_play){var element=this.uniqueElmt().find(".vidembd-plist li").eq(0);if(element.size()){this.playVideo(element,null)}},playVideo:function(element,e,dont_play,is_autoplay){if(!dont_play&&!this.player_created){this.createPlayer()}if(this.selected_plist_item){if(this.selected_plist_item.display_title){$(this.selected_plist_item).find("a.title").html(this.selected_plist_item.display_title)}}$(this.selected_plist_item).removeClass("plist-item-selected");this.selected_plist_item=element;$(element).addClass("plist-item-selected");var video_id=$(element).find("img").attr("alt");var title=$(element).find("a.title").attr("title");var display_title=$(element).find("a.title").html();var desc=$(element).find("div.desc").html();var duration=$(element).find("span.duration").html();element.display_title=display_title;$(element).find("a.title").html($("<strong></strong>").html("Now Playing..."));this.uniqueElmt("playing-video-title").html(title);this.uniqueElmt("playing-video-desc").html(desc);this.uniqueElmt("playing-video-duration").html(duration);if(!dont_play){var lipos=(element.lipos>=0)?element.lipos:element.get(0).lipos;this.log(video_id,this.pid,this.tid,lipos+1,is_autoplay)}this.player_vid_id=video_id},checkVolumeCookie:function(){var name="synembed_vidplayer_volstore";var name_equal=name+"=";var cookie_array=document.cookie.split(';');for(var i=0;i<cookie_array.length;i++){var cookie=cookie_array[i];while(cookie.charAt(0)==' '){cookie=cookie.substring(1,cookie.length)}if(cookie.indexOf(name_equal)===0){var volume=parseInt(cookie.substring(name_equal.length,cookie.length),10);this.player_volume=volume}}this.player_volume=this.player_default_volume},storeVolumeCookie:function(){var name="synembed_vidplayer_volstore";var value=this.player_volume;var days=this.stored_volume_days_to_expire;var date=new Date();date.setTime(date.getTime()+(days*24*60*60*1000));var expires="; expires="+date.toGMTString();document.cookie=name+"="+value+expires+"; path=/"},createPlayer:function(){if(this.player_created){return}this.player_created=true;this.uniqueElmt("flash_container").css("background","transparent");this.player_so=new SWFObject(this.player_swf_path,this.uniqueKey('flash_container_swf',true),"100%","100%","9,0,115,0","#"+this.player_bg_color);if($.browser.msie&&!this.player_so.installedVer.versionIsValid(this.player_so.getAttribute("version"))){var install_msg=this.uniqueElmt("install_flash_message").clone();this.uniqueElmt("flash_container").html(install_msg.removeClass("embd_template"))}else{this.player_so.addParam("allowfullscreen","true");this.player_so.addParam("scale","noscale");this.player_so.addParam("quality","high");this.player_so.addParam("allowscriptaccess","always");this.player_so.addParam("swliveconnect","true");this.player_so.addParam("wmode","opaque");this.player_so.addParam("salign","lt");this.player_so.addParam("pluginspage","http://www.macromedia.com/go/getflashplayer");this.player_so.addVariable("flpl_unique_id",this.uniqueKey('',true));this.uniqueElmt("flash_container").get(0).innerHTML=this.player_so.getSWFHTML()}this.player_status=2},log:function(vid,pid,tid,pos,is_autoplay){$.get(this.player_video_api_url,{op:"log",vid:vid,pid:pid,tid:tid,pos:pos,source:(is_autoplay)?"playlist_autoplay":"playlist"})},videoComplete:function(){this.playNextVideo(false,true)},playerControl_play:function(){this.player_object.pbk_play()},playerControl_pause:function(){this.player_object.pbk_pause()},playerControl_stop:function(){this.player_object.pbk_stop()},playerControl_setvol:function(volume){this.player_object.set_vol(Number(volume))},playerControl_mute:function(){this.player_object.mute()},playerControl_unmute:function(){this.player_object.unmute()},playerRequest_init:function(){var isIE=$.browser.msie;this.player_object=this.uniqueElmt("flash_container_swf").get(0);var send_to_flash={flpl_skins_dir:this.player_skins_dir,flpl_video_api_url:this.player_video_api_url,flpl_billing_api_url:"/",flpl_billing_success_url:"/",flpl_username:this.player_username,flpl_ad_buffer_time:this.player_ad_buffer_time,flpl_login_function:"",flpl_stored_volume:this.player_volume,flpl_init_width:this.player_width,flpl_init_height:this.player_height,flpl_standalone:false,skip_first_ad:this.skip_first_ad,load_first_stopped:false};return send_to_flash},playerRequest_buffertime:function(){return this.player_buffer_time},playerRequest_username:function(){return this.player_username},playerReply_main:function(responseObject){if(responseObject){this.player_playtime=responseObject.flpl_play_time;this.player_playbackstatus=responseObject.flpl_play_status;if((this.player_playbackstatus=="error")&&(this.playing_ad)){this.hideAd()}}var send_to_flash={flpl_vid_id:this.player_vid_id,flpl_skin_id:this.player_skin_id,flpl_scalemode:this.player_scalemode,flpl_viewmode:this.player_viewmode,flpl_skin_width:0,flpl_skin_height:0};return send_to_flash},playerReply_userevent:function(responseObject){if(responseObject){var volume=parseInt(responseObject.flpl_volume,10);var viewmode=responseObject.flpl_viewmode.toString();var scalemode=responseObject.flpl_scalemode.toString();if(viewmode!==null){this.player_viewmode=viewmode}if(scalemode!==null){this.player_scalemode=scalemode}if(volume>-2){this.player_volume=parseInt(volume,10);if(this.player_volume>-1){this.storeVolumeCookie()}}}},navigateToAdLink:function(){if(this.ad_clickurl!==""){var ad_win=window.open(this.ad_clickurl,"ad_win")}},setAdLinks:function(ban_url,img_click_url){this.ad_url=ban_url;this.ad_clickurl=img_click_url},hideAd:function(){this.playingAd(false);this.uniqueElmt('flash_ad').html("");if(this.uniqueElmt('flash_ad_container').css("display")=="block"){this.hideAd_animate()}},hideAd_animate:function(){var self=this;var anicoords=this.getAdAnimationCoords();var animation_obj={width:"1px",left:anicoords.start_left};var callback_fn=function(){self.hideAd_finish()};this.uniqueElmt('flash_ad_container').animate(animation_obj,400,callback_fn);clearInterval(this.ad_animation_timeout)},hideAd_finish:function(){this.uniqueElmt("flash_ad_container").css("display","none").css("width","0px");this.uniqueElmt("flash_ad").html("");clearInterval(this.ad_animation_timeout)},showAd:function(){this.resetAdLocation();var should_animate_ad=!this.playing_ad;this.playingAd(true);if(should_animate_ad){var self=this;var anicoords=this.getAdAnimationCoords();var animation_object={width:"311px",left:anicoords.left+"px"};var callback_fn=function(){self.showAd_print()};this.uniqueElmt('flash_ad_container').css({"width":"1px","left":anicoords.start_left+"px","display":"block"}).animate(animation_object,1500,callback_fn)}else{this.showAd_print()}},getAdAnimationCoords:function(){var comp_container=this.uniqueElmt().parents(".comp_container").eq(0);var offset=comp_container.getPosition();var border_left=parseFloat(comp_container.css("border-left-width")).NaN0();var start_left=offset.left-6+border_left;var left=offset.left-317+border_left;if(left<0){var border_right=parseFloat(comp_container.css("border-right-width")).NaN0();left=offset.left+comp_container.outerWidth();start_left=left;this.uniqueElmt("flash_ad_container").addClass("embd_player_ad_right")}else{this.uniqueElmt("flash_ad_container").removeClass("embd_player_ad_right")}return{left:left,start_left:start_left}},showAd_print:function(){clearInterval(this.ad_animation_timeout);var self=this;this.ad_animation_timeout=setInterval(function(){self.resetAdLocation()},400);if(this.ad_url!==""){var swf_found=this.ad_url.indexOf(".swf");if(swf_found>=0){this.showAd_writeFlash()}else{var html_found=this.ad_url.indexOf("&ext=.html");var double_click_found=this.ad_url.indexOf("http://ad.doubleclick.net");if(html_found>=0||double_click_found===0){this.showAd_writeHTML()}else{this.showAd_writeImage()}}}},showAd_writeFlash:function(){this.uniqueElmt('flash_ad').html("");this.ad_so=new SWFObject(this.ad_url,"component_ad_"+this.uniqueKey('flash_ad',true),this.ad_w,this.ad_h,"9,0,115,0","#ffffff");this.ad_so.addParam("quality","high");this.ad_so.addParam("wmode","opaque");this.ad_so.write(this.uniqueKey('flash_ad',true))},showAd_writeHTML:function(){this.uniqueElmt("flash_ad").html("");this.uniqueElmt("template_ad_iframe").clone().attr("id",this.uniqueKey("embd_ad_iframe")).attr("src",this.ad_url).width(this.ad_w).height(this.ad_h).appendTo("#"+this.uniqueKey("flash_ad")).show()},showAd_writeImage:function(){var ad_clickurl=this.ad_clickurl;this.uniqueElmt("flash_ad").html('<img id="'+this.uniqueKey("embd_ad_img",true)+'" src="'+this.ad_url+'" class="embd_ad_img" alt="" />');this.uniqueElmt("embd_ad_img").css("width",this.ad_w).css("height",this.ad_h).bind("click",function(){window.open(ad_clickurl,"ad_win")}).show()},resetAdLocation:function(){var anicoords=this.getAdAnimationCoords();var offset=this.uniqueElmt().parents(".comp_container").eq(0).offset();this.uniqueElmt('flash_ad_container').css({"top":(this.uniqueElmt('flash_ad_popoutloc').offset().top-22)+"px","left":anicoords.left+"px"})},playingAd:function(playing_ad){this.playing_ad=playing_ad},carouselBeforeStart:function(){if(!this.uniqueElmt("carousel").data("deferred_images_loaded")){this.uniqueElmt("carousel").data("deferred_images_loaded",true);$("#"+this.uniqueKey("carousel")+" span.deferred_image").each(function(){var child=this.firstChild;if(child.nodeType===8){this.innerHTML='';$(this).replaceWith(child.nodeValue)}})}}});Syn.VideoEmbedded.instances={};Syn.VideoEmbedded.addInstance=function(obj_ref){Syn.VideoEmbedded.instances[obj_ref.uniqueKey('',true)]=obj_ref};;
