/*
 * 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")}})})();
/* NicEdit - Micro Inline WYSIWYG
 * Copyright 2007-2008 Brian Kirchoff
 *
 * NicEdit is distributed under the terms of the MIT license
 * For more information visit http://nicedit.com/
 * Do not remove this copyright message
 */
var bkExtend = function(){
	var args = arguments;
	if (args.length == 1) args = [this, args[0]];
	for (var prop in args[1]) args[0][prop] = args[1][prop];
	return args[0];
};
function bkClass() { }
bkClass.prototype.construct = function() {};
bkClass.extend = function(def) {
  var classDef = function() {
      if (arguments[0] !== bkClass) { return this.construct.apply(this, arguments); }
  };
  var proto = new this(bkClass);
  bkExtend(proto,def);
  classDef.prototype = proto;
  classDef.extend = this.extend;      
  return classDef;
};

var bkElement = bkClass.extend({
	construct : function(elm,d) {
		if(typeof(elm) == "string") {
			elm = (d || document).createElement(elm);
		}
		elm = $BK(elm);
		return elm;
	},
	
	appendTo : function(elm) {
		elm.appendChild(this);	
		return this;
	},
	
	appendBefore : function(elm) {
		elm.parentNode.insertBefore(this,elm);	
		return this;
	},
	
	addEvent : function(type, fn) {
		bkLib.addEvent(this,type,fn);
		return this;	
	},
	
	setContent : function(c) {
		this.innerHTML = c;
		return this;
	},
	
	pos : function() {
		var curleft = curtop = 0;
		var o = obj = this;
		if (obj.offsetParent) {
			do {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			} while (obj = obj.offsetParent);
		}
		var b = (!window.opera) ? parseInt(this.getStyle('border-width') || this.style.border) || 0 : 0;
		return [curleft+b,curtop+b+this.offsetHeight];
	},
	
	noSelect : function() {
		bkLib.noSelect(this);
		return this;
	},
	
	parentTag : function(t) {
		var elm = this;
		 do {
			if(elm && elm.nodeName && elm.nodeName.toUpperCase() == t) {
				return elm;
			}
			elm = elm.parentNode;
		} while(elm);
		return false;
	},
	
	hasClass : function(cls) {
		return this.className.match(new RegExp('(\\s|^)nicEdit-'+cls+'(\\s|$)'));
	},
	
	addClass : function(cls) {
		if (!this.hasClass(cls)) { this.className += " nicEdit-"+cls };
		return this;
	},
	
	removeClass : function(cls) {
		if (this.hasClass(cls)) {
			this.className = this.className.replace(new RegExp('(\\s|^)nicEdit-'+cls+'(\\s|$)'),' ');
		}
		return this;
	},

	setStyle : function(st) {
		var elmStyle = this.style;
		for(var itm in st) {
			switch(itm) {
				case 'float':
					elmStyle['cssFloat'] = elmStyle['styleFloat'] = st[itm];
					break;
				case 'opacity':
					elmStyle.opacity = st[itm];
					elmStyle.filter = "alpha(opacity=" + Math.round(st[itm]*100) + ")"; 
					break;
				case 'className':
					this.className = st[itm];
					break;
				default:
					//if(document.compatMode || itm != "cursor") { // Nasty Workaround for IE 5.5
						elmStyle[itm] = st[itm];
					//}		
			}
		}
		return this;
	},
	
	getStyle : function( cssRule, d ) {
		var doc = (!d) ? document.defaultView : d; 
		if(this.nodeType == 1)
		return (doc && doc.getComputedStyle) ? doc.getComputedStyle( this, null ).getPropertyValue(cssRule) : this.currentStyle[ bkLib.camelize(cssRule) ];
	},
	
	remove : function() {
		this.parentNode.removeChild(this);
		return this;	
	},
	
	setAttributes : function(at) {
		for(var itm in at) {
			this[itm] = at[itm];
		}
		return this;
	}
});

var bkLib = {
	isMSIE : (navigator.appVersion.indexOf("MSIE") != -1),
	
	addEvent : function(obj, type, fn) {
		(obj.addEventListener) ? obj.addEventListener( type, fn, false ) : obj.attachEvent("on"+type, fn);	
	},
	
	toArray : function(iterable) {
		var length = iterable.length, results = new Array(length);
    	while (length--) { results[length] = iterable[length] };
    	return results;	
	},
	
	noSelect : function(element) {
		if(element.setAttribute && element.nodeName.toLowerCase() != 'input' && element.nodeName.toLowerCase() != 'textarea') {
			element.setAttribute('unselectable','on');
		}
		for(var i=0;i<element.childNodes.length;i++) {
			bkLib.noSelect(element.childNodes[i]);
		}
	},
	camelize : function(s) {
		return s.replace(/\-(.)/g, function(m, l){return l.toUpperCase()});
	},
	inArray : function(arr,item) {
	    return (bkLib.search(arr,item) != null);
	},
	search : function(arr,itm) {
		for(var i=0; i < arr.length; i++) {
			if(arr[i] == itm)
				return i;
		}
		return null;	
	},
	cancelEvent : function(e) {
		e = e || window.event;
		if(e.preventDefault && e.stopPropagation) {
			e.preventDefault();
			e.stopPropagation();
		}
		return false;
	},
	domLoad : [],
	domLoaded : function() {
		if (arguments.callee.done) return;
		arguments.callee.done = true;
		for (i = 0;i < bkLib.domLoad.length;i++) bkLib.domLoad[i]();
	},
	onDomLoaded : function(fireThis) {
		this.domLoad.push(fireThis);
		if (document.addEventListener) {
			document.addEventListener("DOMContentLoaded", bkLib.domLoaded, null);
		} else if(bkLib.isMSIE) {
			document.write("<style>.nicEdit-main p { margin: 0; }</style><scr"+"ipt id=__ie_onload defer " + ((location.protocol == "https:") ? "src='javascript:void(0)'" : "src=//0") + "><\/scr"+"ipt>");
			$BK("__ie_onload").onreadystatechange = function() {
			    if (this.readyState == "complete"){bkLib.domLoaded();}
			};
		}
	    window.onload = bkLib.domLoaded;
	}
};

function $BK(elm) {
	if(typeof(elm) == "string") {
		elm = document.getElementById(elm);
	}
	return (elm && !elm.appendTo) ? bkExtend(elm,bkElement.prototype) : elm;
}

var bkEvent = {
	addEvent : function(evType, evFunc) {
		if(evFunc) {
			this.eventList = this.eventList || {};
			this.eventList[evType] = this.eventList[evType] || [];
			this.eventList[evType].push(evFunc);
		}
		return this;
	},
	fireEvent : function() {
		var args = bkLib.toArray(arguments), evType = args.shift();
		if(this.eventList && this.eventList[evType]) {
			for(var i=0;i<this.eventList[evType].length;i++) {
				this.eventList[evType][i].apply(this,args);
			}
		}
	}	
};

function __(s) {
	return s;
}

Function.prototype.closure = function() {
  var __method = this, args = bkLib.toArray(arguments), obj = args.shift();
  return function() { if(typeof(bkLib) != 'undefined') { return __method.apply(obj,args.concat(bkLib.toArray(arguments))); } };
}
	
Function.prototype.closureListener = function() {
  	var __method = this, args = bkLib.toArray(arguments), object = args.shift(); 
  	return function(e) { 
  	e = e || window.event;
  	if(e.target) { var target = e.target; } else { var target =  e.srcElement };
	  	return __method.apply(object, [e,target].concat(args) ); 
	};
}		


/* START CONFIG */

var nicEditorConfig = bkClass.extend({
	buttons : {
		'bold' : {name : __('Click to Bold'), command : 'Bold', tags : ['B','STRONG'], css : {'font-weight' : 'bold'}, key : 'b'},
		'italic' : {name : __('Click to Italic'), command : 'Italic', tags : ['EM','I'], css : {'font-style' : 'italic'}, key : 'i'},
		'underline' : {name : __('Click to Underline'), command : 'Underline', tags : ['U'], css : {'text-decoration' : 'underline'}, key : 'u'},
		'left' : {name : __('Left Align'), command : 'justifyleft', noActive : true},
		'center' : {name : __('Center Align'), command : 'justifycenter', noActive : true},
		'right' : {name : __('Right Align'), command : 'justifyright', noActive : true},
		'justify' : {name : __('Justify Align'), command : 'justifyfull', noActive : true},
		'ol' : {name : __('Insert Ordered List'), command : 'insertorderedlist', tags : ['OL']},
		'ul' : 	{name : __('Insert Unordered List'), command : 'insertunorderedlist', tags : ['UL']},
		'subscript' : {name : __('Click to Subscript'), command : 'subscript', tags : ['SUB']},
		'superscript' : {name : __('Click to Superscript'), command : 'superscript', tags : ['SUP']},
		'strikethrough' : {name : __('Click to Strike Through'), command : 'strikeThrough', css : {'text-decoration' : 'line-through'}},
		'removeformat' : {name : __('Remove Formatting'), command : 'removeformat', noActive : true},
		'indent' : {name : __('Indent Text'), command : 'indent', noActive : true},
		'outdent' : {name : __('Remove Indent'), command : 'outdent', noActive : true},
		'hr' : {name : __('Horizontal Rule'), command : 'insertHorizontalRule', noActive : true}
	},
	iconsPath : '../nicEditorIcons.gif',
	buttonList : ['save','bold','italic','underline','left','center','right','justify','ol','ul','fontSize','fontFamily','fontFormat','indent','outdent','image','upload','link','unlink','forecolor','bgcolor'],
	iconList : {"xhtml":1,"bold":2,"center":3,"hr":4,"indent":5,"italic":6,"justify":7,"left":8,"ol":9,"outdent":10,"removeformat":11,"right":12,"save":13,"strikethrough":14,"subscript":15,"superscript":16,"ul":17,"underline":18,"image":19,"link":20,"unlink":21,"close":22,"arrow":23}
	
});
/* END CONFIG */


var nicEditors = {
	nicPlugins : [],
	editors : [],
	
	registerPlugin : function(plugin,options) {
		this.nicPlugins.push({p : plugin, o : options});
	},

	allTextAreas : function(nicOptions) {
		var textareas = document.getElementsByTagName("textarea");
		for(var i=0;i<textareas.length;i++) {
			nicEditors.editors.push(new nicEditor(nicOptions).panelInstance(textareas[i]));
		}
		return nicEditors.editors;
	},
	
	findEditor : function(e) {
		var editors = nicEditors.editors;
		for(var i=0;i<editors.length;i++) {
			if(editors[i].instanceById(e)) {
				return editors[i].instanceById(e);
			}
		}
	}
};


var nicEditor = bkClass.extend({
	construct : function(o) {
		this.options = new nicEditorConfig();
		bkExtend(this.options,o);
		this.nicInstances = new Array();
		this.loadedPlugins = new Array();
		
		var plugins = nicEditors.nicPlugins;
		for(var i=0;i<plugins.length;i++) {
			this.loadedPlugins.push(new plugins[i].p(this,plugins[i].o));
		}
		nicEditors.editors.push(this);
		bkLib.addEvent(document.body,'mousedown', this.selectCheck.closureListener(this) );
	},
	
	panelInstance : function(e,o) {
		e = this.checkReplace($BK(e));
		var panelElm = new bkElement('DIV').setStyle({width : (parseInt(e.getStyle('width')) || e.clientWidth)+'px'}).appendBefore(e);
		this.setPanel(panelElm);
		return this.addInstance(e,o);	
	},

	checkReplace : function(e) {
		var r = nicEditors.findEditor(e);
		if(r) {
			r.removeInstance(e);
			r.removePanel();
		}
		return e;
	},

	addInstance : function(e,o) {
		e = this.checkReplace($BK(e));
		if( e.contentEditable || !!window.opera ) {
			var newInstance = new nicEditorInstance(e,o,this);
		} else {
			var newInstance = new nicEditorIFrameInstance(e,o,this);
		}
		this.nicInstances.push(newInstance);
		return this;
	},
	
	removeInstance : function(e) {
		e = $BK(e);
		var instances = this.nicInstances;
		for(var i=0;i<instances.length;i++) {	
			if(instances[i].e == e) {
				instances[i].remove();
				this.nicInstances.splice(i,1);
			}
		}
	},

	removePanel : function(e) {
		if(this.nicPanel) {
			this.nicPanel.remove();
			this.nicPanel = null;
		}	
	},

	instanceById : function(e) {
		e = $BK(e);
		var instances = this.nicInstances;
		for(var i=0;i<instances.length;i++) {
			if(instances[i].e == e) {
				return instances[i];
			}
		}	
	},

	setPanel : function(e) {
		this.nicPanel = new nicEditorPanel($BK(e),this.options,this);
		this.fireEvent('panel',this.nicPanel);
		return this;
	},
	
	nicCommand : function(cmd,args) {	
		if(this.selectedInstance) {
			this.selectedInstance.nicCommand(cmd,args);
		}
	},
	
	getIcon : function(iconName,options) {
		var icon = this.options.iconList[iconName];
		var file = (options.iconFiles) ? options.iconFiles[iconName] : '';
		return {backgroundImage : "url('"+((icon) ? this.options.iconsPath : file)+"')", backgroundPosition : ((icon) ? ((icon-1)*-18) : 0)+'px 0px'};	
	},
		
	selectCheck : function(e,t) {
		var found = false;
		do{
			if(t.className && t.className.indexOf('nicEdit') != -1) {
				return false;
			}
		} while(t = t.parentNode);
		this.fireEvent('blur',this.selectedInstance,t);
		this.lastSelectedInstance = this.selectedInstance;
		this.selectedInstance = null;
		return false;
	}
	
});
nicEditor = nicEditor.extend(bkEvent);

 
var nicEditorInstance = bkClass.extend({
	isSelected : false,
	
	construct : function(e,options,nicEditor) {
		this.ne = nicEditor;
		this.elm = this.e = e;
		this.options = options || {};
		
		newX = parseInt(e.getStyle('width')) || e.clientWidth;
		newY = parseInt(e.getStyle('height')) || e.clientHeight;
		this.initialHeight = newY-8;
		
		var isTextarea = (e.nodeName.toLowerCase() == "textarea");
		if(isTextarea || this.options.hasPanel) {
			var ie7s = (bkLib.isMSIE && !((typeof document.body.style.maxHeight != "undefined") && document.compatMode == "CSS1Compat"))
			var s = {width: newX+'px', border : '1px solid #ccc', borderTop : 0, overflowY : 'auto', overflowX: 'hidden' };
			s[(ie7s) ? 'height' : 'maxHeight'] = (this.ne.options.maxHeight) ? this.ne.options.maxHeight+'px' : null;
			this.editorContain = new bkElement('DIV').setStyle(s).appendBefore(e);
			var editorElm = new bkElement('DIV').setStyle({width : (newX-8)+'px', margin: '4px', minHeight : newY+'px'}).addClass('main').appendTo(this.editorContain);

			e.setStyle({display : 'none'});
				
			editorElm.innerHTML = e.innerHTML;		
			if(isTextarea) {
				editorElm.setContent(e.value);
				this.copyElm = e;
				var f = e.parentTag('FORM');
				if(f) { bkLib.addEvent( f, 'submit', this.saveContent.closure(this)); }
			}
			editorElm.setStyle((ie7s) ? {height : newY+'px'} : {overflow: 'hidden'});
			this.elm = editorElm;	
		}
		this.ne.addEvent('blur',this.blur.closure(this));

		this.init();
		this.blur();
	},
	
	init : function() {
		this.elm.setAttribute('contentEditable','true');	
		if(this.getContent() == "") {
			this.setContent('<br />');
		}
		this.instanceDoc = document.defaultView;
		this.elm.addEvent('mousedown',this.selected.closureListener(this)).addEvent('keypress',this.keyDown.closureListener(this)).addEvent('focus',this.selected.closure(this)).addEvent('blur',this.blur.closure(this)).addEvent('keyup',this.selected.closure(this));
		this.ne.fireEvent('add',this);
	},
	
	remove : function() {
		this.saveContent();
		if(this.copyElm || this.options.hasPanel) {
			this.editorContain.remove();
			this.e.setStyle({'display' : 'block'});
			this.ne.removePanel();
		}
		this.disable();
		this.ne.fireEvent('remove',this);
	},
	
	disable : function() {
		this.elm.setAttribute('contentEditable','false');
	},
	
	getSel : function() {
		return (window.getSelection) ? window.getSelection() : document.selection;	
	},
	
	getRng : function() {
		var s = this.getSel();
		if(!s) { return null; }
		return (s.rangeCount > 0) ? s.getRangeAt(0) : s.createRange();
	},
	
	selRng : function(rng,s) {
		if(window.getSelection) {
			s.removeAllRanges();
			s.addRange(rng);
		} else {
			rng.select();
		}
	},
	
	selElm : function() {
		var r = this.getRng();
		if(r.startContainer) {
			var contain = r.startContainer;
			if(r.cloneContents().childNodes.length == 1) {
				for(var i=0;i<contain.childNodes.length;i++) {
					var rng = contain.childNodes[i].ownerDocument.createRange();
					rng.selectNode(contain.childNodes[i]);					
					if(r.compareBoundaryPoints(Range.START_TO_START,rng) != 1 && 
						r.compareBoundaryPoints(Range.END_TO_END,rng) != -1) {
						return $BK(contain.childNodes[i]);
					}
				}
			}
			return $BK(contain);
		} else {
			return $BK((this.getSel().type == "Control") ? r.item(0) : r.parentElement());
		}
	},
	
	saveRng : function() {
		this.savedRange = this.getRng();
		this.savedSel = this.getSel();
	},
	
	restoreRng : function() {
		if(this.savedRange) {
			this.selRng(this.savedRange,this.savedSel);
		}
	},
	
	keyDown : function(e,t) {
		if(e.ctrlKey) {
			this.ne.fireEvent('key',this,e);
		}
	},
	
	selected : function(e,t) {
		if(!t) {t = this.selElm()}
		if(!e.ctrlKey) {
			var selInstance = this.ne.selectedInstance;
			if(selInstance != this) {
				if(selInstance) {
					this.ne.fireEvent('blur',selInstance,t);
				}
				this.ne.selectedInstance = this;	
				this.ne.fireEvent('focus',selInstance,t);
			}
			this.ne.fireEvent('selected',selInstance,t);
			this.isFocused = true;
			this.elm.addClass('selected');
		}
		return false;
	},
	
	blur : function() {
		this.isFocused = false;
		this.elm.removeClass('selected');
	},
	
	saveContent : function() {
		if(this.copyElm || this.options.hasPanel) {
			this.ne.fireEvent('save',this);
			(this.copyElm) ? this.copyElm.value = this.getContent() : this.e.innerHTML = this.getContent();
		}	
	},
	
	getElm : function() {
		return this.elm;
	},
	
	getContent : function() {
		this.content = this.getElm().innerHTML;
		this.ne.fireEvent('get',this);
		return this.content;
	},
	
	setContent : function(e) {
		this.content = e;
		this.ne.fireEvent('set',this);
		this.elm.innerHTML = this.content;	
	},
	
	nicCommand : function(cmd,args) {
		document.execCommand(cmd,false,args);
	}		
});

var nicEditorIFrameInstance = nicEditorInstance.extend({
	savedStyles : [],
	
	init : function() {	
		var c = this.elm.innerHTML.replace(/^\s+|\s+$/g, '');
		this.elm.innerHTML = '';
		(!c) ? c = "<br />" : c;
		this.initialContent = c;
		
		this.elmFrame = new bkElement('iframe').setAttributes({'src' : 'javascript:;', 'frameBorder' : 0, 'allowTransparency' : 'true', 'scrolling' : 'no'}).setStyle({height: '100px', width: '100%'}).addClass('frame').appendTo(this.elm);

		if(this.copyElm) { this.elmFrame.setStyle({width : (this.elm.offsetWidth-4)+'px'}); }
		
		var styleList = ['font-size','font-family','font-weight','color'];
		for(itm in styleList) {
			this.savedStyles[bkLib.camelize(itm)] = this.elm.getStyle(itm);
		}
     	
		setTimeout(this.initFrame.closure(this),50);
	},
	
	disable : function() {
		this.elm.innerHTML = this.getContent();
	},
	
	initFrame : function() {
		var fd = $BK(this.elmFrame.contentWindow.document);
		fd.designMode = "on";		
		fd.open();
		var css = this.ne.options.externalCSS;
		fd.write('<html><head>'+((css) ? '<link href="'+css+'" rel="stylesheet" type="text/css" />' : '')+'</head><body id="nicEditContent" style="margin: 0 !important; background-color: transparent !important;">'+this.initialContent+'</body></html>');
		fd.close();
		this.frameDoc = fd;

		this.frameWin = $BK(this.elmFrame.contentWindow);
		this.frameContent = $BK(this.frameWin.document.body).setStyle(this.savedStyles);
		this.instanceDoc = this.frameWin.document.defaultView;
		
		this.heightUpdate();
		this.frameDoc.addEvent('mousedown', this.selected.closureListener(this)).addEvent('keyup',this.heightUpdate.closureListener(this)).addEvent('keydown',this.keyDown.closureListener(this)).addEvent('keyup',this.selected.closure(this));
		this.ne.fireEvent('add',this);
	},
	
	getElm : function() {
		return this.frameContent;
	},
	
	setContent : function(c) {
		this.content = c;
		this.ne.fireEvent('set',this);
		this.frameContent.innerHTML = this.content;	
		this.heightUpdate();
	},
	
	getSel : function() {
		return (this.frameWin) ? this.frameWin.getSelection() : this.frameDoc.selection;
	},
	
	heightUpdate : function() {	
		this.elmFrame.style.height = Math.max(this.frameContent.offsetHeight,this.initialHeight)+'px';
	},
    
	nicCommand : function(cmd,args) {
		this.frameDoc.execCommand(cmd,false,args);
		setTimeout(this.heightUpdate.closure(this),100);
	}

	
});
var nicEditorPanel = bkClass.extend({
	construct : function(e,options,nicEditor) {
		this.elm = e;
		this.options = options;
		this.ne = nicEditor;
		this.panelButtons = new Array();
		this.buttonList = bkExtend([],this.ne.options.buttonList);
		
		this.panelContain = new bkElement('DIV').setStyle({overflow : 'hidden', width : '100%', border : '1px solid #cccccc', backgroundColor : '#efefef'}).addClass('panelContain');
		this.panelElm = new bkElement('DIV').setStyle({margin : '2px', marginTop : '0px', zoom : 1, overflow : 'hidden'}).addClass('panel').appendTo(this.panelContain);
		this.panelContain.appendTo(e);

		var opt = this.ne.options;
		var buttons = opt.buttons;
		for(button in buttons) {
				this.addButton(button,opt,true);
		}
		this.reorder();
		e.noSelect();
	},
	
	addButton : function(buttonName,options,noOrder) {
		var button = options.buttons[buttonName];
		var type = (button['type']) ? eval('(typeof('+button['type']+') == "undefined") ? null : '+button['type']+';') : nicEditorButton;
		var hasButton = bkLib.inArray(this.buttonList,buttonName);
		if(type && (hasButton || this.ne.options.fullPanel)) {
			this.panelButtons.push(new type(this.panelElm,buttonName,options,this.ne));
			if(!hasButton) {	
				this.buttonList.push(buttonName);
			}
		}
	},
	
	findButton : function(itm) {
		for(var i=0;i<this.panelButtons.length;i++) {
			if(this.panelButtons[i].name == itm)
				return this.panelButtons[i];
		}	
	},
	
	reorder : function() {
		var bl = this.buttonList;
		for(var i=0;i<bl.length;i++) {
			var button = this.findButton(bl[i]);
			if(button) {
				this.panelElm.appendChild(button.margin);
			}
		}	
	},
	
	remove : function() {
		this.elm.remove();
	}
});
var nicEditorButton = bkClass.extend({
	
	construct : function(e,buttonName,options,nicEditor) {
		this.options = options.buttons[buttonName];
		this.name = buttonName;
		this.ne = nicEditor;
		this.elm = e;

		this.margin = new bkElement('DIV').setStyle({'float' : 'left', marginTop : '2px'}).appendTo(e);
		this.contain = new bkElement('DIV').setStyle({width : '20px', height : '20px'}).addClass('buttonContain').appendTo(this.margin);
		this.border = new bkElement('DIV').setStyle({backgroundColor : '#efefef', border : '1px solid #efefef'}).appendTo(this.contain);
		this.button = new bkElement('DIV').setStyle({width : '18px', height : '18px', overflow : 'hidden', zoom : 1, cursor : 'pointer'}).addClass('button').setStyle(this.ne.getIcon(buttonName,options)).appendTo(this.border);
		this.button.addEvent('mouseover', this.hoverOn.closure(this)).addEvent('mouseout',this.hoverOff.closure(this)).addEvent('mousedown',this.mouseClick.closure(this)).noSelect();
		
		if(!window.opera) {
			this.button.onmousedown = this.button.onclick = bkLib.cancelEvent;
		}
		
		nicEditor.addEvent('selected', this.enable.closure(this)).addEvent('blur', this.disable.closure(this)).addEvent('key',this.key.closure(this));
		
		this.disable();
		this.init();
	},
	
	init : function() {  },
	
	hide : function() {
		this.contain.setStyle({display : 'none'});
	},
	
	updateState : function() {
		if(this.isDisabled) { this.setBg(); }
		else if(this.isHover) { this.setBg('hover'); }
		else if(this.isActive) { this.setBg('active'); }
		else { this.setBg(); }
	},
	
	setBg : function(state) {
		switch(state) {
			case 'hover':
				var stateStyle = {border : '1px solid #666', backgroundColor : '#ddd'};
				break;
			case 'active':
				var stateStyle = {border : '1px solid #666', backgroundColor : '#ccc'};
				break;
			default:
				var stateStyle = {border : '1px solid #efefef', backgroundColor : '#efefef'};	
		}
		this.border.setStyle(stateStyle).addClass('button-'+state);
	},
	
	checkNodes : function(e) {
		var elm = e;	
		do {
			if(this.options.tags && bkLib.inArray(this.options.tags,elm.nodeName)) {
				this.activate();
				return true;
			}
		} while(elm = elm.parentNode && elm.className != "nicEdit");
		elm = $BK(e);
		while(elm.nodeType == 3) {
			elm = $BK(elm.parentNode);
		}
		if(this.options.css) {
			for(itm in this.options.css) {
				if(elm.getStyle(itm,this.ne.selectedInstance.instanceDoc) == this.options.css[itm]) {
					this.activate();
					return true;
				}
			}
		}
		this.deactivate();
		return false;
	},
	
	activate : function() {
		if(!this.isDisabled) {
			this.isActive = true;
			this.updateState();	
			this.ne.fireEvent('buttonActivate',this);
		}
	},
	
	deactivate : function() {
		this.isActive = false;
		this.updateState();	
		if(!this.isDisabled) {
			this.ne.fireEvent('buttonDeactivate',this);
		}
	},
	
	enable : function(ins,t) {
		this.isDisabled = false;
		this.contain.setStyle({'opacity' : 1}).addClass('buttonEnabled');
		this.updateState();
		this.checkNodes(t);
	},
	
	disable : function(ins,t) {		
		this.isDisabled = true;
		this.contain.setStyle({'opacity' : 0.6}).removeClass('buttonEnabled');
		this.updateState();	
	},
	
	toggleActive : function() {
		(this.isActive) ? this.deactivate() : this.activate();	
	},
	
	hoverOn : function() {
		if(!this.isDisabled) {
			this.isHover = true;
			this.updateState();
			this.ne.fireEvent("buttonOver",this);
		}
	}, 
	
	hoverOff : function() {
		this.isHover = false;
		this.updateState();
		this.ne.fireEvent("buttonOut",this);
	},
	
	mouseClick : function() {
		if(this.options.command) {
			this.ne.nicCommand(this.options.command,this.options.commandArgs);
			if(!this.options.noActive) {
				this.toggleActive();
			}
		}
		this.ne.fireEvent("buttonClick",this);
	},
	
	key : function(nicInstance,e) {
		if(this.options.key && e.ctrlKey && String.fromCharCode(e.keyCode || e.charCode).toLowerCase() == this.options.key) {
			this.mouseClick();
			if(e.preventDefault) e.preventDefault();
		}
	}
	
});

 
var nicPlugin = bkClass.extend({
	
	construct : function(nicEditor,options) {
		this.options = options;
		this.ne = nicEditor;
		this.ne.addEvent('panel',this.loadPanel.closure(this));
		
		this.init();
	},

	loadPanel : function(np) {
		var buttons = this.options.buttons;
		for(var button in buttons) {
			np.addButton(button,this.options);
		}
		np.reorder();
	},

	init : function() {  }
});



 
 /* START CONFIG */
var nicPaneOptions = { };
/* END CONFIG */

var nicEditorPane = bkClass.extend({
	construct : function(elm,nicEditor,options,openButton) {
		this.ne = nicEditor;
		this.elm = elm;
		this.pos = elm.pos();
		
		this.contain = new bkElement('div').setStyle({zIndex : '99999', overflow : 'hidden', position : 'absolute', left : this.pos[0]+'px', top : this.pos[1]+'px'})
		this.pane = new bkElement('div').setStyle({fontSize : '12px', border : '1px solid #ccc', 'overflow': 'hidden', padding : '4px', textAlign: 'left', backgroundColor : '#ffffc9'}).addClass('pane').setStyle(options).appendTo(this.contain);
		
		if(openButton && !openButton.options.noClose) {
			this.close = new bkElement('div').setStyle({'float' : 'right', height: '16px', width : '16px', cursor : 'pointer'}).setStyle(this.ne.getIcon('close',nicPaneOptions)).addEvent('mousedown',openButton.removePane.closure(this)).appendTo(this.pane);
		}
		
		this.contain.noSelect().appendTo(document.body);
		
		this.position();
		this.init();	
	},
	
	init : function() { },
	
	position : function() {
		if(this.ne.nicPanel) {
			var panelElm = this.ne.nicPanel.elm;	
			var panelPos = panelElm.pos();
			var newLeft = panelPos[0]+parseInt(panelElm.getStyle('width'))-(parseInt(this.pane.getStyle('width'))+8);
			if(newLeft < this.pos[0]) {
				this.contain.setStyle({left : newLeft+'px'});
			}
		}
	},
	
	toggle : function() {
		this.isVisible = !this.isVisible;
		this.contain.setStyle({display : ((this.isVisible) ? 'block' : 'none')});
	},
	
	remove : function() {
		if(this.contain) {
			this.contain.remove();
			this.contain = null;
		}
	},
	
	append : function(c) {
		c.appendTo(this.pane);
	},
	
	setContent : function(c) {
		this.pane.setContent(c);
	}
	
});


 
var nicEditorAdvancedButton = nicEditorButton.extend({
	
	init : function() {
		this.ne.addEvent('selected',this.removePane.closure(this)).addEvent('blur',this.removePane.closure(this));	
	},
	
	mouseClick : function() {
		if(!this.isDisabled) {
			if(this.pane && this.pane.pane) {
				this.removePane();
			} else {
				this.pane = new nicEditorPane(this.contain,this.ne,{width : (this.width || '270px'), backgroundColor : '#fff'},this);
				this.addPane();
				this.ne.selectedInstance.saveRng();
			}
		}
	},
	
	addForm : function(f,elm) {
		this.form = new bkElement('form').addEvent('submit',this.submit.closureListener(this));
		this.pane.append(this.form);
		this.inputs = {};
		
		for(itm in f) {
			var field = f[itm];
			var val = '';
			if(elm) {
				val = elm.getAttribute(itm);
			}
			if(!val) {
				val = field['value'] || '';
			}
			var type = f[itm].type;
			
			if(type == 'title') {
					new bkElement('div').setContent(field.txt).setStyle({fontSize : '14px', fontWeight: 'bold', padding : '0px', margin : '2px 0'}).appendTo(this.form);
			} else {
				var contain = new bkElement('div').setStyle({overflow : 'hidden', clear : 'both'}).appendTo(this.form);
				if(field.txt) {
					new bkElement('label').setAttributes({'for' : itm}).setContent(field.txt).setStyle({margin : '2px 4px', fontSize : '13px', width: '50px', lineHeight : '20px', textAlign : 'right', 'float' : 'left'}).appendTo(contain);
				}
				
				switch(type) {
					case 'text':
						this.inputs[itm] = new bkElement('input').setAttributes({id : itm, 'value' : val, 'type' : 'text'}).setStyle({margin : '2px 0', fontSize : '13px', 'float' : 'left', height : '20px', border : '1px solid #ccc', overflow : 'hidden'}).setStyle(field.style).appendTo(contain);
						break;
					case 'select':
						this.inputs[itm] = new bkElement('select').setAttributes({id : itm}).setStyle({border : '1px solid #ccc', 'float' : 'left', margin : '2px 0'}).appendTo(contain);
						for(opt in field.options) {
							var o = new bkElement('option').setAttributes({value : opt, selected : (opt == val) ? 'selected' : ''}).setContent(field.options[opt]).appendTo(this.inputs[itm]);
						}
						break;
					case 'content':
						this.inputs[itm] = new bkElement('textarea').setAttributes({id : itm}).setStyle({border : '1px solid #ccc', 'float' : 'left'}).setStyle(field.style).appendTo(contain);
						this.inputs[itm].value = val;
				}	
			}
		}
		new bkElement('input').setAttributes({'type' : 'submit'}).setStyle({backgroundColor : '#efefef',border : '1px solid #ccc', margin : '3px 0', 'float' : 'left', 'clear' : 'both'}).appendTo(this.form);
		this.form.onsubmit = bkLib.cancelEvent;	
	},
	
	submit : function() { },
	
	findElm : function(tag,attr,val) {
		var list = this.ne.selectedInstance.getElm().getElementsByTagName(tag);
		for(var i=0;i<list.length;i++) {
			if(list[i].getAttribute(attr) == val) {
				return $BK(list[i]);
			}
		}
	},
	
	removePane : function() {
		if(this.pane) {
			this.pane.remove();
			this.pane = null;
			this.ne.selectedInstance.restoreRng();
		}	
	}	
});


 
 /* START CONFIG */
var nicSelectOptions = {
	buttons : {
		'fontSize' : {name : __('Select Font Size'), type : 'nicEditorFontSizeSelect', command : 'fontsize'},
		'fontFamily' : {name : __('Select Font Family'), type : 'nicEditorFontFamilySelect', command : 'fontname'},
		'fontFormat' : {name : __('Select Font Format'), type : 'nicEditorFontFormatSelect', command : 'formatBlock'}
	}
};
/* END CONFIG */
var nicEditorSelect = bkClass.extend({
	
	construct : function(e,buttonName,options,nicEditor) {
		this.options = options.buttons[buttonName];
		this.elm = e;
		this.ne = nicEditor;
		this.name = buttonName;
		this.selOptions = new Array();
		
		this.margin = new bkElement('div').setStyle({'float' : 'left', margin : '2px 1px 0 1px'}).appendTo(this.elm);
		this.contain = new bkElement('div').setStyle({width: '90px', height : '20px', cursor : 'pointer', overflow: 'hidden'}).addClass('selectContain').addEvent('click',this.toggle.closure(this)).appendTo(this.margin);
		this.items = new bkElement('div').setStyle({overflow : 'hidden', zoom : 1, border: '1px solid #ccc', paddingLeft : '3px', backgroundColor : '#fff'}).appendTo(this.contain);
		this.control = new bkElement('div').setStyle({overflow : 'hidden', 'float' : 'right', height: '18px', width : '16px'}).addClass('selectControl').setStyle(this.ne.getIcon('arrow',options)).appendTo(this.items);
		this.txt = new bkElement('div').setStyle({overflow : 'hidden', 'float' : 'left', width : '66px', height : '14px', marginTop : '1px', fontFamily : 'sans-serif', textAlign : 'center', fontSize : '12px'}).addClass('selectTxt').appendTo(this.items);
		
		if(!window.opera) {
			this.contain.onmousedown = this.control.onmousedown = this.txt.onmousedown = bkLib.cancelEvent;
		}
		
		this.margin.noSelect();
		
		this.ne.addEvent('selected', this.enable.closure(this)).addEvent('blur', this.disable.closure(this));
		
		this.disable();
		this.init();
	},
	
	disable : function() {
		this.isDisabled = true;
		this.close();
		this.contain.setStyle({opacity : 0.6});
	},
	
	enable : function(t) {
		this.isDisabled = false;
		this.close();
		this.contain.setStyle({opacity : 1});
	},
	
	setDisplay : function(txt) {
		this.txt.setContent(txt);
	},
	
	toggle : function() {
		if(!this.isDisabled) {
			(this.pane) ? this.close() : this.open();
		}
	},
	
	open : function() {
		this.pane = new nicEditorPane(this.items,this.ne,{width : '88px', padding: '0px', borderTop : 0, borderLeft : '1px solid #ccc', borderRight : '1px solid #ccc', borderBottom : '0px', backgroundColor : '#fff'});
		
		for(var i=0;i<this.selOptions.length;i++) {
			var opt = this.selOptions[i];
			var itmContain = new bkElement('div').setStyle({overflow : 'hidden', borderBottom : '1px solid #ccc', width: '88px', textAlign : 'left', overflow : 'hidden', cursor : 'pointer'});
			var itm = new bkElement('div').setStyle({padding : '0px 4px'}).setContent(opt[1]).appendTo(itmContain).noSelect();
			itm.addEvent('click',this.update.closure(this,opt[0])).addEvent('mouseover',this.over.closure(this,itm)).addEvent('mouseout',this.out.closure(this,itm)).setAttributes('id',opt[0]);
			this.pane.append(itmContain);
			if(!window.opera) {
				itm.onmousedown = bkLib.cancelEvent;
			}
		}
	},
	
	close : function() {
		if(this.pane) {
			this.pane = this.pane.remove();
		}	
	},
	
	over : function(opt) {
		opt.setStyle({backgroundColor : '#ccc'});			
	},
	
	out : function(opt) {
		opt.setStyle({backgroundColor : '#fff'});
	},
	
	
	add : function(k,v) {
		this.selOptions.push(new Array(k,v));	
	},
	
	update : function(elm) {
		this.ne.nicCommand(this.options.command,elm);
		this.close();	
	}
});

var nicEditorFontSizeSelect = nicEditorSelect.extend({
	sel : {1 : '1&nbsp;(8pt)', 2 : '2&nbsp;(10pt)', 3 : '3&nbsp;(12pt)', 4 : '4&nbsp;(14pt)', 5 : '5&nbsp;(18pt)', 6 : '6&nbsp;(24pt)'},
	init : function() {
		this.setDisplay('Font&nbsp;Size...');
		for(itm in this.sel) {
			this.add(itm,'<font size="'+itm+'">'+this.sel[itm]+'</font>');
		}		
	}
});

var nicEditorFontFamilySelect = nicEditorSelect.extend({
	sel : {'arial' : 'Arial','comic sans ms' : 'Comic Sans','courier new' : 'Courier New','georgia' : 'Georgia', 'helvetica' : 'Helvetica', 'impact' : 'Impact', 'times new roman' : 'Times', 'trebuchet ms' : 'Trebuchet', 'verdana' : 'Verdana'},
	
	init : function() {
		this.setDisplay('Font&nbsp;Family...');
		for(itm in this.sel) {
			this.add(itm,'<font face="'+itm+'">'+this.sel[itm]+'</font>');
		}
	}
});

var nicEditorFontFormatSelect = nicEditorSelect.extend({
		sel : {'p' : 'Paragraph', 'pre' : 'Pre', 'h6' : 'Heading&nbsp;6', 'h5' : 'Heading&nbsp;5', 'h4' : 'Heading&nbsp;4', 'h3' : 'Heading&nbsp;3', 'h2' : 'Heading&nbsp;2', 'h1' : 'Heading&nbsp;1'},
		
	init : function() {
		this.setDisplay('Font&nbsp;Format...');
		for(itm in this.sel) {
			var tag = itm.toUpperCase();
			this.add('<'+tag+'>','<'+itm+' style="padding: 0px; margin: 0px;">'+this.sel[itm]+'</'+tag+'>');
		}
	}
});

nicEditors.registerPlugin(nicPlugin,nicSelectOptions);



/* START CONFIG */
var nicLinkOptions = {
	buttons : {
		'link' : {name : 'Add Link', type : 'nicLinkButton', tags : ['A']},
		'unlink' : {name : 'Remove Link',  command : 'unlink', noActive : true}
	}
};
/* END CONFIG */

var nicLinkButton = nicEditorAdvancedButton.extend({	
	addPane : function() {
		this.ln = this.ne.selectedInstance.selElm().parentTag('A');
		this.addForm({
			'' : {type : 'title', txt : 'Add/Edit Link'},
			'href' : {type : 'text', txt : 'URL', value : 'http://', style : {width: '150px'}},
			'title' : {type : 'text', txt : 'Title'},
			'target' : {type : 'select', txt : 'Open In', options : {'' : 'Current Window', '_blank' : 'New Window'},style : {width : '100px'}}
		},this.ln);
	},
	
	submit : function(e) {
		var url = this.inputs['href'].value;
		if(url == "http://" || url == "") {
			alert("You must enter a URL to Create a Link");
			return false;
		}
		this.removePane();
		
		if(!this.ln) {
			var tmp = 'javascript:nicTemp();';
			this.ne.nicCommand("createlink",tmp);
			this.ln = this.findElm('A','href',tmp);
		}
		if(this.ln) {
			this.ln.setAttributes({
				href : this.inputs['href'].value,
				title : this.inputs['title'].value,
				target : this.inputs['target'].options[this.inputs['target'].selectedIndex].value
			});
		}
	}
});

nicEditors.registerPlugin(nicPlugin,nicLinkOptions);



/* START CONFIG */
var nicImageOptions = {
	buttons : {
		'image' : {name : 'Add Image', type : 'nicImageButton', tags : ['IMG']}
	}
	
};
/* END CONFIG */

var nicImageButton = nicEditorAdvancedButton.extend({	
	addPane : function() {
		this.im = this.ne.selectedInstance.selElm().parentTag('IMG');
		this.addForm({
			'' : {type : 'title', txt : 'Add/Edit Image'},
			'src' : {type : 'text', txt : 'URL', 'value' : 'http://', style : {width: '150px'}},
			'alt' : {type : 'text', txt : 'Alt Text', style : {width: '100px'}},
			'align' : {type : 'select', txt : 'Align', options : {none : 'Default','left' : 'Left', 'right' : 'Right'}}
		},this.im);
	},
	
	submit : function(e) {
		var src = this.inputs['src'].value;
		if(src == "" || src == "http://") {
			alert("You must enter a Image URL to insert");
			return false;
		}
		this.removePane();

		if(!this.im) {
			var tmp = 'javascript:nicImTemp();';
			this.ne.nicCommand("insertImage",tmp);
			this.im = this.findElm('IMG','src',tmp);
		}
		if(this.im) {
			this.im.setAttributes({
				src : this.inputs['src'].value,
				alt : this.inputs['alt'].value,
				align : this.inputs['align'].value
			});
		}
	}
});

nicEditors.registerPlugin(nicPlugin,nicImageOptions);



var nicXHTML = bkClass.extend({
	stripAttributes : ['_moz_dirty','_moz_resizing','_extended'],
	noShort : ['style','title','script','textarea','a'],
	cssReplace : {'font-weight:bold;' : 'strong', 'font-style:italic;' : 'em'},
	sizes : {1 : 'xx-small', 2 : 'x-small', 3 : 'small', 4 : 'medium', 5 : 'large', 6 : 'x-large'},
	
	construct : function(nicEditor) {
		this.ne = nicEditor;
		if(this.ne.options.xhtml) {
			nicEditor.addEvent('get',this.cleanup.closure(this));
		}
	},
	
	cleanup : function(ni) {
		var node = ni.getElm();
		var xhtml = this.toXHTML(node);
		ni.content = xhtml;
	},
	
	toXHTML : function(n,r,d) {
		var txt = '';
		var attrTxt = '';
		var cssTxt = '';
		var nType = n.nodeType;
		var nName = n.nodeName.toLowerCase();
		var nChild = n.hasChildNodes && n.hasChildNodes();
		var extraNodes = new Array();
		
		switch(nType) {
			case 1:
				var nAttributes = n.attributes;
				
				switch(nName) {
					case 'b':
						nName = 'strong';
						break;
					case 'i':
						nName = 'em';
						break;
					case 'font':
						nName = 'span';
						break;
				}
				
				if(r) {
					for(var i=0;i<nAttributes.length;i++) {
						var attr = nAttributes[i];
						
						var attributeName = attr.nodeName.toLowerCase();
						var attributeValue = attr.nodeValue;
						
						if(!attr.specified || !attributeValue || bkLib.inArray(this.stripAttributes,attributeName) || typeof(attributeValue) == "function") {
							continue;
						}
						
						switch(attributeName) {
							case 'style':
								var css = attributeValue.replace(/ /g,"");
								for(itm in this.cssReplace) {
									if(css.indexOf(itm) != -1) {
										extraNodes.push(this.cssReplace[itm]);
										css = css.replace(itm,'');
									}
								}
								cssTxt += css;
								attributeValue = "";
							break;
							case 'class':
								attributeValue = attributeValue.replace("Apple-style-span","");
							break;
							case 'size':
								cssTxt += "font-size:"+this.sizes[attributeValue]+';';
								attributeValue = "";
							break;
						}
						
						if(attributeValue) {
							attrTxt += ' '+attributeName+'="'+attributeValue+'"';
						}
					}

					if(cssTxt) {
						attrTxt += ' style="'+cssTxt+'"';
					}

					for(var i=0;i<extraNodes.length;i++) {
						txt += '<'+extraNodes[i]+'>';
					}
				
					if(attrTxt == "" && nName == "span") {
						r = false;
					}
					if(r) {
						txt += '<'+nName;
						if(nName != 'br') {
							txt += attrTxt;
						}
					}
				}
				

				
				if(!nChild && !bkLib.inArray(this.noShort,attributeName)) {
					if(r) {
						txt += ' />';
					}
				} else {
					if(r) {
						txt += '>';
					}
					
					for(var i=0;i<n.childNodes.length;i++) {
						var results = this.toXHTML(n.childNodes[i],true,true);
						if(results) {
							txt += results;
						}
					}
				}
					
				if(r && nChild) {
					txt += '</'+nName+'>';
				}
				
				for(var i=0;i<extraNodes.length;i++) {
					txt += '</'+extraNodes[i]+'>';
				}

				break;
			case 3:
				//if(n.nodeValue != '\n') {
					txt += n.nodeValue;
				//}
				break;
		}
		
		return txt;
	}
});
nicEditors.registerPlugin(nicXHTML);








/**
 * jQuery.placeholder - Placeholder plugin for input fields
 * Based on placeholder by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com)
 * Rewritten by Ryotsuke (ryotsuke DOT mitchelmore AT gmail DOT com)
 * Date: 2009/12/11 12:25
 *
 * @author Ryotsuke
 * @version 1.0
 *
 **/

new function($) {
    $.fn.placeholder = function(settings) {
        
        settings = settings || {};
        var key = settings.dataKey || "placeholderValue";
        var attr = settings.attr || "placeholder";        
        var placeholderClassName = settings.placeholderClassName || "placeholderBox";
        var placeholderDivIdPrefix = settings.placeholderDivIdPrefix || "placeholderFor";
        var values = settings.values || [];        
        var value = settings.value || "";
        var position = settings.cursor_position || 0;

        
        return this.filter(":input").each(function(index) { 
            if($(this).hasClass('initialized')) return;
            $(this).addClass('initialized');
            $.data(this, key, values[index] || $(this).attr(attr)); 
            
            $(this).before('<div class="'+placeholderClassName+'">'+$(this).attr(attr)+'</div>');
            $(this).attr(attr, '');
            var newDiv = $(this).prev();
            newDiv.css("position","absolute");
            //newDiv.css("display","inline");
            newDiv.css("cursor","text");
            newDiv.bind("click", function() {
                $(this).next().focus();
            }
            );
        }).bind('keyup', function() {
            
        }).focus(function() {
            $(this).prev().hide();
            
            if ($.trim($(this).val()) === "") 
                if ($.fn.setCursorPosition) {
                  $(this).setCursorPosition(position);
                }
        }).blur(function() {            
            if ($.trim($(this).val()) === "")
                $(this).prev().show();
                
            
        }).each(function(index, elem) {
            
        });
    };
}(jQuery);

/**
 * jQuery Spotlight
 *
 * Project Page: http://www.gilbertpellegrom.co.uk/projects/jquery-spotlight
 * Copyright (c) 2009 Gilbert Pellegrom, http://www.gilbertpellegrom.co.uk
 * Licensed under the GPL license (http://www.gnu.org/licenses/gpl-3.0.html)
 * Version 1.0 (12/06/2009)
 */
(function($) {

	$.fn.spotlight = function(options) {
		// Default settings
		settings = $.extend({}, {
			opacity: .5,
			speed: 600,
			pause: 600,
			color: '#000',
			animate: true,
			easing: '',
			exitEvent: 'click',
			onShow: function(){},
			onHide: function(){}
		}, options);
		
		// Do a compatibility check
		if(!jQuery.support.opacity) return false;
		
		if($('#spotlight').size() == 0){
			// Add the overlay div
			$('body').append('<div id="spotlight"></div>');
			
			// Get our elements
			var element = $(this);
			var spotlight = $('#spotlight');
			
			// Set the CSS styles
			spotlight.css({
				'position':'fixed', 
				'background':settings.color, 
				'opacity':'0', 
				'top':'0px', 
				'left':'0px', 
				'height':'100%', 
				'width':'100%', 
				'z-index':'9998'
			});
			
			// Set element CSS
			var currentPos = element.css('position');
			if(currentPos == 'static'){
				element.css({'position':'relative', 'z-index':'9999'});
			} else {
				element.css('z-index', '9999');
			}
			
			// Fade in the spotlight
			if(settings.animate){
				
				spotlight.animate({opacity: 0.0}, settings.pause, settings.easing).animate({opacity: settings.opacity}, settings.speed, settings.easing, function(){
					// Trigger the onShow callback
					settings.onShow.call(this);
				});
			} else {
				spotlight.css('opacity', settings.opacity);
				// Trigger the onShow callback
				settings.onShow.call(this);
			}
			
			// Set up click to close
			spotlight.live(settings.exitEvent, function(){
				if(settings.animate){
					spotlight.stop();spotlight.stop();
					spotlight.animate({opacity: 0}, settings.speed, settings.easing, function(){
						if(currentPos == 'static') element.css('position', 'static');
						element.css('z-index', '1');
						$(this).remove();
						// Trigger the onHide callback
						settings.onHide.call(this);
					});
				} else {
					spotlight.css('opacity', '0');
					if(currentPos == 'static') element.css('position', 'static');
					element.css('z-index', '1');
					$(this).remove();
					// Trigger the onHide callback
					settings.onHide.call(this);
				}
			});
		}

		// Returns the jQuery object to allow for chainability.  
		return this;
	};

})(jQuery);
/*
 * jQuery validation plug-in 1.6
 *
 * http://bassistance.de/jquery-plugins/jquery-plugin-validation/
 * http://docs.jquery.com/Plugins/Validation
 *
 * Copyright (c) 2006 - 2008 JÃ¶rn Zaefferer
 *
 * $Id: jquery.validate.js 6403 2009-06-17 14:27: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
 */
(function($){$.extend($.fn,{validate:function(options){if(!this.length){options&&options.debug&&window.console&&console.warn("nothing selected, can't validate, returning nothing");return;}var validator=$.data(this[0],'validator');if(validator){return validator;}validator=new $.validator(options,this[0]);$.data(this[0],'validator',validator);if(validator.settings.onsubmit){this.find("input, button").filter(".cancel").click(function(){validator.cancelSubmit=true;});if(validator.settings.submitHandler){this.find("input, button").filter(":submit").click(function(){validator.submitButton=this;});}this.submit(function(event){if(validator.settings.debug)event.preventDefault();function handle(){if(validator.settings.submitHandler){if(validator.submitButton){var hidden=$("<input type='hidden'/>").attr("name",validator.submitButton.name).val(validator.submitButton.value).appendTo(validator.currentForm);}validator.settings.submitHandler.call(validator,validator.currentForm);if(validator.submitButton){hidden.remove();}return false;}return true;}if(validator.cancelSubmit){validator.cancelSubmit=false;return handle();}if(validator.form()){if(validator.pendingRequest){validator.formSubmitted=true;return false;}return handle();}else{validator.focusInvalid();return false;}});}return validator;},valid:function(){if($(this[0]).is('form')){return this.validate().form();}else{var valid=true;var validator=$(this[0].form).validate();this.each(function(){valid&=validator.element(this);});return valid;}},removeAttrs:function(attributes){var result={},$element=this;$.each(attributes.split(/\s/),function(index,value){result[value]=$element.attr(value);$element.removeAttr(value);});return result;},rules:function(command,argument){var element=this[0];if(command){var settings=$.data(element.form,'validator').settings;var staticRules=settings.rules;var existingRules=$.validator.staticRules(element);switch(command){case"add":$.extend(existingRules,$.validator.normalizeRule(argument));staticRules[element.name]=existingRules;if(argument.messages)settings.messages[element.name]=$.extend(settings.messages[element.name],argument.messages);break;case"remove":if(!argument){delete staticRules[element.name];return existingRules;}var filtered={};$.each(argument.split(/\s/),function(index,method){filtered[method]=existingRules[method];delete existingRules[method];});return filtered;}}var data=$.validator.normalizeRules($.extend({},$.validator.metadataRules(element),$.validator.classRules(element),$.validator.attributeRules(element),$.validator.staticRules(element)),element);if(data.required){var param=data.required;delete data.required;data=$.extend({required:param},data);}return data;}});$.extend($.expr[":"],{blank:function(a){return!$.trim(""+a.value);},filled:function(a){return!!$.trim(""+a.value);},unchecked:function(a){return!a.checked;}});$.validator=function(options,form){this.settings=$.extend({},$.validator.defaults,options);this.currentForm=form;this.init();};$.validator.format=function(source,params){if(arguments.length==1)return function(){var args=$.makeArray(arguments);args.unshift(source);return $.validator.format.apply(this,args);};if(arguments.length>2&&params.constructor!=Array){params=$.makeArray(arguments).slice(1);}if(params.constructor!=Array){params=[params];}$.each(params,function(i,n){source=source.replace(new RegExp("\\{"+i+"\\}","g"),n);});return source;};$.extend($.validator,{defaults:{messages:{},groups:{},rules:{},errorClass:"error",validClass:"valid",errorElement:"label",focusInvalid:true,errorContainer:$([]),errorLabelContainer:$([]),onsubmit:true,ignore:[],ignoreTitle:false,onfocusin:function(element){this.lastActive=element;if(this.settings.focusCleanup&&!this.blockFocusCleanup){this.settings.unhighlight&&this.settings.unhighlight.call(this,element,this.settings.errorClass,this.settings.validClass);this.errorsFor(element).hide();}},onfocusout:function(element){if(!this.checkable(element)&&(element.name in this.submitted||!this.optional(element))){this.element(element);}},onkeyup:function(element){if(element.name in this.submitted||element==this.lastElement){this.element(element);}},onclick:function(element){if(element.name in this.submitted)this.element(element);else if(element.parentNode.name in this.submitted)this.element(element.parentNode)},highlight:function(element,errorClass,validClass){$(element).addClass(errorClass).removeClass(validClass);},unhighlight:function(element,errorClass,validClass){$(element).removeClass(errorClass).addClass(validClass);}},setDefaults:function(settings){$.extend($.validator.defaults,settings);},messages:{required:"This field is required.",remote:"Please fix this field.",email:"Please enter a valid email address.",url:"Please enter a valid URL.",date:"Please enter a valid date.",dateISO:"Please enter a valid date (ISO).",number:"Please enter a valid number.",digits:"Please enter only digits.",creditcard:"Please enter a valid credit card number.",equalTo:"Please enter the same value again.",accept:"Please enter a value with a valid extension.",maxlength:$.validator.format("Please enter no more than {0} characters."),minlength:$.validator.format("Please enter at least {0} characters."),rangelength:$.validator.format("Please enter a value between {0} and {1} characters long."),range:$.validator.format("Please enter a value between {0} and {1}."),max:$.validator.format("Please enter a value less than or equal to {0}."),min:$.validator.format("Please enter a value greater than or equal to {0}.")},autoCreateRanges:false,prototype:{init:function(){this.labelContainer=$(this.settings.errorLabelContainer);this.errorContext=this.labelContainer.length&&this.labelContainer||$(this.currentForm);this.containers=$(this.settings.errorContainer).add(this.settings.errorLabelContainer);this.submitted={};this.valueCache={};this.pendingRequest=0;this.pending={};this.invalid={};this.reset();var groups=(this.groups={});$.each(this.settings.groups,function(key,value){$.each(value.split(/\s/),function(index,name){groups[name]=key;});});var rules=this.settings.rules;$.each(rules,function(key,value){rules[key]=$.validator.normalizeRule(value);});function delegate(event){var validator=$.data(this[0].form,"validator");validator.settings["on"+event.type]&&validator.settings["on"+event.type].call(validator,this[0]);}$(this.currentForm).delegate("focusin focusout keyup",":text, :password, :file, select, textarea",delegate).delegate("click",":radio, :checkbox, select, option",delegate);if(this.settings.invalidHandler)$(this.currentForm).bind("invalid-form.validate",this.settings.invalidHandler);},form:function(){this.checkForm();$.extend(this.submitted,this.errorMap);this.invalid=$.extend({},this.errorMap);if(!this.valid())$(this.currentForm).triggerHandler("invalid-form",[this]);this.showErrors();return this.valid();},checkForm:function(){this.prepareForm();for(var i=0,elements=(this.currentElements=this.elements());elements[i];i++){this.check(elements[i]);}return this.valid();},element:function(element){element=this.clean(element);this.lastElement=element;this.prepareElement(element);this.currentElements=$(element);var result=this.check(element);if(result){delete this.invalid[element.name];}else{this.invalid[element.name]=true;}if(!this.numberOfInvalids()){this.toHide=this.toHide.add(this.containers);}this.showErrors();return result;},showErrors:function(errors){if(errors){$.extend(this.errorMap,errors);this.errorList=[];for(var name in errors){this.errorList.push({message:errors[name],element:this.findByName(name)[0]});}this.successList=$.grep(this.successList,function(element){return!(element.name in errors);});}this.settings.showErrors?this.settings.showErrors.call(this,this.errorMap,this.errorList):this.defaultShowErrors();},resetForm:function(){if($.fn.resetForm)$(this.currentForm).resetForm();this.submitted={};this.prepareForm();this.hideErrors();this.elements().removeClass(this.settings.errorClass);},numberOfInvalids:function(){return this.objectLength(this.invalid);},objectLength:function(obj){var count=0;for(var i in obj)count++;return count;},hideErrors:function(){this.addWrapper(this.toHide).hide();},valid:function(){return this.size()==0;},size:function(){return this.errorList.length;},focusInvalid:function(){if(this.settings.focusInvalid){try{$(this.findLastActive()||this.errorList.length&&this.errorList[0].element||[]).filter(":visible").focus();}catch(e){}}},findLastActive:function(){var lastActive=this.lastActive;return lastActive&&$.grep(this.errorList,function(n){return n.element.name==lastActive.name;}).length==1&&lastActive;},elements:function(){var validator=this,rulesCache={};return $([]).add(this.currentForm.elements).filter(":input").not(":submit, :reset, :image, [disabled]").not(this.settings.ignore).filter(function(){!this.name&&validator.settings.debug&&window.console&&console.error("%o has no name assigned",this);if(this.name in rulesCache||!validator.objectLength($(this).rules()))return false;rulesCache[this.name]=true;return true;});},clean:function(selector){return $(selector)[0];},errors:function(){return $(this.settings.errorElement+"."+this.settings.errorClass,this.errorContext);},reset:function(){this.successList=[];this.errorList=[];this.errorMap={};this.toShow=$([]);this.toHide=$([]);this.currentElements=$([]);},prepareForm:function(){this.reset();this.toHide=this.errors().add(this.containers);},prepareElement:function(element){this.reset();this.toHide=this.errorsFor(element);},check:function(element){element=this.clean(element);if(this.checkable(element)){element=this.findByName(element.name)[0];}var rules=$(element).rules();var dependencyMismatch=false;for(method in rules){var rule={method:method,parameters:rules[method]};try{var result=$.validator.methods[method].call(this,element.value.replace(/\r/g,""),element,rule.parameters);if(result=="dependency-mismatch"){dependencyMismatch=true;continue;}dependencyMismatch=false;if(result=="pending"){this.toHide=this.toHide.not(this.errorsFor(element));return;}if(!result){this.formatAndAdd(element,rule);return false;}}catch(e){this.settings.debug&&window.console&&console.log("exception occured when checking element "+element.id
+", check the '"+rule.method+"' method",e);throw e;}}if(dependencyMismatch)return;if(this.objectLength(rules))this.successList.push(element);return true;},customMetaMessage:function(element,method){if(!$.metadata)return;var meta=this.settings.meta?$(element).metadata()[this.settings.meta]:$(element).metadata();return meta&&meta.messages&&meta.messages[method];},customMessage:function(name,method){var m=this.settings.messages[name];return m&&(m.constructor==String?m:m[method]);},findDefined:function(){for(var i=0;i<arguments.length;i++){if(arguments[i]!==undefined)return arguments[i];}return undefined;},defaultMessage:function(element,method){return this.findDefined(this.customMessage(element.name,method),this.customMetaMessage(element,method),!this.settings.ignoreTitle&&element.title||undefined,$.validator.messages[method],"<strong>Warning: No message defined for "+element.name+"</strong>");},formatAndAdd:function(element,rule){var message=this.defaultMessage(element,rule.method),theregex=/\$?\{(\d+)\}/g;if(typeof message=="function"){message=message.call(this,rule.parameters,element);}else if(theregex.test(message)){message=jQuery.format(message.replace(theregex,'{$1}'),rule.parameters);}this.errorList.push({message:message,element:element});this.errorMap[element.name]=message;this.submitted[element.name]=message;},addWrapper:function(toToggle){if(this.settings.wrapper)toToggle=toToggle.add(toToggle.parent(this.settings.wrapper));return toToggle;},defaultShowErrors:function(){for(var i=0;this.errorList[i];i++){var error=this.errorList[i];this.settings.highlight&&this.settings.highlight.call(this,error.element,this.settings.errorClass,this.settings.validClass);this.showLabel(error.element,error.message);}if(this.errorList.length){this.toShow=this.toShow.add(this.containers);}if(this.settings.success){for(var i=0;this.successList[i];i++){this.showLabel(this.successList[i]);}}if(this.settings.unhighlight){for(var i=0,elements=this.validElements();elements[i];i++){this.settings.unhighlight.call(this,elements[i],this.settings.errorClass,this.settings.validClass);}}this.toHide=this.toHide.not(this.toShow);this.hideErrors();this.addWrapper(this.toShow).show();},validElements:function(){return this.currentElements.not(this.invalidElements());},invalidElements:function(){return $(this.errorList).map(function(){return this.element;});},showLabel:function(element,message){var label=this.errorsFor(element);if(label.length){label.removeClass().addClass(this.settings.errorClass);label.attr("generated")&&label.html(message);}else{label=$("<"+this.settings.errorElement+"/>").attr({"for":this.idOrName(element),generated:true}).addClass(this.settings.errorClass).html(message||"");if(this.settings.wrapper){label=label.hide().show().wrap("<"+this.settings.wrapper+"/>").parent();}if(!this.labelContainer.append(label).length)this.settings.errorPlacement?this.settings.errorPlacement(label,$(element)):label.insertAfter(element);}if(!message&&this.settings.success){label.text("");typeof this.settings.success=="string"?label.addClass(this.settings.success):this.settings.success(label);}this.toShow=this.toShow.add(label);},errorsFor:function(element){var name=this.idOrName(element);return this.errors().filter(function(){return $(this).attr('for')==name});},idOrName:function(element){return this.groups[element.name]||(this.checkable(element)?element.name:element.id||element.name);},checkable:function(element){return/radio|checkbox/i.test(element.type);},findByName:function(name){var form=this.currentForm;return $(document.getElementsByName(name)).map(function(index,element){return element.form==form&&element.name==name&&element||null;});},getLength:function(value,element){switch(element.nodeName.toLowerCase()){case'select':return $("option:selected",element).length;case'input':if(this.checkable(element))return this.findByName(element.name).filter(':checked').length;}return value.length;},depend:function(param,element){return this.dependTypes[typeof param]?this.dependTypes[typeof param](param,element):true;},dependTypes:{"boolean":function(param,element){return param;},"string":function(param,element){return!!$(param,element.form).length;},"function":function(param,element){return param(element);}},optional:function(element){return!$.validator.methods.required.call(this,$.trim(element.value),element)&&"dependency-mismatch";},startRequest:function(element){if(!this.pending[element.name]){this.pendingRequest++;this.pending[element.name]=true;}},stopRequest:function(element,valid){this.pendingRequest--;if(this.pendingRequest<0)this.pendingRequest=0;delete this.pending[element.name];if(valid&&this.pendingRequest==0&&this.formSubmitted&&this.form()){$(this.currentForm).submit();this.formSubmitted=false;}else if(!valid&&this.pendingRequest==0&&this.formSubmitted){$(this.currentForm).triggerHandler("invalid-form",[this]);this.formSubmitted=false;}},previousValue:function(element){return $.data(element,"previousValue")||$.data(element,"previousValue",{old:null,valid:true,message:this.defaultMessage(element,"remote")});}},classRuleSettings:{required:{required:true},email:{email:true},url:{url:true},date:{date:true},dateISO:{dateISO:true},dateDE:{dateDE:true},number:{number:true},numberDE:{numberDE:true},digits:{digits:true},creditcard:{creditcard:true}},addClassRules:function(className,rules){className.constructor==String?this.classRuleSettings[className]=rules:$.extend(this.classRuleSettings,className);},classRules:function(element){var rules={};var classes=$(element).attr('class');classes&&$.each(classes.split(' '),function(){if(this in $.validator.classRuleSettings){$.extend(rules,$.validator.classRuleSettings[this]);}});return rules;},attributeRules:function(element){var rules={};var $element=$(element);for(method in $.validator.methods){var value=$element.attr(method);if(value){rules[method]=value;}}if(rules.maxlength&&/-1|2147483647|524288/.test(rules.maxlength)){delete rules.maxlength;}return rules;},metadataRules:function(element){if(!$.metadata)return{};var meta=$.data(element.form,'validator').settings.meta;return meta?$(element).metadata()[meta]:$(element).metadata();},staticRules:function(element){var rules={};var validator=$.data(element.form,'validator');if(validator.settings.rules){rules=$.validator.normalizeRule(validator.settings.rules[element.name])||{};}return rules;},normalizeRules:function(rules,element){$.each(rules,function(prop,val){if(val===false){delete rules[prop];return;}if(val.param||val.depends){var keepRule=true;switch(typeof val.depends){case"string":keepRule=!!$(val.depends,element.form).length;break;case"function":keepRule=val.depends.call(element,element);break;}if(keepRule){rules[prop]=val.param!==undefined?val.param:true;}else{delete rules[prop];}}});$.each(rules,function(rule,parameter){rules[rule]=$.isFunction(parameter)?parameter(element):parameter;});$.each(['minlength','maxlength','min','max'],function(){if(rules[this]){rules[this]=Number(rules[this]);}});$.each(['rangelength','range'],function(){if(rules[this]){rules[this]=[Number(rules[this][0]),Number(rules[this][1])];}});if($.validator.autoCreateRanges){if(rules.min&&rules.max){rules.range=[rules.min,rules.max];delete rules.min;delete rules.max;}if(rules.minlength&&rules.maxlength){rules.rangelength=[rules.minlength,rules.maxlength];delete rules.minlength;delete rules.maxlength;}}if(rules.messages){delete rules.messages}return rules;},normalizeRule:function(data){if(typeof data=="string"){var transformed={};$.each(data.split(/\s/),function(){transformed[this]=true;});data=transformed;}return data;},addMethod:function(name,method,message){$.validator.methods[name]=method;$.validator.messages[name]=message!=undefined?message:$.validator.messages[name];if(method.length<3){$.validator.addClassRules(name,$.validator.normalizeRule(name));}},methods:{required:function(value,element,param){if(!this.depend(param,element))return"dependency-mismatch";switch(element.nodeName.toLowerCase()){case'select':var val=$(element).val();return val&&val.length>0;case'input':if(this.checkable(element))return this.getLength(value,element)>0;default:return $.trim(value).length>0;}},remote:function(value,element,param){if(this.optional(element))return"dependency-mismatch";var previous=this.previousValue(element);if(!this.settings.messages[element.name])this.settings.messages[element.name]={};previous.originalMessage=this.settings.messages[element.name].remote;this.settings.messages[element.name].remote=previous.message;param=typeof param=="string"&&{url:param}||param;if(previous.old!==value){previous.old=value;var validator=this;this.startRequest(element);var data={};data[element.name]=value;$.ajax($.extend(true,{url:param,mode:"abort",port:"validate"+element.name,dataType:"json",data:data,success:function(response){validator.settings.messages[element.name].remote=previous.originalMessage;var valid=response===true;if(valid){var submitted=validator.formSubmitted;validator.prepareElement(element);validator.formSubmitted=submitted;validator.successList.push(element);validator.showErrors();}else{var errors={};var message=(previous.message=response||validator.defaultMessage(element,"remote"));errors[element.name]=$.isFunction(message)?message(value):message;validator.showErrors(errors);}previous.valid=valid;validator.stopRequest(element,valid);}},param));return"pending";}else if(this.pending[element.name]){return"pending";}return previous.valid;},minlength:function(value,element,param){return this.optional(element)||this.getLength($.trim(value),element)>=param;},maxlength:function(value,element,param){return this.optional(element)||this.getLength($.trim(value),element)<=param;},rangelength:function(value,element,param){var length=this.getLength($.trim(value),element);return this.optional(element)||(length>=param[0]&&length<=param[1]);},min:function(value,element,param){return this.optional(element)||value>=param;},max:function(value,element,param){return this.optional(element)||value<=param;},range:function(value,element,param){return this.optional(element)||(value>=param[0]&&value<=param[1]);},email:function(value,element){return this.optional(element)||/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);},url:function(value,element){return this.optional(element)||/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i.test(value);},date:function(value,element){return this.optional(element)||!/Invalid|NaN/.test(new Date(value));},dateISO:function(value,element){return this.optional(element)||/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/.test(value);},number:function(value,element){return this.optional(element)||/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(value);},digits:function(value,element){return this.optional(element)||/^\d+$/.test(value);},creditcard:function(value,element){if(this.optional(element))return"dependency-mismatch";if(/[^0-9-]+/.test(value))return false;var nCheck=0,nDigit=0,bEven=false;value=value.replace(/\D/g,"");for(var n=value.length-1;n>=0;n--){var cDigit=value.charAt(n);var nDigit=parseInt(cDigit,10);if(bEven){if((nDigit*=2)>9)nDigit-=9;}nCheck+=nDigit;bEven=!bEven;}return(nCheck%10)==0;},accept:function(value,element,param){param=typeof param=="string"?param.replace(/,/g,'|'):"png|jpe?g|gif";return this.optional(element)||value.match(new RegExp(".("+param+")$","i"));},equalTo:function(value,element,param){var target=$(param).unbind(".validate-equalTo").bind("blur.validate-equalTo",function(){$(element).valid();});return value==target.val();}}});$.format=$.validator.format;})(jQuery);;(function($){var ajax=$.ajax;var pendingRequests={};$.ajax=function(settings){settings=$.extend(settings,$.extend({},$.ajaxSettings,settings));var port=settings.port;if(settings.mode=="abort"){if(pendingRequests[port]){pendingRequests[port].abort();}return(pendingRequests[port]=ajax.apply(this,arguments));}return ajax.apply(this,arguments);};})(jQuery);;(function($){$.each({focus:'focusin',blur:'focusout'},function(original,fix){$.event.special[fix]={setup:function(){if($.browser.msie)return false;this.addEventListener(original,$.event.special[fix].handler,true);},teardown:function(){if($.browser.msie)return false;this.removeEventListener(original,$.event.special[fix].handler,true);},handler:function(e){arguments[0]=$.event.fix(e);arguments[0].type=fix;return $.event.handle.apply(this,arguments);}};});$.extend($.fn,{delegate:function(type,delegate,handler){return this.bind(type,function(event){var target=$(event.target);if(target.is(delegate)){return handler.apply(target,arguments);}});},triggerEvent:function(type,target){return this.triggerHandler(type,[$.event.fix({type:type,target:target})]);}})})(jQuery);
/*
 * jQuery Form Plugin
 * version: 2.36 (07-NOV-2009)
 * @requires jQuery v1.2.6 or later
 *
 * Examples and documentation at: http://malsup.com/jquery/form/
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */
;(function($) {

/*
	Usage Note:
	-----------
	Do not use both ajaxSubmit and ajaxForm on the same form.  These
	functions are intended to be exclusive.  Use ajaxSubmit if you want
	to bind your own submit handler to the form.  For example,

	$(document).ready(function() {
		$('#myForm').bind('submit', function() {
			$(this).ajaxSubmit({
				target: '#output'
			});
			return false; // <-- important!
		});
	});

	Use ajaxForm when you want the plugin to manage all the event binding
	for you.  For example,

	$(document).ready(function() {
		$('#myForm').ajaxForm({
			target: '#output'
		});
	});

	When using ajaxForm, the ajaxSubmit function will be invoked for you
	at the appropriate time.
*/

/**
 * ajaxSubmit() provides a mechanism for immediately submitting
 * an HTML form using AJAX.
 */
$.fn.ajaxSubmit = function(options) {
	// fast fail if nothing selected (http://dev.jquery.com/ticket/2752)
	if (!this.length) {
		log('ajaxSubmit: skipping submit process - no element selected');
		return this;
	}

	if (typeof options == 'function')
		options = { success: options };

	var url = $.trim(this.attr('action'));
	if (url) {
		// clean url (don't include hash vaue)
		url = (url.match(/^([^#]+)/)||[])[1];
   	}
   	url = url || window.location.href || '';

	options = $.extend({
		url:  url,
		type: this.attr('method') || 'GET',
		iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'
	}, options || {});

	// hook for manipulating the form data before it is extracted;
	// convenient for use with rich editors like tinyMCE or FCKEditor
	var veto = {};
	this.trigger('form-pre-serialize', [this, options, veto]);
	if (veto.veto) {
		log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');
		return this;
	}

	// provide opportunity to alter form data before it is serialized
	if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {
		log('ajaxSubmit: submit aborted via beforeSerialize callback');
		return this;
	}

	var a = this.formToArray(options.semantic);
	if (options.data) {
		options.extraData = options.data;
		for (var n in options.data) {
		  if(options.data[n] instanceof Array) {
			for (var k in options.data[n])
			  a.push( { name: n, value: options.data[n][k] } );
		  }
		  else
			 a.push( { name: n, value: options.data[n] } );
		}
	}

	// give pre-submit callback an opportunity to abort the submit
	if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {
		log('ajaxSubmit: submit aborted via beforeSubmit callback');
		return this;
	}

	// fire vetoable 'validate' event
	this.trigger('form-submit-validate', [a, this, options, veto]);
	if (veto.veto) {
		log('ajaxSubmit: submit vetoed via form-submit-validate trigger');
		return this;
	}

	var q = $.param(a);

	if (options.type.toUpperCase() == 'GET') {
		options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;
		options.data = null;  // data is null for 'get'
	}
	else
		options.data = q; // data is the query string for 'post'

	var $form = this, callbacks = [];
	if (options.resetForm) callbacks.push(function() { $form.resetForm(); });
	if (options.clearForm) callbacks.push(function() { $form.clearForm(); });

	// perform a load on the target only if dataType is not provided
	if (!options.dataType && options.target) {
		var oldSuccess = options.success || function(){};
		callbacks.push(function(data) {
			$(options.target).html(data).each(oldSuccess, arguments);
		});
	}
	else if (options.success)
		callbacks.push(options.success);

	options.success = function(data, status) {
		for (var i=0, max=callbacks.length; i < max; i++)
			callbacks[i].apply(options, [data, status, $form]);
	};

	// are there files to upload?
	var files = $('input:file', this).fieldValue();
	var found = false;
	for (var j=0; j < files.length; j++)
		if (files[j])
			found = true;

	var multipart = false;
//	var mp = 'multipart/form-data';
//	multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);

	// options.iframe allows user to force iframe mode
	// 06-NOV-09: now defaulting to iframe mode if file input is detected
   if ((files.length && options.iframe !== false) || options.iframe || found || multipart) {
	   // hack to fix Safari hang (thanks to Tim Molendijk for this)
	   // see:  http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d
	   if (options.closeKeepAlive)
		   $.get(options.closeKeepAlive, fileUpload);
	   else
		   fileUpload();
	   }
   else
	   $.ajax(options);

	// fire 'notify' event
	this.trigger('form-submit-notify', [this, options]);
	return this;


	// private function for handling file uploads (hat tip to YAHOO!)
	function fileUpload() {
		var form = $form[0];

		if ($(':input[name=submit]', form).length) {
			alert('Error: Form elements must not be named "submit".');
			return;
		}

		var opts = $.extend({}, $.ajaxSettings, options);
		var s = $.extend(true, {}, $.extend(true, {}, $.ajaxSettings), opts);

		var id = 'jqFormIO' + (new Date().getTime());
		var $io = $('<iframe id="' + id + '" name="' + id + '" src="'+ opts.iframeSrc +'" />');
		var io = $io[0];

		$io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });

		var xhr = { // mock object
			aborted: 0,
			responseText: null,
			responseXML: null,
			status: 0,
			statusText: 'n/a',
			getAllResponseHeaders: function() {},
			getResponseHeader: function() {},
			setRequestHeader: function() {},
			abort: function() {
				this.aborted = 1;
				$io.attr('src', opts.iframeSrc); // abort op in progress
			}
		};

		var g = opts.global;
		// trigger ajax global events so that activity/block indicators work like normal
		if (g && ! $.active++) $.event.trigger("ajaxStart");
		if (g) $.event.trigger("ajaxSend", [xhr, opts]);

		if (s.beforeSend && s.beforeSend(xhr, s) === false) {
			s.global && $.active--;
			return;
		}
		if (xhr.aborted)
			return;

		var cbInvoked = 0;
		var timedOut = 0;

		// add submitting element to data if we know it
		var sub = form.clk;
		if (sub) {
			var n = sub.name;
			if (n && !sub.disabled) {
				options.extraData = options.extraData || {};
				options.extraData[n] = sub.value;
				if (sub.type == "image") {
					options.extraData[name+'.x'] = form.clk_x;
					options.extraData[name+'.y'] = form.clk_y;
				}
			}
		}

		// take a breath so that pending repaints get some cpu time before the upload starts
		setTimeout(function() {
			// make sure form attrs are set
			var t = $form.attr('target'), a = $form.attr('action');

			// update form attrs in IE friendly way
			form.setAttribute('target',id);
			if (form.getAttribute('method') != 'POST')
				form.setAttribute('method', 'POST');
			if (form.getAttribute('action') != opts.url)
				form.setAttribute('action', opts.url);

			// ie borks in some cases when setting encoding
			if (! options.skipEncodingOverride) {
				$form.attr({
					encoding: 'multipart/form-data',
					enctype:  'multipart/form-data'
				});
			}

			// support timout
			if (opts.timeout)
				setTimeout(function() { timedOut = true; cb(); }, opts.timeout);

			// add "extra" data to form if provided in options
			var extraInputs = [];
			try {
				if (options.extraData)
					for (var n in options.extraData)
						extraInputs.push(
							$('<input type="hidden" name="'+n+'" value="'+options.extraData[n]+'" />')
								.appendTo(form)[0]);

				// add iframe to doc and submit the form
				$io.appendTo('body');
				io.attachEvent ? io.attachEvent('onload', cb) : io.addEventListener('load', cb, false);
				form.submit();
			}
			finally {
				// reset attrs and remove "extra" input elements
				form.setAttribute('action',a);
				t ? form.setAttribute('target', t) : $form.removeAttr('target');
				$(extraInputs).remove();
			}
		}, 10);

		var domCheckCount = 50;

		function cb() {
			if (cbInvoked++) return;

			io.detachEvent ? io.detachEvent('onload', cb) : io.removeEventListener('load', cb, false);

			var ok = true;
			try {
				if (timedOut) throw 'timeout';
				// extract the server response from the iframe
				var data, doc;

				doc = io.contentWindow ? io.contentWindow.document : io.contentDocument ? io.contentDocument : io.document;
				
				var isXml = opts.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);
				log('isXml='+isXml);
				if (!isXml && (doc.body == null || doc.body.innerHTML == '')) {
				 	if (--domCheckCount) {
						// in some browsers (Opera) the iframe DOM is not always traversable when
						// the onload callback fires, so we loop a bit to accommodate
						cbInvoked = 0;
						setTimeout(cb, 100);
						return;
					}
					log('Could not access iframe DOM after 50 tries.');
					return;
				}

				xhr.responseText = doc.body ? doc.body.innerHTML : null;
				xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;
				xhr.getResponseHeader = function(header){
					var headers = {'content-type': opts.dataType};
					return headers[header];
				};

				if (opts.dataType == 'json' || opts.dataType == 'script') {
					// see if user embedded response in textarea
					var ta = doc.getElementsByTagName('textarea')[0];
					if (ta)
						xhr.responseText = ta.value;
					else {
						// account for browsers injecting pre around json response
						var pre = doc.getElementsByTagName('pre')[0];
						if (pre)
							xhr.responseText = pre.innerHTML;
					}			  
				}
				else if (opts.dataType == 'xml' && !xhr.responseXML && xhr.responseText != null) {
					xhr.responseXML = toXml(xhr.responseText);
				}
				data = $.httpData(xhr, opts.dataType);
			}
			catch(e){
				ok = false;
				$.handleError(opts, xhr, 'error', e);
			}

			// ordering of these callbacks/triggers is odd, but that's how $.ajax does it
			if (ok) {
				opts.success(data, 'success');
				if (g) $.event.trigger("ajaxSuccess", [xhr, opts]);
			}
			if (g) $.event.trigger("ajaxComplete", [xhr, opts]);
			if (g && ! --$.active) $.event.trigger("ajaxStop");
			if (opts.complete) opts.complete(xhr, ok ? 'success' : 'error');

			// clean up
			setTimeout(function() {
				$io.remove();
				xhr.responseXML = null;
			}, 100);
		};

		function toXml(s, doc) {
			if (window.ActiveXObject) {
				doc = new ActiveXObject('Microsoft.XMLDOM');
				doc.async = 'false';
				doc.loadXML(s);
			}
			else
				doc = (new DOMParser()).parseFromString(s, 'text/xml');
			return (doc && doc.documentElement && doc.documentElement.tagName != 'parsererror') ? doc : null;
		};
	};
};

/**
 * ajaxForm() provides a mechanism for fully automating form submission.
 *
 * The advantages of using this method instead of ajaxSubmit() are:
 *
 * 1: This method will include coordinates for <input type="image" /> elements (if the element
 *	is used to submit the form).
 * 2. This method will include the submit element's name/value data (for the element that was
 *	used to submit the form).
 * 3. This method binds the submit() method to the form for you.
 *
 * The options argument for ajaxForm works exactly as it does for ajaxSubmit.  ajaxForm merely
 * passes the options argument along after properly binding events for submit elements and
 * the form itself.
 */
$.fn.ajaxForm = function(options) {
	return this.ajaxFormUnbind().bind('submit.form-plugin', function() {
		$(this).ajaxSubmit(options);
		return false;
	}).bind('click.form-plugin', function(e) {
		var target = e.target;
		var $el = $(target);
		if (!($el.is(":submit,input:image"))) {
			// is this a child element of the submit el?  (ex: a span within a button)
			var t = $el.closest(':submit');
			if (t.length == 0)
				return;
			target = t[0];
		}
		var form = this;
		form.clk = target;
		if (target.type == 'image') {
			if (e.offsetX != undefined) {
				form.clk_x = e.offsetX;
				form.clk_y = e.offsetY;
			} else if (typeof $.fn.offset == 'function') { // try to use dimensions plugin
				var offset = $el.offset();
				form.clk_x = e.pageX - offset.left;
				form.clk_y = e.pageY - offset.top;
			} else {
				form.clk_x = e.pageX - target.offsetLeft;
				form.clk_y = e.pageY - target.offsetTop;
			}
		}
		// clear form vars
		setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);
	});
};

// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm
$.fn.ajaxFormUnbind = function() {
	return this.unbind('submit.form-plugin click.form-plugin');
};

/**
 * formToArray() gathers form element data into an array of objects that can
 * be passed to any of the following ajax functions: $.get, $.post, or load.
 * Each object in the array has both a 'name' and 'value' property.  An example of
 * an array for a simple login form might be:
 *
 * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]
 *
 * It is this array that is passed to pre-submit callback functions provided to the
 * ajaxSubmit() and ajaxForm() methods.
 */
$.fn.formToArray = function(semantic) {
	var a = [];
	if (this.length == 0) return a;

	var form = this[0];
	var els = semantic ? form.getElementsByTagName('*') : form.elements;
	if (!els) return a;
	for(var i=0, max=els.length; i < max; i++) {
		var el = els[i];
		var n = el.name;
		if (!n) continue;

		if (semantic && form.clk && el.type == "image") {
			// handle image inputs on the fly when semantic == true
			if(!el.disabled && form.clk == el) {
				a.push({name: n, value: $(el).val()});
				a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
			}
			continue;
		}

		var v = $.fieldValue(el, true);
		if (v && v.constructor == Array) {
			for(var j=0, jmax=v.length; j < jmax; j++)
				a.push({name: n, value: v[j]});
		}
		else if (v !== null && typeof v != 'undefined')
			a.push({name: n, value: v});
	}

	if (!semantic && form.clk) {
		// input type=='image' are not found in elements array! handle it here
		var $input = $(form.clk), input = $input[0], n = input.name;
		if (n && !input.disabled && input.type == 'image') {
			a.push({name: n, value: $input.val()});
			a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
		}
	}
	return a;
};

/**
 * Serializes form data into a 'submittable' string. This method will return a string
 * in the format: name1=value1&amp;name2=value2
 */
$.fn.formSerialize = function(semantic) {
	//hand off to jQuery.param for proper encoding
	return $.param(this.formToArray(semantic));
};

/**
 * Serializes all field elements in the jQuery object into a query string.
 * This method will return a string in the format: name1=value1&amp;name2=value2
 */
$.fn.fieldSerialize = function(successful) {
	var a = [];
	this.each(function() {
		var n = this.name;
		if (!n) return;
		var v = $.fieldValue(this, successful);
		if (v && v.constructor == Array) {
			for (var i=0,max=v.length; i < max; i++)
				a.push({name: n, value: v[i]});
		}
		else if (v !== null && typeof v != 'undefined')
			a.push({name: this.name, value: v});
	});
	//hand off to jQuery.param for proper encoding
	return $.param(a);
};

/**
 * Returns the value(s) of the element in the matched set.  For example, consider the following form:
 *
 *  <form><fieldset>
 *	  <input name="A" type="text" />
 *	  <input name="A" type="text" />
 *	  <input name="B" type="checkbox" value="B1" />
 *	  <input name="B" type="checkbox" value="B2"/>
 *	  <input name="C" type="radio" value="C1" />
 *	  <input name="C" type="radio" value="C2" />
 *  </fieldset></form>
 *
 *  var v = $(':text').fieldValue();
 *  // if no values are entered into the text inputs
 *  v == ['','']
 *  // if values entered into the text inputs are 'foo' and 'bar'
 *  v == ['foo','bar']
 *
 *  var v = $(':checkbox').fieldValue();
 *  // if neither checkbox is checked
 *  v === undefined
 *  // if both checkboxes are checked
 *  v == ['B1', 'B2']
 *
 *  var v = $(':radio').fieldValue();
 *  // if neither radio is checked
 *  v === undefined
 *  // if first radio is checked
 *  v == ['C1']
 *
 * The successful argument controls whether or not the field element must be 'successful'
 * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).
 * The default value of the successful argument is true.  If this value is false the value(s)
 * for each element is returned.
 *
 * Note: This method *always* returns an array.  If no valid value can be determined the
 *	   array will be empty, otherwise it will contain one or more values.
 */
$.fn.fieldValue = function(successful) {
	for (var val=[], i=0, max=this.length; i < max; i++) {
		var el = this[i];
		var v = $.fieldValue(el, successful);
		if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length))
			continue;
		v.constructor == Array ? $.merge(val, v) : val.push(v);
	}
	return val;
};

/**
 * Returns the value of the field element.
 */
$.fieldValue = function(el, successful) {
	var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
	if (typeof successful == 'undefined') successful = true;

	if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
		(t == 'checkbox' || t == 'radio') && !el.checked ||
		(t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
		tag == 'select' && el.selectedIndex == -1))
			return null;

	if (tag == 'select') {
		var index = el.selectedIndex;
		if (index < 0) return null;
		var a = [], ops = el.options;
		var one = (t == 'select-one');
		var max = (one ? index+1 : ops.length);
		for(var i=(one ? index : 0); i < max; i++) {
			var op = ops[i];
			if (op.selected) {
				var v = op.value;
				if (!v) // extra pain for IE...
					v = (op.attributes && op.attributes['value'] && !(op.attributes['value'].specified)) ? op.text : op.value;
				if (one) return v;
				a.push(v);
			}
		}
		return a;
	}
	return el.value;
};

/**
 * Clears the form data.  Takes the following actions on the form's input fields:
 *  - input text fields will have their 'value' property set to the empty string
 *  - select elements will have their 'selectedIndex' property set to -1
 *  - checkbox and radio inputs will have their 'checked' property set to false
 *  - inputs of type submit, button, reset, and hidden will *not* be effected
 *  - button elements will *not* be effected
 */
$.fn.clearForm = function() {
	return this.each(function() {
		$('input,select,textarea', this).clearFields();
	});
};

/**
 * Clears the selected form elements.
 */
$.fn.clearFields = $.fn.clearInputs = function() {
	return this.each(function() {
		var t = this.type, tag = this.tagName.toLowerCase();
		if (t == 'text' || t == 'password' || tag == 'textarea')
			this.value = '';
		else if (t == 'checkbox' || t == 'radio')
			this.checked = false;
		else if (tag == 'select')
			this.selectedIndex = -1;
	});
};

/**
 * Resets the form data.  Causes all form elements to be reset to their original value.
 */
$.fn.resetForm = function() {
	return this.each(function() {
		// guard against an input with the name of 'reset'
		// note that IE reports the reset function as an 'object'
		if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType))
			this.reset();
	});
};

/**
 * Enables or disables any matching elements.
 */
$.fn.enable = function(b) {
	if (b == undefined) b = true;
	return this.each(function() {
		this.disabled = !b;
	});
};

/**
 * Checks/unchecks any matching checkboxes or radio buttons and
 * selects/deselects and matching option elements.
 */
$.fn.selected = function(select) {
	if (select == undefined) select = true;
	return this.each(function() {
		var t = this.type;
		if (t == 'checkbox' || t == 'radio')
			this.checked = select;
		else if (this.tagName.toLowerCase() == 'option') {
			var $sel = $(this).parent('select');
			if (select && $sel[0] && $sel[0].type == 'select-one') {
				// deselect all other options
				$sel.find('option').selected(false);
			}
			this.selected = select;
		}
	});
};

// helper fn for console logging
// set $.fn.ajaxSubmit.debug to true to enable debug logging
function log() {
	if ($.fn.ajaxSubmit.debug && window.console && window.console.log)
		window.console.log('[jquery.form] ' + Array.prototype.join.call(arguments,''));
};

})(jQuery);

/* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ */
/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
 * Dual licensed under the MIT (MIT_LICENSE.txt)
 * and GPL Version 2 (GPL_LICENSE.txt) licenses.
 *
 * Version: 1.1.1
 * Requires jQuery 1.3+
 * Docs: http://docs.jquery.com/Plugins/livequery
 */

(function($) {

    $.extend($.fn, {
        livequery: function(type, fn, fn2) {
            var self = this, q;

            // Handle different call patterns
            if ($.isFunction(type))
                fn2 = fn, fn = type, type = undefined;

            // See if Live Query already exists
            $.each( $.livequery.queries, function(i, query) {
                if ( self.selector == query.selector && self.context == query.context &&
                    type == query.type && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) )
                    // Found the query, exit the each loop
                    return (q = query) && false;
            });

            // Create new Live Query if it wasn't found
            q = q || new $.livequery(this.selector, this.context, type, fn, fn2);

            // Make sure it is running
            q.stopped = false;

            // Run it immediately for the first time
            q.run();

            // Contnue the chain
            return this;
        },

        expire: function(type, fn, fn2) {
            var self = this;

            // Handle different call patterns
            if ($.isFunction(type))
                fn2 = fn, fn = type, type = undefined;

            // Find the Live Query based on arguments and stop it
            $.each( $.livequery.queries, function(i, query) {
                if ( self.selector == query.selector && self.context == query.context &&
                    (!type || type == query.type) && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) && !this.stopped )
                    $.livequery.stop(query.id);
            });

            // Continue the chain
            return this;
        }
    });

    $.livequery = function(selector, context, type, fn, fn2) {
        this.selector = selector;
        this.context  = context;
        this.type     = type;
        this.fn       = fn;
        this.fn2      = fn2;
        this.elements = [];
        this.stopped  = false;

        // The id is the index of the Live Query in $.livequery.queries
        this.id = $.livequery.queries.push(this)-1;

        // Mark the functions for matching later on
        fn.$lqguid = fn.$lqguid || $.livequery.guid++;
        if (fn2) fn2.$lqguid = fn2.$lqguid || $.livequery.guid++;

        // Return the Live Query
        return this;
    };

    $.livequery.prototype = {
        stop: function() {
            var query = this;

            if ( this.type )
                // Unbind all bound events
                this.elements.unbind(this.type, this.fn);
            else if (this.fn2)
                // Call the second function for all matched elements
                this.elements.each(function(i, el) {
                    query.fn2.apply(el);
                });

            // Clear out matched elements
            this.elements = [];

            // Stop the Live Query from running until restarted
            this.stopped = true;
        },

        run: function() {
            // Short-circuit if stopped
            if ( this.stopped ) return;
            var query = this;

            var oEls = this.elements,
            els  = $(this.selector, this.context),
            nEls = els.not(oEls);

            // Set elements to the latest set of matched elements
            this.elements = els;

            if (this.type) {
                // Bind events to newly matched elements
                nEls.bind(this.type, this.fn);

                // Unbind events to elements no longer matched
                if (oEls.length > 0)
                    $.each(oEls, function(i, el) {
                        if ( $.inArray(el, els) < 0 )
                            $.event.remove(el, query.type, query.fn);
                    });
            }
            else {
                // Call the first function for newly matched elements
                nEls.each(function() {
                    query.fn.apply(this);
                });

                // Call the second function for elements no longer matched
                if ( this.fn2 && oEls.length > 0 )
                    $.each(oEls, function(i, el) {
                        if ( $.inArray(el, els) < 0 )
                            query.fn2.apply(el);
                    });
            }
        }
    };

    $.extend($.livequery, {
        guid: 0,
        queries: [],
        queue: [],
        running: false,
        timeout: null,

        checkQueue: function() {
            if ( $.livequery.running && $.livequery.queue.length ) {
                var length = $.livequery.queue.length;
                // Run each Live Query currently in the queue
                while ( length-- )
                    $.livequery.queries[ $.livequery.queue.shift() ].run();
            }
        },

        pause: function() {
            // Don't run anymore Live Queries until restarted
            $.livequery.running = false;
        },

        play: function() {
            // Restart Live Queries
            $.livequery.running = true;
            // Request a run of the Live Queries
            $.livequery.run();
        },

        registerPlugin: function() {
            $.each( arguments, function(i,n) {
                // Short-circuit if the method doesn't exist
                if (!$.fn[n]) return;

                // Save a reference to the original method
                var old = $.fn[n];

                // Create a new method
                $.fn[n] = function() {
                    // Call the original method
                    var r = old.apply(this, arguments);

                    // Request a run of the Live Queries
                    $.livequery.run();

                    // Return the original methods result
                    return r;
                }
            });
        },

        run: function(id) {
            if (id != undefined) {
                // Put the particular Live Query in the queue if it doesn't already exist
                if ( $.inArray(id, $.livequery.queue) < 0 )
                    $.livequery.queue.push( id );
            }
            else
                // Put each Live Query in the queue if it doesn't already exist
                $.each( $.livequery.queries, function(id) {
                    if ( $.inArray(id, $.livequery.queue) < 0 )
                        $.livequery.queue.push( id );
                });

            // Clear timeout if it already exists
            if ($.livequery.timeout) clearTimeout($.livequery.timeout);
            // Create a timeout to check the queue and actually run the Live Queries
            $.livequery.timeout = setTimeout($.livequery.checkQueue, 20);
        },

        stop: function(id) {
            if (id != undefined)
                // Stop are particular Live Query
                $.livequery.queries[ id ].stop();
            else
                // Stop all Live Queries
                $.each( $.livequery.queries, function(id) {
                    $.livequery.queries[ id ].stop();
                });
        }
    });

    // Register core DOM manipulation methods
    $.livequery.registerPlugin('append', 'prepend', 'after', 'before', 'wrap', 'attr', 'removeAttr', 'addClass', 'removeClass', 'toggleClass', 'empty', 'remove', 'html');

    // Run Live Queries when the Document is ready
    $(function() {
        $.livequery.play();
    });

})(jQuery);
/**
 * Cookie plugin
 *
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */

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


(function($) {
    var cache = [];
    // Arguments are image paths relative to the current page.
    $.preLoadImages = function() {
        var args_len = arguments.length;
        for (var i = args_len; i--;) {
            var cacheImage = document.createElement('img');
            cacheImage.src = arguments[i];
            cache.push(cacheImage);
        }
    }
})(jQuery);

new function($) {
    $.fn.attachUniqueId = function() {
        if(this.attr('id')==null||this.attr('id')=="") {
            var newId = Math.floor(Math.random()*9000)+1000;
            while($('#uni_'+newId).size()>0) {
                newId = Math.floor(Math.random()*9000)+1000;
            }
            this.attr('id', 'uni_'+newId);

        }
        return this.attr('id');
    }
}(jQuery);

/* START CONFIG */
var nicCodeOptions = {
    buttons : {
        'xhtml' : {
            name : 'Insert HTML',
            type : 'nicCodeButton'
        }
    }

};
/* END CONFIG */

var nicCodeButton = nicEditorAdvancedButton.extend({
    width : '350px',


    addPane : function() {
        this.im = this.ne.selectedInstance.selElm().parentTag('');
        this.addForm({
            '' : {
                type : 'title',
                txt : 'Insert HTML'
            },
            'code' : {
                type : 'content',
                style : {
                    width: '340px',
                    height : '200px'
                }
            }
        },this.im);
    },

    submit : function(e) {

        var src = this.inputs['code'].value;
        this.removePane();

        if(!this.im) {
            var tmp = 'javascript:nicTemp();';
            this.ne.nicCommand("insertHTML","<P align=\"center\">"+src+"</P>");
            this.im = this.findElm('P','align','center');
        }
        if(this.im) {
            this.im.setAttributes({
                align : 'center'
            });
        }


    }
});

nicEditors.registerPlugin(nicPlugin,nicCodeOptions);

Date.prototype.format = function(format) {
    var returnStr = '';
    var replace = Date.replaceChars;
    for (var i = 0; i < format.length; i++) {
        var curChar = format.charAt(i);
        if (replace[curChar]) {
            returnStr += replace[curChar].call(this);
        } else {
            returnStr += curChar;
        }
    }
    return returnStr;
};
Date.replaceChars = {
    shortMonths: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
    longMonths: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
    shortDays: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
    longDays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],

    // Day
    d: function() {
        return (this.getDate() < 10 ? '0' : '') + this.getDate();
    },
    D: function() {
        return Date.replaceChars.shortDays[this.getDay()];
    },
    j: function() {
        return this.getDate();
    },
    l: function() {
        return Date.replaceChars.longDays[this.getDay()];
    },
    N: function() {
        return this.getDay() + 1;
    },
    S: function() {
        return (this.getDate() % 10 == 1 && this.getDate() != 11 ? 'st' : (this.getDate() % 10 == 2 && this.getDate() != 12 ? 'nd' : (this.getDate() % 10 == 3 && this.getDate() != 13 ? 'rd' : 'th')));
    },
    w: function() {
        return this.getDay();
    },
    z: function() {
        return "Not Yet Supported";
    },
    // Week
    W: function() {
        return "Not Yet Supported";
    },
    // Month
    F: function() {
        return Date.replaceChars.longMonths[this.getMonth()];
    },
    m: function() {
        return (this.getMonth() < 9 ? '0' : '') + (this.getMonth() + 1);
    },
    M: function() {
        return Date.replaceChars.shortMonths[this.getMonth()];
    },
    n: function() {
        return this.getMonth() + 1;
    },
    t: function() {
        return "Not Yet Supported";
    },
    // Year
    L: function() {
        return (((this.getFullYear()%4==0)&&(this.getFullYear()%100 != 0)) || (this.getFullYear()%400==0)) ? '1' : '0';
    },
    o: function() {
        return "Not Supported";
    },
    Y: function() {
        return this.getFullYear();
    },
    y: function() {
        return ('' + this.getFullYear()).substr(2);
    },
    // Time
    a: function() {
        return this.getHours() < 12 ? 'am' : 'pm';
    },
    A: function() {
        return this.getHours() < 12 ? 'AM' : 'PM';
    },
    B: function() {
        return "Not Yet Supported";
    },
    g: function() {
        return this.getHours() % 12 || 12;
    },
    G: function() {
        return this.getHours();
    },
    h: function() {
        return ((this.getHours() % 12 || 12) < 10 ? '0' : '') + (this.getHours() % 12 || 12);
    },
    H: function() {
        return (this.getHours() < 10 ? '0' : '') + this.getHours();
    },
    i: function() {
        return (this.getMinutes() < 10 ? '0' : '') + this.getMinutes();
    },
    s: function() {
        return (this.getSeconds() < 10 ? '0' : '') + this.getSeconds();
    },
    // Timezone
    e: function() {
        return "Not Yet Supported";
    },
    I: function() {
        return "Not Supported";
    },
    O: function() {
        return (-this.getTimezoneOffset() < 0 ? '-' : '+') + (Math.abs(this.getTimezoneOffset() / 60) < 10 ? '0' : '') + (Math.abs(this.getTimezoneOffset() / 60)) + '00';
    },
    P: function() {
        return (-this.getTimezoneOffset() < 0 ? '-' : '+') + (Math.abs(this.getTimezoneOffset() / 60) < 10 ? '0' : '') + (Math.abs(this.getTimezoneOffset() / 60)) + ':' + (Math.abs(this.getTimezoneOffset() % 60) < 10 ? '0' : '') + (Math.abs(this.getTimezoneOffset() % 60));
    },
    T: function() {
        var m = this.getMonth();
        this.setMonth(0);
        var result = this.toTimeString().replace(/^.+ \(?([^\)]+)\)?$/, '$1');
        this.setMonth(m);
        return result;
    },
    Z: function() {
        return -this.getTimezoneOffset() * 60;
    },
    // Full Date/Time
    c: function() {
        return this.format("Y-m-d") + "T" + this.format("H:i:sP");
    },
    r: function() {
        return this.toString();
    },
    U: function() {
        return this.getTime() / 1000;
    }
};

/* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ */
var glMouseX;
var glMouseY;
if(typeof(context)=="undefined") {
    var context = "";
}
/* ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ id ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ */

var thumbnailLinkRegexp=new RegExp("[^0-9]+([0-9]+)[\\\\/]?","i");
var commentHabrTemplate = "<div class=\"comment_habr\"><div class=\"avatar\"><a href=\"%userurl%\"><img style=\"background: url('%userimageurl%') 50% 50% no-repeat\" src=\""+context+"images/avatar24rounder.png\" title=\"%username%\" alt=\"%username%\"> <span class=\"author\">%username%</span></a><span>%replydate%</span></div><div class=\"text\">%replytext%</div></div>";
var lightshowStudiomeTemplate ="<div id=\"light_%id%\" class=\"studiome_lightbox_item lightshow_rounded clearfix\"><div class=\"lightshow\"><div class=\"lightshow_header background_white\"><a href=\"%link%\"></a></div></div><div class=\"lightshow_info\"><h4><a href=\"%link%\">%title%</a></h4></div><div class=\"lightshow_footer\"><p>%date% %time%<span class=\"span_icon_images\">0</span> </p></div></div>";
var progressUrl1 = context+'images/progress2.gif';
var progressUrl2 = context+'images/progress3.gif';
var redCross = context+'images/red_cross.png';
var grayCross = context+'images/gray_cross.png';
var swfUploaderUrl = context+"swf/swfupload.swf";
var swfUploaderButtonUrl = context+"images/swfbutton_20x20.png";
var imageLowResolutionUrl = context+"images/lowresolution.png";
var imageErrorUrl = context+"images/error.png";	
var slideShowFrames = [[]];
var slideShowLength = 0;
var currentShowIndex = 0;
var activeTimer = true;
var articleEditorRunning = false;
var maxSymbolsInComment = 2500;

function initHomeUpdatesControl() {
    $('div.updates ul.updates li a').click(function() {
        $(this).parent().click();
        return false;
    });
    $('div.updates ul.updates li').click(function() {
        $('div.updates ul.updates li').each(function() {
            $('#'+$(this).attr('id')+'_content').hide();
            $(this).removeClass('selected');
        });
        $(this).addClass('selected');
        $('#'+$(this).attr('id')+'_content').fadeIn();
    });
}

function initReplyControl() {
    $('form#reply').submit(function() {
        lock();
        var commentText = $(this).find('textarea[name=text]').val();
        var commentAuthor = $(this).find('input[name=author]').val();
        var commentAvatar = "";
        if($(this).find('input[name=avatar]').size()>0) {
            commentAvatar = $(this).find('input[name=avatar]').val();
        }
        $.ajax({ // create an AJAX call...
            data: $(this).serialize(), // get the form data
            type: $(this).attr('method'), // GET or POST
            url: $(this).attr('action'), // the file to call
            success: function(response) { // on success..
                var result=eval('('+response+')');
                if(result.result=='success') {
                    $('#nocomments').fadeOut();
                    var div='<div class="comment"><div class="text">'
                    + commentText
                    + '</div><div class="author">Posted by <a>'
                    + commentAuthor
                    + '</a> <strong>right now</strong></div></div>';
                    if (commentAvatar != "") {
                        var div='<div class="comment avatared"><div class="avatar">'
                        +'<img src="'+commentAvatar+'">'
                        +'</div><div class="text">'
                        + commentText
                        + '</div><div class="author">Posted by <a>'
                        + commentAuthor
                        + '</a> <strong>right now</strong></div></div>';
                    }
                    $('div.comments').append(div);
                    $('form#reply textarea[name=text]').val("");
                    $('#comment_count').html(parseInt($('#comment_count').html())+1);
                }
                if(result.result=='error') {
                    showWarning(result.error);
                }
                unlock();
                return false;
            },
            error: function(request, textStatus, error) {
                showError(error);
                unlock();
            }
        });
        return false; // cancel original event to prevent form submitting);
    }).find('textarea').each(function(i, t) {
        var ta=$(t);
        if(!ta.hasClass('initialized')) {
            ta.addClass('initialized');
		    
            ta.before('<span><span id=charcount>'+maxSymbolsInComment+'</span> characters left</span>');
            ta.prev().css('float','right');
            ta.bind('keyup', function() {
                var s = $(this).val();

                var len=s.length;
                if(len>maxSymbolsInComment) {
                    $(this).val($(this).val().substring(0, maxSymbolsInComment));
                    len=0;
                }
                $('#charcount').html(maxSymbolsInComment-len);
            });
        }
    });
}
function initShare() {
    $('form#share .divshare').hide();
    $('form#share .divshare:first').show();
    $('form#share li').each(function() {
    
    
        }).bind('mouseenter', function() {
        $('form#share .divshare').hide();
        $("#"+$(this).attr('id')+"_it").fadeIn();
    });
  
    $('form#share').submit(function() {
        lock();
		
        $.ajax({ // create an AJAX call...
            data: $(this).serialize(), // get the form data
            type: $(this).attr('method'), // GET or POST
            url: $(this).attr('action'), // the file to call
            success: function(response) { // on success..
                var result=eval('('+response+')');
                if(result.result=='success') {
			  
                }
                if(result.result=='error') {
                    showWarning(result.error);
                }
                hidePopup();
                unlock();
                return false;
            },
            error: function(request, textStatus, error) {
                showError(error);
                unlock();
            }
        });
        return false; // cancel original event to prevent form submitting);
    });
}
/* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ */
function initArticleEditor() {
    $('h2 #article_header.edit').bind('click', function() {
        startArticleEditor();
        return false;
    });
}

function startArticleEditor() {
    if(!articleEditorRunning) {
        articleEditorRunning=true;
        $('#article_content').fadeOut('slow');
        $('#article_content_edit').fadeIn('slow');
        var form=$("article_edit");
		
        $('#article_form_header').val($('#article_header').html());
		
        if(typeof($('textarea#left_text').tinymce)!='undefined') {
            $('textarea#left_text').tinymce().setContent($('#article_content_left').html());
        }
        if(typeof($('textarea#right_text').tinymce)!='undefined') {
            $('textarea#right_text').tinymce().setContent($('#article_content_right').html());
        }
		
    }
}

function initLightBoxControls() {
    $('#delete_from_lightbox').bind('click', function() {
        $('#select_from_lightbox').removeClass('selected');
        undoLightboxDeletion();
        $('#select_from_lightbox_descr').hide();
		
        if($(this).hasClass('selected')) {
            $('#delete_ids').val("");
            $(this).removeClass('selected');
            $('#delete_from_lightbox_confirm').fadeOut();
            $('#delete_from_lightbox_descr').hide();
        } else {
            $('#delete_ids').val("");
            $(this).addClass('selected');
            startLightboxDeletion();
            $('#delete_from_lightbox_confirm').fadeIn();
            $('#delete_from_lightbox_descr').fadeIn();
            $('#delete_from_lightbox_confirm').css('color','blue');
            $('#delete_from_lightbox_confirm').css('text-decoration','underline');
        }
    });
    $('#select_from_lightbox').bind('click', function() {
        $('#delete_from_lightbox').removeClass('selected');
        undoLightboxDeletion();
        $('#delete_from_lightbox_descr').hide();
        $('#delete_from_lightbox_confirm').fadeOut();
		
        if($(this).hasClass('selected')) {
            $('#delete_ids').val("");
            $(this).removeClass('selected');
			
            $('#select_from_lightbox_descr').hide();
        } else {
            $('#delete_ids').val("");
            $(this).addClass('selected');
            startLightboxSelection();
            $('#select_from_lightbox_descr').fadeIn();
        }
    });
    $('#delete_from_lightbox_confirm').bind('click', function() {
        var input = $('#delete_ids');
        var inputValue = input.val();
        if(inputValue!='') {
            updateLightboxPage();
			
        }
    });
}
function startLightboxDeletion() {
	
    $('.thumbnail a').bind('click', function() {
        var input = $('#delete_ids');
        var inputValue = input.val();
        var id=$(this).attr('href');
        var m=thumbnailLinkRegexp.exec(id);
        if (m.length>1) {
            id = m[1];
            if(!hasNumber(inputValue, id)) {
                $(this).html('<img style="margin:5px" src="'+redCross+'">');
                input.val(addNumber(inputValue, id));
            } else {
                $(this).html('');
                input.val(removeNumber(inputValue, id));
            }
        }
        return false;
		
    });
}
function initPopupLightboxesMenu() {

    $('#popupLightboxesMenu .lightshow_item').bind('click', function() {

        var input = $('#lightboxes_selected_input');
        var inputValue = input.val();
        var id=$(this).attr('url');
        id=id.substr(id.indexOf('id=')+3);
        if(hasNumber(inputValue, id)) {
            $(this).removeClass('selected');
            input.val(removeNumber(inputValue, id));
        } else {
            $(this).addClass('selected');
            input.val(addNumber(inputValue, id));
        }
        return false;
    }).each(function() {
        var input = $('#lightboxes_selected_input');
        var inputValue = input.val();
        var id=$(this).attr('url');
        id=id.substr(id.indexOf('id=')+3);
        if(hasNumber(inputValue, id)) {
            $(this).addClass('selected');
		
        } else {
            $(this).removeClass('selected');
		
        }
    });
    $('#popupLightboxesMenu input[type=submit]').bind('click', function () {
        doAjaxSubmit($('#popupLightboxesMenu'),
            function(result) {
                result=eval('('+result+')');
                if(result.result=='success') {
                    hidePopup();
                }
                if(result.result=='error') {
                    showWarning(result.error);
                }
                /*$('#edit_block a.edit_button').css("cursor", "pointer");*/
                return false;
            }
            ,
            function(result) {
                showError(result);
            }
            );
        return false;
    });
}
function startLightboxSelection() {
	
    $('.thumbnail a').bind('click', function() {
        if($(this).hasClass('valid')) {
			
		
            var input = $('#light_picture_id');
            var inputValue = input.val();
            var id=$(this).attr('href');
            var m=thumbnailLinkRegexp.exec(id);
            if (m.length>1) {
                id = m[1];
                input.val(id);
                updateLightboxPage();
			
            }
        }
        return false;
		
    });
	
    $('.thumbnail a').html('<img style="margin:5px; opacity:0.5" src="'+grayCross+'">');
    $('.thumbnail a.valid').html('');
}
function undoLightboxDeletion() {	
    $('.thumbnail a').html("").unbind('click').unbind('mouseover').css('cursor', 'pointer');
}
function initLightboxes() {
    $('#lightshow_list .lightshow_list div.lightshow_item').each(
        function() {
            if($(this).hasClass('initialized')) return;
            $(this).addClass('initialized');
        }
        );
}
function createLightbox(title, id) {

    $('#empty').hide();
    $('#lightshow_list .lightshow_list').prepend("<div url=\"edit_lightshow.html?id="+id+"\" class=\"lightshow_item clearfix\">"
        +"<div class=\"lightshow\" style=\"background-image: url(media/lightbox.jpg)\">"
        +"<div class=\"info\">"
        +title
        +"</div>"
        +"</div>"
        +"<div class=\"lightshow_info\">"
        +"<h3><a href=edit_lightshow.html?id="+id+">"+title+"</a></h3>"
        +"<p>Created <strong>right now</strong></p>"
        +"<p>Contains: <strong>0</strong></p>"
        +"</div>"
        +"</div> ");
    initLightboxes();
    initLightshows();
}
function stopArticleEditor() {
    if(articleEditorRunning) {
        articleEditorRunning=false;
        $('#article_content').fadeIn('slow');
        $('#article_content_edit').fadeOut('slow');
        var form=$("article_edit");
		
        $('#article_header').html($('#article_form_header').val());
		
        if(typeof($('textarea#left_text').tinymce)!='undefined') {
            $('#article_content_left').html($('textarea#left_text').tinymce().getContent());
        }
        if(typeof($('textarea#right_text').tinymce)!='undefined') {
            $('#article_content_right').html($('textarea#right_text').tinymce().getContent());
        }
		
    }
}
function initSettingsMenu() {
    $('#user_menu').find('a[href*=#]').each(function(i, a){
                        
        $(a).bind('click', function(){
                                
            window.location.hash = a.hash;
            $(a.hash).click();
        });
                        
    });
    $('.settings_info ul.select_menu').each(function() {
    
        var myDoC = document.location.toString();
    
        var myAnchor = "";
        if (myDoC.match('#')) { // the URL contains an anchor
            myAnchor = myDoC.split('#')[1];
        }
        $(this).find('a').each(function() {
            if($(this).attr('id')==myAnchor) {
                $(this).parents('li').addClass('selected');
                $('#'+$(this).attr('id')+'_div').show();
                $('#settings_header').html($(this).html());
            } else {
                $(this).parents('li').removeClass('selected');
                $('#'+$(this).attr('id')+'_div').hide();
            }
        }).bind('click', function() {
            $(this).parents('ul').find('li').removeClass('selected');
            $(this).parents('li').addClass('selected');
            $('.settings_tab').hide();
            $('#'+$(this).attr('id')+'_div').fadeIn();
            $('#settings_header').html($(this).html());
      
            return false;
        });
    });
}
function initSimplePaginator() {

    $('form.simple_paginator_form').each(function() {
        if ($(this).hasClass('initialized')) return;
        $(this).addClass('initialized');
        var idd = $(this).attr('id');
        var curPage = ""+$(this).find('input[name=page]').val();
        $(this).find('input[name=pgnum]').val(curPage).attr('placeholder', curPage);
    
        $(this).find('ul.pages li a').each(  function() {
		
            if (""+$(this).attr('page')==curPage) {
                $(this).parent().addClass('current');
            } else {
                $(this).parent().removeClass('current');
            }
        }
        ).bind('click', function() {
            $(this).parents('form').find('input[name=page]').val($(this).attr('page'));
      
            doParentAjaxSubmit($(this),
                function(result) {
			
                    $('#'+idd+'_content').html(result);
                    initSimplePaginator();
                    initDetailTables();
                    initSettingsFriends();
                }
                ,
                function(result) {
			
                    showError(result);
                }
                );
        });
    
        $(this).find('div.paginator span').bind('click', function() {
            if($(this).next('input').val().length>0) {
                $(this).parents('form').find('input[name=page]').val($(this).next('input').val());
                doParentAjaxSubmit($(this),
                    function(result) {
                        $('#'+idd+'_content').html(result);
                        initSimplePaginator();
                        initDetailTables();
                    }
                    ,
                    function(result) {
                        showError(result);
                    }
                    );
          
            }
        });
    });
    $('form.non_ajax_paginator').each(function() {

        if ($(this).hasClass('initialized')) return;
        $(this).addClass('initialized');
        $(this).find('div.paginator span').bind('click', function() {
            if($(this).next('input').val().length>0) {
                $(this).parents('form').find('input[name=page]').val($(this).next('input').val());
                $(this).parents('form').submit();
            }
        });
        $(this).find('div.paginator a.jump').bind('click', function() {
            if($(this).prev('input').val().length>0) {
                $(this).parents('form').find('input[name=page]').val($(this).prev('input').val());
                $(this).parents('form').submit();
            }
        });
    });
    $('div.paginator.search_non_ajax_paginator').livequery(function() {

        if ($(this).hasClass('initialized')) return;
        $(this).addClass('initialized');
        $(this).find('span').bind('click', function() {
            if($(this).next('input').val().length>0) {
                toolGetSearchForm(this).find('input[name=page]').val($(this).next('input').val());
                toolGetSearchForm(this).submit();
            }
        });
        $(this).find('a.jump').bind('click', function() {
            if($(this).prev('input').val().length>0) {
                toolGetSearchForm(this).find('input[name=page]').val($(this).prev('input').val());
                toolGetSearchForm(this).submit();
            }
        });
        $(this).find('a:not(.jump)').bind('click', function() {
            if($(this).attr('page')!="") {
                toolGetSearchForm(this).find('input[name=page]').val($(this).attr('page'));
                toolGetSearchForm(this).submit();
            }
        });
    });
}
/* ï¿½ï¿½ï¿½ï¿½ï¿½ */
function initAccordion() {
    $('.accordeon').find('.accordeon_item').each(function() {
        var item=$(this);
        item.find('.fold.folded').slideUp();
        item.find('.accordeon_zone').bind('click', function() {
      
            if ($(this).parents('.accordeon_item').find('.fold.folded').size()>0) {
                $(this).parents('.accordeon').find('.fold.unfolded').slideUp().removeClass('unfolded').addClass('folded');
                $(this).parents('.accordeon_item').find('.fold.folded').slideDown().removeClass('folded').addClass('unfolded');
            } else {
                $(this).parents('.accordeon').find('.fold.unfolded').slideUp().removeClass('unfolded').addClass('folded');
            }
        });
    });
}
/* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ */
function initDetailTables() {
    $('table.ajax_details').each(function() {
  
        if ($(this).hasClass('initialized')) return;
        $(this).addClass('initialized');
    
        $(this).find('td[details]').css('cursor', 'pointer').addClass('details').bind('click', function() {
            lock();
            $(this).parents('tr').next().find('.details').load($(this).attr('details'), function() {
                unlock();
            });
        });
    });
}
/* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ */
function initSpotlight() {		
	
    $('div.image img:first').bind('mouseenter', function(){
        $(this).spotlight({
            exitEvent:'mouseover',
            speed:200,
            opacity: 0.9
        });
    });
};
	
/* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ */
function nextSlideshowFrame()	 {
    if (activeTimer)
        fadeSlideShowTo(++currentShowIndex);
    setTimeout("nextSlideshowFrame()",3000);
}

function initSlideshow(frames) {
    slideShowFrames = frames;
  
    slideShowLength = frames.length;
  
    setTimeout("nextSlideshowFrame()",5000);
  
    $('#slideshow_container').bind('mouseenter', function() {
        if($('#slideshow_new').size()>0) {
            $('#slideshow_new').stop();
            $('#slideshow_new').remove();
        }
        activeTimer = false;
        $('#slideshow_container').find('div.slideshow_description').fadeIn('slow');
    }).bind('mouseleave', function() {
        activeTimer = true;
        $('#slideshow_container').find('div.slideshow_description').fadeOut('fast');
    });
    var t="";
    for(var i=0; (i<29); i++){
        t+="<li class='slide slide"+(i%4)+"' slide="+i+"><a href="+slideShowFrames[i%slideShowLength][3]+"></a></li>";
        /*alert(slideShowFrames[i%slideShowLength][0]);*/
    
        $.preLoadImages(slideShowFrames[i%slideShowLength][0]);/* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ */
    }
  
    $('#slideshow_paginator').html('<ul class=slideshow_paginator>'+t+'</ul>');
    $('li.slide').bind('mouseenter', function() {
        if($('#slideshow_new').size()>0) {
            $('#slideshow_new').stop();
            $('#slideshow_new').remove();
        }
        activeTimer = false;
        fadeSlideShowTo($(this).attr('slide'));
    }).bind('mouseleave', function() {
        activeTimer = true;
    });
}	
function fadeSlideShowTo(slideIndex) {
    currentShowIndex=slideIndex;
    if (slideShowLength<0) return;
    slideIndex = slideIndex%slideShowLength;
    if($('#slideshow_new').size()>0) {
        $('#slideshow_new').stop();
        $('#slideshow_new').remove();
    }
    var frame=slideShowFrames[slideIndex];
  
    $('#slideshow_container').prepend('<div id=slideshow_new><div class="slideshow_image" style="background-image: url('+frame[0]+')" onclick="window.location=\''+frame[3]+'\';"><div class="slideshow_header">'+frame[1]+'</div><div class="slideshow_description">'+frame[2]+'</div></div></div>');
  
    $('#slideshow_new').fadeIn('slow', function() {
        $('#slideshow_container').html($('#slideshow_new').html());
  
    });
  
  
}

	
function initLightshows() {
    $('div.lightshow').addClass('toinit');
    $('div.lightshow.initialized').removeClass('toinit');
    $('div.lightshow.toinit').addClass('initialized').bind('mouseenter', function() {
        $(this).find('.info').fadeIn();
    }).bind('mouseleave', function() {
        $(this).find('.info').fadeOut();
    }).bind('click', function() {
        if(($(this).attr('url')!=null)&&($(this).attr('url')!=''))
            document.location = $(this).attr('url');
    }).css('cursor', 'pointer');
}
function initCategories() {
    /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ */
    if ($('form div.categories').size()!=0) {
		
        function setCategoriesValues(element) {
			
            var li = element.find('li');
            var input = element.find('input');
            var inputValue = input.attr('value');
					
            li.each(function(i){
                var cat=$(this).attr('category');
				
                if (hasNumber(inputValue, cat)) {
                    $(this).addClass('selected');
                } else
{
                    $(this).removeClass('selected');
                }
				
            });
        }
		
        var forms = $('form div.categories');
		
        forms.each (function(i) {
            var This = $(this);
            setCategoriesValues(This);
            var li = This.find('li');
			
            li.bind("click", function(){
                var parent = $(this).parent().parent().parent();
				
                var cat=$(this).attr('category');
                var input = parent.find('input');
                var inputValue = input.attr('value');
			
                if (!hasNumber(inputValue,cat)) {
                    $(this).addClass('selected');
                    input.attr('value', addNumber(inputValue,cat));
                } else
{
                    $(this).removeClass('selected');
                    input.attr('value', removeNumber(inputValue, cat));
                }
                return false;
            });
			
        });
		
		
		
		
		
    }
}

function createProgressThumbnail(location, elementId) {
    location.append('<div id='+elementId+' class="thumbnail progress"><div class="child" style="background-image: url('+progressUrl1+');"><span></span></div></div>');
}
function thumbnailProgress(elementId, percent) {
    $('#'+elementId).find('.child').html('<span>'+percent+'</span>');
}

function thumbnailDone(elementId, newUrl) {
    $('#'+elementId).removeClass('progress');
    $('#'+elementId).find('.child').html('');
    $('#'+elementId).find('.child').css('background-image','url('+newUrl+')');
}
function thumbnailDoneEdit(elementId, newUrl, id) {
    $('#'+elementId).removeClass('progress');
    $('#'+elementId).find('.child').html('<a target="_blank" href="/account/edit.php?field='+id+'"></a>');
    $('#'+elementId).find('.child').css('background-image','url('+newUrl+')');
}

function showError(message) {
    if ($('#error').size()>0) {
        if((message!=null)&&(message!=""))
            $('#error').show().html(message).fadeIn();
        else
            $('#error').fadeOut();
    } else {
        showErrorSlide(message);
    }
}
function showWarning(message) {
    if ($('#error').size()>0) {
        if((message!=null)&&(message!=""))
            $('#warning').show().html(message).fadeIn();
        else
            $('#warning').fadeOut();
    } else {
        showWarningSlide(message);
    }
}
function showErrorSlide(message) {
	
    if ($('#top-slide').size()==0) {
	
        $('body').append('<div id=top-slide><div class=top-error id=top-error></div><div class=top-warning id=top-warning></div></div>');
	
        $('#top-slide').bind('click',function(){
            hideSlide();
        });
		
    }
	
	
    if((message!=null)&&(message!=""))
        $('#top-error').show().html(message);
    else
        $('#top-error').fadeOut();
	
    if(!$('#top-slide').hasClass('visible')) {
	
        $('#top-slide').show('slow').addClass('visible');
        $('#top-warning').html("");
    }
	
    if((message!=null)&&(message!=""))
        $('#top-error').fadeIn();
	
	
		
	
	
}
function showWarningSlide(message) {
    if ($('#top-slide').size()==0) {
        $('body').append('<div id=top-slide><div class=top-error id=top-error></div><div class=top-warning id=top-warning></div></div>');
        $('#top-slide').bind('click',function(){
            hideSlide();
        });
    }
    if((message!=null)&&(message!=""))
        $('#top-warning').show().html(message);
    else
        $('#top-warning').fadeOut();
	
    if(!$('#top-slide').hasClass('visible')) {
	
        $('#top-slide').show('slow').addClass('visible');
        $('#top-error').html("");
    }
	
    if((message!=null)&&(message!=""))
        $('#top-warning').fadeIn();
}
function hideSlide() {
    if ($('#top-slide').size()==0) {
        $('body').append('<div id=top-slide><div class=top-error id=top-error></div><div class=top-warning id=top-warning></div></div>');
        $('#top-slide').bind('click',function(){
            hideSlide();
        });
    }
    if($('#top-slide').hasClass('visible')) {
        $('#top-slide').hide('slow').removeClass('visible');
		
    }
	
	
}
function lock(unable,callback) {
	
    if ($('div#locker').size()==0) {
        $('body').append('<div id=locker></div>');
        if(!unable&&unable!='undefined')
        {
            $('div#locker').bind('click', function(){

                unlock();
                return false;
            });
        }
		
    }
    if(callback&&callback!='undefined')
    {
        $('div#locker').show().animate({
            opacity: 0.7
        }, 'fast',false, callback);
    }
    else
    {
        $('div#locker').show().animate({
            opacity: 0.7
        }, 'fast');
    }
}

function unlock() {
    $('div#locker').fadeOut('fast');
}

/* String functions */ 
function wrap(s) {
    return ','+s+',';
}
function trim(s) {
    if ((s==null)||(s=="")) return s;
    while ((s!="") && (s[0]==',')) {
        s=s.substring(1);
    }
    while ((s!="") && (s[s.length-1]==',')) {
        s=s.substring(0,s.length-1);
    }
    return s;
}

function hasNumber(s, num) {
    var str = trim(s);
    var number = trim(num);
	
    return wrap(str).indexOf(wrap(number))>=0;
}

function removeNumber(s, num) {
    var str = trim(s);
    var number = trim(num);
	
    return trim(wrap(str).replace(wrap(number), ','));
}

function addNumber(s, num) {
    var str = trim(s);
    var number = trim(num);
	
    return trim(str+','+number);
}

function numberCount(s) {
    var str = trim(s);
    if(str=="") return 0;
    if(str.indexOf(",")<0) return 1;
    return str.split(',').length;
}

function removeFirstNumber(s) {
    var str = trim(s);
    return str.substring(str.indexOf(',')+1);
}
function checkPlaceHolders() {
    $('input.js_placeholder').each(function(){
  	             
        if ($.trim($(this).val()) === "")
            $(this).prev().show();
        else
            $(this).prev().hide();
    });
}
$(document).ready(function(){

    $().mousemove(function(e){
        glMouseX=e.pageX;
        glMouseY=e.pageY;
    });

    $('input.js_placeholder').placeholder({
        placeholderDivIdPrefix: 'placeholderFor',
        placeholderClassName: 'placeholder'
    });
	
    $('a.advanced_search').bind('click', function(e) {
		
        if ($(this).hasClass('closed') ){
            $(this).removeClass('closed');
            $(this).addClass('opened');
            $('#search_advanced').show('fast');
        } else {
            $(this).removeClass('opened');
            $(this).addClass('closed');
            $('#search_advanced').hide('fast');
        }
        return false;
    });
    if(($('a.advanced_search').size()!=0)&&$('a.advanced_search').hasClass('closed')) {
        $('#search_advanced').hide();
    }
	
	
    $('ul.js_select_type_menu').each(function(i) {
        var current_ul=$(this);
		
        current_ul.find('li').each(function(j) {
            if ($(this).find('input').attr('value')=='1')
                $(this).addClass('selected');
            else
                $(this).removeClass('selected');
        });
		
        current_ul.find('li').bind('click', function() {
            if ($(this).find('input').attr('value')=='1') {
                $(this).find('input').attr('value','0');
                $(this).removeClass('selected');
            } else {
                $(this).find('input').attr('value','1');
                $(this).addClass('selected');
            }
            return false;
        });
    }
    );
    /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ featured ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ */
    if ($('div.featured').size()!=0) {
        var divs = $('div.featured');
        divs.each(function() {
            $(this).find('span.description').show();
            $(this).find('div').addClass('fade').hide();
        }).bind('mouseenter', function() {
            $(this).find('div').fadeIn();
        }).bind('mouseleave', function() {
            $(this).find('div').fadeOut();
        });
    }
    /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ */
    if ($('#account_page_info').size()!=0) {
        var input = $('#account_page_info input');
		
        var li = $('#account_page_info li');
		
        var inputValue = input.attr('value');
		
        li.removeClass('selected');
		
        $('#account_page_info li#'+inputValue).addClass('selected');
		
        li.bind('click', function() {
			
            $(this).parent().parent().find('li').removeClass('selected');
			
            $('#account_page_info input').attr('value', this.id);
			
            $(this).addClass('selected');
			
            updateAccountPage();
            return false;
        });
		
		
    }
	
    /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ */
    if ($('#search_advanced').size()!=0) {
		
		
        function setSearchAdvancedLiValues() {
            var li = $('#search_advanced li');
            var input = $('#search_advanced input');
            var inputValue = input.attr('value');
		
            var allSelected = hasNumber(inputValue, '0');
					
            li.each(function(i){
                var cat=$(this).attr('category');
                if (!allSelected) {
                    if (hasNumber(inputValue, cat)) {
                        $(this).addClass('selected');
                    } else
{
                        $(this).removeClass('selected');
                    }
                } else {
                    if (cat=='0') {
                        $(this).addClass('selected');
                    }
                    else
                    {
                        $(this).removeClass('selected');
                    }
                }
            });
        }
		
        var li = $('#search_advanced li');
        setSearchAdvancedLiValues();
		
        li.bind("click", function(){
            var cat=$(this).attr('category');
            var input = $('#search_advanced input');
            var inputValue = input.attr('value');
            var allSelected = hasNumber(inputValue, '0');
			
            if ($(this).attr('category')!='0') {
                if(allSelected) {
                    //alert('reset allSelected')
                    inputValue = removeNumber(inputValue, '0');
                    input.attr('value', inputValue);
                    allSelected = false;
                    setSearchAdvancedLiValues();
                }
                if (wrap(inputValue).indexOf(wrap(cat))<0) {
                    $(this).addClass('selected');
                    input.attr('value', addNumber(inputValue,cat));
                } else
{
                    if(!allSelected) $(this).removeClass('selected');
                    input.attr('value', removeNumber(inputValue, cat));
                }
            } else {
                if (wrap(inputValue).indexOf(wrap(cat))<0) {
                    input.attr('value', addNumber(inputValue,cat));
                } else
{
                    input.attr('value', removeNumber(inputValue, cat));
                }
                setSearchAdvancedLiValues();
            }
            //alert(input.attr('value'));
            return false;
			
        });
    }
	
    initCategories();
    initSpotlight();
    initLightshows();
    initArticleEditor();
    initAccordion();
    initDetailTables();
    initSimplePaginator();
    initSettingsMenu();
    initLightboxes();
    initLightBoxControls();
    initReplyControl();
    initHomeUpdatesControl();
    initQuoteButtons();
    initUlByImageTable();
    liveDivColorbox();
    livethumbnail120a();
    liveDivShapebox();
    liveInputSearch();
    liveFormAddLightbox();
    liveControlsLineFold();
    window.setTimeout('checkPlaceHolders()', 500);
    $('.studiomephoto img').each(function() {
        if($(this).next('.hide').size()>0) {
            $(this).css('cursor', 'pointer').bind('click', function() {
				
			
                showPopup($(this).next('.hide').html());
            });
        }
    });
    $('.parent_inherits_background').each(function() {
        $(this).parents('#container').css('background-image',$(this).css('background-image'));
        $(this).parents('#container').css('background-repeat',$(this).css('background-repeat'));
    });
    $('.popup_lightshows_list').livequery(function() {
        syncLightboxHeight(".popup_lightshows_list");
    });
    syncLightboxHeight(".studiome_lightshows_list");
    
	
	
  	  
    $('a[href=#banana]').bind('click', function() {
        if ($('#banana').size()<1) {
            $('body').append('<div id=banana style="display: none; z-index: 100; top: 0; left: 0; position: fixed; width: 100%; text-align: center"><img src=http://www.contrib.andrew.cmu.edu/~thelfer/ccm/images/banana.jpg><h1>This link is empty or disabled. Check it, JD!</div>');
        }
        $('#banana').fadeIn().animate({
            opacity: 1.0
        }, 700).fadeOut();
        return false;
    });
	
    $('div.control_area div.comments').prepend('<a name="comments"></a>');
    $('#preview div.comments').prepend('<a name="comments"></a>');
    $('#account div.comments').prepend('<a name="comments"></a>');
	
  

    /*     if($(window).height()>$('#content').height()+$('#header').height())
    {
        $('#content').css('min-height',$(window).height()-$('#header').height()-47);
        $('#studiome_panel').css('min-height',$(window).height()-$('#header').height()-57);
    }

    $(window).bind('resize', function() {
        if($(window).height()>$('#content').height()+$('#header').height())
        {
            $('#content').css('min-height',$(window).height()-$('#header').height()-47);
            $('#studiome_panel').css('min-height',$(window).height()-$('#header').height()-57);
        }
    });*/

    /*$('textarea.visual-simple').htmlarea({

                toolbar: [
                    ["bold", "italic", "underline", "strikethrough", "|", "p"],
                    ["link", "unlink"]

                ],
                css: "css//jHtmlArea.Editor.css",
                loaded: function() {
                    if(this.toString=="") {this.p();}
                }



            });  */
    $('textarea.visual-simple').each(function(){
        new nicEditor({
            xhtml : true,
            iconsPath : context+'images/nicEditorIcons.gif',
            buttonList : ['bold','italic','underline','strikeThrough','link','unlink']
        }).panelInstance($(this).attachUniqueId());
        
    });
    $('textarea.visual').each(function(){
        var m = new nicEditor({
            xhtml : true,
            iconsPath : context+'images/nicEditorIcons.gif',
            buttonList : ['bold','italic','underline','fontFormat','removeformat','|','left','center','right','|','ol','ul','|','hr','link','unlink','image','xhtml']
        }).panelInstance($(this).attachUniqueId());


    });

    $('table th:first').addClass('first');
    $('table th:last').addClass('last');
});
function liveFormAddLightbox() {
    $('form#lightshow_add_list').livequery(function() {
        var frm = $(this);

        var lightboxesInput = frm.find('input[name=lightboxes]');
        var lightboxes = lightboxesInput.val();


        frm.find('div.studiome_lightbox_item').each(function() {
            var i = $(this).attr('id').toString().substring(6);

            if(hasNumber(lightboxes, i)) {
                $(this).addClass('selected');
            } else {
                $(this).removeClass('selected');
            }
        }).click(function() {
            var i = $(this).attr('id').toString().substring(6);
            if(hasNumber(lightboxesInput.val(), i)) {
                lightboxesInput.val(removeNumber(lightboxesInput.val(), i));
                $(this).removeClass('selected');
            } else {
                lightboxesInput.val(addNumber(lightboxesInput.val(), i));
                $(this).addClass('selected');
            }
            return false;
        });
    });
}
function syncLightboxHeight(selector, height) {
    if(typeof(height)=='undefined') {
        height=0;
    }
    var h=height;
    $(selector + ' .studiome_lightbox_item').each(function() {
        if(h<$(this).height()) h=$(this).height();
    }).each(function() {
        $(this).css('height', h);
    })
}
function updateAccountPage() {	
    $('form#jumptopage').submit();
}

function installLightboxesEditing() {
    uninstallLightboxesPictureChooser();
    $('#lightboxes_editing_button').hide();
    $('#lightboxes_editing').show();

    $('#lightboxes_editing input[name=add]').val("");
    $('#lightboxes_editing input[name=delete]').val("");

    $('.thumbnail .child a').addClass("status");
    $('.thumbnail').click(function() {
        var e=$(this);
        
        var add = $('#lightboxes_editing input[name=add]');
        var del = $('#lightboxes_editing input[name=delete]');
        if(e.hasClass('lightboxed')) {
            if(e.hasClass('light_minus')) {
                e.removeClass('light_minus');
                del.val(removeNumber(del.val(), e.attr('id').substring(4)));
            } else {
                e.addClass('light_minus');
                del.val(addNumber(del.val(), e.attr('id').substring(4)));
            }
        } else {
            if(e.hasClass('light_plus')) {
                e.removeClass('light_plus');
                add.val(removeNumber(add.val(), e.attr('id').substring(4)));
            } else {
                e.addClass('light_plus');
                add.val(addNumber(add.val(), e.attr('id').substring(4)));
            }
        }
        return false;
    })
    return false;
}
function uninstallLightboxesEditing() {
    $('#lightboxes_editing_button').show();
    $('#lightboxes_editing').hide();
    $('.thumbnail .child a').removeClass('status');

    $('.thumbnail.light_plus').removeClass('light_plus').addClass('lightboxed');
    $('.thumbnail.light_minus').removeClass('light_minus').removeClass('lightboxed');


    $('.thumbnail').removeClass('light_minus');
    $('.thumbnail').unbind('click');
    return false;
}
function initDarkroomLightshowsPopup() {


    $('.popup_lightshows_list .studiome_lightbox_item').each(function() {
        var el=$(this);
        var thisId = el.attr("id").substring(6);
        el.css('cursor','pointer');
        el.find('a').click(function() {
            $('.sortby form input[name=lightbox]').val(thisId);
            $('.sortby form').submit();
            $('#search_sort form input[name=lightbox]').val(thisId);
            $('#search_sort form').submit();
            return false;
        });
        
    }).click(function() {
        var el=$(this);
        var thisId = el.attr("id").substring(6);
        $('.sortby form input[name=lightbox]').val(thisId);
        $('.sortby form').submit();
    }

    );
}
function installLightboxesPictureChooser() {
    uninstallLightboxesEditing();
    $('#lightboxes_picture_button').hide();
    $('#lightboxes_picture').show();

    $('#lightboxes_picture input[name=lightbox-cover]').val("");

    $('.thumbnail .child a').addClass("newpic");
    $('.thumbnail').click(function() {
        return false;
    });
    $('.thumbnail.valid').unbind('click').click(function() {
        var e=$(this);

        var img= $('#lightboxes_picture input[name=lightbox-cover]');

        if(e.hasClass('light_newpic')) {
            $('.thumbnail').removeClass('light_newpic');
            img.val("");
        } else {
            $('.thumbnail').removeClass('light_newpic');
            e.addClass('light_newpic');
            $('#lightshow_image').css('background-image','url('+$('#image').attr('src')+')');
            img.val(e.attr('id').substring(4));
        }

        return false;
    })
    return false;
}
function uninstallLightboxesPictureChooser() {
    $('#lightboxes_picture_button').show();
    $('#lightboxes_picture').hide();
    $('.thumbnail .child a').removeClass('newpic');
    $('.thumbnail').removeClass('light_newpic');
    $('.thumbnail').unbind('click');
    return false;
}

function initQuoteButtons() {
    $('a.quote_link').unbind('click').bind('click', function() {
        if($(this).parent().prev('.text').size()>0) {
            var text= $(this).parent().prev('.text').html();
            var editor = nicEditors.findEditor("reply_text");
            var content = editor.getContent();
            if(content=="<br />") content="";
            editor.setContent(content+'<p class=blockquote>'+text+'</p><p><br/></p>');
        }
    });
}

function toolGetSearchForm(el) {
    // gets a parent form if exists of gets search form
    if($(el).parents('form').size()!=0) return $(el).parents('form');
    if($('form#header_search_form').size()!=0) return $('form#header_search_form');
    showError('ÐÐ° ÑÑ‚Ñ€Ð°Ð½Ð¸Ñ†Ðµ Ð¾Ñ‚ÑÑƒÑ‚ÑÑ‚Ð²ÑƒÐµÑ‚ Ñ„Ð¾Ñ€Ð¼Ð° id=header_search_form');
}
function liveInputSearch() {
    //Inits inputs with .search_autosync_input class to be synced to header search form
    $('input.search_autosync_input[type=text],input.search_autosync_input[type=password]').livequery('change', function() {
        var frm = toolGetSearchForm(this);
        var frminp = frm.find('input[name='+$(this).attr('name')+']');
        if(frminp.size()>0) {
            frminp.val($(this).val());
        } else {
            showError('Input '+$(this).attr('name')+' has no equivalent in search form');
        }
    });
    $('input.search_autosync_input[type=checkbox],input.search_autosync_input[type=radio]').livequery('change', function() {
        var frm = toolGetSearchForm(this);
        var frminp = frm.find('input[name='+$(this).attr('name')+']');
        if(frminp.size()>0) {
            if($(this).attr('checked')!="") {
                frminp.val("1");
            } else {
                frminp.val("");
            }
        } else {
            showError('Input '+$(this).attr('name')+' has no equivalent in search form');
        }
    });

    $('select.search_autosync_input').livequery('change', function() {
        var frm = toolGetSearchForm(this);
        var frminp = frm.find('input[name='+$(this).attr('name')+']');
        if(frminp.size()>0) {
            frminp.val($(this).val());
        } else {
            showError('Input '+$(this).attr('name')+' has no equivalent in search form');
        }
    });
    $('textarea.search_autosync_input').livequery('change', function() {
        var frm = toolGetSearchForm(this);
        var frminp = frm.find('input[name='+$(this).attr('name')+']');
        if(frminp.size()>0) {
            frminp.val($(this).val());
        } else {
            showError('Input '+$(this).attr('name')+' has no equivalent in search form');
        }
    });

    $('input.search_autosync_input[type=text],input.search_autosync_input[type=password]').livequery( function() {
        var frm = toolGetSearchForm(this);
        var frminp = frm.find('input[name='+$(this).attr('name')+']');
        if(frminp.size()>0) {
            $(this).val(frminp.val());
        } else {
            showError('Input '+$(this).attr('name')+' has no equivalent in search form');
        }
    });
    $('input.search_autosync_input[type=checkbox],input.search_autosync_input[type=radio]').livequery(function() {
        var frm = toolGetSearchForm(this);
        var frminp = frm.find('input[name='+$(this).attr('name')+']');
        if(frminp.size()>0) {
            if(frminp.val()=="1") {
                $(this).attr('checked','checked');
            } else {
                $(this).removeAttr('checked');
            }
        } else {
            showError('Input '+$(this).attr('name')+' has no equivalent in search form');
        }
    });

    $('select.search_autosync_input').livequery(function() {
        var frm = toolGetSearchForm(this);
        var frminp = frm.find('input[name='+$(this).attr('name')+']');
        if(frminp.size()>0) {
            $(this).val(frminp.val());
        } else {
            showError('Input '+$(this).attr('name')+' has no equivalent in search form');
        }
    });
    $('textarea.search_autosync_input').livequery(function() {
        var frm = toolGetSearchForm(this);
        var frminp = frm.find('input[name='+$(this).attr('name')+']');
        if(frminp.size()>0) {
            $(this).val(frminp.val());
        } else {
            showError('Input '+$(this).attr('name')+' has no equivalent in search form');
        }
    });

    $('input.search_autosync_input[type=submit]').livequery('click', function() {
        var frm = toolGetSearchForm(this);
        var frminp = frm.find('input[name='+$(this).attr('name')+']');
        if(frminp.size()>0) {
            frminp.val($(this).val());
            frm.submit();
        } else {
            showError('Input '+$(this).attr('name')+' has no equivalent in search form');
        }

    });
}

function initUlByImageTable() {

    var selected=$('.buy_table input[name=selected]').val();

    //Making selection
    if(selected)
    {
        $('div.sizes').find('#'+selected).addClass('incart');
    }

    $('div.sizes div.line').each(function() {
        var el = $(this);

        el.click(function(){
            var clicked=$(this);
            
            //Remove selected element
            clicked.parents('div.sizes').find('div.line').each(function() {
                var kill=$(this);
                kill.removeClass('incart');
            });

            var selected=$('.buy_table input[name=selected]').val();

            if(clicked.attr('id')==selected)
            {
                $('.buy_table input[name=selected]').val('');
            }
            else
            {
                clicked.addClass('incart');
                $('.buy_table input[name=selected]').val(clicked.attr('id'));
            }

            clicked.parents('form').submit();
        })
    });
}

function liveDivShapebox() {
    $('div.shapebox').livequery(function() {
        $(this).find('span').each(function(e){
            var input=toolGetSearchForm(this).find("input[name=shape]").val();
            var shape=$(this).attr('id').substr(6);
            if(!hasNumber(input,shape))
            {
                $(this).addClass('shape_unselected');
            }
            $(this).bind('click',function(e){
                var input=toolGetSearchForm(this).find("input[name=shape]").val();
                var shape=$(this).attr('id').substr(6);
                if(!hasNumber(input,shape))
                {
                    $(this).removeClass('shape_unselected');
                    toolGetSearchForm(this).find("input[name=shape]").val(addNumber(input,shape));
                }
                else
                {
                    $(this).addClass('shape_unselected');
                    toolGetSearchForm(this).find("input[name=shape]").val(removeNumber(input,shape));
                }
            })

        });

    });
}

function liveDivColorbox() {

    $('div.colorbox').livequery(function() {
        var preprocessed = $(this).hasClass('processed');
        if(!preprocessed) {
            $(this).addClass('processed');
        }
        $(this).find('a').each(
            function (i) {
                if(!preprocessed) {
                    $(this).attr("color", $(this).html());
                    $(this).parent().addClass("color_"+$(this).html());

                }
                var input=toolGetSearchForm(this).find("input[name=color]");
                if(input.attr('value')==$(this).attr("color")) {
                    $(this).parent().addClass('selected');
                    $(this).parents('div.colorbox').find('.selected_color').css('background', $(this).parent().css('background'));
                } else {
                    $(this).parent().removeClass('selected');
                }

                $(this).bind('click', function(e) {
                    var input=toolGetSearchForm(this).find("input[name=color]");
                    if(input.size()!=1) {
                        showError('Ðš Ñ‚ÐµÐºÑƒÑ‰ÐµÐ¼Ñƒ ÐºÐ¾Ð½Ñ‚Ñ€Ð¾Ð»Ñƒ Ð½Ðµ Ð¿Ñ€Ð¸Ð²ÑÐ·Ð°Ð½ Ð¸Ð½Ð¿ÑƒÑ‚ Ð¸Ð»Ð¸ Ð¸Ð½Ð¿ÑƒÑ‚ Ð´ÑƒÐ±Ð»Ð¸Ñ€ÑƒÐµÑ‚ÑÑ');
                    }

                    if(input.val()!=$(this).attr("color")) {
                        var inputValue=input.val();
                        input.attr('value', $(this).attr("color"));

                        $(this).parents('div.colorbox').find('span').removeClass('selected');
                        $(this).parent().addClass('selected');
                        $(this).parents('div.colorbox').find('.selected_color').css('background', $(this).parent().css('background'));
                    } else {
                        input.attr('value', "");

                        $(this).parent().removeClass('selected');

                        $(this).parents('div.colorbox').find('.selected_color').css('background', $(this).parents('div.colorbox').find('.color_'+input.val()).css('background'));
                    }
                    //$(this).parents('form').submit();
                    return false;
                });
                $(this).bind('mouseenter',function(e) {
                    $(this).parents('div.colorbox').find('.selected_color').css('background', $(this).parent().css('background'));
                    return false;
                });
                $(this).bind('mouseleave',function(e) {
                    var input=toolGetSearchForm(this).find("input[name=colors]");

                    $(this).parents('div.colorbox').find('.selected_color').css('background', $(this).parents('div.colorbox').find('.color_'+input.val()).css('background'));
                    return false;
                });
                $(this).html("");
            }
            );
    });
}
function initAdvancedSearchPopup() {     
    $('#popup_locker').click(function() {
        $('#search_sort .advanced_search_controls').html($('#search_sort .advanced_search_controls').html()); //forces updates of colorboxes & shapeboxes

        hidePopup();
        $('#popup_locker').click(function() {
            hidePopup();
        });
    });

}
function liveControlsLineFold() {
    $('.advanced_search_controls .controls_line h4').livequery('click', function() {
        if($(this).parent().hasClass('folded')) {
            $(this).parent().removeClass('folded');
            $(this).parent().addClass('unfolded');
            $(this).parent().find('div.fold').slideDown();
        } else
        if($(this).parent().hasClass('unfolded')) {
            $(this).parent().removeClass('unfolded');
            $(this).parent().addClass('folded');
            $(this).parent().find('div.fold').hide();
        }
    });
}
function livethumbnail120a() {
    $('div.thumbnail120 a').livequery('click', function() {
        showPopup("<div onclick='hidePopup();'class=image500 style='background-image: url(\""+$(this).attr('href')+"\")'></div>", 340);
        return false;
    });
}

function addslashes (str) {
    return (str+'').replace(/[\\"']/g, '\\$&').replace(/\u0000/g, '\\0');
}


function buyTableCallback(form,data)
{
    //alert(data.amount);
    form.find('#cart_items_count').html(data.total);
    form.find('#cart_items_credits').html(data.credits);
    form.find('#cart_items_xpress').html(data.amount.toFixed(2));

    if(!data.total)
    {
        $('#top_checkout').addClass('hide');
    }
    else
    {
        $('#top_checkout').removeClass('hide');
    }

    $('#top_items').html(data.total);
    $('#top_credits').html(data.credits);
    $('#top_amount').html(data.amount.toFixed(2));


}
function fadeElement(el) {
    if ($('#element_fader').size()==0) {
        $el = $('<div id=element_fader></div>');
        $el.css({
            opacity: '0.5',
            position: 'absolute',
            'z-index': '10'
        });
        $('#fixed_footer').css('z-index','11');
        $('#container').append($el);
        $('#element_fader').bind('click',function(){
            /*unFade();
			showWarning('Request is still in progress...');			*/
            });
    }
    unFade();
    $('#element_fader').css({
        width: el.width(),
        height: el.height(),
        left: el.position().left,
        top: el.position().top
    });
    $('#element_fader').fadeIn();
}
function unFade() {
    $('#element_fader').fadeOut(10);
    showWarning();
}
function initDarkroomThumbnailsPopups() {
    $('.thumbnail a.popupThis').click(function() {
        var _id = $(this).parents('.thumbnail').attr('id').substring(4);
        showPopupFromUrl($(this).attr('href'), 800, "id="+_id);
        return false;
    });
}
function initFilterStatusControl() {
    var selected_all = false;
    $('#search_status_tabs li').each(
        function(i) {
            if(($('#'+$(this).attr('id')+"_input").val()==1)&&(!selected_all)) {
                if($(this).hasClass('status_tab_all')) {
                    selected_all = true;
                }
                $(this).addClass('selected');
            } else {
                $(this).removeClass('selected');
                $('#'+$(this).attr('id')+"_input").val(0);
            }
        }
        ).bind('click', function() {
        if(($('#'+$(this).attr('id')+"_input").val()==1)) {
            if(!$(this).hasClass('status_tab_all')) {
                $('#'+$(this).attr('id')+"_input").val(0);
                $(this).removeClass('selected');
                updateSearchPage();
            } else {
                $(this).removeClass('selected');
                $('#'+$(this).attr('id')+"_input").val(0);
                $('#search_status_tabs li.status_tab').each(function() {
                    $('#'+$(this).attr('id')+"_input").val(1);
                    $(this).addClass('selected');
                });
            //DO NOT UPDATE
            }
        } else {
            if(!$(this).hasClass('status_tab_all')) {
                $('#'+$(this).attr('id')+"_input").val(1);
                $(this).addClass('selected');
                updateSearchPage();
            } else {
                $('#search_status_tabs li.status_tab').removeClass('selected');
                $('#'+$(this).attr('id')+"_input").val(1);
                $(this).addClass('selected');
                updateSearchPage();
            }
        }
    });
}
function initBrightnessControl() {
    $('#brightness_control').each(function() {
        var input=$(this).parents('form').find("input[name=brightness]");

        var value = input.val();

        $('#brightness_slider').css("margin-left",Math.round(value*150/255)-5);
        $('#brightness_control').css("background-color","rgb("+value+","+value+","+value+")");
    });
    $('#brightness_control').mousedown(function(e) {
        var x = e.pageX - this.offsetLeft-$('#container').position().left;
        var y = e.pageY - this.offsetTop;
        var value = Math.round(x*255/150);
        $('#brightness_control').css("background-color","rgb("+value+","+value+","+value+")");
        $('#brightness_slider').css("margin-left",x-5);
        $('#brightness_control').addClass('drag');
        var input=$(this).parents('form').find("input[name=brightness]");
        input.val(value);
    });
    $('#brightness_control').mousemove(function(e) {
        if ($('#brightness_control').hasClass('drag')) {
            var x = e.pageX - this.offsetLeft-$('#container').position().left;
            if(x>150)x=150;
            if(x<0)x=0;
            var y = e.pageY - this.offsetTop;
            var value = Math.round(x*255/150);
            $('#brightness_control').css("background-color","rgb("+value+","+value+","+value+")");
            $('#brightness_slider').css("margin-left",x-5);
            var input=$(this).parents('form').find("input[name=brightness]");
            input.val(value);
        }
    });
    $('#brightness_control').mouseleave(function(e) {
        $('#brightness_control').removeClass('drag');
    });
    $('#brightness_control').mouseup(function(e) {
        $('#brightness_control').removeClass('drag');
    });
    
}
function initLightboxRefresher() {

    $('form.lightbox').submit(function() { // catch the form's submit event
        fadeElement($('form.lightbox'));
		
        $.ajax({ // create an AJAX call...
            data: $(this).serialize(), // get the form data
            type: $(this).attr('method'), // GET or POST
            url: $(this).attr('action'), // the file to call
            success: function(response) { // on success..
				
                $('#lightbox').html(response); // update the DIV
                initLightboxRefresher();
                unFade();
                return false;
            },
            error: function(request, textStatus, error) {
                showErrorPopup(textStatus);
				
                unFade();
                return false;
            }
        });
		
        return false; // cancel original event to prevent form submitting);
    });
    /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ */
    if ($('#lightbox_sort').size()!=0) {
        var input = $('#lightbox_sort input');
		
        var li = $('#lightbox_sort li');
		
        var inputValue = input.attr('value');
		
        li.removeClass('selected');
		
        $('#lightbox_sort li#'+inputValue).addClass('selected');
		
        li.bind('click', function() {
			
            $(this).parent().parent().find('li').removeClass('selected');
			
            $('#lightbox_sort input').attr('value', this.id);
			
            $(this).addClass('selected');
			
            updateLightboxPage();
			
            return false;
        });
		
        /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ li ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ :) */
        function syncLi(className) {
            var width = 0;
            $('#lightbox_sort li.'+className).each(function(i) {
                if (width<$(this).width()) width = $(this).width();
            });
            $('#lightbox_sort li.'+className).css('width', width);
        }
        syncLi('col1');
        syncLi('col2');
        syncLi('col3');
        syncLi('col4');
        syncLi('col5');
    }
    /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ */
    if ($('#lightbox').size()!=0) {
        var li = $('div.paginator li');

        li.bind('click', function(e) {
			
            $('#lightbox').find("input[name=page]").attr('value', $(this).find('a').attr('page'));
            updateLightboxPage();
            return false;
        });
		
        /*$('div.paginator a').bind('click', function(e) {
			//alert($(this).val());
			return( false );
			
		});*/
		
		
        $('div.paginator span').bind('click', function() {
            var val = $(this).parent().find('input').attr('value');
			
            if((val!=null)&&(val!="")) {
                $('#lightbox').find("input[name=page]").attr('value', 1*val-1);

                updateLightboxPage();
                return false;
            }
        });
    }
}

function initSearch() {
    initBrightnessControl();
    initFilterStatusControl();
    $('form.search_results').submit(function() { // catch the form's submit event
        fadeElement($('form.search_results'));
		
        $.ajax({ // create an AJAX call...
            data: $(this).serialize(), // get the form data
            type: $(this).attr('method'), // GET or POST
            url: $(this).attr('action'), // the file to call
            success: function(response) { // on success..
				
                $('#search_results_form').html(response); // update the DIV
                initSearch();
                unFade();
                return false;
            },
            error: function(request, textStatus, error) {
                showErrorPopup(textStatus);
				
                unFade();
                return false;
            }
        });
		
        return false; // cancel original event to prevent form submitting);
    });
	
    /** ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ */
	
 
    /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ */
    if ($('div.statusby').size()!=0) {
        var input = $('div.statusby input[name=mode]');

        var li = $('div.statusby li');

        var inputValue = input.attr('value');


        li.removeClass('selected');

        $('div.statusby li#status_li_'+inputValue).addClass('selected');

        li.bind('click', function() {

            $(this).parent().parent().find('li').removeClass('selected');

            $('div.statusby input[name=mode]').attr('value', this.id.substring(10));
            $('div.statusby input[name=page]').attr('value',0);

            $(this).addClass('selected');
            
            $(this).parents('form').submit();

            return false;
        });

        /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ li ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ :) */
        function syncLi2(className) {
            var width = 0;
            $('div.statusby li.'+className).each(function(i) {
                if (width<$(this).width()) width = $(this).width();
            });
            $('div.statusby li.'+className).css('width', width);
        }
        syncLi2('col1');
        syncLi2('col2');
        syncLi2('col3');
        syncLi2('col4');
        syncLi2('col5');
    }
    /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ */
    if ($('div.sortby').size()!=0) {
        var input = $('div.sortby input[name=sort]');
		
        var li = $('div.sortby li');
		
        var inputValue = input.attr('value');
		
        li.removeClass('selected');
		
        $('div.sortby li#'+inputValue).addClass('selected');
		
        li.bind('click', function() {
			
            $(this).parent().parent().find('li').removeClass('selected');
			
            $('div.sortby input[name=sort]').attr('value', this.id);
			
            $(this).addClass('selected');
            $(this).parents('form').submit();
			
            return false;
        });
		
        /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ li ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ :) */
        function syncLi(className) {
            var width = 0;
            $('div.sortby li.'+className).each(function(i) {
                if (width<$(this).width()) width = $(this).width();
            });
            $('div.sortby li.'+className).css('width', width);
        }
        syncLi('col1');
        syncLi('col2');
        syncLi('col3');
        syncLi('col4');
        syncLi('col5');
    }
	
	
    /*ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½-ï¿½ï¿½ï¿½ï¿½ */
    if ($('div.sortby .control_buttons').size()!=0) {
        var form = $('div.sortby').parents("form");
		
        var li = $('div.sortby a.media_button');
        li.each(function(i) {
			
            if(form.find('input[name=include_'+this.id+']').val()=='1') {
                $(this).addClass('active');
            } else {
                $(this).removeClass('active');
            }
        }).bind('click', function() {
			
			
            var inpt = $(this).parents("form").find('input[name=include_'+$(this).attr('id')+']');
			
            if(inpt.val()=='1') {
                inpt.val('0');
                $(this).removeClass('active');
            } else {
                inpt.val('1');
                $(this).addClass('active');
            }
			
            updateSearchPage();
			
            return false;
        });
		
    }
	
    /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ */
    if ($('#search_results').size()!=0) {
        var li = $('div.paginator li');

        li.bind('click', function(e) {
			
            $('#search_sort').find("input[name=page]").attr('value',$(this).find('a').attr('page'));
            $('#search_sort form').submit();

            $('#status_sort').find("input[name=page]").attr('value',$(this).find('a').attr('page'));
            $('#status_sort form').submit();

            return false;
        });
		
        $('div.paginator .jump').bind('click', function() {
            var val = $(this).parent().find('input').attr('value');
            if((val!=null)&&(val!="")) {
                $('#search_sort').find("input[name=page]").attr('value',val);
                $('#search_sort form').submit();
                $('#status_sort').find("input[name=page]").attr('value',val);
                $('#status_sort form').submit();
                return false;
            }
        });
    }
    
}

$(document).ready(function(){
	
	
    initSearch();
    initLightboxRefresher();
    initDarkroomThumbnailsPopups();
	
});


var th_elem = null;

function showPreview(element, picture, thumbnail, ratio, parameters) {

    var lightMode = false;
	
    if ((picture==null)||(picture=='')) {
        lightMode = true;
    }
    var addClass = "";
	
    if($(element).hasClass('block')) addClass = 'block';
    if($(element).hasClass('edit')) addClass = 'edit';
	
    var heightPx = 300;
    var widthPx = 300*ratio;
	
    if (ratio>1) {
        widthPx=300;
        heightPx=300/ratio;
    }
	
	
    $(th_elem).removeClass('hover');
	
    var th_size = 110;
    var ddx = 5;
	
	
    var previewBox = $('#popup_preview');
	
    previewBox.find('h2').css('visibility','visible');
    previewBox.find('.author_info').css('visibility','visible');
    previewBox.removeClass('block').removeClass('edit').addClass(addClass);
	
    previewBox.find('#title b').html(parameters[0]);

    previewBox.find('#author strong').html(parameters[2]);
    previewBox.find('a#author').attr('href', parameters[3]);
    previewBox.find('#views').html(parameters[4]);
    previewBox.find('#downloads').html(parameters[5]);
    previewBox.find('#squeezes').html(parameters[6]);
    previewBox.find('#comments').html(parameters[7]);
    previewBox.find('#date b').html(parameters[8]);

    if($(element).find('a').hasClass('popupThis'))
    {
        previewBox.find('#status strong').html($(element).find('a').attr('class').substring(17));
    }

    if(previewBox.find('.description').size()>0) {
        if(parameters[1]!=null && parameters[1]!="") {
            previewBox.find('.description .empty').hide();
            previewBox.find('.description .inner').show();
            previewBox.find('.description .inner').html(parameters[1]);
        } else {
            previewBox.find('.description .empty').show();
            previewBox.find('.description .inner').hide();
        }
    }

    previewBox.find('#image').remove();
    var imageBoxBackground = previewBox.find('#imageBackground');
    imageBoxBackground.css("opacity","0.7");
    if (!lightMode) {
        imageBoxBackground.removeClass('fullView');
    } else {
        imageBoxBackground.addClass('fullView');
    }
	
    var newImage = $('<img id="image" src="'+picture+'">');
    imageBoxBackground.before(newImage);
	
    var imageBox = previewBox.find('#image')
	
    if (!lightMode)
        imageBox.css("background", "url("+progressUrl1+") 50% 50% no-repeat");
    else
        imageBox.css("background", "transparent");
				
    imageBox.attr("src",picture);
    imageBoxBackground.attr("src",thumbnail);
	
    imageBoxBackground.css({
        width: widthPx,
        height: heightPx
    });
    imageBox.css({
        width: widthPx,
        height: heightPx
    });
		
    th_elem = element;
    $(th_elem).addClass('hover');

    if(previewBox.find('.keywords').size()>0) {
        if(parameters[9]!=null && parameters[9]!="") {

            previewBox.find('.keywords .empty').hide();
            previewBox.find('.keywords .inner').show();
            previewBox.find('.keywords .inner').html(parameters[9]);
        } else {
            previewBox.find('.keywords .empty').show();
            previewBox.find('.keywords .inner').hide();
        }
    }

	
	
}

function updateLightboxPage() {
    $('#delete_from_lightbox').removeClass('selected');
    undoLightboxDeletion();
    $('#delete_from_lightbox_descr').hide();
    $('#delete_from_lightbox_confirm').fadeOut();
    $('#select_from_lightbox').removeClass('selected');
			
    $('#select_from_lightbox_descr').hide();
    $('form.lightbox').submit();
    return false;
}
function updateSearchPage() {	
    $('form.search_results').submit();
    return false;
}

function initReleasesSelector()
{
    $('.release_item').bind('click',function(e){
        var id=$(this).attr('id').substring(4);
        var releases=$('#releasesInput').val();

        if(hasNumber(releases,id))
        {
            $(this).removeClass('selected');
            $('#releasesInput').val(removeNumber(releases, id));
        }
        else
        {
            $(this).addClass('selected');
            $('#releasesInput').val(addNumber(releases, id));
        }
    }).each(function() {
        var input = $('#releasesInput');
        var inputValue = input.val();
        var id=$(this).attr('id').substring(4);

        if(hasNumber(inputValue, id)) {
            $(this).addClass('selected');
        } else {
            $(this).removeClass('selected');
        };
    });

    $('input#releasesFilter').quicksearch('div.releases_selector .release_item');
}

$('.status_selector').livequery('click',function(e){
    $('#statusAction').val($(this).attr('class').substring(16));
    $(this).parents('form').submit();
});

function statusChangerCallback(form,data)
{
    $('#img_'+data.field+' a').attr('class','popupThis status_'+data.status);
    $('#status_span').html(data.status).attr('class','status_icon_'+data.status);

    $(form).find('div.notification_filter div').addClass('hide');
    $(form).find('div.notification_filter #popup_status_'+data.status).removeClass('hide');

    $('#img_'+data.field+' a').mouseover();
}
/* çàâèñèò îò forms.js , jquery.js */

function showPopup(content, width, callback) {
	if(typeof(width)=='undefined') {
		width=600;		
	}
    
	if ($('#popup').size()==0) {
		$('#container').append('<div id=popup><div class=popup_top><div class=popup_right></div><div class=popup_body></div></div><div id=popup_content class="content clearfix"></div><div class=popup_bottom><div class=popup_right></div><div class=popup_body></div></div></div>');
		$('body').append('<div id=popup_locker></div>');
		$('#popup_locker').bind('click',function(){
			hidePopup();
		});
	}
	$('#popup_locker').show();
	$('#popup').css("top", $(window).scrollTop()+$(window).height()/5);
	$('#popup').css("left", (1024-width)/2);
	$('#popup').css("width", width);
	$('#popup_content').html(content);
	$('#popup').stop().show().css('opacity','0.0');
	var t=($(window).height()-$('#popup').height())/2;  
  $('#popup').css('top', $(window).scrollTop()+Math.max(0, t)).animate({'opacity':'1.0'});
	$('.popupautocloseimage').bind('click', function() {
		hidePopup();
	});
	initPopupForms();
    if(typeof(callback)=='function') {
		callback();
	}
}

function hidePopup() {	
	$('#popup_locker').hide();	
	$('#popup').hide();
	
}

function showErrorPopup(errorText) {	
	showPopup("<form class='ajaxConfirm error'><h1 class=strong>Error occured</h1><span>"+errorText+"</span><br><input type=submit class=button value='Close'></form>");
}

function showLoginPopup() {
	var loginBox= '<div class="error"><div style="display: none;">'
				+'			</div>'
				+'			'
				+'		</div>'
				+'		<div class="simple_page_box"><div>'
				+'	<form class="big_elements_form ajax" action="aj_login.html" id="jumptopage">'
				+'		<input type="text" class="js_placeholder" value="" name="login" placeholder="login">'
				+'		<input type="password" class="js_placeholder" value="" name="login" placeholder="password">'
				+'		<input type="submit" class="button" value="Login"><br>'
				+'		<label><input type="checkbox" name="remember" checked>remember me</label>'
				+'	</form>'
				+'	<br>'
				+'	<a href="#">Don'+"'"+'t have an account?</a> <br><a href="#">Lost member name or password?</a>'
				+'	</div>'
				+'	</div>'
				+'	<div class="simple_page_box article"><div>'
				+'		'
				+'		<p>Make sure that CAPS LOCK is off, both your Member name and password are case-sensitive.</p>'
				+'		<p>&nbsp;</p>'
				+'			<p>No good? Make sure that cookies are enabled in your browser. <a href="http://www.google.com/cookies.html">Read information</a> on how to enable cookies</p>'
				+'		<p>&nbsp;</p>'
				+'			<p>If all else fails, try clearing your cookies and cache. And if that doesn'+"'"+'t work, contact the Department of Zen, they'+"'"+'ll fix you up.</p>'
				+'	</div></div>'
	+'</div>';
	
	showPopup(loginBox);
}

function showExistingPopup(selector, width, callback) {
    if(typeof(width)=='undefined') {
		width=600;
	}
    
    showPopup($(selector).html(), width, callback);
}

function showPopupFromUrl(url, width, data, callback) {
    if(typeof(width)=='undefined') {
		width=600;
	}
    if(typeof(data)=='undefined') {
		data="";
	}
    
    lock();

        $.ajax({ // create an AJAX call...
            data: data, // get the form data
            type: "POST", // GET or POST
            url: url, // the file to call
            success: function(response) { // on success..
                unlock();
                showPopup(response, width, callback);
                return false;
            },
            error: function(request, textStatus, error) {
                showError(error);
                unlock();
            }
        });
        return false; // cancel original event to prevent form submitting);
}
/* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ */
/* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ popup.js, jquery.js, init.js */

$.validator.addMethod(
    "regex",
    function(value, element, regexp) {
        if (regexp.constructor != RegExp)
            regexp = new RegExp(regexp);
        else if (regexp.global)
            regexp.lastIndex = 0;
        return this.optional(element) || regexp.test(value);
    },
    "Please check your input."
    );
function submitSettingsInfoForm(form)
{
    doAjaxSubmit(form,
        function(result) {
            //sussecc
            result = eval('(' + result + ')');
            if (result.result == "success") {
                if (result.url)
                    window.location = result.url;
                else
                    showWarning(result.message);
            } else {
                showError(result.message);
            }
            unlock();
        }
        , function(result) {
            showError(result);
            unlock();
        //errr
        });

    return false;
}

function previewBlogItemShow() {
    return;
    $('#blog_item_content').html($('#text').html());
    $('#blog_item_title').html($('#blog_edit_block form').find('input[name=title]').val());
    $('#blog_item_box').show('slow');
    $('#blog_item_author').show('slow');
    $('#preview_tags').html($('#blog_edit_block form').find('textarea[name=tags]').val());
    $('#blog_item_tags').show('slow');
}
function previewBlogItemHide() {
    return;
    $('#blog_item_box').hide('slow');
    $('#blog_item_author').hide('slow');
    $('#blog_item_tags').hide('slow');
}

function previewBlogPreviewShow() {
    return;
    $('#blog_item_preview_content').html($('#preview_text').html());
    $('#blog_item_preview_title').html($('#blog_edit_block form').find('input[name=title]').val());
    $('#blog_item_preview_box').show('slow');
}
function previewBlogPreviewHide() {
    return;
    $('#blog_item_preview_box').hide('slow');

}

function initBuyCreditsTable() {
    $('#buycredits_table tr').click(function() {
        if($(this).hasClass('odd')||$(this).hasClass('even'))
        {
            $('#buycredits_table tr').removeClass('selected');
            $(this).addClass('selected');
            $('#credits').html($(this).find('td.credits span').html()).parents('form').find('input[name=credits]').val($('#credits').html());
            $('#amount').html($(this).find('td.amount span').html()).parents('form').find('input[name=amount]').val($('#amount').html());
        }
    });
}

function initBuyPictureTable() {
    $('#buypicture_table tr.odd').click(function() {
        $('#buypicture form').fadeIn();
        $('#buypicture_table tr').removeClass('selected');
        $(this).addClass('selected');
        $('#credits').html($(this).find('td.credits span').html()).parents('form').find('input[name=credits]').val($('#credits').html());
        $('#size').html($(this).find('td.size span').html()).parents('form').find('input[name=type]').val($('#size').html());
        $('#xpress').html($(this).find('td.xpress span').html()).parents('form').find('input[name=price]').val($('#xpress').html());


    }).css('cursor', 'pointer');
    ;
    $('#buypicture_table tr.even').click(function() {
        $('#buypicture form').fadeIn();
        $('#buypicture_table tr').removeClass('selected');
        $(this).addClass('selected');
        $('#credits').html($(this).find('td.credits span').html()).parents('form').find('input[name=credits]').val($('#credits').html());
        $('#size').html($(this).find('td.size span').html()).parents('form').find('input[name=type]').val($('#size').html());
        $('#xpress').html($(this).find('td.xpress span').html()).parents('form').find('input[name=price]').val($('#xpress').html());


    }).css('cursor', 'pointer');
}

function initPersonalMessagesForm() {
    $('form.pesonal_messages_form').validate({
        submitHandler: function(form) {
            /* Additional validation */

            showError("");

            doAjaxSubmit(form,
                function(result) {
                    //sussecc
                    result = eval('(' + result + ')');
                    if (result.result == "success") {
                        if (result.url)
                            window.location = result.url;
                        else
                            showWarning(result.message);
                    } else {
                        showError(result.message);
                    }
                    unlock();
                }
                , function(result) {
                    showError(result);
                    unlock();
                //errr
                });

            return false;

        }
        ,
        invalidHandler: function(form, validator) {
            var errors = validator.numberOfInvalids();
            if (errors) {
                var message = errors == 1
                ? 'You missed 1 field. It has been highlighted'
                : 'You missed ' + errors + ' fields. They have been highlighted.';
                showError(message);

            } else {
                showError();
            }
        }
        ,
        rules: {

            topic: {
                required: true,
                minlength: 3,
                maxlength: 100
            },
            message: {
                required: true,
                minlength: 3,
                maxlength: 10000
            }

        }
        ,
        messages: {
            topic: {
                minlength: jQuery.format("Your <b>Title</b> can be no less than {0} characters."),
                maxlength: jQuery.format("Woah! Your <b>Title</b> is way too long. Less than {0} characters please.")
            }
        }
    }


    );
}

function initArticleEditForm() {
    $('#article_edit').validate({
        submitHandler: function(form) {
            /* Additional validation */

            showError("");

            doAjaxSubmit(form,
                function(result) {
                    //sussecc
                    result = eval('(' + result + ')');
                    if (result.result == "success") {
                        if (result.url)
                            window.location = result.url;
                        else
                            stopArticleEditor();
                    } else {
                        showError(result.message);
                    }
                    unlock();
                }
                , function(result) {
                    showError(result);
                    unlock();
                //errr
                });

            return false;

        }
        ,
        invalidHandler: function(form, validator) {
            var errors = validator.numberOfInvalids();
            if (errors) {
                var message = errors == 1
                ? 'You missed 1 field. It has been highlighted'
                : 'You missed ' + errors + ' fields. They have been highlighted.';
                showError(message);

            } else {
                showError();
            }
        }
        ,
        rules: {

            header: {
                required: true,
                minlength: 3,
                maxlength: 100
            },
            left_text: {
                depends: function(element) { /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ tinymce */
                    if (typeof($('textarea#left_text').tinymce) != 'undefined') {

                        $('textarea#left_text').tinymce().save();

                    }
                },
                maxlength: 1000000,
                required: true

            },
            right_text: {
                depends: function(element) { /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ tinymce */
                    if (typeof($('textarea#right_text').tinymce) != 'undefined') {

                        $('textarea#right_text').tinymce().save();

                    }
                },
                maxlength: 1000000,
                required: false

            }

        }
        ,
        messages: {
            header: {
                minlength: jQuery.format("Your <b>Title</b> can be no less than {0} characters."),
                maxlength: jQuery.format("Woah! Your <b>Title</b> is way too long. Less than {0} characters please.")
            },
            left_text: {
                maxlength: jQuery.format("Please shorten your <b>Contents</b> to less than {0} characters.")
            },
            right_text: {
                maxlength: jQuery.format("Please shorten your <b>Contents</b> to less than {0} characters.")
            }
        }
    }


    );
}

function initBlogEdit() {
    /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ */
    if ($('#blog_edit_block ul.select_menu').size() > 0) {
        $('#blog_edit_block ul.select_menu li a').bind('click', function() {
            var textArea = $(this).parents('div').find('textarea.tinymce');
            if ($(this).hasClass('visual')) {
                textArea.tinymce().show();
                textArea.addClass('visualon');
            }
            if ($(this).hasClass('html')) {
                textArea.tinymce().hide();
                textArea.removeClass('visualon');
            }
            $(this).parents('ul').find('li').removeClass('selected');
            $(this).parents('li').addClass('selected');
            return false;
        });
    }
    if ($('#edit_page_info ul.select_menu.blog_blend_public').size() > 0) {

        $('#edit_page_info ul.select_menu.blog_blend_public li').each(function() {

            var input = $('form input[name=' + $(this).attr('id') + ']');
            if (input.val() == '0') {
                $(this).removeClass('selected');
            } else {
                $(this).addClass('selected');
            }
        }).bind('click', function() {

            var input = $('form input[name=' + $(this).attr('id') + ']');
            if (input.val() == '0') {
                input.val('1');
                $(this).addClass('selected');
            } else {
                $(this).removeClass('selected');
                input.val('0');
            }
            return false;
        });
    }
    $('#blog_edit_block input[type=submit].item').bind('click', function() {
        previewBlogItemShow();
        return false;
    });
    $('#blog_edit_block input[type=submit].preview').bind('click', function() {
        previewBlogPreviewShow();
        return false;
    });

    $('#blog_edit_block form').validate({
        submitHandler: function(form) {
            /* Additional validation */

            showError("");
            if (($(form).find('input[name=preview_image]').size() > 0) && ($(form).find('input[name=preview_image]').val() != "")) {
                $(form).attr('action', '/account/blog.php?file=true');
                return form.submit();
            }

            doAjaxSubmit(form,
                function(result) {
                    //sussecc
                    result = eval('(' + result + ')');
                    if (result.result == "success") {
                        if (result.url)
                            window.location = result.url;
                    } else {
                        showError(result.message);
                    }
                    unlock();
                }
                , function(result) {
                    showError(result);
                    unlock();
                //errr
                });

            return false;

        }
        ,
        invalidHandler: function(form, validator) {
            var errors = validator.numberOfInvalids();
            if (errors) {
                var message = errors == 1
                ? 'You missed 1 field. It has been highlighted'
                : 'You missed ' + errors + ' fields. They have been highlighted.';
                showError(message);

            } else {
                showError();
            }
        }
        ,
        rules: {

            title: {
                required: true,
                minlength: 3,
                maxlength: 100
            },
            text: {
                depends: function(element) { /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ tinymce */
                    if (typeof($('form textarea[name=text].tinymce').tinymce) != 'undefined') {

                        $('form textarea[name=text].tinymce').tinymce().save();

                    }
                },
                maxlength: 50000,
                required: true

            },
            keywords: {
                required: true,
                maxlength: 1000
            },
            caption: {
                depends: function(element) { /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ tinymce */
                    if (typeof($('form textarea[name=caption].tinymce').tinymce) != 'undefined') {

                        $('form textarea[name=caption].tinymce').tinymce().save();

                    }
                },
                required: true,
                maxlength: 1000
            }/*,
             preview_image: {
             required: true
             }*/
        }
        ,
        messages: {
            preview_image: {
                required: "Please select a file."
            },
            title: {
                minlength: jQuery.format("Your <b>Title</b> can be no less than {0} characters."),
                maxlength: jQuery.format("Woah! Your <b>Title</b> is way too long. Less than {0} characters please.")
            },
            text: {
                maxlength: jQuery.format("Please shorten your <b>Contents</b> to less than {0} characters.")
            },
            caption: {
                maxlength: jQuery.format("Please shorten your <b>Caption</b> to less than {0} characters.")
            },
            keywords: {
                maxlength: jQuery.format("You have too many <b>Keywords</b>. Use {0} characters or less.")
            }
        }
    }


    );

}
/* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ */

function initAjaxPopupButtons() {
    /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ */
    $('a.ajaxPopupButton').each(function(i) {
        $(this).parent("form").submit(function() {
            lock();
            $.ajax({ // create an AJAX call...
                data: $(this).serialize(), // get the form data
                type: $(this).attr('method'), // GET or POST
                url: $(this).attr('action'), // the file to call
                success: function(response) { // on success..
                    showPopup(response);
                    initPopupForms();
                    unlock();
                },
                error: function(request, textStatus, error) {
                    alert(response);
                    showErrorPopup(error);
                    unlock();
                }
            });
            return false; // cancel original event to prevent form submitting);
        });
    })
    .bind("click", function() {
        $(this).parent("form").submit();
        return false;
    });

    /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ .target */
    $('a.ajaxSimpleButton').each(function(i) {
        $(this).parent("form").submit(function() {

            var button = $(this).find('a.ajaxSimpleButton');
            button.click(function() {
                return false;
            });
            button.css("cursor", "wait");
            var id = button.attr("id");

            $.ajax({ // create an AJAX call...
                data: $(this).serialize(), // get the form data
                type: $(this).attr('method'), // GET or POST
                url: $(this).attr('action'), // the file to call
                success: function(response) { // on success..

                    var button = $('#' + id + '.ajaxSimpleButton');
                    if (button.find('.target').size() != 0)
                        button.find('.target').html(response);

                    button.click(function() {
                        $(this).parent("form").submit();
                    });
                    button.css("cursor", "pointer");
                },
                error: function(request, textStatus, error) {

                    showErrorPopup(error);
                    var button = $(this).find('a#' + id + '.ajaxSimpleButton');
                    button.click(function() {
                        $(this).parent("form").submit();
                    });
                    button.css("cursor", "pointer");
                }
            });
            return false; // cancel original event to prevent form submitting);
        });
    })
    .bind("click", function() {
        $(this).parent("form").submit();
    });

    /* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ */
    $('a.ajaxLoginButton').bind("click", function() {
        showLoginPopup();
    });
}
;


function initPopupForms() {
    $('#popup input.js_placeholder').placeholder({
        placeholderDivIdPrefix: 'placeholderFor',
        placeholderClassName: 'placeholder'
    });
    //ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
    /* $('#popup form').submit(function() {
     hidePopup();
     });*/
    //ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ - ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
    $('#popup form.ajax').submit(function() {
        hidePopup();
        lock();
        $.ajax({ // create an AJAX call...
            data: $(this).serialize(), // get the form data
            type: $(this).attr('method'), // GET or POST
            url: $(this).attr('action'), // the file to call
            success: function(response) { // on success..

                showPopup(response);
                initPopupForms();
                unlock();
            },
            error: function(request, textStatus, error) {
                showErrorPopup(error);
                initPopupForms();
                unlock();
            }
        });
        return false; // cancel original event to prevent form submitting);
    });

    //ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½-ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ OK
    $('#popup form.ajaxConfirm').find('input[submit]').bind("click", function() {
        hidePopup();
        return false;
    });
}

//ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ doAjaxSubmit, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ successCallback(ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½) ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ failureCallback(ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½) ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
function doParentAjaxSubmit(element, successCallback, failureCallback) {
    /*$(element).click(function() {
     return false;
     });*/
    //$(element).css("cursor", "wait");
    //alert($(element).parents("form").attr('action'));
    doAjaxSubmit($(element).parents("form"), successCallback, failureCallback);
}

function doEditButtonSubmit(element) {
    showWarning("");
    showError("");
    doParentAjaxSubmit(element,
        function(result) {
            result = eval('(' + result + ')');
            if (result.result == 'success') {
                var cl = $('#photo_block img.child').clone();
                cl.attr('src', result.thumbnail);
                $('#photo_block img.child').parent().html("").append(cl);
            }
            if (result.result == 'error') {
                showWarning(result.error);
            }
            $('#edit_block a.edit_button').css("cursor", "pointer");
            return false;
        }
        ,
        function(result) {
            showError(result);
        }
        );
    return false;
}
function doEditFormSubmit(element) {
    showWarning("");
    showError("");
    doParentAjaxSubmit(element,
        function(result) {
            result = eval('(' + result + ')');
            if (result.result == 'success') {
            /*$('#photo_block img.child').attr('src', result.thumbnail);*/
            //showPopup("<form class=ajaxConfirm style='padding: 30px;'><h1>Information saved</h1><br><br><input type=submit class=button value=OK></form>");
            }
            if (result.result == 'error') {
                showWarning(result.error);
            }
            /*$('#edit_block a.edit_button').css("cursor", "pointer");*/
            return false;
        }
        ,
        function(result) {
            showError(result);
        }
        );
    return false;
}
function doLockButtonSubmit(element) {
    showWarning("");
    showError("");
    if ($(element).attr('id') == ('block')) {
        //Do block
        $(element).parents("form").find('input[name=do]').val('block');

        doParentAjaxSubmit(element,
            function(result) {
                result = eval('(' + result + ')');
                if (result.result == 'success') {
                    $('#block').addClass('selected');
                    $('#unblock').removeClass('selected');
                    $('#status').html(result.status);
                }
                if (result.result == 'error') {
                    showWarning(result.error);
                }
                $('#edit_block a.edit_button').css("cursor", "pointer");
                return false;
            }
            ,
            function(result) {
                showError(result);
            }
            );
    } else
    if ($(element).attr('id') == ('unblock')) {
        //Do unlock
        $(element).parents("form").find('input[name=do]').val('unblock');

        doParentAjaxSubmit(element,
            function(result) {
                result = eval('(' + result + ')');
                if (result.result == 'success') {
                    $('#block').removeClass('selected');
                    $('#unblock').addClass('selected');
                    $('#status').html(result.status);
                }
                if (result.result == 'error') {
                    showWarning(result.error);
                }
                $('#edit_block a.edit_button').css("cursor", "pointer");
                return false;
            }
            ,
            function(result) {
                showError(result);
            }
            );
    }


    return false;
}


//ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ successCallback(ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½) ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ failureCallback(ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½) ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
function doAjaxSubmit(form, successCallback, failureCallback) {
    var f = $(form);
    lock();
    $.ajax({ // create an AJAX call...
        data: f.serialize(), // get the form data
        type: f.attr('method'), // GET or POST
        url: f.attr('action'), // the file to call
        success: function(response) { // on success..
            successCallback(response);
            unlock();
        },
        error: function(request, textStatus, error) {
            failureCallback(error);
            unlock();
        }
    });
    return false; // cancel original event to prevent form submitting);
}

$(document).ready(function() {
    initFormUniversal();
    //ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½
    $('div.log_in form.ajax').submit(function() {
        hidePopup();
        lock();
        $.ajax({ // create an AJAX call...
            data: $(this).serialize(), // get the form data
            type: $(this).attr('method'), // GET or POST
            url: $(this).attr('action'), // the file to call
            success: function(response) { // on success..

                showPopup(response);
                initPopupForms();
                unlock();
            },
            error: function(request, textStatus, error) {
                showErrorPopup(error);
                initPopupForms();
                unlock();
            }
        });
        return false; // cancel original event to prevent form submitting);
    });
    $('form#lightshow_edit').validate({
        submitHandler: function(form) {
            /* Additional validation */

            var title = $(form).find('input[name=title]').val();
            showError('');
            showWarning('');
            doAjaxSubmit($(form),
                function(result) {

                    result = eval('(' + result + ')');
                    if (result.result == 'success') {
                        $('#lightbox_sort h1 strong').html(title);
                        $('#lightbox_sort .lightshow .info').html(title);
                    }
                    if (result.result == 'error') {
                        showWarning(result.error);
                    }

                    return false;
                },
                function(result) {
                    showError(result);
                }
                );

        }
        ,
        invalidHandler: function(form, validator) {
            var errors = validator.numberOfInvalids();
            if (errors) {
                var message = errors == 1
                ? 'You missed 1 field. It has been highlighted'
                : 'You missed ' + errors + ' fields. They have been highlighted.';
                showError(message);

            } else {
                showError();
            }
        }
        ,
        rules: {

            title: {
                required: true,
                minlength: 4,
                maxlength: 100
            },
            description: {
                required: true,
                maxlength: 500
            },
            keywords: {
                required: true,
                maxlength: 1000
            }
        }
        ,
        messages: {
            title: {
                minlength: jQuery.format("Your <b>Title</b> can be no less than {0} characters."),
                maxlength: jQuery.format("Woah! Your <b>Title</b> is way too long. Less than {0} characters please.")
            },
            description: {
                maxlength: jQuery.format("Please shorten your <b>Description</b> to less than {0} characters.")
            },
            keywords: {
                maxlength: jQuery.format("You have too many <b>Tags</b>. Use {0} characters or less.")
            }
        }
    }


    );

    $('form#lightshow').validate({
        submitHandler: function(form) {
            /* Additional validation */

            var title = $(form).find('input[name=title]').val();

            doAjaxSubmit($(form),
                function(result) {

                    result = eval('(' + result + ')');
                    if (result.result == 'success') {
                        createLightbox(title, result.id);
                    }
                    if (result.result == 'error') {
                        showWarning(result.error);
                    }

                    return false;
                },
                function(result) {
                    showError(result);
                }
                );

        }
        ,
        invalidHandler: function(form, validator) {
            var errors = validator.numberOfInvalids();
            if (errors) {
                var message = errors == 1
                ? 'You missed 1 field. It has been highlighted'
                : 'You missed ' + errors + ' fields. They have been highlighted.';
                showError(message);

            } else {
                showError();
            }
        }
        ,
        rules: {

            title: {
                required: true,
                minlength: 4,
                maxlength: 300
            },
            description: {
                required: true,
                maxlength: 500
            },
            keywords: {
                required: true,
                maxlength: 1000
            }
        }
        ,
        messages: {
            title: {
                minlength: jQuery.format("Your <b>Title</b> can be no less than {0} characters."),
                maxlength: jQuery.format("Woah! Your <b>Title</b> is way too long. Less than {0} characters please.")
            },
            description: {
                maxlength: jQuery.format("Please shorten your <b>Description</b> to less than {0} characters.")
            },
            keywords: {
                maxlength: jQuery.format("You have too many <b>Tags</b>. Use {0} characters or less.")
            }
        }
    }


    );

    $('form.upload.photo').validate({
        submitHandler: function(form) {
            /* Additional validation */

            if (numberCount($(form).find("input[name=categories]").attr("value")) == 0) {
                showError("Select at least one category.");
            } else {
                uploadPhoto();
            }
            return false;

        }
        ,
        invalidHandler: function(form, validator) {
            var errors = validator.numberOfInvalids();
            if (errors) {
                var message = errors == 1
                ? 'You missed 1 field. It has been highlighted'
                : 'You missed ' + errors + ' fields. They have been highlighted.';
                showError(message);

            } else {
                showError();
            }
        }
        ,
        rules: {

            title: {
                required: true,
                minlength: 3,
                maxlength: 100
            },
            description: {
                maxlength: 500
            },
            file: {
                required: true
            },
            keywords: {
                maxlength: 1000
            }
        }
        ,
        messages: {
            file: {
                required: "Please select a file."
            },
            title: {
                minlength: jQuery.format("Your <b>Title</b> can be no less than {0} characters."),
                maxlength: jQuery.format("Woah! Your <b>Title</b> is way too long. Less than {0} characters please.")
            },
            description: {
                maxlength: jQuery.format("Please shorten your <b>Description</b> to less than {0} characters.")
            },

            keywords: {
                maxlength: jQuery.format("You have too many <b>Tags</b>. Use {0} characters or less.")
            }
        }
    }


    );

    $('form.edit.photo').validate({
        submitHandler: function(form) {
            /* Additional validation */

            if (numberCount($(form).find("input[name=categories]").attr("value")) == 0) {
                showError("Select at least one category.");
            } else {
                doEditFormSubmit($('form.edit.photo input[type=submit]'));

            }
            return false;

        }
        ,
        invalidHandler: function(form, validator) {
            var errors = validator.numberOfInvalids();
            if (errors) {
                var message = errors == 1
                ? 'You missed 1 field. It has been highlighted.'
                : 'You missed ' + errors + ' fields. They have been highlighted.';
                showError(message);

            } else {
                showError();
            }
        }
        ,
        rules: {

            title: {
                required: true,
                minlength: 3,
                maxlength: 100
            },
            description: {
                maxlength: 500
            },
            file: {
                required: true
            },
            keywords: {
                maxlength: 1000
            }
        }
        ,
        messages: {
            file: {
                required: "Please select a file."
            },
            title: {
                minlength: jQuery.format("Your <b>Title</b> can be no less than {0} characters."),
                maxlength: jQuery.format("Woah! Your <b>Title</b> is way too long. Less than {0} characters please.")
            },
            description: {
                maxlength: jQuery.format("Please shorten your <b>Description</b> to less than {0} characters.")
            },

            keywords: {
                maxlength: jQuery.format("You have too many <b>Tags</b>. Use {0} characters or less.")
            }
        }
    }


    );

    $('form#signupform').validate({
        submitHandler: function(form) {
            /* Additional validation */
            showError("");
            if ($('form#signupform input[name=password]').val() == $('form#signupform input[name=confirm]').val()) {
                form.submit();
            } else {
                showError("Passwords should match");

            }
            return false;

        }
        ,
        invalidHandler: function(form, validator) {
            var errors = validator.numberOfInvalids();
            if (errors) {
                var message = errors == 1
                ? 'You missed 1 field. It has been highlighted.'
                : 'You missed ' + errors + ' fields. They have been highlighted.';
                showError(message);

            } else {
                showError();
            }
        }
        ,
        rules: {

            name: {
                required: true,
                minlength: 3,
                maxlength: 100
            },
            login: {
                required: true,
                minlength: 3,
                maxlength: 20
            },
            sex: {
                required: true
            },
            email: {
                required: true,
                regex: /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/
            },
            password: {
                minlength: 8,
                required: true

            },
            confirm: {
                minlength: 8,
                required: true
            }


        }
        ,
        messages: {
            email: {
                regex: "Please provide a valid formed email."
            },
            confirm: {
                equalTo: "Confirmed password does not match."
            }

        }
    }


    );

    $('#squeezebutton').bind('click', function() {
        var button = $(this);

        doParentAjaxSubmit(this,

            function(result) {
                //sussecc
                result = eval('(' + result + ')');
                if (result.result == "success") {

                    if (button.hasClass('gray')) {
                        button.removeClass('gray');
                    } else {
                        button.addClass('gray');
                    }
                    $("#squeezes").html(result.seeds);
                } else {
                //showError(result.message);
                }
                unlock();
            }
            , function(result) {
                showError(result);
                unlock();
            //errr
            }

            );
    });
    $('#squeezeblog').bind('click', function() {
        var button = $(this);

        doParentAjaxSubmit(this,

            function(result) {
                //sussecc
                result = eval('(' + result + ')');
                if (result.result == "success") {
                    button.removeClass('selected');

                    $("#squeezes").html(result.seeds);
                } else {
                    showError(result.message);
                }
                unlock();
            }
            , function(result) {
                showError(result);
                unlock();
            //errr
            }

            );

        return false;
    });

    $('#studiome_friend_button').bind('click', function() {
        var button = $(this);

        doParentAjaxSubmit(this,

            function(result) {

                result = eval('(' + result + ')');
                if (result.result == "success") {

                    if (button.hasClass('icon_16_friend'))
                        button.removeClass('icon_16_friend').addClass('icon_16_unfriend');
                    else
                        button.removeClass('icon_16_unfriend').addClass('icon_16_friend');

                } else {
                    showError(result.error);
                }
                unlock();
            }
            , function(result) {
                showError(result);
                unlock();
            //errr
            }

            );

        return false;
    });

    $('#studiome_karma_button').bind('click', function() {
        var button = $(this);

        doParentAjaxSubmit(this,

            function(result) {

                result = eval('(' + result + ')');
                if (result.result == "success") {
                    button.find('.left_part').html(result.karma);
                } else {
                    showError(result.error);
                }
                unlock();
            }
            , function(result) {
                showError(result);
                unlock();
            //errr
            }

            );

        return false;
    });


    initAjaxPopupButtons();
    initBlogEdit();
    initArticleEditForm();
    initBuyCreditsTable();
    initSettingsFriends();
    initBuyPictureTable();

});

function initSettingsFriends() {
    $('a.settings_friend_button').bind('click', function() {
        var button = $(this);

        doParentAjaxSubmit(this,

            function(result) {

                result = eval('(' + result + ')');
                if (result.result == "success") {

                    if (button.hasClass('icon_16_friend'))
                        button.removeClass('icon_16_friend').addClass('icon_16_unfriend');
                    else
                        button.removeClass('icon_16_unfriend').addClass('icon_16_friend');

                } else {
                    showError(result.error);
                }
                unlock();
            }
            , function(result) {
                showError(result);
                unlock();
            //errr
            }

            );

        return false;
    });
    $('a.settings_karma_button').bind('click', function() {
        var button = $(this);

        doParentAjaxSubmit(this,

            function(result) {

                result = eval('(' + result + ')');
                if (result.result == "success") {
                    button.find('.left_part').html(result.karma);
                } else {
                    showError(result.error);
                }
                unlock();
            }
            , function(result) {
                showError(result);
                unlock();
            //errr
            }

            );

        return false;
    });
}

/* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½

==== ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ HTML+CSS ====
<form class="universal" refreshId="ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ html ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½" callback="function (formElement, data) { ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½}" afterSubmit="function (formElement) { ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½}">
ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½:
refreshId = id ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½
callback = ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ refreshId ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ result.html
afterSubmit = ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½, ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½



 */

new function($) {
    $.fn.attachUniForm = function(settings) {

        settings = settings || {};
        settings.refreshId = settings.refreshId || this.attr('refreshId') || this.attachUniqueId();
        settings.callback = settings.callback || universalCallback;

        this.data('settings', settings);
        
        if($(this).find("input[type=file]").size()==0) {
                  
            if($(this).find("input[name=ajax]").size()==0) {
                $(this).append("<input type='hidden' name='ajax' value='1' />");
            }
            if($(this).find("input[name=submit_button_action_name]").size()==0) {
                $(this).append("<input type='hidden' name='submit_button_action_name' value='' />");
            }

            $(this).find('input[type=submit]').click(function() {
                $(this).parents('form').find("input[name=submit_button_action_name]").val($(this).attr('name'))
            });

            $(this).find("input[name=ajax]").val(1);
            /* Do add ajax functions */
            $(this).submit(function() {

                var f = $(this);
                var v = $(this).find("input[name=submit_button_action_name]").val();
                if(v=="")v="no_submit_pressed";

                lockerDivAdd(f.parent());

                if( ((f.attr('method') || "")=="")) {
                    universalError(f, "Form method field not defined");
                    return false;
                }
                if( ((f.attr('action') || "")=="")) {
                    universalError(f, "Form action field not defined");
                    return false;
                }
                //alert(f.serialize()+'&'+v+'=true');
                $.ajax({ // create an AJAX call...
                    data: f.serialize()+'&'+v+'=true', // get the form data
                    type: f.attr('method'), // GET or POST
                    url: f.attr('action'), // the file to call
                    timeout: 30000,
                    success: function(response) { // on success..
                        universalMessagesClear(f);
                        lockerDivRemove(f.parent());

                        if(f.hasClass('HTMLcallback')) {
                            return universalHTMLCallback(f, response);
                        }
                        if(f.hasClass('POPUPcallback')) {
                            return universalPopupCallback(f, response);
                        }

                        var result = eval('(' + response + ')');

                        var ido = f.attachUniqueId();
                        if((result==null)||(result.result==null)) {
                            universalError(f, "Server returned ajax data in invalid format");

                        } else
                        if (result.result == "success") {

                            f.data('settings').callback(f, result);
                        } else {

                            universalError(f, result.message || "Error happened but server returned no error details");
                        }

                        universalAfterSubmit($('#'+ido));


                    },
                    error: function(request, textStatus, error) {
                        universalMessagesClear(f);
                        if(error!="undefined") {
                            universalError( f, ""+error);
                        }
                        lockerDivRemove(f.parent());
                    }
                });

                return false; // cancel original event to prevent form submitting);
            });

            if($(this).hasClass('paginator')) {
                $(this).find('.paginator a').click(function() {
                    $(this).parents('form').find('input[name=page]').val($(this).attr('page'));
                    $(this).parents('form').submit();
                    return false;
                });
                $(this).find('.paginator span').click(function() {
                    $(this).parents('form').find('input[name=page]').val($(this).parents('form').find('input[name=pagenum]').val());
                    $(this).parents('form').submit();
                });
            }
            $(this).addClass("initialized");
             
        } else {
            $(this).addClass("initialized"); 
        }
        
        return this;
    };
}(jQuery);

/* ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ ï¿½ï¿½ï¿½ï¿½ï¿½ */
/* SELECTOR form.universal */
/* SELECTOR DEPENDANT form.universal .local_messages, .global_messages, form.universal@callback, form.universal@aftersubmit, form.universal input[name=ajax_reply] */
/* form.universal div.locker */
/* WORKFLOW:
    
 */
function lockerDivAdd(element) {

    if($(element).find("div.locker").size() == 0) {
        $(element).append("<div class=locker></div>");

    }
        
    $(element).find("div.locker").css({
        opacity: "0.5",
        background: "white",
        position: "absolute",
        top: $(element).position().top,
        left: $(element).position().left,
        height: $(element).height(),
        width: $(element).width()
    });
}
function lockerDivRemove(element) {
    if($(element).find("div.locker").size() > 0) {
        $(element).find("div.locker").remove();
    }
}
function universalMessagesClear(element) {
        
    if(element.find('.local_messages').size()>0) {

        element.find('.local_messages .error').remove();
        element.find('.local_messages .success').remove();
        return;
    }

    if($('.global_messages').size()>0) {

        $('.global_messages .error.formerror'+element.attachUniqueId()).remove();
        $('.global_messages .success.formsuccess'+element.attachUniqueId()).remove();
        return;
    }
}
function universalError(element, message) {
        
    if(element.find('.local_messages').size()>0) {
        if((message || "") != "") {
            element.find('.local_messages').html("<div class=error>"+message+"</div>")
        }
        return;
    }
    if($('.global_messages').size()>0) {
        if((message || "") != "") {
            $('.global_messages').html("<div class='error formerror"+element.attachUniqueId()+"'>"+message+"</div>")
        }
        return;
    }
    showError(message);
}
function universalMessage(element, message) {
    if(element.find('.local_messages').size()>0) {
        if((message || "") != "") {
            element.find('.local_messages').html("<div class=success>"+message+"</div>")
        }
        return;
    }
    if($('.global_messages').size()>0) {
        if((message || "") != "") {
            $('.global_messages').html("<div class='success formsuccess"+element.attachUniqueId()+"'>"+message+"</div>")
        }
        return;
    }
    showWarning(message);
}
function universalMessageCallback(element, data) {
    if((data!=null)&&(data.message!=null)) {
        universalMessagesClear(element);
        universalMessage(element, data.message);
    } else {
        universalError(element, "Error in message callback: no 'message' field found in server result.");
    }
}
function universalCallback(element, data) {
        
    if($(element).attr('callback')!=null) {
        var c = eval("("+$(element).attr('callback')+")");
        universalMessagesClear(element);
        c(element, data);

    } else {
            
        if((data!=null)&&(data.html!=null)) {
            universalMessagesClear(element);
            $('#'+$(element).data('settings').refreshId).replaceWith(data.html);
        } else {
            universalError(element, "Error in default callback: no 'html' field found in server result.");
        }
    }
}
function createLightshowCallback(element, data) {

    if((data!=null)&&(data.id!=null)) {
        universalMessagesClear(element);

        var title = $('#create_lightshow input[name=name]').val();


        var date = (new Date()).format("d.m.Y H:i");

        var lid = data.id;

        var replyHtml = lightshowStudiomeTemplate.replace(/%id%/g, lid).replace(/%link%/g,data.link).replace(/%title%/g,data.title).replace(/%date%/g,data.date).replace(/%time%/g,data.time);

        $('.studiome_lightshows_list').prepend(replyHtml);

        $('#empty').hide();

    } else {
        universalError(element, "Error in reply callback: no lightshow id in server result.");
    }

}
function universalHabrReply(element, data) {

    if((data!=null)&&(data.user!=null)&&(data.link!=null)&&(data.comment!=null)&&(data.avatar!=null)&&(data.time!=null)&&(data.date!=null)) {
        universalMessagesClear(element);

        var userName = data.user;
        var userUrl = data.link;
        var userImageUrl = data.avatar;

        var replyDate = data.date+" "+data.time;

        var replyText = data.comment;

        var replyHtml = commentHabrTemplate.replace(/%replytext%/g, replyText).replace(/%replydate%/g, replyDate).replace(/%username%/g,userName).replace(/%userurl%/g,userUrl).replace(/%userimageurl%/g,userImageUrl);

        $('.habr_comments_zone').append(replyHtml);

        $('#empty').hide();
    } else {
        universalError(element, "Error in reply callback: not enough data fields found in server result (Check: user, link, comment, avatar, time, date)");
    }

}
function universalHTMLCallback(element, data) {
    var ido = $(element).attachUniqueId();
    if($(element).attr('callback')!=null) {
        var c = eval("("+$(element).attr('callback')+")");
        universalMessagesClear(element);
        c(element, data);

    } else {

        if(data!=null) {
            universalMessagesClear(element);
            $('#'+$(element).data('settings').refreshId).replaceWith(data);
        } else {
            universalError(element, "Error in default callback: no html found in server result.");
        }
    }
    universalAfterSubmit($('#'+ido));
}
function universalPopupCallback(element, data) {

    var ido = $(element).attachUniqueId();
    if($(element).attr('callback')!=null) {
        var c = eval("("+$(element).attr('callback')+")");
        universalMessagesClear(element);
        c(element, data);

    } else {

        if(data!=null) {
            universalMessagesClear(element);
            showPopup(data, 800);
        } else {
            universalError(element, "Error in default callback: no html found in server result.");
        }
    }
    universalAfterSubmit($('#'+ido));
}
function universalAfterSubmit(element) {
        
    if(element!=null && element.size()>0) {
        if(element.attr('afterSubmit')!=null) {
         
            var c = eval("("+element.attr('afterSubmit')+")");
            c(element);

        }
    }
         
//initFormUniversal();
}
function initFormUniversal() {
    $('form.universal:not(.initialized)').livequery(function() {
        $(this).attachUniForm(null);
    });
    
    $('[maxcharacters]').livequery(function() {
        var ta=$(this);
        if(!ta.hasClass('initialized')) {
            ta.addClass('initialized');

            ta.after('<span><span id=cnt'+ta.attachUniqueId()+'>'+ta.attr('maxcharacters')+'</span> characters left</span>');
            ta.next().css('float','right');
            ta.bind('keyup', function() {
                $(this).trigger('counterEvent')
            });
            ta.bind('counterEvent', function() {
                var s = $(this).val();

                var len=s.length;
                if(len>$(this).attr('maxcharacters')) {
                    $(this).val($(this).val().substring(0, $(this).attr('maxcharacters')));
                    len=0;
                }
                $('#cnt'+$(this).attr('id')).html($(this).attr('maxcharacters')-len);
            });
        }
    });
}





/**
 * AutoComplete Field - JavaScript Code
 *
 * This is a sample source code provided by fromvega.
 * Search for the complete article at http://www.fromvega.com
 *
 * Enjoy!
 *
 * @author fromvega
 *
 */

// global variables
var acListTotal   =  0;
var acListCurrent = -1;
var acDelay		  = 100;
var acURL		  = null;
var acSearchId	  = null;
var acResultsId	  = null;
var acSearchField = null;
var acResultsDiv  = null;

function setAutoComplete(field_id, results_id, get_url, vertical){

	// initialize vars
	acSearchId  = "#" + field_id;
	acResultsId = "#" + results_id;
	acURL 		= get_url;

	// create the results div
	$("body").append('<div class="'+vertical+'" id="' + results_id + '"></div>');

	// register mostly used vars
	acSearchField	= $(acSearchId);
	acResultsDiv	= $(acResultsId);

	// reposition div
	repositionResultsDiv();

	// on blur listener
	acSearchField.blur(function(){ setTimeout("clearAutoComplete()", 100) });

	// on key up listener
	acSearchField.keyup(function (e) {

		// get keyCode (window.event is for IE)
		var keyCode = e.keyCode || window.event.keyCode;
		var lastVal = acSearchField.val();

		// check an treat up and down arrows
		if(updownArrow(keyCode)){
			return;
		}

		// check for an ENTER or ESC
		if(keyCode == 13 || keyCode == 27){
			clearAutoComplete();
			return;
		}

		// if is text, call with delay
		setTimeout(function () {autoComplete(lastVal)}, acDelay);
	});
}

// treat the auto-complete action (delayed function)
function autoComplete(lastValue)
{
	// get the field value
	var part = acSearchField.val();

	// if it's empty clear the resuts box and return
	if(part == ''){
		clearAutoComplete();
		return;
	}

	// if it's equal the value from the time of the call, allow
	if(lastValue =! part){
		return;
	}

	// get remote data as JSON
	$.getJSON(acURL+part.replace(/ /g, '%20'), function(json){

		// get the total of results
		var ansLength = acListTotal = json.length;

		// if there are results populate the results div
		if(ansLength > 0){

			var newData = '';

			// create a div for each result
			for(i=0; i < ansLength; i++) {
				newData += '<div class="unselected">' + json[i] + '</div>';
			}

			// update the results div
			acResultsDiv.html(newData);
			acResultsDiv.css("display","block");

			// for all divs in results
			var divs = $(acResultsId + " > div");

			// on mouse over clean previous selected and set a new one
			divs.mouseover( function() {
				divs.each(function(){ this.className = "unselected"; });
				this.className = "selected";
			})

			// on click copy the result text to the search field and hide
			divs.click( function() {
				acSearchField.val(this.childNodes[0].nodeValue);
				clearAutoComplete();
			});

		} else {
			clearAutoComplete();
		}
	});
}

// clear auto complete box
function clearAutoComplete()
{
	acResultsDiv.html('');
	acResultsDiv.css("display","none");
}

// reposition the results div accordingly to the search field
function repositionResultsDiv()
{
	// get the field position
	var sf_pos    = acSearchField.offset();
	var sf_top    = sf_pos.top;
	var sf_left   = sf_pos.left;

	// get the field size
	var sf_height = acSearchField.height();
	var sf_width  = acSearchField.width();

	// apply the css styles - optimized for Firefox
	acResultsDiv.css("position","absolute");
	acResultsDiv.css("z-index","10");
	acResultsDiv.css("left", sf_left - 2);
	acResultsDiv.css("top", sf_top + sf_height + 5);
	acResultsDiv.css("width", sf_width - 2);
}


// treat up and down key strokes defining the next selected element
function updownArrow(keyCode) {
	if(keyCode == 40 || keyCode == 38){

		if(keyCode == 38){ // keyUp
			if(acListCurrent == 0 || acListCurrent == -1){
				acListCurrent = acListTotal-1;
			}else{
				acListCurrent--;
			}
		} else { // keyDown
			if(acListCurrent == acListTotal-1){
				acListCurrent = 0;
			}else {
				acListCurrent++;
			}
		}

		// loop through each result div applying the correct style
		acResultsDiv.children().each(function(i){
			if(i == acListCurrent){
				acSearchField.val(this.childNodes[0].nodeValue);
				this.className = "selected";
			} else {
				this.className = "unselected";
			}
		});

		return true;
	} else {
		// reset
		acListCurrent = -1;
		return false;
	}
}

$(document).ready(function(){
	setAutoComplete("searchField", "results", "http://"+document.location.host+"/autocomplete/?query=", "autoComplete");
});
jQuery(function ($) {
	$.fn.quicksearch = function (target, opt) {

		var timeout, cache, rowcache, jq_results, val = '', e = this, options = $.extend({
			delay: 100,
			selector: null,
			stripeRows: null,
			loader: null,
			noResults: '',
			bind: 'keyup',
			onBefore: function () {
				return;
			},
			onAfter: function () {
				return;
			},
			show: function () {
				this.style.display = "";
			},
			hide: function () {
				this.style.display = "none";
			}
		}, opt);

		this.go = function () {

			var i = 0, noresults = true, vals = val.toLowerCase().split(' ');

			var rowcache_length = rowcache.length;
			for (var i = 0; i < rowcache_length; i++)
			{
				if (this.test(vals, cache[i]) || val == "") {
					options.show.apply(rowcache[i]);
					noresults = false;
				} else {
					options.hide.apply(rowcache[i]);
				}
			}

			if (noresults) {
				this.results(false);
			} else {
				this.results(true);
				this.stripe();
			}

			this.loader(false);
			options.onAfter();

			return this;
		};

		this.stripe = function () {

			if (typeof options.stripeRows === "object" && options.stripeRows !== null)
			{
				var joined = options.stripeRows.join(' ');
				var stripeRows_length = options.stripeRows.length;

				jq_results.not(':hidden').each(function (i) {
					$(this).removeClass(joined).addClass(options.stripeRows[i % stripeRows_length]);
				});
			}

			return this;
		};

		this.strip_html = function (input) {
			var output = input.replace(new RegExp('<[^<]+\>', 'g'), "");
			output = $.trim(output.toLowerCase());
			return output;
		};

		this.results = function (bool) {
			if (typeof options.noResults === "string" && options.noResults !== "") {
				if (bool) {
					$(options.noResults).hide();
				} else {
					$(options.noResults).show();
				}
			}
			return this;
		};

		this.loader = function (bool) {
			if (typeof options.loader === "string" && options.loader !== "") {
				 (bool) ? $(options.loader).show() : $(options.loader).hide();
			}
			return this;
		};

		this.test = function (vals, t) {
			for (var i = 0; i < vals.length; i += 1) {
				if (t.indexOf(vals[i]) === -1) {
					return false;
				}
			}
			return true;
		};

		this.cache = function () {

			jq_results = $(target);

			if (typeof options.noResults === "string" && options.noResults !== "") {
				jq_results = jq_results.not(options.noResults);
			}

			var t = (typeof options.selector === "string") ? jq_results.find(options.selector) : $(target).not(options.noResults);
			cache = t.map(function () {
				return e.strip_html(this.innerHTML);
			});

			rowcache = jq_results.map(function () {
				return this;
			});

			return this.go();
		};

		this.trigger = function () {
			this.loader(true);
			options.onBefore();

			window.clearTimeout(timeout);
			timeout = window.setTimeout(function () {
				e.go();
			}, options.delay);

			return this;
		};

		this.cache();
		this.results(true);
		this.stripe();
		this.loader(false);

		return this.each(function () {
			$(this).bind(options.bind, function () {
				val = $(this).val();
				e.trigger();
			});
		});

	};
});