var Prototype={
Version:'1.5.0_rc1',
BrowserFeatures:{
XPath:!!document.evaluate},
ScriptFragment:'(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)',
emptyFunction:function(){},
K:function(x){return x}}
var Class={
create:function(){
return function(){
this.initialize.apply(this,arguments);}}}
var Abstract=new Object();
Object.extend=function(destination,source){
for(var property in source){
destination[property]=source[property];}
return destination;}
Object.extend(Object,{
inspect:function(object){
try{
if(object===undefined)return 'undefined';
if(object===null)return 'null';
return object.inspect?object.inspect():object.toString();}catch(e){
if(e instanceof RangeError)return '...';
throw e;}},
keys:function(object){
var keys=[];
for(var property in object)
keys.push(property);
return keys;},
values:function(object){
var values=[];
for(var property in object)
values.push(object[property]);
return values;},
clone:function(object){
return Object.extend({},object);}});
Function.prototype.bind=function(){
var __method=this,args=$A(arguments),object=args.shift();
return function(){
return __method.apply(object,args.concat($A(arguments)));}}
Function.prototype.bindAsEventListener=function(object){
var __method=this,args=$A(arguments),object=args.shift();
return function(event){
return __method.apply(object,[(event||window.event)].concat(args).concat($A(arguments)));}}
Object.extend(Number.prototype,{
toColorPart:function(){
var digits=this.toString(16);
if(this<16)return '0'+digits;
return digits;},
succ:function(){
return this +1;},
times:function(iterator){
$R(0,this,true).each(iterator);
return this;}});
var Try={
these:function(){
var returnValue;
for(var i=0;i<arguments.length;i++){
var lambda=arguments[i];
try{
returnValue=lambda();
break;}catch(e){}}
return returnValue;}}
var PeriodicalExecuter=Class.create();
PeriodicalExecuter.prototype={
initialize:function(callback,frequency){
this.callback=callback;
this.frequency=frequency;
this.currentlyExecuting=false;
this.registerCallback();},
registerCallback:function(){
this.timer=setInterval(this.onTimerEvent.bind(this),this.frequency*1000);},
stop:function(){
if(!this.timer)return;
clearInterval(this.timer);
this.timer=null;},
onTimerEvent:function(){
if(!this.currentlyExecuting){
try{
this.currentlyExecuting=true;
this.callback(this);}finally{
this.currentlyExecuting=false;}}}}
Object.extend(String.prototype,{
gsub:function(pattern,replacement){
var result='',source=this,match;
replacement=arguments.callee.prepareReplacement(replacement);
while(source.length>0){
if(match=source.match(pattern)){
result+=source.slice(0,match.index);
result+=(replacement(match)||'').toString();
source=source.slice(match.index+match[0].length);}else{
result+=source,source='';}}
return result;},
sub:function(pattern,replacement,count){
replacement=this.gsub.prepareReplacement(replacement);
count=count===undefined?1:count;
return this.gsub(pattern,function(match){
if(--count<0)return match[0];
return replacement(match);});},
scan:function(pattern,iterator){
this.gsub(pattern,iterator);
return this;},
truncate:function(length,truncation){
length=length||30;
truncation=truncation===undefined?'...':truncation;
return this.length>length?
this.slice(0,length-truncation.length)+truncation: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 matchAll=new RegExp(Prototype.ScriptFragment,'img');
var matchOne=new RegExp(Prototype.ScriptFragment,'im');
return(this.match(matchAll)||[]).map(function(scriptTag){
return(scriptTag.match(matchOne)||['',''])[1];});},
evalScripts:function(){
return this.extractScripts().map(function(script){return eval(script)});},
escapeHTML:function(){
var div=document.createElement('div');
var text=document.createTextNode(this);
div.appendChild(text);
return div.innerHTML;},
unescapeHTML:function(){
var div=document.createElement('div');
div.innerHTML=this.stripTags();
return div.childNodes[0]?div.childNodes[0].nodeValue:'';},
toQueryParams:function(){
var match=this.strip().match(/[^?]*$/)[0];
if(!match)return{};
var pairs=match.split('&');
return pairs.inject({},function(params,pairString){
var pair=pairString.split('=');
var value=pair[1]?decodeURIComponent(pair[1]):undefined;
params[decodeURIComponent(pair[0])]=value;
return params;});},
toArray:function(){
return this.split('');},
camelize:function(){
var oStringList=this.split('-');
if(oStringList.length==1)return oStringList[0];
var camelizedString=this.indexOf('-')==0?oStringList[0].charAt(0).toUpperCase()+oStringList[0].substring(1):oStringList[0];
for(var i=1,length=oStringList.length;i<length;i++){
var s=oStringList[i];
camelizedString+=s.charAt(0).toUpperCase()+s.substring(1);}
return camelizedString;},
inspect:function(useDoubleQuotes){
var escapedString=this.replace(/\\/g,'\\\\');
if(useDoubleQuotes)
return '"'+escapedString.replace(/"/g,'\\"')+'"';
else
return "'"+escapedString.replace(/'/g,'\\\'') + "'";}});
String.prototype.gsub.prepareReplacement=function(replacement){
if(typeof replacement=='function')return replacement;
var template=new Template(replacement);
return function(match){return template.evaluate(match)};}
String.prototype.parseQuery=String.prototype.toQueryParams;
var Template=Class.create();
Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;
Template.prototype={
initialize:function(template,pattern){
this.template=template.toString();
this.pattern=pattern||Template.Pattern;},
evaluate:function(object){
return this.template.gsub(this.pattern,function(match){
var before=match[1];
if(before=='\\')return match[2];
return before+(object[match[3]]||'').toString();});}}
var $break=new Object();
var $continue=new Object();
var Enumerable={
each:function(iterator){
var index=0;
try{
this._each(function(value){
try{
iterator(value,index++);}catch(e){
if(e!=$continue)throw e;}});}catch(e){
if(e!=$break)throw e;}
return this;},
eachSlice:function(number,iterator){
var index=-number,slices=[],array=this.toArray();
while((index+=number)<array.length)
slices.push(array.slice(index,index+number));
return slices.collect(iterator||Prototype.K);},
all:function(iterator){
var result=true;
this.each(function(value,index){
result=result&&!!(iterator||Prototype.K)(value,index);
if(!result)throw $break;});
return result;},
any:function(iterator){
var result=false;
this.each(function(value,index){
if(result=!!(iterator||Prototype.K)(value,index))
throw $break;});
return result;},
collect:function(iterator){
var results=[];
this.each(function(value,index){
results.push(iterator(value,index));});
return results;},
detect:function(iterator){
var result;
this.each(function(value,index){
if(iterator(value,index)){
result=value;
throw $break;}});
return result;},
findAll:function(iterator){
var results=[];
this.each(function(value,index){
if(iterator(value,index))
results.push(value);});
return results;},
grep:function(pattern,iterator){
var results=[];
this.each(function(value,index){
var stringValue=value.toString();
if(stringValue.match(pattern))
results.push((iterator||Prototype.K)(value,index));})
return results;},
include:function(object){
var found=false;
this.each(function(value){
if(value==object){
found=true;
throw $break;}});
return found;},
inGroupsOf:function(number,fillWith){
fillWith=fillWith||null;
var results=this.eachSlice(number);
if(results.length>0)(number-results.last().length).times(function(){
results.last().push(fillWith)});
return results;},
inject:function(memo,iterator){
this.each(function(value,index){
memo=iterator(memo,value,index);});
return memo;},
invoke:function(method){
var args=$A(arguments).slice(1);
return this.collect(function(value){
return value[method].apply(value,args);});},
max:function(iterator){
var result;
this.each(function(value,index){
value=(iterator||Prototype.K)(value,index);
if(result==undefined||value>=result)
result=value;});
return result;},
min:function(iterator){
var result;
this.each(function(value,index){
value=(iterator||Prototype.K)(value,index);
if(result==undefined||value<result)
result=value;});
return result;},
partition:function(iterator){
var trues=[],falses=[];
this.each(function(value,index){((iterator||Prototype.K)(value,index)?
trues:falses).push(value);});
return[trues,falses];},
pluck:function(property){
var results=[];
this.each(function(value,index){
results.push(value[property]);});
return results;},
reject:function(iterator){
var results=[];
this.each(function(value,index){
if(!iterator(value,index))
results.push(value);});
return results;},
sortBy:function(iterator){
return this.collect(function(value,index){
return{value:value,criteria:iterator(value,index)};}).sort(function(left,right){
var a=left.criteria,b=right.criteria;
return a<b?-1:a>b?1:0;}).pluck('value');},
toArray:function(){
return this.collect(Prototype.K);},
zip:function(){
var iterator=Prototype.K,args=$A(arguments);
if(typeof args.last()=='function')
iterator=args.pop();
var collections=[this].concat(args).map($A);
return this.map(function(value,index){
return iterator(collections.pluck(index));});},
inspect:function(){
return '#<Enumerable:'+this.toArray().inspect()+'>';}}
Object.extend(Enumerable,{
map:Enumerable.collect,
find:Enumerable.detect,
select:Enumerable.findAll,
member:Enumerable.include,
entries:Enumerable.toArray});
var $A=Array.from=function(iterable){
if(!iterable)return[];
if(iterable.toArray){
return iterable.toArray();}else{
var results=[];
for(var i=0,length=iterable.length;i<length;i++)
results.push(iterable[i]);
return results;}}
Object.extend(Array.prototype,Enumerable);
if(!Array.prototype._reverse)
Array.prototype._reverse=Array.prototype.reverse;
Object.extend(Array.prototype,{
_each:function(iterator){
for(var i=0,length=this.length;i<length;i++)
iterator(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(value){
return value!=undefined||value!=null;});},
flatten:function(){
return this.inject([],function(array,value){
return array.concat(value&&value.constructor==Array?
value.flatten():[value]);});},
without:function(){
var values=$A(arguments);
return this.select(function(value){
return !values.include(value);});},
indexOf:function(object){
for(var i=0,length=this.length;i<length;i++)
if(this[i]==object)return i;
return -1;},
reverse:function(inline){
return(inline!==false?this:this.toArray())._reverse();},
reduce:function(){
return this.length>1?this:this[0];},
uniq:function(){
return this.inject([],function(array,value){
return array.include(value)?array:array.concat([value]);});},
clone:function(){
return[].concat(this);},
inspect:function(){
return '['+this.map(Object.inspect).join(', ')+']';}});
Array.prototype.toArray=Array.prototype.clone;
var Hash={
_each:function(iterator){
for(var key in this){
var value=this[key];
if(typeof value=='function')continue;
var pair=[key,value];
pair.key=key;
pair.value=value;
iterator(pair);}},
keys:function(){
return this.pluck('key');},
values:function(){
return this.pluck('value');},
merge:function(hash){
return $H(hash).inject(this,function(mergedHash,pair){
mergedHash[pair.key]=pair.value;
return mergedHash;});},
toQueryString:function(){
return this.map(function(pair){
if(!pair.value&&pair.value!==0)pair[1]='';
if(!pair.key)return;
return pair.map(encodeURIComponent).join('=');}).join('&');},
inspect:function(){
return '#<Hash:{'+this.map(function(pair){
return pair.map(Object.inspect).join(': ');}).join(', ')+'}>';}}
function $H(object){
var hash=Object.extend({},object||{});
Object.extend(hash,Enumerable);
Object.extend(hash,Hash);
return hash;}
ObjectRange=Class.create();
Object.extend(ObjectRange.prototype,Enumerable);
Object.extend(ObjectRange.prototype,{
initialize:function(start,end,exclusive){
this.start=start;
this.end=end;
this.exclusive=exclusive;},
_each:function(iterator){
var value=this.start;
while(this.include(value)){
iterator(value);
value=value.succ();}},
include:function(value){
if(value<this.start)
return false;
if(this.exclusive)
return value<this.end;
return value<=this.end;}});
var $R=function(start,end,exclusive){
return new ObjectRange(start,end,exclusive);}
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(iterator){
this.responders._each(iterator);},
register:function(responder){
if(!this.include(responder))
this.responders.push(responder);},
unregister:function(responder){
this.responders=this.responders.without(responder);},
dispatch:function(callback,request,transport,json){
this.each(function(responder){
if(typeof responder[callback]=='function'){
try{
responder[callback].apply(responder,[request,transport,json]);}catch(e){}}});}};
Object.extend(Ajax.Responders,Enumerable);
Ajax.Responders.register({
onCreate:function(){
Ajax.activeRequestCount++;},
onComplete:function(){
Ajax.activeRequestCount--;}});
Ajax.Base=function(){};
Ajax.Base.prototype={
setOptions:function(options){
this.options={
method:'post',
asynchronous:true,
contentType:'application/x-www-form-urlencoded',
encoding:'UTF-8',
parameters:''}
Object.extend(this.options,options||{});
this.options.method=this.options.method.toLowerCase();
this.options.parameters=$H(typeof this.options.parameters=='string'?
this.options.parameters.toQueryParams():this.options.parameters);}}
Ajax.Request=Class.create();
Ajax.Request.Events=['Uninitialized','Loading','Loaded','Interactive','Complete'];
Ajax.Request.prototype=Object.extend(new Ajax.Base(),{
initialize:function(url,options){
this.transport=Ajax.getTransport();
this.setOptions(options);
this.request(url);},
request:function(url){
var params=this.options.parameters;
if(params.any())params['_']='';
if(!['get','post'].include(this.options.method)){
params['_method']=this.options.method;
this.options.method='post';}
this.url=url;
if(this.options.method=='get'&&params.any())
this.url+=(this.url.indexOf('?')>=0?'&':'?')+
params.toQueryString();
try{
Ajax.Responders.dispatch('onCreate',this,this.transport);
this.transport.open(this.options.method.toUpperCase(),this.url,
this.options.asynchronous,this.options.username,
this.options.password);
if(this.options.asynchronous)
setTimeout(function(){this.respondToReadyState(1)}.bind(this),10);
this.transport.onreadystatechange=this.onStateChange.bind(this);
this.setRequestHeaders();
var body=this.options.method=='post'?(this.options.postBody||params.toQueryString()):null;
this.transport.send(body);
if(!this.options.asynchronous&&this.transport.overrideMimeType)
this.onStateChange();}
catch(e){
this.dispatchException(e);}},
onStateChange:function(){
var readyState=this.transport.readyState;
if(readyState>1)
this.respondToReadyState(this.transport.readyState);},
setRequestHeaders:function(){
var headers={
'X-Requested-With':'XMLHttpRequest',
'X-Prototype-Version':Prototype.Version,
'Accept':'text/javascript, text/html, application/xml, text/xml, */*'};
if(this.options.method=='post'){
headers['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)
headers['Connection']='close';}
if(typeof this.options.requestHeaders=='object'){
var extras=this.options.requestHeaders;
if(typeof extras.push=='function')
for(var i=0;i<extras.length;i+=2)
headers[extras[i]]=extras[i+1];
else
$H(extras).each(function(pair){headers[pair.key]=pair.value});}
for(var name in headers)
this.transport.setRequestHeader(name,headers[name]);},
success:function(){
return !this.transport.status||(this.transport.status>=200&&this.transport.status<300);},
respondToReadyState:function(readyState){
var state=Ajax.Request.Events[readyState];
var transport=this.transport,json=this.evalJSON();
if(state=='Complete'){
try{(this.options['on'+this.transport.status]||this.options['on'+(this.success()?'Success':'Failure')]||Prototype.emptyFunction)(transport,json);}catch(e){
this.dispatchException(e);}}
try{(this.options['on'+state]||Prototype.emptyFunction)(transport,json);
Ajax.Responders.dispatch('on'+state,this,transport,json);}catch(e){
this.dispatchException(e);}
if(state=='Complete'){
if((this.getHeader('Content-type')||'').strip().
match(/^(text|application)\/(x-)?(java|ecma)script(;.*)?$/i))
this.evalResponse();
this.transport.onreadystatechange=Prototype.emptyFunction;}},
getHeader:function(name){
try{
return this.transport.getResponseHeader(name);}catch(e){return null}},
evalJSON:function(){
try{
var json=this.getHeader('X-JSON');
return json?eval('('+json+')'):null;}catch(e){return null}},
evalResponse:function(){
try{
return eval(this.transport.responseText);}catch(e){
this.dispatchException(e);}},
dispatchException:function(exception){(this.options.onException||Prototype.emptyFunction)(this,exception);
Ajax.Responders.dispatch('onException',this,exception);}});
Ajax.Updater=Class.create();
Object.extend(Object.extend(Ajax.Updater.prototype,Ajax.Request.prototype),{
initialize:function(container,url,options){
this.container={
success:(container.success||container),
failure:(container.failure||(container.success?null:container))}
this.transport=Ajax.getTransport();
this.setOptions(options);
var onComplete=this.options.onComplete||Prototype.emptyFunction;
this.options.onComplete=(function(transport,param){
this.updateContent();
onComplete(transport,param);}).bind(this);
this.request(url);},
updateContent:function(){
var receiver=this.container[this.success()?'success':'failure'];
var response=this.transport.responseText;
if(!this.options.evalScripts)response=response.stripScripts();
if(receiver=$(receiver)){
if(this.options.insertion)
new this.options.insertion(receiver,response);
else
receiver.update(response);}
if(this.success()){
if(this.onComplete)
setTimeout(this.onComplete.bind(this),10);}}});
Ajax.PeriodicalUpdater=Class.create();
Ajax.PeriodicalUpdater.prototype=Object.extend(new Ajax.Base(),{
initialize:function(container,url,options){
this.setOptions(options);
this.onComplete=this.options.onComplete;
this.frequency=(this.options.frequency||2);
this.decay=(this.options.decay||1);
this.updater={};
this.container=container;
this.url=url;
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(request){
if(this.options.decay){
this.decay=(request.responseText==this.lastText?
this.decay*this.options.decay:1);
this.lastText=request.responseText;}
this.timer=setTimeout(this.onTimerEvent.bind(this),
this.decay*this.frequency*1000);},
onTimerEvent:function(){
this.updater=new Ajax.Updater(this.container,this.url,this.options);}});
function $(element){
if(arguments.length>1){
for(var i=0,elements=[],length=arguments.length;i<length;i++)
elements.push($(arguments[i]));
return elements;}
if(typeof element=='string')
element=document.getElementById(element);
return Element.extend(element);}
if(Prototype.BrowserFeatures.XPath){
document._getElementsByXPath=function(expression,parentElement){
var results=[];
var query=document.evaluate(expression,$(parentElement)||document,
null,XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
for(var i=0,len=query.snapshotLength;i<len;i++)
results.push(query.snapshotItem(i));
return results;}}
document.getElementsByClassName=function(className,parentElement){
if(Prototype.BrowserFeatures.XPath){
var q=".//*[contains(concat(' ', @class, ' '), ' "+className+" ')]";
return document._getElementsByXPath(q,parentElement);}else{
var children=($(parentElement)||document.body).getElementsByTagName('*');
var elements=[],child;
for(var i=0,length=children.length;i<length;i++){
child=children[i];
if(Element.hasClassName(child,className))
elements.push(Element.extend(child));}
return elements;}}
if(!window.Element)
var Element=new Object();
Element.extend=function(element){
if(!element)return;
if(_nativeExtensions||element.nodeType==3)return element;
if(!element._extended&&element.tagName&&element!=window){
var methods=Object.clone(Element.Methods),cache=Element.extend.cache;
if(element.tagName=='FORM')
Object.extend(methods,Form.Methods);
if(['INPUT','TEXTAREA','SELECT'].include(element.tagName))
Object.extend(methods,Form.Element.Methods);
for(var property in methods){
var value=methods[property];
if(typeof value=='function')
element[property]=cache.findOrStore(value);}
var methods=Object.clone(Element.Methods.Simulated),cache=Element.extend.cache;
for(var property in methods){
var value=methods[property];
if('function'==typeof value&&!(property in element))
element[property]=cache.findOrStore(value);}}
element._extended=true;
return element;}
Element.extend.cache={
findOrStore:function(value){
return this[value]=this[value]||function(){
return value.apply(null,[this].concat($A(arguments)));}}}
Element.Methods={
visible:function(element){
return $(element).style.display!='none';},
toggle:function(element){
element=$(element);
Element[Element.visible(element)?'hide':'show'](element);
return element;},
hide:function(element){
$(element).style.display='none';
return element;},
show:function(element){
$(element).style.display='';
return element;},
remove:function(element){
element=$(element);
element.parentNode.removeChild(element);
return element;},
update:function(element,html){
html=typeof html=='undefined'?'':html.toString();
$(element).innerHTML=html.stripScripts();
setTimeout(function(){html.evalScripts()},10);
return element;},
replace:function(element,html){
element=$(element);
if(element.outerHTML){
element.outerHTML=html.stripScripts();}else{
var range=element.ownerDocument.createRange();
range.selectNodeContents(element);
element.parentNode.replaceChild(
range.createContextualFragment(html.stripScripts()),element);}
setTimeout(function(){html.evalScripts()},10);
return element;},
inspect:function(element){
element=$(element);
var result='<'+element.tagName.toLowerCase();
$H({'id':'id','className':'class'}).each(function(pair){
var property=pair.first(),attribute=pair.last();
var value=(element[property]||'').toString();
if(value)result+=' '+attribute+'='+value.inspect(true);});
return result+'>';},
recursivelyCollect:function(element,property){
element=$(element);
var elements=[];
while(element=element[property])
if(element.nodeType==1)
elements.push(Element.extend(element));
return elements;},
ancestors:function(element){
return $(element).recursivelyCollect('parentNode');},
descendants:function(element){
element=$(element);
return $A(element.getElementsByTagName('*'));},
previousSiblings:function(element){
return $(element).recursivelyCollect('previousSibling');},
nextSiblings:function(element){
return $(element).recursivelyCollect('nextSibling');},
siblings:function(element){
element=$(element);
return element.previousSiblings().reverse().concat(element.nextSiblings());},
match:function(element,selector){
element=$(element);
if(typeof selector=='string')
selector=new Selector(selector);
return selector.match(element);},
up:function(element,expression,index){
return Selector.findElement($(element).ancestors(),expression,index);},
down:function(element,expression,index){
return Selector.findElement($(element).descendants(),expression,index);},
previous:function(element,expression,index){
return Selector.findElement($(element).previousSiblings(),expression,index);},
next:function(element,expression,index){
return Selector.findElement($(element).nextSiblings(),expression,index);},
getElementsBySelector:function(){
var args=$A(arguments),element=$(args.shift());
return Selector.findChildElements(element,args);},
getElementsByClassName:function(element,className){
element=$(element);
return document.getElementsByClassName(className,element);},
getHeight:function(element){
element=$(element);
return element.offsetHeight;},
classNames:function(element){
return new Element.ClassNames(element);},
hasClassName:function(element,className){
if(!(element=$(element)))return;
var elementClassName=element.className;
if(elementClassName.length==0)return false;
if(elementClassName==className||
elementClassName.match(new RegExp("(^|\\s)"+className+"(\\s|$)")))
return true;
return false;},
addClassName:function(element,className){
if(!(element=$(element)))return;
Element.classNames(element).add(className);
return element;},
removeClassName:function(element,className){
if(!(element=$(element)))return;
Element.classNames(element).remove(className);
return element;},
observe:function(){
Event.observe.apply(Event,arguments);
return $A(arguments).first();},
stopObserving:function(){
Event.stopObserving.apply(Event,arguments);
return $A(arguments).first();},
cleanWhitespace:function(element){
element=$(element);
var node=element.firstChild;
while(node){
var nextNode=node.nextSibling;
if(node.nodeType==3&&!/\S/.test(node.nodeValue))
element.removeChild(node);
node=nextNode;}
return element;},
empty:function(element){
return $(element).innerHTML.match(/^\s*$/);},
childOf:function(element,ancestor){
element=$(element),ancestor=$(ancestor);
while(element=element.parentNode)
if(element==ancestor)return true;
return false;},
scrollTo:function(element){
element=$(element);
var x=element.x?element.x:element.offsetLeft,
y=element.y?element.y:element.offsetTop;
window.scrollTo(x,y);
return element;},
getStyle:function(element,style){
element=$(element);
var value=element.style[style.camelize()];
if(!value){
if(document.defaultView&&document.defaultView.getComputedStyle){
var css=document.defaultView.getComputedStyle(element,null);
value=css?css.getPropertyValue(style):null;}else if(element.currentStyle){
value=element.currentStyle[style.camelize()];}}
if(window.opera&&['left','top','right','bottom'].include(style))
if(Element.getStyle(element,'position')=='static')value='auto';
return value=='auto'?null:value;},
setStyle:function(element,style){
element=$(element);
for(var name in style)
element.style[name.camelize()]=style[name];
return element;},
getDimensions:function(element){
element=$(element);
if(Element.getStyle(element,'display')!='none')
return{width:element.offsetWidth,height:element.offsetHeight};
var els=element.style;
var originalVisibility=els.visibility;
var originalPosition=els.position;
els.visibility='hidden';
els.position='absolute';
els.display='';
var originalWidth=element.clientWidth;
var originalHeight=element.clientHeight;
els.display='none';
els.position=originalPosition;
els.visibility=originalVisibility;
return{width:originalWidth,height:originalHeight};},
makePositioned:function(element){
element=$(element);
var pos=Element.getStyle(element,'position');
if(pos=='static'||!pos){
element._madePositioned=true;
element.style.position='relative';
if(window.opera){
element.style.top=0;
element.style.left=0;}}
return element;},
undoPositioned:function(element){
element=$(element);
if(element._madePositioned){
element._madePositioned=undefined;
element.style.position=
element.style.top=
element.style.left=
element.style.bottom=
element.style.right='';}
return element;},
makeClipping:function(element){
element=$(element);
if(element._overflow)return element;
element._overflow=element.style.overflow||'auto';
if((Element.getStyle(element,'overflow')||'visible')!='hidden')
element.style.overflow='hidden';
return element;},
undoClipping:function(element){
element=$(element);
if(!element._overflow)return element;
element.style.overflow=element._overflow=='auto'?'':element._overflow;
element._overflow=null;
return element;}}
Element.Methods.Simulated={
hasAttribute:function(element,attribute){
return $(element).getAttributeNode(attribute).specified;}}
if(document.all){
Element.Methods.update=function(element,html){
element=$(element);
html=typeof html=='undefined'?'':html.toString();
var tagName=element.tagName.toUpperCase();
if(['THEAD','TBODY','TR','TD'].indexOf(tagName)>-1){
var div=document.createElement('div');
switch(tagName){
case 'THEAD':
case 'TBODY':
div.innerHTML='<table><tbody>'+html.stripScripts()+'</tbody></table>';
depth=2;
break;
case 'TR':
div.innerHTML='<table><tbody><tr>'+html.stripScripts()+'</tr></tbody></table>';
depth=3;
break;
case 'TD':
div.innerHTML='<table><tbody><tr><td>'+html.stripScripts()+'</td></tr></tbody></table>';
depth=4;}
$A(element.childNodes).each(function(node){
element.removeChild(node)});
depth.times(function(){div=div.firstChild});
$A(div.childNodes).each(
function(node){element.appendChild(node)});}else{
element.innerHTML=html.stripScripts();}
setTimeout(function(){html.evalScripts()},10);
return element;}}
Object.extend(Element,Element.Methods);
var _nativeExtensions=false;
if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))['','Form','Input','TextArea','Select'].each(function(tag){
var className='HTML'+tag+'Element';
if(window[className])return;
var klass=window[className]={};
klass.prototype=document.createElement(tag?tag.toLowerCase():'div').__proto__;});
Element.addMethods=function(methods){
Object.extend(Element.Methods,methods||{});
function copy(methods,destination,onlyIfAbsent){
onlyIfAbsent=onlyIfAbsent||false;
var cache=Element.extend.cache;
for(var property in methods){
var value=methods[property];
if(!onlyIfAbsent||!(property in destination))
destination[property]=cache.findOrStore(value);}}
if(typeof HTMLElement!='undefined'){
copy(Element.Methods,HTMLElement.prototype);
copy(Element.Methods.Simulated,HTMLElement.prototype,true);
copy(Form.Methods,HTMLFormElement.prototype);[HTMLInputElement,HTMLTextAreaElement,HTMLSelectElement].each(function(klass){
copy(Form.Element.Methods,klass.prototype);});
_nativeExtensions=true;}}
var Toggle=new Object();
Toggle.display=Element.toggle;
Abstract.Insertion=function(adjacency){
this.adjacency=adjacency;}
Abstract.Insertion.prototype={
initialize:function(element,content){
this.element=$(element);
this.content=content.stripScripts();
if(this.adjacency&&this.element.insertAdjacentHTML){
try{
this.element.insertAdjacentHTML(this.adjacency,this.content);}catch(e){
var tagName=this.element.tagName.toLowerCase();
if(tagName=='tbody'||tagName=='tr'){
this.insertContent(this.contentFromAnonymousTable());}else{
throw e;}}}else{
this.range=this.element.ownerDocument.createRange();
if(this.initializeRange)this.initializeRange();
this.insertContent([this.range.createContextualFragment(this.content)]);}
setTimeout(function(){content.evalScripts()},10);},
contentFromAnonymousTable:function(){
var div=document.createElement('div');
div.innerHTML='<table><tbody>'+this.content+'</tbody></table>';
return $A(div.childNodes[0].childNodes[0].childNodes);}}
var Insertion=new Object();
Insertion.Before=Class.create();
Insertion.Before.prototype=Object.extend(new Abstract.Insertion('beforeBegin'),{
initializeRange:function(){
this.range.setStartBefore(this.element);},
insertContent:function(fragments){
fragments.each((function(fragment){
this.element.parentNode.insertBefore(fragment,this.element);}).bind(this));}});
Insertion.Top=Class.create();
Insertion.Top.prototype=Object.extend(new Abstract.Insertion('afterBegin'),{
initializeRange:function(){
this.range.selectNodeContents(this.element);
this.range.collapse(true);},
insertContent:function(fragments){
fragments.reverse(false).each((function(fragment){
this.element.insertBefore(fragment,this.element.firstChild);}).bind(this));}});
Insertion.Bottom=Class.create();
Insertion.Bottom.prototype=Object.extend(new Abstract.Insertion('beforeEnd'),{
initializeRange:function(){
this.range.selectNodeContents(this.element);
this.range.collapse(this.element);},
insertContent:function(fragments){
fragments.each((function(fragment){
this.element.appendChild(fragment);}).bind(this));}});
Insertion.After=Class.create();
Insertion.After.prototype=Object.extend(new Abstract.Insertion('afterEnd'),{
initializeRange:function(){
this.range.setStartAfter(this.element);},
insertContent:function(fragments){
fragments.each((function(fragment){
this.element.parentNode.insertBefore(fragment,
this.element.nextSibling);}).bind(this));}});
Element.ClassNames=Class.create();
Element.ClassNames.prototype={
initialize:function(element){
this.element=$(element);},
_each:function(iterator){
this.element.className.split(/\s+/).select(function(name){
return name.length>0;})._each(iterator);},
set:function(className){
this.element.className=className;},
add:function(classNameToAdd){
if(this.include(classNameToAdd))return;
this.set($A(this).concat(classNameToAdd).join(' '));},
remove:function(classNameToRemove){
if(!this.include(classNameToRemove))return;
this.set($A(this).without(classNameToRemove).join(' '));},
toString:function(){
return $A(this).join(' ');}}
Object.extend(Element.ClassNames.prototype,Enumerable);
var Selector=Class.create();
Selector.prototype={
initialize:function(expression){
this.params={classNames:[]};
this.expression=expression.toString().strip();
this.parseExpression();
this.compileMatcher();},
parseExpression:function(){
function abort(message){throw 'Parse error in selector: '+message;}
if(this.expression=='')abort('empty expression');
var params=this.params,expr=this.expression,match,modifier,clause,rest;
while(match=expr.match(/^(.*)\[([a-z0-9_:-]+?)(?:([~\|!]?=)(?:"([^"]*)"|([^\]\s]*)))?\]$/i)){
params.attributes=params.attributes||[];
params.attributes.push({name:match[2],operator:match[3],value:match[4]||match[5]||''});
expr=match[1];}
if(expr=='*')return this.params.wildcard=true;
while(match=expr.match(/^([^a-z0-9_-])?([a-z0-9_-]+)(.*)/i)){
modifier=match[1],clause=match[2],rest=match[3];
switch(modifier){
case '#':params.id=clause;break;
case '.':params.classNames.push(clause);break;
case '':
case undefined:params.tagName=clause.toUpperCase();break;
default:abort(expr.inspect());}
expr=rest;}
if(expr.length>0)abort(expr.inspect());},
buildMatchExpression:function(){
var params=this.params,conditions=[],clause;
if(params.wildcard)
conditions.push('true');
if(clause=params.id)
conditions.push('element.id == '+clause.inspect());
if(clause=params.tagName)
conditions.push('element.tagName.toUpperCase() == '+clause.inspect());
if((clause=params.classNames).length>0)
for(var i=0;i<clause.length;i++)
conditions.push('Element.hasClassName(element, '+clause[i].inspect()+')');
if(clause=params.attributes){
clause.each(function(attribute){
var value='element.getAttribute('+attribute.name.inspect()+')';
var splitValueBy=function(delimiter){
return value+' && '+value+'.split('+delimiter.inspect()+')';}
switch(attribute.operator){
case '=':conditions.push(value+' == '+attribute.value.inspect());break;
case '~=':conditions.push(splitValueBy(' ')+'.include('+attribute.value.inspect()+')');break;
case '|=':conditions.push(
splitValueBy('-')+'.first().toUpperCase() == '+attribute.value.toUpperCase().inspect());break;
case '!=':conditions.push(value+' != '+attribute.value.inspect());break;
case '':
case undefined:conditions.push(value+' != null');break;
default:throw 'Unknown operator '+attribute.operator+' in selector';}});}
return conditions.join(' && ');},
compileMatcher:function(){
this.match=new Function('element','if(!element.tagName)return false;\
return '+this.buildMatchExpression());},
findElements:function(scope){
var element;
if(element=$(this.params.id))
if(this.match(element))
if(!scope||Element.childOf(element,scope))
return[element];
scope=(scope||document).getElementsByTagName(this.params.tagName||'*');
var results=[];
for(var i=0,length=scope.length;i<length;i++)
if(this.match(element=scope[i]))
results.push(Element.extend(element));
return results;},
toString:function(){
return this.expression;}}
Object.extend(Selector,{
matchElements:function(elements,expression){
var selector=new Selector(expression);
return elements.select(selector.match.bind(selector)).collect(Element.extend);},
findElement:function(elements,expression,index){
if(typeof expression=='number')index=expression,expression=false;
return Selector.matchElements(elements,expression||'*')[index||0];},
findChildElements:function(element,expressions){
return expressions.map(function(expression){
return expression.strip().split(/\s+/).inject([null],function(results,expr){
var selector=new Selector(expr);
return results.inject([],function(elements,result){
return elements.concat(selector.findElements(result||element));});});}).flatten();}});
function $$(){
return Selector.findChildElements(document,$A(arguments));}
var Form={
reset:function(form){
$(form).reset();
return form;},
serializeElements:function(elements){
return elements.inject([],function(queryComponents,element){
var queryComponent=Form.Element.serialize(element);
if(queryComponent)queryComponents.push(queryComponent);
return queryComponents;}).join('&');}};
Form.Methods={
serialize:function(form){
return Form.serializeElements($(form).getElements());},
getElements:function(form){
return $A($(form).getElementsByTagName('*')).inject([],
function(elements,child){
if(Form.Element.Serializers[child.tagName.toLowerCase()])
elements.push(Element.extend(child));
return elements;});},
getInputs:function(form,typeName,name){
form=$(form);
var inputs=form.getElementsByTagName('input');
if(!typeName&&!name)
return inputs;
var matchingInputs=new Array();
for(var i=0,length=inputs.length;i<length;i++){
var input=inputs[i];
if((typeName&&input.type!=typeName)||(name&&input.name!=name))
continue;
matchingInputs.push(Element.extend(input));}
return matchingInputs;},
disable:function(form){
form=$(form);
form.getElements().each(function(element){
element.blur();
element.disabled='true';});
return form;},
enable:function(form){
form=$(form);
form.getElements().each(function(element){
element.disabled='';});
return form;},
findFirstElement:function(form){
return $(form).getElements().find(function(element){
return element.type!='hidden'&&!element.disabled&&['input','select','textarea'].include(element.tagName.toLowerCase());});},
focusFirstElement:function(form){
form=$(form);
form.findFirstElement().activate();
return form;}}
Object.extend(Form,Form.Methods);
Form.Element={
focus:function(element){
$(element).focus();
return element;},
select:function(element){
$(element).select();
return element;}}
Form.Element.Methods={
serialize:function(element){
element=$(element);
if(element.disabled)return '';
var method=element.tagName.toLowerCase();
var parameter=Form.Element.Serializers[method](element);
if(parameter){
var key=encodeURIComponent(parameter[0]);
if(key.length==0)return;
if(parameter[1].constructor !=Array)
parameter[1]=[parameter[1]];
return parameter[1].map(function(value){
return key+'='+encodeURIComponent(value);}).join('&');}},
getValue:function(element){
element=$(element);
var method=element.tagName.toLowerCase();
var parameter=Form.Element.Serializers[method](element);
if(parameter)
return parameter[1];},
clear:function(element){
$(element).value='';
return element;},
present:function(element){
return $(element).value!='';},
activate:function(element){
element=$(element);
element.focus();
if(element.select)
element.select();
return element;},
disable:function(element){
element=$(element);
element.disabled=true;
return element;},
enable:function(element){
element=$(element);
element.blur();
element.disabled=false;
return element;}}
Object.extend(Form.Element,Form.Element.Methods);
var Field=Form.Element;
Form.Element.Serializers={
input:function(element){
switch(element.type.toLowerCase()){
case 'checkbox':
case 'radio':
return Form.Element.Serializers.inputSelector(element);
default:
return Form.Element.Serializers.textarea(element);}
return false;},
inputSelector:function(element){
if(element.checked)
return[element.name,element.value];},
textarea:function(element){
return[element.name,element.value];},
select:function(element){
return Form.Element.Serializers[element.type=='select-one'?
'selectOne':'selectMany'](element);},
selectOne:function(element){
var value='',opt,index=element.selectedIndex;
if(index>=0){
opt=Element.extend(element.options[index]);
value=opt.hasAttribute('value')?opt.value:opt.text;}
return[element.name,value];},
selectMany:function(element){
var value=[];
for(var i=0;i<element.length;i++){
var opt=Element.extend(element.options[i]);
if(opt.selected)
value.push(opt.hasAttribute('value')?opt.value:opt.text);}
return[element.name,value];}}
var $F=Form.Element.getValue;
Abstract.TimedObserver=function(){}
Abstract.TimedObserver.prototype={
initialize:function(element,frequency,callback){
this.frequency=frequency;
this.element=$(element);
this.callback=callback;
this.lastValue=this.getValue();
this.registerCallback();},
registerCallback:function(){
setInterval(this.onTimerEvent.bind(this),this.frequency*1000);},
onTimerEvent:function(){
var value=this.getValue();
if(this.lastValue!=value){
this.callback(this.element,value);
this.lastValue=value;}}}
Form.Element.Observer=Class.create();
Form.Element.Observer.prototype=Object.extend(new Abstract.TimedObserver(),{
getValue:function(){
return Form.Element.getValue(this.element);}});
Form.Observer=Class.create();
Form.Observer.prototype=Object.extend(new Abstract.TimedObserver(),{
getValue:function(){
return Form.serialize(this.element);}});
Abstract.EventObserver=function(){}
Abstract.EventObserver.prototype={
initialize:function(element,callback){
this.element=$(element);
this.callback=callback;
this.lastValue=this.getValue();
if(this.element.tagName.toLowerCase()=='form')
this.registerFormCallbacks();
else
this.registerCallback(this.element);},
onElementEvent:function(){
var value=this.getValue();
if(this.lastValue!=value){
this.callback(this.element,value);
this.lastValue=value;}},
registerFormCallbacks:function(){
Form.getElements(this.element).each(this.registerCallback.bind(this));},
registerCallback:function(element){
if(element.type){
switch(element.type.toLowerCase()){
case 'checkbox':
case 'radio':
Event.observe(element,'click',this.onElementEvent.bind(this));
break;
default:
Event.observe(element,'change',this.onElementEvent.bind(this));
break;}}}}
Form.Element.EventObserver=Class.create();
Form.Element.EventObserver.prototype=Object.extend(new Abstract.EventObserver(),{
getValue:function(){
return Form.Element.getValue(this.element);}});
Form.EventObserver=Class.create();
Form.EventObserver.prototype=Object.extend(new Abstract.EventObserver(),{
getValue:function(){
return Form.serialize(this.element);}});
if(!window.Event){
var Event=new Object();}
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,
element:function(event){
return event.target||event.srcElement;},
isLeftClick:function(event){
return(((event.which)&&(event.which==1))||((event.button)&&(event.button==1)));},
pointerX:function(event){
return event.pageX||(event.clientX+(document.documentElement.scrollLeft||document.body.scrollLeft));},
pointerY:function(event){
return event.pageY||(event.clientY+(document.documentElement.scrollTop||document.body.scrollTop));},
stop:function(event){
if(event.preventDefault){
event.preventDefault();
event.stopPropagation();}else{
event.returnValue=false;
event.cancelBubble=true;}},
findElement:function(event,tagName){
var element=Event.element(event);
while(element.parentNode&&(!element.tagName||(element.tagName.toUpperCase()!=tagName.toUpperCase())))
element=element.parentNode;
return element;},
observers:false,
_observeAndCache:function(element,name,observer,useCapture){
if(!this.observers)this.observers=[];
if(element.addEventListener){
this.observers.push([element,name,observer,useCapture]);
element.addEventListener(name,observer,useCapture);}else if(element.attachEvent){
this.observers.push([element,name,observer,useCapture]);
element.attachEvent('on'+name,observer);}},
unloadCache:function(){
if(!Event.observers)return;
for(var i=0,length=Event.observers.length;i<length;i++){
Event.stopObserving.apply(this,Event.observers[i]);
Event.observers[i][0]=null;}
Event.observers=false;},
observe:function(element,name,observer,useCapture){
element=$(element);
useCapture=useCapture||false;
if(name=='keypress'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.attachEvent))
name='keydown';
Event._observeAndCache(element,name,observer,useCapture);},
stopObserving:function(element,name,observer,useCapture){
element=$(element);
useCapture=useCapture||false;
if(name=='keypress'&&(navigator.appVersion.match(/Konqueror|Safari|KHTML/)||element.detachEvent))
name='keydown';
if(element.removeEventListener){
element.removeEventListener(name,observer,useCapture);}else if(element.detachEvent){
try{
element.detachEvent('on'+name,observer);}catch(e){}}}});
if(navigator.appVersion.match(/\bMSIE\b/))
Event.observe(window,'unload',Event.unloadCache,false);
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;},
realOffset:function(element){
var valueT=0,valueL=0;
do{
valueT+=element.scrollTop||0;
valueL+=element.scrollLeft||0;
element=element.parentNode;}while(element);
return[valueL,valueT];},
cumulativeOffset:function(element){
var valueT=0,valueL=0;
do{
valueT+=element.offsetTop||0;
valueL+=element.offsetLeft||0;
element=element.offsetParent;}while(element);
return[valueL,valueT];},
positionedOffset:function(element){
var valueT=0,valueL=0;
do{
valueT+=element.offsetTop||0;
valueL+=element.offsetLeft||0;
element=element.offsetParent;
if(element){
if(element.tagName=='BODY')break;
var p=Element.getStyle(element,'position');
if(p=='relative'||p=='absolute')break;}}while(element);
return[valueL,valueT];},
offsetParent:function(element){
if(element.offsetParent)return element.offsetParent;
if(element==document.body)return element;
while((element=element.parentNode)&&element!=document.body)
if(Element.getStyle(element,'position')!='static')
return element;
return document.body;},
within:function(element,x,y){
if(this.includeScrollOffsets)
return this.withinIncludingScrolloffsets(element,x,y);
this.xcomp=x;
this.ycomp=y;
this.offset=this.cumulativeOffset(element);
return(y>=this.offset[1]&&
y<this.offset[1]+element.offsetHeight&&
x>=this.offset[0]&&
x<this.offset[0]+element.offsetWidth);},
withinIncludingScrolloffsets:function(element,x,y){
var offsetcache=this.realOffset(element);
this.xcomp=x+offsetcache[0]-this.deltaX;
this.ycomp=y+offsetcache[1]-this.deltaY;
this.offset=this.cumulativeOffset(element);
return(this.ycomp>=this.offset[1]&&
this.ycomp<this.offset[1]+element.offsetHeight&&
this.xcomp>=this.offset[0]&&
this.xcomp<this.offset[0]+element.offsetWidth);},
overlap:function(mode,element){
if(!mode)return 0;
if(mode=='vertical')
return((this.offset[1]+element.offsetHeight)-this.ycomp)/
element.offsetHeight;
if(mode=='horizontal')
return((this.offset[0]+element.offsetWidth)-this.xcomp)/
element.offsetWidth;},
page:function(forElement){
var valueT=0,valueL=0;
var element=forElement;
do{
valueT+=element.offsetTop||0;
valueL+=element.offsetLeft||0;
if(element.offsetParent==document.body)
if(Element.getStyle(element,'position')=='absolute')break;}while(element=element.offsetParent);
element=forElement;
do{
if(!window.opera||element.tagName=='BODY'){
valueT-=element.scrollTop||0;
valueL-=element.scrollLeft||0;}}while(element=element.parentNode);
return[valueL,valueT];},
clone:function(source,target){
var options=Object.extend({
setLeft:true,
setTop:true,
setWidth:true,
setHeight:true,
offsetTop:0,
offsetLeft:0},arguments[2]||{})
source=$(source);
var p=Position.page(source);
target=$(target);
var delta=[0,0];
var parent=null;
if(Element.getStyle(target,'position')=='absolute'){
parent=Position.offsetParent(target);
delta=Position.page(parent);}
if(parent==document.body){
delta[0]-=document.body.offsetLeft;
delta[1]-=document.body.offsetTop;}
if(options.setLeft)target.style.left=(p[0]-delta[0]+options.offsetLeft)+'px';
if(options.setTop)target.style.top=(p[1]-delta[1]+options.offsetTop)+'px';
if(options.setWidth)target.style.width=source.offsetWidth+'px';
if(options.setHeight)target.style.height=source.offsetHeight+'px';},
absolutize:function(element){
element=$(element);
if(element.style.position=='absolute')return;
Position.prepare();
var offsets=Position.positionedOffset(element);
var top=offsets[1];
var left=offsets[0];
var width=element.clientWidth;
var height=element.clientHeight;
element._originalLeft=left-parseFloat(element.style.left||0);
element._originalTop=top-parseFloat(element.style.top||0);
element._originalWidth=element.style.width;
element._originalHeight=element.style.height;
element.style.position='absolute';
element.style.top=top+'px';;
element.style.left=left+'px';;
element.style.width=width+'px';;
element.style.height=height+'px';;},
relativize:function(element){
element=$(element);
if(element.style.position=='relative')return;
Position.prepare();
element.style.position='relative';
var top=parseFloat(element.style.top||0)-(element._originalTop||0);
var left=parseFloat(element.style.left||0)-(element._originalLeft||0);
element.style.top=top+'px';
element.style.left=left+'px';
element.style.height=element._originalHeight;
element.style.width=element._originalWidth;}}
if(/Konqueror|Safari|KHTML/.test(navigator.userAgent)){
Position.cumulativeOffset=function(element){
var valueT=0,valueL=0;
do{
valueT+=element.offsetTop||0;
valueL+=element.offsetLeft||0;
if(element.offsetParent==document.body)
if(Element.getStyle(element,'position')=='absolute')break;
element=element.offsetParent;}while(element);
return[valueL,valueT];}}
Element.addMethods();
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(navigator.appVersion.indexOf('AppleWebKit')>0)window.scrollBy(0,0);
return element;}
Element.getOpacity=function(element){
element=$(element);
var opacity;
if(opacity=element.getStyle('opacity'))
return parseFloat(opacity);
if(opacity=(element.getStyle('filter')||'').match(/alpha\(opacity=(.*)\)/))
if(opacity[1])return parseFloat(opacity[1])/100;
return 1.0;}
Element.setOpacity=function(element,value){
element=$(element);
if(value==1){
element.setStyle({opacity:(/Gecko/.test(navigator.userAgent)&&!/Konqueror|Safari|KHTML/.test(navigator.userAgent))?
0.999999:1.0});
if(/MSIE/.test(navigator.userAgent)&&!window.opera)
element.setStyle({filter:Element.getStyle(element,'filter').replace(/alpha\([^\)]*\)/gi,'')});}else{
if(value<0.00001)value=0;
element.setStyle({opacity:value});
if(/MSIE/.test(navigator.userAgent)&&!window.opera)
element.setStyle({filter:element.getStyle('filter').replace(/alpha\([^\)]*\)/gi,'')+
'alpha(opacity='+value*100+')'});}
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){}};
Array.prototype.call=function(){
var args=arguments;
this.each(function(f){f.apply(this,args)});}
var Effect={
_elementDoesNotExistError:{
name:'ElementDoesNotExistError',
message:'The specified DOM element does not exist, but is required for this effect to operate'},
tagifyText:function(element){
if(typeof Builder=='undefined')
throw("Effect.tagifyText requires including script.aculo.us' builder.js library");
var tagifyStyle='position:relative';
if(/MSIE/.test(navigator.userAgent)&&!window.opera)tagifyStyle+=';zoom:1';
element=$(element);
$A(element.childNodes).each(function(child){
if(child.nodeType==3){
child.nodeValue.toArray().each(function(character){
element.insertBefore(
Builder.node('span',{style:tagifyStyle},
character==' '?String.fromCharCode(160):character),
child);});
Element.remove(child);}});},
multiple:function(element,effect){
var elements;
if(((typeof element=='object')||(typeof element=='function'))&&(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);}};
var Effect2=Effect;
Effect.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){
return((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;},
wobble:function(pos){
return(-Math.cos(pos*Math.PI*(9*pos))/2)+0.5;},
pulse:function(pos,pulses){
pulses=pulses||5;
return(
Math.round((pos%(1/pulses))*pulses)==0?((pos*pulses*2)-Math.floor(pos*pulses*2)):
1-((pos*pulses*2)-Math.floor(pos*pulses*2)));},
none:function(pos){
return 0;},
full:function(pos){
return 1;}};
Effect.ScopedQueue=Class.create();
Object.extend(Object.extend(Effect.ScopedQueue.prototype,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=(typeof effect.options.queue=='string')?
effect.options.queue:effect.options.queue.position;
switch(position){
case 'front':
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':
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),40);},
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();
this.effects.invoke('loop',timePos);}});
Effect.Queues={
instances:$H(),
get:function(queueName){
if(typeof queueName!='string')return queueName;
if(!this.instances[queueName])
this.instances[queueName]=new Effect.ScopedQueue();
return this.instances[queueName];}}
Effect.Queue=Effect.Queues.get('global');
Effect.DefaultOptions={
transition:Effect.Transitions.sinoidal,
duration:1.0,
fps:25.0,
sync:false,
from:0.0,
to:1.0,
delay:0.0,
queue:'parallel'}
Effect.Base=function(){};
Effect.Base.prototype={
position:null,
start:function(options){
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.event('beforeStart');
if(!this.options.sync)
Effect.Queues.get(typeof this.options.queue=='string'?
'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.finishOn-this.startOn);
var frame=Math.round(pos*this.options.fps*this.options.duration);
if(frame>this.currentFrame){
this.render(pos);
this.currentFrame=frame;}}},
render:function(pos){
if(this.state=='idle'){
this.state='running';
this.event('beforeSetup');
if(this.setup)this.setup();
this.event('afterSetup');}
if(this.state=='running'){
if(this.options.transition)pos=this.options.transition(pos);
pos*=(this.options.to-this.options.from);
pos+=this.options.from;
this.position=pos;
this.event('beforeUpdate');
if(this.update)this.update(pos);
this.event('afterUpdate');}},
cancel:function(){
if(!this.options.sync)
Effect.Queues.get(typeof this.options.queue=='string'?
'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(){
return '#<Effect:'+$H(this).inspect()+',options:'+$H(this.options).inspect()+'>';}}
Effect.Parallel=Class.create();
Object.extend(Object.extend(Effect.Parallel.prototype,Effect.Base.prototype),{
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.Event=Class.create();
Object.extend(Object.extend(Effect.Event.prototype,Effect.Base.prototype),{
initialize:function(){
var options=Object.extend({
duration:0},arguments[0]||{});
this.start(options);},
update:Prototype.emptyFunction});
Effect.Opacity=Class.create();
Object.extend(Object.extend(Effect.Opacity.prototype,Effect.Base.prototype),{
initialize:function(element){
this.element=$(element);
if(!this.element)throw(Effect._elementDoesNotExistError);
if(/MSIE/.test(navigator.userAgent)&&!window.opera&&(!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();
Object.extend(Object.extend(Effect.Move.prototype,Effect.Base.prototype),{
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:Math.round(this.options.x*position+this.originalLeft)+'px',
top:Math.round(this.options.y*position+this.originalTop)+'px'});}});
Effect.MoveBy=function(element,toTop,toLeft){
return new Effect.Move(element,
Object.extend({x:toLeft,y:toTop},arguments[3]||{}));};
Effect.Scale=Class.create();
Object.extend(Object.extend(Effect.Scale.prototype,Effect.Base.prototype),{
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',
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=Math.round(width)+'px';
if(this.options.scaleY)d.height=Math.round(height)+'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();
Object.extend(Object.extend(Effect.Highlight.prototype,Effect.Base.prototype),{
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(){
if(this.element.getStyle('display')=='none'){this.cancel();return;}
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');
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+(Math.round(this._base[i]+(this._delta[i]*position)).toColorPart());}.bind(this))});},
finish:function(){
this.element.setStyle(Object.extend(this.oldStyle,{
backgroundColor:this.options.restorecolor}));}});
Effect.ScrollTo=Class.create();
Object.extend(Object.extend(Effect.ScrollTo.prototype,Effect.Base.prototype),{
initialize:function(element){
this.element=$(element);
this.start(arguments[1]||{});},
setup:function(){
Position.prepare();
var offsets=Position.cumulativeOffset(this.element);
if(this.options.offset)offsets[1]+=this.options.offset;
var max=window.innerHeight?
window.height-window.innerHeight:
document.body.scrollHeight-(document.documentElement.clientHeight?
document.documentElement.clientHeight:document.body.clientHeight);
this.scrollStart=Position.deltaY;
this.delta=(offsets[1]>max?max:offsets[1])-this.scrollStart;},
update:function(position){
Position.prepare();
window.scrollTo(Position.deltaX,
this.scrollStart+(position*this.delta));}});
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,
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 oldStyle={
top:element.getStyle('top'),
left:element.getStyle('left')};
return new Effect.Move(element,{x:20,y:0,duration:0.05,afterFinishInternal:function(effect){
new Effect.Move(effect.element,{x:-40,y:0,duration:0.1,afterFinishInternal:function(effect){
new Effect.Move(effect.element,{x:40,y:0,duration:0.1,afterFinishInternal:function(effect){
new Effect.Move(effect.element,{x:-40,y:0,duration:0.1,afterFinishInternal:function(effect){
new Effect.Move(effect.element,{x:40,y:0,duration:0.1,afterFinishInternal:function(effect){
new Effect.Move(effect.element,{x:-20,y:0,duration:0.05,afterFinishInternal:function(effect){
effect.element.undoPositioned().setStyle(oldStyle);}})}})}})}})}})}});}
Effect.SlideDown=function(element){
element=$(element).cleanWhitespace();
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');
return new Effect.Scale(element,window.opera?0:1,
Object.extend({scaleContent:false,
scaleX:false,
scaleMode:'box',
scaleFrom:100,
restoreAfterFinish:true,
beforeStartInternal: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().setStyle({bottom:oldInnerBottom});
effect.element.down().undoPositioned();}},arguments[1]||{}));}
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]||{}));};['setOpacity','getOpacity','getInlineOpacity','forceRerendering','setContentZoom',
'collectTextNodes','collectTextNodesIgnoreClass'].each(
function(f){Element.Methods[f]=Element[f];});
Element.Methods.visualEffect=function(element,effect,options){
s=effect.gsub(/_/,'-').camelize();
effect_class=s.charAt(0).toUpperCase()+s.substring(1);
new Effect[effect_class](element,options);
return $(element);};
Element.addMethods();
function feiden(){
new Effect.Appear('moodbild');}
function highlight(id){
var zr_thumbs=document.getElementsByName('thumbnail');
for(var zr_i=0;zr_i<zr_thumbs.length;zr_i++){
zr_thumbs[zr_i].className="thumb";}
identity=document.getElementById(id);
identity.className="active";
return true;}
function load_wait(){
document.getElementById('load_wait').style.visibility="hidden";
document.getElementById('load_wait').style.visibility="visible";}
var Carousel=Class.create();
Carousel.prototype={
initialize:function(carouselElemID){
this.carouselElemID=carouselElemID;
this.options=Object.extend({
numVisible:3,
scrollInc:3,
animParameters:{},
buttonStateHandler:null,
animHandler:null,
ajaxHandler:null,
initDoneHandler:null,
queue:"carousel",
size:0,
prevElementID:"prev-arrow",
nextElementID:"next-arrow",
ajaxParameters:null,
url:null},arguments[1]||{});
this.initDone=false;
this.animRunning="none";
this.requestIsRunning=false;
this.animAfterFinish=this.options.animParameters.afterFinish;
Object.extend(this.options.animParameters,{afterFinish:this._animDone.bind(this),queue:{position:'end',scope:this.options.queue}});
this.prevScroll=this._prevScroll.bindAsEventListener(this);
this.nextScroll=this._nextScroll.bindAsEventListener(this);
this.onComplete=this._onComplete.bindAsEventListener(this);
this.onFailure=this._onFailure.bindAsEventListener(this);
Event.observe(this.options.prevElementID,"click",this.prevScroll);
Event.observe(this.options.nextElementID,"click",this.nextScroll);
var carouselListClass="carousel-list";
this.carouselList=document.getElementsByClassName(carouselListClass,$(carouselElemID))[0]
this._init();},
destroy:function(){
Event.stopObserving(this.options.prevElementID,"click",this.prevScroll);
Event.stopObserving(this.options.nextElementID,"click",this.nextScroll);},
scrollTo:function(newStart){
var old_inc=this.options.scrollInc;
this.ignoreNoMoreImages=true;
if(newStart>this.currentIndex){
this.options.scrollInc=newStart-this.currentIndex;
this._nextScroll(this);}else{
this.options.scrollInc=this.currentIndex-newStart;
this._prevScroll(this);}
this.options.scrollInc=old_inc;},
_init:function(){
this.currentIndex=0;
if(this.options.url)
this._request(this.currentIndex,this.options.numVisible);
else{
this._getLiElementSize();
this._updateButtonStateHandler(this.options.prevElementID,false);
this._updateButtonStateHandler(this.options.nextElementID,this.options.size>this.options.numVisible);}},
_prevScroll:function(event){
if(this.animRunning!="none"||this.currentIndex==0)
return;
var inc=this.options.scrollInc;
if(this.currentIndex-inc<0)
inc=this.currentIndex;
this._scroll(inc)
return false;},
_nextScroll:function(event){
if(this.animRunning!="none")
return false;
if(this.currentIndex+this.options.numVisible+this.options.scrollInc<=this.options.size)
this._scroll(-this.options.scrollInc);
else{
this.nbInCache=this.options.size-(this.currentIndex+this.options.numVisible);
if(this.options.url&&this.noMoreImages==false)
this._request(this.currentIndex+this.options.numVisible+this.nbInCache,this.options.scrollInc-this.nbInCache);
else{
if(this.nbInCache>0)
this._scroll(-this.nbInCache);}}
return false;},
_request:function(start,nb){
if(this.options.url&&!this.requestIsRunning){
this.requestIsRunning=true;
if(this.options.ajaxHandler)
this.options.ajaxHandler(this,"before");
var params="start="+start+"&nb="+nb;
if(this.options.ajaxParameters!=null)
params+="&"+this.options.ajaxParameters
new Ajax.Request(this.options.url,{parameters:params,onComplete:this.onComplete,onFailure:this.onFailure});}},
_onComplete:function(originalRequest){
this.requestIsRunning=false;
this.carouselList.innerHTML+=originalRequest.responseText;
var size=this.options.size;
this.options.size=this.carouselList.getElementsByTagName("li").length;
var inc=this.options.size-size;
if(this.initDone==false){
this._getLiElementSize()
this.currentIndex=0;
this.initDone=true;
if(this.options.initDoneHandler)
this.options.initDoneHandler(this);
this._updateButtonStateHandler(this.options.prevElementID,false);
this._updateButtonStateHandler(this.options.nextElementID,this.options.size==this.options.numVisible);
this.noMoreImages=this.options.size<this.options.numVisible}
else{
if(!this.ignoreNoMoreImages)
this.noMoreImages=inc!=this.options.scrollInc;
else
this.ignoreNoMoreImages=false;
if(inc>0){
this._scroll(-inc,this.noMoreImages)}
else{
if(this.nbInCache>0)
this._scroll(-this.nbInCache,true);
this._updateButtonStateHandler(this.options.nextElementID,false);}}
if(this.options.ajaxHandler)
this.options.ajaxHandler(this,"after");},
_onFailure:function(originalRequest){
this.requestIsRunning=false;},
_animDone:function(event){
if(this.options.animHandler)
this.options.animHandler(this.carouselElemID,"after",this.animRunning);
this.animRunning="none";
if(this.animAfterFinish)
this.animAfterFinish(event);},
_updateButtonStateHandler:function(button,state){
if(this.options.buttonStateHandler)
this.options.buttonStateHandler(button,state)},
_scroll:function(delta,forceDisableNext){
this.animRunning=delta>0?"prev":"next";
if(this.options.animHandler)
this.options.animHandler(this.carouselElemID,"before",this.animRunning);
new Effect.MoveBy(this.carouselList,0,delta*this.elementSize,this.options.animParameters);
this.currentIndex-=delta;
this._updateButtonStateHandler(this.options.prevElementID,this.currentIndex!=0);
if(this.options.url&&this.noMoreImages==false)
enable=true;
else
enable=(this.currentIndex+this.options.numVisible<this.options.size);
this._updateButtonStateHandler(this.options.nextElementID,(forceDisableNext?false:enable));},
_getLiElementSize:function(){
var li=$(this.carouselList.getElementsByTagName("li")[0]);
this.elementSize=li.getDimensions().width+parseFloat(li.getStyle("margin-left"))+parseFloat(li.getStyle("margin-right"));}}
var spacer='transparentpixel.gif';
var CLONE='C10nE';
var COPY='C0pY';
var DETACH_CHILDREN='d37aCH';
var HORIZONTAL='H0r1Z';
var MAXHEIGHT='m7x8I';
var MAXOFFBOTTOM='m7xd0wN';
var MAXOFFLEFT='m7x23Ft';
var MAXOFFRIGHT='m7x0Ff8';
var MAXOFFTOP='m7xu9';
var MAXWIDTH='m7xW1';
var MINWIDTH='m1nw1';
var MINHEIGHT='m1n8I';
var NO_ALT='no81T';
var NO_DRAG='N0d4Ag';
var RESET_Z='r35E7z';
var RESIZABLE='r5IZbl';
var SCALABLE='SCLbl';
var SCROLL='sC8lL';
var TRANSPARENT='dIApHAn';
var VERTICAL='V3Rt1C';
var dd_cursors=new Array(
'c:default',
'c:crosshair',
'c:e-resize',
'c:hand',
'c:help',
'c:move',
'c:n-resize',
'c:ne-resize',
'c:nw-resize',
'c:s-resize',
'c:se-resize',
'c:sw-resize',
'c:text',
'c:w-resize',
'c:wait');
for(var dd_i=dd_cursors.length;dd_i;){--dd_i;
eval('var CURSOR_'+(dd_cursors[dd_i].substring(2).toUpperCase().replace('-','_'))+' = "'+dd_cursors[dd_i]+'";');}
var dd_u="undefined";
function WZDD(){
this.elements=new Array(0);
this.obj=null;
this.n=navigator.userAgent.toLowerCase();
this.db=(document.compatMode&&document.compatMode.toLowerCase()!="backcompat")?
document.documentElement:(document.body||null);
this.op=!!(window.opera&&document.getElementById);
if(this.op)document.onmousedown=new Function('e',
'if(((e = e || window.event).target || e.srcElement).tagName == "IMAGE") return false;');
this.ie=!!(this.n.indexOf("msie")>=0&&document.all&&this.db&&!this.op);
this.iemac=!!(this.ie&&this.n.indexOf("mac")>=0);
this.ie4=!!(this.ie&&!document.getElementById);
this.n4=!!(document.layers&&typeof document.classes!=dd_u);
this.n6=!!(typeof window.getComputedStyle!=dd_u&&typeof document.createRange!=dd_u);
this.w3c=!!(!this.op&&!this.ie&&!this.n6&&document.getElementById);
this.ce=!!(document.captureEvents&&document.releaseEvents&&!this.n6);
this.px=this.n4?'':'px';
this.tWait=this.w3c?40:10;
this.noRecalc=false;}
var dd=new WZDD();
dd.Int=function(d_x,d_y){
return isNaN(d_y=parseInt(d_x))?0:d_y;};
dd.getWndW=function(){
return dd.Int((dd.db&&!dd.op&&!dd.w3c&&dd.db.clientWidth)?dd.db.clientWidth:(window.innerWidth||0));};
dd.getWndH=function(){
return dd.Int((dd.db&&!dd.op&&!dd.w3c&&dd.db.clientHeight)?dd.db.clientHeight:(window.innerHeight||0));};
dd.getScrollX=function(){
return dd.Int(window.pageXOffset||(dd.db?dd.db.scrollLeft:0));};
dd.getScrollY=function(){
return dd.Int(window.pageYOffset||(dd.db?dd.db.scrollTop:0));};
dd.getPageXY=function(d_o){
if(dd.n4&&d_o){
dd.x=d_o.pageX||0;
dd.y=d_o.pageY||0;}
else{
dd.x=dd.y=0;
while(d_o){
dd.x+=dd.Int(d_o.offsetLeft);
dd.y+=dd.Int(d_o.offsetTop);
d_o=d_o.offsetParent||null;}}};
dd.getCssXY=function(d_o){
if(d_o.div){
if(dd.n4){
d_o.cssx=d_o.div.x;
d_o.cssy=d_o.div.y;}
else if(dd.ie4){
d_o.cssx=d_o.css.pixelLeft;
d_o.cssy=d_o.css.pixelTop;}
else{
d_o.css.left=d_o.css.top=0+dd.px;
dd.getPageXY(d_o.div);
d_o.cssx=d_o.x-dd.x;
d_o.cssy=d_o.y-dd.y;
d_o.css.left=d_o.cssx+dd.px;
d_o.css.top=d_o.cssy+dd.px;}}
else{
d_o.cssx=0;
d_o.cssy=0;}};
dd.getImgW=function(d_o){
return d_o?dd.Int(d_o.width):0;};
dd.getImgH=function(d_o){
return d_o?dd.Int(d_o.height):0;};
dd.getDivW=function(d_o){
return dd.Int(
dd.n4?(d_o.div?d_o.div.clip.width:0):d_o.div?(d_o.div.offsetWidth||d_o.css.pixelWidth||d_o.css.width||0):0);};
dd.getDivH=function(d_o){
return dd.Int(
dd.n4?(d_o.div?d_o.div.clip.height:0):d_o.div?(d_o.div.offsetHeight||d_o.css.pixelHeight||d_o.css.height||0):0);};
dd.getWH=function(d_o){
d_o.w=dd.getDivW(d_o);
d_o.h=dd.getDivH(d_o);
if(d_o.css){
d_o.css.width=d_o.w+dd.px;
d_o.css.height=d_o.h+dd.px;
d_o.dw=dd.getDivW(d_o)-d_o.w;
d_o.dh=dd.getDivH(d_o)-d_o.h;
d_o.css.width=(d_o.w-d_o.dw)+dd.px;
d_o.css.height=(d_o.h-d_o.dh)+dd.px;}
else d_o.dw=d_o.dh=0;};
dd.getCssProp=function(d_o,d_pn6,d_pstyle,d_pn4){
if(d_o&&dd.n6)return ''+window.getComputedStyle(d_o,null).getPropertyValue(d_pn6);
if(d_o&&d_o.currentStyle)return ''+eval('d_o.currentStyle.'+d_pstyle);
if(d_o&&d_o.style)return ''+eval('d_o.style.'+d_pstyle);
if(d_o&&dd.n4)return ''+eval('d_o.'+d_pn4);
return '';};
dd.getDiv=function(d_x,d_d){
d_d=d_d||document;
if(dd.n4){
if(d_d.layers[d_x])return d_d.layers[d_x];
for(var d_i=d_d.layers.length;d_i;){
var d_y=dd.getDiv(d_x,d_d.layers[--d_i].document);
if(d_y)return d_y;}}
if(dd.ie)return d_d.all[d_x]||null;
if(d_d.getElementById)return d_d.getElementById(d_x)||null;
return null;};
dd.getImg=function(d_o,d_nm,d_xy,d_w){
d_w=d_w||window;
var d_img;
if(document.images&&(d_img=d_w.document.images[d_nm])){
if(d_xy){
if(dd.n4){
dd.getPageXY(d_w);
d_o.defx=d_img.x+dd.x;
d_o.defy=d_img.y+dd.y;}
else{
dd.getPageXY(d_img);
d_o.defx=dd.x;
d_o.defy=dd.y;}}
return d_img;}
if(dd.n4)for(var d_i=d_w.document.layers.length;d_i;){
var d_y=dd.getImg(d_o,d_nm,d_xy,d_w.document.layers[--d_i]);
if(d_y)return d_y;}
return null;};
dd.getParent=function(d_o,d_p){
if(dd.n4){
for(var d_i=dd.elements.length;d_i;){
if(!((d_p=dd.elements[--d_i]).is_image)&&d_p.div&&(d_p.div.document.layers[d_o.name]||d_o.oimg&&d_p.div.document.images[d_o.oimg.name]))
d_p.addChild(d_o,d_p.detach,1);}}
else{
d_p=d_o.is_image?dd.getImg(d_o,d_o.oimg.name):(d_o.div||null);
while(d_p&&!!(d_p=d_p.offsetParent||d_p.parentNode||null)){
if(d_p.ddObj){
d_p.ddObj.addChild(d_o,d_p.ddObj.detach,1);
break;}}}};
dd.getCmd=function(d_o,d_cmd,d_cmdStr){
var d_i=d_o.id.indexOf(d_cmd),d_j,
d_y=(d_i>=0)*1;
if(d_y){
d_j=d_i+d_cmd.length;
if(d_cmdStr)d_o.cmd+=d_o.id.substring(d_i,d_j);
d_o.id=d_o.id.substring(0,d_i)+d_o.id.substring(d_j);}
return d_y;};
dd.getCmdVal=function(d_o,d_cmd,d_cmdStr,int0){
var d_i=d_o.id.indexOf(d_cmd),d_j,
d_y=(d_o.id.indexOf(d_cmd)>=0)?dd.Int(d_o.id.substring(d_o.id.indexOf(d_cmd)+d_cmd.length)):int0?-1:0;
if(!int0&&d_y||int0&&d_y>=0){
d_j=d_i+d_cmd.length+(""+d_y).length;
if(d_cmdStr)d_o.cmd+=d_o.id.substring(d_i,d_j);
d_o.id=d_o.id.substring(0,d_i)+d_o.id.substring(d_j);}
return d_y;};
dd.addElt=function(d_o,d_p){
dd.elements[d_o.name]=dd.elements[d_o.index=dd.elements.length]=d_o;
if(d_p)d_p.copies[d_o.name]=d_p.copies[d_p.copies.length]=d_o;};
dd.mkWzDom=function(){
var d_o,d_l=dd.elements.length,d_i;
for(d_i=d_l;d_i;)dd.getParent(dd.elements[--d_i]);
for(d_i=d_l;d_i;){
if((d_o=dd.elements[--d_i]).children&&!d_o.parent){
for(var d_j=d_o.children.length;d_j;){--d_j;
d_o.children[d_j].setZ(d_o.z+d_o.children[d_j].z,1);}}}};
dd.addProps=function(d_o){
if(d_o.is_image){
d_o.div=dd.getDiv(d_o.id);
d_o.css=(d_o.div&&typeof d_o.div.style!=dd_u)?d_o.div.style:null;
d_o.nimg=(dd.n4&&d_o.div)?d_o.div.document.images[0]:(document.images[d_o.id+"NI1m6G"]||null);
if(!d_o.noalt&&!dd.noalt&&d_o.nimg&&d_o.oimg){
d_o.nimg.alt=d_o.oimg.alt||'';
d_o.nimg.title=d_o.oimg.title;
d_o.nimg.onmouseover=d_o.oimg.onmouseover;
d_o.nimg.onmouseout=d_o.oimg.onmouseout;}
d_o.bgColor='';}
else{
d_o.bgColor=dd.getCssProp(d_o.div,'background-color','backgroundColor','bgColor').toLowerCase();
if(dd.n6&&d_o.div){
var d_c=d_o.bgColor.toLowerCase();
if(d_c.indexOf('rgb')>=0){
d_c=d_c.substring(4,d_c.length-1).split(',');
d_o.bgColor='#';
for(var d_l=d_c.length,d_i=0;d_i<d_l;d_i++)d_o.bgColor+=parseInt(d_c[d_i]).toString(0x10);}
else d_o.bgColor=d_c;}}
if(dd.scalable)d_o.scalable=d_o.resizable^1;
else if(dd.resizable)d_o.resizable=d_o.scalable^1;
d_o.setZ(d_o.defz);
d_o.cursor=d_o.cursor||dd.cursor||'auto';
d_o._setCrs(d_o.nodrag?'auto':d_o.cursor);
d_o.diaphan=d_o.diaphan||dd.diaphan||0;
d_o.opacity=1.0;
d_o.visible=true;};
dd.initz=function(){
if(!(dd&&(dd.n4||dd.n6||dd.ie||dd.op||dd.w3c)))return;
else if(dd.n6||dd.ie||dd.op||dd.w3c)dd.recalc(1);
var d_drag=(document.onmousemove==DRAG),
d_resize=(document.onmousemove==RESIZE);
if(dd.loadFunc)dd.loadFunc();
if(d_drag)dd.setMovHdl(DRAG);
else if(d_resize)dd.setMovHdl(RESIZE);
if(d_drag||d_resize)dd.setUpHdl(DROP);
dd.setDwnHdl(PICK);};
dd.finlz=function(){
if(dd.ie&&dd.elements){
dd.noRecalc=true;
for(var d_i=dd.elements.length;d_i;)
dd.elements[--d_i].del();
dd.noRecalc=false;}
if(dd.uloadFunc)dd.uloadFunc();};
dd.setCe=function(d_e,d_fnc){
d_fnc?document.captureEvents(d_e):document.releaseEvents(d_e);};
dd.setDwnHdl=function(d_x){
if(document.onmousedown!=d_x){
dd.downFunc=document.onmousedown;
document.onmousedown=d_x;
if(dd.ce)dd.setCe(Event.MOUSEDOWN,d_x);}};
dd.setMovHdl=function(d_x){
if(document.onmousemove!=d_x){
dd.moveFunc=document.onmousemove;
document.onmousemove=d_x;
if(dd.ce)dd.setCe(Event.MOUSEMOVE,d_x);}};
dd.setUpHdl=function(d_x){
if(document.onmouseup!=d_x){
dd.upFunc=document.onmouseup;
document.onmouseup=d_x;
if(dd.ce)dd.setCe(Event.MOUSEUP,d_x);}};
dd.evt=function(d_e){
this.but=(this.e=d_e||window.event).which||this.e.button||0;
this.button=(this.e.type=='mousedown')?this.but:(dd.e&&dd.e.button)?dd.e.button:0;
this.src=this.e.target||this.e.srcElement||null;
this.src.tag=(""+(this.src.tagName||this.src)).toLowerCase();
this.x=dd.Int(this.e.pageX||this.e.clientX||0);
this.y=dd.Int(this.e.pageY||this.e.clientY||0);
if(dd.ie){
this.x+=dd.getScrollX()-(dd.ie&&!dd.iemac)*1;
this.y+=dd.getScrollY()-(dd.ie&&!dd.iemac)*1;}
this.modifKey=this.e.modifiers?this.e.modifiers&Event.SHIFT_MASK:(this.e.shiftKey||false);};
dd.getEventTarget=function(d_e,d_s,d_n){
d_e=d_e||window.event;
if(d_e&&(d_s=d_e.target||d_e.srcElement||null)!=null){
if(null !=(d_n=d_s.id||d_s.name||null)){
if(d_n.indexOf("dIi15vNI1m6G")==d_n.length-12)
return dd.elements[d_n.substring(0,d_n.length-12)]||null;
if(d_n.indexOf("dIi15v")==d_n.length-6)
return dd.elements[d_n.substring(0,d_n.length-6)]||null;
return dd.elements[d_n]||null;}}
return null;};
dd.recalc=function(d_x){
if(dd.noRecalc)return;
for(var d_o,d_i=dd.elements.length;d_i;){
if(!(d_o=dd.elements[--d_i]).is_image&&d_o.div){
dd.getWH(d_o);
if(d_o.div.pos_rel){
dd.getPageXY(d_o.div);
var d_dx=dd.x-d_o.x,d_dy=dd.y-d_o.y;
d_o.defx+=d_dx;
d_o.x+=d_dx;
d_o.defy+=d_dy;
d_o.y+=d_dy;
for(var d_p,d_j=d_o.children.length;d_j;){
if(!(d_p=d_o.children[--d_j]).detached&&(d_o!=d_p.defparent||!(d_p.is_image&&dd.getImg(d_p,d_p.oimg.name,1)))){
d_p.defx+=d_dx;
d_p.defy+=d_dy;
d_p.moveBy(d_dx,d_dy);}}}}
else if(d_o.is_image&&!dd.n4){
if(dd.n6&&d_x&&!d_o.defw)d_o.resizeTo(d_o.defw=dd.getImgW(d_o.oimg),d_o.defh=dd.getImgH(d_o.oimg));
var d_defx=d_o.defx,d_defy=d_o.defy;
if(!(d_o.parent&&d_o.parent!=d_o.defparent)&&(d_x||!d_o.detached||d_o.horizontal||d_o.vertical)&&dd.getImg(d_o,d_o.oimg.name,1))
d_o.moveBy(d_o.defx-d_defx,d_o.defy-d_defy);}}};
function WINSZ(d_x){
if(d_x){
if(dd.n4){
dd.iW=innerWidth;
dd.iH=innerHeight;}
window.onresize=new Function('WINSZ();');}
else if(dd.n4&&(innerWidth!=dd.iW||innerHeight!=dd.iH))location.reload();
else if(!dd.n4)setTimeout('dd.recalc()',0xa);}
WINSZ(1);
function DDObj(d_o,d_i){
this.id=d_o;
this.cmd='';
this.cpy_n=dd.getCmdVal(this,COPY);
this.maxoffb=dd.getCmdVal(this,MAXOFFBOTTOM,0,1);
this.maxoffl=dd.getCmdVal(this,MAXOFFLEFT,0,1);
this.maxoffr=dd.getCmdVal(this,MAXOFFRIGHT,0,1);
this.maxofft=dd.getCmdVal(this,MAXOFFTOP,0,1);
var d_j=dd_cursors.length;while(d_j--)
if(dd.getCmd(this,dd_cursors[d_j],1))this.cursor=dd_cursors[d_j].substring(2);
this.clone=dd.getCmd(this,CLONE,1);
this.detach=dd.getCmd(this,DETACH_CHILDREN);
this.scalable=dd.getCmd(this,SCALABLE,1);
this.horizontal=dd.getCmd(this,HORIZONTAL);
this.noalt=dd.getCmd(this,NO_ALT,1);
this.nodrag=dd.getCmd(this,NO_DRAG);
this.scroll=dd.getCmd(this,SCROLL,1);
this.resizable=dd.getCmd(this,RESIZABLE,1);
this.re_z=dd.getCmd(this,RESET_Z,1);
this.diaphan=dd.getCmd(this,TRANSPARENT,1);
this.vertical=dd.getCmd(this,VERTICAL);
this.maxw=dd.getCmdVal(this,MAXWIDTH,1,1);
this.minw=Math.abs(dd.getCmdVal(this,MINWIDTH,1,1));
this.maxh=dd.getCmdVal(this,MAXHEIGHT,1,1);
this.minh=Math.abs(dd.getCmdVal(this,MINHEIGHT,1,1));
this.pickFunc=this.dragFunc=this.resizeFunc=this.dropFunc=null;
this.name=this.id+(d_i||'');
this.oimg=dd.getImg(this,this.id,1);
this.is_image=!!this.oimg;
this.copies=new Array();
this.children=new Array();
this.parent=this.original=null;
if(this.oimg){
this.id=this.name+"dIi15v";
this.w=dd.getImgW(this.oimg);
this.h=dd.getImgH(this.oimg);
this.dw=this.dh=0;
this.defz=dd.Int(dd.getCssProp(this.oimg,'z-index','zIndex','zIndex'))||1;
this.defsrc=this.src=this.oimg.src;
this.htm='<img name="'+this.id+'NI1m6G"'+
' src="'+this.oimg.src+'" '+
'width="'+this.w+'" height="'+this.h+'">';
this.t_htm='<div id="'+this.id+
'" style="position:absolute;'+
'left:'+(this.cssx=this.x=this.defx)+'px;'+
'top:'+(this.cssy=this.y=this.defy)+'px;'+
'width:'+this.w+'px;'+
'height:'+this.h+'px;">'+
this.htm+'</div>';}
else{
if(!!(this.div=dd.getDiv(this.id))&&typeof this.div.style!=dd_u)this.css=this.div.style;
dd.getWH(this);
if(this.div){
this.div.ddObj=this;
this.div.pos_rel=(""+(this.div.parentNode?this.div.parentNode.tagName:this.div.parentElement?this.div.parentElement.tagName:'').toLowerCase().indexOf('body')<0);}
dd.getPageXY(this.div);
this.defx=this.x=dd.x;
this.defy=this.y=dd.y;
dd.getCssXY(this);
this.defz=dd.Int(dd.getCssProp(this.div,'z-index','zIndex','zIndex'));}
this.defw=this.w||0;
this.defh=this.h||0;}
DDObj.prototype.setPickFunc=function(d_x){
this.pickFunc=d_x;};
DDObj.prototype.setDragFunc=function(d_x){
this.dragFunc=d_x;};
DDObj.prototype.setResizeFunc=function(d_x){
this.resizeFunc=d_x;};
DDObj.prototype.setDropFunc=function(d_x){
this.dropFunc=d_x;};
DDObj.prototype.moveBy=function(d_x,d_y,d_kds,d_o){
if(!this.div)return;
this.x+=(d_x=dd.Int(d_x));
this.y+=(d_y=dd.Int(d_y));
if(!d_kds||this.is_image||this.parent!=this.defparent){(d_o=this.css||this.div).left=(this.cssx+=d_x)+dd.px;
d_o.top=(this.cssy+=d_y)+dd.px;}
for(var d_i=this.children.length;d_i;){
if(!(d_o=this.children[--d_i]).detached)d_o.moveBy(d_x,d_y,1);
d_o.defx+=d_x;
d_o.defy+=d_y;}};
DDObj.prototype.moveTo=function(d_x,d_y){
this.moveBy(dd.Int(d_x)-this.x,dd.Int(d_y)-this.y);};
DDObj.prototype.hide=function(d_m,d_o,d_p){
if(this.div&&this.visible){
d_p=this.css||this.div;
if(d_m&&!dd.n4){
this.display=dd.getCssProp(this.div,"display","display","display");
if(this.oimg){
this.oimg.display=dd.getCssProp(this.oimg,"display","display","display");
this.oimg.style.display="none";}
d_p.display="none";
dd.recalc();}
else d_p.visibility="hidden";}
this.visible=false;
for(var d_i=this.children.length;d_i;)
if(!(d_o=this.children[--d_i]).detached)d_o.hide(d_m);};
DDObj.prototype.show=function(d_o,d_p){
if(this.div){
d_p=this.css||this.div;
if(d_p.display&&d_p.display=="none"){
d_p.display=this.display||"block";
if(this.oimg)this.oimg.style.display=this.oimg.display||"inline";
dd.recalc();}
else d_p.visibility="visible";}
this.visible=true;
for(var d_i=this.children.length;d_i;)
if(!(d_o=this.children[--d_i]).detached)d_o.show();};
DDObj.prototype.resizeTo=function(d_w,d_h,d_o){
if(!this.div)return;
d_w=(this.w=dd.Int(d_w))-this.dw;
d_h=(this.h=dd.Int(d_h))-this.dh;
if(dd.n4){
this.div.resizeTo(d_w,d_h);
if(this.is_image){
this.write('<img src="'+this.src+'" width="'+d_w+'" height="'+d_h+'">');(this.nimg=this.div.document.images[0]).src=this.src;}}
else if(typeof this.css.pixelWidth!=dd_u){
this.css.pixelWidth=d_w;
this.css.pixelHeight=d_h;
if(this.is_image){(d_o=this.nimg.style).pixelWidth=d_w;
d_o.pixelHeight=d_h;}}
else{
this.css.width=d_w+dd.px;
this.css.height=d_h+dd.px;
if(this.is_image){(d_o=this.nimg).width=d_w;
d_o.height=d_h;
if(!d_o.complete)d_o.src=this.src;}}};
DDObj.prototype.resizeBy=function(d_dw,d_dh){
this.resizeTo(this.w+dd.Int(d_dw),this.h+dd.Int(d_dh));};
DDObj.prototype.swapImage=function(d_x,d_cp){
if(!this.nimg)return;
this.nimg.src=d_x;
this.src=this.nimg.src;
if(d_cp){
for(var d_i=this.copies.length;d_i;){--d_i;
this.copies[d_i].src=this.copies[d_i].nimg.src=this.nimg.src;}}};
DDObj.prototype.setBgColor=function(d_x){
if(dd.n4&&this.div)this.div.bgColor=d_x;
else if(this.css)this.css.background=d_x;
this.bgColor=d_x;};
DDObj.prototype.write=function(d_x,d_o){
this.text=d_x;
if(!this.div)return;
if(dd.n4){(d_o=this.div.document).open();
d_o.write(d_x);
d_o.close();
dd.getWH(this);}
else{
this.css.height='auto';
this.div.innerHTML=d_x;
if(!dd.ie4)dd.recalc();
if(dd.ie4||dd.n6)setTimeout('dd.recalc();',0);}};
DDObj.prototype.copy=function(d_n,d_p,d_b){
if(!this.oimg)return;
d_b=(dd.ie&&document.all.tags('body'))?document.all.tags('body')[0]:document.getElementsByTagName?(document.getElementsByTagName('body')[0]||dd.db):dd.db;
for(d_n=d_n||1;d_n>0;--d_n){
var d_l=this.copies.length,
d_o=new DDObj(this.name+this.cmd,d_l+1);
if(dd.n4){
d_o.id=(d_p=new Layer(d_o.w)).name;
d_p.clip.height=d_o.h;
d_p.visibility='show';(d_p=d_p.document).open();
d_p.write(d_o.htm);
d_p.close();}
else if(d_b&&d_b.insertAdjacentHTML)d_b.insertAdjacentHTML("AfterBegin",d_o.t_htm);
else if(document.createElement&&d_b&&d_b.appendChild){
d_b.appendChild(d_p=document.createElement("dIi15v"));
d_p.innerHTML=d_o.htm;
d_p.id=d_o.id;
d_p.style.position='absolute';
d_p.style.width=d_o.w+'px';
d_p.style.height=d_o.h+'px';}
else if(d_b&&d_b.innerHTML)d_b.innerHTML+=d_o.t_htm;
d_o.defz=this.defz+1+d_l;
dd.addProps(d_o);
d_o.original=this;
dd.addElt(d_o,this);
if(this.parent){
this.parent.addChild(d_o,this.detached);
d_o.defparent=this.defparent;}
d_o.moveTo(d_o.defx=this.defx,d_o.defy=this.defy);
if(dd.n4)d_o.defsrc=d_o.src=this.defsrc;
d_o.swapImage(this.src);}};
DDObj.prototype.addChild=function(d_kd,detach,defp){
if(typeof d_kd!="object")d_kd=dd.elements[d_kd];
if(d_kd.parent&&d_kd.parent==this||d_kd==this||!d_kd.is_image&&d_kd.defparent&&!defp)return;
this.children[this.children.length]=this.children[d_kd.name]=d_kd;
d_kd.detached=detach||0;
if(defp)d_kd.defparent=this;
else if(this==d_kd.defparent&&d_kd.is_image)dd.getImg(this,d_kd.oimg.name,1);
if(!d_kd.defparent||this !=d_kd.defparent){
d_kd.defx=d_kd.x;
d_kd.defy=d_kd.y;}
if(!detach){
d_kd.defz=d_kd.defz+this.defz-(d_kd.parent?d_kd.parent.defz:0)+(!d_kd.is_image*1);
d_kd.setZ(d_kd.z+this.z-(d_kd.parent?d_kd.parent.z:0)+(!d_kd.is_image*1),1);}
if(d_kd.parent)d_kd.parent.removeChild(d_kd,1);
d_kd.parent=this;};
DDObj.prototype.removeChild=function(d_kd,d_newp){
if(typeof d_kd!="object")d_kd=this.children[d_kd];
var d_oc=this.children,d_nc=new Array();
for(var d_i=0;d_i<d_oc.length;d_i++)
if(d_oc[d_i]!=d_kd)d_nc[d_nc.length]=d_oc[d_i];
this.children=d_nc;
d_kd.parent=null;
if(!d_newp){
d_kd.detached=d_kd.defp=0;
if(d_kd.is_image)dd.getImg(d_kd,d_kd.oimg.name,1);}};
DDObj.prototype.attachChild=function(d_kd){(d_kd=(typeof d_kd!="object")?this.children[d_kd]:d_kd).detached=0;
d_kd.setZ(d_kd.defz+this.z-this.defz,1);};
DDObj.prototype.detachChild=function(d_kd){(d_kd=(typeof d_kd!="object")?this.children[d_kd]:d_kd).detached=1;};
DDObj.prototype.setZ=function(d_x,d_kds,d_o){
if(d_kds){
for(var d_dz=d_x-this.z,d_i=this.children.length;d_i;)
if(!(d_o=this.children[--d_i]).detached)d_o.setZ(d_o.z+d_dz,1);}
dd.z=Math.max(dd.z,this.z=this.div?((this.css||this.div).zIndex=d_x):0);};
DDObj.prototype.maximizeZ=function(){
this.setZ(dd.z+1,1);};
DDObj.prototype._resetZ=function(d_o){
if(this.re_z||dd.re_z){
this.setZ(this.defz);
for(var d_i=this.children.length;d_i;)
if(!(d_o=this.children[--d_i]).detached)d_o.setZ(d_o.defz);}};
DDObj.prototype.setOpacity=function(d_x){
this.opacity=d_x;
this._setOpaRel(1.0,1);};
DDObj.prototype._setOpaRel=function(d_x,d_kd,d_y,d_o){
if(this.css&&(this.diaphan||d_kd)){
d_y=this.opacity*d_x;
if(typeof this.css.MozOpacity!=dd_u)this.css.MozOpacity=d_y;
else if(typeof this.css.filter!=dd_u)
this.css.filter="Alpha(opacity="+parseInt(100*d_y)+")";
else this.css.opacity=d_y;
for(var d_i=this.children.length;d_i;)
if(!(d_o=this.children[--d_i]).detached)d_o._setOpaRel(d_x,1);}};
DDObj.prototype.setCursor=function(d_x){
this._setCrs(this.cursor=(d_x.indexOf('c:')+1)?d_x.substring(2):d_x);};
DDObj.prototype._setCrs=function(d_x){
if(this.css)this.css.cursor=((!dd.ie||dd.iemac)&&d_x=='hand')?'pointer':d_x;};
DDObj.prototype.setDraggable=function(d_x){
this.nodrag=!d_x*1;
this._setCrs(d_x?this.cursor:'auto');};
DDObj.prototype.setResizable=function(d_x){
this.resizable=d_x*1;
if(d_x)this.scalable=0;};
DDObj.prototype.setScalable=function(d_x){
this.scalable=d_x*1;
if(d_x)this.resizable=0;};
DDObj.prototype.setHorizontal=function(d_x){
this.horizontal=d_x*1;};
DDObj.prototype.setVertical=function(d_x){
this.vertical=d_x*1;};
DDObj.prototype.getEltBelow=function(d_ret,d_x,d_y){
var d_o,d_cmp=-1,d_i=dd.elements.length;while(d_i--){
d_o=dd.elements[d_i];
d_x=d_o.x-this.w/2;
d_y=d_o.y-this.h/2;
if(d_o.visible&&d_o.z<this.z&&this.x>=d_x&&this.x<=d_x+d_o.w&&this.y>=d_y&&this.y<=d_y+d_o.h){
if(d_o.z>d_cmp){
d_cmp=d_o.z;
d_ret=d_o;}}}
return d_ret;};
DDObj.prototype.del=function(d_os,d_o){
var d_i,d_l;
if(this.parent&&this.parent.removeChild)this.parent.removeChild(this);
if(this.original){
this.hide();
if(this.original.copies){
d_os=new Array();
for(d_l=this.original.copies.length,d_i=0;d_i<d_l;d_i++)
if((d_o=this.original.copies[d_i])!=this)d_os[d_o.name]=d_os[d_os.length]=d_o;
this.original.copies=d_os;}}
else if(this.is_image){
this.hide();
if(this.oimg){
if(dd.n4)this.oimg.src=this.defsrc;
else this.oimg.style.visibility='visible';}}
else if(this.moveTo){
if(this.css)this.css.cursor='default';
this.moveTo(this.defx,this.defy);
this.resizeTo(this.defw,this.defh);}
d_os=new Array();
for(d_l=dd.elements.length,d_i=0;d_i<d_l;d_i++){
if((d_o=dd.elements[d_i])!=this)d_os[d_o.name]=d_os[d_o.index=d_os.length]=d_o;
else d_o._free();}
dd.elements=d_os;
if(!dd.n4)dd.recalc();};
DDObj.prototype._free=function(){
for(var d_i in this)
this[d_i]=null;
dd.elements[this.name]=null;};
dd.n4RectVis=function(vis){
for(var d_i=4;d_i;){--d_i;
dd.rectI[d_i].visibility=dd.rectA[d_i].visibility=vis?'show':'hide';
if(vis)dd.rectI[d_i].zIndex=dd.rectA[d_i].zIndex=dd.z+2;}};
dd.n4RectPos=function(d_o,d_x,d_y,d_w,d_h){
d_o.x=d_x;
d_o.y=d_y;
d_o.clip.width=d_w;
d_o.clip.height=d_h;};
dd.n4Rect=function(d_w,d_h){
var d_i;
if(!dd.rectI){
dd.rectI=new Array();
dd.rectA=new Array();}
if(!dd.rectI[0]){
for(d_i=4;d_i;){(dd.rectI[--d_i]=new Layer(1)).bgColor='#000000';(dd.rectA[d_i]=new Layer(1)).bgColor='#ffffff';}}
if(!dd.rectI[0].visibility||dd.rectI[0].visibility=='hide')dd.n4RectVis(1);
dd.obj.w=d_w;
dd.obj.h=d_h;
for(d_i=4;d_i;){--d_i;
dd.n4RectPos(dd.rectI[d_i],dd.obj.x+(!(d_i-1)?(dd.obj.w-1):0),dd.obj.y+(!(d_i-2)?(dd.obj.h-1):0),d_i&1||dd.obj.w,!(d_i&1)||dd.obj.h);
dd.n4RectPos(dd.rectA[d_i],!(d_i-1)?dd.rectI[1].x+1:(dd.obj.x-1),!(d_i-2)?dd.rectI[2].y+1:(dd.obj.y-1),d_i&1||dd.obj.w+2,!(d_i&1)||dd.obj.h+2);}};
dd.reszTo=function(d_w,d_h){
if(dd.n4&&dd.obj.is_image)dd.n4Rect(d_w,d_h);
else dd.obj.resizeTo(d_w,d_h);};
dd.embedVis=function(d_vis){
var d_o=new Array('iframe','applet','embed','object');
for(var d_i=d_o.length;d_i;){--d_i;
var d_p=dd.ie?document.all.tags(d_o[d_i]):document.getElementsByTagName?document.getElementsByTagName(d_o[d_i]):null;
if(d_p){
for(var d_j=d_p.length;d_j;){
var d_q=d_p[--d_j];
while(d_q.offsetParent||d_q.parentNode){
if((d_q=d_q.parentNode||d_q.offsetParent||null)==dd.obj.div){
d_p[d_j].style.visibility=d_vis;
break;}}}}}};
dd.maxOffX=function(d_x,d_y){
return((dd.obj.maxoffl+1&&(d_y=dd.obj.defx-dd.obj.maxoffl)-d_x>0||dd.obj.maxoffr+1&&(d_y=dd.obj.defx+dd.obj.maxoffr)-d_x<0)?d_y:d_x);};
dd.maxOffY=function(d_x,d_y){
return((dd.obj.maxofft+1&&(d_y=dd.obj.defy-dd.obj.maxofft)-d_x>0||dd.obj.maxoffb+1&&(d_y=dd.obj.defy+dd.obj.maxoffb)-d_x<0)?d_y:d_x);};
dd.inWndW=function(d_x,d_y){
var d_wx=dd.getScrollX(),
d_ww=dd.getWndW();
return(((d_y=d_wx+2)-d_x>0)||((d_y=d_wx+d_ww+dd.obj.w-2)-d_x<0)?d_y:d_x);};
dd.inWndH=function(d_x,d_y){
var d_wy=dd.getScrollY(),
d_wh=dd.getWndH();
return(((d_y=d_wy+2)-d_x>0)||((d_y=d_wy+d_wh+dd.obj.h-2)-d_x<0)?d_y:d_x);};
dd.limW=function(d_w){
return((dd.obj.minw-d_w>0)?dd.obj.minw:(dd.obj.maxw>0&&dd.obj.maxw-d_w<0)?dd.obj.maxw:d_w);};
dd.limH=function(d_h){
return((dd.obj.minh-d_h>0)?dd.obj.minh:(dd.obj.maxh>0&&dd.obj.maxh-d_h<0)?dd.obj.maxh:d_h);};
function DDScroll(){
if(!dd.obj||!dd.obj.scroll&&!dd.scroll||dd.ie4||dd.whratio){
dd.scrx=dd.scry=0;
return;}
var d_bnd=0x1c,
d_wx=dd.getScrollX(),d_wy=dd.getScrollY();
if(dd.msmoved){
var d_ww=dd.getWndW(),d_wh=dd.getWndH(),d_y;
dd.scrx=((d_y=dd.e.x-d_ww-d_wx+d_bnd)>0)?(d_y>>=2)*d_y:((d_y=d_wx+d_bnd-dd.e.x)>0)?-(d_y>>=2)*d_y:0;
dd.scry=((d_y=dd.e.y-d_wh-d_wy+d_bnd)>0)?(d_y>>=2)*d_y:((d_y=d_wy+d_bnd-dd.e.y)>0)?-(d_y>>=2)*d_y:0;}
if(dd.scrx||dd.scry){
window.scrollTo(
d_wx+(dd.scrx=dd.obj.is_resized?dd.limW(dd.obj.w+dd.scrx)-dd.obj.w:dd.obj.vertical?0:(dd.maxOffX(dd.obj.x+dd.scrx)-dd.obj.x)),
d_wy+(dd.scry=dd.obj.is_resized?dd.limH(dd.obj.h+dd.scry)-dd.obj.h:dd.obj.horizontal?0:(dd.maxOffY(dd.obj.y+dd.scry)-dd.obj.y)));
dd.obj.is_dragged?dd.obj.moveTo(dd.obj.x+dd.getScrollX()-d_wx,dd.obj.y+dd.getScrollY()-d_wy):dd.reszTo(dd.obj.w+dd.getScrollX()-d_wx,dd.obj.h+dd.getScrollY()-d_wy);}
dd.msmoved=0;
window.setTimeout('DDScroll()',0x33);}
function PICK(d_ev){
dd.e=new dd.evt(d_ev);
if(dd.e.x>=dd.getWndW()+dd.getScrollX()||dd.e.y>=dd.getWndH()+dd.getScrollY())return true;
for(var d_o,d_t,d_cmp=-1,d_i=dd.elements.length;d_i;){
d_o=dd.elements[--d_i];
if(dd.n4&&dd.e.but>1&&dd.e.src==d_o.oimg&&!d_o.clone)return false;
if(d_o.visible&&dd.e.but<=1&&dd.e.x>=d_o.x&&dd.e.x<=d_o.x+d_o.w&&dd.e.y>=d_o.y&&dd.e.y<=d_o.y+d_o.h){
if(d_o.z>d_cmp&&(d_t=dd.e.src.tag).indexOf('inpu')<0&&d_t.indexOf('texta')<0&&d_t.indexOf('sele')<0&&d_t.indexOf('opti')<0&&d_t.indexOf('scrol')<0){
d_cmp=d_o.z;
dd.obj=d_o;}}}
if(dd.obj){
if(dd.obj.nodrag)dd.obj=null;
else{
dd.e.e.cancelBubble=true;
var d_rsz=dd.e.modifKey&&(dd.obj.resizable||dd.obj.scalable);
if(dd.op){(d_o=document.getElementById('OpBlUr')).style.pixelLeft=dd.e.x;
d_o.style.pixelTop=dd.e.y;(d_o=d_o.children[0].children[0]).focus();
d_o.blur();}
else if(dd.ie&&!dd.ie4){
if(document.selection&&document.selection.empty)document.selection.empty();
dd.db.onselectstart=function(){
event.returnValue=false;};}
if(d_rsz){
dd.obj._setCrs('se-resize');
dd.obj.is_resized=1;
dd.whratio=dd.obj.scalable?dd.obj.defw/dd.obj.defh:0;
if(dd.ie){
if(dd.ie4){
window.dd_x=dd.getScrollX();
window.dd_y=dd.getScrollY();}
setTimeout(
'if(dd.obj && document.selection && document.selection.empty)'+
'{'+
'document.selection.empty();'+
'if(dd.ie4) window.scrollTo(window.dd_x, window.dd_y);'+
'}',0);}
dd.setMovHdl(RESIZE);
dd.reszTo(dd.obj.w,dd.obj.h);}
else{
dd.obj.is_dragged=1;
dd.setMovHdl(DRAG);}
dd.setUpHdl(DROP);
dd.embedVis('hidden');
dd.obj._setOpaRel(0.7);
dd.obj.maximizeZ();
dd.ofx=dd.obj.x+dd.obj.w-dd.e.x;
dd.ofy=dd.obj.y+dd.obj.h-dd.e.y;
if(window.my_PickFunc)my_PickFunc();
if(dd.obj.pickFunc)dd.obj.pickFunc();
DDScroll();
return !(
dd.obj.is_resized||dd.n4&&dd.obj.is_image||dd.n6||dd.w3c);}}
if(dd.downFunc)return dd.downFunc(d_ev);
return true;}
function DRAG(d_ev){
if(!dd.obj||!dd.obj.visible)return true;
if(dd.ie4||dd.w3c||dd.n6||dd.obj.children.length>0xf){
if(dd.wait)return false;
dd.wait=1;
setTimeout('dd.wait = 0;',dd.tWait);}
dd.e=new dd.evt(d_ev);
if(dd.ie&&!dd.e.but){
DROP(d_ev);
return true;}
dd.msmoved=1;
dd.obj.moveTo(
dd.obj.vertical?dd.obj.x:dd.maxOffX(dd.inWndW(dd.ofx+dd.e.x)-dd.obj.w),
dd.obj.horizontal?dd.obj.y:dd.maxOffY(dd.inWndH(dd.ofy+dd.e.y)-dd.obj.h));
if(window.my_DragFunc)my_DragFunc();
if(dd.obj.dragFunc)dd.obj.dragFunc();
if(dd.moveFunc)return dd.moveFunc(d_ev);
return false;}
function RESIZE(d_ev){
if(!dd.obj||!dd.obj.visible)return true;
if(dd.wait)return false;
dd.wait=1;
setTimeout('dd.wait = 0;',dd.tWait);
dd.e=new dd.evt(d_ev);
if(dd.ie&&!dd.e.but){
DROP(d_ev);
return true;}
dd.msmoved=1;
var d_w=dd.limW(dd.inWndW(dd.ofx+dd.e.x)-dd.obj.x),d_h;
if(!dd.whratio)d_h=dd.limH(dd.inWndH(dd.ofy+dd.e.y)-dd.obj.y);
else{
d_h=dd.limH(dd.inWndH(Math.round(d_w/dd.whratio)+dd.obj.y)-dd.obj.y);
d_w=Math.round(d_h*dd.whratio);}
dd.reszTo(d_w,d_h);
if(window.my_ResizeFunc)my_ResizeFunc();
if(dd.obj.resizeFunc)dd.obj.resizeFunc();
if(dd.moveFunc)return dd.moveFunc(d_ev);
return false;}
function DROP(d_ev){
if(dd.obj){
if(dd.obj.is_dragged){
if(!dd.obj.is_image)dd.getWH(dd.obj);}
else if(dd.n4){
if(dd.obj.is_image){
dd.n4RectVis(0);
dd.obj.resizeTo(dd.obj.w,dd.obj.h);}}
if(!dd.n4||!dd.obj.is_image)dd.recalc();
dd.setMovHdl(dd.moveFunc);
dd.setUpHdl(dd.upFunc);
if(dd.db)dd.db.onselectstart=null;
dd.obj._setOpaRel(1.0);
dd.obj._setCrs(dd.obj.cursor);
dd.embedVis('visible');
dd.obj._resetZ();
dd.e=new dd.evt(d_ev);
if(window.my_DropFunc)my_DropFunc();
if(dd.obj.dropFunc)dd.obj.dropFunc();
dd.msmoved=dd.obj.is_dragged=dd.obj.is_resized=dd.whratio=0;
dd.obj=null;}
dd.setDwnHdl(PICK);}
function SET_DHTML(){
var d_a=arguments,d_ai,d_htm='',d_o,d_i=d_a.length;
while(d_i){
if(!(d_ai=d_a[--d_i]).indexOf('c:'))dd.cursor=d_ai.substring(2);
else if(d_ai==NO_ALT)dd.noalt=1;
else if(d_ai==SCROLL)dd.scroll=1;
else if(d_ai==RESET_Z)dd.re_z=1;
else if(d_ai==RESIZABLE)dd.resizable=1;
else if(d_ai==SCALABLE)dd.scalable=1;
else if(d_ai==TRANSPARENT)dd.diaphan=1;
else{
d_o=new DDObj(d_ai);
dd.addElt(d_o);
d_htm+=d_o.t_htm||'';
if(d_o.oimg&&d_o.cpy_n){
for(var d_l=d_o.cpy_n,d_j=0;d_j<d_l;){
var d_p=new DDObj(d_o.name+d_o.cmd,++d_j);
dd.addElt(d_p,d_o);
d_p.defz=d_o.defz+d_j;
d_p.original=d_o;
d_htm+=d_p.t_htm;}}}}
if(dd.n4||dd.n6||dd.ie||dd.op||dd.w3c)document.write((dd.n4?'<div style="position:absolute;"><\/div>\n':(dd.op&&!dd.op6)?'<div id="OpBlUr" style="position:absolute;visibility:hidden;width:0px;height:0px;"><form><input type="text" style="width:0px;height:0px;"><\/form><\/div>':'')+d_htm);
dd.z=0x33;
for(d_i=dd.elements.length;d_i;){
dd.addProps(d_o=dd.elements[--d_i]);
if(d_o.is_image&&!d_o.original&&!d_o.clone)
dd.n4?d_o.oimg.src=spacer:d_o.oimg.style.visibility='hidden';}
dd.mkWzDom();
if(window.onload)dd.loadFunc=window.onload;
if(window.onunload)dd.uloadFunc=window.onunload;
window.onload=dd.initz;
window.onunload=dd.finlz;
dd.setDwnHdl(PICK);}
function ADD_DHTML(){
var d_a=arguments,d_o,d_i=d_a.length;while(d_i){
d_o=new DDObj(d_a[--d_i]);
dd.addElt(d_o);
dd.addProps(d_o);}
dd.mkWzDom();}
dd.d=document;
var RESET_ZINDEX=RESET_Z;
var KEYDOWN_RESIZE=RESIZABLE;
var CURSOR_POINTER=CURSOR_HAND;
var NO_SCROLL='';
function my_PickFunc(){}
function my_DragFunc(){}
function my_ResizeFunc(){}
function my_DropFunc(){}


