/* /var/www/vhosts/umbrella/htdocs/js/jquery-1.4.2.min.js */
/*!
 * jQuery JavaScript Library v1.4.2
 * http://jquery.com/
 *
 * Copyright 2010, John Resig
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * Includes Sizzle.js
 * http://sizzlejs.com/
 * Copyright 2010, The Dojo Foundation
 * Released under the MIT, BSD, and GPL Licenses.
 *
 * Date: Sat Feb 13 22:33:48 2010 -0500
 */
(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML="   <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),f=d.shift();if(f==="inprogress")f=d.shift();if(f){b==="fx"&&d.unshift("inprogress");f.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===
w)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var Aa=/[\n\t]/g,ca=/\s+/,Za=/\r/g,$a=/href|src|style/,ab=/(button|input)/i,bb=/(button|input|object|select|textarea)/i,
cb=/^(a|area)$/i,Ba=/radio|checkbox/;c.fn.extend({attr:function(a,b){return X(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(n){var r=c(this);r.addClass(a.call(this,n,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1)if(e.className){for(var j=" "+e.className+" ",
i=e.className,o=0,k=b.length;o<k;o++)if(j.indexOf(" "+b[o]+" ")<0)i+=" "+b[o];e.className=c.trim(i)}else e.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(k){var n=c(this);n.removeClass(a.call(this,k,n.attr("class")))});if(a&&typeof a==="string"||a===w)for(var b=(a||"").split(ca),d=0,f=this.length;d<f;d++){var e=this[d];if(e.nodeType===1&&e.className)if(a){for(var j=(" "+e.className+" ").replace(Aa," "),i=0,o=b.length;i<o;i++)j=j.replace(" "+b[i]+" ",
" ");e.className=c.trim(j)}else e.className=""}return this},toggleClass:function(a,b){var d=typeof a,f=typeof b==="boolean";if(c.isFunction(a))return this.each(function(e){var j=c(this);j.toggleClass(a.call(this,e,j.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var e,j=0,i=c(this),o=b,k=a.split(ca);e=k[j++];){o=f?o:!i.hasClass(e);i[o?"addClass":"removeClass"](e)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=
this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(Aa," ").indexOf(a)>-1)return true;return false},val:function(a){if(a===w){var b=this[0];if(b){if(c.nodeName(b,"option"))return(b.attributes.value||{}).specified?b.value:b.text;if(c.nodeName(b,"select")){var d=b.selectedIndex,f=[],e=b.options;b=b.type==="select-one";if(d<0)return null;var j=b?d:0;for(d=b?d+1:e.length;j<d;j++){var i=
e[j];if(i.selected){a=c(i).val();if(b)return a;f.push(a)}}return f}if(Ba.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Za,"")}return w}var o=c.isFunction(a);return this.each(function(k){var n=c(this),r=a;if(this.nodeType===1){if(o)r=a.call(this,k,n.val());if(typeof r==="number")r+="";if(c.isArray(r)&&Ba.test(this.type))this.checked=c.inArray(n.val(),r)>=0;else if(c.nodeName(this,"select")){var u=c.makeArray(r);c("option",this).each(function(){this.selected=
c.inArray(c(this).val(),u)>=0});if(!u.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,f){if(!a||a.nodeType===3||a.nodeType===8)return w;if(f&&b in c.attrFn)return c(a)[b](d);f=a.nodeType!==1||!c.isXMLDoc(a);var e=d!==w;b=f&&c.props[b]||b;if(a.nodeType===1){var j=$a.test(b);if(b in a&&f&&!j){if(e){b==="type"&&ab.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:bb.test(a.nodeName)||cb.test(a.nodeName)&&a.href?0:w;return a[b]}if(!c.support.style&&f&&b==="style"){if(e)a.style.cssText=""+d;return a.style.cssText}e&&a.setAttribute(b,""+d);a=!c.support.hrefNormalized&&f&&j?a.getAttribute(b,2):a.getAttribute(b);return a===null?w:a}return c.style(a,b,d)}});var O=/\.(.*)$/,db=function(a){return a.replace(/[^\w\s\.\|`]/g,
function(b){return"\\"+b})};c.event={add:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){if(a.setInterval&&a!==A&&!a.frameElement)a=A;var e,j;if(d.handler){e=d;d=e.handler}if(!d.guid)d.guid=c.guid++;if(j=c.data(a)){var i=j.events=j.events||{},o=j.handle;if(!o)j.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,arguments):w};o.elem=a;b=b.split(" ");for(var k,n=0,r;k=b[n++];){j=e?c.extend({},e):{handler:d,data:f};if(k.indexOf(".")>-1){r=k.split(".");
k=r.shift();j.namespace=r.slice(0).sort().join(".")}else{r=[];j.namespace=""}j.type=k;j.guid=d.guid;var u=i[k],z=c.event.special[k]||{};if(!u){u=i[k]=[];if(!z.setup||z.setup.call(a,f,r,o)===false)if(a.addEventListener)a.addEventListener(k,o,false);else a.attachEvent&&a.attachEvent("on"+k,o)}if(z.add){z.add.call(a,j);if(!j.handler.guid)j.handler.guid=d.guid}u.push(j);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,f){if(!(a.nodeType===3||a.nodeType===8)){var e,j=0,i,o,k,n,r,u,z=c.data(a),
C=z&&z.events;if(z&&C){if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(e in C)c.event.remove(a,e+b)}else{for(b=b.split(" ");e=b[j++];){n=e;i=e.indexOf(".")<0;o=[];if(!i){o=e.split(".");e=o.shift();k=new RegExp("(^|\\.)"+c.map(o.slice(0).sort(),db).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(r=C[e])if(d){n=c.event.special[e]||{};for(B=f||0;B<r.length;B++){u=r[B];if(d.guid===u.guid){if(i||k.test(u.namespace)){f==null&&r.splice(B--,1);n.remove&&n.remove.call(a,u)}if(f!=
null)break}}if(r.length===0||f!=null&&r.length===1){if(!n.teardown||n.teardown.call(a,o)===false)Ca(a,e,z.handle);delete C[e]}}else for(var B=0;B<r.length;B++){u=r[B];if(i||k.test(u.namespace)){c.event.remove(a,n,u.handler,B);r.splice(B--,1)}}}if(c.isEmptyObject(C)){if(b=z.handle)b.elem=null;delete z.events;delete z.handle;c.isEmptyObject(z)&&c.removeData(a)}}}}},trigger:function(a,b,d,f){var e=a.type||a;if(!f){a=typeof a==="object"?a[G]?a:c.extend(c.Event(e),a):c.Event(e);if(e.indexOf("!")>=0){a.type=
e=e.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[e]&&c.each(c.cache,function(){this.events&&this.events[e]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return w;a.result=w;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(f=c.data(d,"handle"))&&f.apply(d,b);f=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+e]&&d["on"+e].apply(d,b)===false)a.result=false}catch(j){}if(!a.isPropagationStopped()&&
f)c.event.trigger(a,b,f,true);else if(!a.isDefaultPrevented()){f=a.target;var i,o=c.nodeName(f,"a")&&e==="click",k=c.event.special[e]||{};if((!k._default||k._default.call(d,a)===false)&&!o&&!(f&&f.nodeName&&c.noData[f.nodeName.toLowerCase()])){try{if(f[e]){if(i=f["on"+e])f["on"+e]=null;c.event.triggered=true;f[e]()}}catch(n){}if(i)f["on"+e]=i;c.event.triggered=false}}},handle:function(a){var b,d,f,e;a=arguments[0]=c.event.fix(a||A.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;
if(!b){d=a.type.split(".");a.type=d.shift();f=new RegExp("(^|\\.)"+d.slice(0).sort().join("\\.(?:.*\\.)?")+"(\\.|$)")}e=c.data(this,"events");d=e[a.type];if(e&&d){d=d.slice(0);e=0;for(var j=d.length;e<j;e++){var i=d[e];if(b||f.test(i.namespace)){a.handler=i.handler;a.data=i.data;a.handleObj=i;i=i.handler.apply(this,arguments);if(i!==w){a.result=i;if(i===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix:function(a){if(a[G])return a;var b=a;a=c.Event(b);for(var d=this.props.length,f;d;){f=this.props[--d];a[f]=b[f]}if(!a.target)a.target=a.srcElement||s;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=s.documentElement;d=s.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(!a.which&&(a.charCode||a.charCode===0?a.charCode:a.keyCode))a.which=a.charCode||a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==w)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,a.origType,c.extend({},a,{handler:oa}))},remove:function(a){var b=true,d=a.origType.replace(O,"");c.each(c.data(this,
"events").live||[],function(){if(d===this.origType.replace(O,""))return b=false});b&&c.event.remove(this,a.origType,oa)}},beforeunload:{setup:function(a,b,d){if(this.setInterval)this.onbeforeunload=d;return false},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};var Ca=s.removeEventListener?function(a,b,d){a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=
a;this.type=a.type}else this.type=a;this.timeStamp=J();this[G]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=Z;var a=this.originalEvent;if(a){a.preventDefault&&a.preventDefault();a.returnValue=false}},stopPropagation:function(){this.isPropagationStopped=Z;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=Z;this.stopPropagation()},isDefaultPrevented:Y,isPropagationStopped:Y,
isImmediatePropagationStopped:Y};var Da=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},Ea=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?Ea:Da,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?Ea:Da)}}});if(!c.support.submitBubbles)c.event.special.submit=
{setup:function(){if(this.nodeName.toLowerCase()!=="form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length)return na("submit",this,arguments)});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13)return na("submit",this,arguments)})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};
if(!c.support.changeBubbles){var da=/textarea|input|select/i,ea,Fa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(f){return f.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},fa=function(a,b){var d=a.target,f,e;if(!(!da.test(d.nodeName)||d.readOnly)){f=c.data(d,"_change_data");e=Fa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",
e);if(!(f===w||e===f))if(f!=null||e){a.type="change";return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:fa,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return fa.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return fa.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,
"_change_data",Fa(a))}},setup:function(){if(this.type==="file")return false;for(var a in ea)c.event.add(this,a+".specialChange",ea[a]);return da.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return da.test(this.nodeName)}};ea=c.event.special.change.filters}s.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(f){f=c.event.fix(f);f.type=b;return c.event.handle.call(this,f)}c.event.special[b]={setup:function(){this.addEventListener(a,
d,true)},teardown:function(){this.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,f,e){if(typeof d==="object"){for(var j in d)this[b](j,f,d[j],e);return this}if(c.isFunction(f)){e=f;f=w}var i=b==="one"?c.proxy(e,function(k){c(this).unbind(k,i);return e.apply(this,arguments)}):e;if(d==="unload"&&b!=="one")this.one(d,f,e);else{j=0;for(var o=this.length;j<o;j++)c.event.add(this[j],d,i,f)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&
!a.preventDefault)for(var d in a)this.unbind(d,a[d]);else{d=0;for(var f=this.length;d<f;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,f){return this.live(b,d,f,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){a=c.Event(a);a.preventDefault();a.stopPropagation();c.event.trigger(a,b,this[0]);return a.result}},
toggle:function(a){for(var b=arguments,d=1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(f){var e=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,e+1);f.preventDefault();return b[e].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var Ga={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,f,e,j){var i,o=0,k,n,r=j||this.selector,
u=j?this:c(this.context);if(c.isFunction(f)){e=f;f=w}for(d=(d||"").split(" ");(i=d[o++])!=null;){j=O.exec(i);k="";if(j){k=j[0];i=i.replace(O,"")}if(i==="hover")d.push("mouseenter"+k,"mouseleave"+k);else{n=i;if(i==="focus"||i==="blur"){d.push(Ga[i]+k);i+=k}else i=(Ga[i]||i)+k;b==="live"?u.each(function(){c.event.add(this,pa(i,r),{data:f,selector:r,handler:e,origType:i,origHandler:e,preType:n})}):u.unbind(pa(i,r),e)}}return this}});c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),
function(a,b){c.fn[b]=function(d){return d?this.bind(b,d):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});A.attachEvent&&!A.addEventListener&&A.attachEvent("onunload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});(function(){function a(g){for(var h="",l,m=0;g[m];m++){l=g[m];if(l.nodeType===3||l.nodeType===4)h+=l.nodeValue;else if(l.nodeType!==8)h+=a(l.childNodes)}return h}function b(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];
if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1&&!p){t.sizcache=l;t.sizset=q}if(t.nodeName.toLowerCase()===h){y=t;break}t=t[g]}m[q]=y}}}function d(g,h,l,m,q,p){q=0;for(var v=m.length;q<v;q++){var t=m[q];if(t){t=t[g];for(var y=false;t;){if(t.sizcache===l){y=m[t.sizset];break}if(t.nodeType===1){if(!p){t.sizcache=l;t.sizset=q}if(typeof h!=="string"){if(t===h){y=true;break}}else if(k.filter(h,[t]).length>0){y=t;break}}t=t[g]}m[q]=y}}}var f=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
e=0,j=Object.prototype.toString,i=false,o=true;[0,0].sort(function(){o=false;return 0});var k=function(g,h,l,m){l=l||[];var q=h=h||s;if(h.nodeType!==1&&h.nodeType!==9)return[];if(!g||typeof g!=="string")return l;for(var p=[],v,t,y,S,H=true,M=x(h),I=g;(f.exec(""),v=f.exec(I))!==null;){I=v[3];p.push(v[1]);if(v[2]){S=v[3];break}}if(p.length>1&&r.exec(g))if(p.length===2&&n.relative[p[0]])t=ga(p[0]+p[1],h);else for(t=n.relative[p[0]]?[h]:k(p.shift(),h);p.length;){g=p.shift();if(n.relative[g])g+=p.shift();
t=ga(g,t)}else{if(!m&&p.length>1&&h.nodeType===9&&!M&&n.match.ID.test(p[0])&&!n.match.ID.test(p[p.length-1])){v=k.find(p.shift(),h,M);h=v.expr?k.filter(v.expr,v.set)[0]:v.set[0]}if(h){v=m?{expr:p.pop(),set:z(m)}:k.find(p.pop(),p.length===1&&(p[0]==="~"||p[0]==="+")&&h.parentNode?h.parentNode:h,M);t=v.expr?k.filter(v.expr,v.set):v.set;if(p.length>0)y=z(t);else H=false;for(;p.length;){var D=p.pop();v=D;if(n.relative[D])v=p.pop();else D="";if(v==null)v=h;n.relative[D](y,v,M)}}else y=[]}y||(y=t);y||k.error(D||
g);if(j.call(y)==="[object Array]")if(H)if(h&&h.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&E(h,y[g])))l.push(t[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&l.push(t[g]);else l.push.apply(l,y);else z(y,l);if(S){k(S,q,l,m);k.uniqueSort(l)}return l};k.uniqueSort=function(g){if(B){i=o;g.sort(B);if(i)for(var h=1;h<g.length;h++)g[h]===g[h-1]&&g.splice(h--,1)}return g};k.matches=function(g,h){return k(g,null,null,h)};k.find=function(g,h,l){var m,q;if(!g)return[];
for(var p=0,v=n.order.length;p<v;p++){var t=n.order[p];if(q=n.leftMatch[t].exec(g)){var y=q[1];q.splice(1,1);if(y.substr(y.length-1)!=="\\"){q[1]=(q[1]||"").replace(/\\/g,"");m=n.find[t](q,h,l);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=h.getElementsByTagName("*"));return{set:m,expr:g}};k.filter=function(g,h,l,m){for(var q=g,p=[],v=h,t,y,S=h&&h[0]&&x(h[0]);g&&h.length;){for(var H in n.filter)if((t=n.leftMatch[H].exec(g))!=null&&t[2]){var M=n.filter[H],I,D;D=t[1];y=false;t.splice(1,1);if(D.substr(D.length-
1)!=="\\"){if(v===p)p=[];if(n.preFilter[H])if(t=n.preFilter[H](t,v,l,p,m,S)){if(t===true)continue}else y=I=true;if(t)for(var U=0;(D=v[U])!=null;U++)if(D){I=M(D,t,U,v);var Ha=m^!!I;if(l&&I!=null)if(Ha)y=true;else v[U]=false;else if(Ha){p.push(D);y=true}}if(I!==w){l||(v=p);g=g.replace(n.match[H],"");if(!y)return[];break}}}if(g===q)if(y==null)k.error(g);else break;q=g}return v};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=k.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\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},
relative:{"+":function(g,h){var l=typeof h==="string",m=l&&!/\W/.test(h);l=l&&!m;if(m)h=h.toLowerCase();m=0;for(var q=g.length,p;m<q;m++)if(p=g[m]){for(;(p=p.previousSibling)&&p.nodeType!==1;);g[m]=l||p&&p.nodeName.toLowerCase()===h?p||false:p===h}l&&k.filter(h,g,true)},">":function(g,h){var l=typeof h==="string";if(l&&!/\W/.test(h)){h=h.toLowerCase();for(var m=0,q=g.length;m<q;m++){var p=g[m];if(p){l=p.parentNode;g[m]=l.nodeName.toLowerCase()===h?l:false}}}else{m=0;for(q=g.length;m<q;m++)if(p=g[m])g[m]=
l?p.parentNode:p.parentNode===h;l&&k.filter(h,g,true)}},"":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("parentNode",h,m,g,p,l)},"~":function(g,h,l){var m=e++,q=d;if(typeof h==="string"&&!/\W/.test(h)){var p=h=h.toLowerCase();q=b}q("previousSibling",h,m,g,p,l)}},find:{ID:function(g,h,l){if(typeof h.getElementById!=="undefined"&&!l)return(g=h.getElementById(g[1]))?[g]:[]},NAME:function(g,h){if(typeof h.getElementsByName!=="undefined"){var l=[];
h=h.getElementsByName(g[1]);for(var m=0,q=h.length;m<q;m++)h[m].getAttribute("name")===g[1]&&l.push(h[m]);return l.length===0?null:l}},TAG:function(g,h){return h.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,h,l,m,q,p){g=" "+g[1].replace(/\\/g,"")+" ";if(p)return g;p=0;for(var v;(v=h[p])!=null;p++)if(v)if(q^(v.className&&(" "+v.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))l||m.push(v);else if(l)h[p]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},
CHILD:function(g){if(g[1]==="nth"){var h=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=h[1]+(h[2]||1)-0;g[3]=h[3]-0}g[0]=e++;return g},ATTR:function(g,h,l,m,q,p){h=g[1].replace(/\\/g,"");if(!p&&n.attrMap[h])g[1]=n.attrMap[h];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,h,l,m,q){if(g[1]==="not")if((f.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,h);else{g=k.filter(g[3],h,l,true^q);l||m.push.apply(m,
g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,h,l){return!!k(l[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},
text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},
setFilters:{first:function(g,h){return h===0},last:function(g,h,l,m){return h===m.length-1},even:function(g,h){return h%2===0},odd:function(g,h){return h%2===1},lt:function(g,h,l){return h<l[3]-0},gt:function(g,h,l){return h>l[3]-0},nth:function(g,h,l){return l[3]-0===h},eq:function(g,h,l){return l[3]-0===h}},filter:{PSEUDO:function(g,h,l,m){var q=h[1],p=n.filters[q];if(p)return p(g,l,h,m);else if(q==="contains")return(g.textContent||g.innerText||a([g])||"").indexOf(h[3])>=0;else if(q==="not"){h=
h[3];l=0;for(m=h.length;l<m;l++)if(h[l]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+q)},CHILD:function(g,h){var l=h[1],m=g;switch(l){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(l==="first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":l=h[2];var q=h[3];if(l===1&&q===0)return true;h=h[0];var p=g.parentNode;if(p&&(p.sizcache!==h||!g.nodeIndex)){var v=0;for(m=p.firstChild;m;m=
m.nextSibling)if(m.nodeType===1)m.nodeIndex=++v;p.sizcache=h}g=g.nodeIndex-q;return l===0?g===0:g%l===0&&g/l>=0}},ID:function(g,h){return g.nodeType===1&&g.getAttribute("id")===h},TAG:function(g,h){return h==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===h},CLASS:function(g,h){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(h)>-1},ATTR:function(g,h){var l=h[1];g=n.attrHandle[l]?n.attrHandle[l](g):g[l]!=null?g[l]:g.getAttribute(l);l=g+"";var m=h[2];h=h[4];return g==null?m==="!=":m===
"="?l===h:m==="*="?l.indexOf(h)>=0:m==="~="?(" "+l+" ").indexOf(h)>=0:!h?l&&g!==false:m==="!="?l!==h:m==="^="?l.indexOf(h)===0:m==="$="?l.substr(l.length-h.length)===h:m==="|="?l===h||l.substr(0,h.length+1)===h+"-":false},POS:function(g,h,l,m){var q=n.setFilters[h[2]];if(q)return q(g,l,h,m)}}},r=n.match.POS;for(var u in n.match){n.match[u]=new RegExp(n.match[u].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[u]=new RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[u].source.replace(/\\(\d+)/g,function(g,
h){return"\\"+(h-0+1)}))}var z=function(g,h){g=Array.prototype.slice.call(g,0);if(h){h.push.apply(h,g);return h}return g};try{Array.prototype.slice.call(s.documentElement.childNodes,0)}catch(C){z=function(g,h){h=h||[];if(j.call(g)==="[object Array]")Array.prototype.push.apply(h,g);else if(typeof g.length==="number")for(var l=0,m=g.length;l<m;l++)h.push(g[l]);else for(l=0;g[l];l++)h.push(g[l]);return h}}var B;if(s.documentElement.compareDocumentPosition)B=function(g,h){if(!g.compareDocumentPosition||
!h.compareDocumentPosition){if(g==h)i=true;return g.compareDocumentPosition?-1:1}g=g.compareDocumentPosition(h)&4?-1:g===h?0:1;if(g===0)i=true;return g};else if("sourceIndex"in s.documentElement)B=function(g,h){if(!g.sourceIndex||!h.sourceIndex){if(g==h)i=true;return g.sourceIndex?-1:1}g=g.sourceIndex-h.sourceIndex;if(g===0)i=true;return g};else if(s.createRange)B=function(g,h){if(!g.ownerDocument||!h.ownerDocument){if(g==h)i=true;return g.ownerDocument?-1:1}var l=g.ownerDocument.createRange(),m=
h.ownerDocument.createRange();l.setStart(g,0);l.setEnd(g,0);m.setStart(h,0);m.setEnd(h,0);g=l.compareBoundaryPoints(Range.START_TO_END,m);if(g===0)i=true;return g};(function(){var g=s.createElement("div"),h="script"+(new Date).getTime();g.innerHTML="<a name='"+h+"'/>";var l=s.documentElement;l.insertBefore(g,l.firstChild);if(s.getElementById(h)){n.find.ID=function(m,q,p){if(typeof q.getElementById!=="undefined"&&!p)return(q=q.getElementById(m[1]))?q.id===m[1]||typeof q.getAttributeNode!=="undefined"&&
q.getAttributeNode("id").nodeValue===m[1]?[q]:w:[]};n.filter.ID=function(m,q){var p=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&p&&p.nodeValue===q}}l.removeChild(g);l=g=null})();(function(){var g=s.createElement("div");g.appendChild(s.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(h,l){l=l.getElementsByTagName(h[1]);if(h[1]==="*"){h=[];for(var m=0;l[m];m++)l[m].nodeType===1&&h.push(l[m]);l=h}return l};g.innerHTML="<a href='#'></a>";
if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(h){return h.getAttribute("href",2)};g=null})();s.querySelectorAll&&function(){var g=k,h=s.createElement("div");h.innerHTML="<p class='TEST'></p>";if(!(h.querySelectorAll&&h.querySelectorAll(".TEST").length===0)){k=function(m,q,p,v){q=q||s;if(!v&&q.nodeType===9&&!x(q))try{return z(q.querySelectorAll(m),p)}catch(t){}return g(m,q,p,v)};for(var l in g)k[l]=g[l];h=null}}();
(function(){var g=s.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(h,l,m){if(typeof l.getElementsByClassName!=="undefined"&&!m)return l.getElementsByClassName(h[1])};g=null}}})();var E=s.compareDocumentPosition?function(g,h){return!!(g.compareDocumentPosition(h)&16)}:
function(g,h){return g!==h&&(g.contains?g.contains(h):true)},x=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false},ga=function(g,h){var l=[],m="",q;for(h=h.nodeType?[h]:h;q=n.match.PSEUDO.exec(g);){m+=q[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;q=0;for(var p=h.length;q<p;q++)k(g,h[q],l);return k.filter(m,l)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=a;c.isXMLDoc=x;c.contains=E})();var eb=/Until$/,fb=/^(?:parents|prevUntil|prevAll)/,
gb=/,/;R=Array.prototype.slice;var Ia=function(a,b,d){if(c.isFunction(b))return c.grep(a,function(e,j){return!!b.call(e,j,e)===d});else if(b.nodeType)return c.grep(a,function(e){return e===b===d});else if(typeof b==="string"){var f=c.grep(a,function(e){return e.nodeType===1});if(Ua.test(b))return c.filter(b,f,!d);else b=c.filter(b,f)}return c.grep(a,function(e){return c.inArray(e,b)>=0===d})};c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,f=0,e=this.length;f<e;f++){d=b.length;
c.find(a,this[f],b);if(f>0)for(var j=d;j<b.length;j++)for(var i=0;i<d;i++)if(b[i]===b[j]){b.splice(j--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,f=b.length;d<f;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(Ia(this,a,false),"not",a)},filter:function(a){return this.pushStack(Ia(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){if(c.isArray(a)){var d=[],f=this[0],e,j=
{},i;if(f&&a.length){e=0;for(var o=a.length;e<o;e++){i=a[e];j[i]||(j[i]=c.expr.match.POS.test(i)?c(i,b||this.context):i)}for(;f&&f.ownerDocument&&f!==b;){for(i in j){e=j[i];if(e.jquery?e.index(f)>-1:c(f).is(e)){d.push({selector:i,elem:f});delete j[i]}}f=f.parentNode}}return d}var k=c.expr.match.POS.test(a)?c(a,b||this.context):null;return this.map(function(n,r){for(;r&&r.ownerDocument&&r!==b;){if(k?k.index(r)>-1:c(r).is(a))return r;r=r.parentNode}return null})},index:function(a){if(!a||typeof a===
"string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){a=typeof a==="string"?c(a,b||this.context):c.makeArray(a);b=c.merge(this.get(),a);return this.pushStack(qa(a[0])||qa(b[0])?b:c.unique(b))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",
d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?
a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,f){var e=c.map(this,b,d);eb.test(a)||(f=d);if(f&&typeof f==="string")e=c.filter(f,e);e=this.length>1?c.unique(e):e;if((this.length>1||gb.test(f))&&fb.test(a))e=e.reverse();return this.pushStack(e,a,R.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return c.find.matches(a,b)},dir:function(a,b,d){var f=[];for(a=a[b];a&&a.nodeType!==9&&(d===w||a.nodeType!==1||!c(a).is(d));){a.nodeType===
1&&f.push(a);a=a[b]}return f},nth:function(a,b,d){b=b||1;for(var f=0;a;a=a[d])if(a.nodeType===1&&++f===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var Ja=/ jQuery\d+="(?:\d+|null)"/g,V=/^\s+/,Ka=/(<([\w:]+)[^>]*?)\/>/g,hb=/^(?:area|br|col|embed|hr|img|input|link|meta|param)$/i,La=/<([\w:]+)/,ib=/<tbody/i,jb=/<|&#?\w+;/,ta=/<script|<object|<embed|<option|<style/i,ua=/checked\s*(?:[^=]|=\s*.checked.)/i,Ma=function(a,b,d){return hb.test(d)?
a:b+"></"+d+">"},F={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};F.optgroup=F.option;F.tbody=F.tfoot=F.colgroup=F.caption=F.thead;F.th=F.td;if(!c.support.htmlSerialize)F._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==w)return this.empty().append((this[0]&&this[0].ownerDocument||s).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,f;(f=this[d])!=null;d++)if(!a||c.filter(a,[f]).length){if(!b&&f.nodeType===1){c.cleanData(f.getElementsByTagName("*"));c.cleanData([f])}f.parentNode&&f.parentNode.removeChild(f)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,f=this.ownerDocument;if(!d){d=f.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(Ja,"").replace(/=([^="'>\s]+\/)>/g,'="$1">').replace(V,"")],f)[0]}else return this.cloneNode(true)});if(a===true){ra(this,b);ra(this.find("*"),b.find("*"))}return b},html:function(a){if(a===w)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(Ja,
""):null;else if(typeof a==="string"&&!ta.test(a)&&(c.support.leadingWhitespace||!V.test(a))&&!F[(La.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ka,Ma);try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(f){this.empty().append(a)}}else c.isFunction(a)?this.each(function(e){var j=c(this),i=j.html();j.empty().append(function(){return a.call(this,e,i)})}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&
this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),f=d.html();d.replaceWith(a.call(this,b,f))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){function f(u){return c.nodeName(u,"table")?u.getElementsByTagName("tbody")[0]||
u.appendChild(u.ownerDocument.createElement("tbody")):u}var e,j,i=a[0],o=[],k;if(!c.support.checkClone&&arguments.length===3&&typeof i==="string"&&ua.test(i))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(i))return this.each(function(u){var z=c(this);a[0]=i.call(this,u,b?z.html():w);z.domManip(a,b,d)});if(this[0]){e=i&&i.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:sa(a,this,o);k=e.fragment;if(j=k.childNodes.length===
1?(k=k.firstChild):k.firstChild){b=b&&c.nodeName(j,"tr");for(var n=0,r=this.length;n<r;n++)d.call(b?f(this[n],j):this[n],n>0||e.cacheable||this.length>1?k.cloneNode(true):k)}o.length&&c.each(o,Qa)}return this}});c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var f=[];d=c(d);var e=this.length===1&&this[0].parentNode;if(e&&e.nodeType===11&&e.childNodes.length===1&&d.length===1){d[b](this[0]);
return this}else{e=0;for(var j=d.length;e<j;e++){var i=(e>0?this.clone(true):this).get();c.fn[b].apply(c(d[e]),i);f=f.concat(i)}return this.pushStack(f,a,d.selector)}}});c.extend({clean:function(a,b,d,f){b=b||s;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||s;for(var e=[],j=0,i;(i=a[j])!=null;j++){if(typeof i==="number")i+="";if(i){if(typeof i==="string"&&!jb.test(i))i=b.createTextNode(i);else if(typeof i==="string"){i=i.replace(Ka,Ma);var o=(La.exec(i)||["",
""])[1].toLowerCase(),k=F[o]||F._default,n=k[0],r=b.createElement("div");for(r.innerHTML=k[1]+i+k[2];n--;)r=r.lastChild;if(!c.support.tbody){n=ib.test(i);o=o==="table"&&!n?r.firstChild&&r.firstChild.childNodes:k[1]==="<table>"&&!n?r.childNodes:[];for(k=o.length-1;k>=0;--k)c.nodeName(o[k],"tbody")&&!o[k].childNodes.length&&o[k].parentNode.removeChild(o[k])}!c.support.leadingWhitespace&&V.test(i)&&r.insertBefore(b.createTextNode(V.exec(i)[0]),r.firstChild);i=r.childNodes}if(i.nodeType)e.push(i);else e=
c.merge(e,i)}}if(d)for(j=0;e[j];j++)if(f&&c.nodeName(e[j],"script")&&(!e[j].type||e[j].type.toLowerCase()==="text/javascript"))f.push(e[j].parentNode?e[j].parentNode.removeChild(e[j]):e[j]);else{e[j].nodeType===1&&e.splice.apply(e,[j+1,0].concat(c.makeArray(e[j].getElementsByTagName("script"))));d.appendChild(e[j])}return e},cleanData:function(a){for(var b,d,f=c.cache,e=c.event.special,j=c.support.deleteExpando,i=0,o;(o=a[i])!=null;i++)if(d=o[c.expando]){b=f[d];if(b.events)for(var k in b.events)e[k]?
c.event.remove(o,k):Ca(o,k,b.handle);if(j)delete o[c.expando];else o.removeAttribute&&o.removeAttribute(c.expando);delete f[d]}}});var kb=/z-?index|font-?weight|opacity|zoom|line-?height/i,Na=/alpha\([^)]*\)/,Oa=/opacity=([^)]*)/,ha=/float/i,ia=/-([a-z])/ig,lb=/([A-Z])/g,mb=/^-?\d+(?:px)?$/i,nb=/^-?\d/,ob={position:"absolute",visibility:"hidden",display:"block"},pb=["Left","Right"],qb=["Top","Bottom"],rb=s.defaultView&&s.defaultView.getComputedStyle,Pa=c.support.cssFloat?"cssFloat":"styleFloat",ja=
function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){return X(this,a,b,true,function(d,f,e){if(e===w)return c.curCSS(d,f);if(typeof e==="number"&&!kb.test(f))e+="px";c.style(d,f,e)})};c.extend({style:function(a,b,d){if(!a||a.nodeType===3||a.nodeType===8)return w;if((b==="width"||b==="height")&&parseFloat(d)<0)d=w;var f=a.style||a,e=d!==w;if(!c.support.opacity&&b==="opacity"){if(e){f.zoom=1;b=parseInt(d,10)+""==="NaN"?"":"alpha(opacity="+d*100+")";a=f.filter||c.curCSS(a,"filter")||"";f.filter=
Na.test(a)?a.replace(Na,b):b}return f.filter&&f.filter.indexOf("opacity=")>=0?parseFloat(Oa.exec(f.filter)[1])/100+"":""}if(ha.test(b))b=Pa;b=b.replace(ia,ja);if(e)f[b]=d;return f[b]},css:function(a,b,d,f){if(b==="width"||b==="height"){var e,j=b==="width"?pb:qb;function i(){e=b==="width"?a.offsetWidth:a.offsetHeight;f!=="border"&&c.each(j,function(){f||(e-=parseFloat(c.curCSS(a,"padding"+this,true))||0);if(f==="margin")e+=parseFloat(c.curCSS(a,"margin"+this,true))||0;else e-=parseFloat(c.curCSS(a,
"border"+this+"Width",true))||0})}a.offsetWidth!==0?i():c.swap(a,ob,i);return Math.max(0,Math.round(e))}return c.curCSS(a,b,d)},curCSS:function(a,b,d){var f,e=a.style;if(!c.support.opacity&&b==="opacity"&&a.currentStyle){f=Oa.test(a.currentStyle.filter||"")?parseFloat(RegExp.$1)/100+"":"";return f===""?"1":f}if(ha.test(b))b=Pa;if(!d&&e&&e[b])f=e[b];else if(rb){if(ha.test(b))b="float";b=b.replace(lb,"-$1").toLowerCase();e=a.ownerDocument.defaultView;if(!e)return null;if(a=e.getComputedStyle(a,null))f=
a.getPropertyValue(b);if(b==="opacity"&&f==="")f="1"}else if(a.currentStyle){d=b.replace(ia,ja);f=a.currentStyle[b]||a.currentStyle[d];if(!mb.test(f)&&nb.test(f)){b=e.left;var j=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;e.left=d==="fontSize"?"1em":f||0;f=e.pixelLeft+"px";e.left=b;a.runtimeStyle.left=j}}return f},swap:function(a,b,d){var f={};for(var e in b){f[e]=a.style[e];a.style[e]=b[e]}d.call(a);for(e in b)a.style[e]=f[e]}});if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=
a.offsetWidth,d=a.offsetHeight,f=a.nodeName.toLowerCase()==="tr";return b===0&&d===0&&!f?true:b>0&&d>0&&!f?false:c.curCSS(a,"display")==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var sb=J(),tb=/<script(.|\s)*?\/script>/gi,ub=/select|textarea/i,vb=/color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week/i,N=/=\?(&|$)/,ka=/\?/,wb=/(\?|&)_=.*?(&|$)/,xb=/^(\w+:)?\/\/([^\/?#]+)/,yb=/%20/g,zb=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!==
"string")return zb.call(this,a);else if(!this.length)return this;var f=a.indexOf(" ");if(f>=0){var e=a.slice(f,a.length);a=a.slice(0,f)}f="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);f="POST"}var j=this;c.ajax({url:a,type:f,dataType:"html",data:b,complete:function(i,o){if(o==="success"||o==="notmodified")j.html(e?c("<div />").append(i.responseText.replace(tb,"")).find(e):i.responseText);d&&j.each(d,[i.responseText,o,i])}});return this},
serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ub.test(this.nodeName)||vb.test(this.type))}).map(function(a,b){a=c(this).val();return a==null?null:c.isArray(a)?c.map(a,function(d){return{name:b.name,value:d}}):{name:b.name,value:a}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),
function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:f})},getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,f){if(c.isFunction(b)){f=f||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:f})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,
global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:A.XMLHttpRequest&&(A.location.protocol!=="file:"||!A.ActiveXObject)?function(){return new A.XMLHttpRequest}:function(){try{return new A.ActiveXObject("Microsoft.XMLHTTP")}catch(a){}},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},etag:{},ajax:function(a){function b(){e.success&&
e.success.call(k,o,i,x);e.global&&f("ajaxSuccess",[x,e])}function d(){e.complete&&e.complete.call(k,x,i);e.global&&f("ajaxComplete",[x,e]);e.global&&!--c.active&&c.event.trigger("ajaxStop")}function f(q,p){(e.context?c(e.context):c.event).trigger(q,p)}var e=c.extend(true,{},c.ajaxSettings,a),j,i,o,k=a&&a.context||e,n=e.type.toUpperCase();if(e.data&&e.processData&&typeof e.data!=="string")e.data=c.param(e.data,e.traditional);if(e.dataType==="jsonp"){if(n==="GET")N.test(e.url)||(e.url+=(ka.test(e.url)?
"&":"?")+(e.jsonp||"callback")+"=?");else if(!e.data||!N.test(e.data))e.data=(e.data?e.data+"&":"")+(e.jsonp||"callback")+"=?";e.dataType="json"}if(e.dataType==="json"&&(e.data&&N.test(e.data)||N.test(e.url))){j=e.jsonpCallback||"jsonp"+sb++;if(e.data)e.data=(e.data+"").replace(N,"="+j+"$1");e.url=e.url.replace(N,"="+j+"$1");e.dataType="script";A[j]=A[j]||function(q){o=q;b();d();A[j]=w;try{delete A[j]}catch(p){}z&&z.removeChild(C)}}if(e.dataType==="script"&&e.cache===null)e.cache=false;if(e.cache===
false&&n==="GET"){var r=J(),u=e.url.replace(wb,"$1_="+r+"$2");e.url=u+(u===e.url?(ka.test(e.url)?"&":"?")+"_="+r:"")}if(e.data&&n==="GET")e.url+=(ka.test(e.url)?"&":"?")+e.data;e.global&&!c.active++&&c.event.trigger("ajaxStart");r=(r=xb.exec(e.url))&&(r[1]&&r[1]!==location.protocol||r[2]!==location.host);if(e.dataType==="script"&&n==="GET"&&r){var z=s.getElementsByTagName("head")[0]||s.documentElement,C=s.createElement("script");C.src=e.url;if(e.scriptCharset)C.charset=e.scriptCharset;if(!j){var B=
false;C.onload=C.onreadystatechange=function(){if(!B&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){B=true;b();d();C.onload=C.onreadystatechange=null;z&&C.parentNode&&z.removeChild(C)}}}z.insertBefore(C,z.firstChild);return w}var E=false,x=e.xhr();if(x){e.username?x.open(n,e.url,e.async,e.username,e.password):x.open(n,e.url,e.async);try{if(e.data||a&&a.contentType)x.setRequestHeader("Content-Type",e.contentType);if(e.ifModified){c.lastModified[e.url]&&x.setRequestHeader("If-Modified-Since",
c.lastModified[e.url]);c.etag[e.url]&&x.setRequestHeader("If-None-Match",c.etag[e.url])}r||x.setRequestHeader("X-Requested-With","XMLHttpRequest");x.setRequestHeader("Accept",e.dataType&&e.accepts[e.dataType]?e.accepts[e.dataType]+", */*":e.accepts._default)}catch(ga){}if(e.beforeSend&&e.beforeSend.call(k,x,e)===false){e.global&&!--c.active&&c.event.trigger("ajaxStop");x.abort();return false}e.global&&f("ajaxSend",[x,e]);var g=x.onreadystatechange=function(q){if(!x||x.readyState===0||q==="abort"){E||
d();E=true;if(x)x.onreadystatechange=c.noop}else if(!E&&x&&(x.readyState===4||q==="timeout")){E=true;x.onreadystatechange=c.noop;i=q==="timeout"?"timeout":!c.httpSuccess(x)?"error":e.ifModified&&c.httpNotModified(x,e.url)?"notmodified":"success";var p;if(i==="success")try{o=c.httpData(x,e.dataType,e)}catch(v){i="parsererror";p=v}if(i==="success"||i==="notmodified")j||b();else c.handleError(e,x,i,p);d();q==="timeout"&&x.abort();if(e.async)x=null}};try{var h=x.abort;x.abort=function(){x&&h.call(x);
g("abort")}}catch(l){}e.async&&e.timeout>0&&setTimeout(function(){x&&!E&&g("timeout")},e.timeout);try{x.send(n==="POST"||n==="PUT"||n==="DELETE"?e.data:null)}catch(m){c.handleError(e,x,null,m);d()}e.async||g();return x}},handleError:function(a,b,d,f){if(a.error)a.error.call(a.context||a,b,d,f);if(a.global)(a.context?c(a.context):c.event).trigger("ajaxError",[b,a,f])},active:0,httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===
1223||a.status===0}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),f=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(f)c.etag[b]=f;return a.status===304||a.status===0},httpData:function(a,b,d){var f=a.getResponseHeader("content-type")||"",e=b==="xml"||!b&&f.indexOf("xml")>=0;a=e?a.responseXML:a.responseText;e&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b===
"json"||!b&&f.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&f.indexOf("javascript")>=0)c.globalEval(a);return a},param:function(a,b){function d(i,o){if(c.isArray(o))c.each(o,function(k,n){b||/\[\]$/.test(i)?f(i,n):d(i+"["+(typeof n==="object"||c.isArray(n)?k:"")+"]",n)});else!b&&o!=null&&typeof o==="object"?c.each(o,function(k,n){d(i+"["+k+"]",n)}):f(i,o)}function f(i,o){o=c.isFunction(o)?o():o;e[e.length]=encodeURIComponent(i)+"="+encodeURIComponent(o)}var e=[];if(b===w)b=c.ajaxSettings.traditional;
if(c.isArray(a)||a.jquery)c.each(a,function(){f(this.name,this.value)});else for(var j in a)d(j,a[j]);return e.join("&").replace(yb,"+")}});var la={},Ab=/toggle|show|hide/,Bb=/^([+-]=)?([\d+-.]+)(.*)$/,W,va=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b){if(a||a===0)return this.animate(K("show",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");
this[a].style.display=d||"";if(c.css(this[a],"display")==="none"){d=this[a].nodeName;var f;if(la[d])f=la[d];else{var e=c("<"+d+" />").appendTo("body");f=e.css("display");if(f==="none")f="block";e.remove();la[d]=f}c.data(this[a],"olddisplay",f)}}a=0;for(b=this.length;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b){if(a||a===0)return this.animate(K("hide",3),a,b);else{a=0;for(b=this.length;a<b;a++){var d=c.data(this[a],"olddisplay");!d&&d!=="none"&&c.data(this[a],
"olddisplay",c.css(this[a],"display"))}a=0;for(b=this.length;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b){var d=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||d?this.each(function(){var f=d?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(K("toggle",3),a,b);return this},fadeTo:function(a,b,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d)},
animate:function(a,b,d,f){var e=c.speed(b,d,f);if(c.isEmptyObject(a))return this.each(e.complete);return this[e.queue===false?"each":"queue"](function(){var j=c.extend({},e),i,o=this.nodeType===1&&c(this).is(":hidden"),k=this;for(i in a){var n=i.replace(ia,ja);if(i!==n){a[n]=a[i];delete a[i];i=n}if(a[i]==="hide"&&o||a[i]==="show"&&!o)return j.complete.call(this);if((i==="height"||i==="width")&&this.style){j.display=c.css(this,"display");j.overflow=this.style.overflow}if(c.isArray(a[i])){(j.specialEasing=
j.specialEasing||{})[i]=a[i][1];a[i]=a[i][0]}}if(j.overflow!=null)this.style.overflow="hidden";j.curAnim=c.extend({},a);c.each(a,function(r,u){var z=new c.fx(k,j,r);if(Ab.test(u))z[u==="toggle"?o?"show":"hide":u](a);else{var C=Bb.exec(u),B=z.cur(true)||0;if(C){u=parseFloat(C[2]);var E=C[3]||"px";if(E!=="px"){k.style[r]=(u||1)+E;B=(u||1)/z.cur(true)*B;k.style[r]=B+E}if(C[1])u=(C[1]==="-="?-1:1)*u+B;z.custom(B,u,E)}else z.custom(B,u,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);
this.each(function(){for(var f=d.length-1;f>=0;f--)if(d[f].elem===this){b&&d[f](true);d.splice(f,1)}});b||this.dequeue();return this}});c.each({slideDown:K("show",1),slideUp:K("hide",1),slideToggle:K("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,f){return this.animate(b,d,f)}});c.extend({speed:function(a,b,d){var f=a&&typeof a==="object"?a:{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};f.duration=c.fx.off?0:typeof f.duration===
"number"?f.duration:c.fx.speeds[f.duration]||c.fx.speeds._default;f.old=f.complete;f.complete=function(){f.queue!==false&&c(this).dequeue();c.isFunction(f.old)&&f.old.call(this)};return f},easing:{linear:function(a,b,d,f){return d+f*a},swing:function(a,b,d,f){return(-Math.cos(a*Math.PI)/2+0.5)*f+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||
c.fx.step._default)(this);if((this.prop==="height"||this.prop==="width")&&this.elem.style)this.elem.style.display="block"},cur:function(a){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];return(a=parseFloat(c.css(this.elem,this.prop,a)))&&a>-10000?a:parseFloat(c.curCSS(this.elem,this.prop))||0},custom:function(a,b,d){function f(j){return e.step(j)}this.startTime=J();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;
this.pos=this.state=0;var e=this;f.elem=this.elem;if(f()&&c.timers.push(f)&&!W)W=setInterval(c.fx.tick,13)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;this.custom(this.cur(),0)},step:function(a){var b=J(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=
this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var f in this.options.curAnim)if(this.options.curAnim[f]!==true)d=false;if(d){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;a=c.data(this.elem,"olddisplay");this.elem.style.display=a?a:this.options.display;if(c.css(this.elem,"display")==="none")this.elem.style.display="block"}this.options.hide&&c(this.elem).hide();if(this.options.hide||this.options.show)for(var e in this.options.curAnim)c.style(this.elem,
e,this.options.orig[e]);this.options.complete.call(this.elem)}return false}else{e=b-this.startTime;this.state=e/this.options.duration;a=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||a](this.state,e,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||
c.fx.stop()},stop:function(){clearInterval(W);W=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===b.elem}).length};c.fn.offset="getBoundingClientRect"in s.documentElement?
function(a){var b=this[0];if(a)return this.each(function(e){c.offset.setOffset(this,a,e)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);var d=b.getBoundingClientRect(),f=b.ownerDocument;b=f.body;f=f.documentElement;return{top:d.top+(self.pageYOffset||c.support.boxModel&&f.scrollTop||b.scrollTop)-(f.clientTop||b.clientTop||0),left:d.left+(self.pageXOffset||c.support.boxModel&&f.scrollLeft||b.scrollLeft)-(f.clientLeft||b.clientLeft||0)}}:function(a){var b=
this[0];if(a)return this.each(function(r){c.offset.setOffset(this,a,r)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,f=b,e=b.ownerDocument,j,i=e.documentElement,o=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;for(var k=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==o&&b!==i;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;j=e?e.getComputedStyle(b,null):b.currentStyle;
k-=b.scrollTop;n-=b.scrollLeft;if(b===d){k+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(b.nodeName))){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=d;d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&j.overflow!=="visible"){k+=parseFloat(j.borderTopWidth)||0;n+=parseFloat(j.borderLeftWidth)||0}f=j}if(f.position==="relative"||f.position==="static"){k+=o.offsetTop;n+=o.offsetLeft}if(c.offset.supportsFixedPosition&&
f.position==="fixed"){k+=Math.max(i.scrollTop,o.scrollTop);n+=Math.max(i.scrollLeft,o.scrollLeft)}return{top:k,left:n}};c.offset={initialize:function(){var a=s.body,b=s.createElement("div"),d,f,e,j=parseFloat(c.curCSS(a,"marginTop",true))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"});b.innerHTML="<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>";
a.insertBefore(b,a.firstChild);d=b.firstChild;f=d.firstChild;e=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=f.offsetTop!==5;this.doesAddBorderForTableAndCells=e.offsetTop===5;f.style.position="fixed";f.style.top="20px";this.supportsFixedPosition=f.offsetTop===20||f.offsetTop===15;f.style.position=f.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=f.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==j;a.removeChild(b);
c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.curCSS(a,"marginTop",true))||0;d+=parseFloat(c.curCSS(a,"marginLeft",true))||0}return{top:b,left:d}},setOffset:function(a,b,d){if(/static/.test(c.curCSS(a,"position")))a.style.position="relative";var f=c(a),e=f.offset(),j=parseInt(c.curCSS(a,"top",true),10)||0,i=parseInt(c.curCSS(a,"left",true),10)||0;if(c.isFunction(b))b=b.call(a,
d,e);d={top:b.top-e.top+j,left:b.left-e.left+i};"using"in b?b.using.call(a,d):f.css(d)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),f=/^body|html$/i.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.curCSS(a,"marginTop",true))||0;d.left-=parseFloat(c.curCSS(a,"marginLeft",true))||0;f.top+=parseFloat(c.curCSS(b[0],"borderTopWidth",true))||0;f.left+=parseFloat(c.curCSS(b[0],"borderLeftWidth",true))||0;return{top:d.top-
f.top,left:d.left-f.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||s.body;a&&!/^body|html$/i.test(a.nodeName)&&c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(f){var e=this[0],j;if(!e)return null;if(f!==w)return this.each(function(){if(j=wa(this))j.scrollTo(!a?f:c(j).scrollLeft(),a?f:c(j).scrollTop());else this[d]=f});else return(j=wa(e))?"pageXOffset"in j?j[a?"pageYOffset":
"pageXOffset"]:c.support.boxModel&&j.document.documentElement[d]||j.document.body[d]:e[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();c.fn["inner"+b]=function(){return this[0]?c.css(this[0],d,false,"padding"):null};c.fn["outer"+b]=function(f){return this[0]?c.css(this[0],d,false,f?"margin":"border"):null};c.fn[d]=function(f){var e=this[0];if(!e)return f==null?null:this;if(c.isFunction(f))return this.each(function(j){var i=c(this);i[d](f.call(this,j,i[d]()))});return"scrollTo"in
e&&e.document?e.document.compatMode==="CSS1Compat"&&e.document.documentElement["client"+b]||e.document.body["client"+b]:e.nodeType===9?Math.max(e.documentElement["client"+b],e.body["scroll"+b],e.documentElement["scroll"+b],e.body["offset"+b],e.documentElement["offset"+b]):f===w?c.css(e,d):this.css(d,typeof f==="string"?f:f+"px")}});A.jQuery=A.$=c})(window);


/* /var/www/vhosts/umbrella/htdocs/js/cookie.js */
/**
 * Cookie plugin
 *
 * Copyright (c) 2006 Klaus Hartl (stilbuero.de)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 */

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

/**
 * Get the value of a cookie with the given name.
 *
 * @example $.cookie('the_cookie');
 * @desc Get the value of a cookie.
 *
 * @param String name The name of the cookie.
 * @return The value of the cookie.
 * @type String
 *
 * @name $.cookie
 * @cat Plugins/Cookie
 * @author Klaus Hartl/klaus.hartl@stilbuero.de
 */
jQuery.cookie = function(name, value, options) {
    if (typeof value != 'undefined') { // name and value given, set cookie
        options = options || {};
        if (value === null) {
            value = '';
            options.expires = -1;
        }
        var expires = '';
        if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) {
            var date;
            if (typeof options.expires == 'number') {
                date = new Date();
                date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000));
            } else {
                date = options.expires;
            }
            expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE
        }
        var path = options.path ? '; path=' + options.path : '';
        var domain = options.domain ? '; domain=' + options.domain : '';
        var secure = options.secure ? '; secure' : '';
        document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join('');
    } else { // only name given, get cookie
        var cookieValue = null;
        if (document.cookie && document.cookie != '') {
            var cookies = document.cookie.split(';');
            for (var i = 0; i < cookies.length; i++) {
                var cookie = jQuery.trim(cookies[i]);
                // Does this cookie string begin with the name we want?
                if (cookie.substring(0, name.length + 1) == (name + '=')) {
                    cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                    break;
                }
            }
        }
        return cookieValue;
    }
};

/* /var/www/vhosts/umbrella/htdocs/js/jquery.form.js */
/*!
 * jQuery Form Plugin
 * version: 2.43 (12-MAR-2010)
 * @requires jQuery v1.3.2 or later
 *
 * Examples and documentation at: http://malsup.com/jquery/form/
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */
;(function($) {

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

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

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

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

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

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

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

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

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

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

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

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

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

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

	var q = $.param(a);

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

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

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

	options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg
		for (var i=0, max=callbacks.length; i < max; i++)
			callbacks[i].apply(options, [data, status, xhr || $form, $form]);
	};

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

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

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

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


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

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

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

		var id = 'jqFormIO' + (new Date().getTime());
		var $io = $('<iframe id="' + id + '" name="' + id + '" src="'+ opts.iframeSrc +'" onload="(jQuery(this).data(\'form-plugin-onload\'))()" />');
		var io = $io[0];

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

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

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

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

		var cbInvoked = false;
		var timedOut = 0;

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

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

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

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

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

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

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

		if (opts.forceSync)
			doSubmit();
		else
			setTimeout(doSubmit, 10); // this lets dom updates render
	
		var domCheckCount = 100;

		function cb() {
			if (cbInvoked) 
				return;

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

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

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

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

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

			// clean up
			setTimeout(function() {
				$io.removeData('form-plugin-onload');
				$io.remove();
				xhr.responseXML = null;
			}, 100);
		};

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

})(jQuery);


/* /var/www/vhosts/umbrella/htdocs/js/jquery.easing.1.3.js */
/*
 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
 *
 * Uses the built in easing capabilities added In jQuery 1.1
 * to offer multiple easing options
 *
 * TERMS OF USE - jQuery Easing
 * 
 * Open source under the BSD License. 
 * 
 * Copyright © 2008 George McGinley Smith
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice, this list of 
 * conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this list 
 * of conditions and the following disclaimer in the documentation and/or other materials 
 * provided with the distribution.
 * 
 * Neither the name of the author nor the names of contributors may be used to endorse 
 * or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
 * OF THE POSSIBILITY OF SUCH DAMAGE. 
 *
*/

// t: current time, b: begInnIng value, c: change In value, d: duration
jQuery.easing['jswing'] = jQuery.easing['swing'];

jQuery.extend( jQuery.easing,
{
	def: 'easeOutQuad',
	swing: function (x, t, b, c, d) {
		//alert(jQuery.easing.default);
		return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
	},
	easeInQuad: function (x, t, b, c, d) {
		return c*(t/=d)*t + b;
	},
	easeOutQuad: function (x, t, b, c, d) {
		return -c *(t/=d)*(t-2) + b;
	},
	easeInOutQuad: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t + b;
		return -c/2 * ((--t)*(t-2) - 1) + b;
	},
	easeInCubic: function (x, t, b, c, d) {
		return c*(t/=d)*t*t + b;
	},
	easeOutCubic: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t + 1) + b;
	},
	easeInOutCubic: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t + b;
		return c/2*((t-=2)*t*t + 2) + b;
	},
	easeInQuart: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t + b;
	},
	easeOutQuart: function (x, t, b, c, d) {
		return -c * ((t=t/d-1)*t*t*t - 1) + b;
	},
	easeInOutQuart: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
		return -c/2 * ((t-=2)*t*t*t - 2) + b;
	},
	easeInQuint: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t*t + b;
	},
	easeOutQuint: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t*t*t + 1) + b;
	},
	easeInOutQuint: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
		return c/2*((t-=2)*t*t*t*t + 2) + b;
	},
	easeInSine: function (x, t, b, c, d) {
		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
	},
	easeOutSine: function (x, t, b, c, d) {
		return c * Math.sin(t/d * (Math.PI/2)) + b;
	},
	easeInOutSine: function (x, t, b, c, d) {
		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
	},
	easeInExpo: function (x, t, b, c, d) {
		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
	},
	easeOutExpo: function (x, t, b, c, d) {
		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
	},
	easeInOutExpo: function (x, t, b, c, d) {
		if (t==0) return b;
		if (t==d) return b+c;
		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
	},
	easeInCirc: function (x, t, b, c, d) {
		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
	},
	easeOutCirc: function (x, t, b, c, d) {
		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
	},
	easeInOutCirc: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
	},
	easeInElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
	},
	easeOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
	},
	easeInOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
	},
	easeInBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*(t/=d)*t*((s+1)*t - s) + b;
	},
	easeOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
	},
	easeInOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158; 
		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
	},
	easeInBounce: function (x, t, b, c, d) {
		return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
	},
	easeOutBounce: function (x, t, b, c, d) {
		if ((t/=d) < (1/2.75)) {
			return c*(7.5625*t*t) + b;
		} else if (t < (2/2.75)) {
			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
		} else if (t < (2.5/2.75)) {
			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
		} else {
			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
		}
	},
	easeInOutBounce: function (x, t, b, c, d) {
		if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
		return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
	}
});

/*
 *
 * TERMS OF USE - EASING EQUATIONS
 * 
 * Open source under the BSD License. 
 * 
 * Copyright © 2001 Robert Penner
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice, this list of 
 * conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this list 
 * of conditions and the following disclaimer in the documentation and/or other materials 
 * provided with the distribution.
 * 
 * Neither the name of the author nor the names of contributors may be used to endorse 
 * or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
 * OF THE POSSIBILITY OF SUCH DAMAGE. 
 *
 */

/* /var/www/vhosts/umbrella/htdocs/js/jquery-autocomplete/jquery.autocomplete.js */
/*
 * jQuery Autocomplete plugin 1.1
 *
 * Copyright (c) 2009 Jörn Zaefferer
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Revision: $Id: jquery.autocomplete.js 15 2009-08-22 10:30:27Z joern.zaefferer $
 */

;(function($) {
	
$.fn.extend({
	autocomplete: function(urlOrData, options) {
		var isUrl = typeof urlOrData == "string";
		options = $.extend({}, $.Autocompleter.defaults, {
			url: isUrl ? urlOrData : null,
			data: isUrl ? null : urlOrData,
			delay: isUrl ? $.Autocompleter.defaults.delay : 10,
			max: options && !options.scroll ? 10 : 150
		}, options);
		
		// if highlight is set to false, replace it with a do-nothing function
		options.highlight = options.highlight || function(value) { return value; };
		
		// if the formatMatch option is not specified, then use formatItem for backwards compatibility
		options.formatMatch = options.formatMatch || options.formatItem;
		
		return this.each(function() {
			new $.Autocompleter(this, options);
		});
	},
	result: function(handler) {
		return this.bind("result", handler);
	},
	search: function(handler) {
		return this.trigger("search", [handler]);
	},
	flushCache: function() {
		return this.trigger("flushCache");
	},
	setOptions: function(options){
		return this.trigger("setOptions", [options]);
	},
	unautocomplete: function() {
		return this.trigger("unautocomplete");
	}
});

$.Autocompleter = function(input, options) {

	var KEY = {
		UP: 38,
		DOWN: 40,
		DEL: 46,
		TAB: 9,
		RETURN: 13,
		ESC: 27,
		COMMA: 188,
		PAGEUP: 33,
		PAGEDOWN: 34,
		BACKSPACE: 8
	};

	// Create $ object for input element
	var $input = $(input).attr("autocomplete", "off").addClass(options.inputClass);

	var timeout;
	var previousValue = "";
	var cache = $.Autocompleter.Cache(options);
	var hasFocus = 0;
	var lastKeyPressCode;
	var config = {
		mouseDownOnSelect: false
	};
	var select = $.Autocompleter.Select(options, input, selectCurrent, config);
	
	var blockSubmit;
	
	// prevent form submit in opera when selecting with return key
	$.browser.opera && $(input.form).bind("submit.autocomplete", function() {
		if (blockSubmit) {
			blockSubmit = false;
			return false;
		}
	});
	
	// only opera doesn't trigger keydown multiple times while pressed, others don't work with keypress at all
	$input.bind(($.browser.opera ? "keypress" : "keydown") + ".autocomplete", function(event) {
		// a keypress means the input has focus
		// avoids issue where input had focus before the autocomplete was applied
		hasFocus = 1;
		// track last key pressed
		lastKeyPressCode = event.keyCode;
		switch(event.keyCode) {
		
			case KEY.UP:
				event.preventDefault();
				if ( select.visible() ) {
					select.prev();
				} else {
					onChange(0, true);
				}
				break;
				
			case KEY.DOWN:
				event.preventDefault();
				if ( select.visible() ) {
					select.next();
				} else {
					onChange(0, true);
				}
				break;
				
			case KEY.PAGEUP:
				event.preventDefault();
				if ( select.visible() ) {
					select.pageUp();
				} else {
					onChange(0, true);
				}
				break;
				
			case KEY.PAGEDOWN:
				event.preventDefault();
				if ( select.visible() ) {
					select.pageDown();
				} else {
					onChange(0, true);
				}
				break;
			
			// matches also semicolon
			case options.multiple && $.trim(options.multipleSeparator) == "," && KEY.COMMA:
			case KEY.TAB:
			case KEY.RETURN:
				if( selectCurrent() ) {
					// stop default to prevent a form submit, Opera needs special handling
					event.preventDefault();
					blockSubmit = true;
					return false;
				}
				break;
				
			case KEY.ESC:
				select.hide();
				break;
				
			default:
				clearTimeout(timeout);
				timeout = setTimeout(onChange, options.delay);
				break;
		}
	}).focus(function(){
		// track whether the field has focus, we shouldn't process any
		// results if the field no longer has focus
		hasFocus++;
	}).blur(function() {
		hasFocus = 0;
		if (!config.mouseDownOnSelect) {
			hideResults();
		}
	}).click(function() {
		// show select when clicking in a focused field
		if ( hasFocus++ > 1 && !select.visible() ) {
			onChange(0, true);
		}
	}).bind("search", function() {
		// TODO why not just specifying both arguments?
		var fn = (arguments.length > 1) ? arguments[1] : null;
		function findValueCallback(q, data) {
			var result;
			if( data && data.length ) {
				for (var i=0; i < data.length; i++) {
					if( data[i].result.toLowerCase() == q.toLowerCase() ) {
						result = data[i];
						break;
					}
				}
			}
			if( typeof fn == "function" ) fn(result);
			else $input.trigger("result", result && [result.data, result.value]);
		}
		$.each(trimWords($input.val()), function(i, value) {
			request(value, findValueCallback, findValueCallback);
		});
	}).bind("flushCache", function() {
		cache.flush();
	}).bind("setOptions", function() {
		$.extend(options, arguments[1]);
		// if we've updated the data, repopulate
		if ( "data" in arguments[1] )
			cache.populate();
	}).bind("unautocomplete", function() {
		select.unbind();
		$input.unbind();
		$(input.form).unbind(".autocomplete");
	});
	
	
	function selectCurrent() {
		var selected = select.selected();
		if( !selected )
			return false;
		
		var v = selected.result;
		previousValue = v;
		
		if ( options.multiple ) {
			var words = trimWords($input.val());
			if ( words.length > 1 ) {
				var seperator = options.multipleSeparator.length;
				var cursorAt = $(input).selection().start;
				var wordAt, progress = 0;
				$.each(words, function(i, word) {
					progress += word.length;
					if (cursorAt <= progress) {
						wordAt = i;
						return false;
					}
					progress += seperator;
				});
				words[wordAt] = v;
				// TODO this should set the cursor to the right position, but it gets overriden somewhere
				//$.Autocompleter.Selection(input, progress + seperator, progress + seperator);
				v = words.join( options.multipleSeparator );
			}
			v += options.multipleSeparator;
		}
		
		$input.val(v);
		hideResultsNow();
		$input.trigger("result", [selected.data, selected.value]);
		return true;
	}
	
	function onChange(crap, skipPrevCheck) {
		if( lastKeyPressCode == KEY.DEL ) {
			select.hide();
			return;
		}
		
		var currentValue = $input.val();
		
		if ( !skipPrevCheck && currentValue == previousValue )
			return;
		
		previousValue = currentValue;
		
		currentValue = lastWord(currentValue);
		if ( currentValue.length >= options.minChars) {
			$input.addClass(options.loadingClass);
			if (!options.matchCase)
				currentValue = currentValue.toLowerCase();
			request(currentValue, receiveData, hideResultsNow);
		} else {
			stopLoading();
			select.hide();
		}
	};
	
	function trimWords(value) {
		if (!value)
			return [""];
		if (!options.multiple)
			return [$.trim(value)];
		return $.map(value.split(options.multipleSeparator), function(word) {
			return $.trim(value).length ? $.trim(word) : null;
		});
	}
	
	function lastWord(value) {
		if ( !options.multiple )
			return value;
		var words = trimWords(value);
		if (words.length == 1) 
			return words[0];
		var cursorAt = $(input).selection().start;
		if (cursorAt == value.length) {
			words = trimWords(value)
		} else {
			words = trimWords(value.replace(value.substring(cursorAt), ""));
		}
		return words[words.length - 1];
	}
	
	// fills in the input box w/the first match (assumed to be the best match)
	// q: the term entered
	// sValue: the first matching result
	function autoFill(q, sValue){
		// autofill in the complete box w/the first match as long as the user hasn't entered in more data
		// if the last user key pressed was backspace, don't autofill
		if( options.autoFill && (lastWord($input.val()).toLowerCase() == q.toLowerCase()) && lastKeyPressCode != KEY.BACKSPACE ) {
			// fill in the value (keep the case the user has typed)
			$input.val($input.val() + sValue.substring(lastWord(previousValue).length));
			// select the portion of the value not typed by the user (so the next character will erase)
			$(input).selection(previousValue.length, previousValue.length + sValue.length);
		}
	};

	function hideResults() {
		clearTimeout(timeout);
		timeout = setTimeout(hideResultsNow, 200);
	};

	function hideResultsNow() {
		var wasVisible = select.visible();
		select.hide();
		clearTimeout(timeout);
		stopLoading();
		if (options.mustMatch) {
			// call search and run callback
			$input.search(
				function (result){
					// if no value found, clear the input box
					if( !result ) {
						if (options.multiple) {
							var words = trimWords($input.val()).slice(0, -1);
							$input.val( words.join(options.multipleSeparator) + (words.length ? options.multipleSeparator : "") );
						}
						else {
							$input.val( "" );
							$input.trigger("result", null);
						}
					}
				}
			);
		}
	};

	function receiveData(q, data) {
		if ( data && data.length && hasFocus ) {
			stopLoading();
			select.display(data, q);
			autoFill(q, data[0].value);
			select.show();
		} else {
			hideResultsNow();
		}
	};

	function request(term, success, failure) {
		if (!options.matchCase)
			term = term.toLowerCase();
		var data = cache.load(term);
		// recieve the cached data
		if (data && data.length) {
			success(term, data);
		// if an AJAX url has been supplied, try loading the data now
		} else if( (typeof options.url == "string") && (options.url.length > 0) ){
			
			var extraParams = {
				timestamp: +new Date()
			};
			$.each(options.extraParams, function(key, param) {
				extraParams[key] = typeof param == "function" ? param() : param;
			});
			
			$.ajax({
				// try to leverage ajaxQueue plugin to abort previous requests
				mode: "abort",
				// limit abortion to this input
				port: "autocomplete" + input.name,
				dataType: options.dataType,
				url: options.url,
				data: $.extend({
					q: lastWord(term),
					limit: options.max
				}, extraParams),
				success: function(data) {
					var parsed = options.parse && options.parse(data) || parse(data);
					cache.add(term, parsed);
					success(term, parsed);
				}
			});
		} else {
			// if we have a failure, we need to empty the list -- this prevents the the [TAB] key from selecting the last successful match
			select.emptyList();
			failure(term);
		}
	};
	
	function parse(data) {
		var parsed = [];
		var rows = data.split("\n");
		for (var i=0; i < rows.length; i++) {
			var row = $.trim(rows[i]);
			if (row) {
				row = row.split("|");
				parsed[parsed.length] = {
					data: row,
					value: row[0],
					result: options.formatResult && options.formatResult(row, row[0]) || row[0]
				};
			}
		}
		return parsed;
	};

	function stopLoading() {
		$input.removeClass(options.loadingClass);
	};

};

$.Autocompleter.defaults = {
	inputClass: "ac_input",
	resultsClass: "ac_results",
	loadingClass: "ac_loading",
	minChars: 1,
	delay: 400,
	matchCase: false,
	matchSubset: true,
	matchContains: false,
	cacheLength: 10,
	max: 100,
	mustMatch: false,
	extraParams: {},
	selectFirst: true,
	formatItem: function(row) { return row[0]; },
	formatMatch: null,
	autoFill: false,
	width: 0,
	multiple: false,
	multipleSeparator: ", ",
	highlight: function(value, term) {
		return value.replace(new RegExp("(?![^&;]+;)(?!<[^<>]*)(" + term.replace(/([\^\$\(\)\[\]\{\}\*\.\+\?\|\\])/gi, "\\$1") + ")(?![^<>]*>)(?![^&;]+;)", "gi"), "<strong>$1</strong>");
	},
    scroll: true,
    scrollHeight: 180
};

$.Autocompleter.Cache = function(options) {

	var data = {};
	var length = 0;
	
	function matchSubset(s, sub) {
		s = '';
		if (!options.matchCase)
			try {
				s = s.toLowerCase();
			}catch(e){}
		var i = s.indexOf(sub);
		if (options.matchContains == "word"){
			try {
				i = s.toLowerCase().search("\\b" + sub.toLowerCase());
			}catch(e){}
		}
		if (i == -1) return false;
		return i == 0 || options.matchContains;
	};
	
	function add(q, value) {
		if (length > options.cacheLength){
			flush();
		}
		if (!data[q]){ 
			length++;
		}
		data[q] = value;
	}
	
	function populate(){
		if( !options.data ) return false;
		// track the matches
		var stMatchSets = {},
			nullData = 0;

		// no url was specified, we need to adjust the cache length to make sure it fits the local data store
		if( !options.url ) options.cacheLength = 1;
		
		// track all options for minChars = 0
		stMatchSets[""] = [];
		
		// loop through the array and create a lookup structure
		for ( var i = 0, ol = options.data.length; i < ol; i++ ) {
			var rawValue = options.data[i];
			// if rawValue is a string, make an array otherwise just reference the array
			rawValue = (typeof rawValue == "string") ? [rawValue] : rawValue;
			
			var value = options.formatMatch(rawValue, i+1, options.data.length);
			if ( value === false )
				continue;
				
			var firstChar = value.charAt(0).toLowerCase();
			// if no lookup array for this character exists, look it up now
			if( !stMatchSets[firstChar] ) 
				stMatchSets[firstChar] = [];

			// if the match is a string
			var row = {
				value: value,
				data: rawValue,
				result: options.formatResult && options.formatResult(rawValue) || value
			};
			
			// push the current match into the set list
			stMatchSets[firstChar].push(row);

			// keep track of minChars zero items
			if ( nullData++ < options.max ) {
				stMatchSets[""].push(row);
			}
		};

		// add the data items to the cache
		$.each(stMatchSets, function(i, value) {
			// increase the cache size
			options.cacheLength++;
			// add to the cache
			add(i, value);
		});
	}
	
	// populate any existing data
	setTimeout(populate, 25);
	
	function flush(){
		data = {};
		length = 0;
	}
	
	return {
		flush: flush,
		add: add,
		populate: populate,
		load: function(q) {
			if (!options.cacheLength || !length)
				return null;
			/* 
			 * if dealing w/local data and matchContains than we must make sure
			 * to loop through all the data collections looking for matches
			 */
			if( !options.url && options.matchContains ){
				// track all matches
				var csub = [];
				// loop through all the data grids for matches
				for( var k in data ){
					// don't search through the stMatchSets[""] (minChars: 0) cache
					// this prevents duplicates
					if( k.length > 0 ){
						var c = data[k];
						$.each(c, function(i, x) {
							// if we've got a match, add it to the array
							if (matchSubset(x.value, q)) {
								csub.push(x);
							}
						});
					}
				}				
				return csub;
			} else 
			// if the exact item exists, use it
			if (data[q]){
				return data[q];
			} else
			if (options.matchSubset) {
				for (var i = q.length - 1; i >= options.minChars; i--) {
					var c = data[q.substr(0, i)];
					if (c) {
						var csub = [];
						$.each(c, function(i, x) {
							if (matchSubset(x.value, q)) {
								csub[csub.length] = x;
							}
						});
						return csub;
					}
				}
			}
			return null;
		}
	};
};

$.Autocompleter.Select = function (options, input, select, config) {
	var CLASSES = {
		ACTIVE: "ac_over"
	};
	
	var listItems,
		active = -1,
		data,
		term = "",
		needsInit = true,
		element,
		list;
	
	// Create results
	function init() {
		if (!needsInit)
			return;
		element = $("<div/>")
		.hide()
		.addClass(options.resultsClass)
		.css("position", "absolute")
		.appendTo(document.body);
	
		list = $("<ul/>").appendTo(element).mouseover( function(event) {
			if(target(event).nodeName && target(event).nodeName.toUpperCase() == 'LI') {
	            active = $("li", list).removeClass(CLASSES.ACTIVE).index(target(event));
			    $(target(event)).addClass(CLASSES.ACTIVE);            
	        }
		}).click(function(event) {
			$(target(event)).addClass(CLASSES.ACTIVE);
			select();
			// TODO provide option to avoid setting focus again after selection? useful for cleanup-on-focus
			input.focus();
			return false;
		}).mousedown(function() {
			config.mouseDownOnSelect = true;
		}).mouseup(function() {
			config.mouseDownOnSelect = false;
		});
		
		if( options.width > 0 )
			element.css("width", options.width);
			
		needsInit = false;
	} 
	
	function target(event) {
		var element = event.target;
		while(element && element.tagName != "LI")
			element = element.parentNode;
		// more fun with IE, sometimes event.target is empty, just ignore it then
		if(!element)
			return [];
		return element;
	}

	function moveSelect(step) {
		listItems.slice(active, active + 1).removeClass(CLASSES.ACTIVE);
		movePosition(step);
        var activeItem = listItems.slice(active, active + 1).addClass(CLASSES.ACTIVE);
        if(options.scroll) {
            var offset = 0;
            listItems.slice(0, active).each(function() {
				offset += this.offsetHeight;
			});
            if((offset + activeItem[0].offsetHeight - list.scrollTop()) > list[0].clientHeight) {
                list.scrollTop(offset + activeItem[0].offsetHeight - list.innerHeight());
            } else if(offset < list.scrollTop()) {
                list.scrollTop(offset);
            }
        }
	};
	
	function movePosition(step) {
		active += step;
		if (active < 0) {
			active = listItems.size() - 1;
		} else if (active >= listItems.size()) {
			active = 0;
		}
	}
	
	function limitNumberOfItems(available) {
		return options.max && options.max < available
			? options.max
			: available;
	}
	
	function fillList() {
		list.empty();
		var max = limitNumberOfItems(data.length);
		for (var i=0; i < max; i++) {
			if (!data[i])
				continue;
			var formatted = options.formatItem(data[i].data, i+1, max, data[i].value, term);
			if ( formatted === false )
				continue;
			var li = $("<li/>").html( options.highlight(formatted, term) ).addClass(i%2 == 0 ? "ac_even" : "ac_odd").appendTo(list)[0];
			$.data(li, "ac_data", data[i]);
		}
		listItems = list.find("li");
		if ( options.selectFirst ) {
			listItems.slice(0, 1).addClass(CLASSES.ACTIVE);
			active = 0;
		}
		// apply bgiframe if available
		if ( $.fn.bgiframe )
			list.bgiframe();
	}
	
	return {
		display: function(d, q) {
			init();
			data = d;
			term = q;
			fillList();
		},
		next: function() {
			moveSelect(1);
		},
		prev: function() {
			moveSelect(-1);
		},
		pageUp: function() {
			if (active != 0 && active - 8 < 0) {
				moveSelect( -active );
			} else {
				moveSelect(-8);
			}
		},
		pageDown: function() {
			if (active != listItems.size() - 1 && active + 8 > listItems.size()) {
				moveSelect( listItems.size() - 1 - active );
			} else {
				moveSelect(8);
			}
		},
		hide: function() {
			element && element.hide();
			listItems && listItems.removeClass(CLASSES.ACTIVE);
			active = -1;
		},
		visible : function() {
			return element && element.is(":visible");
		},
		current: function() {
			return this.visible() && (listItems.filter("." + CLASSES.ACTIVE)[0] || options.selectFirst && listItems[0]);
		},
		show: function() {
			var offset = $(input).offset();
			element.css({
				width: typeof options.width == "string" || options.width > 0 ? options.width : $(input).width(),
				top: offset.top + input.offsetHeight,
				left: offset.left
			}).show();
            if(options.scroll) {
                list.scrollTop(0);
                list.css({
					maxHeight: options.scrollHeight,
					overflow: 'auto'
				});
				
                if($.browser.msie && typeof document.body.style.maxHeight === "undefined") {
					var listHeight = 0;
					listItems.each(function() {
						listHeight += this.offsetHeight;
					});
					var scrollbarsVisible = listHeight > options.scrollHeight;
                    list.css('height', scrollbarsVisible ? options.scrollHeight : listHeight );
					if (!scrollbarsVisible) {
						// IE doesn't recalculate width when scrollbar disappears
						listItems.width( list.width() - parseInt(listItems.css("padding-left")) - parseInt(listItems.css("padding-right")) );
					}
                }
                
            }
		},
		selected: function() {
			var selected = listItems && listItems.filter("." + CLASSES.ACTIVE).removeClass(CLASSES.ACTIVE);
			return selected && selected.length && $.data(selected[0], "ac_data");
		},
		emptyList: function (){
			list && list.empty();
		},
		unbind: function() {
			element && element.remove();
		}
	};
};

$.fn.selection = function(start, end) {
	if (start !== undefined) {
		return this.each(function() {
			if( this.createTextRange ){
				var selRange = this.createTextRange();
				if (end === undefined || start == end) {
					selRange.move("character", start);
					selRange.select();
				} else {
					selRange.collapse(true);
					selRange.moveStart("character", start);
					selRange.moveEnd("character", end);
					selRange.select();
				}
			} else if( this.setSelectionRange ){
				this.setSelectionRange(start, end);
			} else if( this.selectionStart ){
				this.selectionStart = start;
				this.selectionEnd = end;
			}
		});
	}
	var field = this[0];
	if ( field.createTextRange ) {
		var range = document.selection.createRange(),
			orig = field.value,
			teststring = "<->",
			textLength = range.text.length;
		range.text = teststring;
		var caretAt = field.value.indexOf(teststring);
		field.value = orig;
		this.selection(caretAt, caretAt + textLength);
		return {
			start: caretAt,
			end: caretAt + textLength
		}
	} else if( field.selectionStart !== undefined ){
		return {
			start: field.selectionStart,
			end: field.selectionEnd
		}
	}
};

})(jQuery);

/* /var/www/vhosts/umbrella/htdocs/js/tb.js */
/*
 * 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
*/

//custom var
var tb_searchForm = false;
// if this variable is true system not show inline box automaticaly
var tb_showLoadingProgress = false;
// Custom configuration data
var tb_config_params = {};
/*!!!!!!!!!!!!!!!!! edit below this line at your own risk !!!!!!!!!!!!!!!!!!!!!!!*/
function tb_button_show_style(){
	if (typeof(tb_config_params.close_button) != 'undefined' 
		&& typeof(tb_config_params.close_button.is_show) != 'undefinde' 
		&& !tb_config_params.close_button.is_show
	){
		var show_style = 'display: none;';
	} else {
		var show_style = '';
	}
	return show_style;
}


//on page load call tb_init
$(document).ready(function(){
	if (siteConfig.getParam('tbLoadingImage')) {
		var tb_pathToImage = siteConfig.getParam('tbLoadingImage');
		//tb_init( 'a.thickbox, input.thickbox');//pass where to apply thickbox
		tb_init( '.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, searchForm){
	$(domChunk).unbind('click');
	$(domChunk).bind('click', function(){
//	$(domChunk).live('click', function(){
	tb_showLoadingProgress = $(this).attr('showloadingprogress') || false;
	tb_searchForm = $(this).attr('searchform') || false;
	var t = this.title || this.name || null;
	var a = this.href || this.alt || $(this).attr('alt');
	var g = this.rel || false;	
	tb_show(t,a,g);
	this.blur();
	return false;
	});

	// ie6 evil scarry unknown impossible and unfixable bug
	if (/msie\s6\.0/i.test(navigator.userAgent)) {
		window.px = null;
	}
}

// Events handler
function tb_events_handler(event_name, event_data){
	if (tb_config_params.events && tb_config_params.events[event_name]){
		var tmp_func =  tb_config_params.events[event_name];
		if (event_data){
			//@todo event parameters must by added in future
		} else {
			tmp_func();
		}
	}
}

function tb_show(caption, url, imageGroup, params, callback) {//function called when the user clicks on a thickbox link
	
    if (params){
		tb_config_params = params;
	} else {
		tb_config_params = {};
	}

	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
				$('select').css({visibility: 'hidden'});
				$("body").append("<iframe id='TB_HideSelect'></iframe><div id='TB_overlay'></div><div style='margin-top: -400px;' 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
		$('#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'><img src='/img/lightbox/lightbox-btn-close.gif'></a></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 );
			
			if (typeof(tb_config_params.padding) != 'undefined'){
				TB_WIDTH = (params['width']*1) + tb_config_params.padding || 630; //defaults to 630 if no paramaters were added to URL
				TB_HEIGHT = (params['height']*1) + 40 || 440; //defaults to 440 if no paramaters were added to URL
				ajaxContentW = TB_WIDTH - tb_config_params.padding;
				ajaxContentH = TB_HEIGHT - 45;
			} else {
				TB_WIDTH = (params['width']*1) + 30 || 630; //defaults to 630 if no paramaters were added to URL
				TB_HEIGHT = (params['height']*1) + 40 || 440; //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' style='"+ tb_button_show_style() +"'><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 if(url.indexOf('TB_dynamic') != -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();
					if (tb_showLoadingProgress == false){
						$("#TB_load").remove();
						$("#TB_window").css({display:"block"});
					} 
			}else{// not an iframe, ajax
					if ((typeof(tb_config_params.TB_ajaxContent) != 'undefined') && (typeof(tb_config_params.TB_ajaxContent.style) != 'undefined')){
						$tmpNewStyle = tb_config_params.TB_ajaxContent.style;
					} else {
						$tmpNewStyle = '';
					}
					if($("#TB_window").css("display") != "block"){
						if(params['modal'] != "true"){//ajax no modal
							if(tb_searchForm != false){
								close_link = 'search_in_form();';
							} else {
								close_link = 'tb_remove();';
							}
						$("#TB_window").append("<div id='TB_ajaxContent' style='"+ $tmpNewStyle +"width:"+ajaxContentW+"px;height:"+ajaxContentH+"px'></div> <div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow' style='"+ tb_button_show_style() +"'> <a href='#' onclick='" + close_link + "' >CLOSE</a></div></div>");
						//$("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' onclick='search_in_form();' >close</a> or Esc Key</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='"+ $tmpNewStyle +"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();
					if (tb_showLoadingProgress == false){
						$("#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 if(url.indexOf('TB_dynamic') != -1){
				   
				    //@todo describe dynamic size element functionality
				    //$("#TB_window").css({width:"300px",height:"300px;"});
				    $("#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 (callback) {
							callback();
						}
					});
				}
			
		}

		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
	}

//	nW = 400;
//	nH = 500;
//	resizeBlockElement('#TB_ajaxContent', nW, nH, false);
//	resizeBlockElement('#TB_window', nW + 30, nH + 63, true);
	//$("#TB_title").css({'marginTop': '0'});
}

// Show window manualy
function tb_showContentWindow(){
	$("#TB_load").remove();
	$("#TB_window").css({display:"block"});
}

//helper functions below
function tb_showIframe(){
	$("#TB_load").remove();
	$("#TB_window").css({display:"block"});
}

function tb_remove() {
	tb_events_handler('beforeRemove');
 	$("#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 (document.body && typeof document.body.style.maxHeight == "undefined") {//if IE 6
		$("body","html").css({height: "auto", width: "auto"});
		$("html").css("overflow","");
		$('select').css({visibility: 'visible'});
	}
	document.onkeydown = "";
	document.onkeyup = "";
	if(tb_searchForm != false){
		$("form:first").submit();
	}
	tb_events_handler('afterRemove');
	return false;
}

function tb_position() {
	var marginTop  = TB_HEIGHT / 2,
		marginLeft = TB_WIDTH / 2,
		scrollTop = /msie\s6/i.test(navigator.userAgent) ? document.documentElement.scrollTop : 0;
	$("#TB_window").css({marginLeft: String(-marginLeft) + 'px', width: TB_WIDTH + 'px'});
	$("#TB_window").css({marginTop: String(-marginTop + scrollTop) + 'px'});
}

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;
  }
}
/**
 * @param <string> element id or class
 * @param <int> width
 * @param <int> height
 * @param <bool> determines animate element resizeing or not
 */
function resizeBlockElement(element, width, height, animate)
{
	if(animate == true) {
		$(element).animate({'width' : width, 'height' : height}, 1500);
	}
	else {
		$(element).css({
			'width'  : width  + 'px',
			'height' : height + 'px'
		});
	}
}


function getElementSize(element)
{
    var size = new Array();
    size[0]  = $(element).width();
    size[1]  = $(element).height();
    return size;
}

function getProfilesPack(startingPoint, direction, currentPage){
	var limit = 12;//create dynamic profile limit
	var callUpUrl = '/search/getUserProfilesByParams/'
		+ startingPoint + '/'
		+ limit         + '/'
		+ direction     + '/'
		+ currentPage;
	//send request and get data from server
	$.getJSON(callUpUrl,{}, function(response){
		reSetProfilesArray(response.matchedProfiles);
	});
}

function reSetProfilesArray(profiles){
	aProfiles.concatArray(profiles, 'last')
}

function setProfileData(profileId){
	var profile = profileDataStore[profileId];
	var profilePhoto = profile['photo.href'];
	if (/msie|opera/i.test(navigator.userAgent)) {
		profilePhoto += (/\?/.test(profilePhoto) ? '&' : '?' ) + (new Date()).getTime();
	}
	$('#pr-photo').attr('src', profilePhoto);
	$('#pr-screenname').html(profile['screenName.link'] ? profile['screenName.link'] : profile['screenname.link']);
	$('#pr-seek').text(profile['seekingType']);
	$('#pr-placement').text(profile['city'] +' '+ profileDataStore[profileId]['country']);
	$('#pr-age').text(profile['age']);
	$('#pr-lookingfor').text(profile['lookingFor']);
	$('#pr-orientation').text(profile['orientation']);
}

$(document).ready(function() {
	$('#visit-profile-link').unbind().bind('click',function(){
		profileImageClick(aProfiles.current(), "visit-profile-image.link");
		return false;
	});
});

function showCurrentProfile(){
//	debugger;
	$('#TB_load').css('visibility', 'visible');
	$('#pr-photo').remove();
	$('#photo-container').append(
		'<a href="#" id="pr-img-link" onclick="profileImageClick(' + aProfiles.current() + ')">\n\
		<img src="" name="profilephoto" align="center" id="pr-photo" alt=""></a>');
	setProfileData(aProfiles.current());

	$('#pr-photo').load(function(){
		resizeTbWindow(this);
	});
	$("#TB_window").css('visibility', 'hidden');
	if(aProfiles.getCurrentNumber() == 0){
		$("#pr-prev").css('display', 'none');
	}
	else{
		$("#pr-prev").css('display', 'inline');
	}

	sessionCounters.increment('tbShowProfile');

}

function delayNavigation(time){
	$('#tb-navigation').fadeOut();
		setTimeout(function() {$('#tb-navigation').fadeIn();}, time);
}




function resizeTbWindow(elem){
	var minHeight = 290;
	var minWidth  = 290;

//	debugger;

	resizeImage(elem, minWidth, minHeight);
	var size = getElementSize(elem);
	if(size[0] < minWidth && size[1] < minHeight) {
	size[0] = minWidth;
	size[1] = minHeight;
	}else if(size[0] < minWidth && size[1] >= minHeight){
	size[0] = minWidth;
	}else if(size[0] >= minWidth && size[1] < minHeight){
	size[1] = minHeight;
	}

	var size = getElementSize('#pr-content');
	$('#TB_load').css('visibility', 'hidden');
	$("#TB_window").css('visibility', 'visible');
}

//show profile functionality
function likesProfile()
{
	var callUpUrl = settings.simpleRateLikeLink + settings.codeID;
	//get data from server
	$.get(callUpUrl,{});
	settings.sourceID = 'lightbox_button.like';
	open_tracker_window();
}

var aProfiles;
$(document).ready(function(){
	try
	{
		if (profilesCount && profileDataStore)
		{
			var limit = 12;
			pagesTotal = Math.ceil(profilesCount/limit);

			AssocArrayIterator = new Object();
			AssocArrayIterator.init = function(assocArray){
			AssocArrayIterator._userArray = assocArray;
			var i = 0;
			for(var n in profileDataStore) {
				var value = profileDataStore[n];
				AssocArrayIterator._indexedArray[i] = value;
				AssocArrayIterator._relationsArray[i] = n;
				AssocArrayIterator._assocRelationsArray[n] = i;
				i++;
			}
			AssocArrayIterator._len = i;
			}
			AssocArrayIterator.next = function(){
			AssocArrayIterator._i++;
			if(AssocArrayIterator._i >= AssocArrayIterator.length())
				AssocArrayIterator.rewind();
			};
			AssocArrayIterator.prev = function(){
			if(AssocArrayIterator._i <= 0)
				AssocArrayIterator.reverse();
			AssocArrayIterator._i--;
			};
			AssocArrayIterator.get = function(intKey){
			return AssocArrayIterator._indexedArray[intKey];
			};

			AssocArrayIterator.set = function(){
			};
			AssocArrayIterator.rewind = function(){
			AssocArrayIterator._i = 0;
			};
			AssocArrayIterator.reverse = function(){
			AssocArrayIterator._i = AssocArrayIterator._len;
			};
			AssocArrayIterator.current = function(){
			return AssocArrayIterator._relationsArray[AssocArrayIterator._i];
			};
			AssocArrayIterator.getCurrentData = function(){
			return AssocArrayIterator._indexedArray[AssocArrayIterator._i];
			};
			AssocArrayIterator.getCurrentNumber = function(){
			return AssocArrayIterator._i;
			};
			AssocArrayIterator.concatArray = function(additionalArr, pos){
				var i = 0;
				if(pos == 'last'){
					i = AssocArrayIterator._len;
					for(var n in additionalArr){
						value = additionalArr[n];
						AssocArrayIterator._indexedArray[i] = value;
						AssocArrayIterator._relationsArray[i] = n;
						AssocArrayIterator._assocRelationsArray[n] = i;
						profileDataStore[n] = value;
						i++;
					}
					AssocArrayIterator._len = i;
				}else{

				}
			};
			AssocArrayIterator.length = function(){
			return AssocArrayIterator._len;
			}
			AssocArrayIterator._len;
			AssocArrayIterator._userArray = new Array();
			AssocArrayIterator._relationsArray = new Array();
			AssocArrayIterator._assocRelationsArray = new Array();
			AssocArrayIterator._indexedArray = new Array();
			AssocArrayIterator.getIndexedArray = function(){
			return AssocArrayIterator._indexedArray;
			};
			AssocArrayIterator.setCurrentKey = function(assocKey){
			AssocArrayIterator._i = parseInt(AssocArrayIterator._assocRelationsArray[assocKey]);
			};
			AssocArrayIterator._i = 0;//default array starting point

			aProfiles = AssocArrayIterator;

			profilePhotoEnlargeEvent();
		}
	 } catch (e) {
	 }
 });

function profilePhotoEnlargeEvent()
{
	aProfiles.init(profileDataStore);

	$('#pr-next').unbind().bind('click',function(){
		aProfiles.next();
		if(aProfiles.getCurrentNumber() == (aProfiles.length() - 1) ){
			delayNavigation(5000);
			if(pagesTotal == currentPage)
				currentPage = 0;
			getProfilesPack(aProfiles.current(), 'forward', currentPage);
			currentPage = currentPage + 1;
		}
		showCurrentProfile();
		return false;
	});
	$('#pr-prev').unbind().bind('click',function(){
		aProfiles.prev();
		if(aProfiles.getCurrentNumber() == 0 ){
		}
		showCurrentProfile();
		return false;
	});


	$('.thickbox').click(function(){
		
		if(!profileDataStore[this.id]) {
			return false;
		}

		$("body").append("<div id='TB_load'><!--<img src='"+imgLoader.src+"' />--></div>");//add loader to the page
		$('#TB_load').show();
		aProfiles.setCurrentKey(this.id);

		//show current profile by default
		showCurrentProfile();
		return true;
	})

	$('#thickbox-dislike-profile').unbind('click').bind('click', function(){
		try{
		var nextId;
		for(var i in profiles){
			if(profiles[i]['id'] == aProfiles.current()){
				n = ++i;
				nextId = profiles[n]['id'];
				break;
			}
		}
			aProfiles.setCurrentKey(nextId);
			showCurrentProfile();
		}catch(e){
			if(pagesTotal == currentPage)
				currentPage = 0;
			else{
				++currentPage
			}

			window.location = searchUrl + currentPage;
			//tb_remove();
		}

		//$("body").append("<div id='TB_load' style='display: block'><img src='"+imgLoader.src+"' /></div>");//add loader to the page

			var callUpUrl = siteConfig.getParam('dislikesProfile.url') + aProfiles.current(); //settings.simpleRateDislikeLink + settings.codeID;
			$("#TB_window").css('visibility', 'hidden');

			//get data from server
			$.get(callUpUrl,{}, function(data){

			});

			return false;
	});

	$('#thickbox-like-profile').unbind('click').bind('click', function(){
		var profileId = aProfiles.current();
		tb_remove();
		tb_goToProfile(profileId);
		return false;
	});
}

function profileImageClick(profileId, trackerSource)
		{
			tb_goToProfile(profileId);
			tb_remove();
		}

function tb_goToProfile(profileId)
{
	eval('var data = ' + profileDataStore[profileId]['profile.data']);
	window.setTimeout(function(){linksObject.goToProfile(data)}, 1);
}

////// EO show profile functionality


/* /var/www/vhosts/umbrella/htdocs/js/__main.js */
// debug
function _()  {for (var i = 0; i < arguments.length; i++) {console.log(arguments[i])}}
function _w() {for (var i = 0; i < arguments.length; i++) {console.warn(arguments[i])}}

function Profiler(msg) {
	
	var timestamp = (+new Date()),
		marker = msg || null;

	this.stop = function() {
		var diff = (+new Date()) - timestamp;
		if (marker) {
			diff = marker + ': ' + diff;
		}
		diff += 'ms';
		if (typeof(console.log) == 'function') {
			console.log(diff);
		} else {
			alert(diff);
		}
	}
}

//

/**
 * Напоминалка для неконфирмленного юзера
 */
window.userConfirmation = new function() {

	/**
	 * @return bool
	 */
	this.isUserLoginedAndNotConfirmed = function() {
		return siteConfig.getParam('loggedIn') && !siteConfig.getParam('userConfirmed');
	};

	this.showNotification = function(showLimitedAccess) {
		var limitedAccessFlag = showLimitedAccess ? '/limitedAccess' : '';
		var dimensions = '?height=478';
		tb_remove();
		tb_show('Please confirm your registration!', '/users/confirmationReminderPopup' + limitedAccessFlag + dimensions);
	};
};

/**
 * Just a counters. Automaticaly store in cookies (which expire with session);
 */
window.sessionCounters = new function () {

	var counters = {},
		listeners = {};

	var cookieName = 'sessionCounters',
		cookieExpires = 0;

	var saveState = function() {
		var state = '';
		for (var key in counters) {
			state += key + ':' + counters[key] + ';';
		}
		state = state.substr(0, state.length - 1);
		$.cookie(cookieName, state, {path: '/', expires: cookieExpires});
	};

	var loadState = function() {
		var state = $.cookie(cookieName);
		if (state) {
			state = state.split(';');
			for (var i in state) {
				var keyValue = state[i].split(':');
				counters[keyValue[0]] = keyValue[1];
			}
		}
	};

	// Initialization ///////////////////////////

	// load counters state from cookies
	loadState();

	// Public methods ///////////////////////////

	/**
	 * Increments a counter
	 * @param name counter name
	 */
	this.increment = function(name) {

		// increment
		if (typeof(counters[name]) != 'undefined') {
			counters[name]++;
		} else {
			counters[name] = 1;
		}

		// fire event
		if (typeof(listeners[name]) != 'undefined') {
			if (listeners[name](counters[name]) === false) {
				// reset counter
				counters[name] = 0;
				// store counters state in cookies
				saveState();
				return false;
			}
		}

		// store counters state in cookies
		saveState();

		return counters[name];
	};

	/**
	 * Attaches an event that fires on counter's increment
	 * @param name counter name
	 * @param callback
	 */
	this.attachListener = function(name, callback) {
		listeners[name] = callback;
	};

};

/**
 *image resizing function
 *@author Alexey Galiullin <galiullin@idegroup.com>
 *@param  image string img id or class
 *@param  int maxWidth maximum allowed image width
 *@param  int maxHeight maximum allowed image height
 *@return void
 */

/**
 *Shows registration popup window
 */
function showPopupRegistration()
{
	alert('popup');
}

function resizeImage(image, maxWidth, maxHeight)
{
	if(!maxWidth)
		maxWidth  = 500;
	if(!maxHeight)
		maxHeight = 500;
	 var divisor = 1;

	 var imageWidth  = $(image).attr('width');
	 var imageHeight = $(image).attr('height');

	//	 if(imageWidth >= maxWidth && imageHeight >= maxHeight){
	//		 return;
	//	 }

	 if(imageWidth > imageHeight)
	 {
		 if(imageWidth > maxWidth)
		 {
			divisor = imageWidth/maxWidth;
			imageWidth = maxWidth;
			imageHeight = imageHeight/divisor;
		 }
	 }
	 else
	 {
		if(imageHeight > maxHeight)
		{
			divisor = imageHeight/maxHeight;
			imageHeight = maxHeight;
			imageWidth = imageWidth/divisor;
		}
	 }
	 $(image).attr({'width' : imageWidth,
					 'height': imageHeight
					  });
}
//registration errors validator
function registrationValidator(errorMessages, scrError, termsError, event, contObj )
{
		var a_messages = errorMessages;
		var str_btnc_message = termsError;

		var minLen = 5;
		var passwdMessages = ['Password must be at least ' + minLen + '  characters, A-z, 0-9 and no spaces', 'Passwords do not match']

        var b_valid = true;
        var a_field_ids = ['UserScreenname',  'passwd',/* 'UserRe-password', 'UserCountry','UserCity','UserPostcode', 'UserGender','UserLookingFor', */'UserEmail' , 'user-city'];
//        var a_messages = [
//            '<?__('Please enter your screenname')?>',
//            '<?__('Please enter your password')?>',
//            '<?__('Please confirm your password')?>',
//            //'<?__('Please select your country')?>',
//			//'<?__('Please enter your city/town')?>',
//			//'<?__('Please enter your ZIP/postal code')?>',
//			//'<?__('Please select your gender')?>',
//            //'<?__('You need to tell us what you are looking for')?>',
//			'<?__('Please enter your e-mail')?>'
//        ];

//        var str_btnc_message = '<?__('Please accept our Terms and Conditions')?>';

        $('#register_errors').html('');

		//

		var errorId = '#error_';
		var wrongId = '#wrong_';

        for(ndx in a_field_ids)
        {
			//clear error div`s
			$(errorId+ndx).text('');
			$(wrongId+ndx).css('display', 'none');

			if(a_field_ids[ndx] == 'UserScreenname')
			{
				//if(a_field_ids[ndx].match(/[a-zA-Z0-9]/) == false)
				var scr = $('#'+a_field_ids[ndx]).val();
				var isChar = scr.match(/([!,@,#,$,%,\^,\\, \/,&,*,?,_,~])/);
				if(isChar)
				{
					$(errorId+ndx).text(scrError);
					$(errorId+ndx).css('display', 'block');

					$(wrongId+ndx).css('display', 'inline');
					b_valid = false;
				}

			}

            if (!$('#' + a_field_ids[ndx]).val())
            {
				$(errorId+ndx).text(a_messages[ndx]);
				$(errorId+ndx).css('display', 'block');

				$(wrongId+ndx).css('display', 'inline');

                $('#register_errors').append('<div>'+a_messages[ndx]+'</div>');
                b_valid = false;
            }
			else
			{
				if(a_field_ids[ndx] == 'passwd'  )
				{
					var passwdStr = $('#passwd').val();
					if(passwdStr.length < minLen)
					{
						$(errorId+ndx).text(passwdMessages[0]);
						$(errorId+ndx).css('display', 'block');
						$(wrongId+ndx).css('display', 'inline');

						$('#register_errors').append('<div>'+passwdMessages[0]+'</div>');
						b_valid = false;
					}
				}
//				else if(a_field_ids[ndx] == 'UserRe-password')
//				{
//					var rePasswdStr = $('#UserRe-password').val();
//					var passwdStr = $('#passwd').val();
//					if(passwdStr.length >= minLen &&
//						passwdStr != rePasswdStr )
//					{
//						$(errorId+ndx).text(passwdMessages[1]);
//						$(errorId+ndx).css('display', 'block');
//
//						$('#register_errors').append('<div>'+passwdMessages[1]+'</div>');
//						b_valid = false;
//					}
//				}
			}
        }

        //-- special validation for checkbox required
        if(contObj.id != 'UserRegister2Form')
		{
			if ($('#BTncAccept:checked').length == 0)
			{
				$('#agreement-text').css('color','red');
				//$('#register_errors').append('<div>'+str_btnc_message+'</div>');
				b_valid = false;
			}
		}
		else
		{
			if ($('#UserBTncAccept:checked').length == 0)
			{
				//$('#agreement-text').css('color','red');
				$('#register_errors').append('<div>'+str_btnc_message+'</div>');
				b_valid = false;
			}
		}



        if (!b_valid)
        {
            //show errors div
            $('#errors').show();
            //-- stop submit
            event.preventDefault();
        }
}
//EO registration errors validator
function tb_start(){
	tb_showLoadingProgress = $(this).attr('showloadingprogress') || false;
	tb_searchForm = $(this).attr('searchform') || false;
	var t = 'Registration';
	var a = '#TB_inline?height=480&width=590&inlineId=myOnPageContent';
	var g = false;
	tb_show(t,a,g);
	this.blur();
	//return false;
}

function starRatingPopUp(){
	if(siteConfig.getParam('loggedIn') === false){
		var currentCount = siteConfig.getParam('ratingCounter');
		
		//check for clicks count
		if((currentCount > 1) && ((currentCount % 3) == 0)){
			quickRegistrationObject.showPopup();
			//tb_start();
		}
		//increment counter
		siteConfig.setParam('ratingCounter', ++currentCount);
	}
}

function starRatingInit() {

    $('.star-rating[id]')
        .live('mousedown', function() {
            var itemId = $(this).attr('id');
			starRatingPopUp();
            star_rating_click(this, itemId.substring(8, itemId.length));
         })
        .live('mousemove', function(event) {
            star_rating_move(event, this);
        })
        .live('mouseleave', function() {
            star_rating_out(this);
        });

}

var clean_save_search_form = '';
b_search_opening = false;
b_over = false;
last_active = -1;
last_active_elem = '';

$(document).ready(function() {

	// button behavior
	$('button,a.button,img.button,input[type=submit],input[type=button]')
		.css({cursor: 'pointer'})
		.live('mousedown', function() {$(this).css({left: 0, top: 1, position: 'relative'})})
		.live('mouseup',   function() {$(this).css({left: 0, top: 0})})
		.live('mouseout',  function() {$(this).css({left: 0, top: 0})})
		.live('focus',     function() {this.blur()});
		
	// quick registration popup for a.quickreg for unregistered usres
	if (!siteConfig.getParam('loggedIn')) {
		$('a.quickreg').click(function() {
			quickRegistrationObject.showPopup();
			return false;
		});
	}

	// Find Friends button
	$('#find_friends_bt').click(function() {
		window.inviter.showPopup();
		return false;
	});

	// auto inviter popup after confirmation
	if (siteConfig.getParam('showInviterPopup')) {
		window.inviter.showPopup();
	}

	// 
	starRatingInit();

	// limited access for unconfirmed users
	// init counters, attach increment event handlers
	if (userConfirmation.isUserLoginedAndNotConfirmed()) {

        var limitations = siteConfig.getParam('userConfirmationLimitations');

		// enlarge profile photo listener
		sessionCounters.attachListener('tbShowProfile', function(value) { 
			if (value > limitations.tbShowProfile) {
				userConfirmation.showNotification();
				return false;
			} else {
				return true;
			}
		});

		// rating
		sessionCounters.attachListener('rating', function(value) {
			if (value > limitations.rating) {
				userConfirmation.showNotification();
				return false;
			} else {
				return true;
			}
		});
		
		// favorites
		sessionCounters.attachListener('favorites', function() {
			userConfirmation.showNotification(true);
			return false;
		});

		// edit profile
		sessionCounters.attachListener('editProfile', function(value) {
			if (value > limitations.editProfile) {
				userConfirmation.showNotification();
				return false;
			} else {
				return true;
			}
		});
	}

    //-- make favourite/saved search links to disappear
    $('#save_search,#recent_search,#favourite_profiles')
        .bind('mouseenter',function() {b_over = true;})
        .bind('mouseleave',function() {b_over = false;})
        .click(function() {
            if (!b_over) $(this).hide();
            b_search_opening = true;
        });
    $('body').click(function() {
        if (!b_search_opening && !b_over)
        {
            last_active_elem = '';
            last_active = -1;
            $('#save_search,#recent_search,#favourite_profiles').hide();
        }
        b_search_opening = false;
    });

	if (/msie\s6/i.test(navigator.userAgent)) {
		$('body').append($('div.annoying-popup-container'));
	}
});

function show_top_menu(div,elem,num)
{
    if( num != last_active )
    {
        last_active = num;

        var div_offset = $(div).offset();
        var x = div_offset.left;
        var y = div_offset.top;
        
    	$('#'+elem).css({left:x,top:y});

        if( last_active_elem ) $('#'+last_active_elem).hide();
        $('#'+elem).click().slideDown();

        last_active_elem = elem;
    }
    else
    {
        last_active_elem = '';
        last_active = -1;
        $('#'+elem).slideUp();
    }

	return false;
}

// redirect


function remove_default( elem, def_str )
{
	var a = $(elem).val();
	if( a == def_str ) $(elem).val('');
}

function gets2_values(path, cookie_path, sorting)
	{
		var arr		= new Array();
		var length	= 0;
		var prefix	= "pre_";
		var address = "";
		var delimiter = '/';
		var delim2 ="";
		var new_checkbox_name = "";
		var new_name = "";
		var debug ="";
		var str	  ="";

		var mode = /mode:(\w+)/.exec(location.href);
		if (mode && mode[1])
		{
			address += 'mode:' + mode[1] + '/';
		}

		$("form input,form select").each(function(){
		//debug += this.name+" ";
		if( this.name.substring(0,4) == prefix )
		{
			if( this.value != "" )
			{
				length = this.name.length;
				if( this.name.substring(length-2) == "[]" )
				{
					new_checkbox_name = this.name.substring(4,length-2);
					if ( this.checked )
					{
                        //-- :TRICK: alexander.zubchenko 20080509: manual HTML entities decoding (only necessary for us)
                        //-- We need to decode HTML entities to prevent breaking the URL
                        //-- But as JS doesn't have built-in functions or public libraries for this
                        //-- we will just replace entity used by our values (apostroph) by apostroph itself
                        str = this.value;

						if( arr[new_checkbox_name] == null )
						{
							arr[new_checkbox_name] = str.replace('/','_').replace('\\','_');
						}
						else
						{
							arr[new_checkbox_name] = arr[new_checkbox_name]+"~"+str.replace('/','_').replace('\\','_');
						}
					}
					else
					{
                        if (cookie_path != null)
                        {
                            $.cookie( new_checkbox_name, null );
                        }
					}
				}
				else if( this.name.substring(length-7) == "[first]" || this.name.substring(length-7) == "[lasts]" )
				{
					new_checkbox_name = this.name.substring(4,length-7);
                    str = this.value;
					if( arr[new_checkbox_name] == null )
					{
                        arr[new_checkbox_name] = this.name.substring(length - 7) == '[lasts]' ? '~' : '';
						arr[new_checkbox_name] += str.replace('/','_').replace('\\','_');
					}
					else
					{
						arr[new_checkbox_name] = arr[new_checkbox_name]+"~"+str.replace('/','_').replace('\\','_');
					}
				}
				else
				{
					new_name = this.name.substring(4);
                    str = this.value;
					arr[new_name] = str.replace("/","_").replace('\\','_').replace(/^\s+|\s+$/g, '');
				}
			}
			else
			{
                if (this.name == "pre_city" && cookie_path != null)
                {
                    $.cookie("city", "", {expires: 2592000, path: cookie_path});
                }
			}
		}
 		});

        b_first = 1;

		for( key in arr )
		{
            if (!b_first)
            {
                address += delimiter;
            }
            else
            {
                b_first = 0;
            }

			address += key+":"+	arr[ key ];

            if (cookie_path != null)
            {
                $.cookie( key, arr[ key ],{expires: 2592000, path: cookie_path} ); // 1 month
            }

			//$.cookie( key, arr[ key ],{ expires: 2592000, path: "/", domain: "jquery.com", secure: true } ); //1 month
		}

		if (typeof(sorting) == 'undefined')
		{
			sorting = getCurrentSorting();
		}
		
		if (sorting)
		{
			address += '/sorting:' + sorting;
		}

		location.href = path+'/'+address;
	}

	// sorting

	function getCurrentSorting() {
		var href = location.href,
			parts = href.split(/\//),
			sorting = '';
		for (var i in parts) {
			var part = parts[i];
			if (typeof(part) == 'string' && part.match(/^sorting:/)) {
				sorting = part.match(/:(.+)$/);
				if (sorting && sorting[1]) {
					return sorting[1].replace(/[^\w\-]/g, '');
				}
			}
		}
		return null;
	};

	//profile

	function star_rating_move(e,obj)
{
	var lis = obj.getElementsByTagName('li');

	var x=Math.max(navigator.userAgent.toLowerCase().indexOf('msie'),0)?
		event.clientX+document.body.scrollLeft : e.pageX;

	var	tmp=obj;
	while(tmp!=null)
	{
		x-=tmp.offsetLeft;
		tmp=tmp.offsetParent;
	}
	if(!lis[1].innerHTML) lis[1].innerHTML = parseInt(lis[0].style.width);

	if(lis[0].className!='voted') lis[0].className = 'vote';
	lis[0].style.width=Math.ceil(x*0.0581)*20+'%'; // x/86*5
}

function star_rating_out(obj)
{
	var lis = obj.getElementsByTagName('li');
	if(lis[0].className!='voted') lis[0].className = '';

	var v = parseInt(lis[1].innerHTML);
	lis[0].style.width=v+'%';
}

function star_rating_click(obj,profilekey,rate_val)
{
	if (!sessionCounters.increment('rating')) {
		return;
	}

	var lis = obj.getElementsByTagName('li');
	//if(lis[1].innerHTML=='-') return;

    rate = rate_val || Math.floor(parseInt(lis[0].style.width)/86*5);
    lis[1].innerHTML = rate * 20;
    lis[0].className = 'voted';
    lis[0].style.width = lis[1].innerHTML+'%';

	var ratingPath = siteConfig.getParam('ratingPath');

    $.get(ratingPath+profilekey+'/'+rate,null,function(response) {
        //lis[0].style.width = (parseFloat(response)*20.).toString()+'%';
        //lis[0].className = 'voted';
        $(obj).next().html(response);
        
        // если мы на странице с рейтингом
        // устанавливаем рейтинг обьекту img 
        if( window.globalCurrentImage )
        {
        	 globalCurrentImage.rating = lis[1].innerHTML;
        	 indexImg = parseInt($('.activeImage').parents('li').attr('jcarouselindex'));
        	 // если кликнули на последнюю перелистываем страницу
        	 if( indexImg%7 == 0 )
        	 {
        	 	$('.jcarousel-next').click()
        	 }
        	 // перелистываем на соседнюю фотку
        	 else
        	 {
        	 	$( "li[jcarouselindex='" + (indexImg + 1) + "'] :first-child" ).click();
        	 }
        }
        
    });
}
function add_to_favourite(elem,url,url_favourites)
{
	if (!sessionCounters.increment('favorites')) {
		return;
	}

	var textAddedToFavourites = window.textAddedTofavourites;
	
	prefix = /\?/.test(url) ? '&' : '?';
	var timestamp = parseInt(new Date().getTime().toString().substring(0, 10));
	url += prefix + timestamp;
	$.get(url,null,function(response) {
		if( response == 'ok' )
		{
			if (!$(elem).attr('added_to_favorites_el_id')){
				$(elem).replaceWith('<a href="'+url_favourites+'">'+textAddedToFavourites+'</a>');
			} else {
				var el = $(elem).attr('added_to_favorites_el_id');
				if ($('#add_to_favorites_na_btn_' + el).length > 0){
					$('#add_to_favorites_na_btn_' + el).css('display', 'none');
					$('#added_to_favorites_btn_'+el).css('display', 'block');
				}
				if ($('#recommend_' + el).length > 0){
					$('#recommend_' + el).parent().attr('class', $('#recommend_' + el).parent().attr('class') + ' activated_icon');
					$('#recommend_' + el).replaceWith('<a href="'+url_favourites+'">'+textAddedToFavourites+'</a>');
				}
			}
			$('#top_favourite_profiles').attr('href',url_favourites).attr('onmousedown','');
		}
	});
}
function set_favourite(elem,url_favourites)
{
    $(elem).replaceWith('<a href="'+url_favourites+'">'+textAddedToFavourites+'</a>');
}

function limitText(container,element_id, limitNum) {
	var element = document.getElementById(element_id);

	if (container.value.length > limitNum) {
		container.value = container.value.substring(0, limitNum);
		element.value = 0;
	} else {
		element.value = limitNum - container.value.length;
	}
}
function submitCompareForm(form_name)
{
	var link = '';
	var profiles_count = 0;
	var checkboxes = $('#'+form_name+' input[name^=checkprofile]:checked');
	checkboxes.each(function(){
		link += '/'+$(this).val();
		profiles_count++;
	});
	if ( profiles_count >= 2 )
	{
        location.href = $('#' + form_name).attr('action') + link;
        return false;
	}
	alert(textSelectCompareProfiles);
	return false;
}

var _x = 0;
var _y = 0;
var current_gallery_popup = null;
var current_gallery_timeout = null;

function gallery_show_alert(div)
{
    //-- hide previously shown popup
    if (current_gallery_popup != null && current_gallery_popup.attr('id') != div.attr('id'))
    {
        current_gallery_popup.hide();
    }

    //-- clear previously set timer
    if (current_gallery_timeout != null)
    {
        clearTimeout(current_gallery_timeout);
    }

    //-- make this popup current (so the next one will remove it)
    current_gallery_popup = div;

    var page_size = getPageSize();

    var parent_offset = current_gallery_popup.parent().offset();

    var popup_width = current_gallery_popup.width();
    var popup_height = current_gallery_popup.height();

    var is_right_out = false; //(parent_offset.left + popup_width + 40 >= page_size.scrollLeft + page_size.windowWidth);
    var is_bottom_out = (parent_offset.top + popup_height + 5 >= page_size.scrollTop + page_size.windowHeight);

    current_gallery_popup.css({
        'left': ( !is_right_out ? parent_offset.left + 40 : parent_offset.left - popup_width + 40 ),
        'top':  ( !is_bottom_out ? parent_offset.top + 95 : parent_offset.top - popup_height + 155 )
    }).show();
}

function gallery_hide_timer(that)
{
    //-- remember the last set timer to remove it when other popup is shown
    current_gallery_timeout = setTimeout(function(){that.hide()}, 300);
}

function show_photos(that)
{
    $(".more_photos").not($(that).toggle()).hide();
    return false;
}

function checkCompareProfile(obj,div)
{
	var checkboxes = $('div.compare input');
	var count = 0;
	var elem = obj;

	if(div)
	{
		elem = $(obj).prev('input')[0];
		if($(elem).attr('disabled')) return false;
		elem.checked = !elem.checked;
	}
	checkboxes.each(function(){if(this.checked) count++;});
	if(count>=4 && elem.checked)
	{
		checkboxes.each(function(){
			if(!this.checked) $(this).attr('disabled','disabled')
		});
	}
	else if(count==3 && !elem.checked)
	{
		checkboxes.attr('disabled','');
	}

	return false;
}

// jQuery animation functions

jQuery.animateProcess = 0;
jQuery.slideDownDiv = function(obj,min_height) {
	if ($.animateProcess == 0)
	{
		$.animateProcess=1;
		var height = $(obj).hide().height('auto').height();
		$(obj).height(min_height+'px').show().animate({height:height+'px'},300,false,function(){$.animateProcess=2});
	}
}
jQuery.slideUpDiv = function(obj,min_height) {
	if ($.animateProcess == 2)
	{
		$(obj).animate({height:min_height+'px'},300,false,function(){$.animateProcess=0});
	}
}

var code = new Array();
var old_code ='-1';

function show_extend(elem)
{
	$(document).ready(function() {

		var cur_pre = elem.substring(0,8);
		var cur_code = elem.substring(9);
		if(old_code!=cur_code)
		{
			$('#extended_'+old_code).hide(300);
			$('#morephot_'+old_code).hide(300);
			code['extended'] = null;
			code['morephot'] = null;
		}
		if(code[cur_pre]==cur_code)
		{
			$('#'+elem).hide(300);
			code[cur_pre] = null;
		}
		else
		{
			code[cur_pre] = cur_code;
			old_code 	  = cur_code;
			$('#'+elem).show(300);
		}
		});
}

function getPageSize()
{
	var windowWidth = (document.documentElement && document.documentElement.clientWidth)
		|| window.innerWidth || self.innerWidth || document.body.clientWidth;
	var windowHeight = (document.documentElement && document.documentElement.clientHeight)
		|| window.innerHeight || self.innerHeight || document.body.clientHeight;

	var scrollLeft = (document.documentElement && document.documentElement.scrollLeft)
		|| window.pageXOffset || self.pageXOffset || document.body.scrollLeft;
	var scrollTop = (document.documentElement && document.documentElement.scrollTop)
		|| window.pageYOffset || self.pageYOffset || document.body.scrollTop;

	var pageWidth = (document.documentElement && document.documentElement.scrollWidth) ?
		document.documentElement.scrollWidth: (document.body.scrollWidth > document.body.offsetWidth) ?
		document.body.scrollWidth: document.body.offsetWidth;
	var pageHeight = (document.documentElement && document.documentElement.scrollHeight) ?
		document.documentElement.scrollHeight: (document.body.scrollHeight > document.body.offsetHeight) ?
		document.body.scrollHeight: document.body.offsetHeight;

	return {
	   'pageWidth'     : pageWidth,
	   'pageHeight'    : pageHeight,
	   'scrollLeft'    : scrollLeft,
       'scrollTop'     : scrollTop,
	   'windowWidth'   : windowWidth,
	   'windowHeight'  : windowHeight
	};
}

function open_window(href,w,h,scrollbar)
{
    if(!w) w = 540;
    if(!h) h = 440;
    if(!scrollbar) scrollbar = 'yes';
    window.open(href,'','toolbar=no,directories=no,location=no,status=no,menubar=no,scrollbars='+scrollbar+',resizable=no,copyhistory=no,width='+w+',height='+h);
}

/**
 * Functionnality for transfer profile
 *
 * @author Victor Buzyka <buzyka@idegroup.com>
 */
var transferManager = function(){
	
	// initialisation flag for sites
	var isInited = false; 
	
	var siteList = new Array();
	
	var isAnonymUser = true; 
	
	init = function(){
		if (!isInited) {
			var tmp_list = siteConfig.getParam('TransferProfile.sites');
			if (tmp_list.length > 0){
				siteList = tmp_list;
				isAnonymUser = false; 
			}
			isInited = true;
		}
	};
	
	oneTimeTransferShow = function(profilekey, site_id){
		found = false;
		var tmp = new Array();
		for (key in siteList){
			if (siteList[key] == site_id){
				found = true;
			} else {
				tmp.push(siteList[key]);
			}
		}
		if (found) {
			siteList = tmp;
			showTransfer(profilekey);
		}
		return found;
	};
	
	showTransfer = function(profilekey){
		tb_show(
			'',
			siteConfig.getParam('TransferProfile.popupUrl') + '/' + profilekey + '?width=635&height=590',
			false,
			{
				events: {
					beforeRemove: linksObject.goToCurrentLink
				}
			}
		);
	};
	
	// Public arrea
	return {
		/**
		 * Show transfer popup
		 * 
		 * @param int profilekey
		 * @param int site_id
		 * @return 
		 */
		show: function(profilekey, site_id) {
			init();
			return oneTimeTransferShow(profilekey, site_id);
		},
		
		/**
		 * Tracking popup showing 
		 *
		 * @param string type action type
		 *
		 */
		trackingPopupShowing: function(type, sitename) {
			type = type.toLowerCase();
			switch (type){
				// registereg user uncomlete profile
				case 'add':
					content = 'add_popup';
					break;
				// unregistereg user
				case 'reg':
					content = 'reg_popup';
					break;
				// registered user
				case 'join':
					content = 'join_popup';
					break;
				default:
					content = '';
			}
			if (content != '' && typeof(pageTracker) != 'undefined') {
				pageTracker._trackPageview( content + '/' + sitename);
			}
		}
		
		
	};
}();


/**
 * All functionality for links in this namespace
 * 
 * LinksObject worked with external profiles links now.
 * This namespace give functionaliti for external link tracking, 
 * foolscrean  showing blank-link in IE, showing transfering profile popup.
 * This namespace can by extensible.
 *
 * @author Victor Buzyka <buzyka@idegroup.com>
 */
var linksObject = function(){
	/**
	 * Profile object
	 *
	 * @var object
	 */ 
	var profile;
	/**
	 * Tracker source
	 *
	 * @var string
	 */
	var source = '';
	/**
	 * Target type
	 *
	 * @var string
	 */
	var target = '_self';

	/**
	 * Search results view mode
	 * @var string
	 */
	var viewMode = null;

	/**
	 * Get host name from url-string
	 *
	 * @param string url
	 * @return string host name
	 */ 
	getHostName = function (url){
		var res = url.match(/^(http:\/\/){0,1}([^\/]+)/);
		if (res.length > 1 && res[res.length - 1] != 'http://'){
			return res[res.length - 1];
		}
		return '';
	}
	
	/**
	 * Get url without protocol prefix
	 *
	 * @param string url
	 * @return string
	 */
	getUrlWithoutPrefix = function(url){
		var res = url.match(/^(http:\/\/){0,1}(.+)/);
		if (res.length > 1 && res[res.length - 1] != 'http://'){
			return res[res.length - 1];
		}
		return url;
	}
	
	/**
	 * Initialise new link  object 
	 *
	 * @return bool true if link object initialised succesfully
	 */
	initLinkSettings = function(linkParams){
		if (linkParams.profile != undefined && linkParams.profile.profilekey != undefined && linkParams.profile.profile_url != undefined){
			profile = linkParams.profile;
			profile.profile_url = linkParams.profile.profile_url;
			profileKey = linkParams.profile.profilekey;
			if (linkParams.tracker_source != undefined){
				source = linkParams.tracker_source;
			} else {
				source = '';
			}
			if (linkParams.target != undefined && linkParams.target == '_blank'){
				target = '_blank';
			} else {
				target = '_self';
			}
			return true;
		}
		return false
	}
	
	/**
	 * Metod used for maximize target=_blank links in IE
	 *
	 * @param url for redirect
	 */
	toRedirectPage = function(additionalParameters, target){
		additionalParameters = getUrlWithoutPrefix(additionalParameters);
		var blankPageUrl = siteConfig.getParam('baseUrl') + "redirect/redirectPage.php?profile=";
		var url = blankPageUrl.concat(escape(additionalParameters));
		if (target == '_blank'){
			var width = screen.availWidth;
			var height = screen.availHeight;
		
			var options = "toolbar=yes,location=yes,directories=no, status=no, menubar=yes, scrollbars=yes, resiziable=yes,\n\
							 copyhistory=yes, width="+ width +", height=" + height;
			
			window.open(url ,'', options);
		} else {
			document.location = url;
		}
	}
	
	snShareLog =  function(sn_name, data){
		$.ajax({
			type: 'POST',
			data: data,
			url: '/social_network/logSnShare/'+ sn_name,
			async: true,
			dataType: 'text',
			success: function(msg){
			}
		});
	}
		
	// Public arrea
	return {
	
		// USE ONLY THIS METHOD FOR REDIRECT PAGE (ON docement.location)
		runLink: function($link) {
			if($.browser.msie){
				toRedirectPage($link, target);
			} else {
				if (target == '_blank'){
					var newWindow = window.open($link, '_blank');
				} else {
					window.document.location = $link;
				}
			}
		},
		
		/**
		 * Get profile parameter data
		 *
		 * @param string param_name parameter name
		 * @return string
		 */
		getProfileParam: function(param_name){
			if (profile[param_name] != undefined){
				return profile[param_name];
			}
			return '';
		},
		
		/**
		 * Set profile parameter data
		 *
		 * @param string param_name parameter name
		 * @param string param_value parameter value
		 * @return string
		 */
		setProfileParam: function(param_name, param_value){
			profile[param_name] = param_value;
		},

		setViewMode: function(mode) {
			viewMode = mode;
		},
		
		/**
		 * Go to link defined in this object
		 */
		goToCurrentLink: function(){
			// Google analitics tracker
			var host_name = getHostName(profile.profile_url);
			if (siteConfig.getParam('Google.Analytics.Enable')){				
				if (host_name.length != ''){
					if (typeof(pageTracker) != 'undefined') {
						pageTracker._trackPageview(siteConfig.getParam('Site.Name') + "_live/" + host_name);
					}										
				}
			}
			if (host_name.length != ''){
				var params = {
					went_to: profile.profile_url,
					source: source,
					profilekey: profile.profilekey,
					site: profile.siteid
				};
				if (viewMode) {
					params.source = params.source.replace(/^\w+?_/, viewMode + '_');
				}
				$.get(siteConfig.getParam('Users.Leave.Url'), params);
			}
			//EO Google analitics tracker
			linksObject.runLink(profile.profile_url);
		},
		
		goToLink: function($link){
			if (typeof($link) === 'object') {
				target = $link.target || null;
				$link = $link.href;
			}
			var current_host = window.location.hostname;
			var tmp_host = getHostName($link);
			if ( tmp_host != current_host  && tmp_host != '') {
				// tracker
				if (typeof(pageTracker) != 'undefined') {
					pageTracker._trackPageview(siteConfig.getParam('Site.Name') + "_live/" + tmp_host);
				}
			}
			linksObject.runLink($link);
		},
		
		/**
		 * Redirect to profile link
		 *
		 * @param object linkProfiles link profile object in format
		 * 			{
		 *				profile: {
		 *							profile_url: <redirect profile url>
		 *							profilekey: <profilekey>
		 *						},
		 *				tracker_source: <source name for tracker>,
		 				target: <target type (this field is optionaly)>
		 *			}
		 * @return bool if returned true then transfer popup is shived
		 */
		goToProfile: function(linkParams){
			if (initLinkSettings(linkParams)){
				//if (linkParams.profile.siteid == undefined || !transferManager.show(linkParams.profile.profilekey, linkParams.profile.siteid)){
					linksObject.goToCurrentLink();
					return false;
				//}
				return true;
			}
			return false;
		},
		
		/**
		 * Run google tracker for patern
		 *
		 * @param string pattern example: '/homepage/link1/{param1}/lik2/{param2}' where 'param1' and 'param2' parameters
		 * @param object params example: {param1: {value: value1}, param2: {func: function2}}
		 */
		runGoogleTracker: function(pattern, params){
			if (pattern.length > 0){
				for (var key in params){
					switch (true){
						case (params.value != undefined):
							tmp_value = params.value; 
							break;
						case (params.func != undefined):
							var tmp_func = params.func;
							tmp_value = tmp_func(); 
							break;
					}
					
					var temp = pattern.split('{' + key + '}');
					pattern = temp.join(tmp_value);
				}
				if (typeof(pageTracker) != 'undefined') {
					pageTracker._trackPageview(pattern);
				}
			}
		},
		
		/**
		 * Autologin on partner site
		 *
		 * @param int user_id
		 * @param int site_id
		 * @param bool isConfirmed true if user is confirmed
		 * $param string target
		 */
		partnerAutologin: function(user_id, site_id) {
			var url = siteConfig.getParam('partner.autologinUrl') + '/' + user_id + '/' + site_id;
			$.get(url);
		},
		
		/**
		 * Run facebook login
		 * 
		 */
		runFacebookLogin: function() {
			linksObject.runExLogin('FaceBook');
		},
		
		runExLogin: function (source_name) {
			var wait = new progressBarWait('big');
			wait.show();
			var url_for_login = siteConfig.getParam('baseUrl') + 'users/loginEx/' + source_name;
			$.get(url_for_login, {}, function(data, textStatus){
				var res = eval(data);
				wait.remove();
				linksObject.facebookLoginCallback(res);
			});
		},
		
		runSnShare: function (el, snName) {
			var url = $(el).attr('sn_url');
			var title = $(el).attr('sn_title');
			var windowWidth = 300;
			var windowHeight = 300;
			switch (snName){
				case 'facebook':
					f_url = siteConfig.getParam('fbShareUrl');
					f_url = f_url.replace("{url}", url);
					f_url = f_url.replace("{title}", title);
					snShareLog('FaceBook', {url: url});
					url = f_url;
					windowWidth = 700;
					windowHeight = 400;
				break;
			}
			linksObject.showPopupWindow(url, windowWidth, windowHeight);
			return false;
		},
		
		
		
		showPopupWindow: function (url, windowWidth, windowHeight) {
			myleft=(screen.width)?(screen.width-windowWidth)/2:100;
			mytop=(screen.height)?(screen.height-windowHeight)/2:100;
			window.open(url, 'autorisationExFrom', 'width=' + windowWidth + ',height=' + windowHeight + ',top=' + mytop + ',left=' + myleft + ',toolbar=no,location=no,menubar=no,directories=no,scrollbars=no,resizable=no,fullscreen=no');
		},
		
		/**
		 * Login callback function
		 * 
		 * @param action result
		 */
		facebookLoginCallback: function(res) {
			if (typeof(res.status) != 'undefined'){
				if (res.status == 'error'){
					if (typeof(res.source) != 'undefined' && res.source == 'Bebo'){
						windowWidth = 1008;
						windowHeight = 500;
						myleft=(screen.width)?(screen.width-windowWidth)/2:100;
						mytop=(screen.height)?(screen.height-windowHeight)/2:100;
						window.open(siteConfig.getParam('baseUrl') + 'users/autorisationExFrom/Bebo', 'autorisationExFrom', 'width=' + windowWidth + ',height=' + windowHeight + ',top=' + mytop + ',left=' + myleft + ',toolbar=no,location=no,menubar=no,directories=no,scrollbars=no,resizable=no,fullscreen=no');
					} else {
						if (typeof(res.message) != 'undefined') {
							alert(res.message);
						}
					}
				} else {
					if (typeof(res.redirect_url) != 'undefined'){
						linksObject.goToLink(res.redirect_url);
					} else {
						if (typeof(res.action) != 'undefined' && res.action == 'run_register' && typeof(res.source_name) != 'undefined') {
							if (res.source_name == 'FaceBook') {
								// response from users/facebookRegisterUser
								var wait = new progressBarWait('big');
								wait.show();
								$.getJSON('/users/facebookRegisterUser', {}, function(response) {
									if (response.status && response.status == 'ok') {
										if (response.birthdate_correction) {
											var msg = 'You hidded birthdate in FaceBook profile and '
													+ 'will be registered on Canoodle as 19 years old. '
													+ 'You can change your birthdate later in your profile.';
											alert(msg.replace(/\s+/, ' '));
										}
										location.href = response.location;
									} else if (response.status && response.status == 'error_validation') {
										var errList = [];
										for (var key in response.descr) {
											errList.push(key + '|' + response.descr[key]);
										}
										tb_show('', siteConfig.getParam('baseUrl') 
											+ 'users/facebookRegPopup?width=445&height=345&data=' + encodeURI(errList.join('~')));
									}
									wait.remove();
								});
							} else {
								tb_show(
									'',
									siteConfig.getParam('baseUrl') + 'users/registerEx/' + res.source_name + '?width=665&height=395',
									false,
									{padding: 0, TB_ajaxContent: {style: 'padding-left: 0px; padding-right: 0px;'}}
								);
							}
						}
					}
				}
			}
		}
		
	}; // o.e. public area
}();


/**
 * Appends options in <select>
 * @param options options array
 * @param def default value
 * @param useKeyValuePair
 * @param treatAsEmpty replaces key that eq. to given value by empty string: ''
 * @param clearExisting
 */
$.fn.appendOptions = function(options, def, useKeyValuePair, treatAsEmpty, clearExisting) {
	return this.each(function() {

		if (clearExisting) {
			this.innerHTML = '';
		}

		for (var i in options) {

			var value = options[i],
				key = useKeyValuePair ? i : value;

			if (treatAsEmpty && treatAsEmpty === key) {
				key = '';
			}

			var selected = '';
			if (def !== undefined && key == def) {
				selected = ' selected="selected"';
			}

			$(this).append('<option' + selected + ' value="' + key + '">' + value + '</option>');
		}

	});
}

var progressBarWait = function (size){
	this.elId = '';
	this.size = size;
    this.imgEl;
    this.darkOverlay;
	
	this.show = function(){
		this.elId = 'progress_wait' + size;
		var cf = siteConfig.getParam('progressBarImages');
		if (typeof(cf['wait'][size]) != 'undefined') {
			this.darkOverlay = new darkOverlay();
			//canoodle-dark-overlay
			this.imgEl =  $(document.createElement('img'));
			$(this.imgEl).attr('id', this.elId);
			$(this.imgEl).attr('src', cf['wait'][size]);
			$(this.imgEl).css({
				position: 'absolute',
				left: '50%',
				top: '50%',
				marginLeft: String(-$(this.imgEl).width() / 2) + 'px',
				marginTop: String(-$(this.imgEl).height() / 2) + 'px',
				'z-index': '2001'
			}); 
			$(this.imgEl).appendTo('body');
			return true;
		}
		return false;
	}

	this.remove = function (){
		this.darkOverlay.remove();
		$(this.imgEl).remove();
	}
}

var darkOverlay = function (){
	this.darkOverlay;
	this.isShowed = false;
	
	this.show = function (){
		if (!this.isShowed) {
			this.darkOverlay = $(document.createElement('div'));
			$(this.darkOverlay).css({
				position: 'absolute',
				left: '0',
				top: '0',
				width: '100%',
				height: $(document).height(),
				background: 'black',
				'z-index': '2000',
				opacity: '0.7',
				filter: 'progid:DXImageTransform.Microsoft.Alpha(opacity=70)', /* ie7 */
				'_filter': 'alpha(opacity=70)', /* ie6 */
				'-ms-filter': "'progid:DXImageTransform.Microsoft.Alpha(Opacity=70)'" /* ie8 */
			});
			if (/msie\s6/i.test(navigator.userAgent)) {
				$('select').hide();
			}
			$('object,embed').hide();
			$(this.darkOverlay).appendTo('body');
			this.isShowed = true;
		}
	}
	
	this.remove = function (){
		this.isShowed = false;
		$(this.darkOverlay).remove();
		if (/msie\s6/i.test(navigator.userAgent)) {
			$('select').show();
		}
		$('object,embed').show();
	}
	
	// constructor
	this.show();
}

/**
 * Disables selection of separator option (-----------------)
 * @param selectId DOM id attribute of <select>
 * @param forbidEmptyValue disable selection of options with empty values
 */
function selectDisableSeparatorSelection(selectId, forbidEmptyValue) {
	var jqSelectObject = $('#' + selectId),
		selectedItem = jqSelectObject.val();
	jqSelectObject.change(function() {
		var regexp = forbidEmptyValue ? /^-*$/ : /^-+$/;
		if (regexp.test(jqSelectObject.val())) {
			jqSelectObject.val(selectedItem);
		} else {
			selectedItem = jqSelectObject.val();
		}
	});
}

$.fn.extend({
	disableSeparatorSelection: function(disableEmptyValues) {
		return this.each(function() {
			selectDisableSeparatorSelection(this.id, disableEmptyValues)
		});
	}
});

var quickRegistrationObject = function(){
	setErrors = function(errorsObj){
		//for (var i in errorsObj){
		$('#quick_registration_form .err').html('&nbsp;');
		var listRF = $('#quick_registration_form .pict');
		var tmpEl = '';
		if (listRF.length > 0){
			for (var i=0; i<listRF.length; i++){
				tmpEl = listRF.get(i);
				var actionEl = $(tmpEl).next('div').get(0);
				if (typeof(actionEl) != 'undefined'){
					if ($(actionEl).children('input').length > 0){
						var fieldName = $(actionEl).children('input').get(0).name;
						var fname = fieldName.replace(/^data\[User\]\[(.*)\]$/, '$1');
					} else if ($(actionEl).children('select').length > 0){
						var fieldName = $(actionEl).children('select').get(0).name;
						var fname = fieldName.replace(/^data\[User\]\[(.*)\]$/, '$1');
					}
					if (typeof(errorsObj[fname]) != 'undefined'){
						//alert(fname);
						$(tmpEl).children('.qr__err_ico').css('display', 'block');
						$(tmpEl).children('.qr__valid_ico').css('display', 'none');
						var errDiv = $(tmpEl).parent().next('.err');
						if (errDiv.length > 0){
							$(errDiv.get(0)).text(errorsObj[fname]);
						}
					} else {
						$(tmpEl).children('.qr__err_ico').css('display', 'none');
						$(tmpEl).children('.qr__valid_ico').css('display', 'block');
					}
				}
			}
		}
		//}
		
	}
	// Public arrea
	return {
		showPopup: function(){
			tb_show('Quick Registration',
				siteConfig.getParam('baseUrl') + 'users/quickRegistrationPopup?width=510&height=360',
				false,
				{
					padding: 0,
					TB_ajaxContent: {style: 'padding: 0px;'},
					close_button: {is_show: false}
				}
			);
			return false;
		},
		
		submitRegistrationForm: function(){
			$("#content_reg_box_container").css('display', 'none');
			$("#content_reg_box_progress").css('display', 'block');
			$("#quick_registration_form").ajaxSubmit({
				success: function(data, statusText){
					//console.log(data);
					if (data.status == 'success'){
						document.location = siteConfig.getParam('baseUrl') + 'users/registered/';						
					} else {
						if (typeof(data.data.error) != 'undefined' && data.data.error =='server_error'){
							tb_remove();
						} else {
							if (typeof(data.data.fields) != 'undefined'){
								setErrors(data.data.fields);
							}
							$("#content_reg_box_container").css('display', 'block');
							$("#content_reg_box_progress").css('display', 'none');
						}
					}
				},
				dataType: 'json'
			});		
		},
		
		myspaceRegistration: function(){
			$action = function(){
				tb_show(null, siteConfig.getParam('baseUrl') + '/users/registerMyspace?width=635&height=505', false, {padding: 0, TB_ajaxContent: {style: 'padding-left: 0px; padding-right: 0px;'}});
			};
			tb_config_params = {};
		},
		
		changeActiveBlock: function(active_block){
			$('.quick_registration_active_block').css('display', 'none');
			switch (active_block){
				case 'login':
					$('#popup-login').css('display', 'block');
					break;
				case 'registration':
					$('#registration-form').css('display', 'block');
					break;
			}
			return false;
		},
		
		submitLoginForm: function(){
			$("#content_reg_box_container").css('display', 'none');
			$("#content_reg_box_progress").css('display', 'block');
			$("#qr_login-form").ajaxSubmit({
				success: function(data, statusText){
					if (data.status == 'success'){
						document.location.reload();
					} else {
						if (typeof(data.data.error) != 'undefined' && data.data.error =='server_error'){
							tb_remove();
						} else {
							if (typeof(data.data.message) != 'undefined'){
								$('#qr_login-form .err').text(data.data.message);
							}
							$("#content_reg_box_container").css('display', 'block');
							$("#content_reg_box_progress").css('display', 'none');
						}
					}
				},
				dataType: 'json'
			});
		}
	};
}();


/**
 * Twitter object
 */
var twitter = (function() {

	var share = function(profileKey, screenname, gender) {
		var width = 800,
			height = 470,
			left = screen.width / 2 - width / 2,
			top = screen.height / 2 - height / 2;
		var data = '/' + profileKey + '/' + screenname + '/' + gender;
		var options = ',toolbar=no,location=no,menubar=no,directories=no,scrollbars=no,resizable=no,fullscreen=no,'
			+ 'width=' + width + ',height=' + height + ',top=' + top + ',left=' + left;
		window.open('/social_network/twitterShare' + data, 'Login_in_Twitter', options);
		return false;
	}

	// make methods public
	return {
		share: share
	}
	
})();


/**
 * General-puprose tracker
 */
window.tracker = new (function Tracker() {

	var backendUrl = '/search/ui_tracker';

	this.log = function(event, data) {
		$.post(backendUrl, {
			event: event,
			url: location.href,
			date: +new Date(),
			data: data || null
		});
	}

});

/**
 * Tracker.log shortcut
 */
function track(event) {
	// do nothing
}

/**
 * Search form and results
 */
function Search(config) {

	/**
	 * QuickSearch fields
	 */
	var quickSearchFields = {person_type: null, age: null, city: null, country: null};

	/**
	 * Returns initialization config
	 */
	this.getConfig = function() {
		return config;
	}

	/**
	 * Prepare values for search URL
	 */
	var normalizeValue = function(value) {
		value = value.replace(/\//, '_'); // slash 2 underscope
		value = value.replace(/^\s+|\s+$/g, ''); // and trim spaces
		return value;
	}

	/**
	 * Prepare search values for using in form
	 */
	var denormalizeValue = function(value) {
		value = value.replace(/_/, '/');
		return value;
	}

	/**
	 * Returns search url
	 */
	var generateSearchUrl = function(mode, page, referrer) {
		var fields = config.fields,
			searchUrl = config.searchUrl,
			url = '/';

		// view type
		if (mode) {
			if (mode != config.defaultMode) {
				url += 'mode:' + mode + '/';
			}
		} else {
			if (config.mode != config.defaultMode) {
				url += 'mode:' + config.mode + '/';
			}
		}

		// online now
		if (config.extras.onlineNow) {
			url += 'status:Online/';
		}

		// user-defined data
		for (var name in config.extras.params) {
			url += name + ':' + config.extras.params[name] + '/';
		}

		for (var name in fields) {
			var type = fields[name].type;

			// if advanced search form is hidden - quick search
			if (!advancedSearch.isVisible() && !(name in quickSearchFields)) {
				continue;
			}

			if (type == 'range') { // eg. Age, Height, Weight, etc.

				var from = $('#' + name + '-from').val(),
					to   = $('#' + name + '-to').val();

				if (from)		url += name + ':' + normalizeValue(from);
				if (to)
					if (from)	url += '~' + normalizeValue(to);
					else		url += name + ':~' + normalizeValue(to);
				if (from || to)	url += '/';

			} else if (type == 'checklist') { // eg. Looking for, Sexuality, etc.

				var checked = [];

				$('#search-form input[type=checkbox][name*=' + name + ']').each(function() {
					if (this.checked) {
						checked.push(normalizeValue(this.value));
					}
				});

				if (checked.length) {
					url += name + ':' + checked.join('~') + '/';
				}

			} else { // simple elements: text, select, etc.

				var value = $('#' + name).val();
				if (value && value != config.autocomplete.cityPlaceholder) {
					url += name + ':' + normalizeValue(value) + '/';
				}

			}
		}

		if (page && page != 1) {
			url += 'page:' + page + '/';
		}

		if (referrer) {
			url += 'referrer:' + referrer;
		}

		return searchUrl + url;
	}

	/**
	 * Launch search by current form parameters
	 */
	var go = function(mode, page) {
		location.href = generateSearchUrl(mode, page);
	}

	/**
	 * Returns current location url without hash, query string and last slash
	 */
	var getCleanLocation = function() {
		var href = location.href;
		href = href.replace(/#.*/, ''); // hash
		href = href.replace(/\?.*/, ''); // query
		href = href.replace(/\/page:\d+/, ''); // page #
		href = href.replace(/\/$/, ''); // last slash
		href = href.replace(/\/referrer:(\w+)/, ''); // referer in url
		return href;
	}

	/**
	 * Switches view mode tab
	 */
	var viewModeTab = function(mode) {
		$('div.view-mode.t_on').removeClass('t_on').addClass('t_off');
		$('#view-mode-tab-' + mode).removeClass('t_off').addClass('t_on');
	}

	/**
	 * Returns possibility of using ajax loading of profiles
	 */
	var isAjaxLoadingPossible = function() {
		return typeof(window.searchResults) != 'undefined'
			&& /search_results|favourites|newest|lastvisited/.test(location.href);
	}

	/**
	 * Load page by ajax if possible, redirect instead
	 */
	var loadResults = function(href, oldMode, mode) {

		if (isAjaxLoadingPossible()) {

			var ajaxLoad = function() {
				window.searchResults.loadContent(href, function(status) {
					if (status) {
						// set new tracker source for outclick
						if (typeof(linksObject) !== 'undefined') {
							linksObject.setViewMode(mode, oldMode);
						}
					}
					else {
						location.href = href;
					}
				});
			}

			var render = function() {
				window.searchResults.overlay.start();
				var renderCore = function() {
					// log view mode switching
					$.get('/search/trackViewModeSwitch/' + mode + '?' + (+new Date()));
					// switch tab
					viewModeTab(mode);
					// set new tracker source for outclick
					if (typeof(linksObject) !== 'undefined') {
						linksObject.setViewMode(mode, oldMode);
					}
					// empty results
					window.searchResults.empty();
					// change view mode in config
					searchResultsConfig.mode = mode;
					// reinit results
					window.searchResults = new SearchResults(searchResultsConfig);
					window.searchResults.reinitEvents();
					// reinit paginator
					smartPagination.init();
					// done
					window.searchResults.overlay.stop();
				}
				setTimeout(renderCore, 100);
			}

			var searchResultsConfig = window.searchResults.getConfig();

			switch (oldMode + ' => ' + mode) {
				// same count of profiles
				case 'details => list':
				case 'list => details':
				case 'gallery => mini':
				case 'mini => gallery':
					// reinit with another template
					render();
					break;
				// greater profiles count to lower
				case 'gallery => list':
				case 'mini => list':
				case 'gallery => details':
				case 'mini => details':
					// from gallery & mini - slice profiles and reinit another template
					searchResultsConfig.fullProfiles = searchResultsConfig.profiles;
					searchResultsConfig.profiles = searchResultsConfig.profiles.slice(0, 12);
					render();
					break;
				 // lower profiles count to greater
				case 'details => gallery':
				case 'list => gallery':
				case 'details => mini':
				case 'list => mini':
					// reinit another template with cached profiles or ajax to load whole resultset if no them
					if (typeof(searchResultsConfig.fullProfiles) != 'undefined') {
						searchResultsConfig.profiles = searchResultsConfig.fullProfiles;
						render();
					}
					else {
						ajaxLoad();
					}
					break;
				default:
					ajaxLoad();
			}
		}
		else {
			// if no searchResults object - simply redirect
			location.href = href;
		}
	}

	/**
	 * Goto page #
	 */
	var goToPage = function(page, redirect) {
		var href = getCleanLocation()

		href = href.replace(/\/mode:\w+/, '');

		if (page > 1) {
			href += '/page:' + page;
		}

		config.pageCurrent = page;
		
		if (isAjaxLoadingPossible() && !redirect) {
			window.searchResults.loadContent(href, function(status) {
				if (status) {
					location.href = location.href.replace(/#.*/, '') + '#page:' + page;
					window.searchResults.reinitEvents();
				}
				else {
					location.href = href;
				}
			});
		}
		else {
			location.href = href;
		}
	}

	/**
	 * Go to next page
	 */
	var next = function() {
		if (/details|list/.test(config.mode)) {
			if (config.pageCurrent < config.pageTotal) {
				goToPage(config.pageCurrent + 1);
			}
		}
		else if (/gallery|mini/.test(config.mode)) {
			var inc = 4;
			if (config.pageCurrent < config.pageTotal - inc + 1) {
				goToPage(config.pageCurrent + inc);
			}
		}

		return false;
	}

	/**
	 * Go to previous page
	 */
	var prev = function() {
		if (/details|list/.test(config.mode)) {
			if (config.pageCurrent > 1) {
				goToPage(config.pageCurrent - 1);
			}
		}
		else if (/gallery|mini/.test(config.mode)) {
			var inc = 4;
			if (config.pageCurrent > inc) {
				goToPage(config.pageCurrent - inc);
			}
			else if (config.pageCurrent > 1) {
				goToPage(1);
			}
		}
		return false;
	}

	/**
	 * Switch view mode
	 */
	var mode = function(mode) {
		// if nothing to do
		if (mode == config.mode) {
			return false;
		}

		var href = getCleanLocation(),
			oldMode = config.mode;

		config.mode = mode;

		// remove host
		href = href.replace(new RegExp('http://' + location.host), '');

		// if mode exists in url
		if (href.indexOf('/mode:') != -1) {
			// replace old mode by new
			href = href.replace(/\/mode:(\w+)/, '/mode:' + mode);
		} else {
			// append /mode:x
			href += '/mode:' + mode;
		}

		if (config.pageCurrent > 1) {
			href += '/page:' + config.pageCurrent;
		}

		loadResults(href, oldMode, mode);
		return false;
	}

	/**
	 * Init form values
	 */
	var initForm = function() {
		$('#person_type').appendOptions(config.fields.person_type.contents, '', true, ' ');
		$('#country').appendOptions(config.fields.country.contents).disableSeparatorSelection();
		$('#age-from').appendOptions(config.fields.age.contents, 18);
		$('#age-to').appendOptions(config.fields.age.contents, 79);

		// city/postcode autocompletion
		autocomplete_city(
			'city',
			'country',
			config.autocomplete.requestUrl,
			config.autocomplete.message,
			config.autocomplete.cityPlaceholder
		);
	}

	/**
	 * Fill form by current search
	 */
	var renderSearch = function() {
		for (var name in config.fields) {
			var value = config.search[name],
				type = config.fields[name].type;

			if (value) {
				value = denormalizeValue(value);
				switch (type) {
					case 'text':
					case 'select':
						$('#' + name).val(value);
						break;
					case 'range':
						value = value.split('~');
						$('#' + name + '-from').val(value[0]);
						$('#' + name + '-to').val(value[1]);
						break;
					case 'checklist':
						value = value.split('~');
						for (var i in value) {
							var q = '#search-form input[type=checkbox][name*=' + name + '][value=\'' + value[i] + '\']';
							$(q).attr({checked: 'checked'});
						}
						break;
				}
			}
		}
	}

	/**
	 * Shows hint above city field and hides it after 3s
	 * @param msg hint HTML
	 */
	var showHint = function(msg) {
		var $hint = $('#err_city_box');
		$hint
			.html(msg)
			.show()
			.click(function() {$hint.fadeOut(500)});
		setTimeout(function() {
			$hint.fadeOut(500);
		}, 5000);
	}

	/**
	 * Advanced search form module
	 */
	var advancedSearch = new (function(){

		var $advSearchBox = $('#adv_search_box'),
			$corners	  = $advSearchBox.find('div.adv_search_tl,div.adv_search_tr,div.adv_search_bl,div.adv_search_br');

		var visible = false,
			showStatic = false;

		this.show = function() {
			if (!visible) {
				visible = true;
				if (!config.extras.onlineNow) {
					window.userMenu.set('advanced');
				}
				$corners.hide();
				$advSearchBox
					.css({height: 0, top: 70})
					.animate({height: 420}, 1000, 'easeOutBounce', function() {
						$corners.fadeIn(200);
						$(this).animate({top: 72}, 200);
					});
			}
		};

		this.hide = function() {
			if (visible) {
				visible = false;
				if (config.extras.onlineNow) {
					window.userMenu.set('online');
				} else if (config.extras.advanced) {
					window.userMenu.set('quicksearch');
				} else {
					window.userMenu.prev();
				}
				$corners.fadeOut(200);
				$advSearchBox
					.animate({top: 70}, 200)
					.slideUp(200);
			}
		};

		this.toggle = function() {
			if (visible) {
				advancedSearch.hide();
			} else {
				advancedSearch.show();
			}
		};

		this.makeStatic = function() {
			visible = true;
			showStatic = true;
			$advSearchBox.css({position: 'static', display: 'block', marginTop: 10});
			$advSearchBox.find('div.adv_search_bl').css({bottom: 0, left: 0});
			$advSearchBox.find('div.adv_search_br').css({bottom: 0, right: 0});
		};

		this.makeAbsolute = function() {
			showStatic = false;
			$advSearchBox.css({position: 'absolute', marginTop: 0});
			$advSearchBox.find('div.adv_search_bl').css({bottom: -1, left: -1});
			$advSearchBox.find('div.adv_search_br').css({bottom: -1, right: -1});
		}

		this.isVisible = function() {
			return visible;
		}

		this.isStatic = function() {
			return showStatic;
		}

	})();

	// make methods & objects public ///////////////////////////////////////////////////////////////////////

	this.go = go;
	this.next = next
	this.prev = prev;
	this.mode = mode;
	this.advancedSearch = advancedSearch;
	this.config = config;

	// contruction && events handlers //////////////////////////////////////////////////////////////////////

	initForm();
	renderSearch();

	// hint above the city field
	if (config.extras.soundex) {
		showHint(config.extras.soundex);
	} else if (config.extras.distance) {
		showHint(config.extras.distance);
	}

	// online now
	if (config.extras.onlineNow) {
		window.userMenu.set('online');
	}

	// current page
	var page = /#page:(\d+)$/.exec(location.href);
	if (page && page[1] != config.pageCurrent) {
		// not ajax (SearchResults object is not yet defined), redirects
		goToPage(page[1], true);
	}

	// is advanced search
	if (/search/.test(config.currentUrl)) {
		for (var key in config.search) {
			if (key in config.fields) {
				if (!(key in quickSearchFields)) {
					config.extras.advanced = true;
					if (!config.extras.onlineNow) {
						window.userMenu.set('advanced');
					}
					advancedSearch.makeStatic();
					break;
				}
			}
		}
	}

	$('#search_bt').click(function() {
		go();
		return false;
	});

	$('#search-form input,#search-form select').keypress(function(e) {
		if (e.keyCode == 13) {
			go();
			return false;
		}
		return true;
	});

	$('#adv_search_bt').click(function() {
		advancedSearch.toggle();
	});

	$(document).click(function(e) {
		if (!advancedSearch.isStatic()
		&&  !$(e.target).parents('#search-form').length
		&&  !$(e.target).is('#adv_search_bt')
		&&  !$(e.target).parents('#user-menu-advanced').length
		) {
			advancedSearch.hide();
		}
	});
	
};

function SearchResults(config) {

	// construction

	(function() {

		var container = document.getElementById(config.container),
			html = '';

		if (!config.profiles.length) {
			if (container) {
				container.innerHTML = config.templates.nothingFound;
			}
			return;
		}

		//

		var render = function(html, data) {
			for (var key in data) {
				html = html.replace(new RegExp('{' + key + '}', 'g'), data[key]);
			}
			return html;
		}

		var markup = {
			content: {
				details: function(html, i) {
					return i % 2 == 0
						? '<div><div class="left">'  + html + '</div>'
						: '<div class="right">' + html + '</div><div class="clear"></div></div>'
				},
				list: function(html) {return html},
				face: function(html) {return html},
				gallery: function(html, i) {
					switch (i % 14) {
						case 0:
							return '<div class="gallery-tile">' + html;
						case 13:
							return html + '<div class="clear"></div></div>';
						default:
							return html;
					}
				},
				mini: function(html, i) {return markup.content.gallery(html, i)},
				newsfeed: function(html) {return html}
			},
			after: {
				details: function(i) {return i % 2 == 0 ? '<div class="clear"></div></div>' : ''},
				list: function() {return ''},
				face: function() {return ''},
				gallery: function(i) {return i % 14 != 13 ? '<div class="clear"></div></div>' : ''},
				mini: function(i) {return markup.after.gallery(i)},
				newsfeed: function() {return ''}
			}
		};

		// for '+ enlarge' functionality
		window.profilesCount = config.total;
		window.profileDataStore = {};
		window.currentPage = config.page;
		window.profiles = config.profiles;
		window.searchUrl = location.href.replace(/#.*/, '').replace(/page:\d+/, '').replace(/\/+$/, '') + '/page:';

		// templating
		var template = config.templates.profile[config.mode];
		for (var i in config.profiles) {
			var profile = config.profiles[i];
			if (config.mode != 'details') {
				profile.toolbar = render(config.templates.toolbar, profile);
			}

			var profileHtml = render(template, profile);
			html += markup.content[config.mode](profileHtml, i);

			// for '+ enlarge' functionality
			window.profileDataStore[profile.id] = profile;
		}

		html += markup.after[config.mode](i);

		// append
		container.innerHTML += html;
		
	})();

	// private //////

	var progress = {
		show: function($profileElement) {
			$profileElement.find('div.profile-grazooka').show();
		},
		hide: function($profileElement) {
			$profileElement.find('div.profile-grazooka').hide();
		}
	};

	var errors = {
		unknown: function() {
			// sometimes is better do nothing
		}
	};

	// public ///////

	this.getConfig = function() {
		return config;
	}

	this.empty = function() {
		$('#profiles_box').empty();
	}

	var reinitEvents = function() {
		tb_init('#search-content .thickbox');
		profilePhotoEnlargeEvent(); // init '+ enlarge' links
	}

	var overlay = {
		start: function(callback, msg) {
			msg = msg || 'Loading...';
			$('div.pagination').hide();
			$('body').append('<div id="search-overlay"></div>');
			var $searchContent = $('#search-content'),
				$searchOverlay = $('#search-overlay'),
				searchContentOffset = $searchContent.offset();
			$searchOverlay
				.css({
					left: searchContentOffset.left,
					top: searchContentOffset.top,
					width: $searchContent.width(),
					height: $searchContent.height()
				})
				.append('<p>' + msg + '</p>');
			if (callback) {
				callback();
			}
		},
		stop: function() {
			$('#search-overlay').remove();
		},
		fadeOut: function(time, callback) {
			$('#search-content').fadeOut(time, callback);
		},
		fadeIn: function(time, callback) {
			$('#search-content').fadeIn(time, callback);
		}
	};

	// make them public
	this.reinitEvents = reinitEvents;
	this.overlay = overlay;

	this.loadContent = function(url, callback) {
		overlay.start();
		var timestamp = +new Date();
		url += url.indexOf('?') != -1 ? ('&time=' + timestamp) : ('?time=' +  + timestamp);
		$.get(url, null, function(response) {
			overlay.stop();
			var content = /<!--search-content-->([\S\s]+)<!--search-content-->/m.exec(response);
			// shit happens
			if (!content) {
				if (callback) {
					callback(false);
				}
				return;
			}
			$('#search-content').empty().append(content[1]);
			reinitEvents();
			// not only shit happens
			if (callback) {
				callback(true);
			}
		});
	};

	// actions ////////////////////////

	this.addToFavorites = function(link, profileKey) {
		if (siteConfig.getParam('loggedIn')) {

			// shows confirm. reminder popup for unconfirmed user
			if (!sessionCounters.increment('favorites')) {
				return false;
			}

			var $link = $(link),
				$profile = $link.parents('div.detail_view_box');
				
			progress.show($profile);
			$.get(config.favorites.addReqUrl + '/' + profileKey, {}, function(response) {
				progress.hide($profile);
				if (response == 'ok') {
					$link
						.removeAttr('onclick')
						.click(function() {
							location.href = config.favorites.viewUrl;
							return false;
						})
						.find('img').attr({src: config.favorites.imgAdded});
				} else {
					errors.unknown();
				}
			});
			
		} else {
			
			quickRegistrationObject.showPopup();
			
		}
		
		return false;
	}

	this.wink = function(link, profileKey) {
		if (siteConfig.getParam('loggedIn')) {

			// shows confirm. reminder popup for unconfirmed user
			if (!sessionCounters.increment('favorites')) {
				return false;
			}
			
			var $link = $(link),
				$profile = $link.parents('div.detail_view_box'),
				$winkBox = $profile.find('div.wink_box');

			progress.show($profile);

            var time = (+new Date()),
                url = config.wink.addReqUrl + '/' + profileKey + '/' + time;

			$.get(url, {}, function(response) {
				progress.hide($profile);

				if (response == 'ok') {
					$link
						.removeAttr('onclick')
						.removeClass('button')
						.css({cursor: 'default'})
						.find('img')
						.attr({src: config.wink.imgAdded});
					$winkBox
						.addClass('wink_box_on')
						.click(function() {
							$winkBox.fadeOut(500, function() {
								$winkBox.removeClass('wink_box_on');
							});
						});
					setTimeout(function() {
						$winkBox.fadeOut(500, function() {
							$winkBox.removeClass('wink_box_on');
						});
					}, 5000);
				} else {
					errors.unknown();
				}
			});
		} else {
			quickRegistrationObject.showPopup();
		}
		
		return false;
	}
};


/**
 * Left and top menu on 'search' layout
 */
window.userMenu = (function() {

	var left = {

		current: 'quicksearch',
		previous: null,

		/**
		 * Selects item in left menu or deselects all
		 * @param string item Item to select
		 */
		set: function(item) {
			left.previous = left.current;
			left.current = item;
			$(document).ready(function() {
				$('#user_menu a').removeClass('set');
				if (item) {
					$('#user-menu-' + item).addClass('set');
				}
			});
		},

		/**
		 * Selects previously selected item or deselects all
		 */
		prev: function() {
			left.set(left.previous);
		}
	
	};
	

	/**
	 * Top menu
	 */
	var top = {

		/**
		 * Selects item in top menu or deselects all
		 * @param string item Item to select
		 */
		set: function(item) {
			$('#top_menu a').removeClass('set');
			$(document).ready(function() {
				if (item) {
					$('#' + item).addClass('set');
				}
			});
		}
	};

	// construct //////////////////////////////////////////////////////

	// top menu

	var url = location.href
		.replace(/http:\/\/.+?\//, '')
		.replace(/\?.*/, '')
		.replace(/#.*/, '')
		.replace(/\/$/, '')
	;
	
	var topMenuRules = {
		'^myprofile$': 'top-menu-home',
		'^search/(search_results|face)': 'top-menu-search',
		'^myprofile/(newest|favourites|lastvisited)$': 'top-menu-search',
		'^myprofile/(about|matches|photos|password|settings)$': 'top-menu-profile',
		'^newsfeed': 'top-menu-newsfeed'
	};

	for (var rule in topMenuRules) {
		var item = topMenuRules[rule],
			rx   = new RegExp(rule);
		if (rx.test(url)) {
			top.set(item);
			break;
		}
	}

	// left menu
	
	if (!left.previous) {
		var type = /\/type:(\w+)/.exec(location.href);
		if (type) {
			left.set(type[1]);
		} else if (type = /myprofile\/(\w+)/.exec(location.href)) {
			left.set(type[1]);
		} else if (/search_results/.test(location.href)) {
			left.set(left.current);
		}
	}

	// public /////////////////////////////////////////////////////////

	return {
		set: left.set,
		prev: left.prev
	}
	
})();

/**
 * Inviter aka 'Find Friends'
 */
window.inviter = (function() {

	/**
	 * Shows popups
	 */
	var showPopup = function() {
		$(document).ready(function() {
			var url = siteConfig.getParam('baseUrl') + 'users/showInviterFromBanner?height=515&width=636';
			tb_show('Find Friends on Canoodle', url, false, false);
		});
	};

	return {
		showPopup: showPopup
	};

})();

/**
 * Makes an city/postcode input autocompleteable.
 * @param cityFieldId dom id of autocompleteable city field
 * @param countryFieldId dom id of country field (input/select)
 * @param requestUrl ajax backend url (optional, default '/locations/byany')
 * @param emptyHint hint on empty field (optional, default 'Select a location from the list that appears as you type')
 * @param placeholder empty field placeholder (optional, default 'Enter city name')
 * @param instant dont wait document ready event
 * @return undefined
 */
function autocomplete_city(cityFieldId, countryFieldId, requestUrl, emptyHint, placeholder, instant) {
	
	var autocompleteCore = function() {
		
		var $city = $('#' + cityFieldId),
			$country = $('#' + countryFieldId);

		if (!$city.val()) {
			$city.val(placeholder)
		}

		$country.change(function() {
			$city.val(placeholder);
		});

		$city.focus(function() {
			if ($city.val() == placeholder) {
				$city.val('');
			}
		}).blur(function() {
			if (!$city.val()) {
				$city.val(placeholder);
			}
		});

		$city.autocomplete(
			requestUrl || '/locations/byany', {
			parse: function(data) {
				return $.map(data, function(row) {
					return {
						data: row,
						city: row.city,
						country: row.region
					}
				});
			},
			extraParams: {
				country: function() {return $country.val();}
			},
			formatItem: function(row/*, i, count*/) {
				return row.city + ', ' + row.region;
			},
			emptyHint: emptyHint || 'Select a location from the list that appears as you type',
			placeholder: placeholder || 'Enter city name',
			width: /msie\s6/i.test(navigator.userAgent) ? '200px' : 'auto'
		}).result(function(e, row) {
			$city.val(row.city);
		});
	}

	////////////////////////////////////////////////

	if (instant) {
		autocompleteCore();
	} else {
		$(document).ready(autocompleteCore);
	}
}

/**
 * Canoodle voting system
 */
function Poll(id, type, errorMessage) {

	var url = siteConfig.getParam('pollBackend') || '/search/poll',
		placeholder = null;

	// dom
	if (type == 'left') {
		var $poll = $('#pool'),
			$pollBlock = $('#left_pool'),
			$err = $poll.find('div.err'),
			$loading = $poll.find('div.grazooka'),
			$thanks = $('#left_pool_thanks'),
			$submit = $poll.find('button.bt_send'),
			$custom = $poll.find('input.others');
	} else if (type == 'top') {
		var $poll = $('#pool_form'),
			$pollBlock = $('#pool_main'),
			$err = $pollBlock.find('div.err'),
			$loading = $poll.find('div.grazooka'),
			$thanks = $('#pool_thanks'),
			$submit = $poll.find('button.bt_send'),
			$custom = $poll.find('input.others');
	}

	placeholder = $custom.val();

	/**
	 * User interface related module
	 */
	var ui = (function() {

		var loading = {
			start: function() {
				$submit.parent().hide();
				$loading.show();
			},
			stop: function() {
				$loading.hide();
				$submit.parent().show();
			}
		};
			
		var errors = {
			show: function(msg) {
				msg = msg || errorMessage;
				if (type == 'left') {
					$err.text(msg).show();
					$poll.find('input').focus(function() {
						errors.hide();
					});
				} else {
					alert(msg);
				}
			},
			hide: function() {
				if (type == 'left') {
					$err.hide();
				}
			}
		};

		var done = function() {
			$pollBlock.fadeOut(500, function() {
				$thanks.fadeIn(500).click(function() {
					$thanks.fadeOut(500);
				});
			});
		};

		return {
			loading: loading,
			errors: errors,
			done: done
		}
	})();

	/**
	 *
	 */
	var bindEvents = function() {
		$custom.focus(function() {
			if (this.value == placeholder) {
				this.value = '';
			}
		})
		.blur(function() {
			if (!this.value) {
				this.value = placeholder;
			}
		})
		.keypress(function(e) {
			if (e.keyCode == 13) {
				submit();
				return false;
			}
		});

		$submit.click(function() {
			submit();
		});
	};

	/**
	 * 
	 */
	var submit = function() {

		ui.errors.hide();

		var data = [];

		$poll.find('input').each(function() {
			if (this.type == 'checkbox' && this.checked) {
				data.push(this.value);
			}
		});

		var custom = '';
		if ($custom.val() && $custom.val() != placeholder) {
			custom = $custom.val();
		}

		if (!data.length && !custom) {
			ui.errors.show();
			return;
		}

		ui.loading.start();
		$.post(url, {id: id, type: type, answer: data, custom: custom}, function(response) {
			if (/^ok/.test(response)) {
				var newId = /id:\s(\d+)/.exec(response);
				if (response && newId && newId[1]) {
					newId = parseInt(newId[1]);
					var content = /<!--jsmarker-->([\S\s]+)<!--jsmarker-->/m.exec(response);
					$pollBlock.empty().append(content[1]);
					new Poll(newId, type, errorMessage);
				} else {
					ui.done();
				}
			} else {
				ui.errors.show('Error has occured during saving you answer. Please try again later.');
			}
		});
	}

	// constructor /////////////////////////////////////////////
	bindEvents();
};

/**
 *
 */
var smartPagination = (function() {

	var $container = null,
		conf = null;

	var empty = function() {
		$container.empty();
	}

	var prev = function() {
		$container
			.append('<a href="#" class="prev">prev</a>')
			.find('a.prev')
			.click(function() {
				return window.search.prev();
			});
	}

	var separator = function() {
		$container.append('&nbsp;|&nbsp;');
	}

	var next = function() {
		$container
			.append('<a href="#" class="next">next</a>')
			.find('a.next')
			.click(function() {
				return window.search.next();
			});
	}

	return {
		init: function() {
			if (window.searchResults) {
				conf = window.searchResults.getConfig();
				$container = $('div.pagination');				
				empty();
				var perPage = (conf.mode == 'details' || conf.mode == 'list') ? 12 : 56;
				if (conf.page > 1) {
					prev();
				}
				if (conf.page * perPage < conf.total) {
					if (conf.page > 1) {
						separator();
					}
					next();
				}
				$container.show();
			} // if
		}
	}
})();

// using on reg/confirm page 
function wink(link, profileKey) {
    if (siteConfig.getParam('loggedIn')) {
        // shows confirm. reminder popup for unconfirmed user
        if (!sessionCounters.increment('favorites')) {
            return false;
        }

        var $link = $(link);

        var time = (+new Date()),
            url = '/profile/wink/' + profileKey + '/' + time;

        $.get(url, {}, function(response) {
            if (response == 'ok') {
                $link
                    .removeAttr('onclick')
                    .css({cursor: 'default'})
                    .parent('div')
                    .addClass('changed');
            } else {
                errors.unknown();
            }
        });
    } else {
        quickRegistrationObject.showPopup();
    }

    return false;
}
