/*
 * jQuery JavaScript Library v1.3.2
 * http://jquery.com/
 *
 * Copyright (c) 2009 John Resig
 * Dual licensed under the MIT and GPL licenses.
 * http://docs.jquery.com/License
 *
 * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009)
 * Revision: 6246
 */
(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F<J;F++){var G=M[F];if(G.selected){K=o(G).val();if(H){return K}L.push(K)}}return L}return(E.value||"").replace(/\r/g,"")}return g}if(typeof K==="number"){K+=""}return this.each(function(){if(this.nodeType!=1){return}if(o.isArray(K)&&/radio|checkbox/.test(this.type)){this.checked=(o.inArray(this.value,K)>=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),this.length>1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H<I;H++){if((G=arguments[H])!=null){for(var F in G){var K=J[F],L=G[F];if(J===L){continue}if(E&&L&&typeof L==="object"&&!L.nodeType){J[F]=o.extend(E,K||(L.length!=null?[]:{}),L)}else{if(L!==g){J[F]=L}}}}}return J};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,q=document.defaultView||{},s=Object.prototype.toString;o.extend({noConflict:function(E){l.$=p;if(E){l.jQuery=y}return o},isFunction:function(E){return s.call(E)==="[object Function]"},isArray:function(E){return s.call(E)==="[object Array]"},isXMLDoc:function(E){return E.nodeType===9&&E.documentElement.nodeName!=="HTML"||!!E.ownerDocument&&o.isXMLDoc(E.ownerDocument)},globalEval:function(G){if(G&&/\S/.test(G)){var F=document.getElementsByTagName("head")[0]||document.documentElement,E=document.createElement("script");E.type="text/javascript";if(o.support.scriptEval){E.appendChild(document.createTextNode(G))}else{E.text=G}F.insertBefore(E,F.firstChild);F.removeChild(E)}},nodeName:function(F,E){return F.nodeName&&F.nodeName.toUpperCase()==E.toUpperCase()},each:function(G,K,F){var E,H=0,I=G.length;if(F){if(I===g){for(E in G){if(K.apply(G[E],F)===false){break}}}else{for(;H<I;){if(K.apply(G[H++],F)===false){break}}}}else{if(I===g){for(E in G){if(K.call(G[E],E,G[E])===false){break}}}else{for(var J=G[0];H<I&&K.call(J,H,J)!==false;J=G[++H]){}}}return G},prop:function(H,I,G,F,E){if(o.isFunction(I)){I=I.call(H,F)}return typeof I==="number"&&G=="curCSS"&&!b.test(E)?I+"px":I},className:{add:function(E,F){o.each((F||"").split(/\s+/),function(G,H){if(E.nodeType==1&&!o.className.has(E.className,H)){E.className+=(E.className?" ":"")+H}})},remove:function(E,F){if(E.nodeType==1){E.className=F!==g?o.grep(E.className.split(/\s+/),function(G){return !o.className.has(F,G)}).join(" "):""}},has:function(F,E){return F&&o.inArray(E,(F.className||F).toString().split(/\s+/))>-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+"></"+T+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!O.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!O.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!O.indexOf("<td")||!O.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!O.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!o.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/<tbody/i.test(S),N=!O.indexOf("<table")&&!R?L.firstChild&&L.firstChild.childNodes:Q[1]=="<table>"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E<F;E++){if(H[E]===G){return E}}return -1},merge:function(H,E){var F=0,G,I=H.length;if(!o.support.getAll){while((G=E[F++])!=null){if(G.nodeType!=8){H[I++]=G}}}else{while((G=E[F++])!=null){H[I++]=G}}return H},unique:function(K){var F=[],E={};try{for(var G=0,H=K.length;G<H;G++){var J=o.data(K[G]);if(!E[J]){E[J]=true;F.push(K[G])}}}catch(I){F=K}return F},grep:function(F,J,E){var G=[];for(var H=0,I=F.length;H<I;H++){if(!E!=!J(F[H],H)){G.push(F[H])}}return G},map:function(E,J){var F=[];for(var G=0,H=E.length;G<H;G++){var I=J(E[G],G);if(I!=null){F[F.length]=I}}return F.concat.apply([],F)}});var C=navigator.userAgent.toLowerCase();o.browser={version:(C.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(C),opera:/opera/.test(C),msie:/msie/.test(C)&&!/opera/.test(C),mozilla:/mozilla/.test(C)&&!/(compatible|webkit)/.test(C)};o.each({parent:function(E){return E.parentNode},parents:function(E){return o.dir(E,"parentNode")},next:function(E){return o.nth(E,2,"nextSibling")},prev:function(E){return o.nth(E,2,"previousSibling")},nextAll:function(E){return o.dir(E,"nextSibling")},prevAll:function(E){return o.dir(E,"previousSibling")},siblings:function(E){return o.sibling(E.parentNode.firstChild,E)},children:function(E){return o.sibling(E.firstChild)},contents:function(E){return o.nodeName(E,"iframe")?E.contentDocument||E.contentWindow.document:o.makeArray(E.childNodes)}},function(E,F){o.fn[E]=function(G){var H=o.map(this,F);if(G&&typeof G=="string"){H=o.multiFilter(G,H)}return this.pushStack(o.unique(H),E,G)}});o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(E,F){o.fn[E]=function(G){var J=[],L=o(G);for(var K=0,H=L.length;K<H;K++){var I=(K>0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}});
/*
 * Sizzle CSS Selector Engine - v0.9.3
 *  Copyright 2009, The Dojo Foundation
 *  Released under the MIT, BSD, and GPL Licenses.
 *  More information: http://sizzlejs.com/
 */
(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa<ab.length;aa++){if(ab[aa]===ab[aa-1]){ab.splice(aa--,1)}}}}}return ab};F.matches=function(T,U){return F(T,null,null,U)};F.find=function(aa,T,ab){var Z,X;if(!aa){return[]}for(var W=0,V=I.order.length;W<V;W++){var Y=I.order[W],X;if((X=I.match[Y].exec(aa))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){X[1]=(X[1]||"").replace(/\\/g,"");Z=I.find[Y](X,T,ab);if(Z!=null){aa=aa.replace(I.match[Y],"");break}}}}if(!Z){Z=T.getElementsByTagName("*")}return{set:Z,expr:aa}};F.filter=function(ad,ac,ag,W){var V=ad,ai=[],aa=ac,Y,T,Z=ac&&ac[0]&&Q(ac[0]);while(ad&&ac.length){for(var ab in I.filter){if((Y=I.match[ab].exec(ad))!=null){var U=I.filter[ab],ah,af;T=false;if(aa==ai){ai=[]}if(I.preFilter[ab]){Y=I.preFilter[ab](Y,aa,ag,ai,W,Z);if(!Y){T=ah=true}else{if(Y===true){continue}}}if(Y){for(var X=0;(af=aa[X])!=null;X++){if(af){ah=U(af,Y,X,aa);var ae=W^!!ah;if(ag&&ah!=null){if(ae){T=true}else{aa[X]=false}}else{if(ae){ai.push(af);T=true}}}}}if(ah!==g){if(!ag){aa=ai}ad=ad.replace(I.match[ab],"");if(!T){return[]}break}}}if(ad==V){if(T==null){throw"Syntax error, unrecognized expression: "+ad}else{break}}V=ad}return aa};var I=F.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF_-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF_-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF_-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*_-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+-]*)\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF_-]|\\.)+)(?:\((['"]*)((?:\([^\)]+\)|[^\2\(\)]*)+)\2\))?/},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(T){return T.getAttribute("href")}},relative:{"+":function(aa,T,Z){var X=typeof T==="string",ab=X&&!/\W/.test(T),Y=X&&!ab;if(ab&&!Z){T=T.toUpperCase()}for(var W=0,V=aa.length,U;W<V;W++){if((U=aa[W])){while((U=U.previousSibling)&&U.nodeType!==1){}aa[W]=Y||U&&U.nodeName===T?U||false:U===T}}if(Y){F.filter(T,aa,true)}},">":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){var W=Y.parentNode;Z[V]=W.nodeName===U?W:false}}}else{for(var V=0,T=Z.length;V<T;V++){var Y=Z[V];if(Y){Z[V]=X?Y.parentNode:Y.parentNode===U}}if(X){F.filter(U,Z,true)}}},"":function(W,U,Y){var V=L++,T=S;if(!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("parentNode",U,V,W,X,Y)},"~":function(W,U,Y){var V=L++,T=S;if(typeof U==="string"&&!U.match(/\W/)){var X=U=Y?U:U.toUpperCase();T=P}T("previousSibling",U,V,W,X,Y)}},find:{ID:function(U,V,W){if(typeof V.getElementById!=="undefined"&&!W){var T=V.getElementById(U[1]);return T?[T]:[]}},NAME:function(V,Y,Z){if(typeof Y.getElementsByName!=="undefined"){var U=[],X=Y.getElementsByName(V[1]);for(var W=0,T=X.length;W<T;W++){if(X[W].getAttribute("name")===V[1]){U.push(X[W])}}return U.length===0?null:U}},TAG:function(T,U){return U.getElementsByTagName(T[1])}},preFilter:{CLASS:function(W,U,V,T,Z,aa){W=" "+W[1].replace(/\\/g,"")+" ";if(aa){return W}for(var X=0,Y;(Y=U[X])!=null;X++){if(Y){if(Z^(Y.className&&(" "+Y.className+" ").indexOf(W)>=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return U<T[3]-0},gt:function(V,U,T){return U>T[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W<T;W++){if(Y[W]===Z){return false}}return true}}}},CHILD:function(T,W){var Z=W[1],U=T;switch(Z){case"only":case"first":while(U=U.previousSibling){if(U.nodeType===1){return false}}if(Z=="first"){return true}U=T;case"last":while(U=U.nextSibling){if(U.nodeType===1){return false}}return true;case"nth":var V=W[2],ac=W[3];if(V==1&&ac==0){return true}var Y=W[0],ab=T.parentNode;if(ab&&(ab.sizcache!==Y||!T.nodeIndex)){var X=0;for(U=ab.firstChild;U;U=U.nextSibling){if(U.nodeType===1){U.nodeIndex=++X}}ab.sizcache=Y}var aa=T.nodeIndex-ac;if(V==0){return aa==0}else{return(aa%V==0&&aa/V>=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V<T;V++){U.push(X[V])}}else{for(var V=0;X[V];V++){U.push(X[V])}}}return U}}var G;if(document.documentElement.compareDocumentPosition){G=function(U,T){var V=U.compareDocumentPosition(T)&4?-1:U===T?0:1;if(V===0){hasDuplicate=true}return V}}else{if("sourceIndex" in document.documentElement){G=function(U,T){var V=U.sourceIndex-T.sourceIndex;if(V===0){hasDuplicate=true}return V}}else{if(document.createRange){G=function(W,U){var V=W.ownerDocument.createRange(),T=U.ownerDocument.createRange();V.selectNode(W);V.collapse(true);T.selectNode(U);T.collapse(true);var X=V.compareBoundaryPoints(Range.START_TO_END,T);if(X===0){hasDuplicate=true}return X}}}}(function(){var U=document.createElement("form"),V="script"+(new Date).getTime();U.innerHTML="<input name='"+V+"'/>";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="<a href='#'></a>";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="<p class='TEST'></p>";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="<div class='test e'></div><div class='test'></div>";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1&&!ac){T.sizcache=Y;T.sizset=W}if(T.nodeName===Z){X=T;break}T=T[U]}ad[W]=X}}}function S(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W<V;W++){var T=ad[W];if(T){if(ab&&T.nodeType===1){T.sizcache=Y;T.sizset=W}T=T[U];var X=false;while(T){if(T.sizcache===Y){X=ad[T.sizset];break}if(T.nodeType===1){if(!ac){T.sizcache=Y;T.sizset=W}if(typeof Z!=="string"){if(T===Z){X=true;break}}else{if(F.filter(Z,[T]).length>0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z<U;Z++){F(T,V[Z],W)}return F.filter(X,W)};o.find=F;o.filter=F.filter;o.expr=F.selectors;o.expr[":"]=o.expr.filters;F.selectors.filters.hidden=function(T){return T.offsetWidth===0||T.offsetHeight===0};F.selectors.filters.visible=function(T){return T.offsetWidth>0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F<E.length){o.event.proxy(G,E[F++])}return this.click(o.event.proxy(G,function(H){this.lastToggle=(this.lastToggle||0)%F;H.preventDefault();return E[this.lastToggle++].apply(this,arguments)||false}))},hover:function(E,F){return this.mouseenter(E).mouseleave(F)},ready:function(E){B();if(o.isReady){E.call(document,o)}else{o.readyList.push(E)}return this},live:function(G,F){var E=o.event.proxy(F);E.guid+=this.selector+G;o(document).bind(i(G,this.selector),this.selector,E);return this},die:function(F,E){o(document).unbind(i(F,this.selector),E?{guid:E.guid+this.selector+F}:null);return this}});function c(H){var E=RegExp("(^|\\.)"+H.type+"(\\.|$)"),G=true,F=[];o.each(o.data(this,"events").live||[],function(I,J){if(E.test(J.type)){var K=o(H.target).closest(J.data)[0];if(K){F.push({elem:K,fn:J})}}});F.sort(function(J,I){return o.data(J.elem,"closest")-o.data(I.elem,"closest")});o.each(F,function(){if(this.fn.call(this.elem,H,this.fn.data)===false){return(G=false)}});return G}function i(F,E){return["live",F,E.replace(/\./g,"`").replace(/ /g,"|")].join(".")}o.extend({isReady:false,readyList:[],ready:function(){if(!o.isReady){o.isReady=true;if(o.readyList){o.each(o.readyList,function(){this.call(document,o)});o.readyList=null}o(document).triggerHandler("ready")}}});var x=false;function B(){if(x){return}x=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);o.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);o.ready()}});if(document.documentElement.doScroll&&l==l.top){(function(){if(o.isReady){return}try{document.documentElement.doScroll("left")}catch(E){setTimeout(arguments.callee,0);return}o.ready()})()}}}o.event.add(l,"load",o.ready)}o.each(("blur,focus,load,resize,scroll,unload,click,dblclick,mousedown,mouseup,mousemove,mouseover,mouseout,mouseenter,mouseleave,change,select,submit,keydown,keypress,keyup,error").split(","),function(F,E){o.fn[E]=function(G){return G?this.bind(E,G):this.trigger(E)}});o(l).bind("unload",function(){for(var E in o.cache){if(E!=1&&o.cache[E].handle){o.event.remove(o.cache[E].handle.elem)}}});(function(){o.support={};var F=document.documentElement,G=document.createElement("script"),K=document.createElement("div"),J="script"+(new Date).getTime();K.style.display="none";K.innerHTML='   <link/><table></table><a href="/a" style="color:red;float:left;opacity:.5;">a</a><select><option>text</option></select><object><param/></object>';var H=K.getElementsByTagName("*"),E=K.getElementsByTagName("a")[0];if(!H||!H.length||!E){return}o.support={leadingWhitespace:K.firstChild.nodeType==3,tbody:!K.getElementsByTagName("tbody").length,objectAll:!!K.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!K.getElementsByTagName("link").length,style:/red/.test(E.getAttribute("style")),hrefNormalized:E.getAttribute("href")==="/a",opacity:E.style.opacity==="0.5",cssFloat:!!E.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};G.type="text/javascript";try{G.appendChild(document.createTextNode("window."+J+"=1;"))}catch(I){}F.insertBefore(G,F.firstChild);if(l[J]){o.support.scriptEval=true;delete l[J]}F.removeChild(G);if(K.attachEvent&&K.fireEvent){K.attachEvent("onclick",function(){o.support.noCloneEvent=false;K.detachEvent("onclick",arguments.callee)});K.cloneNode(true).fireEvent("onclick")}o(function(){var L=document.createElement("div");L.style.width=L.style.paddingLeft="1px";document.body.appendChild(L);o.boxModel=o.support.boxModel=L.offsetWidth===2;document.body.removeChild(L).style.display="none"})})();var w=o.support.cssFloat?"cssFloat":"styleFloat";o.props={"for":"htmlFor","class":"className","float":w,cssFloat:w,styleFloat:w,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};o.fn.extend({_load:o.fn.load,load:function(G,J,K){if(typeof G!=="string"){return this._load(G)}var I=G.indexOf(" ");if(I>=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("<div/>").append(M.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H<F;H++){var E=o.data(this[H],"olddisplay");this[H].style.display=E||"";if(o.css(this[H],"display")==="none"){var G=this[H].tagName,K;if(m[G]){K=m[G]}else{var I=o("<"+G+" />").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H<F;H++){this[H].style.display=o.data(this[H],"olddisplay")||""}return this}},hide:function(H,I){if(H){return this.animate(t("hide",3),H,I)}else{for(var G=0,F=this.length;G<F;G++){var E=o.data(this[G],"olddisplay");if(!E&&E!=="none"){o.data(this[G],"olddisplay",o.css(this[G],"display"))}}for(var G=0,F=this.length;G<F;G++){this[G].style.display="none"}return this}},_toggle:o.fn.toggle,toggle:function(G,F){var E=typeof G==="boolean";return o.isFunction(G)&&o.isFunction(F)?this._toggle.apply(this,arguments):G==null||E?this.each(function(){var H=E?G:o(this).is(":hidden");o(this)[H?"show":"hide"]()}):this.animate(t("toggle",3),G,F)},fadeTo:function(E,G,F){return this.animate({opacity:G},E,F)},animate:function(I,F,H,G){var E=o.speed(F,H,G);return this[E.queue===false?"each":"queue"](function(){var K=o.extend({},E),M,L=this.nodeType==1&&o(this).is(":hidden"),J=this;for(M in I){if(I[M]=="hide"&&L||I[M]=="show"&&!L){return K.complete.call(this)}if((M=="height"||M=="width")&&this.style){K.display=o.css(this,"display");K.overflow=this.style.overflow}}if(K.overflow!=null){this.style.overflow="hidden"}K.curAnim=o.extend({},I);o.each(I,function(O,S){var R=new o.fx(J,K,O);if(/toggle|show|hide/.test(S)){R[S=="toggle"?L?"show":"hide":S](I)}else{var Q=S.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),T=R.cur(true)||0;if(Q){var N=parseFloat(Q[2]),P=Q[3]||"px";if(P!="px"){J.style[O]=(N||1)+P;T=((N||1)/R.cur(true))*T;J.style[O]=T+P}if(Q[1]){N=((Q[1]=="-="?-1:1)*N)+T}R.custom(T,N,P)}else{R.custom(T,S,"")}}});return true})},stop:function(F,E){var G=o.timers;if(F){this.queue([])}this.each(function(){for(var H=G.length-1;H>=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J<K.length;J++){if(!K[J]()){K.splice(J--,1)}}if(!K.length){clearInterval(n);n=g}},13)}},show:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());o(this.elem).show()},hide:function(){this.options.orig[this.prop]=o.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(H){var G=e();if(H||G>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='<div style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;"><div></div></div><table style="position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;" cellpadding="0" cellspacing="0"><tr><td></td></tr></table>';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})();
(function($) {
    $.fn.tipsy = function(opts) {

        opts = $.extend({ fade: false, gravity: 'n' }, opts || {});
        var tip = null, cancelHide = false;

        this.hover(function() {

            $.data(this, 'cancel.tipsy', true);

            var tip = $.data(this, 'active.tipsy');
            if (!tip) {
                tip = $('<div class="tipsy"><div class="tipsy-inner">' + $(this).attr('title') + '</div></div>');
                tip.css({ position: 'absolute', zIndex: 100000 });
                $(this).attr('title', '');
                $.data(this, 'active.tipsy', tip);
            }

            var pos = $.extend({}, $(this).offset(), { width: this.offsetWidth, height: this.offsetHeight });
            tip.remove().css({ top: 0, left: 0, visibility: 'hidden', display: 'block' }).appendTo(document.body);
            var actualWidth = tip[0].offsetWidth, actualHeight = tip[0].offsetHeight;

            var yoffset = 3;
            if (this.id == 'favoritesShow') yoffset = 7;
            if (this.id == 'favoritesAdd') yoffset = 7;

            switch (opts.gravity.charAt(0)) {
                case 'n':
                    tip.css({ top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2 }).addClass('tipsy-north');
                    break;
                case 's':
                    tip.css({ top: pos.top - actualHeight - yoffset, left: (pos.left + pos.width / 2 - actualWidth / 2) + 0 }).addClass('tipsy-south');
                    break;
                case 'e':
                    tip.css({ top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth }).addClass('tipsy-east');
                    break;
                case 'w':
                    tip.css({ top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }).addClass('tipsy-west');
                    break;
            }

            if (opts.fade) {
                tip.css({ opacity: 0, display: 'block', visibility: 'visible' }).animate({ opacity: 1 });
            } else {
                tip.css({ visibility: 'visible' });
            }

        }, function() {
            $.data(this, 'cancel.tipsy', false);
            var self = this;
            setTimeout(function() {
                if ($.data(this, 'cancel.tipsy')) return;
                var tip = $.data(self, 'active.tipsy');
                if (opts.fade) {
                    tip.stop().fadeOut(function() { $(this).remove(); });
                } else {
                    tip.remove();
                }
            }, 100);

        });

    };
})(jQuery);

/* Copyright (c) 2007 Paul Bakaus (paul.bakaus@googlemail.com) and Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * $LastChangedDate: 2007-12-20 08:43:48 -0600 (Thu, 20 Dec 2007) $
 * $Rev: 4257 $
 *
 * Version: 1.2
 *
 * Requires: jQuery 1.2+
 */
(function($){$.dimensions={version:'1.2'};$.each(['Height','Width'],function(i,name){$.fn['inner'+name]=function(){if(!this[0])return;var torl=name=='Height'?'Top':'Left',borr=name=='Height'?'Bottom':'Right';return this.is(':visible')?this[0]['client'+name]:num(this,name.toLowerCase())+num(this,'padding'+torl)+num(this,'padding'+borr);};$.fn['outer'+name]=function(options){if(!this[0])return;var torl=name=='Height'?'Top':'Left',borr=name=='Height'?'Bottom':'Right';options=$.extend({margin:false},options||{});var val=this.is(':visible')?this[0]['offset'+name]:num(this,name.toLowerCase())+num(this,'border'+torl+'Width')+num(this,'border'+borr+'Width')+num(this,'padding'+torl)+num(this,'padding'+borr);return val+(options.margin?(num(this,'margin'+torl)+num(this,'margin'+borr)):0);};});$.each(['Left','Top'],function(i,name){$.fn['scroll'+name]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(name=='Left'?val:$(window)['scrollLeft'](),name=='Top'?val:$(window)['scrollTop']()):this['scroll'+name]=val;}):this[0]==window||this[0]==document?self[(name=='Left'?'pageXOffset':'pageYOffset')]||$.boxModel&&document.documentElement['scroll'+name]||document.body['scroll'+name]:this[0]['scroll'+name];};});$.fn.extend({position:function(){var left=0,top=0,elem=this[0],offset,parentOffset,offsetParent,results;if(elem){offsetParent=this.offsetParent();offset=this.offset();parentOffset=offsetParent.offset();offset.top-=num(elem,'marginTop');offset.left-=num(elem,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&$.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return $(offsetParent);}});function num(el,prop){return parseInt($.curCSS(el.jquery?el[0]:el,prop,true))||0;};})(jQuery);
/*
 * positionBy 1.0.7 (2008-01-29)
 *
 * Copyright (c) 2006,2007 Jonathan Sharp (http://jdsharp.us)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://jdsharp.us/
 *
 * Built upon jQuery 1.2.2 (http://jquery.com)
 * This also requires the jQuery dimensions plugin
 */
(function($){var A=function(a,b,c,d){this.x1=a;this.x2=c;this.y1=b;this.y2=d};A.prototype.contains=function(a){return(this.x1<=a.x1&&a.x2<=this.x2)&&(this.y1<=a.y1&&a.y2<=this.y2)};A.prototype.transform=function(x,y){return new A(this.x1+x,this.y1+y,this.x2+x,this.y2+y)};$.fn.positionBy=function(q){var r=new Date();if(this.length==0){return this}var q=$.extend({target:null,targetPos:null,elementPos:null,x:null,y:null,positions:null,addClass:false,force:false,container:window},q);if(q.x!=null){var s=q.x;var t=q.y;var u=0;var v=0}else{var w=$($(q.target)[0]);var u=w.outerWidth();var v=w.outerHeight();var x=w.offset();var s=x.left;var t=x.top}var y=s+u;var z=t+v;return this.each(function(){var c=$(this);if(!c.is(':visible')){c.css({left:-3000,top:-3000}).show()}var d=c.outerWidth();var e=c.outerHeight();var f=[];var g=[];f[0]=new A(y,t,y+d,t+e);g[0]=[1,7,4];f[1]=new A(y,z-e,y+d,z);g[1]=[0,6,4];f[2]=new A(y,z,y+d,z+e);g[2]=[1,3,10];f[3]=new A(y-d,z,y,z+e);g[3]=[1,6,10];f[4]=new A(s,z,s+d,z+e);g[4]=[1,6,9];f[5]=new A(s-d,z,s,z+e);g[5]=[6,4,9];f[6]=new A(s-d,z-e,s,z);g[6]=[7,1,4];f[7]=new A(s-d,t,s,t+e);g[7]=[6,0,4];f[8]=new A(s-d,t-e,s,t);g[8]=[7,9,4];f[9]=new A(s,t-e,s+d,t);g[9]=[0,7,4];f[10]=new A(y-d,t-e,y,t);g[10]=[0,7,3];f[11]=new A(y,t-e,y+d,t);g[11]=[0,10,3];f[12]=new A(y-d,t,y,t+e);g[12]=[13,7,10];f[13]=new A(y-d,z-e,y,z);g[13]=[12,6,3];f[14]=new A(s,z-e,s+d,z);g[14]=[15,1,4];f[15]=new A(s,t,s+d,t+e);g[15]=[14,0,9];if(q.positions!==null){var h=q.positions[0]}else if(q.targetPos!=null&&q.elementPos!=null){var h=[];h[0]=[];h[0][0]=15;h[0][1]=7;h[0][2]=8;h[0][3]=9;h[1]=[];h[1][0]=0;h[1][1]=12;h[1][2]=10;h[1][3]=11;h[2]=[];h[2][0]=2;h[2][1]=3;h[2][2]=13;h[2][3]=1;h[3]=[];h[3][0]=4;h[3][1]=5;h[3][2]=6;h[3][3]=14;var h=h[q.targetPos][q.elementPos]}var i=f[h];var j=h;if(!q.force){$window=$(window);var k=$window.scrollLeft();var l=$window.scrollTop();var m=new A(k,l,k+$window.width(),l+$window.height());var n;if(q.positions){n=q.positions}else{n=[h]}var o=[];while(n.length>0){var p=n.shift();if(o[p]){continue}o[p]=true;if(!m.contains(f[p])){if(q.positions===null){n=jQuery.merge(n,g[p])}}else{i=f[p];break}}}c.parents().each(function(){var a=$(this);if(a.css('position')!='static'){var b=a.offset();i=i.transform(-b.left,-b.top);return false}});c.css({left:i.x1,top:i.y1});if(q.addClass){c.removeClass('positionBy0 positionBy1 positionBy2 positionBy3 positionBy4 positionBy5 '+'positionBy6 positionBy7 positionBy8 positionBy9 positionBy10 positionBy11 '+'positionBy12 positionBy13 positionBy14 positionBy15').addClass('positionBy'+p)}})}})(jQuery);

/*
 * jdMenu 1.4.0 (2008-01-25)
 *
 * Copyright (c) 2006,2007 Jonathan Sharp (http://jdsharp.us)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://jdsharp.us/
 *
 * Built upon jQuery 1.2.1 (http://jquery.com)
 * This also requires the jQuery dimensions >= 1.2 plugin
 */
//$(function() {
//	$('ul.jd_menu').jdMenu();
//});

(function($){$.jdMenu={settings:[],getSettings:function(a){var t=$(a).parents('ul.jd_menu:eq(0)')[0];return this.settings[t&&t.$jdSettings?t.$jdSettings:0]}};function activateMenu(a){var a=$(a);var b=a.parent();a.trigger('jdMenuShow').positionBy({target:b[0],targetPos:(b.parent().is('.jd_menu')?3:1),elementPos:0});b.addClass('jdm_active').siblings('li').find('ul:eq(0):visible').each(function(){hideMenu(this)})}function hideMenu(a){$(a).filter(':not(.jd_menu)').find('> li ul:eq(0):visible').each(function(){hideMenu(this)}).end().hide().trigger('jdMenuHide').parents('li:eq(0)').removeClass('jdm_active jdm_hover').end().find('> li').removeClass('jdm_active jdm_hover')}function getSettings(a){return $.data($(a).is('.jd_menu')?a:$(a).parents('ul.jd_menu')[0],'jdMenuSettings')}$.fn.jdMenu=function(f){var f=$.extend({activateDelay:0,showDelay:0,hideDelay:500},f);return this.filter('ul.jd_menu').each(function(){$.data(this,'jdMenuSettings',f);$('li',this).bind('mouseenter.jdmenu',function(){$(this).addClass('jdm_hover');var a=$('ul:eq(0)',this);if(a.length==1){var b=this;clearTimeout(this.$jdTimer);this.$jdTimer=setTimeout(function(){activateMenu(a)},getSettings(this).showDelay)}}).bind('mouseleave.jdmenu',function(){$(this).removeClass('jdm_hover');var a=$('ul:eq(0)',this);if(a.length==1){var b=$.jdMenu.getSettings(this);var c=this;clearTimeout(this.$jdTimer);this.$jdTimer=setTimeout(function(){hideMenu(a)},getSettings(this).hideDelay)}}).bind('click.jdmenu',function(b){var c=$('> ul',this);if(c.length==1){activateMenu(c);return false}if(b.target==this){var d=$('> a',b.target).not('.accessible');if(d.length>0){var a=d[0];if(!a.onclick){window.open(a.href,a.target||'_self')}else{$(a).trigger('click')}}}//$(this).parent().jdMenuHide();
b.stopPropagation()}).bind('keydown.jdmenu',function(e){if(e.which==27){if(!$(this).parent().is('.jd_menu')){hideMenu($(this).parent()[0])}$(this).parents('li:eq(0)').find('a:eq(0)').trigger('focus');return false}}).find('> a').bind('focus.jdmenu',function(){$(this).parents('li:eq(0)').addClass('jdm_hover')}).bind('blur.jdmenu',function(){$(this).parents('li:eq(0)').removeClass('jdm_hover')}).filter('.accessible').bind('click.jdmenu',function(a){a.preventDefault()})})};$.fn.jdMenuUnbind=function(){$('li',this).unbind('mouseenter.jdmenu mouseleave.jdmenu click.jdmenu keydown.jdmenu').find('> a').unbind('focus.jdmenu blur.jdmenu click.jdmenu');return this};$.fn.jdMenuHide=function(){return this.filter('ul').each(function(){hideMenu(this)})};$(window).bind('click.jdmenu',function(){$('ul.jd_menu ul:visible').jdMenuHide()})})(jQuery);

/*
 * jdMenu 1.4.0 (2008-01-25)
 *
 * Copyright (c) 2006,2007 Jonathan Sharp (http://jdsharp.us)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://jdsharp.us/
 *
 * Built upon jQuery 1.2.1 (http://jquery.com)
 * This also requires the jQuery dimensions >= 1.2 plugin
 */
$(function() {
	$('ul.jd_menu2').jdMenu2();
});

(function($){
	$.jdMenu2 = {
		settings: 	[],
		getSettings: 	function( element ) {
							var t = $(element).parents('ul.jd_menu2:eq(0)')[0];
							return this.settings[ t && t.$jdSettings ? t.$jdSettings : 0 ];	
						}
	};
	
	function activateMenu(ul) {
		var ul = $(ul);
		var li = ul.parent();
		ul	.trigger('jdMenuShow')
			.positionBy({ 	target: 	li[0], 
							targetPos: 	( li.parent().is('.jd_menu2') ? 3 : 1 ), 
							elementPos: 0 
							});
		li	.addClass('jdm_active')
			// Hide any adjacent menus
			.siblings('li').find('ul:eq(0):visible')
				.each(function(){
					hideMenu( this ); 
				});
	}
	
	function hideMenu(ul) {
		$(ul)
			.filter(':not(.jd_menu2)')
			.find('> li ul:eq(0):visible')
				.each(function() {
					hideMenu( this );
				})
			.end()
			.hide()
			.trigger('jdMenuHide')
			.parents('li:eq(0)')
				.removeClass('jdm_active jdm_hover')
			.end()
				.find('> li')
				.removeClass('jdm_active jdm_hover');
	}
	
	function getSettings(element) {
		return $.data( $(element).is('.jd_menu2') ? element : $(element).parents('ul.jd_menu2')[0], 'jdMenuSettings');;
	}
	
	// Public methods
	$.fn.jdMenu2 = function(settings) {
		var settings = $.extend({	activateDelay: 	0,
					showDelay: 		0, 
					hideDelay: 		0
					}, settings);
		return this.filter('ul.jd_menu2').each(function() {
			$.data(this, 'jdMenuSettings', settings);
			$('li', this)
				.bind('mouseenter.jdmenu2', function() {
					$(this).addClass('jdm_hover');
					var ul = $('ul:eq(0)', this);
					if ( ul.length == 1 ) {
						var me = this;
						clearTimeout( this.$jdTimer );
						this.$jdTimer = setTimeout(function() {
							activateMenu( ul );
						}, getSettings(this).showDelay );
					}
				})
				.bind('mouseleave.jdmenu2', function(){
					$(this).removeClass('jdm_hover');
					var ul = $('ul:eq(0)', this);
					if ( ul.length == 1 ) {
						var settings = $.jdMenu.getSettings( this );
						var me = this;
						clearTimeout( this.$jdTimer );
						this.$jdTimer = setTimeout(function() {
							hideMenu( ul );
						}, getSettings(this).hideDelay );
					}
				})
				.bind('click.jdmenu2', function(evt) {
					var ul = $('> ul', this);
					if ( ul.length == 1 ) {
						activateMenu( ul );
						return false;
					}
					
					// The user clicked the li and we need to trigger a click for the a
					if ( evt.target == this ) {
						var link = $('> a', evt.target).not('.accessible');
						if ( link.length > 0 ) {
							var a = link[0];
							if ( !a.onclick ) {
								window.open( a.href, a.target || '_self' );
							} else {
								$(a).trigger('click');
							}
						}
					}
					$(this).parent().jdMenuHide();
					evt.stopPropagation();
				})
				.bind('keydown.jdmenu2', function(e) {
					if ( e.which == 27 ) {
						if ( !$(this).parent().is('.jd_menu2') ) {
							hideMenu( $(this).parent()[0] );
						}
						$(this).parents('li:eq(0)').find('a:eq(0)').trigger('focus');
						return false;
					}
				})
				.find('> a')
					.bind('focus.jdmenu2', function() {
						$(this).parents('li:eq(0)').addClass('jdm_hover');
					})
					.bind('blur.jdmenu2', function() {
						$(this).parents('li:eq(0)').removeClass('jdm_hover');
					})
					.filter('.accessible')
						.bind('click.jdmenu2', function(evt) {
							evt.preventDefault();
						});
		});
	};
	
	$.fn.jdMenuUnbind = function() {
		$('li', this)
			.unbind('mouseenter.jdmenu2 mouseleave.jdmenu2 click.jdmenu2 keydown.jdmenu2')
			.find('> a').unbind('focus.jdmenu2 blur.jdmenu2 click.jdmenu2');
		return this;
	};
	
	$.fn.jdMenuHide = function() {
		return this.filter('ul').each(function(){ hideMenu( this ); });
	};

	// Private methods and logic
	$(window)
		// Bind a click event to hide all visible menus when the document is clicked
		.bind('click.jdmenu2', function(){
			$('ul.jd_menu2 ul:visible').jdMenuHide();
		});
})(jQuery);

/**
 * @author Alexandre Magno
 * @desc Center a element with jQuery
 * @version 1.0
 * @example
 * $("element").center({
 *
 * 		vertical: true,
 *      horizontal: true
 *
 * });
 * @obs With no arguments, the default is above
 * @license free
 * @param bool vertical, bool horizontal
 * @contribution Paulo Radichi and Tales Santos
 *
 */
jQuery.fn.center = function(params) {

		var options = {

			vertical: true,
			horizontal: true

		}
		op = jQuery.extend(options, params);

   return this.each(function(){

		//initializing variables
		var $self = jQuery(this);
		//get the dimensions using dimensions plugin
		var width = $self.width();
		var height = $self.height();
		//get the paddings
		var paddingTop = parseInt($self.css("padding-top"));
		var paddingBottom = parseInt($self.css("padding-bottom"));
		//get the borders
		var borderTop = parseInt($self.css("border-top-width"));
		var borderBottom = parseInt($self.css("border-bottom-width"));
		//get the media of padding and borders
		var mediaBorder = (borderTop+borderBottom)/2;
		var mediaPadding = (paddingTop+paddingBottom)/2;
		//get the type of positioning
		var positionType = $self.parent().css("position");
		// get the half minus of width and height
		var halfWidth = (width/2)*(-1);
		var halfHeight = ((height/2)*(-1))-mediaPadding-mediaBorder;
		// initializing the css properties
		var cssProp = {
			position: 'absolute'
		};

		if(op.vertical) {
			cssProp.height = height;
			cssProp.top = '50%';
			cssProp.marginTop = halfHeight;
		}
		if(op.horizontal) {
			cssProp.width = width;
			cssProp.left = '50%';
			cssProp.marginLeft = halfWidth;
		}
		//check the current position
		if(positionType == 'static') {
			$self.parent().css("position","relative");
		}
		//aplying the css
		$self.css(cssProp);


   });

};

jQuery.fn.hint = function () {
  return this.each(function (){
    // get jQuery version of 'this'
    var t = jQuery(this); 
    // get it once since it won't change
    var title = t.attr('title'); 
    // only apply logic if the element has the attribute
    if (title) { 
      // on blur, set value to title attr if text is blank
      t.blur(function (){
        if (t.val() == '') {
          t.val(title);
          t.addClass('blur');
        }
      });
      // on focus, set value to blank if current value 
      // matches title attr
      t.focus(function (){
        if (t.val() == title) {
          t.val('');
          t.removeClass('blur');
        }
      });

      // clear the pre-defined text when form is submitted
      t.parents('form:first()').submit(function(){
          if (t.val() == title) {
              t.val('');
              t.removeClass('blur');
          }
      });

      // now change all inputs to title
      t.blur();
    }
  });
}

	
	/*
	 *	jquery.suggest 1.1 - 2007-08-06
	 *	
	 *	Uses code and techniques from following libraries:
	 *	1. http://www.dyve.net/jquery/?autocomplete
	 *	2. http://dev.jquery.com/browser/trunk/plugins/interface/iautocompleter.js	
	 *
	 *	All the new stuff written by Peter Vulgaris (www.vulgarisoip.com)	
	 *	Feel free to do whatever you want with this file
	 *
	 */
    var suggest_city, suggest_zipcode, suggest_street = '';
    	
	(function($) {

		$.suggest = function(input, options) {
		
			var $input = $(input).attr("autocomplete", "off");
			var $results = $(document.createElement("ul"));

			var timeout = false;		// hold timeout ID for suggestion results to appear	
			var prevLength = 0;			// last recorded length of $input.val()
			var cache = [];				// cache MRU list
			var cacheSize = 0;			// size of cache in chars (bytes?)
			
			$results.addClass(options.resultsClass).appendTo('body');
				

			resetPosition();
			$(window)
				.load(resetPosition)		// just in case user is changing size of page while loading
				.resize(resetPosition);

			$input.blur(function() {
				setTimeout(function() { $results.hide() }, 200);
			});
			
			
			// help IE users if possible
			try {
				$results.bgiframe();
			} catch(e) { }


			// I really hate browser detection, but I don't see any other way
			if ($.browser.mozilla)
				$input.keypress(processKey);	// onkeypress repeats arrow keys in Mozilla/Opera
			else
				$input.keydown(processKey);		// onkeydown repeats arrow keys in IE/Safari
			



			function resetPosition() {
				// requires jquery.dimension plugin
				try {
				    var offset = $input.offset();
				    $results.css({
					    top: (offset.top + input.offsetHeight) + 'px',
					    left: offset.left + 'px'
				    });
				} catch(e) { }
			}
			
			
			function processKey(e) {
			
				
				// handling up/down/escape requires results to be visible
				// handling enter/tab requires that AND a result to be selected
				if ((/27$|38$|40$/.test(e.keyCode) && $results.is(':visible')) ||
					(/^13$|^9$/.test(e.keyCode) && getCurrentResult())) {
		            
		            if (e.preventDefault)
		                e.preventDefault();
					if (e.stopPropagation)
		                e.stopPropagation();

	                e.cancelBubble = true;
	                e.returnValue = false;
				
					switch(e.keyCode) {
	
						case 38: // up
							prevResult();
							break;
				
						case 40: // down
							nextResult();
							break;
	
						case 9:  // tab
						case 13: // return
							selectCurrentResult();
							break;
							
						case 27: //	escape
							$results.hide();
							break;
	
					}
					
				} else if ($input.val().length != prevLength) {

					if (timeout) 
						clearTimeout(timeout);
					timeout = setTimeout(suggest, options.delay);
					prevLength = $input.val().length;					
				}			
			}
			
			function suggest() {			
				var q = $.trim($input.val());

				if (q.length >= options.minchars) {
					cached = checkCache(q);
					if (cached) {
						displayItems(cached['items']);
					} else {
					    WebServices.SuggestInterface.PNA_Street_Suggest(suggest_zipcode, suggest_city, q, PNA_Street_Suggest_Callback, ws_ErrorTrap); 					
					}					
				} else {				
					$results.hide();					
				}					
			}		
			
			function PNA_Street_Suggest_Callback(result) {
			    var q = $.trim($input.val());
			    
			    $results.hide();							
			    var items = parseTxt(result, q);							
			    displayItems(items);
			    addToCache(q, items, result.length);	
			}	
			
			function checkCache(q) {

				for (var i = 0; i < cache.length; i++)
					if (cache[i]['q'] == q) {
						cache.unshift(cache.splice(i, 1)[0]);
						return cache[0];
					}
				
				return false;
			
			}
			
			function addToCache(q, items, size) {

				while (cache.length && (cacheSize + size > options.maxCacheSize)) {
					var cached = cache.pop();
					cacheSize -= cached['size'];
				}
				
				cache.push({
					q: q,
					size: size,
					items: items
					});
					
				cacheSize += size;
			
			}
			
			function displayItems(items) {
				
				if (!items)
					return;
					
				if (!items.length) {
					$results.hide();
					return;
				}
				
				var html = '';
				for (var i = 0; i < items.length; i++)
					html += '<li>' + items[i] + '</li>';

				$results.html(html).show();
				
				$results
					.children('li')
					.mouseover(function() {
						$results.children('li').removeClass(options.selectClass);
						$(this).addClass(options.selectClass);
					})
					.click(function(e) {
						e.preventDefault(); 
						e.stopPropagation();
						selectCurrentResult();
					});
							
			}
			
			function parseTxt(txt, q) {
				
				var items = [];
				var tokens = txt.split(options.delimiter);
				
				// parse returned data for non-empty items
				for (var i = 0; i < tokens.length; i++) {
					var token = $.trim(tokens[i]);
					if (token) {
						token = token.replace(
							new RegExp(q, 'ig'), 
							function(q) { return '<span class="' + options.matchClass + '">' + q + '</span>' }
							);
						items[items.length] = token;
					}
				}
				
				return items;
			}
			
			function getCurrentResult() {
			
				if (!$results.is(':visible'))
					return false;
			
				var $currentResult = $results.children('li.' + options.selectClass);
				
				if (!$currentResult.length)
					$currentResult = false;
					
				return $currentResult;

			}
			
			function selectCurrentResult() {
			
				$currentResult = getCurrentResult();
			
				if ($currentResult) {
					$input.val($currentResult.text());
					$results.hide();
					
					if (options.onSelect)
						options.onSelect.apply($input[0]);
						
				}
			
			}
			
			function nextResult() {
			
				$currentResult = getCurrentResult();
			
				if ($currentResult)
					$currentResult
						.removeClass(options.selectClass)
						.next()
							.addClass(options.selectClass);
				else
					$results.children('li:first-child').addClass(options.selectClass);
			
			}
			
			function prevResult() {
			
				$currentResult = getCurrentResult();
			
				if ($currentResult)
					$currentResult
						.removeClass(options.selectClass)
						.prev()
							.addClass(options.selectClass);
				else
					$results.children('li:last-child').addClass(options.selectClass);
			
			}
	
		}
		
		$.fn.suggest = function(source, options) {
		
		
		
			if (!source)
				return;
		
			        
		
			options = options || {};
			options.source = source;
			options.delay = options.delay || 100;
			options.resultsClass = options.resultsClass || 'ac_results';
			options.selectClass = options.selectClass || 'ac_over';
			options.matchClass = options.matchClass || 'ac_match';
			options.minchars = options.minchars || 2;
			options.delimiter = options.delimiter || '\n';
			options.onSelect = options.onSelect || false;
			options.maxCacheSize = options.maxCacheSize || 65536;
	
			this.each(function() {
				new $.suggest(this, options);
			});
	
			return this;
			
		};
		
	})(jQuery);
	

/*
 * jQuery UI 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI
 */
jQuery.ui||(function(c){var i=c.fn.remove,d=c.browser.mozilla&&(parseFloat(c.browser.version)<1.9);c.ui={version:"1.7.2",plugin:{add:function(k,l,n){var m=c.ui[k].prototype;for(var j in n){m.plugins[j]=m.plugins[j]||[];m.plugins[j].push([l,n[j]])}},call:function(j,l,k){var n=j.plugins[l];if(!n||!j.element[0].parentNode){return}for(var m=0;m<n.length;m++){if(j.options[n[m][0]]){n[m][1].apply(j.element,k)}}}},contains:function(k,j){return document.compareDocumentPosition?k.compareDocumentPosition(j)&16:k!==j&&k.contains(j)},hasScroll:function(m,k){if(c(m).css("overflow")=="hidden"){return false}var j=(k&&k=="left")?"scrollLeft":"scrollTop",l=false;if(m[j]>0){return true}m[j]=1;l=(m[j]>0);m[j]=0;return l},isOverAxis:function(k,j,l){return(k>j)&&(k<(j+l))},isOver:function(o,k,n,m,j,l){return c.ui.isOverAxis(o,n,j)&&c.ui.isOverAxis(k,m,l)},keyCode:{BACKSPACE:8,CAPS_LOCK:20,COMMA:188,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38}};if(d){var f=c.attr,e=c.fn.removeAttr,h="http://www.w3.org/2005/07/aaa",a=/^aria-/,b=/^wairole:/;c.attr=function(k,j,l){var m=l!==undefined;return(j=="role"?(m?f.call(this,k,j,"wairole:"+l):(f.apply(this,arguments)||"").replace(b,"")):(a.test(j)?(m?k.setAttributeNS(h,j.replace(a,"aaa:"),l):f.call(this,k,j.replace(a,"aaa:"))):f.apply(this,arguments)))};c.fn.removeAttr=function(j){return(a.test(j)?this.each(function(){this.removeAttributeNS(h,j.replace(a,""))}):e.call(this,j))}}c.fn.extend({remove:function(){c("*",this).add(this).each(function(){c(this).triggerHandler("remove")});return i.apply(this,arguments)},enableSelection:function(){return this.attr("unselectable","off").css("MozUserSelect","").unbind("selectstart.ui")},disableSelection:function(){return this.attr("unselectable","on").css("MozUserSelect","none").bind("selectstart.ui",function(){return false})},scrollParent:function(){var j;if((c.browser.msie&&(/(static|relative)/).test(this.css("position")))||(/absolute/).test(this.css("position"))){j=this.parents().filter(function(){return(/(relative|absolute|fixed)/).test(c.curCSS(this,"position",1))&&(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}else{j=this.parents().filter(function(){return(/(auto|scroll)/).test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0)}return(/fixed/).test(this.css("position"))||!j.length?c(document):j}});c.extend(c.expr[":"],{data:function(l,k,j){return !!c.data(l,j[3])},focusable:function(k){var l=k.nodeName.toLowerCase(),j=c.attr(k,"tabindex");return(/input|select|textarea|button|object/.test(l)?!k.disabled:"a"==l||"area"==l?k.href||!isNaN(j):!isNaN(j))&&!c(k)["area"==l?"parents":"closest"](":hidden").length},tabbable:function(k){var j=c.attr(k,"tabindex");return(isNaN(j)||j>=0)&&c(k).is(":focusable")}});function g(m,n,o,l){function k(q){var p=c[m][n][q]||[];return(typeof p=="string"?p.split(/,?\s+/):p)}var j=k("getter");if(l.length==1&&typeof l[0]=="string"){j=j.concat(k("getterSetter"))}return(c.inArray(o,j)!=-1)}c.widget=function(k,j){var l=k.split(".")[0];k=k.split(".")[1];c.fn[k]=function(p){var n=(typeof p=="string"),o=Array.prototype.slice.call(arguments,1);if(n&&p.substring(0,1)=="_"){return this}if(n&&g(l,k,p,o)){var m=c.data(this[0],k);return(m?m[p].apply(m,o):undefined)}return this.each(function(){var q=c.data(this,k);(!q&&!n&&c.data(this,k,new c[l][k](this,p))._init());(q&&n&&c.isFunction(q[p])&&q[p].apply(q,o))})};c[l]=c[l]||{};c[l][k]=function(o,n){var m=this;this.namespace=l;this.widgetName=k;this.widgetEventPrefix=c[l][k].eventPrefix||k;this.widgetBaseClass=l+"-"+k;this.options=c.extend({},c.widget.defaults,c[l][k].defaults,c.metadata&&c.metadata.get(o)[k],n);this.element=c(o).bind("setData."+k,function(q,p,r){if(q.target==o){return m._setData(p,r)}}).bind("getData."+k,function(q,p){if(q.target==o){return m._getData(p)}}).bind("remove",function(){return m.destroy()})};c[l][k].prototype=c.extend({},c.widget.prototype,j);c[l][k].getterSetter="option"};c.widget.prototype={_init:function(){},destroy:function(){this.element.removeData(this.widgetName).removeClass(this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").removeAttr("aria-disabled")},option:function(l,m){var k=l,j=this;if(typeof l=="string"){if(m===undefined){return this._getData(l)}k={};k[l]=m}c.each(k,function(n,o){j._setData(n,o)})},_getData:function(j){return this.options[j]},_setData:function(j,k){this.options[j]=k;if(j=="disabled"){this.element[k?"addClass":"removeClass"](this.widgetBaseClass+"-disabled "+this.namespace+"-state-disabled").attr("aria-disabled",k)}},enable:function(){this._setData("disabled",false)},disable:function(){this._setData("disabled",true)},_trigger:function(l,m,n){var p=this.options[l],j=(l==this.widgetEventPrefix?l:this.widgetEventPrefix+l);m=c.Event(m);m.type=j;if(m.originalEvent){for(var k=c.event.props.length,o;k;){o=c.event.props[--k];m[o]=m.originalEvent[o]}}this.element.trigger(m,n);return !(c.isFunction(p)&&p.call(this.element[0],m,n)===false||m.isDefaultPrevented())}};c.widget.defaults={disabled:false};c.ui.mouse={_mouseInit:function(){var j=this;this.element.bind("mousedown."+this.widgetName,function(k){return j._mouseDown(k)}).bind("click."+this.widgetName,function(k){if(j._preventClickEvent){j._preventClickEvent=false;k.stopImmediatePropagation();return false}});if(c.browser.msie){this._mouseUnselectable=this.element.attr("unselectable");this.element.attr("unselectable","on")}this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName);(c.browser.msie&&this.element.attr("unselectable",this._mouseUnselectable))},_mouseDown:function(l){l.originalEvent=l.originalEvent||{};if(l.originalEvent.mouseHandled){return}(this._mouseStarted&&this._mouseUp(l));this._mouseDownEvent=l;var k=this,m=(l.which==1),j=(typeof this.options.cancel=="string"?c(l.target).parents().add(l.target).filter(this.options.cancel).length:false);if(!m||j||!this._mouseCapture(l)){return true}this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet){this._mouseDelayTimer=setTimeout(function(){k.mouseDelayMet=true},this.options.delay)}if(this._mouseDistanceMet(l)&&this._mouseDelayMet(l)){this._mouseStarted=(this._mouseStart(l)!==false);if(!this._mouseStarted){l.preventDefault();return true}}this._mouseMoveDelegate=function(n){return k._mouseMove(n)};this._mouseUpDelegate=function(n){return k._mouseUp(n)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);(c.browser.safari||l.preventDefault());l.originalEvent.mouseHandled=true;return true},_mouseMove:function(j){if(c.browser.msie&&!j.button){return this._mouseUp(j)}if(this._mouseStarted){this._mouseDrag(j);return j.preventDefault()}if(this._mouseDistanceMet(j)&&this._mouseDelayMet(j)){this._mouseStarted=(this._mouseStart(this._mouseDownEvent,j)!==false);(this._mouseStarted?this._mouseDrag(j):this._mouseUp(j))}return !this._mouseStarted},_mouseUp:function(j){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=(j.target==this._mouseDownEvent.target);this._mouseStop(j)}return false},_mouseDistanceMet:function(j){return(Math.max(Math.abs(this._mouseDownEvent.pageX-j.pageX),Math.abs(this._mouseDownEvent.pageY-j.pageY))>=this.options.distance)},_mouseDelayMet:function(j){return this.mouseDelayMet},_mouseStart:function(j){},_mouseDrag:function(j){},_mouseStop:function(j){},_mouseCapture:function(j){return true}};c.ui.mouse.defaults={cancel:null,distance:1,delay:0}})(jQuery);;/*
 * jQuery UI Draggable 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Draggables
 *
 * Depends:
 *	ui.core.js
 */
(function(a){a.widget("ui.draggable",a.extend({},a.ui.mouse,{_init:function(){if(this.options.helper=="original"&&!(/^(?:r|a|f)/).test(this.element.css("position"))){this.element[0].style.position="relative"}(this.options.addClasses&&this.element.addClass("ui-draggable"));(this.options.disabled&&this.element.addClass("ui-draggable-disabled"));this._mouseInit()},destroy:function(){if(!this.element.data("draggable")){return}this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy()},_mouseCapture:function(b){var c=this.options;if(this.helper||c.disabled||a(b.target).is(".ui-resizable-handle")){return false}this.handle=this._getHandle(b);if(!this.handle){return false}return true},_mouseStart:function(b){var c=this.options;this.helper=this._createHelper(b);this._cacheHelperProportions();if(a.ui.ddmanager){a.ui.ddmanager.current=this}this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.element.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};a.extend(this.offset,{click:{left:b.pageX-this.offset.left,top:b.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(b);this.originalPageX=b.pageX;this.originalPageY=b.pageY;if(c.cursorAt){this._adjustOffsetFromHelper(c.cursorAt)}if(c.containment){this._setContainment()}this._trigger("start",b);this._cacheHelperProportions();if(a.ui.ddmanager&&!c.dropBehaviour){a.ui.ddmanager.prepareOffsets(this,b)}this.helper.addClass("ui-draggable-dragging");this._mouseDrag(b,true);return true},_mouseDrag:function(b,d){this.position=this._generatePosition(b);this.positionAbs=this._convertPositionTo("absolute");if(!d){var c=this._uiHash();this._trigger("drag",b,c);this.position=c.position}if(!this.options.axis||this.options.axis!="y"){this.helper[0].style.left=this.position.left+"px"}if(!this.options.axis||this.options.axis!="x"){this.helper[0].style.top=this.position.top+"px"}if(a.ui.ddmanager){a.ui.ddmanager.drag(this,b)}return false},_mouseStop:function(c){var d=false;if(a.ui.ddmanager&&!this.options.dropBehaviour){d=a.ui.ddmanager.drop(this,c)}if(this.dropped){d=this.dropped;this.dropped=false}if((this.options.revert=="invalid"&&!d)||(this.options.revert=="valid"&&d)||this.options.revert===true||(a.isFunction(this.options.revert)&&this.options.revert.call(this.element,d))){var b=this;a(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){b._trigger("stop",c);b._clear()})}else{this._trigger("stop",c);this._clear()}return false},_getHandle:function(b){var c=!this.options.handle||!a(this.options.handle,this.element).length?true:false;a(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==b.target){c=true}});return c},_createHelper:function(c){var d=this.options;var b=a.isFunction(d.helper)?a(d.helper.apply(this.element[0],[c])):(d.helper=="clone"?this.element.clone():this.element);if(!b.parents("body").length){b.appendTo((d.appendTo=="parent"?this.element[0].parentNode:d.appendTo))}if(b[0]!=this.element[0]&&!(/(fixed|absolute)/).test(b.css("position"))){b.css("position","absolute")}return b},_adjustOffsetFromHelper:function(b){if(b.left!=undefined){this.offset.click.left=b.left+this.margins.left}if(b.right!=undefined){this.offset.click.left=this.helperProportions.width-b.right+this.margins.left}if(b.top!=undefined){this.offset.click.top=b.top+this.margins.top}if(b.bottom!=undefined){this.offset.click.top=this.helperProportions.height-b.bottom+this.margins.top}},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var b=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0])){b.left+=this.scrollParent.scrollLeft();b.top+=this.scrollParent.scrollTop()}if((this.offsetParent[0]==document.body)||(this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&a.browser.msie)){b={top:0,left:0}}return{top:b.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:b.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var b=this.element.position();return{top:b.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:b.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else{return{top:0,left:0}}},_cacheMargins:function(){this.margins={left:(parseInt(this.element.css("marginLeft"),10)||0),top:(parseInt(this.element.css("marginTop"),10)||0)}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var e=this.options;if(e.containment=="parent"){e.containment=this.helper[0].parentNode}if(e.containment=="document"||e.containment=="window"){this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,a(e.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a(e.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top]}if(!(/^(document|window|parent)$/).test(e.containment)&&e.containment.constructor!=Array){var c=a(e.containment)[0];if(!c){return}var d=a(e.containment).offset();var b=(a(c).css("overflow")!="hidden");this.containment=[d.left+(parseInt(a(c).css("borderLeftWidth"),10)||0)+(parseInt(a(c).css("paddingLeft"),10)||0)-this.margins.left,d.top+(parseInt(a(c).css("borderTopWidth"),10)||0)+(parseInt(a(c).css("paddingTop"),10)||0)-this.margins.top,d.left+(b?Math.max(c.scrollWidth,c.offsetWidth):c.offsetWidth)-(parseInt(a(c).css("borderLeftWidth"),10)||0)-(parseInt(a(c).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,d.top+(b?Math.max(c.scrollHeight,c.offsetHeight):c.offsetHeight)-(parseInt(a(c).css("borderTopWidth"),10)||0)-(parseInt(a(c).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}else{if(e.containment.constructor==Array){this.containment=e.containment}}},_convertPositionTo:function(f,h){if(!h){h=this.position}var c=f=="absolute"?1:-1;var e=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,g=(/(html|body)/i).test(b[0].tagName);return{top:(h.top+this.offset.relative.top*c+this.offset.parent.top*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(g?0:b.scrollTop()))*c)),left:(h.left+this.offset.relative.left*c+this.offset.parent.left*c-(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():g?0:b.scrollLeft())*c))}},_generatePosition:function(e){var h=this.options,b=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&a.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,i=(/(html|body)/i).test(b[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0])){this.offset.relative=this._getRelativeOffset()}var d=e.pageX;var c=e.pageY;if(this.originalPosition){if(this.containment){if(e.pageX-this.offset.click.left<this.containment[0]){d=this.containment[0]+this.offset.click.left}if(e.pageY-this.offset.click.top<this.containment[1]){c=this.containment[1]+this.offset.click.top}if(e.pageX-this.offset.click.left>this.containment[2]){d=this.containment[2]+this.offset.click.left}if(e.pageY-this.offset.click.top>this.containment[3]){c=this.containment[3]+this.offset.click.top}}if(h.grid){var g=this.originalPageY+Math.round((c-this.originalPageY)/h.grid[1])*h.grid[1];c=this.containment?(!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:(!(g-this.offset.click.top<this.containment[1])?g-h.grid[1]:g+h.grid[1])):g;var f=this.originalPageX+Math.round((d-this.originalPageX)/h.grid[0])*h.grid[0];d=this.containment?(!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:(!(f-this.offset.click.left<this.containment[0])?f-h.grid[0]:f+h.grid[0])):f}}return{top:(c-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():(i?0:b.scrollTop())))),left:(d-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(a.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():i?0:b.scrollLeft())))}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");if(this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval){this.helper.remove()}this.helper=null;this.cancelHelperRemoval=false},_trigger:function(b,c,d){d=d||this._uiHash();a.ui.plugin.call(this,b,[c,d]);if(b=="drag"){this.positionAbs=this._convertPositionTo("absolute")}return a.widget.prototype._trigger.call(this,b,c,d)},plugins:{},_uiHash:function(b){return{helper:this.helper,position:this.position,absolutePosition:this.positionAbs,offset:this.positionAbs}}}));a.extend(a.ui.draggable,{version:"1.7.2",eventPrefix:"drag",defaults:{addClasses:true,appendTo:"parent",axis:false,cancel:":input,option",connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,delay:0,distance:1,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false}});a.ui.plugin.add("draggable","connectToSortable",{start:function(c,e){var d=a(this).data("draggable"),f=d.options,b=a.extend({},e,{item:d.element});d.sortables=[];a(f.connectToSortable).each(function(){var g=a.data(this,"sortable");if(g&&!g.options.disabled){d.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",c,b)}})},stop:function(c,e){var d=a(this).data("draggable"),b=a.extend({},e,{item:d.element});a.each(d.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;d.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert){this.instance.options.revert=true}this.instance._mouseStop(c);this.instance.options.helper=this.instance.options._helper;if(d.options.helper=="original"){this.instance.currentItem.css({top:"auto",left:"auto"})}}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",c,b)}})},drag:function(c,f){var e=a(this).data("draggable"),b=this;var d=function(i){var n=this.offset.click.top,m=this.offset.click.left;var g=this.positionAbs.top,k=this.positionAbs.left;var j=i.height,l=i.width;var p=i.top,h=i.left;return a.ui.isOver(g+n,k+m,p,h,j,l)};a.each(e.sortables,function(g){this.instance.positionAbs=e.positionAbs;this.instance.helperProportions=e.helperProportions;this.instance.offset.click=e.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=a(b).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return f.helper[0]};c.target=this.instance.currentItem[0];this.instance._mouseCapture(c,true);this.instance._mouseStart(c,true,true);this.instance.offset.click.top=e.offset.click.top;this.instance.offset.click.left=e.offset.click.left;this.instance.offset.parent.left-=e.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=e.offset.parent.top-this.instance.offset.parent.top;e._trigger("toSortable",c);e.dropped=this.instance.element;e.currentItem=e.element;this.instance.fromOutside=e}if(this.instance.currentItem){this.instance._mouseDrag(c)}}else{if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",c,this.instance._uiHash(this.instance));this.instance._mouseStop(c,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();if(this.instance.placeholder){this.instance.placeholder.remove()}e._trigger("fromSortable",c);e.dropped=false}}})}});a.ui.plugin.add("draggable","cursor",{start:function(c,d){var b=a("body"),e=a(this).data("draggable").options;if(b.css("cursor")){e._cursor=b.css("cursor")}b.css("cursor",e.cursor)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._cursor){a("body").css("cursor",d._cursor)}}});a.ui.plugin.add("draggable","iframeFix",{start:function(b,c){var d=a(this).data("draggable").options;a(d.iframeFix===true?"iframe":d.iframeFix).each(function(){a('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1000}).css(a(this).offset()).appendTo("body")})},stop:function(b,c){a("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});a.ui.plugin.add("draggable","opacity",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("opacity")){e._opacity=b.css("opacity")}b.css("opacity",e.opacity)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._opacity){a(c.helper).css("opacity",d._opacity)}}});a.ui.plugin.add("draggable","scroll",{start:function(c,d){var b=a(this).data("draggable");if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){b.overflowOffset=b.scrollParent.offset()}},drag:function(d,e){var c=a(this).data("draggable"),f=c.options,b=false;if(c.scrollParent[0]!=document&&c.scrollParent[0].tagName!="HTML"){if(!f.axis||f.axis!="x"){if((c.overflowOffset.top+c.scrollParent[0].offsetHeight)-d.pageY<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop+f.scrollSpeed}else{if(d.pageY-c.overflowOffset.top<f.scrollSensitivity){c.scrollParent[0].scrollTop=b=c.scrollParent[0].scrollTop-f.scrollSpeed}}}if(!f.axis||f.axis!="y"){if((c.overflowOffset.left+c.scrollParent[0].offsetWidth)-d.pageX<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft+f.scrollSpeed}else{if(d.pageX-c.overflowOffset.left<f.scrollSensitivity){c.scrollParent[0].scrollLeft=b=c.scrollParent[0].scrollLeft-f.scrollSpeed}}}}else{if(!f.axis||f.axis!="x"){if(d.pageY-a(document).scrollTop()<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()-f.scrollSpeed)}else{if(a(window).height()-(d.pageY-a(document).scrollTop())<f.scrollSensitivity){b=a(document).scrollTop(a(document).scrollTop()+f.scrollSpeed)}}}if(!f.axis||f.axis!="y"){if(d.pageX-a(document).scrollLeft()<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()-f.scrollSpeed)}else{if(a(window).width()-(d.pageX-a(document).scrollLeft())<f.scrollSensitivity){b=a(document).scrollLeft(a(document).scrollLeft()+f.scrollSpeed)}}}}if(b!==false&&a.ui.ddmanager&&!f.dropBehaviour){a.ui.ddmanager.prepareOffsets(c,d)}}});a.ui.plugin.add("draggable","snap",{start:function(c,d){var b=a(this).data("draggable"),e=b.options;b.snapElements=[];a(e.snap.constructor!=String?(e.snap.items||":data(draggable)"):e.snap).each(function(){var g=a(this);var f=g.offset();if(this!=b.element[0]){b.snapElements.push({item:this,width:g.outerWidth(),height:g.outerHeight(),top:f.top,left:f.left})}})},drag:function(u,p){var g=a(this).data("draggable"),q=g.options;var y=q.snapTolerance;var x=p.offset.left,w=x+g.helperProportions.width,f=p.offset.top,e=f+g.helperProportions.height;for(var v=g.snapElements.length-1;v>=0;v--){var s=g.snapElements[v].left,n=s+g.snapElements[v].width,m=g.snapElements[v].top,A=m+g.snapElements[v].height;if(!((s-y<x&&x<n+y&&m-y<f&&f<A+y)||(s-y<x&&x<n+y&&m-y<e&&e<A+y)||(s-y<w&&w<n+y&&m-y<f&&f<A+y)||(s-y<w&&w<n+y&&m-y<e&&e<A+y))){if(g.snapElements[v].snapping){(g.options.snap.release&&g.options.snap.release.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=false;continue}if(q.snapMode!="inner"){var c=Math.abs(m-e)<=y;var z=Math.abs(A-f)<=y;var j=Math.abs(s-w)<=y;var k=Math.abs(n-x)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m-g.helperProportions.height,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s-g.helperProportions.width}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n}).left-g.margins.left}}var h=(c||z||j||k);if(q.snapMode!="outer"){var c=Math.abs(m-f)<=y;var z=Math.abs(A-e)<=y;var j=Math.abs(s-x)<=y;var k=Math.abs(n-w)<=y;if(c){p.position.top=g._convertPositionTo("relative",{top:m,left:0}).top-g.margins.top}if(z){p.position.top=g._convertPositionTo("relative",{top:A-g.helperProportions.height,left:0}).top-g.margins.top}if(j){p.position.left=g._convertPositionTo("relative",{top:0,left:s}).left-g.margins.left}if(k){p.position.left=g._convertPositionTo("relative",{top:0,left:n-g.helperProportions.width}).left-g.margins.left}}if(!g.snapElements[v].snapping&&(c||z||j||k||h)){(g.options.snap.snap&&g.options.snap.snap.call(g.element,u,a.extend(g._uiHash(),{snapItem:g.snapElements[v].item})))}g.snapElements[v].snapping=(c||z||j||k||h)}}});a.ui.plugin.add("draggable","stack",{start:function(b,c){var e=a(this).data("draggable").options;var d=a.makeArray(a(e.stack.group)).sort(function(g,f){return(parseInt(a(g).css("zIndex"),10)||e.stack.min)-(parseInt(a(f).css("zIndex"),10)||e.stack.min)});a(d).each(function(f){this.style.zIndex=e.stack.min+f});this[0].style.zIndex=e.stack.min+d.length}});a.ui.plugin.add("draggable","zIndex",{start:function(c,d){var b=a(d.helper),e=a(this).data("draggable").options;if(b.css("zIndex")){e._zIndex=b.css("zIndex")}b.css("zIndex",e.zIndex)},stop:function(b,c){var d=a(this).data("draggable").options;if(d._zIndex){a(c.helper).css("zIndex",d._zIndex)}}})})(jQuery);;/*
 * jQuery UI Resizable 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Resizables
 *
 * Depends:
 *	ui.core.js
 */
(function(c){c.widget("ui.resizable",c.extend({},c.ui.mouse,{_init:function(){var e=this,j=this.options;this.element.addClass("ui-resizable");c.extend(this,{_aspectRatio:!!(j.aspectRatio),aspectRatio:j.aspectRatio,originalElement:this.element,_proportionallyResizeElements:[],_helper:j.helper||j.ghost||j.animate?j.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){if(/relative/.test(this.element.css("position"))&&c.browser.opera){this.element.css({position:"relative",top:"auto",left:"auto"})}this.element.wrap(c('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=j.handles||(!c(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all"){this.handles="n,e,s,w,se,sw,ne,nw"}var k=this.handles.split(",");this.handles={};for(var f=0;f<k.length;f++){var h=c.trim(k[f]),d="ui-resizable-"+h;var g=c('<div class="ui-resizable-handle '+d+'"></div>');if(/sw|se|ne|nw/.test(h)){g.css({zIndex:++j.zIndex})}if("se"==h){g.addClass("ui-icon ui-icon-gripsmall-diagonal-se")}this.handles[h]=".ui-resizable-"+h;this.element.append(g)}}this._renderAxis=function(p){p=p||this.element;for(var m in this.handles){if(this.handles[m].constructor==String){this.handles[m]=c(this.handles[m],this.element).show()}if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var n=c(this.handles[m],this.element),o=0;o=/sw|ne|nw|se|n|s/.test(m)?n.outerHeight():n.outerWidth();var l=["padding",/ne|nw|n/.test(m)?"Top":/se|sw|s/.test(m)?"Bottom":/^e$/.test(m)?"Right":"Left"].join("");p.css(l,o);this._proportionallyResize()}if(!c(this.handles[m]).length){continue}}};this._renderAxis(this.element);this._handles=c(".ui-resizable-handle",this.element).disableSelection();this._handles.mouseover(function(){if(!e.resizing){if(this.className){var i=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i)}e.axis=i&&i[1]?i[1]:"se"}});if(j.autoHide){this._handles.hide();c(this.element).addClass("ui-resizable-autohide").hover(function(){c(this).removeClass("ui-resizable-autohide");e._handles.show()},function(){if(!e.resizing){c(this).addClass("ui-resizable-autohide");e._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var d=function(f){c(f).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};if(this.elementIsWrapper){d(this.element);var e=this.element;e.parent().append(this.originalElement.css({position:e.css("position"),width:e.outerWidth(),height:e.outerHeight(),top:e.css("top"),left:e.css("left")})).end().remove()}this.originalElement.css("resize",this.originalResizeStyle);d(this.originalElement)},_mouseCapture:function(e){var f=false;for(var d in this.handles){if(c(this.handles[d])[0]==e.target){f=true}}return this.options.disabled||!!f},_mouseStart:function(f){var i=this.options,e=this.element.position(),d=this.element;this.resizing=true;this.documentScroll={top:c(document).scrollTop(),left:c(document).scrollLeft()};if(d.is(".ui-draggable")||(/absolute/).test(d.css("position"))){d.css({position:"absolute",top:e.top,left:e.left})}if(c.browser.opera&&(/relative/).test(d.css("position"))){d.css({position:"relative",top:"auto",left:"auto"})}this._renderProxy();var j=b(this.helper.css("left")),g=b(this.helper.css("top"));if(i.containment){j+=c(i.containment).scrollLeft()||0;g+=c(i.containment).scrollTop()||0}this.offset=this.helper.offset();this.position={left:j,top:g};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:j,top:g};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:f.pageX,top:f.pageY};this.aspectRatio=(typeof i.aspectRatio=="number")?i.aspectRatio:((this.originalSize.width/this.originalSize.height)||1);var h=c(".ui-resizable-"+this.axis).css("cursor");c("body").css("cursor",h=="auto"?this.axis+"-resize":h);d.addClass("ui-resizable-resizing");this._propagate("start",f);return true},_mouseDrag:function(d){var g=this.helper,f=this.options,l={},p=this,i=this.originalMousePosition,m=this.axis;var q=(d.pageX-i.left)||0,n=(d.pageY-i.top)||0;var h=this._change[m];if(!h){return false}var k=h.apply(this,[d,q,n]),j=c.browser.msie&&c.browser.version<7,e=this.sizeDiff;if(this._aspectRatio||d.shiftKey){k=this._updateRatio(k,d)}k=this._respectSize(k,d);this._propagate("resize",d);g.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});if(!this._helper&&this._proportionallyResizeElements.length){this._proportionallyResize()}this._updateCache(k);this._trigger("resize",d,this.ui());return false},_mouseStop:function(g){this.resizing=false;var h=this.options,l=this;if(this._helper){var f=this._proportionallyResizeElements,d=f.length&&(/textarea/i).test(f[0].nodeName),e=d&&c.ui.hasScroll(f[0],"left")?0:l.sizeDiff.height,j=d?0:l.sizeDiff.width;var m={width:(l.size.width-j),height:(l.size.height-e)},i=(parseInt(l.element.css("left"),10)+(l.position.left-l.originalPosition.left))||null,k=(parseInt(l.element.css("top"),10)+(l.position.top-l.originalPosition.top))||null;if(!h.animate){this.element.css(c.extend(m,{top:k,left:i}))}l.helper.height(l.size.height);l.helper.width(l.size.width);if(this._helper&&!h.animate){this._proportionallyResize()}}c("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",g);if(this._helper){this.helper.remove()}return false},_updateCache:function(d){var e=this.options;this.offset=this.helper.offset();if(a(d.left)){this.position.left=d.left}if(a(d.top)){this.position.top=d.top}if(a(d.height)){this.size.height=d.height}if(a(d.width)){this.size.width=d.width}},_updateRatio:function(g,f){var h=this.options,i=this.position,e=this.size,d=this.axis;if(g.height){g.width=(e.height*this.aspectRatio)}else{if(g.width){g.height=(e.width/this.aspectRatio)}}if(d=="sw"){g.left=i.left+(e.width-g.width);g.top=null}if(d=="nw"){g.top=i.top+(e.height-g.height);g.left=i.left+(e.width-g.width)}return g},_respectSize:function(k,f){var i=this.helper,h=this.options,q=this._aspectRatio||f.shiftKey,p=this.axis,s=a(k.width)&&h.maxWidth&&(h.maxWidth<k.width),l=a(k.height)&&h.maxHeight&&(h.maxHeight<k.height),g=a(k.width)&&h.minWidth&&(h.minWidth>k.width),r=a(k.height)&&h.minHeight&&(h.minHeight>k.height);if(g){k.width=h.minWidth}if(r){k.height=h.minHeight}if(s){k.width=h.maxWidth}if(l){k.height=h.maxHeight}var e=this.originalPosition.left+this.originalSize.width,n=this.position.top+this.size.height;var j=/sw|nw|w/.test(p),d=/nw|ne|n/.test(p);if(g&&j){k.left=e-h.minWidth}if(s&&j){k.left=e-h.maxWidth}if(r&&d){k.top=n-h.minHeight}if(l&&d){k.top=n-h.maxHeight}var m=!k.width&&!k.height;if(m&&!k.left&&k.top){k.top=null}else{if(m&&!k.top&&k.left){k.left=null}}return k},_proportionallyResize:function(){var j=this.options;if(!this._proportionallyResizeElements.length){return}var f=this.helper||this.element;for(var e=0;e<this._proportionallyResizeElements.length;e++){var g=this._proportionallyResizeElements[e];if(!this.borderDif){var d=[g.css("borderTopWidth"),g.css("borderRightWidth"),g.css("borderBottomWidth"),g.css("borderLeftWidth")],h=[g.css("paddingTop"),g.css("paddingRight"),g.css("paddingBottom"),g.css("paddingLeft")];this.borderDif=c.map(d,function(k,m){var l=parseInt(k,10)||0,n=parseInt(h[m],10)||0;return l+n})}if(c.browser.msie&&!(!(c(f).is(":hidden")||c(f).parents(":hidden").length))){continue}g.css({height:(f.height()-this.borderDif[0]-this.borderDif[2])||0,width:(f.width()-this.borderDif[1]-this.borderDif[3])||0})}},_renderProxy:function(){var e=this.element,h=this.options;this.elementOffset=e.offset();if(this._helper){this.helper=this.helper||c('<div style="overflow:hidden;"></div>');var d=c.browser.msie&&c.browser.version<7,f=(d?1:0),g=(d?2:-1);this.helper.addClass(this._helper).css({width:this.element.outerWidth()+g,height:this.element.outerHeight()+g,position:"absolute",left:this.elementOffset.left-f+"px",top:this.elementOffset.top-f+"px",zIndex:++h.zIndex});this.helper.appendTo("body").disableSelection()}else{this.helper=this.element}},_change:{e:function(f,e,d){return{width:this.originalSize.width+e}},w:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{left:h.left+e,width:f.width-e}},n:function(g,e,d){var i=this.options,f=this.originalSize,h=this.originalPosition;return{top:h.top+d,height:f.height-d}},s:function(f,e,d){return{height:this.originalSize.height+d}},se:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},sw:function(f,e,d){return c.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[f,e,d]))},ne:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[f,e,d]))},nw:function(f,e,d){return c.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[f,e,d]))}},_propagate:function(e,d){c.ui.plugin.call(this,e,[d,this.ui()]);(e!="resize"&&this._trigger(e,d,this.ui()))},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}}));c.extend(c.ui.resizable,{version:"1.7.2",eventPrefix:"resize",defaults:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,cancel:":input,option",containment:false,delay:0,distance:1,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1000}});c.ui.plugin.add("resizable","alsoResize",{start:function(e,f){var d=c(this).data("resizable"),g=d.options;_store=function(h){c(h).each(function(){c(this).data("resizable-alsoresize",{width:parseInt(c(this).width(),10),height:parseInt(c(this).height(),10),left:parseInt(c(this).css("left"),10),top:parseInt(c(this).css("top"),10)})})};if(typeof(g.alsoResize)=="object"&&!g.alsoResize.parentNode){if(g.alsoResize.length){g.alsoResize=g.alsoResize[0];_store(g.alsoResize)}else{c.each(g.alsoResize,function(h,i){_store(h)})}}else{_store(g.alsoResize)}},resize:function(f,h){var e=c(this).data("resizable"),i=e.options,g=e.originalSize,k=e.originalPosition;var j={height:(e.size.height-g.height)||0,width:(e.size.width-g.width)||0,top:(e.position.top-k.top)||0,left:(e.position.left-k.left)||0},d=function(l,m){c(l).each(function(){var p=c(this),q=c(this).data("resizable-alsoresize"),o={},n=m&&m.length?m:["width","height","top","left"];c.each(n||["width","height","top","left"],function(r,t){var s=(q[t]||0)+(j[t]||0);if(s&&s>=0){o[t]=s||null}});if(/relative/.test(p.css("position"))&&c.browser.opera){e._revertToRelativePosition=true;p.css({position:"absolute",top:"auto",left:"auto"})}p.css(o)})};if(typeof(i.alsoResize)=="object"&&!i.alsoResize.nodeType){c.each(i.alsoResize,function(l,m){d(l,m)})}else{d(i.alsoResize)}},stop:function(e,f){var d=c(this).data("resizable");if(d._revertToRelativePosition&&c.browser.opera){d._revertToRelativePosition=false;el.css({position:"relative"})}c(this).removeData("resizable-alsoresize-start")}});c.ui.plugin.add("resizable","animate",{stop:function(h,m){var n=c(this).data("resizable"),i=n.options;var g=n._proportionallyResizeElements,d=g.length&&(/textarea/i).test(g[0].nodeName),e=d&&c.ui.hasScroll(g[0],"left")?0:n.sizeDiff.height,k=d?0:n.sizeDiff.width;var f={width:(n.size.width-k),height:(n.size.height-e)},j=(parseInt(n.element.css("left"),10)+(n.position.left-n.originalPosition.left))||null,l=(parseInt(n.element.css("top"),10)+(n.position.top-n.originalPosition.top))||null;n.element.animate(c.extend(f,l&&j?{top:l,left:j}:{}),{duration:i.animateDuration,easing:i.animateEasing,step:function(){var o={width:parseInt(n.element.css("width"),10),height:parseInt(n.element.css("height"),10),top:parseInt(n.element.css("top"),10),left:parseInt(n.element.css("left"),10)};if(g&&g.length){c(g[0]).css({width:o.width,height:o.height})}n._updateCache(o);n._propagate("resize",h)}})}});c.ui.plugin.add("resizable","containment",{start:function(e,q){var s=c(this).data("resizable"),i=s.options,k=s.element;var f=i.containment,j=(f instanceof c)?f.get(0):(/parent/.test(f))?k.parent().get(0):f;if(!j){return}s.containerElement=c(j);if(/document/.test(f)||f==document){s.containerOffset={left:0,top:0};s.containerPosition={left:0,top:0};s.parentData={element:c(document),left:0,top:0,width:c(document).width(),height:c(document).height()||document.body.parentNode.scrollHeight}}else{var m=c(j),h=[];c(["Top","Right","Left","Bottom"]).each(function(p,o){h[p]=b(m.css("padding"+o))});s.containerOffset=m.offset();s.containerPosition=m.position();s.containerSize={height:(m.innerHeight()-h[3]),width:(m.innerWidth()-h[1])};var n=s.containerOffset,d=s.containerSize.height,l=s.containerSize.width,g=(c.ui.hasScroll(j,"left")?j.scrollWidth:l),r=(c.ui.hasScroll(j)?j.scrollHeight:d);s.parentData={element:j,left:n.left,top:n.top,width:g,height:r}}},resize:function(f,p){var s=c(this).data("resizable"),h=s.options,e=s.containerSize,n=s.containerOffset,l=s.size,m=s.position,q=s._aspectRatio||f.shiftKey,d={top:0,left:0},g=s.containerElement;if(g[0]!=document&&(/static/).test(g.css("position"))){d=n}if(m.left<(s._helper?n.left:0)){s.size.width=s.size.width+(s._helper?(s.position.left-n.left):(s.position.left-d.left));if(q){s.size.height=s.size.width/h.aspectRatio}s.position.left=h.helper?n.left:0}if(m.top<(s._helper?n.top:0)){s.size.height=s.size.height+(s._helper?(s.position.top-n.top):s.position.top);if(q){s.size.width=s.size.height*h.aspectRatio}s.position.top=s._helper?n.top:0}s.offset.left=s.parentData.left+s.position.left;s.offset.top=s.parentData.top+s.position.top;var k=Math.abs((s._helper?s.offset.left-d.left:(s.offset.left-d.left))+s.sizeDiff.width),r=Math.abs((s._helper?s.offset.top-d.top:(s.offset.top-n.top))+s.sizeDiff.height);var j=s.containerElement.get(0)==s.element.parent().get(0),i=/relative|absolute/.test(s.containerElement.css("position"));if(j&&i){k-=s.parentData.left}if(k+s.size.width>=s.parentData.width){s.size.width=s.parentData.width-k;if(q){s.size.height=s.size.width/s.aspectRatio}}if(r+s.size.height>=s.parentData.height){s.size.height=s.parentData.height-r;if(q){s.size.width=s.size.height*s.aspectRatio}}},stop:function(e,m){var p=c(this).data("resizable"),f=p.options,k=p.position,l=p.containerOffset,d=p.containerPosition,g=p.containerElement;var i=c(p.helper),q=i.offset(),n=i.outerWidth()-p.sizeDiff.width,j=i.outerHeight()-p.sizeDiff.height;if(p._helper&&!f.animate&&(/relative/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}if(p._helper&&!f.animate&&(/static/).test(g.css("position"))){c(this).css({left:q.left-d.left-l.left,width:n,height:j})}}});c.ui.plugin.add("resizable","ghost",{start:function(f,g){var d=c(this).data("resizable"),h=d.options,e=d.size;d.ghost=d.originalElement.clone();d.ghost.css({opacity:0.25,display:"block",position:"relative",height:e.height,width:e.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof h.ghost=="string"?h.ghost:"");d.ghost.appendTo(d.helper)},resize:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost){d.ghost.css({position:"relative",height:d.size.height,width:d.size.width})}},stop:function(e,f){var d=c(this).data("resizable"),g=d.options;if(d.ghost&&d.helper){d.helper.get(0).removeChild(d.ghost.get(0))}}});c.ui.plugin.add("resizable","grid",{resize:function(d,l){var n=c(this).data("resizable"),g=n.options,j=n.size,h=n.originalSize,i=n.originalPosition,m=n.axis,k=g._aspectRatio||d.shiftKey;g.grid=typeof g.grid=="number"?[g.grid,g.grid]:g.grid;var f=Math.round((j.width-h.width)/(g.grid[0]||1))*(g.grid[0]||1),e=Math.round((j.height-h.height)/(g.grid[1]||1))*(g.grid[1]||1);if(/^(se|s|e)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e}else{if(/^(ne)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e}else{if(/^(sw)$/.test(m)){n.size.width=h.width+f;n.size.height=h.height+e;n.position.left=i.left-f}else{n.size.width=h.width+f;n.size.height=h.height+e;n.position.top=i.top-e;n.position.left=i.left-f}}}}});var b=function(d){return parseInt(d,10)||0};var a=function(d){return !isNaN(parseInt(d,10))}})(jQuery);;/*
 * jQuery UI Dialog 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Dialog
 *
 * Depends:
 *	ui.core.js
 *	ui.draggable.js
 *	ui.resizable.js
 */
(function(c){var b={dragStart:"start.draggable",drag:"drag.draggable",dragStop:"stop.draggable",maxHeight:"maxHeight.resizable",minHeight:"minHeight.resizable",maxWidth:"maxWidth.resizable",minWidth:"minWidth.resizable",resizeStart:"start.resizable",resize:"drag.resizable",resizeStop:"stop.resizable"},a="ui-dialog ui-widget ui-widget-content ui-corner-all ";c.widget("ui.dialog",{_init:function(){this.originalTitle=this.element.attr("title");var l=this,m=this.options,j=m.title||this.originalTitle||"&nbsp;",e=c.ui.dialog.getTitleId(this.element),k=(this.uiDialog=c("<div/>")).appendTo(document.body).hide().addClass(a+m.dialogClass).css({position:"absolute",overflow:"hidden",zIndex:m.zIndex}).attr("tabIndex",-1).css("outline",0).keydown(function(n){(m.closeOnEscape&&n.keyCode&&n.keyCode==c.ui.keyCode.ESCAPE&&l.close(n))}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(n){l.moveToTop(false,n)}),g=this.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(k),f=(this.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(k),i=c('<a href="#"/>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role","button").hover(function(){i.addClass("ui-state-hover")},function(){i.removeClass("ui-state-hover")}).focus(function(){i.addClass("ui-state-focus")}).blur(function(){i.removeClass("ui-state-focus")}).mousedown(function(n){n.stopPropagation()}).click(function(n){l.close(n);return false}).appendTo(f),h=(this.uiDialogTitlebarCloseText=c("<span/>")).addClass("ui-icon ui-icon-closethick").text(m.closeText).appendTo(i),d=c("<span/>").addClass("ui-dialog-title").attr("id",e).html(j).prependTo(f);f.find("*").add(f).disableSelection();(m.draggable&&c.fn.draggable&&this._makeDraggable());(m.resizable&&c.fn.resizable&&this._makeResizable());this._createButtons(m.buttons);this._isOpen=false;(m.bgiframe&&c.fn.bgiframe&&k.bgiframe());(m.autoOpen&&this.open())},destroy:function(){(this.overlay&&this.overlay.destroy());this.uiDialog.hide();this.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");this.uiDialog.remove();(this.originalTitle&&this.element.attr("title",this.originalTitle))},close:function(f){var d=this;if(false===d._trigger("beforeclose",f)){return}(d.overlay&&d.overlay.destroy());d.uiDialog.unbind("keypress.ui-dialog");(d.options.hide?d.uiDialog.hide(d.options.hide,function(){d._trigger("close",f)}):d.uiDialog.hide()&&d._trigger("close",f));c.ui.dialog.overlay.resize();d._isOpen=false;if(d.options.modal){var e=0;c(".ui-dialog").each(function(){if(this!=d.uiDialog[0]){e=Math.max(e,c(this).css("z-index"))}});c.ui.dialog.maxZ=e}},isOpen:function(){return this._isOpen},moveToTop:function(f,e){if((this.options.modal&&!f)||(!this.options.stack&&!this.options.modal)){return this._trigger("focus",e)}if(this.options.zIndex>c.ui.dialog.maxZ){c.ui.dialog.maxZ=this.options.zIndex}(this.overlay&&this.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=++c.ui.dialog.maxZ));var d={scrollTop:this.element.attr("scrollTop"),scrollLeft:this.element.attr("scrollLeft")};this.uiDialog.css("z-index",++c.ui.dialog.maxZ);this.element.attr(d);this._trigger("focus",e)},open:function(){if(this._isOpen){return}var e=this.options,d=this.uiDialog;this.overlay=e.modal?new c.ui.dialog.overlay(this):null;(d.next().length&&d.appendTo("body"));this._size();this._position(e.position);d.show(e.show);this.moveToTop(true);(e.modal&&d.bind("keypress.ui-dialog",function(h){if(h.keyCode!=c.ui.keyCode.TAB){return}var g=c(":tabbable",this),i=g.filter(":first")[0],f=g.filter(":last")[0];if(h.target==f&&!h.shiftKey){setTimeout(function(){i.focus()},1)}else{if(h.target==i&&h.shiftKey){setTimeout(function(){f.focus()},1)}}}));c([]).add(d.find(".ui-dialog-content :tabbable:first")).add(d.find(".ui-dialog-buttonpane :tabbable:first")).add(d).filter(":first").focus();this._trigger("open");this._isOpen=true},_createButtons:function(g){var f=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix");this.uiDialog.find(".ui-dialog-buttonpane").remove();(typeof g=="object"&&g!==null&&c.each(g,function(){return !(d=true)}));if(d){c.each(g,function(h,i){c('<button type="button"></button>').addClass("ui-state-default ui-corner-all").text(h).click(function(){i.apply(f.element[0],arguments)}).hover(function(){c(this).addClass("ui-state-hover")},function(){c(this).removeClass("ui-state-hover")}).focus(function(){c(this).addClass("ui-state-focus")}).blur(function(){c(this).removeClass("ui-state-focus")}).appendTo(e)});e.appendTo(this.uiDialog)}},_makeDraggable:function(){var d=this,f=this.options,e;this.uiDialog.draggable({cancel:".ui-dialog-content",handle:".ui-dialog-titlebar",containment:"document",start:function(){e=f.height;c(this).height(c(this).height()).addClass("ui-dialog-dragging");(f.dragStart&&f.dragStart.apply(d.element[0],arguments))},drag:function(){(f.drag&&f.drag.apply(d.element[0],arguments))},stop:function(){c(this).removeClass("ui-dialog-dragging").height(e);(f.dragStop&&f.dragStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}})},_makeResizable:function(g){g=(g===undefined?this.options.resizable:g);var d=this,f=this.options,e=typeof g=="string"?g:"n,e,s,w,se,sw,ne,nw";this.uiDialog.resizable({cancel:".ui-dialog-content",alsoResize:this.element,maxWidth:f.maxWidth,maxHeight:f.maxHeight,minWidth:f.minWidth,minHeight:f.minHeight,start:function(){c(this).addClass("ui-dialog-resizing");(f.resizeStart&&f.resizeStart.apply(d.element[0],arguments))},resize:function(){(f.resize&&f.resize.apply(d.element[0],arguments))},handles:e,stop:function(){c(this).removeClass("ui-dialog-resizing");f.height=c(this).height();f.width=c(this).width();(f.resizeStop&&f.resizeStop.apply(d.element[0],arguments));c.ui.dialog.overlay.resize()}}).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_position:function(i){var e=c(window),f=c(document),g=f.scrollTop(),d=f.scrollLeft(),h=g;if(c.inArray(i,["center","top","right","bottom","left"])>=0){i=[i=="right"||i=="left"?i:"center",i=="top"||i=="bottom"?i:"middle"]}if(i.constructor!=Array){i=["center","middle"]}if(i[0].constructor==Number){d+=i[0]}else{switch(i[0]){case"left":d+=0;break;case"right":d+=e.width()-this.uiDialog.outerWidth();break;default:case"center":d+=(e.width()-this.uiDialog.outerWidth())/2}}if(i[1].constructor==Number){g+=i[1]}else{switch(i[1]){case"top":g+=0;break;case"bottom":g+=e.height()-this.uiDialog.outerHeight();break;default:case"middle":g+=(e.height()-this.uiDialog.outerHeight())/2}}g=Math.max(g,h);this.uiDialog.css({top:g,left:d})},_setData:function(e,f){(b[e]&&this.uiDialog.data(b[e],f));switch(e){case"buttons":this._createButtons(f);break;case"closeText":this.uiDialogTitlebarCloseText.text(f);break;case"dialogClass":this.uiDialog.removeClass(this.options.dialogClass).addClass(a+f);break;case"draggable":(f?this._makeDraggable():this.uiDialog.draggable("destroy"));break;case"height":this.uiDialog.height(f);break;case"position":this._position(f);break;case"resizable":var d=this.uiDialog,g=this.uiDialog.is(":data(resizable)");(g&&!f&&d.resizable("destroy"));(g&&typeof f=="string"&&d.resizable("option","handles",f));(g||this._makeResizable(f));break;case"title":c(".ui-dialog-title",this.uiDialogTitlebar).html(f||"&nbsp;");break;case"width":this.uiDialog.width(f);break}c.widget.prototype._setData.apply(this,arguments)},_size:function(){var e=this.options;this.element.css({height:0,minHeight:0,width:"auto"});var d=this.uiDialog.css({height:"auto",width:e.width}).height();this.element.css({minHeight:Math.max(e.minHeight-d,0),height:e.height=="auto"?"auto":Math.max(e.height-d,0)})}});c.extend(c.ui.dialog,{version:"1.7.2",defaults:{autoOpen:true,bgiframe:false,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:"center",resizable:true,show:null,stack:true,title:"",width:300,zIndex:1000},getter:"isOpen",uuid:0,maxZ:0,getTitleId:function(d){return"ui-dialog-title-"+(d.attr("id")||++this.uuid)},overlay:function(d){this.$el=c.ui.dialog.overlay.create(d)}});c.extend(c.ui.dialog.overlay,{instances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(d){return d+".dialog-overlay"}).join(" "),create:function(e){if(this.instances.length===0){setTimeout(function(){if(c.ui.dialog.overlay.instances.length){c(document).bind(c.ui.dialog.overlay.events,function(f){var g=c(f.target).parents(".ui-dialog").css("zIndex")||0;return(g>c.ui.dialog.overlay.maxZ)})}},1);c(document).bind("keydown.dialog-overlay",function(f){(e.options.closeOnEscape&&f.keyCode&&f.keyCode==c.ui.keyCode.ESCAPE&&e.close(f))});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var d=c("<div></div>").appendTo(document.body).addClass("ui-widget-overlay").css({width:this.width(),height:this.height()});(e.options.bgiframe&&c.fn.bgiframe&&d.bgiframe());this.instances.push(d);return d},destroy:function(d){this.instances.splice(c.inArray(this.instances,d),1);if(this.instances.length===0){c([document,window]).unbind(".dialog-overlay")}d.remove();var e=0;c.each(this.instances,function(){e=Math.max(e,this.css("z-index"))});this.maxZ=e},height:function(){if(c.browser.msie&&c.browser.version<7){var e=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);var d=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);if(e<d){return c(window).height()+"px"}else{return e+"px"}}else{return c(document).height()+"px"}},width:function(){if(c.browser.msie&&c.browser.version<7){var d=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);var e=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);if(d<e){return c(window).width()+"px"}else{return d+"px"}}else{return c(document).width()+"px"}},resize:function(){var d=c([]);c.each(c.ui.dialog.overlay.instances,function(){d=d.add(this)});d.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);;/*
 * jQuery UI Tabs 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Tabs
 *
 * Depends:
 *	ui.core.js
 */
(function(a){a.widget("ui.tabs",{_init:function(){if(this.options.deselectable!==undefined){this.options.collapsible=this.options.deselectable}this._tabify(true)},_setData:function(b,c){if(b=="selected"){if(this.options.collapsible&&c==this.options.selected){return}this.select(c)}else{this.options[b]=c;if(b=="deselectable"){this.options.collapsible=c}this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^A-Za-z0-9\-_:\.]/g,"")||this.options.idPrefix+a.data(b)},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+a.data(this.list[0]));return a.cookie.apply(null,[b].concat(a.makeArray(arguments)))},_ui:function(c,b){return{tab:c,panel:b,index:this.anchors.index(c)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=a(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(n){this.list=this.element.children("ul:first");this.lis=a("li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return a("a",this)[0]});this.panels=a([]);var p=this,d=this.options;var c=/^#.+/;this.anchors.each(function(r,o){var q=a(o).attr("href");var s=q.split("#")[0],u;if(s&&(s===location.toString().split("#")[0]||(u=a("base")[0])&&s===u.href)){q=o.hash;o.href=q}if(c.test(q)){p.panels=p.panels.add(p._sanitizeSelector(q))}else{if(q!="#"){a.data(o,"href.tabs",q);a.data(o,"load.tabs",q.replace(/#.*$/,""));var w=p._tabId(o);o.href="#"+w;var v=a("#"+w);if(!v.length){v=a(d.panelTemplate).attr("id",w).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(p.panels[r-1]||p.list);v.data("destroy.tabs",true)}p.panels=p.panels.add(v)}else{d.disabled.push(r)}}});if(n){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(d.selected===undefined){if(location.hash){this.anchors.each(function(q,o){if(o.hash==location.hash){d.selected=q;return false}})}if(typeof d.selected!="number"&&d.cookie){d.selected=parseInt(p._cookie(),10)}if(typeof d.selected!="number"&&this.lis.filter(".ui-tabs-selected").length){d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}d.selected=d.selected||0}else{if(d.selected===null){d.selected=-1}}d.selected=((d.selected>=0&&this.anchors[d.selected])||d.selected<0)?d.selected:0;d.disabled=a.unique(d.disabled.concat(a.map(this.lis.filter(".ui-state-disabled"),function(q,o){return p.lis.index(q)}))).sort();if(a.inArray(d.selected,d.disabled)!=-1){d.disabled.splice(a.inArray(d.selected,d.disabled),1)}this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");if(d.selected>=0&&this.anchors.length){this.panels.eq(d.selected).removeClass("ui-tabs-hide");this.lis.eq(d.selected).addClass("ui-tabs-selected ui-state-active");p.element.queue("tabs",function(){p._trigger("show",null,p._ui(p.anchors[d.selected],p.panels[d.selected]))});this.load(d.selected)}a(window).bind("unload",function(){p.lis.add(p.anchors).unbind(".tabs");p.lis=p.anchors=p.panels=null})}else{d.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"))}this.element[d.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");if(d.cookie){this._cookie(d.selected,d.cookie)}for(var g=0,m;(m=this.lis[g]);g++){a(m)[a.inArray(g,d.disabled)!=-1&&!a(m).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled")}if(d.cache===false){this.anchors.removeData("cache.tabs")}this.lis.add(this.anchors).unbind(".tabs");if(d.event!="mouseover"){var f=function(o,i){if(i.is(":not(.ui-state-disabled)")){i.addClass("ui-state-"+o)}};var j=function(o,i){i.removeClass("ui-state-"+o)};this.lis.bind("mouseover.tabs",function(){f("hover",a(this))});this.lis.bind("mouseout.tabs",function(){j("hover",a(this))});this.anchors.bind("focus.tabs",function(){f("focus",a(this).closest("li"))});this.anchors.bind("blur.tabs",function(){j("focus",a(this).closest("li"))})}var b,h;if(d.fx){if(a.isArray(d.fx)){b=d.fx[0];h=d.fx[1]}else{b=h=d.fx}}function e(i,o){i.css({display:""});if(a.browser.msie&&o.opacity){i[0].style.removeAttribute("filter")}}var k=h?function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.hide().removeClass("ui-tabs-hide").animate(h,h.duration||"normal",function(){e(o,h);p._trigger("show",null,p._ui(i,o[0]))})}:function(i,o){a(i).closest("li").removeClass("ui-state-default").addClass("ui-tabs-selected ui-state-active");o.removeClass("ui-tabs-hide");p._trigger("show",null,p._ui(i,o[0]))};var l=b?function(o,i){i.animate(b,b.duration||"normal",function(){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");e(i,b);p.element.dequeue("tabs")})}:function(o,i,q){p.lis.removeClass("ui-tabs-selected ui-state-active").addClass("ui-state-default");i.addClass("ui-tabs-hide");p.element.dequeue("tabs")};this.anchors.bind(d.event+".tabs",function(){var o=this,r=a(this).closest("li"),i=p.panels.filter(":not(.ui-tabs-hide)"),q=a(p._sanitizeSelector(this.hash));if((r.hasClass("ui-tabs-selected")&&!d.collapsible)||r.hasClass("ui-state-disabled")||r.hasClass("ui-state-processing")||p._trigger("select",null,p._ui(this,q[0]))===false){this.blur();return false}d.selected=p.anchors.index(this);p.abort();if(d.collapsible){if(r.hasClass("ui-tabs-selected")){d.selected=-1;if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){l(o,i)}).dequeue("tabs");this.blur();return false}else{if(!i.length){if(d.cookie){p._cookie(d.selected,d.cookie)}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this));this.blur();return false}}}if(d.cookie){p._cookie(d.selected,d.cookie)}if(q.length){if(i.length){p.element.queue("tabs",function(){l(o,i)})}p.element.queue("tabs",function(){k(o,q)});p.load(p.anchors.index(this))}else{throw"jQuery UI Tabs: Mismatching fragment identifier."}if(a.browser.msie){this.blur()}});this.anchors.bind("click.tabs",function(){return false})},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var c=a.data(this,"href.tabs");if(c){this.href=c}var d=a(this).unbind(".tabs");a.each(["href","load","cache"],function(e,f){d.removeData(f+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){if(a.data(this,"destroy.tabs")){a(this).remove()}else{a(this).removeClass(["ui-state-default","ui-corner-top","ui-tabs-selected","ui-state-active","ui-state-hover","ui-state-focus","ui-state-disabled","ui-tabs-panel","ui-widget-content","ui-corner-bottom","ui-tabs-hide"].join(" "))}});if(b.cookie){this._cookie(null,b.cookie)}},add:function(e,d,c){if(c===undefined){c=this.anchors.length}var b=this,g=this.options,i=a(g.tabTemplate.replace(/#\{href\}/g,e).replace(/#\{label\}/g,d)),h=!e.indexOf("#")?e.replace("#",""):this._tabId(a("a",i)[0]);i.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var f=a("#"+h);if(!f.length){f=a(g.panelTemplate).attr("id",h).data("destroy.tabs",true)}f.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(c>=this.lis.length){i.appendTo(this.list);f.appendTo(this.list[0].parentNode)}else{i.insertBefore(this.lis[c]);f.insertBefore(this.panels[c])}g.disabled=a.map(g.disabled,function(k,j){return k>=c?++k:k});this._tabify();if(this.anchors.length==1){i.addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){b._trigger("show",null,b._ui(b.anchors[0],b.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[c],this.panels[c]))},remove:function(b){var d=this.options,e=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();if(e.hasClass("ui-tabs-selected")&&this.anchors.length>1){this.select(b+(b+1<this.anchors.length?1:-1))}d.disabled=a.map(a.grep(d.disabled,function(g,f){return g!=b}),function(g,f){return g>=b?--g:g});this._tabify();this._trigger("remove",null,this._ui(e.find("a")[0],c[0]))},enable:function(b){var c=this.options;if(a.inArray(b,c.disabled)==-1){return}this.lis.eq(b).removeClass("ui-state-disabled");c.disabled=a.grep(c.disabled,function(e,d){return e!=b});this._trigger("enable",null,this._ui(this.anchors[b],this.panels[b]))},disable:function(c){var b=this,d=this.options;if(c!=d.selected){this.lis.eq(c).addClass("ui-state-disabled");d.disabled.push(c);d.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[c],this.panels[c]))}},select:function(b){if(typeof b=="string"){b=this.anchors.index(this.anchors.filter("[href$="+b+"]"))}else{if(b===null){b=-1}}if(b==-1&&this.options.collapsible){b=this.options.selected}this.anchors.eq(b).trigger(this.options.event+".tabs")},load:function(e){var c=this,g=this.options,b=this.anchors.eq(e)[0],d=a.data(b,"load.tabs");this.abort();if(!d||this.element.queue("tabs").length!==0&&a.data(b,"cache.tabs")){this.element.dequeue("tabs");return}this.lis.eq(e).addClass("ui-state-processing");if(g.spinner){var f=a("span",b);f.data("label.tabs",f.html()).html(g.spinner)}this.xhr=a.ajax(a.extend({},g.ajaxOptions,{url:d,success:function(i,h){a(c._sanitizeSelector(b.hash)).html(i);c._cleanup();if(g.cache){a.data(b,"cache.tabs",true)}c._trigger("load",null,c._ui(c.anchors[e],c.panels[e]));try{g.ajaxOptions.success(i,h)}catch(j){}c.element.dequeue("tabs")}}))},abort:function(){this.element.queue([]);this.panels.stop(false,true);if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup()},url:function(c,b){this.anchors.eq(c).removeData("cache.tabs").data("load.tabs",b)},length:function(){return this.anchors.length}});a.extend(a.ui.tabs,{version:"1.7.2",getter:"length",defaults:{ajaxOptions:null,cache:false,cookie:null,collapsible:false,disabled:[],event:"click",fx:null,idPrefix:"ui-tabs-",panelTemplate:"<div></div>",spinner:"<em>Loading&#8230;</em>",tabTemplate:'<li><a href="#{href}"><span>#{label}</span></a></li>'}});a.extend(a.ui.tabs.prototype,{rotation:null,rotate:function(d,f){var b=this,g=this.options;var c=b._rotate||(b._rotate=function(h){clearTimeout(b.rotation);b.rotation=setTimeout(function(){var i=g.selected;b.select(++i<b.anchors.length?i:0)},d);if(h){h.stopPropagation()}});var e=b._unrotate||(b._unrotate=!f?function(h){if(h.clientX){b.rotate(null)}}:function(h){t=g.selected;c()});if(d){this.element.bind("tabsshow",c);this.anchors.bind(g.event+".tabs",e);c()}else{clearTimeout(b.rotation);this.element.unbind("tabsshow",c);this.anchors.unbind(g.event+".tabs",e);delete this._rotate;delete this._unrotate}}})})(jQuery);;/*
 * jQuery UI Effects 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/
 */
jQuery.effects||(function(d){d.effects={version:"1.7.2",save:function(g,h){for(var f=0;f<h.length;f++){if(h[f]!==null){g.data("ec.storage."+h[f],g[0].style[h[f]])}}},restore:function(g,h){for(var f=0;f<h.length;f++){if(h[f]!==null){g.css(h[f],g.data("ec.storage."+h[f]))}}},setMode:function(f,g){if(g=="toggle"){g=f.is(":hidden")?"show":"hide"}return g},getBaseline:function(g,h){var i,f;switch(g[0]){case"top":i=0;break;case"middle":i=0.5;break;case"bottom":i=1;break;default:i=g[0]/h.height}switch(g[1]){case"left":f=0;break;case"center":f=0.5;break;case"right":f=1;break;default:f=g[1]/h.width}return{x:f,y:i}},createWrapper:function(f){if(f.parent().is(".ui-effects-wrapper")){return f.parent()}var g={width:f.outerWidth(true),height:f.outerHeight(true),"float":f.css("float")};f.wrap('<div class="ui-effects-wrapper" style="font-size:100%;background:transparent;border:none;margin:0;padding:0"></div>');var j=f.parent();if(f.css("position")=="static"){j.css({position:"relative"});f.css({position:"relative"})}else{var i=f.css("top");if(isNaN(parseInt(i,10))){i="auto"}var h=f.css("left");if(isNaN(parseInt(h,10))){h="auto"}j.css({position:f.css("position"),top:i,left:h,zIndex:f.css("z-index")}).show();f.css({position:"relative",top:0,left:0})}j.css(g);return j},removeWrapper:function(f){if(f.parent().is(".ui-effects-wrapper")){return f.parent().replaceWith(f)}return f},setTransition:function(g,i,f,h){h=h||{};d.each(i,function(k,j){unit=g.cssUnit(j);if(unit[0]>0){h[j]=unit[0]*f+unit[1]}});return h},animateClass:function(h,i,k,j){var f=(typeof k=="function"?k:(j?j:null));var g=(typeof k=="string"?k:null);return this.each(function(){var q={};var o=d(this);var p=o.attr("style")||"";if(typeof p=="object"){p=p.cssText}if(h.toggle){o.hasClass(h.toggle)?h.remove=h.toggle:h.add=h.toggle}var l=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.addClass(h.add)}if(h.remove){o.removeClass(h.remove)}var m=d.extend({},(document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle));if(h.add){o.removeClass(h.add)}if(h.remove){o.addClass(h.remove)}for(var r in m){if(typeof m[r]!="function"&&m[r]&&r.indexOf("Moz")==-1&&r.indexOf("length")==-1&&m[r]!=l[r]&&(r.match(/color/i)||(!r.match(/color/i)&&!isNaN(parseInt(m[r],10))))&&(l.position!="static"||(l.position=="static"&&!r.match(/left|top|bottom|right/)))){q[r]=m[r]}}o.animate(q,i,g,function(){if(typeof d(this).attr("style")=="object"){d(this).attr("style")["cssText"]="";d(this).attr("style")["cssText"]=p}else{d(this).attr("style",p)}if(h.add){d(this).addClass(h.add)}if(h.remove){d(this).removeClass(h.remove)}if(f){f.apply(this,arguments)}})})}};function c(g,f){var i=g[1]&&g[1].constructor==Object?g[1]:{};if(f){i.mode=f}var h=g[1]&&g[1].constructor!=Object?g[1]:(i.duration?i.duration:g[2]);h=d.fx.off?0:typeof h==="number"?h:d.fx.speeds[h]||d.fx.speeds._default;var j=i.callback||(d.isFunction(g[1])&&g[1])||(d.isFunction(g[2])&&g[2])||(d.isFunction(g[3])&&g[3]);return[g[0],i,h,j]}d.fn.extend({_show:d.fn.show,_hide:d.fn.hide,__toggle:d.fn.toggle,_addClass:d.fn.addClass,_removeClass:d.fn.removeClass,_toggleClass:d.fn.toggleClass,effect:function(g,f,h,i){return d.effects[g]?d.effects[g].call(this,{method:g,options:f||{},duration:h,callback:i}):null},show:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._show.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"show"))}},hide:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))){return this._hide.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"hide"))}},toggle:function(){if(!arguments[0]||(arguments[0].constructor==Number||(/(slow|normal|fast)/).test(arguments[0]))||(d.isFunction(arguments[0])||typeof arguments[0]=="boolean")){return this.__toggle.apply(this,arguments)}else{return this.effect.apply(this,c(arguments,"toggle"))}},addClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{add:g},f,i,h]):this._addClass(g)},removeClass:function(g,f,i,h){return f?d.effects.animateClass.apply(this,[{remove:g},f,i,h]):this._removeClass(g)},toggleClass:function(g,f,i,h){return((typeof f!=="boolean")&&f)?d.effects.animateClass.apply(this,[{toggle:g},f,i,h]):this._toggleClass(g,f)},morph:function(f,h,g,j,i){return d.effects.animateClass.apply(this,[{add:h,remove:f},g,j,i])},switchClass:function(){return this.morph.apply(this,arguments)},cssUnit:function(f){var g=this.css(f),h=[];d.each(["em","px","%","pt"],function(j,k){if(g.indexOf(k)>0){h=[parseFloat(g),k]}});return h}});d.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","color","outlineColor"],function(g,f){d.fx.step[f]=function(h){if(h.state==0){h.start=e(h.elem,f);h.end=b(h.end)}h.elem.style[f]="rgb("+[Math.max(Math.min(parseInt((h.pos*(h.end[0]-h.start[0]))+h.start[0],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[1]-h.start[1]))+h.start[1],10),255),0),Math.max(Math.min(parseInt((h.pos*(h.end[2]-h.start[2]))+h.start[2],10),255),0)].join(",")+")"}});function b(g){var f;if(g&&g.constructor==Array&&g.length==3){return g}if(f=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(g)){return[parseInt(f[1],10),parseInt(f[2],10),parseInt(f[3],10)]}if(f=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(g)){return[parseFloat(f[1])*2.55,parseFloat(f[2])*2.55,parseFloat(f[3])*2.55]}if(f=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(g)){return[parseInt(f[1],16),parseInt(f[2],16),parseInt(f[3],16)]}if(f=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(g)){return[parseInt(f[1]+f[1],16),parseInt(f[2]+f[2],16),parseInt(f[3]+f[3],16)]}if(f=/rgba\(0, 0, 0, 0\)/.exec(g)){return a.transparent}return a[d.trim(g).toLowerCase()]}function e(h,f){var g;do{g=d.curCSS(h,f);if(g!=""&&g!="transparent"||d.nodeName(h,"body")){break}f="backgroundColor"}while(h=h.parentNode);return b(g)}var a={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]};d.easing.jswing=d.easing.swing;d.extend(d.easing,{def:"easeOutQuad",swing:function(g,h,f,j,i){return d.easing[d.easing.def](g,h,f,j,i)},easeInQuad:function(g,h,f,j,i){return j*(h/=i)*h+f},easeOutQuad:function(g,h,f,j,i){return -j*(h/=i)*(h-2)+f},easeInOutQuad:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h+f}return -j/2*((--h)*(h-2)-1)+f},easeInCubic:function(g,h,f,j,i){return j*(h/=i)*h*h+f},easeOutCubic:function(g,h,f,j,i){return j*((h=h/i-1)*h*h+1)+f},easeInOutCubic:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h+f}return j/2*((h-=2)*h*h+2)+f},easeInQuart:function(g,h,f,j,i){return j*(h/=i)*h*h*h+f},easeOutQuart:function(g,h,f,j,i){return -j*((h=h/i-1)*h*h*h-1)+f},easeInOutQuart:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h+f}return -j/2*((h-=2)*h*h*h-2)+f},easeInQuint:function(g,h,f,j,i){return j*(h/=i)*h*h*h*h+f},easeOutQuint:function(g,h,f,j,i){return j*((h=h/i-1)*h*h*h*h+1)+f},easeInOutQuint:function(g,h,f,j,i){if((h/=i/2)<1){return j/2*h*h*h*h*h+f}return j/2*((h-=2)*h*h*h*h+2)+f},easeInSine:function(g,h,f,j,i){return -j*Math.cos(h/i*(Math.PI/2))+j+f},easeOutSine:function(g,h,f,j,i){return j*Math.sin(h/i*(Math.PI/2))+f},easeInOutSine:function(g,h,f,j,i){return -j/2*(Math.cos(Math.PI*h/i)-1)+f},easeInExpo:function(g,h,f,j,i){return(h==0)?f:j*Math.pow(2,10*(h/i-1))+f},easeOutExpo:function(g,h,f,j,i){return(h==i)?f+j:j*(-Math.pow(2,-10*h/i)+1)+f},easeInOutExpo:function(g,h,f,j,i){if(h==0){return f}if(h==i){return f+j}if((h/=i/2)<1){return j/2*Math.pow(2,10*(h-1))+f}return j/2*(-Math.pow(2,-10*--h)+2)+f},easeInCirc:function(g,h,f,j,i){return -j*(Math.sqrt(1-(h/=i)*h)-1)+f},easeOutCirc:function(g,h,f,j,i){return j*Math.sqrt(1-(h=h/i-1)*h)+f},easeInOutCirc:function(g,h,f,j,i){if((h/=i/2)<1){return -j/2*(Math.sqrt(1-h*h)-1)+f}return j/2*(Math.sqrt(1-(h-=2)*h)+1)+f},easeInElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l)==1){return f+m}if(!k){k=l*0.3}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}return -(h*Math.pow(2,10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k))+f},easeOutElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l)==1){return f+m}if(!k){k=l*0.3}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}return h*Math.pow(2,-10*i)*Math.sin((i*l-j)*(2*Math.PI)/k)+m+f},easeInOutElastic:function(g,i,f,m,l){var j=1.70158;var k=0;var h=m;if(i==0){return f}if((i/=l/2)==2){return f+m}if(!k){k=l*(0.3*1.5)}if(h<Math.abs(m)){h=m;var j=k/4}else{var j=k/(2*Math.PI)*Math.asin(m/h)}if(i<1){return -0.5*(h*Math.pow(2,10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k))+f}return h*Math.pow(2,-10*(i-=1))*Math.sin((i*l-j)*(2*Math.PI)/k)*0.5+m+f},easeInBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}return k*(h/=j)*h*((i+1)*h-i)+f},easeOutBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}return k*((h=h/j-1)*h*((i+1)*h+i)+1)+f},easeInOutBack:function(g,h,f,k,j,i){if(i==undefined){i=1.70158}if((h/=j/2)<1){return k/2*(h*h*(((i*=(1.525))+1)*h-i))+f}return k/2*((h-=2)*h*(((i*=(1.525))+1)*h+i)+2)+f},easeInBounce:function(g,h,f,j,i){return j-d.easing.easeOutBounce(g,i-h,0,j,i)+f},easeOutBounce:function(g,h,f,j,i){if((h/=i)<(1/2.75)){return j*(7.5625*h*h)+f}else{if(h<(2/2.75)){return j*(7.5625*(h-=(1.5/2.75))*h+0.75)+f}else{if(h<(2.5/2.75)){return j*(7.5625*(h-=(2.25/2.75))*h+0.9375)+f}else{return j*(7.5625*(h-=(2.625/2.75))*h+0.984375)+f}}}},easeInOutBounce:function(g,h,f,j,i){if(h<i/2){return d.easing.easeInBounce(g,h*2,0,j,i)*0.5+f}return d.easing.easeOutBounce(g,h*2-i,0,j,i)*0.5+j*0.5+f}})})(jQuery);;/*
 * jQuery UI Effects Blind 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Blind
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.blind=function(b){return this.queue(function(){var d=a(this),c=["position","top","left"];var h=a.effects.setMode(d,b.options.mode||"hide");var g=b.options.direction||"vertical";a.effects.save(d,c);d.show();var j=a.effects.createWrapper(d).css({overflow:"hidden"});var e=(g=="vertical")?"height":"width";var i=(g=="vertical")?j.height():j.width();if(h=="show"){j.css(e,0)}var f={};f[e]=h=="show"?i:0;j.animate(f,b.duration,b.options.easing,function(){if(h=="hide"){d.hide()}a.effects.restore(d,c);a.effects.removeWrapper(d);if(b.callback){b.callback.apply(d[0],arguments)}d.dequeue()})})}})(jQuery);;/*
 * jQuery UI Effects Bounce 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Bounce
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.bounce=function(b){return this.queue(function(){var e=a(this),l=["position","top","left"];var k=a.effects.setMode(e,b.options.mode||"effect");var n=b.options.direction||"up";var c=b.options.distance||20;var d=b.options.times||5;var g=b.duration||250;if(/show|hide/.test(k)){l.push("opacity")}a.effects.save(e,l);e.show();a.effects.createWrapper(e);var f=(n=="up"||n=="down")?"top":"left";var p=(n=="up"||n=="left")?"pos":"neg";var c=b.options.distance||(f=="top"?e.outerHeight({margin:true})/3:e.outerWidth({margin:true})/3);if(k=="show"){e.css("opacity",0).css(f,p=="pos"?-c:c)}if(k=="hide"){c=c/(d*2)}if(k!="hide"){d--}if(k=="show"){var h={opacity:1};h[f]=(p=="pos"?"+=":"-=")+c;e.animate(h,g/2,b.options.easing);c=c/2;d--}for(var j=0;j<d;j++){var o={},m={};o[f]=(p=="pos"?"-=":"+=")+c;m[f]=(p=="pos"?"+=":"-=")+c;e.animate(o,g/2,b.options.easing).animate(m,g/2,b.options.easing);c=(k=="hide")?c*2:c/2}if(k=="hide"){var h={opacity:0};h[f]=(p=="pos"?"-=":"+=")+c;e.animate(h,g/2,b.options.easing,function(){e.hide();a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}})}else{var o={},m={};o[f]=(p=="pos"?"-=":"+=")+c;m[f]=(p=="pos"?"+=":"-=")+c;e.animate(o,g/2,b.options.easing).animate(m,g/2,b.options.easing,function(){a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}})}e.queue("fx",function(){e.dequeue()});e.dequeue()})}})(jQuery);;/*
 * jQuery UI Effects Clip 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Clip
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.clip=function(b){return this.queue(function(){var f=a(this),j=["position","top","left","height","width"];var i=a.effects.setMode(f,b.options.mode||"hide");var k=b.options.direction||"vertical";a.effects.save(f,j);f.show();var c=a.effects.createWrapper(f).css({overflow:"hidden"});var e=f[0].tagName=="IMG"?c:f;var g={size:(k=="vertical")?"height":"width",position:(k=="vertical")?"top":"left"};var d=(k=="vertical")?e.height():e.width();if(i=="show"){e.css(g.size,0);e.css(g.position,d/2)}var h={};h[g.size]=i=="show"?d:0;h[g.position]=i=="show"?0:d/2;e.animate(h,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){f.hide()}a.effects.restore(f,j);a.effects.removeWrapper(f);if(b.callback){b.callback.apply(f[0],arguments)}f.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Drop 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Drop
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.drop=function(b){return this.queue(function(){var e=a(this),d=["position","top","left","opacity"];var i=a.effects.setMode(e,b.options.mode||"hide");var h=b.options.direction||"left";a.effects.save(e,d);e.show();a.effects.createWrapper(e);var f=(h=="up"||h=="down")?"top":"left";var c=(h=="up"||h=="left")?"pos":"neg";var j=b.options.distance||(f=="top"?e.outerHeight({margin:true})/2:e.outerWidth({margin:true})/2);if(i=="show"){e.css("opacity",0).css(f,c=="pos"?-j:j)}var g={opacity:i=="show"?1:0};g[f]=(i=="show"?(c=="pos"?"+=":"-="):(c=="pos"?"-=":"+="))+j;e.animate(g,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){e.hide()}a.effects.restore(e,d);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Explode 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Explode
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.explode=function(b){return this.queue(function(){var k=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;var e=b.options.pieces?Math.round(Math.sqrt(b.options.pieces)):3;b.options.mode=b.options.mode=="toggle"?(a(this).is(":visible")?"hide":"show"):b.options.mode;var h=a(this).show().css("visibility","hidden");var l=h.offset();l.top-=parseInt(h.css("marginTop"),10)||0;l.left-=parseInt(h.css("marginLeft"),10)||0;var g=h.outerWidth(true);var c=h.outerHeight(true);for(var f=0;f<k;f++){for(var d=0;d<e;d++){h.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-d*(g/e),top:-f*(c/k)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:g/e,height:c/k,left:l.left+d*(g/e)+(b.options.mode=="show"?(d-Math.floor(e/2))*(g/e):0),top:l.top+f*(c/k)+(b.options.mode=="show"?(f-Math.floor(k/2))*(c/k):0),opacity:b.options.mode=="show"?0:1}).animate({left:l.left+d*(g/e)+(b.options.mode=="show"?0:(d-Math.floor(e/2))*(g/e)),top:l.top+f*(c/k)+(b.options.mode=="show"?0:(f-Math.floor(k/2))*(c/k)),opacity:b.options.mode=="show"?1:0},b.duration||500)}}setTimeout(function(){b.options.mode=="show"?h.css({visibility:"visible"}):h.css({visibility:"visible"}).hide();if(b.callback){b.callback.apply(h[0])}h.dequeue();a("div.ui-effects-explode").remove()},b.duration||500)})}})(jQuery);;/*
 * jQuery UI Effects Fold 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Fold
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.fold=function(b){return this.queue(function(){var e=a(this),k=["position","top","left"];var h=a.effects.setMode(e,b.options.mode||"hide");var o=b.options.size||15;var n=!(!b.options.horizFirst);var g=b.duration?b.duration/2:a.fx.speeds._default/2;a.effects.save(e,k);e.show();var d=a.effects.createWrapper(e).css({overflow:"hidden"});var i=((h=="show")!=n);var f=i?["width","height"]:["height","width"];var c=i?[d.width(),d.height()]:[d.height(),d.width()];var j=/([0-9]+)%/.exec(o);if(j){o=parseInt(j[1],10)/100*c[h=="hide"?0:1]}if(h=="show"){d.css(n?{height:0,width:o}:{height:o,width:0})}var m={},l={};m[f[0]]=h=="show"?c[0]:o;l[f[1]]=h=="show"?c[1]:0;d.animate(m,g,b.options.easing).animate(l,g,b.options.easing,function(){if(h=="hide"){e.hide()}a.effects.restore(e,k);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(e[0],arguments)}e.dequeue()})})}})(jQuery);;/*
 * jQuery UI Effects Highlight 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Highlight
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.highlight=function(b){return this.queue(function(){var e=a(this),d=["backgroundImage","backgroundColor","opacity"];var h=a.effects.setMode(e,b.options.mode||"show");var c=b.options.color||"#ffff99";var g=e.css("backgroundColor");a.effects.save(e,d);e.show();e.css({backgroundImage:"none",backgroundColor:c});var f={backgroundColor:g};if(h=="hide"){f.opacity=0}e.animate(f,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(h=="hide"){e.hide()}a.effects.restore(e,d);if(h=="show"&&a.browser.msie){this.style.removeAttribute("filter")}if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Pulsate 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Pulsate
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.pulsate=function(b){return this.queue(function(){var d=a(this);var g=a.effects.setMode(d,b.options.mode||"show");var f=b.options.times||5;var e=b.duration?b.duration/2:a.fx.speeds._default/2;if(g=="hide"){f--}if(d.is(":hidden")){d.css("opacity",0);d.show();d.animate({opacity:1},e,b.options.easing);f=f-2}for(var c=0;c<f;c++){d.animate({opacity:0},e,b.options.easing).animate({opacity:1},e,b.options.easing)}if(g=="hide"){d.animate({opacity:0},e,b.options.easing,function(){d.hide();if(b.callback){b.callback.apply(this,arguments)}})}else{d.animate({opacity:0},e,b.options.easing).animate({opacity:1},e,b.options.easing,function(){if(b.callback){b.callback.apply(this,arguments)}})}d.queue("fx",function(){d.dequeue()});d.dequeue()})}})(jQuery);;/*
 * jQuery UI Effects Scale 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Scale
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.puff=function(b){return this.queue(function(){var f=a(this);var c=a.extend(true,{},b.options);var h=a.effects.setMode(f,b.options.mode||"hide");var g=parseInt(b.options.percent,10)||150;c.fade=true;var e={height:f.height(),width:f.width()};var d=g/100;f.from=(h=="hide")?e:{height:e.height*d,width:e.width*d};c.from=f.from;c.percent=(h=="hide")?g:100;c.mode=h;f.effect("scale",c,b.duration,b.callback);f.dequeue()})};a.effects.scale=function(b){return this.queue(function(){var g=a(this);var d=a.extend(true,{},b.options);var j=a.effects.setMode(g,b.options.mode||"effect");var h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:(j=="hide"?0:100));var i=b.options.direction||"both";var c=b.options.origin;if(j!="effect"){d.origin=c||["middle","center"];d.restore=true}var f={height:g.height(),width:g.width()};g.from=b.options.from||(j=="show"?{height:0,width:0}:f);var e={y:i!="horizontal"?(h/100):1,x:i!="vertical"?(h/100):1};g.to={height:f.height*e.y,width:f.width*e.x};if(b.options.fade){if(j=="show"){g.from.opacity=0;g.to.opacity=1}if(j=="hide"){g.from.opacity=1;g.to.opacity=0}}d.from=g.from;d.to=g.to;d.mode=j;g.effect("size",d,b.duration,b.callback);g.dequeue()})};a.effects.size=function(b){return this.queue(function(){var c=a(this),n=["position","top","left","width","height","overflow","opacity"];var m=["position","top","left","overflow","opacity"];var j=["width","height","overflow"];var p=["fontSize"];var k=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"];var f=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"];var g=a.effects.setMode(c,b.options.mode||"effect");var i=b.options.restore||false;var e=b.options.scale||"both";var o=b.options.origin;var d={height:c.height(),width:c.width()};c.from=b.options.from||d;c.to=b.options.to||d;if(o){var h=a.effects.getBaseline(o,d);c.from.top=(d.height-c.from.height)*h.y;c.from.left=(d.width-c.from.width)*h.x;c.to.top=(d.height-c.to.height)*h.y;c.to.left=(d.width-c.to.width)*h.x}var l={from:{y:c.from.height/d.height,x:c.from.width/d.width},to:{y:c.to.height/d.height,x:c.to.width/d.width}};if(e=="box"||e=="both"){if(l.from.y!=l.to.y){n=n.concat(k);c.from=a.effects.setTransition(c,k,l.from.y,c.from);c.to=a.effects.setTransition(c,k,l.to.y,c.to)}if(l.from.x!=l.to.x){n=n.concat(f);c.from=a.effects.setTransition(c,f,l.from.x,c.from);c.to=a.effects.setTransition(c,f,l.to.x,c.to)}}if(e=="content"||e=="both"){if(l.from.y!=l.to.y){n=n.concat(p);c.from=a.effects.setTransition(c,p,l.from.y,c.from);c.to=a.effects.setTransition(c,p,l.to.y,c.to)}}a.effects.save(c,i?n:m);c.show();a.effects.createWrapper(c);c.css("overflow","hidden").css(c.from);if(e=="content"||e=="both"){k=k.concat(["marginTop","marginBottom"]).concat(p);f=f.concat(["marginLeft","marginRight"]);j=n.concat(k).concat(f);c.find("*[width]").each(function(){child=a(this);if(i){a.effects.save(child,j)}var q={height:child.height(),width:child.width()};child.from={height:q.height*l.from.y,width:q.width*l.from.x};child.to={height:q.height*l.to.y,width:q.width*l.to.x};if(l.from.y!=l.to.y){child.from=a.effects.setTransition(child,k,l.from.y,child.from);child.to=a.effects.setTransition(child,k,l.to.y,child.to)}if(l.from.x!=l.to.x){child.from=a.effects.setTransition(child,f,l.from.x,child.from);child.to=a.effects.setTransition(child,f,l.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){if(i){a.effects.restore(child,j)}})})}c.animate(c.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(g=="hide"){c.hide()}a.effects.restore(c,i?n:m);a.effects.removeWrapper(c);if(b.callback){b.callback.apply(this,arguments)}c.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Shake 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Shake
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.shake=function(b){return this.queue(function(){var e=a(this),l=["position","top","left"];var k=a.effects.setMode(e,b.options.mode||"effect");var n=b.options.direction||"left";var c=b.options.distance||20;var d=b.options.times||3;var g=b.duration||b.options.duration||140;a.effects.save(e,l);e.show();a.effects.createWrapper(e);var f=(n=="up"||n=="down")?"top":"left";var p=(n=="up"||n=="left")?"pos":"neg";var h={},o={},m={};h[f]=(p=="pos"?"-=":"+=")+c;o[f]=(p=="pos"?"+=":"-=")+c*2;m[f]=(p=="pos"?"-=":"+=")+c*2;e.animate(h,g,b.options.easing);for(var j=1;j<d;j++){e.animate(o,g,b.options.easing).animate(m,g,b.options.easing)}e.animate(o,g,b.options.easing).animate(h,g/2,b.options.easing,function(){a.effects.restore(e,l);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}});e.queue("fx",function(){e.dequeue()});e.dequeue()})}})(jQuery);;/*
 * jQuery UI Effects Slide 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Slide
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.slide=function(b){return this.queue(function(){var e=a(this),d=["position","top","left"];var i=a.effects.setMode(e,b.options.mode||"show");var h=b.options.direction||"left";a.effects.save(e,d);e.show();a.effects.createWrapper(e).css({overflow:"hidden"});var f=(h=="up"||h=="down")?"top":"left";var c=(h=="up"||h=="left")?"pos":"neg";var j=b.options.distance||(f=="top"?e.outerHeight({margin:true}):e.outerWidth({margin:true}));if(i=="show"){e.css(f,c=="pos"?-j:j)}var g={};g[f]=(i=="show"?(c=="pos"?"+=":"-="):(c=="pos"?"-=":"+="))+j;e.animate(g,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){if(i=="hide"){e.hide()}a.effects.restore(e,d);a.effects.removeWrapper(e);if(b.callback){b.callback.apply(this,arguments)}e.dequeue()}})})}})(jQuery);;/*
 * jQuery UI Effects Transfer 1.7.2
 *
 * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Effects/Transfer
 *
 * Depends:
 *	effects.core.js
 */
(function(a){a.effects.transfer=function(b){return this.queue(function(){var f=a(this),h=a(b.options.to),e=h.offset(),g={top:e.top,left:e.left,height:h.innerHeight(),width:h.innerWidth()},d=f.offset(),c=a('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(b.options.className).css({top:d.top,left:d.left,height:f.innerHeight(),width:f.innerWidth(),position:"absolute"}).animate(g,b.duration,b.options.easing,function(){c.remove();(b.callback&&b.callback.apply(f[0],arguments));f.dequeue()})})}})(jQuery);;
/* Copyright (c) 2006 Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
 * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
 *
 * $LastChangedDate: 2007-12-14 23:57:10 -0600 (Fri, 14 Dec 2007) $
 * $Rev: 4163 $
 *
 * Version: 3.0
 * 
 * Requires: $ 1.2.2+
 */
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(5($){$.6.j.4={L:5(){9 b=$.6.j.4.i;7($.8.f)$(2).o(\'y.4\',5(a){$.d(2,\'h\',{x:a.x,l:a.l,s:a.s,r:a.r})});7(2.q)2.q(($.8.f?\'v\':\'4\'),b,n);m 2.w=b},D:5(){9 a=$.6.j.4.i;$(2).k(\'y.4\');7(2.u)2.u(($.8.f?\'v\':\'4\'),a,n);m 2.w=5(){};$.A(2,\'h\')},i:5(a){9 c=U.T.S.P(O,1);a=$.6.N(a||M.6);$.t(a,$.d(2,\'h\')||{});9 b=0,K=J;7(a.e)b=a.e/I;7(a.p)b=-a.p/3;7($.8.H)b=-a.e;a.d=a.d||{};a.G="4";c.z(b);c.z(a);g $.6.F.E(2,c)}};$.Q.t({4:5(a){g a?2.o("4",a):2.R("4")},C:5(a){g 2.k("4",a)}})})(B);',57,57,'||this||mousewheel|function|event|if|browser|var||||data|wheelDelta|mozilla|return|mwcursorposdata|handler|special|unbind|pageY|else|false|bind|detail|addEventListener|clientY|clientX|extend|removeEventListener|DOMMouseScroll|onmousewheel|pageX|mousemove|unshift|removeData|jQuery|unmousewheel|teardown|apply|handle|type|opera|120|true|returnValue|setup|window|fix|arguments|call|fn|trigger|slice|prototype|Array'.split('|'),0,{}))
/**
 * jQuery.ScrollTo - Easy element scrolling using jQuery.
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 3/9/2009
 * @author Ariel Flesler
 * @version 1.4.1
 *
 * http://flesler.blogspot.com/2007/10/jqueryscrollto.html
 */
;(function($){var m=$.scrollTo=function(b,h,f){$(window).scrollTo(b,h,f)};m.defaults={axis:'xy',duration:parseFloat($.fn.jquery)>=1.3?0:1};m.window=function(b){return $(window).scrollable()};$.fn.scrollable=function(){return this.map(function(){var b=this,h=!b.nodeName||$.inArray(b.nodeName.toLowerCase(),['iframe','#document','html','body'])!=-1;if(!h)return b;var f=(b.contentWindow||b).document||b.ownerDocument||b;return $.browser.safari||f.compatMode=='BackCompat'?f.body:f.documentElement})};$.fn.scrollTo=function(l,j,a){if(typeof j=='object'){a=j;j=0}if(typeof a=='function')a={onAfter:a};if(l=='max')l=9e9;a=$.extend({},m.defaults,a);j=j||a.speed||a.duration;a.queue=a.queue&&a.axis.length>1;if(a.queue)j/=2;a.offset=n(a.offset);a.over=n(a.over);return this.scrollable().each(function(){var k=this,o=$(k),d=l,p,g={},q=o.is('html,body');switch(typeof d){case'number':case'string':if(/^([+-]=)?\d+(\.\d+)?(px)?$/.test(d)){d=n(d);break}d=$(d,this);case'object':if(d.is||d.style)p=(d=$(d)).offset()}$.each(a.axis.split(''),function(b,h){var f=h=='x'?'Left':'Top',i=f.toLowerCase(),c='scroll'+f,r=k[c],s=h=='x'?'Width':'Height';if(p){g[c]=p[i]+(q?0:r-o.offset()[i]);if(a.margin){g[c]-=parseInt(d.css('margin'+f))||0;g[c]-=parseInt(d.css('border'+f+'Width'))||0}g[c]+=a.offset[i]||0;if(a.over[i])g[c]+=d[s.toLowerCase()]()*a.over[i]}else g[c]=d[i];if(/^\d+$/.test(g[c]))g[c]=g[c]<=0?0:Math.min(g[c],u(s));if(!b&&a.queue){if(r!=g[c])t(a.onAfterFirst);delete g[c]}});t(a.onAfter);function t(b){o.animate(g,j,a.easing,b&&function(){b.call(this,l,a)})};function u(b){var h='scroll'+b;if(!q)return k[h];var f='client'+b,i=k.ownerDocument.documentElement,c=k.ownerDocument.body;return Math.max(i[h],c[h])-Math.min(i[f],c[f])}}).end()};function n(b){return typeof b=='object'?b:{top:b,left:b}}})(jQuery);
/*
 * jQuery Tooltip plugin 1.3
 *
 * http://bassistance.de/jquery-plugins/jquery-plugin-tooltip/
 * http://docs.jquery.com/Plugins/Tooltip
 *
 * Copyright (c) 2006 - 2008 Jörn Zaefferer
 *
 * $Id: jquery.tooltip.js 5741 2008-06-21 15:22:16Z joern.zaefferer $
 * 
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */
eval(function(p, a, c, k, e, r) { e = function(c) { return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) }; if (!''.replace(/^/, String)) { while (c--) r[e(c)] = k[c] || e(c); k = [function(e) { return r[e] } ]; e = function() { return '\\w+' }; c = 1 }; while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]); return p } (';(8($){j e={},9,m,B,A=$.2u.2g&&/29\\s(5\\.5|6\\.)/.1M(1H.2t),M=12;$.k={w:12,1h:{Z:25,r:12,1d:19,X:"",G:15,E:15,16:"k"},2s:8(){$.k.w=!$.k.w}};$.N.1v({k:8(a){a=$.1v({},$.k.1h,a);1q(a);g 2.F(8(){$.1j(2,"k",a);2.11=e.3.n("1g");2.13=2.m;$(2).24("m");2.22=""}).21(1e).1U(q).1S(q)},H:A?8(){g 2.F(8(){j b=$(2).n(\'Y\');4(b.1J(/^o\\(["\']?(.*\\.1I)["\']?\\)$/i)){b=1F.$1;$(2).n({\'Y\':\'1D\',\'1B\':"2r:2q.2m.2l(2j=19, 2i=2h, 1p=\'"+b+"\')"}).F(8(){j a=$(2).n(\'1o\');4(a!=\'2f\'&&a!=\'1u\')$(2).n(\'1o\',\'1u\')})}})}:8(){g 2},1l:A?8(){g 2.F(8(){$(2).n({\'1B\':\'\',Y:\'\'})})}:8(){g 2},1x:8(){g 2.F(8(){$(2)[$(2).D()?"l":"q"]()})},o:8(){g 2.1k(\'28\')||2.1k(\'1p\')}});8 1q(a){4(e.3)g;e.3=$(\'<t 16="\'+a.16+\'"><10></10><t 1i="f"></t><t 1i="o"></t></t>\').27(K.f).q();4($.N.L)e.3.L();e.m=$(\'10\',e.3);e.f=$(\'t.f\',e.3);e.o=$(\'t.o\',e.3)}8 7(a){g $.1j(a,"k")}8 1f(a){4(7(2).Z)B=26(l,7(2).Z);p l();M=!!7(2).M;$(K.f).23(\'W\',u);u(a)}8 1e(){4($.k.w||2==9||(!2.13&&!7(2).U))g;9=2;m=2.13;4(7(2).U){e.m.q();j a=7(2).U.1Z(2);4(a.1Y||a.1V){e.f.1c().T(a)}p{e.f.D(a)}e.f.l()}p 4(7(2).18){j b=m.1T(7(2).18);e.m.D(b.1R()).l();e.f.1c();1Q(j i=0,R;(R=b[i]);i++){4(i>0)e.f.T("<1P/>");e.f.T(R)}e.f.1x()}p{e.m.D(m).l();e.f.q()}4(7(2).1d&&$(2).o())e.o.D($(2).o().1O(\'1N://\',\'\')).l();p e.o.q();e.3.P(7(2).X);4(7(2).H)e.3.H();1f.1L(2,1K)}8 l(){B=S;4((!A||!$.N.L)&&7(9).r){4(e.3.I(":17"))e.3.Q().l().O(7(9).r,9.11);p e.3.I(\':1a\')?e.3.O(7(9).r,9.11):e.3.1G(7(9).r)}p{e.3.l()}u()}8 u(c){4($.k.w)g;4(c&&c.1W.1X=="1E"){g}4(!M&&e.3.I(":1a")){$(K.f).1b(\'W\',u)}4(9==S){$(K.f).1b(\'W\',u);g}e.3.V("z-14").V("z-1A");j b=e.3[0].1z;j a=e.3[0].1y;4(c){b=c.2o+7(9).E;a=c.2n+7(9).G;j d=\'1w\';4(7(9).2k){d=$(C).1r()-b;b=\'1w\'}e.3.n({E:b,14:d,G:a})}j v=z(),h=e.3[0];4(v.x+v.1s<h.1z+h.1n){b-=h.1n+20+7(9).E;e.3.n({E:b+\'1C\'}).P("z-14")}4(v.y+v.1t<h.1y+h.1m){a-=h.1m+20+7(9).G;e.3.n({G:a+\'1C\'}).P("z-1A")}}8 z(){g{x:$(C).2e(),y:$(C).2d(),1s:$(C).1r(),1t:$(C).2p()}}8 q(a){4($.k.w)g;4(B)2c(B);9=S;j b=7(2);8 J(){e.3.V(b.X).q().n("1g","")}4((!A||!$.N.L)&&b.r){4(e.3.I(\':17\'))e.3.Q().O(b.r,0,J);p e.3.Q().2b(b.r,J)}p J();4(7(2).H)e.3.1l()}})(2a);', 62, 155, '||this|parent|if|||settings|function|current||||||body|return|||var|tooltip|show|title|css|url|else|hide|fade||div|update||blocked|||viewport|IE|tID|window|html|left|each|top|fixPNG|is|complete|document|bgiframe|track|fn|fadeTo|addClass|stop|part|null|append|bodyHandler|removeClass|mousemove|extraClass|backgroundImage|delay|h3|tOpacity|false|tooltipText|right||id|animated|showBody|true|visible|unbind|empty|showURL|save|handle|opacity|defaults|class|data|attr|unfixPNG|offsetHeight|offsetWidth|position|src|createHelper|width|cx|cy|relative|extend|auto|hideWhenEmpty|offsetTop|offsetLeft|bottom|filter|px|none|OPTION|RegExp|fadeIn|navigator|png|match|arguments|apply|test|http|replace|br|for|shift|click|split|mouseout|jquery|target|tagName|nodeType|call||mouseover|alt|bind|removeAttr|200|setTimeout|appendTo|href|MSIE|jQuery|fadeOut|clearTimeout|scrollTop|scrollLeft|absolute|msie|crop|sizingMethod|enabled|positionLeft|AlphaImageLoader|Microsoft|pageY|pageX|height|DXImageTransform|progid|block|userAgent|browser'.split('|'), 0, {}));
eval(function(p, a, c, k, e, r) { e = function(c) { return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) }; if (!''.replace(/^/, String)) { while (c--) r[e(c)] = k[c] || e(c); k = [function(e) { return r[e] } ]; e = function() { return '\\w+' }; c = 1 }; while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]); return p } ('n.5=v(a,b,c){4(7 b!=\'w\'){c=c||{};4(b===o){b=\'\';c.3=-1}2 d=\'\';4(c.3&&(7 c.3==\'p\'||c.3.q)){2 e;4(7 c.3==\'p\'){e=x y();e.z(e.A()+(c.3*B*r*r*C))}s{e=c.3}d=\'; 3=\'+e.q()}2 f=c.8?\'; 8=\'+(c.8):\'\';2 g=c.9?\'; 9=\'+(c.9):\'\';2 h=c.t?\'; t\':\'\';6.5=[a,\'=\',D(b),d,f,g,h].E(\'\')}s{2 j=o;4(6.5&&6.5!=\'\'){2 k=6.5.F(\';\');G(2 i=0;i<k.m;i++){2 l=n.H(k[i]);4(l.u(0,a.m+1)==(a+\'=\')){j=I(l.u(a.m+1));J}}}K j}};', 47, 47, '||var|expires|if|cookie|document|typeof|path|domain|||||||||||||length|jQuery|null|number|toUTCString|60|else|secure|substring|function|undefined|new|Date|setTime|getTime|24|1000|encodeURIComponent|join|split|for|trim|decodeURIComponent|break|return'.split('|'), 0, {}));
/*
* jQuery Plugin: Tokenizing Autocomplete Text Entry
* Version 1.1
*
* Copyright (c) 2009 James Smith (http://loopj.com)
* Licensed jointly under the GPL and MIT licenses,
* choose which one suits your project best!
*
*/

(function($) {

    $.fn.tokenInput = function(url, options) {
        var settings = $.extend({
            url: url,
            hintText: "Type in a search term",
            noResultsText: "No results",
            searchingText: "Searching...",
            searchDelay: 300,
            minChars: 1,
            tokenLimit: null,
            jsonContainer: null,
            method: "GET",
            contentType: "json",
            queryParam: "q",
            onResult: null
        }, options);

        settings.classes = $.extend({
            tokenList: "token-input-list",
            token: "token-input-token",
            tokenDelete: "token-input-delete-token",
            selectedToken: "token-input-selected-token",
            highlightedToken: "token-input-highlighted-token",
            dropdown: "token-input-dropdown",
            dropdownItem: "token-input-dropdown-item",
            dropdownItem2: "token-input-dropdown-item2",
            selectedDropdownItem: "token-input-selected-dropdown-item",
            inputToken: "token-input-input-token"
        }, options.classes);

        return this.each(function() {
            var list = new $.TokenList(this, settings);
        });
    };

    $.TokenList = function(input, settings) {
        //
        // Variables
        //

        // Input box position "enum"
        var POSITION = {
            BEFORE: 0,
            AFTER: 1,
            END: 2
        };

        // Keys "enum"
        var KEY = {
            BACKSPACE: 8,
            TAB: 9,
            RETURN: 13,
            ESC: 27,
            LEFT: 37,
            UP: 38,
            RIGHT: 39,
            DOWN: 40,
            COMMA: 188
        };

        // Save the tokens
        var saved_tokens = [];

        // Keep track of the number of tokens in the list
        var token_count = 0;

        // Basic cache to save on db hits
        var cache = new $.TokenList.Cache();

        // Keep track of the timeout
        var timeout;

        // Create a new text input an attach keyup events
        var input_box = $("<input type=\"text\">")
        .css({
            outline: "none"
        })
        .focus(function() {
            if (settings.tokenLimit == null || settings.tokenLimit != token_count) {
                show_dropdown_hint();
            }
        })
        .blur(function() {
            hide_dropdown();
        })
        .keydown(function(event) {
            var previous_token;
            var next_token;

            switch (event.keyCode) {
                case KEY.LEFT:
                case KEY.RIGHT:
                case KEY.UP:
                case KEY.DOWN:
                    if (!$(this).val()) {
                        previous_token = input_token.prev();
                        next_token = input_token.next();

                        if ((previous_token.length && previous_token.get(0) === selected_token) || (next_token.length && next_token.get(0) === selected_token)) {
                            // Check if there is a previous/next token and it is selected
                            if (event.keyCode == KEY.LEFT || event.keyCode == KEY.UP) {
                                deselect_token($(selected_token), POSITION.BEFORE);
                            } else {
                                deselect_token($(selected_token), POSITION.AFTER);
                            }
                        } else if ((event.keyCode == KEY.LEFT || event.keyCode == KEY.UP) && previous_token.length) {
                            // We are moving left, select the previous token if it exists
                            select_token($(previous_token.get(0)));
                        } else if ((event.keyCode == KEY.RIGHT || event.keyCode == KEY.DOWN) && next_token.length) {
                            // We are moving right, select the next token if it exists
                            select_token($(next_token.get(0)));
                        }
                    } else {
                        var dropdown_item = null;

                        if (event.keyCode == KEY.DOWN || event.keyCode == KEY.RIGHT) {
                            dropdown_item = $(selected_dropdown_item).next();
                        } else {
                            dropdown_item = $(selected_dropdown_item).prev();
                        }

                        if (dropdown_item.length) {
                            select_dropdown_item(dropdown_item);
                        }
                        return false;
                    }
                    break;

                case KEY.BACKSPACE:
                    previous_token = input_token.prev();

                    if (!$(this).val().length) {
                        if (selected_token) {
                            delete_token($(selected_token));
                        } else if (previous_token.length) {
                            select_token($(previous_token.get(0)));
                        }

                        return false;
                    } else if ($(this).val().length == 1) {
                        hide_dropdown();
                    } else {
                        // set a timeout just long enough to let this function finish.
                        setTimeout(function() { do_search(false); }, 5);
                    }
                    break;

                case KEY.TAB:
                case KEY.RETURN:
                case KEY.COMMA:
                    if (selected_dropdown_item) {
                        add_token($(selected_dropdown_item));
                        return false;
                    }
                    break;

                case KEY.ESC:
                    hide_dropdown();
                    return true;

                default:
                    if (is_printable_character(event.keyCode)) {
                        // set a timeout just long enough to let this function finish.
                        setTimeout(function() { do_search(false); }, 5);
                    }
                    break;
            }
        });

        // Keep a reference to the original input box
        var hidden_input = $(input)
                           .hide()
                           .focus(function() {
                               input_box.focus();
                           })
                           .blur(function() {
                               input_box.blur();
                           });

        // Keep a reference to the selected token and dropdown item
        var selected_token = null;
        var selected_dropdown_item = null;

        // The list to store the token items in
        var token_list = $("<ul />")
        .addClass(settings.classes.tokenList)
        .insertAfter(hidden_input)
        .click(function(event) {
            var li = get_element_from_event(event, "li");
            if (li && li.get(0) != input_token.get(0)) {
                toggle_select_token(li);
                return false;
            } else {
                input_box.focus();

                if (selected_token) {
                    deselect_token($(selected_token), POSITION.END);
                }
            }
        })
        .mouseover(function(event) {
            var li = get_element_from_event(event, "li");
            if (li && selected_token !== this) {
                li.addClass(settings.classes.highlightedToken);
            }
        })
        .mouseout(function(event) {
            var li = get_element_from_event(event, "li");
            if (li && selected_token !== this) {
                li.removeClass(settings.classes.highlightedToken);
            }
        })
        .mousedown(function(event) {
            // Stop user selecting text on tokens
            var li = get_element_from_event(event, "li");
            if (li) {
                return false;
            }
        });


        // The list to store the dropdown items in
        var dropdown = $("<div>")
        .addClass(settings.classes.dropdown)
        .insertAfter(token_list)
        .hide();

        // The token holding the input box
        var input_token = $("<li />")
        .addClass(settings.classes.inputToken)
        .appendTo(token_list)
        .append(input_box);

        init_list();

        //
        // Functions
        //


        // Pre-populate list if items exist
        function init_list() {
            li_data = settings.prePopulate;
            if (li_data && li_data.length) {
                for (var i in li_data) {
                    var this_token = $("<li><p>" + li_data[i].name + "</p> </li>")
                    .addClass(settings.classes.token)
                    .insertBefore(input_token);

                    $("<span>x</span>")
                    .addClass(settings.classes.tokenDelete)
                    .appendTo(this_token)
                    .click(function() {
                        delete_token($(this).parent());
                        return false;
                    });

                    $.data(this_token.get(0), "tokeninput", { "id": li_data[i].id, "name": li_data[i].name });

                    // Clear input box and make sure it keeps focus
                    input_box
                    .val("")
                    .focus();

                    // Don't show the help dropdown, they've got the idea
                    hide_dropdown();

                    // Save this token id
                    var id_string = li_data[i].id + ","
                    hidden_input.val(hidden_input.val() + id_string);
                }
            }
        }

        function is_printable_character(keycode) {
            if ((keycode >= 48 && keycode <= 90) ||      // 0-1a-z
           (keycode >= 96 && keycode <= 111) ||     // numpad 0-9 + - / * .
           (keycode >= 186 && keycode <= 192) ||    // ; = , - . / ^
           (keycode >= 219 && keycode <= 222)       // ( \ ) '
          ) {
                return true;
            } else {
                return false;
            }
        }

        // Get an element of a particular type from an event (click/mouseover etc)
        function get_element_from_event(event, element_type) {
            var target = $(event.target);
            var element = null;

            if (target.is(element_type)) {
                element = target;
            } else if (target.parent(element_type).length) {
                element = target.parent(element_type + ":first");
            }

            return element;
        }

        // Inner function to a token to the list
        function insert_token(id, value) {
            var this_token = $("<li><p>" + value + "</p> </li>")
      .addClass(settings.classes.token)
      .insertBefore(input_token);

            // The 'delete token' button
            $("<span>x</span>")
          .addClass(settings.classes.tokenDelete)
          .appendTo(this_token)
          .click(function() {
              delete_token($(this).parent());
              return false;
          });

            $.data(this_token.get(0), "tokeninput", { "id": id, "name": value });

            return this_token;
        }

        // Add a token to the token list based on user input
        function add_token(item) {
            var li_data = $.data(item.get(0), "tokeninput");
            var this_token = insert_token(li_data.id, li_data.name);

            // Clear input box and make sure it keeps focus
            input_box
            .val("")
            .focus();

            // Don't show the help dropdown, they've got the idea
            hide_dropdown();

            // Save this token id
            var id_string = li_data.id + ","
            hidden_input.val(hidden_input.val() + id_string);

            token_count++;

            if (settings.tokenLimit != null && settings.tokenLimit >= token_count) {
                input_box.hide();
                hide_dropdown();
            }
        }

        // Select a token in the token list
        function select_token(token) {
            token.addClass(settings.classes.selectedToken);
            selected_token = token.get(0);

            // Hide input box
            input_box.val("");

            // Hide dropdown if it is visible (eg if we clicked to select token)
            hide_dropdown();
        }

        // Deselect a token in the token list
        function deselect_token(token, position) {
            token.removeClass(settings.classes.selectedToken);
            selected_token = null;

            if (position == POSITION.BEFORE) {
                input_token.insertBefore(token);
            } else if (position == POSITION.AFTER) {
                input_token.insertAfter(token);
            } else {
                input_token.appendTo(token_list);
            }

            // Show the input box and give it focus again
            input_box.focus();
        }

        // Toggle selection of a token in the token list
        function toggle_select_token(token) {
            if (selected_token == token.get(0)) {
                deselect_token(token, POSITION.END);
            } else {
                if (selected_token) {
                    deselect_token($(selected_token), POSITION.END);
                }
                select_token(token);
            }
        }

        // Delete a token from the token list
        function delete_token(token) {
            // Remove the id from the saved list
            var token_data = $.data(token.get(0), "tokeninput");

            // Delete the token
            token.remove();
            selected_token = null;

            // Show the input box and give it focus again
            input_box.focus();

            // Delete this token's id from hidden input
            var str = hidden_input.val()
            var start = str.indexOf(token_data.id + ",");
            var end = str.indexOf(",", start) + 1;

            if (end >= str.length) {
                hidden_input.val(str.slice(0, start));
            } else {
                hidden_input.val(str.slice(0, start) + str.slice(end, str.length));
            }

            token_count--;

            if (settings.tokenLimit != null) {
                input_box
                .show()
                .val("")
                .focus();
            }
        }

        // Hide and clear the results dropdown
        function hide_dropdown() {
            dropdown.hide().empty();
            selected_dropdown_item = null;
        }

        function show_dropdown_searching() {
            dropdown
            .html("<p>" + settings.searchingText + "</p>")
            .show();
        }

        function show_dropdown_hint() {
            dropdown
            .html("<p>" + settings.hintText + "</p>")
            .show();
        }

        // Highlight the query part of the search term
        function highlight_term(value, term) {
            return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<b>$1</b>");
        }

        // Populate the results dropdown with some results
        function populate_dropdown(query, results) {
            if (results.length) {
                dropdown.empty();
                var dropdown_ul = $("<ul>")
                .appendTo(dropdown)
                .mouseover(function(event) {
                    select_dropdown_item(get_element_from_event(event, "li"));
                })
                .mousedown(function(event) {
                    add_token(get_element_from_event(event, "li"));
                    return false;
                })
                .hide();

                for (var i in results) {
                    if (results.hasOwnProperty(i)) {
                        var this_li = $("<li>" + highlight_term(results[i].name, query) + "</li>")
                                      .appendTo(dropdown_ul);

                        if (i % 2) {
                            this_li.addClass(settings.classes.dropdownItem);
                        } else {
                            this_li.addClass(settings.classes.dropdownItem2);
                        }

                        if (i == 0) {
                            select_dropdown_item(this_li);
                        }

                        $.data(this_li.get(0), "tokeninput", { "id": results[i].id, "name": results[i].name });
                    }
                }

                dropdown.show();
                dropdown_ul.slideDown("fast");

            } else {
                dropdown
                .html("<p>" + settings.noResultsText + "</p>")
                .show();
            }
        }

        // Highlight an item in the results dropdown
        function select_dropdown_item(item) {
            if (item) {
                if (selected_dropdown_item) {
                    deselect_dropdown_item($(selected_dropdown_item));
                }

                item.addClass(settings.classes.selectedDropdownItem);
                selected_dropdown_item = item.get(0);
            }
        }

        // Remove highlighting from an item in the results dropdown
        function deselect_dropdown_item(item) {
            item.removeClass(settings.classes.selectedDropdownItem);
            selected_dropdown_item = null;
        }

        // Do a search and show the "searching" dropdown if the input is longer
        // than settings.minChars
        function do_search(immediate) {
            var query = input_box.val().toLowerCase();

            if (query && query.length) {
                if (selected_token) {
                    deselect_token($(selected_token), POSITION.AFTER);
                }
                if (query.length >= settings.minChars) {
                    show_dropdown_searching();
                    if (immediate) {
                        run_search(query);
                    } else {
                        clearTimeout(timeout);
                        timeout = setTimeout(function() { run_search(query); }, settings.searchDelay);
                    }
                } else {
                    hide_dropdown();
                }
            }
        }

        // Do the actual search
        function run_search(query) {
            var cached_results = cache.get(query);
            if (cached_results) {
                populate_dropdown(query, cached_results);
            } else {
                var queryStringDelimiter = settings.url.indexOf("?") < 0 ? "?" : "&";

                var callback = function(results) {
                    if ($.isFunction(settings.onResult)) {
                        results = settings.onResult.call(this, results);
                    }
                    cache.add(query, settings.jsonContainer ? results[settings.jsonContainer] : results);
                    populate_dropdown(query, settings.jsonContainer ? results[settings.jsonContainer] : results);
                };

                if (settings.method == "POST") {
                    $.post(settings.url + queryStringDelimiter + settings.queryParam + "=" + query, {}, callback, settings.contentType);
                } else {
                    $.get(settings.url + queryStringDelimiter + settings.queryParam + "=" + query, {}, callback, settings.contentType);
                }
            }
        }
    };

    // Really basic cache for the results
    $.TokenList.Cache = function(options) {
        var settings = $.extend({
            max_size: 50
        }, options);

        var data = {};
        var size = 0;

        var flush = function() {
            data = {};
            size = 0;
        };

        this.add = function(query, results) {
            if (size > settings.max_size) {
                flush();
            }

            if (!data[query]) {
                size++;
            }

            data[query] = results;
        };

        this.get = function(query) {
            return data[query];
        };
    };

})(jQuery);
/* 
* Auto Expanding Text Area (1.2.2)
* by Chrys Bader (www.chrysbader.com)
* chrysb@gmail.com
*
* Special thanks to:
* Jake Chapa - jake@hybridstudio.com
* John Resig - jeresig@gmail.com
*
* Copyright (c) 2008 Chrys Bader (www.chrysbader.com)
* Licensed under the GPL (GPL-LICENSE.txt) license. 
*
*
* NOTE: This script requires jQuery to work.  Download jQuery at www.jquery.com
*
*/

(function(jQuery) {

    var self = null;

    jQuery.fn.autogrow = function(o) {
        return this.each(function() {
            new jQuery.autogrow(this, o);
        });
    };


    /**
    * The autogrow object.
    *
    * @constructor
    * @name jQuery.autogrow
    * @param Object e The textarea to create the autogrow for.
    * @param Hash o A set of key/value pairs to set as configuration properties.
    * @cat Plugins/autogrow
    */

    jQuery.autogrow = function(e, o) {
        this.options = o || {};
        this.dummy = null;
        this.interval = null;
        this.line_height = this.options.lineHeight || parseInt(jQuery(e).css('line-height'));
        this.min_height = this.options.minHeight || parseInt(jQuery(e).css('min-height'));
        this.max_height = this.options.maxHeight || parseInt(jQuery(e).css('max-height')); ;
        this.textarea = jQuery(e);

        if (this.line_height == NaN)
            this.line_height = 0;

        // Only one textarea activated at a time, the one being used
        this.init();
    };

    jQuery.autogrow.fn = jQuery.autogrow.prototype = {
        autogrow: '1.2.2'
    };

    jQuery.autogrow.fn.extend = jQuery.autogrow.extend = jQuery.extend;

    jQuery.autogrow.fn.extend({

        init: function() {
            var self = this;
            this.textarea.css({ overflow: 'hidden', display: 'block' });
            this.textarea.bind('focus', function() { self.startExpand() }).bind('blur', function() { self.stopExpand() });
            this.checkExpand();
        },

        startExpand: function() {
            var self = this;
            this.interval = window.setInterval(function() { self.checkExpand() }, 400);
        },

        stopExpand: function() {
            clearInterval(this.interval);
        },

        checkExpand: function() {

            if (this.dummy == null) {
                this.dummy = jQuery('<div></div>');
                this.dummy.css({
                    'font-size': this.textarea.css('font-size'),
                    'font-family': this.textarea.css('font-family'),
                    'width': this.textarea.css('width'),
                    'padding': this.textarea.css('padding'),
                    'line-height': this.line_height + 'px',
                    'overflow-x': 'hidden',
                    'position': 'absolute',
                    'top': 0,
                    'left': -9999
                }).appendTo('body');
            }

            // Strip HTML tags
            var html = this.textarea.val().replace(/(<|>)/g, '');

            // IE is different, as per usual
            if ($.browser.msie) {
                html = html.replace(/\n/g, '<BR>new');
            }
            else {
                html = html.replace(/\n/g, '<br>new');
            }

            if (this.dummy.html() != html) {
                this.dummy.html(html);

                if (this.max_height > 0 && (this.dummy.height() + this.line_height > this.max_height)) {
                    this.textarea.css('overflow-y', 'auto');
                }
                else {
                    this.textarea.css('overflow-y', 'hidden');
                    if (this.textarea.height() < this.dummy.height() + this.line_height || (this.dummy.height() < this.textarea.height())) {
                        this.textarea.animate({ height: (this.dummy.height() + this.line_height) + 'px' }, 100);
                    }
                }
            }
        }

    });
})(jQuery);
/*
 ### jQuery Star Rating Plugin v2.1 - 2008-03-12 ###
 By Diego A, http://www.fyneworks.com, diego@fyneworks.com
 - 'read only' feature by by Keith Wood, http://keith-wood.name/, kbwood@virginbroadband.com.au
 
 Project: http://plugins.jquery.com/project/MultipleFriendlyStarRating
 Website: http://www.fyneworks.com/jquery/star-rating/
	
	This is a modified version of the star rating plugin from:
 http://www.phpletter.com/Demo/Jquery-Star-Rating-Plugin/
*/
eval(function(p, a, c, k, e, r) { e = function(c) { return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) }; if (!''.replace(/^/, String)) { while (c--) r[e(c)] = k[c] || e(c); k = [function(e) { return r[e] } ]; e = function() { return '\\w+' }; c = 1 }; while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]); return p } (';6(D)(7($){$.3={o:\'12 1p\',P:\'\',L:u,f:0,C:u,e:u,5:{},8:{w:7(n,a,b){4.g(n);$(a).I(\'.m\').E().l(\'11\'+(b||\'A\'))},g:7(n,a,b){$($.3.5[n].h).W(\'.m\').z(\'q\').z(\'1o\')},k:7(n,a,b){6(!$($.3.5[n].9).1m(\'.o\'))$($.3.5[n].9).I(\'.m\').E().l(\'q\')},j:7(n,a,b){$.3.5[n].9=a;p c=$(a).Q(\'a\').N();$($.3.5[n].h).O(c);$.3.8.g(n);$.3.8.k(n);6(b.K)b.K.18($.3.5[n].h,[c,a])}}};$.17.3=7(c){6(4.J==0)H 4;c=$.G({},$.3,c||{});4.16(7(i){p a=$.G({},c||{},($.F?$(4).F():($.15?$(4).14():13))||{});p n=4.B;6(!$.3.5[n])$.3.5[n]={x:0};i=$.3.5[n].x;$.3.5[n].x++;$.3.5[n].e=$.3.5[n].e||a.e||$(4).10(\'t\');6(i==0){$.3.5[n].h=$(\'<Y X="Z" B="\'+n+\'" s=""\'+(a.e?\' t="t"\':\'\')+\'>\');$(4).V($.3.5[n].h);6($.3.5[n].e||a.C){}U{$(4).V($(\'<r T="o"><a y="\'+a.o+\'">\'+a.P+\'</a></r>\').S(7(){$.3.8.g(n,4,a);$(4).l(\'q\')}).R(7(){$.3.8.k(n,4,a);$(4).z(\'q\')}).j(7(){$.3.8.j(n,4,a)}))}};d=$(\'<r T="m"><a y="\'+(4.y||4.s)+\'">\'+4.s+\'</a></r>\');$(4).1n(d);6(a.L)a.f=2;6(1l a.f==\'1k\'&&a.f>0){p b=(i%a.f),v=1j.1i($(d).M()/a.f);$(d).M(v).1h(\'a\').1g({1f:\'-\'+(b*v)+\'1e\'})};6($.3.5[n].e){$(d).l(\'1d\')}U{$(d).S(7(){$.3.8.g(n,4,a);$.3.8.w(n,4,\'A\')}).R(7(){$.3.8.g(n,4,a);$.3.8.k(n,4,a)}).j(7(){$.3.8.j(n,4,a)})};6(4.1c)$.3.5[n].9=d;$(4).1b();6(i+1==4.J)$.3.8.k(n,4,a)});1a(n 19 $.3.5)6($.3.5[n].9){$.3.8.w(n,$.3.5[n].9,\'1q\');$($.3.5[n].h).O($($.3.5[n].9).Q(\'a\').N())}H 4}})(D);', 62, 89, '|||rating|this|groups|if|function|event|currentElem||||eStar|readOnly|split|drain|valueElem||click|reset|addClass|star||cancel|var|star_on|div|value|disabled|false|spw|fill|count|title|removeClass|hover|name|required|jQuery|andSelf|metadata|extend|return|prevAll|length|callback|half|width|text|val|cancelValue|children|mouseout|mouseover|class|else|before|siblings|type|input|hidden|attr|star_|Cancel|null|data|meta|each|fn|apply|in|for|remove|checked|star_readonly|px|left|css|find|floor|Math|number|typeof|is|after|star_hover|Rating|on'.split('|'), 0, {}));
// ----------------------------------------------------------------------------
// markItUp! Universal MarkUp Engine, JQuery plugin
// v 1.1.5
// Dual licensed under the MIT and GPL licenses.
// ----------------------------------------------------------------------------
// Copyright (C) 2007-2008 Jay Salvat
// http://markitup.jaysalvat.com/
// ----------------------------------------------------------------------------
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(3($){$.24.T=3(f,g){E k,v,A,F;v=A=F=7;k={C:\'\',12:\'\',U:\'\',1j:\'\',1A:8,25:\'26\',1k:\'~/2Q/1B.1C\',1b:\'\',27:\'28\',1l:8,1D:\'\',1E:\'\',1F:{},1G:{},1H:{},1I:{},29:[{}]};$.V(k,f,g);2(!k.U){$(\'2R\').1c(3(a,b){1J=$(b).14(0).2S.2T(/(.*)2U\\.2V(\\.2W)?\\.2X$/);2(1J!==2a){k.U=1J[1]}})}4 G.1c(3(){E d,u,15,16,p,H,L,P,17,1m,w,1n,M,18;d=$(G);u=G;15=[];18=7;16=p=0;H=-1;k.1b=1d(k.1b);k.1k=1d(k.1k);3 1d(a,b){2(b){4 a.W(/("|\')~\\//g,"$1"+k.U)}4 a.W(/^~\\//,k.U)}3 2b(){C=\'\';12=\'\';2(k.C){C=\'C="\'+k.C+\'"\'}l 2(d.1K("C")){C=\'C="T\'+(d.1K("C").2c(0,1).2Y())+(d.1K("C").2c(1))+\'"\'}2(k.12){12=\'N="\'+k.12+\'"\'}d.1L(\'<z \'+12+\'></z>\');d.1L(\'<z \'+C+\' N="T"></z>\');d.1L(\'<z N="2Z"></z>\');d.2d("2e");17=$(\'<z N="30"></z>\').2f(d);$(1M(k.29)).1N(17);1m=$(\'<z N="31"></z>\').1O(d);2(k.1l===8&&$.X.32!==8){1l=$(\'<z N="33"></z>\').1O(d).1e("34",3(e){E h=d.2g(),y=e.2h,1o,1p;1o=3(e){d.2i("2g",35.36(20,e.2h+h-y)+"37");4 7};1p=3(e){$("1C").1P("2j",1o).1P("1q",1p);4 7};$("1C").1e("2j",1o).1e("1q",1p)});1m.2k(1l)}d.2l(1Q).38(1Q);d.1e("1R",3(e,a){2(a.1r!==7){14()}2(u===$.T.2m){Y(a)}});d.1f(3(){$.T.2m=G})}3 1M(b){E c=$(\'<Z></Z>\'),i=0;$(\'B:2n > Z\',c).2i(\'39\',\'q\');$.1c(b,3(){E a=G,t=\'\',1s,B,j;1s=(a.19)?(a.1S||\'\')+\' [3a+\'+a.19+\']\':(a.1S||\'\');19=(a.19)?\'2o="\'+a.19+\'"\':\'\';2(a.2p){B=$(\'<B N="3b">\'+(a.2p||\'\')+\'</B>\').1N(c)}l{i++;2q(j=15.6-1;j>=0;j--){t+=15[j]+"-"}B=$(\'<B N="2r 2r\'+t+(i)+\' \'+(a.3c||\'\')+\'"><a 3d="" \'+19+\' 1s="\'+1s+\'">\'+(a.1S||\'\')+\'</a></B>\').1e("3e",3(){4 7}).2s(3(){4 7}).1q(3(){2(a.2t){3f(a.2t)()}Y(a);4 7}).2n(3(){$(\'> Z\',G).3g();$(D).3h(\'2s\',3(){$(\'Z Z\',17).2u()})},3(){$(\'> Z\',G).2u()}).1N(c);2(a.2v){15.3i(i);$(B).2d(\'3j\').2k(1M(a.2v))}}});15.3k();4 c}3 2w(c){2(c){c=c.3l();c=c.W(/\\(\\!\\(([\\s\\S]*?)\\)\\!\\)/g,3(x,a){E b=a.1T(\'|!|\');2(F===8){4(b[1]!==2x)?b[1]:b[0]}l{4(b[1]===2x)?"":b[0]}});c=c.W(/\\[\\!\\[([\\s\\S]*?)\\]\\!\\]/g,3(x,a){E b=a.1T(\':!:\');2(18===8){4 7}1U=3m(b[0],(b[1])?b[1]:\'\');2(1U===2a){18=8}4 1U});4 c}4""}3 I(a){2($.3n(a)){a=a(P)}4 2w(a)}3 1g(a){J=I(L.J);1a=I(L.1a);Q=I(L.Q);O=I(L.O);2(Q!==""){q=J+Q+O}l 2(m===\'\'&&1a!==\'\'){q=J+1a+O}l{q=J+(a||m)+O}4{q:q,J:J,Q:Q,1a:1a,O:O}}3 Y(a){E b,j,n,i;P=L=a;14();$.V(P,{1t:"",U:k.U,u:u,m:(m||\'\'),p:p,v:v,A:A,F:F});I(k.1D);I(L.1D);2(v===8&&A===8){I(L.3o)}$.V(P,{1t:1});2(v===8&&A===8){R=m.1T(/\\r?\\n/);2q(j=0,n=R.6,i=0;i<n;i++){2($.3p(R[i])!==\'\'){$.V(P,{1t:++j,m:R[i]});R[i]=1g(R[i]).q}l{R[i]=""}}o={q:R.3q(\'\\n\')};11=p;b=o.q.6+(($.X.1V)?n:0)}l 2(v===8){o=1g(m);11=p+o.J.6;b=o.q.6-o.J.6-o.O.6;b-=1u(o.q)}l 2(A===8){o=1g(m);11=p;b=o.q.6;b-=1u(o.q)}l{o=1g(m);11=p+o.q.6;b=0;11-=1u(o.q)}2((m===\'\'&&o.Q===\'\')){H+=1W(o.q);11=p+o.J.6;b=o.q.6-o.J.6-o.O.6;H=d.K().1h(p,d.K().6).6;H-=1W(d.K().1h(0,p))}$.V(P,{p:p,16:16});2(o.q!==m&&18===7){2y(o.q);1X(11,b)}l{H=-1}14();$.V(P,{1t:\'\',m:m});2(v===8&&A===8){I(L.3r)}I(L.1E);I(k.1E);2(w&&k.1A){1Y()}A=F=v=18=7}3 1W(a){2($.X.1V){4 a.6-a.W(/\\n*/g,\'\').6}4 0}3 1u(a){2($.X.2z){4 a.6-a.W(/\\r*/g,\'\').6}4 0}3 2y(a){2(D.m){E b=D.m.1Z();b.2A=a}l{d.K(d.K().1h(0,p)+a+d.K().1h(p+m.6,d.K().6))}}3 1X(a,b){2(u.2B){2($.X.1V&&$.X.3s>=9.5&&b==0){4 7}1i=u.2B();1i.3t(8);1i.2C(\'21\',a);1i.3u(\'21\',b);1i.3v()}l 2(u.2D){u.2D(a,a+b)}u.1v=16;u.1f()}3 14(){u.1f();16=u.1v;2(D.m){m=D.m.1Z().2A;2($.X.2z){E a=D.m.1Z(),1w=a.3w();1w.3x(u);p=-1;3y(1w.3z(a)){1w.2C(\'21\');p++}}l{p=u.2E}}l{p=u.2E;m=d.K().1h(p,u.3A)}4 m}3 1B(){2(!w||w.3B){2(k.1j){w=3C.2F(\'\',\'1B\',k.1j)}l{M=$(\'<2G N="3D"></2G>\');2(k.25==\'26\'){M.1O(1m)}l{M.2f(17)}w=M[M.6-1].3E||3F[M.6-1]}}l 2(F===8){2(M){M.3G()}w.2H();w=M=7}2(!k.1A){1Y()}}3 1Y(){2(w.D){3H{22=w.D.2I.1v}3I(e){22=0}w.D.2F();w.D.3J(2J());w.D.2H();w.D.2I.1v=22}2(k.1j){w.1f()}}3 2J(){2(k.1b!==\'\'){$.2K({2L:\'3K\',2M:7,2N:k.1b,28:k.27+\'=\'+3L(d.K()),2O:3(a){23=1d(a,1)}})}l{2(!1n){$.2K({2M:7,2N:k.1k,2O:3(a){1n=1d(a,1)}})}23=1n.W(/<!-- 3M -->/g,d.K())}4 23}3 1Q(e){A=e.A;F=e.F;v=(!(e.F&&e.v))?e.v:7;2(e.2L===\'2l\'){2(v===8){B=$("a[2o="+3N.3O(e.1x)+"]",17).1y(\'B\');2(B.6!==0){v=7;B.3P(\'1q\');4 7}}2(e.1x===13||e.1x===10){2(v===8){v=7;Y(k.1H);4 k.1H.1z}l 2(A===8){A=7;Y(k.1G);4 k.1G.1z}l{Y(k.1F);4 k.1F.1z}}2(e.1x===9){2(A==8||v==8||F==8){4 7}2(H!==-1){14();H=d.K().6-H;1X(H,0);H=-1;4 7}l{Y(k.1I);4 k.1I.1z}}}}2b()})};$.24.3Q=3(){4 G.1c(3(){$$=$(G).1P().3R(\'2e\');$$.1y(\'z\').1y(\'z.T\').1y(\'z\').Q($$)})};$.T=3(a){E b={1r:7};$.V(b,a);2(b.1r){4 $(b.1r).1c(3(){$(G).1f();$(G).2P(\'1R\',[b])})}l{$(\'u\').2P(\'1R\',[b])}}})(3S);',62,241,'||if|function|return||length|false|true|||||||||||||else|selection||string|caretPosition|block||||textarea|ctrlKey|previewWindow|||div|shiftKey|li|id|document|var|altKey|this|caretOffset|prepare|openWith|val|clicked|iFrame|class|closeWith|hash|replaceWith|lines||markItUp|root|extend|replace|browser|markup|ul||start|nameSpace||get|levels|scrollPosition|header|abort|key|placeHolder|previewParserPath|each|localize|bind|focus|build|substring|range|previewInWindow|previewTemplatePath|resizeHandle|footer|template|mouseMove|mouseUp|mouseup|target|title|line|fixIeBug|scrollTop|rangeCopy|keyCode|parent|keepDefault|previewAutoRefresh|preview|html|beforeInsert|afterInsert|onEnter|onShiftEnter|onCtrlEnter|onTab|miuScript|attr|wrap|dropMenus|appendTo|insertAfter|unbind|keyPressed|insertion|name|split|value|opera|fixOperaBug|set|refreshPreview|createRange||character|sp|phtml|fn|previewPosition|after|previewParserVar|data|markupSet|null|init|substr|addClass|markItUpEditor|insertBefore|height|clientY|css|mousemove|append|keydown|focused|hover|accesskey|separator|for|markItUpButton|click|call|hide|dropMenu|magicMarkups|undefined|insert|msie|text|createTextRange|moveStart|setSelectionRange|selectionStart|open|iframe|close|documentElement|renderPreview|ajax|type|async|url|success|trigger|templates|script|src|match|jquery|markitup|pack|js|toUpperCase|markItUpContainer|markItUpHeader|markItUpFooter|safari|markItUpResizeHandle|mousedown|Math|max|px|keyup|display|Ctrl|markItUpSeparator|className|href|contextmenu|eval|show|one|push|markItUpDropMenu|pop|toString|prompt|isFunction|beforeMultiInsert|trim|join|afterMultiInsert|version|collapse|moveEnd|select|duplicate|moveToElementText|while|inRange|selectionEnd|closed|window|markItUpPreviewFrame|contentWindow|frame|remove|try|catch|write|POST|encodeURIComponent|content|String|fromCharCode|triggerHandler|markItUpRemove|removeClass|jQuery'.split('|'),0,{}))
eval(function(p, a, c, k, e, d) { e = function(c) { return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) }; if (!''.replace(/^/, String)) { while (c--) { d[e(c)] = k[c] || e(c) } k = [function(e) { return d[e] } ]; e = function() { return '\\w+' }; c = 1 }; while (c--) { if (k[c]) { p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]) } } return p } ('D=(6($){6 D(2A,w){j(1T(w)!="2D")w={};$.2C(5,D.1Y,w);5.n=$(2A);5.1Q("1l","L","11","10","E");5.1P();5.E();5.L()};D.1Y={1G:["2V","2M","2S","2Q","2g","2N","2O","2P","2R","2L","2G","2F"],1v:["2H","2I","2K","2J","2g","2T","2U","36","35","3a","3b","3d"],1F:["3c","32","31","2W","2E","2X","2Y"],N:1};D.30={1P:6(){b R=$(\'<p h="2Z">\'+\'<m h="P 17" Y="[1g-1U]">&#2u;</m>\'+\' <m h="K"></m> \'+\'<m h="P 1a" Y="[1g-2h]">&#2n;</m>\'+\'</p>\');5.2v=$(".K",R);$(".17",R).F(5.u(6(){5.Q(-1)}));$(".1a",R).F(5.u(6(){5.Q(1)}));b V=$(\'<p h="3e">\'+\'<m h="P 17" Y="[2x+1g-1U]">&#2u;</m>\'+\' <m h="2t"></m> \'+\'<m h="P 1a" Y="[2x+1g-2h]">&#2n;</m>\'+\'</p>\');5.2q=$(".2t",V);$(".17",V).F(5.u(6(){5.Q(-12)}));$(".1a",V).F(5.u(6(){5.Q(12)}));b T=$(\'<Z h="T"></Z>\').S(R,V);b 15="<26><1W><1b>";$(5.1S(5.1F)).2k(6(){15+="<2l>"+5+"</2l>"});15+="</1b></1W><o></o></26>";5.x=5.O=$(\'<Z h="3m"></Z>\').S(T,15).3I(5.n);j($.2B.3K&&$.2B.3L<7){5.19=$(\'<2m h="3H" 3y="0" 3B="#"></2m>\').3F(5.x);5.O=5.O.3E(5.19);$(".P",T).23(6(){$(5).1d("1h")});$(".P",T).2f(6(){$(5).1t("1h")})};5.o=$("o",5.x);5.n.25(5.u(6(){5.E()}));5.E()},1D:6(8){b J=l g(8.f(),8.c(),1);j(!5.v||!(5.v.f()==J.f()&&5.v.c()==J.c())){5.v=J;b C=5.C(8),1e=5.1e(8);b 2o=5.29(C,1e);b M="";1f(b i=0;i<=2o;i++){b A=l g(C.f(),C.c(),C.q()+i,12,2i);j(5.2e(A))M+="<1b>";j(A.c()==8.c()){M+=\'<y h="1j" 8="\'+5.U(A)+\'">\'+A.q()+\'</y>\'}2j{M+=\'<y h="3J" 8="\'+5.U(A)+\'">\'+A.q()+\'</y>\'};j(5.2p(A))M+="</1b>"};5.o.1y().S(M);5.2v.1y().S(5.1J(8));5.2q.1y().S(5.v.f());$(".1j",5.o).F(5.u(6(e){5.1x($(e.1R).3D("8"))}));$("y[8="+5.U(l g())+"]",5.o).1d("3z");$("y.1j",5.o).23(6(){$(5).1d("1h")});$("y.1j",5.o).2f(6(){$(5).1t("1h")})};$(\'.1s\',5.o).1t("1s");$(\'y[8=\'+5.1w+\']\',5.o).1d("1s")},E:6(8){j(1T(8)=="3A"){8=5.2d(5.n.1Z())};j(!8)8=l g();5.r=8;5.1w=5.U(5.r);5.1D(5.r)},1x:6(20){5.n.1Z(20).25();5.L()},1l:6(){5.O.18("24","3G");$([21,1k.1c]).F(5.11);5.n.1r("28",5.1l);$(1k.1c).1K(5.10);5.2b()},L:6(){5.O.18("24","3M");$([21,1k.1c]).1r("F",5.11);5.n.28(5.1l);$(1k.1c).1r("1K",5.10)},11:6(e){j(e.1R!=5.n[0]&&!5.1L(e)){5.L()}},1L:6(e){b k=5.x.3C();k.1N=k.16+5.x.2y();k.1O=k.14+5.x.1H();a e.1M<k.1O&&e.1M>k.14&&e.22<k.1N&&e.22>k.16},10:6(e){3w(e.3f){t 9:t 27:5.L();a;z;t 13:5.1x(5.1w);z;t 33:5.1B(e.2w?-12:-1);z;t 34:5.1B(e.2w?12:1);z;t 38:5.W(-7);z;t 3x:5.W(7);z;t 37:5.W(-1);z;t 39:5.W(1);z;3k:a}e.3j()},2d:6(2c){b X;j(X=2c.3g(/^(\\d{1,2}) ([^\\s]+) (\\d{4,4})$/)){a l g(X[3],5.1X(X[2]),X[1],12,2i)}2j{a 3h}},U:6(8){a 8.q()+" "+5.1v[8.c()]+" "+8.f()},2b:6(){b k=5.n.k();5.O.18({14:k.14+5.n.1H(),16:k.16});j(5.19){5.19.18({3i:5.x.2y(),3n:5.x.1H()})}},W:6(B){b I=l g(5.r.f(),5.r.c(),5.r.q()+B);5.E(I)},1B:6(B){b I=l g(5.r.f(),5.r.c()+B,5.r.q());j(I.c()==5.r.c()+B+1){I.3o(0)};5.E(I)},Q:6(B){b J=l g(5.v.f(),5.v.c()+B,5.v.q());5.1D(J)},1J:6(8){a 5.1G[8.c()]},u:6(1p){b 1I=5;a 6(){a 1p.3u(1I,1n)}},1Q:6(){1f(b i=0;i<1n.1q;i++){5[1n[i]]=5.u(5[1n[i]])}},1m:6(1E,1V){1f(b i=0;i<1E.1q;i++){j(1V==1E[i])a i}},3v:6(K){a 5.1m(5.1G,K)},1X:6(K){a 5.1m(5.1v,K)},3t:6(2z){a 5.1m(5.1F,2z)},29:6(H,G){H=g.2s(H.f(),H.c(),H.q());G=g.2s(G.f(),G.c(),G.q());a(G-H)/3s},1u:6(2r,8,1C){b 2a=1C*(3p.3q(8.1o()-2r-(1C*7))%7);a l g(8.f(),8.c(),8.q()+2a)},C:6(8){a 5.1u(5.N,l g(8.f(),8.c()),-1)},1e:6(8){a 5.1u((5.N-1)%7,l g(8.f(),8.c()+1,0),1)},2e:6(8){a 8.1o()==5.N},2p:6(8){a 8.1o()==(5.N-1)%7},1S:6(1z){b 1A=[];1f(b i=0;i<1z.1q;i++){1A[i]=1z[(i+5.N)%7]};a 1A}};$.1p.1i=6(w){a 5.2k(6(){l D(5,w)})};$.1i={3r:6(w){$("n.1i").1i(w)}};a D})(3l);', 62, 235, '|||||this|function||date||return|var|getMonth||event|getFullYear|Date|class||if|offset|new|span|input|tbody||getDate|selectedDate||case|bindToObj|currentMonth|opts|dateSelector|td|break|currentDay|amount|rangeStart|DateInput|selectDate|click|end|start|newDate|newMonth|month_name|hide|dayCells|start_of_week|rootLayers|button|moveMonthBy|monthNav|append|nav|dateToString|yearNav|moveDateBy|matches|title|div|keydownHandler|hideIfClickOutside|||top|tableShell|left|prev|css|ieframe|next|tr|body|addClass|rangeEnd|for|Page|hover|date_input|selectable_day|document|show|indexFor|arguments|getDay|fn|length|unbind|selected|removeClass|changeDayTo|short_month_names|selectedDateString|changeInput|empty|days|newDays|moveDateMonthBy|direction|selectMonth|array|short_day_names|month_names|outerHeight|self|monthName|keydown|insideSelector|pageY|right|bottom|build|bindMethodsToObj|target|adjustDays|typeof|Up|value|thead|shortMonthNum|DEFAULT_OPTS|val|dateString|window|pageX|mouseover|display|change|table||focus|daysBetween|difference|setPosition|string|stringToDate|isFirstDayOfWeek|mouseout|May|Down|00|else|each|th|iframe|187|numDays|isLastDayOfWeek|yearNameSpan|dayOfWeek|UTC|year_name|171|monthNameSpan|ctrlKey|Ctrl|outerWidth|day_name|el|browser|extend|object|Thu|December|November|Jan|Feb|Apr|Mar|October|February|June|July|August|April|September|March|Jun|Jul|January|Wed|Fri|Sat|month_nav|prototype|Tue|Mon|||Sep|Aug||||Oct|Nov|Sun|Dec|year_nav|keyCode|match|null|width|preventDefault|default|jQuery|date_selector|height|setDate|Math|abs|initialize|86400000|shortDayNum|apply|monthNum|switch|40|frameborder|today|undefined|src|position|attr|add|insertBefore|block|date_selector_ieframe|insertAfter|unselected_month|msie|version|none'.split('|'), 0, {}))
jQuery.extend(DateInput.DEFAULT_OPTS, {
    month_names: ["Styczeń", "Luty", "Marzec", "Kwiecień", "Maj", "Czerwiec", "Lipiec", "Sierpień", "Wrzesień", "Październik", "Listopad", "Grudzień"],
    short_month_names: ["Sty", "Lut", "Mar", "Kwi", "Maj", "Cze", "Lip", "Sie", "Wrz", "Paź", "Lis", "Gru"],
    short_day_names: ["Nie", "Pon", "Wto", "Śro", "Czw", "Pią", "Sob"]
});

// ----------------------------------------------------------------------------
// markItUp!
// ----------------------------------------------------------------------------
// Copyright (C) 2008 Jay Salvat
// http://markitup.jaysalvat.com/
// ----------------------------------------------------------------------------
// BBCode tags example
// http://en.wikipedia.org/wiki/Bbcode
// ----------------------------------------------------------------------------
// Feel free to add more tags
// ----------------------------------------------------------------------------
mySettings = {
    nameSpace: "bbcode",
	previewParserPath:	'~/BBCodePreview.aspx', // path to your BBCode parser
	previewInWindow: 'width=800, height=600, resizable=yes, scrollbars=yes',
	resizeHandle: 'False',
	markupSet: [
		{name:'Bold', key:'B', openWith:'[b]', closeWith:'[/b]'},
		{name:'Italic', key:'I', openWith:'[i]', closeWith:'[/i]'},
		{name:'Underline', key:'U', openWith:'[u]', closeWith:'[/u]'},
		{separator:'---------------' },
		{name:'Picture', key:'P', replaceWith:'[img][![Url]!][/img]'},
		{name:'Link', key:'L', openWith:'[url=[![Url]!]]', closeWith:'[/url]', placeHolder:'Kliknij tutaj'},
		{separator:'---------------' },	
		{name:'Bulleted list', openWith:'[list]\n', closeWith:'\n[/list]'},
		{name:'Numeric list', openWith:'[list=1]\n', closeWith:'\n[/list]'}, 
		{name:'List item', openWith:'[*] '},
		{separator:'---------------' },
		{name:'Quotes', openWith:'[quote]', closeWith:'[/quote]'},
		{name:'Code', openWith:'[code]', closeWith:'[/code]'}, 
		{separator:'---------------' },
		{name: 'Clean', className: "clean", replaceWith: function(markitup) { return markitup.selection.replace(/\[(.*?)\]/g, "") } }
		//,{name:'Preview', className:'preview',  call:'preview'}
	]
}
/*
 * Facebox (for jQuery)
 * version: 1.0 (12/19/2007)
 * @requires jQuery v1.2 or later
 *
 * Examples at http://famspam.com/facebox/
 *
 * Licensed under the MIT:
 *   http://www.opensource.org/licenses/mit-license.php
 *
 * Copyright 2007 Chris Wanstrath [ chris@ozmm.org ]
 *
 * Usage:
 *  
 *  jQuery(document).ready(function() {
 *    jQuery('a[@rel*=facebox]').facebox() 
 *  })
 *
 *  <a href="#terms" rel="facebox">Terms</a>
 *    Loads the #terms div in the box
 *
 *  <a href="terms.html" rel="facebox">Terms</a>
 *    Loads the terms.html page in the box
 *
 *  <a href="terms.png" rel="facebox">Terms</a>
 *    Loads the terms.png image in the box
 *
 *
 *  You can also use it programmatically:
 * 
 *    jQuery.facebox('some html')
 *
 *  This will open a facebox with "some html" as the content.
 *    
 *    jQuery.facebox(function() { ajaxes })
 *
 *  This will show a loading screen before the passed function is called,
 *  allowing for a better ajax experience.
 *
 */
 var altTop = 50;
 var altLeft = 0;
(function($) {  
  $.facebox = function(data) {
    $.facebox.init()
    $.facebox.loading()
    $.isFunction(data) ? data.call() : $.facebox.reveal(data)
  }
  $.facebox.image = function(data) {
    altTop = 50;
    $.facebox.init()
    $.facebox.loading()
    $.isFunction(data) ? data.call() : $.facebox.reveal('<img src="' + data + '" />')
  }
  $.facebox.googleMaps = function() {
    $.facebox.init()
    $.facebox.loading()
    $.facebox.reveal('<div id="googleMap" style="width: 600px; height: 500px"></div>')
  }
  $.facebox.imagetag = function(url, top, left) {
    altTop = top;
    altLeft = left;
    $.facebox.init()
    $.facebox.loading()
    $.facebox.reveal('<iframe width="100px" height="200px" frameborder="0" scrolling="AUTO" src="' + url + '"></iframe>')
  }  
  $.facebox.url = function(data, height, width, scrollbar, mAltTop) {
    if (mAltTop === undefined ) {
        mAltTop = 0;
        altTop = 0;
        if(data.indexOf('EditGroup.aspx')!=-1) altTop = 50;
    } else {
        altTop = mAltTop;
    }
    if(height==undefined) height = 160;
    if(width==''||width==undefined) width = '100%';
    if(scrollbar==undefined) scrollbar = 'no';
    $.facebox.init()
    $.facebox.loading()
    //$.facebox.reveal('<table border=1 width="' + width + '"><tr><td><iframe width="100%" height="' + height + 'px" frameborder="0" scrolling="' + scrollbar + '" src="' + data + '"></iframe></td></tr></table>')
    $.facebox.reveal('<iframe name="faceboxFrame" id="faceboxFrame" width="' + width + '" height="' + height + 'px" frameborder="0" scrolling="' + scrollbar + '" src="' + data + '" style="overflow-x: hidden; overflow-y: auto;"></iframe>')
  }
  $.facebox.settings = {
    loading_image : '/images/css/facebox/loading.gif',
    close_image   : '/images/css/facebox/closelabel.gif',
    image_types   : [ 'png', 'jpg', 'jpeg', 'gif' ],
    facebox_html  : '\
  <div id="facebox" name="facebox" style="display:none;"> \
    <div class="popup"> \
      <table cellpadding="0" cellspacing="0"> \
        <tbody> \
          <tr> \
            <td class="tl"/><td class="b"/><td class="tr"/> \
          </tr> \
          <tr> \
            <td class="b"/> \
            <td> \
              <div id="widthPlacer" name="widthPlacer"></div> \
              <div id="popupHeader" name="popupHeader" onmousedown="dragStart(event, \'facebox\')" class="popupHeader"></div> \
              <div id="faceCover" class="faceCover"></div> \
                <table cellpadding="0" cellspacing="0"><tr><td class="body" id="faceBody"> \
                 \
                <div class="content" id="faceContent"> \
                </div> \
                <div class="faceboxFooter"> \
                  <a href="#" class="close"> \
                    <img src="/images/spacer.gif" title="close" class="close_image" /> \
                  </a> \
                </div> \
              </td></tr></table> \
            </td> \
            <td class="b"/> \
          </tr> \
          <tr> \
            <td class="bl"/><td class="b"/><td class="br"/> \
          </tr> \
        </tbody> \
      </table> \
    </div> \
  </div>'
  }

  $.facebox.loading = function() {
    if ($('#facebox .loading').length == 1) return true

    $('#facebox .content').empty()
    $('#facebox .body').children().hide().end().
      append('<div class="loading"><img src="'+$.facebox.settings.loading_image+'"/></div>')

    var pageScroll = $.facebox.getPageScroll();
    posLeft = pageScroll[0];
    if(altLeft>0) posLeft = altLeft;
    
    //alert(altTop);
    if(altTop>0) {
        $('#facebox').css({
          top:	pageScroll[1] + (altTop),
          left:	posLeft + 'px'
        }).show()    
        altTop = 0;
    } else {
        $('#facebox').css({
          top:	pageScroll[1] + ($.facebox.getPageHeight() / 4),
          left:	posLeft + 'px'
        }).show()
    }

    $(document).bind('keydown.facebox', function(e) {
      if (e.keyCode == 27) $.facebox.close()
    })
  }

  $.facebox.reveal = function(data, klass) {
    if (klass) $('#facebox .content').addClass(klass)
    
    //$('#facebox .content').append('<iframe>')
    $('#facebox .content').append(data)
    //$('#facebox .content').append('</iframe>')
    //alert(data);
    
    $('#facebox .loading').remove()
    $('#facebox .body').children().fadeIn('normal')
  }

  $.facebox.close = function() {
    $(document).unbind('keydown.facebox')
    $('#facebox').fadeOut(function() {
      $('#facebox .content').removeClass().addClass('content')
    })
    return false
  }

  $.fn.facebox = function() {
    $.facebox.init()

    var image_types = $.facebox.settings.image_types.join('|')
    image_types = new RegExp('\.' + image_types + '$', 'i')

    function click_handler() {
      $.facebox.loading(true)

      // support for rel="facebox[.inline_popup]" syntax, to add a class
      var klass = this.rel.match(/facebox\[\.(\w+)\]/)
      if (klass) klass = klass[1]

      // div
      if (this.href.match(/#/)) {
        var url    = window.location.href.split('#')[0]
        var target = this.href.replace(url,'')
        $.facebox.reveal($(target).clone().show(), klass)

      // image
      } else if (this.href.match(image_types)) {
        var image = new Image()
        image.onload = function() {
          $.facebox.reveal('<div class="image"><img src="' + image.src + '" /></div>', klass)
          //$.facebox.reveal('<div style="text-align:right"><input type="button" value="Zamknij" onclick="$.facebox.close()" /></div>', klass)
          //$.facebox.reveal('<input type="image" src="closelabel.gif" onClick="facebox.close" />', klass)
        }
        image.src = this.href

      // ajax
      } else {
        //$.get(this.href, function(data) { $.facebox.reveal(data, klass) })
        $.facebox.reveal('<iframe width="100%" frameborder="0" scrolling="no" src="' + this.href + '"></iframe>')
        //alert(this.href);
      }

      return false
    }

    this.click(click_handler)
    return this
  }

  $.facebox.init = function() {
    if ($.facebox.settings.inited) {
      return true
    } else {
      $.facebox.settings.inited = true
    }

    $('body').append($.facebox.settings.facebox_html)

    var preload = [ new Image(), new Image() ]
    preload[0].src = $.facebox.settings.close_image
    preload[1].src = $.facebox.settings.loading_image

    $('#facebox').find('.b:first, .bl, .br, .tl, .tr').each(function() {
      preload.push(new Image())
      preload.slice(-1).src = $(this).css('background-image').replace(/url\((.+)\)/, '$1')
    })

    $('#facebox .close').click($.facebox.close)
    $('#facebox .close_image').attr('src', $.facebox.settings.close_image)
  }

  // getPageScroll() by quirksmode.com
  $.facebox.getPageScroll = function() {
    var xScroll, yScroll;
    if (self.pageYOffset) {
      yScroll = self.pageYOffset;
      xScroll = self.pageXOffset;
    } else if (document.documentElement && document.documentElement.scrollTop) {	 // Explorer 6 Strict
      yScroll = document.documentElement.scrollTop;
      xScroll = document.documentElement.scrollLeft;
    } else if (document.body) {// all other Explorers
      yScroll = document.body.scrollTop;
      xScroll = document.body.scrollLeft;	
    }
    return new Array(xScroll,yScroll) 
  }

  // adapter from getPageSize() by quirksmode.com
  $.facebox.getPageHeight = function() {
    var windowHeight
    if (self.innerHeight) {	// all except Explorer
      windowHeight = self.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
      windowHeight = document.documentElement.clientHeight;
    } else if (document.body) { // other Explorers
      windowHeight = document.body.clientHeight;
    }	
    return windowHeight
  }
})(jQuery);

// JScript File
var cT;
var iSiteActivityLastID = 0;
var aSiteActivityStack = new Array();
var aSiteActivityRefresh = 1000;
var _gThumbPreviewInitialized = false;
var _siteActivityRepainting = false;
var _adTotalToAdSenseRatio = 0.1;

if ('undefined' != typeof ActiveXObject) {
    cT = 'IE';
} else {
    cT = 'FF';
}

function doInvite() { jQuery.facebox.url('/Invite.aspx?email=', 370, 580); } 

function field_OnEnter(e, url) {
    var ret = true;
    if(!e) e=window.event;
    key = e.keyCode ? e.keyCode : e.Which;
    if(key==13) {
        location.href = url;
        return false;
    }
    return true;
}

function siteActivity_StartRefresh() {
    setTimeout(siteActivity_Refresh, 5000);
    if(!_siteActivityRepainting) siteActivity_Update();
    _siteActivityRepainting = true;
}

function siteActivity_Pause() {
    if (timerSiteActivity) clearTimeout(timerSiteActivity);
}

function siteActivity_Update() {
    if(aSiteActivityStack.length > 20)
        aSiteActivityRefresh = 500;
    else
        aSiteActivityRefresh = 1000;

    if (aSiteActivityStack.length > 0) {
        siteActivity_Add(aSiteActivityStack[aSiteActivityStack.length - 1]);          
        aSiteActivityStack.pop();
    }
    setTimeout(siteActivity_Update, aSiteActivityRefresh);
}

function siteActivity_Add(item) {
    var animation = 1000;
    var display = 20;
    var currentItem = "<li class='siteActivityItem'>" + item + "</li>";    
    
    try {
        $(currentItem).addClass("siteActivityNewItem").prependTo("#siteActivityContent .siteActivityWrapper");
        
        $(".siteActivityWrapper .siteActivityNewItem").animate( { marginTop: -1 }, animation, function() {
            $(".siteActivityWrapper .siteActivityNewItem").css("marginTop", -1);
            $(".siteActivityWrapper .siteActivityNewItem").show(animation);
            $(".siteActivityWrapper .siteActivityNewItem").removeClass("siteActivityNewItem");
        });
        var postItem = $(".siteActivityWrapper .siteActivityItem");
        if (postItem[display] != undefined) $(postItem[display]).remove();
    } catch(err) {}   
}

function siteActivity_Refresh() {
    $.ajax({
        type: "POST",
        url: "/WebServices/Misc.asmx/SiteActivity_Query",
        data: "{intUserID:'" + iWSUID + "',intSiteActivityLastID:'" + iSiteActivityLastID + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            
            //alert(iSiteActivityLastID);
            var oActivities = data.activity;

            if (oActivities.length > 0) {
                iSiteActivityLastID = data.lastactivityid;
                
                for (var i = 0; i < oActivities.length; i++) {
                    aSiteActivityStack.push(oActivities[i].data);
                }
            }
            timerSiteActivity = setTimeout(siteActivity_Refresh, 5000);
        }
    });   
}

function stats_StartRefresh() {
    setTimeout(stats_PerformRefresh, 5000);
}

function stats_PerformRefresh() {    
    try {
        $.ajax({
            type: "POST",
            url: "/WebServices/Misc.asmx/Stats_Get",
            data: "{intUserID:'"+iWSUID+"'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(response) {
                var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
 
                if(data.length>0) {
                    var onlineTotal, onlineMembers;
                    
                    for (var i = 0; i < data.length; i++) { 
                        var oStat = data[i];
                        var type = oStat.t;
                        var value = oStat.v;
                        var obj = '';
                        
                        switch (type) {
	                        case 'users_total': case 'pictures_total': case 'messages_total': case 'posts_total':               
                                obj = $get(type); 
                                if(obj.innerHTML != value) {
                                    $(obj).fadeOut(400);
                                    obj.innerHTML = value;  
                                    $(obj).fadeIn(400);                                                                           
                                }                         
                                break;

                            case 'new_invitation_counter': case 'new_message_counter': case 'new_comment_counter': case 'new_gallery_comment_counter': case 'new_now_comment_counter': case 'new_event_counter': case 'cash':
	                            updatePanelIcons(type, value);
	                            break;
        	                    
	                        case 'users_online': 
	                            onlineMembers = value;
	                            break;
        	                    
	                        case 'users_online_total':	                
	                            onlineTotal = value;
	                            break;	  
        	                    
	                        case 'mod_abuse_counter':
	                            if(iWSMOD > 0) {
	                                var suffix = '';
	                                if(value==0) suffix = '_none';
	                                $get("footerMod").innerHTML = "<a href='/mod_abuse.aspx'><img src='/Icons/mod_abuse" + suffix + ".gif' title='nadużycia: " + value + "' border='0'/></a>";
	                            }
	                            break;     
	                            
	                        case 'mod_abuse_chat_counter':
	                            if(iWSCGUARD > 0 && iWSMOD == 0) {
	                                var suffix = '';
	                                if(value==0) suffix = '_none';
	                                $get("footerMod").innerHTML = "<a href='/mod_abuse.aspx'><img src='/Icons/mod_abuse" + suffix + ".gif' title='nadużycia: " + value + "' border='0'/></a>";
	                            }
	                            break;        	                                       
	                            
	                        case 'server_time':	                
	                            m_sServerTime = value;
	                            break;	  	                            
	                            
                        }                                       
                    }
                    updateOnlineCounter(onlineTotal, onlineMembers);
                }

            },
            complete: function() { setTimeout(stats_PerformRefresh, (iWSUID==0)?60000:5000); }
        });          
           
    } catch(err) {}        
}

function roundedCorners() {
  var divs = document.getElementsByTagName('div');
  var rounded_divs = [];
  for (var i = 0; i < divs.length; i++) {
    if (/\brounded\b/.exec(divs[i].className)) {rounded_divs[rounded_divs.length] = divs[i];}
  }
  for (var i = 0; i < rounded_divs.length; i++) {
    var original = rounded_divs[i]; original.className = original.className.replace('rounded', '');
    var tr = document.createElement('div'); tr.className = 'rounded2';
    original.parentNode.replaceChild(tr, original);
    var tl = document.createElement('div'); var br = document.createElement('div');
    tr.appendChild(tl); tl.appendChild(br); br.appendChild(original);
  }
}

function popup(pageToLoad, winName, width, height, resizable, scrolls, returnWindow) {
    if (resizable === undefined ) resizable = 0;
    if (scrolls === undefined ) scrolls = 0;
    if (returnWindow === undefined ) returnWindow = false;
    xposition=0; yposition=0;
    if ((parseInt(navigator.appVersion) >= 4 )){
        xposition = (screen.width - width) / 2;
        yposition = (screen.height - height) / 2;
    }
    if (pageToLoad.indexOf('terms') > 0) scrolls = '1';
    args = "width=" + width + "," + "height=" + height + ",location=0,menubar=0,resizable=" + resizable + ",scrollbars=" + scrolls + ",status=1,titlebar=0,toolbar=0,hotkeys=0," + "screenx=" + xposition + "," + "screeny=" + yposition + "," + "left=" + xposition + "," + "top=" + yposition;

    if(returnWindow) {
        return window.open(pageToLoad,winName,args);
    } else {
        window.open(pageToLoad,winName,args);
    }
}

var r = g = b = 0;
var chR = 30;
var chG = chB = 0;
var fader = null;
var timer = null;
var timerSiteActivity = null;
var imageID = 0;
var teamNick = null;
var refreshParent = false;
var blogType;
var blogID, threadID, postID, businessID, eventID, groupID;
var threadPage;
var showWizard_Main = 0;
var showWizard_Tags = 0;
var backgroundImageID = 0;
var backgroundImagePath = '';
var backgroundImageThumbPath = '';

function setColor(R, G, B) {
	chR = R; chG = G; chB = B;
	r = g = b = 0;
}

function fadeIn(obj) {
    r = g = b = 0;
	if(obj.style) {
		fader = obj;
		if(timer)clearTimeout(timer);
		fadeReal(chR, chG,chB)
	}
}
function fadeOut(obj) {
	if ( obj.style ) {
		fader = obj;
		if(timer)clearTimeout(timer);
		fadeReal(-chR,-chG,-chB)
	}
}
function fadeReal(chR, chG, chB) {
	r += chR; g += chG;	b += chB;
	if ( ( r >= 0 ) && ( r < 256 ) && ( g >= 0 ) && ( g < 256 ) && ( b >= 0 ) && ( b < 256 ) ) {
		fader.style.color = "rgb(" + r + "," + g + "," + b + ")";
		timer = setTimeout("fadeReal(" + chR + "," + chG + "," + chB + ")", 100);
	}
}
function pictureCommentsPopup_Close(vImageID, vTotalComments) {
    var objCounter = top.document.getElementById('img' + vImageID);
    objCounter.innerHTML = vTotalComments;
    setTimeout(popup_Close, 1000);
    top.fadeIn(objCounter);
}
function profileCommentsPopup_Close(vProfileID, vTotalComments) {
    var objCounter = top.document.getElementById('lblCommentCount');
    objCounter.innerHTML = vTotalComments;
    setTimeout(popup_Close, 1000);
    top.refreshComments();
}
function cityCommentsPopup_Close(vCityID, vTotalComments) {
    var objCounter = top.document.getElementById('lblCommentCount');
    objCounter.innerHTML = vTotalComments;
    setTimeout(popup_Close, 1000);
    top.refreshComments();
}
function businessCommentsPopup_Close(vBusinessID, vTotalComments) {
    var objCounter = top.document.getElementById('lblCommentCount');
    objCounter.innerHTML = vTotalComments;
    setTimeout(popup_Close, 1000);
    top.refreshComments();
}
function eventCommentsPopup_Close(vEventID, vTotalComments) {
    var objCounter = top.document.getElementById('lblCommentCount');
    objCounter.innerHTML = vTotalComments;
    setTimeout(popup_Close, 1000);
    top.refreshComments();
}
function blogCommentsPopup_Close(vBlogID, vTotalComments) {
    var objCounter = top.document.getElementById('lblCommentCount');
    objCounter.innerHTML = vTotalComments;
    setTimeout(popup_Close, 1000);
    top.refreshComments();
}
function groupCommentsPopup_Close(vGroupID, vTotalComments) {
    var objCounter = top.document.getElementById('lblCommentCount');
    objCounter.innerHTML = vTotalComments;
    setTimeout(popup_Close, 1000);
    top.refreshComments();
}
function delayedPopup_Close() {
    setTimeout(popup_Close, 1000);
}

function teamAddPopup_Close() {
    top.location.href='/ekipa/' + teamNick;
}
function imageAddPopup_Close() {
    top.location.href='/Image.aspx?id=' + imageID;
}
function businessAddPopup_Close() {
    top.location.href='/Business.aspx?id=' + businessID;
}
function eventAddPopup_Close(eventID, eventName) {
    top.location.href = '/impreza/' + eventID + '-' + eventName;
}
function groupAddPopup_Close() {
    top.location.href='/Group.aspx?id=' + groupID;
}
function threadAddPopup_Close() {
    top.location.href='/Thread.aspx?id=' + threadID + '&page=' + threadPage + '&post=' + postID;
}
function popup_Close() {
    top.$.facebox.close();
}
function popup_CloseRefresh() {
    top.location.href = top.location.href;
    top.$.facebox.close();
}
function invitePopup_Close(vDivID) {
    var objDiv = top.document.getElementById(vDivID);
    if(objDiv!=undefined) objDiv.innerHTML = "<div class='actionPending'>Zaproszenie Wysłane</div>";
    setTimeout(popup_Close, 1000);
}
function genericPopup_Close(vFunctionName) { 
    setTimeout(popup_Close, 1000);
    if(vFunctionName!='')top[vFunctionName]();
}
function profileBackgroundPopup_Close() {
    setTimeout(function() { top.$.facebox.close(); }, 1000);
    parent.chat_profileEnhanceWallpaperAdded(backgroundImageID, backgroundImageThumbPath, backgroundImagePath);
}
function groupJoinPopup_Close(vGroupID) {
    location.href='/Group.aspx?id=' + vGroupID;
}

var globalX = 0;
var globalY = 0;

function getMouse(e){    
    var ev=(!e)?window.event:e;
    if (ev.pageX){
        imageX=ev.pageX; imageY=ev.pageY;
    }
    else if(ev.clientX){
        windowX=ev.clientX; windowY=ev.clientY;
        imageX=windowX+document.documentElement.scrollLeft;
        imageY=windowY+document.documentElement.scrollTop;                
    }
    else{return false}
}
function getElementPos(el){ 
    x = el.offsetLeft; y = el.offsetTop;
    elp = el.offsetParent;
    while(elp!=null){ 
        x+=elp.offsetLeft; y+=elp.offsetTop;
        elp=elp.offsetParent;
    }
    return new Array(x,y);
}
var intCallback;

function showCalendar(callerID) {
    var objCaller = document.getElementById(callerID);
    var arr = getElementPos(objCaller);
    X = arr[0]; Y = arr[1];    
    
    var objCalendar = top.document.getElementById('datePicker');
    objCalendar.style.top = Y + 15;
    objCalendar.style.left = X - 2;
    objCalendar.style.display = "block";
    
    //setTimeout(hideCalendar, 5000);
    //objDiv.innerHTML = "<div class='actionPending'>Zaproszenie Wysłane</div>";
    //setTimeout(popup_Close, 1000);
}
function hideCalendar() {
    var objCalendar = top.document.getElementById('datePicker');
    objCalendar.style.display = "none";
}
function hideCalendarDelay() {
    intCallback = setTimeout(hideCalendar, 1000);
}
function miniOver(obj,id) {
    return;
    var source = obj.src;
    obj.src = source.replace('Minis','Thumbs');
    obj.style.className = '';
    //var objDiv = top.document.getElementById('minidiv' +  id);
    //objDiv.style.left = '-50px';
    //objDiv.style.top = '-38px';
    obj.style.left = '-50px';
    obj.style.top = '-50px';  
    obj.style.position = 'absolute';  
    
}
function miniOut(obj,id) { 
    return;
    var source = obj.src;
    obj.src = source.replace('Thumbs','Minis');
//    var objDiv = top.document.getElementById('minidiv' +  id);
//    objDiv.style.left = '-1px';    
//    objDiv.style.top = '12px';
    obj.style.left = '0px';    
    obj.style.top = '0px';
        
    //objDiv.style.zIndex = 500;
}

function grayOut(vis, options) {   
    var optionsoptions = options || {};     
    var zindex = options.zindex || 50000;    
    var opacity = options.opacity || 40;   
    var opaque = (opacity / 100);    
    var bgcolor = options.bgcolor || '#FFFFFF';    
    var dark=document.getElementById('darkenScreenObject');  

    if (!dark)  {   
        // The dark layer doesn't exist, it's never been created.  So we'll     
        // create it here and apply some basic styles.      
        var tbody = document.getElementsByTagName("body")[0];   
        var tnode = document.createElement('div');              
        tnode.style.position='absolute';   
        tnode.style.top='0px';   
        tnode.style.left='0px';      
        tnode.style.overflow='hidden';   
        tnode.style.display='none';   
        tnode.id='darkenScreenObject';   
        tbody.appendChild(tnode);                               
        dark=document.getElementById('darkenScreenObject');     
     }     
  
    if (vis) {    
        var pageWidth='100%';    
        var pageHeight='300%';    
        dark.style.opacity=opaque;    
        dark.style.MozOpacity=opaque;          
        dark.style.filter='alpha(opacity='+opacity+')';    
        dark.style.zIndex=zindex;   
        //dark.style.backgroundColor=bgcolor;    
        dark.style.backgroundImage="url(/Images/dark_bg.png)";  
        dark.style.width= pageWidth;     
        dark.style.height= pageHeight;    
        dark.style.display='block';     
    } else {      
        dark.style.display='none';    
    }   
}   

function setCookie(c_name,value,expiredays){
    var exdate=new Date();
    exdate.setDate(exdate.getDate()+expiredays);
    document.cookie=c_name+ "=" +escape(value)+((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}
function getCookie(c_name){
    if (document.cookie.length>0){
      c_start=document.cookie.indexOf(c_name + "=");
      if (c_start!=-1){ 
        c_start=c_start + c_name.length+1; 
        c_end=document.cookie.indexOf(";",c_start);
        if (c_end==-1) c_end=document.cookie.length;
        return unescape(document.cookie.substring(c_start,c_end));
        } 
      }
    return "";
}

function images_preLoad(){
    var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=Array("/Icons/message_small.png","/Icons/profile_small.gif","/Icons/chat.gif"); for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function xml_getDomAdapter(){
	var adapter = '';
	if ('undefined' != typeof ActiveXObject) {
		adapter = 'MS';
	} else if ('undefined' != typeof document
		&& document.implementation
		&& document.implementation.createDocument
		&& 'undefined' != typeof DOMParser)
	{
		adapter = 'default';
	}
	switch (adapter) {
		case 'MS':
			return new (function () {
				this.createDocument = function () {
					var names = ["Msxml2.DOMDocument.6.0",
						"Msxml2.DOMDocument.3.0", "MSXML2.DOMDocument",
						"MSXML.DOMDocument", "Microsoft.XMLDOM"];
					for (var key in names) {
						try {
							return new ActiveXObject(names[key]);
						} catch (e) {}
					}
					throw new Error('Unable to create DOMDocument');
				};
				this.serialize = function (doc) {
					return doc.xml;
				};
				this.parseXml = function (xml) {
					var doc = this.createDocument();
					if (!doc.loadXML(xml)) {
						throw new Error('Parse error');
					}
					return doc;
				};
			})();
		case 'default':
		        
			return new (function () {
				this.createDocument = function () {
					return document.implementation.createDocument("", "", null);
				};
				this.serialize = function (doc) {
					return new XMLSerializer().serializeToString(doc);
				};
				this.parseXml = function (xml) {
					var doc = new DOMParser().parseFromString(xml, "text/xml");
					if ("parsererror" == doc.documentElement.nodeName) {
					    //alert('error');
						throw new Error('Parse error');
					}
					return doc;
				};
			})();
		default:
			throw new Error('Unable to select the DOM adapter');
	}
};

function xml_selectNodes(doc, nodeName) { 
	if ('undefined' != typeof ActiveXObject) {
		return doc.selectNodes(nodeName);
	} else if ('undefined' != typeof document && document.implementation && document.implementation.createDocument && 'undefined' != typeof DOMParser){
		return doc.getElementsByTagName(nodeName);
	}   
}

function getTime() {
    var d = new Date();

    var curr_hour = d.getHours();
    var curr_min = d.getMinutes();

    return curr_hour + ":" + curr_min;

}

function displayAllThumbs(iSeq) { 
    iSeq = parseInt(iSeq) - 4;
    jQuery('#allGalleryThumbs').jcarousel({
        start: iSeq,
        visible: 9,
        scroll: 4
    });    
    
    $get("jcarousel-container").style.visibility = "visible";
}

function blogAddPopup_Close() { 
    top.location.href='/Blog.aspx?id=' + blogID;
}

function rollPanel(vPanelID) { 
    var visible = ($get('roll_'+vPanelID).style.display!='none')?1:0;
    
    if(visible) {
        $get('roll_'+vPanelID).style.display='none';
        $get('action_'+vPanelID).innerHTML = '<img border=0 src="/Icons/plus.gif" />';
    } else {
        $get('roll_'+vPanelID).style.display='block';
        $get('action_'+vPanelID).innerHTML = '<img border=0 src="/Icons/minus.gif" />';
    };
    
    setCookie('roll_'+vPanelID,(visible==0?1:0),365);
}
function rollPanel_Prep(vPanelID) {
    if($get('roll_'+vPanelID)!=null) {
        var visible = ($get('roll_'+vPanelID).style.display!='none')?1:0;
        if(getCookie('roll_'+vPanelID)!=visible)rollPanel(vPanelID);
    }
}
function escapeHTML(str){
   var div = document.createElement('div');
   var text = document.createTextNode(str);
   div.appendChild(text);
   return div.innerHTML;
};

this.startThumbPreview = function(){		
	var xOffset = 10;
	var yOffset = 30;
		
	$("a.thumbPreview").hover(function(e){
		this.t = this.title;
		this.title = "";	
		var c = (this.t != "") ? "<br/>" + this.t : "";
		$("body").append("<p id='thumbPreview'><img src='"+ this.rel +"' alt='Loading...' />"+ c +"</p>");								 
		$("#thumbPreview")
			.css("top",(e.pageY - xOffset) + "px")
			.css("left",(e.pageX + yOffset) + "px")
			.fadeIn("fast");						
    },
	function(){
		this.title = this.t;	
		$("#thumbPreview").remove();
    });	
	$("a.thumbPreview").mousemove(function(e){
		$("#thumbPreview")
			.css("top",(e.pageY - xOffset) + "px")
			.css("left",(e.pageX + yOffset) + "px");
	});			
};

var tpOver = false;
var tpTimer = null;

function tpShow(event, obj) {
    clearTimeout(tpTimer);
    tpTimer = null;
    getMouse(event);
	var xOffset = (imageX - 10);
	var yOffset = (imageY + 30);	
	t = obj.title;	obj.title = "";	
	var c = (t != "") ? "<br/>" + t : "";
	$get("gThumbPreview").innerHTML = "<img src='" + obj.rel + "' alt='Loading...' />" + c;								 		
	$get("gThumbPreview").style.top = yOffset + "px";
	$get("gThumbPreview").style.left = xOffset + "px";
	$($get("gThumbPreview")).fadeIn("fast");
	tpTimer = setTimeout(tpHide, 3000);
	//setTimeout(function() { tpHide(); }, 1000);
}

function tpHide() {
    clearTimeout(tpTimer);
    $($get("gThumbPreview")).hide();  //fadeOut(400); //style.display = 'none';
}

function wHeight() {
    var windowHeight = 0;
    if( typeof( window.innerWidth ) == 'number' ) { windowHeight = window.innerHeight;
    } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
    windowHeight = document.documentElement.clientHeight;
    } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
    windowHeight = document.body.clientHeight;
    } return windowHeight;
} 

function ws_ErrorTrap(a,b,c) {}
function ws_DummyCallback(a) {}

jQuery.fn.jThumb = function() {
    return this.each(
		function() {
		    var w = parseInt($(this).width());
		    var h = parseInt($(this).height());
		    var maxWidth = 150;
		    var maxHeight = 128;
		    var fullSrc = "javascript:window.open('" + this.src + "')";
		    var expand = false;
		    var sWrap;
		    var finalHeight;
		    var finalWidth = w;

		    // when we cant determine the size, default to max
		    if (w == 0 && h == 0) {
		        finalWidth = maxWidth;
		        expand = true;
		    } else {
		        if (w < maxWidth) finalWidth = w;
		        else finalWidth = maxWidth;
		    }

		    jQuery(this).css('width', finalWidth + 'px');
		    jQuery(this).css('height', 'auto');

		    // wrap it
		    if (w > maxWidth || expand) {
		        sWrap = '<div onclick="' + fullSrc + '" class="thumb-img" style="cursor: pointer; width:' + finalWidth + 'px;"><div class="thumb-inner"></div><div class="thumb-zoom"/></div>';
		    } else {
		        sWrap = '<div class="thumb-img" style="width:' + finalWidth + 'px;"><div class="thumb-inner"></div></div>';		        
		    }
		    jQuery(this).wrap(sWrap);
		}
    )
}

function notification_Update(sNotification, sValue) {
    $.ajax({
        type: "POST",
        url: "/WebServices/Misc.asmx/Notification_Update",
        data: "{intUserID:'" + iWSUID + "',strHash:'" + iWSHID + "',strNotification:'" + sNotification + "',strValue:'" + sValue + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) { },
        complete: function() { }
    });

}

function Left(str, n) {
    if (n <= 0)
        return "";
    else if (n > String(str).length)
        return str;
    else
        return String(str).substring(0, n);
}
function Right(str, n) {
    if (n <= 0)
        return "";
    else if (n > String(str).length)
        return str;
    else {
        var iLen = String(str).length;
        return String(str).substring(iLen, iLen - n);
    }
}
function rgb2hex(rgb) {
    if (rgb == null || rgb == '' || rgb == undefined) return '';
    rgb = rgb.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/);  
    function hex(x) {  
        hexDigits = new Array("0","1","2","3","4","5","6","7","8","9","a","b","c","d","e","f");  
        return isNaN(x) ? "00" : hexDigits[(x - x % 16) / 16] + hexDigits[x % 16];
    }
    if (rgb == null) return '';
    return hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);
}



function doBuildThumbs() {
    thumbCounter = arrThumbs.length;
    var minIndex = 0, maxIndex = 0, thumbs = '';

    //$get("debug").innerHTML = 'middle: ' + middle + '; runningIndex: ' + runningIndex + '; minIndex: ' + minIndex + '; maxIndex: ' + maxIndex + '; thumbCounter: ' + thumbCounter + '; currentIndex: ' + currentIndex;

    // figure out the middle
    if (runningIndex <= 0) runningIndex = middle - 1;
    if (runningIndex > thumbCounter - 1) runningIndex = thumbCounter - middle;

    

    // figure out the borders
    minIndex = runningIndex - (middle - 1); maxIndex = runningIndex + middle;

    //$get("debug").innerHTML += '<br>middle: ' + middle + '; runningIndex: ' + runningIndex + '; minIndex: ' + minIndex + '; maxIndex: ' + maxIndex + '; thumbCounter: ' + thumbCounter + '; currentIndex: ' + currentIndex;

    if ((gpDirection == 'left' || gpDirection == '') && minIndex < middle) { minIndex = 0; maxIndex = pageSize; if (maxIndex > pageSize) maxIndex = pageSize; }
    if ((gpDirection == 'right' || gpDirection == '') && maxIndex > thumbCounter - 1) { maxIndex = thumbCounter; minIndex = maxIndex - pageSize; }
    if (minIndex < 0) minIndex = 0;

    

    //$get("debug").innerHTML += '<br>middle: ' + middle + '; runningIndex: ' + runningIndex + '; minIndex: ' + minIndex + '; maxIndex: ' + maxIndex + '; thumbCounter: ' + thumbCounter + '; currentIndex: ' + currentIndex;

    for (var iIndex = minIndex; iIndex < maxIndex; iIndex++) {
        thumbSequence = arrThumbs[iIndex][0];
        thumbImageID = arrThumbs[iIndex][1];
        thumbImagePath = arrThumbs[iIndex][2];
        thumbImageLink = arrThumbs[iIndex][3];
        thumbCommentCounter = arrThumbs[iIndex][4];

        thumbLargeImagePath = thumbImagePath.replace('Minis', 'Thumbs')

        thumbTip = "<img class='thumb' src='" + thumbLargeImagePath + "' /><br/><div style='padding: 4px 0 0 0;'>komentarze: " + thumbCommentCounter + "</div>"

        thumbs += "<td class='previewTD" + ((currentIndex == iIndex) ? '_Color' : '') + "' align='center'>" +
                              "<div class='galleryTT' title=\"" + thumbTip + "\"><div class='thumbSmallBg2'><a href='" + thumbImageLink + "'><img class='thumbSmall' src='" + thumbImagePath + "' border='0'/></a></div>" +
                              "<div class='allATSeq'>" + thumbSequence + "</div></div></td>";
    }
    

    var objData = $get('thumbsData');
    objData.innerHTML = '<table cellpadding=1 cellspacing=1><tr>' + thumbs + '</tr></table>';

    

    $('.galleryTT').tooltip({
        track: true,
        delay: 0,
        showURL: false,
        fixPNG: true,
        opacity: 1.00,
        left: 0,
        top: 22,
        fade: 250
    });

    

}

var m_feedtypes = [{ id: '10', icon: 'desc_add.png', desc: 'dodane opisy', on: '1' },
                   { id: '2', icon: 'comment.png', desc: 'komentarze na profilu', on: '1' },
                   { id: '0', icon: 'gallery_comment.png', desc: 'komentarze do zdjęć', on: '1' },
                   { id: '1', icon: 'image_add.png', desc: 'dodane zdjęcia', on: '1' },
                   { id: '3', icon: 'video_add.png', desc: 'dodane filmy', on: '1' },
                   { id: '4', icon: 'post_add.png', desc: 'posty na forum', on: '1' },
                   { id: '5', icon: 'thread_add.png', desc: 'wątki na forum', on: '1' },
                   { id: '15', icon: 'friend_add.png', desc: 'nowi znajomi', on: '1' },
                   { id: '7', icon: 'group_join.png', desc: 'przyłączenie do grupy', on: '1' },                                      
                   { id: '8', icon: 'game_play.png', desc: 'granie w gry', on: '1' }
                  ];

                   //{ id: '16', icon: 'profile_upgrade.png', desc: 'dodatki do profilu', on: '1' },                  

var m_feedfilter = '';
var m_feedpage = 1;
var m_feedappend = false;
var m_feedtype = 0;
var m_feedaddtype = 0;
var m_feedcommentallowimages = false;
var m_feedcharlimit = 0;
var m_feedcharremaining = 0;
var m_cancommentprofile = false;
var m_feedimagesnotallowedmsg = 'Użytkownik nie zezwala na obrazki w komentarzach';

function activityFeed_BuildFilter() {    
    var sHTML = '';
    var sClass = '';

    for (var i = 0; i < m_feedtypes.length; i++) {
        if (m_feedfilter.indexOf(',' + m_feedtypes[i].id + ',') != -1 || m_feedfilter == '') {
            sClass = 'filterFeedIcon';
        } else {
            sClass = 'filterFeedIconOff';
            m_feedtypes[i].on = '0';            
        }
        sHTML += "<img id='filterFeedIcon_" + m_feedtypes[i].id + "' onclick='filterFeed_Click(this);' src='/icons/" + m_feedtypes[i].icon + "' class='" + sClass + "' title='" + m_feedtypes[i].desc + "'/>";
    }

    $get("feedFilter").innerHTML = "<div id='feedFilterLabel' onclick='activityFeed_ShowFilter();'>Filtry wydarzeń</div><span id='feedFilterIcons'>" + sHTML + "</span>";
    $get("feedMore").innerHTML = "<a href='javascript:activityFeed_GetMore();'>Pokaż starsze</a> <img id='feedLoadingIcon2' src='/images/ajax_progress2.gif' />"

    if (m_feedtype == 1) setTimeout(activityFeed_Refresh, 30000);

    if (m_feedtype == 1 || thisProfileID == iWSUID) {
        // adding 'now' for all friends
        m_feedaddtype = 0;
        m_feedcharlimit = 500;
        $get("feedAddTease").innerHTML = "Napisz coś do znajomych... <span style='color:silver'>(nowy opis)</span>";
        $("#feedAdd").show();
    } else {
        // adding comments to user's profile
        if (!m_cancommentprofile) return false;

        $("#feedAddPrivate, #feedAdd, #feedAddOptions").show();
        m_feedaddtype = 1;
        m_feedcharlimit = 4000;

        $get("feedAddTease").innerHTML = "Dodaj komentarz do profilu...";
        if (m_feedcommentallowimages) {
            $("#feedAddPicture").click(function() {
                var url = prompt("Link do obrazka");
                if (url != null && url != '') {
                    var val = $("#feedAddValue").val();
                    if (val != '') val += ' ';
                    if (url.toLowerCase().indexOf('[img') == -1) url = '[img]' + url + '[/img]';

                    $("#feedAddValue").val(val + url);
                    $("#feedAddTease").hide(); $("#feedAddBox").show(); $("#feedAddValue").focus();
                }
            });
        } else {        
            $get("feedAddPicture").className = 'filterFeedIconOff';
            $get("feedAddPicture").title = m_feedimagesnotallowedmsg;
            $("#feedAddPicture").click(function() { alert(m_feedimagesnotallowedmsg); });
        }        
    }
    $("#feedAddTease").click(function() { $("#feedAddTease").hide(); $("#feedAddBox").show(); $("#feedAddValue").focus(); });
    $("#feedAddValue").blur(function() { if ($("#feedAddValue").val() == '') { $("#feedAddTease").show(); $("#feedAddBox").hide(); } });
        
    generic_charCounterStart('feedAddValue', 'feedAddCharCounter', m_feedcharlimit);
    activityFeed_BindActions();
}

function activityFeed_BindActions() {
    $(".nowItemWrap").mouseover(function() {
        var id = this.id.split("_")[1];
        if ($("#nowAction_" + id) != null) $("#nowAction_" + id).show();
    });
    $(".nowItemWrap").mouseout(function() {
        var id = this.id.split("_")[1];
        if($("#nowAction_" + id)!=null) $("#nowAction_" + id).hide();
    });
}

function activityFeed_Refresh() {
    if (m_feedpage != 1) return false;
    activityFeed_BuildData();
    setTimeout(activityFeed_Refresh, 30000);
}

function activityFeed_ShowFilter() {
    $('#feedFilterLabel').hide();
    $('#feedFilterIcons').show();
    $('#feedData').addClass('feedDataMargin');
}

function filterFeed_Click(obj) {
    m_feedpage = 1;
    m_feedappend = false;
    var id = obj.id.split('_')[1];
    
    for (var i = 0; i < m_feedtypes.length; i++) {
        if (m_feedtypes[i].id == id) {            
            if (m_feedtypes[i].on == '1') {
                m_feedtypes[i].on = '0';
                obj.className = 'filterFeedIconOff';
                //obj.title = 'pokaż ' + m_feedtypes[i].desc;
            } else {
                m_feedtypes[i].on = '1';
                obj.className = 'filterFeedIcon';
                //obj.title = 'schowaj ' + m_feedtypes[i].desc;
            }
        }
    }    
    activityFeed_BuildData();
}

function activityFeed_GetMore() {
    m_feedpage++;
    m_feedappend = true;
    activityFeed_BuildData()
}

function activityFeed_BuildData() {
    try {
        if (m_feedappend) $("#feedLoadingIcon2").show();
        else $("#feedLoadingIcon1").show();
        
        var filter = ',';
        for (var i = 0; i < m_feedtypes.length; i++) if (m_feedtypes[i].on == '1') filter += m_feedtypes[i].id + ',';

        $.ajax({
            type: "POST",
            url: "/WebServices/Misc.asmx/UserActivity_Get",
            data: "{intUserID:'" + thisProfileID + "',intType:'" + m_feedtype + "',strFilter:'" + filter + "',intPage:'" + m_feedpage + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(response) {
                var oData = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
                if (m_feedappend) $get("feedData").innerHTML += oData.activity;
                else $get("feedData").innerHTML = oData.activity;
            },
            complete: function() {
                if (m_feedappend) $("#feedLoadingIcon2").hide();
                else $("#feedLoadingIcon1").hide();

                activityFeed_BindActions();
            }
        });

    } catch (err) {
        $get("feedFilter").innerHTML = "<div id='chatLoading'>Error</div>";
    }
}

function tab_Click(sTabID) {
    $.ajax({
        type: "POST",
        url: "/WebServices/Misc.asmx/Tab_Click",
        data: "{strTabID:'" + sTabID + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) { }
    });
}
function flag_Toggle(sFlag, sValue) {
    $.ajax({
        type: "POST",
        url: "/WebServices/Misc.asmx/Flag_Toggle",
        data: "{strFlagID:'" + sFlag + "',strValue:'" + sValue + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) { }
    });
}

function activityFeed_DeleteComment(iRow, iCommentID) {
    if (!confirm('Usunąć ten komentarz?')) return;
    $.ajax({
        type: "POST",
        url: "/WebServices/Misc.asmx/User_CommentDelete",
        data: "{intCommentID:'" + iCommentID + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) { $("#nowItem_" + iRow).hide('slow'); }
    });
}

function activityFeed_DeleteNow(iRow, iNowID) {
    if (!confirm('Usunąć ten opis?')) return;
    $.ajax({
        type: "POST",
        url: "/WebServices/Misc.asmx/User_NowDelete",
        data: "{intNowID:'" + iNowID + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;

            if (data.wascurrent == 1) {
                $("#divPersonalDescriptionText").html(''); 
                if (thisProfileID == iWSUID) $("#personalStatus").val('');
            }
            $("#nowItem_" + iRow).hide('slow');
        }
    });
}

function activityFeed_AddNewDisable() {
    $("#feedLoadingIcon1").show();
    $("#feedAddWrap").addClass("feedAddWrapDisabled");       
    $("#feedAddValue").attr("disabled", "disabled");   
}
function activityFeed_AddNewEnable() {
    $("#feedLoadingIcon1").hide();
    $("#feedAddWrap").removeClass("feedAddWrapDisabled");   
    $("#feedAddValue").removeAttr("disabled");
}

function activityFeed_AddNew() {
    // validate
    var sDesc = $('#feedAddValue').val().replace(/\"/g, "'");
    if (sDesc == '' || m_feedcharremaining < 0) return;

    if (m_feedaddtype == 1) {
        // comment
        if (!m_feedcommentallowimages && sDesc.toLowerCase().indexOf('[img') != -1) { alert(m_feedimagesnotallowedmsg); return; }

        activityFeed_AddNewDisable();

        $.ajax({
            type: "POST",
            url: "/WebServices/Misc.asmx/User_CommentAdd",
            data: '{intProfileID:"' + thisProfileID + '", isPrivate:"' + $('#feedCommentPrivate').is(':checked') + '", strComments:"' + sDesc + '"}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(response) {
                $("#feedAddValue").val('');
                $("#feedAddValue").trigger("blur");
                activityFeed_BuildData();
                activityFeed_AddNewEnable();
            },
            complete: function() { },
            error: function(err) { }  //alert(err.statusText); 
        });        
    } else {
        // feed
        activityFeed_AddNewDisable();
        
        $.ajax({
            type: "POST",
            url: "/WebServices/Misc.asmx/User_PersonalStatusAdd",
            data: '{strPersonalDescription:"' + sDesc + '"}',
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(response) {
                $("#feedAddValue").val('');
                $("#feedAddValue").trigger("blur");
                $("#personalStatus").val(sDesc);
                if (thisProfileID == iWSUID) { $("#divPersonalDescriptionText").html(sDesc); }
                activityFeed_BuildData();
                activityFeed_AddNewEnable();
            },
            complete: function() { }
        });
    }    
}

// char counter functions
//
var m_charCounterMax = 0;
var m_charCounterRemaining = 0;
var m_charCounterObject = null;
var m_charCounterInput = null;

function generic_charCounterStart(oInputID, oCounterID, iMax) {
    m_charCounterInput = $("#" + oInputID);
    m_charCounterObject = $("#" + oCounterID);
    m_charCounterMax = iMax;
    generic_charCounterRefresh();
}

function generic_charCounterRefresh() {
    m_charCounterRemaining = (m_charCounterMax - m_charCounterInput.val().length);
    if (m_charCounterRemaining < 0) m_charCounterObject.html("powyżej limitu (" + Math.abs(m_charCounterRemaining) + ")").css("color", "red");
    else m_charCounterObject.html("pozostało " + m_charCounterRemaining).css("color", "");       
    setTimeout(generic_charCounterRefresh, 500);
}

function showMore(sMoreID) {
    $("#moreclick" + sMoreID).hide();
    $("#moretext" + sMoreID).show();
}

function businessRatings_Start() {
    if (alreadyRated) return;
    //$('#currentRatings').slideUp(400);
    //setTimeout(function() { $('#newRatings').slideDown(400)(); }, 400);
    $('#currentRatings').hide();
    $('#newRatings').show();      
}

function businessRatings_Cancel() {
    $('#newRatings').slideUp(400);
    setTimeout(function() { $('#currentRatings').slideDown(400); }, 400);       
}

function businessRatings_Submit() {
    var ratings = selected.join(",");;
    var comments = '';

    if ($("#ratingComments").val() != $("#ratingComments").attr('title')) comments = $("#ratingComments").val().replace(/\"/g, "'"); ;

    if($("#chkTerms:checked").val() != 'on') { alert('Akceptacja oświadczenia jest wymagana'); return false;}

    for (var i = 0; i < selected.length; i++) {
        if (selected[i] == undefined) { alert('Prosimy ocenić ' + types[i].name); return false;}
    }

    $("#progress").show();

    $.ajax({
        type: "POST",
        url: "/WebServices/Score.asmx/BusinessRatings_Submit",
        data: '{intBusinessID:"' + iWSBID + '",strRatings:"' + ratings + '",strComments:"' + comments + '"}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            if (data.result == 'ok') {
                $("#newRatings").hide();
                $("#rateCompleted").show();
                parent.top.location.reload(true);
                return true;                  
            } else {
                alert('Nastąpił błąd podczas zapisywania oceny');
            }
            $("#progress").hide();
        },
        complete: function() { },
        error: function(err) { alert(err.statusText) }
    });
}

function groupNotifications_Load() {
    $("#groupNotifications").html("test");
}

function cityContest_SubmitVote(index, iContestID, iCityID) {
    $.ajax({
        type: "POST",
        url: "/WebServices/Misc.asmx/CityContest_VoteSubmit",
        data: '{intContestID:"' + iContestID + '",intCityID:"' + iCityID + '"}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            if (data.result == 'ok') {
                $("#cityVotes" + index).html(addCommas((index == 1 ? ++city1_votes : ++city2_votes)));
                $("#cityTotal" + index).html(addCommas((index == 1 ? ++city1_points : ++city2_points)));
                var info = "<div class='voteComplete'>" +
                           "<div class='title'>Dziękujemy za punkt!</div>";                             
                if(iWSUID==0) {
                    info += "<div class='info'>Jeżeli chcesz zdobyć więcej punktów dla tego " + 
                            "miasta dołącz jako mieszkaniec!<div class='join'><a href='/register.aspx'><img src='/images/city_contest_join.png' /></a></div></div>";
                } else {
                    info += "<div class='info'>Jeżeli chcesz zdobyć więcej punktów dla tego " +
                            "miasta zapraszamy do:<ul>" +
                            "<li><a href='/EditBusiness.aspx?cityID=" + iCityID + "'>Dodania miejsca</a></li>" +
                            "<li><a href=\"javascript:jQuery.facebox.url('/EditImage.aspx?cityID=" + iCityID + "&type=3',320,500);\">Dodania zdjęcia</a></li>" +
                            "<li><a href='/EditEvent.aspx?cityID=" + iCityID + "'>Dodania imprezy</a></li>" +
                            "<li><a href='/importcontacts.aspx'>Zaproszenia znajomych</a></li></ul>" +
                            "Lub wyślij poniższy link do swoich znajomych z tego miasta aby również dodali punkt!</div>";
                }                                        
                info += "</div>";                
                $("#vote" + index).html(info);                                                                                                                                  
            } else {
                alert('Twój głos już został oddany na to miasto lub w tym pojedynku');
            }
        },
        complete: function() { },
        error: function(err) { alert(err.statusText) }
    });
}

function addCommas(nStr) {
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ',' + '$2'); }
    return x1 + x2;
}

function cityContest_Find(index, query) {
    if (query.length < 3) {
        $("#citySearchResults"+index).html('Wpisz przynajmniej trzy znaki aby zacząć wyszukiwanie').show();
        return;
    }

    $('#citySearching' + index).show();
    
    $.ajax({
        type: "POST",
        url: "/WebServices/Suggest.asmx/City_Find",
        data: "{strQuery:'" + query + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            var results = '';

            if (data.length == 0) {
                results = 'Nie znaleziono rezultatów';
            } else {
                for (var i = 0; i < data.length; i++) {
                    results += "<div class='result'><a href='#' onclick=\"cityContest_Set(" + index + "," + data[i].id + ",'" + data[i].cityname + "');\">" + data[i].displayname + "</a></div>";
                    if (i < data.length - 1) results += "<div class='separator'></div>"
                }
            }
            $("#citySearchResults"+index).html(results).show().highlight(query);
            $('#citySearching'+index).hide();
        },
        error: function(err) { alert(err.statusText); }
    });
}

function cityContest_Set(index, iCityID, sCityName) {
    eval("city" + index + "_id = " + iCityID);
    eval("city" + index + "_name = '" + sCityName + "'");
    $("#citySearchResults" + index).html("").hide();
    $("#newCity" + index).hide();
    $("#cityCancel" + index).show();
    $("#selectedCity" + index).html(sCityName).show();
}
function cityContest_Cancel(index) {
    eval("city" + index + "_id = 0");
    eval("city" + index + "_name = ''");
    $("#newCity" + index).val("").show().trigger("blur");
    $("#cityCancel" + index).hide();
    $("#selectedCity" + index).html("").hide();
}
function cityContest_Start() {
    if (city1_id == 0 || city2_id == 0) { alert('Obydwa miasta muszą być wybrane'); return false; }
    if (city1_id == city2_id) { alert('Miasta nie mogą być takie same'); return false; }
    $.ajax({
        type: "POST",
        url: "/WebServices/Misc.asmx/CityContest_Start",
        data: '{intCityID1:"' + city1_id + '",intCityID2:"' + city2_id + '"}',
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
        var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            if (data.result == 'ok') {
                location.href = "/pojedynek/" + data.id + "-" + city1_name + "," + city2_name;
            } else {
                alert('Nastąpił błąd');
            }                        
        },
        complete: function() { },
        error: function(err) { alert(err.statusText) }
    });
}
// JScript File
var onlineFriendsVisible = false;
var onlineSettingsVisible = false;
var profileEnhanceVisible = false;
var favoritesVisible = false;
var iWSCallID; 
var iWSUID = 0;
var iWSHID = '';
var iWSUM = 0;
var iWSUCG = 0;
var iWSVD = 0;
var iWSMOD = 0;
var iWSCGUARD = 0;
var iWSCityID = 0;
var iWSBID = 0;
var sFIRSTNAME = '';
var iOnLinePrivacy = 0;
var sPersonalDescription = '';
var chatCounter = 0;
var arrChatSessions;
var chatWindowsLoaded = 0;
var currentWindowID = 0;
var currentChatID = 0;
var chatLastChecked = '';
var chatHighlighted = 0;
var overLink = false;
var sessionsInitialized = false;
var iCountFriends = 0;
var iCountOnlineFriends = -1;
var timerChatMessages = null;
var m_objFriendsOnline = 'footerFriendsOnlineBorder';
var m_objSettings = 'footerSettingsBorder';
var m_objProfileEnhance = 'footerProfileEnhanceBorder';
var m_objFavorites = 'footerFavoritesBorder';
var m_sServerTime = '';
var m_serverDate = '';
var m_smileys = '';
var m_overChatAvatar = false;
var m_chatSoundMessage = 0;
var m_chatShowFullNames = 1;
var m_wallpaperRepeat = 1;
var m_wallpaperFixed = 0;
var m_backgroundColor = '';
var thisProfileID = 0;
var iProfileEnhance = 0;
var iProfileBackground = 0;
var sMyProfileURL = '';
var maxWallpapers = 6;
var totalWallpapers = 0;
var currentWallpaperID = 0;
var savedWallpaperID = 0;
var notLoggedInError = "<div id='chatLoading'>Prosimy się zalogować</div>"
var m_FavoriteType = 0;
var m_PageTitle = '';
var m_FavoritesLoaded = false;

function chat_PrepareOnlineFriends() {
    // open previously opened windows
    if(getCookie('chat_show')=='1') chat_ShowOnlineFriends();
    if(getCookie('settings_show')=='1') chat_ShowSettings();
    if(iWSMOD>0||iWSCGUARD>0)$("#footerMod").show();
    
    chat_PositionOnlineFriends();    
    chat_PrepareOnlineUsers();   
      
    if(profileEnhanceVisible) oShow($get(m_objProfileEnhance));
    if(favoritesVisible) {
        oShow($get(m_objFavorites));
        favoritesGet();
    }
}

function chat_PositionOnlineFriends() {    
    var objContainer = $get('footerFriends');
    var objFriends = $get(m_objFriendsOnline);
    if(objFriends==null) return false;
    var xOffset = 0;if(cT=='IE')xOffset=1;
    var arr = getElementPos(objContainer);                
    X = arr[0]; Y = arr[1];       
    
    objFriends.style.top = (Y - 304) + 'px';
    objFriends.style.left = (X - 6) + 'px';           
    // fix all chat windows
    chat_PositionSettings();
    chat_PositionProfileEnhance();
    chat_PositionFavorites();
    if(chatWindowsLoaded)chat_PositionChatWindows();
}
function chat_PositionSettings() {
    var objContainer = $get('footerIndicator');
    var objSettings = $get(m_objSettings);
    if(objSettings==null) return false;
    
    var arr = getElementPos(objContainer);                
    X = arr[0]; Y = arr[1];       
    
    objSettings.style.top = (Y - 260) + 'px';
    objSettings.style.left = (X - 165) + 'px';           
}
function chat_PositionProfileEnhance() {
    var objContainer = $get('footerProfile');
    var objWindow = $get(m_objProfileEnhance);          
    if(objWindow==null) return false;    
    var arr = getElementPos(objContainer);                
    X = arr[0]; Y = arr[1];           
    objWindow.style.top = (Y - 262) + 'px';
    objWindow.style.left = (X - 11) + 'px';            
}
function chat_PositionFavorites() {
    var objContainer = $get('footerFavorites');
    var objWindow = $get(m_objFavorites);     
    if(objWindow==null) return false;    
    var arr = getElementPos(objContainer);                
    X = arr[0]; Y = arr[1];           
    objWindow.style.top = (Y - 262) + 'px';
    objWindow.style.left = (X - 40) + 'px';            
}

// favorites
function favoriteAddClick() {
    var sTitle = m_PageTitle.replace(/'/g,"");
    var sURL = location.pathname + location.search;

    $.ajax({
        type: "POST",
        url: "/WebServices/Misc.asmx/Favorite_Add",
        data: "{intType:'" + m_FavoriteType + "',strTitle:'" + sTitle + "',strURL:'" + sURL + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) { favoritesGet(); },
        error: function(err) { alert(err.statusText) } 
    });
}
function favoriteDeleteClick(iID) {
    $.ajax({
        type: "POST",
        url: "/WebServices/Misc.asmx/Favorite_Delete",
        data: "{intFavoriteID:'" + iID + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) { favoritesGet(); }
    });
}
function favoritesGet() {
    if(!m_FavoritesLoaded) $("#footerFavoritesContents").html("<img src='/Images/ajax_progress.gif' />");
    
    $.ajax({
        type: "POST",
        url: "/WebServices/Misc.asmx/Favorites_Get",
        data: "{}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) { 
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            var prevType = -1;
            var counter = 0;
            var sFavorites = '';
            
            if(data.length==0 ) {
                sFavorites = "<div id='chatLoading'>Brak zakładek.<br><br>Najedź myszką na poniższy guzik 'Zakładki' a ukaże się opcja dodawania stron na portalu do tej listy. Dzięki temu będzie Ci łatwiej trafić do stron które często odwiedzasz.</div>";
            } else {
                for (var i = 0; i < data.length; i++) { 
                    if(prevType!=data[i].type) {
                        counter = 0;
                        if(prevType>-1)sFavorites += "</fieldset>";
                        sFavorites += "<fieldset class='favoritesLegend'><legend>" + data[i].typename + "</legend>";
                    }            
                    if(counter>0)  sFavorites += "<div class='favoriteSeparator'></div>";
                    sFavorites += "<div class='favoriteItem' onmouseover=\"$('#favoriteActions" + data[i].id + "').show();\" onmouseout=\"$('#favoriteActions" + data[i].id + "').hide();\"><a href='" + data[i].url + "'>" + data[i].title + "</a>";
                    sFavorites += "  <div class='favoriteActions' id='favoriteActions" + data[i].id + "'><a href='javascript:favoriteDeleteClick(" + data[i].id + ");'>Usuń</a></div></div>";
                    prevType = data[i].type;                
                    counter++;
                }
                sFavorites += "</fieldset>";              
            }    
            $("#footerFavoritesContents").html(sFavorites)
            m_FavoritesLoaded = true;
        }
    });
}

// profile enhance
function clickProfileEnhance() {
    if(profileEnhanceVisible) {
        oHide($get(m_objProfileEnhance));
        profileEnhanceVisible = false;
        flag_Toggle('popup_profile_enhance','0');
    } else {        
        chat_PositionProfileEnhance();
        oShow($get(m_objProfileEnhance));
        profileEnhanceVisible = true;    
        if(favoritesVisible) {oHide($get(m_objFavorites));favoritesVisible=false;}
        flag_Toggle('popup_profile_enhance','1');        
    }
}

// favorites
function clickFavorites() {
    if(favoritesVisible) {
        oHide($get(m_objFavorites));
        favoritesVisible = false;
        flag_Toggle('popup_favorites','0');
    } else {        
        chat_PositionFavorites();
        oShow($get(m_objFavorites));
        favoritesVisible = true;        
        if(profileEnhanceVisible) {oHide($get(m_objProfileEnhance)); profileEnhanceVisible=false;}
        flag_Toggle('popup_favorites','1');
        if(!m_FavoritesLoaded) favoritesGet();
    }
}

// indicator
function chat_ClickIndicator() {
    if(onlineSettingsVisible) chat_HideSettings()
    else chat_ShowSettings()
}
function chat_ShowSettings() {    
    chat_PositionSettings();
    if(onlineFriendsVisible) chat_HideOnlineFriends();
    var objSettings = $get(m_objSettings);  
    if(objSettings==null) return false;      
    oShow(objSettings);
    setCookie('settings_show','1',365);
    $get("footerIndicator").className = 'footerButtonOn'; 
    onlineSettingsVisible = true;
}
function chat_HideSettings() {
    var obj = $get(m_objSettings);
    oHide(obj);
    $get("footerIndicator").className = ''; 
    onlineSettingsVisible = false;
    setCookie('settings_show','0',365);
}

// friends online
function chat_ClickOnlineFriends() {
    if(onlineFriendsVisible) chat_HideOnlineFriends()
    else chat_ShowOnlineFriends()
}
function chat_ShowOnlineFriends() {        
    if(onlineSettingsVisible) chat_HideSettings();
    var objFriends = $get(m_objFriendsOnline);  
    if(objFriends==null) return false;
      
    //objFriends.style.display = 'block';
    oShow(objFriends);
    
    $get("footerFriends").className = 'footerButtonOn'; 
    setCookie('chat_show','1',365);
    onlineFriendsVisible = true;
}
function chat_HideOnlineFriends() {
    var obj = $get(m_objFriendsOnline);
    $get("footerFriends").className = '';     
    //obj.style.display = 'none';
    oHide(obj);
    onlineFriendsVisible = false;
    setCookie('chat_show','0',365);
}

function chat_PrepareOnlineUsers(){    
     if(iWSUID!=0) {
        $get("friendsDiv").innerHTML = "<div id='chatLoading'>Loading...</div>";
        $get("settingsOnline").innerHTML = "<div id='chatLoading'>Loading...</div>";        
        setTimeout(chat_GetOnLineUsers, 250); 
        setTimeout(chat_PrepareSessions, 250); 
        setTimeout(chat_PrepareSettings, 250);         
        chat_PrepareEnhanceProfile();         
     } else {
        $("#friendsDiv, #settingsOnline, #profileEnhanceColors, #profileEnhanceBackgrounds, #footerFavoritesContents").html(notLoggedInError);
        if($get("profileEnhanceContents")!=null)$get("profileEnhanceContents").innerHTML = notLoggedInError;
     }     
     $("#footerFavorites").mouseover(function() { $("#favoritesAdd").show(); });
     $("#footerFavorites").mouseout(function() { $("#favoritesAdd, .tipsy").hide(); });   
}  

var arrWallpapers = new Array(20);
for (i=0; i < 20; i++) { 
    arrWallpapers[i] = new Array(3);
    arrWallpapers[i][0] = 0; arrWallpapers[i][1] = ''; arrWallpapers[i][2] = '';
}

// profile enhance groups
var iProfileEnhanceCounter = 0;
var arrProfileEnhanceGroup = new Array(4);
arrProfileEnhanceGroup[0] = 'Portal';
arrProfileEnhanceGroup[1] = 'Dane główne';
arrProfileEnhanceGroup[2] = 'Awatar';
arrProfileEnhanceGroup[3] = 'Panel';

// profile enhance properties
var arrProfileEnhance = new Array(40)
for (i=0; i < 40; i++) { 
    arrProfileEnhance[i] = new Array(6);
    arrProfileEnhance[i][0] = '';
}

arrayEnahanceAdd('Tło', 'Kolor tła strony profilu', 'body', 'background-color', 0, 1);

arrayEnahanceAdd('Nazwa profilu', 'Kolor tekstu nazwy profilu', '.profileAvatarName', 'color', 1, 2);
arrayEnahanceAdd('Opis', 'Kolor tekstu opisu profilu', '#divPersonalDescriptionText', 'color', 1, 3);
arrayEnahanceAdd('Tło', 'Kolor tła sekcji z danymi głównymi', '.profileTableMain', 'background-color', 1, 4);
arrayEnahanceAdd('Nazwa', 'Kolor tekstu nazwy pola', '.fieldLabelMain', 'color', 1, 5);
arrayEnahanceAdd('Dane', 'Kolor tekstu danych', '.fieldValue', 'color', 1, 6);
arrayEnahanceAdd('Ramka', 'Kolor ramki', '.profileTableMain', 'border-color', 1, 7);
arrayEnahanceAdd('Separator', 'Kolor separatora oddzielającego pola', '.fieldMainSeparator', 'border-color', 1, 8);
arrayEnahanceAdd('Link', 'Kolor linków', '.fieldValueLink', 'color', 1, 9);

arrayEnahanceAdd('Tło', 'Kolor tła sekcji z awatarem', '.profileLeft', 'background-color', 2, 10);
arrayEnahanceAdd('Ramka', 'Kolor ramki', '.profileLeft', 'border-color', 2, 11);
arrayEnahanceAdd('Zdjęcie tło', 'Kolor tła zdjęcia', '.thumbProfile', 'background-color', 2, 12);
arrayEnahanceAdd('Zdjęcie ramka', 'Kolor ramki zdjęcia', '.profileImageBg', 'border-color', 2, 13);

arrayEnahanceAdd('Tło', 'Kolor tła paneli', '.profileTableClean', 'background-color', 3, 14);
arrayEnahanceAdd('Tło komentarze', 'Kolor tła komentarzy', '.nowCommentItem, .profileSubHeader', 'background-color', 3, 15);
arrayEnahanceAdd('Ramka', 'Kolor ramki paneli', '.profileTableClean', 'border-color', 3, 16);
arrayEnahanceAdd('Nazwa', 'Kolor tekstu nazwy pola', '.fieldLabelPanel', 'color', 3, 17);
arrayEnahanceAdd('Tekst', 'Kolor tekstu danych', '.profileText', 'color', 3, 18);
arrayEnahanceAdd('Tekst koment.', 'Kolor tekstu komentarzy', '.notUserComment', 'color', 3, 19);
arrayEnahanceAdd('Tekst koment. opisu', 'Kolor tekstu komentarzy do opisu', '.nowCommentItem', 'color', 3, 20);
arrayEnahanceAdd('Link', 'Kolor linków', '.profileTableClean a', 'color', 3, 21);
arrayEnahanceAdd('Data', 'Kolor dat', '.timeStampS, .nowDate', 'color', 3, 22);
arrayEnahanceAdd('Data komentarzy', 'Kolor dat komentarzy', '.nowDate', 'color', 3, 23);
arrayEnahanceAdd('Nagłówek tło', 'Kolor tła nagłówka', '.profileSectionClean', 'background-color', 3, 24);
arrayEnahanceAdd('Nagłówek tekst', 'Kolor tekstu nagłówka', '.profileSectionHeaderClean', 'color', 3, 25);
arrayEnahanceAdd('Guzik tło', 'Kolor tła guzików w nagłówku', '.panelActionDiv', 'background-color', 3, 26);
arrayEnahanceAdd('Guzik tekst', 'Kolor tekstu guzików w nagłówku', '.panelActionsClean', 'color', 3, 27);
arrayEnahanceAdd('Separator', 'Kolor separatora oddzielającego pola', '.profileTableSeparator, .nowItemWrap, .profileActions', 'border-bottom-color', 3, 28);
arrayEnahanceAdd('Zdjęcia tło', 'Kolor tła zdjęć', '.thumbSmall, .nowImageCommentThumb img, .pCmtImg, .nowImage img', 'background-color', 3, 29);
arrayEnahanceAdd('Zdjęcia ramka', 'Kolor ramki zdjęć', '.thumbSmall, .nowImageCommentThumb img, .pCmtImg, .nowImage img', 'border-color', 3, 30);
arrayEnahanceAdd('Znajomi tło', 'Kolor tła znajomych', '.userDivMini', 'background-color', 3, 31);
arrayEnahanceAdd('Znajomi ramka', 'Kolor ramki znajomych', '.userDivMini', 'border-color', 3, 32);
arrayEnahanceAdd('Prezenty ramka', 'Kolor ramki prezentów', '.giftProfile', 'border-color', 3, 33);
arrayEnahanceAdd('Nowy k. pole tło', 'Nowy komentarz pole tło', '#feedAdd, #feedFilter', 'background-color', 3, 34);
arrayEnahanceAdd('Nowy k. tekst tło', 'Nowy komentarz tekst tło', '#feedAddWrap, #feedAddValue', 'background-color', 3, 35);
arrayEnahanceAdd('Nowy k. tekst ramka', 'Nowy komentarz tekst ramka', '#feedAddWrap', 'border-color', 3, 36);
arrayEnahanceAdd('Nowy k. tekst', 'Nowy komentarz tekst', '#feedAddTease, #feedAddValue', 'color', 3, 37);

//arrayEnahanceAdd('Sub-nagł. tło', 'Kolor tła sub-nagłówków', '.profileSubHeader', 'background-color', 3);
//arrayEnahanceAdd('Tab.nagł. tło', 'Kolor tła nagłówka tabelki', '.tableHeader', 'background-color', 3);
//arrayEnahanceAdd('Tab.nagł. tekst', 'Kolor tekstu nagłówka tabelki', '.tableHeaderCell', 'color', 3);
//arrayEnahanceAdd('Tab.nagł. pasek', 'Kolor paska nagłówka tabelki', '.tableHeaderCell', 'border-bottom-color', 3);
//arrayEnahanceAdd('Zdj.kom. tło', 'Kolor tła zdjęć w komentarzach', '.thumb-img', 'background-color', 3);
//arrayEnahanceAdd('Zdj.kom. ramka', 'Kolor ramki zdjęć w komentarzach', '.thumb-img', 'border-color', 3);


function arrayEnahanceAdd(sLabel, sDescription, sClass, sProperty, iGroup, iID) {
    arrProfileEnhance[iProfileEnhanceCounter][0] = sLabel;           
    arrProfileEnhance[iProfileEnhanceCounter][1] = sClass;                   
    arrProfileEnhance[iProfileEnhanceCounter][2] = sProperty; 
    arrProfileEnhance[iProfileEnhanceCounter][3] = iGroup;    
    arrProfileEnhance[iProfileEnhanceCounter][4] = sDescription;  
    arrProfileEnhance[iProfileEnhanceCounter][5] = iID; 
    iProfileEnhanceCounter++;
}

function chat_EnhanceProfileLoadCurrent() {    
    if(thisProfileID!=iWSUID || iProfileEnhance==0) return;
    // load colors
    var hex = '';
        
    for (i=0; i < arrProfileEnhance.length; i++) {
        if(arrProfileEnhance[i][0]!='') {                
            var property = arrProfileEnhance[i][2];
            
            try {
                if(property=='border-color') property = 'border-left-color';                    
                var color = $(arrProfileEnhance[i][1]).css(property);
                if (color.indexOf('rgb')!=-1) hex = rgb2hex(color);
                else hex = color;
                if(hex!='transparent') {
                    $get('profileEnhance' + i).value = hex.toUpperCase();
                    if (hex.indexOf('#')==-1) hex = '#' + hex;
                    if(hex!='') $('#profileEnhancePreview' + i).css('background-Color', hex);
                    
                }
            } catch(err) { }   
        }
    }    
}

function chat_PrepareEnhanceProfile() {   
    var htmlColors = '', htmlBackgrounds = '';
    var groupID = 0;    
    
    if(iWSUID==thisProfileID) {
        if(iProfileEnhance==1) {
            activeColors = true;            
            // colors
            
            for (groupID=0; groupID < arrProfileEnhanceGroup.length; groupID++) {
                htmlColors += "<fieldset class='profileEnhanceLegend'><legend>" + arrProfileEnhanceGroup[groupID] + "</legend>";
                
                for (i=0; i < arrProfileEnhance.length; i++) {
                    if(arrProfileEnhance[i][3]==groupID) {
                        htmlColors += "<div class='profileEnhanceItem'>" +
                                        " <div class='profileEnhanceLabel' onclick=\"profileEnhanceDing(this, " + i + ");\" onmouseover=\"profileEnhanceDing(this, " + i + ");\" title='" + arrProfileEnhance[i][4] + "'>" + arrProfileEnhance[i][0] + "</div>" + 
                                        " <div class='profileEnhanceData'><input class='colorField' type='text' id='profileEnhance" + i + "' /></div>" + 
                                        " <div title='Wybierz kolor' class='enhancePreview' id='profileEnhancePreview" + i + "' onmouseover=\"$('#profileEnhanceColorPick" + i + "').show();\" onmouseout=\"$('#profileEnhanceColorPick" + i + "').hide();\">" +
                                        " <img style='display:none;' id='profileEnhanceColorPick" + i + "' src='/icons/color_pick_mini.png' /></div></div>"
                    }
                }                   
                htmlColors += "</fieldset>";                          
            }
            
            htmlColors += "<div style='height:22px;'><span style='float:left;'><a href='#' onclick='enhanceProfile_Save();'><img src='/icons/update_button_mini.png' style='border:0;' /></a></span>" + 
                    "<span style='float:right;'><img src='/Images/ajax_progress.gif' id='enhanceProfileUpdateIcon' style='display: none;' />" +
                    "     <span id='enhanceProfileUpdateInfo'></span></span></div>" + 
                    "<div class='enhanceProfileDefault'><a href='#' onclick='enhanceProfile_Reset();'>Pierwotny wygląd</a></div>" +
                    "<div class='enhanceProfileImport'><a href='#' onclick='enhanceProfile_Import();'>Importuj skórkę</a></div>" +
                    "<div class='enhanceProfileExport'><a href='#' onclick='enhanceProfile_Export();'>Eksportuj skórkę</a></div>";                              
                    
            //html = "<div id='chatLoading'>Chwilowo wyłączone...</div>";
        } else {
            htmlColors = "<div id='profileEnhanceUnavailable'>Możliwość modyfikacji kolorów na swoim profilu jest dostępna gdy posiadasz odpowiedni dodatek. <a href='/buy.aspx'>Zobacz tutaj</a></div>";            
        }
        
        // backgrounds
        if(iProfileBackground==1) {        
            // show available backgrounds            
            //htmlBackgrounds += "<fieldset class='profileEnhanceLegend'><legend>Twoje tapety</legend><div id='divWallpapers'></div></fieldset>";    
            htmlBackgrounds += "<div id='divWallpapers'></div>";    
            
            htmlBackgrounds += 
                "  <div class='wallpaperCheckbox'><input type='checkbox' id='wallpaperRepeat' " + (m_wallpaperRepeat==1?"checked":"") + " onclick='enhanceProfile_WallpaperSelect(" + currentWallpaperID + ");' /><label for='wallpaperRepeat'>Powtórz tapetę</label></div>" +
                "  <div class='wallpaperCheckbox'><input type='checkbox' id='wallpaperFixed' " + (m_wallpaperFixed==1?"checked":"") + " onclick='enhanceProfile_WallpaperSelect(" + currentWallpaperID + ");' /><label for='wallpaperFixed'>Stała tapeta</label></div>";
            
            htmlBackgrounds += "<div style='margin: 3px 0 0 0;'>" + 
                                "<div style='height:20px;'>" +                                
                                "<span style='float:left;'><a href='#' onclick='enhanceProfileWallpaper_Save();'><img src='/icons/update_button_mini.png' style='border:0;' /></a></span>" + 
                                "<span style='padding:0 0 0 3px; float:left;'><a href='#' onclick='enhanceProfile_AddNewWallpaper();'><img src='/icons/add_button_mini.png' style='border:0;' /></a></span>" +
                                "<span style='float:right;'><img src='/Images/ajax_progress.gif' id='enhanceProfileWallpaperUpdateIcon' style='display: none;' />" +
                                "     <span id='enhanceProfileWallpaperUpdateInfo'></span></span></div>" + 
                                "<div class='enhanceProfileDefault'><a href='#' onclick='enhanceProfileWallpaper_Reset();'>Wyłącz tapetę</a></div>";             
                          
        } else {
            htmlBackgrounds = "<div id='profileEnhanceUnavailable'>Możliwość modyfikacji tapety na swoim profilu jest dostępna gdy posiadasz odpowiedni dodatek. <a href='/buy.aspx'>Zobacz tutaj</a></div>";
        }
        
    } else {
        htmlColors = "<div id='profileEnhanceUnavailable'>Wejdź na <a href='" + sMyProfileURL + "'>stronę swojego profilu</a> aby zacząć modyfikację</div>";
        htmlBackgrounds = htmlColors;
    }       
    $get("profileEnhanceColors").innerHTML = htmlColors;
    $get("profileEnhanceBackgrounds").innerHTML = htmlBackgrounds;    

    // build wallpapers
    if(iWSUID==thisProfileID) {
        if(iProfileBackground==1) enhanceProfile_BuildWallpapers();
    }        
     

    if(iProfileEnhance==1) {                      
        $('.enhancePreview').click(function(){
            $(this).ColorPicker({
                onSubmit: function(hsb, hex, rgb, el) {
		            $get(el.id).style.backgroundColor = '#' + hex;
		            $(el).ColorPickerHide();		        
		            var previewID = el.id;
		            var textField = $get(previewID.replace('Preview',''));
		            textField.value = hex.toUpperCase();
		            enhanceProfile_Preview();
                },
                onBeforeShow: function () {
		            $(this).ColorPickerSetColor('#'+rgb2hex(this.style.backgroundColor));
                }
            }).ColorPickerShow();
        });
                  
        // preview when leave text field
        $('.colorField').blur(function() {enhanceProfile_Preview();});
    }
              
    // load current settings
    if(iProfileEnhance==1 || iProfileBackground==1) chat_EnhanceProfileLoadCurrent();            
}

function enhanceProfile_Import() {
    $('.profileEnhanceBorderInner').width(380);
    $('#profileEnhanceImportExport').html("<div class='importInner'>" + 
                                          " <div class='importInnerHeaderClose'><a href='#' onclick='enhanceProfile_HideImport();'>&lt;&lt;</a></div>" + 
                                          " <div class='importInnerHeader'>Importuj skórkę</div>" +
                                          " <div class='importInnerInfo'>Wklej kod skórki poniżej</div>" +
                                          " <div><textarea id='importSkinCode'></textarea></div>" +
                                          " <div style='padding: 2px 0 0 0;'><a href='#' onclick='enhanceProfile_ImportStart();'><img src='/icons/import_button_mini.png' style='border:0;' /></a></div>" +
                                          "</div>");
}

function enhanceProfile_ImportStart() {
    var code = $("#importSkinCode").val();   
    var arr = code.split(";")
    var regEx = /^([A-Fa-f0-9]{2}){3}$/;        
    
    try {
        // validate
        for (var j=0; j < arr.length; j++) {
            if(arr[j]!='' && arr[j]!=' ') {
                var hex = arr[j].split("=")[1];
                if(hex!=''){if(!regEx.test(hex)) {alert('Nastąpił błąd podczas importu. Zły kod: ' + hex); return;}}
            }
        }
        // apply
        for (var i=0; i < arrProfileEnhance.length; i++) {
            for (var j=0; j < arr.length; j++) {
                if(arr[j]!='' && arr[j]!=' ') {
                    var hex = arr[j].split("=")[1].toUpperCase();
                    if(arrProfileEnhance[i][5] == arr[j].split("=")[0]) {
                        $get('profileEnhance' + i).value = hex;
                        $('#profileEnhancePreview' + i).css('background-Color', '#' + hex);                
                    }
                }
            }
        }
        enhanceProfile_Preview();
        alert('Skórka zaimportowana. Aby zaakceptować zmiany kliknij na guzik Zapisz.');        
    } catch(err) {
        alert('Nastąpił błąd podczas importu');
    }                
}

function enhanceProfile_HideImport() {
    $('.profileEnhanceBorderInner').width(201);
    $('#profileEnhanceImportExport').html("");
}

function enhanceProfile_Export() {
    $('.profileEnhanceBorderInner').width(380);
    $('#profileEnhanceImportExport').html("<div class='importInner'>" + 
                                          " <div class='importInnerHeaderClose'><a href='#' onclick='enhanceProfile_HideImport();'>&lt;&lt;</a></div>" + 
                                          " <div class='importInnerHeader'>Eksportuj skórkę</div>" +                                          
                                          " <div class='importInnerInfo'>Kod do Twojej skórki</div>" +
                                          " <div><textarea id='exportSkinCode'></textarea></div>" +
                                          " <div style='padding: 2px 0 0 0;' id='skinClip'></div>" +
                                          "</div>");
    var sCode = '';
    
    for (var i=0; i < arrProfileEnhance.length; i++) {
        var obj = $get("profileEnhance" + i);  
        if(obj!=null) { sCode += arrProfileEnhance[i][5] + "=" + obj.value + "; ";}
    }    
    
    $("#exportSkinCode").val(sCode);    
    $("#exportSkinCode").click(function(){ this.focus();this.select(); });
  
    // copy to clipboard     
    $.clipboardReady(function(){	     
        $('<a href="javascript:void(0);">Kopiuj</a>').click(function(){ 
            $.clipboard($get('exportSkinCode').value);
            alert('Kod skopiowany do schowka'); 
        }).appendTo("#skinClip");                                                                          
    });
}

function enhanceProfile_BuildWallpapers() {
    var html = ''; totalWallpapers=0;
    for(var i = arrWallpapers.length-1; i > -1; i--) {
        if(arrWallpapers[i][0]!=0) {    
            var iClass = 'profileEnhanceWallpaperImg';
            if(arrWallpapers[i][0]==currentWallpaperID) iClass = 'profileEnhanceWallpaperImgSelected';
            
            html += "<div class='profileEnhanceWallpaper'>" +
                    "  <span style='float:left;'><img id='wallpaper" + arrWallpapers[i][0] + "' onclick='enhanceProfile_WallpaperSelect(" + arrWallpapers[i][0] + ");' " +
                    "       src='" + arrWallpapers[i][1] + "' class='" + iClass + "' /></span>";
            
            html += "<div class='profileEnhanceWallpaperAction'>" +
                    "  <a title='Usuń tapetę' href='#' onclick='enhanceProfile_WallpaperDelete(" + arrWallpapers[i][0] + ")'>usuń</a></div>";            
            
            html += "</div>";
            
            totalWallpapers++;
        }
    }
    if(totalWallpapers==0) html = "<div class='noWallpapers'>Brak tapet</div>";      
    $get('divWallpapers').innerHTML = html;
}

function enhanceProfile_WallpaperDelete(iImageID) {
    if(!confirm('Usunąć tapetę?')) return false;
        
    for(var i = 0; i < arrWallpapers.length; i++) {
        if(arrWallpapers[i][0]==iImageID) {
            arrWallpapers[i][0]=0; 
            
            // if we are deleting current wallpaper
            if(currentWallpaperID==iImageID){
                currentWallpaperID = 0;
                $('body').css('background', 'none');
            }
            
            // if we are deleting saved wallpaper
            if(savedWallpaperID==iImageID) savedWallpaperID = 0; 
            
            // delete it
            $get("enhanceProfileWallpaperUpdateIcon").style.display = 'block';
            try {
                WebServices.ChatInterface.ProfileWallpaper_Delete(iWSUID, iWSHID, iImageID, chat_ProfileWallpaperDeleteCallback, ws_ErrorTrap);  
            } catch(err) {}                
                   
            break;
        }
    }
    // rebuild
    enhanceProfile_BuildWallpapers();                         
}

function chat_ProfileWallpaperDeleteCallback(result) {
    $get("enhanceProfileWallpaperUpdateIcon").style.display = 'none';
    $get("enhanceProfileWallpaperUpdateInfo").innerHTML = 'Usunięte';
    setTimeout(function() { $get("enhanceProfileWallpaperUpdateInfo").innerHTML=''; }, 2000);
}

function enhanceProfile_WallpaperSelect(iImageID) {
    var iRepeat = $("#wallpaperRepeat").is(':checked');
    var iFixed = $("#wallpaperFixed").is(':checked');
    
    for(var i = 0; i < arrWallpapers.length; i++) {
        if(arrWallpapers[i][0]!=0) {
            if(arrWallpapers[i][0]==iImageID){
                $('body').css('background', 'url(' + arrWallpapers[i][2] + ') ' + (iRepeat?'':'no-repeat') + ' ' + (iFixed?'fixed':''));
                if(m_backgroundColor!='') $('body').css('background-color', m_backgroundColor);
                $get('wallpaper'+arrWallpapers[i][0]).className = 'profileEnhanceWallpaperImgSelected';
                currentWallpaperID = arrWallpapers[i][0];
            }else{
                $get('wallpaper'+arrWallpapers[i][0]).className = 'profileEnhanceWallpaperImg';
            }
        }
    }
}

function enhanceProfile_AddNewWallpaper() {
    if(totalWallpapers>=maxWallpapers) {
        alert('Nie możesz dodać więcej tapet, limit jest ' +  maxWallpapers + '.');
    } else {
        jQuery.facebox.url('/EditImage.aspx?type=10',200,400);
    }
}

function chat_profileEnhanceWallpaperAdded(imageID, thumbPath, fullPath) {
    arrWallpapers[totalWallpapers][0]=imageID;
    arrWallpapers[totalWallpapers][1]=thumbPath;
    arrWallpapers[totalWallpapers][2]=fullPath;
    // rebuild them
    enhanceProfile_BuildWallpapers();
}

function enhanceProfile_Save() {        
    // validate and build custom style
    var arrStyle = new Array(arrProfileEnhance.length);
    for (i=0; i < arrStyle.length; i++) {arrStyle[i] = new Array(2); arrStyle[i][0]='';arrStyle[i][1]='';}    
    var regEx = /^([A-Fa-f0-9]{2}){3}$/; 
    var profileBgColor = '';
    
    for (var i=0; i < arrProfileEnhance.length; i++) {
        var obj = $get("profileEnhance" + i);  
        if(obj!=null) {
            if(obj.value!='') {
                if(!regEx.test(obj.value)){
                    alert('Zły kod koloru (' + obj.value + ') - użyj palety aby znaleźć kod');
                    obj.focus();
                    return false;
                } else {
                    var found = false;
                    if(arrProfileEnhance[i][3]==0 && arrProfileEnhance[i][5]==1) {
                        profileBgColor = '#' + obj.value;
                    } else {
                        for (var j=0; j < arrStyle.length; j++) {                    
                            if(arrStyle[j][0]=='')break;
                            if(arrStyle[j][0]==arrProfileEnhance[i][1]) {
                                arrStyle[j][1]+=arrProfileEnhance[i][2]+':#'+obj.value+';'; 
                                found = true;     
                                break;              
                            }                     
                        }     
                        if(!found) {
                            arrStyle[j][0]=arrProfileEnhance[i][1];
                            arrStyle[j][1]=arrProfileEnhance[i][2]+':#'+obj.value+';';                
                        }  
                    }                                 
                }
            }
        }
    }
    $get("enhanceProfileUpdateIcon").style.display = 'block';
    
    // build it
    var customStyle = '';
    for (var j=0; j < arrStyle.length; j++) {
        if(arrStyle[j][0]!='') customStyle += arrStyle[j][0] + '{' + arrStyle[j][1] + '}';            
    }   
    // update database    
    try {
        WebServices.ChatInterface.ProfileStyles_Update(iWSUID, iWSHID, customStyle, profileBgColor, chat_ProfileStylesUpdateCallback, ws_ErrorTrap);    
    } catch(err) {}          
}

function enhanceProfileWallpaper_Save() {
    $get("enhanceProfileWallpaperUpdateIcon").style.display = 'block';
    var iRepeat = $("#wallpaperRepeat").is(':checked');
    var iFixed = $("#wallpaperFixed").is(':checked');
    try {
        WebServices.ChatInterface.ProfileWallpaper_Update(iWSUID, iWSHID, currentWallpaperID, iRepeat, iFixed, chat_ProfileWallpaperUpdateCallback, ws_ErrorTrap);    
    } catch(err) {}   
}

function enhanceProfileWallpaper_Reset() {
    currentWallpaperID = 0;
    $('body').css('background', 'none');
    enhanceProfile_BuildWallpapers();
    enhanceProfileWallpaper_Save();
}

function enhanceProfile_Reset() { 
    if(confirm('Na pewno przywrócić pierwotny wygląd profilu? Stracisz wszystkie swoje zmiany.')) {
        $get("enhanceProfileUpdateIcon").style.display = 'block';
        try {
            WebServices.ChatInterface.ProfileStyles_Update(iWSUID, iWSHID, '', '', chat_ProfileStylesResetCallback, ws_ErrorTrap);    
        } catch(err) {}            
    }
}

function chat_ProfileWallpaperUpdateCallback(result) {
    savedWallpaperID = currentWallpaperID;
    $get("enhanceProfileWallpaperUpdateIcon").style.display = 'none';
    $get("enhanceProfileWallpaperUpdateInfo").innerHTML = 'Zapisane';
    setTimeout(function() { $get("enhanceProfileWallpaperUpdateInfo").innerHTML=''; }, 2000);
}

function chat_ProfileStylesResetCallback(result) {
    $get("enhanceProfileUpdateIcon").style.display = 'none';
    window.location.reload(true);
}

function chat_ProfileStylesUpdateCallback(result) {
    $get("enhanceProfileUpdateIcon").style.display = 'none';
    $get("enhanceProfileUpdateInfo").innerHTML = 'Zapisane';
    setTimeout(function() { $get("enhanceProfileUpdateInfo").innerHTML=''; }, 2000);
}

function profileEnhanceDing(obj, index) {
    var property = arrProfileEnhance[index][2];
    if(property=='border-color') property = 'border-left-color';                    
    var hex = rgb2hex($(arrProfileEnhance[index][1]).css(property));    
    $(obj).effect("highlight", {color:'#ABBD09'}, 500);
    $(arrProfileEnhance[index][1]).effect("highlight", {color:'#ABBD09'}, 500);
}

function enhanceProfile_Preview() {   
    for (i=0; i < arrProfileEnhance.length; i++) {
        if(arrProfileEnhance[i][0]!='') {            
            var color = '#' + $get("profileEnhance" + i).value;
            if(arrProfileEnhance[i][3]==0 && arrProfileEnhance[i][5]==1) m_backgroundColor = color;
            $get("profileEnhancePreview" + i).style.backgroundColor = color;
            $(arrProfileEnhance[i][1]).css(arrProfileEnhance[i][2],color);
        }
    }
}

function chat_PrepareSettings(){
    var online, status, sound = '';

    online = "<fieldset class='chatSetting'><legend>Status:</legend>" + 
             "<select onchange='chat_OnLineSettingPreview(this.value);' id='onlineStatus' class='chatSettingObject'>" +              
             "<option value='3' " + ((iOnLinePrivacy==3)?'selected':'') + ">" + chat_getStatus(3) + "</option>" + 
             "<option value='2' " + ((iOnLinePrivacy==2)?'selected':'') + ">" + chat_getStatus(2) + "</option>" + 
             "<option value='1' " + ((iOnLinePrivacy==1)?'selected':'') + ">" + chat_getStatus(1) + "</option>" + 
             "<option value='4' " + ((iOnLinePrivacy==4)?'selected':'') + ">" + chat_getStatus(4) + "</option>" +              
             "<option value='0' " + ((iOnLinePrivacy==0)?'selected':'') + ">" + chat_getStatus(0) + "</option>" +              
             "</select><div style='padding: 5px 0 0 2px; display:inline;'><img id='testIndicator' src='/Icons/chat_none.png'/></div>" + 
             "</fieldset>";
                          
    status = "<fieldset class='chatSetting'><legend>Opis:</legend>" + 
             "<div style='float:left;padding: 4px 0 0 0;'><input class='personalStatusBox' type='text' maxlength='500' id='personalStatus' value=\"" + sPersonalDescription + "\" ></div>" + 
             "<div style='float:left;font-size:9px;padding:0 0 0 2px; vertical-align:top;font-size:9px;text-align:center;'>edit<br/><input style='margin:0px;border:0px;' title='zaznacz tutaj gdy edytujesz istniejący opis, odznacz gdy dodajesz nowy' type='checkbox' id='personalStatusEdit' value='1' /></div>" +
             "</fieldset>";

    sound = "<fieldset class='chatSetting'>" + 
            "<div class='chatSettingBox'><input type='checkbox' id='chatSoundNewMessage' value=\"1\" class='chatSettingObject' " + (m_chatSoundMessage==1?"checked":"") + "> Dźwięk / nowa wiadomość</div>" +
            "<div class='chatSettingBox'><input type='checkbox' id='chatShowFullNames' value=\"1\" class='chatSettingObject' " + (m_chatShowFullNames==1?"checked":"") + " onclick='chat_ShowFullNamesPreview(this.checked);'> Pełne nazwiska na pasku</div>" +
            "</fieldset>";
    
    $get("settingsOnline").innerHTML = online;
    $get("settingsStatus").innerHTML = status;
    $get("settingsSound").innerHTML = sound;
    $get("settingsButtons").innerHTML = "<div style='float: left;'><a href='#' onclick='chat_UpdateSettings();'><img src='/icons/update_button_mini.png' style='border:0;' /></a></div>" +
                                        "<div style='float: right; padding-top: 2px;'><img src='/Images/ajax_progress.gif' id='settingsUpdateIcon' style='display: none;' /></div>" + 
                                        "<div style='float: right;' id='settingsInfo'></div>";   
                                                                                                                     
   chat_SetIndicator("onlineIndicator", iOnLinePrivacy);
   chat_SetIndicator("testIndicator", iOnLinePrivacy);

}        
function chat_UpdateSettings() {
    $get("settingsUpdateIcon").style.display = 'block';
    
    
    
    var newOnLine = $get("onlineStatus").value;
    var newStatus = $get("personalStatus").value;
    var edit = $get("personalStatusEdit").checked;

    m_chatSoundMessage = ($get("chatSoundNewMessage").checked?1:0);
    m_chatShowFullNames = ($get("chatShowFullNames").checked?1:0);    
    
    iOnLinePrivacy = parseInt(newOnLine);
    sPersonalDescription = newStatus;
    
    try {
        WebServices.ChatInterface.Settings_Update(iWSUID, iWSHID, newOnLine, newStatus, m_chatSoundMessage, edit, m_chatShowFullNames, chat_UpdateSettingsCallback, ws_ErrorTrap);    
    } catch(err) { }      
}
function chat_ShowFullNamesPreview(bVal) {
    for (var i = 0; i < chatCounter; i++) { 
        $("#chatButtonName" + arrChatSessions[i][0]).html(arrChatSessions[i][5] + " " + (bVal?arrChatSessions[i][6]:arrChatSessions[i][6].substring(0,1)));        
    }    
    chat_PositionChatWindows();
}
function chat_OnLineSettingPreview(intValue) {
    chat_SetIndicator("testIndicator", intValue);
}
function chat_SetIndicator(indicatorID, intValue) {
    $get(indicatorID).src = chat_getStatusImage(intValue); ;    
}
function chat_getStatusImage(intStatus) {
    switch(parseInt(intStatus)) {
        case 0: return '/Icons/chat_offline.png';
        case 1: return '/Icons/chat_brb.png'; 
        case 2: return '/Icons/chat_busy.png'; 
        case 3: return '/Icons/chat_online.png';             
        case 4: return '/Icons/chat_talk.png';     
    }  
}
function chat_getStatus(intStatus) {
    switch(parseInt(intStatus)) {
        case 0: return 'Niewidoczny';
        case 1: return 'Zaraz wracam'; 
        case 2: return 'Nie przeszkadzać'; 
        case 3: return 'Dostępny';             
        case 4: return 'Chcę pogadać';   
    }  
}
function chat_UpdateSettingsCallback(result) {
    chat_SetIndicator("onlineIndicator", iOnLinePrivacy);
    $get("settingsUpdateIcon").style.display = 'none';
    $get("settingsInfo").innerHTML = 'Zapisane';
    setTimeout(chat_ClearSettingsInfo, 2000);
    
    if (typeof updatePersonalDescription=="function") updatePersonalDescription(sPersonalDescription);       
}
function chat_ClearSettingsInfo() {
    $get("settingsInfo").innerHTML = '';
}
function chat_showFriendsActions(iUserID) { 
    var obj = $get("friendActions" + iUserID).style.display = 'block';
    var obj = $get("friendRow" + iUserID).className = 'footerFriendsOnlineFriendOver';      
}
function chat_hideFriendsActions(iUserID) { 
    $get("friendActions" + iUserID).style.display = 'none';
    $get("friendRow" + iUserID).className = 'footerFriendsOnlineFriend';
}
function chat_GetOnLineUsers() {    
    try {
        $.ajax({
            type: "POST",
            url: "/WebServices/Chat.asmx/OnLineUsers_Get",
            data: "{intOwnerID:'"+iWSUID+"',strHash:'"+iWSHID+"'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(response) {
                var oUsers = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
                var friends = '';
                var listenerUpgrade = false;
                
                if(iCountOnlineFriends==0 && oUsers.length>0) listenerUpgrade = true;
                iCountOnlineFriends = oUsers.length;
                if(oUsers.length==0) {
                    $get("friendsDiv").innerHTML = "<div id='chatLoading'>(Brak znajomych online)</div>";
                    $get("onlineFriendCount").innerHTML = 0;
                } else {
                    if(listenerUpgrade) { clearTimeout(timerChatMessages); chat_Listen();}                    
                    for (var i = 0; i < oUsers.length; i++) {                     
                        var user = oUsers[i];                 
                        var rowClass = 'footerFriendsOnlineFriend';                        
  
                        friends += "<div id='friendRow" + user.id + "' class='" + rowClass + "' onmouseover='chat_showFriendsActions(" + user.id + ");' onmouseout='chat_hideFriendsActions(" + user.id + ");'>" +
                                      "<div id='friendName'><table cellpadding='0' cellspacing='0' style='width:100%;'><tr>" +
                                      "  <td style='width:22px;'>";
                                      
                        if(user.away==1) {
                            friends += "<img src='/Icons/chat_away.png' title='Zaraz wracam'>";
                        } else {
                            friends += "<img src='" + chat_getStatusImage(user.status) + "' title='" + chat_getStatus(user.status) + "'>";
                        }                                      
                                      
                        friends += "</td>" +
                                   "  <td><div class='friendNameDiv'><a class='friendLink' " + ((user.away==1)?"style='color:gray;'":"") + " title='Otwórz okienko czatu' href='javascript:chat_StartSession(" + user.id + ");'>" + user.name + "</a></div></td>" +
                                   "  <div class='friendActions' id='friendActions" + user.id + "'><a title='Zobacz profil' href='/profile.aspx?id=" + user.id + "'><img src='/Icons/profile_small.gif' class='icon' border='0'/></a>" + 
                                   "<a title='Wyślij wiadomość' href=javascript:jQuery.facebox.url('/SendMessage.aspx?a=" + user.hash + "',300,500);><img style='vertical-align:top;' class='icon' src='/Icons/message_small.png' border='0'/></a></div></td></tr></table></div>";
                                   
                        var comments = '(' + user.comments + ')';                        
                        if(user.comments==0) comments = '&nbsp;';
                        var link = "javascript:popup('/UserNowComments.aspx?nowID=" + user.nowid + "','newcomments',700,600,1,1,false);";
                                   
                        if(user.desc!='') friends+= "<div class='friendDescriptionWrap'><span class='friendDescriptionComments' title='komentarze do opisu'><a href=\"" + link + "\">" + comments + "</a></span>" +
                                                    "<span class='friendDescription'><a href=\"" + link + "\" title=\"" + user.desc + "\">" + user.desc + "</a></span></div>";
                        friends += "</div>";
                        chat_UpdateChatHeader(user.id, user.name, user.desc);
                    }
                    $get("friendsDiv").innerHTML = friends;            
                    $get("onlineFriendCount").innerHTML = i;
                }  
            },
            complete: function() { setTimeout(chat_GetOnLineUsers, (iCountFriends==0)?60000:5000); }
        });                
                
    } catch(err) {
        $get("friendsDiv").innerHTML = "<div id='chatLoading'>Error</div>";
    }        
}

function chat_UpdateChatHeader(iUserID, sFullName, sDescription) {
    for (var i = 0; i < chatCounter; i++) { 
        if(arrChatSessions[i][2]==iUserID) {                                      
            $get("chatFullName" + (i+1)).innerHTML = sFullName;
            $get("chatDescription" + (i+1)).innerHTML = sDescription;
         }
     }
}

function chat_StartSession(iUserID) {
    $.ajax({
        type: "POST",
        url: "/WebServices/Chat.asmx/Start",
        data: "{intOwnerID:'"+iWSUID+"',strHash:'"+iWSHID+"',intUserID:'"+iUserID+"'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            var chat = data[0];        
            var messages = data[1];
            var chatMessages = '';
            
            if(messages.length>0) chatMessages = chat_BuildMessages(messages);
            
            // see if we already have one, if so open it
            for (var i = 0; i < chatCounter; i++){ 
                if(arrChatSessions[i][0]==chat.id){chat_DisplayChat(chat.id); return true;}
            }
            
            // we haven't found one, create a new one
            chatCounter++;  
            chat_BuildWindow(i+1, chat.id, chat.userid, chat.thumb, chat.firstname, chat.lastname, chat.desc, chatMessages, 0);       
            chat_DisplayChat(chat.id);      
            
            $get('chatEnter' + currentWindowID).focus();

        },
        complete: function() { }
    });        
    
}

function chat_PrepareSessions() {
    // get initial chat sessions      
    try {
        $.ajax({
            type: "POST",
            url: "/WebServices/Chat.asmx/CurrentSessions_Get",
            data: "{intOwnerID:'"+iWSUID+"',strHash:'"+iWSHID+"'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(response) {
                var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
                var sessions = data[1];
                                
                chatLastChecked = data[0].lastchecked;
                chatCounter = sessions.length;
                arrChatSessions = new Array(6);
                for (var i=0; i < 50; i++) arrChatSessions[i] = new Array(6);
                
                for (var i = 0; i < sessions.length; i++) { 
                    var chat = sessions[i][0];
                    var messages = sessions[i][1];                    
                    var chatMax = 0;
                    var chatMessages = '';                         
                    // build messages & chat window
                    if(messages.length>0) chatMessages = chat_BuildMessages(messages);                    
                    chat_BuildWindow(i+1, chat.id, chat.userid, chat.thumb, chat.firstname, chat.lastname, chat.desc, chatMessages, chat.newmsgs);                   
                    if(chat.maximized) chat_DisplayChat(chat.id);
                }
                chatWindowsLoaded = 1;
                chat_PositionChatWindows();
                chat_Listen();
                chat_HighlightNew();
                sessionsInitialized = true;
            },
            complete: function() { }
        });         
        
        
        
    } catch(err) {
        $get("friendsDiv").innerHTML = "<div id='chatLoading'>Error</div>";
    }     
}

function chat_BuildMessages(messages) {
    var chatMessages = '';    
    for (var j = 0; j < messages.length; j++) { 
        var message = messages[j];                
        var chatUserClass = 'chatUser'; if(message.userid==iWSUID) chatUserClass = 'chatUserSelf';        
        chatMessages += "<div class='chatMessage'>" + 
                        "  <div class='chatMessageHeader'><div class='" + chatUserClass + "'>" + message.name + "</div><div class='chatDate'>" + message.datestamp + "</div></div>" +
                        "  <div class='chatBody'>" + message.message + "</div>" + 
                        "</div>"
    }
    return chatMessages;
}

function chat_BuildWindow(iWindowID, chatID, chatUserID, chatThumb, chatFirstName, chatLastName, chatDescription, chatMessages, chatNewMessages) { 
    var strChat = "<div class='footerSeparator'></div>" + 
                  "<div onClick='chat_ButtonClick(" + chatID + ");' class='chatButton' id='chatButton" + iWindowID + "'>" + 
                  "  <div class='chatName' id='chatButtonName" + chatID + "'>" + chatFirstName + " " + (m_chatShowFullNames?chatLastName:chatLastName.substring(0,1)) + "</div>" + 
                  "  <div class='chatClose' title='Zamknij' onClick='chat_Close(" + chatID + ");'><img src='/Icons/close_chat_button.png'/></div>" +
                  "</div>" + 
                  "<div class='chatWindowBorder' id='chatWindow" + iWindowID + "'><div class='chatWindow'><div class='chatBorderInner'>" + 
                  "  <div class='chatHeaderWrap'><div class='chatHeader' title='Zmniejsz' onClick='chat_ButtonClick(" + chatID + ");'>" + 
                  "    <div class='chatHeaderImage'><a onMouseOver='m_overChatAvatar=true;' onMouseOut='m_overChatAvatar=false;' href='/profile.aspx?id=" + chatUserID + "' title='Zobacz profil'><img class='chatThumb' src='/ShowThumb.aspx?image=" + chatThumb + "&type=mini' border='0'/></a></div>" + 
                  "    <div class='chatHeaderName'><a id='chatFullName" + iWindowID + "' onMouseOver='m_overChatAvatar=true;' onMouseOut='m_overChatAvatar=false;' href='/profile.aspx?id=" + chatUserID + "' title='Zobacz profil'>" + chatFirstName + " " + chatLastName + "</a></div>" +                   
                  "    <div class='chatHeaderDesc' id='chatDescription" + iWindowID + "'>" + chatDescription + "</div>" +
                  "    <div class='chatActions'>" + 
                  "      <div class='chatActionMin'><img class='chatAction'alt='Zmniejsz' src='/Icons/minimize_light.gif' border='0' /></div>" + 
                  "      <div class='chatActionClose' onClick='chat_Close(" + chatID + ");'><img title='Zamknij' alt='Zamknij' src='/Icons/close_light.gif'/></div>" +                      
                  "    </div>" +
                  "    <div class='chatHistory'><a title='Wyczyść historię rozmów' onMouseOver='overLink=true;' onMouseOut='overLink=false;' class='chatHistory' href='javascript:chat_ClearHistory(" + chatID + "," + iWindowID + ");'>czyść</a></div>" +
                  "  </div></div>" + 
                  "  <div class='chatInner'>" + 
                  "    <div class='chatMessages' id='chatMessages" + iWindowID + "'>" + chatMessages + "</div>" + 
                  "    <div class='chatEnter'><table cellpadding='0' cellspacing='0'><tr><td><input onkeypress='return chat_OnEnter(event, this, " + iWindowID + "," + chatID + "," +  chatUserID + ");' type='text' id='chatEnter" + iWindowID + "' class='chatEnterBox'/></td>" + 
                  "                           <td><img onclick='chat_SendMessage(" + iWindowID + ", " + chatID + "," +  chatUserID + ");' src='/Images/mini_ok.png' title='Wyślij wiadomość' style='cursor:pointer; margin: 0 0 0 2px;'></td>" +                  
                  "                           <td><img onclick=\"smiley_SetCB('chatEnter" + iWindowID + "'); smiley_showSmileys(event);\" class='chatSmiley' src='/Icons/smileys/button_mini.png' title='Pokaż emotki'></td>" +                  
                  "                         </tr></table></div>" +
                  "  </div>" + 
                  "</div></div></div>";
           
        $get("chatSessions").innerHTML += strChat;
        
        arrChatSessions[iWindowID-1][0] = chatID;
        arrChatSessions[iWindowID-1][1] = 0;
        arrChatSessions[iWindowID-1][2] = chatUserID;
        arrChatSessions[iWindowID-1][3] = chatFirstName + " " + chatLastName;  
        arrChatSessions[iWindowID-1][4] = chatNewMessages;        
        arrChatSessions[iWindowID-1][5] = chatFirstName;  
        arrChatSessions[iWindowID-1][6] = chatLastName;          
        //arrChatSessions[iWindowID-1][5] = 0;
}

function chat_OnEnter(e, obj, iWindowID, iChatID, iUserID) {
    if(!e) e=window.event;
    key = e.keyCode ? e.keyCode : e.Which;
    if(key==13) {
        chat_SendMessage(iWindowID, iChatID, iUserID)
        e.cancelBubble = true;
        e.returnValue = false;            
        return false;        
    }
    return true;
}

function chat_SendMessage(iWindowID, iChatID, iUserID) {
    var obj = $get('chatEnter' + iWindowID);
    var message = obj.value;
    
    if(message!='') {
        WebServices.ChatInterface.Chat_SendMessage(iChatID, iWSUID, iWSHID, iUserID, message, chat_SendMessageCallback, ws_ErrorTrap);  
        chat_AddMyMessage(iChatID, message);
        obj.value = "";
    }    
}

function chat_SendMessageCallback(result){}

function chat_locateChat(iChatID) { 
    for (var i = 0; i < chatCounter; i++) { 
        if(arrChatSessions[i][0]==iChatID)return arrChatSessions[i];
    }
}

function chat_AddMessage(iChatID, iUserID, sFullName, sDateStamp, sMessage) { 
    var names = sFullName.split(" ");
    
    for (var i = 0; i < chatCounter; i++) { 
        if(arrChatSessions[i][0]==iChatID) {             
            var chatUserClass = 'chatUser';
            var chatFirstName = names[0];
            if(iUserID==iWSUID) {chatUserClass = 'chatUserSelf'; chatFirstName = sFIRSTNAME;}
            
            chatMessage = "<div class='chatMessage'>" + 
                          "  <div class='chatMessageHeader'><div class='" + chatUserClass + "'>" + chatFirstName + "</div><div class='chatDate'>" + sDateStamp + "</div></div>" +
                          "  <div class='chatBody'>" + sMessage + "</div>" + 
                          "</div>"                          
            var objMessages = $get("chatMessages" + (i+1));
            
            objMessages.innerHTML += chatMessage;                      
            objMessages.scrollTop = objMessages.scrollHeight;
         }
     }
}

function chat_AddMyMessage(iChatID, sMessage) { 
    for (var i = 0; i < chatCounter; i++) { 
        if(arrChatSessions[i][0]==iChatID) {                                   
            var objMessages = $get("chatMessages" + (i+1));
            chatMessage = "<div class='chatMessage'>" + 
                          "  <div class='chatMessageHeader'><div class='chatUserSelf'>" + sFIRSTNAME + "</div><div class='chatDate'>" + m_sServerTime + "</div></div>" +
                          "  <div class='chatBody'>" + chat_PrepMessage(sMessage) + "</div>" + 
                          "</div>"                
            
            objMessages.innerHTML += chatMessage;                      
            objMessages.scrollTop = objMessages.scrollHeight;
         }
     }
}

function chat_PrepMessage(sMessage) {
    var pat = /((http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&amp;:/~\+#]*[\w\-\@?^=%&amp;/~\+#])?)/g;
    sMessage = sMessage.replace(pat, "<a class='externalLink' target='_blank' href='$1'>$1</a>");
    for(var i = m_smileys.length - 1; i > -1 ; i--) {
        sMessage = sMessage.replace(m_smileys[i].t, "<img src='/Icons/smileys/" + m_smileys[i].i + "' class='smileyButton'/>");
    }   
    return sMessage;
}

function chat_PositionChatWindows() {
    var X, Y;
    var visibleChatID = getCookie('chat_visible');
    if(visibleChatID!='')chat_PositionChatWindow(visibleChatID);             
}

function chat_PositionChatWindow(iChatID) {
    for (var i = 0; i < chatCounter; i++) { 
        if(arrChatSessions[i][0]==iChatID) { 
            var objButton = $get('chatButton' + (i+1));
            var objWindow = $get('chatWindow' + (i+1));
            var arr = getElementPos(objButton);                        
            X = arr[0]; Y = arr[1];            
            var buttonWidth = objButton.offsetWidth;
            var windowWidth = objWindow.offsetWidth;
            var offset = 206 - buttonWidth;
            
            objWindow.style.top = (Y - 304) + 'px';
            objWindow.style.left = (X - offset) + 'px';                
        }
    }      
}

function chat_ButtonClick(iChatID) { 
    if(overLink || m_overChatAvatar) return;
    for (var i = 0; i < chatCounter; i++) { 
        if(arrChatSessions[i][0]==iChatID){
            if(arrChatSessions[i][1]==0) chat_DisplayChat(iChatID);   
            else chat_HideChat(iChatID);      
        }
    }
}

function chat_DisplayChat(iChatID) { 
    for (var i = 0; i < chatCounter; i++) { 
        var objButton = $get('chatButton' + (i+1));
        var objWindow = $get('chatWindow' + (i+1));

        if(arrChatSessions[i][0]==iChatID){
            chat_PositionChatWindow(iChatID);
            arrChatSessions[i][1] = 1;
            arrChatSessions[i][4] = 0;
            window.status = '';       
            document.title = m_PageTitle;
            
            objButton.style.background = 'url(/Images/CSS/chat_button_bg_open.png)'; 
            objButton.style.color = '#000000';                       
            
            if(sessionsInitialized)
                oShow(objWindow);
            else
                objWindow.style.display = 'block';
            
            setCookie('chat_visible',iChatID,365);
            
            currentWindowID = i+1;
            currentChatID = iChatID;
            setTimeout(chat_ScrollDown, 100);
            
            $get('chatEnter' + currentWindowID).focus();
        }else{
            if(arrChatSessions[i][1]==1) {
                arrChatSessions[i][1] = 0;
                objWindow.style.display = 'none';  
                objButton.style.background = '';
                objButton.style.color = '';                   
            }
        }        
        // mark it as maximized
        WebServices.ChatInterface.Chat_Maximize(iChatID, chat_DummyCallback, ws_ErrorTrap); 
    }
}
function chat_ScrollDown() {
    var objMessages = $get("chatMessages" + currentWindowID);
    objMessages.scrollTop = objMessages.scrollHeight;
}

function chat_HideChat(iChatID) { 
    for (var i = 0; i < chatCounter; i++) { 
        if(arrChatSessions[i][0]==iChatID){
            var objButton = $get('chatButton' + (i+1));
            var objWindow = $get('chatWindow' + (i+1));
            arrChatSessions[i][1] = 0;            
            oHide(objWindow);
            objButton.style.background = '';
            objButton.style.color = '';                     
            setCookie('chat_visible','',365);
            currentChatID = 0;
        }
    }
    
    // mark it as minimized
    WebServices.ChatInterface.Chat_Minimize(iChatID, chat_DummyCallback, ws_ErrorTrap); 
}
function chat_Close(iChatID) { 
    WebServices.ChatInterface.Chat_Close(iChatID, chat_DummyCallback, ws_ErrorTrap); 
    for (var i = 0; i < chatCounter; i++) { 
        if(arrChatSessions[i][0]==iChatID){
            var objButton = $get('chatButton' + (i+1));
            var objWindow = $get('chatWindow' + (i+1));
            if(arrChatSessions[i][1]==1)setCookie('chat_visible','',365);
            arrChatSessions[i][0] = 0;
            arrChatSessions[i][1] = 0;
            oHide(objWindow);
            objButton.style.display = 'none';            
        }
    }    
    chat_PositionChatWindows(); 
}
function chat_ClearHistory(iChatID, iWindowID) { 
    WebServices.ChatInterface.Chat_ClearHistory(iChatID, chat_DummyCallback, ws_ErrorTrap);     
    $get("chatMessages" + iWindowID).innerHTML = '';
}

function chat_DummyCallback(result){}

function chat_Listen() {
    try {
        $.ajax({
            type: "POST",
            url: "/WebServices/Chat.asmx/NewMessages_Get",
            data: "{intOwnerID:'"+iWSUID+"',strHash:'"+iWSHID+"',lastChecked:'"+chatLastChecked+"'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(response) {
                var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
                var sessions = data[1];
                var found = false;
                var windowID = 0;
                                
                chatLastChecked = data[0].lastchecked;
                //alert('chatLastChecked:' + chatLastChecked);
                
                for (var i = 0; i < sessions.length; i++) { 
                    found = false;
                    var chat = sessions[i][0];
                    var messages = sessions[i][1];                      
                    var chatMessages = '';
                    
                    // build messages
                    if(messages.length>0) {
                        chatMessages = chat_BuildMessages(messages);
                    }
                            
                    // see if we already have one, if so open it
                    for (var i = 0; i < chatCounter; i++) { 
                        if(arrChatSessions[i][0]==chat.id) {
                            var objMessages = $get("chatMessages" + (i+1));                
                            objMessages.innerHTML += chatMessages;                      
                            objMessages.scrollTop = objMessages.scrollHeight;  
                            if(currentChatID!=arrChatSessions[i][0])arrChatSessions[i][4]=1;     
                            windowID = i+1;     
                            found = true;
                        }
                    }

                    // create a new chat window  
                    if(!found) {
                        chatCounter++;
                        windowID = chatCounter;
                        chat_BuildWindow(windowID, chat.id, chat.userid, chat.thumb, chat.firstname, chat.lastname, chat.desc, chatMessages, chat.newmsgs);
                        arrChatSessions[windowID-1][4]=1; 
                    }
                    
                    // maximize the chat window if none are open and if we just created it
                    if(currentChatID==0) {
                        if(!found) { 
                            chat_DisplayChat(chat.id);
                        } else {
                            // mark the chat button to show we have new messages
                            arrChatSessions[windowID-1][4] = 1;
                        }
                    } else {
                        chat_PositionChatWindows();
                    }    
                }                
                timerChatMessages = setTimeout(chat_Listen, (iCountOnlineFriends==0)?60000:2000);        
            },
            complete: function() { }
        });                        
         
    } catch(err) {
        $get("friendsDiv").innerHTML = "<div id='chatLoading'>Error</div>";
    }      
}

var blinkCounter = 0;

function chat_HighlightNew() {
    var newMessage = 0;
    for (var i = 0; i < chatCounter; i++) { 
        if(arrChatSessions[i][4]==1 && arrChatSessions[i][0]!=0) { 
            var objButton = $get('chatButton' + (i+1));
            if(chatHighlighted) {
                objButton.style.background = 'url(/Images/CSS/chat_button_bg.png)';
            }else{
                objButton.style.background = 'url(/Images/CSS/chat_button_bg_new.png)';
            }
            newMessage++;
        }
    }
    if(newMessage) {
        if(chatHighlighted) {
            window.status = '';       
            document.title = m_PageTitle;
        } else {      
            blinkCounter++;
            window.status = 'Nowa wiadomość (' + newMessage + ')';
            document.title = window.status;
            chat_Beep(8);
        }
    }
    chatHighlighted = !chatHighlighted;
    setTimeout(chat_HighlightNew, 1000);
}
   
function chat_Beep(iType) {
    if(m_chatSoundMessage==1)$get("beep").play(iType);
}
function oShow(obj) {$(obj).fadeIn(400);}
function oHide(obj) {$(obj).fadeOut(400);}

// JScript File

//0 - room id, 1 - tab id, 2 - room name, 3 - tab index, 4 - current selected, 5 - new messages, 6 - banned, 7 - loaded, 8 - last message id   
    
// soon to be moved out
var _gRoomID = 0;
var _gRoomName = '';
var _gRoomCounter = 0;
var _gNewIndex = 0;
var _gMaxRooms = 8;
var _gRoomAllUsers = new Array();
var _gRoomsBlink = false;
var _gRoomsDialogOpen = false;
var _gRoomsDialogOver = false;
var _gScrollDivHeight = 0;
var _gWindowFocused = false
var _gRoomsHighlighted = false;
var _gNewMessage = false;
var _gShoutboxID = 0;
var _gShoutboxLastID = 0;

// prepare room array
var _gArrRoomSessions; _gArrRoomSessions = new Array(8);
for (var i=0; i < 10; i++) {
    _gArrRoomSessions[i] = new Array(8);
    _gArrRoomSessions[i][0] = 0;
    _gArrRoomSessions[i][4] = 0;
    _gArrRoomSessions[i][5] = 0;
    _gArrRoomSessions[i][6] = 0;
    _gArrRoomSessions[i][7] = 0;
    _gArrRoomSessions[i][8] = 0;
}

function doOpenChat(iRoomID, sRoomName) {
    _gRoomID = iRoomID;
    _gRoomName = sRoomName;
    if (!chatRoomsWindow || chatRoomsWindow.closed) {
        if (iWSUID == 0) {
            alert('Aby użyć tej funkcji musisz się najpierw zalogować.');
        } else {
            chatRoomsWindow = popup('/ChatRooms.aspx', 'chatRooms', 900, 600, 1, 0);
            setTimeout(attemptOpenTab, 2000);
        }
    } else {
        chatRoomsWindow.focus();
        chatRoomsWindow.openRoom(iRoomID, sRoomName);
    }
}

function attemptOpenTab() {
    try {
        if (chatRoomsWindow && chatRoomsWindow.windowLoaded()) {
            chatRoomsWindow.openRoom(_gRoomID, _gRoomName);
        } else {
            setTimeout(attemptOpenTab, 2000);
        }
    } catch (err) {
        setTimeout(attemptOpenTab, 500);
    }
}  

function rooms_RefreshStats() {
    try {
        $.ajax({
            type: "POST",
            url: "/WebServices/ChatRoom.asmx/ChatRooms_StatsGet",
            data: "{intUserID:'" + iWSUID + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(response) {
                var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
                for (var i = 0; i < data.length; i++) {
                    var stat = data[i]
                    var oCounter = $get("room" + stat.id);
                    if (oCounter) {
                        if (stat.value == 0) oCounter.innerHTML = "<span class='chatUserCounterZero'>(0)</span>";
                        else oCounter.innerHTML = "<span class='chatUserCounter'>(" + stat.value + ")</span>";
                    }
                }
            },
            complete: function() { setTimeout(rooms_RefreshStats, 1000); }
        });    
        
    } catch(err) {alert(err);}                              
}   

function openRoom(iRoomID, sRoomName) {    
    
    var foundExisting = false;
    var foundNewIndex = false;                
    _gRoomID = iRoomID;           

    // loop through existing rooms and see if this one is already open, if so select it
    for (var i=0; i < 10; i++){
        if(_gArrRoomSessions[i][0] == iRoomID) {                        
            $('#tabsRooms').tabs('select', '#' + _gArrRoomSessions[i][1]);
            foundExisting = true;                        
        } else {
            if(!foundNewIndex && _gArrRoomSessions[i][0]==0) {
                foundNewIndex = true;
                _gNewIndex=i;
            }
        }
    }
   
    // join a room
    if(!foundExisting) { 
        if(_gRoomCounter < _gMaxRooms) {                      
            _gArrRoomSessions[_gNewIndex][0]=iRoomID;
            _gArrRoomSessions[_gNewIndex][2]=sRoomName;                                                  
            $('#tabsRooms').tabs('add', '#room' + iRoomID, "<table style='cursor: pointer;' cellpadding='0' cellspacing='0' border='0'><tr><td><div id='roomTabName" + iRoomID + "' class='roomTabName'>" + sRoomName + "</div></td><td style='width:10px;' onclick='rooms_Exit(" + iRoomID + ");'><div class='tabClose'><img src='/Icons/close_gray.gif' border=0/></div></td></tr></table>");                  
            _gRoomCounter++; 
            rooms_JoinRoom(iRoomID);   
            rooms_Resize();                     
        } else {
            alert('Nastąpił błąd. Możesz mieć maksymalnie ' + _gMaxRooms + ' pokoi otwartych.');
        }                        
    }
}    

function rooms_WindowCloseConfirmation(){
    var flag=window.confirm("Na pewno chcesz zamknąć okno czatu i wylogować się ze wszystkich otwartych pokoi?");
    if(!flag) {
        return false;
    } else {
        rooms_ExitAll();
    }
}

function rooms_ExitAll() {
    alert('exit all')
}

function rooms_Exit(iRoomID) {
    var closeAll = false;
    if(_gRoomCounter==1) {
        if(confirm('Przynajmniej jeden pokój musi być otwarty w oknie czatu. Czy chcesz całkowicie zamknąć okno czatu?')) {
            closeAll = true;
        } else {
            return false;
        }
    } else {
        if(!confirm('Chcesz opuścić ten pokój ?')) return false;
    } 
    for (var i=0; i < 10; i++){
        if(_gArrRoomSessions[i][0] == iRoomID) { 
            try {
                rooms_CleanUsersArray(iRoomID);
                _gArrRoomSessions[i][0] = 0;
                _gRoomCounter--; 
                WebServices.ChatRoomInterface.Room_Exit(iRoomID, iWSUID, iWSHID, rooms_RoomExitCallback, ws_ErrorTrap);  
            } catch(err) {} 
            $('#tabsRooms').tabs('remove', _gArrRoomSessions[i][3])    
        }
    }    
    if(closeAll) self.close();
}

function rooms_RoomExitCallback(result){}

function rooms_PrepareTabs() {
    rooms_AutoScoller();
    rooms_HandleBlink();    
    
    var $tabs = $('#tabsRooms').tabs({
        add: function(event, ui) {       
            //alert('add');   
            $(ui.panel).html("<table id='roomWrapper" + _gArrRoomSessions[_gNewIndex][0] + "' style='height:200px' class='roomTableWrapper' border=0><tr>" +
                             "  <td valign=top class='roomBody'><div class='profileTableClean' style='height:100%;'><div onmousedown='rooms_MouseDown();' onmouseup='rooms_MouseUp();' class='roomBodyInner' id='roomBody" + _gRoomID + "'></div></div></td>" +
                             "  <td valign=top class='roomUsers'><div class='profileTable' style='height:100%; background-color:#F7FAFD; border: solid 1px silver;'><div class='profileSection'>" + 
                             "     <div class='profileSectionHeader'>Osoby</div></div><div class='roomUsersInner' id='roomUsers" + _gRoomID + "'></div></div></div></td>" +
                             "</tr><tr><td><div id='roomEnterBoxWrap" + _gRoomID + "' class='roomEnterBoxWrap'><table style='width:100%' cellpadding='0' cellspacing='0'><tr><td>" +
                             "       <input onkeypress='return rooms_OnEnter(event, this, " + _gRoomID + ");' type='text' id='roomEnter" + _gRoomID + "' class='roomEnterBox' maxlength='250'/></td>" +
                             "       <td style='width:15px'><img onclick=\"smiley_SetCB('roomEnter" + _gRoomID + "'); smiley_showSmileys(event);\" class='chatRoomSmiley' src='/Icons/smileys/button_mini.png' title='Pokaż emotki'></td>" + 
                             "       <td style='width:68px'><a href='javascript:rooms_SendMessage_Clicked(" +_gRoomID + ");'><img align='middle' src='/Images/send.png' border='0'></td>" +
                             "     </tr></table></div></td><td align='right'><a style='color:red;' href=\"javascript:jQuery.facebox.url('/ReportAbuse.aspx?type=10&roomID=" + _gRoomID + "',220);\">Zawołaj Moderatora <img src='/Icons/redflag_mini.png' border=0/></a></td></tr></table>");                    
            $tabs.tabs('select', '#' + ui.panel.id);  
            
            _gArrRoomSessions[_gNewIndex][1]=ui.panel.id;                 
            _gArrRoomSessions[_gNewIndex][3]=ui.index;  
            _gArrRoomSessions[_gNewIndex][4]=1; 
            setTimeout(rooms_Selected, 100);  
            
        },        
        select: function(event, ui) { 
            for (var i=0; i < 10; i++){
                if(_gArrRoomSessions[i][1] == ui.panel.id) {
                    _gRoomID = _gArrRoomSessions[i][0];
                    setTimeout(rooms_Selected, 100); 
                    $get("roomTabName" + _gRoomID).style.color = '#000000';                                 
                }
            }
        }
    });  
}

function rooms_Selected() {
    $get("roomEnter" + _gRoomID).focus();
    var objTextBox = $get("roomBody" + _gRoomID);
    objTextBox.scrollTop = objTextBox.scrollHeight;       
    for (var i=0; i < 10; i++){
        if(_gArrRoomSessions[i][0]==_gRoomID) 
            _gArrRoomSessions[i][4]=1;
        else 
            _gArrRoomSessions[i][4]=0;
    }
}

function rooms_Resize() {
    var windowHeight = wHeight();
    $get("roomsWrapper").style.height = (windowHeight - 200) + 'px';

    var arrRooms = _gArrRoomSessions;
    
    try {
        for (var i = 0; i < 10; i++) {
            if (arrRooms[i][0] != 0) {
                $get("roomWrapper" + arrRooms[i][0]).style.height = (windowHeight - 150) + 'px';
                var wrapperHeight = (windowHeight - 150);

                _gScrollDivHeight = wrapperHeight - 15;
                // chat body
                var objChatBody = $get("roomBody" + arrRooms[i][0]);
                objChatBody.style.height = (wrapperHeight - 15) + 'px';
                objChatBody.scrollTop = objChatBody.scrollHeight;
                // chat users
                var objChatUsers = $get("roomUsers" + arrRooms[i][0]);
                objChatUsers.style.height = (wrapperHeight - 40) + 'px';
                objChatUsers.scrollTop = objChatUsers.scrollHeight;
            }   
        }
    } catch (err) { }   
}

function rooms_OnEnter(e, obj, iRoomID) {
    var ret = true;
    if(!e) e=window.event;
    key = e.keyCode ? e.keyCode : e.Which;
    if(key==13) {
        var sMessage = obj.value;
        if(sMessage=='') {
            return false;
        } else {
            rooms_SendMessage(iRoomID, sMessage);
            ret = false;
            e.cancelBubble = true;
            e.returnValue = false;            
            return false;
        }
    }
    if(key==9) {
        rooms_NickMatch(obj.value, iRoomID)
        return false;
    }
    return true;
}

function rooms_NickMatch(sNick, iRoomID) {
    var arrTokens = sNick.split(" ")
    var sToken = arrTokens[arrTokens.length-1].toLowerCase();
    sNick = sNick.toLowerCase();
    
    if(sToken!='') {
        for (var i = 0; i < _gRoomAllUsers.length; i++) { 
            var arrRoomUsers = _gRoomAllUsers[i];
            for (var j = 0; j < arrRoomUsers.length; j++) { 
                var arrUser = arrRoomUsers[j];
                var sOrigName = arrUser[8];
                var sFirstName = sOrigName.split(" ")[0];
                var sMatch = sFirstName.toLowerCase();
                var sName = arrUser[8].toLowerCase();
                
                if(arrUser[0] == iRoomID && sMatch.indexOf(sNick) != -1) {                    
                    var currentValue = $get("roomEnter" + iRoomID).value.toLowerCase();
                    $get("roomEnter" + iRoomID).value = currentValue.replace(sToken, sFirstName + ' - ');
                    break;
                }            
            }            
        }          
    }
}

function rooms_SendMessage_Clicked(iRoomID) { 
    sMessage = $get("roomEnter" + iRoomID).value;
    $get("roomEnter" + iRoomID).focus();
    rooms_SendMessage(iRoomID, sMessage);
}

function rooms_SendMessage(iRoomID, sMessage) {
    try {
        $get("roomEnter" + iRoomID).value = '';
        WebServices.ChatRoomInterface.Room_SendMessage(iRoomID, iWSUID, iWSHID, sMessage, rooms_SendMessageCallback, ws_ErrorTrap);  
    } catch(err){}          
}

function rooms_SendMessageCallback(result){}

function rooms_JoinRoom(iRoomID) { 
    // will join the room and prepare it.
    // a) get last X items from history, b) get current list of users

    $.ajax({
        type: "POST",
        url: "/WebServices/ChatRoom.asmx/Room_Join",
        data: "{intUserID:'" + iWSUID + "',strHash:'" + iWSHID + "',intRoomID:'" + iRoomID + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            var iRoomID = 0;
            var iBan = 0;
            _gWindowFocused = true;

            iRoomID = data.id;
            iBan = data.ban;

            var objTextBox = $get("roomBody" + iRoomID);
            objTextBox.innerHTML = '';

            if (iBan == 1) {
                // room banned
                rooms_AddMessage(iRoomID, 0, "<div class='roomsBanMessage'>Nie możesz dołączyć do tego pokoju z powodu bana!</div>");
                $get("roomEnterBoxWrap" + iRoomID).style.display = 'none';
            } else {
                // process messages
                var oMessages = data.messages;
                rooms_ProcessMessages(oMessages);
                // process users
                var oUsers = data.users;
                var roomUsers = new Array();
                for (var i = 0; i < oUsers.length; i++) {
                    roomUsers[roomUsers.length] = rooms_BuildUserArray(oUsers[i]);
                }
                _gRoomAllUsers[_gRoomAllUsers.length] = roomUsers;
                rooms_BuildUsers(iRoomID);
            }

            // mark room as loaded
            for (var i = 0; i < 10; i++) { if (_gArrRoomSessions[i][0] == iRoomID) _gArrRoomSessions[i][7] = 1; }
        }
    });
                                   
}

function rooms_Join_RoomCallback(data) { 
     
}       

function rooms_BuildUserArray(oUser) { 
    var arrUser = new Array(13);
    for(var j = 0; j < arrUser.length; j++) arrUser[j]='';  
    arrUser[0] = oUser.roomid;
    arrUser[1] = oUser.userid;
    arrUser[2] = oUser.type;
    arrUser[3] = oUser.sex;
    arrUser[4] = oUser.cityid;
    arrUser[5] = oUser.city;
    arrUser[6] = oUser.districtid;
    arrUser[7] = oUser.district;
    arrUser[8] = oUser.fullname;
    arrUser[9] = oUser.thumb;
    arrUser[10] = oUser.msghash;
    arrUser[11] = oUser.age;
    arrUser[12] = oUser.friend;  
    return arrUser;  
} 

function rooms_BuildUsers(iRoomID) {
    var objUsers = $get("roomUsers" + iRoomID);
    objUsers.innerHTML = '';
    
    for (var i = 0; i < _gRoomAllUsers.length; i++) { 
        var arrRoomUsers = _gRoomAllUsers[i];
        for (var j = 0; j < arrRoomUsers.length; j++) { 
            var arrUser = arrRoomUsers[j];
            if(arrUser[0]==iRoomID && arrUser[1]!=0) {objUsers.innerHTML += rooms_BuildUser(arrUser);}
        }            
    }
}

function rooms_CleanUsersArray(iRoomID) {
    for (var i = 0; i < _gRoomAllUsers.length; i++) { 
        var arrRoomUsers = _gRoomAllUsers[i];
        for (var j = 0; j < arrRoomUsers.length; j++) { 
            var arrUser = arrRoomUsers[j];
            if(arrUser[0]==iRoomID) {
                arrUser = new Array(10);
                for(var x = 0; x < arrUser.length; x++) arrUser[x]='';  
                arrRoomUsers[j] = arrUser;
            }
        }            
    }
}



function rooms_BuildUser(arrUser) { 
    var sUser, sIcons, sInfo, sCity, sDistrict, sUserClass, sObjID;
    var iRoomID = arrUser[0];;
    
    // build icons
    switch(parseInt(arrUser[2])) {
        case 0: sIcons = ""; sUserClass = 'roomListUser'; break;
        case 1: sIcons = "<img title='Admin' src='/Images/pin_admin.jpg'/>"; sUserClass = 'roomListUserAdmin'; break;
        case 2: sIcons = "<img title='Moderator' src='/Images/pin_moderator.jpg'/>"; sUserClass = 'roomListUserMod'; break;            
        case 3: sIcons = "<img src='/Images/pin_friend.jpg' border='0' title='Przyjaciel'/>"; sUserClass = 'roomListUserFriend'; break;            
        case 4: sIcons = "<img src='/Images/pin_guardian.jpg' border='0' title='Strażnik'/>"; sUserClass = 'roomListUserGuardian'; break;   
    }    
    
    // user info
    sInfo = "<div><a class='" + sUserClass + "' onmouseover='tpShow(event, this);' onmouseout='tpHide();' rel='/ShowThumb.aspx?image=" + arrUser[9] + "&type=thumb' href='#' onclick='rooms_ClickUser(event, " + iRoomID + "," + arrUser[1] + ",\"" + arrUser[8] + "\",\"" + arrUser[10] + "\");return false;'>" + arrUser[8] + "</a> <div id='profileAge'>(" + (arrUser[11]) + ")</div></div>";

    if(arrUser[4]!='') {
        sInfo += "<div class='roomListLocation'>" + 
                 "<a target=_blank href='/City.aspx?id=" + arrUser[4] +"'>" + arrUser[5] + "</a>";
        if(arrUser[6]!='') sInfo += " / <a target=_blank href='/CityDistrict.aspx?id=" + arrUser[6] +"'>" + arrUser[7] + "</a>";
        sInfo += "</div>";
    }
    
    sObjID = "roomUser_" + iRoomID + "_" + arrUser[1];
    
    sUser = "<div class='roomListUserWrapper' id='" + sObjID + "'>" +
            "<table cellpadding='0' cellspacing='0' style='width:100%'><tr>" +
            "<td class='roomListUserIcons'>" + sIcons + "</td>" + 
            "<td class='roomListUserInfo'>" + sInfo + "</td>" +
            "</tr></table>" +
            "</div>";
            
    return sUser;
}

function rooms_ProcessMessages(oMessages) {  
    for (var i = 0; i < oMessages.length; i++) { 
        var oMessage = oMessages[i];        
        var msgID = (oMessage.id - 0);
        var msgType = oMessage.type;
        var msgRoomID = oMessage.roomid;
        var msgMod = oMessage.mod;
        var msgUserType = oMessage.usertype;
        var msgUserID = oMessage.userid;
        var msgThumb = oMessage.thumb;
        var msgFullName = oMessage.fullname;
        var msgBody = oMessage.body;
        var msgHash = oMessage.msghash;                
        
        // handle user joins & exits
        var applyColor = false;
        var showMessage = true;
        
        switch(parseInt(msgType)) {
            case 1: case 3: case 4:
                // exit (kick & ban)
                rooms_UserRemove(msgRoomID, msgUserID);
                break;
            case 5:
                // name change
                rooms_UserNameChange(msgRoomID, msgUserID, msgFullName);
                showMessage = false;
                break;
            case 0:
                // join
                break;
            default:
                applyColor = true;
                
        }   
        
        // user class
        var sUserClass = '';
        if(applyColor) {
            switch(parseInt(msgUserType)) {
                case 0: sUserClass = 'roomListUser'; break;
                case 1: sUserClass = 'roomListUserAdmin'; break;
                case 2: sUserClass = 'roomListUserMod'; break;            
                case 3: sUserClass = 'roomListUserFriend'; break;            
                case 4: sUserClass = 'roomListUserGuardian'; break;   
            }    
        }                
        var userClass = '';
        if(parseInt(msgMod)==1) userClass = 'roomMessageUserMod';
        
        // insert user info
        if(msgBody.indexOf('[USER]')!=-1) {   
            msgBody = msgBody.replace("[USER]","<a class='" + sUserClass + "' rel='/ShowThumb.aspx?image=" + msgThumb + "&type=thumb' href='#' onclick='rooms_ClickUser(event, " + msgRoomID + "," + msgUserID + ",\"" + msgFullName + "\",\"" + msgHash + "\");return false;'>" + msgFullName + "</a>")            
        }        
        // add message
        if(showMessage) rooms_AddMessage(msgRoomID, msgID, msgBody); 
    }  
}

function rooms_UserNameChange(iRoomID, iUserID, sNewName) {    
    // update the array with the new name
    for (var i = 0; i < _gRoomAllUsers.length; i++) { 
        var arrRoomUsers = _gRoomAllUsers[i];
        for (var j = 0; j < arrRoomUsers.length; j++) { 
            var arrUser = arrRoomUsers[j];
            if(arrUser[0] == iRoomID && arrUser[1] == iUserID) {
                arrUser[8] = sNewName;
                arrRoomUsers[j] = arrUser;
            }            
        }            
    }       
    // rebuild the list of users
    rooms_BuildUsers(iRoomID);     
}

function rooms_UserRemove(iRoomID, iUserID) {
    // remove the user from the list
    var oUser = $get("roomUser_" + iRoomID + "_" + iUserID);
    if(oUser!=undefined) oUser.style.display = 'none';    
    // remove the user from the array
    for (var i = 0; i < _gRoomAllUsers.length; i++) { 
        var arrRoomUsers = _gRoomAllUsers[i];
        for (var j = 0; j < arrRoomUsers.length; j++) { 
            var arrUser = arrRoomUsers[j];
            if(arrUser[0] == iRoomID && arrUser[1] == iUserID) {
                for(var x = 1; x < arrUser.length; x++) arrUser[x]='';  
                arrUser[1]=0;
                arrRoomUsers[j] = arrUser;
            }            
        }            
    }    
}

function rooms_AddMessage(iRoomID, iMessageID, sMessage) {
    var dShowMessage = false;
    
    // make sure we havent displayed this message
    if(iMessageID==0) {
        dShowMessage = true;
    } else {
        for (var i=0; i < 10; i++){ 
            if(_gArrRoomSessions[i][0]==iRoomID && _gArrRoomSessions[i][8] < iMessageID) {//                    
                dShowMessage = true;
                _gArrRoomSessions[i][8] = iMessageID;
            }
        }
    }
    
    if(dShowMessage) {
        // append new message to the room
        var objTextBox = $get("roomBody" + iRoomID);
        obj_ChatAddMessage(objTextBox, sMessage)

        // mark the room as the one with new message (if not a currently selected one)    
        for (var i=0; i < 10; i++){
            if(_gArrRoomSessions[i][0]==iRoomID) {
                // take care of new message indication
                var objRoomTitle = $get("roomTabName" + _gArrRoomSessions[i][0]);            
                if(_gArrRoomSessions[i][4]==1) {
                    objRoomTitle.style.color = '#000000';
                    _gArrRoomSessions[i][5]=0;
                } else {                
                    objRoomTitle.style.color = 'red';
                    _gArrRoomSessions[i][5]=1;
                }
            }
        }
    }
}

function obj_ChatAddMessage(e, sMessage) { 
    var blnPinScrollbar = false
    if(e.scrollTop == (e.scrollHeight - e.offsetHeight)) blnPinScrollbar = true;
    e.innerHTML += sMessage; 
    if(!_gWindowFocused)_gNewMessage = true;
}

var _gMouseDown = false;

function rooms_debug() { rooms_AutoScoller(); }
function rooms_MouseDown() { _gMouseDown = true; }
function rooms_MouseUp() { _gMouseDown = false; }

function rooms_AutoScoller() {
    //$get("debug").value = _gMouseDown + new Date();
    if(!_gMouseDown) {        
        for (var i=0; i < 10; i++){ obj_ChatAddMessage
            if(_gArrRoomSessions[i][0] != 0 && _gArrRoomSessions[i][4]==1) {        
                var e = $get("roomBody" + _gArrRoomSessions[i][0]);
                e.scrollTop = e.scrollHeight;
            }
        }
    }
    setTimeout(rooms_AutoScoller, 100);
}

function rooms_GetNewActivity() { 
    // gather room ids
    var roomIDs = '';
    for (var i=0; i < 10; i++){ 
        if(_gArrRoomSessions[i][0]!=0) roomIDs += _gArrRoomSessions[i][0] + ','; 
    }
    if(roomIDs!='') roomIDs = roomIDs.substring(0,roomIDs.length-1)

    $.ajax({
        type: "POST",
        url: "/WebServices/ChatRoom.asmx/NewActivity_Get",
        data: "{intUserID:'" + iWSUID + "',strHash:'" + iWSHID + "',strRoomIDs:'" + roomIDs + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            var sBannedRooms = data.banned;
            var sActiveRooms = data.active;
            var oMessages = data.messages;
            var oUsers = data.users;

            //rooms_AddMessage(100000, 0, "<div class='roomsBanMessage'>sBannedRooms: " + sBannedRooms + "</div>");
            //rooms_AddMessage(100000, 0, "<div class='roomsBanMessage'>sActiveRooms: " + sActiveRooms + "</div>");
            //rooms_AddMessage(100000, 0, "<div class='roomsBanMessage'>result: " + result + "</div>");
            //rooms_AddMessage(100000, 0, "<div class='roomsBanMessage'>ping</div>");

            var isKick = rooms_TrackBans(sBannedRooms, sActiveRooms);

            rooms_ProcessMessages(oMessages);

            for (var x = 0; x < oUsers.length; x++) {
                var newUser = rooms_BuildUserArray(oUsers[x]);
                var iRoomID = newUser[0];

                for (var i = 0; i < _gRoomAllUsers.length; i++) {
                    var arrRoomUsers = _gRoomAllUsers[i];
                    var foundExisting = false;
                    var inserting = false;
                    var availabeIndex = arrRoomUsers.length;

                    for (var j = 0; j < arrRoomUsers.length; j++) {
                        var arrUser = arrRoomUsers[j];
                        if (arrUser[0] == iRoomID) {
                            inserting = true;
                            if (arrUser[1] == newUser[1]) { foundExisting = true; }
                            if (arrUser[1] == 0 && j < availabeIndex) { availabeIndex = j; }
                        }
                    }
                    if (inserting && !foundExisting) {
                        arrRoomUsers[availabeIndex] = newUser;
                        // sort the list of users by full name & rebuild the list of users
                        arrRoomUsers.sort(sortByFullName);
                        rooms_BuildUsers(iRoomID);
                    }
                }
            }
        }
    });    
            
    setTimeout(rooms_GetNewActivity, 1000);  
}

function sortByFullName(a, b) {
    var x = a[8].toLowerCase();
    var y = b[8].toLowerCase();
    var ret = ((x < y) ? -1 : ((x > y) ? 1 : 0));
    return ret;
}

function rooms_TrackBans(sBannedRooms, sActiveRooms) {
    var arrBannedRooms = sBannedRooms.split(",");
    var arrActiveRooms = sActiveRooms.split(",");
    var isKick = false;
    
    for (var j=0; j < 10; j++){
        var iRoomID = _gArrRoomSessions[j][0];
        var isBanned = false;
        var isActive = false;
        
        if(iRoomID!=0) {
            // see if this room is on a banned list
            for (var i = 0; i < arrBannedRooms.length; i++) if(arrBannedRooms[i]==iRoomID) isBanned = true;
            // see if this room is not on an active list
            for (var i = 0; i < arrActiveRooms.length; i++) if(arrActiveRooms[i]==iRoomID) isActive = true;
                        
            if((isBanned || !isActive) && _gArrRoomSessions[j][6] == 0 && _gArrRoomSessions[j][7] == 1) {          
                // flag this room as banned
                _gArrRoomSessions[j][6] = 1;
                rooms_AddMessage(iRoomID, 0, "<div class='roomsBanMessage'>Połączenie z pokojem zostało zerwane.<br/> Prosimy o powtórne zalogowanie się do pokoju.</div>");
                $get("roomEnterBoxWrap" + iRoomID).style.display = 'none';              
                $get("roomUsers" + iRoomID).innerHTML = ''; 
                rooms_CleanUsersArray(iRoomID);
                isKick = true; 
                
            }
        }
    }    
    return isKick;
}

function rooms_SelectUser(iRoomID, iUserID, sUserFullName) {
    var oTextBox = $get("roomEnter" + _gRoomID)
    oTextBox.value += sUserFullName + ' ';
    oTextBox.focus();
}

function rooms_ClickUser(event, iRoomID, iUserID, sUserFullName, sMsgHash) {
    if(iUserID==iWSUID) return false;
    getMouse(event);
    
    var oDialog = $get("roomsDialog");
    var sContent = "<div class='roomsDialogTitle' onclick='rooms_SelectUser(" + iRoomID + "," + iUserID + ",\"" + sUserFullName + "\");'>" + sUserFullName + "</div>" + 
                   "<div class='roomsDialogBody'>" +
                   "  <div><a target=_blank href=\"\Profile.aspx?id=" + iUserID + "\">Zobacz profil</a></div>" +
                   "  <div><a href=\"javascript:jQuery.facebox.url('/SendMessage.aspx?a=" + sMsgHash + "',320,500);\">Napisz wiadomość</a></div>"
    if (4096 & iWSUM || iWSUCG > 0) {        
        sContent += "<div><a class='roomModAction' href='javascript:rooms_ModAction(" + iRoomID + "," + iUserID + ",1);'>Kick</a></div>";
        sContent += "<div><a class='roomModAction' href='javascript:rooms_ModAction(" + iRoomID + "," + iUserID + ",2);'>Kick + Ban (ten pokój)</a></div>";
        sContent += "<div><a class='roomModAction' href='javascript:rooms_ModAction(" + iRoomID + "," + iUserID + ",3);'>Kick + Ban (wszystkie)</a></div>";
    }
                        
    sContent += "</div>";
                        
    oDialog.innerHTML = sContent;
                        
    $(oDialog).fadeIn(400);
	
	$get("roomsDialog").style.top = (imageY - 20) + 'px';
	$get("roomsDialog").style.left =  (imageX - 50) + 'px';
	
	_gRoomsDialogOpen = true;
}

function rooms_ModAction(iRoomID, iUserID, iType) {
    var doIt = 0;
    switch(iType) {
        case 1: doIt = confirm('Kick?'); break;
        case 2: doIt = confirm('Kick + Ban (ten pokój)?'); break;
        case 3: doIt = confirm('Kick + Ban (wszystkie)?'); break;
    }  
    if(doIt){
        try {
            WebServices.ChatRoomInterface.Mod_Activity(iWSUID, iWSHID, iRoomID, iUserID, iType, rooms_Mod_ActivityCallback, ws_ErrorTrap);    
        } catch(err) {}         
    }
}

function rooms_Mod_ActivityCallback(results) {}

function rooms_ClickUserHide() {
    setTimeout(rooms_ClickUserHideCallback, 100);  
}

function rooms_ClickUserHideCallback() {
    if(_gRoomsDialogOpen && !_gRoomsDialogOver) { 
        var oDialog = $get("roomsDialog");
        oDialog.innerHTML = "";
	    $(oDialog).fadeOut(400);
	    _gRoomsDialogOpen = false;
	}
}

function rooms_HandleBlink() {       
    if(!_gWindowFocused && _gNewMessage) {
        if(_gRoomsHighlighted) {
            window.status = '';       
            document.title = "JakLeci.pl - Czat";
        } else {      
            window.status = 'Nowa wiadomość';
            document.title = window.status;
        }
        _gRoomsHighlighted = !_gRoomsHighlighted;
    }    
    setTimeout(rooms_HandleBlink, 1000);
}


function rooms_handleBlur() {
    _gWindowFocused = false;
}

function rooms_handleFocus() { 
    _gWindowFocused = true;
    _gNewMessage = false;    
    document.title = "JakLeci.pl - Czat";
}

function shoutbox_GetNewActivity() {
    $.ajax({
        type: "POST",
        url: "/WebServices/ChatRoom.asmx/Shoutbox_NewActivity_Get",
        data: "{intUserID:'" + iWSUID + "',intShoutboxID:'" + _gShoutboxID + "',intLastID:'" + _gShoutboxLastID + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            
            for (var i = 0; i < data.length; i++) {
                var row = data[i];
                shoutbox_ShowMessage(row);
            }
        }
    });

    setTimeout(shoutbox_GetNewActivity, 1000);
}

function shoutbox_ShowMessage(oMessage) {
    if (oMessage.id <= _gShoutboxLastID) return;
    
    var sMessage = "<div class='message'>" + 
                   "  <div class='user'><a href='/profile.aspx?id=" + oMessage.userid + "' target='_blank'>" + oMessage.fullname + "</a></div>" +
                   "  <div class='timeStampS'>" + oMessage.date + "</div>" +
                   "  <div class='body'>" + oMessage.body + "</div>" + 
                   "</div>";
    
    var obj = $(".shoutbox #shoutboxmessage");
    obj.append(sMessage);
    
    var obj = $get("shoutboxmessage");
    obj.scrollTop = obj.scrollHeight;
    
    _gShoutboxLastID = oMessage.id;
}

function shoutbox_SendMessage() {
    if (iWSUID == 0) {alert("Aby wysłać shouta musisz się zalogować!");return false;}
    var sMessage = $('#shoutboxInput').val().replace(/'/g, "");
    $.ajax({
        type: "POST",
        url: "/WebServices/ChatRoom.asmx/Shoutbox_SendMessage",
        data: "{intUserID:'" + iWSUID + "',strHash:'" + iWSHID + "',intShoutboxID:'" + _gShoutboxID  + "',strMessage:'" + sMessage + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) { }
    });
    $('#shoutboxInput').val("");
}

function shoutbox_OnEnter(e, obj, iRoomID) {
    if (!e) e = window.event;
    key = e.keyCode ? e.keyCode : e.Which;
    if (key == 13) {
        var sMessage = obj.value;
        if (sMessage == '') { return false; } 
        else {
            shoutbox_SendMessage();
            e.cancelBubble = true;
            e.returnValue = false;
            return false;
        }
    }
    return true;
}

// JScript File
var iWSBID = 0;
var iWSIID = 0;
var alreadyRated = false;

function blogScore_Submit(iScore) { 
    if(iWSVD==0) {alert('Niepotwierdzone konto!'); return false;}    
    if(iScore=='') return;
    try {        
        WebServices.ScoreInterface.BlogScore_Submit(iWSUID, iWSBID, iScore, score_SubmitCallback, ws_ErrorTrap);    
    } catch(err) {}        
}
function imageScore_Submit(iScore) { 
    if(iWSVD==0) {alert('Niepotwierdzone konto!'); return false;}    
    if(iScore=='') return;
    try {        
        WebServices.ScoreInterface.ImageScore_Submit(iWSUID, iWSIID, iScore, score_SubmitCallback, ws_ErrorTrap);    
    } catch(err) {}        
}
function score_SubmitCallback(result){
    if(result) {
        score_MakeReadOnly();
    } else {}
}
function score_MakeReadOnly() {
    alreadyRated = true;
    if($get('rateStars')!=null) $get('rateStars').style.display = 'none';
    if ($get('alreadyRated') != null) $get('alreadyRated').style.display = 'block';
}
function score_NotLoggedIn() {
    if($get('rateStars')!=null) {
        if ($get('rateStars') != null) $get('rateStars').style.display = 'none';
        if ($get('alreadyRated') != null) {
            $get('alreadyRated').style.display = 'block';
            $get('alreadyRated').innerHTML = '<a href="login.aspx">Zaloguj się</a> aby głosować';
        }
    }
}
function forumScore_Submit(iMessageID, iScore) {
    if(iWSVD==0) {alert('Niepotwierdzone konto!'); return;}    
    if(iScore=='') return;
    try {
        $.ajax({
            type: "POST",
            url: "/WebServices/Score.asmx/ForumScore_Submit",
            data: "{intUserID:'" + iWSUID + "',intForumMessageID:'" + iMessageID + "',intScoreID:'" + iScore + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function(response) {
                var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
                if (data.result == 'ok') {
                    $('#ratestarwrap-' + iMessageID).html("Dziękujemy");
                } else {

                }
            }
        });    
        
        
    } catch(err) {}  
}
function forumScore_SubmitCallback(response) {
    
//    if(result) {
//        if(result.indexOf("<success")!=-1){    
//            var doc = xml_getDomAdapter().parseXml(result);    
//            if(cT=='IE') var oMain = xml_selectNodes(doc, "/success");
//            else var oMain = xml_selectNodes(doc, "success");        
//            var messageID = oMain[0].getElementsByTagName("messageid")[0].childNodes[0].nodeValue;
//            var score = oMain[0].getElementsByTagName("score")[0].childNodes[0].nodeValue;
//            $get('score' + messageID).innerHTML = score;                        
//        } else {
//            alert('Już ocenione!');
//        }
//    } else {}
}
// JScript File
var iWSSurveyID = 0;
var survey_alreadyAnswered = false;

function survey_Submit(iAnswer) {     
    if(iWSVD==0) {alert('Niepotwierdzone konto!'); return false;}
    if (iAnswer == '') return;
    $.ajax({
        type: "POST",
        url: "/WebServices/Survey.asmx/Survey_Submit",
        data: "{intUserID:'" + iWSUID + "',intSurveyID:'" + iWSSurveyID + "',intAnswer:'" + iAnswer + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            if (data.result == 'ok') {
                survey_MakeReadOnly();
                var iTotal = data.answer1 + data.answer2 + data.answer3 + data.answer4 + data.answer5;

                $('#surveyAnswer1').html("<span class='surveyAnswer'>" + data.question1 + "</span>" +
                                         "<span class='surveyAnswerResult'>" + data.ratio1 + " (" + data.score1 + ")</span>" +
                                         "<div class='surveyAnswerBar'><div class='surveyAnswerBarValue' style='width:" + data.ratio1 + "'></div></div>");
                $('#surveyAnswer2').html("<span class='surveyAnswer'>" + data.question2 + "</span>" +
                                         "<span class='surveyAnswerResult'>" + data.ratio2 + " (" + data.score2 + ")</span>" +
                                         "<div class='surveyAnswerBar'><div class='surveyAnswerBarValue' style='width:" + data.ratio2 + "'></div></div>");
                $('#surveyAnswer3').html("<span class='surveyAnswer'>" + data.question3 + "</span>" +
                                         "<span class='surveyAnswerResult'>" + data.ratio3 + " (" + data.score3 + ")</span>" +
                                         "<div class='surveyAnswerBar'><div class='surveyAnswerBarValue' style='width:" + data.ratio3 + "'></div></div>");
                $('#surveyAnswer4').html("<span class='surveyAnswer'>" + data.question4 + "</span>" +
                                         "<span class='surveyAnswerResult'>" + data.ratio4 + " (" + data.score4 + ")</span>" +
                                         "<div class='surveyAnswerBar'><div class='surveyAnswerBarValue' style='width:" + data.ratio4 + "'></div></div>");
                $('#surveyAnswer5').html("<span class='surveyAnswer'>" + data.question5 + "</span>" +
                                         "<span class='surveyAnswerResult'>" + data.ratio5 + " (" + data.score5 + ")</span>" +
                                         "<div class='surveyAnswerBar'><div class='surveyAnswerBarValue' style='width:" + data.ratio5 + "'></div></div>");

                $("#divTotal").html(data.total + " głosów");
                $('#divShow').show();
            }
        }
    });             
}
function survey_MakeReadOnly() {
    survey_alreadyAnswered = true;
    $('#divShow, #divThanks').show();
    $('#divButton, #divAsk').hide();
}

function Browser() {
      var ua, s, i;     
      this.isIE    = false;
      this.isNS    = false;
      this.isOpera = false;
      this.version = null;

      ua = navigator.userAgent;
      
      s = "MSIE";
      if ((i = ua.indexOf(s)) >= 0) {
        this.isIE = true;
        this.version = parseFloat(ua.substr(i + s.length));
        return;
      }

      s = "Netscape6/";
      if ((i = ua.indexOf(s)) >= 0) {
        this.isNS = true;
        this.version = parseFloat(ua.substr(i + s.length));
        return;
      }

      s = "Gecko";
      if ((i = ua.indexOf(s)) >= 0) {
        this.isNS = true;
        this.version = 6.1;
        return;
      }
      
      s = "Opera";
      if ((i = ua.indexOf(s)) >= 0) {
        this.isIE = true;
        // this.isOpera = true;
        this.version = parseFloat(ua.substr(i + s.length));
        return;
      }      
}

var browser = new Browser();
var dragObj = new Object();
var dragCover = new Object();
dragObj.zIndex = 0;

function dragStart(event, id) {
      var el;
      var x, y;

      // If an element id was given, find it. Otherwise use the element being clicked on.
      if (id)
        dragObj.elNode = top.document.getElementById(id);
      else {
        if (browser.isIE)
          dragObj.elNode = top.window.event.srcElement;
        if (browser.isNS)
          dragObj.elNode = event.target;

        // If this is a text node, use its parent element.
        if (dragObj.elNode.nodeType == 3)
          dragObj.elNode = dragObj.elNode.parentNode;
      }

      // Get cursor position with respect to the page.
      if (browser.isIE) {
        x = top.window.event.clientX + top.document.documentElement.scrollLeft + top.document.body.scrollLeft;
        y = top.window.event.clientY + top.document.documentElement.scrollTop + top.document.body.scrollTop;
      }
      if (browser.isNS) {
        x = event.clientX + top.window.scrollX;
        y = event.clientY + top.window.scrollY;
      }

      // Save starting positions of cursor and element.
      dragObj.cursorStartX = x;
      dragObj.cursorStartY = y;
      dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);
      dragObj.elStartTop   = parseInt(dragObj.elNode.style.top,  10);

      if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
      if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;

      // Capture mousemove and mouseup events on the page.
      if (browser.isIE) {
        top.document.attachEvent("onmousemove", dragGo);
        top.document.attachEvent("onmouseup",   dragStop);
           
        top.window.event.cancelBubble = true;
        top.window.event.returnValue = false;
      }
      if (browser.isNS) {
        top.document.addEventListener("mousemove", dragGo,   true);
        top.document.addEventListener("mouseup",   dragStop, true);
        event.preventDefault();
      }
      
      // put invisible cover over the iframe
      dragCover = top.document.getElementById("faceCover"); 
      dragCover.style.width = "100%";   
      dragCover.style.display = "block";       
}

function dragGo(event) {
      var x, y;

      // Get cursor position with respect to the page.
      if (browser.isIE) {
        x = top.window.event.clientX + top.document.documentElement.scrollLeft + top.document.body.scrollLeft;
        y = top.window.event.clientY + top.document.documentElement.scrollTop + top.document.body.scrollTop;
      }
      if (browser.isNS) {
        x = event.clientX + top.window.scrollX;
        y = event.clientY + top.window.scrollY;
      }

      // Move drag element by the same amount the cursor has moved.
      x = (dragObj.elStartLeft + x - dragObj.cursorStartX);
      y = (dragObj.elStartTop  + y - dragObj.cursorStartY);

      dragObj.elNode.style.left = x + "px";
      dragObj.elNode.style.top  = y + "px";
      
      objHeader = top.document.getElementById("popupHeader"); 
      
      var arr = getElementPos(objHeader);    
      var objX = arr[0]; 
      var objY = arr[1];
      
      if (browser.isIE) {
        top.window.event.cancelBubble = true;
        top.window.event.returnValue = false;
      }
      if (browser.isNS)
        event.preventDefault();
}

function dragStop(event) {
      if (browser.isIE) {
        top.document.detachEvent("onmousemove", dragGo);
        top.document.detachEvent("onmouseup",   dragStop);
      }
      if (browser.isNS) {
        top.document.removeEventListener("mousemove", dragGo,   true);
        top.document.removeEventListener("mouseup",   dragStop, true);
      }
      
      // put invisible cover over the iframe
      dragCover = top.document.getElementById("faceCover"); 
      dragCover.style.width = "0%";   
      dragCover.style.display = "none";           
}
var map = null;
var mapSearch = null;
var mapLoader = null;
var mapContainer = null;
var business_markersCounter = 0;
var user_markersCounter = 0;
var business_markersLoaded = "|"
var user_markersLoaded = "|"
var city_minZoom = 12;
var city_maxZoom = 17;
var city_currentZoom = 0;
var map_expanded = false;
var map_initialized = false;
var city_categories = null;
var city_categories_counters = [];
var city_users_counters = [];
var city_filterUsers = true;
var city_filterMale = true;
var city_filterFemale = true;
var city_filterBusinesses = true;
var businessMarkerClusterer = null;
var businessMarkers = [];
var userMarkerClusterer = null;
var map_build_filters = true;
var homeMarker = null;
var mapDirections = null;
var myLat = 0;
var myLong = 0;
var city_Lat = 0;
var city_Long = 0;
var city_zoomMyLocation = false;
var city_addressType = 0;
var city_displayLocationWarning = false;
var cityMap_Min = 270;
var main_map_expanded = true;
var city_show_bad_location_alert = true;
var default_zoom = 15;
var city_places_hidden = false;
var city_search_results = [];
var city_mapResultsMaxHeight = 200;

function json() {map.clearOverlays(); }

var maps_icons_businesses = [
    {url: '/Icons/maps/place1.png', height: 53, width: 54, opt_anchor: [25, 24], opt_textColor: '#333333'},
    {url: '/Icons/maps/place2.png', height: 60, width: 61, opt_anchor: [30, 24], opt_textColor: '#333333'},
    {url: '/Icons/maps/place3.png', height: 66, width: 65, opt_anchor: [30, 24], opt_textColor: '#333333'}];
var maps_icons_users = [
    {url: '/Icons/maps/user1.png', height: 53, width: 54, opt_anchor: [25, 24], opt_textColor: '#333333'},
    {url: '/Icons/maps/user2.png', height: 60, width: 61, opt_anchor: [30, 24], opt_textColor: '#333333'},
    {url: '/Icons/maps/user3.png', height: 66, width: 65, opt_anchor: [30, 24], opt_textColor: '#333333'}];
    
function google_cityMapExpand(link, obj) {
    if (!map_expanded) link.innerHTML = '<img src="/icons/collapse.png" /> Zwiń mapę'
    else link.innerHTML = '<img src="/icons/expand.png" /> Rozwiń mapę';
    $(obj).animate({ height: ((map_expanded) ? cityMap_Min : cityMap_Min + 180) + 'px' }, 1000);
    setTimeout(function() {map.checkResize(); google_rebuildMarkers();}, 1000);
    map_expanded=!map_expanded;
}

function google_citySearchMapExpand(link, obj) {
    if (!map_expanded) link.html('<img src="/icons/collapse.png" /> Zwiń mapę');
    else link.html('<img src="/icons/expand.png" /> Rozwiń mapę');
    $(obj).animate({ height: ((map_expanded) ? cityMap_Min : cityMap_Min + 180) + 'px' }, 1000);
    setTimeout(function() { map.checkResize(); if (city_filterUsers) google_usersBuild(); }, 1000);
    map_expanded = !map_expanded;
}

function google_ToggleUsers(obj) {
    if(city_filterUsers) {
        city_filterUsers = false;
        google_clearUsers();
        $(obj).html('Pokaż użytkowników');        
    } else {
        city_filterUsers = true;
        google_usersBuild();
        $(obj).html('Schowaj użytkowników');
    }
}
    
function google_initializeMap(vObjID, vSmall) {
    if(GBrowserIsCompatible()) {
        var goodPoint = false;
        
        mapContainer = $get(vObjID);
        map = new GMap2(mapContainer);
        map.addControl(new GLargeMapControl3D());
        map.enableScrollWheelZoom();
        G_NORMAL_MAP.getMinimumResolution = function() { return city_minZoom; }
        G_NORMAL_MAP.getMaximumResolution = function() { return city_maxZoom; } 
        
        if(city_zoomMyLocation && myLat !=0 && myLong != 0) {
            // center map on my location
            var point = new GLatLng(myLat, myLong);
            map.setCenter(point, default_zoom); 
            google_rebuildMarkers();
            google_bindTriggers();   
        } else {
            // center map on city location
            if(city_Lat != 0 && city_Long != 0) {
                if(myLat==0 && myLong==0) {myLat = city_Lat; myLong = city_Long;}
                var point = new GLatLng(city_Lat, city_Long);
                map.setCenter(point, 13); 
                google_rebuildMarkers();
                google_bindTriggers();              
            }               
        }
             
        // find geo of the city and submit back to us
        if(city_Lat == 0 && city_Long == 0) {
            var geocoder = new GClientGeocoder();                
            if(geocoder) {
                geocoder.getLatLng(mapSearch, function(point) {
                    if(point) {
                        try { WebServices.MiscInterface.CityGeo_Submit(iWSCityID, point.lat(), point.lng(), ws_DummyCallback, ws_ErrorTrap); } catch(err) {}  
                    }
                });
            }  
        }  
         
        // find geo of the city if not present 
        if(city_Lat == 0 && city_Long == 0) {
            var geocoder = new GClientGeocoder();                
            if(geocoder) {
                geocoder.getLatLng(mapSearch, function(point) {
                    if (!point) {
                        alert("Nie znaleziono adresu (" + mapSearch + ")");
                    } else {
                        if(!city_zoomMyLocation) {
                            map.setCenter(point, 13);   
                            google_rebuildMarkers();
                            google_bindTriggers();     
                        }
                    }
                });
            }          
        }        

        // check if we need to display a warning about our location        
        if(city_zoomMyLocation) {
            var latDiff = Math.abs(myLat - city_Lat);
            var longDiff = Math.abs(myLong - city_Long);
            if(latDiff < 0.00001 && longDiff < 0.00001) city_displayLocationWarning = true;
        }

        map_initialized = true;
    }
}

function google_addHomeMarker() {
    if(myLat != 0 && myLong != 0) {
        var point = new GLatLng(myLat, myLong);
        var gIcon = google_createIcon(0, '');    
        var marker = new GMarker(point, {icon: gIcon} );

        homeMarker = marker;
        
        GEvent.addListener(marker, "click", function() { 
            var html = '';
            if(city_addressType==1) html = "To jest twoje miejsce urodzenia.<br> Aby je zmienić <a href='/mylocation.aspx?type=1'>kliknij tutaj</a>";
            else html = "To jest twoje miejsce zamieszkania.<br> Aby je zmienić <a href='/mylocation.aspx?type=2'>kliknij tutaj</a>";
            marker.openInfoWindowHtml(html);
        });                    
        
        map.addOverlay(marker);

        if (city_displayLocationWarning && city_show_bad_location_alert) {
            var html = '';
            if(city_addressType==1) html = "<br>Ta ikonka wskazuje Twoje miejsce urodzenia.<br> Wygląda na to że nie masz ustawionego<br> dokładnego adresu. Aby podać dokładny adres <a href='/mylocation.aspx?type=1'>kliknij tutaj</a>";
            else html = "<br>Ta ikonka wskazuje Twoje miejsce zamieszkania.<br> Wygląda na to że nie masz ustawionego<br>dokładnego adresu. Aby podać dokładny adres <a href='/mylocation.aspx?type=2'>kliknij tutaj</a>";                    
            marker.openInfoWindowHtml(html);
        }           
    }        
}

function google_showLoader() {
    var mapSize = map.getSize(); var mapWidth = mapSize.width; var mapHeight = mapSize.height;
    mapLoader = $("<span class='mapLoader'><img src='/Images/ajax_progress.gif' /><span class='mapLoaderText'>Pobieranie danych...</span></span>");    
    mapLoader.css({ top: '5px', left: (mapWidth-140) + 'px' });     
    $(mapContainer).append(mapLoader);    
    setTimeout(function() {google_hideLoader();}, 10000);
}


function google_initializeSearchMap(vObjID) {
    if (GBrowserIsCompatible()) {
        mapContainer = $get(vObjID);
        map = new GMap2(mapContainer);
        map.addControl(new GLargeMapControl3D());
        map.enableScrollWheelZoom();
        G_NORMAL_MAP.getMinimumResolution = function() { return city_minZoom; }
        G_NORMAL_MAP.getMaximumResolution = function() { return city_maxZoom; }

        google_addHomeMarker();

        if (city_zoomMyLocation && myLat != 0 && myLong != 0) {
            // center map on my location
            var point = new GLatLng(myLat, myLong);
            map.setCenter(point, default_zoom);
            
        } else {
            // center map on city location
            if (city_Lat != 0 && city_Long != 0) {
                if (myLat == 0 && myLong == 0) { myLat = city_Lat; myLong = city_Long; }
                var point = new GLatLng(city_Lat, city_Long);
                map.setCenter(point, 13);                
            }
        }

        google_rebuildSearchMarkers();
        google_bindSearchTriggers();
        if (city_filterUsers) google_usersBuild();
        map_initialized = true;
    }
}

function google_bindSearchTriggers() {
    // bind triggers to the map
    var divider = 4;
    var bounds = map.getBounds(); var sw = bounds.getSouthWest(); var ne = bounds.getNorthEast();
    var latMin = sw.y - (ne.y - sw.y) / divider; var latMax = ne.y + (ne.y - sw.y) / divider;
    var lngMin = sw.x - (ne.x - sw.x) / divider; var lngMax = ne.x + (ne.x - sw.x) / divider;

    GEvent.addListener(map, 'dragend', function() {
        newBounds = map.getBounds(); nSW = newBounds.getSouthWest(); nNE = newBounds.getNorthEast();
        if (nSW.x < lngMin || nSW.y < latMin || nNE.x > lngMax || nNE.y > latMax) {
            google_usersBuild();
            latMin = nSW.y - (nNE.y - nSW.y) / divider; latMax = nNE.y + (nNE.y - nSW.y) / divider;
            lngMin = nSW.x - (nNE.x - nSW.x) / divider; lngMax = nNE.x + (nNE.x - nSW.x) / divider;
        }
    });

    GEvent.addListener(map, 'zoomend', function(oldZoom, newZoom) {
        var allowZoom = true;
        if (newZoom > city_maxZoom) { map.setZoom(city_maxZoom); allowZoom = false; }
        if (newZoom < city_minZoom) { map.setZoom(city_minZoom); allowZoom = false; }

        if (allowZoom) {
            newBounds = map.getBounds(); nSW = newBounds.getSouthWest(); nNE = newBounds.getNorthEast();
            latMin = nSW.y - (nNE.y - nSW.y) / divider; latMax = nNE.y + (nNE.y - nSW.y) / divider;
            lngMin = nSW.x - (nNE.x - nSW.x) / divider; lngMax = nNE.x + (nNE.x - nSW.x) / divider;
            google_usersBuild();
        }
    });
}

function google_usersBuild() {
    var bounds = map.getBounds(); var southWest = bounds.getSouthWest(); var northEast = bounds.getNorthEast();
    var latMin = southWest.lat(); var latMax = northEast.lat();
    var lngMin = southWest.lng(); var lngMax = northEast.lng();
    var zoom = map.getZoom();
    var userGrid = 40;

    if(!city_filterUsers) return;
    
    google_clearUsers();
    google_showLoader();
    
    $.ajax({
        type: "POST",
        url: "/WebServices/Misc.asmx/CityMapObjects_Get",
        data: "{intUserID:'" + iWSUID + "',intCityID:'" + iWSCityID + "',blnIncludeUsers:'true',blnIncludeBusinesses:'false',strUserSex:'',strBusinessTypes:'',latMin:'" + latMin + "',latMax:'" + latMax + "',longMin:'" + lngMin + "',longMax:'" + lngMax + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            var users = data[0];
            var userMarkers = [];

            for (var i = 0; i < users.length; i++) {
                row = users[i];
                var gIcon = google_createIcon(2, row.sex);
                var latlng = new GLatLng(row.lat, row.lng);
                var marker = google_createMarker(2, latlng, row);
                userMarkers.push(marker);
            }

            // figure out the grid            
            switch (zoom) {
                case 12: userGrid = 80; break;
                case 13: userGrid = 50; break;
                case 14: userGrid = 10; break;
                case 15: userGrid = 10; break;
                case 16: userGrid = 1; break;
                case 17: userGrid = 1; break;
            }
            // display clusters
            userMarkerClusterer = new MarkerClusterer(map, userMarkers, { gridSize: userGrid, styles: maps_icons_users });

            google_hideLoader();
        },
        complete: function() { },
        error: function(err) { alert(err.statusText);  }
    });
}

function google_clearUsers() {
    //alert(userMarkerClusterer);
    if(userMarkerClusterer!=null) userMarkerClusterer.clearMarkers();
}
function google_clearBusinesses() {
    var data = businessMarkers;
    for (var i = 0; i < data.length; i++) { map.removeOverlay(data[i]); }
}

function google_businessFind(query) {
    if (query.length < 3) {
        $("#noResults").html('Wpisz przynajmniej trzy znaki aby zacząć wyszukiwanie').show();
        $("#mapSearchResults").html("");
        return;
    }

    if (mapDirections != null) mapDirections.clear();
    google_clearBusinesses();       
    google_showLoader();
    $('#mapSearching').show();
    $("#noResults").hide();

    $.ajax({
        type: "POST",
        url: "/WebServices/Suggest.asmx/Businesses_Find",
        data: "{intCityID:'" + iWSCityID + "',strQuery:'" + query + "',strMyLong:'" + myLong + "',strMyLat:'" + myLat + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            city_search_results = data;
            var results = '';

            if (data.length == 0) {
                $("#noResults").html('Nie znaleziono rezultatów').show();
                $("#mapSearchResultsCounter").hide();
            } else {
                $("#mapSearchResultsCounter").html("znaleziono " + data.length + " miejsc").show();
                for (var i = 0; i < data.length; i++) {
                    var sRating = '';

                    if (data[i].rating == 0)
                        sRating = "(brak ocen)";
                    else
                        sRating = "<div class='starRatingBgSmall'><div class='starRatingSmall' style='width:" + ((data[i].rating / 5) * 100) + "%'></div></div>";

                    results += "<div class='mapResults'>" +
                               "  <div class='categoryicon'>" +
                               "    <img src='/images/categories/" + data[i].type + ".png' title='" + data[i].typename + "' />" +
                               "  </div>" +
                               "  <div class='data'>" +
                               "    <div class='mapResultsNameWrap'>" +
                               "      <div class='mapResultsLeft'>" +
                               "         <div class='mapResultsName'><a href='#' onclick='google_showBusiness(" + i + ");return false;'>" + data[i].name + "</a> <span class='mapResultsType'>(" + data[i].typename + ")</span></div>" +
                               "         <div class='mapResultsAddress'>" + data[i].address + "</div>" +
                               "      </div>" +
                               "      <div class='mapResultsRight'>" +
                               "         <div class='mapResultsDistance'>" + data[i].distance + " km</div>" +
                               "         <div class='mapResultsRating'>" + sRating + "</div>" +
                               "         <div class='mapResultsRateNow'><a href=\"javascript:jQuery.facebox.url('/businessrate.aspx?id=" + data[i].id + "&auto=1',340,500);\">oceń miejsce</a></div>" + 
                               "      </div>" +
                               "    </div>" +
                               "    <div class='mapResultsActions'>" +
                               "       <a href='#' onclick='google_showBusiness(" + i + ");return false;'>pokaż na mapie</a><span class='sep'></span>" +
                               "       <a href='/business.aspx?id=" + data[i].id + "' target='_blank'>strona miejsca</a><span class='sep'></span>" +
                               "       <a href='#' onclick='google_businessFavoriteAdd(" + data[i].id + ");return false;'>dodaj do ulubionych</a> " +
                               "    </div>" +
                               "  </div>" +
                               "</div>";
                    if (i < data.length - 1) results += "<div class='mapResultsSeparator'></div>"
                }
            }

            $("#mapSearchResults").html(results);
            $('#mapSearching').hide();
            $('#mapSearchResults').highlight(query);

            google_rebuildSearchMarkers();
            google_hideLoader();
        },
        error: function(err) { alert(err.statusText); }
    });
}

function google_getUserFavorites() {
    $.ajax({
        type: "POST",
        url: "/WebServices/Misc.asmx/UserFavorityBusinesses_Get",
        data: "{intCityID:'" + iWSCityID + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            user_favorites = data;
            google_buildUserFavorites();
        },
        error: function(err) { alert(err.statusText) }
    });
}

function google_buildUserFavorites() {
    var data = user_favorites;
    var results = '';

    if (data.length == 0) {
        results = "<div class='noResults'>Brak ulubionych miejsc w tym mieście. Dodaj miejsce powyżej.</div>";
    } else {
        for (var i = 0; i < data.length; i++) {
            results += "<div class='mapResults'>" +
                       "  <div class='mapResultsNameWrap'>" +
                       "    <div class='mapResultsName'><a href='/business.aspx?id=" + data[i].id + "' target='_blank'>" + data[i].name + "</a> <span class='mapResultsType'>(" + data[i].typename + ")</span></div>" +
                       "  </div>" +
                       "  <div class='mapResultsAddress'>" + data[i].address + "</div>" +
                       "  <div class='mapResultsActions'>" +
                       "     <a href='/business.aspx?id=" + data[i].id + "' target='_blank'>strona miejsca</a><span class='sep'></span>" +
                       "     <a href='#' onclick='google_businessFavoriteDelete(" + data[i].id + ");return false;'>usuń z ulubionych</a> " +
                       "  </div>" +
                       "</div>";
            if (i < data.length - 1) results += "<div class='mapResultsSeparator'></div>"
        }
    }
    $("#userFavorites").html(results);
}

function google_businessFavoriteAdd(id) {
    $.ajax({
        type: "POST",
        url: "/WebServices/Misc.asmx/UserFavorityBusinesses_Add",
        data: "{intBusinessID:'" + id + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            if (data.result == 'ok') {
                google_getUserFavorites();
                
                $("#mapInfoText").html("dodane"); setTimeout(function() { $("#mapInfoText").html("") }, 1000);
            } else {
                alert('To miejsce jest już w ulubionych lub twój limit ulubionych miejsc w tym mieście został wyczerpany.');
            }
        },
        error: function(err) { alert(err.statusText) }
    });
}

function google_businessFavoriteDelete(id) {
    $.ajax({
        type: "POST",
        url: "/WebServices/Misc.asmx/UserFavorityBusinesses_Delete",
        data: "{intBusinessID:'" + id + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            google_getUserFavorites();
        }
    });
}

function google_showBusiness(index) {
    var marker = businessMarkers[index];
    map.panTo(marker.getLatLng());
    GEvent.trigger(marker, "click");
    
    if(mapDirections!=null) mapDirections.clear();
    mapDirections = new GDirections(map); //$get("mapSearchDirections")    
    mapDirections.load("from: marker1@" + homeMarker.getLatLng() + " to: marker2@" + marker.getLatLng()); 
}

function google_rebuildSearchMarkers() {
    var zoom = map.getZoom();
    var businessGrid = 40;    
    var data = city_search_results;

    businessMarkers = [];

    for (var i = 0; i < data.length; i++) {
        var gIcon = google_createIcon(1, data);
        var latlng = new GLatLng(data[i].lat, data[i].long);
        var marker = google_createMarker(1, latlng, data[i]);
        businessMarkers.push(marker);

        map.addOverlay(marker);               
    }    
    
    switch (zoom) {
        case 12: businessGrid = 60; break;
        case 13: businessGrid = 30; break;
        case 14: businessGrid = 10; break;
        case 15: businessGrid = 10; break;
        case 16: businessGrid = 1; break;
        case 17: businessGrid = 1; break;
    }
    
    // display clusters
    //businessMarkerClusterer = new MarkerClusterer(map, businessMarkers, { gridSize: businessGrid, styles: maps_icons_businesses });
}

function google_hideLoader() {
    if (mapLoader != null) {
        mapLoader.remove();
        mapLoader = null;
    }
}
function google_bindTriggers() {
    // bind triggers to the map
    var divider = 4;
    
    var bounds = map.getBounds(); var sw = bounds.getSouthWest(); var ne = bounds.getNorthEast();
    var latMin = sw.y - (ne.y - sw.y) / divider; var latMax = ne.y + (ne.y - sw.y) / divider;
    var lngMin = sw.x - (ne.x - sw.x) / divider; var lngMax = ne.x + (ne.x - sw.x) / divider;
        
    GEvent.addListener(map, 'dragend', function() {
        newBounds = map.getBounds(); nSW = newBounds.getSouthWest(); nNE = newBounds.getNorthEast();        
        if(nSW.x < lngMin || nSW.y < latMin || nNE.x > lngMax || nNE.y > latMax) {
            google_rebuildMarkers();
            latMin = nSW.y - (nNE.y - nSW.y) / divider; latMax = nNE.y + (nNE.y - nSW.y) / divider;
            lngMin = nSW.x - (nNE.x - nSW.x) / divider; lngMax = nNE.x + (nNE.x - nSW.x) / divider;
        }
        
    });

    GEvent.addListener(map, 'zoomend', function(oldZoom, newZoom) {
        var allowZoom = true;
        if (newZoom > city_maxZoom) { map.setZoom(city_maxZoom); allowZoom = false; }
        if (newZoom < city_minZoom) { map.setZoom(city_minZoom); allowZoom = false; }

        if(allowZoom) {
            newBounds = map.getBounds(); nSW = newBounds.getSouthWest(); nNE = newBounds.getNorthEast();
            latMin = nSW.y - (nNE.y - nSW.y) / divider; latMax = nNE.y + (nNE.y - nSW.y) / divider;
            lngMin = nSW.x - (nNE.x - nSW.x) / divider; lngMax = nNE.x + (nNE.x - nSW.x) / divider;                   
            google_rebuildMarkers();        
        }
    });    
    
    // bind triggers for filters
    $("#statsUsers, #statsMale, #statsFemale, #statsBusinesses").click(function(e) { 
        var check;
        var orig_Users = city_filterUsers; var orig_Male = city_filterMale; var orig_Female = city_filterFemale;
        
        switch (this.id) {
            case 'statsUsers': check = city_filterUsers; city_filterUsers = !city_filterUsers; break;
            case 'statsMale': check = city_filterMale; city_filterMale = !city_filterMale; break;
            case 'statsFemale': check = city_filterFemale; city_filterFemale = !city_filterFemale; break;
            case 'statsBusinesses': check = city_filterBusinesses; city_filterBusinesses = !city_filterBusinesses; break;
        }                 

        if(orig_Users != city_filterUsers && !city_filterUsers) { city_filterMale = false; $get("statsMale").className = "mapFilterOff"; city_filterFemale = false; $get("statsFemale").className = "mapFilterOff"; } 
        if(orig_Users != city_filterUsers && city_filterUsers) { city_filterMale = true; $get("statsMale").className = "mapFilterOn"; city_filterFemale = true; $get("statsFemale").className = "mapFilterOn"; }                    
        if(city_filterUsers && orig_Male && !city_filterMale && !city_filterFemale) { city_filterMale = true; return; }
        if(city_filterUsers && orig_Female && !city_filterFemale && !city_filterMale) { city_filterFemale = true; return; }
        if((!orig_Male && city_filterMale) || (!orig_Female && city_filterFemale) && !city_filterUsers) { city_filterUsers = true; $get("statsUsers").className = "mapFilterOn"; }

        this.className = (check)?'mapFilterOff':'mapFilterOn';
        google_rebuildMarkers();        
    });

    $("#mapFilters span, #mapFiltersCity span").click(function(e) { 
        var check; var catID = this.id.replace('category','');        
        for (var i=0;i<city_categories.length;i++) {
           cat = city_categories[i];
           if(cat.id == catID) { check = cat.on; cat.on = !cat.on; }
        }        
        this.className = (check)?'mapCategoryEmpty':'mapFilterOn';
        google_rebuildMarkers();        
    });     
    
}

function google_categoriesShowHideToggle() {    
    for (var i = 0; i < city_categories.length; i++) {
        if (!city_places_hidden) {            
            $("#mapFilterBusinessesToggle").html("Pokaż wszystkie miejsca");
            city_categories[i].on = false;
            $get("category" + city_categories[i].id).className = 'mapCategoryEmpty';
        } else {
            $("#mapFilterBusinessesToggle").html("Ukryj wszystkie miejsca");
            city_categories[i].on = true;
            $get("category" + city_categories[i].id).className = 'mapFilterOn';            
        }
    }
    city_places_hidden = !city_places_hidden;
    google_rebuildMarkers();
}

function google_clearMarkers() { 
    map.clearOverlays();
    if(businessMarkerClusterer!=null)businessMarkerClusterer.clearMarkers();
    if(userMarkerClusterer!=null)userMarkerClusterer.clearMarkers();
    business_markersCounter = 0;   
    
    // initialize counter arrays
    for(var i=0;i<100;i++) {city_categories_counters[i] = 0;}
    for(var i=0;i<3;i++) {city_users_counters[i] = 0;}     
}

function google_rebuildMarkers() {
    var bounds = map.getBounds(); var southWest = bounds.getSouthWest(); var northEast = bounds.getNorthEast();    
    var latMin = southWest.lat(); var latMax = northEast.lat();
    var lngMin = southWest.lng(); var lngMax = northEast.lng();  
    var zoom = map.getZoom();
    var userSex = '';
    var businessCategories = '';
    
    if(city_filterMale && !city_filterFemale) { userSex = 'M'; }
    if(!city_filterMale && city_filterFemale) { userSex = 'F'; }
        
    google_showLoader();
    google_clearMarkers();

    // build list of categories to get
    for(var i=0;i<city_categories.length;i++) {
        cat = city_categories[i];
        if(cat.on == 1) { businessCategories += cat.id + ','; }
    }
    if(businessCategories!='') businessCategories = businessCategories.substring(0,businessCategories.length-1);

    //$get("debug").innerHTML = latMin + ' ' + latMax + ' ' + lngMin + ' ' + lngMax;
    //$("#debug").html("{intUserID:'"+iWSUID+"',intCityID:'"+iWSCityID+"',blnIncludeUsers:'"+city_filterUsers+"',blnIncludeBusinesses:'"+city_filterBusinesses+"',strUserSex:'"+userSex+"',strBusinessTypes:'"+businessCategories+"',latMin:'"+latMin+"',latMax:'"+latMax+"',longMin:'"+lngMin+"',longMax:'"+lngMax+"'}");


    $.ajax({
        type: "POST",
        url: "/WebServices/Misc.asmx/CityMapObjects_Get",
        data: "{intUserID:'" + iWSUID + "',intCityID:'" + iWSCityID + "',blnIncludeUsers:'" + city_filterUsers + "',blnIncludeBusinesses:'" + city_filterBusinesses + "',strUserSex:'" + userSex + "',strBusinessTypes:'" + businessCategories + "',latMin:'" + latMin + "',latMax:'" + latMax + "',longMin:'" + lngMin + "',longMax:'" + lngMax + "'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            var users = data[0];
            var businesses = data[1];
            var businessMarkers = [];
            var userMarkers = [];

            for (var i = 0; i < users.length; i++) {
                row = users[i];
                var gIcon = google_createIcon(2, row.sex);
                var latlng = new GLatLng(row.lat, row.lng);
                var marker = google_createMarker(2, latlng, row);
                userMarkers.push(marker);
                user_markersCounter++;
                user_markersLoaded += row.id + "|";
                city_users_counters[0]++;
                city_users_counters[(row.sex == 'M') ? 1 : 2]++;
            }

            for (var i = 0; i < businesses.length; i++) {
                row = businesses[i];
                var gIcon = google_createIcon(1, '');
                var latlng = new GLatLng(row.lat, row.lng);
                var marker = google_createMarker(1, latlng, row);
                businessMarkers.push(marker);
                business_markersLoaded += row.id + "|";
                business_markersCounter++;
                city_categories_counters[row.type]++;
            }

            // figure out the grid
            //$get("debug").innerHTML = zoom;
            var userGrid = 40, businessGrid = 40;
            switch (zoom) {
                case 12: userGrid = 80; businessGrid = 60; break;
                case 13: userGrid = 50; businessGrid = 30; break;
                case 14: userGrid = 10; businessGrid = 10; break;
                case 15: userGrid = 10; businessGrid = 10; break;
                case 16: userGrid = 1; businessGrid = 1; break;
                case 17: userGrid = 1; businessGrid = 1; break;
            }
            // display clusters
            businessMarkerClusterer = new MarkerClusterer(map, businessMarkers, { gridSize: businessGrid, styles: maps_icons_businesses });
            userMarkerClusterer = new MarkerClusterer(map, userMarkers, { gridSize: userGrid, styles: maps_icons_users });

            // refresh map filters
            if (map_build_filters) google_buildMapFilters();
            google_addHomeMarker();
            google_hideLoader();
        },
        complete: function() {  }
        //,error: function(err) { alert(err.statusText); }
    });    
    
}

function google_createMarker(type, point, data) {
    var gIcon = google_createIcon(type, data);          
    var marker = new GMarker(point, {icon: gIcon} );
    GEvent.addListener(marker, "click", function() { 
        if (type==1) google_displayBusinessInfo(marker, data.id)
        else google_displayUserInfo(marker, data.id);
    });
    return marker;
}

function google_displayBusinessInfo(marker, id) {
    google_showLoader();
    $.ajax({
        type: "POST",
        url: "/WebServices/Misc.asmx/CityMapBusiness_Get",
        data: "{intUserID:'"+iWSUID+"',strHash:'"+iWSHID+"',intID:'"+id+"'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            var html = "<div class='mapBusiness'>" +
                       "<div class='mapBusinessName'><a href='" + data.link + "'>" + data.name + "</a></div>" +
                       "<div class='mapBusinessType'>" + data.type + "</div>" +
                       "<div class='mapBusinessAddress'>" + data.address1 + "</div>" +
                       "<div class='mapBusinessPhone'>" + ((data.phone!='')?"tel: " + data.phone:"") + "</div>" +
                       "<div class='mapSeeMore'><a href='" + data.link + "'>Więcej informacji...</a></div>" +
                       "</div>";
            marker.openInfoWindowHtml(html);
        },
        complete: function() { google_hideLoader();}
    });    
}

function google_displayUserInfo(marker, id) {
    google_showLoader();
    $.ajax({
        type: "POST",
        url: "/WebServices/Misc.asmx/CityMapUser_Get",
        data: "{intUserID:'"+iWSUID+"',strHash:'"+iWSHID+"',intCityID:'"+iWSCityID+"',strProfileID:'"+id+"'}",
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function(response) {
            var data = (typeof response.d) == 'string' ? eval('(' + response.d + ')') : response.d;
            
            if(data.hidden=='1') {
                var html = "<div class='mapUser'>" +
                           "<div class='mapUserName'>Użytkownik Ukryty</div>" +
                           "<div class='mapUserHidden'>Aby zobaczyć kto to jest musisz zostać znajomym tego użytkownika. Użyj opcji poniżej aby wysłać wiadomość do tego użytkownika.</div>" +
                           "<div class='mapSeeMore'><a href=\"javascript:jQuery.facebox.url('/SendMessage.aspx?a=" + data.msghash + "',300,500);\">Napisz wiadomość...</a></div>" +
                           "</div>";            
            } else {
                var html = "<div class='mapUser'>" +
                           "<div class='mapUserPicture'><div class='thumbBgSmall'><a href='" + data.link + "'><img class='thumbSmall' src='" + data.picture + "' border=0></a></div></div>" + 
                           "<div class='mapUserName'><a href='" + data.link + "'>" + data.name + "</a></div>" +
                           "<div class='mapSeeMore'><a href='" + data.link + "'>Zobacz profil...</a></div>" +
                           "<div class='mapSeeMore'><a href=\"javascript:jQuery.facebox.url('/SendMessage.aspx?a=" + data.msghash + "',300,500);\">Napisz wiadomość...</a></div>" +
                           "</div>";            
            }
            marker.openInfoWindowHtml(html);
        },
        complete: function() { google_hideLoader();}
    });       
}

function google_createIcon(type, data) {
    var gIcon = new GIcon(G_DEFAULT_ICON);
    gIcon.shadowSize = new GSize(0, 0);

    switch (type) {
        case 0: // home
            gIcon.iconSize = new GSize(22, 32);
            gIcon.iconAnchor = new GPoint(22, 32);        
            gIcon.image = '/Icons/maps/home.png';
            break;
        case 1: // business
            //gIcon.iconSize = new GSize(30, 30);
            //gIcon.iconAnchor = new GPoint(30, 30);
            //gIcon.image = '/images/categories/' + data.type + '.jpg';            
            gIcon.iconSize = new GSize(20, 20);
            gIcon.iconAnchor = new GPoint(20, 20);                   
            gIcon.image = '/Icons/maps/place.png';            
            break;
        case 2: // user
            gIcon.iconSize = new GSize(20, 20);
            gIcon.iconAnchor = new GPoint(20, 20);        
            if(data.sex=='M')gIcon.image = '/Icons/maps/male.png'
            else gIcon.image = '/Icons/maps/female.png'
            break;
    }    
    return gIcon;
}

function google_buildMapFilters() {
    var business_categories = '';
    
    for (var i=0;i<city_categories.length;i++) {
        var category = city_categories[i];        
        var counter = city_categories_counters[category.id];
        var obj = $get("category" + category.id);
        
        if (counter==0) {
            obj.innerHTML = category.name;
            obj.className = 'mapCategoryEmpty';
        } else {
            obj.innerHTML = category.name + ' (' + counter + ')';   
            obj.className = 'mapFilterOn';   
        }
    }
    $get("statsUsers").innerHTML = 'Użytkownicy (' + city_users_counters[0] + ')';
    $get("statsMale").innerHTML = 'Mężczyzna (' + city_users_counters[1] + ')';
    $get("statsFemale").innerHTML = 'Kobieta (' + city_users_counters[2] + ')';
    $get("statsBusinesses").innerHTML = 'Miejsca (' + business_markersCounter + ')';    
}

function google_loadMap(address, vObjID, vSmall) {
    if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById(vObjID));        
        if(vSmall)map.addControl(new GSmallMapControl());
        else map.addControl(new GLargeMapControl());
        
        geocoder = new GClientGeocoder();        
        if (geocoder) {
            geocoder.getLatLng( address,            
            function(point) {
                if (!point) {
                     alert("Nie znaleziono adresu (" + address + ")");
                } else {
                    map.clearOverlays()
                    map.setCenter(point, 12);
                    var marker = new GMarker(point, {draggable: false});
                    map.addOverlay(marker); 
                }
            }
            );
        }        
    }
}


function google_MoveTo2(id, lat, lng) {
    var map = new GMap2(document.getElementById(id));
    map.addControl(new GSmallMapControl());
    var center = new GLatLng(lat, lng);
    map.setCenter(center, 11);
    //geocoder = new GClientGeocoder();
    //var marker = new GMarker(center, { draggable: true });
    //map.addOverlay(marker);
}

function google_MoveTo(lat, lng) {
    var map = new GMap2(document.getElementById("map"));
    map.addControl(new GSmallMapControl());
   // map.addControl(new GMapTypeControl());
    var center = new GLatLng(lat, lng);
    map.setCenter(center, 5);
    geocoder = new GClientGeocoder();
    var marker = new GMarker(center, {draggable: true});
    map.addOverlay(marker);
}

function google_loadMapWithMarker(oLatID, oLongID, lat, lng, zoom, altMapID, altDraggable) {
    var mapID = "map";
    var isDraggable = true;
    if(altMapID!=undefined) mapID = altMapID;
    if(altDraggable!=undefined) isDraggable = altDraggable;

    if (GBrowserIsCompatible()) {
        var map = new GMap2($get(mapID));
        map.addControl(new GSmallMapControl());

        var center = new GLatLng(lat, lng);
        map.setCenter(center, zoom);
        geocoder = new GClientGeocoder();
        var marker = new GMarker(center, {draggable: isDraggable});
        map.addOverlay(marker);
        
        GEvent.addListener(marker, "dragend", function() {
            var point = marker.getPoint();
            map.panTo(point);
            $get(oLatID).value = point.lat().toFixed(5);
            $get(oLongID).value = point.lng().toFixed(5);            
        });      
    }
}

function google_showAddress(address, oLatID, oLongID, zoom) {
    var map = new GMap2(document.getElementById("map"));    
    map.addControl(new GSmallMapControl());

    if (geocoder) {
        geocoder.getLatLng(
        address,
        function(point) {
            if (!point) {
                alert("Nie znaleziono adres (" + address + "). Użyj mapki aby ustawić czerwony marker na żądaną lokację. Ten właśnie marker wskaże dokładnie gdzie się znajduje to miejsce.");
                setTimeout(google_doRawSearch, 1000);                    
            } else {
                $get(oLatID).value = point.lat().toFixed(5);
                $get(oLongID).value = point.lng().toFixed(5);
                map.clearOverlays()
                map.setCenter(point, zoom);
                var marker = new GMarker(point, {draggable: true});
                map.addOverlay(marker);
                
                GEvent.addListener(marker, "dragend", function() {
                    var pt = marker.getPoint();
                    map.panTo(pt);
                    $get(oLatID).value = pt.lat().toFixed(5);
                    $get(oLongID).value = pt.lng().toFixed(5);
                });                                                                                         
            }          
        });                     
    }
}

function map_Collapse(objTR, objButton) {
    if (!main_map_expanded) {        
        objButton.src = "/icons/collapse_big2.png";
        $(objTR).fadeIn(800);
        if (!map_initialized) {
            google_initializeMap('mapPicture', true);
        }
    } else {        
        objButton.src = "/icons/expand_big2.png";
        $(objTR).fadeOut(200);
    }
    main_map_expanded = !main_map_expanded;
    notification_Update('main_map', (main_map_expanded)?'1':'0' );
}
/**
 * @name MarkerClusterer
 * @version 1.0
 * @author Xiaoxi Wu
 * @copyright (c) 2009 Xiaoxi Wu
 * @fileoverview
 * This javascript library creates and manages per-zoom-level 
 * clusters for large amounts of markers (hundreds or thousands).
 * This library was inspired by the <a href="http://www.maptimize.com">
 * Maptimize</a> hosted clustering solution.
 * <br /><br/>
 * <b>How it works</b>:<br/>
 * The <code>MarkerClusterer</code> will group markers into clusters according to
 * their distance from a cluster's center. When a marker is added,
 * the marker cluster will find a position in all the clusters, and 
 * if it fails to find one, it will create a new cluster with the marker.
 * The number of markers in a cluster will be displayed
 * on the cluster marker. When the map viewport changes,
 * <code>MarkerClusterer</code> will destroy the clusters in the viewport 
 * and regroup them into new clusters.
 *
 */

/*
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */


/**
 * @name MarkerClustererOptions
 * @class This class represents optional arguments to the {@link MarkerClusterer}
 * constructor.
 * @property {Number} [maxZoom] The max zoom level monitored by a
 * marker cluster. If not given, the marker cluster assumes the maximum map
 * zoom level. When maxZoom is reached or exceeded all markers will be shown
 * without cluster.
 * @property {Number} [gridSize=60] The grid size of a cluster in pixel. Each
 * cluster will be a square. If you want the algorithm to run faster, you can set
 * this value larger.
 * @property {Array of MarkerStyleOptions} [styles]
 * Custom styles for the cluster markers.
 * The array should be ordered according to increasing cluster size,
 * with the style for the smallest clusters first, and the style for the
 * largest clusters last.
 */

/**
 * @name MarkerStyleOptions
 * @class An array of these is passed into the {@link MarkerClustererOptions}
 * styles option.
 * @property {String} [url] Image url.
 * @property {Number} [height] Image height.
 * @property {Number} [height] Image width.
 * @property {Array of Number} [opt_anchor] Anchor for label text, like [24, 12]. 
 *    If not set, the text will align center and middle.
 * @property {String} [opt_textColor="black"] Text color.
 */

/**
 * Creates a new MarkerClusterer to cluster markers on the map.
 *
 * @constructor
 * @param {GMap2} map The map that the markers should be added to.
 * @param {Array of GMarker} opt_markers Initial set of markers to be clustered.
 * @param {MarkerClustererOptions} opt_opts A container for optional arguments.
 */
function MarkerClusterer(map, opt_markers, opt_opts) {
  // private members
  var clusters_ = [];
  var map_ = map;
  var maxZoom_ = null;
  var me_ = this;
  var gridSize_ = 60;
  var sizes = [53, 56, 66, 78, 90];
  var styles_ = [];
  var leftMarkers_ = [];
  var mcfn_ = null;

  var i = 0;
  for (i = 1; i <= 5; ++i) {
    styles_.push({
      'url': "http://gmaps-utility-library.googlecode.com/svn/trunk/markerclusterer/images/m" + i + ".png",
      'height': sizes[i - 1],
      'width': sizes[i - 1]
    });
  }

  if (typeof opt_opts === "object" && opt_opts !== null) {
    if (typeof opt_opts.gridSize === "number" && opt_opts.gridSize > 0) {
      gridSize_ = opt_opts.gridSize;
    }
    if (typeof opt_opts.maxZoom === "number") {
      maxZoom_ = opt_opts.maxZoom;
    }
    if (typeof opt_opts.styles === "object" && opt_opts.styles !== null && opt_opts.styles.length !== 0) {
      styles_ = opt_opts.styles;
    }
  }

  /**
   * When we add a marker, the marker may not in the viewport of map, then we don't deal with it, instead
   * we add the marker into a array called leftMarkers_. When we reset MarkerClusterer we should add the
   * leftMarkers_ into MarkerClusterer.
   */
  function addLeftMarkers_() {
    if (leftMarkers_.length === 0) {
      return;
    }
    var leftMarkers = [];
    for (i = 0; i < leftMarkers_.length; ++i) {
      me_.addMarker(leftMarkers_[i], true, null, null, true);
    }
    leftMarkers_ = leftMarkers;
  }

  /**
   * Get cluster marker images of this marker cluster. Mostly used by {@link Cluster}
   * @private
   * @return {Array of String}
   */
  this.getStyles_ = function () {
    return styles_;
  };

  /**
   * Remove all markers from MarkerClusterer.
   */
  this.clearMarkers = function () {
    for (var i = 0; i < clusters_.length; ++i) {
      if (typeof clusters_[i] !== "undefined" && clusters_[i] !== null) {
        clusters_[i].clearMarkers();
      }
    }
    clusters_ = [];
    leftMarkers_ = [];
    GEvent.removeListener(mcfn_);
  };

  /**
   * Check a marker, whether it is in current map viewport.
   * @private
   * @return {Boolean} if it is in current map viewport
   */
  function isMarkerInViewport_(marker) {
    return map_.getBounds().containsLatLng(marker.getLatLng());
  }

  /**
   * When reset MarkerClusterer, there will be some markers get out of its cluster.
   * These markers should be add to new clusters.
   * @param {Array of GMarker} markers Markers to add.
   */
  function reAddMarkers_(markers) {
    var len = markers.length;
    var clusters = [];
    for (var i = len - 1; i >= 0; --i) {
      me_.addMarker(markers[i].marker, true, markers[i].isAdded, clusters, true);
    }
    addLeftMarkers_();
  }

  /**
   * Add a marker.
   * @private
   * @param {GMarker} marker Marker you want to add
   * @param {Boolean} opt_isNodraw Whether redraw the cluster contained the marker
   * @param {Boolean} opt_isAdded Whether the marker is added to map. Never use it.
   * @param {Array of Cluster} opt_clusters Provide a list of clusters, the marker
   *     cluster will only check these cluster where the marker should join.
   */
  this.addMarker = function (marker, opt_isNodraw, opt_isAdded, opt_clusters, opt_isNoCheck) {
    if (opt_isNoCheck !== true) {
      if (!isMarkerInViewport_(marker)) {
        leftMarkers_.push(marker);
        return;
      }
    }

    var isAdded = opt_isAdded;
    var clusters = opt_clusters;
    var pos = map_.fromLatLngToDivPixel(marker.getLatLng());

    if (typeof isAdded !== "boolean") {
      isAdded = false;
    }
    if (typeof clusters !== "object" || clusters === null) {
      clusters = clusters_;
    }

    var length = clusters.length;
    var cluster = null;
    for (var i = length - 1; i >= 0; i--) {
      cluster = clusters[i];
      var center = cluster.getCenter();
      if (center === null) {
        continue;
      }
      center = map_.fromLatLngToDivPixel(center);

      // Found a cluster which contains the marker.
      if (pos.x >= center.x - gridSize_ && pos.x <= center.x + gridSize_ &&
          pos.y >= center.y - gridSize_ && pos.y <= center.y + gridSize_) {
        cluster.addMarker({
          'isAdded': isAdded,
          'marker': marker
        });
        if (!opt_isNodraw) {
          cluster.redraw_();
        }
        return;
      }
    }

    // No cluster contain the marker, create a new cluster.
    cluster = new Cluster(this, map);
    cluster.addMarker({
      'isAdded': isAdded,
      'marker': marker
    });
    if (!opt_isNodraw) {
      cluster.redraw_();
    }

    // Add this cluster both in clusters provided and clusters_
    clusters.push(cluster);
    if (clusters !== clusters_) {
      clusters_.push(cluster);
    }
  };

  /**
   * Remove a marker.
   *
   * @param {GMarker} marker The marker you want to remove.
   */

  this.removeMarker = function (marker) {
    for (var i = 0; i < clusters_.length; ++i) {
      if (clusters_[i].remove(marker)) {
        clusters_[i].redraw_();
        return;
      }
    }
  };

  /**
   * Redraw all clusters in viewport.
   */
  this.redraw_ = function () {
    var clusters = this.getClustersInViewport_();
    for (var i = 0; i < clusters.length; ++i) {
      clusters[i].redraw_(true);
    }
  };

  /**
   * Get all clusters in viewport.
   * @return {Array of Cluster}
   */
  this.getClustersInViewport_ = function () {
    var clusters = [];
    var curBounds = map_.getBounds();
    for (var i = 0; i < clusters_.length; i ++) {
      if (clusters_[i].isInBounds(curBounds)) {
        clusters.push(clusters_[i]);
      }
    }
    return clusters;
  };

  /**
   * Get max zoom level.
   * @private
   * @return {Number}
   */
  this.getMaxZoom_ = function () {
    return maxZoom_;
  };

  /**
   * Get map object.
   * @private
   * @return {GMap2}
   */
  this.getMap_ = function () {
    return map_;
  };

  /**
   * Get grid size
   * @private
   * @return {Number}
   */
  this.getGridSize_ = function () {
    return gridSize_;
  };

  /**
   * Get total number of markers.
   * @return {Number}
   */
  this.getTotalMarkers = function () {
    var result = 0;
    for (var i = 0; i < clusters_.length; ++i) {
      result += clusters_[i].getTotalMarkers();
    }
    return result;
  };

  /**
   * Get total number of clusters.
   * @return {int}
   */
  this.getTotalClusters = function () {
    return clusters_.length;
  };

  /**
   * Collect all markers of clusters in viewport and regroup them.
   */
  this.resetViewport = function () {
    var clusters = this.getClustersInViewport_();
    var tmpMarkers = [];
    var removed = 0;

    for (var i = 0; i < clusters.length; ++i) {
      var cluster = clusters[i];
      var oldZoom = cluster.getCurrentZoom();
      if (oldZoom === null) {
        continue;
      }
      var curZoom = map_.getZoom();
      if (curZoom !== oldZoom) {

        // If the cluster zoom level changed then destroy the cluster
        // and collect its markers.
        var mks = cluster.getMarkers();
        for (var j = 0; j < mks.length; ++j) {
          var newMarker = {
            'isAdded': false,
            'marker': mks[j].marker
          };
          tmpMarkers.push(newMarker);
        }
        cluster.clearMarkers();
        removed++;
        for (j = 0; j < clusters_.length; ++j) {
          if (cluster === clusters_[j]) {
            clusters_.splice(j, 1);
          }
        }
      }
    }

    // Add the markers collected into marker cluster to reset
    reAddMarkers_(tmpMarkers);
    this.redraw_();
  };


  /**
   * Add a set of markers.
   *
   * @param {Array of GMarker} markers The markers you want to add.
   */
  this.addMarkers = function (markers) {
    for (var i = 0; i < markers.length; ++i) {
      this.addMarker(markers[i], true);
    }
    this.redraw_();
  };

  // initialize
  if (typeof opt_markers === "object" && opt_markers !== null) {
    this.addMarkers(opt_markers);
  }

  // when map move end, regroup.
  mcfn_ = GEvent.addListener(map_, "moveend", function () {
    me_.resetViewport();
  });
}

/**
 * Create a cluster to collect markers.
 * A cluster includes some markers which are in a block of area.
 * If there are more than one markers in cluster, the cluster
 * will create a {@link ClusterMarker_} and show the total number
 * of markers in cluster.
 *
 * @constructor
 * @private
 * @param {MarkerClusterer} markerClusterer The marker cluster object
 */
function Cluster(markerClusterer) {
  var center_ = null;
  var markers_ = [];
  var markerClusterer_ = markerClusterer;
  var map_ = markerClusterer.getMap_();
  var clusterMarker_ = null;
  var zoom_ = map_.getZoom();

  /**
   * Get markers of this cluster.
   *
   * @return {Array of GMarker}
   */
  this.getMarkers = function () {
    return markers_;
  };

  /**
   * If this cluster intersects certain bounds.
   *
   * @param {GLatLngBounds} bounds A bounds to test
   * @return {Boolean} Is this cluster intersects the bounds
   */
  this.isInBounds = function (bounds) {
    if (center_ === null) {
      return false;
    }

    if (!bounds) {
      bounds = map_.getBounds();
    }
    var sw = map_.fromLatLngToDivPixel(bounds.getSouthWest());
    var ne = map_.fromLatLngToDivPixel(bounds.getNorthEast());

    var centerxy = map_.fromLatLngToDivPixel(center_);
    var inViewport = true;
    var gridSize = markerClusterer.getGridSize_();
    if (zoom_ !== map_.getZoom()) {
      var dl = map_.getZoom() - zoom_;
      gridSize = Math.pow(2, dl) * gridSize;
    }
    if (ne.x !== sw.x && (centerxy.x + gridSize < sw.x || centerxy.x - gridSize > ne.x)) {
      inViewport = false;
    }
    if (inViewport && (centerxy.y + gridSize < ne.y || centerxy.y - gridSize > sw.y)) {
      inViewport = false;
    }
    return inViewport;
  };

  /**
   * Get cluster center.
   *
   * @return {GLatLng}
   */
  this.getCenter = function () {
    return center_;
  };

  /**
   * Add a marker.
   *
   * @param {Object} marker An object of marker you want to add:
   *   {Boolean} isAdded If the marker is added on map.
   *   {GMarker} marker The marker you want to add.
   */
  this.addMarker = function (marker) {
    if (center_ === null) {
      /*var pos = marker['marker'].getLatLng();
       pos = map.fromLatLngToContainerPixel(pos);
       pos.x = parseInt(pos.x - pos.x % (GRIDWIDTH * 2) + GRIDWIDTH);
       pos.y = parseInt(pos.y - pos.y % (GRIDWIDTH * 2) + GRIDWIDTH);
       center = map.fromContainerPixelToLatLng(pos);*/
      center_ = marker.marker.getLatLng();
    }
    markers_.push(marker);
  };

  /**
   * Remove a marker from cluster.
   *
   * @param {GMarker} marker The marker you want to remove.
   * @return {Boolean} Whether find the marker to be removed.
   */
  this.removeMarker = function (marker) {
    for (var i = 0; i < markers_.length; ++i) {
      if (marker === markers_[i].marker) {
        if (markers_[i].isAdded) {
          map_.removeOverlay(markers_[i].marker);
        }
        markers_.splice(i, 1);
        return true;
      }
    }
    return false;
  };

  /**
   * Get current zoom level of this cluster.
   * Note: the cluster zoom level and map zoom level not always the same.
   *
   * @return {Number}
   */
  this.getCurrentZoom = function () {
    return zoom_;
  };

  /**
   * Redraw a cluster.
   * @private
   * @param {Boolean} isForce If redraw by force, no matter if the cluster is
   *     in viewport.
   */
  this.redraw_ = function (isForce) {
    if (!isForce && !this.isInBounds()) {
      return;
    }

    // Set cluster zoom level.
    zoom_ = map_.getZoom();
    var i = 0;
    var mz = markerClusterer.getMaxZoom_();
    if (mz === null) {
      mz = map_.getCurrentMapType().getMaximumResolution();
    }
    if (zoom_ >= mz || this.getTotalMarkers() === 1) {

      // If current zoom level is beyond the max zoom level or the cluster
      // have only one marker, the marker(s) in cluster will be showed on map.
      for (i = 0; i < markers_.length; ++i) {
        if (markers_[i].isAdded) {
          if (markers_[i].marker.isHidden()) {
            markers_[i].marker.show();
          }
        } else {
          map_.addOverlay(markers_[i].marker);
          markers_[i].isAdded = true;
        }
      }
      if (clusterMarker_ !== null) {
        clusterMarker_.hide();
      }
    } else {
      // Else add a cluster marker on map to show the number of markers in
      // this cluster.
      for (i = 0; i < markers_.length; ++i) {
        if (markers_[i].isAdded && (!markers_[i].marker.isHidden())) {
          markers_[i].marker.hide();
        }
      }
      if (clusterMarker_ === null) {
        clusterMarker_ = new ClusterMarker_(center_, this.getTotalMarkers(), markerClusterer_.getStyles_(), markerClusterer_.getGridSize_());
        map_.addOverlay(clusterMarker_);
      } else {
        if (clusterMarker_.isHidden()) {
          clusterMarker_.show();
        }
        clusterMarker_.redraw(true);
      }
    }
  };

  /**
   * Remove all the markers from this cluster.
   */
  this.clearMarkers = function () {
    if (clusterMarker_ !== null) {
      map_.removeOverlay(clusterMarker_);
    }
    for (var i = 0; i < markers_.length; ++i) {
      if (markers_[i].isAdded) {
        map_.removeOverlay(markers_[i].marker);
      }
    }
    markers_ = [];
  };

  /**
   * Get number of markers.
   * @return {Number}
   */
  this.getTotalMarkers = function () {
    return markers_.length;
  };
}

/**
 * ClusterMarker_ creates a marker that shows the number of markers that
 * a cluster contains.
 *
 * @constructor
 * @private
 * @param {GLatLng} latlng Marker's lat and lng.
 * @param {Number} count Number to show.
 * @param {Array of Object} styles The image list to be showed:
 *   {String} url Image url.
 *   {Number} height Image height.
 *   {Number} width Image width.
 *   {Array of Number} anchor Text anchor of image left and top.
 *   {String} textColor text color.
 * @param {Number} padding Padding of marker center.
 */
function ClusterMarker_(latlng, count, styles, padding) {
  var index = 0;
  var dv = count;
  while (dv !== 0) {
    dv = parseInt(dv / 10, 10);
    index ++;
  }

  if (styles.length < index) {
    index = styles.length;
  }
  this.url_ = styles[index - 1].url;
  this.height_ = styles[index - 1].height;
  this.width_ = styles[index - 1].width;
  this.textColor_ = styles[index - 1].opt_textColor;
  this.anchor_ = styles[index - 1].opt_anchor;
  this.latlng_ = latlng;
  this.index_ = index;
  this.styles_ = styles;
  this.text_ = count;
  this.padding_ = padding;
}

//ClusterMarker_.prototype = new GOverlay();

/**
 * Initialize cluster marker.
 * @private
 */
ClusterMarker_.prototype.initialize = function (map) {
  this.map_ = map;
  var div = document.createElement("div");
  var latlng = this.latlng_;
  var pos = map.fromLatLngToDivPixel(latlng);
  pos.x -= parseInt(this.width_ / 2, 10);
  pos.y -= parseInt(this.height_ / 2, 10);
  var mstyle = "";
  if (document.all) {
    mstyle = 'filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale,src="' + this.url_ + '");';
  } else {
    mstyle = "background:url(" + this.url_ + ");";
  }
  if (typeof this.anchor_ === "object") {
    if (typeof this.anchor_[0] === "number" && this.anchor_[0] > 0 && this.anchor_[0] < this.height_) {
      mstyle += 'height:' + (this.height_ - this.anchor_[0]) + 'px;padding-top:' + this.anchor_[0] + 'px;';
    } else {
      mstyle += 'height:' + this.height_ + 'px;line-height:' + this.height_ + 'px;';
    }
    if (typeof this.anchor_[1] === "number" && this.anchor_[1] > 0 && this.anchor_[1] < this.width_) {
      mstyle += 'width:' + (this.width_ - this.anchor_[1]) + 'px;padding-left:' + this.anchor_[1] + 'px;';
    } else {
      mstyle += 'width:' + this.width_ + 'px;text-align:center;';
    }
  } else {
    mstyle += 'height:' + this.height_ + 'px;line-height:' + this.height_ + 'px;';
    mstyle += 'width:' + this.width_ + 'px;text-align:center;';
  }
  var txtColor = this.textColor_ ? this.textColor_ : 'black';

  div.style.cssText = mstyle + 'cursor:pointer;top:' + pos.y + "px;left:" +
      pos.x + "px;color:" + txtColor +  ";position:absolute;font-size:10px;" +
      'font-family:tahoma,sans-serif;font-weight:bold';
  div.innerHTML = this.text_;
  map.getPane(G_MAP_MAP_PANE).appendChild(div);
  var padding = this.padding_;
  GEvent.addDomListener(div, "click", function () {
    var pos = map.fromLatLngToDivPixel(latlng);
    var sw = new GPoint(pos.x - padding, pos.y + padding);
    sw = map.fromDivPixelToLatLng(sw);
    var ne = new GPoint(pos.x + padding, pos.y - padding);
    ne = map.fromDivPixelToLatLng(ne);
    var zoom = map.getBoundsZoomLevel(new GLatLngBounds(sw, ne), map.getSize());
    map.setCenter(latlng, zoom);
  });
  this.div_ = div;
};

/**
 * Remove this overlay.
 * @private
 */
ClusterMarker_.prototype.remove = function () {
  this.div_.parentNode.removeChild(this.div_);
};

/**
 * Copy this overlay.
 * @private
 */
ClusterMarker_.prototype.copy = function () {
  return new ClusterMarker_(this.latlng_, this.index_, this.text_, this.styles_, this.padding_);
};

/**
 * Redraw this overlay.
 * @private
 */
ClusterMarker_.prototype.redraw = function (force) {
  if (!force) {
    return;
  }
  var pos = this.map_.fromLatLngToDivPixel(this.latlng_);
  pos.x -= parseInt(this.width_ / 2, 10);
  pos.y -= parseInt(this.height_ / 2, 10);
  this.div_.style.top =  pos.y + "px";
  this.div_.style.left = pos.x + "px";
};

/**
 * Hide this cluster marker.
 */
ClusterMarker_.prototype.hide = function () {
  this.div_.style.display = "none";
};

/**
 * Show this cluster marker.
 */
ClusterMarker_.prototype.show = function () {
  this.div_.style.display = "";
};

/**
 * Get whether the cluster marker is hidden.
 * @return {Boolean}
 */
ClusterMarker_.prototype.isHidden = function () {
  return this.div_.style.display === "none";
};

jQuery.fn.highlight = function(pat) {
    function innerHighlight(node, pat) {
        var skip = 0;
        if (node.nodeType == 3) {
            var pos = node.data.toUpperCase().indexOf(pat);
            if (pos >= 0) {
                var spannode = document.createElement('span');
                spannode.className = 'highlight';
                var middlebit = node.splitText(pos);
                var endbit = middlebit.splitText(pat.length);
                var middleclone = middlebit.cloneNode(true);
                spannode.appendChild(middleclone);
                middlebit.parentNode.replaceChild(spannode, middlebit);
                skip = 1;
            }
        }
        else if (node.nodeType == 1 && node.childNodes && !/(script|style)/i.test(node.tagName)) {
            for (var i = 0; i < node.childNodes.length; ++i) {
                i += innerHighlight(node.childNodes[i], pat);
            }
        }
        return skip;
    }
    return this.each(function() {
        innerHighlight(this, pat.toUpperCase());
    });
};

jQuery.fn.removeHighlight = function() {
    return this.find("span.highlight").each(function() {
        this.parentNode.firstChild.nodeName;
        with (this.parentNode) {
            replaceChild(this.firstChild, this);
            normalize();
        }
    }).end();
};

/**
 *
 * Color picker
 * Author: Stefan Petre www.eyecon.ro
 * 
 * Dual licensed under the MIT and GPL licenses
 * 
 */
(function ($) {
	var ColorPicker = function () {
		var
			ids = {},
			inAction,
			charMin = 65,
			visible,
			tpl = '<div class="colorpicker"><div class="colorpicker_color"><div><div></div></div></div><div class="colorpicker_hue"><div></div></div><div class="colorpicker_new_color"></div><div class="colorpicker_current_color"></div><div class="colorpicker_hex"><input type="text" maxlength="6" size="6" /></div><div class="colorpicker_rgb_r colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_g colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_rgb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_h colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_s colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_hsb_b colorpicker_field"><input type="text" maxlength="3" size="3" /><span></span></div><div class="colorpicker_submit"></div></div>',
			defaults = {
				eventName: 'click',
				onShow: function () {},
				onBeforeShow: function(){},
				onHide: function () {},
				onChange: function () {},
				onSubmit: function () {},
				color: 'ff0000',
				livePreview: true,
				flat: false
			},
			fillRGBFields = function  (hsb, cal) {
				var rgb = HSBToRGB(hsb);
				$(cal).data('colorpicker').fields
					.eq(1).val(rgb.r).end()
					.eq(2).val(rgb.g).end()
					.eq(3).val(rgb.b).end();
			},
			fillHSBFields = function  (hsb, cal) {
				$(cal).data('colorpicker').fields
					.eq(4).val(hsb.h).end()
					.eq(5).val(hsb.s).end()
					.eq(6).val(hsb.b).end();
			},
			fillHexFields = function (hsb, cal) {
				$(cal).data('colorpicker').fields
					.eq(0).val(HSBToHex(hsb)).end();
			},
			setSelector = function (hsb, cal) {
				$(cal).data('colorpicker').selector.css('backgroundColor', '#' + HSBToHex({h: hsb.h, s: 100, b: 100}));
				$(cal).data('colorpicker').selectorIndic.css({
					left: parseInt(150 * hsb.s/100, 10),
					top: parseInt(150 * (100-hsb.b)/100, 10)
				});
			},
			setHue = function (hsb, cal) {
				$(cal).data('colorpicker').hue.css('top', parseInt(150 - 150 * hsb.h/360, 10));
			},
			setCurrentColor = function (hsb, cal) {
				$(cal).data('colorpicker').currentColor.css('backgroundColor', '#' + HSBToHex(hsb));
			},
			setNewColor = function (hsb, cal) {
				$(cal).data('colorpicker').newColor.css('backgroundColor', '#' + HSBToHex(hsb));
			},
			keyDown = function (ev) {
				var pressedKey = ev.charCode || ev.keyCode || -1;
				if ((pressedKey > charMin && pressedKey <= 90) || pressedKey == 32) {
					return false;
				}
				var cal = $(this).parent().parent();
				if (cal.data('colorpicker').livePreview === true) {
					change.apply(this);
				}
			},
			change = function (ev) {
				var cal = $(this).parent().parent(), col;
				if (this.parentNode.className.indexOf('_hex') > 0) {
					cal.data('colorpicker').color = col = HexToHSB(fixHex(this.value));
				} else if (this.parentNode.className.indexOf('_hsb') > 0) {
					cal.data('colorpicker').color = col = fixHSB({
						h: parseInt(cal.data('colorpicker').fields.eq(4).val(), 10),
						s: parseInt(cal.data('colorpicker').fields.eq(5).val(), 10),
						b: parseInt(cal.data('colorpicker').fields.eq(6).val(), 10)
					});
				} else {
					cal.data('colorpicker').color = col = RGBToHSB(fixRGB({
						r: parseInt(cal.data('colorpicker').fields.eq(1).val(), 10),
						g: parseInt(cal.data('colorpicker').fields.eq(2).val(), 10),
						b: parseInt(cal.data('colorpicker').fields.eq(3).val(), 10)
					}));
				}
				if (ev) {
					fillRGBFields(col, cal.get(0));
					fillHexFields(col, cal.get(0));
					fillHSBFields(col, cal.get(0));
				}
				setSelector(col, cal.get(0));
				setHue(col, cal.get(0));
				setNewColor(col, cal.get(0));
				cal.data('colorpicker').onChange.apply(cal, [col, HSBToHex(col), HSBToRGB(col)]);
			},
			blur = function (ev) {
				var cal = $(this).parent().parent();
				cal.data('colorpicker').fields.parent().removeClass('colorpicker_focus');
			},
			focus = function () {
				charMin = this.parentNode.className.indexOf('_hex') > 0 ? 70 : 65;
				$(this).parent().parent().data('colorpicker').fields.parent().removeClass('colorpicker_focus');
				$(this).parent().addClass('colorpicker_focus');
			},
			downIncrement = function (ev) {
				var field = $(this).parent().find('input').focus();
				var current = {
					el: $(this).parent().addClass('colorpicker_slider'),
					max: this.parentNode.className.indexOf('_hsb_h') > 0 ? 360 : (this.parentNode.className.indexOf('_hsb') > 0 ? 100 : 255),
					y: ev.pageY,
					field: field,
					val: parseInt(field.val(), 10),
					preview: $(this).parent().parent().data('colorpicker').livePreview					
				};
				$(document).bind('mouseup', current, upIncrement);
				$(document).bind('mousemove', current, moveIncrement);
			},
			moveIncrement = function (ev) {
				ev.data.field.val(Math.max(0, Math.min(ev.data.max, parseInt(ev.data.val + ev.pageY - ev.data.y, 10))));
				if (ev.data.preview) {
					change.apply(ev.data.field.get(0), [true]);
				}
				return false;
			},
			upIncrement = function (ev) {
				change.apply(ev.data.field.get(0), [true]);
				ev.data.el.removeClass('colorpicker_slider').find('input').focus();
				$(document).unbind('mouseup', upIncrement);
				$(document).unbind('mousemove', moveIncrement);
				return false;
			},
			downHue = function (ev) {
				var current = {
					cal: $(this).parent(),
					y: $(this).offset().top
				};
				current.preview = current.cal.data('colorpicker').livePreview;
				$(document).bind('mouseup', current, upHue);
				$(document).bind('mousemove', current, moveHue);
			},
			moveHue = function (ev) {
				change.apply(
					ev.data.cal.data('colorpicker')
						.fields
						.eq(4)
						.val(parseInt(360*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.y))))/150, 10))
						.get(0),
					[ev.data.preview]
				);
				return false;
			},
			upHue = function (ev) {
				fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));
				fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));
				$(document).unbind('mouseup', upHue);
				$(document).unbind('mousemove', moveHue);
				return false;
			},
			downSelector = function (ev) {
				var current = {
					cal: $(this).parent(),
					pos: $(this).offset()
				};
				current.preview = current.cal.data('colorpicker').livePreview;
				$(document).bind('mouseup', current, upSelector);
				$(document).bind('mousemove', current, moveSelector);
			},
			moveSelector = function (ev) {
				change.apply(
					ev.data.cal.data('colorpicker')
						.fields
						.eq(6)
						.val(parseInt(100*(150 - Math.max(0,Math.min(150,(ev.pageY - ev.data.pos.top))))/150, 10))
						.end()
						.eq(5)
						.val(parseInt(100*(Math.max(0,Math.min(150,(ev.pageX - ev.data.pos.left))))/150, 10))
						.get(0),
					[ev.data.preview]
				);
				return false;
			},
			upSelector = function (ev) {
				fillRGBFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));
				fillHexFields(ev.data.cal.data('colorpicker').color, ev.data.cal.get(0));
				$(document).unbind('mouseup', upSelector);
				$(document).unbind('mousemove', moveSelector);
				return false;
			},
			enterSubmit = function (ev) {
				$(this).addClass('colorpicker_focus');
			},
			leaveSubmit = function (ev) {
				$(this).removeClass('colorpicker_focus');
			},
			clickSubmit = function (ev) {
				var cal = $(this).parent();
				var col = cal.data('colorpicker').color;
				cal.data('colorpicker').origColor = col;
				setCurrentColor(col, cal.get(0));
				cal.data('colorpicker').onSubmit(col, HSBToHex(col), HSBToRGB(col), cal.data('colorpicker').el);
			},
			show = function (ev) {
				var cal = $('#' + $(this).data('colorpickerId'));
				cal.data('colorpicker').onBeforeShow.apply(this, [cal.get(0)]);
				var pos = $(this).offset();
				var viewPort = getViewport();
				var top = pos.top + this.offsetHeight;
				var left = pos.left;
				if (top + 176 > viewPort.t + viewPort.h) {
					top -= this.offsetHeight + 176;
				}
				if (left + 356 > viewPort.l + viewPort.w) {
					left -= 356;
				}
				cal.css({left: left + 'px', top: top + 'px'});
				if (cal.data('colorpicker').onShow.apply(this, [cal.get(0)]) != false) {
					cal.show();
				}
				$(document).bind('mousedown', {cal: cal}, hide);
				return false;
			},
			hide = function (ev) {
				if (!isChildOf(ev.data.cal.get(0), ev.target, ev.data.cal.get(0))) {
					if (ev.data.cal.data('colorpicker').onHide.apply(this, [ev.data.cal.get(0)]) != false) {
						ev.data.cal.hide();
					}
					$(document).unbind('mousedown', hide);
				}
			},
			isChildOf = function(parentEl, el, container) {
				if (parentEl == el) {
					return true;
				}
				if (parentEl.contains) {
					return parentEl.contains(el);
				}
				if ( parentEl.compareDocumentPosition ) {
					return !!(parentEl.compareDocumentPosition(el) & 16);
				}
				var prEl = el.parentNode;
				while(prEl && prEl != container) {
					if (prEl == parentEl)
						return true;
					prEl = prEl.parentNode;
				}
				return false;
			},
			getViewport = function () {
				var m = document.compatMode == 'CSS1Compat';
				return {
					l : window.pageXOffset || (m ? document.documentElement.scrollLeft : document.body.scrollLeft),
					t : window.pageYOffset || (m ? document.documentElement.scrollTop : document.body.scrollTop),
					w : window.innerWidth || (m ? document.documentElement.clientWidth : document.body.clientWidth),
					h : window.innerHeight || (m ? document.documentElement.clientHeight : document.body.clientHeight)
				};
			},
			fixHSB = function (hsb) {
				return {
					h: Math.min(360, Math.max(0, hsb.h)),
					s: Math.min(100, Math.max(0, hsb.s)),
					b: Math.min(100, Math.max(0, hsb.b))
				};
			}, 
			fixRGB = function (rgb) {
				return {
					r: Math.min(255, Math.max(0, rgb.r)),
					g: Math.min(255, Math.max(0, rgb.g)),
					b: Math.min(255, Math.max(0, rgb.b))
				};
			},
			fixHex = function (hex) {
				var len = 6 - hex.length;
				if (len > 0) {
					var o = [];
					for (var i=0; i<len; i++) {
						o.push('0');
					}
					o.push(hex);
					hex = o.join('');
				}
				return hex;
			}, 
			HexToRGB = function (hex) {
				var hex = parseInt(((hex.indexOf('#') > -1) ? hex.substring(1) : hex), 16);
				return {r: hex >> 16, g: (hex & 0x00FF00) >> 8, b: (hex & 0x0000FF)};
			},
			HexToHSB = function (hex) {
				return RGBToHSB(HexToRGB(hex));
			},
			RGBToHSB = function (rgb) {
				var hsb = {
					h: 0,
					s: 0,
					b: 0
				};
				var min = Math.min(rgb.r, rgb.g, rgb.b);
				var max = Math.max(rgb.r, rgb.g, rgb.b);
				var delta = max - min;
				hsb.b = max;
				if (max != 0) {
					
				}
				hsb.s = max != 0 ? 255 * delta / max : 0;
				if (hsb.s != 0) {
					if (rgb.r == max) {
						hsb.h = (rgb.g - rgb.b) / delta;
					} else if (rgb.g == max) {
						hsb.h = 2 + (rgb.b - rgb.r) / delta;
					} else {
						hsb.h = 4 + (rgb.r - rgb.g) / delta;
					}
				} else {
					hsb.h = -1;
				}
				hsb.h *= 60;
				if (hsb.h < 0) {
					hsb.h += 360;
				}
				hsb.s *= 100/255;
				hsb.b *= 100/255;
				return hsb;
			},
			HSBToRGB = function (hsb) {
				var rgb = {};
				var h = Math.round(hsb.h);
				var s = Math.round(hsb.s*255/100);
				var v = Math.round(hsb.b*255/100);
				if(s == 0) {
					rgb.r = rgb.g = rgb.b = v;
				} else {
					var t1 = v;
					var t2 = (255-s)*v/255;
					var t3 = (t1-t2)*(h%60)/60;
					if(h==360) h = 0;
					if(h<60) {rgb.r=t1;	rgb.b=t2; rgb.g=t2+t3}
					else if(h<120) {rgb.g=t1; rgb.b=t2;	rgb.r=t1-t3}
					else if(h<180) {rgb.g=t1; rgb.r=t2;	rgb.b=t2+t3}
					else if(h<240) {rgb.b=t1; rgb.r=t2;	rgb.g=t1-t3}
					else if(h<300) {rgb.b=t1; rgb.g=t2;	rgb.r=t2+t3}
					else if(h<360) {rgb.r=t1; rgb.g=t2;	rgb.b=t1-t3}
					else {rgb.r=0; rgb.g=0;	rgb.b=0}
				}
				return {r:Math.round(rgb.r), g:Math.round(rgb.g), b:Math.round(rgb.b)};
			},
			RGBToHex = function (rgb) {
				var hex = [
					rgb.r.toString(16),
					rgb.g.toString(16),
					rgb.b.toString(16)
				];
				$.each(hex, function (nr, val) {
					if (val.length == 1) {
						hex[nr] = '0' + val;
					}
				});
				return hex.join('');
			},
			HSBToHex = function (hsb) {
				return RGBToHex(HSBToRGB(hsb));
			},
			restoreOriginal = function () {
				var cal = $(this).parent();
				var col = cal.data('colorpicker').origColor;
				cal.data('colorpicker').color = col;
				fillRGBFields(col, cal.get(0));
				fillHexFields(col, cal.get(0));
				fillHSBFields(col, cal.get(0));
				setSelector(col, cal.get(0));
				setHue(col, cal.get(0));
				setNewColor(col, cal.get(0));
			};
		return {
			init: function (opt) {
				opt = $.extend({}, defaults, opt||{});
				if (typeof opt.color == 'string') {
					opt.color = HexToHSB(opt.color);
				} else if (opt.color.r != undefined && opt.color.g != undefined && opt.color.b != undefined) {
					opt.color = RGBToHSB(opt.color);
				} else if (opt.color.h != undefined && opt.color.s != undefined && opt.color.b != undefined) {
					opt.color = fixHSB(opt.color);
				} else {
					return this;
				}
				return this.each(function () {
					if (!$(this).data('colorpickerId')) {
						var options = $.extend({}, opt);
						options.origColor = opt.color;
						var id = 'collorpicker_' + parseInt(Math.random() * 1000);
						$(this).data('colorpickerId', id);
						var cal = $(tpl).attr('id', id);
						if (options.flat) {
							cal.appendTo(this).show();
						} else {
							cal.appendTo(document.body);
						}
						options.fields = cal
											.find('input')
												.bind('keyup', keyDown)
												.bind('change', change)
												.bind('blur', blur)
												.bind('focus', focus);
						cal
							.find('span').bind('mousedown', downIncrement).end()
							.find('>div.colorpicker_current_color').bind('click', restoreOriginal);
						options.selector = cal.find('div.colorpicker_color').bind('mousedown', downSelector);
						options.selectorIndic = options.selector.find('div div');
						options.el = this;
						options.hue = cal.find('div.colorpicker_hue div');
						cal.find('div.colorpicker_hue').bind('mousedown', downHue);
						options.newColor = cal.find('div.colorpicker_new_color');
						options.currentColor = cal.find('div.colorpicker_current_color');
						cal.data('colorpicker', options);
						cal.find('div.colorpicker_submit')
							.bind('mouseenter', enterSubmit)
							.bind('mouseleave', leaveSubmit)
							.bind('click', clickSubmit);
						fillRGBFields(options.color, cal.get(0));
						fillHSBFields(options.color, cal.get(0));
						fillHexFields(options.color, cal.get(0));
						setHue(options.color, cal.get(0));
						setSelector(options.color, cal.get(0));
						setCurrentColor(options.color, cal.get(0));
						setNewColor(options.color, cal.get(0));
						if (options.flat) {
							cal.css({
								position: 'relative',
								display: 'block'
							});
						} else {
							$(this).bind(options.eventName, show);
						}
					}
				});
			},
			showPicker: function() {
				return this.each( function () {
					if ($(this).data('colorpickerId')) {
						show.apply(this);
					}
				});
			},
			hidePicker: function() {
				return this.each( function () {
					if ($(this).data('colorpickerId')) {
						$('#' + $(this).data('colorpickerId')).hide();
					}
				});
			},
			setColor: function(col) {
				if (typeof col == 'string') {
					col = HexToHSB(col);
				} else if (col.r != undefined && col.g != undefined && col.b != undefined) {
					col = RGBToHSB(col);
				} else if (col.h != undefined && col.s != undefined && col.b != undefined) {
					col = fixHSB(col);
				} else {
					return this;
				}
				return this.each(function(){
					if ($(this).data('colorpickerId')) {
						var cal = $('#' + $(this).data('colorpickerId'));
						cal.data('colorpicker').color = col;
						cal.data('colorpicker').origColor = col;
						fillRGBFields(col, cal.get(0));
						fillHSBFields(col, cal.get(0));
						fillHexFields(col, cal.get(0));
						setHue(col, cal.get(0));
						setSelector(col, cal.get(0));
						setCurrentColor(col, cal.get(0));
						setNewColor(col, cal.get(0));
					}
				});
			}
		};
	}();
	$.fn.extend({
		ColorPicker: ColorPicker.init,
		ColorPickerHide: ColorPicker.hidePicker,
		ColorPickerShow: ColorPicker.showPicker,
		ColorPickerSetColor: ColorPicker.setColor
	});
})(jQuery)
/* http://keith-wood.name/countdown.html
Countdown for jQuery v1.5.4.
Written by Keith Wood (kbwood{at}iinet.com.au) January 2008.
Dual licensed under the GPL (http://dev.jquery.com/browser/trunk/jquery/GPL-LICENSE.txt) and 
MIT (http://dev.jquery.com/browser/trunk/jquery/MIT-LICENSE.txt) licenses. 
Please attribute the author if you use it. */

eval(function(p, a, c, k, e, r) { e = function(c) { return (c < a ? '' : e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36)) }; if (!''.replace(/^/, String)) { while (c--) r[e(c)] = k[c] || e(c); k = [function(e) { return r[e] } ]; e = function() { return '\\w+' }; c = 1 }; while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b', 'g'), k[c]); return p } ('(x($){x 1d(){8.1x=[];8.1x[\'\']={1e:[\'2q\',\'2r\',\'2s\',\'2t\',\'2u\',\'2v\',\'2w\'],2x:[\'2y\',\'2z\',\'2A\',\'2B\',\'2C\',\'2D\',\'2E\'],1f:[\'y\',\'m\',\'w\',\'d\'],1y:\':\',1O:1a};8.1g={1P:A,1Q:A,1R:A,1S:A,1T:\'2F\',1h:\'\',1U:1a,1z:\'\',1V:\'\',1W:\'\',1X:1a,1Y:A,1Z:A};$.1p(8.1g,8.1x[\'\'])}t s=\'G\';t Y=0;t O=1;t W=2;t D=3;t H=4;t M=5;t S=6;$.1p(1d.20,{1i:\'2G\',2H:2I(x(){$.G.21()},2J),14:[],2K:x(a){8.1A(8.1g,a);1B(8.1g,a||{})},1C:x(a,b,c,e,f,g,h,i){z(1j b==\'2L\'&&b.2M==N){i=b.1D();h=b.1E();g=b.1F();f=b.1G();e=b.Q();c=b.X();b=b.Z()}t d=L N();d.2N(b);d.22(1);d.2O(c||0);d.22(e||1);d.2P(f||0);d.2Q((g||0)-(R.2R(a)<30?a*1q:a));d.2S(h||0);d.2T(i||0);B d},23:x(a,b){t c=$(a);z(c.24(8.1i)){B}c.2U(8.1i);t d={15:$.1p({},b),u:[0,0,0,0,0,0,0]};$.11(a,s,d);8.25(a)},1H:x(a){z(!8.1I(a)){8.14.2V(a)}},1I:x(a){B($.2W(a,8.14)>-1)},1r:x(b){8.14=$.2X(8.14,x(a){B(a==b?A:a)})},21:x(){1b(t i=0;i<8.14.1J;i++){8.1k(8.14[i])}},1k:x(a,b){t c=$(a);b=b||$.11(a,s);z(!b){B}c.2Y(8.26(b));c[(8.C(b,\'1O\')?\'2Z\':\'31\')+\'33\'](\'34\');t d=8.C(b,\'1Z\');z(d){d.1l(a,[b.P!=\'27\'?b.u:8.1s(b,b.E,L N())])}t e=b.P!=\'1m\'&&(b.F?b.16.I()<=b.F.I():b.16.I()>=b.T.I());z(e&&!b.1K){b.1K=28;z(8.1I(a)||8.C(b,\'1X\')){8.1r(a);t f=8.C(b,\'1Y\');z(f){f.1l(a,[])}t g=8.C(b,\'1W\');z(g){t h=8.C(b,\'1h\');b.15.1h=g;8.1k(a,b);b.15.1h=h}t i=8.C(b,\'1V\');z(i){35.36=i}}b.1K=1a}1n z(b.P==\'1m\'){8.1r(a)}$.11(a,s,b)},25:x(a,b,c){b=b||{};z(1j b==\'1L\'){t d=b;b={};b[d]=c}t e=$.11(a,s);z(e){8.1A(e.15,b);1B(e.15,b);8.29(a,e);$.11(a,s,e);t f=L N();z((e.F&&e.F<f)||(e.T&&e.T>f)){8.1H(a)}8.1k(a,e)}},1A:x(a,b){t c=1a;1b(t n 1M b){z(n.K(/[2a]2b/)){c=28;13}}z(c){1b(t n 1M a){z(n.K(/[2a]2b[0-9]/)){a[n]=A}}}},29:x(a,b){t c=8.C(b,\'1S\');c=(c?c.1l(a,[]):A);t d=L N();t e=8.C(b,\'1R\');e=(e==A?-d.37():e);b.F=8.C(b,\'1Q\');z(b.F){b.F=8.1C(e,8.1t(b.F,A));z(b.F&&c){b.F.1u(b.F.1D()+d.I()-c.I())}}b.T=8.1C(e,8.1t(8.C(b,\'1P\'),d));z(c){b.T.1u(b.T.1D()+d.I()-c.I())}b.E=8.2c(b)},38:x(a){t b=$(a);z(!b.24(8.1i)){B}8.1r(a);b.39(8.1i).3a();$.3b(a,s)},3c:x(a){8.P(a,\'1m\')},3d:x(a){8.P(a,\'27\')},3e:x(a){8.P(a,A)},P:x(a,b){t c=$.11(a,s);z(c){z(c.P==\'1m\'&&!b){c.u=c.2d;t d=(c.F?\'-\':\'+\');c[c.F?\'F\':\'T\']=8.1t(d+c.u[0]+\'y\'+d+c.u[1]+\'o\'+d+c.u[2]+\'w\'+d+c.u[3]+\'d\'+d+c.u[4]+\'h\'+d+c.u[5]+\'m\'+d+c.u[6]+\'s\');8.1H(a)}c.P=b;c.2d=(b==\'1m\'?c.u:A);$.11(a,s,c);8.1k(a,c)}},3f:x(a){t b=$.11(a,s);B(!b?A:(!b.P?b.u:8.1s(b,b.E,L N())))},C:x(a,b){B(a.15[b]!=A?a.15[b]:$.G.1g[b])},1t:x(k,l){t m=x(a){t b=L N();b.2e(b.I()+a*2f);B b};t n=x(a){a=a.3g();t b=L N();t c=b.Z();t d=b.X();t e=b.Q();t f=b.1G();t g=b.1F();t h=b.1E();t i=/([+-]?[0-9]+)\\s*(s|m|h|d|w|o|y)?/g;t j=i.2g(a);3h(j){3i(j[2]||\'s\'){17\'s\':h+=18(j[1],10);13;17\'m\':g+=18(j[1],10);13;17\'h\':f+=18(j[1],10);13;17\'d\':e+=18(j[1],10);13;17\'w\':e+=18(j[1],10)*7;13;17\'o\':d+=18(j[1],10);e=R.1v(e,$.G.1c(c,d));13;17\'y\':c+=18(j[1],10);e=R.1v(e,$.G.1c(c,d));13}j=i.2g(a)}B L N(c,d,e,f,g,h,0)};t o=(k==A?l:(1j k==\'1L\'?n(k):(1j k==\'3j\'?m(k):k)));z(o)o.1u(0);B o},1c:x(a,b){B 32-L N(a,b,32).Q()},26:x(c){c.u=U=(c.P?c.u:8.1s(c,c.E,L N()));t d=1a;t e=0;1b(t f=0;f<c.E.1J;f++){d|=(c.E[f]==\'?\'&&U[f]>0);c.E[f]=(c.E[f]==\'?\'&&!d?A:c.E[f]);e+=(c.E[f]?1:0)}t g=8.C(c,\'1U\');t h=8.C(c,\'1h\');t i=(g?8.C(c,\'1f\'):8.C(c,\'1e\'));t j=8.C(c,\'1y\');t k=8.C(c,\'1z\')||\'\';t l=x(a){t b=$.G.C(c,\'1f\'+U[a]);B(c.E[a]?U[a]+(b?b[a]:i[a])+\' \':\'\')};t m=x(a){t b=$.G.C(c,\'1e\'+U[a]);B(c.E[a]?\'<V 1o="3k"><V 1o="2h">\'+U[a]+\'</V><3l/>\'+(b?b[a]:i[a])+\'</V>\':\'\')};B(h?8.2i(c,h,g):((g?\'<V 1o="1N 2h\'+(c.P?\' 2j\':\'\')+\'">\'+l(Y)+l(O)+l(W)+l(D)+(c.E[H]?8.J(U[H],2):\'\')+(c.E[M]?(c.E[H]?j:\'\')+8.J(U[M],2):\'\')+(c.E[S]?(c.E[H]||c.E[M]?j:\'\')+8.J(U[S],2):\'\'):\'<V 1o="1N 3m\'+e+(c.P?\' 2j\':\'\')+\'">\'+m(Y)+m(O)+m(W)+m(D)+m(H)+m(M)+m(S))+\'</V>\'+(k?\'<V 1o="1N 3n">\'+k+\'</V>\':\'\')))},2i:x(c,d,e){t f=8.C(c,(e?\'1f\':\'1e\'));t g=x(a){B($.G.C(c,(e?\'1f\':\'1e\')+c.u[a])||f)[a]};t h=x(a,b){B R.1w(a/b)%10};t j={3o:8.C(c,\'1z\'),3p:8.C(c,\'1y\'),3q:g(Y),3r:c.u[Y],3s:8.J(c.u[Y],2),3t:8.J(c.u[Y],3),3u:h(c.u[Y],1),3v:h(c.u[Y],10),3w:h(c.u[Y],19),3x:g(O),3y:c.u[O],3z:8.J(c.u[O],2),3A:8.J(c.u[O],3),3B:h(c.u[O],1),3C:h(c.u[O],10),3D:h(c.u[O],19),3E:g(W),3F:c.u[W],3G:8.J(c.u[W],2),3H:8.J(c.u[W],3),3I:h(c.u[W],1),3J:h(c.u[W],10),3K:h(c.u[W],19),3L:g(D),3M:c.u[D],3N:8.J(c.u[D],2),3O:8.J(c.u[D],3),3P:h(c.u[D],1),3Q:h(c.u[D],10),3R:h(c.u[D],19),3S:g(H),3T:c.u[H],3U:8.J(c.u[H],2),3V:8.J(c.u[H],3),3W:h(c.u[H],1),3X:h(c.u[H],10),3Y:h(c.u[H],19),3Z:g(M),40:c.u[M],41:8.J(c.u[M],2),42:8.J(c.u[M],3),43:h(c.u[M],1),44:h(c.u[M],10),45:h(c.u[M],19),46:g(S),47:c.u[S],48:8.J(c.u[S],2),49:8.J(c.u[S],3),4a:h(c.u[S],1),4b:h(c.u[S],10),4c:h(c.u[S],19)};t k=d;1b(t i=0;i<7;i++){t l=\'4d\'.4e(i);t m=L 2k(\'\\\\{\'+l+\'<\\\\}(.*)\\\\{\'+l+\'>\\\\}\',\'g\');k=k.2l(m,(c.E[i]?\'$1\':\'\'))}$.2m(j,x(n,v){t a=L 2k(\'\\\\{\'+n+\'\\\\}\',\'g\');k=k.2l(a,v)});B k},J:x(a,b){a=\'4f\'+a;B a.4g(a.1J-b)},2c:x(a){t b=8.C(a,\'1T\');t c=[];c[Y]=(b.K(\'y\')?\'?\':(b.K(\'Y\')?\'!\':A));c[O]=(b.K(\'o\')?\'?\':(b.K(\'O\')?\'!\':A));c[W]=(b.K(\'w\')?\'?\':(b.K(\'W\')?\'!\':A));c[D]=(b.K(\'d\')?\'?\':(b.K(\'D\')?\'!\':A));c[H]=(b.K(\'h\')?\'?\':(b.K(\'H\')?\'!\':A));c[M]=(b.K(\'m\')?\'?\':(b.K(\'M\')?\'!\':A));c[S]=(b.K(\'s\')?\'?\':(b.K(\'S\')?\'!\':A));B c},1s:x(f,g,h){f.16=h;f.16.1u(0);t i=L N(f.16.I());z(f.F&&h.I()<f.F.I()){f.16=h=i}1n z(f.F){h=f.F}1n{i.2e(f.T.I());z(h.I()>f.T.I()){f.16=h=i}}t j=[0,0,0,0,0,0,0];z(g[Y]||g[O]){t k=$.G.1c(h.Z(),h.X());t l=$.G.1c(i.Z(),i.X());t m=(i.Q()==h.Q()||(i.Q()>=R.1v(k,l)&&h.Q()>=R.1v(k,l)));t n=x(a){B(a.1G()*1q+a.1F())*1q+a.1E()};t o=R.4h(0,(i.Z()-h.Z())*12+i.X()-h.X()+((i.Q()<h.Q()&&!m)||(m&&n(i)<n(h))?-1:0));j[Y]=(g[Y]?R.1w(o/12):0);j[O]=(g[O]?o-j[Y]*12:0);t p=x(a,b,c){t d=(a.Q()==c);t e=$.G.1c(a.Z()+b*j[Y],a.X()+b*j[O]);z(a.Q()>e){a.2n(e)}a.4i(a.Z()+b*j[Y]);a.4j(a.X()+b*j[O]);z(d){a.2n(e)}B a};z(f.F){i=p(i,-1,l)}1n{h=p(L N(h.I()),+1,k)}}t q=R.1w((i.I()-h.I())/2f);t r=x(a,b){j[a]=(g[a]?R.1w(q/b):0);q-=j[a]*b};r(W,4k);r(D,4l);r(H,4m);r(M,1q);r(S,1);B j}});x 1B(a,b){$.1p(a,b);1b(t c 1M b){z(b[c]==A){a[c]=A}}B a}$.4n.G=x(a){t b=4o.20.4p.4q(4r,1);z(a==\'4s\'){B $.G[\'2o\'+a+\'1d\'].1l($.G,[8[0]].2p(b))}B 8.2m(x(){z(1j a==\'1L\'){$.G[\'2o\'+a+\'1d\'].1l($.G,[8].2p(b))}1n{$.G.23(8,a)}})};$.G=L 1d()})(4t);', 62, 278, '||||||||this|||||||||||||||||||||var|_periods|||function||if|null|return|_get||_show|_since|countdown||getTime|_minDigits|match|new||Date||_hold|getDate|Math||_until|periods|span||getMonth||getFullYear||data||break|_timerTargets|options|_now|case|parseInt|100|false|for|_getDaysInMonth|Countdown|labels|compactLabels|_defaults|layout|markerClassName|typeof|_updateCountdown|apply|pause|else|class|extend|60|_removeTarget|_calculatePeriods|_determineTime|setMilliseconds|min|floor|regional|timeSeparator|description|_resetExtraLabels|extendRemove|UTCDate|getMilliseconds|getSeconds|getMinutes|getHours|_addTarget|_hasTarget|length|_expiring|string|in|countdown_row|isRTL|until|since|timezone|serverSync|format|compact|expiryUrl|expiryText|alwaysExpire|onExpiry|onTick|prototype|_updateTargets|setUTCDate|_attachCountdown|hasClass|_changeCountdown|_generateHTML|lap|true|_adjustSettings|Ll|abels|_determineShow|_savePeriods|setTime|1000|exec|countdown_amount|_buildLayout|countdown_holding|RegExp|replace|each|setDate|_|concat|Years|Months|Weeks|Days|Hours|Minutes|Seconds|labels1|Year|Month|Week|Day|Hour|Minute|Second|dHMS|hasCountdown|_timer|setInterval|980|setDefaults|object|constructor|setUTCFullYear|setUTCMonth|setUTCHours|setUTCMinutes|abs|setUTCSeconds|setUTCMilliseconds|addClass|push|inArray|map|html|add||remove||Class|countdown_rtl|window|location|getTimezoneOffset|_destroyCountdown|removeClass|empty|removeData|_pauseCountdown|_lapCountdown|_resumeCountdown|_getTimesCountdown|toLowerCase|while|switch|number|countdown_section|br|countdown_show|countdown_descr|desc|sep|yl|yn|ynn|ynnn|y1|y10|y100|ol|on|onn|onnn|o1|o10|o100|wl|wn|wnn|wnnn|w1|w10|w100|dl|dn|dnn|dnnn|d1|d10|d100|hl|hn|hnn|hnnn|h1|h10|h100|ml|mn|mnn|mnnn|m1|m10|m100|sl|sn|snn|snnn|s1|s10|s100|yowdhms|charAt|0000000000|substr|max|setFullYear|setMonth|604800|86400|3600|fn|Array|slice|call|arguments|getTimes|jQuery'.split('|'), 0, {}))




