 var framework_path = '/shared/externals/ajax/'; var framework_files = []; var modules_path = '/modules/js/'; var files = new Array('extends','ext__array','ext__ajax','ext__web'); var Core = {}; if(typeof(callback) == 'undefined') { var callback = false; }
var $call_url = '/'; window.onload = function(ev) { Core = new Core(callback); if(typeof(startList) != 'undefined') { startList(); }
};
 if(!framework_path) { var framework_path = 'shared/ajax/'; }
if(!framework_files) { var framework_files = new Array('prototype','scriptaculous'); }else if(framework_files.length <= 0) { var framework_files = false; }
var externals = new Array(); if(framework_files) { for(var i = 0; i < framework_files.length; i++) { document.write('<script type="text/javascript" src="'+framework_path+framework_files[i]+'.js"></script>'); }
delete framework_files; }
if(!files) { var files = new Array('resize','loader','autocompleter','keys','calendar','debug','extends','ext__web','ext__ajax','ext__element','ext__effects','ext__utf8','ext__array'); }else if(files.length <= 0) { var files = false; }
if(files) { for(var i = 0; i < files.length; i++) { if(files[i].match(/ext__/)) { var module = files[i].split('__'); if(module[1]) { externals[module[1]] = true; }
delete module; }
else { document.write('<script type="text/javascript" src="'+framework_path+'jbc__'+files[i]+'.js"></script>'); }
delete files[i]; }
delete files; }

var Prototype={Version:'1.6.0.2',Browser:{IE:!!(window.attachEvent&&!window.opera),Opera:!!window.opera,WebKit:navigator.userAgent.indexOf('AppleWebKit/')>-1,Gecko:navigator.userAgent.indexOf('Gecko')>-1&&navigator.userAgent.indexOf('KHTML')==-1,MobileSafari:!!navigator.userAgent.match(/Apple.*Mobile.*Safari/)},BrowserFeatures:{XPath:!!document.evaluate,ElementExtensions:!!window.HTMLElement,SpecificElementExtensions:document.createElement('div').__proto__&&document.createElement('div').__proto__!==document.createElement('form').__proto__},ScriptFragment:'<script[^>]*>([\\S\\s]*?)<\/script>',JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,emptyFunction:function(){},K:function(x){return x}};if(Prototype.Browser.MobileSafari)Prototype.BrowserFeatures.SpecificElementExtensions=false;var Class={create:function(){var a=null,properties=$A(arguments);if(Object.isFunction(properties[0]))a=properties.shift();function klass(){this.initialize.apply(this,arguments)}Object.extend(klass,Class.Methods);klass.superclass=a;klass.subclasses=[];if(a){var b=function(){};b.prototype=a.prototype;klass.prototype=new b;a.subclasses.push(klass)}for(var i=0;i<properties.length;i++)klass.addMethods(properties[i]);if(!klass.prototype.initialize)klass.prototype.initialize=Prototype.emptyFunction;klass.prototype.constructor=klass;return klass}};Class.Methods={addMethods:function(a){var b=this.superclass&&this.superclass.prototype;var c=Object.keys(a);if(!Object.keys({toString:true}).length)c.push("toString","valueOf");for(var i=0,length=c.length;i<length;i++){var d=c[i],value=a[d];if(b&&Object.isFunction(value)&&value.argumentNames().first()=="$super"){var e=value,value=Object.extend((function(m){return function(){return b[m].apply(this,arguments)}})(d).wrap(e),{valueOf:function(){return e},toString:function(){return e.toString()}})}this.prototype[d]=value}return this}};var Abstract={};Object.extend=function(a,b){for(var c in b)a[c]=b[c];return a};Object.extend(Object,{inspect:function(a){try{if(Object.isUndefined(a))return'undefined';if(a===null)return'null';return a.inspect?a.inspect():String(a)}catch(e){if(e instanceof RangeError)return'...';throw e;}},toJSON:function(a){var b=typeof a;switch(b){case'undefined':case'function':case'unknown':return;case'boolean':return a.toString()}if(a===null)return'null';if(a.toJSON)return a.toJSON();if(Object.isElement(a))return;var c=[];for(var d in a){var e=Object.toJSON(a[d]);if(!Object.isUndefined(e))c.push(d.toJSON()+': '+e)}return'{'+c.join(', ')+'}'},toQueryString:function(a){return $H(a).toQueryString()},toHTML:function(a){return a&&a.toHTML?a.toHTML():String.interpret(a)},keys:function(a){var b=[];for(var c in a)b.push(c);return b},values:function(a){var b=[];for(var c in a)b.push(a[c]);return b},clone:function(a){return Object.extend({},a)},isElement:function(a){return a&&a.nodeType==1},isArray:function(a){return a!=null&&typeof a=="object"&&'splice'in a&&'join'in a},isHash:function(a){return a instanceof Hash},isFunction:function(a){return typeof a=="function"},isString:function(a){return typeof a=="string"},isNumber:function(a){return typeof a=="number"},isUndefined:function(a){return typeof a=="undefined"}});Object.extend(Function.prototype,{argumentNames:function(){var a=this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip");return a.length==1&&!a[0]?[]:a},bind:function(){if(arguments.length<2&&Object.isUndefined(arguments[0]))return this;var a=this,args=$A(arguments),object=args.shift();return function(){return a.apply(object,args.concat($A(arguments)))}},bindAsEventListener:function(){var b=this,args=$A(arguments),object=args.shift();return function(a){return b.apply(object,[a||window.event].concat(args))}},curry:function(){if(!arguments.length)return this;var a=this,args=$A(arguments);return function(){return a.apply(this,args.concat($A(arguments)))}},delay:function(){var a=this,args=$A(arguments),timeout=args.shift()*1000;return window.setTimeout(function(){return a.apply(a,args)},timeout)},wrap:function(a){var b=this;return function(){return a.apply(this,[b.bind(this)].concat($A(arguments)))}},methodize:function(){if(this._methodized)return this._methodized;var a=this;return this._methodized=function(){return a.apply(null,[this].concat($A(arguments)))}}});Function.prototype.defer=Function.prototype.delay.curry(0.01);Date.prototype.toJSON=function(){return'"'+this.getUTCFullYear()+'-'+(this.getUTCMonth()+1).toPaddedString(2)+'-'+this.getUTCDate().toPaddedString(2)+'T'+this.getUTCHours().toPaddedString(2)+':'+this.getUTCMinutes().toPaddedString(2)+':'+this.getUTCSeconds().toPaddedString(2)+'Z"'};var Try={these:function(){var a;for(var i=0,length=arguments.length;i<length;i++){var b=arguments[i];try{a=b();break}catch(e){}}return a}};RegExp.prototype.match=RegExp.prototype.test;RegExp.escape=function(a){return String(a).replace(/([.*+?^=!:${}()|[\]\/\\])/g,'\\$1')};var PeriodicalExecuter=Class.create({initialize:function(a,b){this.callback=a;this.frequency=b;this.currentlyExecuting=false;this.registerCallback()},registerCallback:function(){this.timer=setInterval(this.onTimerEvent.bind(this),this.frequency*1000)},execute:function(){this.callback(this)},stop:function(){if(!this.timer)return;clearInterval(this.timer);this.timer=null},onTimerEvent:function(){if(!this.currentlyExecuting){try{this.currentlyExecuting=true;this.execute()}finally{this.currentlyExecuting=false}}}});Object.extend(String,{interpret:function(a){return a==null?'':String(a)},specialChar:{'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','\\':'\\\\'}});Object.extend(String.prototype,{gsub:function(a,b){var c='',source=this,match;b=arguments.callee.prepareReplacement(b);while(source.length>0){if(match=source.match(a)){c+=source.slice(0,match.index);c+=String.interpret(b(match));source=source.slice(match.index+match[0].length)}else{c+=source,source=''}}return c},sub:function(b,c,d){c=this.gsub.prepareReplacement(c);d=Object.isUndefined(d)?1:d;return this.gsub(b,function(a){if(--d<0)return a[0];return c(a)})},scan:function(a,b){this.gsub(a,b);return String(this)},truncate:function(a,b){a=a||30;b=Object.isUndefined(b)?'...':b;return this.length>a?this.slice(0,a-b.length)+b:String(this)},strip:function(){return this.replace(/^\s+/,'').replace(/\s+$/,'')},stripTags:function(){return this.replace(/<\/?[^>]+>/gi,'')},stripScripts:function(){return this.replace(new RegExp(Prototype.ScriptFragment,'img'),'')},extractScripts:function(){var b=new RegExp(Prototype.ScriptFragment,'img');var c=new RegExp(Prototype.ScriptFragment,'im');return(this.match(b)||[]).map(function(a){return(a.match(c)||['',''])[1]})},evalScripts:function(){return this.extractScripts().map(function(a){return eval(a)})},escapeHTML:function(){var a=arguments.callee;a.text.data=this;return a.div.innerHTML},unescapeHTML:function(){var c=new Element('div');c.innerHTML=this.stripTags();return c.childNodes[0]?(c.childNodes.length>1?$A(c.childNodes).inject('',function(a,b){return a+b.nodeValue}):c.childNodes[0].nodeValue):''},toQueryParams:function(e){var f=this.strip().match(/([^?#]*)(#.*)?$/);if(!f)return{};return f[1].split(e||'&').inject({},function(a,b){if((b=b.split('='))[0]){var c=decodeURIComponent(b.shift());var d=b.length>1?b.join('='):b[0];if(d!=undefined)d=decodeURIComponent(d);if(c in a){if(!Object.isArray(a[c]))a[c]=[a[c]];a[c].push(d)}else a[c]=d}return a})},toArray:function(){return this.split('')},succ:function(){return this.slice(0,this.length-1)+String.fromCharCode(this.charCodeAt(this.length-1)+1)},times:function(a){return a<1?'':new Array(a+1).join(this)},camelize:function(){var a=this.split('-'),len=a.length;if(len==1)return a[0];var b=this.charAt(0)=='-'?a[0].charAt(0).toUpperCase()+a[0].substring(1):a[0];for(var i=1;i<len;i++)b+=a[i].charAt(0).toUpperCase()+a[i].substring(1);return b},capitalize:function(){return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase()},underscore:function(){return this.gsub(/::/,'/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase()},dasherize:function(){return this.gsub(/_/,'-')},inspect:function(c){var d=this.gsub(/[\x00-\x1f\\]/,function(a){var b=String.specialChar[a[0]];return b?b:'\\u00'+a[0].charCodeAt().toPaddedString(2,16)});if(c)return'"'+d.replace(/"/g,'\\"')+'"';return"'"+d.replace(/'/g,'\\\'')+"'"},toJSON:function(){return this.inspect(true)},unfilterJSON:function(a){return this.sub(a||Prototype.JSONFilter,'#{1}')},isJSON:function(){var a=this;if(a.blank())return false;a=this.replace(/\\./g,'@').replace(/"[^"\\\n\r]*"/g,'');return(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(a)},evalJSON:function(a){var b=this.unfilterJSON();try{if(!a||b.isJSON())return eval('('+b+')')}catch(e){}throw new SyntaxError('Badly formed JSON string: '+this.inspect());},include:function(a){return this.indexOf(a)>-1},startsWith:function(a){return this.indexOf(a)===0},endsWith:function(a){var d=this.length-a.length;return d>=0&&this.lastIndexOf(a)===d},empty:function(){return this==''},blank:function(){return/^\s*$/.test(this)},interpolate:function(a,b){return new Template(this,b).evaluate(a)}});if(Prototype.Browser.WebKit||Prototype.Browser.IE)Object.extend(String.prototype,{escapeHTML:function(){return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;')},unescapeHTML:function(){return this.replace(/&amp;/g,'&').replace(/&lt;/g,'<').replace(/&gt;/g,'>')}});String.prototype.gsub.prepareReplacement=function(b){if(Object.isFunction(b))return b;var c=new Template(b);return function(a){return c.evaluate(a)}};String.prototype.parseQuery=String.prototype.toQueryParams;Object.extend(String.prototype.escapeHTML,{div:document.createElement('div'),text:document.createTextNode('')});with(String.prototype.escapeHTML)div.appendChild(text);var Template=Class.create({initialize:function(a,b){this.template=a.toString();this.pattern=b||Template.Pattern},evaluate:function(f){if(Object.isFunction(f.toTemplateReplacements))f=f.toTemplateReplacements();return this.template.gsub(this.pattern,function(a){if(f==null)return'';var b=a[1]||'';if(b=='\\')return a[2];var c=f,expr=a[3];var d=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;a=d.exec(expr);if(a==null)return b;while(a!=null){var e=a[1].startsWith('[')?a[2].gsub('\\\\]',']'):a[1];c=c[e];if(null==c||''==a[3])break;expr=expr.substring('['==a[3]?a[1].length:a[0].length);a=d.exec(expr)}return b+String.interpret(c)})}});Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;var $break={};var Enumerable={each:function(b,c){var d=0;b=b.bind(c);try{this._each(function(a){b(a,d++)})}catch(e){if(e!=$break)throw e;}return this},eachSlice:function(a,b,c){b=b?b.bind(c):Prototype.K;var d=-a,slices=[],array=this.toArray();while((d+=a)<array.length)slices.push(array.slice(d,d+a));return slices.collect(b,c)},all:function(c,d){c=c?c.bind(d):Prototype.K;var e=true;this.each(function(a,b){e=e&&!!c(a,b);if(!e)throw $break;});return e},any:function(c,d){c=c?c.bind(d):Prototype.K;var e=false;this.each(function(a,b){if(e=!!c(a,b))throw $break;});return e},collect:function(c,d){c=c?c.bind(d):Prototype.K;var e=[];this.each(function(a,b){e.push(c(a,b))});return e},detect:function(c,d){c=c.bind(d);var e;this.each(function(a,b){if(c(a,b)){e=a;throw $break;}});return e},findAll:function(c,d){c=c.bind(d);var e=[];this.each(function(a,b){if(c(a,b))e.push(a)});return e},grep:function(c,d,e){d=d?d.bind(e):Prototype.K;var f=[];if(Object.isString(c))c=new RegExp(c);this.each(function(a,b){if(c.match(a))f.push(d(a,b))});return f},include:function(b){if(Object.isFunction(this.indexOf))if(this.indexOf(b)!=-1)return true;var c=false;this.each(function(a){if(a==b){c=true;throw $break;}});return c},inGroupsOf:function(b,c){c=Object.isUndefined(c)?null:c;return this.eachSlice(b,function(a){while(a.length<b)a.push(c);return a})},inject:function(c,d,e){d=d.bind(e);this.each(function(a,b){c=d(c,a,b)});return c},invoke:function(b){var c=$A(arguments).slice(1);return this.map(function(a){return a[b].apply(a,c)})},max:function(c,d){c=c?c.bind(d):Prototype.K;var e;this.each(function(a,b){a=c(a,b);if(e==null||a>=e)e=a});return e},min:function(c,d){c=c?c.bind(d):Prototype.K;var e;this.each(function(a,b){a=c(a,b);if(e==null||a<e)e=a});return e},partition:function(c,d){c=c?c.bind(d):Prototype.K;var e=[],falses=[];this.each(function(a,b){(c(a,b)?e:falses).push(a)});return[e,falses]},pluck:function(b){var c=[];this.each(function(a){c.push(a[b])});return c},reject:function(c,d){c=c.bind(d);var e=[];this.each(function(a,b){if(!c(a,b))e.push(a)});return e},sortBy:function(e,f){e=e.bind(f);return this.map(function(a,b){return{value:a,criteria:e(a,b)}}).sort(function(c,d){var a=c.criteria,b=d.criteria;return a<b?-1:a>b?1:0}).pluck('value')},toArray:function(){return this.map()},zip:function(){var c=Prototype.K,args=$A(arguments);if(Object.isFunction(args.last()))c=args.pop();var d=[this].concat(args).map($A);return this.map(function(a,b){return c(d.pluck(b))})},size:function(){return this.toArray().length},inspect:function(){return'#<Enumerable:'+this.toArray().inspect()+'>'}};Object.extend(Enumerable,{map:Enumerable.collect,find:Enumerable.detect,select:Enumerable.findAll,filter:Enumerable.findAll,member:Enumerable.include,entries:Enumerable.toArray,every:Enumerable.all,some:Enumerable.any});function $A(a){if(!a)return[];if(a.toArray)return a.toArray();var b=a.length||0,results=new Array(b);while(b--)results[b]=a[b];return results}if(Prototype.Browser.WebKit){$A=function(a){if(!a)return[];if(!(Object.isFunction(a)&&a=='[object NodeList]')&&a.toArray)return a.toArray();var b=a.length||0,results=new Array(b);while(b--)results[b]=a[b];return results}}Array.from=$A;Object.extend(Array.prototype,Enumerable);if(!Array.prototype._reverse)Array.prototype._reverse=Array.prototype.reverse;Object.extend(Array.prototype,{_each:function(a){for(var i=0,length=this.length;i<length;i++)a(this[i])},clear:function(){this.length=0;return this},first:function(){return this[0]},last:function(){return this[this.length-1]},compact:function(){return this.select(function(a){return a!=null})},flatten:function(){return this.inject([],function(a,b){return a.concat(Object.isArray(b)?b.flatten():[b])})},without:function(){var b=$A(arguments);return this.select(function(a){return!b.include(a)})},reverse:function(a){return(a!==false?this:this.toArray())._reverse()},reduce:function(){return this.length>1?this:this[0]},uniq:function(d){return this.inject([],function(a,b,c){if(0==c||(d?a.last()!=b:!a.include(b)))a.push(b);return a})},intersect:function(c){return this.uniq().findAll(function(b){return c.detect(function(a){return b===a})})},clone:function(){return[].concat(this)},size:function(){return this.length},inspect:function(){return'['+this.map(Object.inspect).join(', ')+']'},toJSON:function(){var c=[];this.each(function(a){var b=Object.toJSON(a);if(!Object.isUndefined(b))c.push(b)});return'['+c.join(', ')+']'}});if(Object.isFunction(Array.prototype.forEach))Array.prototype._each=Array.prototype.forEach;if(!Array.prototype.indexOf)Array.prototype.indexOf=function(a,i){i||(i=0);var b=this.length;if(i<0)i=b+i;for(;i<b;i++)if(this[i]===a)return i;return-1};if(!Array.prototype.lastIndexOf)Array.prototype.lastIndexOf=function(a,i){i=isNaN(i)?this.length:(i<0?this.length+i:i)+1;var n=this.slice(0,i).reverse().indexOf(a);return(n<0)?n:i-n-1};Array.prototype.toArray=Array.prototype.clone;function $w(a){if(!Object.isString(a))return[];a=a.strip();return a?a.split(/\s+/):[]}if(Prototype.Browser.Opera){Array.prototype.concat=function(){var a=[];for(var i=0,length=this.length;i<length;i++)a.push(this[i]);for(var i=0,length=arguments.length;i<length;i++){if(Object.isArray(arguments[i])){for(var j=0,arrayLength=arguments[i].length;j<arrayLength;j++)a.push(arguments[i][j])}else{a.push(arguments[i])}}return a}}Object.extend(Number.prototype,{toColorPart:function(){return this.toPaddedString(2,16)},succ:function(){return this+1},times:function(a){$R(0,this,true).each(a);return this},toPaddedString:function(a,b){var c=this.toString(b||10);return'0'.times(a-c.length)+c},toJSON:function(){return isFinite(this)?this.toString():'null'}});$w('abs round ceil floor').each(function(a){Number.prototype[a]=Math[a].methodize()});function $H(a){return new Hash(a)};var Hash=Class.create(Enumerable,(function(){function toQueryPair(a,b){if(Object.isUndefined(b))return a;return a+'='+encodeURIComponent(String.interpret(b))}return{initialize:function(a){this._object=Object.isHash(a)?a.toObject():Object.clone(a)},_each:function(a){for(var b in this._object){var c=this._object[b],pair=[b,c];pair.key=b;pair.value=c;a(pair)}},set:function(a,b){return this._object[a]=b},get:function(a){return this._object[a]},unset:function(a){var b=this._object[a];delete this._object[a];return b},toObject:function(){return Object.clone(this._object)},keys:function(){return this.pluck('key')},values:function(){return this.pluck('value')},index:function(b){var c=this.detect(function(a){return a.value===b});return c&&c.key},merge:function(a){return this.clone().update(a)},update:function(c){return new Hash(c).inject(this,function(a,b){a.set(b.key,b.value);return a})},toQueryString:function(){return this.map(function(a){var b=encodeURIComponent(a.key),values=a.value;if(values&&typeof values=='object'){if(Object.isArray(values))return values.map(toQueryPair.curry(b)).join('&')}return toQueryPair(b,values)}).join('&')},inspect:function(){return'#<Hash:{'+this.map(function(a){return a.map(Object.inspect).join(': ')}).join(', ')+'}>'},toJSON:function(){return Object.toJSON(this.toObject())},clone:function(){return new Hash(this)}}})());Hash.prototype.toTemplateReplacements=Hash.prototype.toObject;Hash.from=$H;var ObjectRange=Class.create(Enumerable,{initialize:function(a,b,c){this.start=a;this.end=b;this.exclusive=c},_each:function(a){var b=this.start;while(this.include(b)){a(b);b=b.succ()}},include:function(a){if(a<this.start)return false;if(this.exclusive)return a<this.end;return a<=this.end}});var $R=function(a,b,c){return new ObjectRange(a,b,c)};var Ajax={getTransport:function(){return Try.these(function(){return new XMLHttpRequest()},function(){return new ActiveXObject('Msxml2.XMLHTTP')},function(){return new ActiveXObject('Microsoft.XMLHTTP')})||false},activeRequestCount:0};Ajax.Responders={responders:[],_each:function(a){this.responders._each(a)},register:function(a){if(!this.include(a))this.responders.push(a)},unregister:function(a){this.responders=this.responders.without(a)},dispatch:function(b,c,d,f){this.each(function(a){if(Object.isFunction(a[b])){try{a[b].apply(a,[c,d,f])}catch(e){}}})}};Object.extend(Ajax.Responders,Enumerable);Ajax.Responders.register({onCreate:function(){Ajax.activeRequestCount++},onComplete:function(){Ajax.activeRequestCount--}});Ajax.Base=Class.create({initialize:function(a){this.options={method:'post',asynchronous:true,contentType:'application/x-www-form-urlencoded',encoding:'UTF-8',parameters:'',evalJSON:true,evalJS:true};Object.extend(this.options,a||{});this.options.method=this.options.method.toLowerCase();if(Object.isString(this.options.parameters))this.options.parameters=this.options.parameters.toQueryParams();else if(Object.isHash(this.options.parameters))this.options.parameters=this.options.parameters.toObject()}});Ajax.Request=Class.create(Ajax.Base,{_complete:false,initialize:function($super,b,c){$super(c);this.transport=Ajax.getTransport();this.request(b)},request:function(a){this.url=a;this.method=this.options.method;var b=Object.clone(this.options.parameters);if(!['get','post'].include(this.method)){b['_method']=this.method;this.method='post'}this.parameters=b;if(b=Object.toQueryString(b)){if(this.method=='get')this.url+=(this.url.include('?')?'&':'?')+b;else if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))b+='&_='}try{var c=new Ajax.Response(this);if(this.options.onCreate)this.options.onCreate(c);Ajax.Responders.dispatch('onCreate',this,c);this.transport.open(this.method.toUpperCase(),this.url,this.options.asynchronous);if(this.options.asynchronous)this.respondToReadyState.bind(this).defer(1);this.transport.onreadystatechange=this.onStateChange.bind(this);this.setRequestHeaders();this.body=this.method=='post'?(this.options.postBody||b):null;this.transport.send(this.body);if(!this.options.asynchronous&&this.transport.overrideMimeType)this.onStateChange()}catch(e){this.dispatchException(e)}},onStateChange:function(){var a=this.transport.readyState;if(a>1&&!((a==4)&&this._complete))this.respondToReadyState(this.transport.readyState)},setRequestHeaders:function(){var b={'X-Requested-With':'XMLHttpRequest','X-Prototype-Version':Prototype.Version,'Accept':'text/javascript, text/html, application/xml, text/xml, */*'};if(this.method=='post'){b['Content-type']=this.options.contentType+(this.options.encoding?'; charset='+this.options.encoding:'');if(this.transport.overrideMimeType&&(navigator.userAgent.match(/Gecko\/(\d{4})/)||[0,2005])[1]<2005)b['Connection']='close'}if(typeof this.options.requestHeaders=='object'){var c=this.options.requestHeaders;if(Object.isFunction(c.push))for(var i=0,length=c.length;i<length;i+=2)b[c[i]]=c[i+1];else $H(c).each(function(a){b[a.key]=a.value})}for(var d in b)this.transport.setRequestHeader(d,b[d])},success:function(){var a=this.getStatus();return!a||(a>=200&&a<300)},getStatus:function(){try{return this.transport.status||0}catch(e){return 0}},respondToReadyState:function(a){var b=Ajax.Request.Events[a],response=new Ajax.Response(this);if(b=='Complete'){try{this._complete=true;(this.options['on'+response.status]||this.options['on'+(this.success()?'Success':'Failure')]||Prototype.emptyFunction)(response,response.headerJSON)}catch(e){this.dispatchException(e)}var c=response.getHeader('Content-type');if(this.options.evalJS=='force'||(this.options.evalJS&&this.isSameOrigin()&&c&&c.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))this.evalResponse()}try{(this.options['on'+b]||Prototype.emptyFunction)(response,response.headerJSON);Ajax.Responders.dispatch('on'+b,this,response,response.headerJSON)}catch(e){this.dispatchException(e)}if(b=='Complete'){this.transport.onreadystatechange=Prototype.emptyFunction}},isSameOrigin:function(){var m=this.url.match(/^\s*https?:\/\/[^\/]*/);return!m||(m[0]=='#{protocol}//#{domain}#{port}'.interpolate({protocol:location.protocol,domain:document.domain,port:location.port?':'+location.port:''}))},getHeader:function(a){try{return this.transport.getResponseHeader(a)||null}catch(e){return null}},evalResponse:function(){try{return eval((this.transport.responseText||'').unfilterJSON())}catch(e){this.dispatchException(e)}},dispatchException:function(a){(this.options.onException||Prototype.emptyFunction)(this,a);Ajax.Responders.dispatch('onException',this,a)}});Ajax.Request.Events=['Uninitialized','Loading','Loaded','Interactive','Complete'];Ajax.Response=Class.create({initialize:function(a){this.request=a;var b=this.transport=a.transport,readyState=this.readyState=b.readyState;if((readyState>2&&!Prototype.Browser.IE)||readyState==4){this.status=this.getStatus();this.statusText=this.getStatusText();this.responseText=String.interpret(b.responseText);this.headerJSON=this._getHeaderJSON()}if(readyState==4){var c=b.responseXML;this.responseXML=Object.isUndefined(c)?null:c;this.responseJSON=this._getResponseJSON()}},status:0,statusText:'',getStatus:Ajax.Request.prototype.getStatus,getStatusText:function(){try{return this.transport.statusText||''}catch(e){return''}},getHeader:Ajax.Request.prototype.getHeader,getAllHeaders:function(){try{return this.getAllResponseHeaders()}catch(e){return null}},getResponseHeader:function(a){return this.transport.getResponseHeader(a)},getAllResponseHeaders:function(){return this.transport.getAllResponseHeaders()},_getHeaderJSON:function(){var a=this.getHeader('X-JSON');if(!a)return null;a=decodeURIComponent(escape(a));try{return a.evalJSON(this.request.options.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}},_getResponseJSON:function(){var a=this.request.options;if(!a.evalJSON||(a.evalJSON!='force'&&!(this.getHeader('Content-type')||'').include('application/json'))||this.responseText.blank())return null;try{return this.responseText.evalJSON(a.sanitizeJSON||!this.request.isSameOrigin())}catch(e){this.request.dispatchException(e)}}});Ajax.Updater=Class.create(Ajax.Request,{initialize:function($super,d,e,f){this.container={success:(d.success||d),failure:(d.failure||(d.success?null:d))};f=Object.clone(f);var g=f.onComplete;f.onComplete=(function(a,b){this.updateContent(a.responseText);if(Object.isFunction(g))g(a,b)}).bind(this);$super(e,f)},updateContent:function(a){var b=this.container[this.success()?'success':'failure'],options=this.options;if(!options.evalScripts)a=a.stripScripts();if(b=$(b)){if(options.insertion){if(Object.isString(options.insertion)){var c={};c[options.insertion]=a;b.insert(c)}else options.insertion(b,a)}else b.update(a)}}});Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{initialize:function($super,b,c,d){$super(d);this.onComplete=this.options.onComplete;this.frequency=(this.options.frequency||2);this.decay=(this.options.decay||1);this.updater={};this.container=b;this.url=c;this.start()},start:function(){this.options.onComplete=this.updateComplete.bind(this);this.onTimerEvent()},stop:function(){this.updater.options.onComplete=undefined;clearTimeout(this.timer);(this.onComplete||Prototype.emptyFunction).apply(this,arguments)},updateComplete:function(a){if(this.options.decay){this.decay=(a.responseText==this.lastText?this.decay*this.options.decay:1);this.lastText=a.responseText}this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency)},onTimerEvent:function(){this.updater=new Ajax.Updater(this.container,this.url,this.options)}});function $(a){if(arguments.length>1){for(var i=0,elements=[],length=arguments.length;i<length;i++)elements.push($(arguments[i]));return elements}if(Object.isString(a))a=document.getElementById(a);return Element.extend(a)}if(Prototype.BrowserFeatures.XPath){document._getElementsByXPath=function(a,b){var c=[];var d=document.evaluate(a,$(b)||document,null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);for(var i=0,length=d.snapshotLength;i<length;i++)c.push(Element.extend(d.snapshotItem(i)));return c}}if(!window.Node)var Node={};if(!Node.ELEMENT_NODE){Object.extend(Node,{ELEMENT_NODE:1,ATTRIBUTE_NODE:2,TEXT_NODE:3,CDATA_SECTION_NODE:4,ENTITY_REFERENCE_NODE:5,ENTITY_NODE:6,PROCESSING_INSTRUCTION_NODE:7,COMMENT_NODE:8,DOCUMENT_NODE:9,DOCUMENT_TYPE_NODE:10,DOCUMENT_FRAGMENT_NODE:11,NOTATION_NODE:12})}(function(){var d=this.Element;this.Element=function(a,b){b=b||{};a=a.toLowerCase();var c=Element.cache;if(Prototype.Browser.IE&&b.name){a='<'+a+' name="'+b.name+'">';delete b.name;return Element.writeAttribute(document.createElement(a),b)}if(!c[a])c[a]=Element.extend(document.createElement(a));return Element.writeAttribute(c[a].cloneNode(false),b)};Object.extend(this.Element,d||{})}).call(window);Element.cache={};Element.Methods={visible:function(a){return $(a).style.display!='none'},toggle:function(a){a=$(a);Element[Element.visible(a)?'hide':'show'](a);return a},hide:function(a){$(a).style.display='none';return a},show:function(a){$(a).style.display='';return a},remove:function(a){a=$(a);a.parentNode.removeChild(a);return a},update:function(a,b){a=$(a);if(b&&b.toElement)b=b.toElement();if(Object.isElement(b))return a.update().insert(b);b=Object.toHTML(b);a.innerHTML=b.stripScripts();b.evalScripts.bind(b).defer();return a},replace:function(a,b){a=$(a);if(b&&b.toElement)b=b.toElement();else if(!Object.isElement(b)){b=Object.toHTML(b);var c=a.ownerDocument.createRange();c.selectNode(a);b.evalScripts.bind(b).defer();b=c.createContextualFragment(b.stripScripts())}a.parentNode.replaceChild(b,a);return a},insert:function(a,b){a=$(a);if(Object.isString(b)||Object.isNumber(b)||Object.isElement(b)||(b&&(b.toElement||b.toHTML)))b={bottom:b};var c,insert,tagName,childNodes;for(var d in b){c=b[d];d=d.toLowerCase();insert=Element._insertionTranslations[d];if(c&&c.toElement)c=c.toElement();if(Object.isElement(c)){insert(a,c);continue}c=Object.toHTML(c);tagName=((d=='before'||d=='after')?a.parentNode:a).tagName.toUpperCase();childNodes=Element._getContentFromAnonymousElement(tagName,c.stripScripts());if(d=='top'||d=='after')childNodes.reverse();childNodes.each(insert.curry(a));c.evalScripts.bind(c).defer()}return a},wrap:function(a,b,c){a=$(a);if(Object.isElement(b))$(b).writeAttribute(c||{});else if(Object.isString(b))b=new Element(b,c);else b=new Element('div',b);if(a.parentNode)a.parentNode.replaceChild(b,a);b.appendChild(a);return b},inspect:function(d){d=$(d);var e='<'+d.tagName.toLowerCase();$H({'id':'id','className':'class'}).each(function(a){var b=a.first(),attribute=a.last();var c=(d[b]||'').toString();if(c)e+=' '+attribute+'='+c.inspect(true)});return e+'>'},recursivelyCollect:function(a,b){a=$(a);var c=[];while(a=a[b])if(a.nodeType==1)c.push(Element.extend(a));return c},ancestors:function(a){return $(a).recursivelyCollect('parentNode')},descendants:function(a){return $(a).select("*")},firstDescendant:function(a){a=$(a).firstChild;while(a&&a.nodeType!=1)a=a.nextSibling;return $(a)},immediateDescendants:function(a){if(!(a=$(a).firstChild))return[];while(a&&a.nodeType!=1)a=a.nextSibling;if(a)return[a].concat($(a).nextSiblings());return[]},previousSiblings:function(a){return $(a).recursivelyCollect('previousSibling')},nextSiblings:function(a){return $(a).recursivelyCollect('nextSibling')},siblings:function(a){a=$(a);return a.previousSiblings().reverse().concat(a.nextSiblings())},match:function(a,b){if(Object.isString(b))b=new Selector(b);return b.match($(a))},up:function(a,b,c){a=$(a);if(arguments.length==1)return $(a.parentNode);var d=a.ancestors();return Object.isNumber(b)?d[b]:Selector.findElement(d,b,c)},down:function(a,b,c){a=$(a);if(arguments.length==1)return a.firstDescendant();return Object.isNumber(b)?a.descendants()[b]:a.select(b)[c||0]},previous:function(a,b,c){a=$(a);if(arguments.length==1)return $(Selector.handlers.previousElementSibling(a));var d=a.previousSiblings();return Object.isNumber(b)?d[b]:Selector.findElement(d,b,c)},next:function(a,b,c){a=$(a);if(arguments.length==1)return $(Selector.handlers.nextElementSibling(a));var d=a.nextSiblings();return Object.isNumber(b)?d[b]:Selector.findElement(d,b,c)},select:function(){var a=$A(arguments),element=$(a.shift());return Selector.findChildElements(element,a)},adjacent:function(){var a=$A(arguments),element=$(a.shift());return Selector.findChildElements(element.parentNode,a).without(element)},identify:function(a){a=$(a);var b=a.readAttribute('id'),self=arguments.callee;if(b)return b;do{b='anonymous_element_'+self.counter++}while($(b));a.writeAttribute('id',b);return b},readAttribute:function(a,b){a=$(a);if(Prototype.Browser.IE){var t=Element._attributeTranslations.read;if(t.values[b])return t.values[b](a,b);if(t.names[b])b=t.names[b];if(b.include(':')){return(!a.attributes||!a.attributes[b])?null:a.attributes[b].value}}return a.getAttribute(b)},writeAttribute:function(a,b,c){a=$(a);var d={},t=Element._attributeTranslations.write;if(typeof b=='object')d=b;else d[b]=Object.isUndefined(c)?true:c;for(var e in d){b=t.names[e]||e;c=d[e];if(t.values[e])b=t.values[e](a,c);if(c===false||c===null)a.removeAttribute(b);else if(c===true)a.setAttribute(b,b);else a.setAttribute(b,c)}return a},getHeight:function(a){return $(a).getDimensions().height},getWidth:function(a){return $(a).getDimensions().width},classNames:function(a){return new Element.ClassNames(a)},hasClassName:function(a,b){if(!(a=$(a)))return;var c=a.className;return(c.length>0&&(c==b||new RegExp("(^|\\s)"+b+"(\\s|$)").test(c)))},addClassName:function(a,b){if(!(a=$(a)))return;if(!a.hasClassName(b))a.className+=(a.className?' ':'')+b;return a},removeClassName:function(a,b){if(!(a=$(a)))return;a.className=a.className.replace(new RegExp("(^|\\s+)"+b+"(\\s+|$)"),' ').strip();return a},toggleClassName:function(a,b){if(!(a=$(a)))return;return a[a.hasClassName(b)?'removeClassName':'addClassName'](b)},cleanWhitespace:function(a){a=$(a);var b=a.firstChild;while(b){var c=b.nextSibling;if(b.nodeType==3&&!/\S/.test(b.nodeValue))a.removeChild(b);b=c}return a},empty:function(a){return $(a).innerHTML.blank()},descendantOf:function(b,c){b=$(b),c=$(c);var d=c;if(b.compareDocumentPosition)return(b.compareDocumentPosition(c)&8)===8;if(b.sourceIndex&&!Prototype.Browser.Opera){var e=b.sourceIndex,a=c.sourceIndex,nextAncestor=c.nextSibling;if(!nextAncestor){do{c=c.parentNode}while(!(nextAncestor=c.nextSibling)&&c.parentNode)}if(nextAncestor&&nextAncestor.sourceIndex)return(e>a&&e<nextAncestor.sourceIndex)}while(b=b.parentNode)if(b==d)return true;return false},scrollTo:function(a){a=$(a);var b=a.cumulativeOffset();window.scrollTo(b[0],b[1]);return a},getStyle:function(a,b){a=$(a);b=b=='float'?'cssFloat':b.camelize();var c=a.style[b];if(!c){var d=document.defaultView.getComputedStyle(a,null);c=d?d[b]:null}if(b=='opacity')return c?parseFloat(c):1.0;return c=='auto'?null:c},getOpacity:function(a){return $(a).getStyle('opacity')},setStyle:function(a,b){a=$(a);var c=a.style,match;if(Object.isString(b)){a.style.cssText+=';'+b;return b.include('opacity')?a.setOpacity(b.match(/opacity:\s*(\d?\.?\d*)/)[1]):a}for(var d in b)if(d=='opacity')a.setOpacity(b[d]);else c[(d=='float'||d=='cssFloat')?(Object.isUndefined(c.styleFloat)?'cssFloat':'styleFloat'):d]=b[d];return a},setOpacity:function(a,b){a=$(a);a.style.opacity=(b==1||b==='')?'':(b<0.00001)?0:b;return a},getDimensions:function(a){a=$(a);var b=$(a).getStyle('display');if(b!='none'&&b!=null)return{width:a.offsetWidth,height:a.offsetHeight};var c=a.style;var d=c.visibility;var e=c.position;var f=c.display;c.visibility='hidden';c.position='absolute';c.display='block';var g=a.clientWidth;var h=a.clientHeight;c.display=f;c.position=e;c.visibility=d;return{width:g,height:h}},makePositioned:function(a){a=$(a);var b=Element.getStyle(a,'position');if(b=='static'||!b){a._madePositioned=true;a.style.position='relative';if(window.opera){a.style.top=0;a.style.left=0}}return a},undoPositioned:function(a){a=$(a);if(a._madePositioned){a._madePositioned=undefined;a.style.position=a.style.top=a.style.left=a.style.bottom=a.style.right=''}return a},makeClipping:function(a){a=$(a);if(a._overflow)return a;a._overflow=Element.getStyle(a,'overflow')||'auto';if(a._overflow!=='hidden')a.style.overflow='hidden';return a},undoClipping:function(a){a=$(a);if(!a._overflow)return a;a.style.overflow=a._overflow=='auto'?'':a._overflow;a._overflow=null;return a},cumulativeOffset:function(a){var b=0,valueL=0;do{b+=a.offsetTop||0;valueL+=a.offsetLeft||0;a=a.offsetParent}while(a);return Element._returnOffset(valueL,b)},positionedOffset:function(a){var b=0,valueL=0;do{b+=a.offsetTop||0;valueL+=a.offsetLeft||0;a=a.offsetParent;if(a){if(a.tagName=='BODY')break;var p=Element.getStyle(a,'position');if(p!=='static')break}}while(a);return Element._returnOffset(valueL,b)},absolutize:function(a){a=$(a);if(a.getStyle('position')=='absolute')return;var b=a.positionedOffset();var c=b[1];var d=b[0];var e=a.clientWidth;var f=a.clientHeight;a._originalLeft=d-parseFloat(a.style.left||0);a._originalTop=c-parseFloat(a.style.top||0);a._originalWidth=a.style.width;a._originalHeight=a.style.height;a.style.position='absolute';a.style.top=c+'px';a.style.left=d+'px';a.style.width=e+'px';a.style.height=f+'px';return a},relativize:function(a){a=$(a);if(a.getStyle('position')=='relative')return;a.style.position='relative';var b=parseFloat(a.style.top||0)-(a._originalTop||0);var c=parseFloat(a.style.left||0)-(a._originalLeft||0);a.style.top=b+'px';a.style.left=c+'px';a.style.height=a._originalHeight;a.style.width=a._originalWidth;return a},cumulativeScrollOffset:function(a){var b=0,valueL=0;do{b+=a.scrollTop||0;valueL+=a.scrollLeft||0;a=a.parentNode}while(a);return Element._returnOffset(valueL,b)},getOffsetParent:function(a){if(a.offsetParent)return $(a.offsetParent);if(a==document.body)return $(a);while((a=a.parentNode)&&a!=document.body)if(Element.getStyle(a,'position')!='static')return $(a);return $(document.body)},viewportOffset:function(a){var b=0,valueL=0;var c=a;do{b+=c.offsetTop||0;valueL+=c.offsetLeft||0;if(c.offsetParent==document.body&&Element.getStyle(c,'position')=='absolute')break}while(c=c.offsetParent);c=a;do{if(!Prototype.Browser.Opera||c.tagName=='BODY'){b-=c.scrollTop||0;valueL-=c.scrollLeft||0}}while(c=c.parentNode);return Element._returnOffset(valueL,b)},clonePosition:function(a,b){var c=Object.extend({setLeft:true,setTop:true,setWidth:true,setHeight:true,offsetTop:0,offsetLeft:0},arguments[2]||{});b=$(b);var p=b.viewportOffset();a=$(a);var d=[0,0];var e=null;if(Element.getStyle(a,'position')=='absolute'){e=a.getOffsetParent();d=e.viewportOffset()}if(e==document.body){d[0]-=document.body.offsetLeft;d[1]-=document.body.offsetTop}if(c.setLeft)a.style.left=(p[0]-d[0]+c.offsetLeft)+'px';if(c.setTop)a.style.top=(p[1]-d[1]+c.offsetTop)+'px';if(c.setWidth)a.style.width=b.offsetWidth+'px';if(c.setHeight)a.style.height=b.offsetHeight+'px';return a}};Element.Methods.identify.counter=1;Object.extend(Element.Methods,{getElementsBySelector:Element.Methods.select,childElements:Element.Methods.immediateDescendants});Element._attributeTranslations={write:{names:{className:'class',htmlFor:'for'},values:{}}};if(Prototype.Browser.Opera){Element.Methods.getStyle=Element.Methods.getStyle.wrap(function(d,e,f){switch(f){case'left':case'top':case'right':case'bottom':if(d(e,'position')==='static')return null;case'height':case'width':if(!Element.visible(e))return null;var g=parseInt(d(e,f),10);if(g!==e['offset'+f.capitalize()])return g+'px';var h;if(f==='height'){h=['border-top-width','padding-top','padding-bottom','border-bottom-width']}else{h=['border-left-width','padding-left','padding-right','border-right-width']}return h.inject(g,function(a,b){var c=d(e,b);return c===null?a:a-parseInt(c,10)})+'px';default:return d(e,f)}});Element.Methods.readAttribute=Element.Methods.readAttribute.wrap(function(a,b,c){if(c==='title')return b.title;return a(b,c)})}else if(Prototype.Browser.IE){Element.Methods.getOffsetParent=Element.Methods.getOffsetParent.wrap(function(a,b){b=$(b);var c=b.getStyle('position');if(c!=='static')return a(b);b.setStyle({position:'relative'});var d=a(b);b.setStyle({position:c});return d});$w('positionedOffset viewportOffset').each(function(f){Element.Methods[f]=Element.Methods[f].wrap(function(a,b){b=$(b);var c=b.getStyle('position');if(c!=='static')return a(b);var d=b.getOffsetParent();if(d&&d.getStyle('position')==='fixed')d.setStyle({zoom:1});b.setStyle({position:'relative'});var e=a(b);b.setStyle({position:c});return e})});Element.Methods.getStyle=function(a,b){a=$(a);b=(b=='float'||b=='cssFloat')?'styleFloat':b.camelize();var c=a.style[b];if(!c&&a.currentStyle)c=a.currentStyle[b];if(b=='opacity'){if(c=(a.getStyle('filter')||'').match(/alpha\(opacity=(.*)\)/))if(c[1])return parseFloat(c[1])/100;return 1.0}if(c=='auto'){if((b=='width'||b=='height')&&(a.getStyle('display')!='none'))return a['offset'+b.capitalize()]+'px';return null}return c};Element.Methods.setOpacity=function(b,c){function stripAlpha(a){return a.replace(/alpha\([^\)]*\)/gi,'')}b=$(b);var d=b.currentStyle;if((d&&!d.hasLayout)||(!d&&b.style.zoom=='normal'))b.style.zoom=1;var e=b.getStyle('filter'),style=b.style;if(c==1||c===''){(e=stripAlpha(e))?style.filter=e:style.removeAttribute('filter');return b}else if(c<0.00001)c=0;style.filter=stripAlpha(e)+'alpha(opacity='+(c*100)+')';return b};Element._attributeTranslations={read:{names:{'class':'className','for':'htmlFor'},values:{_getAttr:function(a,b){return a.getAttribute(b,2)},_getAttrNode:function(a,b){var c=a.getAttributeNode(b);return c?c.value:""},_getEv:function(a,b){b=a.getAttribute(b);return b?b.toString().slice(23,-2):null},_flag:function(a,b){return $(a).hasAttribute(b)?b:null},style:function(a){return a.style.cssText.toLowerCase()},title:function(a){return a.title}}}};Element._attributeTranslations.write={names:Object.extend({cellpadding:'cellPadding',cellspacing:'cellSpacing'},Element._attributeTranslations.read.names),values:{checked:function(a,b){a.checked=!!b},style:function(a,b){a.style.cssText=b?b:''}}};Element._attributeTranslations.has={};$w('colSpan rowSpan vAlign dateTime accessKey tabIndex '+'encType maxLength readOnly longDesc').each(function(a){Element._attributeTranslations.write.names[a.toLowerCase()]=a;Element._attributeTranslations.has[a.toLowerCase()]=a});(function(v){Object.extend(v,{href:v._getAttr,src:v._getAttr,type:v._getAttr,action:v._getAttrNode,disabled:v._flag,checked:v._flag,readonly:v._flag,multiple:v._flag,onload:v._getEv,onunload:v._getEv,onclick:v._getEv,ondblclick:v._getEv,onmousedown:v._getEv,onmouseup:v._getEv,onmouseover:v._getEv,onmousemove:v._getEv,onmouseout:v._getEv,onfocus:v._getEv,onblur:v._getEv,onkeypress:v._getEv,onkeydown:v._getEv,onkeyup:v._getEv,onsubmit:v._getEv,onreset:v._getEv,onselect:v._getEv,onchange:v._getEv})})(Element._attributeTranslations.read.values)}else if(Prototype.Browser.Gecko&&/rv:1\.8\.0/.test(navigator.userAgent)){Element.Methods.setOpacity=function(a,b){a=$(a);a.style.opacity=(b==1)?0.999999:(b==='')?'':(b<0.00001)?0:b;return a}}else if(Prototype.Browser.WebKit){Element.Methods.setOpacity=function(a,b){a=$(a);a.style.opacity=(b==1||b==='')?'':(b<0.00001)?0:b;if(b==1)if(a.tagName=='IMG'&&a.width){a.width++;a.width--}else try{var n=document.createTextNode(' ');a.appendChild(n);a.removeChild(n)}catch(e){}return a};Element.Methods.cumulativeOffset=function(a){var b=0,valueL=0;do{b+=a.offsetTop||0;valueL+=a.offsetLeft||0;if(a.offsetParent==document.body)if(Element.getStyle(a,'position')=='absolute')break;a=a.offsetParent}while(a);return Element._returnOffset(valueL,b)}}if(Prototype.Browser.IE||Prototype.Browser.Opera){Element.Methods.update=function(b,c){b=$(b);if(c&&c.toElement)c=c.toElement();if(Object.isElement(c))return b.update().insert(c);c=Object.toHTML(c);var d=b.tagName.toUpperCase();if(d in Element._insertionTranslations.tags){$A(b.childNodes).each(function(a){b.removeChild(a)});Element._getContentFromAnonymousElement(d,c.stripScripts()).each(function(a){b.appendChild(a)})}else b.innerHTML=c.stripScripts();c.evalScripts.bind(c).defer();return b}}if('outerHTML'in document.createElement('div')){Element.Methods.replace=function(b,c){b=$(b);if(c&&c.toElement)c=c.toElement();if(Object.isElement(c)){b.parentNode.replaceChild(c,b);return b}c=Object.toHTML(c);var d=b.parentNode,tagName=d.tagName.toUpperCase();if(Element._insertionTranslations.tags[tagName]){var e=b.next();var f=Element._getContentFromAnonymousElement(tagName,c.stripScripts());d.removeChild(b);if(e)f.each(function(a){d.insertBefore(a,e)});else f.each(function(a){d.appendChild(a)})}else b.outerHTML=c.stripScripts();c.evalScripts.bind(c).defer();return b}}Element._returnOffset=function(l,t){var a=[l,t];a.left=l;a.top=t;return a};Element._getContentFromAnonymousElement=function(a,b){var c=new Element('div'),t=Element._insertionTranslations.tags[a];if(t){c.innerHTML=t[0]+b+t[1];t[2].times(function(){c=c.firstChild})}else c.innerHTML=b;return $A(c.childNodes)};Element._insertionTranslations={before:function(a,b){a.parentNode.insertBefore(b,a)},top:function(a,b){a.insertBefore(b,a.firstChild)},bottom:function(a,b){a.appendChild(b)},after:function(a,b){a.parentNode.insertBefore(b,a.nextSibling)},tags:{TABLE:['<table>','</table>',1],TBODY:['<table><tbody>','</tbody></table>',2],TR:['<table><tbody><tr>','</tr></tbody></table>',3],TD:['<table><tbody><tr><td>','</td></tr></tbody></table>',4],SELECT:['<select>','</select>',1]}};(function(){Object.extend(this.tags,{THEAD:this.tags.TBODY,TFOOT:this.tags.TBODY,TH:this.tags.TD})}).call(Element._insertionTranslations);Element.Methods.Simulated={hasAttribute:function(a,b){b=Element._attributeTranslations.has[b]||b;var c=$(a).getAttributeNode(b);return c&&c.specified}};Element.Methods.ByTag={};Object.extend(Element,Element.Methods);if(!Prototype.BrowserFeatures.ElementExtensions&&document.createElement('div').__proto__){window.HTMLElement={};window.HTMLElement.prototype=document.createElement('div').__proto__;Prototype.BrowserFeatures.ElementExtensions=true}Element.extend=(function(){if(Prototype.BrowserFeatures.SpecificElementExtensions)return Prototype.K;var c={},ByTag=Element.Methods.ByTag;var d=Object.extend(function(a){if(!a||a._extendedByPrototype||a.nodeType!=1||a==window)return a;var b=Object.clone(c),tagName=a.tagName,property,value;if(ByTag[tagName])Object.extend(b,ByTag[tagName]);for(property in b){value=b[property];if(Object.isFunction(value)&&!(property in a))a[property]=value.methodize()}a._extendedByPrototype=Prototype.emptyFunction;return a},{refresh:function(){if(!Prototype.BrowserFeatures.ElementExtensions){Object.extend(c,Element.Methods);Object.extend(c,Element.Methods.Simulated)}}});d.refresh();return d})();Element.hasAttribute=function(a,b){if(a.hasAttribute)return a.hasAttribute(b);return Element.Methods.Simulated.hasAttribute(a,b)};Element.addMethods=function(f){var F=Prototype.BrowserFeatures,T=Element.Methods.ByTag;if(!f){Object.extend(Form,Form.Methods);Object.extend(Form.Element,Form.Element.Methods);Object.extend(Element.Methods.ByTag,{"FORM":Object.clone(Form.Methods),"INPUT":Object.clone(Form.Element.Methods),"SELECT":Object.clone(Form.Element.Methods),"TEXTAREA":Object.clone(Form.Element.Methods)})}if(arguments.length==2){var g=f;f=arguments[1]}if(!g)Object.extend(Element.Methods,f||{});else{if(Object.isArray(g))g.each(extend);else extend(g)}function extend(a){a=a.toUpperCase();if(!Element.Methods.ByTag[a])Element.Methods.ByTag[a]={};Object.extend(Element.Methods.ByTag[a],f)}function copy(a,b,c){c=c||false;for(var d in a){var e=a[d];if(!Object.isFunction(e))continue;if(!c||!(d in b))b[d]=e.methodize()}}function findDOMClass(a){var b;var c={"OPTGROUP":"OptGroup","TEXTAREA":"TextArea","P":"Paragraph","FIELDSET":"FieldSet","UL":"UList","OL":"OList","DL":"DList","DIR":"Directory","H1":"Heading","H2":"Heading","H3":"Heading","H4":"Heading","H5":"Heading","H6":"Heading","Q":"Quote","INS":"Mod","DEL":"Mod","A":"Anchor","IMG":"Image","CAPTION":"TableCaption","COL":"TableCol","COLGROUP":"TableCol","THEAD":"TableSection","TFOOT":"TableSection","TBODY":"TableSection","TR":"TableRow","TH":"TableCell","TD":"TableCell","FRAMESET":"FrameSet","IFRAME":"IFrame"};if(c[a])b='HTML'+c[a]+'Element';if(window[b])return window[b];b='HTML'+a+'Element';if(window[b])return window[b];b='HTML'+a.capitalize()+'Element';if(window[b])return window[b];window[b]={};window[b].prototype=document.createElement(a).__proto__;return window[b]}if(F.ElementExtensions){copy(Element.Methods,HTMLElement.prototype);copy(Element.Methods.Simulated,HTMLElement.prototype,true)}if(F.SpecificElementExtensions){for(var h in Element.Methods.ByTag){var i=findDOMClass(h);if(Object.isUndefined(i))continue;copy(T[h],i.prototype)}}Object.extend(Element,Element.Methods);delete Element.ByTag;if(Element.extend.refresh)Element.extend.refresh();Element.cache={}};document.viewport={getDimensions:function(){var a={};var B=Prototype.Browser;$w('width height').each(function(d){var D=d.capitalize();a[d]=(B.WebKit&&!document.evaluate)?self['inner'+D]:(B.Opera)?document.body['client'+D]:document.documentElement['client'+D]});return a},getWidth:function(){return this.getDimensions().width},getHeight:function(){return this.getDimensions().height},getScrollOffsets:function(){return Element._returnOffset(window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft,window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop)}};var Selector=Class.create({initialize:function(a){this.expression=a.strip();this.compileMatcher()},shouldUseXPath:function(){if(!Prototype.BrowserFeatures.XPath)return false;var e=this.expression;if(Prototype.Browser.WebKit&&(e.include("-of-type")||e.include(":empty")))return false;if((/(\[[\w-]*?:|:checked)/).test(this.expression))return false;return true},compileMatcher:function(){if(this.shouldUseXPath())return this.compileXPathMatcher();var e=this.expression,ps=Selector.patterns,h=Selector.handlers,c=Selector.criteria,le,p,m;if(Selector._cache[e]){this.matcher=Selector._cache[e];return}this.matcher=["this.matcher = function(root) {","var r = root, h = Selector.handlers, c = false, n;"];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i in ps){p=ps[i];if(m=e.match(p)){this.matcher.push(Object.isFunction(c[i])?c[i](m):new Template(c[i]).evaluate(m));e=e.replace(m[0],'');break}}}this.matcher.push("return h.unique(n);\n}");eval(this.matcher.join('\n'));Selector._cache[this.expression]=this.matcher},compileXPathMatcher:function(){var e=this.expression,ps=Selector.patterns,x=Selector.xpath,le,m;if(Selector._cache[e]){this.xpath=Selector._cache[e];return}this.matcher=['.//*'];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i in ps){if(m=e.match(ps[i])){this.matcher.push(Object.isFunction(x[i])?x[i](m):new Template(x[i]).evaluate(m));e=e.replace(m[0],'');break}}}this.xpath=this.matcher.join('');Selector._cache[this.expression]=this.xpath},findElements:function(a){a=a||document;if(this.xpath)return document._getElementsByXPath(this.xpath,a);return this.matcher(a)},match:function(a){this.tokens=[];var e=this.expression,ps=Selector.patterns,as=Selector.assertions;var b,p,m;while(e&&b!==e&&(/\S/).test(e)){b=e;for(var i in ps){p=ps[i];if(m=e.match(p)){if(as[i]){this.tokens.push([i,Object.clone(m)]);e=e.replace(m[0],'')}else{return this.findElements(document).include(a)}}}}var c=true,name,matches;for(var i=0,token;token=this.tokens[i];i++){name=token[0],matches=token[1];if(!Selector.assertions[name](a,matches)){c=false;break}}return c},toString:function(){return this.expression},inspect:function(){return"#<Selector:"+this.expression.inspect()+">"}});Object.extend(Selector,{_cache:{},xpath:{descendant:"//*",child:"/*",adjacent:"/following-sibling::*[1]",laterSibling:'/following-sibling::*',tagName:function(m){if(m[1]=='*')return'';return"[local-name()='"+m[1].toLowerCase()+"' or local-name()='"+m[1].toUpperCase()+"']"},className:"[contains(concat(' ', @class, ' '), ' #{1} ')]",id:"[@id='#{1}']",attrPresence:function(m){m[1]=m[1].toLowerCase();return new Template("[@#{1}]").evaluate(m)},attr:function(m){m[1]=m[1].toLowerCase();m[3]=m[5]||m[6];return new Template(Selector.xpath.operators[m[2]]).evaluate(m)},pseudo:function(m){var h=Selector.xpath.pseudos[m[1]];if(!h)return'';if(Object.isFunction(h))return h(m);return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m)},operators:{'=':"[@#{1}='#{3}']",'!=':"[@#{1}!='#{3}']",'^=':"[starts-with(@#{1}, '#{3}')]",'$=':"[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",'*=':"[contains(@#{1}, '#{3}')]",'~=':"[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",'|=':"[contains(concat('-', @#{1}, '-'), '-#{3}-')]"},pseudos:{'first-child':'[not(preceding-sibling::*)]','last-child':'[not(following-sibling::*)]','only-child':'[not(preceding-sibling::* or following-sibling::*)]','empty':"[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]",'checked':"[@checked]",'disabled':"[@disabled]",'enabled':"[not(@disabled)]",'not':function(m){var e=m[6],p=Selector.patterns,x=Selector.xpath,le,v;var a=[];while(e&&le!=e&&(/\S/).test(e)){le=e;for(var i in p){if(m=e.match(p[i])){v=Object.isFunction(x[i])?x[i](m):new Template(x[i]).evaluate(m);a.push("("+v.substring(1,v.length-1)+")");e=e.replace(m[0],'');break}}}return"[not("+a.join(" and ")+")]"},'nth-child':function(m){return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ",m)},'nth-last-child':function(m){return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ",m)},'nth-of-type':function(m){return Selector.xpath.pseudos.nth("position() ",m)},'nth-last-of-type':function(m){return Selector.xpath.pseudos.nth("(last() + 1 - position()) ",m)},'first-of-type':function(m){m[6]="1";return Selector.xpath.pseudos['nth-of-type'](m)},'last-of-type':function(m){m[6]="1";return Selector.xpath.pseudos['nth-last-of-type'](m)},'only-of-type':function(m){var p=Selector.xpath.pseudos;return p['first-of-type'](m)+p['last-of-type'](m)},nth:function(c,m){var d,formula=m[6],predicate;if(formula=='even')formula='2n+0';if(formula=='odd')formula='2n+1';if(d=formula.match(/^(\d+)$/))return'['+c+"= "+d[1]+']';if(d=formula.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(d[1]=="-")d[1]=-1;var a=d[1]?Number(d[1]):1;var b=d[2]?Number(d[2]):0;predicate="[((#{fragment} - #{b}) mod #{a} = 0) and "+"((#{fragment} - #{b}) div #{a} >= 0)]";return new Template(predicate).evaluate({fragment:c,a:a,b:b})}}}},criteria:{tagName:'n = h.tagName(n, r, "#{1}", c);      c = false;',className:'n = h.className(n, r, "#{1}", c);    c = false;',id:'n = h.id(n, r, "#{1}", c);           c = false;',attrPresence:'n = h.attrPresence(n, r, "#{1}", c); c = false;',attr:function(m){m[3]=(m[5]||m[6]);return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m)},pseudo:function(m){if(m[6])m[6]=m[6].replace(/"/g,'\\"');return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m)},descendant:'c = "descendant";',child:'c = "child";',adjacent:'c = "adjacent";',laterSibling:'c = "laterSibling";'},patterns:{laterSibling:/^\s*~\s*/,child:/^\s*>\s*/,adjacent:/^\s*\+\s*/,descendant:/^\s/,tagName:/^\s*(\*|[\w\-]+)(\b|$)?/,id:/^#([\w\-\*]+)(\b|$)/,className:/^\.([\w\-\*]+)(\b|$)/,pseudo:/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/,attrPresence:/^\[([\w]+)\]/,attr:/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/},assertions:{tagName:function(a,b){return b[1].toUpperCase()==a.tagName.toUpperCase()},className:function(a,b){return Element.hasClassName(a,b[1])},id:function(a,b){return a.id===b[1]},attrPresence:function(a,b){return Element.hasAttribute(a,b[1])},attr:function(a,b){var c=Element.readAttribute(a,b[1]);return c&&Selector.operators[b[2]](c,b[5]||b[6])}},handlers:{concat:function(a,b){for(var i=0,node;node=b[i];i++)a.push(node);return a},mark:function(a){var b=Prototype.emptyFunction;for(var i=0,node;node=a[i];i++)node._countedByPrototype=b;return a},unmark:function(a){for(var i=0,node;node=a[i];i++)node._countedByPrototype=undefined;return a},index:function(a,b,c){a._countedByPrototype=Prototype.emptyFunction;if(b){for(var d=a.childNodes,i=d.length-1,j=1;i>=0;i--){var e=d[i];if(e.nodeType==1&&(!c||e._countedByPrototype))e.nodeIndex=j++}}else{for(var i=0,j=1,d=a.childNodes;e=d[i];i++)if(e.nodeType==1&&(!c||e._countedByPrototype))e.nodeIndex=j++}},unique:function(a){if(a.length==0)return a;var b=[],n;for(var i=0,l=a.length;i<l;i++)if(!(n=a[i])._countedByPrototype){n._countedByPrototype=Prototype.emptyFunction;b.push(Element.extend(n))}return Selector.handlers.unmark(b)},descendant:function(a){var h=Selector.handlers;for(var i=0,results=[],node;node=a[i];i++)h.concat(results,node.getElementsByTagName('*'));return results},child:function(a){var h=Selector.handlers;for(var i=0,results=[],node;node=a[i];i++){for(var j=0,child;child=node.childNodes[j];j++)if(child.nodeType==1&&child.tagName!='!')results.push(child)}return results},adjacent:function(a){for(var i=0,results=[],node;node=a[i];i++){var b=this.nextElementSibling(node);if(b)results.push(b)}return results},laterSibling:function(a){var h=Selector.handlers;for(var i=0,results=[],node;node=a[i];i++)h.concat(results,Element.nextSiblings(node));return results},nextElementSibling:function(a){while(a=a.nextSibling)if(a.nodeType==1)return a;return null},previousElementSibling:function(a){while(a=a.previousSibling)if(a.nodeType==1)return a;return null},tagName:function(a,b,c,d){var e=c.toUpperCase();var f=[],h=Selector.handlers;if(a){if(d){if(d=="descendant"){for(var i=0,node;node=a[i];i++)h.concat(f,node.getElementsByTagName(c));return f}else a=this[d](a);if(c=="*")return a}for(var i=0,node;node=a[i];i++)if(node.tagName.toUpperCase()===e)f.push(node);return f}else return b.getElementsByTagName(c)},id:function(a,b,c,d){var e=$(c),h=Selector.handlers;if(!e)return[];if(!a&&b==document)return[e];if(a){if(d){if(d=='child'){for(var i=0,node;node=a[i];i++)if(e.parentNode==node)return[e]}else if(d=='descendant'){for(var i=0,node;node=a[i];i++)if(Element.descendantOf(e,node))return[e]}else if(d=='adjacent'){for(var i=0,node;node=a[i];i++)if(Selector.handlers.previousElementSibling(e)==node)return[e]}else a=h[d](a)}for(var i=0,node;node=a[i];i++)if(node==e)return[e];return[]}return(e&&Element.descendantOf(e,b))?[e]:[]},className:function(a,b,c,d){if(a&&d)a=this[d](a);return Selector.handlers.byClassName(a,b,c)},byClassName:function(a,b,c){if(!a)a=Selector.handlers.descendant([b]);var d=' '+c+' ';for(var i=0,results=[],node,nodeClassName;node=a[i];i++){nodeClassName=node.className;if(nodeClassName.length==0)continue;if(nodeClassName==c||(' '+nodeClassName+' ').include(d))results.push(node)}return results},attrPresence:function(a,b,c,d){if(!a)a=b.getElementsByTagName("*");if(a&&d)a=this[d](a);var e=[];for(var i=0,node;node=a[i];i++)if(Element.hasAttribute(node,c))e.push(node);return e},attr:function(a,b,c,d,e,f){if(!a)a=b.getElementsByTagName("*");if(a&&f)a=this[f](a);var g=Selector.operators[e],results=[];for(var i=0,node;node=a[i];i++){var h=Element.readAttribute(node,c);if(h===null)continue;if(g(h,d))results.push(node)}return results},pseudo:function(a,b,c,d,e){if(a&&e)a=this[e](a);if(!a)a=d.getElementsByTagName("*");return Selector.pseudos[b](a,c,d)}},pseudos:{'first-child':function(a,b,c){for(var i=0,results=[],node;node=a[i];i++){if(Selector.handlers.previousElementSibling(node))continue;results.push(node)}return results},'last-child':function(a,b,c){for(var i=0,results=[],node;node=a[i];i++){if(Selector.handlers.nextElementSibling(node))continue;results.push(node)}return results},'only-child':function(a,b,c){var h=Selector.handlers;for(var i=0,results=[],node;node=a[i];i++)if(!h.previousElementSibling(node)&&!h.nextElementSibling(node))results.push(node);return results},'nth-child':function(a,b,c){return Selector.pseudos.nth(a,b,c)},'nth-last-child':function(a,b,c){return Selector.pseudos.nth(a,b,c,true)},'nth-of-type':function(a,b,c){return Selector.pseudos.nth(a,b,c,false,true)},'nth-last-of-type':function(a,b,c){return Selector.pseudos.nth(a,b,c,true,true)},'first-of-type':function(a,b,c){return Selector.pseudos.nth(a,"1",c,false,true)},'last-of-type':function(a,b,c){return Selector.pseudos.nth(a,"1",c,true,true)},'only-of-type':function(a,b,c){var p=Selector.pseudos;return p['last-of-type'](p['first-of-type'](a,b,c),b,c)},getIndices:function(a,b,d){if(a==0)return b>0?[b]:[];return $R(1,d).inject([],function(c,i){if(0==(i-b)%a&&(i-b)/a>=0)c.push(i);return c})},nth:function(c,d,e,f,g){if(c.length==0)return[];if(d=='even')d='2n+0';if(d=='odd')d='2n+1';var h=Selector.handlers,results=[],indexed=[],m;h.mark(c);for(var i=0,node;node=c[i];i++){if(!node.parentNode._countedByPrototype){h.index(node.parentNode,f,g);indexed.push(node.parentNode)}}if(d.match(/^\d+$/)){d=Number(d);for(var i=0,node;node=c[i];i++)if(node.nodeIndex==d)results.push(node)}else if(m=d.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(m[1]=="-")m[1]=-1;var a=m[1]?Number(m[1]):1;var b=m[2]?Number(m[2]):0;var k=Selector.pseudos.getIndices(a,b,c.length);for(var i=0,node,l=k.length;node=c[i];i++){for(var j=0;j<l;j++)if(node.nodeIndex==k[j])results.push(node)}}h.unmark(c);h.unmark(indexed);return results},'empty':function(a,b,c){for(var i=0,results=[],node;node=a[i];i++){if(node.tagName=='!'||(node.firstChild&&!node.innerHTML.match(/^\s*$/)))continue;results.push(node)}return results},'not':function(a,b,c){var h=Selector.handlers,selectorType,m;var d=new Selector(b).findElements(c);h.mark(d);for(var i=0,results=[],node;node=a[i];i++)if(!node._countedByPrototype)results.push(node);h.unmark(d);return results},'enabled':function(a,b,c){for(var i=0,results=[],node;node=a[i];i++)if(!node.disabled)results.push(node);return results},'disabled':function(a,b,c){for(var i=0,results=[],node;node=a[i];i++)if(node.disabled)results.push(node);return results},'checked':function(a,b,c){for(var i=0,results=[],node;node=a[i];i++)if(node.checked)results.push(node);return results}},operators:{'=':function(a,v){return a==v},'!=':function(a,v){return a!=v},'^=':function(a,v){return a.startsWith(v)},'$=':function(a,v){return a.endsWith(v)},'*=':function(a,v){return a.include(v)},'~=':function(a,v){return(' '+a+' ').include(' '+v+' ')},'|=':function(a,v){return('-'+a.toUpperCase()+'-').include('-'+v.toUpperCase()+'-')}},split:function(a){var b=[];a.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/,function(m){b.push(m[1].strip())});return b},matchElements:function(a,b){var c=$$(b),h=Selector.handlers;h.mark(c);for(var i=0,results=[],element;element=a[i];i++)if(element._countedByPrototype)results.push(element);h.unmark(c);return results},findElement:function(a,b,c){if(Object.isNumber(b)){c=b;b=false}return Selector.matchElements(a,b||'*')[c||0]},findChildElements:function(a,b){b=Selector.split(b.join(','));var c=[],h=Selector.handlers;for(var i=0,l=b.length,selector;i<l;i++){selector=new Selector(b[i].strip());h.concat(c,selector.findElements(a))}return(l>1)?h.unique(c):c}});if(Prototype.Browser.IE){Object.extend(Selector.handlers,{concat:function(a,b){for(var i=0,node;node=b[i];i++)if(node.tagName!=="!")a.push(node);return a},unmark:function(a){for(var i=0,node;node=a[i];i++)node.removeAttribute('_countedByPrototype');return a}})}function $$(){return Selector.findChildElements(document,$A(arguments))}var Form={reset:function(a){$(a).reset();return a},serializeElements:function(c,d){if(typeof d!='object')d={hash:!!d};else if(Object.isUndefined(d.hash))d.hash=true;var e,value,submitted=false,submit=d.submit;var f=c.inject({},function(a,b){if(!b.disabled&&b.name){e=b.name;value=$(b).getValue();if(value!=null&&(b.type!='submit'||(!submitted&&submit!==false&&(!submit||e==submit)&&(submitted=true)))){if(e in a){if(!Object.isArray(a[e]))a[e]=[a[e]];a[e].push(value)}else a[e]=value}}return a});return d.hash?f:Object.toQueryString(f)}};Form.Methods={serialize:function(a,b){return Form.serializeElements(Form.getElements(a),b)},getElements:function(c){return $A($(c).getElementsByTagName('*')).inject([],function(a,b){if(Form.Element.Serializers[b.tagName.toLowerCase()])a.push(Element.extend(b));return a})},getInputs:function(a,b,c){a=$(a);var d=a.getElementsByTagName('input');if(!b&&!c)return $A(d).map(Element.extend);for(var i=0,matchingInputs=[],length=d.length;i<length;i++){var e=d[i];if((b&&e.type!=b)||(c&&e.name!=c))continue;matchingInputs.push(Element.extend(e))}return matchingInputs},disable:function(a){a=$(a);Form.getElements(a).invoke('disable');return a},enable:function(a){a=$(a);Form.getElements(a).invoke('enable');return a},findFirstElement:function(b){var c=$(b).getElements().findAll(function(a){return'hidden'!=a.type&&!a.disabled});var d=c.findAll(function(a){return a.hasAttribute('tabIndex')&&a.tabIndex>=0}).sortBy(function(a){return a.tabIndex}).first();return d?d:c.find(function(a){return['input','select','textarea'].include(a.tagName.toLowerCase())})},focusFirstElement:function(a){a=$(a);a.findFirstElement().activate();return a},request:function(a,b){a=$(a),b=Object.clone(b||{});var c=b.parameters,action=a.readAttribute('action')||'';if(action.blank())action=window.location.href;b.parameters=a.serialize(true);if(c){if(Object.isString(c))c=c.toQueryParams();Object.extend(b.parameters,c)}if(a.hasAttribute('method')&&!b.method)b.method=a.method;return new Ajax.Request(action,b)}};Form.Element={focus:function(a){$(a).focus();return a},select:function(a){$(a).select();return a}};Form.Element.Methods={serialize:function(a){a=$(a);if(!a.disabled&&a.name){var b=a.getValue();if(b!=undefined){var c={};c[a.name]=b;return Object.toQueryString(c)}}return''},getValue:function(a){a=$(a);var b=a.tagName.toLowerCase();return Form.Element.Serializers[b](a)},setValue:function(a,b){a=$(a);var c=a.tagName.toLowerCase();Form.Element.Serializers[c](a,b);return a},clear:function(a){$(a).value='';return a},present:function(a){return $(a).value!=''},activate:function(a){a=$(a);try{a.focus();if(a.select&&(a.tagName.toLowerCase()!='input'||!['button','reset','submit'].include(a.type)))a.select()}catch(e){}return a},disable:function(a){a=$(a);a.blur();a.disabled=true;return a},enable:function(a){a=$(a);a.disabled=false;return a}};var Field=Form.Element;var $F=Form.Element.Methods.getValue;Form.Element.Serializers={input:function(a,b){switch(a.type.toLowerCase()){case'checkbox':case'radio':return Form.Element.Serializers.inputSelector(a,b);default:return Form.Element.Serializers.textarea(a,b)}},inputSelector:function(a,b){if(Object.isUndefined(b))return a.checked?a.value:null;else a.checked=!!b},textarea:function(a,b){if(Object.isUndefined(b))return a.value;else a.value=b},select:function(a,b){if(Object.isUndefined(b))return this[a.type=='select-one'?'selectOne':'selectMany'](a);else{var c,value,single=!Object.isArray(b);for(var i=0,length=a.length;i<length;i++){c=a.options[i];value=this.optionValue(c);if(single){if(value==b){c.selected=true;return}}else c.selected=b.include(value)}}},selectOne:function(a){var b=a.selectedIndex;return b>=0?this.optionValue(a.options[b]):null},selectMany:function(a){var b,length=a.length;if(!length)return null;for(var i=0,b=[];i<length;i++){var c=a.options[i];if(c.selected)b.push(this.optionValue(c))}return b},optionValue:function(a){return Element.extend(a).hasAttribute('value')?a.value:a.text}};Abstract.TimedObserver=Class.create(PeriodicalExecuter,{initialize:function($super,b,c,d){$super(d,c);this.element=$(b);this.lastValue=this.getValue()},execute:function(){var a=this.getValue();if(Object.isString(this.lastValue)&&Object.isString(a)?this.lastValue!=a:String(this.lastValue)!=String(a)){this.callback(this.element,a);this.lastValue=a}}});Form.Element.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.Element.getValue(this.element)}});Form.Observer=Class.create(Abstract.TimedObserver,{getValue:function(){return Form.serialize(this.element)}});Abstract.EventObserver=Class.create({initialize:function(a,b){this.element=$(a);this.callback=b;this.lastValue=this.getValue();if(this.element.tagName.toLowerCase()=='form')this.registerFormCallbacks();else this.registerCallback(this.element)},onElementEvent:function(){var a=this.getValue();if(this.lastValue!=a){this.callback(this.element,a);this.lastValue=a}},registerFormCallbacks:function(){Form.getElements(this.element).each(this.registerCallback,this)},registerCallback:function(a){if(a.type){switch(a.type.toLowerCase()){case'checkbox':case'radio':Event.observe(a,'click',this.onElementEvent.bind(this));break;default:Event.observe(a,'change',this.onElementEvent.bind(this));break}}}});Form.Element.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.Element.getValue(this.element)}});Form.EventObserver=Class.create(Abstract.EventObserver,{getValue:function(){return Form.serialize(this.element)}});if(!window.Event)var Event={};Object.extend(Event,{KEY_BACKSPACE:8,KEY_TAB:9,KEY_RETURN:13,KEY_ESC:27,KEY_LEFT:37,KEY_UP:38,KEY_RIGHT:39,KEY_DOWN:40,KEY_DELETE:46,KEY_HOME:36,KEY_END:35,KEY_PAGEUP:33,KEY_PAGEDOWN:34,KEY_INSERT:45,cache:{},relatedTarget:function(a){var b;switch(a.type){case'mouseover':b=a.fromElement;break;case'mouseout':b=a.toElement;break;default:return null}return Element.extend(b)}});Event.Methods=(function(){var e;if(Prototype.Browser.IE){var f={0:1,1:4,2:2};e=function(a,b){return a.button==f[b]}}else if(Prototype.Browser.WebKit){e=function(a,b){switch(b){case 0:return a.which==1&&!a.metaKey;case 1:return a.which==1&&a.metaKey;default:return false}}}else{e=function(a,b){return a.which?(a.which===b+1):(a.button===b)}}return{isLeftClick:function(a){return e(a,0)},isMiddleClick:function(a){return e(a,1)},isRightClick:function(a){return e(a,2)},element:function(a){var b=Event.extend(a).target;return Element.extend(b.nodeType==Node.TEXT_NODE?b.parentNode:b)},findElement:function(a,b){var c=Event.element(a);if(!b)return c;var d=[c].concat(c.ancestors());return Selector.findElement(d,b,0)},pointer:function(a){return{x:a.pageX||(a.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft)),y:a.pageY||(a.clientY+(document.documentElement.scrollTop||document.body.scrollTop))}},pointerX:function(a){return Event.pointer(a).x},pointerY:function(a){return Event.pointer(a).y},stop:function(a){Event.extend(a);a.preventDefault();a.stopPropagation();a.stopped=true}}})();Event.extend=(function(){var c=Object.keys(Event.Methods).inject({},function(m,a){m[a]=Event.Methods[a].methodize();return m});if(Prototype.Browser.IE){Object.extend(c,{stopPropagation:function(){this.cancelBubble=true},preventDefault:function(){this.returnValue=false},inspect:function(){return"[object Event]"}});return function(a){if(!a)return false;if(a._extendedByPrototype)return a;a._extendedByPrototype=Prototype.emptyFunction;var b=Event.pointer(a);Object.extend(a,{target:a.srcElement,relatedTarget:Event.relatedTarget(a),pageX:b.x,pageY:b.y});return Object.extend(a,c)}}else{Event.prototype=Event.prototype||document.createEvent("HTMLEvents").__proto__;Object.extend(Event.prototype,c);return Prototype.K}})();Object.extend(Event,(function(){var h=Event.cache;function getEventID(a){if(a._prototypeEventID)return a._prototypeEventID[0];arguments.callee.id=arguments.callee.id||1;return a._prototypeEventID=[++arguments.callee.id]}function getDOMEventName(a){if(a&&a.include(':'))return"dataavailable";return a}function getCacheForID(a){return h[a]=h[a]||{}}function getWrappersForEventName(a,b){var c=getCacheForID(a);return c[b]=c[b]||[]}function createWrapper(b,d,e){var f=getEventID(b);var c=getWrappersForEventName(f,d);if(c.pluck("handler").include(e))return false;var g=function(a){if(!Event||!Event.extend||(a.eventName&&a.eventName!=d))return false;Event.extend(a);e.call(b,a)};g.handler=e;c.push(g);return g}function findWrapper(b,d,e){var c=getWrappersForEventName(b,d);return c.find(function(a){return a.handler==e})}function destroyWrapper(a,b,d){var c=getCacheForID(a);if(!c[b])return false;c[b]=c[b].without(findWrapper(a,b,d))}function destroyCache(){for(var a in h)for(var b in h[a])h[a][b]=null}if(window.attachEvent){window.attachEvent("onunload",destroyCache)}return{observe:function(a,b,c){a=$(a);var d=getDOMEventName(b);var e=createWrapper(a,b,c);if(!e)return a;if(a.addEventListener){a.addEventListener(d,e,false)}else{a.attachEvent("on"+d,e)}return a},stopObserving:function(b,c,d){b=$(b);var e=getEventID(b),name=getDOMEventName(c);if(!d&&c){getWrappersForEventName(e,c).each(function(a){b.stopObserving(c,a.handler)});return b}else if(!c){Object.keys(getCacheForID(e)).each(function(a){b.stopObserving(a)});return b}var f=findWrapper(e,c,d);if(!f)return b;if(b.removeEventListener){b.removeEventListener(name,f,false)}else{b.detachEvent("on"+name,f)}destroyWrapper(e,c,d);return b},fire:function(a,b,c){a=$(a);if(a==document&&document.createEvent&&!a.dispatchEvent)a=document.documentElement;var d;if(document.createEvent){d=document.createEvent("HTMLEvents");d.initEvent("dataavailable",true,true)}else{d=document.createEventObject();d.eventType="ondataavailable"}d.eventName=b;d.memo=c||{};if(document.createEvent){a.dispatchEvent(d)}else{a.fireEvent(d.eventType,d)}return Event.extend(d)}}})());Object.extend(Event,Event.Methods);Element.addMethods({fire:Event.fire,observe:Event.observe,stopObserving:Event.stopObserving});Object.extend(document,{fire:Element.Methods.fire.methodize(),observe:Element.Methods.observe.methodize(),stopObserving:Element.Methods.stopObserving.methodize(),loaded:false});(function(){var a;function fireContentLoadedEvent(){if(document.loaded)return;if(a)window.clearInterval(a);document.fire("dom:loaded");document.loaded=true}if(document.addEventListener){if(Prototype.Browser.WebKit){a=window.setInterval(function(){if(/loaded|complete/.test(document.readyState))fireContentLoadedEvent()},0);Event.observe(window,"load",fireContentLoadedEvent)}else{document.addEventListener("DOMContentLoaded",fireContentLoadedEvent,false)}}else{document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>");$("__onDOMContentLoaded").onreadystatechange=function(){if(this.readyState=="complete"){this.onreadystatechange=null;fireContentLoadedEvent()}}}})();Hash.toQueryString=Object.toQueryString;var Toggle={display:Element.toggle};Element.Methods.childOf=Element.Methods.descendantOf;var Insertion={Before:function(a,b){return Element.insert(a,{before:b})},Top:function(a,b){return Element.insert(a,{top:b})},Bottom:function(a,b){return Element.insert(a,{bottom:b})},After:function(a,b){return Element.insert(a,{after:b})}};var $continue=new Error('"throw $continue" is deprecated, use "return" instead');var Position={includeScrollOffsets:false,prepare:function(){this.deltaX=window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft||0;this.deltaY=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0},within:function(a,x,y){if(this.includeScrollOffsets)return this.withinIncludingScrolloffsets(a,x,y);this.xcomp=x;this.ycomp=y;this.offset=Element.cumulativeOffset(a);return(y>=this.offset[1]&&y<this.offset[1]+a.offsetHeight&&x>=this.offset[0]&&x<this.offset[0]+a.offsetWidth)},withinIncludingScrolloffsets:function(a,x,y){var b=Element.cumulativeScrollOffset(a);this.xcomp=x+b[0]-this.deltaX;this.ycomp=y+b[1]-this.deltaY;this.offset=Element.cumulativeOffset(a);return(this.ycomp>=this.offset[1]&&this.ycomp<this.offset[1]+a.offsetHeight&&this.xcomp>=this.offset[0]&&this.xcomp<this.offset[0]+a.offsetWidth)},overlap:function(a,b){if(!a)return 0;if(a=='vertical')return((this.offset[1]+b.offsetHeight)-this.ycomp)/b.offsetHeight;if(a=='horizontal')return((this.offset[0]+b.offsetWidth)-this.xcomp)/b.offsetWidth},cumulativeOffset:Element.Methods.cumulativeOffset,positionedOffset:Element.Methods.positionedOffset,absolutize:function(a){Position.prepare();return Element.absolutize(a)},relativize:function(a){Position.prepare();return Element.relativize(a)},realOffset:Element.Methods.cumulativeScrollOffset,offsetParent:Element.Methods.getOffsetParent,page:Element.Methods.viewportOffset,clone:function(a,b,c){c=c||{};return Element.clonePosition(b,a,c)}};if(!document.getElementsByClassName)document.getElementsByClassName=function(f){function iter(a){return a.blank()?null:"[contains(concat(' ', @class, ' '), ' "+a+" ')]"}f.getElementsByClassName=Prototype.BrowserFeatures.XPath?function(a,b){b=b.toString().strip();var c=/\s/.test(b)?$w(b).map(iter).join(''):iter(b);return c?document._getElementsByXPath('.//*'+c,a):[]}:function(b,c){c=c.toString().strip();var d=[],classNames=(/\s/.test(c)?$w(c):null);if(!classNames&&!c)return d;var e=$(b).getElementsByTagName('*');c=' '+c+' ';for(var i=0,child,cn;child=e[i];i++){if(child.className&&(cn=' '+child.className+' ')&&(cn.include(c)||(classNames&&classNames.all(function(a){return!a.toString().blank()&&cn.include(' '+a+' ')}))))d.push(Element.extend(child))}return d};return function(a,b){return $(b||document.body).getElementsByClassName(a)}}(Element.Methods);Element.ClassNames=Class.create();Element.ClassNames.prototype={initialize:function(a){this.element=$(a)},_each:function(b){this.element.className.split(/\s+/).select(function(a){return a.length>0})._each(b)},set:function(a){this.element.className=a},add:function(a){if(this.include(a))return;this.set($A(this).concat(a).join(' '))},remove:function(a){if(!this.include(a))return;this.set($A(this).without(a).join(' '))},toString:function(){return $A(this).join(' ')}};Object.extend(Element.ClassNames.prototype,Enumerable);Element.addMethods(); var Debug = {}; Debug = Class.create(); Debug = { cache: {}, counter: 1, resizer: false, mode: false, counter: 1, on: true, out: function(msg, mode, type) { if(!Debug.on) { return false; }if(!mode) { mode = Debug.mode; }
switch(mode) { case 'alert': alert(msg); break; case 'console': case 'console_only': if(Prototype.Browser.Gecko && typeof(console) != 'undefined' && typeof(console.info) == 'function') { if(!type) { type = 'debug'; }var date = new Date();if(!msg) { if(!Debug.cache['counter']) { Debug.cache['counter'] = 1; }
else { Debug.cache['counter']++; }msg = 'Debug '+Debug.cache['counter']; }switch(type) { case 'warning': console.warn(msg); break; case 'error': console.error(msg); break; default: console.info(msg); break; }
if(typeof(msg) == 'string') { msg = msg.replace(/^<pre>/,''); msg = msg.replace(/<\/pre>$/,''); }
Debug.counter++; break; }default:if(Prototype.Browser.IE && mode != 'console_only') { alert(msg); }
else if(Prototype.Browser.Gecko && !Debug.mode && typeof(console) != 'undefined' && typeof(console.info) == 'function') { Debug.mode = 'console'; Debug.out(msg, 'console', type); }
else if(mode != 'console_only') { if(!$('debug__window')) { Debug.create(msg); }
else { Debug.set(msg); }
}
break; }return true; }, point: function(fn) { if(Prototype.Browser.Gecko && !Debug.mode && typeof(console) != 'undefined' && typeof(console.info) == 'function') { Debug.out(); console.debug(fn); return true; }
return false; }, set_mode: function(mode) { Debug.mode = mode; }, append: function(msg) { if(!$('debug__window')) { Debug.create(msg); }
else { msg = '<div id="debug__window__content__msg_'+Debug.counter+'">'+Debug.counter+'. '+msg+'<hr /></div>'; Element.Extend('debug__window__content', msg);Element.scrollContainer('debug__window__content', 100000);Debug.counter++; }
return true; }, set: function(msg) { if(!$('debug__window')) { Debug.create(msg); }Debug.counter = 1; if(!msg) { msg = ''; }
else {msg = '<div id="debug__window__content__msg_'+Debug.counter+'">'+Debug.counter+'. '+msg+'<hr /></div>'; }Element.update('debug__window__content', msg); Element.Center('debug__window');if(msg != '') { Debug.counter++; }return true; }, create: function(msg) { var content = '<div id="debug__window" style="position: absolute; left:0; top: 0; z-index: 100000;width: 600px; height: 500px; margin:0; padding:0; border: 2px solid red; background:#fff;"><div id="debug__window__header" style="font-family:verdana;font-size:11px;margin:0;padding:0;font-weight:bold;color:#fff;height:16px;background: #a00;padding:2px;margin:0;cursor: move;width:auto;">Debug<div id="debug__window__close" title="close debug window" onclick="Element.remove(\'debug__window\');" style="float:right;font-size:12px;cursor: pointer;margin: -13px 0 0 0;padding:0;width:15px;line-height:15px;background:#666;color:#eee;text-align:center;">X</div><div id="debug__window__clear" title="clear debug" style="float:right;font-size:12px;cursor: pointer;margin: -14px 3px 0 0;padding:0;width:15px;line-height:15px;background:#666;color:#eee;text-align:center;">=</div><div id="debug__window__maximize" title="maximize window" style="float:right;font-size:12px;cursor: pointer;margin: -14px 3px 0 0;padding:0;width:15px;line-height:15px;background:#666;color:#eee;text-align:center;">+/-</div></div><div id="debug__window__content" style="font-family:verdana;font-size:12px; width:600px;height:460px;overflow: auto;"></div><div id="debug__window__footer" style="cursor: se-resize;padding:4px 0 0 0;margin:0;height:15px;border-top:1px solid #ccc;background:#eee;color:#eee;text-align:center;"><div id="debug__window__resize" title="resize debug window" style="float:right;font-size:12px;cursor: se-resize;margin:0;padding:0;width:15px;line-height:15px;background:#666;color:#eee;text-align:center;">O</div></div></div>';new Insertion.Top('wrapper', content); if(typeof(Draggable) == 'function') { new Draggable('debug__window', { handle: 'debug__window__header', starteffect: false, endeffect: false }); }
if(typeof(Resizable) == 'function') { Debug.resizer = new Resizable('debug__window', {handle: 'debug__window__resize', elements: ['debug__window__content','debug__window'], min_size: [400, 200] }); }
Element.Center('debug__window'); Debug.set(msg); Event.observe('debug__window__clear', 'click', Debug.clear); if(typeof(Debug.resizer) == 'object') { Event.observe('debug__window__maximize','click',function(ev){if(Debug.resizer.maximized == true){Debug.resizer.restore();Element.Center('debug__window');}else{Debug.resizer.maximize();}}); Event.observe('debug__window__header','dblclick',function(ev){if(Debug.resizer.maximized == true){Debug.resizer.restore();Element.Center('debug__window');}else{Debug.resizer.maximize();}}); }
return true; }, clear: function(ev) { Element.update('debug__window__content'); return true; }
}

 if(!externals) { var externals = new Array(); }
if(externals['element']) { Element.addMethods({call: function(element, url, parameters, options) { if(!options) { options = {}; }
options.element = element; return new Ajax.call(url, parameters, options); }}); Element.Center = function(element) { try { element = $(element); }
catch(e) { return false; }
var my_width = 0; var my_height = 0; if ( typeof( window.innerWidth ) == 'number' ) { my_width = window.innerWidth; my_height = window.innerHeight; }
else if ( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) { my_width = document.documentElement.clientWidth; my_height = document.documentElement.clientHeight; }
else if ( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) { my_width = document.body.clientWidth; my_height = document.body.clientHeight; }
element.style.position = 'absolute'; var scrollY = 0; if ( document.documentElement && document.documentElement.scrollTop ) { scrollY = document.documentElement.scrollTop; }
else if ( document.body && document.body.scrollTop ) { scrollY = document.body.scrollTop; }
else if ( window.pageYOffset ) { scrollY = window.pageYOffset; }
else if ( window.scrollY ) { scrollY = window.scrollY; }
var elementDimensions = Element.getDimensions(element); var setX = ( my_width - elementDimensions.width ) / 2; var setY = ( my_height - elementDimensions.height ) / 2 + scrollY; setX = ( setX < 0 ) ? 0 : setX; setY = ( setY < 0 ) ? 0 : setY; element.style.left = setX + 'px'; element.style.top = setY + 'px'; return true; }
Element.getCenter = function(container,element) { if($(container) && $(element)) { var dimensions = Element.getDimensions( container ); var width = dimensions.width; var height = dimensions.height; var dimensions = Element.getDimensions( element ); var el_width = dimensions.width; var el_height = dimensions.height; var x = $(container).offsetLeft; var y = $(container).offsetTop; var result = new Array(); result['x'] = x+((width / 2)-(el_width/2)); result['y'] = y+((height / 2)-(el_height/2)); }
return result; }
Element.enable = function(element, options) { if($(element+'_blind')) { if(options && options.duration) { var duration = options.duration; var transparency = 0.6; if(options.transparency) { transparency = options.transparency; }
Effect.Fade(element+'_blind', { duration: duration, afterFinish: function(e){ Element.remove(element+'_blind'); }, from: transparency, to: 0.0 }
); }
else { Element.remove(element+'_blind'); }
}
return true; }
Element.disable = function(element, options) { if(element && $(element) && element != 'screen' && element != 'body') { var dimensions = Element.getDimensions( element ); var width = dimensions.width; var height = dimensions.height; var fullscreen = false; }
else if(element) { var scr_width = 0; var scr_height = 0; var fullscreen = true; if (document.body && (document.body.clientWidth || document.body.clientHeight)) { scr_width = document.body.clientWidth; scr_height = document.body.clientHeight; }
else if(typeof(window.innerWidth) == 'number') { scr_width = window.innerWidth; scr_height = window.innerHeight; }
else if(document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) { scr_width = document.documentElement.clientWidth; scr_height = document.documentElement.clientHeight; }
if(document.viewport.getHeight && document.viewport.getHeight() > scr_height) { scr_height = document.viewport.getHeight(); }
if(document.viewport.getWidth && document.viewport.getWidth() > scr_width) { scr_width = document.viewport.getWidth(); }
var old_offset = document.viewport.getScrollOffsets(); window.scrollTo(99999999, 999999999); var new_offset = document.viewport.getScrollOffsets(); window.scrollTo(old_offset.left, old_offset.top); delete old_offset; scr_width += new_offset.left; scr_height += new_offset.top; delete new_offset; var width = scr_width; var height = scr_height; delete scr_width; delete scr_height; }
var x = 0; var y = 0; var visible = false; var zindex = 1100; var color = ''; var transparency = 0.0; var duration = 0.0; var css = ''; var fullwidth = true; if(fullscreen == false && options && options.x) { x = options.x; }
else if(fullscreen == false && $(element) && $(element).offsetLeft) { var left = $(element).offsetLeft; x = left; }
if(fullscreen == false && options && options.y) { y = options.y; }
else if(fullscreen == false && $(element) && $(element).offsetTop) { var top = $(element).offsetTop; y = top; }
if(options && options.color) { color = options.color; }
if(options && options.zindex) { zindex = options.zindex; }
else if(fullscreen == false) { zindex = ($(element).style.zIndex + 10); }
if(options && options.transparency) { transparency = options.transparency; }
else if(options && options.visible == true) { transparency = 0.6; }
if(options && options.css) { css = ' class="'+options.css+'"'; }
if(!fullscreen && fullwidth == true && (options && options.fullwidth != false)) { if (document.body && document.body.clientWidth) { width = document.body.clientWidth; }
else if(typeof(window.innerWidth) == 'number') { width = window.innerWidth; }
else if(document.documentElement && document.documentElement.clientWidth) { width = document.documentElement.clientWidth; }
if(document.viewport.getWidth && document.viewport.getWidth() > scr_width) { scr_width = document.viewport.getWidth(); }
}
if(options && options.duration) { duration = options.duration; }
if(options && options.height) { height = options.height; }
var style = 'display: none;z-index:'+zindex+';position:absolute;top:0;left:0;width:'+width+'px;height:'+height+'px'; if($(element+'_blind')) { Element.remove(element+'_blind'); }
if(!$(element+'_blind')) { var wrapper = '<div id="'+element+'_blind"'+css+' style="'+style+'">&nbsp;</div>'; }
else { $(element+'_blind').setAttribute('style', style); }
if(fullscreen == true) { var elements = document.getElementsByTagName('body'); new Insertion.Top(elements[0], wrapper); }
else { new Insertion.After(element, wrapper); }
if(color != '') { $(element+'_blind').style.background = color+' none repeat scroll 0%'; }
$(element+'_blind').style.left = x+'px'; $(element+'_blind').style.top = y+'px'; if(duration > 0.0) { Effect.Appear(element+'_blind', { duration: duration, from: 0.0, to: transparency }
); }
else { Element.setOpacity(element+'_blind', transparency); Element.show(element+'_blind'); }
if(options && options.exclude && options.exclude != '' && $(options.exclude)) { $(options.exclude).style.zIndex = zindex+100; }
if(options && options.resize == true) { Event.observe(window, 'resize', function(){ Element.disable(element, options); }.bind(element, options)); }
return true; }
Element.Clone = function(element) { var cloned = new Object(); for (i in element) { cloned[i] = element[i]; }
cloned.id = cloned.id+'__clone'; return cloned; }
Element.Extend = function(element, content) { $(element).innerHTML += content; return true; }
Element.Move = function(element, target, options) { if(options && options.extend && options.extend === true) { Element.Extend(target, element.outerHTML); }
else { Element.update(target, element.outerHTML); }
Element.remove(element); return true; }
Element.scrollContainer = function(container, target) { var element_y = $(target).offsetTop; var container_y = $(container).offsetTop; $(container).scrollTop = (element_y-container_y); return true; }
}
if(externals['ajax']) { Ajax.Extender = function(container,url,options) { if(options.onLoad) { options.onLoad(); }
var old_opts = options.onComplete; options.onComplete = function(e) { var response = e.responseText;$(container).innerHTML += response;if(options.evalScripts == true) { response.evalScripts(); }old_opts(); }; new Ajax.Request(url,options); return true; }
Ajax.ExtUpdater = function(container,url,options) { if(options.onLoad) { options.onLoad(); }
return new Ajax.Updater(container,url,options); }
Ajax.ExtRequest = function(url,options) { if(options.onLoad) { options.onLoad(); }
return new Ajax.Request(url,options); }
Ajax.isAvailable = function() { try { new XMLHttpRequest(); return 'XMLHttpRequest'; }
catch(e) { try { new ActiveXObject('Msxml2.'); return 'Msxml2.XMLHTTP ActiveX'; }
catch(e) { try { new ActiveXObject('Microsoft.XMLHTTP'); return 'Microsoft.XMLHTTP ActiveX'; }
catch(e) { return false; }
}
}
return false; }
}
if(externals['cookie']) { var Cookie = { getVar: function(name,part_of) { if(typeof part_of == 'string') { var tmp = Cookie.getVar(part_of); if(!tmp.blank() && tmp.isJSON()) { var j_cookie = tmp.evalJSON(); return j_cookie.elements[name]; }
else { return ''; }
}
else { var cookie = document.cookie; if (cookie.length > 0) { cookie += ';'; }
re = new RegExp(name + '\=(.*?);' ); if (cookie.match(re)) { return RegExp.$1; }
else { return ''; }
}
}, setVar: function(name,value,expire,path,part_of) { if(part_of) { var tmp = Cookie.getVar(part_of); if(tmp.isJSON() && !tmp.blank()) { var j_cookie = {}; j_cookie = tmp.evalJSON(); if(j_cookie.elements) { j_cookie.elements[name] = value; }
}
else { var element = {}; element[name] = value; var j_cookie = {elements: element}; }
if(path) { document.cookie = part_of+'='+Object.toJSON(j_cookie)+'; path='+path; }
else { document.cookie = part_of+'='+Object.toJSON(j_cookie); }
}
else { document.cookie = name + '=' + value; }
}, removeVar: function(name) { var date = new Date(12); document.cookie = name + '=;expires=' + date.toUTCString(); }
}
}
if(externals['utf8']) { var UTF8 = {}; UTF8 = Class.create(); UTF8.encode = function(text) { text = text.replace(/\r\n/g,"\n"); var utftext = ""; for(var n=0; n < text.length; n++) { var c = text.charCodeAt(n); if (c<128) { utftext += String.fromCharCode(c); }
else if((c>127) && (c<2048)) { utftext += String.fromCharCode((c>>6)|192); utftext += String.fromCharCode((c&63)|128); }
else { utftext += String.fromCharCode((c>>12)|224); utftext += String.fromCharCode(((c>>6)&63)|128); utftext += String.fromCharCode((c&63)|128); }
}
return utftext; }
UTF8.decode = function(text) { var plaintext = ""; var i = 0; var c = 0; var c1 = 0; var c2 = 0; while(i<text.length) { c = text.charCodeAt(i); if (c<128) { plaintext += String.fromCharCode(c); i++; }
else if((c>191) && (c<224)) { c2 = text.charCodeAt(i+1); plaintext += String.fromCharCode(((c&31)<<6) | (c2&63)); i+=2; }
else { c2 = text.charCodeAt(i+1); c3 = text.charCodeAt(i+2); plaintext += String.fromCharCode(((c&15)<<12) | ((c2&63)<<6) | (c3&63)); i += 3; }
}
return plaintext; }
}
if(externals['array']) { Array.in_array = function(needle, haystack) { if(haystack && needle) { for(var i = 0; i < haystack.length;i++) { if(needle == haystack[i]) { return true; }
}
}
return false; }
Array.search = function(needle, haystack) { if(haystack && needle) { for(var i = 0; i < haystack.length;i++) { if(needle == haystack[i]) { return i; }
}
}
return null; }
Array.remove = function(needle, haystack) { if(haystack && needle) { for(var i = 0; i < haystack.length;i++) { if(haystack[i] == needle) { haystack.splice(i,1); break; }
}
}
return haystack; }
}
if(externals['web']) { var Web = {}; Web = Class.create(); Web = { popup: function(width,height,scrollbar,target,window_name,resizable) { if(!window_name) { window_name = "win__"+Math.random(); }var x = 0; var y = 0; var parameter = '';height -= 20;if (width < screen.availWidth || height < screen.availHeight) {x = (screen.availWidth - width - 12) / 2; y = (screen.availHeight - height - 104) / 2; if (window.opera) { y = 0; }
if (x < 0 || y < 0) { x = 0; y = 0; }
else { parameter = 'width='+ width +',height=' + height + ','; }
}
if(scrollbar == true) { scrollbar = 'yes'; }
else { scrollbar = 'no'; }
if(resizable == false) { resizable = 'no'; }
else { resizable = 'yes'; }
parameter += 'left=' + x + ',top=' + y; parameter += ',menubar=0,location=0,toolbar=0,status=0'; parameter += ',resizable=' + resizable + ',scrollbars=' + scrollbar + ''; var win = window.open( target, window_name, parameter);if (win) { win.focus(); }return win; }, open: function(url, width, height, window_name, scrollbar, resizable) { return Web.popup(width, height, scrollbar, url, window_name, resizable); }, check_flash: function() { var version = false;if(navigator.plugins && navigator.mimeTypes.length){ var x = navigator.plugins["Shockwave Flash"]; if(x && x.description) { version = x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split("."); }
}else if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0){ var axo = 1; var counter = 3; while(axo) { try { counter++; axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash."+ counter); version = counter; }
catch (e) { axo = null; }
}
}
else if(typeof(ActiveXObject) == 'function'){ try{ var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); }catch(e){ try { var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); version = 6; axo.AllowScriptAccess = "always"; }
catch(e) { if (version == 6) {return version; }
}
try { axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); }
catch(e) {}
}
if (axo != null) { version = axo.GetVariable("$version").split(" ")[1].split(","); }
}return version; }, backiframe: function(element_id, iframe_id, override) {if(!element_id || !$(element_id)) { return false; }
if(!iframe_id) { iframe_id = 'fix__backiframe'; }var browser = navigator.userAgent; if(override || (browser && browser.indexOf("MSIE") != -1 && browser.indexOf("Mac") == -1)) {if (!override && typeof(document.body.style.maxHeight) != "undefined") { return false; }var zindex = 1; if($(element_id).style.zIndex > 1) { zindex = ($(element_id).style.zIndex-1); }
if(!$(iframe_id)) { var iframe = '<iframe id="'+iframe_id+'" class="fix__backiframe" src="/blank.html" style="z-index: '+zindex+'; position: absolute; border: 0; display: none; filter: progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)" ></iframe>';new Insertion.After(element_id, iframe); }
var frame = $(iframe_id); if(frame) { Element.show(frame); frame.style.top = $(element_id).offsetTop+'px'; frame.style.left = $(element_id).offsetLeft+'px'; frame.style.height = $(element_id).offsetHeight+'px'; frame.style.width = $(element_id).offsetWidth+'px'; frame.style.zIndex = zindex; }
}
return iframe_id; }
}
}
delete externals; 
 Ajax.call = {}; Ajax.call = Class.create(); Ajax.call.prototype = { call_url: false, parameters: false, options: {}, result: false, loader: false, loading: false, element: false, callbacks: {}, type: 'ajax', initialize: function(url, parameters, options, prepare) { var exec = false;if(url) { var execute = this.prepare(url, parameters, options); }if(execute && !prepare) { this.exec(); }else { return null; }
}, prepare: function(url, parameters, options) { this.options = {}; this.parameters = {}; if(!Object.isString(url) && typeof(url) == 'object' && Object.keys(url).length > 0) {this.parameters = url; if(typeof(parameters) == 'object' && Object.keys(parameters).length > 0) { this.options = parameters; }
}else if(Object.isString(url)) {this.call_url = url; if(typeof(parameters) == 'object' && Object.keys(parameters).length > 0) { this.parameters = parameters; }if(typeof(options) == 'object' && Object.keys(options).length > 0) { this.options = options; }
}else { Debug.out('Ajax.call: first parameter is no valid url or parameter assoc', false, 'warning'); return false; }
if(!this.call_url && !Object.isUndefined($call_url)) { this.call_url = $call_url; }
else if(!this.call_url) { this.call_url = '/'; }return this; }, exec: function() { if(this.loading == true) { Debug.out('Ajax.call: call is working'); return false; }this.loading = true;this.parse_options();var parameters = ''; if(this.parameters) { parameters = Object.toQueryString(this.parameters); }
if(this.loader) { this.loader.show(); }if(!Object.isUndefined(this.options.disable)) { var element = 'screen'; if(Object.isString(this.options.disable)) { element = this.options.disable; }
var options = { visible:true, color: '#000' }; if(!Object.isUndefined(this.options.disable_options)) { options = this.options.disable_options; }Element.disable(element, options); delete element; delete options; }
if(Object.isFunction(this.options.load)) { this.options.load.bind(this)(); }var method = 'post'; if(!Object.isUndefined(this.options.method)) { method = this.options.method; }else if(this.call_url.match(/\.(\D+)$/) && !this.call_url.match(/\.php$/)) { method = 'get'; }new Ajax.Request(this.call_url,{parameters: parameters,method: method,onSuccess: function(res){if(this.loader){this.loader.hide();}if(!Object.isUndefined(this.options.disable)){Element.enable('screen');}this.result = res;this.loading = false;if(Object.isFunction(this.options.success)){this.options.success.bind(this)(this.get_result());}var target = false;switch(this.options.target){case 'top':case 'before':case 'after':case 'bottom':target = this.options.target;break;case 'replace':target = this.options.target;break;default:target = true;break;}if(this.options.element &&$(this.options.element)){this.element = this.options.element;}else if(this.options.element){Debug.out('Ajax.call: content insertion failed. element not found in DOM', false, 'warning');}if(target &&this.element &&this.get_result()){if(Object.isString(target) &&target == 'replace'){var dummy = '<div id="insert_dummy" style="display:none;"></div>';Element.insert(this.element, {after: dummy});Element.remove(this.element);Element.insert('insert_dummy', {after: this.get_result()});Element.remove('insert_dummy');delete param, dummy;}else if(Object.isString(target)){var param = {};param[target] = this.get_result();Element.insert(this.element, param);delete param;}else{Element.update(this.element, this.get_result());}}delete target;if(Object.isFunction(this.options.complete)){this.options.complete.bind(this)(this.get_result());}}.bind(this),onFailure: function(res){this.loading = false;if(Object.isFunction(this.options.fail)){this.options.fail.bind(this)();}Debug.out('Ajax.call: Execution failed - ('+e.status+') '+e.statusText, false, 'error');this.result = e;}.bind(this)}); }, recall: function(url, parameters, options) { if(url) { this.call_url = url; }
if(parameters) { this.parameters = parameters; }
if(options) { this.options = options; }
this.exec(); return true; }, parse_options: function() { if(this.options) {if(Object.isString(this.options.loader) && !Object.isUndefined(Loader)) {this.loader = new Loader(this.options.loader); }else if(Object.isString(this.options.loader) && Object.isUndefined(Loader)) { Debug.out('Ajax.call: Loader class is not defined. jbc__loader.js is required for loader option.', false, 'warning'); }
if(Object.isString(this.options.call_url)) { this.call_url = this.options.call_url; }
}
}, get_status: function() { if(this.result.status) { var result = {status: this.result.status,info: this.result.statusText}; return result; }return null; }, get_json: function() { if(this.result.responseJSON) { return this.result.responseJSON; }return null; }, set_result: function(result) { if(result) { this.result.responseText = result; return true; }return false; }, get_result: function() { if(this.result.responseText) { return this.result.responseText; }return null; }, get_xml: function() { if(this.result.responseXML) { return this.result.responseXML; }return null; }, set_options: function(options) { if(typeof(options) == 'object' && Object.keys(options).length > 0) { this.options = options; return true; }return false; }, set_call_url: function(call_url) { if(Object.isString(call_url)) { this.call_url = call_url; return true; }return false; }, add_parameter: function(key, value) { if(Object.isString(key) && Object.isString(value)) { this.parameters[key] = value; }
}, get_parameter: function(key) { if(!Object.isUndefined(this.parameters[key])) { return this.parameters[key]; }
}, remove_parameter: function(key) { if(Object.isString(key)) { delete this.parameters[key]; }
}, add_option: function(key, value) { if(Object.isString(key) && value) { this.options[key] = value; }
}, get_option: function(key) { if(!Object.isUndefined(this.options[key])) { return this.options[key]; }
}, remove_option: function(key) { if(Object.isString(key)) { delete this.options[key]; }
}
}

 var Render = {}; Render = Class.create(); Render.prototype = { template: false, vars: false, blocks: false, obj: false, cache: false, initialize: function() {}, render: function(content, vars, blocks, obj, options) { this.parse(content, vars, blocks, obj, options);}, parse: function(content, vars, blocks, obj, options) {content = content.strip();if(!content) { Debug.out('Render.parse: no content to parse', false, 'error'); return false; }if(vars && typeof(vars) == 'object' && Object.keys(vars).length > 0) { this.vars = vars; }if(blocks && typeof(blocks) == 'object' && Object.keys(blocks).length > 0) { this.blocks = blocks; }if(obj && Object.isArray(obj) && obj.length > 0) { this.obj = obj; }
if(this.vars) { var tmpl = new Template(content, /(^|.|\r|\n)(\%(\w+)\%)/); content = tmpl.evaluate(this.vars); delete tmpl; }if(this.blocks) { content = content.replace(/\n/mgi, "[[n]]"); content = content.replace(/\r/mgi, "");for(var key in this.blocks) { var blocks = new RegExp('%BEGIN bl:'+key+'%(.*)%END bl:'+key+'%', 'img'); blocks = blocks.exec(content)[1];var result = ''; this.blocks[key].each(function(values, idx){result += blocks;for(var k in values){result = result.replace(new RegExp('%'+key+':'+k+'%'), values[k]);}}.bind(this)); result = result.replace(new RegExp('%'+key+':\\w+%', 'mgi'), ''); content = content.replace(new RegExp('(%BEGIN bl:'+key+'%).*(%END bl:'+key+'%)', 'mgi'), result); }
content = content.replace(/\[\[n\]\]/mgi, "\n"); }if(this.obj) { this.obj.each(function(value, key){content = content.replace(/\n/mgi, "[[n]]");content = content.replace(/\r/mgi, "");content = content.replace(/\t/mgi, " "); content = content.replace(new RegExp('%BEGIN obj:'+value+'%.*%END obj:'+value+'%', 'img'), "");content = content = content.replace(/\[\[n\]\]/mgi, "\n");}.bind(this)); content = content.replace(new RegExp('(%BEGIN obj:\\w+%)|(%END obj:\\w+%)', 'img'), ""); }content = content.replace(new RegExp('(%\\w+%)', 'img'), ""); content = content.replace(new RegExp('(%.*%)', 'img'), "");this.cache.result = content;return content; }, get: function() { if(this.cache.result) { return this.cache.result; }
return null; }
}
 var Calendar = {}; Calendar = Class.create(); Calendar.prototype = { cache: {}, language: 'de', prefix: false, date: false, current: false, vars: false, initialize: function(template, options) {this.cache = {}; this.vars = {}; this.prefix = 'cal'+Math.random(); this.date = new Time(); this.current = this.date.get_today();this.cache['ev_hide'] = this.hide.bindAsEventListener(this);this.cache['options'] = {}; if(options) { if(!options.type) { options.type = 'table'; }
this.cache['options'] = options; }this.parse_options();this.vars = {btn_next: this.prefix+'__next',btn_previous: this.prefix+'__previous',btn_today: this.prefix+'__today',wrapper: this.prefix+'__wrapper',prefix: this.prefix};var targets = this.cache['options']['target']; if(Object.isElement(targets)) { targets = []; targets.push(this.cache['options']['target']); }for(var i = 0; i < targets.length; i++) {Event.observe(targets[i], 'click', this.target_click.bindAsEventListener(this)); }this.load_template(template); }, load_template: function(template) { this.cache['template'] = false;if(Object.isString(template) && template.match(/\.html$/)) { if(!Object.isFunction(Ajax.call)) { Debug.out('Calendar.load_template: Required "Ajax" Class not found'); return false; }var call = new Ajax.call(template,{},{success: function(res){ this.cache['template'] = res;this.render();}.bind(this)}); }
else if(Object.isString(template)) { this.cache['template'] = template; this.render(); }
else { Debug.out('Calendar.load_template: no valid template given'); return false; }return true; }, render: function(show) { if(!this.cache['template']) { Debug.out('Calendar.parse: nothing to parse'); }if(Object.isFunction(this.cache['options']['pre_callback'])) { this.cache['options']['pre_callback'].bind(this)(); }var template = this.cache['template'];var vars = {}; var blocks = {}; var obj = {};var split = 7; var max_rows = 6;var date = this.get_date(); var last_day = this.date.get_last_day(date); var first_day = this.date.get_first_weekday(date);var meta = this.date.get_meta_data(this.language);blocks['row0'] = []; meta['weekdays_short'].each(function(value, key){blocks['row0'].push({value: value});});var current_row = 1;blocks['row'+current_row] = [];for(var i = 0; i < first_day-1; i++) { blocks['row'+current_row][i] = {value: '&nbsp;'}; }var j = first_day-1; var day = 1; for(var i = first_day; i < (last_day + first_day); i++) { blocks['row'+current_row][j] = {value: day}; j++; day++; if((i % split) == 0) { current_row++; blocks['row'+current_row] = []; j = 0; }
}
if(!blocks['row'+max_rows]) { var obj = ['row'+max_rows] }var open_days = blocks['row'+current_row].length; open_days = 7 - open_days;for(var i = 0; i < open_days; i++) { blocks['row'+current_row].push({value: '&nbsp;'}); }if(Object.isFunction(this.cache['options']['render_callback'])) { this.cache['options']['render_callback'].bind(this)(); }else if(this.cache['options']['render_callback'].length > 0) { for(var i = 0; i < this.cache['options']['render_callback'].length; i++) { this.cache['options']['render_callback'][i].bind(this)(); }
}
this.vars['current_day'] = this.current['day']; this.vars['current_day_full'] = meta['weekdays_long'][this.date.get_weekday(this.current)-1]; this.vars['current_month'] = this.current['month']; this.vars['current_month_full'] = meta['months_long'][this.current['month']-1]; this.vars['current_year'] = this.current['year'];if(!Object.isUndefined(this.cache['options']['blocks'])) { for(var i in this.cache['options']['blocks']) { if(!Object.isFunction(this.cache['options']['blocks'][i])) { blocks[i] = this.cache['options']['blocks'][i]; }
}
}var template = new Render().parse(template, this.vars, blocks, obj);this.cache['calendar'] = template;if(!$(this.vars['wrapper'])) { new Insertion.Bottom(document.body, this.cache['calendar']); }
else { Element.replace(this.vars['wrapper'], this.cache['calendar']); this.show(); }
this.add_listener();$(this.vars['wrapper']).calendar = this;this.cache['current_view'] = this.get_date();if(show) { this.show(false, true); }return true; }, parse_options: function() { if(!Object.isUndefined(this.cache['options'])) { var options = this.cache['options'];if(!Object.isUndefined(options['prefix'])) { this.prefix = options['prefix']; }
if(!Object.isUndefined(options['language'])) { this.set_language(options['language']); }if(!Object.isUndefined(options['target']) && !$(options['target'])) { Debug.out('Calendar.parse_options: target not found!'); }if(!Object.isUndefined(options['disable'])) { var disabled = []; if(Object.isArray(options['disable'])) { disabled = options['disable']; }
else if(Object.isString(options['disable'])) { disabled.push(options['disable']); }
this.cache['disable'] = []; disabled.each(function(value){var date = value;if(value.match(/-/)){var modificator = '-';value = value.split('-'); var date = {};date['from'] = this.date.normalize(value[0]);date['to'] = this.date.normalize(value[1]);}else if(value.match(/([<>])/)){var modificator = value.match(/([<>])/)[1];value = date.replace(/([<>])/, '');value = this.date.normalize(value);var date = {};date[modificator] = value;}else{date = this.date.normalize(date);}this.cache['disable'].push(date);delete date;}.bind(this)); }
}
}, center_to_target:function(target, ev) { if($(target)) { var pos = Element.cumulativeOffset(target); var x = pos[0]; var y = pos[1];$(this.vars['wrapper']).style.left = (x)+'px'; $(this.vars['wrapper']).style.top = (y)+'px'; }return true; }, target_click: function(ev) { Event.stop(ev);if(Object.isFunction(this.cache['options']['open_callback'])) { this.cache['options']['open_callback'].bind(this)(ev); }this.show(ev, true);return true; }, add_listener: function() { if($(this.vars['btn_next'])) { Event.observe(this.vars['btn_next'], 'click', this.next_month.bindAsEventListener(this)); }
if($(this.vars['btn_previous'])) { Event.observe(this.vars['btn_previous'], 'click', this.previous_month.bindAsEventListener(this)); }
if($(this.vars['btn_today'])) { Evnt.observe(this.vars['btn_today'], 'click', this.set_today.bindAsEventListener(this)); }var today = this.date.get_today();switch(this.cache['options']['type']) { default: Event.observe(this.vars['wrapper'], 'click', function(ev){Event.stop(ev)}); var els = Element.descendants(this.vars['wrapper']); els.each(function(value, key){if($(value).tagName == 'TD' &&$(value).innerHTML.match(/^\s*([0-9]+)\s*$/)){var day = value.innerHTML;day = day.match(/^\s*([0-9]+)\s*$/)[1];if(day == today['day'] &&this.current['month'] == today['month'] &&this.current['year'] == today['year'] &&this.cache['options']['today_css']){Element.addClassName(value, this.cache['options']['today_css']);}else if(this.cache['options']['today_css']){Element.removeClassName(value, this.cache['options']['today_css']);}if(day == parseInt(this.current['day'], 10) &&this.cache['options']['active_css']){Element.addClassName(value, this.cache['options']['active_css']);}else if(this.cache['options']['active_css']){Element.removeClassName(value, this.cache['options']['active_css']);}
var date = {day: day,month: this.current['month'],year: this.current['year'],timestamp: new Date(this.current['year'], this.current['month'], day, 0, 0, 0).getTime()}; if(this.is_disabled(date)){if(this.cache['options']['disabled_css']){Element.addClassName(value, this.cache['options']['disabled_css']);}Event.observe(value, 'click', function(ev){Event.stop(ev)});}else{if(this.cache['options']['disabled_css']){Element.removeClassName(value, this.cache['options']['disabled_css']);}Event.observe(value, 'click', this.select.bind(this, value));}if(this.cache['options']['empty_css']){Element.removeClassName(value, this.cache['options']['empty_css']);}}else if($(value).tagName == 'TD'){if(this.cache['options']['empty_css']){Element.addClassName(value, this.cache['options']['empty_css']);}}}.bind(this)); break; }
return true; }, show: function(ev, center) {if(Object.isFunction(this.cache['options']['show_callback'])) { this.cache['options']['show_callback'].bind(this)(ev); }if(ev) { this.cache['current_target'] = Event.element(ev); }if(this.cache['current_target'] && center) { this.center_to_target(this.cache['current_target']); }if(this.cache['current_view']) { var old_date = this.cache['current_view']; var new_date = this.get_date();if(old_date['day'] != new_date['day'] || old_date['month'] != new_date['month'] || old_date['year'] != new_date['year']) { this.render(); }
}Element.show(this.vars['wrapper']);Web.backiframe(this.vars['wrapper'], this.vars['wrapper']+'__fix__backiframe');Event.observe(document.body, 'click', this.cache['ev_hide']); if(ev) { Event.stop(ev); }
return true; }, hide: function(ev) { if($(this.vars['wrapper'])) { Element.hide(this.vars['wrapper']); if($(this.vars['wrapper']+'__fix__backiframe')) { Element.hide(this.vars['wrapper']+'__fix__backiframe'); }
if(ev) { Event.stop(ev); }
Event.stopObserving(document.body, 'click', this.cache['ev_hide']); }
}, get_date: function() { this.current['day'] = parseInt(this.current['day'], 10); this.current['month'] = parseInt(this.current['month'], 10); this.current['hour'] = parseInt(this.current['hour'], 10); this.current['minutes'] = parseInt(this.current['minutes'], 10);if(this.current['day'] < 10) { this.current['day'] = '0'+this.current['day']; }if(this.current['month'] < 10) { this.current['month'] = '0'+this.current['month']; }if(this.current['hour'] < 10) { this.current['hour'] = '0'+this.current['hour']; }
if(this.current['minutes'] < 10) { this.current['minutes'] = '0'+this.current['minutes']; }return this.current; }, is_disabled: function(date) { var result = false; if(!Object.isUndefined(this.cache['disable'])) { this.cache['disable'].each(function(disable, key){if(disable['from'] &&disable['to']){if(date['timestamp'] >= disable['from']['timestamp'] &&date['timestamp'] <= disable['to']['timestamp']){result = true;$break;}}else if(disable['<']){if(date['timestamp'] <= disable['<']['timestamp']){result = true;$break;}}else if(disable['>']){if(date['timestamp'] >= disable['>']['timestamp']){result = true;$break;}}else if(date['day'] == disable['day'] &&date['month'] == disable['month'] &&date['year'] == disable['year']){result = true;$break;}}.bind(this)); }
return result; }, select: function(element) { var day = element.innerHTML; day = day.match(/^\s*([0-9]+)\s*$/)[1];this.current['day'] = day; this.render();if(!Object.isFunction(this.cache['options']['callback'])) { Debug.out('Calendar.select: no valid callback is defined! done nothing here...', false, 'warning'); }
else { this.cache['options']['callback'].bind(this)(); }this.hide(); return true; }, next_month: function() { this.current['month'] = parseInt(this.current['month'], 10) + 1;if(this.current['month'] > 12) { this.current['month'] = 1; this.current['year']++; }
this.render(true); }, previous_month: function() { this.current['month'] = parseInt(this.current['month'], 10) - 1; if(this.current['month'] < 1) { this.current['month'] = 12; this.current['year']--; }
this.render(true); }, set_today: function() { this.current = this.date.get_today(); this.render(true); }, set_year: function(year) { if(year) { this.current['year'] = year; this.render(true); }
}, set_month: function(month) { if(month) { this.current['month'] = month; this.render(true); }
}, set_language: function(language_short) { if(!language_short) { Debug.out('Calendar.set_language: no language short given'); }
this.language = language_short; }, set_prefix: function(prefix) { if(!prefix) { Debug.out('Calendar.set_prefix: no valid prefix given'); }
else if($(prefix+'__wrapper')) { prefix += Math.rand(); Debug.out('Calendar.set_prefix: prefix already in use. added random number.'); }this.prefix = prefix; }
}
var Time = {}; Time = Class.create(); Time.prototype = { date: false, language: 'de', initialize: function() { this.date = new Date(); }, get_today: function() { var today = {}; today['day'] = this.date.getDate(); today['month'] = parseInt(this.date.getMonth(), 10)+1; today['year'] = this.date.getFullYear(); today['hour'] = this.date.getHours(); today['minute'] = this.date.getMinutes(); return today; }, get_last_day: function(date) { var max_day = 31; var last_map = new Array(31,28,31,30,31,30,31,31,30,31,30,31);date = this.normalize(date);if(!date || !date['month'] || !date['year']) { Debug.out('Time.get_last_day: using today (no valid date given)'); date = this.get_today(); }var month = date['month']; var year = date['year'];if(month == 2 && this.is_leapyear(year)) { max_day = 29; }
else if(month == 2) { max_day = 28; }
else { max_day = last_map[month-1]; }
return max_day; }, get_meta_data: function(language) { if(!language) { language = this.language; }
var meta = {};meta['de'] = {}; meta['de']['weekdays_short'] = ['Mo','Di','Mi','Do','Fr','Sa','So']; meta['de']['weekdays_long'] = ['Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag','Sonntag']; meta['de']['months_short'] = ['Jan','Feb','M&auml;r','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'];meta['de']['months_long'] = ['Januar','Februar','M&auml;rz','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'];meta['en'] = {}; meta['en']['weekdays_short'] = ['Mo','Tu','We','Th','Fr','Sa','Su'];meta['en']['weekdays_long'] = ['Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday']; meta['en']['months_short'] = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; meta['en']['months_long'] = ['Januaray','February','March','April','May','June','July','August','September','October','November','December'];return meta[language]; }, is_leapyear: function (year) { if(year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)) { return true; }
return false; }, get_first_weekday: function(date) { var date = {day: 1,month: date['month'],year: date['year']};return this.get_weekday(date); }, get_weekday: function(date) { date = this.normalize(date);if(!date || !date['month'] || !date['year']) { Debug.out('Time.get_last_day: using today (no valid date given)'); date = this.get_today(); }var date = new Date(date['year'], date['month']-1, date['day']); date = date.getDay(); if(date <= 0) { date = 7; }
return date; }, get_month_name: function(month, use_short) { var meta = this.get_meta_data(); var idx = 'months_long'; if(use_short) { idx = 'months_short'; }
return meta[idx][(month-1)]; }, normalize: function(value) {if(!Object.isString(value)) { return value; }var match = false; var map = [];var value = value.strip(); switch(value) { case 'today': var result = this.get_today(); result['timestamp'] = new Date(result['year'], result['month'], result['day'], 0, 0, 0).getTime(); return result; break; case 'yesterday': var result = this.get_today(); var day = result['day']-1; result = this.normalize(day+'.'+result['month']+'.'+result['year']); result['timestamp'] = new Date(result['year'], result['month'], result['day'], 0, 0, 0).getTime(); return result; break; }var regexp_map = [/((\d{0,4})[\. ,\/-](\d{1,2})[\. ,\/-](\d{1,2}))\s*((\d{0,2})[\.,: ]*(\d{0,2}))/,/((\d{1,2})[\. ,\/-](\d{1,2})[\. ,\/-](\d{0,4}))\s*((\d{0,2})[\.,: ]*(\d{0,2}))/]; var field_map = [['fullstring', 'fulldate', 'year', 'day', 'month', 'fulltime', 'hour', 'minute'],['fullstring', 'fulldate', 'day', 'month', 'year', 'fulltime', 'hour', 'minute']];regexp_map.each(function(regex, key){if(regex.test(value)){match = regex.exec(value);map = field_map[key];$break;}});var today = this.get_today(); var result = false; if(match && match.length > 0) { result = {}; map.each(function(value, key){if(match[key]){result[value] = match[key];}else if(today[value]){result[value] = today[value];}}
); result['timestamp'] = new Date(result['year'], result['month'], result['day'], 0, 0, 0).getTime(); }return result; }
}

 var Completer = {}; Completer = Class.create(); Completer.prototype = { cache: false, vars: false, prefix: 'completer', initialize: function(template, options) { if(Object.isUndefined(template)) { Debug.out('no template found'); }
this.cache = {}; this.cache['options'] = {}; this.vars = {wrapper: this.prefix+'__wrapper'}; this.cache['events'] = {}; this.cache['events']['hide'] = this.hide.bindAsEventListener(this); if(options) { this.cache['options'] = options; }if(typeof(Keys) != 'undefined') { this.cache['keys'] = new Keys(); }
else { this.cache['keys'] = false; Debug.out('Completer.initialize: no key handler found. key navigation is disabled.'); }this.parse_options(); this.load_template(template); }, load_template: function(template) { this.cache['template'] = false;if(Object.isString(template) && template.match(/\.html$/)) { if(!Object.isFunction(Ajax.call)) { Debug.out('Calendar.load_template: Required "Ajax" Class not found'); return false; }var call = new Ajax.call(template,{},{success: function(res){ this.cache['template'] = res;this.get_data(true);}.bind(this)}); }
else if(Object.isString(template) && $(template)) { this.cache['template'] = $(template).innerHTML; this.get_data(true); }
else if(Object.isString(template)) { this.cache['template'] = template; this.get_data(true); }
else { Debug.out('Calendar.load_template: no valid template given'); return false; }
return true; }, render: function(data, prepare, ev) {if(!data) { return this.get_data(); }
var template = this.cache['template']; var blocks = {}; var obj = [];blocks['results'] = []; var cnt = 1;for(var key in data) { var value = data[key]; if(value && this.cache['query'] && this.cache['query'].strip() != '' && this.cache['options']['limit'] && cnt < this.cache['options']['limit']) { var active = ''; var matched = false; if(Object.isString(value) && data[key].match(new RegExp(this.cache['query'], 'img'))) { if(this.cache['options']['match']) { var match = this.cache['options']['match']; value = value.replace(new RegExp('('+this.cache['query']+')', 'img'), match); }
matched = true; }if(key.match(/^except\d*$/)) { matched = true; }if(value && value.strip() != '' && (!this.cache['query'] || matched == true)) { var except = ''; if(key.match(/^except\d*$/) && this.cache['options']['except']) { except = this.cache['options']['except']; }
var row = {id: key,value: value,active: active,except: except};blocks['results'].push(row);cnt++; delete row; }
}
}
if(this.cache['options']['limit'] && cnt >= this.cache['options']['limit'] && this.cache['options']['limit_value']) { var except = ''; if(this.cache['options']['limit_css']) { except = this.cache['options']['limit_css']; }
var row = {id: 'except0',value: this.cache['options']['limit_value'],except: except}; blocks['results'].push(row); }var template = new Render().parse(template, this.vars, blocks, obj);if(!$(this.vars['wrapper'])) { if($(this.cache['options']['target'])) { new Insertion.After(this.cache['options']['target'], template); }
else { new Insertion.Bottom(document.body, template); }
this.center_to_target(); }
else { Element.replace(this.vars['wrapper'], template); this.center_to_target(); }this.add_listener();if(!prepare) { this.show(ev); }
return true; }, add_listener: function() { this.cache['listener'] = {}; this.cache['listener']['key_handler'] = this.key_handler.bindAsEventListener(this);Event.observe(this.cache['options']['target'], 'click', this.render.bind(this, this.cache['options']['data'], false)); Event.observe(this.cache['options']['target'], 'keyup', this.cache['listener']['key_handler']); if($(this.vars['wrapper'])) { var els = Element.descendants(this.vars['wrapper']); this.cache['open_list'] = [];els.each(function(value, key){if(value.tagName.toLowerCase() == this.cache['options']['tag']){if(!value.id.match(/^except/)){this.cache['open_list'].push(value);Event.observe(value, 'click', this.select.bindAsEventListener(this, value));}}}.bind(this) );if(this.cache['open_list'].length > 0) { this.cache['nav_position'] = this.cache['open_list'].first(); this.cache['open_list'].first().addClassName(this.cache['options']['active']) }if(this.cache['keys']) { this.cache['keys'].listen('up', this.move.bindAsEventListener(this, 'up')); this.cache['keys'].listen('down', this.move.bindAsEventListener(this, 'down')); this.cache['keys'].listen('pu', this.move.bindAsEventListener(this, 'pageup')); this.cache['keys'].listen('pd', this.move.bindAsEventListener(this, 'pagedown')); this.cache['keys'].listen('home', this.move.bindAsEventListener(this, 'home')); this.cache['keys'].listen('end', this.move.bindAsEventListener(this, 'end')); this.cache['keys'].listen('enter', this.select.bindAsEventListener(this)); }}
return true; }, move: function(ev, direction) { if($(this.vars['wrapper']) && Element.visible(this.vars['wrapper'])) { if(this.cache['options']['active']) { $(this.cache['nav_position']).removeClassName(this.cache['options']['active']); }switch(direction) { case 'up': var el = this.cache['open_list'].indexOf(this.cache['nav_position']); var el = this.cache['open_list'][el-1]; if(!el) { el = this.cache['open_list'].last(); }
break; case 'down': var el = this.cache['open_list'].indexOf(this.cache['nav_position']); var el = this.cache['open_list'][el+1]; if(!el) { el = this.cache['open_list'].first(); }
break; case 'pageup': var el = this.cache['open_list'].indexOf(this.cache['nav_position']); var el = this.cache['open_list'][el-5]; if(!el) { el = this.cache['open_list'].first(); }
break; case 'pagedown': var el = this.cache['open_list'].indexOf(this.cache['nav_position']); var el = this.cache['open_list'][el+5]; if(!el) { el = this.cache['open_list'].last(); }
break; case 'home': var el = this.cache['open_list'].first(); break; case 'end': var el = this.cache['open_list'].last(); break; }this.cache['nav_position'] = el; if(this.cache['options']['active']) { el.addClassName(this.cache['options']['active']); }
}
else if($(this.vars['wrapper'])) { this.show(); }
}, select: function(ev, value) { if(Element.visible(this.vars['wrapper'])) { if(!value) { value = this.cache['nav_position']; }var result = value.innerHTML.stripTags(); var result = String(result).unescapeHTML();if($(this.cache['options']['target']).tagName == 'INPUT') { $(this.cache['options']['target']).value = result; }
else { Element.update(this.cache['options']['target'], result); }if($(this.cache['options']['id_target'])) { $(this.cache['options']['id_target']).value = value.id; }
this.hide(ev); }
return true; }, show: function(ev) { if($(this.vars['wrapper']) && this.cache['open_list'].length > 0) { Element.show(this.vars['wrapper']); Event.observe(document.body, 'click', this.cache['events']['hide']);Web.backiframe(this.vars['wrapper'], this.vars['wrapper']+'__fix__backiframe'); if(ev) { Event.stop(ev); }
}
return true; }, hide: function(ev) { if($(this.vars['wrapper'])) { Element.hide(this.vars['wrapper']);if($(this.vars['wrapper']+'__fix__backiframe')) { Element.hide(this.vars['wrapper']+'__fix__backiframe'); }
}Event.stopObserving(document.body, 'click', this.cache['events']['hide']);if(ev) { Event.stop(ev); }
return true; }, key_handler: function(ev) { if(ev && (ev.keyCode >= 97 && ev.keyCode <= 122) || (ev.keyCode >=65 && ev.keyCode <= 90) || (ev.keyCode >= 48 && ev.keyCode <=57) || ev.keyCode == Event.KEY_BACKSPACE || ev.keyCode == Event.KEY_DELETE) { if(this.cache['time']) { clearTimeout(this.cache['time']); }
var el = Event.element(ev); if(!this.cache['options']['min'] || el.value.length >= this.cache['options']['min']) { this.cache['query'] = el.value; }this.cache['nav_position'] = false; this.cache['time'] = this.render.bind(this).delay(0.3); }
}, get_data: function(prepare) {if(!Object.isUndefined(this.cache['options']['call'])) { var call = this.cache['options']['call']; call.add_parameter('search', this.cache['query']);var old_callback = call.get_option('success'); var callback = function(res){var res = res.split('##');var data = {};res.each(function(row){var row = row.split('=>');var id = row[0];var value = row[1];if(value &&value != ''){data[id] = value;}}.bind(this));this.cache['options']['data'] = data;this.render(data, prepare);}.bind(this);call.add_option('success', callback); call.exec(); }
else if(this.cache['options']['data']) { if(typeof(this.cache['options']['data']) == 'object') { this.render(this.cache['options']['data'], prepare); }
else { Debug.out('Completer.get_data: no valid data hash found! use object',false,'warning'); }
}
else { Debug.out('Completer.get_data: no call or data found.'); return false; }
return true; }, center_to_target:function(target) { if(!target) { target = this.cache['options']['target']; }if($(target)) { var pos = Element.positionedOffset($(target)); var x = pos[0]; var y = pos[1]; $(this.vars['wrapper']).style.left = (x)+'px'; $(this.vars['wrapper']).style.top = (y+25)+'px'; }
return true; }, parse_options: function() { if(!Object.isUndefined(this.cache['options'])) { var options = this.cache['options']; if(Object.isUndefined(options['call']) || options['call'].type != 'ajax') { delete this.cache['options']['call']; }
if(Object.isString(options['prefix'])) { this.prefix = options['prefix']; }
}if(Object.isUndefined(this.cache['options']['tag'])) { this.cache['options']['tag'] = 'li'; }if(Object.isUndefined(this.cache['options']['target']) || !$(this.cache['options']['target'])) { Debug.out('Completer.parse_options: no target found. done nothing'); return false; }
else if($(this.cache['options']['target'])) {Element.writeAttribute(this.cache['options']['target'], 'autocomplete', 'off'); }
}
}

 var Keys = {}; Keys = Class.create(); Keys.prototype = { hold: false, listener: false, input_keys: false, initiated: false, locked: false, initialize: function(shortcut, callback, options) { this.hold = new Array(); this.listener = new Array();Event.observe(document, 'keydown', this.key_down.bindAsEventListener(this)); Event.observe(document, 'keyup', this.key_up.bindAsEventListener(this));this.input_keys = {'esc': 27,'escape': 27,'tab': 9,'space': 32,'return': 13,'enter': 13,'back': 8,'backspace': 8,'scroll': 145,'capslock': 20,'caps': 20,'numlock': 144,'num': 144,'pause': 19,'break': 19,'ins': 45,'insert': 45,'home': 36,'del': 46,'delete': 46,'end': 35,'pageup': 33,'pu': 33,'pagedown': 34,'pd': 34,'left': 37,'up': 38,'right': 39,'down': 40,'ctrl': 17,'strg': 17,'shift': 16,'alt': 18,'f1': 112,'f2': 113,'f3': 114,'f4': 115,'f5': 116,'f6': 117,'f7': 118,'f8': 119,'f9': 120,'f10': 121,'f11': 122,'f12': 123};this.initiated = true;if(shortcut && callback) { this.listen(shortcut, callback, options);}
}, key_down: function(event) { if(!Array.in_array(event.keyCode, this.hold)) {var key = event.keyCode; key = String.fromCharCode(key); key = key.toLowerCase(); key = key.charCodeAt(0);this.hold.push(key); }this.check(event); return true; }, key_up: function(event) {this.hold = new Array(); return true; }, listen: function(shortcut, callback, options) { var id = false;if(!this.initiated) { this.init(); }if(typeof(shortcut) == 'string') { shortcut = [shortcut]; }if(typeof(shortcut) == 'object') { id = this.translate(shortcut); delete shortcut;if(!Array.in_array(id, this.listener) && callback) { this.listener[id] = callback; }
}return id; }, translate: function(shortcut) { var listener = new Array(); shortcut.each(function(value, index){ var res = this.map(value);if(res){listener[index] = res;}}.bind(this)); listener = listener.sort().join().toString(); return listener; }, check: function(event) { if(this.hold && this.locked == false) { if(this.listener[this.hold.sort().join().toString()]) { this.listener[this.hold.sort().join().toString()](event); return true; }
}return false; }, stop: function(handle) { var id; if(typeof(handle) == 'string') { handle = [handle]; }
if(typeof(handle) == 'object') { id = this.translate(handle); if(!Array.in_array(id, this.listener)) { delete this.listener[id]; }
}
return true; }, map: function(key) { var result = false; var input_keys = this.input_keys;if(typeof(key) == 'number') { var tmp = new Array();for(var i in input_keys) { if(!tmp[input_keys[i]]) { tmp[input_keys[i]] = i; }
}
var input_keys = tmp; delete tmp; }
else { var key = key.toLowerCase(); }if(key.length == 1) { result = key.charCodeAt(0); }
else if(input_keys[key]) { result = input_keys[key]; }return result; }, exclude: function(elements) {if(typeof(elements) == 'string') { var elements = [elements]; }if(!elements) { var map = ['input','textarea','select'];var elements = new Array(); for(var i = 0; i < map.length; i++) { var els = document.getElementsByTagName(map[i].toUpperCase()); for(var j = 0; j < els.length; j++) { elements.push(els[j]); }delete els; }
}if(typeof(elements) == 'object' && elements.length > 0) {for(var i = 0; i < elements.length; i++) { Event.observe(elements[i],'focus',function(ev){this.locked = true;Event.stop(ev);return true;}.bindAsEventListener(this)); Event.observe(elements[i],'blur',function(ev){this.locked = false;Event.stop(ev);return true;}.bindAsEventListener(this)); }
}
return true; }
}
// script.aculo.us effects.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008

// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// Contributors:
//  Justin Palmer (http://encytemedia.com/)
//  Mark Pilgrim (http://diveintomark.org/)
//  Martin Bialasinki
// 
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/ 

// converts rgb() and #xxx to #xxxxxx format,  
// returns self (or first argument) if not convertable  
String.prototype.parseColor = function() {  
  var color = '#';
  if (this.slice(0,4) == 'rgb(') {  
    var cols = this.slice(4,this.length-1).split(',');  
    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  
  } else {  
    if (this.slice(0,1) == '#') {  
      if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  
      if (this.length==7) color = this.toLowerCase();  
    }  
  }  
  return (color.length==7 ? color : (arguments[0] || this));  
};

/*--------------------------------------------------------------------------*/

Element.collectTextNodes = function(element) {  
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue : 
      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
  }).flatten().join('');
};

Element.collectTextNodesIgnoreClass = function(element, className) {  
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue : 
      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? 
        Element.collectTextNodesIgnoreClass(node, className) : ''));
  }).flatten().join('');
};

Element.setContentZoom = function(element, percent) {
  element = $(element);  
  element.setStyle({fontSize: (percent/100) + 'em'});   
  if (Prototype.Browser.WebKit) window.scrollBy(0,0);
  return element;
};

Element.getInlineOpacity = function(element){
  return $(element).style.opacity || '';
};

Element.forceRerendering = function(element) {
  try {
    element = $(element);
    var n = document.createTextNode(' ');
    element.appendChild(n);
    element.removeChild(n);
  } catch(e) { }
};

/*--------------------------------------------------------------------------*/

var Effect = {
  _elementDoesNotExistError: {
    name: 'ElementDoesNotExistError',
    message: 'The specified DOM element does not exist, but is required for this effect to operate'
  },
  Transitions: {
    linear: Prototype.K,
    sinoidal: function(pos) {
      return (-Math.cos(pos*Math.PI)/2) + 0.5;
    },
    reverse: function(pos) {
      return 1-pos;
    },
    flicker: function(pos) {
      var pos = ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
      return pos > 1 ? 1 : pos;
    },
    wobble: function(pos) {
      return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
    },
    pulse: function(pos, pulses) { 
      pulses = pulses || 5; 
      return (
        ((pos % (1/pulses)) * pulses).round() == 0 ? 
              ((pos * pulses * 2) - (pos * pulses * 2).floor()) : 
          1 - ((pos * pulses * 2) - (pos * pulses * 2).floor())
        );
    },
    spring: function(pos) { 
      return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6)); 
    },
    none: function(pos) {
      return 0;
    },
    full: function(pos) {
      return 1;
    }
  },
  DefaultOptions: {
    duration:   1.0,   // seconds
    fps:        100,   // 100= assume 66fps max.
    sync:       false, // true for combining
    from:       0.0,
    to:         1.0,
    delay:      0.0,
    queue:      'parallel'
  },
  tagifyText: function(element) {
    var tagifyStyle = 'position:relative';
    if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';
    
    element = $(element);
    $A(element.childNodes).each( function(child) {
      if (child.nodeType==3) {
        child.nodeValue.toArray().each( function(character) {
          element.insertBefore(
            new Element('span', {style: tagifyStyle}).update(
              character == ' ' ? String.fromCharCode(160) : character), 
              child);
        });
        Element.remove(child);
      }
    });
  },
  multiple: function(element, effect) {
    var elements;
    if (((typeof element == 'object') || 
        Object.isFunction(element)) && 
       (element.length))
      elements = element;
    else
      elements = $(element).childNodes;
      
    var options = Object.extend({
      speed: 0.1,
      delay: 0.0
    }, arguments[2] || { });
    var masterDelay = options.delay;

    $A(elements).each( function(element, index) {
      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
    });
  },
  PAIRS: {
    'slide':  ['SlideDown','SlideUp'],
    'blind':  ['BlindDown','BlindUp'],
    'appear': ['Appear','Fade']
  },
  toggle: function(element, effect) {
    element = $(element);
    effect = (effect || 'appear').toLowerCase();
    var options = Object.extend({
      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
    }, arguments[2] || { });
    Effect[element.visible() ? 
      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
  }
};

Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;

/* ------------- core effects ------------- */

Effect.ScopedQueue = Class.create(Enumerable, {
  initialize: function() {
    this.effects  = [];
    this.interval = null;    
  },
  _each: function(iterator) {
    this.effects._each(iterator);
  },
  add: function(effect) {
    var timestamp = new Date().getTime();
    
    var position = Object.isString(effect.options.queue) ? 
      effect.options.queue : effect.options.queue.position;
    
    switch(position) {
      case 'front':
        // move unstarted effects after this effect  
        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
            e.startOn  += effect.finishOn;
            e.finishOn += effect.finishOn;
          });
        break;
      case 'with-last':
        timestamp = this.effects.pluck('startOn').max() || timestamp;
        break;
      case 'end':
        // start effect after last queued effect has finished
        timestamp = this.effects.pluck('finishOn').max() || timestamp;
        break;
    }
    
    effect.startOn  += timestamp;
    effect.finishOn += timestamp;

    if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
      this.effects.push(effect);
    
    if (!this.interval)
      this.interval = setInterval(this.loop.bind(this), 15);
  },
  remove: function(effect) {
    this.effects = this.effects.reject(function(e) { return e==effect });
    if (this.effects.length == 0) {
      clearInterval(this.interval);
      this.interval = null;
    }
  },
  loop: function() {
    var timePos = new Date().getTime();
    for(var i=0, len=this.effects.length;i<len;i++) 
      this.effects[i] && this.effects[i].loop(timePos);
  }
});

Effect.Queues = {
  instances: $H(),
  get: function(queueName) {
    if (!Object.isString(queueName)) return queueName;
    
    return this.instances.get(queueName) ||
      this.instances.set(queueName, new Effect.ScopedQueue());
  }
};
Effect.Queue = Effect.Queues.get('global');

Effect.Base = Class.create({
  position: null,
  start: function(options) {
    function codeForEvent(options,eventName){
      return (
        (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') +
        (options[eventName] ? 'this.options.'+eventName+'(this);' : '')
      );
    }
    if (options && options.transition === false) options.transition = Effect.Transitions.linear;
    this.options      = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
    this.currentFrame = 0;
    this.state        = 'idle';
    this.startOn      = this.options.delay*1000;
    this.finishOn     = this.startOn+(this.options.duration*1000);
    this.fromToDelta  = this.options.to-this.options.from;
    this.totalTime    = this.finishOn-this.startOn;
    this.totalFrames  = this.options.fps*this.options.duration;
    
    eval('this.render = function(pos){ '+
      'if (this.state=="idle"){this.state="running";'+
      codeForEvent(this.options,'beforeSetup')+
      (this.setup ? 'this.setup();':'')+ 
      codeForEvent(this.options,'afterSetup')+
      '};if (this.state=="running"){'+
      'pos=this.options.transition(pos)*'+this.fromToDelta+'+'+this.options.from+';'+
      'this.position=pos;'+
      codeForEvent(this.options,'beforeUpdate')+
      (this.update ? 'this.update(pos);':'')+
      codeForEvent(this.options,'afterUpdate')+
      '}}');
    
    this.event('beforeStart');
    if (!this.options.sync)
      Effect.Queues.get(Object.isString(this.options.queue) ? 
        'global' : this.options.queue.scope).add(this);
  },
  loop: function(timePos) {
    if (timePos >= this.startOn) {
      if (timePos >= this.finishOn) {
        this.render(1.0);
        this.cancel();
        this.event('beforeFinish');
        if (this.finish) this.finish(); 
        this.event('afterFinish');
        return;  
      }
      var pos   = (timePos - this.startOn) / this.totalTime,
          frame = (pos * this.totalFrames).round();
      if (frame > this.currentFrame) {
        this.render(pos);
        this.currentFrame = frame;
      }
    }
  },
  cancel: function() {
    if (!this.options.sync)
      Effect.Queues.get(Object.isString(this.options.queue) ? 
        'global' : this.options.queue.scope).remove(this);
    this.state = 'finished';
  },
  event: function(eventName) {
    if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
    if (this.options[eventName]) this.options[eventName](this);
  },
  inspect: function() {
    var data = $H();
    for(property in this)
      if (!Object.isFunction(this[property])) data.set(property, this[property]);
    return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
  }
});

Effect.Parallel = Class.create(Effect.Base, {
  initialize: function(effects) {
    this.effects = effects || [];
    this.start(arguments[1]);
  },
  update: function(position) {
    this.effects.invoke('render', position);
  },
  finish: function(position) {
    this.effects.each( function(effect) {
      effect.render(1.0);
      effect.cancel();
      effect.event('beforeFinish');
      if (effect.finish) effect.finish(position);
      effect.event('afterFinish');
    });
  }
});

Effect.Tween = Class.create(Effect.Base, {
  initialize: function(object, from, to) {
    object = Object.isString(object) ? $(object) : object;
    var args = $A(arguments), method = args.last(), 
      options = args.length == 5 ? args[3] : null;
    this.method = Object.isFunction(method) ? method.bind(object) :
      Object.isFunction(object[method]) ? object[method].bind(object) : 
      function(value) { object[method] = value };
    this.start(Object.extend({ from: from, to: to }, options || { }));
  },
  update: function(position) {
    this.method(position);
  }
});

Effect.Event = Class.create(Effect.Base, {
  initialize: function() {
    this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
  },
  update: Prototype.emptyFunction
});

Effect.Opacity = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    // make this work on IE on elements without 'layout'
    if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
      this.element.setStyle({zoom: 1});
    var options = Object.extend({
      from: this.element.getOpacity() || 0.0,
      to:   1.0
    }, arguments[1] || { });
    this.start(options);
  },
  update: function(position) {
    this.element.setOpacity(position);
  }
});

Effect.Move = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      x:    0,
      y:    0,
      mode: 'relative'
    }, arguments[1] || { });
    this.start(options);
  },
  setup: function() {
    this.element.makePositioned();
    this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
    this.originalTop  = parseFloat(this.element.getStyle('top')  || '0');
    if (this.options.mode == 'absolute') {
      this.options.x = this.options.x - this.originalLeft;
      this.options.y = this.options.y - this.originalTop;
    }
  },
  update: function(position) {
    this.element.setStyle({
      left: (this.options.x  * position + this.originalLeft).round() + 'px',
      top:  (this.options.y  * position + this.originalTop).round()  + 'px'
    });
  }
});

// for backwards compatibility
Effect.MoveBy = function(element, toTop, toLeft) {
  return new Effect.Move(element, 
    Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
};

Effect.Scale = Class.create(Effect.Base, {
  initialize: function(element, percent) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      scaleX: true,
      scaleY: true,
      scaleContent: true,
      scaleFromCenter: false,
      scaleMode: 'box',        // 'box' or 'contents' or { } with provided values
      scaleFrom: 100.0,
      scaleTo:   percent
    }, arguments[2] || { });
    this.start(options);
  },
  setup: function() {
    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
    this.elementPositioning = this.element.getStyle('position');
    
    this.originalStyle = { };
    ['top','left','width','height','fontSize'].each( function(k) {
      this.originalStyle[k] = this.element.style[k];
    }.bind(this));
      
    this.originalTop  = this.element.offsetTop;
    this.originalLeft = this.element.offsetLeft;
    
    var fontSize = this.element.getStyle('font-size') || '100%';
    ['em','px','%','pt'].each( function(fontSizeType) {
      if (fontSize.indexOf(fontSizeType)>0) {
        this.fontSize     = parseFloat(fontSize);
        this.fontSizeType = fontSizeType;
      }
    }.bind(this));
    
    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
    
    this.dims = null;
    if (this.options.scaleMode=='box')
      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
    if (/^content/.test(this.options.scaleMode))
      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
    if (!this.dims)
      this.dims = [this.options.scaleMode.originalHeight,
                   this.options.scaleMode.originalWidth];
  },
  update: function(position) {
    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
    if (this.options.scaleContent && this.fontSize)
      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
  },
  finish: function(position) {
    if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
  },
  setDimensions: function(height, width) {
    var d = { };
    if (this.options.scaleX) d.width = width.round() + 'px';
    if (this.options.scaleY) d.height = height.round() + 'px';
    if (this.options.scaleFromCenter) {
      var topd  = (height - this.dims[0])/2;
      var leftd = (width  - this.dims[1])/2;
      if (this.elementPositioning == 'absolute') {
        if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
        if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
      } else {
        if (this.options.scaleY) d.top = -topd + 'px';
        if (this.options.scaleX) d.left = -leftd + 'px';
      }
    }
    this.element.setStyle(d);
  }
});

Effect.Highlight = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
    this.start(options);
  },
  setup: function() {
    // Prevent executing on elements not in the layout flow
    if (this.element.getStyle('display')=='none') { this.cancel(); return; }
    // Disable background image during the effect
    this.oldStyle = { };
    if (!this.options.keepBackgroundImage) {
      this.oldStyle.backgroundImage = this.element.getStyle('background-image');
      this.element.setStyle({backgroundImage: 'none'});
    }
    if (!this.options.endcolor)
      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
    if (!this.options.restorecolor)
      this.options.restorecolor = this.element.getStyle('background-color');
    // init color calculations
    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
  },
  update: function(position) {
    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
      return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
  },
  finish: function() {
    this.element.setStyle(Object.extend(this.oldStyle, {
      backgroundColor: this.options.restorecolor
    }));
  }
});

Effect.ScrollTo = function(element) {
  var options = arguments[1] || { },
    scrollOffsets = document.viewport.getScrollOffsets(),
    elementOffsets = $(element).cumulativeOffset(),
    max = (window.height || document.body.scrollHeight) - document.viewport.getHeight();  

  if (options.offset) elementOffsets[1] += options.offset;

  return new Effect.Tween(null,
    scrollOffsets.top,
    elementOffsets[1] > max ? max : elementOffsets[1],
    options,
    function(p){ scrollTo(scrollOffsets.left, p.round()) }
  );
};

/* ------------- combination effects ------------- */

Effect.Fade = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  var options = Object.extend({
    from: element.getOpacity() || 1.0,
    to:   0.0,
    afterFinishInternal: function(effect) { 
      if (effect.options.to!=0) return;
      effect.element.hide().setStyle({opacity: oldOpacity}); 
    }
  }, arguments[1] || { });
  return new Effect.Opacity(element,options);
};

Effect.Appear = function(element) {
  element = $(element);
  var options = Object.extend({
  from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
  to:   1.0,
  // force Safari to render floated elements properly
  afterFinishInternal: function(effect) {
    effect.element.forceRerendering();
  },
  beforeSetup: function(effect) {
    effect.element.setOpacity(effect.options.from).show(); 
  }}, arguments[1] || { });
  return new Effect.Opacity(element,options);
};

Effect.Puff = function(element) {
  element = $(element);
  var oldStyle = { 
    opacity: element.getInlineOpacity(), 
    position: element.getStyle('position'),
    top:  element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height
  };
  return new Effect.Parallel(
   [ new Effect.Scale(element, 200, 
      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), 
     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], 
     Object.extend({ duration: 1.0, 
      beforeSetupInternal: function(effect) {
        Position.absolutize(effect.effects[0].element)
      },
      afterFinishInternal: function(effect) {
         effect.effects[0].element.hide().setStyle(oldStyle); }
     }, arguments[1] || { })
   );
};

Effect.BlindUp = function(element) {
  element = $(element);
  element.makeClipping();
  return new Effect.Scale(element, 0,
    Object.extend({ scaleContent: false, 
      scaleX: false, 
      restoreAfterFinish: true,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping();
      } 
    }, arguments[1] || { })
  );
};

Effect.BlindDown = function(element) {
  element = $(element);
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({ 
    scaleContent: false, 
    scaleX: false,
    scaleFrom: 0,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
    },  
    afterFinishInternal: function(effect) {
      effect.element.undoClipping();
    }
  }, arguments[1] || { }));
};

Effect.SwitchOff = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  return new Effect.Appear(element, Object.extend({
    duration: 0.4,
    from: 0,
    transition: Effect.Transitions.flicker,
    afterFinishInternal: function(effect) {
      new Effect.Scale(effect.element, 1, { 
        duration: 0.3, scaleFromCenter: true,
        scaleX: false, scaleContent: false, restoreAfterFinish: true,
        beforeSetup: function(effect) { 
          effect.element.makePositioned().makeClipping();
        },
        afterFinishInternal: function(effect) {
          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
        }
      })
    }
  }, arguments[1] || { }));
};

Effect.DropOut = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left'),
    opacity: element.getInlineOpacity() };
  return new Effect.Parallel(
    [ new Effect.Move(element, {x: 0, y: 100, sync: true }), 
      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
    Object.extend(
      { duration: 0.5,
        beforeSetup: function(effect) {
          effect.effects[0].element.makePositioned(); 
        },
        afterFinishInternal: function(effect) {
          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
        } 
      }, arguments[1] || { }));
};

Effect.Shake = function(element) {
  element = $(element);
  var options = Object.extend({
    distance: 20,
    duration: 0.5
  }, arguments[1] || {});
  var distance = parseFloat(options.distance);
  var split = parseFloat(options.duration) / 10.0;
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left') };
    return new Effect.Move(element,
      { x:  distance, y: 0, duration: split, afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
        effect.element.undoPositioned().setStyle(oldStyle);
  }}) }}) }}) }}) }}) }});
};

Effect.SlideDown = function(element) {
  element = $(element).cleanWhitespace();
  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
  var oldInnerBottom = element.down().getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({ 
    scaleContent: false, 
    scaleX: false, 
    scaleFrom: window.opera ? 0 : 1,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if (window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
    },
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' }); 
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
    }, arguments[1] || { })
  );
};

Effect.SlideUp = function(element) {
  element = $(element).cleanWhitespace();
  var oldInnerBottom = element.down().getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, window.opera ? 0 : 1,
   Object.extend({ scaleContent: false, 
    scaleX: false, 
    scaleMode: 'box',
    scaleFrom: 100,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if (window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().show();
    },  
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' });
    },
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
    }
   }, arguments[1] || { })
  );
};

// Bug in opera makes the TD containing this element expand for a instance after finish 
Effect.Squish = function(element) {
  return new Effect.Scale(element, window.opera ? 1 : 0, { 
    restoreAfterFinish: true,
    beforeSetup: function(effect) {
      effect.element.makeClipping(); 
    },  
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping(); 
    }
  });
};

Effect.Grow = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.full
  }, arguments[1] || { });
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();    
  var initialMoveX, initialMoveY;
  var moveX, moveY;
  
  switch (options.direction) {
    case 'top-left':
      initialMoveX = initialMoveY = moveX = moveY = 0; 
      break;
    case 'top-right':
      initialMoveX = dims.width;
      initialMoveY = moveY = 0;
      moveX = -dims.width;
      break;
    case 'bottom-left':
      initialMoveX = moveX = 0;
      initialMoveY = dims.height;
      moveY = -dims.height;
      break;
    case 'bottom-right':
      initialMoveX = dims.width;
      initialMoveY = dims.height;
      moveX = -dims.width;
      moveY = -dims.height;
      break;
    case 'center':
      initialMoveX = dims.width / 2;
      initialMoveY = dims.height / 2;
      moveX = -dims.width / 2;
      moveY = -dims.height / 2;
      break;
  }
  
  return new Effect.Move(element, {
    x: initialMoveX,
    y: initialMoveY,
    duration: 0.01, 
    beforeSetup: function(effect) {
      effect.element.hide().makeClipping().makePositioned();
    },
    afterFinishInternal: function(effect) {
      new Effect.Parallel(
        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
          new Effect.Scale(effect.element, 100, {
            scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, 
            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
        ], Object.extend({
             beforeSetup: function(effect) {
               effect.effects[0].element.setStyle({height: '0px'}).show(); 
             },
             afterFinishInternal: function(effect) {
               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); 
             }
           }, options)
      )
    }
  });
};

Effect.Shrink = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.none
  }, arguments[1] || { });
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();
  var moveX, moveY;
  
  switch (options.direction) {
    case 'top-left':
      moveX = moveY = 0;
      break;
    case 'top-right':
      moveX = dims.width;
      moveY = 0;
      break;
    case 'bottom-left':
      moveX = 0;
      moveY = dims.height;
      break;
    case 'bottom-right':
      moveX = dims.width;
      moveY = dims.height;
      break;
    case 'center':  
      moveX = dims.width / 2;
      moveY = dims.height / 2;
      break;
  }
  
  return new Effect.Parallel(
    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
    ], Object.extend({            
         beforeStartInternal: function(effect) {
           effect.effects[0].element.makePositioned().makeClipping(); 
         },
         afterFinishInternal: function(effect) {
           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
       }, options)
  );
};

Effect.Pulsate = function(element) {
  element = $(element);
  var options    = arguments[1] || { };
  var oldOpacity = element.getInlineOpacity();
  var transition = options.transition || Effect.Transitions.sinoidal;
  var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) };
  reverser.bind(transition);
  return new Effect.Opacity(element, 
    Object.extend(Object.extend({  duration: 2.0, from: 0,
      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
    }, options), {transition: reverser}));
};

Effect.Fold = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height };
  element.makeClipping();
  return new Effect.Scale(element, 5, Object.extend({   
    scaleContent: false,
    scaleX: false,
    afterFinishInternal: function(effect) {
    new Effect.Scale(element, 1, { 
      scaleContent: false, 
      scaleY: false,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping().setStyle(oldStyle);
      } });
  }}, arguments[1] || { }));
};

Effect.Morph = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      style: { }
    }, arguments[1] || { });
    
    if (!Object.isString(options.style)) this.style = $H(options.style);
    else {
      if (options.style.include(':'))
        this.style = options.style.parseStyle();
      else {
        this.element.addClassName(options.style);
        this.style = $H(this.element.getStyles());
        this.element.removeClassName(options.style);
        var css = this.element.getStyles();
        this.style = this.style.reject(function(style) {
          return style.value == css[style.key];
        });
        options.afterFinishInternal = function(effect) {
          effect.element.addClassName(effect.options.style);
          effect.transforms.each(function(transform) {
            effect.element.style[transform.style] = '';
          });
        }
      }
    }
    this.start(options);
  },
  
  setup: function(){
    function parseColor(color){
      if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
      color = color.parseColor();
      return $R(0,2).map(function(i){
        return parseInt( color.slice(i*2+1,i*2+3), 16 ) 
      });
    }
    this.transforms = this.style.map(function(pair){
      var property = pair[0], value = pair[1], unit = null;

      if (value.parseColor('#zzzzzz') != '#zzzzzz') {
        value = value.parseColor();
        unit  = 'color';
      } else if (property == 'opacity') {
        value = parseFloat(value);
        if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
          this.element.setStyle({zoom: 1});
      } else if (Element.CSS_LENGTH.test(value)) {
          var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
          value = parseFloat(components[1]);
          unit = (components.length == 3) ? components[2] : null;
      }

      var originalValue = this.element.getStyle(property);
      return { 
        style: property.camelize(), 
        originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), 
        targetValue: unit=='color' ? parseColor(value) : value,
        unit: unit
      };
    }.bind(this)).reject(function(transform){
      return (
        (transform.originalValue == transform.targetValue) ||
        (
          transform.unit != 'color' &&
          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
        )
      )
    });
  },
  update: function(position) {
    var style = { }, transform, i = this.transforms.length;
    while(i--)
      style[(transform = this.transforms[i]).style] = 
        transform.unit=='color' ? '#'+
          (Math.round(transform.originalValue[0]+
            (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
          (Math.round(transform.originalValue[1]+
            (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
          (Math.round(transform.originalValue[2]+
            (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
        (transform.originalValue +
          (transform.targetValue - transform.originalValue) * position).toFixed(3) + 
            (transform.unit === null ? '' : transform.unit);
    this.element.setStyle(style, true);
  }
});

Effect.Transform = Class.create({
  initialize: function(tracks){
    this.tracks  = [];
    this.options = arguments[1] || { };
    this.addTracks(tracks);
  },
  addTracks: function(tracks){
    tracks.each(function(track){
      track = $H(track);
      var data = track.values().first();
      this.tracks.push($H({
        ids:     track.keys().first(),
        effect:  Effect.Morph,
        options: { style: data }
      }));
    }.bind(this));
    return this;
  },
  play: function(){
    return new Effect.Parallel(
      this.tracks.map(function(track){
        var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');
        var elements = [$(ids) || $$(ids)].flatten();
        return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });
      }).flatten(),
      this.options
    );
  }
});

Element.CSS_PROPERTIES = $w(
  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + 
  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
  'fontSize fontWeight height left letterSpacing lineHeight ' +
  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
  'right textIndent top width wordSpacing zIndex');
  
Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;

String.__parseStyleElement = document.createElement('div');
String.prototype.parseStyle = function(){
  var style, styleRules = $H();
  if (Prototype.Browser.WebKit)
    style = new Element('div',{style:this}).style;
  else {
    String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
    style = String.__parseStyleElement.childNodes[0].style;
  }
  
  Element.CSS_PROPERTIES.each(function(property){
    if (style[property]) styleRules.set(property, style[property]); 
  });
  
  if (Prototype.Browser.IE && this.include('opacity'))
    styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);

  return styleRules;
};

if (document.defaultView && document.defaultView.getComputedStyle) {
  Element.getStyles = function(element) {
    var css = document.defaultView.getComputedStyle($(element), null);
    return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
      styles[property] = css[property];
      return styles;
    });
  };
} else {
  Element.getStyles = function(element) {
    element = $(element);
    var css = element.currentStyle, styles;
    styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) {
      results[property] = css[property];
      return results;
    });
    if (!styles.opacity) styles.opacity = element.getOpacity();
    return styles;
  };
};

Effect.Methods = {
  morph: function(element, style) {
    element = $(element);
    new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
    return element;
  },
  visualEffect: function(element, effect, options) {
    element = $(element)
    var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
    new Effect[klass](element, options);
    return element;
  },
  highlight: function(element, options) {
    element = $(element);
    new Effect.Highlight(element, options);
    return element;
  }
};

$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
  'pulsate shake puff squish switchOff dropOut').each(
  function(effect) { 
    Effect.Methods[effect] = function(element, options){
      element = $(element);
      Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
      return element;
    }
  }
);

$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each( 
  function(f) { Effect.Methods[f] = Element[f]; }
);

Element.addMethods(Effect.Methods);
 var Core = {}; Core = Class.create(); Core.prototype = { initialize: function(callback) { if(Prototype.Browser.Gecko) { Debug.on = true; }
this.home = new Home(); this.ibe = new Ibe(); if(callback) { eval(callback); }}, check_flash: function() { if(!this.check_system() || !Web.check_flash()) { if($('flash_stage')) { Element.hide('flash_stage'); Element.remove('flash_stage'); }
if($('alternative_flash')) { Element.show('alternative_flash'); this.home.image_rotation.bind(this.home, 0, false, 5).defer(); }
}
else if($('flash_stage')) { Element.hide('alternative_flash'); Element.show('flash_stage'); }
return true; }, check_system: function() {if((Prototype.Browser.IE == true && typeof(window.XMLHttpRequest) == "undefined") && navigator.appVersion && navigator.appVersion.match(/Windows NT 5\.0/)) { return false; }
return true; }
}

 var Ibe = {}; Ibe = Class.create(); Ibe.prototype = { cache: false, initialize: function() { this.cache = {rows: []}; this.transfer_user_data(); }, init_ibe_cms: function(single) { if(single) { if(parent.document.getElementById('regions_layer_blind')) { Element.remove(parent.document.getElementById('regions_layer_blind')); }
parent.Core.loader.hide(); return true; }
var els = Element.descendants('st__data_box_content'); if(els.length == 0) { return false; }
parent.Core.collection = parent.Core.regions; Element.remove('st__monitor_form_ext_submit'); var home = new Home(); home.init_calendar(); els.each( function(el, key) {switch(el.tagName){case 'A':el.href = '#';Element.writeAttribute(el, 'onclick', 'return false;'); var region_id = Element.readAttribute(el.up().up(), 'region_id');if(!region_id){region_id = Element.readAttribute(el.up().up().up(), 'region_id');}if(region_id){if(parent.Core.collection.indexOf(region_id) >= 0){var parent_el = el.up();if(parent_el.tagName == 'TD'){el.up().style.background = '#dee !important';}else{el.up().up().style.background = '#dee !important';}}if(el.up().className.match('st__')){Event.observe(el,'click',function(ev, element){if(!Array.in_array(region_id, parent.Core.collection)){if(parent.Core.collection.size() < parent.Core.max_count){parent.Core.collection.push(region_id);element.up().up().childElements().each(function(val){ val.style.background = '#dee !important'; });}else{new parent.Dialog().create('Regionsauswahl', 'Sie haben bereits <b>'+parent.Core.max_count+'</b> Regionen ausgew&auml;hlt. Wenn Sie diese Region hinzuf&uuml;gen m&ouml;chten, m&uuml;ssen Sie vorher eine andere Region abw&auml;hlen.');}}else{Array.remove(region_id, parent.Core.collection);element.up().up().childElements().each(function(val){ val.style.background = ''; });}}.bindAsEventListener(this, el));}}break;}
}
); if(parent.document.getElementById('regions_layer_blind')) { Element.remove(parent.document.getElementById('regions_layer_blind')); }
parent.Core.loader.hide(); return true; }, ibe_accept: function() { var field = parent.Core.field; var type = parent.Core.type; var insert = parent.Core.insert; var id = parent.Core.id; var position = parent.Core.position; var element_type = parent.Core.element_type; var engine = parent.Core.engine; var size = type.split(/__/)[1]; type = type.split(/__/)[0];var fields = parent.$('teaser_form').serialize();var m_fields = Form.serialize('st__monitor_wrapper'); parent.Core.rewrite_collection = new Array(); parent.Core.rewrite_string = ''; parent.Core.collection.each(function(value, key){parent.Core.rewrite_collection.push(value);parent.Core.rewrite_string += value+';';}.bind(this));parent.$(field).value = parent.Core.rewrite_string;var field_prefix = field.split(/_/)[0]; if(element_type == 'region') { var mth = 'get_multioffer'; }
else if(element_type == 'weather') { var mth = 'get_weather'; }
else { return false; }new Ajax.ExtRequest(parent.call_url,{parameters: '?act=contentmanager&mth='+mth+'&regions='+parent.Core.rewrite_string+'&jx=1&field_prefix='+field_prefix+'&size='+size+'&type='+type+'&insert='+insert+'&id='+id+'&position='+position+'&'+fields+'&'+m_fields+'&intern_engine='+parent.Core.track+'&_engine='+parent.Core.engine,onLoad: function(e){parent.Core.loader.show();},onSuccess: function(e){parent.Element.update('preview', e.responseText);parent.Core.loader.hide();parent.Core.enable_screen();Element.remove(parent.$('regions_layer'));}}); delete(parent.Core.rewrite_collection); return true; }, insert_deeplink:function(deeplink) { var from = parent.Core.from; delete(parent.Core.from); var target_id = parent.Core.field; if(target_id == 'tinymce') { parent.Core.enable_screen(); parent.Core.deeplink = deeplink; parent.Core.contentmanager.insert.delay(0.5); }
else { parent.document.getElementById(target_id).value = deeplink; }
if(from == 'contentmanager') { parent.Core.contentmanager.check_link(deeplink, target_id+'#reload'); }
if(parent.$('regions_layer')) {parent.Core.enable_screen(); parent.Element.remove('regions_layer'); }
else { parent.Element.remove('sitemanager'); }
return true; }, transfer_user_data: function() { if($('st__booking_form') && $('address') && $('first_name') && $('last_name')) { Event.observe('address','change',function(){$('party_0_address').value = $('address').value;}); Event.observe('first_name','change',function(){$('party_0_first_name').value = $('first_name').value;}); Event.observe('last_name','change',function(){$('party_0_last_name').value = $('last_name').value;}); }
}, toggle_row: function(id) { if(id) { var row_id = id.split('__'); state = row_id[0]; row_id = row_id[1]; var show = 'close__'+row_id; var hide = 'open__'+row_id; var action = 'hide'; if(state && state == 'close') { hide = 'close__'+row_id; show = 'open__'+row_id; action = 'show'; }
Element.show(show); Element.hide(hide); var els = Element.nextSiblings(id); }
else { var els = $('st__data_box_content').getElementsByClassName('st__target'); var id = false; var action = 'show'; }
for(var i = 0; i < els.length; i++) { var value = els[i]; if(value.tagName == 'TABLE' && value.id && (id && value.id.match(/close__/))) { break; }
else if(value.tagName == 'TABLE') { if(!id && value.id.match(/close__/)) { Element['hide'](value); }
else { Element[action](value); }
}
}
return true; }, toggle_details: function(id, href, open) {if(this.cache['open_iframe'] && this.cache['open_iframe'] != id && $('details__'+this.cache['open_iframe'])) { Element.hide('details__'+this.cache['open_iframe']); Element.removeClassName($('details_link__'+this.cache['open_iframe']).up(), 'open'); delete this.cache['open_iframe']; }
var iframe_url = href; if(!iframe_url) { iframe_url = $('details_link__'+id).href; }if(!Element.visible('details__'+id) || open) { $('details__frame').src = iframe_url; Element.addClassName($('details_link__'+id).up(), 'open'); Element.update('details__'+id, $('details__frame')); Element.show('details__frame'); Element.show('details__'+id); this.cache['open_iframe'] = id; $('details_link__'+id).innerHTML = $('details_link__'+id).innerHTML.replace(/anzeigen/, 'schlie&szlig;en'); }else if(!open) { Element.hide('details__'+id); Element.removeClassName($('details_link__'+id).up(), 'open'); $('details_link__'+id).innerHTML = $('details_link__'+id).innerHTML.replace(/schlie\D+en/, 'anzeigen'); delete id; }
return true; }, toggle_monitor: function(ext) { if(!ext && Element.visible('st__monitor_static')) { Element.hide('st__monitor_change_link'); Element.hide('st__monitor_static'); Element.show('st__monitor_form'); Element.show('st__monitor_submit_box'); Element.show('st__monitor_form_ext_submit'); }
else if(ext && Element.hasClassName('st__more_options', 'st__more_options_on')) { Element.removeClassName('st__more_options', 'st__more_options_on'); Element.addClassName('st__more_options', 'st__more_options_off'); if($('state_ext_monitor')) { $('state_ext_monitor').value = '-1'; }
document.cookie = 'state__ext_monitor=-1'; Element.hide('st__monitor_form_ext_add'); var res = $('st__more_options').down().innerHTML; $('st__more_options').down().innerHTML = res.replace(/schlie&szlig;en/, 'anzeigen'); $('st__more_options').down().innerHTML = res.replace(/schlie\D?en/, 'anzeigen'); }
else if(ext && Element.hasClassName('st__more_options', 'st__more_options_off')) { Element.removeClassName('st__more_options', 'st__more_options_off'); Element.addClassName('st__more_options', 'st__more_options_on'); if($('state_ext_monitor')) { $('state_ext_monitor').value = '1'; }
document.cookie = 'state__ext_monitor=1'; Element.show('st__monitor_form_ext_add'); var res = $('st__more_options').down().innerHTML; $('st__more_options').down().innerHTML = res.replace(/anzeigen/, 'schlie&szlig;en'); }
return true; }, toggle_oneway: function(el) { if(el.value == '1' && $('RetDay')) { var par = $('RetDay').up(1); par.style.visibility = 'hidden'; }
else { var par = $('RetDay').up(1); par.style.visibility = ''; }
return true; }, toggle_railway: function(el) { if(el.value == 'oneway') { Element.hide('return_date'); }
else { Element.show('return_date'); }
return true; }, toggle_payment: function(value, type) { if(value == 'debit' && $(type+'__'+value)) { Element.show(type+'__'+value); if($(type+'__credit')) { Element.hide(type+'__credit'); }
}
else if(value == 'credit' && $(type+'__'+value)) { Element.show(type+'__'+value); if($(type+'__debit')) { Element.hide(type+'__debit'); }
}
else { if($(type+'__credit')) { Element.hide(type+'__credit'); }
if($(type+'__debit')) { Element.hide(type+'__debit'); }
}
return true; }, toggle_insurance:function(id) { if(!$('insurance_info')) { return false; }
var els = Element.childElements('insurance_info'); for(var i = 0; i < els.length;i++) { Element.hide(els[i]); }
if(!id && $('insurance_info')) { Element.hide('insurance_info'); }
else if(id && $(id) && $('insurance_info')) { Element.show('insurance_info'); Element.show(id); }
return true; }, rail_submit: function() { if($('search__rail')) { $('search__rail').action += '?moreTravellers=1'; $('search__rail').submit(); }
return true; }
}
 var Home = {}; Home = Class.create(); Home.prototype = { cache: {}, initialize: function() { this.blog_active = 0; this.blog_collection = new Object(); this.cache.extended = []; this.init_calendar(); this.init_date();if(($('quicksearch') || $('st__ibe__left')) && $('fapto')) { this.filter_rgn($('fapto').value, false, false, true); if($('fapto_cty')) { this.filter_rgn($('fapto').value, 'fapto_cty', false, true); }
}
if($('newsletter_initial')) { $('newsletter_initial').observe('click', function(event) { event.stop(); Core.home.toggle_newsletter(); }); }this.search_extended = false; if($('show_ext_lastminute')) { $('show_ext_lastminute').observe('click', function(event) { event.stop(); Core.home.toggle_search('lastminute'); }); $('hide_ext_lastminute').observe('click', function(event) { event.stop(); Core.home.toggle_search('lastminute'); }); $('show_ext_flight').observe('click', function(event) { event.stop(); Core.home.toggle_search('flight'); }); $('hide_ext_flight').observe('click', function(event) { event.stop(); Core.home.toggle_search('flight'); }); $('show_ext_hotel').observe('click', function(event) { event.stop(); Core.home.toggle_search('hotel'); }); $('hide_ext_hotel').observe('click', function(event) { event.stop(); Core.home.toggle_search('hotel'); }); $('qs_menu_lastminute').observe('click', function(event) { event.stop(); Core.home.change_tab('lastminute'); }); $('qs_menu_allincl').observe('click', function(event) { event.stop(); Core.home.change_tab('allincl'); }); $('qs_menu_flight').observe('click', function(event) { event.stop(); Core.home.change_tab('flight'); }); $('qs_menu_hotel').observe('click', function(event) { event.stop(); Core.home.change_tab('hotel'); }); }
}, init_completer: function() { if(!$('st__hotel_onefield_template') || !$('sta__hotel_dropdowns') || !$('st__hotel_onefield_target')) { return false; }
var template = $('st__hotel_onefield_template').innerHTML; Element.remove('st__hotel_onefield_template'); var regions = {}; var els = $('sta__hotel_dropdowns').descendants(); els.each( function(option, key) {if(option.tagName == 'OPTION' &&option.readAttribute('value') != ''){regions[option.readAttribute('value')] = option.innerHTML;}
}
); var data = {}; data['except1'] = 'Land'; for(var key in regions) { if(key.match(/__c$/)) { data[key] = regions[key]; }
}
data['except2'] = 'Regionen'; for(var key in regions) { if(key.match(/__r$/)) { data[key] = regions[key]; }
}
data['except3'] = 'St&auml;dte'; for(var key in regions) { if(key.match(/__t$/)) { data[key] = regions[key]; }
}
new Completer(template,{data: data,id_target: 'st__hotel_onefield_target_hidden',target: 'st__hotel_onefield_target',active: 'st__active',except: 'st__headline',tag: 'a',limit: 20,limit_value: '...',limit_css: '',match: '<strong>$1</strong>'}); this.cache['event_completer_init'] = this.clear_field.bindAsEventListener(this); Event.observe('st__hotel_onefield_target', 'focus', this.cache['event_completer_init']); Event.observe('st__hotel_onefield_target', 'blur', this.cache['event_completer_init']); }, clear_field: function(ev) { if(Element.hasClassName('st__hotel_onefield_target', 'st__value')) {Element.removeClassName('st__hotel_onefield_target', 'st__value'); $('st__hotel_onefield_target').value = ''; }
else if($('st__hotel_onefield_target').value == '') {Element.addClassName('st__hotel_onefield_target', 'st__value'); $('st__hotel_onefield_target').value = Element.readAttribute('st__hotel_onefield_target', 'legend'); }
return true; }, init_date: function(diff) { this.cache['date_fields'] = {}; var els = document.getElementsByClassName('day'); if(els.length == 0 && $('fdyfr') && $('fdyto')) { els = []; els[0] = $('fdyfr'); els[1] = $('fdyto'); }
if(!els || els.length == 0) { return false; }
this.cache['date_fields']['days'] = els; for(var i in els) { if(Object.isElement(els[i]) && els[i].tagName == 'SELECT') { var diff_days = diff; if(!diff && Element.readAttribute(els[i], 'diff')) { diff_days = Element.readAttribute(els[i], 'diff'); }
Event.observe(els[i], 'change', this.diff_date.bindAsEventListener(this, diff_days)); }
}
var els = document.getElementsByClassName('month'); if(els.length == 0 && $('fmofr') && $('fmoto')) { els = []; els[0] = $('fmofr'); els[1] = $('fmoto'); }
this.cache['date_fields']['months'] = els; for(var i in els) { if(Object.isElement(els[i]) && els[i].tagName == 'SELECT') { var diff_days = diff; if(!diff && Element.readAttribute(els[i], 'diff')) { diff_days = Element.readAttribute(els[i], 'diff'); }
Event.observe(els[i], 'change', this.diff_date.bindAsEventListener(this, diff_days)); }
}
}, init_calendar: function() { if(!$('calendar__template')) { return false; }
var template = $('calendar__template').innerHTML;var target = 'st__calendar'; if($('st__ibe__left')) { target = 'st__ibe__open_cal'; }
var els = document.getElementsByClassName(target); if(els && els.length > 0) { var center_to_target = function(target){if($(target)){var pos = Element.cumulativeOffset(target);var x = pos[0];var y = pos[1];var diff = 18;$(this.vars['wrapper']).style.left = (x + diff)+'px';$(this.vars['wrapper']).style.top = (y + diff)+'px';}return true;}; this.cache['calendars'] = []; var targets = []; for(var i = 0; i < els.length; i++) { if(Object.isElement(els[i])) { targets.push(els[i]); }
}
var cal = new Calendar(template,{target: targets,prefix: 'calendar',disabled_css: 'disabled',active_css: 'selected',today_css: 'today',empty_css: 'empty',disable: '< yesterday',callback: this.insert_date,open_callback: this.select_current,render_callback: this.month_dropdown}); cal.center_to_target = center_to_target; this.cache['calendars'].push(cal); }
Element.remove('calendar__template'); this.init_date(); return true; }, select_current: function(ev) {if(Core.home.cache['calendars'] && Core.home.cache['calendars'].length > 0) { for(var i = 0; i < Core.home.cache['calendars'].length; i++) { Core.home.cache['calendars'][i].hide(); }
}
var target = Event.element(ev); var el_month = false; var el_day = false; if(!$(target).previous() || $(target).previous().tagName != 'SELECT') { el_month = $(target).next(1); el_day = $(target).next(0); }
else { el_month = $(target).previous(); el_day = $(target).previous(1); }
var month = el_month.value; var day = el_day.value; if(month != '') { if(el_day.hasClassName('ynet')) { var month = month.split('-'); var year = month[1]; var month = month[0]; }
else { var year = month.substr(0,4); var month = month.substr(4,6); }
var day = parseInt(day, 10); var month = parseInt(month, 10); this.current['day'] = day; this.current['month'] = month; this.current['year'] = year; this.current = this.get_date(); if(ev) { this.render(); }
}
return true; }, month_dropdown: function() { var target = 'fmofr';if(!$(target) && $('FromDate__month')) { target = 'FromDate__month'; }else if(!$(target)) { var target = document.getElementsByClassName('st__date_month');if(!target.length) { target = document.getElementsByClassName('st__month'); }if(!Object.isFunction(target.pop)) { target = target[target.length-1]; }
else { target = target.pop(); }
}
if(!target || !$(target)) { return false; }
var blocks = {}; blocks['months'] = []; var current = this.get_date(); var today = this.date.get_today(); var min = parseInt(today['month'], 10); var max = parseInt(today['month'])+11; var months = $(target).options; for(var i = min; i <= max; i++) { var year = parseInt(today['year'], 10); var month = i; if(i <= 0) { year = parseInt(today['year'], 10)-1; month = 12+i; }
else if(i > 24) { year = parseInt(today['year'], 10)+2; month = i-24; }
else if(i > 12) { year = parseInt(today['year'], 10)+1; month = i-12; }
var selected = ''; if(month == current['month'] && year == current['year']) { selected = 'selected="selected" style="font-weight: bold;"'; }
var month_name = this.date.get_month_name(month); blocks['months'].push({month: month_name,year: year,selected: selected,value: month+'##'+year}); }
this.cache['options']['blocks'] = blocks; return true; }, select_month: function(value, cal_id) { if($(cal_id) && $(cal_id).calendar) { value = value.split('##'); var cal = $(cal_id).calendar; cal.current['month'] = value[0]; cal.current['year'] = value[1]; cal.render(true); return true; }
}, insert_date: function(ev) { var date = this.get_date(); var el_month = false; var el_day = false; if(!$(this.cache['current_target']).previous() || $(this.cache['current_target']).previous().tagName != 'SELECT') { el_month = $(this.cache['current_target']).next(1); el_day = $(this.cache['current_target']).next(0); }
else { el_month = $(this.cache['current_target']).previous(); el_day = $(this.cache['current_target']).previous(1); }
if(Element.hasClassName(el_day, 'ynet')) { el_day.value = date['day']; el_month.value = parseInt(date['month'], 10)+'-'+date['year']; }
else { el_day.value = date['day']; el_month.value = date['year']+date['month']; }
var diff = Element.readAttribute(el_day, 'diff'); Core.home.diff_date(el_day, diff); return true; }, switch_tab: function(id) { this.cache.menu_elements = $('quicksearch_menu').down().childElements(); this.cache.menu_elements.each(function(value, key){var link_element = value.down();Element.update(link_element, link_element.innerHTML.replace(/Schnellsuche /,''));value.id = value.id.replace(/_active/, '');var clean_id = value.id.replace(/st__qs_/, '');var quicksearch = 'quicksearch__'+clean_id;if(value.id == id){value.id += '_active';Element.update(link_element, 'Schnellsuche '+link_element.innerHTML);if(id == 'st__qs_allinclusive'){quicksearch = 'quicksearch__lastminute';Element.writeAttribute(quicksearch, 'action', Element.readAttribute(quicksearch, 'allinclusive_url'));}else if(id == 'st__qs_lastminute'){Element.writeAttribute(quicksearch, 'action', Element.readAttribute(quicksearch, 'lastminute_url'));}Element.show(quicksearch);}else if($(quicksearch)){Element.hide(quicksearch);}}); return true; }, extend_search: function(id, click_el) { if($('extended__'+id) && !Element.visible('extended__'+id)) { click_el.innerHTML += ' zuklappen'; Element.show('extended__'+id); $(click_el).up().style.backgroundPosition = '0 -175px'; }
else { click_el.innerHTML = click_el.innerHTML.replace(/ zuklappen/, ''); Element.hide('extended__'+id); $(click_el).up().style.backgroundPosition = '0 -133px'; }
return true; }, filter_rgn: function(value, target, prefix, initial) { if(!prefix) { prefix = ''; }
var to_id = prefix+'fapto_rgn'; if(target && $(prefix+target)) { to_id = prefix+target; }if($(to_id)) {if(!this.cache['regions']) { this.cache['regions'] = {}; }
if(!this.cache['regions'][to_id]) { this.cache['regions'][to_id] = Element.childElements(to_id); }value = value.split('__'); var old_value = false; if(initial) { old_value = $(to_id).value; if(value[0] == '') { return false; }
}
$(to_id).disabled = true; if(value[1]) { var countries = value[1].split('_'); }var empty = true; var result = ''; if(this.cache['regions'][to_id][0].value == '') { result += '<option value="">'+this.cache['regions'][to_id][0].innerHTML+'</option>'; }
for(var key = 0; key < this.cache['regions'][to_id].length; key++) { var option = this.cache['regions'][to_id][key]; if(option && option.value) { var country = option.value.split('__')[1]; if(value[0] == '' || Array.in_array(country, countries)) { empty = false; result += '<option value="'+option.value+'">'+option.innerHTML+'</option>'; }
}
}
Element.update(to_id, result); delete result;if(empty) { $(to_id).disabled = true; if(to_id == 'fapto_rgn' && $(prefix+'fapto_cty')) { $(prefix+'fapto_cty').disabled = true; }
}
else { $(to_id).disabled = false; if(to_id == 'fapto_rgn' && $(prefix+'fapto_cty')) { $(prefix+'fapto_cty').disabled = false; }
}
if(!initial || old_value == '') { $(to_id).selectedIndex = 0; }
else if(old_value) { $(to_id).value = old_value; }
}else if($('AirportCode') && $('AirportCode_all')) { $('AirportCode').disabled = true; value = value.split('__'); if(value[1]) { var countries = value[1]; }
var els = $('AirportCode_all').value; els = els.split(';;'); var result = ''; var first = els[0].split('##'); result += '<option value="'+first[0]+'">'+first[1]+'</option>'; if(value.length == 2) { for(var i = 0; i < els.length; i++) { var option = els[i]; option = option.split('##'); var country = option[0].split('__'); if(value[0] == '' || country[0] == countries) { result += '<option value="'+option[0]+'">'+option[1]+'</option>'; }
}
$('AirportCode').disabled = false; }
Element.update('AirportCode', result); $('AirportCode').selectedIndex = 0; }
return true; }, weather_over: function(month, prefix) { Element.update(prefix+'weather_max', month.getAttribute('max')+'&deg;C'); Element.update(prefix+'weather_min', month.getAttribute('min')+'&deg;C'); Element.update(prefix+'weather_rain', month.getAttribute('rain')); Element.update(prefix+'weather_sun', month.getAttribute('sun')); }, weather_out: function(prefix) { Element.update(prefix+'weather_max', $(prefix+'weather_max').getAttribute('value')+'&deg;C'); Element.update(prefix+'weather_min', $(prefix+'weather_min').getAttribute('value')+'&deg;C'); Element.update(prefix+'weather_rain', $(prefix+'weather_rain').getAttribute('value')); Element.update(prefix+'weather_sun', $(prefix+'weather_sun').getAttribute('value')); }, blog_watch_prev:function(prefix, one_row) { var name = prefix+'_blog_id';if(!this.blog_collection[name]) { this.blog_collection[name] = {id: 0}; }
if(this.blog_collection[name].id>0) {Element.hide($('blogwatch_upper__'+this.blog_collection[name].id+'_'+prefix)); if(one_row !== true) { Element.hide($('blogwatch_lower__'+this.blog_collection[name].id+'_'+prefix)); }
this.blog_collection[name].id--;Element.show($('blogwatch_upper__'+this.blog_collection[name].id+'_'+prefix)); if(one_row !== true) { Element.show($('blogwatch_lower__'+this.blog_collection[name].id+'_'+prefix)); }
}
}, blog_watch_next:function(prefix, one_row) { var name = prefix+'_blog_id';if(!this.blog_collection[name]) { this.blog_collection[name] = {id: 0}; }
if($('blogwatch_upper__'+(this.blog_collection[name].id+1)+'_'+prefix)) {Element.hide($('blogwatch_upper__'+this.blog_collection[name].id+'_'+prefix)); if(one_row !== true) { Element.hide($('blogwatch_lower__'+this.blog_collection[name].id+'_'+prefix)); }
this.blog_collection[name].id++;Element.show($('blogwatch_upper__'+this.blog_collection[name].id+'_'+prefix)); if(one_row !== true) { Element.show($('blogwatch_lower__'+this.blog_collection[name].id+'_'+prefix)); }
}
}, diff_date: function(ev, diff_days) { if(!diff_days) { diff_days = 21; }
else { diff_days = parseInt(diff_days); }
var field_day = false; var field_month = false; if(Object.isElement(ev)) { field_day = ev; field_month = field_day.next(); }
else { var el = Event.element(ev); if(el.hasClassName('day') || (el.hasClassName('st__ibe__select') && el.id == 'fdyfr')) { field_day = el; field_month = el.next(); }
else if(el.hasClassName('month') || (el.hasClassName('st__ibe__select') && el.id == 'fmofr')) { field_month = el; field_day = el.previous(); }
delete el; }
if(!field_day || !field_day.value) { return false; }
if(field_day.hasClassName('ynet')) { var day = field_day.value.substr(0,4); var year = field_month.value.split('-'); var month = year[0]; var year = year[1]; }
else { var day = field_day.value.substr(0,4); var year = field_month.value.substr(0,4); var month = field_month.value.substr(4,2); }var els = Core.home.cache['date_fields']['days']; var pos = Array.search(field_day, els); var el = false; var tmp = false;if(els[pos+1]) { el = els[pos+1]; tmp = new Date(parseInt(year),parseInt(month,10)-1,parseInt(day,10) + diff_days); }
else { return false; }
delete els; var year_to = tmp.getFullYear(); var month_to = tmp.getMonth()+1; var day_to = tmp.getDate(); if (month_to < 10) { month_to = '0'+month_to; }
if (day_to < 10) { day_to = '0'+day_to; }
if(el && field_day.hasClassName('ynet')) { el.next().value = parseInt(month_to, 10)+'-'+year_to; el.value = day_to; }
else if(el) { el.next().value = year_to+''+month_to; el.value = day_to; }
return true; }, switch_action: function(form_id, attribute_name) { $(form_id).action = Element.readAttribute(form_id, attribute_name); return true; }, toggle_theme: function(direction) { if(!Core.theme_id) { Core.theme_id = 0; }
var old_id = Core.theme_id; switch(direction) { case 'left': Core.theme_id--; if($('insider__'+Core.theme_id) != null) { Element.hide('insider__'+old_id); Element.show('insider__'+Core.theme_id); }
else { Core.theme_id = old_id; }
break; case 'right': Core.theme_id++; if($('insider__'+Core.theme_id) != null) { Element.hide('insider__'+old_id); Element.show('insider__'+Core.theme_id); }
else { Core.theme_id = old_id; }
break; }
}, insert_holidays:function(day_from, month_from, day_to, month_to) { var prnt = parent.opener.document; day_from = parseInt(day_from, 10); if(day_from < 10) { day_from = '0'+day_from; }
prnt.getElementById('fdyfr').value = day_from; prnt.getElementById('fmofr').value = parseInt(month_from, 10); day_to = parseInt(day_to, 10); if(day_to < 10) { day_to = '0'+day_to; }
prnt.getElementById('fdyto').value = day_to; prnt.getElementById('fmoto').value = parseInt(month_to, 10); self.close(); return true; }, image_rotation: function(index, max_index, delay) { if(!index) { index = 0; }
if(!max_index) { max_index = 0; }
if(Element.visible('alternative_flash') && $('alternative_rotation')) { var els = $('alternative_rotation').childElements(); max_index = els.length; var image = els[index]; if(!image) { image = els[0]; index = 0; }
image.down().innerHTML = '<img src="'+image.down().getAttribute('image')+'" />'; Element.update('alternative_content', image.innerHTML); var next = (index+1); if((index+1) >= max_index) { next = 0; }
this.image_rotation.bind(this, next , max_index, delay).delay(delay); }
return true; }, toggle_search: function(element) { if(!Element.visible('qs_ext_'+element+'_form')) { new Effect.Morph('qs_ext_'+element, { style: 'height: 384px', duration: 1.8, transition: Effect.Transitions.spring}); new Effect.Appear('qs_ext_'+element+'_form', {duration: 1.0, delay: 0.8}); }
else { new Effect.Fade('qs_ext_'+element+'_form', {duration: 0.5, afterFinish: function(){ new Effect.Morph('qs_ext_'+element, { style: 'height: 0px;', duration: 0.8}); }}
); }
return true; }, fill_tab: function(el, val) { el.innerHTML += val; return true; }, change_tab: function(element) { var menu = $('qs_menu').childElements(); menu.each( function(el) { var name = el.id.replace(/qs_menu_/, ''); var cont = el.innerHTML; cont = cont.stripTags(); cont = cont.replace(/Schnellsuche/, '');Element.update(el, cont); Element.removeClassName(el, name+'_active'); Element.addClassName(el, name);if($('qs_'+name) && $('qs_'+name).visible) {$('qs_'+name).hide();$('qs_ext_'+name).style.height = '0px';$('qs_ext_'+name+'_form').hide(); }
}
); var word = $('qs_menu_'+element).innerHTML; $('qs_menu_'+element).innerHTML = '<small class="block">Schnellsuche<\/small>'+word; $('qs_menu_'+element).removeClassName(element); $('qs_menu_'+element).addClassName(element+'_active'); if(element == 'allincl') { element = 'lastminute'; Element.writeAttribute('qs_'+element, 'action', Element.readAttribute('qs_'+element, 'allinclusive_url')); }
else if(element == 'lastminute') { Element.writeAttribute('qs_'+element, 'action', Element.readAttribute('qs_'+element, 'lastminute_url')); }
new Effect.Appear('qs_'+element, {duration: 0.8}); new Effect.BlindDown('qs_'+element, {duration: 0.5}); }, toggle_newsletter: function() { new Effect.Appear('newsletter_full_form', {duration: 0.8, afterFinish:function(){ $('newsletter__email').focus(); $('newsletter__email').select();}}); new Effect.Fade('newsletter_initial', {duration: 0.8}); $('newsletter_initial').hide(); this.newsletter_full = true; Element.stopObserving('newsletter_initial', 'click'); Element.remove('newsletter_initial'); }
}
function sd(form_name,diff_days) { var fdyfr = document.forms[form_name].elements['fdyfr'].value; var fmofr = document.forms[form_name].elements['fmofr'].value; var fyrfr = fmofr.substr(0,4); var fmofr = fmofr.substr(4,2); var tmp = new Date(parseInt(fyrfr),parseInt(fmofr,10)-1,parseInt(fdyfr,10) + diff_days); var fyrto = tmp.getFullYear(); var fmoto = tmp.getMonth()+1; var fdyto = tmp.getDate(); if (fmoto < 10) fmoto = '0'+String(fmoto); if (fdyto < 10) fdyto = '0'+String(fdyto); var fmoto = String(fyrto)+String(fmoto); var fdyto = String(fdyto); var v = fv(form_name,'fdyto',fdyto); document.forms[form_name].elements['fdyto'].options[v].selected = true; var v = fv(form_name,'fmoto',fmoto); document.forms[form_name].elements['fmoto'].options[v].selected = true; return true; }
function sd_ynet(form_name,diff_days) { var fdyfr = document.forms[form_name].elements['Day'].value; var fmofr = document.forms[form_name].elements['month_1'].value; if (fmofr.length == 6) { var fyrfr = fmofr.substr(2,4); var fmofr = fmofr.substr(0,1); }
else { var fyrfr = fmofr.substr(3,4); var fmofr = fmofr.substr(0,2); }
var tmp = new Date(parseInt(fyrfr),parseInt(fmofr,10)-1,parseInt(fdyfr,10) + diff_days); var fyrto = tmp.getFullYear(); var fmoto = tmp.getMonth()+1; var fdyto = tmp.getDate(); if (fdyto < 10) fdyto = '0'+String(fdyto); var fmoto = String(fmoto)+'-'+String(fyrto); var fdyto = String(fdyto); var v = fv(form_name,'RetDay',fdyto); document.forms[form_name].elements['RetDay'].options[v].selected = true; var v = fv(form_name, 'month_2',fmoto); document.forms[form_name].elements['month_2'].options[v].selected = true; return true; }
function fv(form_name,f,v) { for (var i=0; i < document.forms[form_name].elements[f].length; i++) { if (document.forms[form_name].elements[f].options[i].value == v) break; }
return i; }
function mv(id) { document.forms['multi'].elements[id].checked = true; if (mv_check()) { document.forms['multi'].submit(); }
}
function mv_check() { var flag = 'yes'; var cnt = 0; for (var i=0; i < document.forms['multi'].elements['srid[]'].length; i++) { if (document.forms['multi'].elements['srid[]'][i].checked) { flag = 'no'; cnt++; }
}
if (flag == 'yes') { alert('Bitte wählen Sie mindestens einen Termin aus!'); return false; }
else if (cnt > 6) { alert('Sie können höchstens 6 Termine auf einmal prüfen!'); return false; }
return true; }
function string_array(n) { this.length = n; for (var i = 1; i <= n; i++) this[i] = ' '; }
function rnd_image(data, cnt, bonus) { var core = 0; core = Math.floor(Math.random()*cnt+1); core = '<img src="'+data[core]+'"'+bonus+' />'; document.write(core); return true; }
function fs_toggle(id, title, css, css_active) { var els = document.getElementsByTagName('div'); var elsLen = els.length; var pattern = new RegExp('fastsearch__'); for (i = 0, j = 0; i < elsLen; i++) { if ( pattern.test(els[i].id) ) { els[i].style.display = 'none'; j++; }
}
document.getElementById('fastsearch__'+id).style.display = ''; if(title != undefined && title != '') { document.getElementById('fastsearch_title').innerHTML = title; }
if(css != undefined) { var els = document.getElementsByTagName('a'); var elsLen = els.length; var pattern = new RegExp('fs_toggle__'); for (i = 0, j = 0; i < elsLen; i++) { if ( pattern.test(els[i].id) ) { els[i].className = css; j++; }
}
document.getElementById('fs_toggle__'+id).className = css+css_active; }
}

