
/*
 * jQuery JavaScript Library v1.3
 * http://jquery.com/
 *
 * Copyright (c) 2009 John Resig
 * Dual licensed under the MIT and GPL licenses.
 * http://docs.jquery.com/License
 *
 * Date: 2009-01-13 12:50:31 -0500 (Tue, 13 Jan 2009)
 * Revision: 6104
 */
(function(){var l=this,g,x=l.jQuery,o=l.$,n=l.jQuery=l.$=function(D,E){return new n.fn.init(D,E)},C=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;n.fn=n.prototype={init:function(D,G){D=D||document;if(D.nodeType){this[0]=D;this.length=1;this.context=D;return this}if(typeof D==="string"){var F=C.exec(D);if(F&&(F[1]||!G)){if(F[1]){D=n.clean([F[1]],G)}else{var H=document.getElementById(F[3]);if(H){if(H.id!=F[3]){return n().find(D)}var E=n(H);E.context=document;E.selector=D;return E}D=[]}}else{return n(G).find(D)}}else{if(n.isFunction(D)){return n(document).ready(D)}}if(D.selector&&D.context){this.selector=D.selector;this.context=D.context}return this.setArray(n.makeArray(D))},selector:"",jquery:"1.3",size:function(){return this.length},get:function(D){return D===g?n.makeArray(this):this[D]},pushStack:function(E,G,D){var F=n(E);F.prevObject=this;F.context=this.context;if(G==="find"){F.selector=this.selector+(this.selector?" ":"")+D}else{if(G){F.selector=this.selector+"."+G+"("+D+")"}}return F},setArray:function(D){this.length=0;Array.prototype.push.apply(this,D);return this},each:function(E,D){return n.each(this,E,D)},index:function(D){return n.inArray(D&&D.jquery?D[0]:D,this)},attr:function(E,G,F){var D=E;if(typeof E==="string"){if(G===g){return this[0]&&n[F||"attr"](this[0],E)}else{D={};D[E]=G}}return this.each(function(H){for(E in D){n.attr(F?this.style:this,E,n.prop(this,D[E],F,H,E))}})},css:function(D,E){if((D=="width"||D=="height")&&parseFloat(E)<0){E=g}return this.attr(D,E,"curCSS")},text:function(E){if(typeof E!=="object"&&E!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(E))}var D="";n.each(E||this,function(){n.each(this.childNodes,function(){if(this.nodeType!=8){D+=this.nodeType!=1?this.nodeValue:n.fn.text([this])}})});return D},wrapAll:function(D){if(this[0]){var E=n(D,this[0].ownerDocument).clone();if(this[0].parentNode){E.insertBefore(this[0])}E.map(function(){var F=this;while(F.firstChild){F=F.firstChild}return F}).append(this)}return this},wrapInner:function(D){return this.each(function(){n(this).contents().wrapAll(D)})},wrap:function(D){return this.each(function(){n(this).wrapAll(D)})},append:function(){return this.domManip(arguments,true,function(D){if(this.nodeType==1){this.appendChild(D)}})},prepend:function(){return this.domManip(arguments,true,function(D){if(this.nodeType==1){this.insertBefore(D,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(D){this.parentNode.insertBefore(D,this)})},after:function(){return this.domManip(arguments,false,function(D){this.parentNode.insertBefore(D,this.nextSibling)})},end:function(){return this.prevObject||n([])},push:[].push,find:function(D){if(this.length===1&&!/,/.test(D)){var F=this.pushStack([],"find",D);F.length=0;n.find(D,this[0],F);return F}else{var E=n.map(this,function(G){return n.find(D,G)});return this.pushStack(/[^+>] [^+>]/.test(D)?n.unique(E):E,"find",D)}},clone:function(E){var D=this.map(function(){if(!n.support.noCloneEvent&&!n.isXMLDoc(this)){var H=this.cloneNode(true),G=document.createElement("div");G.appendChild(H);return n.clean([G.innerHTML])[0]}else{return this.cloneNode(true)}});var F=D.find("*").andSelf().each(function(){if(this[h]!==g){this[h]=null}});if(E===true){this.find("*").andSelf().each(function(H){if(this.nodeType==3){return}var G=n.data(this,"events");for(var J in G){for(var I in G[J]){n.event.add(F[H],J,G[J][I],G[J][I].data)}}})}return D},filter:function(D){return this.pushStack(n.isFunction(D)&&n.grep(this,function(F,E){return D.call(F,E)})||n.multiFilter(D,n.grep(this,function(E){return E.nodeType===1})),"filter",D)},closest:function(D){var E=n.expr.match.POS.test(D)?n(D):null;return this.map(function(){var F=this;while(F&&F.ownerDocument){if(E?E.index(F)>-1:n(F).is(D)){return F}F=F.parentNode}})},not:function(D){if(typeof D==="string"){if(f.test(D)){return this.pushStack(n.multiFilter(D,this,true),"not",D)}else{D=n.multiFilter(D,this)}}var E=D.length&&D[D.length-1]!==g&&!D.nodeType;return this.filter(function(){return E?n.inArray(this,D)<0:this!=D})},add:function(D){return this.pushStack(n.unique(n.merge(this.get(),typeof D==="string"?n(D):n.makeArray(D))))},is:function(D){return !!D&&n.multiFilter(D,this).length>0},hasClass:function(D){return !!D&&this.is("."+D)},val:function(J){if(J===g){var D=this[0];if(D){if(n.nodeName(D,"option")){return(D.attributes.value||{}).specified?D.value:D.text}if(n.nodeName(D,"select")){var H=D.selectedIndex,K=[],L=D.options,G=D.type=="select-one";if(H<0){return null}for(var E=G?H:0,I=G?H+1:L.length;E<I;E++){var F=L[E];if(F.selected){J=n(F).val();if(G){return J}K.push(J)}}return K}return(D.value||"").replace(/\r/g,"")}return g}if(typeof J==="number"){J+=""}return this.each(function(){if(this.nodeType!=1){return}if(n.isArray(J)&&/radio|checkbox/.test(this.type)){this.checked=(n.inArray(this.value,J)>=0||n.inArray(this.name,J)>=0)}else{if(n.nodeName(this,"select")){var M=n.makeArray(J);n("option",this).each(function(){this.selected=(n.inArray(this.value,M)>=0||n.inArray(this.text,M)>=0)});if(!M.length){this.selectedIndex=-1}}else{this.value=J}}})},html:function(D){return D===g?(this[0]?this[0].innerHTML:null):this.empty().append(D)},replaceWith:function(D){return this.after(D).remove()},eq:function(D){return this.slice(D,+D+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(D){return this.pushStack(n.map(this,function(F,E){return D.call(F,E,F)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=n.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild,D=this.length>1?I.cloneNode(true):I;if(H){for(var G=0,E=this.length;G<E;G++){L.call(K(this[G],H),G>0?D.cloneNode(true):I)}}if(F){n.each(F,y)}}return this;function K(N,O){return M&&n.nodeName(N,"table")&&n.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};n.fn.init.prototype=n.fn;function y(D,E){if(E.src){n.ajax({url:E.src,async:false,dataType:"script"})}else{n.globalEval(E.text||E.textContent||E.innerHTML||"")}if(E.parentNode){E.parentNode.removeChild(E)}}function e(){return +new Date}n.extend=n.fn.extend=function(){var I=arguments[0]||{},G=1,H=arguments.length,D=false,F;if(typeof I==="boolean"){D=I;I=arguments[1]||{};G=2}if(typeof I!=="object"&&!n.isFunction(I)){I={}}if(H==G){I=this;--G}for(;G<H;G++){if((F=arguments[G])!=null){for(var E in F){var J=I[E],K=F[E];if(I===K){continue}if(D&&K&&typeof K==="object"&&!K.nodeType){I[E]=n.extend(D,J||(K.length!=null?[]:{}),K)}else{if(K!==g){I[E]=K}}}}}return I};var b=/z-?index|font-?weight|opacity|zoom|line-?height/i,p=document.defaultView||{},r=Object.prototype.toString;n.extend({noConflict:function(D){l.$=o;if(D){l.jQuery=x}return n},isFunction:function(D){return r.call(D)==="[object Function]"},isArray:function(D){return r.call(D)==="[object Array]"},isXMLDoc:function(D){return D.documentElement&&!D.body||D.tagName&&D.ownerDocument&&!D.ownerDocument.body},globalEval:function(F){F=n.trim(F);if(F){var E=document.getElementsByTagName("head")[0]||document.documentElement,D=document.createElement("script");D.type="text/javascript";if(n.support.scriptEval){D.appendChild(document.createTextNode(F))}else{D.text=F}E.insertBefore(D,E.firstChild);E.removeChild(D)}},nodeName:function(E,D){return E.nodeName&&E.nodeName.toUpperCase()==D.toUpperCase()},each:function(F,J,E){var D,G=0,H=F.length;if(E){if(H===g){for(D in F){if(J.apply(F[D],E)===false){break}}}else{for(;G<H;){if(J.apply(F[G++],E)===false){break}}}}else{if(H===g){for(D in F){if(J.call(F[D],D,F[D])===false){break}}}else{for(var I=F[0];G<H&&J.call(I,G,I)!==false;I=F[++G]){}}}return F},prop:function(G,H,F,E,D){if(n.isFunction(H)){H=H.call(G,E)}return typeof H==="number"&&F=="curCSS"&&!b.test(D)?H+"px":H},className:{add:function(D,E){n.each((E||"").split(/\s+/),function(F,G){if(D.nodeType==1&&!n.className.has(D.className,G)){D.className+=(D.className?" ":"")+G}})},remove:function(D,E){if(D.nodeType==1){D.className=E!==g?n.grep(D.className.split(/\s+/),function(F){return !n.className.has(E,F)}).join(" "):""}},has:function(E,D){return n.inArray(D,(E.className||E).toString().split(/\s+/))>-1}},swap:function(G,F,H){var D={};for(var E in F){D[E]=G.style[E];G.style[E]=F[E]}H.call(G);for(var E in F){G.style[E]=D[E]}},css:function(F,D,H){if(D=="width"||D=="height"){var J,E={position:"absolute",visibility:"hidden",display:"block"},I=D=="width"?["Left","Right"]:["Top","Bottom"];function G(){J=D=="width"?F.offsetWidth:F.offsetHeight;var L=0,K=0;n.each(I,function(){L+=parseFloat(n.curCSS(F,"padding"+this,true))||0;K+=parseFloat(n.curCSS(F,"border"+this+"Width",true))||0});J-=Math.round(L+K)}if(n(F).is(":visible")){G()}else{n.swap(F,E,G)}return Math.max(0,J)}return n.curCSS(F,D,H)},curCSS:function(H,E,F){var K,D=H.style;if(E=="opacity"&&!n.support.opacity){K=n.attr(D,"opacity");return K==""?"1":K}if(E.match(/float/i)){E=v}if(!F&&D&&D[E]){K=D[E]}else{if(p.getComputedStyle){if(E.match(/float/i)){E="float"}E=E.replace(/([A-Z])/g,"-$1").toLowerCase();var L=p.getComputedStyle(H,null);if(L){K=L.getPropertyValue(E)}if(E=="opacity"&&K==""){K="1"}}else{if(H.currentStyle){var I=E.replace(/\-(\w)/g,function(M,N){return N.toUpperCase()});K=H.currentStyle[E]||H.currentStyle[I];if(!/^\d+(px)?$/i.test(K)&&/^\d/.test(K)){var G=D.left,J=H.runtimeStyle.left;H.runtimeStyle.left=H.currentStyle.left;D.left=K||0;K=D.pixelLeft+"px";D.left=G;H.runtimeStyle.left=J}}}}return K},clean:function(E,J,H){J=J||document;if(typeof J.createElement==="undefined"){J=J.ownerDocument||J[0]&&J[0].ownerDocument||document}if(!H&&E.length===1&&typeof E[0]==="string"){var G=/^<(\w+)\s*\/?>$/.exec(E[0]);if(G){return[J.createElement(G[1])]}}var F=[],D=[],K=J.createElement("div");n.each(E,function(O,Q){if(typeof Q==="number"){Q+=""}if(!Q){return}if(typeof Q==="string"){Q=Q.replace(/(<(\w+)[^>]*?)\/>/g,function(S,T,R){return R.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?S:T+"></"+R+">"});var N=n.trim(Q).toLowerCase();var P=!N.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!N.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||N.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!N.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!N.indexOf("<td")||!N.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!N.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||!n.support.htmlSerialize&&[1,"div<div>","</div>"]||[0,"",""];K.innerHTML=P[1]+Q+P[2];while(P[0]--){K=K.lastChild}if(!n.support.tbody){var M=!N.indexOf("<table")&&N.indexOf("<tbody")<0?K.firstChild&&K.firstChild.childNodes:P[1]=="<table>"&&N.indexOf("<tbody")<0?K.childNodes:[];for(var L=M.length-1;L>=0;--L){if(n.nodeName(M[L],"tbody")&&!M[L].childNodes.length){M[L].parentNode.removeChild(M[L])}}}if(!n.support.leadingWhitespace&&/^\s/.test(Q)){K.insertBefore(J.createTextNode(Q.match(/^\s*/)[0]),K.firstChild)}Q=n.makeArray(K.childNodes)}if(Q.nodeType){F.push(Q)}else{F=n.merge(F,Q)}});if(H){for(var I=0;F[I];I++){if(n.nodeName(F[I],"script")&&(!F[I].type||F[I].type.toLowerCase()==="text/javascript")){D.push(F[I].parentNode?F[I].parentNode.removeChild(F[I]):F[I])}else{if(F[I].nodeType===1){F.splice.apply(F,[I+1,0].concat(n.makeArray(F[I].getElementsByTagName("script"))))}H.appendChild(F[I])}}return D}return F},attr:function(I,F,J){if(!I||I.nodeType==3||I.nodeType==8){return g}var G=!n.isXMLDoc(I),K=J!==g;F=G&&n.props[F]||F;if(I.tagName){var E=/href|src|style/.test(F);if(F=="selected"&&I.parentNode){I.parentNode.selectedIndex}if(F in I&&G&&!E){if(K){if(F=="type"&&n.nodeName(I,"input")&&I.parentNode){throw"type property can't be changed"}I[F]=J}if(n.nodeName(I,"form")&&I.getAttributeNode(F)){return I.getAttributeNode(F).nodeValue}if(F=="tabIndex"){var H=I.getAttributeNode("tabIndex");return H&&H.specified?H.value:I.nodeName.match(/^(a|area|button|input|object|select|textarea)$/i)?0:g}return I[F]}if(!n.support.style&&G&&F=="style"){return n.attr(I.style,"cssText",J)}if(K){I.setAttribute(F,""+J)}var D=!n.support.hrefNormalized&&G&&E?I.getAttribute(F,2):I.getAttribute(F);return D===null?g:D}if(!n.support.opacity&&F=="opacity"){if(K){I.zoom=1;I.filter=(I.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(J)+""=="NaN"?"":"alpha(opacity="+J*100+")")}return I.filter&&I.filter.indexOf("opacity=")>=0?(parseFloat(I.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}F=F.replace(/-([a-z])/ig,function(L,M){return M.toUpperCase()});if(K){I[F]=J}return I[F]},trim:function(D){return(D||"").replace(/^\s+|\s+$/g,"")},makeArray:function(F){var D=[];if(F!=null){var E=F.length;if(E==null||typeof F==="string"||n.isFunction(F)||F.setInterval){D[0]=F}else{while(E){D[--E]=F[E]}}}return D},inArray:function(F,G){for(var D=0,E=G.length;D<E;D++){if(G[D]===F){return D}}return -1},merge:function(G,D){var E=0,F,H=G.length;if(!n.support.getAll){while((F=D[E++])!=null){if(F.nodeType!=8){G[H++]=F}}}else{while((F=D[E++])!=null){G[H++]=F}}return G},unique:function(J){var E=[],D={};try{for(var F=0,G=J.length;F<G;F++){var I=n.data(J[F]);if(!D[I]){D[I]=true;E.push(J[F])}}}catch(H){E=J}return E},grep:function(E,I,D){var F=[];for(var G=0,H=E.length;G<H;G++){if(!D!=!I(E[G],G)){F.push(E[G])}}return F},map:function(D,I){var E=[];for(var F=0,G=D.length;F<G;F++){var H=I(D[F],F);if(H!=null){E[E.length]=H}}return E.concat.apply([],E)}});var B=navigator.userAgent.toLowerCase();n.browser={version:(B.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[0,"0"])[1],safari:/webkit/.test(B),opera:/opera/.test(B),msie:/msie/.test(B)&&!/opera/.test(B),mozilla:/mozilla/.test(B)&&!/(compatible|webkit)/.test(B)};n.each({parent:function(D){return D.parentNode},parents:function(D){return n.dir(D,"parentNode")},next:function(D){return n.nth(D,2,"nextSibling")},prev:function(D){return n.nth(D,2,"previousSibling")},nextAll:function(D){return n.dir(D,"nextSibling")},prevAll:function(D){return n.dir(D,"previousSibling")},siblings:function(D){return n.sibling(D.parentNode.firstChild,D)},children:function(D){return n.sibling(D.firstChild)},contents:function(D){return n.nodeName(D,"iframe")?D.contentDocument||D.contentWindow.document:n.makeArray(D.childNodes)}},function(D,E){n.fn[D]=function(F){var G=n.map(this,E);if(F&&typeof F=="string"){G=n.multiFilter(F,G)}return this.pushStack(n.unique(G),D,F)}});n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(D,E){n.fn[D]=function(){var F=arguments;return this.each(function(){for(var G=0,H=F.length;G<H;G++){n(F[G])[E](this)}})}});n.each({removeAttr:function(D){n.attr(this,D,"");if(this.nodeType==1){this.removeAttribute(D)}},addClass:function(D){n.className.add(this,D)},removeClass:function(D){n.className.remove(this,D)},toggleClass:function(E,D){if(typeof D!=="boolean"){D=!n.className.has(this,E)}n.className[D?"add":"remove"](this,E)},remove:function(D){if(!D||n.filter(D,[this]).length){n("*",this).add([this]).each(function(){n.event.remove(this);n.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){n(">*",this).remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(D,E){n.fn[D]=function(){return this.each(E,arguments)}});function j(D,E){return D[0]&&parseInt(n.curCSS(D[0],E,true),10)||0}var h="jQuery"+e(),u=0,z={};n.extend({cache:{},data:function(E,D,F){E=E==l?z:E;var G=E[h];if(!G){G=E[h]=++u}if(D&&!n.cache[G]){n.cache[G]={}}if(F!==g){n.cache[G][D]=F}return D?n.cache[G][D]:G},removeData:function(E,D){E=E==l?z:E;var G=E[h];if(D){if(n.cache[G]){delete n.cache[G][D];D="";for(D in n.cache[G]){break}if(!D){n.removeData(E)}}}else{try{delete E[h]}catch(F){if(E.removeAttribute){E.removeAttribute(h)}}delete n.cache[G]}},queue:function(E,D,G){if(E){D=(D||"fx")+"queue";var F=n.data(E,D);if(!F||n.isArray(G)){F=n.data(E,D,n.makeArray(G))}else{if(G){F.push(G)}}}return F},dequeue:function(G,F){var D=n.queue(G,F),E=D.shift();if(!F||F==="fx"){E=D[0]}if(E!==g){E.call(G)}}});n.fn.extend({data:function(D,F){var G=D.split(".");G[1]=G[1]?"."+G[1]:"";if(F===g){var E=this.triggerHandler("getData"+G[1]+"!",[G[0]]);if(E===g&&this.length){E=n.data(this[0],D)}return E===g&&G[1]?this.data(G[0]):E}else{return this.trigger("setData"+G[1]+"!",[G[0],F]).each(function(){n.data(this,D,F)})}},removeData:function(D){return this.each(function(){n.removeData(this,D)})},queue:function(D,E){if(typeof D!=="string"){E=D;D="fx"}if(E===g){return n.queue(this[0],D)}return this.each(function(){var F=n.queue(this,D,E);if(D=="fx"&&F.length==1){F[0].call(this)}})},dequeue:function(D){return this.each(function(){n.dequeue(this,D)})}});
/*
 * Sizzle CSS Selector Engine - v0.9.1
 * Copyright 2009, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 * More information: http://sizzlejs.com/
 */
(function(){var N=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|[^[\]]+)+\]|\\.|[^ >+~,(\[]+)+|[>+~])(\s*,\s*)?/g,I=0,F=Object.prototype.toString;var E=function(ae,S,aa,V){aa=aa||[];S=S||document;if(S.nodeType!==1&&S.nodeType!==9){return[]}if(!ae||typeof ae!=="string"){return aa}var ab=[],ac,Y,ah,ag,Z,R,Q=true;N.lastIndex=0;while((ac=N.exec(ae))!==null){ab.push(ac[1]);if(ac[2]){R=RegExp.rightContext;break}}if(ab.length>1&&G.match.POS.exec(ae)){if(ab.length===2&&G.relative[ab[0]]){var U="",X;while((X=G.match.POS.exec(ae))){U+=X[0];ae=ae.replace(G.match.POS,"")}Y=E.filter(U,E(/\s$/.test(ae)?ae+"*":ae,S))}else{Y=G.relative[ab[0]]?[S]:E(ab.shift(),S);while(ab.length){var P=[];ae=ab.shift();if(G.relative[ae]){ae+=ab.shift()}for(var af=0,ad=Y.length;af<ad;af++){E(ae,Y[af],P)}Y=P}}}else{var ai=V?{expr:ab.pop(),set:D(V)}:E.find(ab.pop(),ab.length===1&&S.parentNode?S.parentNode:S);Y=E.filter(ai.expr,ai.set);if(ab.length>0){ah=D(Y)}else{Q=false}while(ab.length){var T=ab.pop(),W=T;if(!G.relative[T]){T=""}else{W=ab.pop()}if(W==null){W=S}G.relative[T](ah,W,M(S))}}if(!ah){ah=Y}if(!ah){throw"Syntax error, unrecognized expression: "+(T||ae)}if(F.call(ah)==="[object Array]"){if(!Q){aa.push.apply(aa,ah)}else{if(S.nodeType===1){for(var af=0;ah[af]!=null;af++){if(ah[af]&&(ah[af]===true||ah[af].nodeType===1&&H(S,ah[af]))){aa.push(Y[af])}}}else{for(var af=0;ah[af]!=null;af++){if(ah[af]&&ah[af].nodeType===1){aa.push(Y[af])}}}}}else{D(ah,aa)}if(R){E(R,S,aa,V)}return aa};E.matches=function(P,Q){return E(P,null,null,Q)};E.find=function(V,S){var W,Q;if(!V){return[]}for(var R=0,P=G.order.length;R<P;R++){var T=G.order[R],Q;if((Q=G.match[T].exec(V))){var U=RegExp.leftContext;if(U.substr(U.length-1)!=="\\"){Q[1]=(Q[1]||"").replace(/\\/g,"");W=G.find[T](Q,S);if(W!=null){V=V.replace(G.match[T],"");break}}}}if(!W){W=S.getElementsByTagName("*")}return{set:W,expr:V}};E.filter=function(S,ac,ad,T){var Q=S,Y=[],ah=ac,V,ab;while(S&&ac.length){for(var U in G.filter){if((V=G.match[U].exec(S))!=null){var Z=G.filter[U],R=null,X=0,aa,ag;ab=false;if(ah==Y){Y=[]}if(G.preFilter[U]){V=G.preFilter[U](V,ah,ad,Y,T);if(!V){ab=aa=true}else{if(V===true){continue}else{if(V[0]===true){R=[];var W=null,af;for(var ae=0;(af=ah[ae])!==g;ae++){if(af&&W!==af){R.push(af);W=af}}}}}}if(V){for(var ae=0;(ag=ah[ae])!==g;ae++){if(ag){if(R&&ag!=R[X]){X++}aa=Z(ag,V,X,R);var P=T^!!aa;if(ad&&aa!=null){if(P){ab=true}else{ah[ae]=false}}else{if(P){Y.push(ag);ab=true}}}}}if(aa!==g){if(!ad){ah=Y}S=S.replace(G.match[U],"");if(!ab){return[]}break}}}S=S.replace(/\s*,\s*/,"");if(S==Q){if(ab==null){throw"Syntax error, unrecognized expression: "+S}else{break}}Q=S}return ah};var G=E.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(P){return P.getAttribute("href")}},relative:{"+":function(T,Q){for(var R=0,P=T.length;R<P;R++){var S=T[R];if(S){var U=S.previousSibling;while(U&&U.nodeType!==1){U=U.previousSibling}T[R]=typeof Q==="string"?U||false:U===Q}}if(typeof Q==="string"){E.filter(Q,T,true)}},">":function(U,Q,V){if(typeof Q==="string"&&!/\W/.test(Q)){Q=V?Q:Q.toUpperCase();for(var R=0,P=U.length;R<P;R++){var T=U[R];if(T){var S=T.parentNode;U[R]=S.nodeName===Q?S:false}}}else{for(var R=0,P=U.length;R<P;R++){var T=U[R];if(T){U[R]=typeof Q==="string"?T.parentNode:T.parentNode===Q}}if(typeof Q==="string"){E.filter(Q,U,true)}}},"":function(S,Q,U){var R="done"+(I++),P=O;if(!Q.match(/\W/)){var T=Q=U?Q:Q.toUpperCase();P=L}P("parentNode",Q,R,S,T,U)},"~":function(S,Q,U){var R="done"+(I++),P=O;if(typeof Q==="string"&&!Q.match(/\W/)){var T=Q=U?Q:Q.toUpperCase();P=L}P("previousSibling",Q,R,S,T,U)}},find:{ID:function(Q,R){if(R.getElementById){var P=R.getElementById(Q[1]);return P?[P]:[]}},NAME:function(P,Q){return Q.getElementsByName?Q.getElementsByName(P[1]):null},TAG:function(P,Q){return Q.getElementsByTagName(P[1])}},preFilter:{CLASS:function(S,Q,R,P,U){S=" "+S[1].replace(/\\/g,"")+" ";for(var T=0;Q[T];T++){if(U^(" "+Q[T].className+" ").indexOf(S)>=0){if(!R){P.push(Q[T])}}else{if(R){Q[T]=false}}}return false},ID:function(P){return P[1].replace(/\\/g,"")},TAG:function(Q,P){for(var R=0;!P[R];R++){}return M(P[R])?Q[1]:Q[1].toUpperCase()},CHILD:function(P){if(P[1]=="nth"){var Q=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(P[2]=="even"&&"2n"||P[2]=="odd"&&"2n+1"||!/\D/.test(P[2])&&"0n+"+P[2]||P[2]);P[2]=(Q[1]+(Q[2]||1))-0;P[3]=Q[3]-0}P[0]="done"+(I++);return P},ATTR:function(Q){var P=Q[1];if(G.attrMap[P]){Q[1]=G.attrMap[P]}if(Q[2]==="~="){Q[4]=" "+Q[4]+" "}return Q},PSEUDO:function(T,Q,R,P,U){if(T[1]==="not"){if(T[3].match(N).length>1){T[3]=E(T[3],null,null,Q)}else{var S=E.filter(T[3],Q,R,true^U);if(!R){P.push.apply(P,S)}return false}}else{if(G.match.POS.test(T[0])){return true}}return T},POS:function(P){P.unshift(true);return P}},filters:{enabled:function(P){return P.disabled===false&&P.type!=="hidden"},disabled:function(P){return P.disabled===true},checked:function(P){return P.checked===true},selected:function(P){P.parentNode.selectedIndex;return P.selected===true},parent:function(P){return !!P.firstChild},empty:function(P){return !P.firstChild},has:function(R,Q,P){return !!E(P[3],R).length},header:function(P){return/h\d/i.test(P.nodeName)},text:function(P){return"text"===P.type},radio:function(P){return"radio"===P.type},checkbox:function(P){return"checkbox"===P.type},file:function(P){return"file"===P.type},password:function(P){return"password"===P.type},submit:function(P){return"submit"===P.type},image:function(P){return"image"===P.type},reset:function(P){return"reset"===P.type},button:function(P){return"button"===P.type||P.nodeName.toUpperCase()==="BUTTON"},input:function(P){return/input|select|textarea|button/i.test(P.nodeName)}},setFilters:{first:function(Q,P){return P===0},last:function(R,Q,P,S){return Q===S.length-1},even:function(Q,P){return P%2===0},odd:function(Q,P){return P%2===1},lt:function(R,Q,P){return Q<P[3]-0},gt:function(R,Q,P){return Q>P[3]-0},nth:function(R,Q,P){return P[3]-0==Q},eq:function(R,Q,P){return P[3]-0==Q}},filter:{CHILD:function(P,S){var V=S[1],W=P.parentNode;var U="child"+W.childNodes.length;if(W&&(!W[U]||!P.nodeIndex)){var T=1;for(var Q=W.firstChild;Q;Q=Q.nextSibling){if(Q.nodeType==1){Q.nodeIndex=T++}}W[U]=T-1}if(V=="first"){return P.nodeIndex==1}else{if(V=="last"){return P.nodeIndex==W[U]}else{if(V=="only"){return W[U]==1}else{if(V=="nth"){var Y=false,R=S[2],X=S[3];if(R==1&&X==0){return true}if(R==0){if(P.nodeIndex==X){Y=true}}else{if((P.nodeIndex-X)%R==0&&(P.nodeIndex-X)/R>=0){Y=true}}return Y}}}}},PSEUDO:function(V,R,S,W){var Q=R[1],T=G.filters[Q];if(T){return T(V,S,R,W)}else{if(Q==="contains"){return(V.textContent||V.innerText||"").indexOf(R[3])>=0}else{if(Q==="not"){var U=R[3];for(var S=0,P=U.length;S<P;S++){if(U[S]===V){return false}}return true}}}},ID:function(Q,P){return Q.nodeType===1&&Q.getAttribute("id")===P},TAG:function(Q,P){return(P==="*"&&Q.nodeType===1)||Q.nodeName===P},CLASS:function(Q,P){return P.test(Q.className)},ATTR:function(T,R){var P=G.attrHandle[R[1]]?G.attrHandle[R[1]](T):T[R[1]]||T.getAttribute(R[1]),U=P+"",S=R[2],Q=R[4];return P==null?false:S==="="?U===Q:S==="*="?U.indexOf(Q)>=0:S==="~="?(" "+U+" ").indexOf(Q)>=0:!R[4]?P:S==="!="?U!=Q:S==="^="?U.indexOf(Q)===0:S==="$="?U.substr(U.length-Q.length)===Q:S==="|="?U===Q||U.substr(0,Q.length+1)===Q+"-":false},POS:function(T,Q,R,U){var P=Q[2],S=G.setFilters[P];if(S){return S(T,R,Q,U)}}}};for(var K in G.match){G.match[K]=RegExp(G.match[K].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var D=function(Q,P){Q=Array.prototype.slice.call(Q);if(P){P.push.apply(P,Q);return P}return Q};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(J){D=function(T,S){var Q=S||[];if(F.call(T)==="[object Array]"){Array.prototype.push.apply(Q,T)}else{if(typeof T.length==="number"){for(var R=0,P=T.length;R<P;R++){Q.push(T[R])}}else{for(var R=0;T[R];R++){Q.push(T[R])}}}return Q}}(function(){var Q=document.createElement("form"),R="script"+(new Date).getTime();Q.innerHTML="<input name='"+R+"'/>";var P=document.documentElement;P.insertBefore(Q,P.firstChild);if(!!document.getElementById(R)){G.find.ID=function(T,U){if(U.getElementById){var S=U.getElementById(T[1]);return S?S.id===T[1]||S.getAttributeNode&&S.getAttributeNode("id").nodeValue===T[1]?[S]:g:[]}};G.filter.ID=function(U,S){var T=U.getAttributeNode&&U.getAttributeNode("id");return U.nodeType===1&&T&&T.nodeValue===S}}P.removeChild(Q)})();(function(){var P=document.createElement("div");P.appendChild(document.createComment(""));if(P.getElementsByTagName("*").length>0){G.find.TAG=function(Q,U){var T=U.getElementsByTagName(Q[1]);if(Q[1]==="*"){var S=[];for(var R=0;T[R];R++){if(T[R].nodeType===1){S.push(T[R])}}T=S}return T}}P.innerHTML="<a href='#'></a>";if(P.firstChild.getAttribute("href")!=="#"){G.attrHandle.href=function(Q){return Q.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var P=E;E=function(T,S,Q,R){S=S||document;if(!R&&S.nodeType===9){try{return D(S.querySelectorAll(T),Q)}catch(U){}}return P(T,S,Q,R)};E.find=P.find;E.filter=P.filter;E.selectors=P.selectors;E.matches=P.matches})()}if(document.documentElement.getElementsByClassName){G.order.splice(1,0,"CLASS");G.find.CLASS=function(P,Q){return Q.getElementsByClassName(P[1])}}function L(Q,W,V,Z,X,Y){for(var T=0,R=Z.length;T<R;T++){var P=Z[T];if(P){P=P[Q];var U=false;while(P&&P.nodeType){var S=P[V];if(S){U=Z[S];break}if(P.nodeType===1&&!Y){P[V]=T}if(P.nodeName===W){U=P;break}P=P[Q]}Z[T]=U}}}function O(Q,V,U,Y,W,X){for(var S=0,R=Y.length;S<R;S++){var P=Y[S];if(P){P=P[Q];var T=false;while(P&&P.nodeType){if(P[U]){T=Y[P[U]];break}if(P.nodeType===1){if(!X){P[U]=S}if(typeof V!=="string"){if(P===V){T=true;break}}else{if(E.filter(V,[P]).length>0){T=P;break}}}P=P[Q]}Y[S]=T}}}var H=document.compareDocumentPosition?function(Q,P){return Q.compareDocumentPosition(P)&16}:function(Q,P){return Q!==P&&(Q.contains?Q.contains(P):true)};var M=function(P){return P.documentElement&&!P.body||P.tagName&&P.ownerDocument&&!P.ownerDocument.body};n.find=E;n.filter=E.filter;n.expr=E.selectors;n.expr[":"]=n.expr.filters;E.selectors.filters.hidden=function(P){return"hidden"===P.type||n.css(P,"display")==="none"||n.css(P,"visibility")==="hidden"};E.selectors.filters.visible=function(P){return"hidden"!==P.type&&n.css(P,"display")!=="none"&&n.css(P,"visibility")!=="hidden"};E.selectors.filters.animated=function(P){return n.grep(n.timers,function(Q){return P===Q.elem}).length};n.multiFilter=function(R,P,Q){if(Q){R=":not("+R+")"}return E.matches(R,P)};n.dir=function(R,Q){var P=[],S=R[Q];while(S&&S!=document){if(S.nodeType==1){P.push(S)}S=S[Q]}return P};n.nth=function(T,P,R,S){P=P||1;var Q=0;for(;T;T=T[R]){if(T.nodeType==1&&++Q==P){break}}return T};n.sibling=function(R,Q){var P=[];for(;R;R=R.nextSibling){if(R.nodeType==1&&R!=Q){P.push(R)}}return P};return;l.Sizzle=E})();n.event={add:function(H,E,G,J){if(H.nodeType==3||H.nodeType==8){return}if(H.setInterval&&H!=l){H=l}if(!G.guid){G.guid=this.guid++}if(J!==g){var F=G;G=this.proxy(F);G.data=J}var D=n.data(H,"events")||n.data(H,"events",{}),I=n.data(H,"handle")||n.data(H,"handle",function(){return typeof n!=="undefined"&&!n.event.triggered?n.event.handle.apply(arguments.callee.elem,arguments):g});I.elem=H;n.each(E.split(/\s+/),function(L,M){var N=M.split(".");M=N.shift();G.type=N.slice().sort().join(".");var K=D[M];if(n.event.specialAll[M]){n.event.specialAll[M].setup.call(H,J,N)}if(!K){K=D[M]={};if(!n.event.special[M]||n.event.special[M].setup.call(H,J,N)===false){if(H.addEventListener){H.addEventListener(M,I,false)}else{if(H.attachEvent){H.attachEvent("on"+M,I)}}}}K[G.guid]=G;n.event.global[M]=true});H=null},guid:1,global:{},remove:function(J,G,I){if(J.nodeType==3||J.nodeType==8){return}var F=n.data(J,"events"),E,D;if(F){if(G===g||(typeof G==="string"&&G.charAt(0)==".")){for(var H in F){this.remove(J,H+(G||""))}}else{if(G.type){I=G.handler;G=G.type}n.each(G.split(/\s+/),function(L,N){var P=N.split(".");N=P.shift();var M=RegExp("(^|\\.)"+P.slice().sort().join(".*\\.")+"(\\.|$)");if(F[N]){if(I){delete F[N][I.guid]}else{for(var O in F[N]){if(M.test(F[N][O].type)){delete F[N][O]}}}if(n.event.specialAll[N]){n.event.specialAll[N].teardown.call(J,P)}for(E in F[N]){break}if(!E){if(!n.event.special[N]||n.event.special[N].teardown.call(J,P)===false){if(J.removeEventListener){J.removeEventListener(N,n.data(J,"handle"),false)}else{if(J.detachEvent){J.detachEvent("on"+N,n.data(J,"handle"))}}}E=null;delete F[N]}}})}for(E in F){break}if(!E){var K=n.data(J,"handle");if(K){K.elem=null}n.removeData(J,"events");n.removeData(J,"handle")}}},trigger:function(H,J,G,D){var F=H.type||H;if(!D){H=typeof H==="object"?H[h]?H:n.extend(n.Event(F),H):n.Event(F);if(F.indexOf("!")>=0){H.type=F=F.slice(0,-1);H.exclusive=true}if(!G){H.stopPropagation();if(this.global[F]){n.each(n.cache,function(){if(this.events&&this.events[F]){n.event.trigger(H,J,this.handle.elem)}})}}if(!G||G.nodeType==3||G.nodeType==8){return g}H.result=g;H.target=G;J=n.makeArray(J);J.unshift(H)}H.currentTarget=G;var I=n.data(G,"handle");if(I){I.apply(G,J)}if((!G[F]||(n.nodeName(G,"a")&&F=="click"))&&G["on"+F]&&G["on"+F].apply(G,J)===false){H.result=false}if(!D&&G[F]&&!H.isDefaultPrevented()&&!(n.nodeName(G,"a")&&F=="click")){this.triggered=true;try{G[F]()}catch(K){}}this.triggered=false;if(!H.isPropagationStopped()){var E=G.parentNode||G.ownerDocument;if(E){n.event.trigger(H,J,E,true)}}},handle:function(J){var I,D;J=arguments[0]=n.event.fix(J||l.event);var K=J.type.split(".");J.type=K.shift();I=!K.length&&!J.exclusive;var H=RegExp("(^|\\.)"+K.slice().sort().join(".*\\.")+"(\\.|$)");D=(n.data(this,"events")||{})[J.type];for(var F in D){var G=D[F];if(I||H.test(G.type)){J.handler=G;J.data=G.data;var E=G.apply(this,arguments);if(E!==g){J.result=E;if(E===false){J.preventDefault();J.stopPropagation()}}if(J.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(G){if(G[h]){return G}var E=G;G=n.Event(E);for(var F=this.props.length,I;F;){I=this.props[--F];G[I]=E[I]}if(!G.target){G.target=G.srcElement||document}if(G.target.nodeType==3){G.target=G.target.parentNode}if(!G.relatedTarget&&G.fromElement){G.relatedTarget=G.fromElement==G.target?G.toElement:G.fromElement}if(G.pageX==null&&G.clientX!=null){var H=document.documentElement,D=document.body;G.pageX=G.clientX+(H&&H.scrollLeft||D&&D.scrollLeft||0)-(H.clientLeft||0);G.pageY=G.clientY+(H&&H.scrollTop||D&&D.scrollTop||0)-(H.clientTop||0)}if(!G.which&&((G.charCode||G.charCode===0)?G.charCode:G.keyCode)){G.which=G.charCode||G.keyCode}if(!G.metaKey&&G.ctrlKey){G.metaKey=G.ctrlKey}if(!G.which&&G.button){G.which=(G.button&1?1:(G.button&2?3:(G.button&4?2:0)))}return G},proxy:function(E,D){D=D||function(){return E.apply(this,arguments)};D.guid=E.guid=E.guid||D.guid||this.guid++;return D},special:{ready:{setup:A,teardown:function(){}}},specialAll:{live:{setup:function(D,E){n.event.add(this,E[0],c)},teardown:function(F){if(F.length){var D=0,E=RegExp("(^|\\.)"+F[0]+"(\\.|$)");n.each((n.data(this,"events").live||{}),function(){if(E.test(this.type)){D++}});if(D<1){n.event.remove(this,F[0],c)}}}}}};n.Event=function(D){if(!this.preventDefault){return new n.Event(D)}if(D&&D.type){this.originalEvent=D;this.type=D.type;this.timeStamp=D.timeStamp}else{this.type=D}if(!this.timeStamp){this.timeStamp=e()}this[h]=true};function k(){return false}function t(){return true}n.Event.prototype={preventDefault:function(){this.isDefaultPrevented=t;var D=this.originalEvent;if(!D){return}if(D.preventDefault){D.preventDefault()}D.returnValue=false},stopPropagation:function(){this.isPropagationStopped=t;var D=this.originalEvent;if(!D){return}if(D.stopPropagation){D.stopPropagation()}D.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=t;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(E){var D=E.relatedTarget;while(D&&D!=this){try{D=D.parentNode}catch(F){D=this}}if(D!=this){E.type=E.data;n.event.handle.apply(this,arguments)}};n.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(E,D){n.event.special[D]={setup:function(){n.event.add(this,E,a,D)},teardown:function(){n.event.remove(this,E,a)}}});n.fn.extend({bind:function(E,F,D){return E=="unload"?this.one(E,F,D):this.each(function(){n.event.add(this,E,D||F,D&&F)})},one:function(F,G,E){var D=n.event.proxy(E||G,function(H){n(this).unbind(H,D);return(E||G).apply(this,arguments)});return this.each(function(){n.event.add(this,F,D,E&&G)})},unbind:function(E,D){return this.each(function(){n.event.remove(this,E,D)})},trigger:function(D,E){return this.each(function(){n.event.trigger(D,E,this)})},triggerHandler:function(D,F){if(this[0]){var E=n.Event(D);E.preventDefault();E.stopPropagation();n.event.trigger(E,F,this[0]);return E.result}},toggle:function(F){var D=arguments,E=1;while(E<D.length){n.event.proxy(F,D[E++])}return this.click(n.event.proxy(F,function(G){this.lastToggle=(this.lastToggle||0)%E;G.preventDefault();return D[this.lastToggle++].apply(this,arguments)||false}))},hover:function(D,E){return this.mouseenter(D).mouseleave(E)},ready:function(D){A();if(n.isReady){D.call(document,n)}else{n.readyList.push(D)}return this},live:function(F,E){var D=n.event.proxy(E);D.guid+=this.selector+F;n(document).bind(i(F,this.selector),this.selector,D);return this},die:function(E,D){n(document).unbind(i(E,this.selector),D?{guid:D.guid+this.selector+E}:null);return this}});function c(G){var D=RegExp("(^|\\.)"+G.type+"(\\.|$)"),F=true,E=[];n.each(n.data(this,"events").live||[],function(H,I){if(D.test(I.type)){var J=n(G.target).closest(I.data)[0];if(J){E.push({elem:J,fn:I})}}});n.each(E,function(){if(!G.isImmediatePropagationStopped()&&this.fn.call(this.elem,G,this.fn.data)===false){F=false}});return F}function i(E,D){return["live",E,D.replace(/\./g,"`").replace(/ /g,"|")].join(".")}n.extend({isReady:false,readyList:[],ready:function(){if(!n.isReady){n.isReady=true;if(n.readyList){n.each(n.readyList,function(){this.call(document,n)});n.readyList=null}n(document).triggerHandler("ready")}}});var w=false;function A(){if(w){return}w=true;if(document.addEventListener){document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,false);n.ready()},false)}else{if(document.attachEvent){document.attachEvent("onreadystatechange",function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",arguments.callee);n.ready()}});if(document.documentElement.doScroll&&!l.frameElement){(function(){if(n.isReady){return}try{document.documentElement.doScroll("left")}catch(D){setTimeout(arguments.callee,0);return}n.ready()})()}}}n.event.add(l,"load",n.ready)}n.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(E,D){n.fn[D]=function(F){return F?this.bind(D,F):this.trigger(D)}});n(l).bind("unload",function(){for(var D in n.cache){if(D!=1&&n.cache[D].handle){n.event.remove(n.cache[D].handle.elem)}}});(function(){n.support={};var E=document.documentElement,F=document.createElement("script"),J=document.createElement("div"),I="script"+(new Date).getTime();J.style.display="none";J.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 G=J.getElementsByTagName("*"),D=J.getElementsByTagName("a")[0];if(!G||!G.length||!D){return}n.support={leadingWhitespace:J.firstChild.nodeType==3,tbody:!J.getElementsByTagName("tbody").length,objectAll:!!J.getElementsByTagName("object")[0].getElementsByTagName("*").length,htmlSerialize:!!J.getElementsByTagName("link").length,style:/red/.test(D.getAttribute("style")),hrefNormalized:D.getAttribute("href")==="/a",opacity:D.style.opacity==="0.5",cssFloat:!!D.style.cssFloat,scriptEval:false,noCloneEvent:true,boxModel:null};F.type="text/javascript";try{F.appendChild(document.createTextNode("window."+I+"=1;"))}catch(H){}E.insertBefore(F,E.firstChild);if(l[I]){n.support.scriptEval=true;delete l[I]}E.removeChild(F);if(J.attachEvent&&J.fireEvent){J.attachEvent("onclick",function(){n.support.noCloneEvent=false;J.detachEvent("onclick",arguments.callee)});J.cloneNode(true).fireEvent("onclick")}n(function(){var K=document.createElement("div");K.style.width="1px";K.style.paddingLeft="1px";document.body.appendChild(K);n.boxModel=n.support.boxModel=K.offsetWidth===2;document.body.removeChild(K)})})();var v=n.support.cssFloat?"cssFloat":"styleFloat";n.props={"for":"htmlFor","class":"className","float":v,cssFloat:v,styleFloat:v,readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",tabindex:"tabIndex"};n.fn.extend({_load:n.fn.load,load:function(F,I,J){if(typeof F!=="string"){return this._load(F)}var H=F.indexOf(" ");if(H>=0){var D=F.slice(H,F.length);F=F.slice(0,H)}var G="GET";if(I){if(n.isFunction(I)){J=I;I=null}else{if(typeof I==="object"){I=n.param(I);G="POST"}}}var E=this;n.ajax({url:F,type:G,dataType:"html",data:I,complete:function(L,K){if(K=="success"||K=="notmodified"){E.html(D?n("<div/>").append(L.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(D):L.responseText)}if(J){E.each(J,[L.responseText,K,L])}}});return this},serialize:function(){return n.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?n.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type))}).map(function(D,E){var F=n(this).val();return F==null?null:n.isArray(F)?n.map(F,function(H,G){return{name:E.name,value:H}}):{name:E.name,value:F}}).get()}});n.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(D,E){n.fn[E]=function(F){return this.bind(E,F)}});var q=e();n.extend({get:function(D,F,G,E){if(n.isFunction(F)){G=F;F=null}return n.ajax({type:"GET",url:D,data:F,success:G,dataType:E})},getScript:function(D,E){return n.get(D,null,E,"script")},getJSON:function(D,E,F){return n.get(D,E,F,"json")},post:function(D,F,G,E){if(n.isFunction(F)){G=F;F={}}return n.ajax({type:"POST",url:D,data:F,success:G,dataType:E})},ajaxSetup:function(D){n.extend(n.ajaxSettings,D)},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(L){L=n.extend(true,L,n.extend(true,{},n.ajaxSettings,L));var V,E=/=\?(&|$)/g,Q,U,F=L.type.toUpperCase();if(L.data&&L.processData&&typeof L.data!=="string"){L.data=n.param(L.data)}if(L.dataType=="jsonp"){if(F=="GET"){if(!L.url.match(E)){L.url+=(L.url.match(/\?/)?"&":"?")+(L.jsonp||"callback")+"=?"}}else{if(!L.data||!L.data.match(E)){L.data=(L.data?L.data+"&":"")+(L.jsonp||"callback")+"=?"}}L.dataType="json"}if(L.dataType=="json"&&(L.data&&L.data.match(E)||L.url.match(E))){V="jsonp"+q++;if(L.data){L.data=(L.data+"").replace(E,"="+V+"$1")}L.url=L.url.replace(E,"="+V+"$1");L.dataType="script";l[V]=function(W){U=W;H();K();l[V]=g;try{delete l[V]}catch(X){}if(G){G.removeChild(S)}}}if(L.dataType=="script"&&L.cache==null){L.cache=false}if(L.cache===false&&F=="GET"){var D=e();var T=L.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+D+"$2");L.url=T+((T==L.url)?(L.url.match(/\?/)?"&":"?")+"_="+D:"")}if(L.data&&F=="GET"){L.url+=(L.url.match(/\?/)?"&":"?")+L.data;L.data=null}if(L.global&&!n.active++){n.event.trigger("ajaxStart")}var P=/^(\w+:)?\/\/([^\/?#]+)/.exec(L.url);if(L.dataType=="script"&&F=="GET"&&P&&(P[1]&&P[1]!=location.protocol||P[2]!=location.host)){var G=document.getElementsByTagName("head")[0];var S=document.createElement("script");S.src=L.url;if(L.scriptCharset){S.charset=L.scriptCharset}if(!V){var N=false;S.onload=S.onreadystatechange=function(){if(!N&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){N=true;H();K();G.removeChild(S)}}}G.appendChild(S);return g}var J=false;var I=L.xhr();if(L.username){I.open(F,L.url,L.async,L.username,L.password)}else{I.open(F,L.url,L.async)}try{if(L.data){I.setRequestHeader("Content-Type",L.contentType)}if(L.ifModified){I.setRequestHeader("If-Modified-Since",n.lastModified[L.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}I.setRequestHeader("X-Requested-With","XMLHttpRequest");I.setRequestHeader("Accept",L.dataType&&L.accepts[L.dataType]?L.accepts[L.dataType]+", */*":L.accepts._default)}catch(R){}if(L.beforeSend&&L.beforeSend(I,L)===false){if(L.global&&!--n.active){n.event.trigger("ajaxStop")}I.abort();return false}if(L.global){n.event.trigger("ajaxSend",[I,L])}var M=function(W){if(I.readyState==0){if(O){clearInterval(O);O=null;if(L.global&&!--n.active){n.event.trigger("ajaxStop")}}}else{if(!J&&I&&(I.readyState==4||W=="timeout")){J=true;if(O){clearInterval(O);O=null}Q=W=="timeout"?"timeout":!n.httpSuccess(I)?"error":L.ifModified&&n.httpNotModified(I,L.url)?"notmodified":"success";if(Q=="success"){try{U=n.httpData(I,L.dataType,L)}catch(Y){Q="parsererror"}}if(Q=="success"){var X;try{X=I.getResponseHeader("Last-Modified")}catch(Y){}if(L.ifModified&&X){n.lastModified[L.url]=X}if(!V){H()}}else{n.handleError(L,I,Q)}K();if(L.async){I=null}}}};if(L.async){var O=setInterval(M,13);if(L.timeout>0){setTimeout(function(){if(I){if(!J){M("timeout")}if(I){I.abort()}}},L.timeout)}}try{I.send(L.data)}catch(R){n.handleError(L,I,null,R)}if(!L.async){M()}function H(){if(L.success){L.success(U,Q)}if(L.global){n.event.trigger("ajaxSuccess",[I,L])}}function K(){if(L.complete){L.complete(I,Q)}if(L.global){n.event.trigger("ajaxComplete",[I,L])}if(L.global&&!--n.active){n.event.trigger("ajaxStop")}}return I},handleError:function(E,G,D,F){if(E.error){E.error(G,D,F)}if(E.global){n.event.trigger("ajaxError",[G,E,F])}},active:0,httpSuccess:function(E){try{return !E.status&&location.protocol=="file:"||(E.status>=200&&E.status<300)||E.status==304||E.status==1223}catch(D){}return false},httpNotModified:function(F,D){try{var G=F.getResponseHeader("Last-Modified");return F.status==304||G==n.lastModified[D]}catch(E){}return false},httpData:function(I,G,F){var E=I.getResponseHeader("content-type"),D=G=="xml"||!G&&E&&E.indexOf("xml")>=0,H=D?I.responseXML:I.responseText;if(D&&H.documentElement.tagName=="parsererror"){throw"parsererror"}if(F&&F.dataFilter){H=F.dataFilter(H,G)}if(typeof H==="string"){if(G=="script"){n.globalEval(H)}if(G=="json"){H=l["eval"]("("+H+")")}}return H},param:function(D){var F=[];function G(H,I){F[F.length]=encodeURIComponent(H)+"="+encodeURIComponent(I)}if(n.isArray(D)||D.jquery){n.each(D,function(){G(this.name,this.value)})}else{for(var E in D){if(n.isArray(D[E])){n.each(D[E],function(){G(E,this)})}else{G(E,n.isFunction(D[E])?D[E]():D[E])}}}return F.join("&").replace(/%20/g,"+")}});var m={},d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function s(E,D){var F={};n.each(d.concat.apply([],d.slice(0,D)),function(){F[this]=E});return F}n.fn.extend({show:function(I,K){if(I){return this.animate(s("show",3),I,K)}else{for(var G=0,E=this.length;G<E;G++){var D=n.data(this[G],"olddisplay");this[G].style.display=D||"";if(n.css(this[G],"display")==="none"){var F=this[G].tagName,J;if(m[F]){J=m[F]}else{var H=n("<"+F+" />").appendTo("body");J=H.css("display");if(J==="none"){J="block"}H.remove();m[F]=J}this[G].style.display=n.data(this[G],"olddisplay",J)}}return this}},hide:function(G,H){if(G){return this.animate(s("hide",3),G,H)}else{for(var F=0,E=this.length;F<E;F++){var D=n.data(this[F],"olddisplay");if(!D&&D!=="none"){n.data(this[F],"olddisplay",n.css(this[F],"display"))}this[F].style.display="none"}return this}},_toggle:n.fn.toggle,toggle:function(F,E){var D=typeof F==="boolean";return n.isFunction(F)&&n.isFunction(E)?this._toggle.apply(this,arguments):F==null||D?this.each(function(){var G=D?F:n(this).is(":hidden");n(this)[G?"show":"hide"]()}):this.animate(s("toggle",3),F,E)},fadeTo:function(D,F,E){return this.animate({opacity:F},D,E)},animate:function(H,E,G,F){var D=n.speed(E,G,F);return this[D.queue===false?"each":"queue"](function(){var J=n.extend({},D),L,K=this.nodeType==1&&n(this).is(":hidden"),I=this;for(L in H){if(H[L]=="hide"&&K||H[L]=="show"&&!K){return J.complete.call(this)}if((L=="height"||L=="width")&&this.style){J.display=n.css(this,"display");J.overflow=this.style.overflow}}if(J.overflow!=null){this.style.overflow="hidden"}J.curAnim=n.extend({},H);n.each(H,function(N,R){var Q=new n.fx(I,J,N);if(/toggle|show|hide/.test(R)){Q[R=="toggle"?K?"show":"hide":R](H)}else{var P=R.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),S=Q.cur(true)||0;if(P){var M=parseFloat(P[2]),O=P[3]||"px";if(O!="px"){I.style[N]=(M||1)+O;S=((M||1)/Q.cur(true))*S;I.style[N]=S+O}if(P[1]){M=((P[1]=="-="?-1:1)*M)+S}Q.custom(S,M,O)}else{Q.custom(S,R,"")}}});return true})},stop:function(E,D){var F=n.timers;if(E){this.queue([])}this.each(function(){for(var G=F.length-1;G>=0;G--){if(F[G].elem==this){if(D){F[G](true)}F.splice(G,1)}}});if(!D){this.dequeue()}return this}});n.each({slideDown:s("show",1),slideUp:s("hide",1),slideToggle:s("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(D,E){n.fn[D]=function(F,G){return this.animate(E,F,G)}});n.extend({speed:function(F,G,E){var D=typeof F==="object"?F:{complete:E||!E&&G||n.isFunction(F)&&F,duration:F,easing:E&&G||G&&!n.isFunction(G)&&G};D.duration=n.fx.off?0:typeof D.duration==="number"?D.duration:n.fx.speeds[D.duration]||n.fx.speeds._default;D.old=D.complete;D.complete=function(){if(D.queue!==false){n(this).dequeue()}if(n.isFunction(D.old)){D.old.call(this)}};return D},easing:{linear:function(F,G,D,E){return D+E*F},swing:function(F,G,D,E){return((-Math.cos(F*Math.PI)/2)+0.5)*E+D}},timers:[],timerId:null,fx:function(E,D,F){this.options=D;this.elem=E;this.prop=F;if(!D.orig){D.orig={}}}});n.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(n.fx.step[this.prop]||n.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(E){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var D=parseFloat(n.css(this.elem,this.prop,E));return D&&D>-10000?D:parseFloat(n.curCSS(this.elem,this.prop))||0},custom:function(H,G,F){this.startTime=e();this.start=H;this.end=G;this.unit=F||this.unit||"px";this.now=this.start;this.pos=this.state=0;var D=this;function E(I){return D.step(I)}E.elem=this.elem;n.timers.push(E);if(E()&&n.timerId==null){n.timerId=setInterval(function(){var J=n.timers;for(var I=0;I<J.length;I++){if(!J[I]()){J.splice(I--,1)}}if(!J.length){clearInterval(n.timerId);n.timerId=null}},13)}},show:function(){this.options.orig[this.prop]=n.attr(this.elem.style,this.prop);this.options.show=true;this.custom(this.prop=="width"||this.prop=="height"?1:0,this.cur());n(this.elem).show()},hide:function(){this.options.orig[this.prop]=n.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(G){var F=e();if(G||F>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var D=true;for(var E in this.options.curAnim){if(this.options.curAnim[E]!==true){D=false}}if(D){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(n.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){n(this.elem).hide()}if(this.options.hide||this.options.show){for(var H in this.options.curAnim){n.attr(this.elem.style,H,this.options.orig[H])}}}if(D){this.options.complete.call(this.elem)}return false}else{var I=F-this.startTime;this.state=I/this.options.duration;this.pos=n.easing[this.options.easing||(n.easing.swing?"swing":"linear")](this.state,I,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};n.extend(n.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(D){n.attr(D.elem.style,"opacity",D.now)},_default:function(D){if(D.elem.style&&D.elem.style[D.prop]!=null){D.elem.style[D.prop]=D.now+D.unit}else{D.elem[D.prop]=D.now}}}});if(document.documentElement.getBoundingClientRect){n.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return n.offset.bodyOffset(this[0])}var F=this[0].getBoundingClientRect(),I=this[0].ownerDocument,E=I.body,D=I.documentElement,K=D.clientTop||E.clientTop||0,J=D.clientLeft||E.clientLeft||0,H=F.top+(self.pageYOffset||n.boxModel&&D.scrollTop||E.scrollTop)-K,G=F.left+(self.pageXOffset||n.boxModel&&D.scrollLeft||E.scrollLeft)-J;return{top:H,left:G}}}else{n.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return n.offset.bodyOffset(this[0])}n.offset.initialized||n.offset.initialize();var I=this[0],F=I.offsetParent,E=I,N=I.ownerDocument,L,G=N.documentElement,J=N.body,K=N.defaultView,D=K.getComputedStyle(I,null),M=I.offsetTop,H=I.offsetLeft;while((I=I.parentNode)&&I!==J&&I!==G){L=K.getComputedStyle(I,null);M-=I.scrollTop,H-=I.scrollLeft;if(I===F){M+=I.offsetTop,H+=I.offsetLeft;if(n.offset.doesNotAddBorder&&!(n.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(I.tagName))){M+=parseInt(L.borderTopWidth,10)||0,H+=parseInt(L.borderLeftWidth,10)||0}E=F,F=I.offsetParent}if(n.offset.subtractsBorderForOverflowNotVisible&&L.overflow!=="visible"){M+=parseInt(L.borderTopWidth,10)||0,H+=parseInt(L.borderLeftWidth,10)||0}D=L}if(D.position==="relative"||D.position==="static"){M+=J.offsetTop,H+=J.offsetLeft}if(D.position==="fixed"){M+=Math.max(G.scrollTop,J.scrollTop),H+=Math.max(G.scrollLeft,J.scrollLeft)}return{top:M,left:H}}}n.offset={initialize:function(){if(this.initialized){return}var K=document.body,E=document.createElement("div"),G,F,M,H,L,D,I=K.style.marginTop,J='<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>';L={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(D in L){E.style[D]=L[D]}E.innerHTML=J;K.insertBefore(E,K.firstChild);G=E.firstChild,F=G.firstChild,H=G.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(F.offsetTop!==5);this.doesAddBorderForTableAndCells=(H.offsetTop===5);G.style.overflow="hidden",G.style.position="relative";this.subtractsBorderForOverflowNotVisible=(F.offsetTop===-5);K.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(K.offsetTop===0);K.style.marginTop=I;K.removeChild(E);this.initialized=true},bodyOffset:function(D){n.offset.initialized||n.offset.initialize();var F=D.offsetTop,E=D.offsetLeft;if(n.offset.doesNotIncludeMarginInBodyOffset){F+=parseInt(n.curCSS(D,"marginTop",true),10)||0,E+=parseInt(n.curCSS(D,"marginLeft",true),10)||0}return{top:F,left:E}}};n.fn.extend({position:function(){var H=0,G=0,E;if(this[0]){var F=this.offsetParent(),I=this.offset(),D=/^body|html$/i.test(F[0].tagName)?{top:0,left:0}:F.offset();I.top-=j(this,"marginTop");I.left-=j(this,"marginLeft");D.top+=j(F,"borderTopWidth");D.left+=j(F,"borderLeftWidth");E={top:I.top-D.top,left:I.left-D.left}}return E},offsetParent:function(){var D=this[0].offsetParent||document.body;while(D&&(!/^body|html$/i.test(D.tagName)&&n.css(D,"position")=="static")){D=D.offsetParent}return n(D)}});n.each(["Left","Top"],function(E,D){var F="scroll"+D;n.fn[F]=function(G){if(!this[0]){return null}return G!==g?this.each(function(){this==l||this==document?l.scrollTo(!E?G:n(l).scrollLeft(),E?G:n(l).scrollTop()):this[F]=G}):this[0]==l||this[0]==document?self[E?"pageYOffset":"pageXOffset"]||n.boxModel&&document.documentElement[F]||document.body[F]:this[0][F]}});n.each(["Height","Width"],function(G,E){var D=G?"Left":"Top",F=G?"Right":"Bottom";n.fn["inner"+E]=function(){return this[E.toLowerCase()]()+j(this,"padding"+D)+j(this,"padding"+F)};n.fn["outer"+E]=function(I){return this["inner"+E]()+j(this,"border"+D+"Width")+j(this,"border"+F+"Width")+(I?j(this,"margin"+D)+j(this,"margin"+F):0)};var H=E.toLowerCase();n.fn[H]=function(I){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+E]||document.body["client"+E]:this[0]==document?Math.max(document.documentElement["client"+E],document.body["scroll"+E],document.documentElement["scroll"+E],document.body["offset"+E],document.documentElement["offset"+E]):I===g?(this.length?n.css(this[0],H):null):this.css(H,typeof I==="string"?I:I+"px")}})})();
/**
 * jCarousel - Riding carousels with jQuery
 * http://sorgalla.com/jcarousel/
 *
 * Copyright (c) 2006 Jan Sorgalla (http://sorgalla.com)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * Built on top of the jQuery library
 * http://jquery.com
 *
 * Inspired by the "Carousel Component" by Bill Scott
 * http://billwscott.com/carousel/
 */
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('(9($){$.1v.C=9(o){z 4.1b(9(){3p r(4,o)})};8 q={Z:F,25:1,21:1,u:7,1c:3,15:7,1K:\'2X\',2c:\'2Q\',1q:0,B:7,1j:7,1G:7,2F:7,2B:7,2z:7,2x:7,2v:7,2s:7,2p:7,1S:\'<P></P>\',1Q:\'<P></P>\',2m:\'2l\',2k:\'2l\',1O:7,1L:7};$.C=9(e,o){4.5=$.16({},q,o||{});4.Q=F;4.D=7;4.H=7;4.t=7;4.U=7;4.R=7;4.N=!4.5.Z?\'1H\':\'26\';4.E=!4.5.Z?\'24\':\'23\';8 a=\'\',1e=e.K.1e(\' \');1r(8 i=0;i<1e.I;i++){6(1e[i].2y(\'C-2w\')!=-1){$(e).1E(1e[i]);8 a=1e[i];1p}}6(e.2t==\'3o\'||e.2t==\'3n\'){4.t=$(e);4.D=4.t.19();6(4.D.1o(\'C-H\')){6(!4.D.19().1o(\'C-D\'))4.D=4.D.B(\'<P></P>\');4.D=4.D.19()}10 6(!4.D.1o(\'C-D\'))4.D=4.t.B(\'<P></P>\').19()}10{4.D=$(e);4.t=$(e).3h(\'>2o,>2n,P>2o,P>2n\')}6(a!=\'\'&&4.D.19()[0].K.2y(\'C-2w\')==-1)4.D.B(\'<P 3g=" \'+a+\'"></P>\');4.H=4.t.19();6(!4.H.I||!4.H.1o(\'C-H\'))4.H=4.t.B(\'<P></P>\').19();4.R=$(\'.C-11\',4.D);6(4.R.u()==0&&4.5.1Q!=7)4.R=4.H.1z(4.5.1Q).11();4.R.V(4.K(\'C-11\'));4.U=$(\'.C-17\',4.D);6(4.U.u()==0&&4.5.1S!=7)4.U=4.H.1z(4.5.1S).11();4.U.V(4.K(\'C-17\'));4.H.V(4.K(\'C-H\'));4.t.V(4.K(\'C-t\'));4.D.V(4.K(\'C-D\'));8 b=4.5.15!=7?1k.1P(4.1m()/4.5.15):7;8 c=4.t.32(\'1F\');8 d=4;6(c.u()>0){8 f=0,i=4.5.21;c.1b(9(){d.1I(4,i++);f+=d.S(4,b)});4.t.y(4.N,f+\'T\');6(!o||o.u===J)4.5.u=c.u()}4.D.y(\'1y\',\'1A\');4.U.y(\'1y\',\'1A\');4.R.y(\'1y\',\'1A\');4.2G=9(){d.17()};4.2b=9(){d.11()};4.1U=9(){d.2q()};6(4.5.1j!=7)4.5.1j(4,\'2a\');6($.2A.28){4.1f(F,F);$(27).1u(\'2I\',9(){d.1t()})}10 4.1t()};8 r=$.C;r.1v=r.2H={C:\'0.2.3\'};r.1v.16=r.16=$.16;r.1v.16({1t:9(){4.A=7;4.G=7;4.X=7;4.13=7;4.14=F;4.1d=7;4.O=7;4.W=F;6(4.Q)z;4.t.y(4.E,4.1s(4.5.21)+\'T\');8 p=4.1s(4.5.25);4.X=4.13=7;4.1i(p,F);$(27).22(\'2E\',4.1U).1u(\'2E\',4.1U)},2D:9(){4.t.2C();4.t.y(4.E,\'3u\');4.t.y(4.N,\'3t\');6(4.5.1j!=7)4.5.1j(4,\'2D\');4.1t()},2q:9(){6(4.O!=7&&4.W)4.t.y(4.E,r.M(4.t.y(4.E))+4.O);4.O=7;4.W=F;6(4.5.1G!=7)4.5.1G(4);6(4.5.15!=7){8 a=4;8 b=1k.1P(4.1m()/4.5.15),N=0,E=0;$(\'1F\',4.t).1b(9(i){N+=a.S(4,b);6(i+1<a.A)E=N});4.t.y(4.N,N+\'T\');4.t.y(4.E,-E+\'T\')}4.1c(4.A,F)},3s:9(){4.Q=1h;4.1f()},3r:9(){4.Q=F;4.1f()},u:9(s){6(s!=J){4.5.u=s;6(!4.Q)4.1f()}z 4.5.u},3q:9(i,a){6(a==J||!a)a=i;6(4.5.u!==7&&a>4.5.u)a=4.5.u;1r(8 j=i;j<=a;j++){8 e=4.L(j);6(!e.I||e.1o(\'C-1a-1D\'))z F}z 1h},L:9(i){z $(\'.C-1a-\'+i,4.t)},2u:9(i,s){8 e=4.L(i),20=0,2u=0;6(e.I==0){8 c,e=4.1B(i),j=r.M(i);1n(c=4.L(--j)){6(j<=0||c.I){j<=0?4.t.2r(e):c.1X(e);1p}}}10 20=4.S(e);e.1E(4.K(\'C-1a-1D\'));1R s==\'3l\'?e.3k(s):e.2C().3j(s);8 a=4.5.15!=7?1k.1P(4.1m()/4.5.15):7;8 b=4.S(e,a)-20;6(i>0&&i<4.A)4.t.y(4.E,r.M(4.t.y(4.E))-b+\'T\');4.t.y(4.N,r.M(4.t.y(4.N))+b+\'T\');z e},1V:9(i){8 e=4.L(i);6(!e.I||(i>=4.A&&i<=4.G))z;8 d=4.S(e);6(i<4.A)4.t.y(4.E,r.M(4.t.y(4.E))+d+\'T\');e.1V();4.t.y(4.N,r.M(4.t.y(4.N))-d+\'T\')},17:9(){4.1C();6(4.O!=7&&!4.W)4.1T(F);10 4.1c(((4.5.B==\'1Z\'||4.5.B==\'G\')&&4.5.u!=7&&4.G==4.5.u)?1:4.A+4.5.1c)},11:9(){4.1C();6(4.O!=7&&4.W)4.1T(1h);10 4.1c(((4.5.B==\'1Z\'||4.5.B==\'A\')&&4.5.u!=7&&4.A==1)?4.5.u:4.A-4.5.1c)},1T:9(b){6(4.Q||4.14||!4.O)z;8 a=r.M(4.t.y(4.E));!b?a-=4.O:a+=4.O;4.W=!b;4.X=4.A;4.13=4.G;4.1i(a)},1c:9(i,a){6(4.Q||4.14)z;4.1i(4.1s(i),a)},1s:9(i){6(4.Q||4.14)z;6(4.5.B!=\'18\')i=i<1?1:(4.5.u&&i>4.5.u?4.5.u:i);8 a=4.A>i;8 b=r.M(4.t.y(4.E));8 f=4.5.B!=\'18\'&&4.A<=1?1:4.A;8 c=a?4.L(f):4.L(4.G);8 j=a?f:f-1;8 e=7,l=0,p=F,d=0;1n(a?--j>=i:++j<i){e=4.L(j);p=!e.I;6(e.I==0){e=4.1B(j).V(4.K(\'C-1a-1D\'));c[a?\'1z\':\'1X\'](e)}c=e;d=4.S(e);6(p)l+=d;6(4.A!=7&&(4.5.B==\'18\'||(j>=1&&(4.5.u==7||j<=4.5.u))))b=a?b+d:b-d}8 g=4.1m();8 h=[];8 k=0,j=i,v=0;8 c=4.L(i-1);1n(++k){e=4.L(j);p=!e.I;6(e.I==0){e=4.1B(j).V(4.K(\'C-1a-1D\'));c.I==0?4.t.2r(e):c[a?\'1z\':\'1X\'](e)}c=e;8 d=4.S(e);6(d==0){3f(\'3e: 3d 1H/26 3c 1r 3b. 3a 39 38 37 36 35. 34...\');z 0}6(4.5.B!=\'18\'&&4.5.u!==7&&j>4.5.u)h.33(e);10 6(p)l+=d;v+=d;6(v>=g)1p;j++}1r(8 x=0;x<h.I;x++)h[x].1V();6(l>0){4.t.y(4.N,4.S(4.t)+l+\'T\');6(a){b-=l;4.t.y(4.E,r.M(4.t.y(4.E))-l+\'T\')}}8 n=i+k-1;6(4.5.B!=\'18\'&&4.5.u&&n>4.5.u)n=4.5.u;6(j>n){k=0,j=n,v=0;1n(++k){8 e=4.L(j--);6(!e.I)1p;v+=4.S(e);6(v>=g)1p}}8 o=n-k+1;6(4.5.B!=\'18\'&&o<1)o=1;6(4.W&&a){b+=4.O;4.W=F}4.O=7;6(4.5.B!=\'18\'&&n==4.5.u&&(n-k+1)>=1){8 m=r.Y(4.L(n),!4.5.Z?\'1l\':\'1N\');6((v-m)>g)4.O=v-g-m}1n(i-->o)b+=4.S(4.L(i));4.X=4.A;4.13=4.G;4.A=o;4.G=n;z b},1i:9(p,a){6(4.Q||4.14)z;4.14=1h;8 b=4;8 c=9(){b.14=F;6(p==0)b.t.y(b.E,0);6(b.5.B==\'1Z\'||b.5.B==\'G\'||b.5.u==7||b.G<b.5.u)b.2j();b.1f();b.1M(\'2i\')};4.1M(\'31\');6(!4.5.1K||a==F){4.t.y(4.E,p+\'T\');c()}10{8 o=!4.5.Z?{\'24\':p}:{\'23\':p};4.t.1i(o,4.5.1K,4.5.2c,c)}},2j:9(s){6(s!=J)4.5.1q=s;6(4.5.1q==0)z 4.1C();6(4.1d!=7)z;8 a=4;4.1d=30(9(){a.17()},4.5.1q*2Z)},1C:9(){6(4.1d==7)z;2Y(4.1d);4.1d=7},1f:9(n,p){6(n==J||n==7){8 n=!4.Q&&4.5.u!==0&&((4.5.B&&4.5.B!=\'A\')||4.5.u==7||4.G<4.5.u);6(!4.Q&&(!4.5.B||4.5.B==\'A\')&&4.5.u!=7&&4.G>=4.5.u)n=4.O!=7&&!4.W}6(p==J||p==7){8 p=!4.Q&&4.5.u!==0&&((4.5.B&&4.5.B!=\'G\')||4.A>1);6(!4.Q&&(!4.5.B||4.5.B==\'G\')&&4.5.u!=7&&4.A==1)p=4.O!=7&&4.W}8 a=4;4.U[n?\'1u\':\'22\'](4.5.2m,4.2G)[n?\'1E\':\'V\'](4.K(\'C-17-1w\')).1J(\'1w\',n?F:1h);4.R[p?\'1u\':\'22\'](4.5.2k,4.2b)[p?\'1E\':\'V\'](4.K(\'C-11-1w\')).1J(\'1w\',p?F:1h);6(4.U.I>0&&(4.U[0].1g==J||4.U[0].1g!=n)&&4.5.1O!=7){4.U.1b(9(){a.5.1O(a,4,n)});4.U[0].1g=n}6(4.R.I>0&&(4.R[0].1g==J||4.R[0].1g!=p)&&4.5.1L!=7){4.R.1b(9(){a.5.1L(a,4,p)});4.R[0].1g=p}},1M:9(a){8 b=4.X==7?\'2a\':(4.X<4.A?\'17\':\'11\');4.12(\'2F\',a,b);6(4.X!==4.A){4.12(\'2B\',a,b,4.A);4.12(\'2z\',a,b,4.X)}6(4.13!==4.G){4.12(\'2x\',a,b,4.G);4.12(\'2v\',a,b,4.13)}4.12(\'2s\',a,b,4.A,4.G,4.X,4.13);4.12(\'2p\',a,b,4.X,4.13,4.A,4.G)},12:9(a,b,c,d,e,f,g){6(4.5[a]==J||(1R 4.5[a]!=\'2h\'&&b!=\'2i\'))z;8 h=1R 4.5[a]==\'2h\'?4.5[a][b]:4.5[a];6(!$.2W(h))z;8 j=4;6(d===J)h(j,c,b);10 6(e===J)4.L(d).1b(9(){h(j,4,d,c,b)});10{1r(8 i=d;i<=e;i++)6(i!==7&&!(i>=f&&i<=g))4.L(i).1b(9(){h(j,4,i,c,b)})}},1B:9(i){z 4.1I(\'<1F></1F>\',i)},1I:9(e,i){8 a=$(e).V(4.K(\'C-1a\')).V(4.K(\'C-1a-\'+i));a.1J(\'2V\',i);z a},K:9(c){z c+\' \'+c+(!4.5.Z?\'-2U\':\'-Z\')},S:9(e,d){8 a=e.2g!=J?e[0]:e;8 b=!4.5.Z?a.1x+r.Y(a,\'2f\')+r.Y(a,\'1l\'):a.2e+r.Y(a,\'2d\')+r.Y(a,\'1N\');6(d==J||b==d)z b;8 w=!4.5.Z?d-r.Y(a,\'2f\')-r.Y(a,\'1l\'):d-r.Y(a,\'2d\')-r.Y(a,\'1N\');$(a).y(4.N,w+\'T\');z 4.S(a)},1m:9(){z!4.5.Z?4.H[0].1x-r.M(4.H.y(\'2T\'))-r.M(4.H.y(\'2S\')):4.H[0].2e-r.M(4.H.y(\'2R\'))-r.M(4.H.y(\'3i\'))},2P:9(i,s){6(s==J)s=4.5.u;z 1k.2O((((i-1)/s)-1k.2N((i-1)/s))*s)+1}});r.16({3m:9(d){z $.16(q,d||{})},Y:9(e,p){6(!e)z 0;8 a=e.2g!=J?e[0]:e;6(p==\'1l\'&&$.2A.28){8 b={\'1y\':\'1A\',\'2M\':\'2L\',\'1H\':\'1q\'},1Y,1W;$.29(a,b,9(){1Y=a.1x});b[\'1l\']=0;$.29(a,b,9(){1W=a.1x});z 1W-1Y}z r.M($.y(a,p))},M:9(v){v=2K(v);z 2J(v)?0:v}})})(3v);',62,218,'||||this|options|if|null|var|function||||||||||||||||||||list|size||||css|return|first|wrap|jcarousel|container|lt|false|last|clip|length|undefined|className|get|intval|wh|tail|div|locked|buttonPrev|dimension|px|buttonNext|addClass|inTail|prevFirst|margin|vertical|else|prev|callback|prevLast|animating|visible|extend|next|circular|parent|item|each|scroll|timer|split|buttons|jcarouselstate|true|animate|initCallback|Math|marginRight|clipping|while|hasClass|break|auto|for|pos|setup|bind|fn|disabled|offsetWidth|display|before|block|create|stopAuto|placeholder|removeClass|li|reloadCallback|width|format|attr|animation|buttonPrevCallback|notify|marginBottom|buttonNextCallback|ceil|buttonPrevHTML|typeof|buttonNextHTML|scrollTail|funcResize|remove|oWidth2|after|oWidth|both|old|offset|unbind|top|left|start|height|window|safari|swap|init|funcPrev|easing|marginTop|offsetHeight|marginLeft|jquery|object|onAfterAnimation|startAuto|buttonPrevEvent|click|buttonNextEvent|ol|ul|itemVisibleOutCallback|reload|prepend|itemVisibleInCallback|nodeName|add|itemLastOutCallback|skin|itemLastInCallback|indexOf|itemFirstOutCallback|browser|itemFirstInCallback|empty|reset|resize|itemLoadCallback|funcNext|prototype|load|isNaN|parseInt|none|float|floor|round|index|swing|borderTopWidth|borderRightWidth|borderLeftWidth|horizontal|jcarouselindex|isFunction|normal|clearTimeout|1000|setTimeout|onBeforeAnimation|children|push|Aborting|loop|infinite|an|cause|will|This|items|set|No|jCarousel|alert|class|find|borderBottomWidth|append|html|string|defaults|OL|UL|new|has|unlock|lock|10px|0px|jQuery'.split('|'),0,{}))

var handler_name;
var div_id;
var redirect_to;

function handleResponse(msg){
 eval(handler_name+'("'+escape(msg)+'")');
}

function ajax_request(form_id, controller_name, callback_handler, to_div_id){
 form_data = $('#' + form_id).serialize();
 handler_name = callback_handler;
 div_id = to_div_id;
 $.ajax({
 type: "POST",
 url: controller_name,
 data: form_data,
 success: handleResponse
 });
}

function delete_comment(comment_id, file_id){
 if(confirm('Are you sure you want to delete this comment?')){
 $.ajax({
 type: "POST",
 url: "portfolio/ajax_delete_file_comment",
 data: "comment_id="+comment_id+"&file_id="+file_id,
 success:function(html){
 $('#file-comments').html(html);
 }
 });
 }
}

function delete_message(){
 if(confirm('Are you sure you want to delete this message?')){
 return true;
 } else {
 return false;
 }
}

function delete_posted_project(){
 if(confirm('Are you sure you want to delete this posted project?')){
 return true;
 } else {
 return false;
 }
}

function delete_posted_job(){
 if(confirm('Are you sure you want to delete this posted job?')){
 return true;
 } else {
 return false;
 }
}

function delete_file(file_id, project_id, user_id){
 if(confirm('Are you sure you want to delete this file?')){
 $.ajax({
 type: "POST",
 url: "portfolio/ajax_delete_project_file",
 data: "file_id="+file_id+"&project_id="+project_id+"&user_id="+user_id,
 success:function(html){
 $('#files-comments').html(html);
 tb_init('a.thickbox, area.thickbox, input.thickbox');//pass where to apply thickbox
 }
 });
 }
}

function delete_avatar(user_id){
 if(confirm('Are you sure you want to delete your picture?')){
 ajax_request('edit-avatar-form', 'profile/avatar_delete_file/'+user_id, 'profile_avatar_result');
 }
}

function delete_project(){
 if(confirm('Deleting this project will delete all the files and comments under it. Are you sure you want to delete this project?')){
 return true;
 } else {
 return false;
 }
}

function remove_user_connection(){
 if(confirm('Are you sure you want to remove this user?')){
 return true;
 } else {
 return false;
 }
}

function portfolio_project_result(msg){
 $('#project-'+div_id).html(unescape(msg));
}

function profile_avatar_result(msg){
 $('#profile-avatar').html(unescape(msg));
 tb_init('a.thickbox, area.thickbox, input.thickbox');//pass where to apply thickbox
}

function portfolio_project_decription_result(msg){
 $('#project-description').html(unescape(msg));
}

function portfolio_file_decription_result(msg){
 $('#file-description').html(unescape(msg));
}

function portfolio_add_file_comment_result(msg){
 $('#file-comment-text').val('');
 $('#comments-area').html(unescape(msg));
}

function profile_education_result(msg){
 $('#profile-education').html(unescape(msg));
}

function profile_work_done_result(msg){
 $('#profile-work-done').html(unescape(msg));
}

function profile_program_result(msg){
 $('#profile-program').html(unescape(msg));
}

function profile_website_1_result(msg){
 $('#profile-main').html(unescape(msg));
}

function profile_website_2_result(msg){
 $('#profile-website-2').html(unescape(msg));
}

function profile_website_result(msg){
 $('#profile-website').html(unescape(msg));
}

function profile_language_1_result(msg){
 $('#profile-main').html(unescape(msg));
}

function profile_language_2_result(msg){
 $('#profile-language-2').html(unescape(msg));
}

function profile_language_result(msg){
 $('#profile-language').html(unescape(msg));
}

function profile_specialization_1_result(msg){
 $('#profile-main').html(unescape(msg));
}

function profile_specialization_2_result(msg){
 $('#profile-specialization-2').html(unescape(msg));
}

function profile_specialization_result(msg){
 $('#profile-specialization').html(unescape(msg));
}

function profile_main_data_result(msg){
 $('#profile-main').html(unescape(msg));
}

function profile_company_main_data_result(msg){
 $('#profile-company-main').html(unescape(msg));
}

function profile_about_company_result(msg){
 $('#profile-about-company').html(unescape(msg));
}

function name_block_result(msg){
 $('#name-main').html(unescape(msg));
}

function show_login(page_redirect, msg){
 $("#login-area").toggle();
 $('#login-error-message-text').html(msg);
 redirect_to = page_redirect;
}

function projects_view_click(){
 $("#project-1").slideToggle(600);
}

function drop_talents(){
 $("#find-talents-drop").toggle();
}

function login_process() {
 $('#redirect-to').attr('value', redirect_to);
 $('#login-error-message').html('');
 $("#login-loading").ajaxStart(function(){
 $(this).html('<img style="vertical-align:middle;" src="images/loading.gif" /> <span class="orange-link">loading...</span>');
 });
 $("#login-loading").ajaxStop(function(){
 $(this).html('');
 });
 ajax_request('login-form', 'account/ajax_login', 'login_response');
}

function login_response(msg) {
 if(msg == 0) {
 $('#login-error-message').addClass('red-color');
 $('#login-error-message').html('Invalid user email or password.');
 } else if(msg == 'reload') {
 window.location.reload();
 } else {
 window.location.href=msg;
 }
}

function signup_process() {
 $("#loading5").html('<img style="vertical-align:middle;" src="images/loading.gif" /> <span class="orange-link">loading...</span>');
 ajax_request('signup-form', '/account/ajax_signup', 'signup_response');
}

function signup_response(msg) {
 if(msg == 'done') {
 window.location.href='/account/welcome';
 } else {
 $('#signup-block').html(unescape(msg));
 }
}

function add_new_project(form_id, controller_name, user_id){
 form_data = $('#' + form_id).serialize();
 $.ajax({
 type: "POST",
 url: controller_name,
 data: form_data,
 success:function(msg){
 $('#add-project-container').html(unescape(msg));
 if(isInteger(msg)){
 tb_remove();
 window.location.href = '/portfolio/'+user_id+'/'+msg+'/1';
 }
 }
 });
}

function isInteger(s){
 var i;
 if (isEmpty(s))
 if (isInteger.arguments.length == 1) return 0;
 else return (isInteger.arguments[1] == true);
 for (i = 0; i < s.length; i++){
 var c = s.charAt(i);
 if (!isDigit(c)) return false;
 }
 return true;
}

function isEmpty(s){
 return ((s == null) || (s.length == 0));
}

function isDigit (c){
 return ((c >= "0") && (c <= "9"));
}

function portfolio_add_project_file_result(msg){
 $('#add-file-container').html(unescape(msg));
 if(msg == 'success'){
 $('#file-list').html(unescape(msg));
 tb_remove();
 }
}


/**
function fill_errors(errors) {
 for(var field_name in errors) {
 $('#'+field_name+'-error').html('<label style="padding: 0 2px 0 2px; background-color: #ff0000; font-size: 14px; font-weight: 700; color: #ffffff;">!</label> <label style="font-size: 11px; color: #ff0000;">'+errors[field_name]+'</label>');
 }
}
**/

/**
 Admin Panel by ANAS
**/

function toggleAddAttributeBlock() {
 $('.hidden-block').toggle();
}

function saveAddedAttribute(url) {
 $('#loading').html('<img style="vertical-align:middle;" src="images/loading.gif" />');
 $.ajax({
 type: "POST",
 url: url,
 data: $('#add-attribute').serialize(),
 success: function(html){
 $('#loading').html('');
 if(html) {
 json = eval ('('+html+')');
 var result = '';
 for (var error in json.errors) {
 result += error.charAt(0).toUpperCase() + error.substr(1).toLowerCase() + json.message + json.errors[error] + "\n";
 }
 alert(result);
 } else {
 $('input.text-input').each(function(i){
 this.value = '';
 });
 window.location.reload();
 }
 }
 });
}

function saveAddedAttribute2(url) {
 $('#loading2').html('<img style="vertical-align:middle;" src="images/loading.gif" />');
 $.ajax({
 type: "POST",
 url: url,
 data: $('#add-attribute2').serialize(),
 success: function(html){
 json = eval ('('+html+')');
 if(json.errors) {
 var result = '';
 for (var error in json.errors) {
 result += error.charAt(0).toUpperCase() + error.substr(1).toLowerCase() + json.message + json.errors[error] + "\n";
 }
 alert(result);
 } else {
 $('input.text-input').each(function(i){
 this.value = '';
 });
 $('#add-block').before(json.content);
 }
 }
 });
}

function saveAttribute(id, url) {
 $('#loading_'+id).html('<img style="vertical-align:middle;" src="images/loading.gif" />');
 $.ajax({
 type: "POST",
 url: url,
 data: 'id='+id+'&'+$('#add_attribute_'+id).serialize(),
 success: function(html){
 $('#loading_'+id).html('');
 json = eval ('('+html+')');
 if(json.errors) {
 var result = '';
 for (var error in json.errors) {
 result += error.charAt(0).toUpperCase() + error.substr(1).toLowerCase() + json.message + json.errors[error] + "\n";
 }
 alert(result);
 } else {
 $('#visible_'+id).html(json.content);
 toggleBlocksForEdit(id);
 }
 }
 });
}

function toggleBlocksForEdit(id) {
 $('#hidden_'+id).toggle();
 $('#visible_'+id).toggle();
}

function toggleLegends(id) {
 $('#visible_legend_'+id).toggle();
 $('#hidden_legend_'+id).toggle();
}

function get_focuses(specialization_id, id, type){
 if(specialization_id == 0){
 $('#profile-specialization-focuses-'+id).hide();
 } else {
 $.ajax({
 type: "POST",
 url: 'profile/ajax_get_specialization_focuses',
 data: 'specialization_id='+specialization_id+'&user_focus_id='+id+'&type='+type,
 success: function(msg){
 $('#profile-specialization-focuses-'+id).show();
 $('#profile-specialization-focuses-'+id).html(msg);
 }
 });
 }
}

function get_project_related_data(project_id,file_page_no,last_img,user_id){
 if(!file_page_no) file_page_no=1;
 if(!last_img) last_img=0;
 if(!user_id) user_id=0;
 if(project_id == 0 || project_id == ''){
 alert('No project specified');
 } else {
 //$('#loading').html('<img style="vertical-align:middle;" src="images/loadingAnimation.gif" />');
 // to close the opened project if it is not the one that im on
 var selected_project_id_array = ($('.selected-project').attr('id')).split('-');
 var selected_project_id = selected_project_id_array[1];
 if(project_id != selected_project_id){
 $.ajax({
 type: 'POST',
 url: '/portfolio/ajax_project_block/view/'+selected_project_id,
 success: function(msg){$('#project-'+selected_project_id).html(unescape(msg));}
 });
 }
 // end of closing ///////////////
 $('#loading').html('<img style="vertical-align:middle;" src="images/loading.gif" /> <span class="orange-link">loading...</span>');
 $.ajax({
 type: 'POST',
 url: '/portfolio/ajax_get_project_related_data/P'+file_page_no,
 data: 'project_id='+project_id+'&last_img='+last_img+'&user_id='+user_id,
 success: function(html){
 $('#files-comments').html(html);
 $('#files-comments').show();
 $('#loading').html('');
 //ajax_request('edit-project-'+project_id+'-form', 'portfolio/ajax_project_block/view/'+project_id, 'portfolio_project_result', user_id);
 tb_init('a.thickbox, area.thickbox, input.thickbox');//pass where to apply thickbox
 $('div.selected-project').removeClass('selected-project');
 $('#project-'+project_id).addClass('selected-project');
 $('#project-number').html($('#project-'+project_id).parent().attr('jcarouselindex'));
 }
 });
 }
}

function ajax_edit_project(form_id, controller_name, callback_handler, to_div_id){
 // to close the opened project if it is not the one that im on
 var selected_project_id_array = ($('.selected-project').attr('id')).split('-');
 var selected_project_id = selected_project_id_array[1];
 if(to_div_id != selected_project_id){
 $.ajax({
 type: 'POST',
 url: '/portfolio/ajax_project_block/view/'+selected_project_id,
 success: function(msg){$('#project-'+selected_project_id).html(unescape(msg));}
 });
 }
 // end of closing ///////////////
 form_data = $('#' + form_id).serialize();
 handler_name = callback_handler;
 div_id = to_div_id;
 $.ajax({
 type: "POST",
 url: controller_name,
 data: form_data,
 success: function(msg){
 $('div.selected-project').removeClass('selected-project');
 $('#project-'+to_div_id).addClass('selected-project');
 $('#project-'+to_div_id).html(unescape(msg));
 }
 });
}

function get_file_details(file_id, page_no, image_index){
 if(file_id == 0 || file_id == ''){
 alert('No file specified');
 } else {
 //$('#loading').html('<img style="vertical-align:middle;" src="images/loadingAnimation.gif" />');
 $('#file-loader').html('<img style="vertical-align:middle;" src="images/loading.gif" /> <span class="orange-link">loading...</span>');
 $.ajax({
 type: "POST",
 url: 'portfolio/ajax_get_project_file_details',
 data: 'file_id='+file_id
 + '&page_no='+page_no
 + '&image_index='+image_index
 ,
 success: function(html){
 /*$('#file-details').html(html);
 $('#file-details').show();*/
 eval('var response='+html);
 $('#file-details').html(response.file_details);
 //alert(response.file_details);
 //$('#file-details').show();
 $('#comments-area').html(response.file_comments);
 $('#file-loader').html('');
 tb_init('a.thickbox, area.thickbox, input.thickbox');//pass where to apply thickbox
 $('#all-file-list img').each(function(){
 $(this).attr('class','img-normal');
 });

 $('#file-image-'+file_id).attr('class','img-selected');
 }
 });
 }
}

function blockActivateUser(id) {
 $.ajax({
 type: "POST",
 url: 'admin/user/block_activate_user/'+id,
 success: function(html){
 window.location.reload();
 }
 });
}

function slideDown(id) {
 $('#child_'+id).slideToggle();

 $('#parent_'+id).toggleClass('left-search-content-downbgimage');
 $('#parent_'+id).toggleClass('left-search-content-rightbgimage');
}

function get_cities(country_iso, view, selected_city_id){
 if(!selected_city_id) selected_city_id=0;

 if(country_iso == 0){
 $('#profile-cities').hide();
 } else {
 $("#loading").ajaxStart(function(){
 $(this).html('<img style="vertical-align:middle;" src="images/loading.gif" /> <span class="orange-link">loading...</span>');
 });
 $("#loading").ajaxSuccess(function(evt, request, settings){
 $(this).html('');
 });
 $.ajax({
 type: "POST",
 url: 'profile/ajax_get_country_cities',
 data: 'country_iso='+country_iso+'&view='+view+'&selected_city_id='+selected_city_id,
 success: function(msg){
 $('#profile-cities').show();
 $('#profile-cities').html(msg);
 }
 });
 }
}

function add_connection(to_id) {
 $.ajax({
 type: "POST",
 url: 'connections/save_conncetion',
 data: 'to_user='+to_id,
 success: function(msg){
 window.location.reload();
 //tb_remove();
 }
 });
}

function add_message(form_id) {
 $.ajax({
 type: "POST",
 url: 'messages/add_message',
 data: $('#message_'+form_id).serialize()+'&to='+form_id,
 success: function(msg){
 $('#send-message-container').html(unescape(msg));
 if(msg == 'sent'){
 tb_remove();
 }
 }
 });
}

function publishUnpublishProject(id, url) {
 $.ajax({
 type: "POST",
 url: url+'/'+id,
 success: function(msg){
 window.location.reload();
 }
 });
}

function getSpecialityAndFocuses() {
 $('#loading3').html('<img style="vertical-align:middle;" src="images/myloader.gif" /> <span class="orange-link">loading...</span>');
 $.ajax({
 type: "POST",
 url: 'admin/field_focus/get_speciality',
 data: $('#speciality-form').serialize(),
 success: function(html){
 $('#loading').html('');
 $('#speciality-cont').html(html);
 $('#loading3').html('');
 }
 });
}

function changeNormal(id, class_name) {
 $('#'+ id).addClass(class_name);
 $('#'+ id).removeClass(class_name + '-hover');
}

function changeHover(id, class_name) {
 $('#'+ id).addClass(class_name + '-hover');
 $('#'+ id).removeClass(class_name);
}

function add_specialization()
{
 var content = $('#add-specialization-div').html();
 $('#new-specialization-div').append(content);
}

function delete_specialization(id)
{
 $('#delete-specialization-focuses-'+id).attr('value',1);
 $('#delete-specialization-div-'+id).attr('class','hidden');

 var specializations = $('.delete_specialization');

 var add_specialization_flag = specializations.length;
 for(i=0; i<specializations.length; i++)
 {
 if(specializations[i].value==1) add_specialization_flag--;
 }

 var new_specializations = document.getElementsByName('new_specialization[]');

 if(add_specialization_flag==0 && new_specializations.length<=1) add_specialization();
}

function get_new_focuses(specialization){
 var specializations = document.getElementsByName('new_specialization[]');
 //var specializations = $("div[name='new_specialization[]']");
 //var focuses = document.getElementsByName('new_focus_div[]');
 var focuses = $("div[name='new_focus_div[]']");
 var id = 0;
 var specialization_id = 0;
 var type = 'add';

 for(i=0; i<specializations.length; i++)
 {
 if(specialization == specializations[i])
 {
 focuses[i].id='new-focus-'+i;
 id = i;
 specialization_id = specialization.value;
 }
 }

 $.ajax({
 type: "POST",
 url: 'profile/ajax_get_specialization_focuses',
 data: 'specialization_id='+specialization_id+'&user_focus_id='+id+'&type='+type,
 success: function(msg){
 $('#new-focus-'+id).show();
 $('#new-focus-'+id).html(msg);
 }
 });
}

function add_language()
{
 var content = $('#add-language-div').html();
 $('#new-language-div').append(content);
}

function delete_language(id)
{
 $('#delete-language-'+id).attr('value',1);
 $('#delete-language-div-'+id).attr('class','hidden');

 var language = $('.delete_languages');

 var add_language_flag = language.length;
 for(i=0; i<language.length; i++)
 {
 if(language[i].value==1) add_language_flag--;
 }

 var new_languages = document.getElementsByName('new_language[]');

 if(add_language_flag==0 && new_languages.length<=1) add_language();
}

function add_website()
{
 var content = $('#add-website-div').html();
 $('#new-website-div').append(content);
}

function delete_website(id)
{
 $('#delete-website-'+id).attr('value',1);
 $('#delete-website-div-'+id).attr('class','hidden');

 var websites = $('.delete_websites');

 var add_website_flag = websites.length;
 for(i=0; i<websites.length; i++)
 {

 if(websites[i].value==1) add_website_flag--;
 }

 var new_website = document.getElementsByName('new_title[]');



 if(add_website_flag==0 && new_website.length<=1) add_website();
}

function add_education()
{
 var content = $('#add-education-div').html();
 $('#new-education-div').append(content);
}

function delete_education(id)
{
 $('#delete-education-'+id).attr('value',1);
 $('#delete-education-div-'+id).attr('class','hidden');

 var education = $('.delete_educations');

 var add_education_flag = education.length;
 for(i=0; i<education.length; i++)
 {
 if(education[i].value==1) add_education_flag--;
 }

 var new_educations = document.getElementsByName('new_level[]');
 if(add_education_flag==0 && new_educations.length<=1) add_education();
}


function add_program()
{
 var content = $('#add-program-div').html();
 $('#new-program-div').append(content);
}

function delete_program(id)
{
 $('#delete-program-'+id).attr('value',1);
 $('#delete-program-div-'+id).attr('class','hidden');

 var program = $('.delete_programs');

 var add_program_flag = program.length;
 for(i=0; i<program.length; i++)
 {
 if(program[i].value==1) add_program_flag--;
 }

 var new_programs = document.getElementsByName('new_program[]');
 if(add_program_flag==0 && new_programs.length<=1) add_program();
}

function add_work_done()
{
 var content = $('#add-work-done-div').html();
 $('#new-work-done-div').append(content);
}

function delete_work_done(id)
{
 $('#delete-work-done-'+id).attr('value',1);
 $('#delete-work-done-div-'+id).attr('class','hidden');

 var work_done = $('.delete_works_done');

 var add_work_done_flag = work_done.length;
 for(i=0; i<work_done.length; i++)
 {
 if(work_done[i].value==1) add_work_done_flag--;
 }

 var new_work_done = document.getElementsByName('work_done[]');
 if(add_work_done_flag==0 && new_work_done.length<=1) add_program();
}

function add_service()
{
 var content = $('#add-service-div').html();
 $('#new-service-div').append(content);
}

function delete_service(id)
{
 $('#delete-service-'+id).attr('value',1);
 $('#delete-service-div-'+id).attr('class','hidden');

 var service = $('.delete_services');

 var add_service_flag = service.length;
 for(i=0; i<service.length; i++)
 {
 if(service[i].value==1) add_service_flag--;
 }

 var new_service = document.getElementsByName('new_service[]');
 if(add_service_flag==0 && new_service.length<=1) add_service();
}


function add_client()
{
 var content = $('#add-client-div').html();
 $('#new-client-div').append(content);
}

function delete_client(id)
{
 $('#delete-client-'+id).attr('value',1);
 $('#delete-client-div-'+id).attr('class','hidden');

 var client = $('.delete_clients');

 var add_client_flag = client.length;
 for(i=0; i<client.length; i++)
 {
 if(client[i].value==1) add_client_flag--;
 }

 var new_client = document.getElementsByName('new_client[]');
 if(add_client_flag==0 && new_client.length<=1) add_client();
}

function forgot_password_process() {
 $('#loading').html('<img style="vertical-align:middle;" src="/images/loading.gif" /> <span class="orange-link">loading...</span>');
 ajax_request('forgot-password-form', '/account/ajax_forgot_password', 'forgot_password_response');
}

function forgot_password_response(msg) {
 if(msg == 0) {
 $('#forgot-password-error-message').html('Invalid user email.');
 $('#loading').html('');
 } else if(msg == 'sent') {
 $('#forgot-password-body').html('<p style="height:50px;width:200px;vertical-align:middle;">You will receive an email soon.</p>');
 //setInterval(function(){$('#login-area').hide('slow');}, 3000);
 setInterval(function(){$('#login-area').slideUp();window.location.reload();}, 3000);
 }
}

function new_password_process() {
 $('#loading1').html('<img style="vertical-align:middle;" src="/images/loading.gif" /> <span class="orange-link">loading...</span>');
 ajax_request('new-password-form', '/account/ajax_new_password', 'new_password_response');
}

function new_password_response(msg) {
 if(msg == 'changed') {
 $('#middle-content').html('<h2>Your password has been changed. You will receive the new password in your email.</h2>');
 } else {
 $('#new-password-block').html(unescape(msg));
 }
}

function change_password_process(){
 $('#loading').html('<img style="vertical-align:middle;" src="/images/loading.gif" /> <span class="orange-link">loading...</span>');
 ajax_request('change-password-form', '/profile/ajax_change_password', 'change_password_response');
}

function change_password_response(msg) {
 if(msg == 'changed') {
 $('#password-settings').html('<h2>Your password has been changed. You will receive the new password in your email.</h2>');
 } else {
 $('#change-password-block').html(unescape(msg));
 }
}

function change_color(chk, strin){
 if(chk.checked){
 $(strin).addClass("orange-link");
 }
 else
 {
 $(strin).removeClass("orange-link");
 }
}

function check_fields(from_id){
 var n = $("#"+from_id+" input:checked").length;
 var search_for = '';
 if(from_id == 'talent-search-from'){
 search_for = 'search-by-name';
 } else {
 search_for = 'search-specialization';
 }

 if($.trim($('#'+search_for).val()) == '' && n < 1 && $('#years-of-experience').val() == 0 && $('#country').val() == 0){
 alert('You must specify at least one filed to search.');
 return false;
 }

 if($.trim($('#'+search_for).val()) != '' && ($.trim($('#'+search_for).val()).length < 3)){
 alert('Minimum 3 charecters are allowed!');
 return false;
 }

 return true;
}

function change_email_process(){
 $('#loading1').html('<img style="vertical-align:middle;" src="/images/loading.gif" /> <span class="orange-link">loading...</span>');
 ajax_request('change-email-form', '/profile/ajax_change_email', 'change_email_response');
}

function change_email_response(msg) {
 if(msg == 'changed') {
 $('#email-settings').html('<h2>Your email has been changed. You will receive a notification message on your new email.</h2>');
 } else {
 $('#change-email-block').html(unescape(msg));
 }
}

function projects_on_profile(displayed_projects, allowed_number, project_id, already_checked){
 if( ($('input[name=on_profile]:checked').length > 0) && (displayed_projects >= allowed_number) ){
 if(already_checked == 0){
 alert('you can only display '+allowed_number+' projects in your profile. Deselect a project to choose this one');
 return false;
 }
 }
 ajax_request('edit-project-'+project_id+'-form', 'portfolio/ajax_edit_project', 'portfolio_project_result', project_id);
}

function login_page_process() {
 $('#redirect-to-page').attr('value', redirect_to);
 $('#login-page-error-message').html('');
 $("#login-page-loading").ajaxStart(function(){
 $(this).html('<img style="vertical-align:middle;" src="images/loading.gif" /> <span class="orange-link">loading...</span>');
 });
 $("#login-page-loading").ajaxStop(function(){
 $(this).html('');
 });
 ajax_request('login-page-form', 'account/ajax_login', 'login_page_response');
}

function login_page_response(msg) {
 if(msg == 0) {
 $('#login-page-error-message').addClass('red-color');
 $('#login-page-error-message').html('Invalid user email or password.');
 } else if(msg == 'reload') {
 window.location.reload();
 } else {
 window.location.href=msg;
 }
}

function forgot_password_page_process() {
 $('#forgot-loading').html('<img style="vertical-align:middle;" src="/images/loading.gif" /> <span class="orange-link">loading...</span>');
 ajax_request('forgot-password-page-form', '/account/ajax_forgot_password', 'forgot_password_page_response');
}

function forgot_password_page_response(msg) {
 if(msg == 0) {
 $('#forgot-password-page-error-message').html('Invalid user email.');
 $('#forgot-loading').html('');
 } else if(msg == 'sent') {
 $('#forgot-password-page-body').html('<p style="height:50px;width:200px;vertical-align:middle;">You will receive an email soon.</p>');
 }
}

function toggle_forms(form1, form2){
 $('#'+form1).toggle();
 $('#'+form2).toggle();
}

function clear_form(){
 $('#login-page-error-message').html('');
 $('#login-page-user-email').val('');
 $('#login-page-user-password').val('');
}

function tell_friend(form_id) {
 $.ajax({
 type: "POST",
 url: 'home/send_tell_friend',
 data: $('#'+form_id).serialize(),
 success: function(msg){
 $('#tell-friend-container').html(unescape(msg));
 if(msg == 'sent'){
 tb_remove();
 }
 }
 });
}

function receive_email_process(){
 $('#loading2').html('<img style="vertical-align:middle;" src="/images/loading.gif" /> <span class="orange-link">loading...</span>');
 ajax_request('email-notification-form', '/profile/ajax_email_notification', 'receive_email_response');
}

function receive_email_response(msg) {
 if(msg == 'changed') {
 $('#email-notification-settings').html('<h2>Your email notofication settings has been changed.</h2>');
 } else {
 $('#email-notification-block').html(unescape(msg));
 }
}

function featuredUser(id, isFeatured){
 var msg;
 if(isFeatured == true){
 msg = 'Are you sure you want to make this user a featured user?';
 } else {
 msg = 'Are you sure you want to make this user not featured user?';
 }
 if(confirm(msg)){
 $.ajax({
 type: "POST",
 url: 'admin/user/featured_user/'+id,
 success: function(html){
 if(isFeatured == true){
 alert('This user is featured now');
 } else {
 alert('This user is not featured now');
 }
 window.location.reload();
 }
 });
 } else {
 if(isFeatured == true){
 $('#featured-' + id).attr('checked', 0);
 } else {
 $('#featured-' + id).attr('checked', 1);
 }
 }
}

function show_tab(tab1_id, tab2_id){
 $('#'+tab1_id).show();
 $('#'+tab2_id).hide();
 $('#'+tab1_id+'-tab').addClass('selected');
 $('#'+tab2_id+'-tab').removeClass('selected');
}

var cssdropdown={
disappeardelay: 300, //set delay in miliseconds before menu disappears onmouseout
dropdownindicator: '', //specify full HTML to add to end of each menu item with a drop down menu
enablereveal: [true, 5], //enable swipe effect? [true/false, steps (Number of animation steps. Integer between 1-20. Smaller=faster)]
enableiframeshim: 1, //enable "iframe shim" in IE5.5 to IE7? (1=yes, 0=no)

//No need to edit beyond here////////////////////////

dropmenuobj: null, asscmenuitem: null, domsupport: document.all || document.getElementById, standardbody: null, iframeshimadded: false, revealtimers: {},

getposOffset:function(what, offsettype){
 var totaloffset=(offsettype=="left")? what.offsetLeft : what.offsetTop;
 var parentEl=what.offsetParent;
 while (parentEl!=null){
 totaloffset=(offsettype=="left")? totaloffset+parentEl.offsetLeft : totaloffset+parentEl.offsetTop;
 parentEl=parentEl.offsetParent;
 }
 return totaloffset;
},


css:function(el, targetclass, action){
 var needle=new RegExp("(^|\\s+)"+targetclass+"($|\\s+)", "ig")
 if (action=="check")
 return needle.test(el.className)
 else if (action=="remove")
 el.className=el.className.replace(needle, "")
 else if (action=="add" && !needle.test(el.className))
 el.className+=" "+targetclass
},

showmenu:function(dropmenu, e){
 if (this.enablereveal[0]){
 if (!dropmenu._trueheight || dropmenu._trueheight<10)
 dropmenu._trueheight=dropmenu.offsetHeight
 clearTimeout(this.revealtimers[dropmenu.id])
 dropmenu.style.height=dropmenu._curheight=0
 dropmenu.style.overflow="hidden"
 dropmenu.style.visibility="visible"
 this.revealtimers[dropmenu.id]=setInterval(function(){cssdropdown.revealmenu(dropmenu)}, 10)
 dropmenu.style.position="relative"
 }
 else{
 dropmenu.style.visibility="visible"
 }
 this.css(this.asscmenuitem, "selected", "add")
},

revealmenu:function(dropmenu, dir){
 var curH=dropmenu._curheight, maxH=dropmenu._trueheight, steps=this.enablereveal[1]
 if (curH<maxH){
 var newH=Math.min(curH, maxH)
 dropmenu.style.height=newH+"px"
 dropmenu._curheight= newH + Math.round((maxH-newH)/steps) + 1
 }
 else{ //if done revealing menu
 dropmenu.style.height="auto"
 dropmenu.style.overflow="hidden"
 clearInterval(this.revealtimers[dropmenu.id])
 }
},

clearbrowseredge:function(obj, whichedge){
 var edgeoffset=0
 if (whichedge=="rightedge"){
 var windowedge=document.all && !window.opera? this.standardbody.scrollLeft+this.standardbody.clientWidth-15 : window.pageXOffset+window.innerWidth-15
 var dropmenuW=this.dropmenuobj.offsetWidth
 if (windowedge-this.dropmenuobj.x < dropmenuW) //move menu to the left?
 edgeoffset=dropmenuW-obj.offsetWidth
 }
 else{
 var topedge=document.all && !window.opera? this.standardbody.scrollTop : window.pageYOffset
 var windowedge=document.all && !window.opera? this.standardbody.scrollTop+this.standardbody.clientHeight-15 : window.pageYOffset+window.innerHeight-18
 var dropmenuH=this.dropmenuobj._trueheight
 if (windowedge-this.dropmenuobj.y < dropmenuH){ //move up?
 edgeoffset=dropmenuH+obj.offsetHeight
 if ((this.dropmenuobj.y-topedge)<dropmenuH) //up no good either?
 edgeoffset=this.dropmenuobj.y+obj.offsetHeight-topedge
 }
 }
 return edgeoffset
},

dropit:function(obj, e, dropmenuID){
 if (this.dropmenuobj!=null) //hide previous menu
 this.hidemenu() //hide menu
 this.clearhidemenu()
 this.dropmenuobj=document.getElementById(dropmenuID) //reference drop down menu
 this.asscmenuitem=obj //reference associated menu item
 this.showmenu(this.dropmenuobj, e)
// this.dropmenuobj.x=this.getposOffset(obj, "left")
// this.dropmenuobj.y=this.getposOffset(obj, "top")
// this.dropmenuobj.postion="relative"
// this.dropmenuobj.style.left=this.dropmenuobj.x-this.clearbrowseredge(obj, "rightedge")+"px"
// this.dropmenuobj.style.top=this.dropmenuobj.y-this.clearbrowseredge(obj, "bottomedge")+obj.offsetHeight+1+"px"
 this.shimobject.style.position="relative"
 this.positionshim() //call iframe shim function
},

positionshim:function(){ //display iframe shim function
 if (this.iframeshimadded){
 if (this.dropmenuobj.style.visibility=="visible"){
 this.shimobject.style.width=this.dropmenuobj.offsetWidth+"px"
 this.shimobject.style.height=this.dropmenuobj._trueheight+"px"
 //this.shimobject.style.left=parseInt(this.dropmenuobj.style.left)+"px"
 //this.shimobject.style.top=parseInt(this.dropmenuobj.style.top)+"px"
 this.shimobject.style.position="relative"
 this.shimobject.style.display="block"
 }
 }
},

hideshim:function(){
 if (this.iframeshimadded)
 this.shimobject.style.display='none'
},

isContained:function(m, e){
 var e=window.event || e
 var c=e.relatedTarget || ((e.type=="mouseover")? e.fromElement : e.toElement)
 while (c && c!=m)try {c=c.parentNode} catch(e){c=m}
 if (c==m)
 return true
 else
 return false
},

dynamichide:function(m, e){
 if (!this.isContained(m, e)){
 this.delayhidemenu()
 }
},

delayhidemenu:function(){
 this.delayhide=setTimeout("cssdropdown.hidemenu()", this.disappeardelay) //hide menu
},

hidemenu:function(){
 this.css(this.asscmenuitem, "selected", "remove")
 this.dropmenuobj.style.visibility='hidden'
 //this.dropmenuobj.style.left=this.dropmenuobj.style.top="-1000px"
 this.dropmenuobj.style.position="relative"
 this.hideshim()
},

clearhidemenu:function(){
 if (this.delayhide!="undefined")
 clearTimeout(this.delayhide)
},

addEvent:function(target, functionref, tasktype){
 if (target.addEventListener)
 target.addEventListener(tasktype, functionref, false);
 else if (target.attachEvent)
 target.attachEvent('on'+tasktype, function(){return functionref.call(target, window.event)});
},

startchrome:function(){
 if (!this.domsupport)
 return
 this.standardbody=(document.compatMode=="CSS1Compat")? document.documentElement : document.body
 for (var ids=0; ids<arguments.length; ids++){
 var menuitems=document.getElementById(arguments[ids]).getElementsByTagName("a")
 for (var i=0; i<menuitems.length; i++){
 if (menuitems[i].getAttribute("rel")){
 var relvalue=menuitems[i].getAttribute("rel")
 var asscdropdownmenu=document.getElementById(relvalue)
 this.addEvent(asscdropdownmenu, function(){cssdropdown.clearhidemenu()}, "mouseover")
 this.addEvent(asscdropdownmenu, function(e){cssdropdown.dynamichide(this, e)}, "mouseout")
 this.addEvent(asscdropdownmenu, function(){cssdropdown.delayhidemenu()}, "click")
 try{
 menuitems[i].innerHTML=menuitems[i].innerHTML+" "+this.dropdownindicator
 }catch(e){}
 this.addEvent(menuitems[i], function(e){ //show drop down menu when main menu items are mouse over-ed
 if (!cssdropdown.isContained(this, e)){
 var evtobj=window.event || e
 cssdropdown.dropit(this, evtobj, this.getAttribute("rel"))
 }
 }, "mouseover")
 this.addEvent(menuitems[i], function(e){cssdropdown.dynamichide(this, e)}, "mouseout") //hide drop down menu when main menu items are mouse out
 this.addEvent(menuitems[i], function(){cssdropdown.delayhidemenu()}, "click") //hide drop down menu when main menu items are clicked on
 }
 } //end inner for
 } //end outer for
 if (this.enableiframeshim && document.all && !window.XDomainRequest && !this.iframeshimadded){ //enable iframe shim in IE5.5 thru IE7?
 document.write('<IFRAME id="iframeshim" src="about:blank" frameBorder="0" scrolling="no" style="left:0; top:0; position:absolute; display:none;z-index:90; background: transparent;"></IFRAME>')
 this.shimobject=document.getElementById("iframeshim") //reference iframe object
 this.shimobject.style.filter='progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)'
 this.iframeshimadded=true
 }
} //end startchrome

}//end of varcssdropdown

/*
 * Thickbox 3.1 - One Box To Rule Them All.
 * By Cody Lindley (http://www.codylindley.com)
 * Copyright (c) 2007 cody lindley
 * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php
*/

//var tb_pathToImage = "images/loadingAnimation.gif";
var tb_pathToImage = "images/loading.gif";

/*!!!!!!!!!!!!!!!!! edit below this line at your own risk !!!!!!!!!!!!!!!!!!!!!!!*/

//on page load call tb_init
$(document).ready(function(){
 tb_init('a.thickbox, area.thickbox, input.thickbox');//pass where to apply thickbox
 imgLoader = new Image();// preload image
 imgLoader.src = tb_pathToImage;
});

//add thickbox to href & area elements that have a class of .thickbox
function tb_init(domChunk){
 $(domChunk).click(function(){
 var t = this.title || this.name || null;
 var a = this.href || this.alt;
 var g = this.rel || false;
 tb_show(t,a,g);
 this.blur();
 return false;
 });
}

function tb_show(caption, url, imageGroup) {//function called when the user clicks on a thickbox link

 try {
 if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
 $("body","html").css({height: "100%", width: "100%"});
 $("html").css("overflow","hidden");
 if (document.getElementById("TB_HideSelect") === null) {//iframe to hide select elements in ie6
 $("body").append("<iframe id='TB_HideSelect'></iframe><div id='TB_overlay'></div><div id='TB_window'></div>");
 $("#TB_overlay").click(tb_remove);
 }
 }else{//all others
 if(document.getElementById("TB_overlay") === null){
 $("body").append("<div id='TB_overlay'></div><div id='TB_window'></div>");
 $("#TB_overlay").click(tb_remove);
 }
 }

 if(tb_detectMacXFF()){
 $("#TB_overlay").addClass("TB_overlayMacFFBGHack");//use png overlay so hide flash
 }else{
 $("#TB_overlay").addClass("TB_overlayBG");//use background and opacity
 }

 if(caption===null){caption="";}
 //$("body").append("<div id='TB_load'><img src='"+imgLoader.src+"' /></div>");//add loader to the page
 $("body").append("<div id='TB_load'><img src='"+imgLoader.src+"' /> <span class='orange-link'>loading...</span></div>");//add loader to the page
 $('#TB_load').show();//show loader

 var baseURL;
 if(url.indexOf("?")!==-1){ //ff there is a query string involved
 baseURL = url.substr(0, url.indexOf("?"));
 }else{
 baseURL = url;
 }

 var urlString = /\.jpg$|\.jpeg$|\.png$|\.gif$|\.bmp$/;
 var urlType = baseURL.toLowerCase().match(urlString);

 if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif' || urlType == '.bmp'){//code to show images

 TB_PrevCaption = "";
 TB_PrevURL = "";
 TB_PrevHTML = "";
 TB_NextCaption = "";
 TB_NextURL = "";
 TB_NextHTML = "";
 TB_imageCount = "";
 TB_FoundURL = false;
 if(imageGroup){
 TB_TempArray = $("a[@rel="+imageGroup+"]").get();
 for (TB_Counter = 0; ((TB_Counter < TB_TempArray.length) && (TB_NextHTML === "")); TB_Counter++) {
 var urlTypeTemp = TB_TempArray[TB_Counter].href.toLowerCase().match(urlString);
 if (!(TB_TempArray[TB_Counter].href == url)) {
 if (TB_FoundURL) {
 TB_NextCaption = TB_TempArray[TB_Counter].title;
 TB_NextURL = TB_TempArray[TB_Counter].href;
 TB_NextHTML = "<span id='TB_next'>&nbsp;&nbsp;<a href='#'>Next &gt;</a></span>";
 } else {
 TB_PrevCaption = TB_TempArray[TB_Counter].title;
 TB_PrevURL = TB_TempArray[TB_Counter].href;
 TB_PrevHTML = "<span id='TB_prev'>&nbsp;&nbsp;<a href='#'>&lt; Prev</a></span>";
 }
 } else {
 TB_FoundURL = true;
 TB_imageCount = "Image " + (TB_Counter + 1) +" of "+ (TB_TempArray.length);
 }
 }
 }

 imgPreloader = new Image();
 imgPreloader.onload = function(){
 imgPreloader.onload = null;

 // Resizing large images - orginal by Christian Montoya edited by me.
 var pagesize = tb_getPageSize();
 var x = pagesize[0] - 150;
 var y = pagesize[1] - 150;
 var imageWidth = imgPreloader.width;
 var imageHeight = imgPreloader.height;
 if (imageWidth > x) {
 imageHeight = imageHeight * (x / imageWidth);
 imageWidth = x;
 if (imageHeight > y) {
 imageWidth = imageWidth * (y / imageHeight);
 imageHeight = y;
 }
 } else if (imageHeight > y) {
 imageWidth = imageWidth * (y / imageHeight);
 imageHeight = y;
 if (imageWidth > x) {
 imageHeight = imageHeight * (x / imageWidth);
 imageWidth = x;
 }
 }
 // End Resizing

 TB_WIDTH = imageWidth + 30;
 TB_HEIGHT = imageHeight + 60;
 $("#TB_window").append("<a href='' id='TB_ImageOff' title='Close'><img id='TB_Image' src='"+url+"' width='"+imageWidth+"' height='"+imageHeight+"' alt='"+caption+"'/></a>" + "<div id='TB_caption'>"+caption+"<div id='TB_secondLine'>" + TB_imageCount + TB_PrevHTML + TB_NextHTML + "</div></div><div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton' title='Close'>close</a> or Esc Key</div>");

 $("#TB_closeWindowButton").click(tb_remove);

 if (!(TB_PrevHTML === "")) {
 function goPrev(){
 if($(document).unbind("click",goPrev)){$(document).unbind("click",goPrev);}
 $("#TB_window").remove();
 $("body").append("<div id='TB_window'></div>");
 tb_show(TB_PrevCaption, TB_PrevURL, imageGroup);
 return false;
 }
 $("#TB_prev").click(goPrev);
 }

 if (!(TB_NextHTML === "")) {
 function goNext(){
 $("#TB_window").remove();
 $("body").append("<div id='TB_window'></div>");
 tb_show(TB_NextCaption, TB_NextURL, imageGroup);
 return false;
 }
 $("#TB_next").click(goNext);

 }

 document.onkeydown = function(e){
 if (e == null) { // ie
 keycode = event.keyCode;
 } else { // mozilla
 keycode = e.which;
 }
 if(keycode == 27){ // close
 tb_remove();
 } else if(keycode == 190){ // display previous image
 if(!(TB_NextHTML == "")){
 document.onkeydown = "";
 goNext();
 }
 } else if(keycode == 188){ // display next image
 if(!(TB_PrevHTML == "")){
 document.onkeydown = "";
 goPrev();
 }
 }
 };

 tb_position();
 $("#TB_load").remove();
 $("#TB_ImageOff").click(tb_remove);
 $("#TB_window").css({display:"block"}); //for safari using css instead of show
 };

 imgPreloader.src = url;
 }else{//code to show html

 var queryString = url.replace(/^[^\?]+\??/,'');
 var params = tb_parseQuery( queryString );

 TB_WIDTH = (params['width']*1) + 30 || 630; //ibrahim: defaults to 630 if no paramaters were added to URL
 TB_HEIGHT = (params['height']*1) + 40 || 545; //ibrahim: defaults to 440 if no paramaters were added to URL
 ajaxContentW = TB_WIDTH - 30;
 ajaxContentH = TB_HEIGHT - 45;

 if(url.indexOf('TB_iframe') != -1){// either iframe or ajax window
 urlNoQuery = url.split('TB_');
 $("#TB_iframeContent").remove();
 if(params['modal'] != "true"){//iframe no modal
 $("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='Close'>close</a> or Esc Key</div></div><iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;' > </iframe>");
 }else{//iframe modal
 $("#TB_overlay").unbind();
 $("#TB_window").append("<iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;'> </iframe>");
 }
 }else{// not an iframe, ajax
 if($("#TB_window").css("display") != "block"){
 if(params['modal'] != "true"){//ajax no modal
 $("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div></div><div id='TB_ajaxContent' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px'></div>");
 }else{//ajax modal
 $("#TB_overlay").unbind();
 $("#TB_window").append("<div id='TB_ajaxContent' class='TB_modal' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>");
 }
 }else{//this means the window is already up, we are just loading new content via ajax
 $("#TB_ajaxContent")[0].style.width = ajaxContentW +"px";
 $("#TB_ajaxContent")[0].style.height = ajaxContentH +"px";
 $("#TB_ajaxContent")[0].scrollTop = 0;
 $("#TB_ajaxWindowTitle").html(caption);
 }
 }

 $("#TB_closeWindowButton").click(tb_remove);

 if(url.indexOf('TB_inline') != -1){
 $("#TB_ajaxContent").append($('#' + params['inlineId']).children());
 $("#TB_window").unload(function () {
 $('#' + params['inlineId']).append( $("#TB_ajaxContent").children() ); // move elements back when you're finished
 });
 tb_position();
 $("#TB_load").remove();
 $("#TB_window").css({display:"block"});
 }else if(url.indexOf('TB_iframe') != -1){
 tb_position();
 if($.browser.safari){//safari needs help because it will not fire iframe onload
 $("#TB_load").remove();
 $("#TB_window").css({display:"block"});
 }
 }else{
 $("#TB_ajaxContent").load(url += "&random=" + (new Date().getTime()),function(){//to do a post change this load method
 tb_position();
 $("#TB_load").remove();
 tb_init("#TB_ajaxContent a.thickbox");
 $("#TB_window").css({display:"block"});
 });
 }

 }

 if(!params['modal']){
 document.onkeyup = function(e){
 if (e == null) { // ie
 keycode = event.keyCode;
 } else { // mozilla
 keycode = e.which;
 }
 if(keycode == 27){ // close
 tb_remove();
 }
 };
 }

 } catch(e) {
 //nothing here
 }
}

//helper functions below
function tb_showIframe(){
 $("#TB_load").remove();
 $("#TB_window").css({display:"block"});
}

function tb_remove() {
 $("#TB_imageOff").unbind("click");
 $("#TB_closeWindowButton").unbind("click");
 $("#TB_window").fadeOut("fast",function(){$('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove();});
 $("#TB_load").remove();
 if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
 $("body","html").css({height: "auto", width: "auto"});
 $("html").css("overflow","");
 }
 document.onkeydown = "";
 document.onkeyup = "";
 return false;
}

function tb_position() {
$("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'});
 if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) { // take away IE6
 $("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'});
 }

/*$("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'});
 if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) { // take away IE6
 $("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'});
 }
 else {
 var scrolledDown = $(document).scrollTop()-200;
 $("#TB_window").css("margin-top", scrolledDown +"px");

 }*/ // ibrahim: the commented script is a patch for the IE6 position for the thickbox
}

function tb_parseQuery ( query ) {
 var Params = {};
 if ( ! query ) {return Params;}// return empty object
 var Pairs = query.split(/[;&]/);
 for ( var i = 0; i < Pairs.length; i++ ) {
 var KeyVal = Pairs[i].split('=');
 if ( ! KeyVal || KeyVal.length != 2 ) {continue;}
 var key = unescape( KeyVal[0] );
 var val = unescape( KeyVal[1] );
 val = val.replace(/\+/g, ' ');
 Params[key] = val;
 }
 return Params;
}

function tb_getPageSize(){
 var de = document.documentElement;
 var w = window.innerWidth || self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
 var h = window.innerHeight || self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
 arrayPageSize = [w,h];
 return arrayPageSize;
}

function tb_detectMacXFF() {
 var userAgent = navigator.userAgent.toLowerCase();
 if (userAgent.indexOf('mac') != -1 && userAgent.indexOf('firefox')!=-1) {
 return true;
 }
}



/*
 * jQuery UI 1.6rc5
 *
 * Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI
 */
;(function($) {

var _remove = $.fn.remove,
 isFF2 = $.browser.mozilla && (parseFloat($.browser.version) < 1.9);

//Helper functions and ui object
$.ui = {
 version: "1.6rc5",

 // $.ui.plugin is deprecated. Use the proxy pattern instead.
 plugin: {
 add: function(module, option, set) {
 var proto = $.ui[module].prototype;
 for(var i in set) {
 proto.plugins[i] = proto.plugins[i] || [];
 proto.plugins[i].push([option, set[i]]);
 }
 },
 call: function(instance, name, args) {
 var set = instance.plugins[name];
 if(!set) { return; }

 for (var i = 0; i < set.length; i++) {
 if (instance.options[set[i][0]]) {
 set[i][1].apply(instance.element, args);
 }
 }
 }
 },

 contains: function(a, b) {
 return document.compareDocumentPosition
 ? a.compareDocumentPosition(b) & 16
 : a !== b && a.contains(b);
 },

 cssCache: {},
 css: function(name) {
 if ($.ui.cssCache[name]) { return $.ui.cssCache[name]; }
 var tmp = $('<div class="ui-gen"></div>').addClass(name).css({position:'absolute', top:'-5000px', left:'-5000px', display:'block'}).appendTo('body');

 //if (!$.browser.safari)
 //tmp.appendTo('body');

 //Opera and Safari set width and height to 0px instead of auto
 //Safari returns rgba(0,0,0,0) when bgcolor is not set
 $.ui.cssCache[name] = !!(
 (!(/auto|default/).test(tmp.css('cursor')) || (/^[1-9]/).test(tmp.css('height')) || (/^[1-9]/).test(tmp.css('width')) ||
 !(/none/).test(tmp.css('backgroundImage')) || !(/transparent|rgba\(0, 0, 0, 0\)/).test(tmp.css('backgroundColor')))
 );
 try { $('body').get(0).removeChild(tmp.get(0)); } catch(e){}
 return $.ui.cssCache[name];
 },

 hasScroll: function(el, a) {

 //If overflow is hidden, the element might have extra content, but the user wants to hide it
 if ($(el).css('overflow') == 'hidden') { return false; }

 var scroll = (a && a == 'left') ? 'scrollLeft' : 'scrollTop',
 has = false;

 if (el[scroll] > 0) { return true; }

 // TODO: determine which cases actually cause this to happen
 // if the element doesn't have the scroll set, see if it's possible to
 // set the scroll
 el[scroll] = 1;
 has = (el[scroll] > 0);
 el[scroll] = 0;
 return has;
 },

 isOverAxis: function(x, reference, size) {
 //Determines when x coordinate is over "b" element axis
 return (x > reference) && (x < (reference + size));
 },

 isOver: function(y, x, top, left, height, width) {
 //Determines when x, y coordinates is over "b" element
 return $.ui.isOverAxis(y, top, height) && $.ui.isOverAxis(x, left, width);
 },

 keyCode: {
 BACKSPACE: 8,
 CAPS_LOCK: 20,
 COMMA: 188,
 CONTROL: 17,
 DELETE: 46,
 DOWN: 40,
 END: 35,
 ENTER: 13,
 ESCAPE: 27,
 HOME: 36,
 INSERT: 45,
 LEFT: 37,
 NUMPAD_ADD: 107,
 NUMPAD_DECIMAL: 110,
 NUMPAD_DIVIDE: 111,
 NUMPAD_ENTER: 108,
 NUMPAD_MULTIPLY: 106,
 NUMPAD_SUBTRACT: 109,
 PAGE_DOWN: 34,
 PAGE_UP: 33,
 PERIOD: 190,
 RIGHT: 39,
 SHIFT: 16,
 SPACE: 32,
 TAB: 9,
 UP: 38
 }
};

// WAI-ARIA normalization
if (isFF2) {
 var attr = $.attr,
 removeAttr = $.fn.removeAttr,
 ariaNS = "http://www.w3.org/2005/07/aaa",
 ariaState = /^aria-/,
 ariaRole = /^wairole:/;

 $.attr = function(elem, name, value) {
 var set = value !== undefined;

 return (name == 'role'
 ? (set
 ? attr.call(this, elem, name, "wairole:" + value)
 : (attr.apply(this, arguments) || "").replace(ariaRole, ""))
 : (ariaState.test(name)
 ? (set
 ? elem.setAttributeNS(ariaNS,
 name.replace(ariaState, "aaa:"), value)
 : attr.call(this, elem, name.replace(ariaState, "aaa:")))
 : attr.apply(this, arguments)));
 };

 $.fn.removeAttr = function(name) {
 return (ariaState.test(name)
 ? this.each(function() {
 this.removeAttributeNS(ariaNS, name.replace(ariaState, ""));
 }) : removeAttr.call(this, name));
 };
}

//jQuery plugins
$.fn.extend({
 remove: function() {
 // Safari has a native remove event which actually removes DOM elements,
 // so we have to use triggerHandler instead of trigger (#3037).
 $("*", this).add(this).each(function() {
 $(this).triggerHandler("remove");
 });
 return _remove.apply(this, arguments );
 },

 enableSelection: function() {
 return this
 .attr('unselectable', 'off')
 .css('MozUserSelect', '')
 .unbind('selectstart.ui');
 },

 disableSelection: function() {
 return this
 .attr('unselectable', 'on')
 .css('MozUserSelect', 'none')
 .bind('selectstart.ui', function() { return false; });
 },

 scrollParent: function() {
 var scrollParent;
 if(($.browser.msie && (/(static|relative)/).test(this.css('position'))) || (/absolute/).test(this.css('position'))) {
 scrollParent = this.parents().filter(function() {
 return (/(relative|absolute|fixed)/).test($.curCSS(this,'position',1)) && (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
 }).eq(0);
 } else {
 scrollParent = this.parents().filter(function() {
 return (/(auto|scroll)/).test($.curCSS(this,'overflow',1)+$.curCSS(this,'overflow-y',1)+$.curCSS(this,'overflow-x',1));
 }).eq(0);
 }

 return (/fixed/).test(this.css('position')) || !scrollParent.length ? $(document) : scrollParent;
 }
});


//Additional selectors
$.extend($.expr[':'], {
 data: function(elem, i, match) {
 return !!$.data(elem, match[3]);
 },

 // TODO: add support for object, area
 tabbable: function(elem) {
 var nodeName = elem.nodeName.toLowerCase();
 function isVisible(element) {
 return !($(element).is(':hidden') || $(element).parents(':hidden').length);
 }

 return (
 // in tab order
 elem.tabIndex >= 0 &&

 ( // filter node types that participate in the tab order

 // anchor tag
 ('a' == nodeName && elem.href) ||

 // enabled form element
 (/input|select|textarea|button/.test(nodeName) &&
 'hidden' != elem.type && !elem.disabled)
 ) &&

 // visible on page
 isVisible(elem)
 );
 }
});


// $.widget is a factory to create jQuery plugins
// taking some boilerplate code out of the plugin code
function getter(namespace, plugin, method, args) {
 function getMethods(type) {
 var methods = $[namespace][plugin][type] || [];
 return (typeof methods == 'string' ? methods.split(/,?\s+/) : methods);
 }

 var methods = getMethods('getter');
 if (args.length == 1 && typeof args[0] == 'string') {
 methods = methods.concat(getMethods('getterSetter'));
 }
 return ($.inArray(method, methods) != -1);
}

$.widget = function(name, prototype) {
 var namespace = name.split(".")[0];
 name = name.split(".")[1];

 // create plugin method
 $.fn[name] = function(options) {
 var isMethodCall = (typeof options == 'string'),
 args = Array.prototype.slice.call(arguments, 1);

 // prevent calls to internal methods
 if (isMethodCall && options.substring(0, 1) == '_') {
 return this;
 }

 // handle getter methods
 if (isMethodCall && getter(namespace, name, options, args)) {
 var instance = $.data(this[0], name);
 return (instance ? instance[options].apply(instance, args)
 : undefined);
 }

 // handle initialization and non-getter methods
 return this.each(function() {
 var instance = $.data(this, name);

 // constructor
 (!instance && !isMethodCall &&
 $.data(this, name, new $[namespace][name](this, options)));

 // method call
 (instance && isMethodCall && $.isFunction(instance[options]) &&
 instance[options].apply(instance, args));
 });
 };

 // create widget constructor
 $[namespace] = $[namespace] || {};
 $[namespace][name] = function(element, options) {
 var self = this;

 this.namespace = namespace;
 this.widgetName = name;
 this.widgetEventPrefix = $[namespace][name].eventPrefix || name;
 this.widgetBaseClass = namespace + '-' + name;

 this.options = $.extend({},
 $.widget.defaults,
 $[namespace][name].defaults,
 $.metadata && $.metadata.get(element)[name],
 options);

 this.element = $(element)
 .bind('setData.' + name, function(event, key, value) {
 if (event.target == element) {
 return self._setData(key, value);
 }
 })
 .bind('getData.' + name, function(event, key) {
 if (event.target == element) {
 return self._getData(key);
 }
 })
 .bind('remove', function() {
 return self.destroy();
 });

 this._init();
 };

 // add widget prototype
 $[namespace][name].prototype = $.extend({}, $.widget.prototype, prototype);

 // TODO: merge getter and getterSetter properties from widget prototype
 // and plugin prototype
 $[namespace][name].getterSetter = 'option';
};

$.widget.prototype = {
 _init: function() {},
 destroy: function() {
 this.element.removeData(this.widgetName)
 .removeClass(this.widgetBaseClass + '-disabled' + ' ' + this.namespace + '-state-disabled')
 .removeAttr('aria-disabled');
 },

 option: function(key, value) {
 var options = key,
 self = this;

 if (typeof key == "string") {
 if (value === undefined) {
 return this._getData(key);
 }
 options = {};
 options[key] = value;
 }

 $.each(options, function(key, value) {
 self._setData(key, value);
 });
 },
 _getData: function(key) {
 return this.options[key];
 },
 _setData: function(key, value) {
 this.options[key] = value;

 if (key == 'disabled') {
 this.element
 [value ? 'addClass' : 'removeClass'](
 this.widgetBaseClass + '-disabled' + ' ' +
 this.namespace + '-state-disabled')
 .attr("aria-disabled", value);
 }
 },

 enable: function() {
 this._setData('disabled', false);
 },
 disable: function() {
 this._setData('disabled', true);
 },

 _trigger: function(type, event, data) {
 var callback = this.options[type],
 eventName = (type == this.widgetEventPrefix
 ? type : this.widgetEventPrefix + type);

 event = $.Event(event);
 event.type = eventName;

 this.element.trigger(event, data);

 return !($.isFunction(callback) && callback.call(this.element[0], event, data) === false
 || event.isDefaultPrevented());
 }
};

$.widget.defaults = {
 disabled: false
};


/** Mouse Interaction Plugin **/

$.ui.mouse = {
 _mouseInit: function() {
 var self = this;

 this.element
 .bind('mousedown.'+this.widgetName, function(event) {
 return self._mouseDown(event);
 })
 .bind('click.'+this.widgetName, function(event) {
 if(self._preventClickEvent) {
 self._preventClickEvent = false;
 return false;
 }
 });

 // Prevent text selection in IE
 if ($.browser.msie) {
 this._mouseUnselectable = this.element.attr('unselectable');
 this.element.attr('unselectable', 'on');
 }

 this.started = false;
 },

 // TODO: make sure destroying one instance of mouse doesn't mess with
 // other instances of mouse
 _mouseDestroy: function() {
 this.element.unbind('.'+this.widgetName);

 // Restore text selection in IE
 ($.browser.msie
 && this.element.attr('unselectable', this._mouseUnselectable));
 },

 _mouseDown: function(event) {
 // we may have missed mouseup (out of window)
 (this._mouseStarted && this._mouseUp(event));

 this._mouseDownEvent = event;

 var self = this,
 btnIsLeft = (event.which == 1),
 elIsCancel = (typeof this.options.cancel == "string" ? $(event.target).parents().add(event.target).filter(this.options.cancel).length : false);
 if (!btnIsLeft || elIsCancel || !this._mouseCapture(event)) {
 return true;
 }

 this.mouseDelayMet = !this.options.delay;
 if (!this.mouseDelayMet) {
 this._mouseDelayTimer = setTimeout(function() {
 self.mouseDelayMet = true;
 }, this.options.delay);
 }

 if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
 this._mouseStarted = (this._mouseStart(event) !== false);
 if (!this._mouseStarted) {
 event.preventDefault();
 return true;
 }
 }

 // these delegates are required to keep context
 this._mouseMoveDelegate = function(event) {
 return self._mouseMove(event);
 };
 this._mouseUpDelegate = function(event) {
 return self._mouseUp(event);
 };
 $(document)
 .bind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
 .bind('mouseup.'+this.widgetName, this._mouseUpDelegate);

 // preventDefault() is used to prevent the selection of text here -
 // however, in Safari, this causes select boxes not to be selectable
 // anymore, so this fix is needed
 ($.browser.safari || event.preventDefault());

 return true;
 },

 _mouseMove: function(event) {
 // IE mouseup check - mouseup happened when mouse was out of window
 if ($.browser.msie && !event.button) {
 return this._mouseUp(event);
 }

 if (this._mouseStarted) {
 this._mouseDrag(event);
 return event.preventDefault();
 }

 if (this._mouseDistanceMet(event) && this._mouseDelayMet(event)) {
 this._mouseStarted =
 (this._mouseStart(this._mouseDownEvent, event) !== false);
 (this._mouseStarted ? this._mouseDrag(event) : this._mouseUp(event));
 }

 return !this._mouseStarted;
 },

 _mouseUp: function(event) {
 $(document)
 .unbind('mousemove.'+this.widgetName, this._mouseMoveDelegate)
 .unbind('mouseup.'+this.widgetName, this._mouseUpDelegate);

 if (this._mouseStarted) {
 this._mouseStarted = false;
 this._preventClickEvent = true;
 this._mouseStop(event);
 }

 return false;
 },

 _mouseDistanceMet: function(event) {
 return (Math.max(
 Math.abs(this._mouseDownEvent.pageX - event.pageX),
 Math.abs(this._mouseDownEvent.pageY - event.pageY)
 ) >= this.options.distance
 );
 },

 _mouseDelayMet: function(event) {
 return this.mouseDelayMet;
 },

 // These are placeholder methods, to be overriden by extending plugin
 _mouseStart: function(event) {},
 _mouseDrag: function(event) {},
 _mouseStop: function(event) {},
 _mouseCapture: function(event) { return true; }
};

$.ui.mouse.defaults = {
 cancel: null,
 distance: 1,
 delay: 0
};

})(jQuery);
/*
 * jQuery UI Draggable 1.6rc5
 *
 * Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Draggables
 *
 * Depends:
 * ui.core.js
 */
(function($) {

$.widget("ui.draggable", $.extend({}, $.ui.mouse, {

 _init: function() {

 if (this.options.helper == 'original' && !(/^(?:r|a|f)/).test(this.element.css("position")))
 this.element[0].style.position = 'relative';

 (this.options.cssNamespace && this.element.addClass(this.options.cssNamespace+"-draggable"));
 (this.options.disabled && this.element.addClass(this.options.cssNamespace+'-draggable-disabled'));

 this._mouseInit();

 },

 destroy: function() {
 if(!this.element.data('draggable')) return;
 this.element.removeData("draggable").unbind(".draggable").removeClass(this.options.cssNamespace+'-draggable '+this.options.cssNamespace+'-draggable-dragging '+this.options.cssNamespace+'-draggable-disabled');
 this._mouseDestroy();
 },

 _mouseCapture: function(event) {

 var o = this.options;

 if (this.helper || o.disabled || $(event.target).is('.'+this.options.cssNamespace+'-resizable-handle'))
 return false;

 //Quit if we're not on a valid handle
 this.handle = this._getHandle(event);
 if (!this.handle)
 return false;

 return true;

 },

 _mouseStart: function(event) {

 var o = this.options;

 //Create and append the visible helper
 this.helper = this._createHelper(event);

 //Cache the helper size
 this._cacheHelperProportions();

 //If ddmanager is used for droppables, set the global draggable
 if($.ui.ddmanager)
 $.ui.ddmanager.current = this;

 /*
 * - Position generation -
 * This block generates everything position related - it's the core of draggables.
 */

 //Cache the margins of the original element
 this._cacheMargins();

 //Store the helper's css position
 this.cssPosition = this.helper.css("position");
 this.scrollParent = this.helper.scrollParent();

 //The element's absolute position on the page minus margins
 this.offset = this.element.offset();
 this.offset = {
 top: this.offset.top - this.margins.top,
 left: this.offset.left - this.margins.left
 };

 $.extend(this.offset, {
 click: { //Where the click happened, relative to the element
 left: event.pageX - this.offset.left,
 top: event.pageY - this.offset.top
 },
 parent: this._getParentOffset(),
 relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
 });

 //Generate the original position
 this.originalPosition = this._generatePosition(event);
 this.originalPageX = event.pageX;
 this.originalPageY = event.pageY;

 //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
 if(o.cursorAt)
 this._adjustOffsetFromHelper(o.cursorAt);

 //Set a containment if given in the options
 if(o.containment)
 this._setContainment();

 //Call plugins and callbacks
 this._trigger("start", event);

 //Recache the helper size
 this._cacheHelperProportions();

 //Prepare the droppable offsets
 if ($.ui.ddmanager && !o.dropBehaviour)
 $.ui.ddmanager.prepareOffsets(this, event);

 this.helper.addClass(o.cssNamespace+"-draggable-dragging");
 this._mouseDrag(event, true); //Execute the drag once - this causes the helper not to be visible before getting its correct position
 return true;
 },

 _mouseDrag: function(event, noPropagation) {

 //Compute the helpers position
 this.position = this._generatePosition(event);
 this.positionAbs = this._convertPositionTo("absolute");

 //Call plugins and callbacks and use the resulting position if something is returned
 if (!noPropagation) {
 var ui = this._uiHash();
 this._trigger('drag', event, ui);
 this.position = ui.position;
 }

 if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
 if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';
 if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);

 return false;
 },

 _mouseStop: function(event) {

 //If we are using droppables, inform the manager about the drop
 var dropped = false;
 if ($.ui.ddmanager && !this.options.dropBehaviour)
 dropped = $.ui.ddmanager.drop(this, event);

 //if a drop comes from outside (a sortable)
 if(this.dropped) {
 dropped = this.dropped;
 this.dropped = false;
 }

 if((this.options.revert == "invalid" && !dropped) || (this.options.revert == "valid" && dropped) || this.options.revert === true || ($.isFunction(this.options.revert) && this.options.revert.call(this.element, dropped))) {
 var self = this;
 $(this.helper).animate(this.originalPosition, parseInt(this.options.revertDuration, 10), function() {
 self._trigger("stop", event);
 self._clear();
 });
 } else {
 this._trigger("stop", event);
 this._clear();
 }

 return false;
 },

 _getHandle: function(event) {

 var handle = !this.options.handle || !$(this.options.handle, this.element).length ? true : false;
 $(this.options.handle, this.element)
 .find("*")
 .andSelf()
 .each(function() {
 if(this == event.target) handle = true;
 });

 return handle;

 },

 _createHelper: function(event) {

 var o = this.options;
 var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event])) : (o.helper == 'clone' ? this.element.clone() : this.element);

 if(!helper.parents('body').length)
 helper.appendTo((o.appendTo == 'parent' ? this.element[0].parentNode : o.appendTo));

 if(helper[0] != this.element[0] && !(/(fixed|absolute)/).test(helper.css("position")))
 helper.css("position", "absolute");

 return helper;

 },

 _adjustOffsetFromHelper: function(obj) {
 if(obj.left != undefined) this.offset.click.left = obj.left + this.margins.left;
 if(obj.right != undefined) this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
 if(obj.top != undefined) this.offset.click.top = obj.top + this.margins.top;
 if(obj.bottom != undefined) this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
 },

 _getParentOffset: function() {

 //Get the offsetParent and cache its position
 this.offsetParent = this.helper.offsetParent();
 var po = this.offsetParent.offset();

 // This is a special case where we need to modify a offset calculated on start, since the following happened:
 // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
 // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
 // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
 if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
 po.left += this.scrollParent.scrollLeft();
 po.top += this.scrollParent.scrollTop();
 }

 if((this.offsetParent[0] == document.body && $.browser.mozilla) //Ugly FF3 fix
 || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
 po = { top: 0, left: 0 };

 return {
 top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
 left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
 };

 },

 _getRelativeOffset: function() {

 if(this.cssPosition == "relative") {
 var p = this.element.position();
 return {
 top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
 left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
 };
 } else {
 return { top: 0, left: 0 };
 }

 },

 _cacheMargins: function() {
 this.margins = {
 left: (parseInt(this.element.css("marginLeft"),10) || 0),
 top: (parseInt(this.element.css("marginTop"),10) || 0)
 };
 },

 _cacheHelperProportions: function() {
 this.helperProportions = {
 width: this.helper.outerWidth(),
 height: this.helper.outerHeight()
 };
 },

 _setContainment: function() {

 var o = this.options;
 if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
 if(o.containment == 'document' || o.containment == 'window') this.containment = [
 0 - this.offset.relative.left - this.offset.parent.left,
 0 - this.offset.relative.top - this.offset.parent.top,
 $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
 ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
 ];

 if(!(/^(document|window|parent)$/).test(o.containment)) {
 var ce = $(o.containment)[0];
 var co = $(o.containment).offset();
 var over = ($(ce).css("overflow") != 'hidden');

 this.containment = [
 co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) - this.margins.left,
 co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) - this.margins.top,
 co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - this.helperProportions.width - this.margins.left,
 co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - this.helperProportions.height - this.margins.top
 ];
 }

 },

 _convertPositionTo: function(d, pos) {

 if(!pos) pos = this.position;
 var mod = d == "absolute" ? 1 : -1;
 var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);

 return {
 top: (
 pos.top // The absolute mouse position
 + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent
 + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border)
 - ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod
 ),
 left: (
 pos.left // The absolute mouse position
 + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent
 + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border)
 - ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod
 )
 };

 },

 _generatePosition: function(event) {

 var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);

 // This is another very weird special case that only happens for relative elements:
 // 1. If the css position is relative
 // 2. and the scroll parent is the document or similar to the offset parent
 // we have to refresh the relative offset during the scroll so there are no jumps
 if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) {
 this.offset.relative = this._getRelativeOffset();
 }

 var pageX = event.pageX;
 var pageY = event.pageY;

 /*
 * - Position constraining -
 * Constrain the position to a mix of grid, containment.
 */

 if(this.originalPosition) { //If we are not dragging yet, we won't check for options

 if(this.containment) {
 if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left;
 if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top;
 if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left;
 if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top;
 }

 if(o.grid) {
 var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
 pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;

 var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
 pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
 }

 }

 return {
 top: (
 pageY // The absolute mouse position
 - this.offset.click.top // Click offset (relative to the element)
 - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent
 - this.offset.parent.top // The offsetParent's offset without borders (offset + border)
 + ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )
 ),
 left: (
 pageX // The absolute mouse position
 - this.offset.click.left // Click offset (relative to the element)
 - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent
 - this.offset.parent.left // The offsetParent's offset without borders (offset + border)
 + ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )
 )
 };

 },

 _clear: function() {
 this.helper.removeClass(this.options.cssNamespace+"-draggable-dragging");
 if(this.helper[0] != this.element[0] && !this.cancelHelperRemoval) this.helper.remove();
 //if($.ui.ddmanager) $.ui.ddmanager.current = null;
 this.helper = null;
 this.cancelHelperRemoval = false;
 },

 // From now on bulk stuff - mainly helpers

 _trigger: function(type, event, ui) {
 ui = ui || this._uiHash();
 $.ui.plugin.call(this, type, [event, ui]);
 if(type == "drag") this.positionAbs = this._convertPositionTo("absolute"); //The absolute position has to be recalculated after plugins
 return $.widget.prototype._trigger.call(this, type, event, ui);
 },

 plugins: {},

 _uiHash: function(event) {
 return {
 helper: this.helper,
 position: this.position,
 absolutePosition: this.positionAbs,
 options: this.options
 };
 }

}));

$.extend($.ui.draggable, {
 version: "1.6rc5",
 eventPrefix: "drag",
 defaults: {
 appendTo: "parent",
 axis: false,
 cancel: ":input,option",
 connectToSortable: false,
 containment: false,
 cssNamespace: "ui",
 cursor: "default",
 cursorAt: null,
 delay: 0,
 distance: 1,
 grid: false,
 handle: false,
 helper: "original",
 iframeFix: false,
 opacity: null,
 refreshPositions: false,
 revert: false,
 revertDuration: 500,
 scope: "default",
 scroll: true,
 scrollSensitivity: 20,
 scrollSpeed: 20,
 snap: false,
 snapMode: "both",
 snapTolerance: 20,
 stack: false,
 zIndex: null
 }
});

$.ui.plugin.add("draggable", "connectToSortable", {
 start: function(event, ui) {

 var inst = $(this).data("draggable");
 inst.sortables = [];
 $(ui.options.connectToSortable).each(function() {
 // 'this' points to a string, and should therefore resolved as query, but instead, if the string is assigned to a variable, it loops through the strings properties,
 // so we have to append '' to make it anonymous again
 $(this+'').each(function() {
 if($.data(this, 'sortable')) {
 var sortable = $.data(this, 'sortable');
 inst.sortables.push({
 instance: sortable,
 shouldRevert: sortable.options.revert
 });
 sortable._refreshItems(); //Do a one-time refresh at start to refresh the containerCache
 sortable._trigger("activate", event, inst);
 }
 });
 });

 },
 stop: function(event, ui) {

 //If we are still over the sortable, we fake the stop event of the sortable, but also remove helper
 var inst = $(this).data("draggable");

 $.each(inst.sortables, function() {
 if(this.instance.isOver) {

 this.instance.isOver = 0;

 inst.cancelHelperRemoval = true; //Don't remove the helper in the draggable instance
 this.instance.cancelHelperRemoval = false; //Remove it in the sortable instance (so sortable plugins like revert still work)

 //The sortable revert is supported, and we have to set a temporary dropped variable on the draggable to support revert: 'valid/invalid'
 if(this.shouldRevert) this.instance.options.revert = true;

 //Trigger the stop of the sortable
 this.instance._mouseStop(event);

 //Also propagate receive event, since the sortable is actually receiving a element
 this.instance.element.triggerHandler("sortreceive", [event, $.extend(this.instance._uiHash(), { sender: inst.element })], this.instance.options["receive"]);

 this.instance.options.helper = this.instance.options._helper;

 //If the helper has been the original item, restore properties in the sortable
 if(inst.options.helper == 'original')
 this.instance.currentItem.css({ top: 'auto', left: 'auto' });

 } else {
 this.instance.cancelHelperRemoval = false; //Remove the helper in the sortable instance
 this.instance._trigger("deactivate", event, inst);
 }

 });

 },
 drag: function(event, ui) {

 var inst = $(this).data("draggable"), self = this;

 var checkPos = function(o) {
 var dyClick = this.offset.click.top, dxClick = this.offset.click.left;
 var helperTop = this.positionAbs.top, helperLeft = this.positionAbs.left;
 var itemHeight = o.height, itemWidth = o.width;
 var itemTop = o.top, itemLeft = o.left;

 return $.ui.isOver(helperTop + dyClick, helperLeft + dxClick, itemTop, itemLeft, itemHeight, itemWidth);
 };

 $.each(inst.sortables, function(i) {

 if(checkPos.call(inst, this.instance.containerCache)) {

 //If it intersects, we use a little isOver variable and set it once, so our move-in stuff gets fired only once
 if(!this.instance.isOver) {
 this.instance.isOver = 1;
 //Now we fake the start of dragging for the sortable instance,
 //by cloning the list group item, appending it to the sortable and using it as inst.currentItem
 //We can then fire the start event of the sortable with our passed browser event, and our own helper (so it doesn't create a new one)
 this.instance.currentItem = $(self).clone().appendTo(this.instance.element).data("sortable-item", true);
 this.instance.options._helper = this.instance.options.helper; //Store helper option to later restore it
 this.instance.options.helper = function() { return ui.helper[0]; };

 event.target = this.instance.currentItem[0];
 this.instance._mouseCapture(event, true);
 this.instance._mouseStart(event, true, true);

 //Because the browser event is way off the new appended portlet, we modify a couple of variables to reflect the changes
 this.instance.offset.click.top = inst.offset.click.top;
 this.instance.offset.click.left = inst.offset.click.left;
 this.instance.offset.parent.left -= inst.offset.parent.left - this.instance.offset.parent.left;
 this.instance.offset.parent.top -= inst.offset.parent.top - this.instance.offset.parent.top;

 inst._trigger("toSortable", event);
 inst.dropped = this.instance.element; //draggable revert needs that
 this.instance.fromOutside = true; //Little hack so receive/update callbacks work

 }

 //Provided we did all the previous steps, we can fire the drag event of the sortable on every draggable drag, when it intersects with the sortable
 if(this.instance.currentItem) this.instance._mouseDrag(event);

 } else {

 //If it doesn't intersect with the sortable, and it intersected before,
 //we fake the drag stop of the sortable, but make sure it doesn't remove the helper by using cancelHelperRemoval
 if(this.instance.isOver) {
 this.instance.isOver = 0;
 this.instance.cancelHelperRemoval = true;
 this.instance.options.revert = false; //No revert here
 this.instance._mouseStop(event, true);
 this.instance.options.helper = this.instance.options._helper;

 //Now we remove our currentItem, the list group clone again, and the placeholder, and animate the helper back to it's original size
 this.instance.currentItem.remove();
 if(this.instance.placeholder) this.instance.placeholder.remove();

 inst._trigger("fromSortable", event);
 inst.dropped = false; //draggable revert needs that
 }

 };

 });

 }
});

$.ui.plugin.add("draggable", "cursor", {
 start: function(event, ui) {
 var t = $('body');
 if (t.css("cursor")) ui.options._cursor = t.css("cursor");
 t.css("cursor", ui.options.cursor);
 },
 stop: function(event, ui) {
 if (ui.options._cursor) $('body').css("cursor", ui.options._cursor);
 }
});

$.ui.plugin.add("draggable", "iframeFix", {
 start: function(event, ui) {
 $(ui.options.iframeFix === true ? "iframe" : ui.options.iframeFix).each(function() {
 $('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>')
 .css({
 width: this.offsetWidth+"px", height: this.offsetHeight+"px",
 position: "absolute", opacity: "0.001", zIndex: 1000
 })
 .css($(this).offset())
 .appendTo("body");
 });
 },
 stop: function(event, ui) {
 $("div.ui-draggable-iframeFix").each(function() { this.parentNode.removeChild(this); }); //Remove frame helpers
 }
});

$.ui.plugin.add("draggable", "opacity", {
 start: function(event, ui) {
 var t = $(ui.helper);
 if(t.css("opacity")) ui.options._opacity = t.css("opacity");
 t.css('opacity', ui.options.opacity);
 },
 stop: function(event, ui) {
 if(ui.options._opacity) $(ui.helper).css('opacity', ui.options._opacity);
 }
});

$.ui.plugin.add("draggable", "scroll", {
 start: function(event, ui) {
 var o = ui.options;
 var i = $(this).data("draggable");

 if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset();

 },
 drag: function(event, ui) {

 var o = ui.options, scrolled = false;
 var i = $(this).data("draggable");

 if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') {

 if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
 i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
 else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity)
 i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;

 if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
 i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
 else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity)
 i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;

 } else {

 if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
 scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
 else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
 scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);

 if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
 scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
 else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
 scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);

 }

 if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
 $.ui.ddmanager.prepareOffsets(i, event);

 }
});

$.ui.plugin.add("draggable", "snap", {
 start: function(event, ui) {

 var inst = $(this).data("draggable");
 inst.snapElements = [];

 $(ui.options.snap.constructor != String ? ( ui.options.snap.items || ':data(draggable)' ) : ui.options.snap).each(function() {
 var $t = $(this); var $o = $t.offset();
 if(this != inst.element[0]) inst.snapElements.push({
 item: this,
 width: $t.outerWidth(), height: $t.outerHeight(),
 top: $o.top, left: $o.left
 });
 });

 },
 drag: function(event, ui) {

 var inst = $(this).data("draggable");
 var d = ui.options.snapTolerance;

 var x1 = ui.absolutePosition.left, x2 = x1 + inst.helperProportions.width,
 y1 = ui.absolutePosition.top, y2 = y1 + inst.helperProportions.height;

 for (var i = inst.snapElements.length - 1; i >= 0; i--){

 var l = inst.snapElements[i].left, r = l + inst.snapElements[i].width,
 t = inst.snapElements[i].top, b = t + inst.snapElements[i].height;

 //Yes, I know, this is insane ;)
 if(!((l-d < x1 && x1 < r+d && t-d < y1 && y1 < b+d) || (l-d < x1 && x1 < r+d && t-d < y2 && y2 < b+d) || (l-d < x2 && x2 < r+d && t-d < y1 && y1 < b+d) || (l-d < x2 && x2 < r+d && t-d < y2 && y2 < b+d))) {
 if(inst.snapElements[i].snapping) (inst.options.snap.release && inst.options.snap.release.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
 inst.snapElements[i].snapping = false;
 continue;
 }

 if(ui.options.snapMode != 'inner') {
 var ts = Math.abs(t - y2) <= d;
 var bs = Math.abs(b - y1) <= d;
 var ls = Math.abs(l - x2) <= d;
 var rs = Math.abs(r - x1) <= d;
 if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t - inst.helperProportions.height, left: 0 }).top;
 if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b, left: 0 }).top;
 if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l - inst.helperProportions.width }).left;
 if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r }).left;
 }

 var first = (ts || bs || ls || rs);

 if(ui.options.snapMode != 'outer') {
 var ts = Math.abs(t - y1) <= d;
 var bs = Math.abs(b - y2) <= d;
 var ls = Math.abs(l - x1) <= d;
 var rs = Math.abs(r - x2) <= d;
 if(ts) ui.position.top = inst._convertPositionTo("relative", { top: t, left: 0 }).top;
 if(bs) ui.position.top = inst._convertPositionTo("relative", { top: b - inst.helperProportions.height, left: 0 }).top;
 if(ls) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: l }).left;
 if(rs) ui.position.left = inst._convertPositionTo("relative", { top: 0, left: r - inst.helperProportions.width }).left;
 }

 if(!inst.snapElements[i].snapping && (ts || bs || ls || rs || first))
 (inst.options.snap.snap && inst.options.snap.snap.call(inst.element, event, $.extend(inst._uiHash(), { snapItem: inst.snapElements[i].item })));
 inst.snapElements[i].snapping = (ts || bs || ls || rs || first);

 };

 }
});

$.ui.plugin.add("draggable", "stack", {
 start: function(event, ui) {
 var group = $.makeArray($(ui.options.stack.group)).sort(function(a,b) {
 return (parseInt($(a).css("zIndex"),10) || ui.options.stack.min) - (parseInt($(b).css("zIndex"),10) || ui.options.stack.min);
 });

 $(group).each(function(i) {
 this.style.zIndex = ui.options.stack.min + i;
 });

 this[0].style.zIndex = ui.options.stack.min + group.length;
 }
});

$.ui.plugin.add("draggable", "zIndex", {
 start: function(event, ui) {
 var t = $(ui.helper);
 if(t.css("zIndex")) ui.options._zIndex = t.css("zIndex");
 t.css('zIndex', ui.options.zIndex);
 },
 stop: function(event, ui) {
 if(ui.options._zIndex) $(ui.helper).css('zIndex', ui.options._zIndex);
 }
});

})(jQuery);
/*
 * jQuery UI Sortable 1.6rc5
 *
 * Copyright (c) 2009 AUTHORS.txt (http://ui.jquery.com/about)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * http://docs.jquery.com/UI/Sortables
 *
 * Depends:
 * ui.core.js
 */
(function($) {

$.widget("ui.sortable", $.extend({}, $.ui.mouse, {
 _init: function() {

 var o = this.options;
 this.containerCache = {};
 (this.options.cssNamespace && this.element.addClass(this.options.cssNamespace+"-sortable"));

 //Get the items
 this.refresh();

 //Let's determine if the items are floating
 this.floating = this.items.length ? (/left|right/).test(this.items[0].item.css('float')) : false;

 //Let's determine the parent's offset
 this.offset = this.element.offset();

 //Initialize mouse events for interaction
 this._mouseInit();

 },

 destroy: function() {
 this.element
 .removeClass(this.options.cssNamespace+"-sortable "+this.options.cssNamespace+"-sortable-disabled")
 .removeData("sortable")
 .unbind(".sortable");
 this._mouseDestroy();

 for ( var i = this.items.length - 1; i >= 0; i-- )
 this.items[i].item.removeData("sortable-item");
 },

 _mouseCapture: function(event, overrideHandle) {

 if (this.reverting) {
 return false;
 }

 if(this.options.disabled || this.options.type == 'static') return false;

 //We have to refresh the items data once first
 this._refreshItems(event);

 //Find out if the clicked node (or one of its parents) is a actual item in this.items
 var currentItem = null, self = this, nodes = $(event.target).parents().each(function() {
 if($.data(this, 'sortable-item') == self) {
 currentItem = $(this);
 return false;
 }
 });
 if($.data(event.target, 'sortable-item') == self) currentItem = $(event.target);

 if(!currentItem) return false;
 if(this.options.handle && !overrideHandle) {
 var validHandle = false;

 $(this.options.handle, currentItem).find("*").andSelf().each(function() { if(this == event.target) validHandle = true; });
 if(!validHandle) return false;
 }

 this.currentItem = currentItem;
 this._removeCurrentsFromItems();
 return true;

 },

 _mouseStart: function(event, overrideHandle, noActivation) {

 var o = this.options;
 this.currentContainer = this;

 //We only need to call refreshPositions, because the refreshItems call has been moved to mouseCapture
 this.refreshPositions();

 //Create and append the visible helper
 this.helper = this._createHelper(event);

 //Cache the helper size
 this._cacheHelperProportions();

 /*
 * - Position generation -
 * This block generates everything position related - it's the core of draggables.
 */

 //Cache the margins of the original element
 this._cacheMargins();

 //Get the next scrolling parent
 this.scrollParent = this.helper.scrollParent();

 //The element's absolute position on the page minus margins
 this.offset = this.currentItem.offset();
 this.offset = {
 top: this.offset.top - this.margins.top,
 left: this.offset.left - this.margins.left
 };

 // Only after we got the offset, we can change the helper's position to absolute
 // TODO: Still need to figure out a way to make relative sorting possible
 this.helper.css("position", "absolute");
 this.cssPosition = this.helper.css("position");

 $.extend(this.offset, {
 click: { //Where the click happened, relative to the element
 left: event.pageX - this.offset.left,
 top: event.pageY - this.offset.top
 },
 parent: this._getParentOffset(),
 relative: this._getRelativeOffset() //This is a relative to absolute position minus the actual position calculation - only used for relative positioned helper
 });

 //Generate the original position
 this.originalPosition = this._generatePosition(event);
 this.originalPageX = event.pageX;
 this.originalPageY = event.pageY;

 //Adjust the mouse offset relative to the helper if 'cursorAt' is supplied
 if(o.cursorAt)
 this._adjustOffsetFromHelper(o.cursorAt);

 //Cache the former DOM position
 this.domPosition = { prev: this.currentItem.prev()[0], parent: this.currentItem.parent()[0] };

 //If the helper is not the original, hide the original so it's not playing any role during the drag, won't cause anything bad this way
 if(this.helper[0] != this.currentItem[0]) {
 this.currentItem.hide();
 }

 //Create the placeholder
 this._createPlaceholder();

 //Set a containment if given in the options
 if(o.containment)
 this._setContainment();

 //Call plugins and callbacks
 this._trigger("start", event);

 //Recache the helper size
 if(!this._preserveHelperProportions)
 this._cacheHelperProportions();


 //Post 'activate' events to possible containers
 if(!noActivation) {
 for (var i = this.containers.length - 1; i >= 0; i--) { this.containers[i]._trigger("activate", event, this); }
 }

 //Prepare possible droppables
 if($.ui.ddmanager)
 $.ui.ddmanager.current = this;

 if ($.ui.ddmanager && !o.dropBehaviour)
 $.ui.ddmanager.prepareOffsets(this, event);

 this.dragging = true;

 this.helper.addClass(o.cssNamespace+'-sortable-helper');
 this._mouseDrag(event); //Execute the drag once - this causes the helper not to be visible before getting its correct position
 return true;

 },

 _mouseDrag: function(event) {

 //Compute the helpers position
 this.position = this._generatePosition(event);
 this.positionAbs = this._convertPositionTo("absolute");

 if (!this.lastPositionAbs) {
 this.lastPositionAbs = this.positionAbs;
 }

 //Call the internal plugins
 $.ui.plugin.call(this, "sort", [event, this._uiHash()]);

 //Regenerate the absolute position used for position checks
 this.positionAbs = this._convertPositionTo("absolute");

 //Set the helper position
 if(!this.options.axis || this.options.axis != "y") this.helper[0].style.left = this.position.left+'px';
 if(!this.options.axis || this.options.axis != "x") this.helper[0].style.top = this.position.top+'px';

 //Rearrange
 for (var i = this.items.length - 1; i >= 0; i--) {

 //Cache variables and intersection, continue if no intersection
 var item = this.items[i], itemElement = item.item[0], intersection = this._intersectsWithPointer(item);
 if (!intersection) continue;

 if(itemElement != this.currentItem[0] //cannot intersect with itself
 && this.placeholder[intersection == 1 ? "next" : "prev"]()[0] != itemElement //no useless actions that have been done before
 && !$.ui.contains(this.placeholder[0], itemElement) //no action if the item moved is the parent of the item checked
 && (this.options.type == 'semi-dynamic' ? !$.ui.contains(this.element[0], itemElement) : true)
 ) {

 this.direction = intersection == 1 ? "down" : "up";

 if (this.options.tolerance == "pointer" || this._intersectsWithSides(item)) {
 this.options.sortIndicator.call(this, event, item);
 } else {
 break;
 }

 this._trigger("change", event); //Call plugins and callbacks
 break;
 }
 }

 //Post events to containers
 this._contactContainers(event);

 //Interconnect with droppables
 if($.ui.ddmanager) $.ui.ddmanager.drag(this, event);

 //Call callbacks
 this._trigger('sort', event);

 this.lastPositionAbs = this.positionAbs;
 return false;

 },

 _mouseStop: function(event, noPropagation) {

 if(!event) return;

 //If we are using droppables, inform the manager about the drop
 if ($.ui.ddmanager && !this.options.dropBehaviour)
 $.ui.ddmanager.drop(this, event);

 if(this.options.revert) {
 var self = this;
 var cur = self.placeholder.offset();

 self.reverting = true;

 $(this.helper).animate({
 left: cur.left - this.offset.parent.left - self.margins.left + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollLeft),
 top: cur.top - this.offset.parent.top - self.margins.top + (this.offsetParent[0] == document.body ? 0 : this.offsetParent[0].scrollTop)
 }, parseInt(this.options.revert, 10) || 500, function() {
 self._clear(event);
 });
 } else {
 this._clear(event, noPropagation);
 }

 return false;

 },

 cancel: function() {

 if(this.dragging) {

 this._mouseUp();

 if(this.options.helper == "original")
 this.currentItem.css(this._storedCSS).removeClass(this.options.cssNamespace+"-sortable-helper");
 else
 this.currentItem.show();

 //Post deactivating events to containers
 for (var i = this.containers.length - 1; i >= 0; i--){
 this.containers[i]._trigger("deactivate", null, this);
 if(this.containers[i].containerCache.over) {
 this.containers[i]._trigger("out", null, this);
 this.containers[i].containerCache.over = 0;
 }
 }

 }

 //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
 if(this.placeholder[0].parentNode) this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
 if(this.options.helper != "original" && this.helper && this.helper[0].parentNode) this.helper.remove();

 $.extend(this, {
 helper: null,
 dragging: false,
 reverting: false,
 _noFinalSort: null
 });

 if(this.domPosition.prev) {
 $(this.domPosition.prev).after(this.currentItem);
 } else {
 $(this.domPosition.parent).prepend(this.currentItem);
 }

 return true;

 },

 serialize: function(o) {

 var items = this._getItemsAsjQuery(o && o.connected);
 var str = []; o = o || {};

 $(items).each(function() {
 var res = ($(o.item || this).attr(o.attribute || 'id') || '').match(o.expression || (/(.+)[-=_](.+)/));
 if(res) str.push((o.key || res[1]+'[]')+'='+(o.key && o.expression ? res[1] : res[2]));
 });

 return str.join('&');

 },

 toArray: function(o) {

 var items = this._getItemsAsjQuery(o && o.connected);
 var ret = []; o = o || {};

 items.each(function() { ret.push($(o.item || this).attr(o.attribute || 'id') || ''); });
 return ret;

 },

 /* Be careful with the following core functions */
 _intersectsWith: function(item) {

 var x1 = this.positionAbs.left,
 x2 = x1 + this.helperProportions.width,
 y1 = this.positionAbs.top,
 y2 = y1 + this.helperProportions.height;

 var l = item.left,
 r = l + item.width,
 t = item.top,
 b = t + item.height;

 var dyClick = this.offset.click.top,
 dxClick = this.offset.click.left;

 var isOverElement = (y1 + dyClick) > t && (y1 + dyClick) < b && (x1 + dxClick) > l && (x1 + dxClick) < r;

 if( this.options.tolerance == "pointer"
 || this.options.forcePointerForContainers
 || (this.options.tolerance != "pointer" && this.helperProportions[this.floating ? 'width' : 'height'] > item[this.floating ? 'width' : 'height'])
 ) {
 return isOverElement;
 } else {

 return (l < x1 + (this.helperProportions.width / 2) // Right Half
 && x2 - (this.helperProportions.width / 2) < r // Left Half
 && t < y1 + (this.helperProportions.height / 2) // Bottom Half
 && y2 - (this.helperProportions.height / 2) < b ); // Top Half

 }
 },

 _intersectsWithPointer: function(item) {

 var isOverElementHeight = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top, item.height),
 isOverElementWidth = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left, item.width),
 isOverElement = isOverElementHeight && isOverElementWidth,
 verticalDirection = this._getDragVerticalDirection(),
 horizontalDirection = this._getDragHorizontalDirection();

 if (!isOverElement)
 return false;

 return this.floating ?
 ( ((horizontalDirection && horizontalDirection == "right") || verticalDirection == "down") ? 2 : 1 )
 : ( verticalDirection && (verticalDirection == "down" ? 2 : 1) );

 },

 _intersectsWithSides: function(item) {

 var isOverBottomHalf = $.ui.isOverAxis(this.positionAbs.top + this.offset.click.top, item.top + (item.height/2), item.height),
 isOverRightHalf = $.ui.isOverAxis(this.positionAbs.left + this.offset.click.left, item.left + (item.width/2), item.width),
 verticalDirection = this._getDragVerticalDirection(),
 horizontalDirection = this._getDragHorizontalDirection();

 if (this.floating && horizontalDirection) {
 return ((horizontalDirection == "right" && isOverRightHalf) || (horizontalDirection == "left" && !isOverRightHalf));
 } else {
 return verticalDirection && ((verticalDirection == "down" && isOverBottomHalf) || (verticalDirection == "up" && !isOverBottomHalf));
 }

 },

 _getDragVerticalDirection: function() {
 var delta = this.positionAbs.top - this.lastPositionAbs.top;
 return delta != 0 && (delta > 0 ? "down" : "up");
 },

 _getDragHorizontalDirection: function() {
 var delta = this.positionAbs.left - this.lastPositionAbs.left;
 return delta != 0 && (delta > 0 ? "right" : "left");
 },

 refresh: function(event) {
 this._refreshItems(event);
 this.refreshPositions();
 },

 _getItemsAsjQuery: function(connected) {

 var self = this;
 var items = [];
 var queries = [];

 if(this.options.connectWith && connected) {
 for (var i = this.options.connectWith.length - 1; i >= 0; i--){
 var cur = $(this.options.connectWith[i]);
 for (var j = cur.length - 1; j >= 0; j--){
 var inst = $.data(cur[j], 'sortable');
 if(inst && inst != this && !inst.options.disabled) {
 queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element) : $(inst.options.items, inst.element).not("."+inst.options.cssNamespace+"-sortable-helper"), inst]);
 }
 };
 };
 }

 queries.push([$.isFunction(this.options.items) ? this.options.items.call(this.element, null, { options: this.options, item: this.currentItem }) : $(this.options.items, this.element).not("."+this.options.cssNamespace+"-sortable-helper"), this]);

 for (var i = queries.length - 1; i >= 0; i--){
 queries[i][0].each(function() {
 items.push(this);
 });
 };

 return $(items);

 },

 _removeCurrentsFromItems: function() {

 var list = this.currentItem.find(":data(sortable-item)");

 for (var i=0; i < this.items.length; i++) {

 for (var j=0; j < list.length; j++) {
 if(list[j] == this.items[i].item[0])
 this.items.splice(i,1);
 };

 };

 },

 _refreshItems: function(event) {

 this.items = [];
 this.containers = [this];
 var items = this.items;
 var self = this;
 var queries = [[$.isFunction(this.options.items) ? this.options.items.call(this.element[0], event, { item: this.currentItem }) : $(this.options.items, this.element), this]];

 if(this.options.connectWith) {
 for (var i = this.options.connectWith.length - 1; i >= 0; i--){
 var cur = $(this.options.connectWith[i]);
 for (var j = cur.length - 1; j >= 0; j--){
 var inst = $.data(cur[j], 'sortable');
 if(inst && inst != this && !inst.options.disabled) {
 queries.push([$.isFunction(inst.options.items) ? inst.options.items.call(inst.element[0], event, { item: this.currentItem }) : $(inst.options.items, inst.element), inst]);
 this.containers.push(inst);
 }
 };
 };
 }

 for (var i = queries.length - 1; i >= 0; i--) {
 var targetData = queries[i][1];
 var _queries = queries[i][0];

 for (var j=0, queriesLength = _queries.length; j < queriesLength; j++) {
 var item = $(_queries[j]);

 item.data('sortable-item', targetData); // Data for target checking (mouse manager)

 items.push({
 item: item,
 instance: targetData,
 width: 0, height: 0,
 left: 0, top: 0
 });
 };
 };

 },

 refreshPositions: function(fast) {

 //This has to be redone because due to the item being moved out/into the offsetParent, the offsetParent's position will change
 if(this.offsetParent && this.helper) {
 this.offset.parent = this._getParentOffset();
 }

 for (var i = this.items.length - 1; i >= 0; i--){
 var item = this.items[i];

 //We ignore calculating positions of all connected containers when we're not over them
 if(item.instance != this.currentContainer && this.currentContainer && item.item[0] != this.currentItem[0])
 continue;

 var t = this.options.toleranceElement ? $(this.options.toleranceElement, item.item) : item.item;

 if (!fast) {
 if (this.options.accurateIntersection) {
 item.width = t.outerWidth();
 item.height = t.outerHeight();
 }
 else {
 item.width = t[0].offsetWidth;
 item.height = t[0].offsetHeight;
 }
 }

 var p = t.offset();
 item.left = p.left;
 item.top = p.top;
 };

 if(this.options.custom && this.options.custom.refreshContainers) {
 this.options.custom.refreshContainers.call(this);
 } else {
 for (var i = this.containers.length - 1; i >= 0; i--){
 var p = this.containers[i].element.offset();
 this.containers[i].containerCache.left = p.left;
 this.containers[i].containerCache.top = p.top;
 this.containers[i].containerCache.width = this.containers[i].element.outerWidth();
 this.containers[i].containerCache.height = this.containers[i].element.outerHeight();
 };
 }

 },

 _createPlaceholder: function(that) {

 var self = that || this, o = self.options;

 if(!o.placeholder || o.placeholder.constructor == String) {
 var className = o.placeholder;
 o.placeholder = {
 element: function() {

 var el = $(document.createElement(self.currentItem[0].nodeName))
 .addClass(className || self.currentItem[0].className+" "+self.options.cssNamespace+"-sortable-placeholder")
 .removeClass(self.options.cssNamespace+'-sortable-helper')[0];

 if(!className)
 el.style.visibility = "hidden";

 return el;
 },
 update: function(container, p) {

 // 1. If a className is set as 'placeholder option, we don't force sizes - the class is responsible for that
 // 2. The option 'forcePlaceholderSize can be enabled to force it even if a class name is specified
 if(className && !o.forcePlaceholderSize) return;

 //If the element doesn't have a actual height by itself (without styles coming from a stylesheet), it receives the inline height from the dragged item
 if(!p.height()) { p.height(self.currentItem.innerHeight() - parseInt(self.currentItem.css('paddingTop')||0, 10) - parseInt(self.currentItem.css('paddingBottom')||0, 10)); };
 if(!p.width()) { p.width(self.currentItem.innerWidth() - parseInt(self.currentItem.css('paddingLeft')||0, 10) - parseInt(self.currentItem.css('paddingRight')||0, 10)); };
 }
 };
 }

 //Create the placeholder
 self.placeholder = $(o.placeholder.element.call(self.element, self.currentItem));

 //Append it after the actual current item
 self.currentItem.after(self.placeholder);

 //Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)
 o.placeholder.update(self, self.placeholder);

 },

 _contactContainers: function(event) {
 for (var i = this.containers.length - 1; i >= 0; i--){

 if(this._intersectsWith(this.containers[i].containerCache)) {
 if(!this.containers[i].containerCache.over) {

 if(this.currentContainer != this.containers[i]) {

 //When entering a new container, we will find the item with the least distance and append our item near it
 var dist = 10000; var itemWithLeastDistance = null; var base = this.positionAbs[this.containers[i].floating ? 'left' : 'top'];
 for (var j = this.items.length - 1; j >= 0; j--) {
 if(!$.ui.contains(this.containers[i].element[0], this.items[j].item[0])) continue;
 var cur = this.items[j][this.containers[i].floating ? 'left' : 'top'];
 if(Math.abs(cur - base) < dist) {
 dist = Math.abs(cur - base); itemWithLeastDistance = this.items[j];
 }
 }

 if(!itemWithLeastDistance && !this.options.dropOnEmpty) //Check if dropOnEmpty is enabled
 continue;

 this.currentContainer = this.containers[i];
 itemWithLeastDistance ? this.options.sortIndicator.call(this, event, itemWithLeastDistance, null, true) : this.options.sortIndicator.call(this, event, null, this.containers[i].element, true);
 this._trigger("change", event); //Call plugins and callbacks
 this.containers[i]._trigger("change", event, this); //Call plugins and callbacks

 //Update the placeholder
 this.options.placeholder.update(this.currentContainer, this.placeholder);

 }

 this.containers[i]._trigger("over", event, this);
 this.containers[i].containerCache.over = 1;
 }
 } else {
 if(this.containers[i].containerCache.over) {
 this.containers[i]._trigger("out", event, this);
 this.containers[i].containerCache.over = 0;
 }
 }

 };
 },

 _createHelper: function(event) {

 var o = this.options;
 var helper = $.isFunction(o.helper) ? $(o.helper.apply(this.element[0], [event, this.currentItem])) : (o.helper == 'clone' ? this.currentItem.clone() : this.currentItem);

 if(!helper.parents('body').length) //Add the helper to the DOM if that didn't happen already
 $(o.appendTo != 'parent' ? o.appendTo : this.currentItem[0].parentNode)[0].appendChild(helper[0]);

 if(helper[0] == this.currentItem[0])
 this._storedCSS = { width: this.currentItem[0].style.width, height: this.currentItem[0].style.height, position: this.currentItem.css("position"), top: this.currentItem.css("top"), left: this.currentItem.css("left") };

 if(helper[0].style.width == '' || o.forceHelperSize) helper.width(this.currentItem.width());
 if(helper[0].style.height == '' || o.forceHelperSize) helper.height(this.currentItem.height());

 return helper;

 },

 _adjustOffsetFromHelper: function(obj) {
 if(obj.left != undefined) this.offset.click.left = obj.left + this.margins.left;
 if(obj.right != undefined) this.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;
 if(obj.top != undefined) this.offset.click.top = obj.top + this.margins.top;
 if(obj.bottom != undefined) this.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;
 },

 _getParentOffset: function() {


 //Get the offsetParent and cache its position
 this.offsetParent = this.helper.offsetParent();
 var po = this.offsetParent.offset();

 // This is a special case where we need to modify a offset calculated on start, since the following happened:
 // 1. The position of the helper is absolute, so it's position is calculated based on the next positioned parent
 // 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't the document, which means that
 // the scroll is included in the initial calculation of the offset of the parent, and never recalculated upon drag
 if(this.cssPosition == 'absolute' && this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) {
 po.left += this.scrollParent.scrollLeft();
 po.top += this.scrollParent.scrollTop();
 }

 if((this.offsetParent[0] == document.body && $.browser.mozilla) //Ugly FF3 fix
 || (this.offsetParent[0].tagName && this.offsetParent[0].tagName.toLowerCase() == 'html' && $.browser.msie)) //Ugly IE fix
 po = { top: 0, left: 0 };

 return {
 top: po.top + (parseInt(this.offsetParent.css("borderTopWidth"),10) || 0),
 left: po.left + (parseInt(this.offsetParent.css("borderLeftWidth"),10) || 0)
 };

 },

 _getRelativeOffset: function() {

 if(this.cssPosition == "relative") {
 var p = this.currentItem.position();
 return {
 top: p.top - (parseInt(this.helper.css("top"),10) || 0) + this.scrollParent.scrollTop(),
 left: p.left - (parseInt(this.helper.css("left"),10) || 0) + this.scrollParent.scrollLeft()
 };
 } else {
 return { top: 0, left: 0 };
 }

 },

 _cacheMargins: function() {
 this.margins = {
 left: (parseInt(this.currentItem.css("marginLeft"),10) || 0),
 top: (parseInt(this.currentItem.css("marginTop"),10) || 0)
 };
 },

 _cacheHelperProportions: function() {
 this.helperProportions = {
 width: this.helper.outerWidth(),
 height: this.helper.outerHeight()
 };
 },

 _setContainment: function() {

 var o = this.options;
 if(o.containment == 'parent') o.containment = this.helper[0].parentNode;
 if(o.containment == 'document' || o.containment == 'window') this.containment = [
 0 - this.offset.relative.left - this.offset.parent.left,
 0 - this.offset.relative.top - this.offset.parent.top,
 $(o.containment == 'document' ? document : window).width() - this.helperProportions.width - this.margins.left,
 ($(o.containment == 'document' ? document : window).height() || document.body.parentNode.scrollHeight) - this.helperProportions.height - this.margins.top
 ];

 if(!(/^(document|window|parent)$/).test(o.containment)) {
 var ce = $(o.containment)[0];
 var co = $(o.containment).offset();
 var over = ($(ce).css("overflow") != 'hidden');

 this.containment = [
 co.left + (parseInt($(ce).css("borderLeftWidth"),10) || 0) - this.margins.left,
 co.top + (parseInt($(ce).css("borderTopWidth"),10) || 0) - this.margins.top,
 co.left+(over ? Math.max(ce.scrollWidth,ce.offsetWidth) : ce.offsetWidth) - (parseInt($(ce).css("borderLeftWidth"),10) || 0) - this.helperProportions.width - this.margins.left,
 co.top+(over ? Math.max(ce.scrollHeight,ce.offsetHeight) : ce.offsetHeight) - (parseInt($(ce).css("borderTopWidth"),10) || 0) - this.helperProportions.height - this.margins.top
 ];
 }

 },

 _convertPositionTo: function(d, pos) {

 if(!pos) pos = this.position;
 var mod = d == "absolute" ? 1 : -1;
 var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);

 return {
 top: (
 pos.top // The absolute mouse position
 + this.offset.relative.top * mod // Only for relative positioned nodes: Relative offset from element to offset parent
 + this.offset.parent.top * mod // The offsetParent's offset without borders (offset + border)
 - ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod
 ),
 left: (
 pos.left // The absolute mouse position
 + this.offset.relative.left * mod // Only for relative positioned nodes: Relative offset from element to offset parent
 + this.offset.parent.left * mod // The offsetParent's offset without borders (offset + border)
 - ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() ) * mod
 )
 };

 },

 _generatePosition: function(event) {

 var o = this.options, scroll = this.cssPosition == 'absolute' && !(this.scrollParent[0] != document && $.ui.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName);

 // This is another very weird special case that only happens for relative elements:
 // 1. If the css position is relative
 // 2. and the scroll parent is the document or similar to the offset parent
 // we have to refresh the relative offset during the scroll so there are no jumps
 if(this.cssPosition == 'relative' && !(this.scrollParent[0] != document && this.scrollParent[0] != this.offsetParent[0])) {
 this.offset.relative = this._getRelativeOffset();
 }

 var pageX = event.pageX;
 var pageY = event.pageY;

 /*
 * - Position constraining -
 * Constrain the position to a mix of grid, containment.
 */

 if(this.originalPosition) { //If we are not dragging yet, we won't check for options

 if(this.containment) {
 if(event.pageX - this.offset.click.left < this.containment[0]) pageX = this.containment[0] + this.offset.click.left;
 if(event.pageY - this.offset.click.top < this.containment[1]) pageY = this.containment[1] + this.offset.click.top;
 if(event.pageX - this.offset.click.left > this.containment[2]) pageX = this.containment[2] + this.offset.click.left;
 if(event.pageY - this.offset.click.top > this.containment[3]) pageY = this.containment[3] + this.offset.click.top;
 }

 if(o.grid) {
 var top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1];
 pageY = this.containment ? (!(top - this.offset.click.top < this.containment[1] || top - this.offset.click.top > this.containment[3]) ? top : (!(top - this.offset.click.top < this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top;

 var left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0];
 pageX = this.containment ? (!(left - this.offset.click.left < this.containment[0] || left - this.offset.click.left > this.containment[2]) ? left : (!(left - this.offset.click.left < this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left;
 }

 }

 return {
 top: (
 pageY // The absolute mouse position
 - this.offset.click.top // Click offset (relative to the element)
 - this.offset.relative.top // Only for relative positioned nodes: Relative offset from element to offset parent
 - this.offset.parent.top // The offsetParent's offset without borders (offset + border)
 + ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )
 ),
 left: (
 pageX // The absolute mouse position
 - this.offset.click.left // Click offset (relative to the element)
 - this.offset.relative.left // Only for relative positioned nodes: Relative offset from element to offset parent
 - this.offset.parent.left // The offsetParent's offset without borders (offset + border)
 + ( this.cssPosition == 'fixed' ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )
 )
 };

 },

 _rearrange: function(event, i, a, hardRefresh) {

 a ? a[0].appendChild(this.placeholder[0]) : i.item[0].parentNode.insertBefore(this.placeholder[0], (this.direction == 'down' ? i.item[0] : i.item[0].nextSibling));

 //Various things done here to improve the performance:
 // 1. we create a setTimeout, that calls refreshPositions
 // 2. on the instance, we have a counter variable, that get's higher after every append
 // 3. on the local scope, we copy the counter variable, and check in the timeout, if it's still the same
 // 4. this lets only the last addition to the timeout stack through
 this.counter = this.counter ? ++this.counter : 1;
 var self = this, counter = this.counter;

 window.setTimeout(function() {
 if(counter == self.counter) self.refreshPositions(!hardRefresh); //Precompute after each DOM insertion, NOT on mousemove
 },0);

 },

 _clear: function(event, noPropagation) {

 this.reverting = false;

 //We first have to update the dom position of the actual currentItem
 if(!this._noFinalSort) this.placeholder.before(this.currentItem);
 this._noFinalSort = null;

 if(this.helper[0] == this.currentItem[0]) {
 for(var i in this._storedCSS) {
 if(this._storedCSS[i] == 'auto' || this._storedCSS[i] == 'static') this._storedCSS[i] = '';
 }
 this.currentItem.css(this._storedCSS).removeClass(this.options.cssNamespace+"-sortable-helper");
 } else {
 this.currentItem.show();
 }

 if(this.fromOutside) this._trigger("receive", event, this, noPropagation);
 if(this.fromOutside || this.domPosition.prev != this.currentItem.prev().not("."+this.options.cssNamespace+"-sortable-helper")[0] || this.domPosition.parent != this.currentItem.parent()[0]) this._trigger("update", event, null, noPropagation); //Trigger update callback if the DOM position has changed
 if(!$.ui.contains(this.element[0], this.currentItem[0])) { //Node was moved out of the current element
 this._trigger("remove", event, null, noPropagation);
 for (var i = this.containers.length - 1; i >= 0; i--){
 if($.ui.contains(this.containers[i].element[0], this.currentItem[0])) {
 this.containers[i]._trigger("receive", event, this, noPropagation);
 this.containers[i]._trigger("update", event, this, noPropagation);
 }
 };
 };

 //Post events to containers
 for (var i = this.containers.length - 1; i >= 0; i--){
 this.containers[i]._trigger("deactivate", event, this, noPropagation);
 if(this.containers[i].containerCache.over) {
 this.containers[i]._trigger("out", event, this);
 this.containers[i].containerCache.over = 0;
 }
 }

 this.dragging = false;
 if(this.cancelHelperRemoval) {
 this._trigger("beforeStop", event, null, noPropagation);
 this._trigger("stop", event, null, noPropagation);
 return false;
 }

 this._trigger("beforeStop", event, null, noPropagation);

 //$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately, it unbinds ALL events from the original node!
 this.placeholder[0].parentNode.removeChild(this.placeholder[0]);

 if(this.helper[0] != this.currentItem[0]) this.helper.remove(); this.helper = null;
 this._trigger("stop", event, null, noPropagation);

 this.fromOutside = false;
 return true;

 },

 _trigger: function(type, event, inst, noPropagation) {
 $.ui.plugin.call(this, type, [event, this._uiHash(inst)]);
 if(!noPropagation) {
 if ($.widget.prototype._trigger.call(this, type, event, this._uiHash(inst)) === false) {
 this.cancel();
 }
 }
 },

 plugins: {},

 _uiHash: function(inst) {
 var self = inst || this;
 return {
 helper: self.helper,
 placeholder: self.placeholder || $([]),
 position: self.position,
 absolutePosition: self.positionAbs,
 item: self.currentItem,
 sender: inst ? inst.element : null
 };
 }

}));

$.extend($.ui.sortable, {
 getter: "serialize toArray",
 version: "1.6rc5",
 defaults: {
 accurateIntersection: true,
 appendTo: "parent",
 cancel: ":input,option",
 cssNamespace: 'ui',
 delay: 0,
 distance: 1,
 dropOnEmpty: true,
 forcePlaceholderSize: false,
 forceHelperSize: false,
 helper: "original",
 items: '> *',
 scope: "default",
 scroll: true,
 scrollSensitivity: 20,
 scrollSpeed: 20,
 sortIndicator: $.ui.sortable.prototype._rearrange,
 tolerance: "default",
 zIndex: 1000
 }
});

/*
 * Sortable Extensions
 */

$.ui.plugin.add("sortable", "cursor", {
 start: function(event, ui) {
 var t = $('body'), i = $(this).data('sortable');
 if (t.css("cursor")) i.options._cursor = t.css("cursor");
 t.css("cursor", i.options.cursor);
 },
 beforeStop: function(event, ui) {
 var i = $(this).data('sortable');
 if (i.options._cursor) $('body').css("cursor", i.options._cursor);
 }
});

$.ui.plugin.add("sortable", "opacity", {
 start: function(event, ui) {
 var t = ui.helper, i = $(this).data('sortable');
 if(t.css("opacity")) i.options._opacity = t.css("opacity");
 t.css('opacity', i.options.opacity);
 },
 beforeStop: function(event, ui) {
 var i = $(this).data('sortable');
 if(i.options._opacity) $(ui.helper).css('opacity', i.options._opacity);
 }
});

$.ui.plugin.add("sortable", "scroll", {
 start: function(event, ui) {
 var i = $(this).data("sortable"), o = i.options;
 if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') i.overflowOffset = i.scrollParent.offset();
 },
 sort: function(event, ui) {

 var i = $(this).data("sortable"), o = i.options, scrolled = false;

 if(i.scrollParent[0] != document && i.scrollParent[0].tagName != 'HTML') {

 if((i.overflowOffset.top + i.scrollParent[0].offsetHeight) - event.pageY < o.scrollSensitivity)
 i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop + o.scrollSpeed;
 else if(event.pageY - i.overflowOffset.top < o.scrollSensitivity)
 i.scrollParent[0].scrollTop = scrolled = i.scrollParent[0].scrollTop - o.scrollSpeed;

 if((i.overflowOffset.left + i.scrollParent[0].offsetWidth) - event.pageX < o.scrollSensitivity)
 i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft + o.scrollSpeed;
 else if(event.pageX - i.overflowOffset.left < o.scrollSensitivity)
 i.scrollParent[0].scrollLeft = scrolled = i.scrollParent[0].scrollLeft - o.scrollSpeed;

 } else {

 if(event.pageY - $(document).scrollTop() < o.scrollSensitivity)
 scrolled = $(document).scrollTop($(document).scrollTop() - o.scrollSpeed);
 else if($(window).height() - (event.pageY - $(document).scrollTop()) < o.scrollSensitivity)
 scrolled = $(document).scrollTop($(document).scrollTop() + o.scrollSpeed);

 if(event.pageX - $(document).scrollLeft() < o.scrollSensitivity)
 scrolled = $(document).scrollLeft($(document).scrollLeft() - o.scrollSpeed);
 else if($(window).width() - (event.pageX - $(document).scrollLeft()) < o.scrollSensitivity)
 scrolled = $(document).scrollLeft($(document).scrollLeft() + o.scrollSpeed);

 }

 if(scrolled !== false && $.ui.ddmanager && !o.dropBehaviour)
 $.ui.ddmanager.prepareOffsets(i, event);

 }
});

$.ui.plugin.add("sortable", "zIndex", {
 start: function(event, ui) {
 var t = ui.helper, i = $(this).data('sortable');
 if(t.css("zIndex")) i.options._zIndex = t.css("zIndex");
 t.css('zIndex', i.options.zIndex);
 },
 beforeStop: function(event, ui) {
 var i = $(this).data('sortable');
 if(i.options._zIndex) $(ui.helper).css('zIndex', i.options._zIndex == 'auto' ? '' : i.options._zIndex);
 }
});

})(jQuery);
