/*NULL
*//*object(browser)#6 (2) {
  ["name"]=>
  string(7) "unknown"
  ["version"]=>
  string(7) "unknown"
}
*//*
 * jQuery 1.2.3 - New Wave Javascript
 *
 * Copyright (c) 2008 John Resig (jquery.com)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * $Date: 2008-02-06 00:21:25 -0500 (Wed, 06 Feb 2008) $
 * $Rev: 4663 $
 */
(function(){if(window.jQuery)var _jQuery=window.jQuery;var jQuery=window.jQuery=function(selector,context){return new jQuery.prototype.init(selector,context);};if(window.$)var _$=window.$;window.$=jQuery;var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/;var isSimple=/^.[^:#\[\.]*$/;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}else if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem)if(elem.id!=match[3])return jQuery().find(selector);else{this[0]=elem;this.length=1;return this;}else
selector=[];}}else
return new jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return new jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(selector.constructor==Array&&selector||(selector.jquery||selector.length&&selector!=window&&!selector.nodeType&&selector[0]!=undefined&&selector[0].nodeType)&&jQuery.makeArray(selector)||[selector]);},jquery:"1.2.3",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;this.each(function(i){if(this==elem)ret=i;});return ret;},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value==undefined)return this.length&&jQuery[type||"attr"](this[0],name)||undefined;else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else
return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else
selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return!selector?this:this.pushStack(jQuery.merge(this.get(),selector.constructor==String?jQuery(selector).get():selector.length!=undefined&&(!selector.nodeName||jQuery.nodeName(selector,"form"))?selector:[selector]));},is:function(selector){return selector?jQuery.multiFilter(selector,this).length>0:false;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i<max;i++){var option=options[i];if(option.selected){value=jQuery.browser.msie&&!option.attributes.value.specified?option.text:option.value;if(one)return value;values.push(value);}}return values;}else
return(this[0].value||"").replace(/\r/g,"");}return undefined;}return this.each(function(){if(this.nodeType!=1)return;if(value.constructor==Array&&/radio|checkbox/.test(this.type))this.checked=(jQuery.inArray(this.value,value)>=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=value.constructor==Array?value:[value];jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else
this.value=value;});},html:function(value){return value==undefined?(this.length?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value==null){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data==undefined&&this.length)data=jQuery.data(this[0],key);return data==null&&parts[1]?this.data(parts[0]):data;}else
return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script")){scripts=scripts.add(elem);}else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.prototype.init.prototype=jQuery.prototype;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else
jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==1){target=this;i=0;}for(;i<length;i++)if((options=arguments[i])!=null)for(var name in options){if(target===options[name])continue;if(deep&&options[name]&&typeof options[name]=="object"&&target[name]&&!options[name].nodeType)target[name]=jQuery.extend(target[name],options[name]);else if(options[name]!=undefined)target[name]=options[name];}return target;};var expando="jQuery"+(new Date()).getTime(),uuid=0,windowData={};var exclude=/z-?index|font-?weight|opacity|zoom|line-?height/i;jQuery.extend({noConflict:function(deep){window.$=_$;if(deep)window.jQuery=_jQuery;return jQuery;},isFunction:function(fn){return!!fn&&typeof fn!="string"&&!fn.nodeName&&fn.constructor!=Array&&/function/i.test(fn+"");},isXMLDoc:function(elem){return elem.documentElement&&!elem.body||elem.tagName&&elem.ownerDocument&&!elem.ownerDocument.body;},globalEval:function(data){data=jQuery.trim(data);if(data){var head=document.getElementsByTagName("head")[0]||document.documentElement,script=document.createElement("script");script.type="text/javascript";if(jQuery.browser.msie)script.text=data;else
script.appendChild(document.createTextNode(data));head.appendChild(script);head.removeChild(script);}},nodeName:function(elem,name){return elem.nodeName&&elem.nodeName.toUpperCase()==name.toUpperCase();},cache:{},data:function(elem,name,data){elem=elem==window?windowData:elem;var id=elem[expando];if(!id)id=elem[expando]=++uuid;if(name&&!jQuery.cache[id])jQuery.cache[id]={};if(data!=undefined)jQuery.cache[id][name]=data;return name?jQuery.cache[id][name]:id;},removeData:function(elem,name){elem=elem==window?windowData:elem;var id=elem[expando];if(name){if(jQuery.cache[id]){delete jQuery.cache[id][name];name="";for(name in jQuery.cache[id])break;if(!name)jQuery.removeData(elem);}}else{try{delete elem[expando];}catch(e){if(elem.removeAttribute)elem.removeAttribute(expando);}delete jQuery.cache[id];}},each:function(object,callback,args){if(args){if(object.length==undefined){for(var name in object)if(callback.apply(object[name],args)===false)break;}else
for(var i=0,length=object.length;i<length;i++)if(callback.apply(object[i],args)===false)break;}else{if(object.length==undefined){for(var name in object)if(callback.call(object[name],name,object[name])===false)break;}else
for(var i=0,length=object.length,value=object[0];i<length&&callback.call(value,i,value)!==false;value=object[++i]){}}return object;},prop:function(elem,value,type,i,name){if(jQuery.isFunction(value))value=value.call(elem,i);return value&&value.constructor==Number&&type=="curCSS"&&!exclude.test(name)?value+"px":value;},className:{add:function(elem,classNames){jQuery.each((classNames||"").split(/\s+/),function(i,className){if(elem.nodeType==1&&!jQuery.className.has(elem.className,className))elem.className+=(elem.className?" ":"")+className;});},remove:function(elem,classNames){if(elem.nodeType==1)elem.className=classNames!=undefined?jQuery.grep(elem.className.split(/\s+/),function(className){return!jQuery.className.has(classNames,className);}).join(" "):"";},has:function(elem,className){return jQuery.inArray(className,(elem.className||elem).toString().split(/\s+/))>-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else
jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret;function color(elem){if(!jQuery.browser.safari)return false;var ret=document.defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(elem.style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=elem.style.outline;elem.style.outline="0 solid black";elem.style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&elem.style&&elem.style[name])ret=elem.style[name];else if(document.defaultView&&document.defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var getComputedStyle=document.defaultView.getComputedStyle(elem,null);if(getComputedStyle&&!color(elem))ret=getComputedStyle.getPropertyValue(name);else{var swap=[],stack=[];for(var a=elem;a&&color(a);a=a.parentNode)stack.unshift(a);for(var i=0;i<stack.length;i++)if(color(stack[i])){swap[i]=stack[i].style.display;stack[i].style.display="block";}ret=name=="display"&&swap[stack.length-1]!=null?"none":(getComputedStyle&&getComputedStyle.getPropertyValue(name))||"";for(var i=0;i<swap.length;i++)if(swap[i]!=null)stack[i].style.display=swap[i];}if(name=="opacity"&&ret=="")ret="1";}else if(elem.currentStyle){var camelCase=name.replace(/\-(\w)/g,function(all,letter){return letter.toUpperCase();});ret=elem.currentStyle[name]||elem.currentStyle[camelCase];if(!/^\d+(px)?$/i.test(ret)&&/^\d/.test(ret)){var style=elem.style.left,runtimeStyle=elem.runtimeStyle.left;elem.runtimeStyle.left=elem.currentStyle.left;elem.style.left=ret||0;ret=elem.style.pixelLeft+"px";elem.style.left=style;elem.runtimeStyle.left=runtimeStyle;}}return ret;},clean:function(elems,context){var ret=[];context=context||document;if(typeof context.createElement=='undefined')context=context.ownerDocument||context[0]&&context[0].ownerDocument||document;jQuery.each(elems,function(i,elem){if(!elem)return;if(elem.constructor==Number)elem=elem.toString();if(typeof elem=="string"){elem=elem.replace(/(<(\w+)[^>]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+"></"+tag+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("<opt")&&[1,"<select multiple='multiple'>","</select>"]||!tags.indexOf("<leg")&&[1,"<fieldset>","</fieldset>"]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"<table>","</table>"]||!tags.indexOf("<tr")&&[2,"<table><tbody>","</tbody></table>"]||(!tags.indexOf("<td")||!tags.indexOf("<th"))&&[3,"<table><tbody><tr>","</tr></tbody></table>"]||!tags.indexOf("<col")&&[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"]||jQuery.browser.msie&&[1,"div<div>","</div>"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf("<table")&&tags.indexOf("<tbody")<0?div.firstChild&&div.firstChild.childNodes:wrap[1]=="<table>"&&tags.indexOf("<tbody")<0?div.childNodes:[];for(var j=tbody.length-1;j>=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else
ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var fix=jQuery.isXMLDoc(elem)?{}:jQuery.props;if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(fix[name]){if(value!=undefined)elem[fix[name]]=value;return elem[fix[name]];}else if(jQuery.browser.msie&&name=="style")return jQuery.attr(elem.style,"cssText",value);else if(value==undefined&&jQuery.browser.msie&&jQuery.nodeName(elem,"form")&&(name=="action"||name=="method"))return elem.getAttributeNode(name).nodeValue;else if(elem.tagName){if(value!=undefined){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem.setAttribute(name,""+value);}if(jQuery.browser.msie&&/href|src/.test(name)&&!jQuery.isXMLDoc(elem))return elem.getAttribute(name,2);return elem.getAttribute(name);}else{if(name=="opacity"&&jQuery.browser.msie){if(value!=undefined){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseFloat(value).toString()=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100).toString():"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(value!=undefined)elem[name]=value;return elem[name];}},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(typeof array!="array")for(var i=0,length=array.length;i<length;i++)ret.push(array[i]);else
ret=array.slice(0);return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i<length;i++)if(array[i]==elem)return i;return-1;},merge:function(first,second){if(jQuery.browser.msie){for(var i=0;second[i];i++)if(second[i].nodeType!=8)first.push(second[i]);}else
for(var i=0;second[i];i++)first.push(second[i]);return first;},unique:function(array){var ret=[],done={};try{for(var i=0,length=array.length;i<length;i++){var id=jQuery.data(array[i]);if(!done[id]){done[id]=true;ret.push(array[i]);}}}catch(e){ret=array;}return ret;},grep:function(elems,callback,inv){var ret=[];for(var i=0,length=elems.length;i<length;i++)if(!inv&&callback(elems[i],i)||inv&&!callback(elems[i],i))ret.push(elems[i]);return ret;},map:function(elems,callback){var ret=[];for(var i=0,length=elems.length;i<length;i++){var value=callback(elems[i],i);if(value!==null&&value!=undefined){if(value.constructor!=Array)value=[value];ret=ret.concat(value);}}return ret;}});var userAgent=navigator.userAgent.toLowerCase();jQuery.browser={version:(userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1],safari:/webkit/.test(userAgent),opera:/opera/.test(userAgent),msie:/msie/.test(userAgent)&&!/opera/.test(userAgent),mozilla:/mozilla/.test(userAgent)&&!/(compatible|webkit)/.test(userAgent)};var styleFloat=jQuery.browser.msie?"styleFloat":"cssFloat";jQuery.extend({boxModel:!jQuery.browser.msie||document.compatMode=="CSS1Compat",props:{"for":"htmlFor","class":"className","float":styleFloat,cssFloat:styleFloat,styleFloat:styleFloat,innerHTML:"innerHTML",className:"className",value:"value",disabled:"disabled",checked:"checked",readonly:"readOnly",selected:"selected",maxlength:"maxLength",selectedIndex:"selectedIndex",defaultValue:"defaultValue",tagName:"tagName",nodeName:"nodeName"}});jQuery.each({parent:function(elem){return elem.parentNode;},parents:function(elem){return jQuery.dir(elem,"parentNode");},next:function(elem){return jQuery.nth(elem,2,"nextSibling");},prev:function(elem){return jQuery.nth(elem,2,"previousSibling");},nextAll:function(elem){return jQuery.dir(elem,"nextSibling");},prevAll:function(elem){return jQuery.dir(elem,"previousSibling");},siblings:function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);},children:function(elem){return jQuery.sibling(elem.firstChild);},contents:function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);}},function(name,fn){jQuery.fn[name]=function(selector){var ret=jQuery.map(this,fn);if(selector&&typeof selector=="string")ret=jQuery.multiFilter(selector,ret);return this.pushStack(jQuery.unique(ret));};});jQuery.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(name,original){jQuery.fn[name]=function(){var args=arguments;return this.each(function(){for(var i=0,length=args.length;i<length;i++)jQuery(args[i])[original](this);});};});jQuery.each({removeAttr:function(name){jQuery.attr(this,name,"");if(this.nodeType==1)this.removeAttribute(name);},addClass:function(classNames){jQuery.className.add(this,classNames);},removeClass:function(classNames){jQuery.className.remove(this,classNames);},toggleClass:function(classNames){jQuery.className[jQuery.className.has(this,classNames)?"remove":"add"](this,classNames);},remove:function(selector){if(!selector||jQuery.filter(selector,[this]).r.length){jQuery("*",this).add(this).each(function(){jQuery.event.remove(this);jQuery.removeData(this);});if(this.parentNode)this.parentNode.removeChild(this);}},empty:function(){jQuery(">*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return i<m[3]-0;},gt:function(a,i,m){return i>m[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false;var re=quickChild;var m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j<rl;j++){var n=m=="~"||m=="+"?ret[j].nextSibling:ret[j].firstChild;for(;n;n=n.nextSibling)if(n.nodeType==1){var id=jQuery.data(n);if(m=="~"&&merge[id])break;if(!nodeName||n.nodeName.toUpperCase()==nodeName){if(m=="~")merge[id]=true;r.push(n);}if(m=="+")break;}}ret=r;t=jQuery.trim(t.replace(re,""));foundToken=true;}}if(t&&!foundToken){if(!t.indexOf(",")){if(context==ret[0])ret.shift();done=jQuery.merge(done,ret);r=ret=[context];t=" "+t.substr(1,t.length);}else{var re2=quickID;var m=re2.exec(t);if(m){m=[0,m[2],m[3],m[1]];}else{re2=quickClass;m=re2.exec(t);}m[2]=m[2].replace(/\\/g,"");var elem=ret[ret.length-1];if(m[1]=="#"&&elem&&elem.getElementById&&!jQuery.isXMLDoc(elem)){var oid=elem.getElementById(m[2]);if((jQuery.browser.msie||jQuery.browser.opera)&&oid&&typeof oid.id=="string"&&oid.id!=m[2])oid=jQuery('[@id="'+m[2]+'"]',elem)[0];ret=r=oid&&(!m[3]||jQuery.nodeName(oid,m[3]))?[oid]:[];}else{for(var i=0;ret[i];i++){var tag=m[1]=="#"&&m[3]?m[3]:m[1]!=""||m[0]==""?"*":m[2];if(tag=="*"&&ret[i].nodeName.toLowerCase()=="object")tag="param";r=jQuery.merge(r,ret[i].getElementsByTagName(tag));}if(m[1]==".")r=jQuery.classFilter(r,m[2]);if(m[1]=="#"){var tmp=[];for(var i=0;r[i];i++)if(r[i].getAttribute("id")==m[2]){tmp=[r[i]];break;}r=tmp;}ret=r;}t=t.replace(re2,"");}}if(t){var val=jQuery.filter(t,r);ret=r=val.r;t=jQuery.trim(val.t);}}if(t)ret=[];if(ret&&context==ret[0])ret.shift();done=jQuery.merge(done,ret);return done;},classFilter:function(r,m,not){m=" "+m+" ";var tmp=[];for(var i=0;r[i];i++){var pass=(" "+r[i].className+" ").indexOf(m)>=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i<rl;i++){var a=r[i],z=a[jQuery.props[m[2]]||m[2]];if(z==null||/href|src|selected/.test(m[2]))z=jQuery.attr(a,m[2])||'';if((type==""&&!!z||type=="="&&z==m[5]||type=="!="&&z!=m[5]||type=="^="&&z&&!z.indexOf(m[5])||type=="$="&&z.substr(z.length-m[5].length)==m[5]||(type=="*="||type=="~=")&&z.indexOf(m[5])>=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i<rl;i++){var node=r[i],parentNode=node.parentNode,id=jQuery.data(parentNode);if(!merge[id]){var c=1;for(var n=parentNode.firstChild;n;n=n.nextSibling)if(n.nodeType==1)n.nodeIndex=c++;merge[id]=true;}var add=false;if(first==0){if(node.nodeIndex==last)add=true;}else if((node.nodeIndex-last)%first==0&&(node.nodeIndex-last)/first>=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[];var cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&(!elem||n!=elem))r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval!=undefined)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=function(){return fn.apply(this,arguments);};handler.data=data;handler.guid=fn.guid;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){var val;if(typeof jQuery=="undefined"||jQuery.event.triggered)return val;val=jQuery.event.handle.apply(arguments.callee.elem,arguments);return val;});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else
for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data||[]);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event)data.unshift(this.fix({type:type,target:elem}));data[0].type=type;if(exclusive)data[0].exclusive=true;if(jQuery.isFunction(jQuery.data(elem,"handle")))val=jQuery.data(elem,"handle").apply(elem,data);if(!fn&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val;event=jQuery.event.fix(event||window.event||{});var parts=event.type.split(".");event.type=parts[0];var handlers=jQuery.data(this,"events")&&jQuery.data(this,"events")[event.type],args=Array.prototype.slice.call(arguments,1);args.unshift(event);for(var j in handlers){var handler=handlers[j];args[0].handler=handler;args[0].data=handler.data;if(!parts[1]&&!event.exclusive||handler.type==parts[1]){var ret=handler.apply(this,args);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}if(jQuery.browser.msie)event.target=event.preventDefault=event.stopPropagation=event.handler=event.data=null;return val;},fix:function(event){var originalEvent=event;event=jQuery.extend({},originalEvent);event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=originalEvent.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;arguments[0].type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;arguments[0].type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){return this.each(function(){jQuery.event.add(this,type,function(event){jQuery(this).unbind(event);return(fn||data).apply(this,arguments);},fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){if(this[0])return jQuery.event.trigger(type,data,this[0],false,fn);return undefined;},toggle:function(){var args=arguments;return this.click(function(event){this.lastToggle=0==this.lastToggle?1:0;event.preventDefault();return args[this.lastToggle].apply(this,arguments)||false;});},hover:function(fnOver,fnOut){return this.bind('mouseenter',fnOver).bind('mouseleave',fnOut);},ready:function(fn){bindReady();if(jQuery.isReady)fn.call(document,jQuery);else
jQuery.readyList.push(function(){return fn.call(this,jQuery);});return this;}});jQuery.extend({isReady:false,readyList:[],ready:function(){if(!jQuery.isReady){jQuery.isReady=true;if(jQuery.readyList){jQuery.each(jQuery.readyList,function(){this.apply(document);});jQuery.readyList=null;}jQuery(document).triggerHandler("ready");}}});var readyBound=false;function bindReady(){if(readyBound)return;readyBound=true;if(document.addEventListener&&!jQuery.browser.opera)document.addEventListener("DOMContentLoaded",jQuery.ready,false);if(jQuery.browser.msie&&window==top)(function(){if(jQuery.isReady)return;try{document.documentElement.doScroll("left");}catch(error){setTimeout(arguments.callee,0);return;}jQuery.ready();})();if(jQuery.browser.opera)document.addEventListener("DOMContentLoaded",function(){if(jQuery.isReady)return;for(var i=0;i<document.styleSheets.length;i++)if(document.styleSheets[i].disabled){setTimeout(arguments.callee,0);return;}jQuery.ready();},false);if(jQuery.browser.safari){var numStyles;(function(){if(jQuery.isReady)return;if(document.readyState!="loaded"&&document.readyState!="complete"){setTimeout(arguments.callee,0);return;}if(numStyles===undefined)numStyles=jQuery("style, link[rel=stylesheet]").length;if(document.styleSheets.length!=numStyles){setTimeout(arguments.callee,0);return;}jQuery.ready();})();}jQuery.event.add(window,"load",jQuery.ready);}jQuery.each(("blur,focus,load,resize,scroll,unload,click,dblclick,"+"mousedown,mouseup,mousemove,mouseover,mouseout,change,select,"+"submit,keydown,keypress,keyup,error").split(","),function(i,name){jQuery.fn[name]=function(fn){return fn?this.bind(name,fn):this.trigger(name);};});var withinElement=function(event,elem){var parent=event.relatedTarget;while(parent&&parent!=elem)try{parent=parent.parentNode;}catch(error){parent=elem;}return parent==elem;};jQuery(window).bind("unload",function(){jQuery("*").add(document).unbind();});jQuery.fn.extend({load:function(url,params,callback){if(jQuery.isFunction(url))return this.bind("load",url);var off=url.indexOf(" ");if(off>=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("<div/>").append(res.responseText.replace(/<script(.|\s)*?\/script>/g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=(new Date).getTime();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){var jsonp,jsre=/=\?(&|$)/g,status,data;s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(s.type.toLowerCase()=="get"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&s.type.toLowerCase()=="get"){var ts=(new Date()).getTime();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&s.type.toLowerCase()=="get"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");if((!s.url.indexOf("http")||!s.url.indexOf("//"))&&s.dataType=="script"&&s.type.toLowerCase()=="get"){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xml=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();xml.open(s.type,s.url,s.async,s.username,s.password);try{if(s.data)xml.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xml.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xml.setRequestHeader("X-Requested-With","XMLHttpRequest");xml.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend)s.beforeSend(xml);if(s.global)jQuery.event.trigger("ajaxSend",[xml,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xml&&(xml.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xml)&&"error"||s.ifModified&&jQuery.httpNotModified(xml,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xml,s.dataType);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xml.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else
jQuery.handleError(s,xml,status);complete();if(s.async)xml=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xml){xml.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xml.send(s.data);}catch(e){jQuery.handleError(s,xml,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xml,s]);}function complete(){if(s.complete)s.complete(xml,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xml,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xml;},handleError:function(s,xml,status,e){if(s.error)s.error(xml,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xml,s,e]);},active:0,httpSuccess:function(r){try{return!r.status&&location.protocol=="file:"||(r.status>=200&&r.status<300)||r.status==304||r.status==1223||jQuery.browser.safari&&r.status==undefined;}catch(e){}return false;},httpNotModified:function(xml,url){try{var xmlRes=xml.getResponseHeader("Last-Modified");return xml.status==304||xmlRes==jQuery.lastModified[url]||jQuery.browser.safari&&xml.status==undefined;}catch(e){}return false;},httpData:function(r,type){var ct=r.getResponseHeader("content-type");var xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0;var data=xml?r.responseXML:r.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else
for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else
s.push(encodeURIComponent(j)+"="+encodeURIComponent(a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle(fn,fn2):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall);var hidden=jQuery(this).is(":hidden"),self=this;for(var p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return jQuery.isFunction(opt.complete)&&opt.complete.apply(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else
e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.apply(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(!elem)return undefined;type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",array?jQuery.makeArray(array):[]);return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].apply(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:{slow:600,fast:200}[opt.duration])||400;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.apply(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.apply(this.elem,[this.now,this]);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=(new Date()).getTime();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;i<timers.length;i++)if(!timers[i]())timers.splice(i--,1);if(!timers.length){clearInterval(jQuery.timerId);jQuery.timerId=null;}},13);}},show:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.show=true;this.custom(0,this.cur());if(this.prop=="width"||this.prop=="height")this.elem.style[this.prop]="1px";jQuery(this.elem).show();},hide:function(){this.options.orig[this.prop]=jQuery.attr(this.elem.style,this.prop);this.options.hide=true;this.custom(this.cur(),0);},step:function(gotoEnd){var t=(new Date()).getTime();if(gotoEnd||t>this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done&&jQuery.isFunction(this.options.complete))this.options.complete.apply(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.fx.step={scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}};jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),fixed=jQuery.css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&jQuery.css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(jQuery.css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&jQuery.css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||jQuery.css(offsetChild,"position")=="absolute"))||(mozilla&&jQuery.css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l)||0;top+=parseInt(t)||0;}return results;};})();

/*
 * jQuery corner plugin
 *
 * version 1.91 (9/21/2007)
 *
 * Dual licensed under the MIT and GPL licenses:
 *   http://www.opensource.org/licenses/mit-license.php
 *   http://www.gnu.org/licenses/gpl.html
 */

/**
 * The corner() method provides a simple way of styling DOM elements.  
 *
 * corner() takes a single string argument:  $().corner("effect corners width")
 *
 *   effect:  The name of the effect to apply, such as round or bevel. 
 *            If you don't specify an effect, rounding is used.
 *
 *   corners: The corners can be one or more of top, bottom, tr, tl, br, or bl. 
 *            By default, all four corners are adorned. 
 *
 *   width:   The width specifies the width of the effect; in the case of rounded corners this 
 *            will be the radius of the width. 
 *            Specify this value using the px suffix such as 10px, and yes it must be pixels.
 *
 * For more details see: http://methvin.com/jquery/jq-corner.html
 * For a full demo see:  http://malsup.com/jquery/corner/
 *
 *
 * @example $('.adorn').corner();
 * @desc Create round, 10px corners 
 *
 * @example $('.adorn').corner("25px");
 * @desc Create round, 25px corners 
 *
 * @example $('.adorn').corner("notch bottom");
 * @desc Create notched, 10px corners on bottom only
 *
 * @example $('.adorn').corner("tr dog 25px");
 * @desc Create dogeared, 25px corner on the top-right corner only
 *
 * @example $('.adorn').corner("round 8px").parent().css('padding', '4px').corner("round 10px");
 * @desc Create a rounded border effect by styling both the element and its parent
 * 
 * @name corner
 * @type jQuery
 * @param String options Options which control the corner style
 * @cat Plugins/Corner
 * @return jQuery
 * @author Dave Methvin (dave.methvin@gmail.com)
 * @author Mike Alsup (malsup@gmail.com)
 */
(function($) { 

$.fn.corner = function(o) {
    function hex2(s) {
        var s = parseInt(s).toString(16);
        return ( s.length < 2 ) ? '0'+s : s;
    };
    function gpc(node) {
        for ( ; node && node.nodeName.toLowerCase() != 'html'; node = node.parentNode ) {
            var v = $.css(node,'backgroundColor');
            if ( v.indexOf('rgb') >= 0 ) { 
                if ($.browser.safari && v == 'rgba(0, 0, 0, 0)')
                    continue;
                var rgb = v.match(/\d+/g); 
                return '#'+ hex2(rgb[0]) + hex2(rgb[1]) + hex2(rgb[2]);
            }
            if ( v && v != 'transparent' )
                return v;
        }
        return '#ffffff';
    };
    function getW(i) {
        switch(fx) {
        case 'round':  return Math.round(width*(1-Math.cos(Math.asin(i/width))));
        case 'cool':   return Math.round(width*(1+Math.cos(Math.asin(i/width))));
        case 'sharp':  return Math.round(width*(1-Math.cos(Math.acos(i/width))));
        case 'bite':   return Math.round(width*(Math.cos(Math.asin((width-i-1)/width))));
        case 'slide':  return Math.round(width*(Math.atan2(i,width/i)));
        case 'jut':    return Math.round(width*(Math.atan2(width,(width-i-1))));
        case 'curl':   return Math.round(width*(Math.atan(i)));
        case 'tear':   return Math.round(width*(Math.cos(i)));
        case 'wicked': return Math.round(width*(Math.tan(i)));
        case 'long':   return Math.round(width*(Math.sqrt(i)));
        case 'sculpt': return Math.round(width*(Math.log((width-i-1),width)));
        case 'dog':    return (i&1) ? (i+1) : width;
        case 'dog2':   return (i&2) ? (i+1) : width;
        case 'dog3':   return (i&3) ? (i+1) : width;
        case 'fray':   return (i%2)*width;
        case 'notch':  return width; 
        case 'bevel':  return i+1;
        }
    };
    o = (o||"").toLowerCase();
    var keep = /keep/.test(o);                       // keep borders?
    var cc = ((o.match(/cc:(#[0-9a-f]+)/)||[])[1]);  // corner color
    var sc = ((o.match(/sc:(#[0-9a-f]+)/)||[])[1]);  // strip color
    var width = parseInt((o.match(/(\d+)px/)||[])[1]) || 10; // corner width
    var re = /round|bevel|notch|bite|cool|sharp|slide|jut|curl|tear|fray|wicked|sculpt|long|dog3|dog2|dog/;
    var fx = ((o.match(re)||['round'])[0]);
    var edges = { T:0, B:1 };
    var opts = {
        TL:  /top|tl/.test(o),       TR:  /top|tr/.test(o),
        BL:  /bottom|bl/.test(o),    BR:  /bottom|br/.test(o)
    };
    if ( !opts.TL && !opts.TR && !opts.BL && !opts.BR )
        opts = { TL:1, TR:1, BL:1, BR:1 };
    var strip = document.createElement('div');
    strip.style.overflow = 'hidden';
    strip.style.height = '1px';
    strip.style.backgroundColor = sc || 'transparent';
    strip.style.borderStyle = 'solid';
    return this.each(function(index){
        var pad = {
            T: parseInt($.css(this,'paddingTop'))||0,     R: parseInt($.css(this,'paddingRight'))||0,
            B: parseInt($.css(this,'paddingBottom'))||0,  L: parseInt($.css(this,'paddingLeft'))||0
        };

        if ($.browser.msie) this.style.zoom = 1; // force 'hasLayout' in IE
        if (!keep) this.style.border = 'none';
        strip.style.borderColor = cc || gpc(this.parentNode);
        var cssHeight = $.curCSS(this, 'height');

        for (var j in edges) {
            var bot = edges[j];
            // only add stips if needed
            if ((bot && (opts.BL || opts.BR)) || (!bot && (opts.TL || opts.TR))) {
                strip.style.borderStyle = 'none '+(opts[j+'R']?'solid':'none')+' none '+(opts[j+'L']?'solid':'none');
                var d = document.createElement('div');
                $(d).addClass('jquery-corner');
                var ds = d.style;

                bot ? this.appendChild(d) : this.insertBefore(d, this.firstChild);

                if (bot && cssHeight != 'auto') {
                    if ($.css(this,'position') == 'static')
                        this.style.position = 'relative';
                    ds.position = 'absolute';
                    ds.bottom = ds.left = ds.padding = ds.margin = '0';
                    if ($.browser.msie && $.browser.version < 8)
                        ds.setExpression('width', 'this.parentNode.offsetWidth');
                    else
                        ds.width = '100%';
                }
                else {
                    ds.margin = !bot ? '-'+pad.T+'px -'+pad.R+'px '+(pad.T-width)+'px -'+pad.L+'px' : 
                                        (pad.B-width)+'px -'+pad.R+'px -'+pad.B+'px -'+pad.L+'px';                
                }

                for (var i=0; i < width; i++) {
                    var w = Math.max(0,getW(i));
                    var e = strip.cloneNode(false);
                    e.style.borderWidth = '0 '+(opts[j+'R']?w:0)+'px 0 '+(opts[j+'L']?w:0)+'px';
                    bot ? d.appendChild(e) : d.insertBefore(e, d.firstChild);
                }
            }
        }
    });
};

$.fn.uncorner = function(o) { return $('.jquery-corner', this).remove(); };
    
})(jQuery);

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;
    }
};

/* Copyright (c) 2006 Brandon Aaron (http://brandonaaron.net)
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) 
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * $LastChangedDate: 2007-07-21 18:44:59 -0500 (Sat, 21 Jul 2007) $
 * $Rev: 2446 $
 *
 * Version 2.1.1
 */

(function($){

/**
 * The bgiframe is chainable and applies the iframe hack to get 
 * around zIndex issues in IE6. It will only apply itself in IE6 
 * and adds a class to the iframe called 'bgiframe'. The iframe
 * is appeneded as the first child of the matched element(s) 
 * with a tabIndex and zIndex of -1.
 * 
 * By default the plugin will take borders, sized with pixel units,
 * into account. If a different unit is used for the border's width,
 * then you will need to use the top and left settings as explained below.
 *
 * NOTICE: This plugin has been reported to cause perfromance problems
 * when used on elements that change properties (like width, height and
 * opacity) a lot in IE6. Most of these problems have been caused by 
 * the expressions used to calculate the elements width, height and 
 * borders. Some have reported it is due to the opacity filter. All 
 * these settings can be changed if needed as explained below.
 *
 * @example $('div').bgiframe();
 * @before <div><p>Paragraph</p></div>
 * @result <div><iframe class="bgiframe".../><p>Paragraph</p></div>
 *
 * @param Map settings Optional settings to configure the iframe.
 * @option String|Number top The iframe must be offset to the top
 * 		by the width of the top border. This should be a negative 
 *      number representing the border-top-width. If a number is 
 * 		is used here, pixels will be assumed. Otherwise, be sure
 *		to specify a unit. An expression could also be used. 
 * 		By default the value is "auto" which will use an expression 
 * 		to get the border-top-width if it is in pixels.
 * @option String|Number left The iframe must be offset to the left
 * 		by the width of the left border. This should be a negative 
 *      number representing the border-left-width. If a number is 
 * 		is used here, pixels will be assumed. Otherwise, be sure
 *		to specify a unit. An expression could also be used. 
 * 		By default the value is "auto" which will use an expression 
 * 		to get the border-left-width if it is in pixels.
 * @option String|Number width This is the width of the iframe. If
 *		a number is used here, pixels will be assume. Otherwise, be sure
 * 		to specify a unit. An experssion could also be used.
 *		By default the value is "auto" which will use an experssion
 * 		to get the offsetWidth.
 * @option String|Number height This is the height of the iframe. If
 *		a number is used here, pixels will be assume. Otherwise, be sure
 * 		to specify a unit. An experssion could also be used.
 *		By default the value is "auto" which will use an experssion
 * 		to get the offsetHeight.
 * @option Boolean opacity This is a boolean representing whether or not
 * 		to use opacity. If set to true, the opacity of 0 is applied. If
 *		set to false, the opacity filter is not applied. Default: true.
 * @option String src This setting is provided so that one could change 
 *		the src of the iframe to whatever they need.
 *		Default: "javascript:false;"
 *
 * @name bgiframe
 * @type jQuery
 * @cat Plugins/bgiframe
 * @author Brandon Aaron (brandon.aaron@gmail.com || http://brandonaaron.net)
 */
$.fn.bgIframe = $.fn.bgiframe = function(s) {
	// This is only for IE6
	if ( $.browser.msie && /6.0/.test(navigator.userAgent) ) {
		s = $.extend({
			top     : 'auto', // auto == .currentStyle.borderTopWidth
			left    : 'auto', // auto == .currentStyle.borderLeftWidth
			width   : 'auto', // auto == offsetWidth
			height  : 'auto', // auto == offsetHeight
			opacity : true,
			src     : 'javascript:false;'
		}, s || {});
		var prop = function(n){return n&&n.constructor==Number?n+'px':n;},
		    html = '<iframe class="bgiframe"frameborder="0"tabindex="-1"src="'+s.src+'"'+
		               'style="display:block;position:absolute;z-index:-1;'+
			               (s.opacity !== false?'filter:Alpha(Opacity=\'0\');':'')+
					       'top:'+(s.top=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderTopWidth)||0)*-1)+\'px\')':prop(s.top))+';'+
					       'left:'+(s.left=='auto'?'expression(((parseInt(this.parentNode.currentStyle.borderLeftWidth)||0)*-1)+\'px\')':prop(s.left))+';'+
					       'width:'+(s.width=='auto'?'expression(this.parentNode.offsetWidth+\'px\')':prop(s.width))+';'+
					       'height:'+(s.height=='auto'?'expression(this.parentNode.offsetHeight+\'px\')':prop(s.height))+';'+
					'"/>';
		return this.each(function() {
			if ( $('> iframe.bgiframe', this).length == 0 )
				this.insertBefore( document.createElement(html), this.firstChild );
		});
	}
	return this;
};

})(jQuery);

jQuery.fn.kcalendar = function(field_id, opts)
{
	opts = jQuery.extend({
		'callback': function(date) {},
		'date_format':'ymd',
		'date_separator':'-',
		'first_day_of_week' : 0,
		'max_months' :  '',
		'type' : 'flight'
	}, opts);

	return this.each(function()
	{
		var field_shadow;
		var field_input = $('#' + field_id);
		var field_trigger = $(this);
		var tod = new Date(), max_date;
		var sel, el;
		var visible = false;
		var enabled = true;

		var months = ['Januar', 'Februar', 'März', 'April', 'Mai', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'];
		var days_week = ['So', 'Mo', 'Di', 'Mi', 'Do', 'Fr', 'Sa'];

		// transform week days table thus it starts from given day
		days_week = days_week.slice(opts.first_day_of_week, days_week.length).concat(days_week.slice(0, opts.first_day_of_week));

		var max_months = parseInt(opts.max_months);

		// compute max date
		if(opts.max_months != ''){
			var years_to_add = (max_months % 12);
			var month_to_add = max_months - years_to_add * 12;
			if(tod.getMonth() + month_to_add > 11){
				years_to_add++;
				month_to_add = tod.getMonth() + month_to_add - 12;
			}
			years_to_add += tod.getFullYear();
			max_date = new Date(years_to_add, month_to_add, 1);
		}
		else
			max_date = null;

		this.get_input = function(){
			return $(field_input);
		}

		this.set_today = function(date){
			tod = date;
		}

		this.set_date = function(date){
			sel = date;
			field_input.val(format_date(sel.getFullYear(), sel.getMonth()+1 < 10 ? '0' + (sel.getMonth()+1) : (sel.getMonth()+1), sel.getDate()<10?'0'+sel.getDate():sel.getDate()));
		}

		this.get_valid_date = function(){
			var value = $.trim($(field_input).val());
			var patt = new RegExp('^'+opts.date_format.split('').join('\\'+opts.date_separator).replace('y', '[0-9]{4}').replace('m', '[0-9]{2}').replace('d', '[0-9]{2}')+'$');

			if(patt.test(value)) {
				var arr_date = field_input.val().split(opts.date_separator);
				var error = false;

				if(arr_date[opts.date_format.indexOf('m')]-1 < 0 || arr_date[opts.date_format.indexOf('m')]-1 > 12)
					error = true;
				else
					if(arr_date[opts.date_format.indexOf('d')]-1 < 0 || arr_date[opts.date_format.indexOf('d')]-1 > 31)
						error = true;

				if(!error){
					sel = new Date(arr_date[opts.date_format.indexOf('y')], arr_date[opts.date_format.indexOf('m')]-1, arr_date[opts.date_format.indexOf('d')], 23, 59, 59);
					if(sel.getTime() < tod.getTime()){
						error = true;
						//sel = tod;
					}
				}
//   				else
//  					if(!sel)
//  						sel = new Date();
			}
			else
				error = true;

			if(!error)
				field_trigger[0].set_date(sel);

			if(!sel)
				sel = new Date();

			return sel;
		}

		this.get_date = function(){
			return sel;
		}

		this.get_date_interval = function(interval){ // interval might be positive or negative int number
			var tmp = new Date(sel.getTime() + interval);
			return format_date(tmp.getFullYear(), tmp.getMonth()+1 < 10 ? '0' + (tmp.getMonth()+1) : (tmp.getMonth()+1), tmp.getDate()<10?'0'+tmp.getDate():tmp.getDate());
		}

		this.change_state = function(state)
		{
			enabled = state;
		}

		function click_event() // click event handler function
		{
			if(!enabled)
				return;

			if(!visible){
				sel = field_trigger[0].get_valid_date();
				show_calendar(make_calendar(sel), true);
			}
		}

		function make_calendar(date) // create calendar
		{
			var f = new Date(date.getFullYear(), date.getMonth(), 1);
			var s = new Date(f.getMonth()==11?f.getFullYear()+1:f.getFullYear(), f.getMonth()==11?0:f.getMonth()+1, 1);

			el = Array();
			el.push('<div id="cal_');
			el.push(field_id);
			el.push('" class="kcalendar"><table id="cal_t_');
			el.push(field_id);
			el.push('" cellspacing="0" cellpadding="0"><tbody><td>');
			make_month(f, 0);
			el.push('</td><td><td>');
			make_month(s, 1);
			el.push('</td></tbody></table></div>');

			var t_content = $(el.join(''));

			t_content.bgiframe();	// guess what needs that

			t_content.children().click(function(e){

					fid = $(e.target).attr('id');
					if(fid!= undefined && fid!= '')
					{
						var index = fid.indexOf('cal_');
						if(index > -1 && fid.length > 4){
							var op_type = fid.substr(4, 1);

							if(op_type == 'n' || op_type == 'p') // next || prev
							{
								clear_calendar();
								show_calendar(make_calendar(new Date(fid.substr(6, 4), fid.substr(10,2), 1)), false);
								field_input.focus();
								return;
							}
							else if(op_type == 'v'){ // value
								var sel_date = format_date(fid.substr(6, 4), fid.substr(10, 2), fid.substr(12, 24));
								field_input.val(sel_date);
								clear_calendar(true);
								field_input.trigger('change'); // for calendar manager
								opts.callback(sel_date);
								return;
							}
							else if(op_type == 'd' || op_type == 't'){ // disabled field || table txt field
								field_input.focus();
								return;
							}
						}
					}

				});
				return t_content;
		}

		function make_month(date, poss) // create month view
		{
			var start_day = date.getDay(); // get day of the week

			var ldipm = new Date(date.getFullYear(), date.getMonth(), 0);  // get last day in previous month
			var last_day_in_previous_month = ldipm.getDate() - (start_day == 0 ?  7 : start_day) + 1 + parseInt(opts.first_day_of_week);

			var ldim = new Date(date.getFullYear(), date.getMonth()+1, 0); // get last day in this month
			var last_day_in_month = ldim.getDate() + 1;

			var day_of_month = 1;
			var day_of_week = parseInt(opts.first_day_of_week);
			var fshow = false, finish = false;
			var class_name, elem_a;
			var selected_day, this_day;

			if(sel.getMonth() == date.getMonth() && sel.getYear() == date.getYear()) selected_day = sel.getDate();
			else selected_day = 0;

			if(tod.getMonth() == date.getMonth() && tod.getYear() == date.getYear()) this_day = tod.getDate();
			else this_day = 0;

			if(poss==0)
				el.push('<table style="border-right:1px solid #888888" id="cal_t_p" class="kcal_table"><tr>');
			else
				el.push('<table id="cal_t_p" class="kcal_table"><tr>');

			if(poss==0) // this is for left month
			{
				if(tod.getMonth() == date.getMonth() && tod.getYear() == date.getYear()){
					el.push('<td class="kcal_button_disabled" id="cal_d">&lt;&lt;');
				}
				else{
					el.push('<td class="kcal_button" onmouseout="this.className=\'kcal_button\'" onmouseover="this.className=\'kcal_button_hover_'+opts.type+'\'" id="cal_p_');
					el.push(date.getMonth()==0?date.getFullYear()-1:date.getFullYear());
					el.push(month = date.getMonth()==0?11:date.getMonth()-1);
					el.push('">&lt;&lt;');
				}
			}
			else
				el.push('<td id="cal_d">');

			el.push('</td><td id="cal_d" colspan="5">');
			el.push(months[date.getMonth()]);
			el.push(' ')
			el.push(date.getFullYear())
			el.push('</td>');

			if(poss==1) // for right month
			{
				if(max_date && max_date.getTime() <= date.getTime()){
					el.push('<td class="kcal_button_disabled" id="cal_d">&gt;&gt;');
				}
				else{
					el.push('<td onmouseout="this.className=\'kcal_button\'" onmouseover="this.className=\'kcal_button_hover_'+opts.type+'\'" id="cal_n_');
					el.push(date.getFullYear());
					el.push(date.getMonth());
					el.push('" class="kcal_button">&gt;&gt;');
				}
			}
			else
				el.push('<td id="cal_d">');

			el.push('</td></tr><tr><th id="cal_d" class="kcal_day_names css_pattern_1_'+opts.type+'">');

			el.push( days_week.join('</th><th id="cal_d" class="kcal_day_names css_pattern_1_'+opts.type+'">'));
			el.push('</th></tr><tr>');

			for(var i=0; i<42; i++) // create days
			{
				if(i%7==0 && i!=0) { // first day of a week
					el.push('</tr><tr>');
					day_of_week = parseInt(opts.first_day_of_week);
				}

				if(day_of_week == start_day) fshow = true; // we can start printing days for this month
				if(last_day_in_month == day_of_month) {	// all days for this month have been printed
					day_of_month = 1; // set day of the month for next month
					fshow = false;
					finish = true;
				}

				if(this_day && day_of_month < this_day) class_name = 'kcal_disabled';
				else if(this_day == day_of_month && fshow) class_name = 'kcal_today_' + opts.type;
				else {
					if(day_of_week == 0 ||day_of_week == 6   )
						class_name = 'css_pattern_2_'+opts.type+' kcal_weekend_day';
					else
						class_name = 'kcal_day';
						
				}

				if(selected_day == day_of_month) class_name = 'kcal_selected css_pattern_1_'+opts.type;

				if(++day_of_week == 7) day_of_week = 0;

				if(fshow && !finish)
					make_td(date.getFullYear(), date.getMonth()+1, day_of_month++, class_name, this_day < day_of_month);
				else
					if(finish) make_td(0, 0, day_of_month++, 'kcal_disabled', false);
					else make_td(0, 0, last_day_in_previous_month++, 'kcal_disabled', false);
			}

			el.push('</tr></table>');
		}

		function make_td(year, month, day, class_name, active){
			el.push('<td class="');
			el.push(class_name);
			if(!active)
				el.push('" id="cal_d">');
			else{
				el.push('" id="cal_v_');
				el.push(year);
 				el.push(parseInt(month)<10?'0'+month:month);
 				el.push(parseInt(day)<10?'0'+day:day);
				el.push('" onmouseover="this.className=\'');
				el.push(class_name);
				el.push('_hover css_pattern_1_'+opts.type);
				el.push('\';" onmouseout="this.className=\'');
				el.push(class_name);
				el.push('\';">');
			}
			el.push(day);
			el.push('</td>');
		}

		function format_date(year, month, day){ // format date
			return opts.date_format.split('').join(opts.date_separator).replace('y', year).replace('m', month).replace('d', day);
		}

		function clear_calendar(hide_shadow){
			if(hide_shadow){
				field_shadow.remove();
				field_shadow = false;
			}

			$('#cal_' + field_id).remove();
			visible = false;

		}

		function show_calendar(elem, repaint_shadow)
		{
			if(!visible){
				visible = true;
				field_input.focus(); // set focus to input field
				var offset = field_input.offset();
				$(elem).css({
							left: offset.left + 'px',
							top: (offset.top + field_input.height()) + 3 +  'px'
							});

				field_input.after(elem);

				if(!field_shadow) // if there is no shadow than create it
				{
					field_shadow = $('<div id="cal_shadow_'+field_id+'" class="kcal_shadow"></div>').height(elem.height()).width(elem.width()).css("left", elem.offset().left + 7).css("top", elem.offset().top + 7);
					$('body').append(field_shadow);
				}
				else
					if(repaint_shadow)
						field_shadow.show();
			}
		}

		$(this).bind('click', click_event); // bind click event handler to trigger field
		field_input.bind('click', click_event);  // bind click event handler to input field as well

		 // only possible way I have found to hide calendar
		 // when clicked outside clalendar box
		$(document).mousedown(function(e){
			if(visible){
				var target = $(e.target);
				if( (target.parents("#cal_" + field_id).length == 0) && target.attr('id') != "img_" + field_id){
					clear_calendar(true);
				}
			}
		});

	});
};

(function($) {
$.kinput_example = function (opts)
{
	if (opts && opts.constructor == String)
	{
		var func = {'hide': 'hide_example', 'show': 'show_example'}[opts];
		$('input').each(function()
		{
			if (typeof this.hide_example == 'function')	// seems this is not really needed, you can call non-existing function and nothing happens
				this[func]();
		});
		return this;
	}

	$.each(opts, function(inp, str)
	{
		var $input = $('#'+inp);
		if (!$input[0])
			return;
			
		var orig_col = $input.css('color');
		
		$input[0].hide_example = function()
		{
			str = $input.val();
			if ($input.attr('mfrom_ac') == '1')
				$input.val('').css('color', orig_col);
		};
		
		$input[0].show_example = function()
		{
			if (!$input.val())
				$input.css('color', '#000000').val(str);
		};
		
		$input[0].show_example();
			
		$input
		.bind('focus', function()
		{
			this.hide_example();
		})
		.bind('blur', function()
		{
			this.show_example();
		});
	});
};
})(jQuery);

jQuery.fn.kcalmanager = function(slave_id, opts)
{
	opts = jQuery.extend({
		'diff' : 0, // defines the default defference between dates
		'min_diff' : 0 // defines min defference between dates
	}, opts);

	return this.each(function()
	{
		var trig_mas = $(this);
		var inp_mas = trig_mas[0].get_input();

		var trig_sla = $(slave_id);
		if(!trig_sla[0] || trig_sla[0] == 'undefined')
			return;

		var inp_sla = trig_sla[0].get_input();

		function check_dates()
		{
			var m_date = trig_mas[0].get_valid_date();
			var s_date = trig_sla[0].get_valid_date();

			//trig_sla[0].set_today(m_date); // set min date
			trig_sla[0].set_today(new Date(m_date.getTime() + 86400000 * parseInt(opts.min_diff))); // set min date

			if((m_date.getTime() > s_date.getTime()) || 
				(m_date.getTime() == s_date.getTime() && parseInt(opts.min_diff) > 0) ) // set date
			{
				trig_sla[0].set_date(new Date(m_date.getTime() + 86400000 * parseInt(opts.diff)));
				$(inp_sla).trigger('change');
			}
		};

		$(inp_mas).change(check_dates);
		$(inp_sla).change(check_dates);

		// init dates

		if(opts.init_date)
		{
			if(!inp_mas[0].value)
				trig_mas[0].set_date(opts.init_date);

			if(!inp_sla[0].value)
				trig_sla[0].set_date(new Date(opts.init_date.getTime() + 86400000 * parseInt(opts.diff)));

			$(inp_mas).trigger('change');
		}

	});
};

// like jQuery's next(), but looping around
jQuery.fn.next_loop = function()
{
	var n = this.next();
	return n.length ? n : this.parent().children(':first');
};

// like jQuery's prev(), but looping around
jQuery.fn.prev_loop = function()
{
	var n = this.prev();
	return n.length ? n : this.parent().children(':last');
};

jQuery.fn.kautocompletion = function(opts)
{
	opts = jQuery.extend({
		min_length: 3,
		timeout: 300,
		selected_class: 'ac_selected',
		loading_class: 'ac_loading',
		error_report: false,
		error_report_type: 1,
		after_insert: function(){}
	}, opts);
	
	return this.each(function()
	{
		var timeout, key_repeat_int, key_repeat_out;
		var elem;
		var field = this;
		var last_value = this.value;
		var request;
		var this_id;
		
		$(this).attr("autocomplete", "off");
		this_id = $(this).attr('id');
		this.from_ac = true;	// assume it has good content, since after load it comes from kexample, or old search
		this.ac_field = true;	// mark this field as autocompletion_field
	
		function make_elem_error(search)
		{
			var tmp = '<div class="autocompletion"><ul>';
			tmp += '<li id="">' + 'Leider nichts gefunden! Bitte klicken Sie um Ihre Destination hinzuzufügen' + '</li>';
			tmp += '</ul></div>';

			var el = $(tmp);
			
			el.bgiframe();	// fix bonehead idiots from MS
			
			$(el).find('li').css('cursor', 'pointer')
				.bind('mouseover', function()
				{
					select_suggestion(this);
				})
				.bind('click', function()
				{
					if(opts.error_report_type == 1)
					{
						send_ac_error(search);
						if(kinkaa.webint.lang == 'de' || kinkaa.webint.lang == 'en')
							alert('Wir haben eine Email mit Ihren Daten an das kinkaa Team gesandt. Bitte schauen Sie doch in einigen Tagen wieder bei kinkaa vorbei - Ihre Destination ist dann evtl. schon verfuegbar.');
					}
					else
					{
						finish();
						kinkaa.webint.map_hotel_geo = 0;
						kinkaa.func.show_interactive_help_gmap('show_help_gmap', this_id);
					}
				})
				.filter(':first').addClass(opts.selected_class);
			
			return el;

		}

		// create html out of requested data
		function make_element(data, search)
		{
			// remove regexp chars from string so that it can create working regex
			search = search.replace(/[\\\*\.\?\^\$\(\)\[\]]/g, '');

// 			data.replace(new RegExp(search, 'ig'), function(m) { return '<b>'+m+'</b>'});
			
			var tmp = '<div class="autocompletion"><ul>';
			for(var i in data)
			{
				if(data[i][1])
					tmp += '<li id="'+this_id+data[i][0]+'">'+(data[i][1].replace(new RegExp(search, 'ig'), function(m) { return '<b>'+m+'</b>'}))+(data[i][2]!=null?'<br/><b class="ac"> '+'durchschn. Anzahl Resultate'+' '+data[i][2]+'</b>':'')+'</li>';
			}

			if(kinkaa.webint.domain_version == 1)
				tmp += '<li id="">' + 'Bitte klicken Sie um Ihre Destination hinzuzufügen' + '</li>';

			tmp += '</ul></div>';

			var el = $(tmp);
			
			el.bgiframe();	// fix bonehead idiots from MS

			if(kinkaa.webint.domain_version == 1)
				var tmp = $(el).find('li').length - 1;
			else
				var tmp = $(el).find('li').length;

			$(el).find('li:lt('+tmp+')').css('cursor', 'pointer')
				.bind('mouseover', function()
				{
					select_suggestion(this);
				})
				.bind('click', function()
				{
					choose_current();
				})
				.filter(':first').addClass(opts.selected_class);

			if(kinkaa.webint.domain_version == 1)
			{
				$(el).find('li:last').css('cursor', 'pointer')
					.bind('mouseover', function()
					{
						select_suggestion(this);
					})
					.bind('click', function()
					{
						if(opts.error_report_type == 1)
						{
							send_ac_error(search);
							if(kinkaa.webint.lang == 'de' || kinkaa.webint.lang == 'en')
								alert('Wir haben eine Email mit Ihren Daten an das kinkaa Team gesandt. Bitte schauen Sie doch in einigen Tagen wieder bei kinkaa vorbei - Ihre Destination ist dann evtl. schon verfuegbar.');
						}
						else
						{
							finish();
							kinkaa.webint.map_hotel_geo = 0;
							kinkaa.func.show_interactive_help_gmap('show_help_gmap', this_id);
						}
					}).addClass('ac_new');
			}
			
			return el;
		}
		
		$(this).bind('keydown', function(e)
		{
			switch(e.keyCode)
			{
				case 38:	// arrow up
				case 40:	// arrow down
					var dir = {'38':'prev_loop', '40':'next_loop'}[e.keyCode];
					select(dir);
					key_repeat_out = setTimeout(function()	// so that it starts traversing with a lag
						{
							key_repeat_int = setInterval(function(){
								select(dir);
							}, 50);
						}, 500);
				break;
				case 9:		// tab
					choose_current();
					break;
				case 13:	// enter
					choose_current();
					return false; // that prevents form automatic submit
				break;
				// force autocompletion
/*				case 27:	// Esc
					finish();
				break;*/
			}
		})
		.bind('keyup', function(e)
		{
			clearTimeout(timeout);
			clearTimeout(key_repeat_int);
			clearTimeout(key_repeat_out);

			$(field).attr('mfrom_ac', '0');
			
			// ignore enter and tab always, so that it
			// doesn't request again just after selecting sth
			if ({13:1,9:1}[e.keyCode])
				return;

 			// ignore if value didn't change (prevents clicks
			// on Esc, Enter and whatever, to open autocompletion)
			if (this.value == last_value
				&& !({38:1,40:1}[e.keyCode] && !elem) )	// but still open autocompletion on up/down if it's not open yet
				return;
			
			this.from_ac = false;	// at this point we know the value changed

			$('#dates_not_known').attr('checked', false).attr('disabled', 'disabled');

			if (this.value.length > opts.min_length-1)
			{
				var inp = this;	 // store for closure
				timeout = setTimeout(function()
				{
					$(inp)[0].kautocomplete();
					last_value = inp.value;
				}, opts.timeout);
			}

			if(!this.value.length)
				finish();


		});

		function choose_current()
		{
			if (elem)
			{
				var tmp = $(elem).find('.'+opts.selected_class);
				field.value = tmp.text().strip_tags();
			
				var tmp1 = field.value.lastIndexOf('durchschn. Anzahl Resultate');

				if(tmp1 > -1)
					field.value = $.trim(field.value.substr(0, tmp1));

				$(field).attr('city_id', tmp.attr('id').replace(this_id, ''));
				$(field).attr('mfrom_ac', '1');

				finish();
				last_value = field.value;
				opts.after_insert(field);	// run callback
				$(field).trigger('change');
				field.from_ac = true;	// flag for force autocompletion
			}
		}

		function send_ac_error(search)
		{
			finish();

			$.ajax({type: "GET",
				url: kinkaa.webint.base_path+'report_ac_issue.php',
				data: {
					domain : kinkaa.webint.domain,
					lang : kinkaa.webint.lang,
					type : kinkaa.search.type,
					q : search,
					url: opts.url
				}
			});
		}
		
		// generic function to iterate over selections
		// pass jquery's DOM traversing function as param
		function select(func)
		{
			$(elem).children('ul').children('li.'+opts.selected_class).
				removeClass(opts.selected_class)[func]().addClass(opts.selected_class);
		}
		
		// select by known element
		function select_suggestion(el)
		{
			$(elem).children('ul').children('li').
				removeClass(opts.selected_class);
			$(el).addClass(opts.selected_class);
		}
		
		function finish()
		{
			if (request)
				request.abort();
			if (elem)
				$(elem).remove();
			elem = null;
		}
		
		this.kautocomplete = function(select_first, success_callback)
		{

			/**DEVEL**/

				if(kinkaa.webint.devel == 1 && !$('#devel_autocompletion').attr('checked'))
					return;

			/**END_DEVEL**/

			var search_term = $(this).val();

			var ac = $('.ac_field');
			var ni = ac.length;
			var ac_dir, other_city_id;

			for(var ii=0; ii<ni; ii++)
			{
				if($(ac[ii]).attr('id') == $(this).attr('id'))
				{
					if(!ii)
						ac_dir = 'from';
					else
						ac_dir = 'to';
				}
				else
					other_city_id = $(ac[ii]).attr('city_id');
			}

			if(other_city_id == undefined)
				other_city_id = '';

			// get data
			$(field).addClass(opts.loading_class);
			request = $.ajax({type: "GET",
				url: opts.url,
				data: {'ac_dir':ac_dir, 'other_city_id':other_city_id, domain:kinkaa.webint.domain, lang: kinkaa.webint.lang, q: search_term, 'kinkaa_page':'index', type:('deal' != kinkaa.search.type ? kinkaa.search.type : $('.teaser_input:visible').attr('id').replace('teaser_', ''))},
				dataType: "json",
				abortClass: 'autocomplete'+$(field).attr('id'),
				error: function(){
					if(search_term.length >= 3)
					{
						if (elem)
							finish();

						if(opts.error_report)
						{
							elem = make_elem_error(search_term);
							if(!$.browser.msie)
								$(elem).css('left', $(field).offset().left);
							else
							{
								// for IE we need to position top & width as well
								var offset = $(field).offset();
	
								$(elem).css({
									left: offset.left + 'px', 
									top: (offset.top + $(field).height()) + 3 +  'px'
									});
									//.css('width', $(field).width());
							}
							$(field).after(elem);
						}
					}
				},
				complete:function()
				{
					$(field).removeClass(opts.loading_class);
				},
				success: function(data)
					{
// 						$(field).removeClass(opts.loading_class);
						if (elem)
							finish();
						
						if (!data)
						{
							if(success_callback != undefined)
                                                                 success_callback(field, 1);
							return;
						}

						if(data.length == 1 || select_first == true)
						{
							if(data.length)
							{
								last_value = data[0][1];
								$(field).val(data[0][1]);
								$(field).attr('city_id', data[0][0]);
								$(field).attr('mfrom_ac', '1');
								opts.after_insert(field);	// run callback
								field.from_ac = true;
							}

							if(success_callback != undefined)
							{
								field.from_ac = true;
								success_callback(field, 0);
							}
								
							return;
						}
						else
							elem = make_element(data, search_term);
						// position it on the left border of input field
 						
						if(!$.browser.msie)
							$(elem).css('left', $(field).offset().left);
						else
						{
							// for IE we need to position top & width as well
							var offset = $(field).offset();

							$(elem).css({
								left: offset.left + 'px', 
								top: (offset.top + $(field).height()) + 3 +  'px'
								});
								//.css('width', $(field).width());
						}
						$(field).after(elem);
					}
			});
		}
	});
};

// extend jQuery's ajax object to support aborting
// requests of same class (named by user), so that
// sending multiple ones doesn't produce weird results
// * adapted from jQuery AjaxQueue
// usage:
// 	$.ajax({
// 		type: "GET",
// 		url: "delay.php",
// 		dataType: "text",
// 		abortClass: "results",
// 		success: function() {}
// 	});

(function($)
{
	var ajax = $.ajax;	// store jQuery's original object
	var pending = {};
	
	$.ajax = function(opts)
	{
		// create settings for compatibility with ajaxSetup
		opts = jQuery.extend(opts, jQuery.extend({}, jQuery.ajaxSettings, opts));
		
		var name = opts.abortClass;
	
		if (name && pending[name])
			pending[name].abort();
		return pending[name || 'foobar'] = ajax.apply(this, arguments);
	}
}
)(jQuery);

Array.prototype.removeDuplicates = function () { for (var i = 1; i < this.length; i++) { if (this[i][0] == this[i-1][0]) { this.splice(i,1); } } }
Array.prototype.empty = function () { for (var i = 0; i <= this.length; i++) { this.shift(); } }
String.prototype.trim = function () { return this.replace(/^\s+|\s+$/g, ''); }

function LyteBox() {
		this.theme			= 'grey';
		this.hideFlash			= true;
		this.outerBorder		= true;
		this.resizeSpeed		= 8;
		this.maxOpacity			= 80;
		this.navType			= 1;
		this.autoResize			= true;
		this.doAnimations		= true;
		
		this.borderSize			= 12;

		this.slideInterval		= 4000;
		this.showNavigation		= true;
		this.showClose			= true;
		this.showDetails		= true;
		this.showPlayPause		= true;
		this.autoEnd			= true;
		this.pauseOnNextClick	= false;
        this.pauseOnPrevClick 	= true;
	
	if(this.resizeSpeed > 10) { this.resizeSpeed = 10; }
	if(this.resizeSpeed < 1) { resizeSpeed = 1; }
	this.resizeDuration = (11 - this.resizeSpeed) * 0.15;
	this.resizeWTimerArray		= new Array();
	this.resizeWTimerCount		= 0;
	this.resizeHTimerArray		= new Array();
	this.resizeHTimerCount		= 0;
	this.showContentTimerArray	= new Array();
	this.showContentTimerCount	= 0;
	this.overlayTimerArray		= new Array();
	this.overlayTimerCount		= 0;
	this.imageTimerArray		= new Array();
	this.imageTimerCount		= 0;
	this.timerIDArray			= new Array();
	this.timerIDCount			= 0;
	this.slideshowIDArray		= new Array();
	this.slideshowIDCount		= 0;
	this.imageArray	 = new Array();
	this.activeImage = null;
	this.slideArray	 = new Array();
	this.activeSlide = null;
	this.frameArray	 = new Array();
	this.activeFrame = null;
	this.checkFrame();
	this.isSlideshow = false;
	this.isLyteframe = false;
	/*@cc_on
		/*@if (@_jscript)
			this.ie = (document.all && !window.opera) ? true : false;
		/*@else @*/
			this.ie = false;
		/*@end
	@*/
	this.ie7 = (this.ie && window.XMLHttpRequest);	
	this.initialize();
}
LyteBox.prototype.initialize = function() {
	this.updateLyteboxItems();
	var objBody = this.doc.getElementsByTagName("body").item(0);	
	if (this.doc.getElementById('lbOverlay')) {
		objBody.removeChild(this.doc.getElementById("lbOverlay"));
		objBody.removeChild(this.doc.getElementById("lbMain"));
	}
	var objOverlay = this.doc.createElement("div");
		objOverlay.setAttribute('id','lbOverlay');
		objOverlay.setAttribute((this.ie ? 'className' : 'class'), this.theme);
		if ((this.ie && !this.ie7) || (this.ie7 && this.doc.compatMode == 'BackCompat')) {
			objOverlay.style.position = 'absolute';
		}
		objOverlay.style.display = 'none';
		objBody.appendChild(objOverlay);
	var objLytebox = this.doc.createElement("div");
		objLytebox.setAttribute('id','lbMain');
		objLytebox.style.display = 'none';
		objBody.appendChild(objLytebox);
	var objOuterContainer = this.doc.createElement("div");
		objOuterContainer.setAttribute('id','lbOuterContainer');
		objOuterContainer.setAttribute((this.ie ? 'className' : 'class'), this.theme);
		objLytebox.appendChild(objOuterContainer);
	var objIframeContainer = this.doc.createElement("div");
		objIframeContainer.setAttribute('id','lbIframeContainer');
		objIframeContainer.style.display = 'none';
		objOuterContainer.appendChild(objIframeContainer);
	var objIframe = this.doc.createElement("iframe");
		objIframe.setAttribute('id','lbIframe');
		objIframe.setAttribute('name','lbIframe');
		objIframe.style.display = 'none';
		objIframeContainer.appendChild(objIframe);
	var objImageContainer = this.doc.createElement("div");
		objImageContainer.setAttribute('id','lbImageContainer');
		objOuterContainer.appendChild(objImageContainer);
	var objLyteboxImage = this.doc.createElement("img");
		objLyteboxImage.setAttribute('id','lbImage');
		objImageContainer.appendChild(objLyteboxImage);
	var objLoading = this.doc.createElement("div");
		objLoading.setAttribute('id','lbLoading');
		objOuterContainer.appendChild(objLoading);
	var objDetailsContainer = this.doc.createElement("div");
		objDetailsContainer.setAttribute('id','lbDetailsContainer');
		objDetailsContainer.setAttribute((this.ie ? 'className' : 'class'), this.theme);
		objLytebox.appendChild(objDetailsContainer);
	var objDetailsData =this.doc.createElement("div");
		objDetailsData.setAttribute('id','lbDetailsData');
		objDetailsData.setAttribute((this.ie ? 'className' : 'class'), this.theme);
		objDetailsContainer.appendChild(objDetailsData);
	var objDetails = this.doc.createElement("div");
		objDetails.setAttribute('id','lbDetails');
		objDetailsData.appendChild(objDetails);
	var objCaption = this.doc.createElement("span");
		objCaption.setAttribute('id','lbCaption');
		objDetails.appendChild(objCaption);
	var objHoverNav = this.doc.createElement("div");
		objHoverNav.setAttribute('id','lbHoverNav');
		objImageContainer.appendChild(objHoverNav);
	var objBottomNav = this.doc.createElement("div");
		objBottomNav.setAttribute('id','lbBottomNav');
		objDetailsData.appendChild(objBottomNav);
	var objPrev = this.doc.createElement("a");
		objPrev.setAttribute('id','lbPrev');
		objPrev.setAttribute((this.ie ? 'className' : 'class'), this.theme);
		objPrev.setAttribute('href','#');
		objHoverNav.appendChild(objPrev);
	var objNext = this.doc.createElement("a");
		objNext.setAttribute('id','lbNext');
		objNext.setAttribute((this.ie ? 'className' : 'class'), this.theme);
		objNext.setAttribute('href','#');
		objHoverNav.appendChild(objNext);
	var objNumberDisplay = this.doc.createElement("span");
		objNumberDisplay.setAttribute('id','lbNumberDisplay');
		objDetails.appendChild(objNumberDisplay);
	var objNavDisplay = this.doc.createElement("span");
		objNavDisplay.setAttribute('id','lbNavDisplay');
		objNavDisplay.style.display = 'none';
		objDetails.appendChild(objNavDisplay);
	var objClose = this.doc.createElement("a");
		objClose.setAttribute('id','lbClose');
		objClose.setAttribute((this.ie ? 'className' : 'class'), this.theme);
		objClose.setAttribute('href','#');
		objBottomNav.appendChild(objClose);
	var objPause = this.doc.createElement("a");
		objPause.setAttribute('id','lbPause');
		objPause.setAttribute((this.ie ? 'className' : 'class'), this.theme);
		objPause.setAttribute('href','#');
		objPause.style.display = 'none';
		objBottomNav.appendChild(objPause);
	var objPlay = this.doc.createElement("a");
		objPlay.setAttribute('id','lbPlay');
		objPlay.setAttribute((this.ie ? 'className' : 'class'), this.theme);
		objPlay.setAttribute('href','#');
		objPlay.style.display = 'none';
		objBottomNav.appendChild(objPlay);
};
LyteBox.prototype.updateLyteboxItems = function() {	
	var anchors = (this.isFrame) ? window.parent.frames[window.name].document.getElementsByTagName('a') : document.getElementsByTagName('a');
	for (var i = 0; i < anchors.length; i++) {
		var anchor = anchors[i];
		var relAttribute = String(anchor.getAttribute('rel'));
		if (anchor.getAttribute('href')) {
			if (relAttribute.toLowerCase().match('lytebox')) {
				anchor.onclick = function () { myLytebox.start(this, false, false); return false; }
			} else if (relAttribute.toLowerCase().match('lyteshow')) {
				anchor.onclick = function () { myLytebox.start(this, true, false); return false; }
			} else if (relAttribute.toLowerCase().match('lyteframe')) {
				anchor.onclick = function () { myLytebox.start(this, false, true); return false; }
			}
		}
	}
};
LyteBox.prototype.start = function(imageLink, doSlide, doFrame) {
	if (this.ie && !this.ie7) {	this.toggleSelects('hide');	}
	if (this.hideFlash) { this.toggleFlash('hide'); }
	this.isLyteframe = (doFrame ? true : false);
	var pageSize	= this.getPageSize();
	var objOverlay	= this.doc.getElementById('lbOverlay');
	var objBody		= this.doc.getElementsByTagName("body").item(0);
	objOverlay.style.height = pageSize[1] + "px";
	objOverlay.style.display = '';
	this.appear('lbOverlay', (this.doAnimations ? 0 : this.maxOpacity));
	var anchors = (this.isFrame) ? window.parent.frames[window.name].document.getElementsByTagName('a') : document.getElementsByTagName('a');
	if (this.isLyteframe) {
		this.frameArray = [];
		this.frameNum = 0;
		if ((imageLink.getAttribute('rel') == 'lyteframe')) {
			var rev = imageLink.getAttribute('rev');
			this.frameArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title'), (rev == null || rev == '' ? 'width: 400px; height: 400px; scrolling: auto;' : rev)));
		} else {
			if (imageLink.getAttribute('rel').indexOf('lyteframe') != -1) {
				for (var i = 0; i < anchors.length; i++) {
					var anchor = anchors[i];
					if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))) {
						var rev = anchor.getAttribute('rev');
						this.frameArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title'), (rev == null || rev == '' ? 'width: 400px; height: 400px; scrolling: auto;' : rev)));
					}
				}
				this.frameArray.removeDuplicates();
				while(this.frameArray[this.frameNum][0] != imageLink.getAttribute('href')) { this.frameNum++; }
			}
		}
	} else {
		this.imageArray = [];
		this.imageNum = 0;
		this.slideArray = [];
		this.slideNum = 0;
		if ((imageLink.getAttribute('rel') == 'lytebox')) {
			this.imageArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title')));
		} else {
			if (imageLink.getAttribute('rel').indexOf('lytebox') != -1) {
				for (var i = 0; i < anchors.length; i++) {
					var anchor = anchors[i];
					if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))) {
						this.imageArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title')));
					}
				}
				this.imageArray.removeDuplicates();
				while(this.imageArray[this.imageNum][0] != imageLink.getAttribute('href')) { this.imageNum++; }
			}
			if (imageLink.getAttribute('rel').indexOf('lyteshow') != -1) {
				for (var i = 0; i < anchors.length; i++) {
					var anchor = anchors[i];
					if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))) {
						this.slideArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title')));
					}
				}
				this.slideArray.removeDuplicates();
				while(this.slideArray[this.slideNum][0] != imageLink.getAttribute('href')) { this.slideNum++; }
			}
		}
	}
	var object = this.doc.getElementById('lbMain');
		object.style.top = (this.getPageScroll() + (pageSize[3] / 15)) + "px";
		object.style.display = '';
	if (!this.outerBorder) {
		this.doc.getElementById('lbOuterContainer').style.border = 'none';
		this.doc.getElementById('lbDetailsContainer').style.border = 'none';
	} else {
		this.doc.getElementById('lbOuterContainer').style.borderBottom = '';
		this.doc.getElementById('lbOuterContainer').setAttribute((this.ie ? 'className' : 'class'), this.theme);
	}
	this.doc.getElementById('lbOverlay').onclick = function() { myLytebox.end(); return false; }
	this.doc.getElementById('lbMain').onclick = function(e) {
		var e = e;
		if (!e) {
			if (window.parent.frames[window.name] && (parent.document.getElementsByTagName('frameset').length <= 0)) {
				e = window.parent.window.event;
			} else {
				e = window.event;
			}
		}
		var id = (e.target ? e.target.id : e.srcElement.id);
		if (id == 'lbMain') { myLytebox.end(); return false; }
	}
	this.doc.getElementById('lbClose').onclick = function() { myLytebox.end(); return false; }
	this.doc.getElementById('lbPause').onclick = function() { myLytebox.togglePlayPause("lbPause", "lbPlay"); return false; }
	this.doc.getElementById('lbPlay').onclick = function() { myLytebox.togglePlayPause("lbPlay", "lbPause"); return false; }	
	this.isSlideshow = doSlide;
	this.isPaused = (this.slideNum != 0 ? true : false);
	if (this.isSlideshow && this.showPlayPause && this.isPaused) {
		this.doc.getElementById('lbPlay').style.display = '';
		this.doc.getElementById('lbPause').style.display = 'none';
	}
	if (this.isLyteframe) {
		this.changeContent(this.frameNum);
	} else {
		if (this.isSlideshow) {
			this.changeContent(this.slideNum);
		} else {
			this.changeContent(this.imageNum);
		}
	}
};
LyteBox.prototype.changeContent = function(imageNum) {
	if (this.isSlideshow) {
		for (var i = 0; i < this.slideshowIDCount; i++) { window.clearTimeout(this.slideshowIDArray[i]); }
	}
	this.activeImage = this.activeSlide = this.activeFrame = imageNum;
	if (!this.outerBorder) {
		this.doc.getElementById('lbOuterContainer').style.border = 'none';
		this.doc.getElementById('lbDetailsContainer').style.border = 'none';
	} else {
		this.doc.getElementById('lbOuterContainer').style.borderBottom = '';
		this.doc.getElementById('lbOuterContainer').setAttribute((this.ie ? 'className' : 'class'), this.theme);
	}
	this.doc.getElementById('lbLoading').style.display = '';
	this.doc.getElementById('lbImage').style.display = 'none';
	this.doc.getElementById('lbIframe').style.display = 'none';
	this.doc.getElementById('lbPrev').style.display = 'none';
	this.doc.getElementById('lbNext').style.display = 'none';
	this.doc.getElementById('lbIframeContainer').style.display = 'none';
	this.doc.getElementById('lbDetailsContainer').style.display = 'none';
	this.doc.getElementById('lbNumberDisplay').style.display = 'none';
	if (this.navType == 2 || this.isLyteframe) {
		object = this.doc.getElementById('lbNavDisplay');
		object.innerHTML = '&nbsp;&nbsp;&nbsp;<span id="lbPrev2_Off" style="display: none;" class="' + this.theme + '">&laquo; prev</span><a href="#" id="lbPrev2" class="' + this.theme + '" style="display: none;">&laquo; prev</a> <b id="lbSpacer" class="' + this.theme + '">||</b> <span id="lbNext2_Off" style="display: none;" class="' + this.theme + '">next &raquo;</span><a href="#" id="lbNext2" class="' + this.theme + '" style="display: none;">next &raquo;</a>';
		object.style.display = 'none';
	}
	if (this.isLyteframe) {
		var iframe = myLytebox.doc.getElementById('lbIframe');
		var styles = this.frameArray[this.activeFrame][2];
		var aStyles = styles.split(';');
		for (var i = 0; i < aStyles.length; i++) {
			if (aStyles[i].indexOf('width:') >= 0) {
				var w = aStyles[i].replace('width:', '');
				iframe.width = w.trim();
			} else if (aStyles[i].indexOf('height:') >= 0) {
				var h = aStyles[i].replace('height:', '');
				iframe.height = h.trim();
			} else if (aStyles[i].indexOf('scrolling:') >= 0) {
				var s = aStyles[i].replace('scrolling:', '');
//				iframe.scrolling = s.trim();
				iframe.scrolling = 'no';
			} else if (aStyles[i].indexOf('border:') >= 0) {
				// Not implemented yet, as there are cross-platform issues with setting the border (from a GUI standpoint)
				//var b = aStyles[i].replace('border:', '');
				//iframe.style.border = b.trim();
			}
		}
		this.resizeContainer(parseInt(iframe.width), parseInt(iframe.height));
	} else {
		imgPreloader = new Image();
		imgPreloader.onload = function() {
			var imageWidth = imgPreloader.width;
			var imageHeight = imgPreloader.height;
			if (myLytebox.autoResize) {
				var pagesize = myLytebox.getPageSize();
				var x = pagesize[2] - 150;
				var y = pagesize[3] - 150;
				if (imageWidth > x) {
					imageHeight = Math.round(imageHeight * (x / imageWidth));
					imageWidth = x; 
					if (imageHeight > y) { 
						imageWidth = Math.round(imageWidth * (y / imageHeight));
						imageHeight = y; 
					}
				} else if (imageHeight > y) { 
					imageWidth = Math.round(imageWidth * (y / imageHeight));
					imageHeight = y; 
					if (imageWidth > x) {
						imageHeight = Math.round(imageHeight * (x / imageWidth));
						imageWidth = x;
					}
				}
			}
			var lbImage = myLytebox.doc.getElementById('lbImage')
			lbImage.src = (myLytebox.isSlideshow ? myLytebox.slideArray[myLytebox.activeSlide][0] : myLytebox.imageArray[myLytebox.activeImage][0]);
			lbImage.width = imageWidth;
			lbImage.height = imageHeight;
			myLytebox.resizeContainer(imageWidth, imageHeight);
			imgPreloader.onload = function() {};
		}
		imgPreloader.src = (this.isSlideshow ? this.slideArray[this.activeSlide][0] : this.imageArray[this.activeImage][0]);
	}
};
LyteBox.prototype.resizeContainer = function(imgWidth, imgHeight) {
	this.wCur = this.doc.getElementById('lbOuterContainer').offsetWidth;
	this.hCur = this.doc.getElementById('lbOuterContainer').offsetHeight;
	this.xScale = ((imgWidth  + (this.borderSize * 2)) / this.wCur) * 100;
	this.yScale = ((imgHeight  + (this.borderSize * 2)) / this.hCur) * 100;
	var wDiff = (this.wCur - this.borderSize * 2) - imgWidth;
	var hDiff = (this.hCur - this.borderSize * 2) - imgHeight;
	if (!(hDiff == 0)) {
		this.hDone = false;
		this.resizeH('lbOuterContainer', this.hCur, imgHeight + this.borderSize*2, this.getPixelRate(this.hCur, imgHeight));
	} else {
		this.hDone = true;
	}
	if (!(wDiff == 0)) {
		this.wDone = false;
		this.resizeW('lbOuterContainer', this.wCur, imgWidth + this.borderSize*2, this.getPixelRate(this.wCur, imgWidth));
	} else {
		this.wDone = true;
	}
	if ((hDiff == 0) && (wDiff == 0)) {
		if (this.ie){ this.pause(250); } else { this.pause(100); } 
	}
	this.doc.getElementById('lbPrev').style.height = imgHeight + "px";
	this.doc.getElementById('lbNext').style.height = imgHeight + "px";
	this.doc.getElementById('lbDetailsContainer').style.width = (imgWidth + (this.borderSize * 2) + (this.ie && this.doc.compatMode == "BackCompat" && this.outerBorder ? 2 : 0)) + "px";
	this.showContent();
};
LyteBox.prototype.showContent = function() {
	if (this.wDone && this.hDone) {
		for (var i = 0; i < this.showContentTimerCount; i++) { window.clearTimeout(this.showContentTimerArray[i]); }
		if (this.outerBorder) {
			this.doc.getElementById('lbOuterContainer').style.borderBottom = 'none';
		}
		this.doc.getElementById('lbLoading').style.display = 'none';
		if (this.isLyteframe) {
			this.doc.getElementById('lbIframe').style.display = '';
			this.appear('lbIframe', (this.doAnimations ? 0 : 100));
		} else {
			this.doc.getElementById('lbImage').style.display = '';
			this.appear('lbImage', (this.doAnimations ? 0 : 100));
			this.preloadNeighborImages();
		}
		if (this.isSlideshow) {
			if(this.activeSlide == (this.slideArray.length - 1)) {
				if (this.autoEnd) {
					this.slideshowIDArray[this.slideshowIDCount++] = setTimeout("myLytebox.end('slideshow')", this.slideInterval);
				}
			} else {
				if (!this.isPaused) {
					this.slideshowIDArray[this.slideshowIDCount++] = setTimeout("myLytebox.changeContent("+(this.activeSlide+1)+")", this.slideInterval);
				}
			}
			this.doc.getElementById('lbHoverNav').style.display = (this.showNavigation && this.navType == 1 ? '' : 'none');
			this.doc.getElementById('lbClose').style.display = (this.showClose ? '' : 'none');
			this.doc.getElementById('lbDetails').style.display = (this.showDetails ? '' : 'none');
			this.doc.getElementById('lbPause').style.display = (this.showPlayPause && !this.isPaused ? '' : 'none');
			this.doc.getElementById('lbPlay').style.display = (this.showPlayPause && !this.isPaused ? 'none' : '');
			this.doc.getElementById('lbNavDisplay').style.display = (this.showNavigation && this.navType == 2 ? '' : 'none');
		} else {
			this.doc.getElementById('lbHoverNav').style.display = (this.navType == 1 && !this.isLyteframe ? '' : 'none');
			if ((this.navType == 2 && !this.isLyteframe && this.imageArray.length > 1) || (this.frameArray.length > 1 && this.isLyteframe)) {
				this.doc.getElementById('lbNavDisplay').style.display = '';
			} else {
				this.doc.getElementById('lbNavDisplay').style.display = 'none';
			}
			this.doc.getElementById('lbClose').style.display = '';
			this.doc.getElementById('lbDetails').style.display = '';
			this.doc.getElementById('lbPause').style.display = 'none';
			this.doc.getElementById('lbPlay').style.display = 'none';
		}
		this.doc.getElementById('lbImageContainer').style.display = (this.isLyteframe ? 'none' : '');
		this.doc.getElementById('lbIframeContainer').style.display = (this.isLyteframe ? '' : 'none');
		try {
			this.doc.getElementById('lbIframe').src = this.frameArray[this.activeFrame][0];
		} catch(e) { }
	} else {
		this.showContentTimerArray[this.showContentTimerCount++] = setTimeout("myLytebox.showContent()", 200);
	}
};
LyteBox.prototype.updateDetails = function() {
	var object = this.doc.getElementById('lbCaption');
	var sTitle = (this.isSlideshow ? this.slideArray[this.activeSlide][1] : (this.isLyteframe ? this.frameArray[this.activeFrame][1] : this.imageArray[this.activeImage][1]));
	object.style.display = '';
	object.innerHTML = (sTitle == null ? '' : sTitle);
	this.updateNav();
	this.doc.getElementById('lbDetailsContainer').style.display = '';
	object = this.doc.getElementById('lbNumberDisplay');
	if (this.isSlideshow && this.slideArray.length > 1) {
		object.style.display = '';
		object.innerHTML = "Bild " + eval(this.activeSlide + 1) + " von " + this.slideArray.length;
		this.doc.getElementById('lbNavDisplay').style.display = (this.navType == 2 && this.showNavigation ? '' : 'none');
	} else if (this.imageArray.length > 1 && !this.isLyteframe) {
		object.style.display = '';
		object.innerHTML = "Bild " + eval(this.activeImage + 1) + " von " + this.imageArray.length;
		this.doc.getElementById('lbNavDisplay').style.display = (this.navType == 2 ? '' : 'none');
	} else if (this.frameArray.length > 1 && this.isLyteframe) {
		object.style.display = '';
		object.innerHTML = "Page " + eval(this.activeFrame + 1) + " of " + this.frameArray.length;
		this.doc.getElementById('lbNavDisplay').style.display = '';
	} else {
		this.doc.getElementById('lbNavDisplay').style.display = 'none';
	}
	this.appear('lbDetailsContainer', (this.doAnimations ? 0 : 100));
};
LyteBox.prototype.updateNav = function() {
	if (this.isSlideshow) {
		if (this.activeSlide != 0) {
			var object = (this.navType == 2 ? this.doc.getElementById('lbPrev2') : this.doc.getElementById('lbPrev'));
				object.style.display = '';
				object.onclick = function() {
					if (myLytebox.pauseOnPrevClick) { myLytebox.togglePlayPause("lbPause", "lbPlay"); }
					myLytebox.changeContent(myLytebox.activeSlide - 1); return false;
				}
		} else {
			if (this.navType == 2) { this.doc.getElementById('lbPrev2_Off').style.display = ''; }
		}
		if (this.activeSlide != (this.slideArray.length - 1)) {
			var object = (this.navType == 2 ? this.doc.getElementById('lbNext2') : this.doc.getElementById('lbNext'));
				object.style.display = '';
				object.onclick = function() {
					if (myLytebox.pauseOnNextClick) { myLytebox.togglePlayPause("lbPause", "lbPlay"); }
					myLytebox.changeContent(myLytebox.activeSlide + 1); return false;
				}
		} else {
			if (this.navType == 2) { this.doc.getElementById('lbNext2_Off').style.display = ''; }
		}
	} else if (this.isLyteframe) {
		if(this.activeFrame != 0) {
			var object = this.doc.getElementById('lbPrev2');
				object.style.display = '';
				object.onclick = function() {
					myLytebox.changeContent(myLytebox.activeFrame - 1); return false;
				}
		} else {
			this.doc.getElementById('lbPrev2_Off').style.display = '';
		}
		if(this.activeFrame != (this.frameArray.length - 1)) {
			var object = this.doc.getElementById('lbNext2');
				object.style.display = '';
				object.onclick = function() {
					myLytebox.changeContent(myLytebox.activeFrame + 1); return false;
				}
		} else {
			this.doc.getElementById('lbNext2_Off').style.display = '';
		}		
	} else {
		if(this.activeImage != 0) {
			var object = (this.navType == 2 ? this.doc.getElementById('lbPrev2') : this.doc.getElementById('lbPrev'));
				object.style.display = '';
				object.onclick = function() {
					myLytebox.changeContent(myLytebox.activeImage - 1); return false;
				}
		} else {
			if (this.navType == 2) { this.doc.getElementById('lbPrev2_Off').style.display = ''; }
		}
		if(this.activeImage != (this.imageArray.length - 1)) {
			var object = (this.navType == 2 ? this.doc.getElementById('lbNext2') : this.doc.getElementById('lbNext'));
				object.style.display = '';
				object.onclick = function() {
					myLytebox.changeContent(myLytebox.activeImage + 1); return false;
				}
		} else {
			if (this.navType == 2) { this.doc.getElementById('lbNext2_Off').style.display = ''; }
		}
	}
	this.enableKeyboardNav();
};
LyteBox.prototype.enableKeyboardNav = function() { document.onkeydown = this.keyboardAction; };
LyteBox.prototype.disableKeyboardNav = function() { document.onkeydown = ''; };
LyteBox.prototype.keyboardAction = function(e) {
	var keycode = key = escape = null;
	keycode	= (e == null) ? event.keyCode : e.which;
	key		= String.fromCharCode(keycode).toLowerCase();
	escape  = (e == null) ? 27 : e.DOM_VK_ESCAPE;
	if ((key == 'x') || (key == 'c') || (keycode == escape)) {
		myLytebox.end();
	} else if ((key == 'p') || (keycode == 37)) {
		if (myLytebox.isSlideshow) {
			if(myLytebox.activeSlide != 0) {
				myLytebox.disableKeyboardNav();
				myLytebox.changeContent(myLytebox.activeSlide - 1);
			}
		} else if (myLytebox.isLyteframe) {
			if(myLytebox.activeFrame != 0) {
				myLytebox.disableKeyboardNav();
				myLytebox.changeContent(myLytebox.activeFrame - 1);
			}
		} else {
			if(myLytebox.activeImage != 0) {
				myLytebox.disableKeyboardNav();
				myLytebox.changeContent(myLytebox.activeImage - 1);
			}
		}
	} else if ((key == 'n') || (keycode == 39)) {
		if (myLytebox.isSlideshow) {
			if(myLytebox.activeSlide != (myLytebox.slideArray.length - 1)) {
				myLytebox.disableKeyboardNav();
				myLytebox.changeContent(myLytebox.activeSlide + 1);
			}
		} else if (myLytebox.isLyteframe) {
			if(myLytebox.activeFrame != (myLytebox.frameArray.length - 1)) {
				myLytebox.disableKeyboardNav();
				myLytebox.changeContent(myLytebox.activeFrame + 1);
			}
		} else {
			if(myLytebox.activeImage != (myLytebox.imageArray.length - 1)) {
				myLytebox.disableKeyboardNav();
				myLytebox.changeContent(myLytebox.activeImage + 1);
			}
		}
	}
};
LyteBox.prototype.preloadNeighborImages = function() {
	if (this.isSlideshow) {
		if ((this.slideArray.length - 1) > this.activeSlide) {
			preloadNextImage = new Image();
			preloadNextImage.src = this.slideArray[this.activeSlide + 1][0];
		}
		if(this.activeSlide > 0) {
			preloadPrevImage = new Image();
			preloadPrevImage.src = this.slideArray[this.activeSlide - 1][0];
		}
	} else {
		if ((this.imageArray.length - 1) > this.activeImage) {
			preloadNextImage = new Image();
			preloadNextImage.src = this.imageArray[this.activeImage + 1][0];
		}
		if(this.activeImage > 0) {
			preloadPrevImage = new Image();
			preloadPrevImage.src = this.imageArray[this.activeImage - 1][0];
		}
	}
};
LyteBox.prototype.togglePlayPause = function(hideID, showID) {
	if (this.isSlideshow && hideID == "lbPause") {
		for (var i = 0; i < this.slideshowIDCount; i++) { window.clearTimeout(this.slideshowIDArray[i]); }
	}
	this.doc.getElementById(hideID).style.display = 'none';
	this.doc.getElementById(showID).style.display = '';
	if (hideID == "lbPlay") {
		this.isPaused = false;
		if (this.activeSlide == (this.slideArray.length - 1)) {
			this.end();
		} else {
			this.changeContent(this.activeSlide + 1);
		}
	} else {
		this.isPaused = true;
	}
};
LyteBox.prototype.end = function(caller) {
	var closeClick = (caller == 'slideshow' ? false : true);
	if (this.isSlideshow && this.isPaused && !closeClick) { return; }
	this.disableKeyboardNav();
	this.doc.getElementById('lbMain').style.display = 'none';
	this.fade('lbOverlay', (this.doAnimations ? this.maxOpacity : 0));
	this.toggleSelects('visible');
	if (this.hideFlash) { this.toggleFlash('visible'); }
	if (this.isSlideshow) {
		for (var i = 0; i < this.slideshowIDCount; i++) { window.clearTimeout(this.slideshowIDArray[i]); }
	}
	if (this.isLyteframe) {
		 this.initialize();
	}
};
LyteBox.prototype.checkFrame = function() {
	if (window.parent.frames[window.name] && (parent.document.getElementsByTagName('frameset').length <= 0)) {
		this.isFrame = true;
		this.lytebox = "window.parent." + window.name + ".myLytebox";
		this.doc = parent.document;
	} else {
		this.isFrame = false;
		this.lytebox = "myLytebox";
		this.doc = document;
	}
};
LyteBox.prototype.getPixelRate = function(cur, img) {
	var diff = (img > cur) ? img - cur : cur - img;
	if (diff >= 0 && diff <= 100) { return 10; }
	if (diff > 100 && diff <= 200) { return 15; }
	if (diff > 200 && diff <= 300) { return 20; }
	if (diff > 300 && diff <= 400) { return 25; }
	if (diff > 400 && diff <= 500) { return 30; }
	if (diff > 500 && diff <= 600) { return 35; }
	if (diff > 600 && diff <= 700) { return 40; }
	if (diff > 700) { return 45; }
};
LyteBox.prototype.appear = function(id, opacity) {
	var object = this.doc.getElementById(id).style;
	object.opacity = (opacity / 100);
	object.MozOpacity = (opacity / 100);
	object.KhtmlOpacity = (opacity / 100);
	object.filter = "alpha(opacity=" + (opacity + 10) + ")";
	if (opacity == 100 && (id == 'lbImage' || id == 'lbIframe')) {
		try { object.removeAttribute("filter"); } catch(e) {}	/* Fix added for IE Alpha Opacity Filter bug. */
		this.updateDetails();
	} else if (opacity >= this.maxOpacity && id == 'lbOverlay') {
		for (var i = 0; i < this.overlayTimerCount; i++) { window.clearTimeout(this.overlayTimerArray[i]); }
		return;
	} else if (opacity >= 100 && id == 'lbDetailsContainer') {
		try { object.removeAttribute("filter"); } catch(e) {}	/* Fix added for IE Alpha Opacity Filter bug. */
		for (var i = 0; i < this.imageTimerCount; i++) { window.clearTimeout(this.imageTimerArray[i]); }
		this.doc.getElementById('lbOverlay').style.height = this.getPageSize()[1] + "px";
	} else {
		if (id == 'lbOverlay') {
			this.overlayTimerArray[this.overlayTimerCount++] = setTimeout("myLytebox.appear('" + id + "', " + (opacity+20) + ")", 1);
		} else {
			this.imageTimerArray[this.imageTimerCount++] = setTimeout("myLytebox.appear('" + id + "', " + (opacity+10) + ")", 1);
		}
	}
};
LyteBox.prototype.fade = function(id, opacity) {
	var object = this.doc.getElementById(id).style;
	object.opacity = (opacity / 100);
	object.MozOpacity = (opacity / 100);
	object.KhtmlOpacity = (opacity / 100);
	object.filter = "alpha(opacity=" + opacity + ")";
	if (opacity <= 0) {
		try {
			object.display = 'none';
		} catch(err) { }
	} else if (id == 'lbOverlay') {
		this.overlayTimerArray[this.overlayTimerCount++] = setTimeout("myLytebox.fade('" + id + "', " + (opacity-20) + ")", 1);
	} else {
		this.timerIDArray[this.timerIDCount++] = setTimeout("myLytebox.fade('" + id + "', " + (opacity-10) + ")", 1);
	}
};
LyteBox.prototype.resizeW = function(id, curW, maxW, pixelrate, speed) {
	if (!this.hDone) {
		this.resizeWTimerArray[this.resizeWTimerCount++] = setTimeout("myLytebox.resizeW('" + id + "', " + curW + ", " + maxW + ", " + pixelrate + ")", 100);
		return;
	}
	var object = this.doc.getElementById(id);
	var timer = speed ? speed : (this.resizeDuration/2);
	var newW = (this.doAnimations ? curW : maxW);
	object.style.width = (newW) + "px";
	if (newW < maxW) {
		newW += (newW + pixelrate >= maxW) ? (maxW - newW) : pixelrate;
	} else if (newW > maxW) {
		newW -= (newW - pixelrate <= maxW) ? (newW - maxW) : pixelrate;
	}
	this.resizeWTimerArray[this.resizeWTimerCount++] = setTimeout("myLytebox.resizeW('" + id + "', " + newW + ", " + maxW + ", " + pixelrate + ", " + (timer+0.02) + ")", timer+0.02);
	if (parseInt(object.style.width) == maxW) {
		this.wDone = true;
		for (var i = 0; i < this.resizeWTimerCount; i++) { window.clearTimeout(this.resizeWTimerArray[i]); }
	}
};
LyteBox.prototype.resizeH = function(id, curH, maxH, pixelrate, speed) {
	var timer = speed ? speed : (this.resizeDuration/2);
	var object = this.doc.getElementById(id);
	var newH = (this.doAnimations ? curH : maxH);
	object.style.height = (newH) + "px";
	if (newH < maxH) {
		newH += (newH + pixelrate >= maxH) ? (maxH - newH) : pixelrate;
	} else if (newH > maxH) {
		newH -= (newH - pixelrate <= maxH) ? (newH - maxH) : pixelrate;
	}
	this.resizeHTimerArray[this.resizeHTimerCount++] = setTimeout("myLytebox.resizeH('" + id + "', " + newH + ", " + maxH + ", " + pixelrate + ", " + (timer+.02) + ")", timer+.02);
	if (parseInt(object.style.height) == maxH) {
		this.hDone = true;
		for (var i = 0; i < this.resizeHTimerCount; i++) { window.clearTimeout(this.resizeHTimerArray[i]); }
	}
};
LyteBox.prototype.getPageScroll = function() {
	if (self.pageYOffset) {
		return this.isFrame ? parent.pageYOffset : self.pageYOffset;
	} else if (this.doc.documentElement && this.doc.documentElement.scrollTop){
		return this.doc.documentElement.scrollTop;
	} else if (document.body) {
		return this.doc.body.scrollTop;
	}
};
LyteBox.prototype.getPageSize = function() {	
	var xScroll, yScroll, windowWidth, windowHeight;
	if (window.innerHeight && window.scrollMaxY) {
		xScroll = this.doc.scrollWidth;
		yScroll = (this.isFrame ? parent.innerHeight : self.innerHeight) + (this.isFrame ? parent.scrollMaxY : self.scrollMaxY);
	} else if (this.doc.body.scrollHeight > this.doc.body.offsetHeight){
		xScroll = this.doc.body.scrollWidth;
		yScroll = this.doc.body.scrollHeight;
	} else {
		xScroll = this.doc.getElementsByTagName("html").item(0).offsetWidth;
		yScroll = this.doc.getElementsByTagName("html").item(0).offsetHeight;
		xScroll = (xScroll < this.doc.body.offsetWidth) ? this.doc.body.offsetWidth : xScroll;
		yScroll = (yScroll < this.doc.body.offsetHeight) ? this.doc.body.offsetHeight : yScroll;
	}
	if (self.innerHeight) {
		windowWidth = (this.isFrame) ? parent.innerWidth : self.innerWidth;
		windowHeight = (this.isFrame) ? parent.innerHeight : self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		windowWidth = this.doc.documentElement.clientWidth;
		windowHeight = this.doc.documentElement.clientHeight;
	} else if (document.body) {
		windowWidth = this.doc.getElementsByTagName("html").item(0).clientWidth;
		windowHeight = this.doc.getElementsByTagName("html").item(0).clientHeight;
		windowWidth = (windowWidth == 0) ? this.doc.body.clientWidth : windowWidth;
		windowHeight = (windowHeight == 0) ? this.doc.body.clientHeight : windowHeight;
	}
	var pageHeight = (yScroll < windowHeight) ? windowHeight : yScroll;
	var pageWidth = (xScroll < windowWidth) ? windowWidth : xScroll;
	return new Array(pageWidth, pageHeight, windowWidth, windowHeight);
};
LyteBox.prototype.toggleFlash = function(state) {

	if(state == "hide")
		$('.ad').hide();
	else
		$('.ad').show();

	var objects = this.doc.getElementsByTagName("object");
	for (var i = 0; i < objects.length; i++) {
		objects[i].style.visibility = (state == "hide") ? 'hidden' : 'visible';
	}
	var embeds = this.doc.getElementsByTagName("embed");
	for (var i = 0; i < embeds.length; i++) {
		embeds[i].style.visibility = (state == "hide") ? 'hidden' : 'visible';
	}
	if (this.isFrame) {
		for (var i = 0; i < parent.frames.length; i++) {
			try {
				objects = parent.frames[i].window.document.getElementsByTagName("object");
				for (var j = 0; j < objects.length; j++) {
					objects[j].style.visibility = (state == "hide") ? 'hidden' : 'visible';
				}
			} catch(e) { }
			try {
				embeds = parent.frames[i].window.document.getElementsByTagName("embed");
				for (var j = 0; j < embeds.length; j++) {
					embeds[j].style.visibility = (state == "hide") ? 'hidden' : 'visible';
				}
			} catch(e) { }
		}
	}
};
LyteBox.prototype.toggleSelects = function(state) {
	var selects = this.doc.getElementsByTagName("select");
	for (var i = 0; i < selects.length; i++ ) {
		selects[i].style.visibility = (state == "hide") ? 'hidden' : 'visible';
	}
	if (this.isFrame) {
		for (var i = 0; i < parent.frames.length; i++) {
			try {
				selects = parent.frames[i].window.document.getElementsByTagName("select");
				for (var j = 0; j < selects.length; j++) {
					selects[j].style.visibility = (state == "hide") ? 'hidden' : 'visible';
				}
			} catch(e) { }
		}
	}
};
LyteBox.prototype.pause = function(numberMillis) {
	var now = new Date();
	var exitTime = now.getTime() + numberMillis;
	while (true) {
		now = new Date();
		if (now.getTime() > exitTime) { return; }
	}
};

/*
if (window.addEventListener) {
	window.addEventListener("load",initLytebox,false);
} else if (window.attachEvent) {
	window.attachEvent("onload",initLytebox);
} else {
	window.onload = function() {initLytebox();}
}

*/

function initLytebox() { myLytebox = new LyteBox(); }

// general util functions
String.prototype.trim = function(chr)
{
	var chr = chr || '\s';
	return this.replace(new RegExp('^'+chr+'+|'+chr + '+$', 'g'), '');
};

String.prototype.strip_tags = function()
{
	return this.replace(/<[^>]+>/g, '');
};

// object cloning
kinkaa.clone = function (s)
{
	var cp = new s.constructor();
	for (var p in s)
		if (typeof s[p] == 'object')
			cp[p] = kinkaa.clone(s[p]);
		else
			cp[p] = s[p];
	return cp;
}

// supplant string with placeholders
// e.g.: var s = supplant('showint %1% results out of %2% total', n, m);
kinkaa.webint.supplant = function()
{
	var args = arguments;
	return args[0].replace(/%(\d*)%/g, function(dummy, m)
		{
			return args[m];
		});
}

/*
kinkaa.vardump = function (s, depth)
{
	var output = "\n";
	depth = depth || 0;
	
	var d = '';
	for (var i = 0; i < depth; i++)
		d += "\t";
	
	for (var p in s)
		if (typeof s[p] == 'object')
			output += d + p+" => "+kinkaa.vardump(s[p], depth+1);
		else
			output += d + p+" => "+s[p]+"\n";
	
	return output;
}
*/

function ip_2_ac(t, ac_val, ac_id, html, last_searches)
{
	if(kinkaa.webint.domain_version && html != '' && $m('justfound') != null)
		$m('justfound').innerHTML = html;

	if(kinkaa.webint.domain_version == '1' && last_searches != '' && $m('last_search_msg') != null)
	{
		$m('last_search_msg').innerHTML = last_searches;
		$m('last_search_msg').style.display = 'block';
	}

	if(t != '' && ac_val != '')
	{
		$m(t).focus();

		setTimeout(function(){
			var tmp = $m(t).value;
			if(!tmp || !tmp.length){
				$m(t).value = ac_val; $m(t).setAttribute('city_id', ac_id); $m(t).setAttribute('mfrom_ac', '1');}}, 100);
	}
}

kinkaa.func.show_dialog = function(id, flag, opts)
{
	if(flag)
	{
		if(opts && opts.hide)
			$('.dialog').hide();

		height_pos = 0;

		if(opts && opts.height_pos)
			height_pos = opts.height_pos;

		var s1 = 0, s2 = 0, w = parseInt($('#main').width()/2) - 100;
	
		if(document.documentElement.scrollTop != undefined)
		s1 = document.documentElement.scrollTop;
		
		if(document.body.scrollTop != undefined)
		s2 = document.body.scrollTop;
		
		var scroll_top = (!s1 && s2 ? s2 : ((s1 && !s2) || (s1 && s2) ? s1 :  0) );
		
		var h = parseInt(($(window).height() - 20)/3 + scroll_top - height_pos);

		if(opts && opts.w)
			w -= opts.w;
	
		var css_rules = {'left':w+'px', 'top':h+'px'};

		if(opts && opts.border)
			css_rules['border-color'] = opts.border;

		$('#'+id).css(css_rules).show();
	}
	else
	{
		$('#'+id).hide();
	}
}

kinkaa.func.make_name_value_obj = function (key, val)
{
	return {name : key, value : val};
}

kinkaa.func.search_execute = function()
{
	var form = $($('form')[0]);
	var data_form = form.serializeArray();
		
	$.each($(form).find('.ac_field'), function(){
		data_form.push(kinkaa.func.make_name_value_obj($(this).attr('name') + '_id', $(this).attr('city_id')));
	});

	$.ajax({
		type: "POST",
		dataType: "json",
		url: kinkaa.webint.base_path+"html_qsearch.php",
		data: data_form,
		complete: function(){}
	});
}

kinkaa.func.pcalendar = function(mode){};

$(function()
{
	kinkaa.func.show_interactive_help_gmap = function(callback, id) {

		kinkaa.webint.map_mode = 'help';
		kinkaa.webint.help_id = id;
		if(kinkaa.webint.page == 'html')
			$('#map_help_text').val($('#'+id).val());
		else
			$('#user_location').val($('#'+id).val());

		if(!kinkaa.webint.gmap_loaded)
		{
			kinkaa.func.load_gmap_script(callback);
		}
		else
		{
			if(kinkaa.webint.page == 'html')
			{
				$('#map_help').show();
				if($('#map_help_text').val())
					$('#map_help_submit').trigger('click');
			}
			else
			{
				$('#bigmap').switch_to_big_map();
				$('#bigmap').geocode_help();
			}
		}
	}

	kinkaa.func.load_gmap_script = function(callback) {

		var tmp_domain = kinkaa.webint.domain;
		if(kinkaa.webint.domain == 'uk')
			tmp_domain = 'co.uk';

		var script = document.createElement("script");
		script.type = "text/javascript";
		script.src = "http://maps.google."+tmp_domain+"/maps?file=api&v=2&hl="+kinkaa.webint.lang+"&key="+kinkaa.webint.maps_api_key+"&async=2&callback=kinkaa.func."+callback;

		document.getElementsByTagName("head")[0].appendChild(script);

		if(jQuery.browser.msie && jQuery.browser.version < 7)
		{
			kinkaa.webint.map_timer = setInterval(function()
			{
				try{
					if(GMap != 'undefined')
					{
						kinkaa.func[callback]();
						kinkaa.webint.gmap_loaded = true;
						clearTimeout(kinkaa.webint.map_timer);
					}
				}
				catch(e){}
			}, 1500);
		}
	}

	kinkaa.func.show_help_gmap = function() {
		if (GBrowserIsCompatible()) {

			if(kinkaa.webint.page == 'html')
				kinkaa.func.show_dialog('map_help', true, {w:50});

			$('#bigmap').open_help_map();

			if(kinkaa.webint.page == 'html')
			{
				if($('#map_help_text').val())
					$('#map_help_submit').trigger('click');
			}
			else
			{
				if($('#user_location').val())
					$('#change_location').trigger('click');
			}
			if(!kinkaa.webint.gmap_loaded)
				kinkaa.webint.gmap_loaded = 1;
		}
	}

	kinkaa.func.check_wizard = function(){

		if(kinkaa.webint.domain_version == 1)
		{
			$('#geo_point_txt').html('Genaue Adresse eingeben?').show();
			$('#geo_point').attr('value', '');
		}

		var from = to = '';

		if(kinkaa.webint.type == 'flight')
		{
			from = $('#airport_from').attr('city_id');
			to = $('#airport_to').attr('city_id');
		}

		if(kinkaa.webint.type == 'hotel')
		{
			from = $('#hotel_city').attr('city_id');
		}

		if(kinkaa.webint.type == 'car')
		{
			from = $('#pickup_location').attr('city_id');
			to = $('#dropoff_location').attr('city_id');
			if(from != to)
				return;
		}

		if(kinkaa.webint.type == 'package')
		{
			from = $('#package_airport_from').attr('city_id');
			to = $('#package_airport_to').attr('city_id');
		}

		if((from && to) || (from && kinkaa.webint.type == 'hotel'))
		{
			$.ajax({
				url: kinkaa.webint.base_path + 'check_wizard.php?type='+kinkaa.webint.type+'&from='+from+'&to='+to,
				success: function(data){
					if(parseInt(data))
					{
						$('#dates_not_known').attr('disabled', '');
					}
					else
					{
						$('#dates_not_known').attr('checked', false).attr('disabled', 'disabled');
					}
				}
			});
		}
	}

	if(kinkaa.webint.page == 'html' || kinkaa.webint.type == 'flight')
	{	
		$('#map_help_close').click(function(){
			$('#map_help').hide();
			kinkaa.webint.map_open = false;
		});
	
		$('#map_help_submit').click(function(){
			$('#bigmap').geocode_help();
		});
	}

	kinkaa.func.map_help = function()
	{
		if(kinkaa.webint.page == 'html')
			$('#map_help').hide();
		else
			$('#bigmap').switch_to_small_map();

		$('#'+kinkaa.webint.help_id).val(kinkaa.webint.help_address);
		$('#help_'+kinkaa.webint.help_id).val(kinkaa.webint.help_address);
	}

	var date_today = new Date(); // one day = 86400000 ms
	
	if(kinkaa.webint.deal_type && kinkaa.webint.deal_type.length)
		kinkaa.webint.type = kinkaa.webint.deal_type;

	if('hotel' == kinkaa.webint.type)
	{
		if('html' == kinkaa.webint.page)
		{
			$('#geo_point_txt').click(function(){
				kinkaa.webint.map_hotel_geo = 1;
				kinkaa.func.show_interactive_help_gmap('show_help_gmap', 'hotel_city');
			});
		}

		$('#geo_point_submit').click(function(){
			$('#map_help_close').trigger('click');
		});

		$.kinput_example({'hotel_city': '(z.B. Zürich, Schweiz oder Barcelona, Spanien)'});
		$('.city_input').kautocompletion({after_insert:kinkaa.func.check_wizard, url:kinkaa.webint.base_path+'suggest_all_city.php', error_report: (kinkaa.webint.devel?false:true), error_report_type:kinkaa.webint.domain_version == 1 ?2:1});
		$('#img_checkin').kcalendar('checkin', {date_format:kinkaa.webint.date_format,
							date_separator:kinkaa.webint.date_separator,
							first_day_of_week:kinkaa.webint.date_first_day_of_week,
							max_months : 12,
							type: 'hotel',
							callback:function()
							{
								if(kinkaa.search_data && kinkaa.search_data.meta && kinkaa.search_data.meta.filter_settings && kinkaa.search_data.meta.filter_settings.cpc[5])
									$('#checkin').removeClass('field_invalid');
							}
		}).show();
		$('#img_checkout').kcalendar('checkout', {date_format:kinkaa.webint.date_format,
							date_separator:kinkaa.webint.date_separator,
							first_day_of_week:kinkaa.webint.date_first_day_of_week,
							max_months : 12,
							type: 'hotel',
							callback:function()
							{
								if(kinkaa.search_data && kinkaa.search_data.meta && kinkaa.search_data.meta.filter_settings && kinkaa.search_data.meta.filter_settings.cpc[5])
									$('#checkout').removeClass('field_invalid');

								kinkaa.func.search_execute();
							}
		}).show();
		$('#img_checkin').kcalmanager('#img_checkout', {'init_date':new Date(date_today.getTime() + 1209600000), 'diff':1, 'min_diff':1});
	}
	else if('discovery' == kinkaa.webint.type)
	{
		$.kinput_example({'attraction_city': '(z.B. Zürich, Schweiz oder Barcelona, Spanien)'});
		$('.city_input').kautocompletion({ url:kinkaa.webint.base_path+'suggest_all_city.php'});
	}
	else if('flight' == kinkaa.webint.type)
	{
		$.kinput_example(
		{
			'airport_from': '(z.B. Zürich oder ZRH)',
			'airport_to': '(z.B. Hamburg oder HAM)'
		});

		if('html' == kinkaa.webint.page)
		{
			if(kinkaa.webint.domain_version == 1)
			{
				/*
	
				kinkaa.func.pcalendar = function(mode){

					if(kinkaa.webint.type == 'flight' && $('#flight_mode_weekend').attr('checked'))
						return;

					kinkaa.func.check_wizard();

					if(!(kinkaa.webint.lang == 'en' || kinkaa.webint.lang == 'de'))
						return;

					var s = 0;
					var f = $('#airport_from').attr('value');

					var b = f.indexOf('(');
					var e = f.indexOf(')');
					var from = '';
					if(e > b)
						from = f.substr(b+1, e-b-1);

					if(from != '' && from.length == 3)
						s = 1;
					else
						s = 0;

					if(s)
					{
						var t = $('#airport_to').attr('value');
						b = t.indexOf('(');
						e = t.indexOf(')');
						var to = '';
						if(e > b)
							to = t.substr(b+1, e-b-1);

						if(to != '' && to.length == 3)
							s = 1;
						else
							s = 0;
					}

					if(s)
					{
						if(mode == 2)
						{
							var tmp = $('#pcalendar_month').children(':selected').attr('name');
							var m_url = kinkaa.webint.base_path + "pcalendar.php?mode=2&from="+from+'&to='+to+'&depart='+tmp+'&return='+escape($('#date_return').attr('value').replace(/\//g, '|'))+'&oneway='+($('#oneway').attr('checked')?1:0);
						}
						else
						{
							var m_url = kinkaa.webint.base_path + "pcalendar.php?from="+from+'&to='+to+'&depart='+escape($('#date_depart').attr('value').replace(/\//g, '|'))+'&return='+escape($('#date_return').attr('value').replace(/\//g, '|'))+'&oneway='+($('#oneway').attr('checked')?1:0);
						}

						$.ajax({
							url: m_url,
							success: function(data){
								if(data.length)
								{
									$('#p_calendar_empty').hide();
									$('#p_calendar_container').html(data).show();
									kinkaa.webint.cal = 1;
								}
								else
								{
									$('#p_calendar_container').hide();
									if(kinkaa.webint.cal)									
										$('#p_calendar_empty').show();
								}
							}
						});
					}
					else
						$('#p_calendar_container').hide();
				}

				*/
			}
		}

		$('.airport_input').kautocompletion({ after_insert:kinkaa.func.pcalendar, url:kinkaa.webint.base_path+'suggest_flight_airport.php', error_report: (kinkaa.webint.devel?false:true)});
		$('#img_date_depart').kcalendar('date_depart', {date_format:kinkaa.webint.date_format,
								date_separator:kinkaa.webint.date_separator,
								first_day_of_week:kinkaa.webint.date_first_day_of_week,
								max_months : 12,
								callback:function(){
									kinkaa.func.pcalendar();
									if(kinkaa.search_data && kinkaa.search_data.meta && kinkaa.search_data.meta.filter_settings && kinkaa.search_data.meta.filter_settings.cpc[5])
										$('#date_depart').removeClass('field_invalid');
								}
		}).show();
		$('#img_date_return').kcalendar('date_return', {date_format:kinkaa.webint.date_format,
								date_separator:kinkaa.webint.date_separator,
								first_day_of_week:kinkaa.webint.date_first_day_of_week,
								max_months : 12,
								callback:function()
								{
									if(kinkaa.search_data && kinkaa.search_data.meta && kinkaa.search_data.meta.filter_settings && kinkaa.search_data.meta.filter_settings.cpc[5])
										$('#date_return').removeClass('field_invalid');

                                                                        kinkaa.func.pcalendar();
									kinkaa.func.search_execute();
								}
		}).show();
		$('#img_date_depart').kcalmanager('#img_date_return', {'init_date':new Date(date_today.getTime() + 1209600000), 'diff':7});

		$('#oneway').bind('click', function()
		{
			if ($('#oneway').attr('checked'))
			{
				$('#date_return_inputs').hide();
				$('#oneway_combination_c').hide();
				$('#dates_not_known').attr('checked', false).attr('disabled', 'disabled');
				$('#dates_not_known_c').hide();

				$('.date_input').attr('disabled', '');
	                        $.each($('.img_calendar'), function(){this.change_state(1)});
        	                if(kinkaa.webint.type == 'car')
        	                {
                	                $('#pickup_time').attr('disabled', '');
                        	        $('#dropoff_time').attr('disabled', '');
	                        }

                                kinkaa.func.search_execute();
				kinkaa.func.pcalendar();
			}
			else
			{
				$('#date_return_inputs').show();
				$('#oneway_combination_c').show();
				$('#dates_not_known').attr('checked', false).attr('disabled', 'disabled');
				$('#dates_not_known_c').show();
				kinkaa.func.pcalendar();
			}
		}).attr('checked', '');

		kinkaa.webint.map_open = false;

		kinkaa.func.init_airport_atlas = function()
		{
			kinkaa.func.show_dialog('map_help', true, {w:50});
			$('#bigmap').open_airport_atlas();
			kinkaa.webint.map_open = true;
			kinkaa.webint.gmap_loaded = true;
		}

		$('.airport_atlas').corner('6px').click(function()
		{
			var dest = this.id.replace(/airport_atlas_/, '');
			kinkaa.kmap.airport_atlas_dest_field = '#'+dest;

			if(!kinkaa.webint.map_open)
			{
				if(!kinkaa.webint.gmap_loaded)
					kinkaa.func.load_gmap_script('init_airport_atlas');
				else
					kinkaa.func.init_airport_atlas();
			}
			else
			{
				$('#map_help').hide();
				kinkaa.webint.map_open = false;
			}

			kinkaa.webint.map_last_dest = kinkaa.kmap.airport_atlas_dest_field;
		});

		$('.airport_input').bind('focus', function(){
			kinkaa.kmap.airport_atlas_dest_field = '#'+this.id;
		});
	}
	else if('car' == kinkaa.webint.type)
	{
		$.kinput_example(
		{
			'pickup_location': '(z.B. Zürich, Schweiz oder Bordeaux, Frankreich)',
			'dropoff_location': '(z.B. Zürich, Schweiz oder Hamburg, Deutschland)'
		});
		$('.city_input').kautocompletion({url:kinkaa.webint.base_path+'suggest_all_city.php', error_report: (kinkaa.webint.devel?false:true), error_report_type:kinkaa.webint.domain_version == 1 ?2:1,
				after_insert: function(field)
					{
						if ('pickup_location' == field.id)	// copy to dest for cars
						{
							$drop = $('#dropoff_location');
							$drop.focus();
							if(!$drop.val()) 
							{
								$drop.val($('#pickup_location').val());
								$drop.attr('city_id', $('#pickup_location').attr('city_id'));
							}
						}
						kinkaa.func.check_wizard();
					}
		});

		$('#img_pickup_date').kcalendar('pickup_date', {date_format:kinkaa.webint.date_format,
								date_separator:kinkaa.webint.date_separator,
								first_day_of_week:kinkaa.webint.date_first_day_of_week,
								max_months : 12,
								type: 'car',
								callback:function()
								{
									if(kinkaa.search_data && kinkaa.search_data.meta && kinkaa.search_data.meta.filter_settings && kinkaa.search_data.meta.filter_settings.cpc[5])
										$('#pickup_date').removeClass('field_invalid');
								}
		}).show();
		$('#img_dropoff_date').kcalendar('dropoff_date', {date_format:kinkaa.webint.date_format,
								date_separator:kinkaa.webint.date_separator,
								first_day_of_week:kinkaa.webint.date_first_day_of_week,
								max_months : 12,
								type: 'car',
								callback:function()
								{
									if(kinkaa.search_data && kinkaa.search_data.meta && kinkaa.search_data.meta.filter_settings && kinkaa.search_data.meta.filter_settings.cpc[5])
										$('#dropoff_date').removeClass('field_invalid');
									kinkaa.func.search_execute();
								}
		}).show();
		$('#img_pickup_date').kcalmanager('#img_dropoff_date', {'init_date':new Date(date_today.getTime() + 1209600000), 'diff':2, 'min_diff':1});
	}
	else if('package' == kinkaa.webint.type)
	{
		$('.package_airport_from').kautocompletion({after_insert:kinkaa.func.check_wizard, url:kinkaa.webint.base_path+'suggest_flight_airport.php', error_report: (kinkaa.webint.devel?false:true)});
		$('.package_airport_to').kautocompletion({after_insert:kinkaa.func.check_wizard, url:kinkaa.webint.base_path+'suggest_package_airport.php?d=to', error_report: (kinkaa.webint.devel?false:true)});
		$('#img_package_date_depart').kcalendar('package_date_depart', {date_format:kinkaa.webint.date_format,
								date_separator:kinkaa.webint.date_separator,
								first_day_of_week:kinkaa.webint.date_first_day_of_week,
								max_months : 12,
								type: 'package',
								callback:function()
								{
									if(kinkaa.search_data && kinkaa.search_data.meta && kinkaa.search_data.meta.filter_settings && kinkaa.search_data.meta.filter_settings.cpc[5])
										$('#package_date_depart').removeClass('field_invalid');
								}
		}).show();
		
		$('#package_duration').bind('change', function(){
				kinkaa.func.search_execute();
		});

		if('html' == kinkaa.webint.page)
		{
			if($('#img_package_date_depart')[0])
				$('#img_package_date_depart')[0].set_date(new Date(date_today.getTime() + 1209600000));
		}
	
		$.kinput_example(
		{
			'package_airport_to': '(z.B. Mallorca, Spanien)',
			'package_airport_from': '(z.B. Hamburg oder HAM)'
		});
	}

	var cookie = jQuery.cookie('kinkaa_user');
	if(cookie)
	{
		eval('kinkaa.webint.user = '+cookie);

		$('#navigation_login').hide();
		$('#navigation_logout').show();

		$('#profile_button').html(kinkaa.webint.user.name);

		if(kinkaa.webint.user.preffered_airport && kinkaa.webint.page == 'html')
		{
			$('#airport_from').focus();
	
			setTimeout(function(){
				var tmp = $('#airport_from').attr('value');
				if(!tmp || !tmp.length)
					$('#airport_from').attr('value', kinkaa.webint.user.preffered_airport);}, 100);
		}
	}

	$('.tab').corner("round top 9px");

	if(kinkaa.webint.dynamic_ad_container)
	{
		$.each(kinkaa.webint.dynamic_ad_container, function(){
			$('#'+this).html(kinkaa.webint.adv['oa_'+this+'_'+kinkaa.webint.type]);
		});
	}

	$('#dates_not_known').bind('click', function()
	{
		if ($('#dates_not_known').attr('checked'))
		{
			$('.date_input').attr('disabled', 'disabled');
			$.each($('.img_calendar'), function(){this.change_state(0)});
			if(kinkaa.webint.type == 'car')
			{
				$('#pickup_time').attr('disabled', 'disabled');
				$('#dropoff_time').attr('disabled', 'disabled');
			}
		}
		else
		{
			$('.date_input').attr('disabled', '');
			$.each($('.img_calendar'), function(){this.change_state(1)});
			if(kinkaa.webint.type == 'car')
			{
				$('#pickup_time').attr('disabled', '');
				$('#dropoff_time').attr('disabled', '');
			}
		}
	});

	if(kinkaa.webint.page == 'html')
		$('#dates_not_known').attr('checked', false).attr('disabled', 'disabled');

	$('#html_gobutton').bind('mouseup', function (){
		$(this).css('cursor','wait');
		$('html').css('cursor','wait');
		$('#html_gobutton_image').attr('className', 'html_gobutton_active');
	}).bind('click', function (){
		$(this).css('cursor','wait');
		$('html').css('cursor','wait');
		$('#html_gobutton_image').attr('className', 'html_gobutton_inactive');
	});
});

$(function(){

	$('#more_hotels').toggle(function(){
		$('#more_hotels_container').show();
		$('#more_hotels_txt').html('Weniger Links -');
	}, function(){
		$('#more_hotels_container').hide();
		$('#more_hotels_txt').html('Mehr Links +');
	});

	$('#more_countries').toggle(function(){
		$('#more_countries_container').show();
		$('#more_countries_txt').html('Weniger Links -');
	}, function(){
		$('#more_countries_container').hide();
		$('#more_countries_txt').html('Mehr Links +');
	});

	$('#nearby_hotels').toggle(function(){
		$('#nearby_hotels_container').show();
		$('#nearby_hotels_txt').html('Weniger Links -');
	}, function(){
		$('#nearby_hotels_container').hide();
		$('#nearby_hotels_txt').html('Mehr Links +');
	});

	$('#h_photos').show();
	initLytebox();
	
});

