(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return!!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return!!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return+new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return!o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return-1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}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")}})})();try{document.execCommand("BackgroundImageCache",false,true);}catch(err){}
var AJKHelpers={waitForId:function(dataObj){var anObject=dataObj.anObject;var callback=dataObj.callback;var checkForId=function(){if(anObject.id=="awaiting"){var thisFunc=arguments.callee;setTimeout(function(){thisFunc();},100);}
else if(callback){callback();}}
checkForId();},cloneObj:function(dataObj){var obj=dataObj.obj
if(obj==null||typeof(obj)!='object'){return obj;}
var temp=new obj.constructor();for(var key in obj){temp[key]=this.cloneObj(obj[key]);}
return temp;},jiggleDomEl:function(dataObj){var domEl=dataObj.domEl;var displacementFactor=dataObj.displacementFactor;var leftOffset=($(domEl).css("left")&&$(domEl).css("left")!="auto")?parseInt($(domEl).css("left")):0;var position=$(domEl).css("position");if(position!="absolute"){$(domEl).css({position:"relative"});}
var numRadians=16;var steps=25;for(var counter=0;counter<=numRadians;counter+=0.2){(function(){var lOffset=leftOffset+Math.cos(counter)*displacementFactor;var delay=parseInt(counter*steps);setTimeout(function(){$(domEl).css({left:lOffset});if(Math.abs(delay-(numRadians*steps))<5){$(domEl).css({position:position,left:leftOffset});}},delay);}());}},flashDomEl:function(dataObj){var domEl=dataObj.domEl;var numRadians=12;var steps=50;for(var counter=0;counter<=numRadians;counter+=0.2){(function(){var opacity=Math.cos(counter);var delay=parseInt(counter*steps);setTimeout(function(){$(domEl).css({opacity:0.3+0.7*opacity});if(Math.abs(delay-(numRadians*steps))<5){$(domEl).css({opacity:1});}},delay);}());}},isEmail:function(dataObj){var self=this;var aString=dataObj.aString;return aString.match(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);},cancelSelectionOnDomEl:function(dataObj){var domEl=dataObj.domEl;domEl.onselectstart=function(){return false;};domEl.unselectable="on";domEl.style.MozUserSelect="none";},getCoordsOfDomEl:function(dataObj){var domEl=dataObj.domEl;var xPos=yPos=0;if(domEl.offsetParent){xPos=domEl.offsetLeft;yPos=domEl.offsetTop;while(domEl=domEl.offsetParent){xPos+=domEl.offsetLeft;yPos+=domEl.offsetTop;}}
return{x:xPos,y:yPos};},get4CoordsOfDomEl:function(dataObj){var domEl=dataObj.domEl;var coords=this.getCoordsOfDomEl(dataObj);coords.x2=coords.x+$(domEl).width();coords.y2=coords.y+$(domEl).height();return coords;},calculateDomElHeight:function(dataObj){var self;var domEl=dataObj.domEl;var height=$(domEl).height()
height+=parseInt($(domEl).css("marginTop"));height+parseInt($(domEl).css("marginBottom"));return height;},getNowDate:function(){return new Date();},trimArray:function(dataObj){var anArray=dataObj.anArray;var limit=(anArray.length<dataObj.limit)?anArray.length:dataObj.limit;var counter=0;var retArray=new Array();while(counter<limit){retArray.push(anArray[counter++]);}
return retArray;},dateFromMySQLDate:function(dataObj){var dateString=dataObj.dateString;if(!dateString||dateString=="undefined"){return false;}
var dateAllArray=dateString.split(" ");var dateArray=dateAllArray[0].split("-");var timeArray=dateAllArray[1].split(":");var date=new Date();date.setDate(parseInt(dateArray[2],10));date.setMonth(parseInt(dateArray[1],10)-1);date.setFullYear(parseInt(dateArray[0],10));date.setHours(parseInt(timeArray[0],10));date.setMinutes(parseInt(timeArray[1],10));date.setSeconds(parseInt(timeArray[2],10));return date;},dateWeekDayArray:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dateWeekDayShortArray:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dateMonthsArray:["January","February","March","April","May","June","July","August","September","October","November","December"],dateMonthsShortArray:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dateDaySuffixArray:["st","nd","rd","th","th","th","th","th","th","th","th","th","th","th","th","th","th","th","th","th","st","nd","rd","th","th","th","th","th","th","th","st","nd","rd","th","th","th","th","th","th","th"],dateOneDayInMS:1000*60*60*24,prettyDateFromMySQLDate:function(dataObj){var jsDate=this.dateFromMySQLDate({dateString:dataObj.dateString});return this.prettyDateFromDate({date:jsDate});},prettyDateFromDate:function(dataObj){var jsDate=dataObj.date;var smallDate=dataObj.smallDate;var x=jsDate.getYear();var y=x%100;y+=(y<38)?2000:1900;var year=y;if(smallDate){return jsDate.getDate()+"/"+(jsDate.getMonth()+1)+"/"+year.toString().substring(2,4);}
else{return jsDate.getDate()+this.dateDaySuffixArray[jsDate.getDate()-1]+" "+this.dateMonthsShortArray[jsDate.getMonth()]+" "+year;}},prettyTimeFromDate:function(dataObj){var jsDate=dataObj.date;var amOrPm=(jsDate.getHours()>11)?"pm":"am";var hour=jsDate.getHours()%12;hour=(hour==0)?12:hour;var minutes=jsDate.getMinutes();return hour+":"+this.doubleDigitNum({num:minutes})+amOrPm;},prettyTimeFromMySQLDate:function(dataObj){var jsDate=this.dateFromMySQLDate({dateString:dataObj.dateString});return this.prettyTimeFromDate({date:jsDate});},doubleDigitNum:function(dataObj){var num=parseInt(dataObj.num);if(num==0){return"00";}
else if(num<10){return"0"+num;}
else{return num;}},deleteCookie:function(dataObj){var name=dataObj.name;document.cookie=name+'=; expires=Thu, 01-Jan-70 00:00:01 GMT;';},setCookie:function(dataObj){var name=dataObj.name;var value=dataObj.value;var expires=dataObj.expires;var path=dataObj.path;var domain=dataObj.domain;var secure=dataObj.secure;var today=new Date();today.setTime(today.getTime());if(expires){expires=expires*1000*60*60*24;}
var expires_date=new Date(today.getTime()+(expires));document.cookie=name+"="+escape(value)+
((expires)?";expires="+expires_date.toGMTString():"")+
((path)?";path="+path:"")+
((domain)?";domain="+domain:"")+
((secure)?";secure":"");},getCookie:function(dataObj){var name=dataObj.name;var start=document.cookie.indexOf(name+"=");var len=start+name.length+1;if((!start)&&(name!=document.cookie.substring(0,name.length))){return null;}
if(start==-1){return null;}
var end=document.cookie.indexOf(";",len);if(end==-1){end=document.cookie.length;}
return unescape(document.cookie.substring(len,end));},removeItemFromArray:function(dataObj){var item=dataObj.item;var anArray=dataObj.anArray;var returnArray=new Array();for(var counter=0;counter<anArray.length;counter++){if(anArray[counter]!=item){returnArray.push(anArray[counter]);}}
return returnArray;},isItemInArray:function(dataObj){var item=dataObj.item;var anArray=dataObj.anArray;for(var counter=0;counter<anArray.length;counter++){if(anArray[counter]==item){return true;}}
return false;},cloneArray:function(dataObj){var anArray=dataObj.anArray;var returnArray=new Array();for(var counter=0;counter<anArray.length;counter++){returnArray.push(anArray[counter]);}
return returnArray;},scrollbarWidth:function(){document.body.style.overflow='hidden';var width=document.body.clientWidth;document.body.style.overflow='scroll';width-=document.body.clientWidth;if(!width)width=document.body.offsetWidth-document.body.clientWidth;document.body.style.overflow='';return width;},extend:function(subClass,superClass){var F=function(){};F.prototype=superClass.prototype;subClass.prototype=new F();subClass.prototype.constructor=subClass;subClass.superClass=superClass.prototype;if(superClass.prototype.constructor==Object.prototype.constructor){superClass.prototype.constructor=superClass;}},clipToMaxCharWords:function(dataObj){var aString=dataObj.aString;var maxChars=dataObj.maxChars;var wordarray=aString.split(" ");var numwords=wordarray.length;var newstring="";var laststring="";for(var counter=0;counter<numwords;counter++){laststring=newstring
if(counter!=0){newstring+=(" "+wordarray[counter]);}
else{newstring+=wordarray[counter];}
if(newstring.length>maxChars){return(laststring+"...");}}
return newstring;},viewportSize:function(){var myWidth=0,myHeight=0;if(typeof(window.innerWidth)=='number'){myWidth=window.innerWidth;myHeight=window.innerHeight;}
else if(document.documentElement&&(document.documentElement.clientWidth||document.documentElement.clientHeight)){myWidth=document.documentElement.clientWidth;myHeight=document.documentElement.clientHeight;}
else if(document.body&&(document.body.clientWidth||document.body.clientHeight)){myWidth=document.body.clientWidth;myHeight=document.body.clientHeight;}
return{width:myWidth,height:myHeight}},decipherQueryResult:function(dataObj){return dataObj.queryResult;}}
var QMBrowserDetect={init:function(){this.browser=this.searchString(this.dataBrowser)||"An unknown browser";this.version=this.searchVersion(navigator.userAgent)||this.searchVersion(navigator.appVersion)||"an unknown version";this.OS=this.searchString(this.dataOS)||"an unknown OS";},searchString:function(data){for(var i=0;i<data.length;i++){var dataString=data[i].string;var dataProp=data[i].prop;this.versionSearchString=data[i].versionSearch||data[i].identity;if(dataString){if(dataString.indexOf(data[i].subString)!=-1)
return data[i].identity;}
else if(dataProp)
return data[i].identity;}},searchVersion:function(dataString){var index=dataString.indexOf(this.versionSearchString);if(index==-1)return;return parseFloat(dataString.substring(index+this.versionSearchString.length+1));},dataBrowser:[{string:navigator.userAgent,subString:"Chrome",identity:"Chrome"},{string:navigator.userAgent,subString:"OmniWeb",versionSearch:"OmniWeb/",identity:"OmniWeb"},{string:navigator.vendor,subString:"Apple",identity:"Safari",versionSearch:"Version"},{prop:window.opera,identity:"Opera"},{string:navigator.vendor,subString:"iCab",identity:"iCab"},{string:navigator.vendor,subString:"KDE",identity:"Konqueror"},{string:navigator.userAgent,subString:"Firefox",identity:"Firefox"},{string:navigator.vendor,subString:"Camino",identity:"Camino"},{string:navigator.userAgent,subString:"Netscape",identity:"Netscape"},{string:navigator.userAgent,subString:"MSIE",identity:"Explorer",versionSearch:"MSIE"},{string:navigator.userAgent,subString:"Gecko",identity:"Mozilla",versionSearch:"rv"},{string:navigator.userAgent,subString:"Mozilla",identity:"Netscape",versionSearch:"Mozilla"}],dataOS:[{string:navigator.platform,subString:"Win",identity:"Windows"},{string:navigator.platform,subString:"Mac",identity:"Mac"},{string:navigator.userAgent,subString:"iPhone",identity:"iPhone/iPod"},{string:navigator.platform,subString:"Linux",identity:"Linux"}]};QMBrowserDetect.init();var AJKAjaxController=function(dataObj){self.loginController="";return this;}
AJKAjaxController.prototype={init:function(){var self=this;return self;},request:function(dataObj){var self=this;var action=dataObj.action;var vars=dataObj.vars;var callback=dataObj.callback;var method=dataObj.method;var alwaysAllow=dataObj.alwaysAllow;if(action=="assets/ajax/load-range-of-shop-games.php"&&!AJKGameManagerInitialValues.useUncachedShopData){action="assets/ajax/cached-data/shop-data-"+vars.genre+"-"+vars.start+"-"+vars.limit+".php";}
if(self.loginController.user.loggedIn||method=="get"||alwaysAllow){if(!vars.userId&&self.loginController.user.loggedIn){vars.userId=anAJKLibraryController.user.id;}
var rFunc=(method=="post")?$.post:$.get;rFunc(action,vars,function(data){if(data=="verify-code-mismatch"){AJKHelpers.deleteCookie({name:self.loginController.userCookieName});location.reload(true);}
else if(callback){callback(data);}});}
else{}}}
var AJKTableController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.domCarousel=$(this.domRootEl).find(".mgr-g-carousel").get()[0];this.domStage=$(this.domRootEl).find(".mgr-g-stage").get()[0];this.domBody=$("body").get()[0];this.domSortButtons=$(this.domRootEl).find(".rt-list-header li").get();this.domShowButton=dataObj.domShowButton;this.domShopTable=dataObj.domShopTable;this.domNumGamesDisplayer=dataObj.domNumGamesDisplayer;this.title=dataObj.title;this.domTablePrototype=$(this.domRootEl).clone().get()[0];this.containerHeight=dataObj.containerHeight;this.carouselHeightOffset=110;this.delegate=dataObj.delegate;this.defaultSort=dataObj.defaultSort;this.type=dataObj.type;this.genre=dataObj.genre;this.carouselRatio=0;this.games=dataObj.games;this.gamesByKey=new Array();this.entries=new Array();this.entriesByKey=new Array();this.entriesByGameKey=new Array();this.nextUniqueKey=1;this.uniqueKeyText="entry-";this.entriesPerBlock=30;this.entriesHeight=30;this.thumbHeight=214;this.listToThumbRatio=this.entriesHeight*this.entriesPerBlock/(this.thumbHeight*this.entriesPerBlock/5);this.infoPanelHeight=230;this.fullBlockHeight=this.entriesPerBlock*this.entriesHeight;this.blocks=new Array();this.numBlocks=0;this.visibleBlocks=new Array();this.lastVisibleBlockNum=-1;this.sortController="";this.entriesReady=false;this.controlsDisabled=true;this.addingEntries=false;this.windowScrollTop=0;this.bodyHeight="";this.stageHeight="";this.currentlyAddingGames=false;this.lastVisibleBlocks=new Array();this.controller=dataObj.controller;this.ownerTable="";this.searchTable="";this.tableMode=dataObj.tableMode;this.domTableViewOptions=$(this.domRootEl).find(".rt-l-top-options");this.domShowListView=$(this.domTableViewOptions).find(".list").get()[0];this.domShowThumbView=$(this.domTableViewOptions).find(".thumbs").get()[0];return this;}
AJKTableController.prototype={init:function(){var self=this;if(self.tableMode=="list"){$(self.domRootEl).removeClass("mgr-table-thumbnails");$(self.domShowThumbView).removeClass("view-selected");$(self.domShowListView).addClass("view-selected");}
else{$(self.domRootEl).addClass("mgr-table-thumbnails");$(self.domShowThumbView).addClass("view-selected");$(self.domShowListView).removeClass("view-selected");}
$.each(self.games,function(){self.gamesByKey[this.id]=this;});self.sortController=new AJKTableSortController({domSortEls:self.domSortButtons,defaultSort:self.defaultSort,sortFunc:function(dataObj){self.sortEntries(dataObj);self.refreshEntries();}}).init();var multipleEventsController=new AJKMultipleEventController({domRootEl:self.domStage,clickFunc:function(dataObj){var e=dataObj.event;var entryEl=$(e.target).parents(".mgr-g-item");if(entryEl.length>0){var entry=self.entriesByKey[$(entryEl).attr("key")];if(e.target.className.indexOf("mgr-gi-select-add")!=-1){self.addGameToUserLibrary({entry:entry});}
else if(self.tableMode=="list"){entry.toggleInfoPanel();}
else if(e.target.className.indexOf("mgr-gi-t-option")!=-1){e.preventDefault();switch($(e.target).attr("option")){case"play":self.delegate.loadGame({game:entry.game});break;case"more-info":self.delegate.showGameInfo({game:entry.game});}}}
else if(e.target.className.indexOf("mgr-g-info-button")!=-1){e.preventDefault();switch($(e.target).attr("option")){case"close":self.entriesByKey[$(e.target).attr("entryKey")].toggleInfoPanel();break;case"play":self.delegate.loadGame({game:self.gamesByKey[$(e.target).attr("gameKey")]});break;case"more-info":self.delegate.showGameInfo({game:self.gamesByKey[$(e.target).attr("gameKey")]});break;case"comments":self.delegate.showGameInfo({game:self.gamesByKey[$(e.target).attr("gameKey")],jumpToComments:true});break;}}},clickClasses:new Array("mgr-g-item","mgr-g-info-inner"),mousemoveFunc:function(dataObj){var e=dataObj.event;var entryEl=$(e.target).parents(".mgr-g-item:first").get()[0];if(entryEl){var entryKey=$(entryEl).attr("key");var game=self.entriesByKey[entryKey].game;var cloneClass=(self.tableMode=="list")?"":"mgr-g-item-thumb-drag";var aDraggable=new AJKDraggable({domDragEl:entryEl,clone:true,cloneClass:cloneClass,type:"game",data:game,owner:self});aDraggable.initiateDrag({event:e});}},mousemoveClasses:new Array("mgr-g-item")}).init();$(self.domCarousel).css({height:self.containerHeight-95});$(self.domShowListView).click(function(){self.controller.changeTableViewsTo({mode:"list"});return false;});$(this.domShowThumbView).click(function(){self.controller.changeTableViewsTo({mode:"thumb"});return false;});return self;},changeTableViewTo:function(dataObj){var self=this;var mode=dataObj.mode;if(self.tableMode!=mode){self.tableMode=mode;if(self.searchTable){self.searchTable.changeTableViewTo(dataObj);}
var percentFromTop=false;if(self.bodyHeight){percentFromTop=self.windowScrollTop/(self.bodyHeight-AJKHelpers.viewportSize().height);}
switch(mode){case"list":$(self.domRootEl).removeClass("mgr-table-thumbnails");$(self.domShowThumbView).removeClass("view-selected");$(self.domShowListView).addClass("view-selected");self.carouselRatio*=self.listToThumbRatio;break;case"thumb":$(self.domRootEl).addClass("mgr-table-thumbnails");$(self.domShowThumbView).addClass("view-selected");$(self.domShowListView).removeClass("view-selected");self.carouselRatio/=self.listToThumbRatio;if(!self.controlsDisabled){$.each(self.visibleBlocks,function(){this.loadEntryThumbnails();});}
break;}
var newHeight=0;$.each(self.blocks,function(){this.refreshHeight({setAutoHeightIfDisplayed:true});newHeight+=this.height;});if(percentFromTop){self.bodyHeight=newHeight*(AJKHelpers.viewportSize().height/(self.containerHeight-self.carouselHeightOffset));self.windowScrollTop=percentFromTop*(self.bodyHeight-AJKHelpers.viewportSize().height);}
if(!self.controlsDisabled){self.updateControls();self.lastVisibleBlockNum=-1;setTimeout(function(){self.updateTableDisplay();});}}},filterBy:function(dataObj){var self=this;var searchTerm=dataObj.searchTerm;var fader=dataObj.fader;self.filter=searchTerm;var filteredGames=new Array();$.each(self.games,function(){if(this.searchText.indexOf(searchTerm)!=-1){filteredGames.push(this);}});var domSeachTable=$(self.domTablePrototype).clone().get()[0];$(self.controller.domTableStage).append(domSeachTable);var searchTable=new AJKTableController({domRootEl:domSeachTable,delegate:self.delegate,games:new Array(),domShowButton:self.domShowButton,domNumGamesDisplayer:"",containerHeight:anAJKMainCarouselController.dimensions.height,defaultSort:"",type:self.type,title:self.title,genre:"search",controller:self.controller,tableMode:self.tableMode}).init();searchTable.ownerTable=self;searchTable.games=filteredGames;$.each(searchTable.games,function(){searchTable.gamesByKey[this.id]=this;});searchTable.createEntriesFromGames({games:filteredGames,progressFunc:function(dataObj){var percentage=dataObj.percentage;fader.setComplete({percentage:parseInt(percentage)});},completionFunc:function(){fader.setComplete({percentage:100});self.controller.showTable({table:searchTable});if(self.searchTable){self.searchTable.kill();}
self.searchTable=searchTable;fader.fadeOut();}});},clearFilter:function(){var self=this;self.filter="";if(self.searchTable){self.searchTable.kill();self.searchTable="";}
self.controller.showTable({table:self});},show:function(){var self=this;if(!self.entriesReady){$.each(self.games,function(){self.gamesByKey[this.id]=this;});self.sortGames({sortHierarchy:self.sortController.sortHierarchy});self.createEntriesFromGames({games:self.games});}
self.showViaCss();if(self.tableMode=="thumb"){$.each(self.visibleBlocks,function(){this.loadEntryThumbnails();});}},showViaCss:function(){var self=this;$(self.domRootEl).css({display:"block"});},hide:function(){var self=this;$(self.domRootEl).css({display:"none"});},createNewEntryFromGame:function(dataObj){var self=this;var game=dataObj.game;var uniqueKey=self.uniqueKeyText+(self.nextUniqueKey++);var cancelVariableUpdate=(self.type=="friend-list")?true:false;var anEntry=new AJKTableEntry({game:game,key:uniqueKey,controller:self,type:self.type,cancelVariableUpdate:cancelVariableUpdate}).init();self.entries.push(anEntry);self.entriesByKey[uniqueKey]=anEntry;self.entriesByGameKey[game.id]=anEntry;return anEntry;},kill:function(){var self=this;$(self.domRootEl).remove();},createEntriesFromGames:function(dataObj){var self=this;var games=dataObj.games;var totalNumOfEntries=games.length;var progressFunc=dataObj.progressFunc;var completionFunc=dataObj.completionFunc;var entriesInBatchesOf=parseInt(totalNumOfEntries/20);entriesInBatchesOf=(entriesInBatchesOf<1)?1:entriesInBatchesOf;entriesInBatchesOf=(entriesInBatchesOf>500)?500:entriesInBatchesOf;if(progressFunc){var createEntriesRange=function(dataObj){var start=dataObj.start;var end=((start+entriesInBatchesOf)>totalNumOfEntries)?totalNumOfEntries:start+entriesInBatchesOf;for(var counter=start;counter<end;counter++){var anEntry=self.createNewEntryFromGame({game:games[counter]});self.gamesByKey[games[counter].id]=games[counter];}
if(end<totalNumOfEntries){var thisFunc=arguments.callee;setTimeout(function(){thisFunc({start:end});},1);progressFunc({percentage:end/totalNumOfEntries*50});}
else{self.addEntriesToTable({progressFunc:progressFunc,completionFunc:completionFunc});}}
createEntriesRange({start:0});}
else{$.each(games,function(){self.createNewEntryFromGame({game:this});});self.addEntriesToTable(dataObj);}},sortEntries:function(dataObj){var self=this;self.sortGames(dataObj);self.entries=new Array();$.each(self.games,function(){self.entries.push(self.entriesByGameKey[this.id]);});},sortGames:function(dataObj){var self=this;var sortHierarchy=dataObj.sortHierarchy;var compareGames=function(dataObj){var sortHierarchy=dataObj.sortHierarchy;if(sortHierarchy.length==0){return 0;}
var sortField=sortHierarchy[0].field;var game1=dataObj.game1;var game2=dataObj.game2;var thisFunc=arguments.callee;if(game1[sortField]==game2[sortField]||(sortHierarchy[0].type=="text"&&game1[sortField].toLowerCase()==game2[sortField].toLowerCase())){return thisFunc({game1:game1,game2:game2,sortHierarchy:sortHierarchy.slice(1)});}
else if(sortHierarchy[0].type=="text"){return(game1[sortField].toLowerCase()>game2[sortField].toLowerCase())?sortHierarchy[0].order:-sortHierarchy[0].order;}
else{return(game1[sortField]>game2[sortField])?sortHierarchy[0].order:-sortHierarchy[0].order;}}
self.games=self.games.sort(function(a,b){return compareGames({game1:a,game2:b,sortHierarchy:sortHierarchy});});},addEntriesToTable:function(dataObj){var self=this;if(self.addingEntries){return false;}
self.addingEntries=true;var progressFunc=(dataObj&&dataObj.progressFunc)?dataObj.progressFunc:"";var completionFunc=(dataObj&&dataObj.completionFunc)?dataObj.completionFunc:"";var totalNumberOfBlocks=Math.ceil(self.entries.length/self.entriesPerBlock);var blocksInBatchesOf=20;var numOfEntries=self.entries.length;if(progressFunc){var createBlockRange=function(dataObj){var start=dataObj.start;var end=((start+blocksInBatchesOf)>totalNumberOfBlocks)?totalNumberOfBlocks:start+blocksInBatchesOf;for(var counter=start;counter<end;counter++){var aBlock=new AJKTableBlock({controller:self,index:self.blocks.length}).init();self.blocks.push(aBlock);var forStart=counter*self.entriesPerBlock;var forEnd=((forStart+self.entriesPerBlock)>numOfEntries)?numOfEntries:forStart+self.entriesPerBlock;for(var counter2=forStart;counter2<forEnd;counter2++){aBlock.addEntry({entry:self.entries[counter2]});}}
var thisFunc=arguments.callee;if(end<totalNumberOfBlocks){setTimeout(function(){thisFunc({start:end});},1);if(progressFunc){progressFunc({percentage:50+end/totalNumberOfBlocks*50});}}
else{self.numBlocks=self.blocks.length;$.each(self.blocks,function(){this.refreshHeight();$(self.domStage).append(this.domRootEl);});self.updateTableDisplay();self.entriesReady=true;self.addingEntries=false;if(completionFunc){completionFunc();}}}
createBlockRange({start:0});}
else{var counter=0;var currentBlock="";var blockCounter=0;$.each(self.entries,function(){if(counter++%self.entriesPerBlock==0){currentBlock=new AJKTableBlock({controller:self,index:blockCounter++}).init();self.blocks.push(currentBlock);}
currentBlock.addEntry({entry:this});});self.numBlocks=self.blocks.length;$.each(self.blocks,function(){this.refreshHeight();$(self.domStage).append(this.domRootEl);});self.updateTableDisplay();self.entriesReady=true;self.addingEntries=false;if(completionFunc){completionFunc();}}},refreshEntries:function(){var self=this;$.each(self.blocks,function(){});$(self.domStage).empty();self.blocks=new Array();self.visibleBlocks=new Array();self.lastVisibleBlockNum=-1;self.addEntriesToTable();if(!self.controlsDisabled){self.updateControls();}},displayBlock:function(dataObj){var self=this;var block=dataObj.block;block.displayBlockContent();self.visibleBlocks.push(block);},updateSize:function(dataObj){var self=this;self.containerHeight=(dataObj&&dataObj.newContainerHeight)?dataObj.newContainerHeight:self.containerHeight;if(!self.controlsDisabled){$(self.domCarousel).css({height:self.containerHeight-self.carouselHeightOffset});self.updateControls();}},updateControls:function(){var self=this;self.carouselRatio=$(self.domStage).height()/$(self.domCarousel).height();var viewportHeight=AJKHelpers.viewportSize().height;self.bodyHeight=(self.carouselRatio>1)?self.carouselRatio*viewportHeight:1.1*viewportHeight;self.stageHeight=$(self.domStage).height();self.windowScrollTop=(self.carouselRatio>1)?self.windowScrollTop:0;$(self.domBody).css({height:self.bodyHeight});window.scrollTo(0,self.windowScrollTop);},windowDidScroll:function(dataObj){var self=this;var windowTopOffset=dataObj.windowTopOffset;self.windowScrollTop=$(window).scrollTop();if(!self.controlsDisabled){self.updateTableDisplay();}},disableControls:function(){var self=this;self.controlsDisabled=true;theAJKWindowScrollEvent.removeAsObserver({observer:self});},enableControls:function(){var self=this;self.controlsDisabled=false;self.updateSize();theAJKWindowScrollEvent.registerAsObserver({observer:self});},updateTableDisplay:function(dataObj){var self=this;if(self.blocks.length==0){return false;}
var topOffset=self.windowScrollTop/self.bodyHeight*self.stageHeight;topOffset=(self.carouselRatio>1)?topOffset:0;var combinedHeight=0;var visibleTableNum=0;for(var counter=0;counter<self.numBlocks;counter++){combinedHeight+=self.blocks[counter].height;if(combinedHeight>=topOffset){visibleTableNum=counter;break;}}
var blocksToHide=new Array();if(visibleTableNum!=self.lastVisibleBlockNum){self.lastVisibleBlockNum=visibleTableNum;blocksToHide=AJKHelpers.cloneArray({anArray:self.visibleBlocks});self.visibleBlocks=new Array();self.displayBlock({block:self.blocks[visibleTableNum]});if(++visibleTableNum<self.numBlocks&&self.blocks[visibleTableNum]){self.displayBlock({block:self.blocks[visibleTableNum]});}
$.each(self.visibleBlocks,function(){blocksToHide=AJKHelpers.removeItemFromArray({item:this,anArray:blocksToHide});});}
$(self.domStage).css({top:-topOffset});setTimeout(function(){$.each(blocksToHide,function(){this.removeBlockContent();});});},deactivateAddGameToLibraryForGame:function(dataObj){var self=this;var game=dataObj.game;if(self.entriesByGameKey[game.id]){self.entriesByGameKey[game.id].deactivateAddGameToLibrary();}},addGameToUserLibrary:function(dataObj){var self=this;if(self.currentlyAddingGames){return;}
self.currentlyAddingGames=true;var entry=dataObj.entry;var game=entry.game;anAJKLibraryController.addGameToUserLibrary({game:game});if(self.type=="friend-list"||self.type=="shop"){anAJKLibraryController.deactivateAddGameToLibraryForAllReleventTables({game:game});self.currentlyAddingGames=false;}
else{if(entry.infoPanel&&entry.infoPanel.isOpen){entry.infoPanel.hidePanel({fade:true,callback:function(){entry.containerBlock.itemHasClosed();}});}
$(entry.domRootEl).click(function(){return false;}).animate({opacity:0},300,function(){$(this).animate({height:0,marginBottom:0},300,function(){$(this).remove();self.removeGameFromTable({game:game});self.updateControls();self.currentlyAddingGames=false;})});}},addEntryFromNewGame:function(dataObj){var self=this;var game=dataObj.game;var limit=dataObj.limit;var limitSort=dataObj.limitSort;var isGameAlreadyInTable=self.gamesByKey[game.id];if(!isGameAlreadyInTable){self.games.push(game);self.gamesByKey[game.id]=game;}
if(limit&&self.games.length>limit){var tempSortHierarchy=new Array();tempSortHierarchy.push(limitSort);self.sortGames({sortHierarchy:tempSortHierarchy});var counter=self.games.length;while(counter>limit){self.removeGameFromTable({game:self.games[--counter]});}}
if(self.entriesReady){if(!isGameAlreadyInTable){self.createNewEntryFromGame({game:game});}
self.sortEntries({sortHierarchy:self.sortController.sortHierarchy});self.refreshEntries();}
else{self.sortGames({sortHierarchy:self.sortController.sortHierarchy});}
if(self.domNumGamesDisplayer){$(self.domNumGamesDisplayer).text(self.games.length);}},removeGameFromTable:function(dataObj){var self=this;var game=dataObj.game;if(!self.gamesByKey[game.id]){return;}
self.games=AJKHelpers.removeItemFromArray({item:game,anArray:self.games});self.gamesByKey[game.id]="";if(self.entriesReady){var thisEntry=self.entriesByGameKey[game.id];self.entries=AJKHelpers.removeItemFromArray({item:thisEntry,anArray:self.entries});self.entriesByGameKey[game.id]="";if(thisEntry){thisEntry.kill();}}
if(self.domNumGamesDisplayer){$(self.domNumGamesDisplayer).text(self.games.length);}
if(self.searchTable){self.searchTable.removeGameFromTable(dataObj);}}}
var AJKTableEntry=function(dataObj){this.game=dataObj.game;this.key=dataObj.key;this.domRootEl="";this.containerBlock="";this.infoPanel="";this.controller=dataObj.controller;this.type=dataObj.type;this.cancelVariableUpdate=dataObj.cancelVariableUpdate;this.searchVisible=true;this.imageLoaded=false;self.domThumbnail="";return this;}
AJKTableEntry.prototype={init:function(){var self=this;self.domRootEl=self.createHTML();self.domThumbnail=$(self.domRootEl).find(".image-holder:eq(0) img").get()[0];if(!self.cancelVariableUpdate){self.game.registerAsObserver({observer:self});}
return self;},loadThumbnail:function(){var self=this;if(!self.imageLoaded){$(self.domThumbnail).attr("src",self.game.thumbnailUrl);self.imageLoaded=true;}},searchShow:function(){var self=this;if(!self.searchVisible){self.searchVisible=true;self.containerBlock.entryWasSearchShown({entryInfoPanelOpen:(self.infoPanel&&self.infoPanel.isOpen)?true:false});$(self.domRootEl).css({display:"block"});if(self.infoPanel&&self.infoPanel.isOpen){$(self.infoPanel.domRootEl).css({display:"block"});}}},searchHide:function(){var self=this;if(self.searchVisible){self.searchVisible=false;self.containerBlock.entryWasSearchHidden({entryInfoPanelOpen:(self.infoPanel&&self.infoPanel.isOpen)?true:false});$(self.domRootEl).css({display:"none"});if(self.infoPanel&&self.infoPanel.isOpen){$(self.infoPanel.domRootEl).css({display:"none"});}}},deactivateAddGameToLibrary:function(){var self=this;if(self.domRootEl){setTimeout(function(){$(self.domRootEl).find(".mgr-gi-add p").html('<span class="mgr-g-field-title">Status:</span>In library');},10);}},gameValueChanged:function(dataObj){var self=this;var valueName=dataObj.valueName;var valueValue=dataObj.valueValue;switch(valueName){case"played":var timesString=(valueValue==1)?"time":"times";$(self.domRootEl).find(".mgr-gi-played p").html('<span class="mgr-g-field-title">Played:</span>'+valueValue+' '+timesString);break;case"numComments":if(self.infoPanel){self.infoPanel.updateNumComments({commentNum:self.game.numComments});}
break;}},createHTML:function(){var self=this;if(self.type=="shop"||self.game.isFriendGame){var insertHTML='<div key="'+self.key+'" dragType="game" class="mgr-g-item mgr-g-item-'+self.game.cssClass+'">';insertHTML+='<div class="mgr-g-item-inner">';insertHTML+='<div class="image-holder"><div><img src="assets/ui/empty-image.gif" alt="" /></div><span></span></div>';insertHTML+='<ul>';insertHTML+='<li class="mgr-gi-first mgr-gi-name mgr-gi-38">';insertHTML+='<p>'+AJKHelpers.clipToMaxCharWords({aString:self.game.name,maxChars:40})+'</p>';insertHTML+='</li>';insertHTML+='<li class="mgr-gi-20">';insertHTML+='<p><span class="mgr-g-field-title">Author:</span>'+self.game.author+'</p>';insertHTML+='</li>';insertHTML+='<li class="mgr-gi-10">';insertHTML+='<p><span class="mgr-g-field-title">Genre:</span>'+self.game.categories.split(",")[0]+'</p>';insertHTML+='</li>';insertHTML+='<li class="mgr-gi-10 mgr-gi-rating">';insertHTML+='<p><span class="mgr-g-field-title">Rating:</span>'+self.game.recommendation+'</p>';insertHTML+='</li>';insertHTML+='<li class="mgr-gi-last mgr-gi-10 mgr-gi-add">';if(anAJKLibraryController.gamesByKey[self.game.id]){insertHTML+='<p><span class="mgr-g-field-title">Status:</span>In library</p>';}
else{insertHTML+='<p><span class="mgr-g-field-title">Status:</span>Add to library<a href="#" class="mgr-gi-select mgr-gi-select-add">x</a></p>';}
insertHTML+='</li>';insertHTML+='</ul>';insertHTML+='<div class="mgr-gi-thumbnail-options">';insertHTML+='<a option="more-info" class="mgr-gi-t-option" href="#">More info</a><a class="mgr-gi-t-option last" href="#" option="play">Play</a>';insertHTML+='<div class="clear"></div>';insertHTML+='</div>';insertHTML+='</div>';}
else{var insertHTML='<div key="'+self.key+'" class="mgr-g-item mgr-g-item-'+self.game.cssClass+'">';insertHTML+='<div class="mgr-g-item-inner">';insertHTML+='<div class="image-holder"><div><img src="assets/ui/empty-image.gif" alt="" /></div><span></span></div>';insertHTML+='<ul>';insertHTML+='<li class="mgr-gi-first mgr-gi-name mgr-gi-38">';insertHTML+='<p>'+AJKHelpers.clipToMaxCharWords({aString:self.game.name,maxChars:40})+'</p>';insertHTML+='</li>';insertHTML+='<li class="mgr-gi-20">';insertHTML+='<p><span class="mgr-g-field-title">Author:</span>'+self.game.author+'</p>';insertHTML+='</li>';insertHTML+='<li class="mgr-gi-10">';insertHTML+='<p><span class="mgr-g-field-title">Genre:</span>'+self.game.categories.split(",")[0]+'</p>';insertHTML+='</li>';insertHTML+='<li class="mgr-gi-10 mgr-gi-played">';var timesString=(self.game.played==1)?"time":"times";insertHTML+='<p><span class="mgr-g-field-title">Played:</span>'+self.game.played+' '+timesString+'</p>';insertHTML+='<li class="mgr-gi-last mgr-gi-10 mgr-gi-rating">';insertHTML+='<p><span class="mgr-g-field-title">Rating:</span>'+self.game.recommendation+'/5</p>';insertHTML+='</li>';insertHTML+='</ul>';insertHTML+='<div class="mgr-gi-thumbnail-options">';insertHTML+='<a option="more-info" class="mgr-gi-t-option" href="#">More info</a><a class="mgr-gi-t-option last" href="#" option="play">Play</a>';insertHTML+='</div>';insertHTML+='<div class="clear"></div>';insertHTML+='</div>';insertHTML+='</div>';}
return $(insertHTML).get()[0];},getDomRootEl:function(){var self=this;return self.domRootEl;},setContainerBlock:function(dataObj){var self=this;self.containerBlock=dataObj.block;},toggleInfoPanel:function(){var self=this;if(!self.infoPanel){self.infoPanel=new AJKTableEntryInfoPanel({game:self.game,entry:self,domBeforeEl:self.domRootEl,height:self.controller.infoPanelHeight}).init();}
if(self.infoPanel.isOpen){self.containerBlock.itemHasClosed();self.infoPanel.hidePanel({callback:function(){$(self.domRootEl).removeClass("mgr-g-item-open");}});}
else{self.containerBlock.itemHasOpened();$(self.domRootEl).addClass("mgr-g-item-open");self.infoPanel.showPanel();}},forceOpenInfoPanel:function(){var self=this;self.infoPanel.forceOpen();},kill:function(){var self=this;self.containerBlock.removeEntry({entry:self});$(self.domRootEl).remove();self.domRootEl="";if(self.infoPanel){self.infoPanel.kill();}}}
var AJKTableEntryInfoPanel=function(dataObj){this.game=dataObj.game;this.entry=dataObj.entry;this.domBeforeEl=dataObj.domBeforeEl;this.height=dataObj.height;this.domRootEl="";this.domObscurer="";this.isOpen=false;this.panelContentLoaded=false;this.type=dataObj.type;return this;}
AJKTableEntryInfoPanel.prototype={init:function(){var self=this;self.domRootEl=$('<div class="mgr-g-info-panel mgr-g-info-panel-'+self.game.cssClass+'"></div>').get()[0];self.domObscurer=$('<div class="mgr-g-info-obscurer"></div>').get()[0];$(self.domRootEl).append(self.domObscurer);return self;},kill:function(){var self=this;if(self.isOpen){$(self.domRootEl).remove();self.domRootEl="";}},generateHTML:function(){var self=this;var insertHTML='<div class="mgr-g-info-shadow">';insertHTML+='<div class="mgr-g-info-inner">';insertHTML+='<div class="mgr-g-info-image-block">';insertHTML+='<h4>Rating</h4>';insertHTML+='<div class="mgr-g-info-details">';insertHTML+='<h4>'+self.game.recommendation+'</h4>';insertHTML+='</div>';insertHTML+='<div class="img-holder">';insertHTML+='<img src="'+self.game.extraData.thumbnail_url+'" />';insertHTML+='<div class="img-mask"></div>';insertHTML+='</div>';insertHTML+='</div>';insertHTML+='<div class="mgr-g-info-content">';insertHTML+='<div class="mgr-g-info-content-inner">';insertHTML+='<h4>Brief description</h4>';insertHTML+='<p>'+AJKHelpers.clipToMaxCharWords({aString:self.game.extraData.description,maxChars:200})+'</p>';insertHTML+='<h4>Instructions</h4>';insertHTML+='<p>'+AJKHelpers.clipToMaxCharWords({aString:self.game.extraData.instructions,maxChars:200})+'</p>';insertHTML+='</div>';insertHTML+='<a class="mgr-g-info-button rt-button-1" gameKey="'+self.game.id+'" option="play" href="#">Play now</a>';insertHTML+='<a class="mgr-g-info-button rt-button-3" entryKey="'+self.entry.key+'" option="close" href="#">Close</a>';insertHTML+='<a class="mgr-g-info-button rt-button-3" gameKey="'+self.game.id+'" option="more-info" href="#">More info</a>';insertHTML+='<a class="gi-comment-button mgr-g-info-button rt-button-3 rt-button-3-medium" gameKey="'+self.game.id+'" option="comments" href="#">Comments ('+self.game.numComments+')</a>';insertHTML+='</div>';insertHTML+='</div>';insertHTML+='</div>';return insertHTML;},updateNumComments:function(dataObj){var self=this;var commentNum=dataObj.commentNum;if(self.domRootEl){$(self.domRootEl).find(".gi-comment-button").text('Comments ('+commentNum+')');}},showPanel:function(){var self=this;self.isOpen=true;if(!self.panelContentLoaded){panelContentLoaded=true;self.game.getDataForInfoPanel({callback:function(){$(self.domRootEl).prepend(self.generateHTML());$(self.domObscurer).animate({opacity:0},500,function(){$(this).remove();});}});}
$(self.domRootEl).insertAfter(self.domBeforeEl).stop().animate({height:self.height},500,function(){self.entry.controller.updateControls();});},hidePanel:function(dataObj){var self=this;self.isOpen=false;var callback=dataObj.callback;var fade=dataObj.fade;var changes=(fade)?{height:0,opacity:0}:{height:0};$(self.domRootEl).stop().animate(changes,500,function(){$(self.domRootEl).remove();self.entry.controller.updateControls();if(callback){callback();}})},forceOpen:function(){var self=this;self.isOpen=true;$(self.domRootEl).insertAfter(self.domBeforeEl).css({height:self.height});}}
var AJKTableBlock=function(dataObj){this.domRootEl="";this.domStage="";this.height="";this.entries=new Array();this.numEntries=0;this.entryHeight="";this.isContentDisplayed=false;this.controller=dataObj.controller;this.numOpenItems=0;this.searchHiddenItems=0;this.numOpenItemsSearchHidden=0;this.index=dataObj.index;this.allEntriesThumbsLoaded=false;return this;}
AJKTableBlock.prototype={init:function(){var self=this;self.domRootEl=$('<div class="mgr-table-block"><div class="clear"></div></div>').get()[0];self.domStage=$('<div></div>').get()[0];return this;},addEntry:function(dataObj){var self=this;var entry=dataObj.entry;entry.setContainerBlock({block:self});self.entries.push(entry);$(self.domStage).append(entry.getDomRootEl());self.numEntries++;if(entry.infoPanel&&entry.infoPanel.isOpen){entry.forceOpenInfoPanel();self.numOpenItems++;}},refreshHeight:function(dataObj){var self=this;var setAutoHeightIfDisplayed=(dataObj)?dataObj.setAutoHeightIfDisplayed:"";if(self.controller.tableMode=="list"){self.height=(self.controller.entriesHeight*(self.numEntries-self.searchHiddenItems)+(self.numOpenItems-self.numOpenItemsSearchHidden)*self.controller.infoPanelHeight);}
else{var numVisibleItems=self.numEntries-self.searchHiddenItems;var rollOver=(numVisibleItems%5)?1:0;self.height=(self.controller.thumbHeight*(parseInt(numVisibleItems/5)+rollOver));}
if(setAutoHeightIfDisplayed&&self.isContentDisplayed){$(self.domRootEl).css({height:"auto"});}
else{$(self.domRootEl).css({height:self.height});}},displayBlockContent:function(){var self=this;if(!self.isContentDisplayed){$(self.domRootEl).prepend(self.domStage);$(self.domRootEl).css({height:"auto"});self.isContentDisplayed=true;if(self.controller.tableMode=="thumb"){self.loadEntryThumbnails();}}},loadEntryThumbnails:function(){var self=this;if(!self.allEntriesThumbsLoaded){var counter=0;var entriesCounter=0;var loadArray=new Array();while(counter<5&&self.entries[entriesCounter]){if(!self.entries[entriesCounter].imageLoaded){loadArray.push(self.entries[entriesCounter]);counter++;}
entriesCounter++;}
if(counter<5){self.allEntriesThumbsLoaded=true;}
setTimeout(function(){if(self.isContentDisplayed){$.each(loadArray,function(){this.loadThumbnail();});if(!self.allEntriesThumbsLoaded){self.loadEntryThumbnails();}}},200);}},removeBlockContent:function(){var self=this;if(self.isContentDisplayed){self.refreshHeight();$(self.domStage).remove();self.isContentDisplayed=false;}},itemHasClosed:function(){var self=this;self.numOpenItems--;self.height-=self.controller.infoPanelHeight;},itemHasOpened:function(){var self=this;self.numOpenItems++;self.height+=self.controller.infoPanelHeight;},entryWasSearchShown:function(dataObj){var self=this;var entryInfoPanelOpen=dataObj.entryInfoPanelOpen;self.searchHiddenItems--;self.height+=self.controller.entriesHeight;if(entryInfoPanelOpen){self.numOpenItemsSearchHidden--;}},entryWasSearchHidden:function(dataObj){var self=this;var entryInfoPanelOpen=dataObj.entryInfoPanelOpen;self.searchHiddenItems++;self.height-=self.controller.entriesHeight;if(entryInfoPanelOpen){self.numOpenItemsSearchHidden++;}},removeEntry:function(dataObj){var self=this;var entry=dataObj.entry;self.entries=AJKHelpers.removeItemFromArray({item:entry,anArray:self.entries});self.numEntries--;if(entry.infoPanel&&entry.infoPanel.isOpen){self.itemHasClosed();}}}
var AJKTableSortController=function(dataObj){this.domSortEls=dataObj.domSortEls;this.sortFunc=dataObj.sortFunc;this.sortHierarchy=new Array();this.numSortOptions=this.domSortEls.length;this.defaultSort=dataObj.defaultSort;return this;}
AJKTableSortController.prototype={init:function(){var self=this;if(self.defaultSort){self.sortHierarchy.push({field:self.defaultSort.field,order:(self.defaultSort.order=="ASC")?1:-1,domEl:"",type:"date"});}
$(self.domSortEls).each(function(){var field=$(this).attr("sortField");var order=$(this).attr("sortOrder");var type=$(this).attr("sortType");var sortObj={field:field,order:(order=="ASC")?1:-1,domEl:this,type:type}
self.sortHierarchy.push(sortObj)
$(this).click(function(){if(self.sortHierarchy[0]==sortObj){sortObj.order=-sortObj.order;if(sortObj.order==-1){$(this).addClass("rt-lh-sort-desc");}
else{$(this).removeClass("rt-lh-sort-desc");}}
else{$(self.sortHierarchy[0].domEl).removeClass("rt-lh-sort-selected");$(sortObj.domEl).addClass("rt-lh-sort-selected");var newHierarchy=new Array();newHierarchy.push(sortObj);$.each(self.sortHierarchy,function(){if(this!=sortObj){newHierarchy.push(this);}});self.sortHierarchy=newHierarchy;}
self.sortFunc({sortHierarchy:self.sortHierarchy});return false;});});return self;}}
var AJKMainCarouselController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.domCarouselStage=$(this.domRootEl).find(".rt-main-carousel-stage").get()[0];this.domFooterCarousel=$("#rt-footer-carousel").get()[0];this.domFooterCarouselStage=$(this.domFooterCarousel).find(".rt-footer-carousel-stage").get()[0];this.footerCarouselHeight=$(this.domFooterCarousel).height();this.domItems=$(this.domRootEl).find(".rt-content").get();this.domFooterItems=$(this.domFooterCarouselStage).find(".rt-footer-carousel-item").get();this.numItems=this.domItems.length;this.currentItem=0;this.images=new Array();this.dimensions={width:$(this.domRootEl).width(),height:0}
this.panelVisibility=new Array();this.itemControllers=new Array();return this;}
AJKMainCarouselController.prototype={init:function(){var self=this;var counter=0;$.each(self.domItems,function(){self.panelVisibility[counter++]=1;});self.windowDidResize({newSize:AJKHelpers.viewportSize()});$(self.domCarouselStage).css({width:((self.numItems+1)*self.dimensions.width)});$(self.domItems).each(function(){$(this).css({width:self.dimensions.width});if($(this).find(".rt-content-main-image").length>0){self.images.push(new AJKMainCarouselImage({domRootEl:this,displaySize:self.dimensions,carouselObj:self}).init());}});theAJKWindowResizeEvent.registerAsObserver({observer:self});$(".rt-main-carousel-button").click(function(){var newPos=parseInt($(this).attr("href"));self.animateTo({pos:newPos});return false;});return self;},hideItem:function(dataObj){var self=this;var position=dataObj.position;$(self.domItems[position]).css({display:"none"});$(self.domFooterItems[position]).css({display:"none"});self.panelVisibility[position]=0;},showItem:function(dataObj){var self=this;var position=dataObj.position;$(self.domItems[position]).css({display:"block"});$(self.domFooterItems[position]).css({display:"block"});self.panelVisibility[position]=1;},getLeftVisiblesForPosition:function(dataObj){var self=this;var position=dataObj.position;var adjustedPos=0;for(var counter=0;counter<position;counter++){adjustedPos+=self.panelVisibility[counter];}
return adjustedPos;},animateTo:function(dataObj){var self=this;var toPos=dataObj.pos;var prevPos=self.currentItem;var callback=dataObj.callback;var instantly=dataObj.instantly;var duration=(instantly)?0:500;if(prevPos==toPos){if(callback){callback();}
return;}
if(toPos==0){window.location.hash="/home/";}
if(!self.panelVisibility[toPos]){if(self.currentItem>toPos){self.showItem({position:toPos});var adjustedLeftPos=self.getLeftVisiblesForPosition({position:self.currentItem});$(self.domCarouselStage).css({left:-(adjustedLeftPos*self.dimensions.width)});$(self.domFooterCarouselStage).css({top:-(adjustedLeftPos*self.footerCarouselHeight)});}
else{self.showItem({position:toPos});}}
self.informControllersOfAnimateStart({prevPos:prevPos,toPos:toPos});self.currentItem=toPos;var adjustedPos=self.getLeftVisiblesForPosition({position:self.currentItem});$(self.domCarouselStage).animate({left:-(adjustedPos*self.dimensions.width)},duration,function(){if(callback){callback();}
setTimeout(function(){self.informControllersOfAnimateEnd({prevPos:prevPos,toPos:toPos});self.hideItem({position:prevPos});if(prevPos<toPos){$(self.domCarouselStage).css({left:-((adjustedPos-1)*self.dimensions.width)});$(self.domFooterCarouselStage).css({top:-((adjustedPos-1)*self.footerCarouselHeight)});}});});$(self.domFooterCarouselStage).animate({top:-(adjustedPos*self.footerCarouselHeight)},duration,function(){if(prevPos<toPos){}});},windowDidResize:function(dataObj){var self=this;var newSize=dataObj.newSize;self.dimensions={width:$(self.domRootEl).width(),height:newSize.height-120}
$(self.domRootEl).css({height:self.dimensions.height});var adjustedPos=self.getLeftVisiblesForPosition({position:self.currentItem});$(self.domCarouselStage).css({left:-(adjustedPos*self.dimensions.width),width:(self.numItems+1)*self.dimensions.width,height:self.dimensions.height});$(self.domItems).each(function(){$(this).css({width:self.dimensions.width,height:self.dimensions.height});});$.each(self.images,function(){this.resizeTo({size:self.dimensions});});self.informControllersOfResize();},registerAsControllerOfItem:function(dataObj){var self=this;var controller=dataObj.controller;var position=dataObj.position;self.itemControllers[position]=controller;},informControllersOfResize:function(dataObj){var self=this;$.each(self.itemControllers,function(){if(this.carouselDidResize){this.carouselDidResize({newSize:self.dimensions});}});},informControllersOfAnimateStart:function(dataObj){var self=this;var prevPos=dataObj.prevPos;var toPos=dataObj.toPos;if(self.itemControllers[prevPos]&&self.itemControllers[prevPos].itemWillScrollOutOfView){self.itemControllers[prevPos].itemWillScrollOutOfView();}
if(self.itemControllers[toPos]&&self.itemControllers[toPos].itemWillScrollIntoView){self.itemControllers[toPos].itemWillScrollIntoView();}},informControllersOfAnimateEnd:function(dataObj){var self=this;var prevPos=dataObj.prevPos;var toPos=dataObj.toPos;if(self.itemControllers[prevPos]&&self.itemControllers[prevPos].itemDidScrollOutOfView){self.itemControllers[prevPos].itemDidScrollOutOfView();}
if(self.itemControllers[toPos]&&self.itemControllers[toPos].itemDidScrollIntoView){self.itemControllers[toPos].itemDidScrollIntoView();}}}
var AJKMainCarouselImage=function(dataObj){this.displaySize=dataObj.displaySize;this.domRootEl=dataObj.domRootEl;this.domHolder=$(this.domRootEl).find(".rt-content-main-image-holder").get()[0];this.domImage=$(this.domHolder).find(".rt-content-main-image").get()[0];this.size={width:0,height:0}
this.adjustedDimensions={width:0,height:0,xOffset:0,yOffset:0}
this.loaded=false;this.carouselObj=dataObj.carouselObj;this.imageLoadedFunc;return this;}
AJKMainCarouselImage.prototype={init:function(){var self=this;self.carouselObj.registerAsControllerOfItem({controller:self,position:0});$(self.domHolder).css({width:self.displaySize.width,height:self.displaySize.height});self.imageLoadedFunc=function(){self.size={width:$(this).width(),height:$(this).height()}
self.fitInBoxOfSize({boxSize:{width:self.displaySize.width,height:self.displaySize.height}});$(this).animate({opacity:1},1000,function(){});self.loaded=true;}
if(this.domImage.complete){setTimeout(function(){self.imageLoadedFunc.apply(self.domImage);},1);}
else{$(this.domImage).load(function(){self.imageLoadedFunc.apply(this);});}
return self;},itemWillScrollIntoView:function(){var self=this;self.imageLoadedFunc.apply(self.domImage);},fitInBoxOfSize:function(dataObj){var boxSize=dataObj.boxSize;if(this.size.width/this.size.height>boxSize.width/boxSize.height){this.adjustedDimensions.height=boxSize.height;this.adjustedDimensions.width=Math.round(this.adjustedDimensions.height/this.size.height*this.size.width);this.adjustedDimensions.xOffset=-Math.round((this.adjustedDimensions.width-boxSize.width)/2);this.adjustedDimensions.yOffset=0;}
else{this.adjustedDimensions.width=boxSize.width;this.adjustedDimensions.height=Math.round(this.adjustedDimensions.width/this.size.width*this.size.height);this.adjustedDimensions.yOffset=-Math.round((this.adjustedDimensions.height-boxSize.height)/2);this.adjustedDimensions.xOffset=0;}
$(this.domImage).css({width:this.adjustedDimensions.width+"px",height:this.adjustedDimensions.height+"px",left:this.adjustedDimensions.xOffset+"px",top:this.adjustedDimensions.yOffset+"px"});},removeFromDom:function(){var self=this;$(self.domHolder).remove();},resizeTo:function(dataObj){var self=this;self.displaySize=dataObj.size;self.fitInBoxOfSize({boxSize:self.displaySize});$(self.html).css({width:self.displaySize.width,height:self.displaySize.height});}}
var AJKMainPanelController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.domStage=$(this.domRootEl).find(".rt-mp-carousel-stage").get()[0];this.domPanels=$(this.domRootEl).find(".rt-mp-carousel-item").get();this.domSignUpPanel=$(this.domRootEl).find(".rt-mp-sign-up-panel").get()[0];this.domLoginPanel=$(this.domRootEl).find(".rt-mp-login-panel").get()[0];this.domCongratsPanel=$(this.domRootEl).find(".rt-mp-congratulations").get()[0];this.domRecoverPanel=$(this.domRootEl).find(".rt-mp-recover-detail").get()[0];this.domLogoutPanel=$(this.domRootEl).find(".rt-mp-logout").get()[0];this.panelHeight=$(this.domPanels[0]).height();this.panelHeightEms=15;this.currentPanel=0;this.loginVerification="";this.signupVerification="";this.recoverVerification="";return this;}
AJKMainPanelController.prototype={init:function(){var self=this;$(self.domRootEl).click(function(){return false;});$(self.domRootEl).find(".rt-mp-carousel-button").click(function(){self.animateTo({pos:parseInt($(this).attr("href"))});return false;});self.initialisePanelFunctionality();self.hideAllPanelsButCurrent();return self;},initialisePanelFunctionality:function(){var self=this;self.signupVerification=new AJKVerifier({domRootEl:self.domSignUpPanel,submitFunc:function(dataObj){theAJKAjaxController.request({action:"assets/ajax/create-user.php",method:"post",alwaysAllow:true,vars:dataObj.fieldData,callback:function(queryResult){var result=AJKHelpers.decipherQueryResult({queryResult:queryResult,section:"message"});if(result!="email-taken"&&result!="username-taken"){var resultArray=result.split(anAJKLibraryController.fieldSeperator);var newUserId=resultArray[0];var verifyCode=resultArray[1];var username=dataObj.fieldData.username;self.animateTo({pos:3,callback:function(){$(self.domCongratsPanel).find(".rt-mp-c-yes").unbind("click").click(function(){anAJKLibraryController.addDefaultGamesToUserAndLogin({userId:newUserId,username:username,verifyCode:verifyCode});setTimeout(function(){self.reset();},600);return false;});$(self.domCongratsPanel).find(".rt-mp-c-no").unbind("click").click(function(){anAJKLibraryController.logUserIn({id:newUserId,username:username,verifyCode:verifyCode});setTimeout(function(){self.reset();},600);return false;});}});}
else if(result=="username-taken"){self.signupVerification.errorHighlightField({fieldName:"username"});self.signupVerification.displayErrorMessage({message:"Username has already been taken"});}
else if(result=="email-taken"){self.signupVerification.errorHighlightField({fieldName:"email"});self.signupVerification.displayErrorMessage({message:"Email has already been taken"});}}});}}).init();self.loginVerification=new AJKVerifier({domRootEl:self.domLoginPanel,submitFunc:function(dataObj){theAJKAjaxController.request({action:"assets/ajax/login.php",method:"post",alwaysAllow:true,vars:dataObj.fieldData,callback:function(queryResult){var result=AJKHelpers.decipherQueryResult({queryResult:queryResult,section:"message"});if(result!="username-error"&&result!="password-error"){result=result.split(anAJKLibraryController.fieldSeperator);anAJKLibraryController.logUserIn({id:result[0],verifyCode:result[1],numGames:parseInt(result[2]),username:dataObj.fieldData.username});setTimeout(function(){self.reset();},600);}
else if(result=="username-error"){self.loginVerification.errorHighlightField({fieldName:"username"});self.loginVerification.displayErrorMessage({message:"Wrong username"});}
else if(result=="password-error"){self.loginVerification.errorHighlightField({fieldName:"password"});self.loginVerification.displayErrorMessage({message:"Wrong password"});}}});}}).init();$(self.domRecoverPanel).each(function(){var domRecoverUsernameCheckbox=$(self.domRecoverPanel).find(".username-checkbox").get()[0];var domRecoverPasswordCheckbox=$(self.domRecoverPanel).find(".password-checkbox").get()[0];var domSubmittingMessage=$(self.domRecoverPanel).find(".ajk-verifier-submitting-message").get()[0];var origSubmittingMessage=$(domSubmittingMessage).text();var domBackButton=$(self.domRecoverPanel).find(".rt-mp-small-button").get()[0];var submitting=false;$(domBackButton).click(function(){$(domSubmittingMessage).css({display:"none"}).text(origSubmittingMessage);});self.recoverVerification=new AJKVerifier({domRootEl:self.domRecoverPanel,submitFunc:function(dataObj){if(submitting){return;}
submitting=true;$(domSubmittingMessage).text(origSubmittingMessage).css({display:"block"});theAJKAjaxController.request({action:"assets/ajax/recover-password-username.php",method:"post",alwaysAllow:true,vars:dataObj.fieldData,callback:function(queryResult){var result=AJKHelpers.decipherQueryResult({queryResult:queryResult,section:"message"});if(result=="success"){$(domSubmittingMessage).text("An email will arrive shortly.");}
else{$(domSubmittingMessage).text("Email not found. Please try again.");}
submitting=false;}});}}).init();$(domRecoverPasswordCheckbox).click();var cancelForwardClick=false;$(domRecoverPasswordCheckbox).click(function(){if(!cancelForwardClick){cancelForwardClick=true;$(domRecoverUsernameCheckbox).click();}
else{cancelForwardClick=false;}});$(domRecoverUsernameCheckbox).click(function(){if(!cancelForwardClick){cancelForwardClick=true;$(domRecoverPasswordCheckbox).click();}
else{cancelForwardClick=false;}});});$(self.domLogoutPanel).each(function(){$(this).find(".rt-mp-c-my-games").click(function(){anAJKMainCarouselController.animateTo({pos:1});return false;});$(this).find(".rt-mp-c-logout").click(function(){anAJKLibraryController.topLoginController.signOut();return false;});});},reset:function(){var self=this;self.loginVerification.clearFields();self.signupVerification.clearFields();},hideAllPanelsButCurrent:function(){var self=this;var counter=0;$.each(self.domPanels,function(){if(counter++!=self.currentPanel){$(this).css({display:"none"});}});},animateTo:function(dataObj){var self=this;var newPos=dataObj.pos;var callback=dataObj.callback;var instantly=(dataObj.instantly);var duration=(instantly)?0:500;self.panelHeight=$(self.domPanels[self.currentPanel]).height();var stageOffset=0;if(newPos>self.currentPanel){stageOffset=-self.panelHeight;}
else if(newPos<self.currentPanel){$(self.domStage).css({marginTop:-self.panelHeight});}
else{return;}
$(self.domPanels[newPos]).css({display:"block"});$(self.domStage).animate({marginTop:stageOffset},duration,function(){$(self.domPanels[self.currentPanel]).css({display:"none"});$(this).css({marginTop:0});self.currentPanel=newPos;if(callback){callback();}});}}
var AJKLibraryController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.domTableStage=$(self.domRootEl).find(".mgr-games-holder").get()[0];this.objTableController="";this.flashGameController="";this.allGames=new Array();this.gamesByKey=new Array();this.domTablePrototype="";this.tableControllers=new Array();this.tableControllersByKey=new Array();this.selectedTable="";this.domButtons="";this.shopController="";this.faderController="";this.numDefaultGames=AJKGameManagerInitialValues.numDefaultGames;this.recordSeperator="|!*;";this.fieldSeperator=";*!|";this.blockSeperator=";!*|";this.playListController="";this.topLoginController="";this.gameInfoController="";this.user={id:0,username:"anonymous",numGames:0,loggedIn:false}
this.userCookieName="AJKUser";this.genericContentController="";this.deleteController="";this.domFriendTablePrototype="";this.libraryPageVisible=false;this.statusBarController="";this.tableViewMode="thumb";return this;}
AJKLibraryController.prototype={init:function(){var self=this;theAJKAjaxController.loginController=self;anAJKMainCarouselController.registerAsControllerOfItem({controller:self,position:1});self.statusBarController=new AJKStatusBarController({domRootEl:$("#mgr-library-status-bar").get()[0],controller:self}).init();new AJKPopupCreatePlaylistController({domRootEl:$("#mgr-button-popup-create-playlist").get()[0],controller:self,buttonPopupId:"mgr-button-popup-create-playlist"}).init();new AJKAddFriendPanelController({domRootEl:$("#mgr-button-popup-add-friend").get()[0],controller:self.playListController,closeFunc:function(){$(theAJKButtonPopupController.buttonPopupsByKey["mgr-button-popup-add-friend"].domCloseButtons[0]).click();},carouselHeight:150,buttonPopupId:"mgr-button-popup-add-friend",inviteFriendFunc:function(dataObj){self.playListController.playListsByKey["friends"].inviteFriendForUser(dataObj);},submitFriendFunc:function(dataObj){var playlistMenu=self.playListController.playListsByKey["friends"];playlistMenu.createFriendForUser(dataObj);}}).init();self.deleteController=new AJKDeleteController({domRootEl:$(self.domRootEl).find(".mgr-main-bin:eq(0)").get()[0],controller:self}).init();self.genericContentController=new AJKGenericContentController({domCarouselPanel:$("#mgr-generic-content-panel").get()[0],domButtons:$(".mgr-generic-content-button").get(),carouselPanelPosition:4,domBackButton:$("#mgr-generic-content-back-button").get()[0]}).init();self.topLoginController=new AJKTopLoginController({domRootEl:$("#rt-header-login").get()[0]}).init();self.playListController=new AJKPlayListController({domPlayLists:$(self.domRootEl).find(".mgr-list").get(),containerHeight:anAJKMainCarouselController.dimensions.height}).init();self.shopController=new AJKShopLibraryController({domRootEl:$("#mgr-store-container").get()[0],controller:self}).init();self.faderController=new AJKContentFaderController({domRootEl:$(self.domRootEl).parent().find(".rt-content-fader").get()[0]}).init();var buttonBlocks=$("#rt-footer-carousel").find(".rt-footer-carousel-item");self.flashGameController=new AJKFlashGameController({domRootEl:$("#mgr-flash-holder").get()[0],domButtons:$(buttonBlocks[5]).find("a").get()}).init();self.gameInfoController=new AJKGameInfoController({domRootEl:$("#mgr-game-info-page").get()[0],domButtons:$(buttonBlocks[3]).find("a").get(),controller:self}).init();anAJKMainCarouselController.hideItem({position:1});anAJKMainCarouselController.hideItem({position:2});anAJKMainCarouselController.hideItem({position:3});anAJKMainCarouselController.hideItem({position:4});anAJKMainCarouselController.hideItem({position:5});self.domButtons=$(buttonBlocks[1]).find("a").get();$(self.domButtons).click(function(){var action=$(this).attr("href");switch(action){default:break;}
return false;});self.domTablePrototype=$(self.domRootEl).find(".mgr-table:eq(0)").get()[0];$(self.domTablePrototype).remove();self.domFriendTablePrototype=$(".mgr-table-shop").clone().get()[0];var homePage=true;if(window.location.hash&&window.location.hash.toString().indexOf("home")==-1){homePage=false;self.urlHasChanged({newUrl:window.location.hash});}
theBookmarkController.urlChangedFunc=function(dataObj){self.urlHasChanged(dataObj);}
if(self.getUserCookie()&&self.user.verifyCode){self.user.loggedIn=true;if(self.user.username!="demoaccount"){self.topLoginController.showSignOutDetailsForUser({username:self.user.username});if(homePage){anAJKMainCarouselController.animateTo({pos:1,instantly:true,callback:function(){self.initialiseNewlyLoggedInUser();self.showSignOutPanel();}});}
else{self.initialiseNewlyLoggedInUser();self.showSignOutPanel();}}
else{anAJKMainCarouselController.showItem({position:1});self.initialiseNewlyLoggedInUser();if(anAJKMainCarouselController.currentItem!=1){anAJKMainCarouselController.hideItem({position:1});}}}
else{self.loginDemoAccount();}
return self;},loginDemoAccount:function(){var self=this;theAJKAjaxController.request({action:"assets/ajax/login.php",method:"post",alwaysAllow:true,vars:{username:"demoaccount",password:"123456"},callback:function(queryResult){var result=AJKHelpers.decipherQueryResult({queryResult:queryResult,section:"message"});result=result.split(anAJKLibraryController.fieldSeperator);anAJKLibraryController.logUserIn({id:result[0],verifyCode:result[1],numGames:parseInt(result[2]),username:"demoaccount"});anAJKMainCarouselController.showItem({position:1});self.initialiseNewlyLoggedInUser();if(anAJKMainCarouselController.currentItem!=1){anAJKMainCarouselController.hideItem({position:1});}}});},urlHasChanged:function(dataObj){var self=this;var newUrl=dataObj.newUrl;var changedBy=dataObj.changedBy;if(!changedBy||changedBy!="back-button"){var parseData=newUrl.split("/")[1];if(!parseData){return;}
if(parseData.indexOf("library")!=-1){anAJKMainCarouselController.animateTo({pos:1,instantly:true});}
else if(parseData.indexOf("home")!=-1){anAJKMainCarouselController.animateTo({pos:0,instantly:true});}
else if(parseData.indexOf("game-info")!=-1){var gameId=parseData.split(":")[1];if(self.gamesByKey[gameId]){self.showGameInfo({game:self.gamesByKey[gameId],instantly:true});}
else{anAJKMainCarouselController.animateTo({pos:3,instantly:true});self.loadGameFromId({gameId:gameId,faderController:"",callback:function(dataObj){var game=dataObj.game;self.showGameInfo({game:game,instantly:true});}});}}
else if(parseData.indexOf("game-play")!=-1){var gameId=parseData.split(":")[1];if(self.gamesByKey[gameId]){self.loadGame({game:self.gamesByKey[gameId],instantly:true});}
else{anAJKMainCarouselController.animateTo({pos:5,instantly:true});self.loadGameFromId({gameId:gameId,faderController:"",callback:function(dataObj){var game=dataObj.game;self.loadGame({game:game,instantly:true});}});}}}},loadGameFromId:function(dataObj){var self=this;var gameId=dataObj.gameId;var fader=dataObj.faderController;var callback=dataObj.callback;var gameLoader=new AJKLibraryLoader({fader:fader,inBatchesOf:1,controller:self,numGames:1,ajaxLoadGames:{url:"assets/ajax/load-game-from-id.php",variables:{gameId:gameId}},loadedCallback:function(dataObj){var game=dataObj.games[0];callback({game:game});}}).init();},carouselDidResize:function(dataObj){var self=this;if(self.libraryPageVisible){var newSize=dataObj.newSize;$.each(self.tableControllers,function(){this.updateSize({newContainerHeight:newSize.height});});self.playListController.updateContainerSize({newContainerHeight:newSize.height});}},itemWillScrollIntoView:function(){var self=this;self.libraryPageVisible=true;self.carouselDidResize({newSize:anAJKMainCarouselController.dimensions});theBookmarkController.setUrlTo({url:"library"});},itemDidScrollIntoView:function(){var self=this;if(self.selectedTable){self.selectedTable.enableControls();}},itemWillScrollOutOfView:function(){var self=this;if(self.selectedTable){self.selectedTable.disableControls();}
self.libraryPageVisible=false;},createTables:function(){var self=this;$(self.domRootEl).find(".mgr-list-my-games .mgr-list-item a").each(function(){var defaultSort="";var genre=$(this).attr("genre");var title=$(this).clone().find("span").remove().end().text();if(genre=="all"){var tableGames=AJKHelpers.cloneArray({anArray:self.allGames});}
else if(genre=="recently-added"){self.recentlyAddedGames=AJKHelpers.cloneArray({anArray:self.allGames});self.recentlyAddedGames=self.recentlyAddedGames.sort(function(a,b){return parseInt(b.userAdded-a.userAdded);});self.recentlyAddedGames=AJKHelpers.trimArray({anArray:self.recentlyAddedGames,limit:20});var tableGames=AJKHelpers.cloneArray({anArray:self.recentlyAddedGames});defaultSort={field:"userAdded",order:"DESC"}}
else if(genre=="recently-played"){self.recentlyPlayedGames=new Array();$.each(self.allGames,function(){if(this.played>0){self.recentlyPlayedGames.push(this);}});self.recentlyPlayedGames=self.recentlyPlayedGames.sort(function(a,b){return parseInt(b.lastPlayed-a.lastPlayed);});self.recentlyPlayedGames=AJKHelpers.trimArray({anArray:self.recentlyPlayedGames,limit:20});var tableGames=AJKHelpers.cloneArray({anArray:self.recentlyPlayedGames});defaultSort={field:"lastPlayed",order:"DESC"}}
else{var tableGames=self.filterGamesByGenre({games:AJKHelpers.cloneArray({anArray:self.allGames}),genre:genre});}
var numGames=tableGames.length;var domNumGamesDisplayer=$(this).find("span").get()[0];$(domNumGamesDisplayer).text(numGames);var aTableController=self.createTable({genre:genre,tableGames:tableGames,domShowButton:this,domNumGamesDisplayer:domNumGamesDisplayer,defaultSort:defaultSort,type:"standard",title:title});$(this).unbind("click").click(function(){self.showTable({table:aTableController});return false;});});self.showTable({table:self.tableControllersByKey["all"]});self.selectedTable=self.tableControllersByKey["all"];self.statusBarController.setRootTable({table:self.tableControllersByKey["all"]});},createTable:function(dataObj){var self=this;var genre=dataObj.genre;var tableGames=dataObj.tableGames;var domNumGamesDisplayer=dataObj.domNumGamesDisplayer;var title=dataObj.title;if(genre=="friend-list"){var aDomTable=$(self.domFriendTablePrototype).clone().get()[0];}
else{var aDomTable=$(self.domTablePrototype).clone().get()[0];}
var defaultSort=dataObj.defaultSort;var domShowButton=dataObj.domShowButton;var type=dataObj.type;if(genre=="recently-played"||genre=="recently-added"){$(aDomTable).find(".rt-lh-sort-selected").removeClass("rt-lh-sort-selected");}
$(self.domTableStage).append(aDomTable);var aTableController=new AJKTableController({domRootEl:aDomTable,delegate:self,games:tableGames,domShowButton:domShowButton,domNumGamesDisplayer:domNumGamesDisplayer,containerHeight:anAJKMainCarouselController.dimensions.height,defaultSort:defaultSort,type:type,title:title,genre:genre,controller:self,tableMode:self.tableViewMode}).init();self.tableControllers.push(aTableController);self.tableControllersByKey[genre]=aTableController;return aTableController;},showTable:function(dataObj){var self=this;var table=dataObj.table;if(table.searchTable){table=table.searchTable;}
if(self.selectedTable&&self.selectedTable!=table){self.selectedTable.hide();self.selectedTable.disableControls();$(self.selectedTable.domShowButton).removeClass("mgr-list-item-selected");}
if(self.selectedTable!=table){table.show();table.enableControls();table.updateTableDisplay();$(table.domShowButton).addClass("mgr-list-item-selected");self.selectedTable=table;if(table.genre!="search"){self.statusBarController.updateStatusFromTable({table:table});}
else{self.statusBarController.updateStatusFromTable({table:table.ownerTable});}}},filterGamesByGenre:function(dataObj){var self=this;var games=dataObj.games;var genre=dataObj.genre;var retArray=new Array();$.each(games,function(){if(this.cssClass==genre){retArray.push(this);}});return retArray;},loadDefaultGames:function(dataObj){var self=this;var callback=dataObj.callback;var defaultGameLoader=new AJKLibraryLoader({fader:self.faderController,inBatchesOf:50,controller:self,numGames:self.numDefaultGames,ajaxLoadGames:{url:"assets/ajax/load-default-games.php",variables:{}},loadedCallback:function(dataObj){var initialisedGames=dataObj.games;$.each(initialisedGames,function(){self.allGames.push(this);self.gamesByKey[this.id]=this;});self.faderController.fadeOut();if(callback){callback();}}}).init();},loadGame:function(dataObj){var self=this;var game=dataObj.game;if(game.isFriendGame&&self.gamesByKey[game.id]){game=self.gamesByKey[game.id];}
var instantly=dataObj.instantly;var urlGame=dataObj.urlGame;self.flashGameController.clearGame();self.flashGameController.prepareForGame({game:game});var returnToPos=(dataObj.returnToPos)?dataObj.returnToPos:1;anAJKMainCarouselController.animateTo({pos:5,instantly:instantly,callback:function(){game.setValue({valueName:"played",valueValue:game.played+1});game.setValue({valueName:"lastPlayed",valueValue:AJKHelpers.getNowDate()});if(self.gamesByKey[game.id]){self.tableControllersByKey["recently-played"].addEntryFromNewGame({game:game,limit:20,limitSort:{field:"lastPlayed",order:-1,type:"date"}});}
self.flashGameController.loadGame({game:game,returnToPos:returnToPos});}});theAJKAjaxController.request({action:"assets/ajax/user-played-game.php",method:"post",vars:{gameUUID:game.id},callback:function(data){}});},addGameToUserLibrary:function(dataObj){var self=this;var game=dataObj.game;if(game.isFriendGame){var aGame=new AJKGame(game).init();game=aGame;game.isFriendGame=false;game.played=0;game.lastPlayed="";}
self.allGames.push(game);self.gamesByKey[game.id]=game;self.tableControllersByKey["all"].addEntryFromNewGame({game:game});self.tableControllersByKey[game.cssClass].addEntryFromNewGame({game:game});game.setValue({valueName:"userAdded",valueValue:AJKHelpers.getNowDate()});self.tableControllersByKey["recently-added"].addEntryFromNewGame({game:game,limit:20,limitSort:{field:"userAdded",order:-1,type:"date"}});theAJKAjaxController.request({action:"assets/ajax/add-game-to-user-library.php",method:"post",vars:{gameUUID:game.id},callback:function(data){}});},addDefaultGamesToUserAndLogin:function(dataObj){var self=this;self.user.id=dataObj.userId;self.user.username=dataObj.username;self.user.verifyCode=dataObj.verifyCode;self.user.loggedIn=true;self.saveUserCookie();self.clearLibrary();self.topLoginController.showSignOutDetailsForUser({username:self.user.username});anAJKMainCarouselController.animateTo({pos:1,callback:function(){theAJKAjaxController.request({action:"assets/ajax/add-default-games-to-user-library.php",method:"post",vars:{userId:self.user.id},callback:function(data){self.initialiseNewlyLoggedInUser();self.showSignOutPanel();}});}});},initialiseNewlyLoggedInUser:function(){var self=this;self.loadUserGames({id:self.user.id,name:self.user.username,userObj:self.user});self.playListController.refreshPlaylists();self.loadUserPlayLists({userId:self.user.id});self.loadUserFriendsLists({userId:self.user.id});},logUserIn:function(dataObj){var self=this;self.user.id=dataObj.id;self.user.username=dataObj.username;self.user.numGames=dataObj.numGames;self.user.loggedIn=true;self.user.verifyCode=dataObj.verifyCode;self.saveUserCookie();self.clearLibrary();if(self.user.username!="demoaccount"){self.topLoginController.showSignOutDetailsForUser({username:self.user.username});anAJKMainCarouselController.animateTo({pos:1,callback:function(){self.initialiseNewlyLoggedInUser()
self.showSignOutPanel();}});}},logUserOut:function(dataObj){var self=this;AJKHelpers.deleteCookie({name:self.userCookieName});self.user={id:0,username:"anonymous",numGames:0,loggedIn:false}
var panelInstantly=(anAJKMainCarouselController.currentItem==0)?false:true;anAJKMainPanelController.animateTo({pos:0,instantly:panelInstantly});anAJKMainCarouselController.animateTo({pos:0,callback:function(){self.loginDemoAccount();}});},saveUserCookie:function(){var self=this;AJKHelpers.setCookie({name:self.userCookieName,value:self.user.id+self.fieldSeperator+self.user.username+self.fieldSeperator+self.user.verifyCode,expires:30});},getUserCookie:function(){var self=this;var cookieData=AJKHelpers.getCookie({name:self.userCookieName});if(cookieData){cookieDataSplit=cookieData.split(self.fieldSeperator);self.user.id=cookieDataSplit[0];self.user.username=cookieDataSplit[1];self.user.verifyCode=cookieDataSplit[2];return true;}
else{return false;}},clearLibrary:function(){var self=this;self.allGames=new Array();self.gamesByKey=new Array();$.each(self.tableControllers,function(){this.kill();});self.tableControllers=new Array();self.tableControllersByKey=new Array();self.faderController.reset();self.faderController.display();},loadUserFriendsLists:function(dataObj){var self=this;var userId=dataObj.userId;theAJKAjaxController.request({action:"assets/ajax/get-user-friend-list.php",method:"get",vars:{userId:userId},callback:function(data){self.playListController.loadPlaylistWithData({playlistName:"friends",data:data});}});},loadUserPlayLists:function(dataObj){var self=this;var userId=dataObj.userId;theAJKAjaxController.request({action:"assets/ajax/get-user-playlists.php",method:"get",vars:{userId:userId},callback:function(data){self.playListController.loadPlaylistWithData({playlistName:"play-lists",data:data});}});},loadUserGames:function(dataObj){var self=this;var username=dataObj.username;var userId=dataObj.id;var callback=dataObj.callback;var userObj=dataObj.userObj;theAJKAjaxController.request({action:"assets/ajax/get-num-user-games.php",method:"get",vars:{userId:userId},callback:function(data){var numGames=parseInt(data);if(userObj){userObj.numGames=numGames;}
var inBatchesOf=parseInt(numGames/10);inBatchesOf=(inBatchesOf<1)?1:inBatchesOf;inBatchesOf=(inBatchesOf>500)?500:inBatchesOf;var userGameLoader=new AJKLibraryLoader({fader:self.faderController,inBatchesOf:inBatchesOf,controller:self,numGames:numGames,completionPercent:100,ajaxLoadGames:{url:"assets/ajax/load-range-of-user-games.php",variables:{userId:userId}},loadedCallback:function(dataObj){var initialisedGames=dataObj.games;$.each(initialisedGames,function(){self.allGames.push(this);self.gamesByKey[this.id]=this;});self.createTables();self.faderController.fadeOut();}}).init();}});},deactivateAddGameToLibraryForAllReleventTables:function(dataObj){var self=this;var game=dataObj.game;$.each(self.tableControllers,function(){if(this.type=="friend-list"){this.deactivateAddGameToLibraryForGame({game:game});if(this.searchTable){this.searchTable.deactivateAddGameToLibraryForGame({game:game});}}});$.each(self.shopController.tableControllers,function(){this.deactivateAddGameToLibraryForGame({game:game});if(this.searchTable){this.searchTable.deactivateAddGameToLibraryForGame({game:game});}});},changeTableViewsTo:function(dataObj){var self=this;var mode=dataObj.mode;self.tableViewMode=mode;$.each(self.tableControllers,function(){this.changeTableViewTo({mode:mode});});},deleteGameFromLibrary:function(dataObj){var self=this;var game=dataObj.game;$.each(self.playListController.playListsByKey["play-lists"].playListObjects,function(){if(!this.gameArraysCreated){self.playListController.playListsByKey["play-lists"].createGameArraysForPlaylistObj({playlist:this});}
if(this.gamesByKey[game.id]){self.deleteGameFromUserPlaylist({game:game,userPlaylist:this});}});self.allGames=AJKHelpers.removeItemFromArray({item:game,anArray:self.allGames});self.gamesByKey[game.id]="";self.tableControllersByKey["all"].removeGameFromTable({game:game});self.tableControllersByKey["recently-played"].removeGameFromTable({game:game});self.tableControllersByKey["recently-added"].removeGameFromTable({game:game});self.tableControllersByKey[game.cssClass].removeGameFromTable({game:game});theAJKAjaxController.request({action:"assets/ajax/remove-game-from-user-library.php",method:"post",vars:{gameId:game.id},callback:function(data){}});},deleteGameFromUserPlaylist:function(dataObj){var self=this;var game=dataObj.game;var userPlaylist=dataObj.userPlaylist;if(!userPlaylist.gameArraysCreated){self.playListController.playListsByKey["play-lists"].createGameArraysForPlaylistObj({playlist:userPlaylist});}
userPlaylist.games=AJKHelpers.removeItemFromArray({item:game,anArray:userPlaylist.games});userPlaylist.gamesByKey[game.id]="";if(userPlaylist.tableController){userPlaylist.tableController.removeGameFromTable({game:game});}
else{$(userPlaylist.domNumber).text(userPlaylist.games.length);}
theAJKAjaxController.request({action:"assets/ajax/remove-game-from-user-playlist.php",method:"post",vars:{playlistId:userPlaylist.id,gameId:game.id},callback:function(data){}});},deleteUserPlaylist:function(dataObj){var self=this;var playlist=dataObj.playlist;var playlistEntry=dataObj.playlistEntry;if(playlistEntry.tableController==self.selectedTable){self.showTable({table:self.tableControllersByKey["all"]});}
playlist.deletePlaylistEntry({playlistEntry:playlistEntry});theAJKAjaxController.request({action:"assets/ajax/delete-user-playlist.php",method:"post",vars:{playlistId:playlistEntry.id},callback:function(data){}});},deleteUserFriend:function(dataObj){var self=this;var playlist=dataObj.playlist;var friendEntry=dataObj.friendEntry;if(friendEntry.tableController==self.selectedTable){self.showTable({table:self.tableControllersByKey["all"]});}
playlist.deletePlaylistEntry({playlistEntry:friendEntry});theAJKAjaxController.request({action:"assets/ajax/delete-user-friend.php",method:"post",vars:{friendId:friendEntry.id},callback:function(data){}});},showGameInfo:function(dataObj){var self=this;var game=dataObj.game;if(game.isFriendGame&&self.gamesByKey[game.id]){game=self.gamesByKey[game.id];}
var instantly=dataObj.instantly;var jumpToComments=dataObj.jumpToComments;var backToPos=(dataObj.backToPos)?dataObj.backToPos:1;self.gameInfoController.prepareForGame({game:game,backToPos:backToPos,jumpToComments:jumpToComments});anAJKMainCarouselController.animateTo({pos:3,instantly:instantly});},jumpToSignUpPanel:function(){var self=this;var panelInstantly=(anAJKMainCarouselController.currentItem==0)?false:true;anAJKMainPanelController.animateTo({pos:1,instantly:panelInstantly});anAJKMainCarouselController.animateTo({pos:0,callback:function(){}});},showSignOutPanel:function(){var self=this;if(!anAJKMainPanelController){setTimeout(function(){self.showSignOutPanel();},100);}
else{anAJKMainPanelController.animateTo({pos:5,instantly:true});}}}
var AJKContentFaderController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.domContent=$(this.domRootEl).find("div.rt-content-fader-content").get()[0];this.domHeadline=$(this.domRootEl).find("h3").get()[0];this.domPercent=$(this.domRootEl).find("h4").get()[0];this.domProgress=$(this.domRootEl).find("div.rt-content-fader-progress span").get()[0];this.messages=new Array();this.numMessages=0;}
AJKContentFaderController.prototype={init:function(){var self=this;return self;},setComplete:function(dataObj){var self=this;var percentage=dataObj.percentage;$(self.domPercent).html(percentage+"<span>%</span>");$(self.domProgress).css({width:percentage+"%"});},fadeOut:function(){var self=this;$(self.domRootEl).animate({opacity:0},500,function(){$(this).addClass("rt-content-fader-hidden");});},reset:function(){var self=this;$(self.domPercent).html("0"+"<span>%</span>");$(self.domProgress).css({width:"0%"});},display:function(){var self=this;$(self.domRootEl).removeClass("rt-content-fader-hidden").css({opacity:1});}}
var AJKLibraryLoader=function(dataObj){this.fader=dataObj.fader;this.loadedCallback=dataObj.loadedCallback;this.inBatchesOf=dataObj.inBatchesOf;this.controller=dataObj.controller;this.ajaxNumGames=dataObj.ajaxNumGames;this.ajaxLoadGames=dataObj.ajaxLoadGames;this.ajaxLoadGames.variables.limit=this.inBatchesOf;this.numGames=dataObj.numGames;this.games=new Array();this.loadedGames=0;this.recordSeperator=this.controller.recordSeperator;this.fieldSeperator=this.controller.fieldSeperator;this.completionPercent=(dataObj.completionPercent)?dataObj.completionPercent:100;return this;}
AJKLibraryLoader.prototype={init:function(){var self=this;if(self.fader){self.fader.display();self.fader.setComplete({percentage:0});}
if(self.numGames==0){if(self.fader){self.fader.setComplete({percentage:self.completionPercent});}
setTimeout(function(){self.loadedCallback({games:self.games});},1);return;}
var gamesHaveLoaded=function(dataObj){var start=dataObj.start;var games=dataObj.games;$.each(games,function(){self.games[start++]=this;self.loadedGames++;});if(self.fader){self.fader.setComplete({percentage:parseInt(self.completionPercent*(self.loadedGames)/self.numGames)});}
if(self.loadedGames>=self.numGames){setTimeout(function(){self.loadedCallback({games:self.games});},1);}}
var loadGames=function(dataObj){var start=dataObj.start;var thisFunc=arguments.callee;self.ajaxLoadGames.variables.start=start;(function(){var savedStart=start;theAJKAjaxController.request({action:self.ajaxLoadGames.url,method:"get",vars:self.ajaxLoadGames.variables,callback:function(gameData){var gamesData=gameData.split(self.recordSeperator);var numInThisBatch=gamesData.length;var theseGames=new Array()
for(var counter=0;counter<(numInThisBatch-1);counter++){var gameData=gamesData[counter].split(self.fieldSeperator);var aGame=new AJKGame({id:gameData[0],name:gameData[1],author:gameData[2],categories:gameData[3],recommendation:gameData[4],swf_url:gameData[5],gameFormatType:gameData[6],width:parseInt(gameData[7]),height:parseInt(gameData[8]),thumbnailUrl:gameData[9],played:parseInt(gameData[10]),lastPlayed:AJKHelpers.dateFromMySQLDate({dateString:gameData[11]}),userAdded:AJKHelpers.dateFromMySQLDate({dateString:gameData[12]}),userRating:parseInt(gameData[13]),controller:self.controller}).init();theseGames.push(aGame);}
gamesHaveLoaded({games:theseGames,start:savedStart});}});})();if(start+self.inBatchesOf<self.numGames){thisFunc({start:start+self.inBatchesOf});}}
loadGames({start:0});return self;}}
var AJKShopLibraryController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.domShopTable=$(this.domRootEl).find(".mgr-table-shop").get()[0];this.domTablePrototype=$(this.domShopTable).clone().get()[0];this.domFeaturedGameStage=$(this.domRootEl).find(".mgr-featured-games-stage").get()[0];this.gamesInShop=AJKGameManagerInitialValues.gamesInStore;this.domTableStage=$(this.domRootEl).find(".mgr-games-holder").get()[0];this.faderController="";this.controller=dataObj.controller;this.tableController="";this.tableControllers=new Array();this.tableControllersByKey=new Array();this.games=new Array();this.gamesByKey=new Array();this.numFeaturedGames=1;this.numOfGames=0;this.shopPageVisible=false;this.statusBarController="";this.selectedTable="";this.tableViewMode="thumb";return this;}
AJKShopLibraryController.prototype={init:function(){var self=this;self.statusBarController=new AJKStatusBarController({domRootEl:$("#mgr-shop-status-bar").get()[0],controller:self}).init();anAJKMainCarouselController.registerAsControllerOfItem({controller:self,position:2});self.faderController=new AJKContentFaderController({domRootEl:$(self.domRootEl).parent().find(".rt-content-fader").get()[0]});self.setupTableClicks();return self;},setupTableClicks:function(){var self=this;$(self.domRootEl).find(".mgr-list-gambolio-games .mgr-list-item a").each(function(){var defaultSort="";var genre=$(this).attr("genre");var title=$(this).clone().find("span").remove().end().text();var thisDomButton=this;$(this).click(function(){if(self.tableControllersByKey[genre]){self.showTable({table:self.tableControllersByKey[genre]});}
else{var numGames=(genre=="shop-all")?AJKGameManagerInitialValues.gamesInStore:AJKGameManagerInitialValues.numShopSectionGames;var inBatchesOf=parseInt(numGames/10);inBatchesOf=(inBatchesOf<1)?1:inBatchesOf;inBatchesOf=(inBatchesOf>500)?500:inBatchesOf;var userGameLoader=new AJKLibraryLoader({fader:self.faderController,inBatchesOf:inBatchesOf,controller:anAJKLibraryController,numGames:numGames,completionPercent:60,ajaxLoadGames:{url:"assets/ajax/load-range-of-shop-games.php",variables:{genre:genre}},loadedCallback:function(dataObj){var initialisedGames=dataObj.games;var aTableController=self.createTable({genre:genre,tableGames:new Array(),domShowButton:thisDomButton,domNumGamesDisplayer:$(thisDomButton).find("span").get()[0],defaultSort:"",type:"shop",title:title});aTableController.games=initialisedGames;$.each(aTableController.games,function(){aTableController.gamesByKey[this.id]=this;});aTableController.createEntriesFromGames({games:initialisedGames,progressFunc:function(dataObj){var percentage=dataObj.percentage;self.faderController.setComplete({percentage:parseInt(60+percentage/100*40)});},completionFunc:function(){self.faderController.setComplete({percentage:100});self.showTable({table:aTableController});self.faderController.fadeOut();}});}}).init();}
return false;});});},changeTableViewsTo:function(dataObj){var self=this;var mode=dataObj.mode;self.tableViewMode=mode;$.each(self.tableControllers,function(){this.changeTableViewTo({mode:mode});});},createTable:function(dataObj){var self=this;return anAJKLibraryController.createTable.call(this,dataObj);},showTable:function(dataObj){var self=this;anAJKLibraryController.showTable.call(this,dataObj);},showGameInfo:function(dataObj){var self=this;dataObj.backToPos=2;anAJKLibraryController.showGameInfo(dataObj);},itemWillScrollIntoView:function(){var self=this;self.shopPageVisible=true;self.carouselDidResize({newSize:anAJKMainCarouselController.dimensions});},itemWillScrollOutOfView:function(){var self=this;if(self.selectedTable){self.selectedTable.disableControls();}
self.shopPageVisible=false;},itemDidScrollOutOfView:function(){var self=this;self.selectedTable.disableControls();},itemDidScrollIntoView:function(){var self=this;if(self.selectedTable){self.selectedTable.enableControls();}
else{self.tableController=new AJKTableController({domRootEl:self.domShopTable,delegate:self,games:new Array(),domShowButton:$(self.domRootEl).find(".mgr-list-gambolio-games .mgr-list-item:eq(0) a").get()[0],domNumGamesDisplayer:$(self.domRootEl).find(".mgr-list-gambolio-games .mgr-list-item:eq(0) span").get()[0],containerHeight:anAJKMainCarouselController.dimensions.height,type:"shop",title:"Latest",genre:"latest",controller:self,tableMode:self.tableViewMode}).init();self.statusBarController.updateStatusFromTable({table:self.tableController});var shopLoader=new AJKLibraryLoader({fader:self.faderController,inBatchesOf:100,controller:self.controller,numGames:AJKGameManagerInitialValues.numShopSectionGames,ajaxLoadGames:{url:"assets/ajax/load-range-of-shop-games.php",variables:{genre:"latest"}},completionPercent:60,loadedCallback:function(dataObj){var initialisedGames=dataObj.games;$.each(initialisedGames,function(){self.games.push(this);self.gamesByKey[this.id]=this;});self.tableController.games=self.games;self.tableController.gamesByKey=self.gamesByKey;self.tableController.createEntriesFromGames({games:self.tableController.games,progressFunc:function(dataObj){var percentage=dataObj.percentage;self.faderController.setComplete({percentage:parseInt(60+percentage/100*40)});},completionFunc:function(){self.numOfGames=self.games.length;self.tableControllersByKey["latest"]=self.tableController;self.tableControllers.push(self.tableController);self.selectedTable=self.tableController;self.initialiseFeaturedGamesPanels({callback:function(){self.faderController.setComplete({percentage:100});self.tableController.show();self.tableController.enableControls();self.faderController.fadeOut();}});}});}}).init();}},carouselDidResize:function(dataObj){var self=this;if(self.shopPageVisible){var newSize=dataObj.newSize;$.each(self.tableControllers,function(){this.updateSize({newContainerHeight:newSize.height});});}},loadGame:function(dataObj){var self=this;var game=dataObj.game;self.controller.loadGame({game:game,returnToPos:2});},initialiseFeaturedGamesPanels:function(dataObj){var self=this;var callback=dataObj.callback;var randomGames=self.getRandomGames({numGames:self.numFeaturedGames});var loadedGameCounter=0;var gameDataHasLoaded=function(){if((++loadedGameCounter==self.numFeaturedGames)&&callback)
callback();}
$.each(randomGames,function(){var thisGame=this;this.getDataForInfoPanel({callback:function(){var insertHTML='<div class="mgr-featured-game-block">';insertHTML+='<div class="mgr-fgb-inner">';insertHTML+='<div class="mgr-fgb-content">';insertHTML+='<div class="mgr-fgb-image-holder">';insertHTML+='<img src="'+thisGame.extraData.thumbnail_url+'" alt="" />';insertHTML+='<div class="mgr-fgb-mask"></div>';insertHTML+='</div>';insertHTML+='<div class="mgr-fgb-details">';insertHTML+='<h5 class="colour-'+thisGame.cssClass+'-highlight">'+thisGame.name+'</h5>';insertHTML+='<h6>by <span>'+thisGame.author+'</span></h6>';insertHTML+='</div>';insertHTML+='<p class="mgr-fgb-description">'+AJKHelpers.clipToMaxCharWords({aString:thisGame.extraData.description,maxChars:75})+'</p>';insertHTML+='<a class="rt-button-3 mgr-fgb-add" href="#">Add</a>';insertHTML+='<a class="rt-button-3 mgr-fgb-play" href="#">Play</a>';insertHTML+='<a class="rt-button-3 mgr-fgb-more-info" href="#">More info</a>';insertHTML+='<div class="clear"></div>';insertHTML+='</div>';insertHTML+='</div>';insertHTML+='</div>';var thisDomFeaturedGame=$(insertHTML).get()[0];$(thisDomFeaturedGame).find("a.mgr-fgb-play").click(function(){self.loadGame({game:thisGame});return false;});$(thisDomFeaturedGame).find("a.mgr-fgb-more-info").click(function(){self.showGameInfo({game:thisGame});return false;});$(thisDomFeaturedGame).find("a.mgr-fgb-add").click(function(){if(!anAJKLibraryController.gamesByKey[thisGame.id]){anAJKLibraryController.addGameToUserLibrary({game:thisGame});anAJKLibraryController.deactivateAddGameToLibraryForAllReleventTables({game:thisGame});}
$(this).remove();return false;});$(self.domFeaturedGameStage).append(thisDomFeaturedGame);gameDataHasLoaded();}});});},getRandomGames:function(dataObj){var self=this;var numGames=dataObj.numGames;var retArray=new Array();for(var counter=0;counter<numGames;counter++){retArray.push(self.games[Math.floor(Math.random()*self.numOfGames)]);}
return retArray;}}
var AJKGame=function(dataObj){this.id=dataObj.id;this.name=dataObj.name;this.author=dataObj.author;this.categories=dataObj.categories;this.recommendation=dataObj.recommendation;this.swf_url=dataObj.swf_url;this.gameFormatTypes=["flash","iFrame"]
this.gameFormatType=this.gameFormatTypes[parseInt(dataObj.gameFormatType)];this.controller=dataObj.controller;this.played=(dataObj.played)?dataObj.played:0;this.lastPlayed=(dataObj.lastPlayed)?dataObj.lastPlayed:"";this.userAdded=(dataObj.userAdded)?dataObj.userAdded:"";this.numComments=(dataObj.numComments)?dataObj.numComments:0;this.searchText=(this.name+this.author+this.categories).toLowerCase();this.width=dataObj.width;this.height=dataObj.height;this.thumbnailUrl=dataObj.thumbnailUrl;var categoryClasses={adventure:"adventure",action:"action",fighting:"action",shooting:"action",shooter:"action",adventure:"adventure",other:"action",puzzles:"strategy",education:"strategy",puzzle:"strategy","board game":"strategy",driving:"sport",rhythm:"sport",sports:"sport",rpg:"strategy",strategy:"strategy",casino:"strategy",customize:"strategy",'dress-up':"strategy",'other':"strategy"}
this.cssClass=categoryClasses[this.categories.split(",")[0].toLowerCase()];this.extraData="";this.observers=new Array();this.leaderboardData="";this.comments="";this.commentsByKey="";this.userRating=dataObj.userRating;this.usersLeaderboardData=new Array();return this;}
AJKGame.prototype={init:function(){var self=this;return self;},registerAsObserver:function(dataObj){var self=this;var observer=dataObj.observer;self.observers.push(observer);},setValue:function(dataObj){var self=this;var valueName=dataObj.valueName;var valueValue=dataObj.valueValue;self[valueName]=valueValue;self.notifyObserversOfChange({valueName:valueName,valueValue:valueValue});},notifyObserversOfChange:function(dataObj){var self=this;var valueName=dataObj.valueName;var valueValue=dataObj.valueValue;$.each(self.observers,function(){this.gameValueChanged({valueName:valueName,valueValue:valueValue});});},commentWasAdded:function(dataObj){var self=this;var comment=dataObj.comment;self.setValue({valueName:"numComments",valueValue:++self.numComments});if(self.comments){self.comments=[comment].concat(self.comments);}
else{self.comments=[comment];}
AJKHelpers.waitForId({anObject:comment,callback:function(){self.commentsByKey[comment.id]=comment;}});},commentIdsAsString:function(){var self=this;if(self.comments){var counter=0;var str="";$.each(self.comments,function(){if(counter++){str+=","+this.id;}
else{str+=this.id;}});return str;}
else{return"";}},loadComments:function(dataObj){var self=this;var callback=dataObj.callback;var limit=dataObj.limit;var notIds=self.commentIdsAsString();theAJKAjaxController.request({action:"assets/ajax/comment-range-for-game.php",method:"get",vars:{gameId:self.id,limit:limit,notIds:notIds},callback:function(data){var newlyLoadedComments=new Array();if(data){if(!self.comments){self.comments=new Array();self.commentsByKey=new Array();}
var records=data.split(self.controller.recordSeperator);$.each(records,function(){var fields=this.split(self.controller.fieldSeperator);var aGameComment={id:fields[0],title:fields[1],body:fields[2],date:AJKHelpers.dateFromMySQLDate({dateString:fields[3]}),numReplies:fields[4],points:fields[5],username:fields[6],userId:fields[7],replies:new Array(),repliesByKey:new Array(),replyToId:"",associatedId:self.id,votedOn:false}
self.comments.push(aGameComment);self.commentsByKey[aGameComment.id]=aGameComment;newlyLoadedComments.push(aGameComment);});}
if(callback){callback({newlyLoadedComments:newlyLoadedComments});}}});},reloadLeaderboardData:function(dataObj){var self=this;var callback=dataObj.callback;self.loadLeaderboardData({callback:function(){callback();},start:0,limit:10,userDataId:anAJKLibraryController.user.id});},loadLeaderboardData:function(dataObj){var self=this;var callback=dataObj.callback;var start=dataObj.start;var limit=dataObj.limit;var userDataId=dataObj.userDataId;theAJKAjaxController.request({action:"assets/ajax/leaderboard-range-for-game.php",method:"get",vars:{gameId:self.id,start:start,limit:limit,userDataId:userDataId},callback:function(data){if(data){var blocks=data.split(anAJKLibraryController.blockSeperator);var records=blocks[0].split(anAJKLibraryController.recordSeperator);if(!self.leaderboardData){self.leaderboardData=new Array();}
$.each(records,function(){var fields=this.split(anAJKLibraryController.fieldSeperator);self.leaderboardData[start]={userId:fields[0],name:fields[1],score:parseInt(fields[2]),position:parseInt(start+1),direction:fields[3]}
self.usersLeaderboardData[fields[0]]=self.leaderboardData[start];start++;});if(blocks[1]){var fields=blocks[1].split(anAJKLibraryController.fieldSeperator);self.usersLeaderboardData[fields[0]]={userId:fields[0],name:fields[1],score:parseInt(fields[2]),position:parseInt(fields[3]),direction:fields[4]}}}
else{self.leaderboardData=-1;}
if(callback){callback();}}});},getDataForInfoPanel:function(dataObj){var self=this;var callback=dataObj.callback;if(!this.extraData){theAJKAjaxController.request({action:"assets/ajax/load-game-extra-info.php",method:"get",vars:{uuid:self.id},callback:function(data){var dataAsArray=data.split(self.controller.fieldSeperator);self.extraData={author_link:dataAsArray[0],thumbnail_url:dataAsArray[1],description:dataAsArray[2],tags:dataAsArray[3],instructions:dataAsArray[4],created:dataAsArray[5],suitability:dataAsArray[6],updated:dataAsArray[7],playedNum:dataAsArray[8],libraryNum:dataAsArray[9],userVotesNum:dataAsArray[10],playedRank:dataAsArray[11],libraryRank:dataAsArray[12],userVotesRank:dataAsArray[13],overallRank:dataAsArray[14],numComments:dataAsArray[15]}
self.numComments=self.extraData.numComments;if(callback){callback();}}});}
else if(callback){callback({data:self.extraData});}}}
var AJKVerifier=function(dataObj){this.domRootEl=dataObj.domRootEl;this.domFields=$(this.domRootEl).find(".ajk-verifier-field").get();this.domSubmitButton=$(this.domRootEl).find(".ajk-verifier-submit").get()[0];this.domTooltipDisplay=$(this.domRootEl).find(".ajk-verifier-tooltip-displayer").get()[0];this.domErrorMessage=$(this.domRootEl).find(".ajk-verifier-error-message").get()[0];this.domSuccessMessage=$(this.domRootEl).find(".ajk-verifier-success-message").get()[0];this.defaultErrorMessage=$(this.domErrorMessage).text();this.submitFunc=dataObj.submitFunc;this.objFields=new Array();this.objFieldsByKey=new Array();this.numFields=this.domFields.length;return this;}
AJKVerifier.prototype={init:function(){var self=this;$(this.domRootEl).find("form").each(function(){$(this).submit(function(){return false});});var counter=0;$.each(self.domFields,function(){var isLast=(++counter==self.numFields)?true:false;var aNewField=new AJKVerifierField({domRootEl:this,isLast:isLast,fieldHoverFunc:function(dataObj){self.displayTooltip(dataObj);},clearAllErrorsFunc:function(dataObj){self.clearAllErrors(dataObj);},controller:self}).init();self.objFields.push(aNewField);self.objFieldsByKey[aNewField.fieldName]=aNewField;});if(!self.domErrorMessage){self.hideErrorMessage=function(){};self.displayErrorMessage=function(){};}
if(!self.domTooltipDisplay){self.displayTooltip=function(){};}
$(self.domSubmitButton).click(function(){self.attemptToSubmit();return false;});return self;},attemptToSubmit:function(){var self=this;if(self.verifyFields()){self.submit();}
else{self.displayErrorMessage({message:self.defaultErrorMessage})}},errorHighlightField:function(dataObj){var self=this;var fieldName=dataObj.fieldName;self.objFieldsByKey[fieldName].highlightError();},displayErrorMessage:function(dataObj){var self=this;var message=dataObj.message;$(self.domErrorMessage).html(message).css({display:"block"});self.hideSuccessMessage();},hideErrorMessage:function(dataObj){var self=this;$(self.domErrorMessage).css({display:"none"});},displaySuccessMessage:function(dataObj){var self=this;if(self.domSuccessMessage){$(self.domSuccessMessage).css({display:"block"});}},hideSuccessMessage:function(dataObj){var self=this;if(self.domSuccessMessage){$(self.domSuccessMessage).css({display:"none"});}},clearAllErrors:function(){var self=this;self.hideErrorMessage();self.hideSuccessMessage();$.each(self.objFields,function(){this.clearError();});},displayTooltip:function(dataObj){var self=this;var tooltipText=dataObj.tooltipText;if(tooltipText){$(self.domTooltipDisplay).html(tooltipText).css({display:"block"});}
else{$(self.domTooltipDisplay).html(tooltipText).css({display:"none"});}},verifyFields:function(){var self=this;var failedFields=0;$.each(self.objFields,function(){if(!this.verify()){failedFields++;this.highlightError();}});return(failedFields==0);},submit:function(){var self=this;$.each(self.objFields,function(){this.blur();});var fieldData=new Object();self.displaySuccessMessage();$.each(self.objFields,function(){fieldData[this.fieldName]=this.fieldValue;});self.submitFunc({fieldData:fieldData});},clearFields:function(){var self=this;$.each(self.objFields,function(){this.clear();});}}
var AJKVerifierField=function(dataObj){this.domRootEl=dataObj.domRootEl;this.fieldHoverFunc=dataObj.fieldHoverFunc;this.clearAllErrorsFunc=dataObj.clearAllErrorsFunc;this.isLast=dataObj.isLast;this.controller=dataObj.controller;this.domFormat="";this.domChars="";this.domTooltip="";this.domControl="";this.tooltip="";this.format="";this.chars="";this.defaultValue="";this.controlType="";this.fieldValue="";this.fieldName="";this.defaultValueOkay="";this.valueOptions="";return this;}
AJKVerifierField.prototype={init:function(){var self=this;self.domFormat=$(this.domRootEl).find(".ajk-verifier-format");self.domChars=$(this.domRootEl).find(".ajk-verifier-chars");self.domTooltip=$(this.domRootEl).find(".ajk-verifier-tooltip");self.domControl=$(this.domRootEl).find(".ajk-verifier-control");self.tooltip=(self.domTooltip.length>0)?$(self.domTooltip).text():"";self.format=(self.domFormat.length>0)?$(self.domFormat).text():"";self.chars=(self.domChars.length>0)?$(self.domChars).text():"";self.domControl=(self.domControl.length>0)?$(self.domControl).get()[0]:"";self.defaultValueOkay=($(this.domRootEl).find(".ajk-verifier-not-default-value").length>0)?false:true;var domOptionValues=$(this.domRootEl).find(".ajk-verifier-value-options");self.valueOptions=(domOptionValues.length>0)?$(domOptionValues).text().split():"";self.fieldName=$(self.domControl).attr("name");if(self.chars){var charArray=self.chars.split("-");self.chars={minChar:charArray[0],maxChar:charArray[1]}}
self.calculateControlType();self.setupValueGetterSetter();self.setupVerificationFunction();self.setupTooltip();self.setupFocus();self.setupClick();self.setupKeyEvents();return self;},setupValueGetterSetter:function(){var self=this;switch(self.controlType){case"span ajk-custom-checkbox":self.getValue=function(){return $(this.domControl).text();}
self.setValue=function(dataObj){$(this.domControl).text(dataObj.value);}
break;case"textarea textarea":self.getValue=function(){return $(this.domControl).text()||$(this.domControl).val();}
self.setValue=function(dataObj){$(this.domControl).text(dataObj.value);}
break;default:self.getValue=function(){return $(this.domControl).val();}
self.setValue=function(dataObj){$(this.domControl).val(dataObj.value);}
break;}},calculateControlType:function(){var self=this;var tagName=self.domControl.tagName;var type=$(self.domControl).attr("type");self.controlType=(tagName+" "+type).toLowerCase();},setupClick:function(){var self=this;switch(self.controlType){case"span ajk-custom-checkbox":self.fieldValue=self.getValue();$(self.domControl).click(function(){if(self.fieldValue=="on"){self.fieldValue="off";$(this).removeClass("checkbox-selected");}
else{self.fieldValue="on";$(this).addClass("checkbox-selected");}
self.clearAllErrorsFunc();return false;});break;default:break;}},setupFocus:function(){var self=this;switch(self.controlType){case"input text":self.fieldValue=self.defaultValue=$(self.domControl).val();$(self.domControl).focus(function(){var thisVal=self.getValue();if(thisVal==self.defaultValue){self.setValue({value:""});}
$(self.domRootEl).addClass("ajk-verifier-field-focused");self.clearAllErrorsFunc();}).blur(function(){var thisVal=self.getValue();if(!thisVal){self.setValue({value:self.defaultValue});}
self.fieldValue=thisVal;$(self.domRootEl).removeClass("ajk-verifier-field-focused");});break;case"textarea textarea":self.fieldValue=self.defaultValue=$(self.domControl).val();$(self.domControl).focus(function(){var thisVal=self.getValue();if(thisVal==self.defaultValue){self.setValue({value:""});}
$(self.domRootEl).addClass("ajk-verifier-field-focused");self.clearAllErrorsFunc();}).blur(function(){var thisVal=self.getValue();if(!thisVal){self.setValue({value:self.defaultValue});}
self.fieldValue=thisVal;$(self.domRootEl).removeClass("ajk-verifier-field-focused");});break;default:break;}},setupKeyEvents:function(){var self=this;if(self.isLast&&self.controlType=="input text"){$(self.domControl).keyup(function(e){if(e.keyCode==13){self.fieldValue=$(self.domControl).val();self.controller.attemptToSubmit();}});}},clear:function(){var self=this;switch(self.controlType){case"input text":self.fieldValue=(self.defaultValue)?self.defaultValue:"";$(self.domControl).val(self.fieldValue);break;case"textarea textarea":self.fieldValue=(self.defaultValue)?self.defaultValue:"";$(self.domControl).text(self.fieldValue);break;default:break;}},clearError:function(){var self=this;$(self.domRootEl).removeClass("ajk-verifier-field-error");},setupTooltip:function(){var self=this;$(self.domControl).hover(function(){self.fieldHoverFunc({tooltipText:self.tooltip});},function(){self.fieldHoverFunc({tooltipText:""});});},setupVerificationFunction:function(){var self=this;switch(self.format){case"email":self.verify=function(){var self=this;var fieldValue=self.getValue();if(!fieldValue||fieldValue==self.defaultValue){return false;}
return fieldValue.match(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);}
break;default:self.verify=function(){if(!self.defaultValueOkay&&self.fieldValue==self.defaultValue){return false;}
return(self.checkFieldCharLength()&&self.checkForValueOptions());}
break;}},verify:function(){},blur:function(){var self=this;$(self.domControl).blur();},highlightError:function(){var self=this;$(self.domRootEl).addClass("ajk-verifier-field-error");},checkFieldCharLength:function(){var self=this;if(!self.chars){return true;}
var fieldLength=self.fieldValue.length;return(fieldLength>=self.chars.minChar&&fieldLength<=self.chars.maxChar);},checkForValueOptions:function(){var self=this;if(!self.valueOptions){return true;}
var optionFound=false;$.each(self.valueOptions,function(){if(self.fieldValue==this){optionFound=true;}});return optionFound;}}
var AJKFlashGameController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.domInner=$(this.domRootEl).find(".rt-content-inner").get()[0];this.domStage=$(this.domRootEl).find(".mgr-flash-stage").get()[0];this.domButtons=dataObj.domButtons;this.dimensions={width:$(this.domRootEl).width(),height:$(this.domRootEl).height(),marginLeft:0,marginTop:0}
this.scaledDimensions={width:0,height:0,marginLeft:0,marginTop:0};this.normalDimensions={width:0,height:0,marginLeft:0,marginTop:0};this.returnToPos=1;this.currentGame="";this.open=false;this.gameDisplayController="";this.selectedDimensions=this.normalDimensions;this.displayFormat="normal";this.fullScreenOn=false;this.popupAddGameToLibraryController="";this.popupTellFriendController="";this.gameRatingController="";this.gameHighScorePopupController="";this.lastCategoryClass="";this.popupAddGameCommentController="";return this;}
AJKFlashGameController.prototype={init:function(){var self=this;anAJKMainCarouselController.registerAsControllerOfItem({controller:self,position:5});self.popupAddGameCommentController=new AJKPopupAddGameCommentController({controller:self,domRootEl:$("#mgr-button-popup-fl-comments").get()[0],buttonPopupId:"mgr-button-popup-fl-comments",showComments:true,domCommentsContainer:$("#mgr-button-popup-fl-comments").find(".carousel-stage").get()[0]}).init();self.gameHighScorePopupController=new AJKGameHighScorePopupController({controller:self,domRootEl:$("#mgr-button-popup-fl-high-score").get()[0],buttonPopupId:"mgr-button-popup-fl-high-score"}).init();self.popupTellFriendController=new AJKPopupTellFriendController({controller:self,domRootEl:$("#mgr-button-popup-fl-tell-friend").get()[0],buttonPopupId:"mgr-button-popup-fl-tell-friend"}).init();self.popupAddGameToLibraryController=new AJKPopupAddGameToLibraryController({controller:self,domRootEl:$("#mgr-button-popup-fl-add-to-library").get()[0],buttonPopupId:"mgr-button-popup-fl-add-to-library",addGameFunc:function(){anAJKLibraryController.addGameToUserLibrary({game:self.currentGame});}}).init();self.gameRatingController=new AJKGameRatingController({domRootEl:$("#mgr-button-popup-fl-rate-game").get()[0]}).init();self.gameDisplayController=new AJKGameDisplayController({domRootEl:$(self.domRootEl).find(".mgr-fh-game-display-controls").get()[0],optionFunc:function(dataObj){switch(dataObj.option){case"fit-to-screen":self.selectedDimensions=self.dimensions;break;case"scale-to-screen":self.selectedDimensions=self.scaledDimensions;break;case"normal":self.selectedDimensions=self.normalDimensions;break;case"full-screen":self.toggleFullScreen();break;}
self.updateGameSize({instantly:true});}}).init();$(self.domButtons).click(function(){var action=$(this).attr("option");switch(action){case"back-to-previous":self.backToLibrary();break;}
return false;});return this;},getSelectedGame:function(){var self=this;return self.currentGame;},carouselDidResize:function(dataObj){var self=this;var newSize=dataObj.newSize;self.dimensions.width=newSize.width;if(self.fullScreenOn){self.dimensions.height=AJKHelpers.viewportSize().height;}
else{self.dimensions.height=newSize.height;}
self.calculateAlternateDisplayDimensions();self.updateGameSize({instantly:true});},updateGameSize:function(dataObj){var self=this;var instantly=(dataObj&&dataObj.instantly)?dataObj.instantly:"";var duration=(instantly)?0:500;$(self.domInner).css({height:self.dimensions.height});$(self.domStage).css({height:self.selectedDimensions.height,width:self.selectedDimensions.width,marginLeft:self.selectedDimensions.marginLeft+"px",marginTop:self.selectedDimensions.marginTop+"px"});if(self.currentGame.gameFormatType=="flash"){$(self.domFlashEmbed).css({height:self.selectedDimensions.height,width:self.selectedDimensions.width});}
else{$(self.domGameIFrame).css({width:self.selectedDimensions.width,height:self.selectedDimensions.height});}},calculateAlternateDisplayDimensions:function(){var self=this;if(self.currentGame){self.normalDimensions.width=self.currentGame.width;self.normalDimensions.height=self.currentGame.height;self.normalDimensions.marginLeft=parseInt((self.dimensions.width-self.currentGame.width)/2);self.normalDimensions.marginTop=parseInt((self.dimensions.height-self.currentGame.height)/2);self.scaledDimensions.width=parseInt(self.dimensions.height/self.currentGame.height*self.currentGame.width);self.scaledDimensions.height=self.dimensions.height;self.scaledDimensions.marginLeft=parseInt((self.dimensions.width-self.scaledDimensions.width)/2);self.scaledDimensions.marginTop=parseInt((self.dimensions.height-self.scaledDimensions.height)/2);if(self.normalDimensions.height>self.dimensions.height){self.normalDimensions.width=self.scaledDimensions.width;self.normalDimensions.height=self.scaledDimensions.height;self.normalDimensions.marginLeft=self.scaledDimensions.marginLeft;self.normalDimensions.marginTop=self.scaledDimensions.marginTop;}}},itemDidScrollOutOfView:function(){var self=this;self.clearGame();self.open=false;self.gameHighScorePopupController.closePopup();self.popupAddGameCommentController.closePopup();},prepareForGame:function(dataObj){var self=this;self.currentGame=dataObj.game;self.calculateAlternateDisplayDimensions();$(self.domInner).css({height:self.dimensions.height});$(self.domStage).css({height:self.selectedDimensions.height,width:self.selectedDimensions.width,marginLeft:self.selectedDimensions.marginLeft+"px",marginTop:self.selectedDimensions.marginTop+"px"});if(!self.currentGame.extraData){self.currentGame.getDataForInfoPanel({callback:function(){}});}
theBookmarkController.setUrlTo({url:"game-play:"+self.currentGame.id});},loadGame:function(dataObj){var self=this;var game=dataObj.game;self.currentGame=game;self.returnToPos=dataObj.returnToPos;self.open=true;self.gameRatingController.initialiseWithNewGame({game:game});if(self.lastCategoryClass){$(self.domRootEl).removeClass(self.lastCategoryClass);}
self.lastCategoryClass="mgr-game-info-page-"+game.cssClass;$(self.domRootEl).addClass(self.lastCategoryClass);if(QMBrowserDetect.browser!="Explorer"){game.gameFormatType="iFrame";if(game.swf_url.indexOf("kongregate")!=-1){}}
if(game.gameFormatType=="flash"){var insertHTML='<embed wmode="opaque" src="'+game.swf_url+'?affiliate_id=a8d7100d4a24f5f2" width="'+self.selectedDimensions.width+'" height="'+self.selectedDimensions.height+'">';insertHTML+='</embed>';$(self.domStage).html(insertHTML);self.domFlashObject=$(self.domStage).find("object").get()[0];self.domFlashEmbed=$(self.domStage).find("embed").get()[0];}
else{var insertHTML='<iframe scrolling="no" class="mgr-game-iframe" width="'+self.selectedDimensions.width+'" height="'+self.selectedDimensions.height+'" src="assets/ajax/iframeContentGenerator.php?swf='+game.swf_url+'?affiliate_id=a8d7100d4a24f5f2"></iframe>';$(self.domStage).html(insertHTML);self.domGameIFrame=$(self.domStage).find("iframe").get()[0];}
$("#mochi-leaderboard-bridge").remove();$("div[name^=value]").remove();$("body").append('<div id="mochi-leaderboard-bridge"></div>');var options={partnerID:"a8d7100d4a24f5f2",id:"mochi-leaderboard-bridge",userID:""+anAJKLibraryController.user.id,username:anAJKLibraryController.user.username,callback:function(params){var score=params.score;var gameId=self.currentGame.id;var leaderboardId=params.boardID;var leaderboardTitle=params.title;var leaderboardDesc=params.description;var leaderboardDataType=params.datatype;var leaderboardSortOrder=params.sortOrder;var leaderboardScoreLabel=params.scoreLabel;theAJKAjaxController.request({action:"assets/ajax/save-user-score-to-leaderboard.php",method:"post",vars:{gameId:gameId,score:score,leaderboardId:leaderboardId,leaderboardTitle:leaderboardTitle,leaderboardDesc:leaderboardDesc,leaderboardDataType:leaderboardDataType,leaderboardSortOrder:leaderboardSortOrder,leaderboardScoreLabel:leaderboardScoreLabel},callback:function(data){game.reloadLeaderboardData({callback:function(){self.gameHighScorePopupController.refresh();anAJKLibraryController.gameInfoController.refreshForGame({game:game});}});}});}}
Mochi.addLeaderboardIntegration(options);},toggleFullScreen:function(){var self=this;self.dimensions.height=anAJKMainCarouselController.dimensions.height;if(self.fullScreenOn){$(this.domInner).css({position:"relative",top:"auto",left:"auto",height:"auto",zIndex:"auto"});$("#rt-footer-carousel").css({display:"block"});self.fullScreenOn=false;}
else{$(this.domInner).css({position:"fixed",top:0,left:0,zIndex:10,height:1000});$("#rt-footer-carousel").css({display:"none"});self.dimensions.height=AJKHelpers.viewportSize().height;self.fullScreenOn=true;}
self.calculateAlternateDisplayDimensions();self.updateGameSize({instantly:true});},clearGame:function(){var self=this;$(self.domStage).empty();},backToLibrary:function(){var self=this;anAJKMainCarouselController.animateTo({pos:self.returnToPos});}}
var AJKWindowResizeEvent=function(){this.observers=new Array();return this;}
AJKWindowResizeEvent.prototype={init:function(){var self=this;$(window).resize(function(){self.informObservers();});return self;},informObservers:function(){var self=this;var viewportSize=AJKHelpers.viewportSize();$.each(self.observers,function(){this.windowDidResize({newSize:viewportSize});});},registerAsObserver:function(dataObj){var self=this;var observer=dataObj.observer;self.observers=AJKHelpers.removeItemFromArray({anArray:self.observers,item:observer})
self.observers.push(observer);},removeAsObserver:function(dataObj){var self=this;var observer=dataObj.observer;self.observers=AJKHelpers.removeItemFromArray({anArray:self.observers,item:observer})}}
var AJKWindowScrollEvent=function(){this.observers=new Array();return this;}
AJKWindowScrollEvent.prototype={init:function(){var self=this;$(window).scroll(function(){self.informObservers();});return self;},informObservers:function(){var self=this;$.each(self.observers,function(){this.windowDidScroll({windowTopOffset:$(window).scrollTop()});});},registerAsObserver:function(dataObj){var self=this;var observer=dataObj.observer;self.observers=AJKHelpers.removeItemFromArray({anArray:self.observers,item:observer})
self.observers.push(observer);},removeAsObserver:function(dataObj){var self=this;var observer=dataObj.observer;self.observers=AJKHelpers.removeItemFromArray({anArray:self.observers,item:observer})}}
var AJKKeyEvent=function(){this.observers=new Array();this.isInputFocussed=false;return this;}
AJKKeyEvent.prototype={init:function(){var self=this;$(document).keyup(function(e){if(e.target.tagName!="INPUT"&&e.target.tagName!="TEXTAREA"){self.informObservers({key:e.keyCode,mode:"keyup"});}});return self;},informObservers:function(dataObj){var self=this;$.each(self.observers,function(){if(this.keyEventTooPlace){this.keyEventTooPlace(dataObj);}});},registerAsObserver:function(dataObj){var self=this;var observer=dataObj.observer;self.observers=AJKHelpers.removeItemFromArray({anArray:self.observers,item:observer})
self.observers.push(observer);},removeAsObserver:function(dataObj){var self=this;var observer=dataObj.observer;self.observers=AJKHelpers.removeItemFromArray({anArray:self.observers,item:observer})}}
var AJKMouseMoveEvent=function(){this.observers=new Array();this.active=false;this.observersOfType=new Array();return this;}
AJKMouseMoveEvent.prototype={init:function(){var self=this;return self;},startEvent:function(){var self=this;$(document).bind("mousemove",function(e){e.preventDefault();var mousePos=self.getMousePos({event:e});self.informObserversOfMouseMove({coords:mousePos});return false;}).bind("mouseup",function(e){var mousePos=self.getMousePos({event:e});self.informObserversOfMouseUp({coords:mousePos});});self.active=true;},getMousePos:function(dataObj){var self=this;var event=dataObj.event;xPos=yPos=false;if(document.layers){xPos=event.x;yPos=event.y;}
else if(document.all){xPos=window.event.clientX;yPos=window.event.clientY;}
else if(document.getElementById){xPos=event.clientX;yPos=event.clientY;}
return{x:xPos,y:yPos};},endEvent:function(){var self=this;$(document).unbind("mousemove");self.active=false;},informObserversOfMouseMove:function(dataObj){var self=this;var coords=dataObj.coords;$.each(self.observers,function(){this.mouseDidMove({coords:coords});});},informObserversOfMouseUp:function(dataObj){var self=this;var coords=dataObj.coords;$.each(self.observers,function(){this.mouseDidUp({coords:coords});});},registerAsObserver:function(dataObj){var self=this;var observer=dataObj.observer;self.observers=AJKHelpers.removeItemFromArray({anArray:self.observers,item:observer})
self.observers.push(observer);if(!self.active){self.startEvent();}},removeAsObserver:function(dataObj){var self=this;var observer=dataObj.observer;self.observers=AJKHelpers.removeItemFromArray({anArray:self.observers,item:observer});if(self.observers.length==0){self.endEvent();}},registerAsObserverOfType:function(dataObj){var self=this;var observer=dataObj.observer;var type=dataObj.type;if(!self.observersOfType[type]){self.observersOfType[type]=new Array();}
else{self.observersOfType[type]=AJKHelpers.removeItemFromArray({anArray:self.observersOfType[type],item:observer});}
self.observersOfType[type].push(observer);},removeAsObserverOfType:function(dataObj){var self=this;var observer=dataObj.observer;var type=dataObj.type;if(self.observersOfType[type]){self.observersOfType[type]=AJKHelpers.removeItemFromArray({anArray:self.observersOfType[type],item:observer});}}}
var AJKDraggable=function(dataObj){this.domDragEl=dataObj.domDragEl;this.clone=dataObj.clone;this.limitFunc=dataObj.limitFunc;this.limits="";this.offsetInEl={x:0,y:0};this.localStartCoords={x:0,y:0};this.startMousePos={x:0,y:0};this.domDraggable="";this.mouseMoveFunc=dataObj.mouseMoveFunc;this.type=dataObj.type;this.data=(dataObj.data)?(dataObj.data):"";this.owner=(dataObj.owner)?(dataObj.owner):"";this.cloneClass=dataObj.cloneClass;}
AJKDraggable.prototype={init:function(){var self=this;$(self.domDragEl).mousedown(function(e){self.initiateDrag({event:e});});},initiateDrag:function(dataObj){var self=this;var event=dataObj.event;self.domDraggable=(self.clone)?$(this.domDragEl).clone().get()[0]:this.domDragEl;if(self.cloneClass){$(self.domDraggable).addClass(self.cloneClass);}
$(self.domDraggable).addClass("rt-draggable");AJKHelpers.cancelSelectionOnDomEl({domEl:self.domDraggable});self.startMousePos=theAJKMouseMoveEvent.getMousePos({event:event});var itemPos=AJKHelpers.getCoordsOfDomEl({domEl:self.domDragEl});self.offsetInEl={x:self.startMousePos.x-itemPos.x,y:self.startMousePos.y-itemPos.y};if(self.type&&theAJKMouseMoveEvent.observersOfType[self.type]){$.each(theAJKMouseMoveEvent.observersOfType[self.type],function(){if(this.dragDidStart){this.dragDidStart({coords:self.startMousePos,data:self.data});}});}
if(self.clone){$(self.domDraggable).css({width:$(this.domDragEl).width(),left:itemPos.x,top:itemPos.y,position:"fixed",opacity:0.7});$("body").append(self.domDraggable);}
self.localStartCoords={x:parseInt($(self.domDraggable).css("left")),y:parseInt($(self.domDraggable).css("top"))}
self.limits=(self.limitFunc)?self.limitFunc():"";theAJKMouseMoveEvent.registerAsObserver({observer:self});},endDrag:function(dataObj){var self=this;var coords=dataObj.coords;var useStandardDragEndAnimation=dataObj.useStandardDragEndAnimation;theAJKMouseMoveEvent.removeAsObserver({observer:self});if(this.clone){if(useStandardDragEndAnimation){var distance=(self.localStartCoords.x-coords.x)*(self.localStartCoords.x-coords.x);distance+=(self.localStartCoords.y-coords.y)*(self.localStartCoords.y-coords.y)
var duration=parseInt(Math.sqrt(parseInt(distance)))*1.5;duration=(duration<250)?250:duration;duration=(duration>500)?500:duration;$(self.domDraggable).animate({left:self.localStartCoords.x,top:self.localStartCoords.y},duration,function(){$(this).removeClass("rt-draggable");$(this).remove();});}
else{$(self.domDraggable).animate({opacity:0},400,function(){$(this).remove();});}}},mouseDidUp:function(dataObj){var self=this;var coords=dataObj.coords;var useStandardDragEndAnimation=true;if(self.type&&theAJKMouseMoveEvent.observersOfType[self.type]){$.each(theAJKMouseMoveEvent.observersOfType[self.type],function(){if(this.dragDidEnd&&this.dragDidEnd({coords:coords,data:self.data,owner:self.owner,type:self.type})){useStandardDragEndAnimation=false;}});}
self.endDrag({useStandardDragEndAnimation:useStandardDragEndAnimation,coords:coords});},mouseDidMove:function(dataObj){var self=this;var newMouseCoords=dataObj.coords;var newPos={x:newMouseCoords.x-self.startMousePos.x+self.localStartCoords.x,y:newMouseCoords.y-self.startMousePos.y+self.localStartCoords.y}
if(self.limits){newPos.x=(newPos.x<self.limits.minX)?self.limits.minX:newPos.x;newPos.x=(newPos.x>self.limits.maxX)?self.limits.maxX:newPos.x;newPos.y=(newPos.y<self.limits.minY)?self.limits.minY:newPos.y;newPos.y=(newPos.y>self.limits.maxY)?self.limits.maxY:newPos.y;}
$(self.domDraggable).css({top:newPos.y,left:newPos.x});if(self.mouseMoveFunc){self.mouseMoveFunc({dragElPos:newPos});}
if(self.type&&theAJKMouseMoveEvent.observersOfType[self.type]){$.each(theAJKMouseMoveEvent.observersOfType[self.type],function(){if(this.dragDidMove){this.dragDidMove({coords:newMouseCoords,data:self.data});}});}}}
var AJKPlayListController=function(dataObj){this.domPlayLists=dataObj.domPlayLists;this.containerHeight=dataObj.containerHeight;this.selectedPlayList="";this.playLists=new Array();this.playListsByKey=new Array();this.sampleDomItem=$(this.domPlayLists[0]).find(".mgr-list-item:eq(0)").get()[0];this.itemHeight=AJKHelpers.calculateDomElHeight({domEl:this.sampleDomItem});this.editableContentPrototype="";return this;}
AJKPlayListController.prototype={init:function(){var self=this;self.editableContentPrototype=$('<div class="mgr-li-input-holder"><input type="text" value="" /><a href="#" class="save-button" /><a href="#" class="close-button" /></div>').get()[0];$(self.domPlayLists).each(function(){self.createPlayList({domRootEl:this});});self.playListsByKey["my-games"].expand({instantly:true});return self;},createPlayList:function(dataObj){var self=this;var domRootEl=dataObj.domRootEl;var type=$(domRootEl).attr("type");var initialPlaylists=dataObj.initialPlaylists;var initialPlaylistsByKey=dataObj.initialPlaylistsByKey;var aPlayList=new AJKPlayList({domRootEl:domRootEl,controller:self,type:type,initialPlaylists:initialPlaylists,initialPlaylistsByKey:initialPlaylistsByKey}).init()
self.playLists.push(aPlayList);self.playListsByKey[type]=aPlayList;return aPlayList;},updateContainerSize:function(dataObj){var self=this;self.containerHeight=dataObj.newContainerHeight;if(self.selectedPlaylist&&self.selectedPlaylist.expanded){self.selectedPlaylist.windowDidResize();}},closeLists:function(dataObj){var self=this;var not=dataObj.not;$.each(self.playLists,function(){if(this!=not){this.contract();}});},refreshPlaylists:function(){var self=this;self.playListsByKey["my-games"].expand({instantly:true});self.playListsByKey["play-lists"].contract({instantly:true});self.playListsByKey["friends"].contract({instantly:true});self.emptyPlaylist({playList:self.playListsByKey["play-lists"]});self.emptyPlaylist({playList:self.playListsByKey["friends"]});},emptyPlaylist:function(dataObj){var self=this;var playListToPurge=dataObj.playList;playListToPurge.purge();self.playLists=AJKHelpers.removeItemFromArray({anArray:self.playLists,item:playListToPurge});},loadPlaylistWithData:function(dataObj){var self=this;var playlistName=dataObj.playlistName;var data=dataObj.data;var playlistHolder=self.playListsByKey[playlistName];var playlists=data.split(anAJKLibraryController.recordSeperator);var numLists=playlists.length-1;var initialPlaylists=new Array();var initialPlaylistsByKey=new Array();for(var counter=0;counter<numLists;counter++){if(playlistName=="play-lists"){var pData=playlists[counter].split(anAJKLibraryController.fieldSeperator);var pId=pData[0];var pName=pData[1];var pGames=(pData[2])?pData[2].split(","):new Array();var insertHTML=self.getHTMLForEntry({playlistId:pId,playlistName:pName,type:playlistName,numGames:pGames.length});var aDomRootEl=$(insertHTML).get()[0];var playListObj={domRootEl:aDomRootEl,id:pId,domText:$(aDomRootEl).find(".mgr-li-title").get()[0],domNumber:$(aDomRootEl).find(".mgr-li-inner span").get()[0],number:pGames.length,title:pName,gameIds:pGames,games:new Array(),gamesByKey:new Array(),gameArraysCreated:false,tableController:""}}
else if(playlistName=="friends"){var pData=playlists[counter].split(anAJKLibraryController.fieldSeperator);var friendId=pData[0];var fName=pData[1];var fNumGames=pData[2];var fEntryId=pData[3];var insertHTML=self.getHTMLForFriendEntry({friendName:fName,numGames:fNumGames,playlistId:fEntryId});var aDomRootEl=$(insertHTML).get()[0];var playListObj={domRootEl:aDomRootEl,id:fEntryId,domText:$(aDomRootEl).find(".mgr-li-title").get()[0],domNumber:$(aDomRootEl).find(".mgr-li-inner span").get()[0],number:fNumGames,title:fName,gameIds:"",games:new Array(),gamesByKey:new Array(),gameArraysCreated:false,tableController:"",friendId:friendId,numGames:parseInt(fNumGames)}}
initialPlaylists.push(playListObj);initialPlaylistsByKey[playListObj.id]=playListObj;$(playlistHolder.domListContent).append(aDomRootEl);}
self.createPlayList({domRootEl:playlistHolder.domRootEl,initialPlaylists:initialPlaylists,initialPlaylistsByKey:initialPlaylistsByKey});},getHTMLForEntry:function(dataObj){var self=this;var pId=(dataObj&&dataObj.playlistId)?dataObj.playlistId:"";var pName=(dataObj&&dataObj.playlistName)?dataObj.playlistName:"";var type=(dataObj&&dataObj.type)?dataObj.type:"";var numGames=(dataObj&&dataObj.numGames)?dataObj.numGames:0;var insertHTML='<div class="mgr-list-item" playListId="'+pId+'">';insertHTML+='<a href="#" class="mgr-li-inner"><strong class="mgr-li-title">'+pName+'</strong><span>'+numGames+'</span></a>'
insertHTML+='</div>';return insertHTML;},getHTMLForFriendEntry:function(dataObj){var self=this;var friendName=dataObj.friendName;var numGames=dataObj.numGames;var pId=(dataObj&&dataObj.playlistId)?dataObj.playlistId:"";var insertHTML='<div class="mgr-list-item" playListId="'+pId+'">';insertHTML+='<a href="#" class="mgr-li-inner"><strong class="mgr-li-title">'+friendName+'</strong><span>'+numGames+'</span></a>'
insertHTML+='</div>';return insertHTML;}}
var AJKPlayList=function(dataObj){this.domRootEl=dataObj.domRootEl;this.domListHolder=$(this.domRootEl).find(".mgr-list-item-holder").get()[0];this.domListStage=$(this.domListHolder).find(".mgr-list-item-stage").get()[0];this.domListContent=$(this.domListHolder).find(".mgr-list-item-content").get()[0];this.domAddButton=$(this.domRootEl).find(".mgr-list-item-add a").get()[0];this.stageHeight=$(this.domListStage).height();this.domHeader=$(this.domRootEl).find(".rt-list-header li").get()[0];this.domItems=$(this.domListStage).find("div.mgr-list-item").get();this.sampleDomBottomControl=$(this.domRootEl).find(".mgr-list-item-add:eq(0)").get()[0];this.bottomControlsHeight=(this.sampleDomBottomControl)?AJKHelpers.calculateDomElHeight({domEl:this.sampleDomBottomControl}):0;this.type=dataObj.type;this.controller=dataObj.controller;this.expanded=false;this.currentlyAnimating=false;this.maxHeight="";this.scrollBarVisible=false;this.contentHeight;this.domScrollBarHolder=$(this.domRootEl).find(".mgr-list-item-scroll-bar").get()[0];this.domScrollBar=$(this.domScrollBarHolder).find(".scroll-bar").get()[0];this.domScrollBarUp=$(this.domScrollBarHolder).find("a.up-arrow").get()[0];this.domScrollBarDown=$(this.domScrollBarHolder).find("a.down-arrow").get()[0];this.scrollBarPadding=14;this.scrollBarHolderHeight=0;this.scrollBarSize;this.carouselOffset=0;this.numItems=this.domItems.length;this.numVisibleItems=0;this.firstVisibleItem=0;this.currentlyAnimating=false;this.playListObjects=(dataObj.initialPlaylists)?dataObj.initialPlaylists:new Array();this.playListObjectsByKey=(dataObj.initialPlaylistsByKey)?dataObj.initialPlaylistsByKey:new Array();this.uniqueCounter=1;this.domFriendPanel=$(this.domRootEl).find(".mgr-list-item-friend-panel").get()[0];return this;}
AJKPlayList.prototype={init:function(){var self=this;if(self.type=="play-lists"){if(self.playListObjects.length==0){$.each(self.domItems,function(){self.createPlaylistObj({domRootEl:this});});}
theAJKMouseMoveEvent.registerAsObserverOfType({type:"game",observer:self});self.dragDidStart=function(dataObj){if(!self.expanded){return;}
self.lastHighlightedItem="";self.savedListHolderCoords=AJKHelpers.get4CoordsOfDomEl({domEl:self.domListHolder});self.savedListHolderCoords.y2-=self.bottomControlsHeight;}
self.dragDidMove=function(dataObj){if(!self.expanded){return;}
var coords=dataObj.coords;if(coords.x>self.savedListHolderCoords.x&&coords.x<self.savedListHolderCoords.x2&&coords.y>self.savedListHolderCoords.y&&coords.y<self.savedListHolderCoords.y2){var bottomOffset=self.savedListHolderCoords.y2-coords.y+self.carouselOffset;var highlightedItem=parseInt(bottomOffset/self.controller.itemHeight);var domHighlightedItem=self.domItems[self.numItems-1-highlightedItem];if(self.lastHighlightedItem!=domHighlightedItem){$(domHighlightedItem).addClass("mgr-list-item-drag-hover");if(self.lastHighlightedItem){$(self.lastHighlightedItem).removeClass("mgr-list-item-drag-hover");}
self.lastHighlightedItem=domHighlightedItem;}}
else if(self.lastHighlightedItem){$(self.lastHighlightedItem).removeClass("mgr-list-item-drag-hover");self.lastHighlightedItem="";}}
self.dragDidEnd=function(dataObj){if(!self.expanded){return;}
var coords=dataObj.coords;var game=dataObj.data;if(coords.x>self.savedListHolderCoords.x&&coords.x<self.savedListHolderCoords.x2&&coords.y>self.savedListHolderCoords.y&&coords.y<self.savedListHolderCoords.y2){var bottomOffset=self.savedListHolderCoords.y2-coords.y+self.carouselOffset;var highlightedItem=self.numItems-1-parseInt(bottomOffset/self.controller.itemHeight);if(self.lastHighlightedItem){var playListId=$(self.lastHighlightedItem).attr("playListId");$(self.lastHighlightedItem).removeClass("mgr-list-item-drag-hover")
self.lastHighlightedItem="";var playListObj=self.playListObjectsByKey[playListId];if(!playListObj.gameArraysCreated){self.createGameArraysForPlaylistObj({playlist:playListObj});}
if(playListObj.gamesByKey[game.id]){return false;}
self.addGameToUserPlayList({game:game,playlist:playListObj});}
return true;}
else{return false;}}
self.addGameToUserPlayList=function(dataObj){var self=this;var playlist=dataObj.playlist;var game=dataObj.game;playlist.games.push(game);playlist.gamesByKey[game.id]=game;$(playlist.domNumber).text(playlist.games.length);if(playlist.tableController){playlist.tableController.createNewEntryFromGame({game:game});playlist.tableController.refreshEntries();}
theAJKAjaxController.request({action:"assets/ajax/add-game-to-user-playlist.php",method:"post",vars:{gameId:game.id,playlistId:playlist.id},callback:function(data){}});}
self.displayTableForPlaylist=function(dataObj){var thisPlaylistObj=dataObj.playlist;if(thisPlaylistObj.tableController){anAJKLibraryController.showTable({table:thisPlaylistObj.tableController});}
else{if(!thisPlaylistObj.gameArraysCreated){self.createGameArraysForPlaylistObj({playlist:thisPlaylistObj});}
thisPlaylistObj.tableController=anAJKLibraryController.createTable({genre:"play-list",tableGames:thisPlaylistObj.games,domShowButton:$(thisPlaylistObj.domRootEl).find("a.mgr-li-inner").get()[0],domNumGamesDisplayer:thisPlaylistObj.domNumber,defaultSort:"",type:"play-list",title:thisPlaylistObj.title});thisPlaylistObj.tableController.playListOwner=thisPlaylistObj;anAJKLibraryController.showTable({table:thisPlaylistObj.tableController});}}
self.createGameArraysForPlaylistObj=function(dataObj){var self=this;var playlist=dataObj.playlist;if(playlist.gameIds){$.each(playlist.gameIds,function(){playlist.games.push(anAJKLibraryController.gamesByKey[this]);playlist.gamesByKey[this]=anAJKLibraryController.gamesByKey[this];});}
playlist.gameArraysCreated=true;}
$(self.domAddButton).unbind("click").click(function(){self.createNewEntry();return false;});}
else if(self.type=="friends"){var newFriendPanel=$(self.domFriendPanel).clone();$(self.domFriendPanel).after(newFriendPanel);$(self.domFriendPanel).remove();self.domFriendPanel=newFriendPanel;if(self.playListObjects.length==0){$.each(self.domItems,function(){self.createPlaylistObj({domRootEl:this});});}
self.friendPanelController=new AJKAddFriendPanelController({domRootEl:self.domFriendPanel,controller:self,closeFunc:function(){self.closeFriendPanel();},carouselHeight:70,inviteFriendFunc:function(dataObj){self.inviteFriendForUser(dataObj);},submitFriendFunc:function(dataObj){self.createFriendForUser(dataObj);}}).init();self.inviteFriendForUser=function(dataObj){var email=dataObj.email;theAJKAjaxController.request({action:"assets/ajax/create-invitee-for-user.php",method:"post",vars:{email:email},callback:function(data){}});}
self.createFriendForUser=function(dataObj){var fieldData=dataObj.fieldData;var friendDetail=fieldData.friendDetail;var format=(AJKHelpers.isEmail({aString:friendDetail}))?"email":"username";var callback=dataObj.callback;theAJKAjaxController.request({action:"assets/ajax/create-friend-for-user.php",method:"post",vars:{friendDetail:friendDetail,format:format},callback:function(data){var dataSplit=data.split(anAJKLibraryController.fieldSeperator);if(dataSplit[0]!="failure"){var dataArray=data.split(anAJKLibraryController.fieldSeperator);var friendId=dataArray[0];var userName=dataArray[1];var userNumGames=dataArray[2];var userFriendEntryId=dataArray[3];self.createNewFriend({friendId:friendId,friendName:userName,numGames:userNumGames,friendEntryId:userFriendEntryId,callback:function(){if(self.expanded){self.windowDidResize();self.jumpToLast();}}});if(callback){callback({success:true});}}
else{if(callback){callback({success:false,error:dataSplit[1]});}}}});}
$(self.domAddButton).unbind("click").click(function(){self.launchFriendPanel();return false;});self.displayTableForFriend=function(dataObj){var thisPlaylistObj=dataObj.playlist;if(thisPlaylistObj.tableController){anAJKLibraryController.showTable({table:thisPlaylistObj.tableController});}
else{var numGames=thisPlaylistObj.numGames;var inBatchesOf=parseInt(numGames/5);inBatchesOf=(inBatchesOf<1)?1:inBatchesOf;inBatchesOf=(inBatchesOf>500)?500:inBatchesOf;var userGameLoader=new AJKLibraryLoader({fader:anAJKLibraryController.faderController,inBatchesOf:inBatchesOf,controller:anAJKLibraryController,numGames:numGames,completionPercent:100,ajaxLoadGames:{url:"assets/ajax/load-range-of-user-games.php",variables:{userId:thisPlaylistObj.friendId}},loadedCallback:function(dataObj){var initialisedGames=dataObj.games;$.each(initialisedGames,function(){this.isFriendGame=true;thisPlaylistObj.games.push(this);thisPlaylistObj.gamesByKey[this.id]=this;});thisPlaylistObj.tableController=anAJKLibraryController.createTable({genre:"friend-list",tableGames:thisPlaylistObj.games,domShowButton:$(thisPlaylistObj.domRootEl).find("a.mgr-li-inner").get()[0],domNumGamesDisplayer:thisPlaylistObj.domNumber,defaultSort:"",type:"friend-list",title:thisPlaylistObj.title});anAJKLibraryController.showTable({table:thisPlaylistObj.tableController});anAJKLibraryController.faderController.fadeOut();}}).init();}}}
$(self.domHeader).unbind("click").click(function(){self.toggle();});self.setupClickEvents();self.initialiseCarouselVars();self.initialiseScrollBar();self.refresh({instantly:true});return self;},createPlaylistObj:function(dataObj){var self=this;var domRootEl=dataObj.domRootEl;var playListId=$(domRootEl).attr("playListId");if(!playListId){playListId="awaiting-id-"+self.uniqueCounter;$(domRootEl).attr("playListId",playListId);}
var domText=$(domRootEl).find("a.mgr-li-inner strong").get()[0];var domNumber=$(domRootEl).find("a.mgr-li-inner span").get()[0];var playListObj={domRootEl:domRootEl,id:playListId,domText:domText,domNumber:domNumber,number:parseInt($(domNumber).text()),title:$(domText).text(),games:new Array(),gamesByKey:new Array(),gameArraysCreated:false,tableController:""}
self.playListObjects.push(playListObj);self.playListObjectsByKey[playListId]=playListObj;return playListObj;},purge:function(){var self=this;$(self.domRootEl).unbind();$(self.domHeader).unbind();$(self.addButton).unbind("click");$.each(self.domItems,function(){$(this).remove()});theAJKMouseMoveEvent.removeAsObserverOfType({type:"game",observer:self});$(self.domRootEl).removeClass("mgr-list-scroll");self.scrollBarVisible=false;$(self.domListStage).css({width:"100%"});$(self.domRootEl).removeClass("mgr-list-show-friend-panel");if(self.type=="friends"){self.closeFriendPanel();}},setupClickEvents:function(){var self=this;switch(self.type){case"play-lists":var multipleEventsController=new AJKMultipleEventController({domRootEl:self.domListContent,clickFunc:function(dataObj){var e=dataObj.event;var domContainer=$(e.target).parents(".mgr-list-item:first").get()[0];var playlistObject=self.playListObjectsByKey[$(domContainer).attr("playListId")];if(playlistObject){self.displayTableForPlaylist({playlist:self.playListObjectsByKey[$(domContainer).attr("playListId")]});}},clickClasses:new Array("mgr-list-item"),cancelClasses:new Array("mgr-li-input-holder"),dblClickFunc:function(dataObj){var e=dataObj.event;var domContainer=$(e.target).parents(".mgr-list-item:first").get()[0];self.makeItemEditable({domRootEl:domContainer});},dblClickClasses:new Array("mgr-li-title"),mousemoveFunc:function(dataObj){var e=dataObj.event;var dragEl=$(e.target).parents(".mgr-list-item:first").get()[0];if(dragEl){var aDraggable=new AJKDraggable({domDragEl:dragEl,clone:true,type:"play-list",data:self.playListObjectsByKey[$(dragEl).attr("playListId")],owner:self});aDraggable.initiateDrag({event:e});}},mousemoveClasses:new Array("mgr-list-item")}).init();break;case"friends":var multipleEventsController=new AJKMultipleEventController({domRootEl:self.domListContent,clickFunc:function(dataObj){var e=dataObj.event;var domPlayList=$(e.target).parents(".mgr-list-item:first").get()[0];if(domPlayList){self.displayTableForFriend({playlist:self.playListObjectsByKey[$(domPlayList).attr("playListId")]});}},clickClasses:new Array("mgr-list-item"),mousemoveFunc:function(dataObj){var e=dataObj.event;var dragEl=$(e.target).parents(".mgr-list-item:first").get()[0];if(dragEl){var aDraggable=new AJKDraggable({domDragEl:dragEl,clone:true,type:"friends",data:self.playListObjectsByKey[$(dragEl).attr("playListId")],owner:self});aDraggable.initiateDrag({event:e});}},mousemoveClasses:new Array("mgr-list-item")}).init();break;default:break;}},makeItemEditable:function(dataObj){var self=this;var domRootEl=dataObj.domRootEl;var playListId=$(domRootEl).attr("playListId");var thisPlayListObj=self.playListObjectsByKey[playListId];$(thisPlayListObj.domRootEl).addClass("mgr-list-item-editable");var domInput=$(self.controller.editableContentPrototype).clone();$(thisPlayListObj.domRootEl).append(domInput);var editableController=new AJKSingleEditableFieldController({domRootEl:domInput,initialValue:thisPlayListObj.title,cancelFunc:function(){$(domInput).remove();$(thisPlayListObj.domRootEl).removeClass("mgr-list-item-editable");},saveFunc:function(dataObj){var newText=dataObj.newText;$(domInput).remove();$(thisPlayListObj.domText).text(newText);$(thisPlayListObj.domRootEl).removeClass("mgr-list-item-editable");var updateFunc=function(){thisPlayListObj.title=newText;theAJKAjaxController.request({action:"assets/ajax/update-playlist-name.php",method:"post",vars:{playlistId:thisPlayListObj.id,newPlaylistName:newText},callback:function(data){}});}
var checkForId=function(){if(thisPlayListObj.id.indexOf("awaiting")!=-1){thisFunc=arguments.callee;setTimeout(function(){thisFunc()},100);}
else{updateFunc();}}
checkForId();}}).init();},initialiseCarouselVars:function(){var self=this;self.numVisibleItems=parseInt((this.controller.containerHeight-285-self.bottomControlsHeight)/self.controller.itemHeight);self.maxHeight=self.numVisibleItems*self.controller.itemHeight+self.bottomControlsHeight;},initialiseScrollBar:function(){var self=this;if(self.domScrollBarHolder){$(self.domScrollBarUp).unbind("click").click(function(){var newPos=self.firstVisibleItem+self.numVisibleItems;self.animateCarouselTo({position:newPos});return false;});$(self.domScrollBarDown).unbind("click").click(function(){var newPos=self.firstVisibleItem-self.numVisibleItems;self.animateCarouselTo({position:newPos});return false;});var aDraggable=new AJKDraggable({domDragEl:self.domScrollBar,limitFunc:function(){var limit={minX:0,maxX:0,minY:self.scrollBarPadding,maxY:self.scrollBarHolderHeight-self.scrollBarPadding-self.scrollBarSize}
return limit;},mouseMoveFunc:function(dataObj){var dragElPos=dataObj.dragElPos;self.updateCarouselFromScrollBarPos({scrollBarPos:dragElPos});}}).init();}},updateCarouselFromScrollBarPos:function(dataObj){var self=this;var scrollableRange=(self.scrollBarHolderHeight-2*self.scrollBarPadding);var scrollBarPos=dataObj.scrollBarPos;self.carouselOffset=Math.ceil((scrollableRange-scrollBarPos.y+self.scrollBarPadding-self.scrollBarSize)/scrollableRange*self.contentHeight);$(self.domListContent).css({bottom:-self.carouselOffset});self.firstVisibleItem=parseInt(self.carouselOffset/self.controller.itemHeight);},jumpToFirst:function(){var self=this;var newPos=self.numItems-self.numVisibleItems;self.animateCarouselTo({position:newPos,instantly:true});},jumpToLast:function(){var self=this;var newPos=0;self.animateCarouselTo({position:newPos,instantly:true});},animateCarouselTo:function(dataObj){var self=this;if(self.currentlyAnimating){return false;}
self.currentlyAnimating=true;var duration=(dataObj.instantly)?0:500;var newPos=dataObj.position;var prevPos=self.firstVisibleItem;self.firstVisibleItem=(newPos>=(self.numItems-self.numVisibleItems))?self.numItems-self.numVisibleItems:newPos;self.firstVisibleItem=(self.firstVisibleItem<0)?0:self.firstVisibleItem;if(self.firstVisibleItem!=prevPos){self.carouselOffset=self.controller.itemHeight*self.firstVisibleItem;$(self.domListContent).animate({bottom:-self.carouselOffset},duration,function(){self.currentlyAnimating=false;});var scrollBarSettings=self.calculateScrollBarSettings();$(self.domScrollBar).animate({top:scrollBarSettings.offset},duration,function(){});}
else{self.currentlyAnimating=false;}},windowDidResize:function(){var self=this;self.initialiseCarouselVars();self.refresh({instantly:true});self.expand({instantly:true});},launchFriendPanel:function(){var self=this;$(self.domRootEl).addClass("mgr-list-show-friend-panel");self.bottomControlsHeight=$(self.domFriendPanel).height();self.windowDidResize();self.friendPanelController.initialisePanel();},closeFriendPanel:function(){var self=this;$(self.domRootEl).removeClass("mgr-list-show-friend-panel");if(self.expanded){self.bottomControlsHeight=(self.sampleDomBottomControl)?AJKHelpers.calculateDomElHeight({domEl:self.sampleDomBottomControl}):0;self.windowDidResize();}},createNewFriend:function(dataObj){var self=this;var friendId=dataObj.friendId;var friendName=dataObj.friendName;var numGames=dataObj.numGames;var friendEntryId=dataObj.friendEntryId;var callback=dataObj.callback;var insertHTML=self.controller.getHTMLForFriendEntry({friendName:friendName,numGames:numGames,playlistId:friendEntryId});var anItem=$(insertHTML).get()[0];self.domItems.push(anItem);self.numItems++;$(self.domListContent).append(anItem);var thisPlaylistObj=self.createPlaylistObj({domRootEl:anItem});thisPlaylistObj.friendId=friendId;thisPlaylistObj.numGames=numGames;self.playListObjects.push(thisPlaylistObj);self.playListObjectsByKey[thisPlaylistObj.id]=thisPlaylistObj;if(self.expanded){self.refresh();}
if(callback){callback();}},deletePlaylistEntry:function(dataObj){var self=this;var playlistEntry=dataObj.playlistEntry;if(playlistEntry.tableController){playlistEntry.tableController.kill();}
self.domItems=AJKHelpers.removeItemFromArray({item:playlistEntry.domRootEl,anArray:self.domItems});self.numItems=self.domItems.length;self.playListObjectsByKey[playlistEntry.id]="";self.playListObjects=AJKHelpers.removeItemFromArray({item:playlistEntry,anArray:self.playListObjects});$(playlistEntry.domRootEl).remove();self.refresh();self.expand({instantly:true});},createNewEntry:function(dataObj){var self=this;var playlistName=(dataObj&&dataObj.playlistName)?dataObj.playlistName:"New play list "+(self.uniqueCounter++);var cancelAutoEditable=(dataObj&&dataObj.cancelAutoEditable)?dataObj.cancelAutoEditable:false;var insertHTML=self.controller.getHTMLForEntry({playlistName:playlistName,playlistId:"",type:self.type});var anItem=$(insertHTML).get()[0];self.domItems.push(anItem);self.numItems++;$(self.domListContent).append(anItem);self.refresh();self.expand({instantly:true});var thisPlaylistObj=self.createPlaylistObj({domRootEl:anItem});self.playListObjects.push(thisPlaylistObj);self.playListObjectsByKey[thisPlaylistObj.id]=thisPlaylistObj;theAJKAjaxController.request({action:"assets/ajax/create-playlist-for-user.php",method:"post",vars:{playlistName:thisPlaylistObj.title},callback:function(data){thisPlaylistObj.id=data;$(thisPlaylistObj.domRootEl).attr("playListId",data);self.playListObjectsByKey[thisPlaylistObj.id]=thisPlaylistObj;}});if(!cancelAutoEditable){self.makeItemEditable({domRootEl:thisPlaylistObj.domRootEl});}},updateScrollBar:function(){var self=this;var discrepancy=self.contentHeight-self.carouselOffset-self.stageHeight;if(discrepancy<0){var newPos=self.firstVisibleItem+parseInt(discrepancy/self.controller.itemHeight);self.animateCarouselTo({position:newPos,instantly:true});}
if(self.domScrollBarHolder){self.scrollBarHolderHeight=self.maxHeight-self.bottomControlsHeight;$(self.domScrollBarHolder).css({height:self.scrollBarHolderHeight});var scrollBarSettings=self.calculateScrollBarSettings();$(self.domScrollBar).css({height:scrollBarSettings.height,top:scrollBarSettings.offset});}},calculateScrollBarSettings:function(dataObj){var self=this;var scrollableRange=(self.scrollBarHolderHeight-2*self.scrollBarPadding);self.scrollBarSize=self.stageHeight/self.contentHeight*scrollableRange;self.scrollBarSize=(self.scrollBarSize<5)?5:self.scrollBarSize;var scrollOffset=self.scrollBarHolderHeight-self.scrollBarSize-(self.carouselOffset/self.contentHeight*scrollableRange+self.scrollBarPadding);return{offset:scrollOffset,height:self.scrollBarSize};},refresh:function(dataObj){var self=this;var duration=(dataObj&&dataObj.instantly)?0:300;self.contentHeight=self.stageHeight=$(this.domListStage).height();if(self.stageHeight>self.maxHeight){self.stageHeight=self.maxHeight;self.updateScrollBar();if(self.domScrollBarHolder){self.scrollBarVisible=true;$(self.domListStage).stop().animate({width:"87%"},duration,function(){$(self.domRootEl).addClass("mgr-list-scroll");$(self.domScrollBarHolder).stop().animate({opacity:1},duration,function(){});});}}
else if(self.scrollBarVisible){self.scrollBarVisible=false;$(self.domScrollBarHolder).stop().animate({opacity:0},duration,function(){$(self.domRootEl).removeClass("mgr-list-scroll");$(self.domListStage).stop().animate({width:"100%"},duration,function(){});});}},toggle:function(){var self=this;if(self.expanded){self.contract();}
else{self.initialiseCarouselVars();self.refresh({instantly:true});self.expand({closeOthers:true});}},expand:function(dataObj){var self=this;if(self.currentlyAnimating){return;}
self.currentlyAnimating=true;var duration=(dataObj&&dataObj.instantly)?0:self.animationDuration();var callback=(dataObj&&dataObj.callback)?dataObj.callback:"";$(self.domListHolder).animate({height:self.stageHeight},duration,"linear",function(){self.currentlyAnimating=false;self.expanded=true;self.controller.selectedPlaylist=self;$(self.domHeader).removeClass("rt-lh-sort-desc").addClass("rt-lh-sort-selected");if(callback){callback();}});if(dataObj&&dataObj.closeOthers){self.controller.closeLists({not:self});}},contract:function(dataObj){var self=this;if(self.currentlyAnimating){return;}
self.currentlyAnimating=true;var duration=(dataObj&&dataObj.instantly)?0:self.animationDuration();var callback=(dataObj&&dataObj.callback)?dataObj.callback:"";$(self.domListHolder).animate({height:0},duration,"linear",function(){self.currentlyAnimating=false;self.expanded=false;$(self.domHeader).addClass("rt-lh-sort-desc").removeClass("rt-lh-sort-selected");if(callback){callback();}});},animationDuration:function(){var self=this;return 400;return self.stageHeight*3;}}
var AJKTopLoginController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.domStage=$(this.domRootEl).find(".rt-hl-stage").get()[0];this.domUserName=$(this.domRootEl).find(".rt-hl-username").get()[0];this.domSignOutButton=$(this.domRootEl).find(".rt-hl-sign-out").get()[0];this.domSignUpButton=$(this.domRootEl).find(".rt-hl-sign-up").get()[0];this.height=$(this.domRootEl).height();this.loginVerification="";return this;}
AJKTopLoginController.prototype={init:function(){var self=this;$(this.domSignOutButton).click(function(){self.signOut();return false;});$(this.domSignUpButton).click(function(){self.signUp();return false;});self.loginVerification=new AJKVerifier({domRootEl:self.domRootEl,submitFunc:function(dataObj){theAJKAjaxController.request({action:"assets/ajax/login.php",method:"post",alwaysAllow:true,vars:dataObj.fieldData,callback:function(queryResult){var result=AJKHelpers.decipherQueryResult({queryResult:queryResult,section:"message"});if(result!="username-error"&&result!="password-error"){result=result.split(anAJKLibraryController.fieldSeperator);$(self.domUserName).text(dataObj.fieldData.username);self.scrollTo({pos:1});anAJKLibraryController.logUserIn({id:result[0],verifyCode:result[1],numGames:parseInt(result[2]),username:dataObj.fieldData.username});}
else if(result=="username-error"){self.loginVerification.errorHighlightField({fieldName:"username"});self.loginVerification.displayErrorMessage({message:"Wrong username"});}
else if(result=="password-error"){self.loginVerification.errorHighlightField({fieldName:"password"});self.loginVerification.displayErrorMessage({message:"Wrong password"});}}});}}).init();return this;},signUp:function(){var self=this;anAJKLibraryController.jumpToSignUpPanel();},signOut:function(){var self=this;self.clearFields();self.scrollTo({pos:0});anAJKLibraryController.logUserOut();},clearFields:function(){var self=this;self.loginVerification.clearFields();},scrollTo:function(dataObj){var self=this;var pos=dataObj.pos;var instantly=dataObj.instantly;var duration=(instantly)?0:500;$(self.domStage).animate({marginTop:-self.height*pos},duration,function(){});},showSignOutDetailsForUser:function(dataObj){var self=this;var username=dataObj.username;self.displayUserName({username:username});self.scrollTo({pos:1,instantly:true});},displayUserName:function(dataObj){var self=this;var username=dataObj.username;$(self.domUserName).text(username);}}
var AJKGenericContentController=function(dataObj){this.domCarouselPanel=dataObj.domCarouselPanel;this.domCarouselPanelStage=$(this.domCarouselPanel).find(".rt-content-inner").get()[0];this.domFader=$(this.domCarouselPanel).find(".rt-content-fader").get()[0];this.domButtons=dataObj.domButtons;this.carouselPanelPosition=dataObj.carouselPanelPosition;this.domBackButton=dataObj.domBackButton;this.currentReturnPos=0;this.loadedContentByKey=new Array();this.currentContent="";this.panelHeight="";this.domContentStage="";this.contentStageHeight="";this.bodyHeight="";this.awaitingContentUrl="";return this;}
AJKGenericContentController.prototype={init:function(){var self=this;anAJKMainCarouselController.registerAsControllerOfItem({controller:self,position:4});$(self.domButtons).each(function(){var returnPos=self.currentReturnPos=parseInt($(this).attr("returnPos"));var contentUrl=$(this).attr("href");$(this).click(function(){self.currentReturnPos=returnPos;self.awaitingContentUrl=contentUrl;anAJKMainCarouselController.animateTo({pos:4});return false;});});$(self.domBackButton).click(function(){self.returnFromWhenceCame();return false;});return self;},itemWillScrollIntoView:function(){var self=this;var contentUrl=self.awaitingContentUrl;if(self.loadedContentByKey[contentUrl]&&self.loadedContentByKey[contentUrl]!=self.currentContent){self.currentContent=self.loadedContentByKey[contentUrl];self.displayContent({instantly:true,content:self.loadedContentByKey[contentUrl]});}
else if(!self.loadedContentByKey[contentUrl]){$(self.domFader).css({opacity:1,display:"block"});}
self.updateScroll();},itemDidScrollIntoView:function(){var self=this;var contentUrl=self.awaitingContentUrl;if(!self.loadedContentByKey[contentUrl]){$.get(contentUrl,{},function(data){var domContent=$(data).get()[0];self.loadedContentByKey[contentUrl]=domContent;self.currentContent=self.loadedContentByKey[contentUrl];self.displayContent({content:self.loadedContentByKey[contentUrl]});});}
else{self.setUpScroll();}},itemWillScrollOutOfView:function(){var self=this;theAJKWindowScrollEvent.removeAsObserver({observer:self});theAJKWindowResizeEvent.removeAsObserver({observer:self});},returnFromWhenceCame:function(){var self=this;anAJKMainCarouselController.animateTo({pos:self.currentReturnPos});},setUpScroll:function(){var self=this;self.panelHeight=$(self.domCarouselPanel).height();self.contentHolderHeight=self.panelHeight-40;$(self.domCarouselPanel).find(".rt-generic-content").css({height:self.contentHolderHeight});self.domContentStage=$(self.domCarouselPanel).find(".rt-generic-content-stage").get()[0];self.contentStageHeight=$(self.domContentStage).height();var viewportHeight=AJKHelpers.viewportSize().height;if(self.contentStageHeight>self.contentHolderHeight){self.bodyHeight=parseInt(self.contentStageHeight/self.contentHolderHeight*viewportHeight);$("body").css({height:self.bodyHeight});theAJKWindowScrollEvent.registerAsObserver({observer:self});}
else{$("body").css({height:parseInt(viewportHeight*1.1)});theAJKWindowScrollEvent.removeAsObserver({observer:self});}},displayContent:function(dataObj){var self=this;var domContent=dataObj.content;var instantly=dataObj.instantly;var duration=(instantly)?0:500;$(self.domCarouselPanelStage).html(domContent);self.setUpScroll();$(self.domFader).animate({opacity:0},duration,function(){$(this).css({display:"none"});});theAJKWindowResizeEvent.registerAsObserver({observer:self});$(domContent).find(".rt-generic-content-menu a").click(function(){var contentUrl=$(this).attr("href");if(self.loadedContentByKey[contentUrl]!=self.currentContent){self.awaitingContentUrl=contentUrl;self.itemWillScrollIntoView();self.itemDidScrollIntoView();}
return false;});},updateScroll:function(){var self=this;window.scrollTo(0,0);if(self.domContentStage){$(self.domContentStage).css({marginTop:0});}},windowDidScroll:function(dataObj){var self=this;var windowTopOffset=dataObj.windowTopOffset;var stageOffset=parseInt(windowTopOffset/self.bodyHeight*self.contentStageHeight);$(self.domContentStage).css({marginTop:-stageOffset});},windowDidResize:function(dataObj){var self=this;self.setUpScroll();}}
var AJKSingleEditableFieldController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.domInput=$(this.domRootEl).find("input").get()[0];this.domSaveButton=$(this.domRootEl).find("a.save-button").get()[0];this.domCancelButton=$(this.domRootEl).find("a.close-button").get()[0];this.cancelFunc=dataObj.cancelFunc;this.saveFunc=dataObj.saveFunc;this.initialValue=dataObj.initialValue;}
AJKSingleEditableFieldController.prototype={init:function(){var self=this;$(this.domInput).val(self.initialValue).focus().keyup(function(e){if(e.keyCode==13){self.saveChanges({newText:$(this).val()});}});$(this.domCancelButton).click(function(){self.changesCancelled();return false;});$(this.domSaveButton).click(function(){self.saveChanges({newText:$(self.domInput).val()});return false;});return self;},changesCancelled:function(){var self=this;self.cancelFunc();},saveChanges:function(dataObj){var self=this;var newText=dataObj.newText;if(!newText||newText==self.initialValue){self.changesCancelled();}
else{self.saveFunc({newText:newText});}}}
var AJKDeleteController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.coords="";this.wasHovered=false;this.controller=dataObj.controller;return this;}
AJKDeleteController.prototype={init:function(){var self=this;theAJKMouseMoveEvent.registerAsObserverOfType({type:"game",observer:self});theAJKMouseMoveEvent.registerAsObserverOfType({type:"play-list",observer:self});theAJKMouseMoveEvent.registerAsObserverOfType({type:"friends",observer:self});return self;},dragDidStart:function(dataObj){var self=this;self.coords=AJKHelpers.get4CoordsOfDomEl({domEl:self.domRootEl});},dragDidMove:function(dataObj){var self=this;var coords=dataObj.coords;if(coords.x>self.coords.x&&coords.x<self.coords.x2&&coords.y>self.coords.y&&coords.y<self.coords.y2){$(self.domRootEl).addClass("mgr-main-bin-drag-hover");self.wasHovered=true;}
else if(self.wasHovered){$(self.domRootEl).removeClass("mgr-main-bin-drag-hover");self.wasHovered=false;}},dragDidEnd:function(dataObj){var self=this;var type=dataObj.type;var coords=dataObj.coords;var data=dataObj.data;var owner=dataObj.owner;$(self.domRootEl).removeClass("mgr-main-bin-drag-hover");if(coords.x>self.coords.x&&coords.x<self.coords.x2&&coords.y>self.coords.y&&coords.y<self.coords.y2){switch(type){case"play-list":var playlistEntry=data;self.controller.deleteUserPlaylist({playlistEntry:playlistEntry,playlist:owner});return true;break;case"friends":var friendEntry=data;self.controller.deleteUserFriend({friendEntry:friendEntry,playlist:owner});return true;break;case"game":var game=data;if(owner.type=="friend-list"){return false;}
else if(owner.type=="standard"){self.controller.deleteGameFromLibrary({game:game});return true;}
else if(owner.type=="play-list"){self.controller.deleteGameFromUserPlaylist({game:game,userPlaylist:owner.playListOwner});return true;}
break;default:break;}}}}
var AJKMultipleEventController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.clickFunc=dataObj.clickFunc;this.dblClickFunc=dataObj.dblClickFunc;this.mousemoveFunc=dataObj.mousemoveFunc;this.dblClickClasses=(dataObj.dblClickClasses)?dataObj.dblClickClasses:new Array();this.clickClasses=(dataObj.clickClasses)?dataObj.clickClasses:new Array();this.cancelClasses=(dataObj.cancelClasses)?dataObj.cancelClasses:new Array();this.mousemoveClasses=(dataObj.mousemoveClasses)?dataObj.mousemoveClasses:new Array();this.shouldWeTestForMousemove=false;this.shouldWeTestForDblClick=false;this.shouldWeTestForClick=false;return this;}
AJKMultipleEventController.prototype={init:function(){var self=this;$(self.domRootEl).each(function(){var cancelNextClick=false;$(this).unbind("mousedown").mousedown(function(e){if(cancelNextClick){cancelNextClick=false;return false;}
if(self.checkForClasses({event:e,classes:self.cancelClasses})){return true;}
var hasMouseUpped=false;var mouseMoveFunc,mouseUpFunc;if(self.dblClickFunc&&self.checkForClasses({event:e,classes:self.dblClickClasses})){self.shouldWeTestForDblClick=true;}
else{self.shouldWeTestForDblClick=false;}
if(self.mousemoveFunc&&self.checkForClasses({event:e,classes:self.mousemoveClasses})){self.shouldWeTestForMousemove=true;}
else{self.shouldWeTestForMousemove=false;}
if(self.clickFunc&&self.checkForClasses({event:e,classes:self.clickClasses})){self.shouldWeTestForClick=true;}
else{self.shouldWeTestForClick=false;}
if(self.shouldWeTestForMousemove){setTimeout(function(){$(document).mousemove(mouseMoveFunc=function(){$(document).unbind("mouseup",mouseUpFunc);$(document).unbind("mousemove",mouseMoveFunc);if(!hasMouseUpped){hasMouseUpped=true;self.mousemoveFunc({event:e});}});},200);}
$(document).mouseup(mouseUpFunc=function(){hasMouseUpped=true;$(document).unbind("mouseup",mouseUpFunc);if(self.shouldWeTestForDblClick){$(e.target).mousedown(function(){clearTimeout(dbClickTimeout);$(this).unbind("mousedown");cancelNextClick=true;self.dblClickFunc({event:e});setTimeout(function(){cancelNextClick=false;},10);return false;});var dbClickTimeout=setTimeout(function(){$(e.target).unbind("mousedown");if(self.shouldWeTestForClick){self.clickFunc({event:e});}},300);}
else if(self.shouldWeTestForClick){self.clickFunc({event:e});}});return false;}).click(function(){return false;});});return self;},checkForClasses:function(dataObj){var self=this;var event=dataObj.event;var classes=dataObj.classes;var numClasses=classes.length;for(var counter=0;counter<numClasses;counter++){if(event.target.className.indexOf(classes[counter])!=-1||$(event.target).parents("."+classes[counter]).get()[0]){return true;}}
return false;}}
var AJKButtonPopupController=function(dataObj){this.domButtons=dataObj.domButtons;this.buttonPopups=new Array();this.buttonPopupsByKey=new Array();this.selectedPopup="";this.observers=new Array();}
AJKButtonPopupController.prototype={init:function(){var self=this;$(self.domButtons).each(function(){var popupId=$(this).attr("popupId");var aButtonPopup=new AJKButtonPopup({domRootEl:$("#"+popupId).get()[0],domButton:this,controller:self,id:popupId}).init();self.buttonPopups.push(aButtonPopup);self.buttonPopupsByKey[popupId]=aButtonPopup;$(this).click(function(){if(self.selectedPopup==aButtonPopup){aButtonPopup.hide();self.popupDidClose();}
else{aButtonPopup.display();if(self.selectedPopup){self.selectedPopup.hide();self.popupDidClose();}
self.selectedPopup=aButtonPopup;self.popupDidOpen();}
return false;});});return self;},popupDidOpen:function(){var self=this;if(self.observers[self.selectedPopup.id]){$.each(self.observers[self.selectedPopup.id],function(){if(this.buttonPopupDidOpen){this.buttonPopupDidOpen({popup:self.selectedPopup});}});}
theAJKKeyEvent.registerAsObserver({observer:self});},popupDidClose:function(){var self=this;if(self.observers[self.selectedPopup.id]){$.each(self.observers[self.selectedPopup.id],function(){if(this.buttonPopupDidClose){this.buttonPopupDidClose({popup:self.selectedPopup});}});}
self.selectedPopup="";theAJKKeyEvent.removeAsObserver({observer:self});},registerAsObserverOfType:function(dataObj){var self=this;var type=dataObj.type;var observer=dataObj.observer;if(!self.observers[type]){self.observers[type]=new Array();}
self.observers[type].push(observer);},keyEventTooPlace:function(dataObj){var self=this;var key=dataObj.key;if(key==27&&self.selectedPopup){self.selectedPopup.hide();self.popupDidClose();}},forceOpenPopupOfType:function(dataObj){var self=this;var type=dataObj.type;if(!self.buttonPopupsByKey[type].open){$(self.buttonPopupsByKey[type].domButton).click();}},forceClosePopupOfType:function(dataObj){var self=this;var type=dataObj.type;if(self.buttonPopupsByKey[type].open){$(self.buttonPopupsByKey[type].domButton).click();}}}
var AJKButtonPopup=function(dataObj){this.domRootEl=dataObj.domRootEl;this.domButton=dataObj.domButton;this.id=dataObj.id;this.domCloseButtons=$(this.domRootEl).find("a.close").get();this.observers=new Array();this.open=false;this.controller=dataObj.controller;this.animateStartBotton=-200;this.animateEndBotton=-10;}
AJKButtonPopup.prototype={init:function(){var self=this;$(self.domCloseButtons).click(function(){self.hide();self.controller.popupDidClose();return false;});return self;},display:function(){var self=this;$(self.domRootEl).css({opacity:0,bottom:self.animateStartBotton,display:"block"}).animate({bottom:self.animateEndBotton,opacity:1},250,function(){});self.open=true;},hide:function(){var self=this;$(self.domRootEl).animate({bottom:self.animateStartBotton,opacity:0},250,function(){$(this).css({display:"none"});});self.open=false;}}
var AJKPopupCreatePlaylistController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.controller=dataObj.controller;this.verification="";this.buttonPopupId=dataObj.buttonPopupId;}
AJKPopupCreatePlaylistController.prototype={init:function(){var self=this;if(self.buttonPopupId){theAJKButtonPopupController.registerAsObserverOfType({type:self.buttonPopupId,observer:self});self.buttonPopupDidClose=function(){self.reset();}}
self.verification=new AJKVerifier({domRootEl:self.domRootEl,submitFunc:function(dataObj){var playlistMenu=self.controller.playListController.playListsByKey["play-lists"];var fieldData=dataObj.fieldData;self.verification.clearFields();var createFunc=function(){playlistMenu.createNewEntry({cancelAutoEditable:true,playlistName:fieldData.playlistName});}
if(!playlistMenu.expanded){playlistMenu.expand({closeOthers:true,callback:function(){createFunc();}});}
else{createFunc();}}}).init();return self;},reset:function(){var self=this;self.verification.clearFields();}}
var AJKAddFriendPanelController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.buttonPopupId=dataObj.buttonPopupId;this.domStage=$(this.domRootEl).find(".fp-stage").get()[0];this.controller=dataObj.controller;this.friendDetailVerification="";this.closeFunc=dataObj.closeFunc;this.submitFriendFunc=dataObj.submitFriendFunc;this.inviteFriendFunc=dataObj.inviteFriendFunc;this.domBlocks=$(this.domRootEl).find(".fp-block").get();this.selectedBlock=0;this.carouselHeight=dataObj.carouselHeight;this.domEmailFriendBlock=$(this.domRootEl).find(".fp-block-4").get()[0];this.domEmailFriendInput=$(this.domEmailFriendBlock).find("input").get()[0];this.domStartBlock=$(this.domRootEl).find(".fp-block-0").get()[0];this.domStartInput=$(this.domStartBlock).find("input").get()[0];}
AJKAddFriendPanelController.prototype={init:function(){var self=this;if(self.buttonPopupId){theAJKButtonPopupController.registerAsObserverOfType({type:self.buttonPopupId,observer:self});self.buttonPopupDidClose=function(){self.reset();}}
$(self.domBlocks[0]).css({display:"block"});$(self.domRootEl).find("a.cancel-button").click(function(){self.closeFunc();self.reset();return false;});$(self.domRootEl).find("a.jump-to").click(function(){var jumpPos=parseInt($(this).attr("jumpTo"));if(jumpPos==4){var callback=function(){$(self.domEmailFriendInput).focus();};}
else if(jumpPos==0){var callback=function(){$(self.domStartInput).focus();};}
else{var callback="";}
self.jumpTo({pos:jumpPos,callback:callback});return false;});self.friendDetailVerification=new AJKVerifier({domRootEl:self.domStartBlock,submitFunc:function(dataObj){self.jumpTo({pos:1,callback:function(){dataObj.callback=function(data){var success=data.success;if(success){var playlistMenu=anAJKLibraryController.playListController.playListsByKey["friends"];if(!playlistMenu.expanded){playlistMenu.expand({closeOthers:true,callback:function(){playlistMenu.windowDidResize();playlistMenu.jumpToLast();}});}
self.resetFields();self.jumpTo({pos:6});}
else{var error=data.error;if(error=="user-already-friend"){self.jumpTo({pos:2});}
else{var userInput=dataObj.fieldData.friendDetail;if(AJKHelpers.isEmail({aString:userInput})){$(self.domEmailFriendInput).attr("value",userInput);}
else{$(self.domEmailFriendInput).attr("value","");}
self.jumpTo({pos:3});}}}
self.submitFriendFunc(dataObj);}});}}).init();self.friendEmailVerification=new AJKVerifier({domRootEl:self.domEmailFriendBlock,submitFunc:function(dataObj){self.inviteFriendFunc({email:dataObj.fieldData.friendEmail});self.jumpTo({pos:5});}}).init();return self;},initialisePanel:function(){var self=this;$(self.domStartInput).focus();},jumpTo:function(dataObj){var self=this;var newPos=dataObj.pos;var callback=dataObj.callback;var duration=(dataObj.instantly)?0:300;if(self.selectedBlock==newPos){return;}
var oldPos=self.selectedBlock;self.selectedBlock=newPos;if(newPos>oldPos){$(self.domBlocks[newPos]).css({display:"block"});$(self.domStage).animate({marginTop:-self.carouselHeight},duration,function(){$(self.domBlocks[oldPos]).css({display:"none"});$(this).css({marginTop:"0"});if(callback){callback();}});}
else{$(self.domBlocks[newPos]).css({display:"block"});$(self.domStage).css({marginTop:-self.carouselHeight});$(self.domStage).animate({marginTop:0},duration,function(){$(self.domBlocks[oldPos]).css({display:"none"});if(callback){callback();}});}},reset:function(){var self=this;self.jumpTo({pos:0,instantly:true});self.resetFields();},resetFields:function(){var self=this;self.friendDetailVerification.clearFields();self.friendDetailVerification.clearAllErrors();self.friendEmailVerification.clearFields();self.friendEmailVerification.clearAllErrors();}}
var AJKGameInfoController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.domCarouselPanel=dataObj.domRootEl;this.domCarouselPanelStage=$(this.domCarouselPanel).find(".rt-content-inner").get()[0];this.domButtons=dataObj.domButtons;this.domMainInfoBlock=$(this.domRootEl).find(".main-info-block").get()[0];this.domGameName=$(this.domRootEl).find(".main-info-block .headline-holder h3 span").get()[0];this.domGameRating=$(this.domRootEl).find(".main-info-block .rating").get()[0];this.domGameCategory=$(this.domRootEl).find(".main-info-block .description-col .category").get()[0];this.domGameAuthor=$(this.domRootEl).find(".main-info-block .description-col .author").get()[0];this.domGameCreated=$(this.domRootEl).find(".main-info-block .description-col .created").get()[0];this.domGameUpdated=$(this.domRootEl).find(".main-info-block .description-col .updated").get()[0];this.domGameSuitability=$(this.domRootEl).find(".main-info-block .description-col .suitability").get()[0];this.domGameInstructions=$(this.domRootEl).find(".main-info-block .instructions-col .instructions").get()[0];this.domGameDescription=$(this.domRootEl).find(".main-info-block .description-col .description").get()[0];this.domGameImage=$(this.domRootEl).find(".main-info-block .img-holder img").get()[0];this.domGameInfoTablesBlock=$(this.domRootEl).find(".mgr-game-info-tables-block").get()[0];this.domRankingTable=$(this.domRootEl).find(".mgr-list-gi-ranking-table").get()[0];this.domOverallRank=$(this.domRankingTable).find(".mgr-list-item:eq(0) span").get()[0];this.domPlayedRank=$(this.domRankingTable).find(".mgr-list-item:eq(1) span").get()[0];this.domUserVoteRank=$(this.domRankingTable).find(".mgr-list-item:eq(2) span").get()[0];this.domUserLibraryRank=$(this.domRankingTable).find(".mgr-list-item:eq(3) span").get()[0];this.domPlayedNum=$(this.domRankingTable).find(".mgr-list-item:eq(4) span").get()[0];this.domUserVotesNum=$(this.domRankingTable).find(".mgr-list-item:eq(5) span").get()[0];this.domUserLibraryNum=$(this.domRankingTable).find(".mgr-list-item:eq(6) span").get()[0];this.domLeaderBoardTable=$(this.domRootEl).find(".mgr-list-gi-leaderboard").get()[0];this.domLeaderBoardTableStageContent=$(this.domLeaderBoardTable).find(".mgr-list-item-content").get()[0];this.domCommentTable=$(this.domRootEl).find(".mgr-list-gi-comments").get()[0];this.domCommentContentStage=$(this.domCommentTable).find(".mgr-list-item-content").get()[0];this.domCommentTotalTexts=$(this.domCommentTable).find(".rt-lh-options .comment-total").get();this.domCommentRangeTexts=$(this.domCommentTable).find(".rt-lh-options .comment-range").get();this.domFader=$(this.domRootEl).find(".rt-content-fader").get()[0];this.lastCategoryClass="";this.lastJumpToComments="";this.gameToShow="";this.backToPos=1;this.selectedGame="";this.controller=dataObj.controller;this.popupAddGameCommentController="";this.commentEventsController="";this.currentlyLoadingComments=false;this.gameRatingController="";this.popupAddGameToLibraryController="";this.popupTellFriendController="";}
AJKGameInfoController.prototype={init:function(){var self=this;anAJKMainCarouselController.registerAsControllerOfItem({controller:self,position:3});self.popupTellFriendController=new AJKPopupTellFriendController({controller:self,domRootEl:$("#mgr-button-popup-gi-tell-friend").get()[0],buttonPopupId:"mgr-button-popup-gi-tell-friend"}).init();self.popupAddGameToLibraryController=new AJKPopupAddGameToLibraryController({controller:self,domRootEl:$("#mgr-button-popup-gi-add-to-library").get()[0],buttonPopupId:"mgr-button-popup-gi-add-to-library",addGameFunc:function(){anAJKLibraryController.addGameToUserLibrary({game:self.gameToShow});}}).init();self.popupAddGameCommentController=new AJKPopupAddGameCommentController({controller:self,domRootEl:$("#mgr-button-popup-gi-comment").get()[0],buttonPopupId:"mgr-button-popup-gi-comment"}).init();self.gameRatingController=new AJKGameRatingController({domRootEl:$("#mgr-button-popup-gi-rate-game").get()[0]}).init();$(self.domCommentTable).find(".rt-lh-options a").click(function(){switch($(this).attr("option")){case"new-comment":self.popupAddGameCommentController.nextCommentWillNotBeAReply();break;case"show-more":if(self.gameToShow.numComments>self.gameToShow.comments.length){self.showMoreComments();}
else{AJKHelpers.jiggleDomEl({domEl:this,displacementFactor:3});}
break;}
return false;});$(self.domButtons).click(function(){var action=$(this).attr("option");switch(action){case"back-to-previous":self.backToPrevious();break;case"play-now":self.controller.loadGame({returnToPos:3,game:self.gameToShow});break;}
return false;});self.commentEventsController=new AJKCommentEventsController({domRootEl:self.domCommentContentStage,controller:self}).init();return self;},getSelectedGame:function(){var self=this;return self.gameToShow;},showMoreComments:function(){var self=this;if(self.currentlyLoadingComments){return false;}
self.currentlyLoadingComments=true;self.gameToShow.loadComments({start:0,limit:10,callback:function(dataObj){var newlyLoadedComments=dataObj.newlyLoadedComments;var insertHTML=self.generateCommentHTML({comments:newlyLoadedComments});$(self.domCommentContentStage).append(insertHTML);self.updateCommentDetails();self.setUpScroll();self.currentlyLoadingComments=false;}});},refreshForGame:function(dataObj){var self=this;var game=dataObj.game;if(self.gameToShow==game){self.refresh();}},refresh:function(){var self=this;self.prepareForGame({game:self.gameToShow,backToPos:self.backToPos,jumpToComments:self.lastJumpToComments});},commentReplyInitiated:function(dataObj){var self=this;var commentId=dataObj.commentId;var commentDom=dataObj.commentDom;var comment=self.gameToShow.commentsByKey[commentId];self.popupAddGameCommentController.nextCommentWillBeAReply({replyComment:comment});},commentWasVotedDown:function(dataObj){var self=this;var commentId=dataObj.commentId;var commentDom=dataObj.commentDom;var comment=self.gameToShow.commentsByKey[commentId];if(!comment.votedOn&&comment.userId!=anAJKLibraryController.user.id){comment.votedOn=true;comment.points--;$(commentDom).find(".comment-points h3").text(comment.points);theAJKCommentController.saveCommentVotedDown({comment:comment});}
else{AJKHelpers.jiggleDomEl({domEl:$(commentDom).find(".comment-vote-down-arrow").get()[0],displacementFactor:5});}},commentWasVotedUp:function(dataObj){var self=this;var commentId=dataObj.commentId;var commentDom=dataObj.commentDom;var comment=self.gameToShow.commentsByKey[commentId];if(!comment.votedOn&&comment.userId!=anAJKLibraryController.user.id){comment.votedOn=true;comment.points++;$(commentDom).find(".comment-points h3").text(comment.points);theAJKCommentController.saveCommentVotedUp({comment:comment});}
else{AJKHelpers.jiggleDomEl({domEl:$(commentDom).find(".comment-vote-up-arrow").get()[0],displacementFactor:5});}},commentWasAdded:function(dataObj){var self=this;comment=dataObj.comment;if(comment.type=="game"&&comment.associatedId==self.gameToShow.id){self.jumpToComments({callback:function(){var newCommentBlock=theAJKCommentController.getCommentHTML(comment);newCommentBlock=$(newCommentBlock).get()[0];$(newCommentBlock).css({opacity:0,position:"relative",top:-9999});$(self.domCommentContentStage).prepend(newCommentBlock);var blockHeight=$(newCommentBlock).height();$(newCommentBlock).css({height:0,top:0}).animate({height:blockHeight},300,function(){$(this).css({height:"auto"}).animate({opacity:1},500,function(){self.setUpScroll();});});AJKHelpers.waitForId({anObject:comment,callback:function(){$(newCommentBlock).attr("commentId",comment.id);}});self.updateCommentDetails();}});}},jumpToComments:function(dataObj){var self=this;var instantly=(dataObj&&dataObj.instantly)?dataObj.instantly:false;var callback=(dataObj&&dataObj.callback)?dataObj.callback:false;var duration=(instantly)?500:0;if(self.contentStageHeight<self.contentHolderHeight){if(callback){callback();}
return;}
var topOffset=$(self.domGameInfoTablesBlock).height()+$(self.domMainInfoBlock).height()+45;topOffset=(topOffset>self.contentStageHeight-self.contentHolderHeight)?self.contentStageHeight-self.contentHolderHeight:topOffset;var bodyTopOffset=topOffset/self.contentStageHeight*$("body").height();$(self.domContentStage).animate({marginTop:-topOffset},300,function(){window.scrollTo(0,bodyTopOffset);if(callback){callback();}});},prepareForGame:function(dataObj){var self=this;self.gameToShow=dataObj.game;var game=self.gameToShow;self.backToPos=(dataObj.backToPos)?dataObj.backToPos:self.backToPos;var jumpToComments=dataObj.jumpToComments;self.lastJumpToComments=jumpToComments;theBookmarkController.setUrlTo({url:"game-info:"+self.gameToShow.id});self.gameRatingController.initialiseWithNewGame({game:game});if(jumpToComments){$(this.domGameInfoTablesBlock).addClass("mgr-info-table-block-slider").css({height:0});}
else{$(this.domGameInfoTablesBlock).removeClass("mgr-info-table-block-slider").css({height:"auto"});}
var dataLoadedFunc=function(){$(self.domRootEl).removeClass(self.lastCategoryClass);self.lastCategoryClass="mgr-game-info-page-"+game.cssClass;$(self.domRootEl).addClass(self.lastCategoryClass);$(self.domGameName).text(game.name);$(self.domGameRating).text(game.recommendation);$(self.domGameCategory).text(game.cssClass);$(self.domGameAuthor).text(game.author);$(self.domGameCreated).text(AJKHelpers.prettyDateFromMySQLDate({dateString:game.extraData.created}));$(self.domGameUpdated).text(AJKHelpers.prettyDateFromMySQLDate({dateString:game.extraData.updated}));$(self.domGameInstructions).text(game.extraData.instructions);$(self.domGameDescription).text(game.extraData.description);$(self.domGameSuitability).text(game.extraData.suitability);$(self.domGameImage).attr("src",game.extraData.thumbnail_url);var newImage=$('<img src="'+game.extraData.thumbnail_url+'" alt="'+game.name+'" />').get()[0]
$(self.domGameImage).after(newImage).remove();self.domGameImage=newImage;$(self.domOverallRank).text(game.extraData.overallRank);$(self.domPlayedRank).text(game.extraData.playedRank);$(self.domUserVoteRank).text(game.extraData.userVotesRank);$(self.domUserLibraryRank).text(game.extraData.libraryRank);$(self.domPlayedNum).text(game.extraData.playedNum);$(self.domUserVotesNum).text(game.recommendation);$(self.domUserLibraryNum).text(game.extraData.libraryNum);$(self.domLeaderBoardTableStageContent).empty().css({opacity:0});var generateLeaderBoard=function(){if(game.leaderboardData&&game.leaderboardData!=-1){var userScoreFound=false;var insertHTML="";$.each(game.leaderboardData,function(){if(this.userId==anAJKLibraryController.user.id){userScoreFound=true;}
insertHTML+=theAJKGameHighScoreController.generateHTMLForScore({scoreObj:this,highlightId:anAJKLibraryController.user.id});});if(!userScoreFound&&game.usersLeaderboardData[anAJKLibraryController.user.id]){insertHTML+=theAJKGameHighScoreController.generateHTMLForScore({scoreObj:game.usersLeaderboardData[anAJKLibraryController.user.id],highlightId:anAJKLibraryController.user.id});}
$(self.domLeaderBoardTableStageContent).html(insertHTML);}
else{$(self.domLeaderBoardTableStageContent).html('<div class="mgr-list-item"><p class="mgr-li-inner">No leaderboard data available for this game</p></div>');}}
if(!game.leaderboardData){game.loadLeaderboardData({start:0,limit:10,callback:function(){generateLeaderBoard();$(self.domLeaderBoardTableStageContent).animate({opacity:1},500);},userDataId:anAJKLibraryController.user.id});}
else{generateLeaderBoard();$(self.domLeaderBoardTableStageContent).css({opacity:1});}
var generateComments=function(){self.updateCommentDetails();if(game.comments){var insertHTML=self.generateCommentHTML();$(self.domCommentContentStage).html(insertHTML);self.setUpScroll();}
else{$(self.domCommentContentStage).html("");}
self.updateCommentDetails();}
if(!game.comments){game.loadComments({start:0,limit:10,callback:function(){generateComments();}});}
else{generateComments();}}
if(!game.extraData){$(self.domFader).css({opacity:1,display:"block"});game.getDataForInfoPanel({callback:function(){dataLoadedFunc();$(self.domFader).animate({opacity:0},500,function(){$(this).css({display:"none"});});}});}
else{$(self.domFader).css({display:"none"});dataLoadedFunc();}},generateCommentHTML:function(dataObj){var self=this;var comments=(dataObj&&dataObj.comments)?dataObj.comments:self.gameToShow.comments;var insertHTML="";$.each(comments,function(){insertHTML+=theAJKCommentController.getCommentHTML({id:this.id,title:this.title,body:this.body,date:this.date,numReplies:this.numReplies,points:this.points,username:this.username});});return insertHTML;},updateCommentDetails:function(){var self=this;var game=self.gameToShow;var commentRange=(game.comments)?"1-"+game.comments.length:"0";$(self.domCommentRangeTexts).text(commentRange);$(self.domCommentTotalTexts).text(game.numComments);},itemWillScrollIntoView:function(){var self=this;self.updateScroll();},itemWillScrollOutOfView:function(){var self=this;theAJKWindowScrollEvent.removeAsObserver({observer:self});theAJKWindowResizeEvent.removeAsObserver({observer:self});theAJKCommentController.removeAsObserver({observer:self});},itemDidScrollIntoView:function(){var self=this;self.setUpScroll();theAJKWindowResizeEvent.registerAsObserver({observer:self});theAJKCommentController.registerAsObserver({observer:self});},backToPrevious:function(){var self=this;anAJKMainCarouselController.animateTo({pos:self.backToPos});},setUpScroll:function(){var self=this;self.panelHeight=$(self.domCarouselPanel).height();self.contentHolderHeight=self.panelHeight-40;$(self.domCarouselPanel).find(".rt-generic-content").css({height:self.contentHolderHeight});self.domContentStage=$(self.domCarouselPanel).find(".rt-generic-content-stage").get()[0];self.contentStageHeight=$(self.domContentStage).height();var viewportHeight=AJKHelpers.viewportSize().height;if(self.contentStageHeight>self.contentHolderHeight){self.bodyHeight=parseInt(self.contentStageHeight/self.contentHolderHeight*viewportHeight);$("body").css({height:self.bodyHeight});theAJKWindowScrollEvent.registerAsObserver({observer:self});}
else{$("body").css({height:parseInt(viewportHeight*1.1)});theAJKWindowScrollEvent.removeAsObserver({observer:self});}},updateScroll:function(){var self=this;window.scrollTo(0,0);if(self.domContentStage){$(self.domContentStage).css({marginTop:0});}},windowDidScroll:function(dataObj){var self=this;var windowTopOffset=dataObj.windowTopOffset;var stageOffset=parseInt(windowTopOffset/self.bodyHeight*self.contentStageHeight);$(self.domContentStage).css({marginTop:-stageOffset});},windowDidResize:function(dataObj){var self=this;self.setUpScroll();}}
var AJKPopupAddGameCommentController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.buttonPopupId=dataObj.buttonPopupId;this.verfication="";this.controller=dataObj.controller;this.status="closed";this.isAReply=false;this.showComments=dataObj.showComments;this.domCommentsContainer=dataObj.domCommentsContainer;this.contentScrollerController="";this.currentlyLoadingComments=false;this.domGameName=$(this.domRootEl).find(".game-name").get()[0];this.domCommentTotalTexts=$(this.domRootEl).find(".rt-lh-options .comment-total").get()[0];this.domCommentRangeTexts=$(this.domRootEl).find(".rt-lh-options .comment-range").get()[0];}
AJKPopupAddGameCommentController.prototype={init:function(){var self=this;if(self.buttonPopupId){theAJKButtonPopupController.registerAsObserverOfType({type:self.buttonPopupId,observer:self});self.buttonPopupDidClose=function(){self.reset();self.status="closed";self.isAReply=false;if(self.showComments){theAJKCommentController.removeAsObserver({observer:self});}}
self.buttonPopupDidOpen=function(){self.status="open";if(self.showComments){theAJKCommentController.registerAsObserver({observer:self});self.loadAndDisplayCommentsForGame({game:self.controller.getSelectedGame()});}}}
if(self.showComments){self.contentScrollerController=new AJKContentScrollerController({domRootEl:$(self.domRootEl).find(".carousel").get()[0]}).init();$(self.domRootEl).find(".rt-lh-options a").click(function(){switch($(this).attr("option")){case"show-more":var game=self.controller.getSelectedGame();if(game.numComments>game.comments.length){self.showMoreComments();}
else{AJKHelpers.jiggleDomEl({domEl:this,displacementFactor:3});}
break;}
return false;});}
self.verification=new AJKVerifier({domRootEl:self.domRootEl,submitFunc:function(dataObj){dataObj.game=self.controller.gameToShow;theAJKCommentController.createComment({type:"game",associatedObject:self.controller.getSelectedGame(),commentTitle:dataObj.fieldData.commentTitle,commentBody:dataObj.fieldData.commentBody});self.verification.clearFields();}}).init();return self;},displayOrFlashPanel:function(){var self=this;if(self.status=="open"){AJKHelpers.flashDomEl({domEl:$("#"+self.buttonPopupId).get()[0]});}
else{theAJKButtonPopupController.forceOpenPopupOfType({type:self.buttonPopupId});}},showMoreComments:function(){var self=this;if(self.currentlyLoadingComments){return false;}
self.currentlyLoadingComments=true;var game=self.controller.getSelectedGame();game.loadComments({start:0,limit:10,callback:function(dataObj){var newlyLoadedComments=dataObj.newlyLoadedComments;var insertHTML=self.generateCommentHTML({comments:newlyLoadedComments});$(self.domCommentsContainer).append(insertHTML);self.updateCommentDetails();self.contentScrollerController.enable();self.currentlyLoadingComments=false;}});},generateCommentHTML:function(dataObj){var self=this;var comments=dataObj.comments;var insertHTML="";$.each(comments,function(){insertHTML+=theAJKCommentController.getCommentHTML({id:this.id,title:this.title,body:this.body,date:this.date,numReplies:this.numReplies,points:this.points,username:this.username,smallDate:true});});return insertHTML;},updateCommentDetails:function(){var self=this;var game=self.controller.getSelectedGame();var commentRange=(game.comments)?"1-"+game.comments.length:"0";$(self.domCommentRangeTexts).text(commentRange);$(self.domCommentTotalTexts).text(game.numComments);},loadAndDisplayCommentsForGame:function(dataObj){var self=this;self.contentScrollerController.reset();var game=dataObj.game;if(!game.comments){self.currentlyLoadingComments=true;game.loadComments({limit:10,callback:function(){self.displayCommentsForGame({game:game});self.currentlyLoadingComments=false;}});}
else{self.displayCommentsForGame({game:game});}
$(self.domGameName).text(game.name);},displayCommentsForGame:function(dataObj){var self=this;var game=dataObj.game;var insertHTML=self.generateCommentHTML({comments:game.comments});$(self.domCommentsContainer).html(insertHTML);self.contentScrollerController.enable();self.updateCommentDetails();},commentWasAdded:function(dataObj){var self=this;comment=dataObj.comment;if(comment.type=="game"&&comment.associatedId==self.controller.getSelectedGame().id){self.contentScrollerController.animateToTop({callback:function(){var newCommentBlock=theAJKCommentController.getCommentHTML(comment);newCommentBlock=$(newCommentBlock).get()[0];$(newCommentBlock).css({opacity:0,position:"relative",top:-9999});$(self.domCommentsContainer).prepend(newCommentBlock);var blockHeight=$(newCommentBlock).height();$(newCommentBlock).css({height:0,top:0}).animate({height:blockHeight},300,function(){self.contentScrollerController.enable();$(this).css({height:"auto"}).animate({opacity:1},500,function(){});});AJKHelpers.waitForId({anObject:comment,callback:function(){$(newCommentBlock).attr("commentId",comment.id);}});self.updateCommentDetails();}});}},nextCommentWillBeAReply:function(dataObj){var self=this;self.displayOrFlashPanel();self.isAReply=true;self.replyComment=dataObj.replyComment;},nextCommentWillNotBeAReply:function(dataObj){var self=this;self.displayOrFlashPanel();self.isAReply=false;self.replyComment="";},reset:function(){var self=this;self.resetFields();self.verification.clearAllErrors();},resetFields:function(){var self=this;self.verification.clearFields();},closePopup:function(){var self=this;theAJKButtonPopupController.forceClosePopupOfType({type:self.buttonPopupId});if(self.showComments){self.contentScrollerController.reset();$(self.domCommentsContainer).empty();}}}
var AJKCommentController=function(){this.observers=new Array();return this;}
AJKCommentController.prototype={init:function(){var self=this;return self;},createComment:function(dataObj){var self=this;var associatedObject=dataObj.associatedObject;var aComment={type:dataObj.type,id:"awaiting",title:dataObj.commentTitle,body:dataObj.commentBody,date:new Date(),numReplies:0,points:0,username:anAJKLibraryController.user.username,userId:anAJKLibraryController.user.id,replies:new Array(),repliesByKey:new Array(),replyToId:dataObj.replyToId,associatedId:associatedObject.id,votedOn:false}
theAJKAjaxController.request({action:"assets/ajax/save-game-comment.php",method:"post",alwaysAllow:true,vars:{type:aComment.type,associatedId:aComment.associatedId,commentTitle:aComment.title,commentBody:aComment.body,username:aComment.username,replyToId:aComment.replyToId},callback:function(data){aComment.id=data;}});if(associatedObject.commentWasAdded){associatedObject.commentWasAdded({comment:aComment});}
self.informObservers({comment:aComment});},saveCommentVotedDown:function(dataObj){var self=this;var comment=dataObj.comment;theAJKAjaxController.request({action:"assets/ajax/save-comment-vote-down.php",method:"post",vars:{commentId:comment.id},callback:function(data){}});},saveCommentVotedUp:function(dataObj){var self=this;var comment=dataObj.comment;theAJKAjaxController.request({action:"assets/ajax/save-comment-vote-up.php",method:"post",vars:{commentId:comment.id},callback:function(data){}});},getCommentHTML:function(dataObj,modificationsObj){var title=dataObj.title;var body=dataObj.body.replace(/\n/g,"<br />");var username=dataObj.username;var points=dataObj.points;var date=dataObj.date;var numReplies=dataObj.numReplies;var commentId=dataObj.id;var smallDate=dataObj.smallDate;var insertHTML='<div class="mgr-list-item mgr-list-item-comment" commentId="'+commentId+'">';insertHTML+='<div class="mgr-li-inner">';insertHTML+='<div class="comment-vote-block">';insertHTML+='<a href="#" option="vote-up" class="comment-vote-arrow comment-vote-up-arrow">up</a>';insertHTML+='<a href="#" option="vote-down" class="comment-vote-arrow comment-vote-down-arrow">down</a>';insertHTML+='<div class="comment-points">';insertHTML+='<h3>'+points+'</h3>';insertHTML+='<p>Points</p>';insertHTML+='</div>';insertHTML+='</div>';insertHTML+='<div class="comment-content">';insertHTML+='<h4>'+title+'</h4>';insertHTML+='<p class="comment-body">'+body+'</p>';insertHTML+='<div class="comment-details highlight">';insertHTML+='<p class="comment-username highlight">'+username+'</p>';insertHTML+='<p class="comment-time">'+AJKHelpers.prettyTimeFromDate({date:date})+" "+AJKHelpers.prettyDateFromDate({date:date,smallDate:smallDate})+'</p>';insertHTML+='</div>';insertHTML+='</div>';insertHTML+='<div class="comment-button-holder">';insertHTML+='<a href="#" option="reply" class="rt-mp-small-button">Reply</a>';insertHTML+='<a href="#" option="show-replies" class="rt-mp-small-button rt-mp-small-button-wide">Show replies ('+numReplies+')</a>';insertHTML+='<div class="clear"></div>';insertHTML+='</div>';insertHTML+='</div>';insertHTML+='</div>';return insertHTML;},informObservers:function(dataObj){var self=this;$.each(self.observers,function(){if(this.commentWasAdded){this.commentWasAdded(dataObj);}});},registerAsObserver:function(dataObj){var self=this;var observer=dataObj.observer;self.observers=AJKHelpers.removeItemFromArray({anArray:self.observers,item:observer})
self.observers.push(observer);},removeAsObserver:function(dataObj){var self=this;var observer=dataObj.observer;self.observers=AJKHelpers.removeItemFromArray({anArray:self.observers,item:observer})}}
var AJKCommentEventsController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.controller=dataObj.controller;}
AJKCommentEventsController.prototype={init:function(){var self=this;$(self.domRootEl).click(function(e){var selectedOption=$(e.target).attr("option");if(selectedOption){var holderEl=$(e.target).parents(".mgr-list-item-comment:first").get()[0];var commentId=$(holderEl).attr("commentId");switch(selectedOption){case"reply":self.controller.commentReplyInitiated({commentId:commentId,commentDom:holderEl});break;case"show-replies":break;case"vote-up":self.controller.commentWasVotedUp({commentId:commentId,commentDom:holderEl});break;case"vote-down":self.controller.commentWasVotedDown({commentId:commentId,commentDom:holderEl});break;}}
return false;});return self;}}
var AJKGameRatingController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.domRatingMessage=$(this.domRootEl).find(".rating-message").get()[0];this.domStarHolder=$(this.domRootEl).find(".star-holder").get()[0];this.game="";this.domStars=$(this.domRootEl).find(".star").get();}
AJKGameRatingController.prototype={init:function(){var self=this;$(self.domStars).hover(function(){if(!self.game.userRating){var rating=parseInt($(this).attr("rating"));for(var counter=0;counter<(rating-1);counter++){$(self.domStars[counter]).addClass("star-show");}
$(this).addClass("star-selected");}},function(){if(!self.game.userRating){$(self.domStars).removeClass("star-show").removeClass("star-selected");}}).click(function(){if(!self.game.userRating){var rating=parseInt($(this).attr("rating"));self.game.userRating=rating;for(var counter=0;counter<(rating-1);counter++){$(self.domStars[counter]).find(".voted-colour").animate({opacity:1},300,function(){});}
$(self.domRatingMessage).find("span").text(rating).end().animate({opacity:1},300,function(){});$(self.domStarHolder).addClass("star-holder-deactivated");theAJKAjaxController.request({action:"assets/ajax/user-rated-game.php",method:"post",vars:{gameId:self.game.id,rating:rating},callback:function(data){}});}});return this;},initialiseWithNewGame:function(dataObj){var self=this;self.game=dataObj.game;if(self.game.isFriendGame){self.game.userRating=0;}
$(self.domStars).removeClass("star-show").removeClass("star-selected");$(self.domStars).find(".voted-colour").remove().end().prepend('<div class="voted-colour highlight-block"></div>');if(!self.game.userRating){$(self.domRatingMessage).css({opacity:0});$(self.domStarHolder).removeClass("star-holder-deactivated");}
else{$(self.domRatingMessage).css({opacity:1}).find("span").text(self.game.userRating);for(var counter=0;counter<self.game.userRating;counter++){$(self.domStars[counter]).addClass("star-selected");}
$(self.domStarHolder).addClass("star-holder-deactivated");}}}
var AJKPopupAddGameToLibraryController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.domAddedMessage=$(this.domRootEl).find("p.added-message").get()[0];this.domAlreadyAddedMessage=$(this.domRootEl).find("p.already-added-message").get()[0];this.controller=dataObj.controller;this.buttonPopupId=dataObj.buttonPopupId;this.status="closed";this.closeTimer="";this.addGameFunc=dataObj.addGameFunc;}
AJKPopupAddGameToLibraryController.prototype={init:function(){var self=this;if(self.buttonPopupId){theAJKButtonPopupController.registerAsObserverOfType({type:self.buttonPopupId,observer:self});self.buttonPopupDidClose=function(){self.status="closed";self.clearTimer();}
self.buttonPopupDidOpen=function(){self.clearTimer();var game=self.controller.getSelectedGame();if(!anAJKLibraryController.gamesByKey[game.id]){self.addGameFunc();$(this.domAddedMessage).css({display:"bock"}).find("span").text(game.name);$(this.domAlreadyAddedMessage).css({display:"none"});}
else{$(this.domAddedMessage).css({display:"none"});$(this.domAlreadyAddedMessage).css({display:"block"}).find("span").text(game.name);}
self.status="open";self.closeTimer=setTimeout(function(){theAJKButtonPopupController.forceClosePopupOfType({type:self.buttonPopupId});},2500);}}
return self;},clearTimer:function(){var self=this;if(self.closeTimer){clearTimeout(self.closeTimer);self.closeTimer="";}}}
var AJKPopupTellFriendController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.controller=dataObj.controller;this.buttonPopupId=dataObj.buttonPopupId;this.verification="";}
AJKPopupTellFriendController.prototype={init:function(){var self=this;if(self.buttonPopupId){theAJKButtonPopupController.registerAsObserverOfType({type:self.buttonPopupId,observer:self});self.buttonPopupDidClose=function(){self.reset();}}
self.verification=new AJKVerifier({domRootEl:self.domRootEl,submitFunc:function(dataObj){var fieldData=dataObj.fieldData;self.verification.clearFields();var game=self.controller.getSelectedGame();theAJKAjaxController.request({action:"assets/ajax/email-game-info-to-user-friend.php",method:"post",alwaysAllow:true,vars:{email:fieldData.email,gameId:game.id},callback:function(data){}});}}).init();return self;},reset:function(){var self=this;self.verification.clearFields();self.verification.clearAllErrors();}}
var AJKGameDisplayController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.domOptions=$(this.domRootEl).find(".option-holder").get();this.controller=dataObj.controller;this.optionFunc=dataObj.optionFunc;this.lastSelectedOption="";this.domExpanded=$(this.domRootEl).find(".expanded").get()[0];this.domMinimised=$(this.domRootEl).find(".minimised").get()[0];this.fullScreenOn=false;this.expanded=true;this.domExpandButton=$(this.domMinimised).find("a").get()[0];this.domCloseButton=$(this.domExpanded).find("a.close").get()[0];}
AJKGameDisplayController.prototype={init:function(){var self=this;var aDraggable=new AJKDraggable({domDragEl:self.domRootEl,clone:false,type:"game-display-controller",data:"",owner:self}).init();$(this.domExpandButton).click(function(){if(!self.expanded){self.expand();}
return false;});$(this.domCloseButton).click(function(){if(self.expanded){self.close();}
return false;});$(this.domOptions).click(function(){var selectedOption=$(this).attr("option");if(selectedOption=="full-screen"){if(self.fullScreenOn){$(this).find(".option").text("Off");$(this).removeClass("option-holder-selected");self.fullScreenOn=false;}
else{$(this).find(".option").text("On");$(this).addClass("option-holder-selected");self.fullScreenOn=true;}
self.optionFunc({option:$(this).attr("option")});}
else{if(selectedOption!=self.lastSelectedOption){self.lastSelectedOption=selectedOption;$(self.domOptions).removeClass("option-holder-selected");$(this).addClass("option-holder-selected");self.optionFunc({option:$(this).attr("option")});}}
return false;});return self;},expand:function(){var self=this;$(self.domExpanded).css({display:"block"});$(self.domMinimised).css({display:"none"});self.expanded=true;},close:function(){var self=this;$(self.domExpanded).css({display:"none"});$(self.domMinimised).css({display:"block"});self.expanded=false;}}
var AJKGameHighScoreController=function(dataObj){}
AJKGameHighScoreController.prototype={init:function(){var self=this;return self;},generateHTMLForScore:function(dataObj){var self=this;var scoreObj=dataObj.scoreObj;var highlightId=dataObj.highlightId;var insertHTML='<div class="mgr-list-item">';if(scoreObj.userId==highlightId){userScoreFound=true;insertHTML+='<p class="mgr-li-inner highlight">'+scoreObj.position+'.  '+scoreObj.name+'<span class="highlight">'+scoreObj.score+'</span></p>';}
else{insertHTML+='<p class="mgr-li-inner">'+scoreObj.position+'.  '+scoreObj.name+'<span>'+scoreObj.score+'</span></p>';}
insertHTML+='</div>';return insertHTML;}}
var AJKGameHighScorePopupController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.domStage=$(this.domRootEl).find(".mgr-list-item-holder").get()[0];this.domGameName=$(this.domRootEl).find(".game-name").get()[0];this.controller=dataObj.controller;this.buttonPopupId=dataObj.buttonPopupId;this.status=closed;this.selectedGame="";}
AJKGameHighScorePopupController.prototype={init:function(){var self=this;if(self.buttonPopupId){theAJKButtonPopupController.registerAsObserverOfType({type:self.buttonPopupId,observer:self});self.buttonPopupDidClose=function(){self.status="closed";}
self.buttonPopupDidOpen=function(){self.status="open";var aGame=self.controller.getSelectedGame();if(self.selectedGame!=aGame){self.selectedGame=aGame;$(self.domGameName).text(aGame.name);if(!aGame.leaderboardData){aGame.loadLeaderboardData({callback:function(){self.displayHighScoresForGame({game:aGame});},start:0,limit:10,userDataId:anAJKLibraryController.user.id});}
else{self.displayHighScoresForGame({game:aGame});}}}}
return self;},refresh:function(){var self=this;self.displayHighScoresForGame({game:self.controller.getSelectedGame()});},displayHighScoresForGame:function(dataObj){var self=this;var game=dataObj.game;if(game.leaderboardData&&game.leaderboardData!=-1){$(self.domStage).empty();var userScoreFound=false;var insertHTML="";$.each(game.leaderboardData,function(){if(this.userId==anAJKLibraryController.user.id){userScoreFound=true;}
insertHTML+=theAJKGameHighScoreController.generateHTMLForScore({scoreObj:this,highlightId:anAJKLibraryController.user.id});});if(!userScoreFound&&game.usersLeaderboardData[anAJKLibraryController.user.id]){insertHTML+=theAJKGameHighScoreController.generateHTMLForScore({scoreObj:game.usersLeaderboardData[anAJKLibraryController.user.id],highlightId:anAJKLibraryController.user.id});}
$(self.domStage).html(insertHTML);}
else{$(self.domStage).html('<div class="mgr-list-item"><p class="mgr-li-inner">No leaderboard data available for this game</p></div>');}},closePopup:function(){var self=this;theAJKButtonPopupController.forceClosePopupOfType({type:self.buttonPopupId});}}
var AJKContentScrollerController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.domStage=$(this.domRootEl).find(".carousel-stage").get()[0];this.domScrollHolder=$(this.domRootEl).find(".carousel-scroll-holder").get()[0];this.domScrollBar=$(this.domRootEl).find(".scroll-bar").get()[0];this.domUpArrow=$(this.domRootEl).find(".up-arrow").get()[0];this.domDownArrow=$(this.domRootEl).find(".down-arrow").get()[0];this.carouselHeight=0;this.stageHeight=0;this.topOffset=0;this.carouselWidth=0;this.arrowPadding=14;this.scrollBarHeight=0;this.scrollDragInitialised=false;this.domScrollBarUp=$(this.domScrollHolder).find("a.up-arrow").get()[0];this.domScrollBarDown=$(this.domScrollHolder).find("a.down-arrow").get()[0];this.currentlyScrolling=false;this.idealCarouselHeight=0;}
AJKContentScrollerController.prototype={init:function(){var self=this;$(self.domScrollBarUp).unbind("click").click(function(){self.scrollUp();return false;});$(self.domScrollBarDown).unbind("click").click(function(){self.scrollDown();return false;});return self;},reset:function(){var self=this;self.topOffset=0;$(self.domStage).css({top:0});$(self.domScrollBar).css({top:self.arrowPadding});},enable:function(){var self=this;self.carouselHeight=$(self.domRootEl).height();if(self.carouselHeight&&!self.idealCarouselHeight){self.idealCarouselHeight=self.carouselHeight;}
self.carouselWidth=$(self.domRootEl).width();self.stageHeight=$(self.domStage).height();if(self.stageHeight<self.idealCarouselHeight){self.carouselHeight=self.stageHeight;}
else{self.carouselHeight=self.idealCarouselHeight;}
$(self.domRootEl).css({height:self.carouselHeight});if(self.stageHeight>self.carouselHeight){self.displayScroller();if(!self.scrollDragInitialised){self.scrollDragInitialised=true;var aDraggable=new AJKDraggable({domDragEl:self.domScrollBar,limitFunc:function(){var limit={minX:0,maxX:0,minY:self.arrowPadding,maxY:self.carouselHeight-self.arrowPadding-self.scrollBarHeight}
return limit;},mouseMoveFunc:function(dataObj){var dragElPos=dataObj.dragElPos;self.updateCarouselFromScrollBarPos({scrollBarPos:dragElPos});}}).init();}}
else{self.hideScroller();}},animateToTop:function(dataObj){var self=this;var callback=(dataObj)?dataObj.callback:"";self.animateToPos({pos:0,callback:function(){if(callback){callback();}}});},animateToPos:function(dataObj){var self=this;if(self.currentlyScrolling){return;}
self.currentlyScrolling=true;var instantly=(dataObj)?dataObj.instantly:"";var duration=(instantly)?0:300;var callback=(dataObj)?dataObj.callback:"";self.topOffset=dataObj.pos;var scrollTopOffset=(self.topOffset/(self.stageHeight-self.carouselHeight)*(self.carouselHeight-2*self.arrowPadding-self.scrollBarHeight))+self.arrowPadding;$(self.domStage).animate({top:-self.topOffset},duration,function(){self.currentlyScrolling=false;if(callback){callback();}});$(self.domScrollBar).animate({top:scrollTopOffset},duration,function(){});},scrollUp:function(){var self=this;self.topOffset=self.topOffset-self.carouselHeight;self.topOffset=(self.topOffset<0)?0:self.topOffset;self.animateToPos({pos:self.topOffset});},scrollDown:function(){var self=this;self.topOffset=self.topOffset+self.carouselHeight;self.topOffset=(self.topOffset>(self.stageHeight-self.carouselHeight))?self.stageHeight-self.carouselHeight:self.topOffset;self.animateToPos({pos:self.topOffset});},displayScroller:function(){var self=this;$(self.domScrollHolder).css({display:"block",height:self.carouselHeight});$(self.domStage).css({width:self.carouselWidth-20});self.scrollBarHeight=self.carouselHeight/self.stageHeight*(self.carouselHeight-(self.arrowPadding*2));self.scrollBarHeight=(self.scrollBarHeight<20)?20:self.scrollBarHeight;var scrollTopOffset=(self.topOffset/(self.stageHeight-self.carouselHeight)*(self.carouselHeight-2*self.arrowPadding-self.scrollBarHeight))+self.arrowPadding;$(self.domScrollBar).css({top:scrollTopOffset,height:self.scrollBarHeight});},hideScroller:function(){var self=this;$(self.domScrollHolder).css({display:"none"});$(self.domStage).css({width:self.carouselWidth});},updateCarouselFromScrollBarPos:function(dataObj){var self=this;var scrollBarPos=dataObj.scrollBarPos;var carouselTopOffset=(scrollBarPos.y-self.arrowPadding)/(self.carouselHeight-self.scrollBarHeight-2*self.arrowPadding);self.topOffset=carouselTopOffset*(self.stageHeight-self.carouselHeight);$(self.domStage).css({top:-self.topOffset});}}
var AJKStatusBarController=function(dataObj){this.domRootEl=dataObj.domRootEl;this.breadcrumb={domRootCrumb:$(dataObj.domRootEl).find(".mgr-breadcrumb .root a").get()[0],domSubsetHolder:$(dataObj.domRootEl).find(".mgr-breadcrumb .subset").get()[0],domSubsetCrumb:$(dataObj.domRootEl).find(".mgr-breadcrumb .subset span.bc-library").get()[0]}
this.search={domInput:$(dataObj.domRootEl).find(".mgr-breadcrumb .search-box input").get()[0],domSubmit:$(dataObj.domRootEl).find(".mgr-breadcrumb .search-box a").get()[0],domFilterHolder:$(dataObj.domRootEl).find(".mgr-breadcrumb .filter-text").get()[0],domFilterClear:$(dataObj.domRootEl).find(".mgr-breadcrumb .filter-text a").get()[0],domFilterTerm:$(dataObj.domRootEl).find(".mgr-breadcrumb .filter-text .bc-search-term").get()[0]}
this.currentTable="";this.searchVerification="";this.rootTable="";this.controller=dataObj.controller;this.faderController="";}
AJKStatusBarController.prototype={init:function(){var self=this;$(self.breadcrumb.domRootCrumb).click(function(){if(self.currentTable.type!="friend-list"&&self.currentTable.type!="shop"){self.rootTable.clearFilter();self.controller.showTable({table:self.rootTable});}
return false;});self.faderController=new AJKContentFaderController({domRootEl:$(self.domRootEl).find(".rt-sb-fader").get()[0]}).init();self.searchVerification=new AJKVerifier({domRootEl:self.domRootEl,submitFunc:function(dataObj){$(self.search.domInput).blur();self.searchVerification.clearFields();var searchTerm=dataObj.fieldData.search;self.faderController.display();self.currentTable.filterBy({searchTerm:searchTerm,fader:self.faderController});}}).init();$(self.search.domFilterClear).click(function(){self.currentTable.clearFilter();$(self.search.domFilterHolder).css({display:"none"});return false;});return this;},setRootTable:function(dataObj){var self=this;self.rootTable=dataObj.table;},updateStatusFromTable:function(dataObj){var self=this;var table=dataObj.table;self.currentTable=table;if(table.type=="standard"||table.type=="play-list"){var rootName="All My Games";}
else if(table.type=="friend-list"){var rootName=table.title+"'s Games";}
if(table.genre=="all"||table.genre=="friend-list"){var subsetName="";}
else{var subsetName=table.title;}
var filter=table.filter;$(self.breadcrumb.domRootCrumb).text(rootName);if(subsetName){$(self.breadcrumb.domSubsetHolder).css({display:"inline"});$(self.breadcrumb.domSubsetCrumb).text(subsetName);}
else{$(self.breadcrumb.domSubsetHolder).css({display:"none"});}
if(filter){$(self.search.domFilterHolder).css({display:"inline"});$(self.search.domFilterTerm).text(filter);}
else{$(self.search.domFilterHolder).css({display:"none"});}}}
var BookmarkController=function(dataObj){this.domIFrame=dataObj.domIFrame;this.initialUrl=dataObj.initialUrl;this.urlChangedFunc=dataObj.urlChangedFunc;this.currentUrl=this.initialUrl;this.historyStack=new Array();this.historyPosition=0;this.enabled=true;this.programmaticURLChange=false;}
BookmarkController.prototype={init:function(){var self=this;if(QMBrowserDetect.browser=="Explorer"&&0){$(this.domIFrame).load(function(){$(this).unbind("load").load(function(){if(self.programmaticURLChange){self.programmaticURLChange=false;return;}
self.currentUrl=$(this.contentWindow.document).find("body").text();if(!self.currentUrl){self.currentUrl=initialUrl;}
window.location.hash=self.currentUrl;self.urlChangedFunc({newUrl:self.currentUrl});self.urlChangedTo({newUrl:self.currentUrl,changedBy:"back-button"});});});}
else{setTimeout(function(){if(window.location.hash!=self.currentUrl&&self.enabled){self.urlChangedFunc({newUrl:window.location.hash});self.urlChangedTo({newUrl:window.location.hash,changedBy:"back-button"});}
var thisFunc=arguments.callee;setTimeout(function(){thisFunc();},100);},5);}
return self;},urlChangedTo:function(dataObj){var self=this;var changedBy=dataObj.changedBy;var newUrl=dataObj.newUrl;if(this.currentUrl!=newUrl){if(changedBy&&changedBy=="back-button"){this.historyPosition--;}
else{this.historyStack[++this.historyPosition]=newUrl;if(QMBrowserDetect.browser=="Explorer"&&0){this.programmaticURLChange=true;this.domIFrame.contentWindow.document.open();this.domIFrame.contentWindow.document.write("<html><body>"+newUrl+"</body></html>");this.domIFrame.contentWindow.document.close();}}}
this.currentUrl=newUrl;},setUrlTo:function(dataObj){var newUrl=dataObj.url;var displayUrl="/"+newUrl+"/";window.location.hash=displayUrl;this.urlChangedTo({newUrl:"#"+displayUrl});},enable:function(){this.enabled=true;},disable:function(){this.enabled=false;},isValidurl:function(dataObj){}}
var anAJKLibraryController,anAJKMainCarouselController,anAJKMainPanelController,theAJKWindowResizeEvent,theAJKAjaxController,theAJKKeyEvent,theAJKCommentController,theAJKGameHighScoreController,theBookmarkController;$(document).ready(function(){window.scrollTo(0,0);if((QMBrowserDetect.browser=="Explorer"&&QMBrowserDetect.version<7)||window.location.hash=="#explorer"){$("body").empty();var insertHTML='<div class="ie-upgrade">';insertHTML+='<h3>Sorry, this site does not currently <br />support Internet Explorer 7 or below</h3>';insertHTML+="<p>We are working on providing support for Internet Explorer 7 in the near future but we aren't quite ready yet. But our site works perfectly with most other browsers. So if you want to play some of the best games on the web, download one of the following browsers:</p>";insertHTML+='<ul>';insertHTML+='<li><a href="http://www.apple.com/safari/download/">Safari</a></li>';insertHTML+='<li><a href="http://www.google.com/chrome/">Chrome</a></li>';insertHTML+='<li><a href="http://www.mozilla.com/en-US/firefox/firefox.html">Firefox</a></li>';insertHTML+='</h3>';insertHTML+='</div>';$("body").html(insertHTML);}
else{var domRateGamePopup=$("#mgr-button-popup-gi-rate-game").clone().get()[0];$(domRateGamePopup).attr("id","mgr-button-popup-fl-rate-game");$("#mgr-flash-holder").find(".mgr-fl-popup-holder").append(domRateGamePopup);var domAddToLibraryPopup=$("#mgr-button-popup-gi-add-to-library").clone().get()[0];$(domAddToLibraryPopup).attr("id","mgr-button-popup-fl-add-to-library");$("#mgr-flash-holder").find(".mgr-fl-popup-holder").append(domAddToLibraryPopup);var domTellFriendPopup=$("#mgr-button-popup-gi-tell-friend").clone().get()[0];$(domTellFriendPopup).attr("id","mgr-button-popup-fl-tell-friend");$("#mgr-flash-holder").find(".mgr-fl-popup-holder").append(domTellFriendPopup);theBookmarkController=new BookmarkController({domIFrame:"",initialUrl:window.location.hash,urlChangedFunc:function(){}}).init();theAJKWindowResizeEvent=new AJKWindowResizeEvent().init();theAJKWindowScrollEvent=new AJKWindowScrollEvent().init();theAJKMouseMoveEvent=new AJKMouseMoveEvent().init();theAJKKeyEvent=new AJKKeyEvent().init();theAJKCommentController=new AJKCommentController().init();theAJKGameHighScoreController=new AJKGameHighScoreController().init();theAJKButtonPopupController=new AJKButtonPopupController({domButtons:$(".mgr-button-popup-button").get()}).init();theAJKAjaxController=new AJKAjaxController().init();anAJKMainCarouselController=new AJKMainCarouselController({domRootEl:$(".rt-main-carousel").get()[0]}).init();anAJKLibraryController=new AJKLibraryController({domRootEl:$("#mgr-library-container").get()[0]}).init();anAJKMainPanelController=new AJKMainPanelController({domRootEl:$(".rt-main-panel").get()[0]}).init();}});