
var TimeTracker=function(opt_bucket){
if(opt_bucket){
this.bucket_=opt_bucket.sort(this.sortNumber);
}else{
this.bucket_=TimeTracker.DEFAULT_BUCKET;
}
};
TimeTracker.prototype.startTime_;
TimeTracker.prototype.stopTime_;
TimeTracker.prototype.bucket_;
TimeTracker.DEFAULT_BUCKET=[100,500,1500,2500,5000];
TimeTracker.prototype._getTimeDiff=function(){
return(this.stopTime_-this.startTime_);
};
TimeTracker.prototype.sortNumber=function(a,b){
return(a-b);
}
TimeTracker.prototype._recordStartTime=function(opt_time){
if(opt_time!=undefined){
this.startTime_=opt_time;
}else{
this.startTime_=(new Date()).getTime();
}
};
TimeTracker.prototype._recordEndTime=function(opt_time){
if(opt_time!=undefined){
this.stopTime_=opt_time;
}else{
this.stopTime_=(new Date()).getTime();
}
};
TimeTracker.prototype._track=function(opt_event_category,
opt_event_label){
var i;
var bucketString;
var category;
var page;
if(opt_event_category!=undefined&&opt_event_category.length!=0){
category=opt_event_category;
}else{
category='TimeTracker';
}
if(opt_event_label!=undefined&&opt_event_label.length!=0){
page=opt_event_label;
}else{
page='Page';
}
for(i=0;i<this.bucket_.length;i++){
if((this._getTimeDiff())<this.bucket_[i]){
if(i==0){
bucketString="0-"+(this.bucket_[0]);
break;
}else{
bucketString=this.bucket_[i-1]+"-"+(this.bucket_[i]-1);
break;
}
}
}
if(!bucketString){
bucketString=this.bucket_[i-1]+"+";
}
try{
var tracker=ConversionTracker.get_instance();
tracker.doGAFunction('_trackEvent',category,bucketString,opt_event_label,this._getTimeDiff());
}catch(e){}
};
TimeTracker.prototype._setHistogramBuckets=function(buckets_array){
this.bucket_=buckets_array.sort(this.sortNumber);
};
var PageLoadTracker=function(defaultPage,startTime){
this.defaultPage_=defaultPage;
this.timeTracker_=new TimeTracker(PageLoadTracker.DEFAULT_BUCKET);
this.timeTracker_._recordStartTime(startTime);
};
PageLoadTracker.prototype.defaultPage_;
PageLoadTracker.prototype.timeTracker_;
PageLoadTracker.DEFAULT_BUCKET=[1000,1500,2000,2500,3000,3500,4000,4500,5000,5500,6000,6500,7000,7500,8000,9000,10000,15000,20000];
PageLoadTracker.prototype.track=function(){
var GATrackerObj=null;
var pageName="";
if(window.location.pathname.search(/\/$/)>=0)
pageName=window.location.pathname+this.defaultPage_;
else
pageName=window.location.pathname;
try{
this.timeTracker_._recordEndTime();
this.timeTracker_._track('Page Load Times',pageName);
}catch(e){}
};
function addListener(element,type,expression,bubbling){
bubbling=bubbling||false;
if(window.addEventListener){element.addEventListener(type,expression,bubbling);
return true;
}else if(window.attachEvent){element.attachEvent('on'+type,expression);
return true;
}else return false;
}
var CONSOLE_LOG_OBJECT='log';
function log(msg,extra,cat){
if(log._log){
return log._log(msg,extra,cat);
}
if(log._size>1e4)log._reset();
if(extra){
try{
extra=extra+'';
}catch(e){}
}
log._messages.push(msg,extra,cat);
log._size+=msg?msg.length:0;
}
log._categories={};
log._reset=function(){
log._messages=[];
log._size=0;
}
log.createCategory=function(name){
f=function(msg,extra){return log(msg,extra,name);}
log._categories[name]=name;
log[name]=f;
}
log._reset();
if(!("console"in window)){
var names=["log","debug","info","warn","error","assert","dir","dirxml",
"group","groupEnd","time","timeEnd","count","trace","profile","profileEnd"];
window.console={};
for(var i=0;i<names.length;++i){
window.console[names[i]]=function(){};
}
window.console.log=log;
window.console.debug=log;
window.console.info=log;
window.console.error=log;
}
var Prototype={
Version:'1.6.1',
Browser:(function(){
var ua=navigator.userAgent;
var isOpera=Object.prototype.toString.call(window.opera)=='[object Opera]';
return{
IE:!!window.attachEvent&&!isOpera,
Opera:isOpera,
WebKit:ua.indexOf('AppleWebKit/')>-1,
Gecko:ua.indexOf('Gecko')>-1&&ua.indexOf('KHTML')===-1,
MobileSafari:/Apple.*Mobile.*Safari/.test(ua)
}
})(),
BrowserFeatures:{
XPath:!!document.evaluate,
SelectorsAPI:!!document.querySelector,
ElementExtensions:(function(){
var constructor=window.Element||window.HTMLElement;
return!!(constructor&&constructor.prototype);
})(),
SpecificElementExtensions:(function(){
if(typeof window.HTMLDivElement!=='undefined')
return true;
var div=document.createElement('div');
var form=document.createElement('form');
var isSupported=false;
if(div['__proto__']&&(div['__proto__']!==form['__proto__'])){
isSupported=true;
}
div=form=null;
return isSupported;
})()
},
ScriptFragment:'<script[^>]*>([\\S\\s]*?)<\/script>',
JSONFilter:/^\/\*-secure-([\s\S]*)\*\/\s*$/,
emptyFunction:function(){},
K:function(x){return x}
};
if(Prototype.Browser.MobileSafari)
Prototype.BrowserFeatures.SpecificElementExtensions=false;
var Abstract={};
var Try={
these:function(){
var returnValue;
for(var i=0,length=arguments.length;i<length;i++){
var lambda=arguments[i];
try{
returnValue=lambda();
break;
}catch(e){}
}
return returnValue;
}
};
var Class=(function(){
function subclass(){};
function create(){
var parent=null,properties=$A(arguments);
if(Object.isFunction(properties[0]))
parent=properties.shift();
function klass(){
this.initialize.apply(this,arguments);
}
Object.extend(klass,Class.Methods);
klass.superclass=parent;
klass.subclasses=[];
if(parent){
subclass.prototype=parent.prototype;
klass.prototype=new subclass;
parent.subclasses.push(klass);
}
for(var i=0;i<properties.length;i++)
klass.addMethods(properties[i]);
if(!klass.prototype.initialize)
klass.prototype.initialize=Prototype.emptyFunction;
klass.prototype.constructor=klass;
return klass;
}
function addMethods(source){
var ancestor=this.superclass&&this.superclass.prototype;
var properties=Object.keys(source);
if(!Object.keys({toString:true}).length){
if(source.toString!=Object.prototype.toString)
properties.push("toString");
if(source.valueOf!=Object.prototype.valueOf)
properties.push("valueOf");
}
for(var i=0,length=properties.length;i<length;i++){
var property=properties[i],value=source[property];
if(ancestor&&Object.isFunction(value)&&
value.argumentNames().first()=="$super"){
var method=value;
value=(function(m){
return function(){return ancestor[m].apply(this,arguments);};
})(property).wrap(method);
value.valueOf=method.valueOf.bind(method);
value.toString=method.toString.bind(method);
}
this.prototype[property]=value;
}
return this;
}
return{
create:create,
Methods:{
addMethods:addMethods
}
};
})();
(function(){
var _toString=Object.prototype.toString;
function extend(destination,source){
for(var property in source)
destination[property]=source[property];
return destination;
}
function inspect(object){
try{
if(isUndefined(object))return'undefined';
if(object===null)return'null';
return object.inspect?object.inspect():String(object);
}catch(e){
if(e instanceof RangeError)return'...';
throw e;
}
}
function toJSON(object){
var type=typeof object;
switch(type){
case'undefined':
case'function':
case'unknown':return;
case'boolean':return object.toString();
}
if(object===null)return'null';
if(object.toJSON)return object.toJSON();
if(isElement(object))return;
var results=[];
for(var property in object){
var value=toJSON(object[property]);
if(!isUndefined(value))
results.push(property.toJSON()+': '+value);
}
return'{'+results.join(', ')+'}';
}
function toQueryString(object){
return $H(object).toQueryString();
}
function toHTML(object){
return object&&object.toHTML?object.toHTML():String.interpret(object);
}
function keys(object){
var results=[];
for(var property in object)
results.push(property);
return results;
}
function values(object){
var results=[];
for(var property in object)
results.push(object[property]);
return results;
}
function clone(object){
return extend({},object);
}
function isElement(object){
return!!(object&&object.nodeType==1);
}
function isArray(object){
return _toString.call(object)=="[object Array]";
}
function isHash(object){
return object instanceof Hash;
}
function isFunction(object){
return typeof object==="function";
}
function isString(object){
return _toString.call(object)=="[object String]";
}
function isNumber(object){
return _toString.call(object)=="[object Number]";
}
function isUndefined(object){
return typeof object==="undefined";
}
extend(Object,{
extend:extend,
inspect:inspect,
toJSON:toJSON,
toQueryString:toQueryString,
toHTML:toHTML,
keys:keys,
values:values,
clone:clone,
isElement:isElement,
isArray:isArray,
isHash:isHash,
isFunction:isFunction,
isString:isString,
isNumber:isNumber,
isUndefined:isUndefined
});
})();
Object.extend(Function.prototype,(function(){
var slice=Array.prototype.slice;
function update(array,args){
var arrayLength=array.length,length=args.length;
while(length--)array[arrayLength+length]=args[length];
return array;
}
function merge(array,args){
array=slice.call(array,0);
return update(array,args);
}
function argumentNames(){
var names=this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]
.replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g,'')
.replace(/\s+/g,'').split(',');
return names.length==1&&!names[0]?[]:names;
}
function bind(context){
if(arguments.length<2&&Object.isUndefined(arguments[0]))return this;
var __method=this,args=slice.call(arguments,1);
return function(){
var a=merge(args,arguments);
return __method.apply(context,a);
}
}
function bindAsEventListener(context){
var __method=this,args=slice.call(arguments,1);
return function(event){
var a=update([event||window.event],args);
return __method.apply(context,a);
}
}
function curry(){
if(!arguments.length)return this;
var __method=this,args=slice.call(arguments,0);
return function(){
var a=merge(args,arguments);
return __method.apply(this,a);
}
}
function delay(timeout){
var __method=this,args=slice.call(arguments,1);
timeout=timeout*1000
return window.setTimeout(function(){
return __method.apply(__method,args);
},timeout);
}
function defer(){
var args=update([0.01],arguments);
return this.delay.apply(this,args);
}
function wrap(wrapper){
var __method=this;
return function(){
var a=update([__method.bind(this)],arguments);
return wrapper.apply(this,a);
}
}
function methodize(){
if(this._methodized)return this._methodized;
var __method=this;
return this._methodized=function(){
var a=update([this],arguments);
return __method.apply(null,a);
};
}
return{
argumentNames:argumentNames,
bind:bind,
bindAsEventListener:bindAsEventListener,
curry:curry,
delay:delay,
defer:defer,
wrap:wrap,
methodize:methodize
}
})());
Date.prototype.toJSON=function(){
return'"'+this.getUTCFullYear()+'-'+
(this.getUTCMonth()+1).toPaddedString(2)+'-'+
this.getUTCDate().toPaddedString(2)+'T'+
this.getUTCHours().toPaddedString(2)+':'+
this.getUTCMinutes().toPaddedString(2)+':'+
this.getUTCSeconds().toPaddedString(2)+'Z"';
};
RegExp.prototype.match=RegExp.prototype.test;
RegExp.escape=function(str){
return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g,'\\$1');
};
var PeriodicalExecuter=Class.create({
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);
},
execute:function(){
this.callback(this);
},
stop:function(){
if(!this.timer)return;
clearInterval(this.timer);
this.timer=null;
},
onTimerEvent:function(){
if(!this.currentlyExecuting){
try{
this.currentlyExecuting=true;
this.execute();
this.currentlyExecuting=false;
}catch(e){
this.currentlyExecuting=false;
throw e;
}
}
}
});
Object.extend(String,{
interpret:function(value){
return value==null?'':String(value);
},
specialChar:{
'\b':'\\b',
'\t':'\\t',
'\n':'\\n',
'\f':'\\f',
'\r':'\\r',
'\\':'\\\\'
}
});
Object.extend(String.prototype,(function(){
function prepareReplacement(replacement){
if(Object.isFunction(replacement))return replacement;
var template=new Template(replacement);
return function(match){return template.evaluate(match)};
}
function gsub(pattern,replacement){
var result='',source=this,match;
replacement=prepareReplacement(replacement);
if(Object.isString(pattern))
pattern=RegExp.escape(pattern);
if(!(pattern.length||pattern.source)){
replacement=replacement('');
return replacement+source.split('').join(replacement)+replacement;
}
while(source.length>0){
if(match=source.match(pattern)){
result+=source.slice(0,match.index);
result+=String.interpret(replacement(match));
source=source.slice(match.index+match[0].length);
}else{
result+=source,source='';
}
}
return result;
}
function sub(pattern,replacement,count){
replacement=prepareReplacement(replacement);
count=Object.isUndefined(count)?1:count;
return this.gsub(pattern,function(match){
if(--count<0)return match[0];
return replacement(match);
});
}
function scan(pattern,iterator){
this.gsub(pattern,iterator);
return String(this);
}
function truncate(length,truncation){
length=length||30;
truncation=Object.isUndefined(truncation)?'...':truncation;
return this.length>length?
this.slice(0,length-truncation.length)+truncation:String(this);
}
function strip(){
return this.replace(/^\s+/,'').replace(/\s+$/,'');
}
function stripTags(){
return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi,'');
}
function stripScripts(){
return this.replace(new RegExp(Prototype.ScriptFragment,'img'),'');
}
function extractScripts(){
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];
});
}
function evalScripts(){
return this.extractScripts().map(function(script){return eval(script)});
}
function escapeHTML(){
return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
}
function unescapeHTML(){
return this.stripTags().replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');
}
function toQueryParams(separator){
var match=this.strip().match(/([^?#]*)(#.*)?$/);
if(!match)return{};
return match[1].split(separator||'&').inject({},function(hash,pair){
if((pair=pair.split('='))[0]){
var key=decodeURIComponent(pair.shift());
var value=pair.length>1?pair.join('='):pair[0];
if(value!=undefined)value=decodeURIComponent(value);
if(key in hash){
if(!Object.isArray(hash[key]))hash[key]=[hash[key]];
hash[key].push(value);
}
else hash[key]=value;
}
return hash;
});
}
function toArray(){
return this.split('');
}
function succ(){
return this.slice(0,this.length-1)+
String.fromCharCode(this.charCodeAt(this.length-1)+1);
}
function times(count){
return count<1?'':new Array(count+1).join(this);
}
function camelize(){
var parts=this.split('-'),len=parts.length;
if(len==1)return parts[0];
var camelized=this.charAt(0)=='-'
?parts[0].charAt(0).toUpperCase()+parts[0].substring(1)
:parts[0];
for(var i=1;i<len;i++)
camelized+=parts[i].charAt(0).toUpperCase()+parts[i].substring(1);
return camelized;
}
function capitalize(){
return this.charAt(0).toUpperCase()+this.substring(1).toLowerCase();
}
function underscore(){
return this.replace(/::/g,'/')
.replace(/([A-Z]+)([A-Z][a-z])/g,'$1_$2')
.replace(/([a-z\d])([A-Z])/g,'$1_$2')
.replace(/-/g,'_')
.toLowerCase();
}
function dasherize(){
return this.replace(/_/g,'-');
}
function inspect(useDoubleQuotes){
var escapedString=this.replace(/[\x00-\x1f\\]/g,function(character){
if(character in String.specialChar){
return String.specialChar[character];
}
return'\\u00'+character.charCodeAt().toPaddedString(2,16);
});
if(useDoubleQuotes)return'"'+escapedString.replace(/"/g,'\\"')+'"';
return"'"+escapedString.replace(/'/g,'\\\'')+"'";
}
function toJSON(){
return this.inspect(true);
}
function unfilterJSON(filter){
return this.replace(filter||Prototype.JSONFilter,'$1');
}
function isJSON(){
var str=this;
if(str.blank())return false;
str=this.replace(/\\./g,'@').replace(/"[^"\\\n\r]*"/g,'');
return(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
}
function evalJSON(sanitize){
var json=this.unfilterJSON();
try{
if(!sanitize||json.isJSON())return eval('('+json+')');
}catch(e){}
throw new SyntaxError('Badly formed JSON string: '+this.inspect());
}
function include(pattern){
return this.indexOf(pattern)>-1;
}
function startsWith(pattern){
return this.indexOf(pattern)===0;
}
function endsWith(pattern){
var d=this.length-pattern.length;
return d>=0&&this.lastIndexOf(pattern)===d;
}
function empty(){
return this=='';
}
function blank(){
return/^\s*$/.test(this);
}
function interpolate(object,pattern){
return new Template(this,pattern).evaluate(object);
}
return{
gsub:gsub,
sub:sub,
scan:scan,
truncate:truncate,
strip:String.prototype.trim?String.prototype.trim:strip,
stripTags:stripTags,
stripScripts:stripScripts,
extractScripts:extractScripts,
evalScripts:evalScripts,
escapeHTML:escapeHTML,
unescapeHTML:unescapeHTML,
toQueryParams:toQueryParams,
parseQuery:toQueryParams,
toArray:toArray,
succ:succ,
times:times,
camelize:camelize,
capitalize:capitalize,
underscore:underscore,
dasherize:dasherize,
inspect:inspect,
toJSON:toJSON,
unfilterJSON:unfilterJSON,
isJSON:isJSON,
evalJSON:evalJSON,
include:include,
startsWith:startsWith,
endsWith:endsWith,
empty:empty,
blank:blank,
interpolate:interpolate
};
})());
var Template=Class.create({
initialize:function(template,pattern){
this.template=template.toString();
this.pattern=pattern||Template.Pattern;
},
evaluate:function(object){
if(object&&Object.isFunction(object.toTemplateReplacements))
object=object.toTemplateReplacements();
return this.template.gsub(this.pattern,function(match){
if(object==null)return(match[1]+'');
var before=match[1]||'';
if(before=='\\')return match[2];
var ctx=object,expr=match[3];
var pattern=/^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
match=pattern.exec(expr);
if(match==null)return before;
while(match!=null){
var comp=match[1].startsWith('[')?match[2].replace(/\\\\]/g,']'):match[1];
ctx=ctx[comp];
if(null==ctx||''==match[3])break;
expr=expr.substring('['==match[3]?match[1].length:match[0].length);
match=pattern.exec(expr);
}
return before+String.interpret(ctx);
});
}
});
Template.Pattern=/(^|.|\r|\n)(#\{(.*?)\})/;
var $break={};
var Enumerable=(function(){
function each(iterator,context){
var index=0;
try{
this._each(function(value){
iterator.call(context,value,index++);
});
}catch(e){
if(e!=$break)throw e;
}
return this;
}
function eachSlice(number,iterator,context){
var index=-number,slices=[],array=this.toArray();
if(number<1)return array;
while((index+=number)<array.length)
slices.push(array.slice(index,index+number));
return slices.collect(iterator,context);
}
function all(iterator,context){
iterator=iterator||Prototype.K;
var result=true;
this.each(function(value,index){
result=result&&!!iterator.call(context,value,index);
if(!result)throw $break;
});
return result;
}
function any(iterator,context){
iterator=iterator||Prototype.K;
var result=false;
this.each(function(value,index){
if(result=!!iterator.call(context,value,index))
throw $break;
});
return result;
}
function collect(iterator,context){
iterator=iterator||Prototype.K;
var results=[];
this.each(function(value,index){
results.push(iterator.call(context,value,index));
});
return results;
}
function detect(iterator,context){
var result;
this.each(function(value,index){
if(iterator.call(context,value,index)){
result=value;
throw $break;
}
});
return result;
}
function findAll(iterator,context){
var results=[];
this.each(function(value,index){
if(iterator.call(context,value,index))
results.push(value);
});
return results;
}
function grep(filter,iterator,context){
iterator=iterator||Prototype.K;
var results=[];
if(Object.isString(filter))
filter=new RegExp(RegExp.escape(filter));
this.each(function(value,index){
if(filter.match(value))
results.push(iterator.call(context,value,index));
});
return results;
}
function include(object){
if(Object.isFunction(this.indexOf))
if(this.indexOf(object)!=-1)return true;
var found=false;
this.each(function(value){
if(value==object){
found=true;
throw $break;
}
});
return found;
}
function inGroupsOf(number,fillWith){
fillWith=Object.isUndefined(fillWith)?null:fillWith;
return this.eachSlice(number,function(slice){
while(slice.length<number)slice.push(fillWith);
return slice;
});
}
function inject(memo,iterator,context){
this.each(function(value,index){
memo=iterator.call(context,memo,value,index);
});
return memo;
}
function invoke(method){
var args=$A(arguments).slice(1);
return this.map(function(value){
return value[method].apply(value,args);
});
}
function max(iterator,context){
iterator=iterator||Prototype.K;
var result;
this.each(function(value,index){
value=iterator.call(context,value,index);
if(result==null||value>=result)
result=value;
});
return result;
}
function min(iterator,context){
iterator=iterator||Prototype.K;
var result;
this.each(function(value,index){
value=iterator.call(context,value,index);
if(result==null||value<result)
result=value;
});
return result;
}
function partition(iterator,context){
iterator=iterator||Prototype.K;
var trues=[],falses=[];
this.each(function(value,index){
(iterator.call(context,value,index)?
trues:falses).push(value);
});
return[trues,falses];
}
function pluck(property){
var results=[];
this.each(function(value){
results.push(value[property]);
});
return results;
}
function reject(iterator,context){
var results=[];
this.each(function(value,index){
if(!iterator.call(context,value,index))
results.push(value);
});
return results;
}
function sortBy(iterator,context){
return this.map(function(value,index){
return{
value:value,
criteria:iterator.call(context,value,index)
};
}).sort(function(left,right){
var a=left.criteria,b=right.criteria;
return a<b?-1:a>b?1:0;
}).pluck('value');
}
function toArray(){
return this.map();
}
function zip(){
var iterator=Prototype.K,args=$A(arguments);
if(Object.isFunction(args.last()))
iterator=args.pop();
var collections=[this].concat(args).map($A);
return this.map(function(value,index){
return iterator(collections.pluck(index));
});
}
function size(){
return this.toArray().length;
}
function inspect(){
return'#<Enumerable:'+this.toArray().inspect()+'>';
}
return{
each:each,
eachSlice:eachSlice,
all:all,
every:all,
any:any,
some:any,
collect:collect,
map:collect,
detect:detect,
findAll:findAll,
select:findAll,
filter:findAll,
grep:grep,
include:include,
member:include,
inGroupsOf:inGroupsOf,
inject:inject,
invoke:invoke,
max:max,
min:min,
partition:partition,
pluck:pluck,
reject:reject,
sortBy:sortBy,
toArray:toArray,
entries:toArray,
zip:zip,
size:size,
inspect:inspect,
find:detect
};
})();
function $A(iterable){
if(!iterable)return[];
if('toArray'in Object(iterable))return iterable.toArray();
var length=iterable.length||0,results=new Array(length);
while(length--)results[length]=iterable[length];
return results;
}
function $w(string){
if(!Object.isString(string))return[];
string=string.strip();
return string?string.split(/\s+/):[];
}
Array.from=$A;
(function(){
var arrayProto=Array.prototype,
slice=arrayProto.slice,
_each=arrayProto.forEach;function each(iterator){
for(var i=0,length=this.length;i<length;i++)
iterator(this[i]);
}
if(!_each)_each=each;
function clear(){
this.length=0;
return this;
}
function first(){
return this[0];
}
function last(){
return this[this.length-1];
}
function compact(){
return this.select(function(value){
return value!=null;
});
}
function flatten(){
return this.inject([],function(array,value){
if(Object.isArray(value))
return array.concat(value.flatten());
array.push(value);
return array;
});
}
function without(){
var values=slice.call(arguments,0);
return this.select(function(value){
return!values.include(value);
});
}
function reverse(inline){
return(inline!==false?this:this.toArray())._reverse();
}
function uniq(sorted){
return this.inject([],function(array,value,index){
if(0==index||(sorted?array.last()!=value:!array.include(value)))
array.push(value);
return array;
});
}
function intersect(array){
return this.uniq().findAll(function(item){
return array.detect(function(value){return item===value});
});
}
function clone(){
return slice.call(this,0);
}
function size(){
return this.length;
}
function inspect(){
return'['+this.map(Object.inspect).join(', ')+']';
}
function toJSON(){
var results=[];
this.each(function(object){
var value=Object.toJSON(object);
if(!Object.isUndefined(value))results.push(value);
});
return'['+results.join(', ')+']';
}
function indexOf(item,i){
i||(i=0);
var length=this.length;
if(i<0)i=length+i;
for(;i<length;i++)
if(this[i]===item)return i;
return-1;
}
function lastIndexOf(item,i){
i=isNaN(i)?this.length:(i<0?this.length+i:i)+1;
var n=this.slice(0,i).reverse().indexOf(item);
return(n<0)?n:i-n-1;
}
function concat(){
var array=slice.call(this,0),item;
for(var i=0,length=arguments.length;i<length;i++){
item=arguments[i];
if(Object.isArray(item)&&!('callee'in item)){
for(var j=0,arrayLength=item.length;j<arrayLength;j++)
array.push(item[j]);
}else{
array.push(item);
}
}
return array;
}
Object.extend(arrayProto,Enumerable);
if(!arrayProto._reverse)
arrayProto._reverse=arrayProto.reverse;
Object.extend(arrayProto,{
_each:_each,
clear:clear,
first:first,
last:last,
compact:compact,
flatten:flatten,
without:without,
reverse:reverse,
uniq:uniq,
intersect:intersect,
clone:clone,
toArray:clone,
size:size,
inspect:inspect,
toJSON:toJSON
});
var CONCAT_ARGUMENTS_BUGGY=(function(){
return[].concat(arguments)[0][0]!==1;
})(1,2)
if(CONCAT_ARGUMENTS_BUGGY)arrayProto.concat=concat;
if(!arrayProto.indexOf)arrayProto.indexOf=indexOf;
if(!arrayProto.lastIndexOf)arrayProto.lastIndexOf=lastIndexOf;
})();
function $H(object){
return new Hash(object);
};
var Hash=Class.create(Enumerable,(function(){
function initialize(object){
this._object=Object.isHash(object)?object.toObject():Object.clone(object);
}
function _each(iterator){
for(var key in this._object){
var value=this._object[key],pair=[key,value];
pair.key=key;
pair.value=value;
iterator(pair);
}
}
function set(key,value){
return this._object[key]=value;
}
function get(key){
if(this._object[key]!==Object.prototype[key])
return this._object[key];
}
function unset(key){
var value=this._object[key];
delete this._object[key];
return value;
}
function toObject(){
return Object.clone(this._object);
}
function keys(){
return this.pluck('key');
}
function values(){
return this.pluck('value');
}
function index(value){
var match=this.detect(function(pair){
return pair.value===value;
});
return match&&match.key;
}
function merge(object){
return this.clone().update(object);
}
function update(object){
return new Hash(object).inject(this,function(result,pair){
result.set(pair.key,pair.value);
return result;
});
}
function toQueryPair(key,value){
if(Object.isUndefined(value))return key;
return key+'='+encodeURIComponent(String.interpret(value));
}
function toQueryString(){
return this.inject([],function(results,pair){
var key=encodeURIComponent(pair.key),values=pair.value;
if(values&&typeof values=='object'){
if(Object.isArray(values))
return results.concat(values.map(toQueryPair.curry(key)));
}else results.push(toQueryPair(key,values));
return results;
}).join('&');
}
function inspect(){
return'#<Hash:{'+this.map(function(pair){
return pair.map(Object.inspect).join(': ');
}).join(', ')+'}>';
}
function toJSON(){
return Object.toJSON(this.toObject());
}
function clone(){
return new Hash(this);
}
return{
initialize:initialize,
_each:_each,
set:set,
get:get,
unset:unset,
toObject:toObject,
toTemplateReplacements:toObject,
keys:keys,
values:values,
index:index,
merge:merge,
update:update,
toQueryString:toQueryString,
inspect:inspect,
toJSON:toJSON,
clone:clone
};
})());
Hash.from=$H;
Object.extend(Number.prototype,(function(){
function toColorPart(){
return this.toPaddedString(2,16);
}
function succ(){
return this+1;
}
function times(iterator,context){
$R(0,this,true).each(iterator,context);
return this;
}
function toPaddedString(length,radix){
var string=this.toString(radix||10);
return'0'.times(length-string.length)+string;
}
function toJSON(){
return isFinite(this)?this.toString():'null';
}
function abs(){
return Math.abs(this);
}
function round(){
return Math.round(this);
}
function ceil(){
return Math.ceil(this);
}
function floor(){
return Math.floor(this);
}
return{
toColorPart:toColorPart,
succ:succ,
times:times,
toPaddedString:toPaddedString,
toJSON:toJSON,
abs:abs,
round:round,
ceil:ceil,
floor:floor
};
})());
function $R(start,end,exclusive){
return new ObjectRange(start,end,exclusive);
}
var ObjectRange=Class.create(Enumerable,(function(){
function initialize(start,end,exclusive){
this.start=start;
this.end=end;
this.exclusive=exclusive;
}
function _each(iterator){
var value=this.start;
while(this.include(value)){
iterator(value);
value=value.succ();
}
}
function include(value){
if(value<this.start)
return false;
if(this.exclusive)
return value<this.end;
return value<=this.end;
}
return{
initialize:initialize,
_each:_each,
include:include
};
})());
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(Object.isFunction(responder[callback])){
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=Class.create({
initialize:function(options){
this.options={
method:'post',
asynchronous:true,
contentType:'application/x-www-form-urlencoded',
encoding:'UTF-8',
parameters:'',
evalJSON:true,
evalJS:true
};
Object.extend(this.options,options||{});
this.options.method=this.options.method.toLowerCase();
if(Object.isString(this.options.parameters))
this.options.parameters=this.options.parameters.toQueryParams();
else if(Object.isHash(this.options.parameters))
this.options.parameters=this.options.parameters.toObject();
}
});
Ajax.Request=Class.create(Ajax.Base,{
_complete:false,
initialize:function($super,url,options){
$super(options);
this.transport=Ajax.getTransport();
this.request(url);
},
request:function(url){
this.url=url;
this.method=this.options.method;
var params=Object.clone(this.options.parameters);
if(!['get','post'].include(this.method)){
params['_method']=this.method;
this.method='post';
}
this.parameters=params;
if(params=Object.toQueryString(params)){
if(this.method=='get')
this.url+=(this.url.include('?')?'&':'?')+params;
else if(/Konqueror|Safari|KHTML/.test(navigator.userAgent))
params+='&_=';
}
try{
var response=new Ajax.Response(this);
if(this.options.onCreate)this.options.onCreate(response);
Ajax.Responders.dispatch('onCreate',this,response);
this.transport.open(this.method.toUpperCase(),this.url,
this.options.asynchronous);
if(this.options.asynchronous)this.respondToReadyState.bind(this).defer(1);
this.transport.onreadystatechange=this.onStateChange.bind(this);
this.setRequestHeaders();
this.body=this.method=='post'?(this.options.postBody||params):null;
this.transport.send(this.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&&!((readyState==4)&&this._complete))
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.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(Object.isFunction(extras.push))
for(var i=0,length=extras.length;i<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(){
var status=this.getStatus();
return!status||(status>=200&&status<300);
},
getStatus:function(){
try{
return this.transport.status||0;
}catch(e){return 0}
},
respondToReadyState:function(readyState){
var state=Ajax.Request.Events[readyState],response=new Ajax.Response(this);
if(state=='Complete'){
try{
this._complete=true;
(this.options['on'+response.status]
||this.options['on'+(this.success()?'Success':'Failure')]
||Prototype.emptyFunction)(response,response.headerJSON);
}catch(e){
this.dispatchException(e);
}
var contentType=response.getHeader('Content-type');
if(this.options.evalJS=='force'
||(this.options.evalJS&&this.isSameOrigin()&&contentType
&&contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
this.evalResponse();
}
try{
(this.options['on'+state]||Prototype.emptyFunction)(response,response.headerJSON);
Ajax.Responders.dispatch('on'+state,this,response,response.headerJSON);
}catch(e){
this.dispatchException(e);
}
if(state=='Complete'){
this.transport.onreadystatechange=Prototype.emptyFunction;
}
},
isSameOrigin:function(){
var m=this.url.match(/^\s*https?:\/\/[^\/]*/);
return!m||(m[0]=='#{protocol}//#{domain}#{port}'.interpolate({
protocol:location.protocol,
domain:document.domain,
port:location.port?':'+location.port:''
}));
},
getHeader:function(name){
try{
return this.transport.getResponseHeader(name)||null;
}catch(e){return null;}
},
evalResponse:function(){
try{
return eval((this.transport.responseText||'').unfilterJSON());
}catch(e){
this.dispatchException(e);
}
},
dispatchException:function(exception){
(this.options.onException||Prototype.emptyFunction)(this,exception);
Ajax.Responders.dispatch('onException',this,exception);
}
});
Ajax.Request.Events=
['Uninitialized','Loading','Loaded','Interactive','Complete'];
Ajax.Response=Class.create({
initialize:function(request){
this.request=request;
var transport=this.transport=request.transport,
readyState=this.readyState=transport.readyState;
if((readyState>2&&!Prototype.Browser.IE)||readyState==4){
this.status=this.getStatus();
this.statusText=this.getStatusText();
this.responseText=String.interpret(transport.responseText);
this.headerJSON=this._getHeaderJSON();
}
if(readyState==4){
var xml=transport.responseXML;
this.responseXML=Object.isUndefined(xml)?null:xml;
this.responseJSON=this._getResponseJSON();
}
},
status:0,
statusText:'',
getStatus:Ajax.Request.prototype.getStatus,
getStatusText:function(){
try{
return this.transport.statusText||'';
}catch(e){return''}
},
getHeader:Ajax.Request.prototype.getHeader,
getAllHeaders:function(){
try{
return this.getAllResponseHeaders();
}catch(e){return null}
},
getResponseHeader:function(name){
return this.transport.getResponseHeader(name);
},
getAllResponseHeaders:function(){
return this.transport.getAllResponseHeaders();
},
_getHeaderJSON:function(){
var json=this.getHeader('X-JSON');
if(!json)return null;
json=decodeURIComponent(escape(json));
try{
return json.evalJSON(this.request.options.sanitizeJSON||
!this.request.isSameOrigin());
}catch(e){
this.request.dispatchException(e);
}
},
_getResponseJSON:function(){
var options=this.request.options;
if(!options.evalJSON||(options.evalJSON!='force'&&
!(this.getHeader('Content-type')||'').include('application/json'))||
this.responseText.blank())
return null;
try{
return this.responseText.evalJSON(options.sanitizeJSON||
!this.request.isSameOrigin());
}catch(e){
this.request.dispatchException(e);
}
}
});
Ajax.Updater=Class.create(Ajax.Request,{
initialize:function($super,container,url,options){
this.container={
success:(container.success||container),
failure:(container.failure||(container.success?null:container))
};
options=Object.clone(options);
var onComplete=options.onComplete;
options.onComplete=(function(response,json){
this.updateContent(response.responseText);
if(Object.isFunction(onComplete))onComplete(response,json);
}).bind(this);
$super(url,options);
},
updateContent:function(responseText){
var receiver=this.container[this.success()?'success':'failure'],
options=this.options;
if(!options.evalScripts)responseText=responseText.stripScripts();
if(receiver=$(receiver)){
if(options.insertion){
if(Object.isString(options.insertion)){
var insertion={};insertion[options.insertion]=responseText;
receiver.insert(insertion);
}
else options.insertion(receiver,responseText);
}
else receiver.update(responseText);
}
}
});
Ajax.PeriodicalUpdater=Class.create(Ajax.Base,{
initialize:function($super,container,url,options){
$super(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(response){
if(this.options.decay){
this.decay=(response.responseText==this.lastText?
this.decay*this.options.decay:1);
this.lastText=response.responseText;
}
this.timer=this.onTimerEvent.bind(this).delay(this.decay*this.frequency);
},
onTimerEvent:function(){
this.updater=new Ajax.Updater(this.container,this.url,this.options);
}
});
function $(element){
if(arguments.length>1){
for(var i=0,elements=[],length=arguments.length;i<length;i++)
elements.push($(arguments[i]));
return elements;
}
if(Object.isString(element))
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,length=query.snapshotLength;i<length;i++)
results.push(Element.extend(query.snapshotItem(i)));
return results;
};
}
if(!window.Node)var Node={};
if(!Node.ELEMENT_NODE){
Object.extend(Node,{
ELEMENT_NODE:1,
ATTRIBUTE_NODE:2,
TEXT_NODE:3,
CDATA_SECTION_NODE:4,
ENTITY_REFERENCE_NODE:5,
ENTITY_NODE:6,
PROCESSING_INSTRUCTION_NODE:7,
COMMENT_NODE:8,
DOCUMENT_NODE:9,
DOCUMENT_TYPE_NODE:10,
DOCUMENT_FRAGMENT_NODE:11,
NOTATION_NODE:12
});
}
(function(global){
var SETATTRIBUTE_IGNORES_NAME=(function(){
var elForm=document.createElement("form");
var elInput=document.createElement("input");
var root=document.documentElement;
elInput.setAttribute("name","test");
elForm.appendChild(elInput);
root.appendChild(elForm);
var isBuggy=elForm.elements
?(typeof elForm.elements.test=="undefined")
:null;
root.removeChild(elForm);
elForm=elInput=null;
return isBuggy;
})();
var element=global.Element;
global.Element=function(tagName,attributes){
attributes=attributes||{};
tagName=tagName.toLowerCase();
var cache=Element.cache;
if(SETATTRIBUTE_IGNORES_NAME&&attributes.name){
tagName='<'+tagName+' name="'+attributes.name+'">';
delete attributes.name;
return Element.writeAttribute(document.createElement(tagName),attributes);
}
if(!cache[tagName])cache[tagName]=Element.extend(document.createElement(tagName));
return Element.writeAttribute(cache[tagName].cloneNode(false),attributes);
};
Object.extend(global.Element,element||{});
if(element)global.Element.prototype=element.prototype;
})(this);
Element.cache={};
Element.idCounter=1;
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=$(element);
element.style.display='none';
return element;
},
show:function(element){
element=$(element);
element.style.display='';
return element;
},
remove:function(element){
element=$(element);
element.parentNode.removeChild(element);
return element;
},
update:(function(){
var SELECT_ELEMENT_INNERHTML_BUGGY=(function(){
var el=document.createElement("select"),
isBuggy=true;
el.innerHTML="<option value=\"test\">test</option>";
if(el.options&&el.options[0]){
isBuggy=el.options[0].nodeName.toUpperCase()!=="OPTION";
}
el=null;
return isBuggy;
})();
var TABLE_ELEMENT_INNERHTML_BUGGY=(function(){
try{
var el=document.createElement("table");
if(el&&el.tBodies){
el.innerHTML="<tbody><tr><td>test</td></tr></tbody>";
var isBuggy=typeof el.tBodies[0]=="undefined";
el=null;
return isBuggy;
}
}catch(e){
return true;
}
})();
var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING=(function(){
var s=document.createElement("script"),
isBuggy=false;
try{
s.appendChild(document.createTextNode(""));
isBuggy=!s.firstChild||
s.firstChild&&s.firstChild.nodeType!==3;
}catch(e){
isBuggy=true;
}
s=null;
return isBuggy;
})();
function update(element,content){
element=$(element);
if(content&&content.toElement)
content=content.toElement();
if(Object.isElement(content))
return element.update().insert(content);
content=Object.toHTML(content);
var tagName=element.tagName.toUpperCase();
if(tagName==='SCRIPT'&&SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING){
element.text=content;
return element;
}
if(SELECT_ELEMENT_INNERHTML_BUGGY||TABLE_ELEMENT_INNERHTML_BUGGY){
if(tagName in Element._insertionTranslations.tags){
while(element.firstChild){
element.removeChild(element.firstChild);
}
Element._getContentFromAnonymousElement(tagName,content.stripScripts())
.each(function(node){
element.appendChild(node)
});
}
else{
element.innerHTML=content.stripScripts();
}
}
else{
element.innerHTML=content.stripScripts();
}
content.evalScripts.bind(content).defer();
return element;
}
return update;
})(),
replace:function(element,content){
element=$(element);
if(content&&content.toElement)content=content.toElement();
else if(!Object.isElement(content)){
content=Object.toHTML(content);
var range=element.ownerDocument.createRange();
range.selectNode(element);
content.evalScripts.bind(content).defer();
content=range.createContextualFragment(content.stripScripts());
}
element.parentNode.replaceChild(content,element);
return element;
},
insert:function(element,insertions){
element=$(element);
if(Object.isString(insertions)||Object.isNumber(insertions)||
Object.isElement(insertions)||(insertions&&(insertions.toElement||insertions.toHTML)))
insertions={bottom:insertions};
var content,insert,tagName,childNodes;
for(var position in insertions){
content=insertions[position];
position=position.toLowerCase();
insert=Element._insertionTranslations[position];
if(content&&content.toElement)content=content.toElement();
if(Object.isElement(content)){
insert(element,content);
continue;
}
content=Object.toHTML(content);
tagName=((position=='before'||position=='after')
?element.parentNode:element).tagName.toUpperCase();
childNodes=Element._getContentFromAnonymousElement(tagName,content.stripScripts());
if(position=='top'||position=='after')childNodes.reverse();
childNodes.each(insert.curry(element));
content.evalScripts.bind(content).defer();
}
return element;
},
wrap:function(element,wrapper,attributes){
element=$(element);
if(Object.isElement(wrapper))
$(wrapper).writeAttribute(attributes||{});
else if(Object.isString(wrapper))wrapper=new Element(wrapper,attributes);
else wrapper=new Element('div',wrapper);
if(element.parentNode)
element.parentNode.replaceChild(wrapper,element);
wrapper.appendChild(element);
return wrapper;
},
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(element,'parentNode');
},
descendants:function(element){
return Element.select(element,"*");
},
firstDescendant:function(element){
element=$(element).firstChild;
while(element&&element.nodeType!=1)element=element.nextSibling;
return $(element);
},
immediateDescendants:function(element){
if(!(element=$(element).firstChild))return[];
while(element&&element.nodeType!=1)element=element.nextSibling;
if(element)return[element].concat($(element).nextSiblings());
return[];
},
previousSiblings:function(element){
return Element.recursivelyCollect(element,'previousSibling');
},
nextSiblings:function(element){
return Element.recursivelyCollect(element,'nextSibling');
},
siblings:function(element){
element=$(element);
return Element.previousSiblings(element).reverse()
.concat(Element.nextSiblings(element));
},
match:function(element,selector){
if(Object.isString(selector))
selector=new Selector(selector);
return selector.match($(element));
},
up:function(element,expression,index){
element=$(element);
if(arguments.length==1)return $(element.parentNode);
var ancestors=Element.ancestors(element);
return Object.isNumber(expression)?ancestors[expression]:
Selector.findElement(ancestors,expression,index);
},
down:function(element,expression,index){
element=$(element);
if(arguments.length==1)return Element.firstDescendant(element);
return Object.isNumber(expression)?Element.descendants(element)[expression]:
Element.select(element,expression)[index||0];
},
previous:function(element,expression,index){
element=$(element);
if(arguments.length==1)return $(Selector.handlers.previousElementSibling(element));
var previousSiblings=Element.previousSiblings(element);
return Object.isNumber(expression)?previousSiblings[expression]:
Selector.findElement(previousSiblings,expression,index);
},
next:function(element,expression,index){
element=$(element);
if(arguments.length==1)return $(Selector.handlers.nextElementSibling(element));
var nextSiblings=Element.nextSiblings(element);
return Object.isNumber(expression)?nextSiblings[expression]:
Selector.findElement(nextSiblings,expression,index);
},
select:function(element){
var args=Array.prototype.slice.call(arguments,1);
return Selector.findChildElements(element,args);
},
adjacent:function(element){
var args=Array.prototype.slice.call(arguments,1);
return Selector.findChildElements(element.parentNode,args).without(element);
},
identify:function(element){
element=$(element);
var id=Element.readAttribute(element,'id');
if(id)return id;
do{id='anonymous_element_'+Element.idCounter++}while($(id));
Element.writeAttribute(element,'id',id);
return id;
},
readAttribute:function(element,name){
element=$(element);
if(Prototype.Browser.IE){
var t=Element._attributeTranslations.read;
if(t.values[name])return t.values[name](element,name);
if(t.names[name])name=t.names[name];
if(name.include(':')){
return(!element.attributes||!element.attributes[name])?null:
element.attributes[name].value;
}
}
return element.getAttribute(name);
},
writeAttribute:function(element,name,value){
element=$(element);
var attributes={},t=Element._attributeTranslations.write;
if(typeof name=='object')attributes=name;
else attributes[name]=Object.isUndefined(value)?true:value;
for(var attr in attributes){
name=t.names[attr]||attr;
value=attributes[attr];
if(t.values[attr])name=t.values[attr](element,value);
if(value===false||value===null)
element.removeAttribute(name);
else if(value===true)
element.setAttribute(name,name);
else element.setAttribute(name,value);
}
return element;
},
getHeight:function(element){
return Element.getDimensions(element).height;
},
getWidth:function(element){
return Element.getDimensions(element).width;
},
classNames:function(element){
return new Element.ClassNames(element);
},
hasClassName:function(element,className){
if(!(element=$(element)))return;
var elementClassName=element.className;
return(elementClassName.length>0&&(elementClassName==className||
new RegExp("(^|\\s)"+className+"(\\s|$)").test(elementClassName)));
},
addClassName:function(element,className){
if(!(element=$(element)))return;
if(!Element.hasClassName(element,className))
element.className+=(element.className?' ':'')+className;
return element;
},
removeClassName:function(element,className){
if(!(element=$(element)))return;
element.className=element.className.replace(
new RegExp("(^|\\s+)"+className+"(\\s+|$)"),' ').strip();
return element;
},
toggleClassName:function(element,className){
if(!(element=$(element)))return;
return Element[Element.hasClassName(element,className)?
'removeClassName':'addClassName'](element,className);
},
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.blank();
},
descendantOf:function(element,ancestor){
element=$(element),ancestor=$(ancestor);
if(element.compareDocumentPosition)
return(element.compareDocumentPosition(ancestor)&8)===8;
if(ancestor.contains)
return ancestor.contains(element)&&ancestor!==element;
while(element=element.parentNode)
if(element==ancestor)return true;
return false;
},
scrollTo:function(element){
element=$(element);
var pos=Element.cumulativeOffset(element);
window.scrollTo(pos[0],pos[1]);
return element;
},
getStyle:function(element,style){
element=$(element);
style=style=='float'?'cssFloat':style.camelize();
var value=element.style[style];
if(!value||value=='auto'){
var css=document.defaultView.getComputedStyle(element,null);
value=css?css[style]:null;
}
if(style=='opacity')return value?parseFloat(value):1.0;
return value=='auto'?null:value;
},
getOpacity:function(element){
return $(element).getStyle('opacity');
},
setStyle:function(element,styles){
element=$(element);
var elementStyle=element.style,match;
if(Object.isString(styles)){
element.style.cssText+=';'+styles;
return styles.include('opacity')?
element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]):element;
}
for(var property in styles)
if(property=='opacity')element.setOpacity(styles[property]);
else
elementStyle[(property=='float'||property=='cssFloat')?
(Object.isUndefined(elementStyle.styleFloat)?'cssFloat':'styleFloat'):
property]=styles[property];
return element;
},
setOpacity:function(element,value){
element=$(element);
element.style.opacity=(value==1||value==='')?'':
(value<0.00001)?0:value;
return element;
},
getDimensions:function(element){
element=$(element);
var display=Element.getStyle(element,'display');
if(display!='none'&&display!=null)
return{width:element.offsetWidth,height:element.offsetHeight};
var els=element.style;
var originalVisibility=els.visibility;
var originalPosition=els.position;
var originalDisplay=els.display;
els.visibility='hidden';
if(originalPosition!='fixed')
els.position='absolute';
els.display='block';
var originalWidth=element.clientWidth;
var originalHeight=element.clientHeight;
els.display=originalDisplay;
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(Prototype.Browser.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.getStyle(element,'overflow')||'auto';
if(element._overflow!=='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;
},
cumulativeOffset:function(element){
var valueT=0,valueL=0;
do{
valueT+=element.offsetTop||0;
valueL+=element.offsetLeft||0;
element=element.offsetParent;
}while(element);
return Element._returnOffset(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.toUpperCase()=='BODY')break;
var p=Element.getStyle(element,'position');
if(p!=='static')break;
}
}while(element);
return Element._returnOffset(valueL,valueT);
},
absolutize:function(element){
element=$(element);
if(Element.getStyle(element,'position')=='absolute')return element;
var offsets=Element.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';
return element;
},
relativize:function(element){
element=$(element);
if(Element.getStyle(element,'position')=='relative')return element;
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;
return element;
},
cumulativeScrollOffset:function(element){
var valueT=0,valueL=0;
do{
valueT+=element.scrollTop||0;
valueL+=element.scrollLeft||0;
element=element.parentNode;
}while(element);
return Element._returnOffset(valueL,valueT);
},
getOffsetParent: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);
},
viewportOffset:function(forElement){
var valueT=0,valueL=0;
var element=forElement;
do{
valueT+=element.offsetTop||0;
valueL+=element.offsetLeft||0;
if(element.offsetParent==document.body&&
Element.getStyle(element,'position')=='absolute')break;
}while(element=element.offsetParent);
element=forElement;
do{
if(!Prototype.Browser.Opera||(element.tagName&&(element.tagName.toUpperCase()=='BODY'))){
valueT-=element.scrollTop||0;
valueL-=element.scrollLeft||0;
}
}while(element=element.parentNode);
return Element._returnOffset(valueL,valueT);
},
clonePosition:function(element,source){
var options=Object.extend({
setLeft:true,
setTop:true,
setWidth:true,
setHeight:true,
offsetTop:0,
offsetLeft:0
},arguments[2]||{});
source=$(source);
var p=Element.viewportOffset(source);
element=$(element);
var delta=[0,0];
var parent=null;
if(Element.getStyle(element,'position')=='absolute'){
parent=Element.getOffsetParent(element);
delta=Element.viewportOffset(parent);
}
if(parent==document.body){
delta[0]-=document.body.offsetLeft;
delta[1]-=document.body.offsetTop;
}
if(options.setLeft)element.style.left=(p[0]-delta[0]+options.offsetLeft)+'px';
if(options.setTop)element.style.top=(p[1]-delta[1]+options.offsetTop)+'px';
if(options.setWidth)element.style.width=source.offsetWidth+'px';
if(options.setHeight)element.style.height=source.offsetHeight+'px';
return element;
}
};
Object.extend(Element.Methods,{
getElementsBySelector:Element.Methods.select,
childElements:Element.Methods.immediateDescendants
});
Element._attributeTranslations={
write:{
names:{
className:'class',
htmlFor:'for'
},
values:{}
}
};
if(Prototype.Browser.Opera){
Element.Methods.getStyle=Element.Methods.getStyle.wrap(
function(proceed,element,style){
switch(style){
case'left':case'top':case'right':case'bottom':
if(proceed(element,'position')==='static')return null;
case'height':case'width':
if(!Element.visible(element))return null;
var dim=parseInt(proceed(element,style),10);
if(dim!==element['offset'+style.capitalize()])
return dim+'px';
var properties;
if(style==='height'){
properties=['border-top-width','padding-top',
'padding-bottom','border-bottom-width'];
}
else{
properties=['border-left-width','padding-left',
'padding-right','border-right-width'];
}
return properties.inject(dim,function(memo,property){
var val=proceed(element,property);
return val===null?memo:memo-parseInt(val,10);
})+'px';
default:return proceed(element,style);
}
}
);
Element.Methods.readAttribute=Element.Methods.readAttribute.wrap(
function(proceed,element,attribute){
if(attribute==='title')return element.title;
return proceed(element,attribute);
}
);
}
else if(Prototype.Browser.IE){
Element.Methods.getOffsetParent=Element.Methods.getOffsetParent.wrap(
function(proceed,element){
element=$(element);
try{element.offsetParent}
catch(e){return $(document.body)}
var position=element.getStyle('position');
if(position!=='static')return proceed(element);
element.setStyle({position:'relative'});
var value=proceed(element);
element.setStyle({position:position});
return value;
}
);
$w('positionedOffset viewportOffset').each(function(method){
Element.Methods[method]=Element.Methods[method].wrap(
function(proceed,element){
element=$(element);
try{element.offsetParent}
catch(e){return Element._returnOffset(0,0)}
var position=element.getStyle('position');
if(position!=='static')return proceed(element);
var offsetParent=element.getOffsetParent();
if(offsetParent&&offsetParent.getStyle('position')==='fixed')
offsetParent.setStyle({zoom:1});
element.setStyle({position:'relative'});
var value=proceed(element);
element.setStyle({position:position});
return value;
}
);
});
Element.Methods.cumulativeOffset=Element.Methods.cumulativeOffset.wrap(
function(proceed,element){
try{element.offsetParent}
catch(e){return Element._returnOffset(0,0)}
return proceed(element);
}
);
Element.Methods.getStyle=function(element,style){
element=$(element);
style=(style=='float'||style=='cssFloat')?'styleFloat':style.camelize();
var value=element.style[style];
if(!value&&element.currentStyle)value=element.currentStyle[style];
if(style=='opacity'){
if(value=(element.getStyle('filter')||'').match(/alpha\(opacity=(.*)\)/))
if(value[1])return parseFloat(value[1])/100;
return 1.0;
}
if(value=='auto'){
if((style=='width'||style=='height')&&(element.getStyle('display')!='none'))
return element['offset'+style.capitalize()]+'px';
return null;
}
return value;
};
Element.Methods.setOpacity=function(element,value){
function stripAlpha(filter){
return filter.replace(/alpha\([^\)]*\)/gi,'');
}
element=$(element);
var currentStyle=element.currentStyle;
if((currentStyle&&!currentStyle.hasLayout)||
(!currentStyle&&element.style.zoom=='normal'))
element.style.zoom=1;
var filter=element.getStyle('filter'),style=element.style;
if(value==1||value===''){
(filter=stripAlpha(filter))?
style.filter=filter:style.removeAttribute('filter');
return element;
}else if(value<0.00001)value=0;
style.filter=stripAlpha(filter)+
'alpha(opacity='+(value*100)+')';
return element;
};
Element._attributeTranslations=(function(){
var classProp='className';
var forProp='for';
var el=document.createElement('div');
el.setAttribute(classProp,'x');
if(el.className!=='x'){
el.setAttribute('class','x');
if(el.className==='x'){
classProp='class';
}
}
el=null;
el=document.createElement('label');
el.setAttribute(forProp,'x');
if(el.htmlFor!=='x'){
el.setAttribute('htmlFor','x');
if(el.htmlFor==='x'){
forProp='htmlFor';
}
}
el=null;
return{
read:{
names:{
'class':classProp,
'className':classProp,
'for':forProp,
'htmlFor':forProp
},
values:{
_getAttr:function(element,attribute){
return element.getAttribute(attribute);
},
_getAttr2:function(element,attribute){
return element.getAttribute(attribute,2);
},
_getAttrNode:function(element,attribute){
var node=element.getAttributeNode(attribute);
return node?node.value:"";
},
_getEv:(function(){
var el=document.createElement('div');
el.onclick=Prototype.emptyFunction;
var value=el.getAttribute('onclick');
var f;
if(String(value).indexOf('{')>-1){
f=function(element,attribute){
attribute=element.getAttribute(attribute);
if(!attribute)return null;
attribute=attribute.toString();
attribute=attribute.split('{')[1];
attribute=attribute.split('}')[0];
return attribute.strip();
};
}
else if(value===''){
f=function(element,attribute){
attribute=element.getAttribute(attribute);
if(!attribute)return null;
return attribute.strip();
};
}
el=null;
return f;
})(),
_flag:function(element,attribute){
return $(element).hasAttribute(attribute)?attribute:null;
},
style:function(element){
return element.style.cssText.toLowerCase();
},
title:function(element){
return element.title;
}
}
}
}
})();
Element._attributeTranslations.write={
names:Object.extend({
cellpadding:'cellPadding',
cellspacing:'cellSpacing'
},Element._attributeTranslations.read.names),
values:{
checked:function(element,value){
element.checked=!!value;
},
style:function(element,value){
element.style.cssText=value?value:'';
}
}
};
Element._attributeTranslations.has={};
$w('colSpan rowSpan vAlign dateTime accessKey tabIndex '+
'encType maxLength readOnly longDesc frameBorder').each(function(attr){
Element._attributeTranslations.write.names[attr.toLowerCase()]=attr;
Element._attributeTranslations.has[attr.toLowerCase()]=attr;
});
(function(v){
Object.extend(v,{
href:v._getAttr2,
src:v._getAttr2,
type:v._getAttr,
action:v._getAttrNode,
disabled:v._flag,
checked:v._flag,
readonly:v._flag,
multiple:v._flag,
onload:v._getEv,
onunload:v._getEv,
onclick:v._getEv,
ondblclick:v._getEv,
onmousedown:v._getEv,
onmouseup:v._getEv,
onmouseover:v._getEv,
onmousemove:v._getEv,
onmouseout:v._getEv,
onfocus:v._getEv,
onblur:v._getEv,
onkeypress:v._getEv,
onkeydown:v._getEv,
onkeyup:v._getEv,
onsubmit:v._getEv,
onreset:v._getEv,
onselect:v._getEv,
onchange:v._getEv
});
})(Element._attributeTranslations.read.values);
if(Prototype.BrowserFeatures.ElementExtensions){
(function(){
function _descendants(element){
var nodes=element.getElementsByTagName('*'),results=[];
for(var i=0,node;node=nodes[i];i++)
if(node.tagName!=="!")
results.push(node);
return results;
}
Element.Methods.down=function(element,expression,index){
element=$(element);
if(arguments.length==1)return element.firstDescendant();
return Object.isNumber(expression)?_descendants(element)[expression]:
Element.select(element,expression)[index||0];
}
})();
}
}
else if(Prototype.Browser.Gecko&&/rv:1\.8\.0/.test(navigator.userAgent)){
Element.Methods.setOpacity=function(element,value){
element=$(element);
element.style.opacity=(value==1)?0.999999:
(value==='')?'':(value<0.00001)?0:value;
return element;
};
}
else if(Prototype.Browser.WebKit){
Element.Methods.setOpacity=function(element,value){
element=$(element);
element.style.opacity=(value==1||value==='')?'':
(value<0.00001)?0:value;
if(value==1)
if(element.tagName.toUpperCase()=='IMG'&&element.width){
element.width++;element.width--;
}else try{
var n=document.createTextNode(' ');
element.appendChild(n);
element.removeChild(n);
}catch(e){}
return element;
};
Element.Methods.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 Element._returnOffset(valueL,valueT);
};
}
if('outerHTML'in document.documentElement){
Element.Methods.replace=function(element,content){
element=$(element);
if(content&&content.toElement)content=content.toElement();
if(Object.isElement(content)){
element.parentNode.replaceChild(content,element);
return element;
}
content=Object.toHTML(content);
var parent=element.parentNode,tagName=parent.tagName.toUpperCase();
if(Element._insertionTranslations.tags[tagName]){
var nextSibling=element.next();
var fragments=Element._getContentFromAnonymousElement(tagName,content.stripScripts());
parent.removeChild(element);
if(nextSibling)
fragments.each(function(node){parent.insertBefore(node,nextSibling)});
else
fragments.each(function(node){parent.appendChild(node)});
}
else element.outerHTML=content.stripScripts();
content.evalScripts.bind(content).defer();
return element;
};
}
Element._returnOffset=function(l,t){
var result=[l,t];
result.left=l;
result.top=t;
return result;
};
Element._getContentFromAnonymousElement=function(tagName,html){
var div=new Element('div'),t=Element._insertionTranslations.tags[tagName];
if(t){
div.innerHTML=t[0]+html+t[1];
t[2].times(function(){div=div.firstChild});
}else div.innerHTML=html;
return $A(div.childNodes);
};
Element._insertionTranslations={
before:function(element,node){
element.parentNode.insertBefore(node,element);
},
top:function(element,node){
element.insertBefore(node,element.firstChild);
},
bottom:function(element,node){
element.appendChild(node);
},
after:function(element,node){
element.parentNode.insertBefore(node,element.nextSibling);
},
tags:{
TABLE:['<table>','</table>',1],
TBODY:['<table><tbody>','</tbody></table>',2],
TR:['<table><tbody><tr>','</tr></tbody></table>',3],
TD:['<table><tbody><tr><td>','</td></tr></tbody></table>',4],
SELECT:['<select>','</select>',1]
}
};
(function(){
var tags=Element._insertionTranslations.tags;
Object.extend(tags,{
THEAD:tags.TBODY,
TFOOT:tags.TBODY,
TH:tags.TD
});
})();
Element.Methods.Simulated={
hasAttribute:function(element,attribute){
attribute=Element._attributeTranslations.has[attribute]||attribute;
var node=$(element).getAttributeNode(attribute);
return!!(node&&node.specified);
}
};
Element.Methods.ByTag={};
Object.extend(Element,Element.Methods);
(function(div){
if(!Prototype.BrowserFeatures.ElementExtensions&&div['__proto__']){
window.HTMLElement={};
window.HTMLElement.prototype=div['__proto__'];
Prototype.BrowserFeatures.ElementExtensions=true;
}
div=null;
})(document.createElement('div'))
Element.extend=(function(){
function checkDeficiency(tagName){
if(typeof window.Element!='undefined'){
var proto=window.Element.prototype;
if(proto){
var id='_'+(Math.random()+'').slice(2);
var el=document.createElement(tagName);
proto[id]='x';
var isBuggy=(el[id]!=='x');
delete proto[id];
el=null;
return isBuggy;
}
}
return false;
}
function extendElementWith(element,methods){
for(var property in methods){
var value=methods[property];
if(Object.isFunction(value)&&!(property in element))
element[property]=value.methodize();
}
}
var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY=checkDeficiency('object');
if(Prototype.BrowserFeatures.SpecificElementExtensions){
if(HTMLOBJECTELEMENT_PROTOTYPE_BUGGY){
return function(element){
if(element&&typeof element._extendedByPrototype=='undefined'){
var t=element.tagName;
if(t&&(/^(?:object|applet|embed)$/i.test(t))){
extendElementWith(element,Element.Methods);
extendElementWith(element,Element.Methods.Simulated);
extendElementWith(element,Element.Methods.ByTag[t.toUpperCase()]);
}
}
return element;
}
}
return Prototype.K;
}
var Methods={},ByTag=Element.Methods.ByTag;
var extend=Object.extend(function(element){
if(!element||typeof element._extendedByPrototype!='undefined'||
element.nodeType!=1||element==window)return element;
var methods=Object.clone(Methods),
tagName=element.tagName.toUpperCase();
if(ByTag[tagName])Object.extend(methods,ByTag[tagName]);
extendElementWith(element,methods);
element._extendedByPrototype=Prototype.emptyFunction;
return element;
},{
refresh:function(){
if(!Prototype.BrowserFeatures.ElementExtensions){
Object.extend(Methods,Element.Methods);
Object.extend(Methods,Element.Methods.Simulated);
}
}
});
extend.refresh();
return extend;
})();
Element.hasAttribute=function(element,attribute){
if(element.hasAttribute)return element.hasAttribute(attribute);
return Element.Methods.Simulated.hasAttribute(element,attribute);
};
Element.addMethods=function(methods){
var F=Prototype.BrowserFeatures,T=Element.Methods.ByTag;
if(!methods){
Object.extend(Form,Form.Methods);
Object.extend(Form.Element,Form.Element.Methods);
Object.extend(Element.Methods.ByTag,{
"FORM":Object.clone(Form.Methods),
"INPUT":Object.clone(Form.Element.Methods),
"SELECT":Object.clone(Form.Element.Methods),
"TEXTAREA":Object.clone(Form.Element.Methods)
});
}
if(arguments.length==2){
var tagName=methods;
methods=arguments[1];
}
if(!tagName)Object.extend(Element.Methods,methods||{});
else{
if(Object.isArray(tagName))tagName.each(extend);
else extend(tagName);
}
function extend(tagName){
tagName=tagName.toUpperCase();
if(!Element.Methods.ByTag[tagName])
Element.Methods.ByTag[tagName]={};
Object.extend(Element.Methods.ByTag[tagName],methods);
}
function copy(methods,destination,onlyIfAbsent){
onlyIfAbsent=onlyIfAbsent||false;
for(var property in methods){
var value=methods[property];
if(!Object.isFunction(value))continue;
if(!onlyIfAbsent||!(property in destination))
destination[property]=value.methodize();
}
}
function findDOMClass(tagName){
var klass;
var trans={
"OPTGROUP":"OptGroup","TEXTAREA":"TextArea","P":"Paragraph",
"FIELDSET":"FieldSet","UL":"UList","OL":"OList","DL":"DList",
"DIR":"Directory","H1":"Heading","H2":"Heading","H3":"Heading",
"H4":"Heading","H5":"Heading","H6":"Heading","Q":"Quote",
"INS":"Mod","DEL":"Mod","A":"Anchor","IMG":"Image","CAPTION":
"TableCaption","COL":"TableCol","COLGROUP":"TableCol","THEAD":
"TableSection","TFOOT":"TableSection","TBODY":"TableSection","TR":
"TableRow","TH":"TableCell","TD":"TableCell","FRAMESET":
"FrameSet","IFRAME":"IFrame"
};
if(trans[tagName])klass='HTML'+trans[tagName]+'Element';
if(window[klass])return window[klass];
klass='HTML'+tagName+'Element';
if(window[klass])return window[klass];
klass='HTML'+tagName.capitalize()+'Element';
if(window[klass])return window[klass];
var element=document.createElement(tagName);
var proto=element['__proto__']||element.constructor.prototype;
element=null;
return proto;
}
var elementPrototype=window.HTMLElement?HTMLElement.prototype:
Element.prototype;
if(F.ElementExtensions){
copy(Element.Methods,elementPrototype);
copy(Element.Methods.Simulated,elementPrototype,true);
}
if(F.SpecificElementExtensions){
for(var tag in Element.Methods.ByTag){
var klass=findDOMClass(tag);
if(Object.isUndefined(klass))continue;
copy(T[tag],klass.prototype);
}
}
Object.extend(Element,Element.Methods);
delete Element.ByTag;
if(Element.extend.refresh)Element.extend.refresh();
Element.cache={};
};
document.viewport={
getDimensions:function(){
return{width:this.getWidth(),height:this.getHeight()};
},
getScrollOffsets:function(){
return Element._returnOffset(
window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft,
window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop);
}
};
(function(viewport){
var B=Prototype.Browser,doc=document,element,property={};
function getRootElement(){
if(B.WebKit&&!doc.evaluate)
return document;
if(B.Opera&&window.parseFloat(window.opera.version())<9.5)
return document.body;
return document.documentElement;
}
function define(D){
if(!element)element=getRootElement();
property[D]='client'+D;
viewport['get'+D]=function(){return element[property[D]]};
return viewport['get'+D]();
}
viewport.getWidth=define.curry('Width');
viewport.getHeight=define.curry('Height');
})(document.viewport);
Element.Storage={
UID:1
};
Element.addMethods({
getStorage:function(element){
if(!(element=$(element)))return;
var uid;
if(element===window){
uid=0;
}else{
if(typeof element._prototypeUID==="undefined")
element._prototypeUID=[Element.Storage.UID++];
uid=element._prototypeUID[0];
}
if(!Element.Storage[uid])
Element.Storage[uid]=$H();
return Element.Storage[uid];
},
store:function(element,key,value){
if(!(element=$(element)))return;
if(arguments.length===2){
Element.getStorage(element).update(key);
}else{
Element.getStorage(element).set(key,value);
}
return element;
},
retrieve:function(element,key,defaultValue){
if(!(element=$(element)))return;
var hash=Element.getStorage(element),value=hash.get(key);
if(Object.isUndefined(value)){
hash.set(key,defaultValue);
value=defaultValue;
}
return value;
},
clone:function(element,deep){
if(!(element=$(element)))return;
var clone=element.cloneNode(deep);
clone._prototypeUID=void 0;
if(deep){
var descendants=Element.select(clone,'*'),
i=descendants.length;
while(i--){
descendants[i]._prototypeUID=void 0;
}
}
return Element.extend(clone);
}
});
var Selector=Class.create({
initialize:function(expression){
this.expression=expression.strip();
if(this.shouldUseSelectorsAPI()){
this.mode='selectorsAPI';
}else if(this.shouldUseXPath()){
this.mode='xpath';
this.compileXPathMatcher();
}else{
this.mode="normal";
this.compileMatcher();
}
},
shouldUseXPath:(function(){
var IS_DESCENDANT_SELECTOR_BUGGY=(function(){
var isBuggy=false;
if(document.evaluate&&window.XPathResult){
var el=document.createElement('div');
el.innerHTML='<ul><li></li></ul><div><ul><li></li></ul></div>';
var xpath=".//*[local-name()='ul' or local-name()='UL']"+
"//*[local-name()='li' or local-name()='LI']";
var result=document.evaluate(xpath,el,null,
XPathResult.ORDERED_NODE_SNAPSHOT_TYPE,null);
isBuggy=(result.snapshotLength!==2);
el=null;
}
return isBuggy;
})();
return function(){
if(!Prototype.BrowserFeatures.XPath)return false;
var e=this.expression;
if(Prototype.Browser.WebKit&&
(e.include("-of-type")||e.include(":empty")))
return false;
if((/(\[[\w-]*?:|:checked)/).test(e))
return false;
if(IS_DESCENDANT_SELECTOR_BUGGY)return false;
return true;
}
})(),
shouldUseSelectorsAPI:function(){
if(!Prototype.BrowserFeatures.SelectorsAPI)return false;
if(Selector.CASE_INSENSITIVE_CLASS_NAMES)return false;
if(!Selector._div)Selector._div=new Element('div');
try{
Selector._div.querySelector(this.expression);
}catch(e){
return false;
}
return true;
},
compileMatcher:function(){
var e=this.expression,ps=Selector.patterns,h=Selector.handlers,
c=Selector.criteria,le,p,m,len=ps.length,name;
if(Selector._cache[e]){
this.matcher=Selector._cache[e];
return;
}
this.matcher=["this.matcher = function(root) {",
"var r = root, h = Selector.handlers, c = false, n;"];
while(e&&le!=e&&(/\S/).test(e)){
le=e;
for(var i=0;i<len;i++){
p=ps[i].re;
name=ps[i].name;
if(m=e.match(p)){
this.matcher.push(Object.isFunction(c[name])?c[name](m):
new Template(c[name]).evaluate(m));
e=e.replace(m[0],'');
break;
}
}
}
this.matcher.push("return h.unique(n);\n}");
eval(this.matcher.join('\n'));
Selector._cache[this.expression]=this.matcher;
},
compileXPathMatcher:function(){
var e=this.expression,ps=Selector.patterns,
x=Selector.xpath,le,m,len=ps.length,name;
if(Selector._cache[e]){
this.xpath=Selector._cache[e];return;
}
this.matcher=['.//*'];
while(e&&le!=e&&(/\S/).test(e)){
le=e;
for(var i=0;i<len;i++){
name=ps[i].name;
if(m=e.match(ps[i].re)){
this.matcher.push(Object.isFunction(x[name])?x[name](m):
new Template(x[name]).evaluate(m));
e=e.replace(m[0],'');
break;
}
}
}
this.xpath=this.matcher.join('');
Selector._cache[this.expression]=this.xpath;
},
findElements:function(root){
root=root||document;
var e=this.expression,results;
switch(this.mode){
case'selectorsAPI':
if(root!==document){
var oldId=root.id,id=$(root).identify();
id=id.replace(/([\.:])/g,"\\$1");
e="#"+id+" "+e;
}
results=$A(root.querySelectorAll(e)).map(Element.extend);
root.id=oldId;
return results;
case'xpath':
return document._getElementsByXPath(this.xpath,root);
default:
return this.matcher(root);
}
},
match:function(element){
this.tokens=[];
var e=this.expression,ps=Selector.patterns,as=Selector.assertions;
var le,p,m,len=ps.length,name;
while(e&&le!==e&&(/\S/).test(e)){
le=e;
for(var i=0;i<len;i++){
p=ps[i].re;
name=ps[i].name;
if(m=e.match(p)){
if(as[name]){
this.tokens.push([name,Object.clone(m)]);
e=e.replace(m[0],'');
}else{
return this.findElements(document).include(element);
}
}
}
}
var match=true,name,matches;
for(var i=0,token;token=this.tokens[i];i++){
name=token[0],matches=token[1];
if(!Selector.assertions[name](element,matches)){
match=false;break;
}
}
return match;
},
toString:function(){
return this.expression;
},
inspect:function(){
return"#<Selector:"+this.expression.inspect()+">";
}
});
if(Prototype.BrowserFeatures.SelectorsAPI&&
document.compatMode==='BackCompat'){
Selector.CASE_INSENSITIVE_CLASS_NAMES=(function(){
var div=document.createElement('div'),
span=document.createElement('span');
div.id="prototype_test_id";
span.className='Test';
div.appendChild(span);
var isIgnored=(div.querySelector('#prototype_test_id .test')!==null);
div=span=null;
return isIgnored;
})();
}
Object.extend(Selector,{
_cache:{},
xpath:{
descendant:"//*",
child:"/*",
adjacent:"/following-sibling::*[1]",
laterSibling:'/following-sibling::*',
tagName:function(m){
if(m[1]=='*')return'';
return"[local-name()='"+m[1].toLowerCase()+
"' or local-name()='"+m[1].toUpperCase()+"']";
},
className:"[contains(concat(' ', @class, ' '), ' #{1} ')]",
id:"[@id='#{1}']",
attrPresence:function(m){
m[1]=m[1].toLowerCase();
return new Template("[@#{1}]").evaluate(m);
},
attr:function(m){
m[1]=m[1].toLowerCase();
m[3]=m[5]||m[6];
return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
},
pseudo:function(m){
var h=Selector.xpath.pseudos[m[1]];
if(!h)return'';
if(Object.isFunction(h))return h(m);
return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
},
operators:{
'=':"[@#{1}='#{3}']",
'!=':"[@#{1}!='#{3}']",
'^=':"[starts-with(@#{1}, '#{3}')]",
'$=':"[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
'*=':"[contains(@#{1}, '#{3}')]",
'~=':"[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
'|=':"[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
},
pseudos:{
'first-child':'[not(preceding-sibling::*)]',
'last-child':'[not(following-sibling::*)]',
'only-child':'[not(preceding-sibling::* or following-sibling::*)]',
'empty':"[count(*) = 0 and (count(text()) = 0)]",
'checked':"[@checked]",
'disabled':"[(@disabled) and (@type!='hidden')]",
'enabled':"[not(@disabled) and (@type!='hidden')]",
'not':function(m){
var e=m[6],p=Selector.patterns,
x=Selector.xpath,le,v,len=p.length,name;
var exclusion=[];
while(e&&le!=e&&(/\S/).test(e)){
le=e;
for(var i=0;i<len;i++){
name=p[i].name
if(m=e.match(p[i].re)){
v=Object.isFunction(x[name])?x[name](m):new Template(x[name]).evaluate(m);
exclusion.push("("+v.substring(1,v.length-1)+")");
e=e.replace(m[0],'');
break;
}
}
}
return"[not("+exclusion.join(" and ")+")]";
},
'nth-child':function(m){
return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ",m);
},
'nth-last-child':function(m){
return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ",m);
},
'nth-of-type':function(m){
return Selector.xpath.pseudos.nth("position() ",m);
},
'nth-last-of-type':function(m){
return Selector.xpath.pseudos.nth("(last() + 1 - position()) ",m);
},
'first-of-type':function(m){
m[6]="1";return Selector.xpath.pseudos['nth-of-type'](m);
},
'last-of-type':function(m){
m[6]="1";return Selector.xpath.pseudos['nth-last-of-type'](m);
},
'only-of-type':function(m){
var p=Selector.xpath.pseudos;return p['first-of-type'](m)+p['last-of-type'](m);
},
nth:function(fragment,m){
var mm,formula=m[6],predicate;
if(formula=='even')formula='2n+0';
if(formula=='odd')formula='2n+1';
if(mm=formula.match(/^(\d+)$/))
return'['+fragment+"= "+mm[1]+']';
if(mm=formula.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(mm[1]=="-")mm[1]=-1;
var a=mm[1]?Number(mm[1]):1;
var b=mm[2]?Number(mm[2]):0;
predicate="[((#{fragment} - #{b}) mod #{a} = 0) and "+
"((#{fragment} - #{b}) div #{a} >= 0)]";
return new Template(predicate).evaluate({
fragment:fragment,a:a,b:b});
}
}
}
},
criteria:{
tagName:'n = h.tagName(n, r, "#{1}", c);      c = false;',
className:'n = h.className(n, r, "#{1}", c);    c = false;',
id:'n = h.id(n, r, "#{1}", c);           c = false;',
attrPresence:'n = h.attrPresence(n, r, "#{1}", c); c = false;',
attr:function(m){
m[3]=(m[5]||m[6]);
return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);
},
pseudo:function(m){
if(m[6])m[6]=m[6].replace(/"/g,'\\"');
return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
},
descendant:'c = "descendant";',
child:'c = "child";',
adjacent:'c = "adjacent";',
laterSibling:'c = "laterSibling";'
},
patterns:[
{name:'laterSibling',re:/^\s*~\s*/},
{name:'child',re:/^\s*>\s*/},
{name:'adjacent',re:/^\s*\+\s*/},
{name:'descendant',re:/^\s/},
{name:'tagName',re:/^\s*(\*|[\w\-]+)(\b|$)?/},
{name:'id',re:/^#([\w\-\*]+)(\b|$)/},
{name:'className',re:/^\.([\w\-\*]+)(\b|$)/},
{name:'pseudo',re:/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/},
{name:'attrPresence',re:/^\[((?:[\w-]+:)?[\w-]+)\]/},
{name:'attr',re:/\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/}
],
assertions:{
tagName:function(element,matches){
return matches[1].toUpperCase()==element.tagName.toUpperCase();
},
className:function(element,matches){
return Element.hasClassName(element,matches[1]);
},
id:function(element,matches){
return element.id===matches[1];
},
attrPresence:function(element,matches){
return Element.hasAttribute(element,matches[1]);
},
attr:function(element,matches){
var nodeValue=Element.readAttribute(element,matches[1]);
return nodeValue&&Selector.operators[matches[2]](nodeValue,matches[5]||matches[6]);
}
},
handlers:{
concat:function(a,b){
for(var i=0,node;node=b[i];i++)
a.push(node);
return a;
},
mark:function(nodes){
var _true=Prototype.emptyFunction;
for(var i=0,node;node=nodes[i];i++)
node._countedByPrototype=_true;
return nodes;
},
unmark:(function(){
var PROPERTIES_ATTRIBUTES_MAP=(function(){
var el=document.createElement('div'),
isBuggy=false,
propName='_countedByPrototype',
value='x'
el[propName]=value;
isBuggy=(el.getAttribute(propName)===value);
el=null;
return isBuggy;
})();
return PROPERTIES_ATTRIBUTES_MAP?
function(nodes){
for(var i=0,node;node=nodes[i];i++)
node.removeAttribute('_countedByPrototype');
return nodes;
}:
function(nodes){
for(var i=0,node;node=nodes[i];i++)
node._countedByPrototype=void 0;
return nodes;
}
})(),
index:function(parentNode,reverse,ofType){
parentNode._countedByPrototype=Prototype.emptyFunction;
if(reverse){
for(var nodes=parentNode.childNodes,i=nodes.length-1,j=1;i>=0;i--){
var node=nodes[i];
if(node.nodeType==1&&(!ofType||node._countedByPrototype))node.nodeIndex=j++;
}
}else{
for(var i=0,j=1,nodes=parentNode.childNodes;node=nodes[i];i++)
if(node.nodeType==1&&(!ofType||node._countedByPrototype))node.nodeIndex=j++;
}
},
unique:function(nodes){
if(nodes.length==0)return nodes;
var results=[],n;
for(var i=0,l=nodes.length;i<l;i++)
if(typeof(n=nodes[i])._countedByPrototype=='undefined'){
n._countedByPrototype=Prototype.emptyFunction;
results.push(Element.extend(n));
}
return Selector.handlers.unmark(results);
},
descendant:function(nodes){
var h=Selector.handlers;
for(var i=0,results=[],node;node=nodes[i];i++)
h.concat(results,node.getElementsByTagName('*'));
return results;
},
child:function(nodes){
var h=Selector.handlers;
for(var i=0,results=[],node;node=nodes[i];i++){
for(var j=0,child;child=node.childNodes[j];j++)
if(child.nodeType==1&&child.tagName!='!')results.push(child);
}
return results;
},
adjacent:function(nodes){
for(var i=0,results=[],node;node=nodes[i];i++){
var next=this.nextElementSibling(node);
if(next)results.push(next);
}
return results;
},
laterSibling:function(nodes){
var h=Selector.handlers;
for(var i=0,results=[],node;node=nodes[i];i++)
h.concat(results,Element.nextSiblings(node));
return results;
},
nextElementSibling:function(node){
while(node=node.nextSibling)
if(node.nodeType==1)return node;
return null;
},
previousElementSibling:function(node){
while(node=node.previousSibling)
if(node.nodeType==1)return node;
return null;
},
tagName:function(nodes,root,tagName,combinator){
var uTagName=tagName.toUpperCase();
var results=[],h=Selector.handlers;
if(nodes){
if(combinator){
if(combinator=="descendant"){
for(var i=0,node;node=nodes[i];i++)
h.concat(results,node.getElementsByTagName(tagName));
return results;
}else nodes=this[combinator](nodes);
if(tagName=="*")return nodes;
}
for(var i=0,node;node=nodes[i];i++)
if(node.tagName.toUpperCase()===uTagName)results.push(node);
return results;
}else return root.getElementsByTagName(tagName);
},
id:function(nodes,root,id,combinator){
var targetNode=$(id),h=Selector.handlers;
if(root==document){
if(!targetNode)return[];
if(!nodes)return[targetNode];
}else{
if(!root.sourceIndex||root.sourceIndex<1){
var nodes=root.getElementsByTagName('*');
for(var j=0,node;node=nodes[j];j++){
if(node.id===id)return[node];
}
}
}
if(nodes){
if(combinator){
if(combinator=='child'){
for(var i=0,node;node=nodes[i];i++)
if(targetNode.parentNode==node)return[targetNode];
}else if(combinator=='descendant'){
for(var i=0,node;node=nodes[i];i++)
if(Element.descendantOf(targetNode,node))return[targetNode];
}else if(combinator=='adjacent'){
for(var i=0,node;node=nodes[i];i++)
if(Selector.handlers.previousElementSibling(targetNode)==node)
return[targetNode];
}else nodes=h[combinator](nodes);
}
for(var i=0,node;node=nodes[i];i++)
if(node==targetNode)return[targetNode];
return[];
}
return(targetNode&&Element.descendantOf(targetNode,root))?[targetNode]:[];
},
className:function(nodes,root,className,combinator){
if(nodes&&combinator)nodes=this[combinator](nodes);
return Selector.handlers.byClassName(nodes,root,className);
},
byClassName:function(nodes,root,className){
if(!nodes)nodes=Selector.handlers.descendant([root]);
var needle=' '+className+' ';
for(var i=0,results=[],node,nodeClassName;node=nodes[i];i++){
nodeClassName=node.className;
if(nodeClassName.length==0)continue;
if(nodeClassName==className||(' '+nodeClassName+' ').include(needle))
results.push(node);
}
return results;
},
attrPresence:function(nodes,root,attr,combinator){
if(!nodes)nodes=root.getElementsByTagName("*");
if(nodes&&combinator)nodes=this[combinator](nodes);
var results=[];
for(var i=0,node;node=nodes[i];i++)
if(Element.hasAttribute(node,attr))results.push(node);
return results;
},
attr:function(nodes,root,attr,value,operator,combinator){
if(!nodes)nodes=root.getElementsByTagName("*");
if(nodes&&combinator)nodes=this[combinator](nodes);
var handler=Selector.operators[operator],results=[];
for(var i=0,node;node=nodes[i];i++){
var nodeValue=Element.readAttribute(node,attr);
if(nodeValue===null)continue;
if(handler(nodeValue,value))results.push(node);
}
return results;
},
pseudo:function(nodes,name,value,root,combinator){
if(nodes&&combinator)nodes=this[combinator](nodes);
if(!nodes)nodes=root.getElementsByTagName("*");
return Selector.pseudos[name](nodes,value,root);
}
},
pseudos:{
'first-child':function(nodes,value,root){
for(var i=0,results=[],node;node=nodes[i];i++){
if(Selector.handlers.previousElementSibling(node))continue;
results.push(node);
}
return results;
},
'last-child':function(nodes,value,root){
for(var i=0,results=[],node;node=nodes[i];i++){
if(Selector.handlers.nextElementSibling(node))continue;
results.push(node);
}
return results;
},
'only-child':function(nodes,value,root){
var h=Selector.handlers;
for(var i=0,results=[],node;node=nodes[i];i++)
if(!h.previousElementSibling(node)&&!h.nextElementSibling(node))
results.push(node);
return results;
},
'nth-child':function(nodes,formula,root){
return Selector.pseudos.nth(nodes,formula,root);
},
'nth-last-child':function(nodes,formula,root){
return Selector.pseudos.nth(nodes,formula,root,true);
},
'nth-of-type':function(nodes,formula,root){
return Selector.pseudos.nth(nodes,formula,root,false,true);
},
'nth-last-of-type':function(nodes,formula,root){
return Selector.pseudos.nth(nodes,formula,root,true,true);
},
'first-of-type':function(nodes,formula,root){
return Selector.pseudos.nth(nodes,"1",root,false,true);
},
'last-of-type':function(nodes,formula,root){
return Selector.pseudos.nth(nodes,"1",root,true,true);
},
'only-of-type':function(nodes,formula,root){
var p=Selector.pseudos;
return p['last-of-type'](p['first-of-type'](nodes,formula,root),formula,root);
},
getIndices:function(a,b,total){
if(a==0)return b>0?[b]:[];
return $R(1,total).inject([],function(memo,i){
if(0==(i-b)%a&&(i-b)/a>=0)memo.push(i);
return memo;
});
},
nth:function(nodes,formula,root,reverse,ofType){
if(nodes.length==0)return[];
if(formula=='even')formula='2n+0';
if(formula=='odd')formula='2n+1';
var h=Selector.handlers,results=[],indexed=[],m;
h.mark(nodes);
for(var i=0,node;node=nodes[i];i++){
if(!node.parentNode._countedByPrototype){
h.index(node.parentNode,reverse,ofType);
indexed.push(node.parentNode);
}
}
if(formula.match(/^\d+$/)){formula=Number(formula);
for(var i=0,node;node=nodes[i];i++)
if(node.nodeIndex==formula)results.push(node);
}else if(m=formula.match(/^(-?\d*)?n(([+-])(\d+))?/)){if(m[1]=="-")m[1]=-1;
var a=m[1]?Number(m[1]):1;
var b=m[2]?Number(m[2]):0;
var indices=Selector.pseudos.getIndices(a,b,nodes.length);
for(var i=0,node,l=indices.length;node=nodes[i];i++){
for(var j=0;j<l;j++)
if(node.nodeIndex==indices[j])results.push(node);
}
}
h.unmark(nodes);
h.unmark(indexed);
return results;
},
'empty':function(nodes,value,root){
for(var i=0,results=[],node;node=nodes[i];i++){
if(node.tagName=='!'||node.firstChild)continue;
results.push(node);
}
return results;
},
'not':function(nodes,selector,root){
var h=Selector.handlers,selectorType,m;
var exclusions=new Selector(selector).findElements(root);
h.mark(exclusions);
for(var i=0,results=[],node;node=nodes[i];i++)
if(!node._countedByPrototype)results.push(node);
h.unmark(exclusions);
return results;
},
'enabled':function(nodes,value,root){
for(var i=0,results=[],node;node=nodes[i];i++)
if(!node.disabled&&(!node.type||node.type!=='hidden'))
results.push(node);
return results;
},
'disabled':function(nodes,value,root){
for(var i=0,results=[],node;node=nodes[i];i++)
if(node.disabled)results.push(node);
return results;
},
'checked':function(nodes,value,root){
for(var i=0,results=[],node;node=nodes[i];i++)
if(node.checked)results.push(node);
return results;
}
},
operators:{
'=':function(nv,v){return nv==v;},
'!=':function(nv,v){return nv!=v;},
'^=':function(nv,v){return nv==v||nv&&nv.startsWith(v);},
'$=':function(nv,v){return nv==v||nv&&nv.endsWith(v);},
'*=':function(nv,v){return nv==v||nv&&nv.include(v);},
'~=':function(nv,v){return(' '+nv+' ').include(' '+v+' ');},
'|=':function(nv,v){return('-'+(nv||"").toUpperCase()+
'-').include('-'+(v||"").toUpperCase()+'-');}
},
split:function(expression){
var expressions=[];
expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/,function(m){
expressions.push(m[1].strip());
});
return expressions;
},
matchElements:function(elements,expression){
var matches=$$(expression),h=Selector.handlers;
h.mark(matches);
for(var i=0,results=[],element;element=elements[i];i++)
if(element._countedByPrototype)results.push(element);
h.unmark(matches);
return results;
},
findElement:function(elements,expression,index){
if(Object.isNumber(expression)){
index=expression;expression=false;
}
return Selector.matchElements(elements,expression||'*')[index||0];
},
findChildElements:function(element,expressions){
expressions=Selector.split(expressions.join(','));
var results=[],h=Selector.handlers;
for(var i=0,l=expressions.length,selector;i<l;i++){
selector=new Selector(expressions[i].strip());
h.concat(results,selector.findElements(element));
}
return(l>1)?h.unique(results):results;
}
});
if(Prototype.Browser.IE){
Object.extend(Selector.handlers,{
concat:function(a,b){
for(var i=0,node;node=b[i];i++)
if(node.tagName!=="!")a.push(node);
return a;
}
});
}
function $$(){
return Selector.findChildElements(document,$A(arguments));
}
var Form={
reset:function(form){
form=$(form);
form.reset();
return form;
},
serializeElements:function(elements,options){
if(typeof options!='object')options={hash:!!options};
else if(Object.isUndefined(options.hash))options.hash=true;
var key,value,submitted=false,submit=options.submit;
var data=elements.inject({},function(result,element){
if(!element.disabled&&element.name){
key=element.name;value=$(element).getValue();
if(value!=null&&element.type!='file'&&(element.type!='submit'||(!submitted&&
submit!==false&&(!submit||key==submit)&&(submitted=true)))){
if(key in result){
if(!Object.isArray(result[key]))result[key]=[result[key]];
result[key].push(value);
}
else result[key]=value;
}
}
return result;
});
return options.hash?data:Object.toQueryString(data);
}
};
Form.Methods={
serialize:function(form,options){
return Form.serializeElements(Form.getElements(form),options);
},
getElements:function(form){
var elements=$(form).getElementsByTagName('*'),
element,
arr=[],
serializers=Form.Element.Serializers;
for(var i=0;element=elements[i];i++){
arr.push(element);
}
return arr.inject([],function(elements,child){
if(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 $A(inputs).map(Element.extend);
for(var i=0,matchingInputs=[],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(form).invoke('disable');
return form;
},
enable:function(form){
form=$(form);
Form.getElements(form).invoke('enable');
return form;
},
findFirstElement:function(form){
var elements=$(form).getElements().findAll(function(element){
return'hidden'!=element.type&&!element.disabled;
});
var firstByIndex=elements.findAll(function(element){
return element.hasAttribute('tabIndex')&&element.tabIndex>=0;
}).sortBy(function(element){return element.tabIndex}).first();
return firstByIndex?firstByIndex:elements.find(function(element){
return/^(?:input|select|textarea)$/i.test(element.tagName);
});
},
focusFirstElement:function(form){
form=$(form);
form.findFirstElement().activate();
return form;
},
request:function(form,options){
form=$(form),options=Object.clone(options||{});
var params=options.parameters,action=form.readAttribute('action')||'';
if(action.blank())action=window.location.href;
options.parameters=form.serialize(true);
if(params){
if(Object.isString(params))params=params.toQueryParams();
Object.extend(options.parameters,params);
}
if(form.hasAttribute('method')&&!options.method)
options.method=form.method;
return new Ajax.Request(action,options);
}
};
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&&element.name){
var value=element.getValue();
if(value!=undefined){
var pair={};
pair[element.name]=value;
return Object.toQueryString(pair);
}
}
return'';
},
getValue:function(element){
element=$(element);
var method=element.tagName.toLowerCase();
return Form.Element.Serializers[method](element);
},
setValue:function(element,value){
element=$(element);
var method=element.tagName.toLowerCase();
Form.Element.Serializers[method](element,value);
return element;
},
clear:function(element){
$(element).value='';
return element;
},
present:function(element){
return $(element).value!='';
},
activate:function(element){
element=$(element);
try{
element.focus();
if(element.select&&(element.tagName.toLowerCase()!='input'||
!(/^(?:button|reset|submit)$/i.test(element.type))))
element.select();
}catch(e){}
return element;
},
disable:function(element){
element=$(element);
element.disabled=true;
return element;
},
enable:function(element){
element=$(element);
element.disabled=false;
return element;
}
};
var Field=Form.Element;
var $F=Form.Element.Methods.getValue;
Form.Element.Serializers={
input:function(element,value){
switch(element.type.toLowerCase()){
case'checkbox':
case'radio':
return Form.Element.Serializers.inputSelector(element,value);
default:
return Form.Element.Serializers.textarea(element,value);
}
},
inputSelector:function(element,value){
if(Object.isUndefined(value))return element.checked?element.value:null;
else element.checked=!!value;
},
textarea:function(element,value){
if(Object.isUndefined(value))return element.value;
else element.value=value;
},
select:function(element,value){
if(Object.isUndefined(value))
return this[element.type=='select-one'?
'selectOne':'selectMany'](element);
else{
var opt,currentValue,single=!Object.isArray(value);
for(var i=0,length=element.length;i<length;i++){
opt=element.options[i];
currentValue=this.optionValue(opt);
if(single){
if(currentValue==value){
opt.selected=true;
return;
}
}
else opt.selected=value.include(currentValue);
}
}
},
selectOne:function(element){
var index=element.selectedIndex;
return index>=0?this.optionValue(element.options[index]):null;
},
selectMany:function(element){
var values,length=element.length;
if(!length)return null;
for(var i=0,values=[];i<length;i++){
var opt=element.options[i];
if(opt.selected)values.push(this.optionValue(opt));
}
return values;
},
optionValue:function(opt){
return Element.extend(opt).hasAttribute('value')?opt.value:opt.text;
}
};
Abstract.TimedObserver=Class.create(PeriodicalExecuter,{
initialize:function($super,element,frequency,callback){
$super(callback,frequency);
this.element=$(element);
this.lastValue=this.getValue();
},
execute:function(){
var value=this.getValue();
if(Object.isString(this.lastValue)&&Object.isString(value)?
this.lastValue!=value:String(this.lastValue)!=String(value)){
this.callback(this.element,value);
this.lastValue=value;
}
}
});
Form.Element.Observer=Class.create(Abstract.TimedObserver,{
getValue:function(){
return Form.Element.getValue(this.element);
}
});
Form.Observer=Class.create(Abstract.TimedObserver,{
getValue:function(){
return Form.serialize(this.element);
}
});
Abstract.EventObserver=Class.create({
initialize:function(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,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(Abstract.EventObserver,{
getValue:function(){
return Form.Element.getValue(this.element);
}
});
Form.EventObserver=Class.create(Abstract.EventObserver,{
getValue:function(){
return Form.serialize(this.element);
}
});
(function(){
var Event={
KEY_BACKSPACE:8,
KEY_TAB:9,
KEY_RETURN:13,
KEY_ESC:27,
KEY_LEFT:37,
KEY_UP:38,
KEY_RIGHT:39,
KEY_DOWN:40,
KEY_DELETE:46,
KEY_HOME:36,
KEY_END:35,
KEY_PAGEUP:33,
KEY_PAGEDOWN:34,
KEY_INSERT:45,
cache:{}
};
var docEl=document.documentElement;
var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED='onmouseenter'in docEl
&&'onmouseleave'in docEl;
var _isButton;
if(Prototype.Browser.IE){
var buttonMap={0:1,1:4,2:2};
_isButton=function(event,code){
return event.button===buttonMap[code];
};
}else if(Prototype.Browser.WebKit){
_isButton=function(event,code){
switch(code){
case 0:return event.which==1&&!event.metaKey;
case 1:return event.which==1&&event.metaKey;
default:return false;
}
};
}else{
_isButton=function(event,code){
return event.which?(event.which===code+1):(event.button===code);
};
}
function isLeftClick(event){return _isButton(event,0)}
function isMiddleClick(event){return _isButton(event,1)}
function isRightClick(event){return _isButton(event,2)}
function element(event){
event=Event.extend(event);
var node=event.target,type=event.type,
currentTarget=event.currentTarget;
if(currentTarget&&currentTarget.tagName){
if(type==='load'||type==='error'||
(type==='click'&&currentTarget.tagName.toLowerCase()==='input'
&&currentTarget.type==='radio'))
node=currentTarget;
}
if(node.nodeType==Node.TEXT_NODE)
node=node.parentNode;
return Element.extend(node);
}
function findElement(event,expression){
var element=Event.element(event);
if(!expression)return element;
var elements=[element].concat(element.ancestors());
return Selector.findElement(elements,expression,0);
}
function pointer(event){
return{x:pointerX(event),y:pointerY(event)};
}
function pointerX(event){
var docElement=document.documentElement,
body=document.body||{scrollLeft:0};
return event.pageX||(event.clientX+
(docElement.scrollLeft||body.scrollLeft)-
(docElement.clientLeft||0));
}
function pointerY(event){
var docElement=document.documentElement,
body=document.body||{scrollTop:0};
return event.pageY||(event.clientY+
(docElement.scrollTop||body.scrollTop)-
(docElement.clientTop||0));
}
function stop(event){
Event.extend(event);
event.preventDefault();
event.stopPropagation();
event.stopped=true;
}
Event.Methods={
isLeftClick:isLeftClick,
isMiddleClick:isMiddleClick,
isRightClick:isRightClick,
element:element,
findElement:findElement,
pointer:pointer,
pointerX:pointerX,
pointerY:pointerY,
stop:stop
};
var methods=Object.keys(Event.Methods).inject({},function(m,name){
m[name]=Event.Methods[name].methodize();
return m;
});
if(Prototype.Browser.IE){
function _relatedTarget(event){
var element;
switch(event.type){
case'mouseover':element=event.fromElement;break;
case'mouseout':element=event.toElement;break;
default:return null;
}
return Element.extend(element);
}
Object.extend(methods,{
stopPropagation:function(){this.cancelBubble=true},
preventDefault:function(){this.returnValue=false},
inspect:function(){return'[object Event]'}
});
Event.extend=function(event,element){
if(!event)return false;
if(event._extendedByPrototype)return event;
event._extendedByPrototype=Prototype.emptyFunction;
var pointer=Event.pointer(event);
Object.extend(event,{
target:event.srcElement||element,
relatedTarget:_relatedTarget(event),
pageX:pointer.x,
pageY:pointer.y
});
return Object.extend(event,methods);
};
}else{
Event.prototype=window.Event.prototype||document.createEvent('HTMLEvents').__proto__;
Object.extend(Event.prototype,methods);
Event.extend=Prototype.K;
}
function _createResponder(element,eventName,handler){
var registry=Element.retrieve(element,'prototype_event_registry');
if(Object.isUndefined(registry)){
CACHE.push(element);
registry=Element.retrieve(element,'prototype_event_registry',$H());
}
var respondersForEvent=registry.get(eventName);
if(Object.isUndefined(respondersForEvent)){
respondersForEvent=[];
registry.set(eventName,respondersForEvent);
}
if(respondersForEvent.pluck('handler').include(handler))return false;
var responder;
if(eventName.include(":")){
responder=function(event){
if(Object.isUndefined(event.eventName))
return false;
if(event.eventName!==eventName)
return false;
Event.extend(event,element);
handler.call(element,event);
};
}else{
if(!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED&&
(eventName==="mouseenter"||eventName==="mouseleave")){
if(eventName==="mouseenter"||eventName==="mouseleave"){
responder=function(event){
Event.extend(event,element);
var parent=event.relatedTarget;
while(parent&&parent!==element){
try{parent=parent.parentNode;}
catch(e){parent=element;}
}
if(parent===element)return;
handler.call(element,event);
};
}
}else{
responder=function(event){
Event.extend(event,element);
handler.call(element,event);
};
}
}
responder.handler=handler;
respondersForEvent.push(responder);
return responder;
}
function _destroyCache(){
for(var i=0,length=CACHE.length;i<length;i++){
Event.stopObserving(CACHE[i]);
CACHE[i]=null;
}
}
var CACHE=[];
if(Prototype.Browser.IE)
window.attachEvent('onunload',_destroyCache);
if(Prototype.Browser.WebKit)
window.addEventListener('unload',Prototype.emptyFunction,false);
var _getDOMEventName=Prototype.K;
if(!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED){
_getDOMEventName=function(eventName){
var translations={mouseenter:"mouseover",mouseleave:"mouseout"};
return eventName in translations?translations[eventName]:eventName;
};
}
function observe(element,eventName,handler){
element=$(element);
var responder=_createResponder(element,eventName,handler);
if(!responder)return element;
if(eventName.include(':')){
if(element.addEventListener)
element.addEventListener("dataavailable",responder,false);
else{
element.attachEvent("ondataavailable",responder);
element.attachEvent("onfilterchange",responder);
}
}else{
var actualEventName=_getDOMEventName(eventName);
if(element.addEventListener)
element.addEventListener(actualEventName,responder,false);
else
element.attachEvent("on"+actualEventName,responder);
}
return element;
}
function stopObserving(element,eventName,handler){
element=$(element);
var registry=Element.retrieve(element,'prototype_event_registry');
if(Object.isUndefined(registry))return element;
if(eventName&&!handler){
var responders=registry.get(eventName);
if(Object.isUndefined(responders))return element;
responders.each(function(r){
Element.stopObserving(element,eventName,r.handler);
});
return element;
}else if(!eventName){
registry.each(function(pair){
var eventName=pair.key,responders=pair.value;
responders.each(function(r){
Element.stopObserving(element,eventName,r.handler);
});
});
return element;
}
var responders=registry.get(eventName);
if(!responders)return;
var responder=responders.find(function(r){return r.handler===handler;});
if(!responder)return element;
var actualEventName=_getDOMEventName(eventName);
if(eventName.include(':')){
if(element.removeEventListener)
element.removeEventListener("dataavailable",responder,false);
else{
element.detachEvent("ondataavailable",responder);
element.detachEvent("onfilterchange",responder);
}
}else{
if(element.removeEventListener)
element.removeEventListener(actualEventName,responder,false);
else
element.detachEvent('on'+actualEventName,responder);
}
registry.set(eventName,responders.without(responder));
return element;
}
function fire(element,eventName,memo,bubble){
element=$(element);
if(Object.isUndefined(bubble))
bubble=true;
if(element==document&&document.createEvent&&!element.dispatchEvent)
element=document.documentElement;
var event;
if(document.createEvent){
event=document.createEvent('HTMLEvents');
event.initEvent('dataavailable',true,true);
}else{
event=document.createEventObject();
event.eventType=bubble?'ondataavailable':'onfilterchange';
}
event.eventName=eventName;
event.memo=memo||{};
if(document.createEvent)
element.dispatchEvent(event);
else
element.fireEvent(event.eventType,event);
return Event.extend(event);
}
Object.extend(Event,Event.Methods);
Object.extend(Event,{
fire:fire,
observe:observe,
stopObserving:stopObserving
});
Element.addMethods({
fire:fire,
observe:observe,
stopObserving:stopObserving
});
Object.extend(document,{
fire:fire.methodize(),
observe:observe.methodize(),
stopObserving:stopObserving.methodize(),
loaded:false
});
if(window.Event)Object.extend(window.Event,Event);
else window.Event=Event;
})();
(function(){
var timer;
function fireContentLoadedEvent(){
if(document.loaded)return;
if(timer)window.clearTimeout(timer);
document.loaded=true;
document.fire('dom:loaded');
}
function checkReadyState(){
if(document.readyState==='complete'){
document.stopObserving('readystatechange',checkReadyState);
fireContentLoadedEvent();
}
}
function pollDoScroll(){
try{document.documentElement.doScroll('left');}
catch(e){
timer=pollDoScroll.defer();
return;
}
fireContentLoadedEvent();
}
if(document.addEventListener){
document.addEventListener('DOMContentLoaded',fireContentLoadedEvent,false);
}else{
document.observe('readystatechange',checkReadyState);
if(window==top)
timer=pollDoScroll.defer();
}
Event.observe(window,'load',fireContentLoadedEvent);
})();
Element.addMethods();
Hash.toQueryString=Object.toQueryString;
var Toggle={display:Element.toggle};
Element.Methods.childOf=Element.Methods.descendantOf;
var Insertion={
Before:function(element,content){
return Element.insert(element,{before:content});
},
Top:function(element,content){
return Element.insert(element,{top:content});
},
Bottom:function(element,content){
return Element.insert(element,{bottom:content});
},
After:function(element,content){
return Element.insert(element,{after:content});
}
};
var $continue=new Error('"throw $continue" is deprecated, use "return" instead');
var Position={
includeScrollOffsets:false,
prepare:function(){
this.deltaX=window.pageXOffset
||document.documentElement.scrollLeft
||document.body.scrollLeft
||0;
this.deltaY=window.pageYOffset
||document.documentElement.scrollTop
||document.body.scrollTop
||0;
},
within:function(element,x,y){
if(this.includeScrollOffsets)
return this.withinIncludingScrolloffsets(element,x,y);
this.xcomp=x;
this.ycomp=y;
this.offset=Element.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=Element.cumulativeScrollOffset(element);
this.xcomp=x+offsetcache[0]-this.deltaX;
this.ycomp=y+offsetcache[1]-this.deltaY;
this.offset=Element.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;
},
cumulativeOffset:Element.Methods.cumulativeOffset,
positionedOffset:Element.Methods.positionedOffset,
absolutize:function(element){
Position.prepare();
return Element.absolutize(element);
},
relativize:function(element){
Position.prepare();
return Element.relativize(element);
},
realOffset:Element.Methods.cumulativeScrollOffset,
offsetParent:Element.Methods.getOffsetParent,
page:Element.Methods.viewportOffset,
clone:function(source,target,options){
options=options||{};
return Element.clonePosition(target,source,options);
}
};
if(!document.getElementsByClassName)document.getElementsByClassName=function(instanceMethods){
function iter(name){
return name.blank()?null:"[contains(concat(' ', @class, ' '), ' "+name+" ')]";
}
instanceMethods.getElementsByClassName=Prototype.BrowserFeatures.XPath?
function(element,className){
className=className.toString().strip();
var cond=/\s/.test(className)?$w(className).map(iter).join(''):iter(className);
return cond?document._getElementsByXPath('.//*'+cond,element):[];
}:function(element,className){
className=className.toString().strip();
var elements=[],classNames=(/\s/.test(className)?$w(className):null);
if(!classNames&&!className)return elements;
var nodes=$(element).getElementsByTagName('*');
className=' '+className+' ';
for(var i=0,child,cn;child=nodes[i];i++){
if(child.className&&(cn=' '+child.className+' ')&&(cn.include(className)||
(classNames&&classNames.all(function(name){
return!name.toString().blank()&&cn.include(' '+name+' ');
}))))
elements.push(Element.extend(child));
}
return elements;
};
return function(className,parentElement){
return $(parentElement||document.body).getElementsByClassName(className);
};
}(Element.Methods);
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 Jaml=function(){
this.buffer=[];};
Jaml.prototype={
s:function(s){
this.buffer.push(s);
},
ns:function(s){
if(Jaml.skip_newline_p){
Jaml.skip_newline_p=false;
}else{
this.buffer.push('\n');
}
this.s(s);
},
v:function(){
return this.buffer.join('');
}
};
Jaml.skip_newline_p=false;
Jaml.x=function(){
Jaml.skip_newline_p=true;
};
Jaml.prototype.select_tag=function(id,name){
var _j=new Jaml();
if(Glyde.Browser.IE6||Glyde.Browser.IE7){
_j.ns('<div');_j.s(' class="select_border"');_j.s('>');
_j.ns('<select');_j.s(' id="'+(id)+'"');_j.s(' name="'+(name)+'"');_j.s('>');
_j.ns('</select>');
_j.ns('</div>');
}
else{
_j.ns('<select');_j.s(' id="'+(id)+'"');_j.s(' name="'+(name)+'"');_j.s('>');
_j.ns('</select>');
}
return _j.v();
};
Glyde=(typeof(Glyde)=='undefined')?{}:Glyde;
Glyde.widgets={};
Glyde.empty_function=function(){};
Glyde.random_integer=function(low,high){
return low+Math.floor(Math.random()*(high+1-low));
};
Glyde.cmp=function(a,b){
return(a>b?1:a<b?-1:0);
};
Glyde.Class=window.Prototype?Class:null;
Glyde.object_extend=window.Prototype?Object.extend:null;
Glyde.$$=window.Prototype?$$:null;
Glyde.$=window.Prototype?$:null;
Glyde.getViewportDimensions=function(){
return document.viewport.getDimensions();
};
Glyde.$wrapper=function(id_or_elem,context_element){
return Glyde.$(id_or_elem);
};
RegExp.prototype.match=RegExp.prototype.test;
Glyde.is={
defined:function(a){
return(typeof(a)!='undefined'&&(a!=null||a===null));
},
string:function(a){
return(typeof(a)=='string');
},
empty_string:function(str){
return(str==null)||(Glyde.is.string(str)&&str=='');
},
instance:function(a,a_class){
return(a&&a.constructor&&(a.constructor===a_class));
},
array:function(a){
return Glyde.is.instance(a,Array);
}
};
Glyde.has={
all_properties:function(obj,property_names){
return property_names.all(function(property){
return Glyde.is.defined(obj[property]);
});
}
};
Glyde.Notifier=Glyde.Class.create({
initialize:function(){
this._listeners=[];
},
publish:function(message_name,message_info){
if(this._listeners[message_name]){
var len=this._listeners[message_name].length;
for(var i=0;i<len;++i){
this._listeners[message_name][i](message_name,message_info);
}
}
},
subscribe:function(message_name,listener_function){
if(!this._listeners[message_name]){
this._listeners[message_name]=[];
}
this._listeners[message_name].push(listener_function);
},
unsubscribe:function(message_name,listener_function){
if(this._listeners[message_name]){
var index=-1;
var len=this._listeners[message_name].length;
for(var i=0;i<len;++i){
if(this._listeners[message_name][i]==listener_function){
index=i;
break;
}
}
if(index!=-1){
this._listeners[message_name].splice(index,1);
}else{
console.log("couldn't unsubscribe from "+message_name);
}
}
}
});
Glyde.notify={
_notifier:new Glyde.Notifier()
};
Glyde.notify.publish=function(message_name,message_info){
Glyde.notify._notifier.publish(message_name,message_info);
};
Glyde.notify.subscribe=function(message_name,listener_function){
Glyde.notify._notifier.subscribe(message_name,listener_function);
};
Glyde.notify.unsubscribe=function(message_name,listener_function){
Glyde.notify._notifier.unsubscribe(message_name,listener_function);
};
function ellipsis(e){
var w=e.getWidth()-10000;
var t=e.innerHTML;
e.update("<span>"+t+"</span>");
e=e.down();
while(t.length>0&&e.getWidth()>=w){
t=t.substr(0,t.length-1);
e.update(t+"...");
}
}
(function(){
document.write('<style type="text/css">'+
'.ellipsis { margin-right:-10000px; }</style>');
Event.observe(window,"load",function(){
$$('.ellipsis').each(ellipsis);
});
})();
var Loading=Class.create();
var static_methods={
singleton:null,
instance:function(){
return(Loading.singleton||(Loading.singleton=new Loading()));
},
show:function(){
Loading.instance().show();
},
hide:function(){
Loading.instance().hide();
}
};
Object.extend(Loading,static_methods);
Loading.prototype={
id:'big_blue_loading',
initialize:function(){
this.text='Loading&hellip;';
this._create();
},
show:function(){
var d=$(this.id);
d.innerHTML=this.text;
d.display();
},
hide:function(){
var d=$(this.id);
d.innerHTML='';
d.undisplay();
},
_create:function(){
var div=document.createElement('div');
div.id=this.id
document.body.appendChild(div);
return $(this.id);
}
};
InputErrorNotice=Class.create({
initialize:function(elem_id,error_str,no_observe){
this.elem_id=elem_id;
this.error_str=error_str;
if(!no_observe)Event.observe(window,"load",this.create.bind(this));
InputErrorNotice.all.push(this);
},
create:function(){
var el=$(this.elem_id);
if(el){
if((Glyde.Browser.IE6||Glyde.Browser.IE7)&&el.tagName=='SELECT'){
this._select_border_node(el).className='select_border_error';
}else{
el.addClassName('error_notice');
}
if(this.error_str&&!this.error_str.blank()){
this._error_elem=new Element('div',{'class':'error_note'});
this._error_elem.update(this.error_str);
Element.insert(document.body,this._error_elem);
InputErrorNotice.focusableElems(el)
.invoke('observe','focus',this._display_note.bindAsEventListener(this))
.invoke('observe','blur',this._hide_note.bindAsEventListener(this));
Event.observe(window,'resize',this._position_notice.bind(this));
}
}
},
clear:function(){
var el=$(this.elem_id);
Event.stopObserving(window,'resize',this._position_notice.bind(this));
if(el){
if((Glyde.Browser.IE6||Glyde.Browser.IE7)&&el.tagName=='SELECT'){
this._select_border_node(el).className='select_border';
}else{
el.removeClassName('error_notice');
}
if(this._error_elem){this._error_elem.remove();}
}
},
_hide_note:function(){
this._error_elem.setStyle({visibility:'hidden'});
},
_display_note:function(){
this._error_elem.setStyle({visibility:'visible'});
this._position_notice();
},
_select_border_node:function(el){
return(el.tagName=='SELECT'&&/^select_border/.test(el.parentNode.className))?el.parentNode:el;
},
_position_notice:function(){
var el=$(this.elem_id);
if(el){
var offset=el.cumulativeOffset();
offset[0]+=el.offsetWidth;
this._error_elem.style.left=offset[0]+'px';
this._error_elem.style.top=offset[1]-parseInt(el.getStyle('height'))-5+'px';
}
}
});
InputErrorNotice.all=[];
InputErrorNotice.activate_all=function(){
var errs=InputErrorNotice.all;
for(var i=0;i<errs.length;++i){
errs[i].create();
}
};
InputErrorNotice.clear_all=function(){
if(InputErrorNotice.all.length==0)return;
var errors=InputErrorNotice.all,len=errors.length;
for(var i=0;i<len;++i){
errors[i].clear();
}
InputErrorNotice.all=[];
};
InputErrorNotice.set_instance_class=function(klass){
InputErrorNotice.__instance_class=klass
};
InputErrorNotice.get_instance_class=function(){
return InputErrorNotice.__instance_class||InputErrorNotice;
};
InputErrorNotice.create_all_no_load=function(errors){
InputErrorNotice.clear_all();
var klass=InputErrorNotice.get_instance_class();
for(var i=0,len=errors.length;i<len;++i){
var err=errors[i];
err.input_notice=new klass(err.id,err.value,true);
}
InputErrorNotice.activate_all();
};
InputErrorNotice.showFirstError=function(errors_array){
var klass=InputErrorNotice.get_instance_class();
new klass(errors_array[0].id,errors_array[0].error);
};
InputErrorNotice.focusFirstError=function(){
var elem=$$('.error_notice')[0];
if(elem){
elem=InputErrorNotice.focusableElems(elem).first();
if(elem){
elem.blur();
elem.focus();
}
}
};
Object.extend(InputErrorNotice,{
supported_tags:function(){
if(Glyde.Browser.IE){
return['select','textarea','input[type!="hidden"]'];
}else{
return['select','textarea','input:not([type="hidden"])'];
}
},
focusableElems:function(elem){
var elem=$(elem);
if(InputErrorNotice.supported_tags().any(function(t){return elem.match(t);})){
return[elem];
}else{
return Element.select(elem,InputErrorNotice.supported_tags());
}
}
});
FormErrorManager=Class.create();
FormErrorManager.all={};
FormErrorManager.prototype={
initialize:function(form_name,form_field_ids_hash){
this._form_name=form_name;
FormErrorManager.all[form_name]=form_field_ids_hash;
},
display_errors:function(errors){
if(this._has_errors){
this.clear();
}
var me=this;
errors.each(function(err){
me._has_errors=true;
var klass=InputErrorNotice.get_instance_class();
err.input_notice=new klass(err.id,err.value,true).create();
});
},
clear:function(){
var field_ids=FormErrorManager.all[this._form_name];
if(!field_ids)return;
field_ids.each(function(id){
var notice_to_clear=null;
var len=InputErrorNotice.all.length;
for(var i=0;i<len;++i){
var notice=InputErrorNotice.all[i];
if(id==notice.elem_id){
notice.clear();
InputErrorNotice.all.splice(i,1);
return true;
}
}
});
}
};
Event.KEY_SPACE=32;
Ajax.Responders.MESSAGE_REQUEST_COMPLETE="pext:ajax:request_complete";
Ajax.Responders.register({
onException:function(req,ex){
console.log(ex);
if(Glyde.Browser.FF){
var stack=ex.stack.split('\n');
console.error(stack[0]);
console.group(stack[0]);
stack.each(function(s){
console.log(s);
});
console.groupEnd();
}
},
onComplete:function(resp,o){
Glyde.notify.publish(Ajax.Responders.MESSAGE_REQUEST_COMPLETE,resp);
}
});
Object.extend(Ajax.Request.prototype,{
abort:function(){
this.transport.onreadystatechange=Prototype.emptyFunction;
this.transport.abort();
Ajax.activeRequestCount--;
}
});
Object.extend(Ajax,{
evalJSON:function(responseText){
try{
return eval('('+responseText+')');
}catch(e){
try{
return eval(responseText);
}catch(e){
console.log("invalid js",e);
return{};
}
}
}
});
if(Prototype.Version.indexOf('1.6')!=-1){
String.prototype.evalJSON=function(sanitize){
return Ajax.evalJSON(this);
};
Object.extend(Ajax.Request.prototype,{
evalResponse:function(){
try{
return Ajax.evalJSON(this.transport.responseText||'');
}catch(e){
this.dispatchException(e);
}
}
});
}
Glyde.Browser={
onload:function(){
if(Glyde.Browser.IE){Glyde.Browser._ie_remove_focus_outlines();}
},
init:function(){
Glyde.Browser.USER_AGENT=navigator.userAgent.toLowerCase();
Glyde.Browser.IE=Glyde.Browser._has('msie');
Glyde.Browser.IE6=Glyde.Browser._has('msie 6');
Glyde.Browser.IE7=Glyde.Browser._has('msie 7');
Glyde.Browser.IE8=Glyde.Browser._has('msie 8');
if(Glyde.Browser.IE8&&document.documentMode&&(document.documentMode==7)){
Glyde.Browser.IE7=true;
Glyde.Browser.IE8=false;
}
Glyde.Browser.OPERA=Glyde.Browser._has('opera');
Glyde.Browser.CHROME=Glyde.Browser._has('chrome');
Glyde.Browser._safari();
Glyde.Browser._firefox();
Glyde.Browser._os();
},
_os:function(){
Glyde.Browser.MAC=Glyde.Browser._has('macintosh');
Glyde.Browser.WIN=Glyde.Browser._has(['windows','winnt','win98','win95']);
},
_firefox:function(){
Glyde.Browser.FF=!Glyde.Browser.IE&&!Glyde.Browser.SAFARI&&!Glyde.Browser.OPERA;
Glyde.Browser.TRUE_FF=Glyde.Browser._has('firefox');
Glyde.Browser.FF2=Glyde.Browser._has('firefox/2');
Glyde.Browser.FF3=Glyde.Browser._has('firefox/3');
Glyde.Browser.FF36=Glyde.Browser._has('firefox/3.6');
},
_OLD_SAFARI_CUTOFF:419.4,
_safari:function(){
Glyde.Browser.APPLE_WEB_KIT=Glyde.Browser._has('applewebkit');
Glyde.Browser.SAFARI=Glyde.Browser._has('safari')&&!Glyde.Browser.CHROME;
Glyde.Browser.OLD_SAFARI=false;
if(tmp=Glyde.Browser.USER_AGENT.split("applewebkit/")[1]){
Glyde.Browser.WEBKIT_VERSION=parseFloat(tmp.split(" ")[0]);
Glyde.Browser.NEW_SAFARI=(Glyde.Browser.WEBKIT_VERSION>=Glyde.Browser._OLD_SAFARI_CUTOFF);
}
Glyde.Browser.OLD_SAFARI=Glyde.Browser.SAFARI&&!Glyde.Browser.NEW_SAFARI;
},
_has:function(str_or_list){
var _ua=Glyde.Browser.USER_AGENT;
var list=(typeof(str_or_list)=='string')?[str_or_list]:str_or_list;
var has=false,str,len;
for(var i=0,len=list.length;i<len;++i){
str=list[i];
if(_ua.indexOf(str)!=-1){
has=true;
break;
}
}
return has;
}
};
Glyde.object_extend(Glyde.Browser,{
char_width:function(ch){
var m_div=Glyde.Browser.measure_div();
m_div.innerHTML=ch||'W';
return m_div.offsetWidth;
},
measure_div:function(){
var m_div=$('browser_measure_div');
if(!m_div){
m_div=document.createElement('div');
m_div.id='browser_measure_div';
m_div.className="offscreen";
document.body.appendChild(m_div);
}
return m_div;
},
getScrollBarWidth:function(){
if(!Glyde.Browser.scrollbar_width){
var outer=Glyde.Browser._create_outer_div();
var inner=Glyde.Browser._create_inner_div();
outer.appendChild(inner);
document.body.appendChild(outer);
Glyde.Browser.scrollbar_width=(outer.offsetWidth-inner.offsetWidth);
outer.parentNode.removedChild(outer);
}
return Glyde.Browser.scrollbar_width;
},
sizeOfBody:function(){
var hslop=document.body.topMargin?parseInt(document.body.topMargin):0;
var doc=document.getElementsByTagName('HTML')[0]
var height=Math.max(parseInt(doc.scrollHeight),
parseInt(doc.offsetHeight)-4)+hslop;
var wslop=Glyde.Browser.IE?Glyde.Browser.getScrollBarWidth()+4:0;
var width=parseInt(doc.scrollWidth)-wslop;
return[width,height];
},
viewportBounds:function(){
var scroll_offsets=Glyde.Browser.viewportScrollOffsets();
return{
width:Glyde.Browser.getInsideWindowWidth(),
height:Glyde.Browser.getInsideWindowHeight(),
offset_left:scroll_offsets.left,
offset_top:scroll_offsets.top
}
},
viewportScrollOffsets:function(){
return{
left:window.pageXOffset||document.documentElement.scrollLeft||document.body.scrollLeft,
top:window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop
}
},
getInsideWindowWidth:function(){
if(window.innerWidth){
return window.innerWidth;
}else if(document.documentElement&&document.documentElement.clientWidth){
return document.documentElement.clientWidth;
}else if(document.body&&document.body.clientWidth){
return document.body.clientWidth;
}
return 0;
},
getInsideWindowHeight:function(){
if(window.innerHeight){
return window.innerHeight;
}else if(document.documentElement&&document.documentElement.clientHeight){
return document.documentElement.clientHeight;
}else if(document.body&&document.body.clientHeight){
var htmlElem=document.getElementsByTagName('html')[0];
return htmlElem.clientHeight;
}
return 0;
},
_create_outer_div:function(){
var div=document.createElement('div');
var style=div.style;
style.position='absolute';
style.width='100%';
style.height='50px';
style.overflow='auto';
return div;
},
_create_inner_div:function(){
var div=document.createElement('div');
var style=div.style;
style.width='100%';
style.height='200px';
return div;
},
_ie_remove_focus_outlines:function(){
var link_nodes=document.body.getElementsByTagName('A');
var node=null;
for(var i=0,len=link_nodes.length;i<len;++i){
node=link_nodes[i];
node.hideFocus=true;
}
}
});
Glyde.Browser.init();
if(window.addEventListener){
window.addEventListener('load',Glyde.Browser.onload,false);
}else{
window.attachEvent('onload',Glyde.Browser.onload);
}
if(Glyde.Browser.IE){
try{
document.execCommand("BackgroundImageCache",false,true);
}catch(err){
}
}
Date.DAYS_PER_MONTH={
0:31,
1:28,
2:31,
3:30,
4:31,
5:30,
6:31,
7:31,
8:30,
9:31,
10:30,
11:31
};
Date.isValidDayOfMonth=function(mm,dd){
var max=Date.DAYS_PER_MONTH[mm];
return(0<dd&&dd<=max);
};
Date.getLastDayOfMonth=function(month,year){
if(month==1&&Date.isLeapYear(year)){
return 29;
}else{
return Date.DAYS_PER_MONTH[month];
}
};
Date.prototype.getLastDayOfMonth=function(){
var mon=this.getMonth();
return Date.getLastDayOfMonth(mon,this.getFullYear());
};
Date.isLeapYear=function(year){
return(((year%4==0)&&(year%100!=0))||(year%400==0));
};
Date.prototype.isLeapYear=function(){
var year=this.getFullYear();
return Date.isLeapYear(year);
};
Date.prototype.strftime=function(aFormat){
var v=aFormat;
v=v.replace(/%H/g,this._getHours(true,true));
v=v.replace(/%I/g,this._getHours(true));
v=v.replace(/%k/g,this._getHours(false,true));
v=v.replace(/%l/g,this._getHours(false));
v=v.replace(/%M/g,this._getMinutes());
v=v.replace(/%p/g,this._getAmPm(false));
v=v.replace(/%P/g,this._getAmPm(true));
v=v.replace(/%S/g,this._getSeconds());
v=v.replace(/%a/g,this._getShortDayName());
v=v.replace(/%A/g,this._getDayName());
v=v.replace(/%b/g,this._getShortMonthName());
v=v.replace(/%B/g,this._getMonthName());
v=v.replace(/%D/g,this._getDate(true));
v=v.replace(/%d/g,this._getDate(false));
v=v.replace(/%n/g,this._getMonth(true));
v=v.replace(/%m/g,this._getMonth(false));
v=v.replace(/%y/g,this._yearString());
v=v.replace(/%Y/g,this.getFullYear());
v=v.replace(/%%/g,'%');
return v;
}
Date.prototype._yearString=function(){
var myVal=this.getFullYear()%100;
return Date._pad(myVal,true);
}
Date.prototype._getMonth=function(pad){
var myVal=this.getMonth()+1;
return Date._pad(myVal,pad);
}
Date.prototype._getMonthName=function(){
return Date.MONTHS[this.getMonth()];
}
Date.prototype._getShortMonthName=function(){
return Date.ABBR_MONTHS[this.getMonth()];
}
Date.prototype._getDate=function(pad){
var myVal=this.getDate();
return Date._pad(myVal,pad);
}
Date.prototype._getDayName=function(){
return Date.DAYS[this.getDay()];
}
Date.prototype._getShortDayName=function(){
return Date.ABBR_DAYS[this.getDay()];
}
Date.prototype._getAmPm=function(isUpper){
var myHour=this.getHours();
return(myHour<12)?(isUpper?'AM':'am'):(isUpper?'PM':'pm');
}
Date.prototype._getHours=function(pad,isMilitary){
var myVal=this.getHours();
if(!isMilitary){
myVal%=12;
if(myVal==0)myVal=12;
}
return Date._pad(myVal,pad);
}
Date.prototype._getMinutes=function(){
var myVal=this.getMinutes();
return Date._pad(myVal,true);
}
Date.prototype._getSeconds=function(){
var myVal=this.getSeconds();
return Date._pad(myVal,true);
}
Date._pad=function(num,doPad){
return doPad&&(num<10)?'0'+num:num;
}
Date.MONTHS=[
'January','February','March','April',
'May','June','July','August',
'September','October','November','December'
];
Date.ABBR_MONTHS=[
'Jan','Feb','Mar','Apr',
'May','Jun','Jul','Aug',
'Sep','Oct','Nov','Dec'
];
Date.DAYS=[
'Sunday','Monday','Tuesday','Wednesday',
'Thursday','Friday','Saturday'
];
Date.ABBR_DAYS=['Sun','Mon','Tue','Wed','Thu','Fri','Sat'];
Element.Methods._update=Element.Methods.update;
Element.Methods.update=function(element,content){
element=$(element);
element._update(content);
document.fire('element:updated',{id:element.id});
return element;
};
if(!window.observe){
Object.extend(window,{
observe:Element.observe.methodize(),
stopObserving:Element.stopObserving.methodize()
});
}
(function(){
_getNextElementNode=function(node,forward){
while(node&&node.nodeType!=Node.ELEMENT_NODE){
node=forward?node.nextSibling:node.previousSibling;
}
return $(node);
};
_hasElementChildMethods=(function(){
var d=document.createElement('div');
d.appendChild(document.createElement('div'));
return d.lastElementChild!=null;
})();
Element.addMethods({
getFirstElementChild:function(node){
if(_hasElementChildMethods){
return node.firstElementChild;
}else{
return _getNextElementNode(node.firstChild,true);
}
},
getLastElementChild:function(node){
if(_hasElementChildMethods){
return node.lastElementChild;
}else{
return _getNextElementNode(node.lastChild,false);
}
},
after:function(element,html){
return new Insertion.After(element,html);
},
g_select:function(element,selector){
return element.select(selector);
},
display:function(element,type){
return element._display(true,type);
},
undisplay:function(element,type){
return element._display(false,type);
},
_display:function(element,bool,type){
var elem=$(element);
if(elem){
if(!type)type='block';
if(!Glyde.Browser.IE&&elem.tagName=='TR')type='table-row';
elem.style.display=bool?type:'none';
}
return elem;
},
vshow:function(element){
var e=$(element);
if(e)e.style.visibility='visible';
return e;
},
vhide:function(element){
var e=$(element);
if(e)e.style.visibility='hidden';
return e;
},
onenterkey:function(element,handler){
var elem=$(element);
if(elem){
var fn=function(event){
var evt=event?event:window.event;
if(evt.keyCode==13){
handler(evt);
}
};
elem._onenterkeyfn=fn;
Event.observe(elem,'keypress',fn);
}
return elem;
},
remove_onenterkey:function(element,handler){
var elem=$(element);
if(elem&&elem._onenterkeyfn){
Event.stopObserving(elem,'keypress',elem._onenterkeyfn);
}
},
dimensions_when_invisible:function(element){
var el=element;
var style=element.style;
el._oldPosition=el.style.position;
el._oldTop=el.style.top;
el._oldLeft=el.style.left;
style.position='absolute';
style.top=-10000;
style.left=-10000;
el.display();
var w=el.offsetWidth;
var h=el.offsetHeight;
style.position=el._oldPosition;
style.top=el._oldTop;
style.left=el._oldLeft;
el.undisplay();
return{width:w,height:h};
},
viewportOffsetFromRoot:function(element){
var offsets=element.viewportOffset();
var viewport_offsets=document.viewport.getScrollOffsets();
return Element._returnOffset(offsets.left+viewport_offsets.left,offsets.top+viewport_offsets.top);
},
add_focus_halo:function(element){
var e=$(element);
if(e&&e.type&&e.type.toLowerCase()!='radio'){
e.observe('blur',function(event){
if(e.type=='checkbox'){
var label=$(e.id+'_label');
if(label){label.setStyle({textDecoration:'',color:''});}
}else{
e.removeClassName('halo_focused');
}
});
e.observe('focus',function(event){
if(e.type=='checkbox'){
var label=$(e.id+'_label');
if(label){label.setStyle({textDecoration:'underline',color:'dodgerblue'});}
}else{
if(e.hasClassName('awaiting_input')&&e.type=='text'){
e.value='';
e.removeClassName('awaiting_input');
}
e.addClassName('halo_focused');
}
});
}
return e;
},
clearonclick:function(element){
var field=$(element);
if(!field)return;
field.__click_cleared=false;if(Glyde.Browser.IE)field.onclick=Element.Methods._clearonclick;
else Event.observe(field,'click',Element.Methods._clearonclick);
},
_clearonclick:function(event){
if(this.__click_cleared)return;
try{
this._origValue=this.value;
this.value='';
}catch(e){}
this.__click_cleared=true;
},
clearonanykey:function(element){
var field=$(element);
if(!field)return;
field.__key_cleared=false;
Event.observe(field,'keypress',Element.Methods._clearonanykey);
if(Glyde.Browser.SAFARI||Glyde.Browser.IE){
Event.observe(field,'keyup',Element.Methods._clearonanykey);
}
},
_clearonanykey:function(event){
if(this.__key_cleared)return;
try{
this._origValue=this.value;
this.value='';
}catch(e){}
this.__key_cleared=true;
},
display_png_ie6:function(element,url){
var filter='progid:DXImageTransform.Microsoft.AlphaImageLoader(src="'+url+'", sizingMethod="crop");';
element.style.filter=filter;
},
fix_background_png_ie6:function(element){
var png_url=element.style.backgroundImage.replace(/^url\((.*)\)$/,'$1');
element.display_png_ie6(png_url);
element.style.backgroundImage='';
},
update_crossfade:function(element,html,on_faded_out,on_faded_in,total_duration_ms){
total_duration_ms=total_duration_ms||500;
var on_fade_out_complete=function(){
html&&element.update(html);
on_faded_out&&on_faded_out(element);
element.fade_in(total_duration_ms/2,function(){
on_faded_in&&on_faded_in(element);
});
}
if(element.childNodes.length){
element.fade_out(total_duration_ms/2,on_fade_out_complete);
}else{
on_fade_out_complete();
}
},
fade_in:function(element,duration,on_complete){
duration=duration||300;
element.setOpacity(0);
var local_on_complete=function(){
if(window.ActiveXObject){
element.style.filter='';
}
if(on_complete)on_complete();
};
element._fade(0,1,duration,local_on_complete);
},
fade_out:function(element,duration,on_complete){
duration=duration||300;
element._fade(1,0,duration,on_complete);
},
_fade:function(element,from,to,duration,on_complete){
var options={
duration:duration,
onComplete:on_complete
};
(new fx.Opacity(element,options)).custom(from,to);
},
fade_appear_image:function(element,duration){
duration=duration||300;
element.setOpacity(0);
Glyde.image.preload(element.src,function(){element.fade_in(duration);});
},
set_background_image:function(element,image_url,position){
element.style.backgroundImage="url("+image_url+")";
if(position){element.style.backgroundPosition=position;}
},
allow_only_numeric_input:function(element){
element.restrict_keyboard_input(/[0-9]/);
},
allow_only_non_whitespace_input:function(element){
element.restrict_keyboard_input(/[\S]/);
},
restrict_keyboard_input:function(element,regexp){
element.observe('keypress',function(event){
var character_code=event.charCode||event.keyCode;
if(event.charCode==0||event.ctrlKey||event.altKey||event.metaKey||character_code<32){return;}
if(event.keyCode==Event.KEY_RETURN||event.keyCode==Event.KEY_ESC){return;}
if(!regexp.test(String.fromCharCode(character_code))){event.stop();}
});
},
disable_drag_selection:function(el){
if(typeof el=='string'){el=document.getElementById(el);}
if(Prototype.Browser.IE||Prototype.Browser.WebKit){
el.onselectstart=function(event){
if(Prototype.Browser.IE){event=window.event;}
var source_node_type=event.srcElement.tagName;
return source_node_type=='INPUT'||source_node_type=='TEXTAREA';
};
}else if(Prototype.Browser.Gecko){
el.style.MozUserSelect='-moz-none';
}else{
el.unselectable="on";
}
}
});
})();
Object.extend(Event,{
get:function(event){
return(event||window.event);
}
});
Form.Element.FocusedObserver=Class.create(Abstract.TimedObserver,{
initialize:function(element,frequency,callback){
this.frequency=frequency;
this.element=$(element);this.callback=callback;
this.lastValue=this.getValue();
Event.observe(element,"focus",this.registerCallback.bindAsEventListener(this));
Event.observe(element,"blur",this.cancel.bindAsEventListener(this));
},
registerCallback:function(){
if(this.interval_id==undefined){
this.interval_id=setInterval(this.onTimerEvent.bind(this),this.frequency*1000);
}
},
cancel:function(){
if(this.interval_id){
window.clearInterval(this.interval_id);
this.interval_id=null;
}
},
getValue:function(){
return $F(this.element);
}
});
Object.extend(String.prototype,{
trim:String.prototype.strip
});
String.prototype.truncate_with_delimiters=function(len,delimiter,num_to_add_for_br,no_html){
var delim=delimiter?delimiter:' ';
var str_len=this.length;
if(num_to_add_for_br){
var index_of_br=0;
do{
index_of_br=this.indexOf('<br>',index_of_br+1);
if(index_of_br!=-1){
len-=num_to_add_for_br;
}
}while(index_of_br!=-1)
}
if(this.length<=len){
return this;
}else{
var ellipsis=(no_html)?'...':'&hellip;';
var index=this.lastIndexOf(delim,len);
if(index!=-1){
return this.substring(0,index)+ellipsis;
}else{
return this.substring(0,len)+ellipsis;
}
}
};
String.prototype.truncate_with_tooltip=function(max_length,delimiter){
if(this.length>max_length){
return'<span title="'+this+'">'+this.truncate_with_delimiters(max_length,delimiter)+'</span>';
}else{
return this;
}
};
String.prototype.realEscapeHTML=function(includeWhiteSpace){
var s=this;
s=s.replace(/\&/g,'&amp;');
s=s.replace(/\xA0/g,'&nbsp;');
s=s.replace(/\>/g,'&gt;');
s=s.replace(/\</g,'&lt;');
s=s.replace(/\"/g,'&quot;');
if(includeWhiteSpace){
s=s.replace(/\r\n/g,'<br>');
s=s.replace(/\n/g,'<br>');
s=s.replace(/  /g,' &nbsp;');
s=s.replace(/&nbsp; /g,'&nbsp;&nbsp;');
}
return s;
};
String.prototype.format_number=function(){
var num_string=this;
var regex=/\.\d{1,}/;
var frac=(regex.test(num_string))?regex.exec(num_string):"";
var i=parseInt(num_string,10).toString();
regex=/(-?\d+)(\d{3})/;
while(regex.test(i)){
i=i.replace(regex,"$1,$2");
}
return i+frac;
};
String.prototype.capitalize_first_letter=function(){
var s=this;
if(this.length){s=s.substr(0,1).toUpperCase()+s.substr(1);}
return s;
};
String.prototype.capitalize_each_word=function(){
var words=this.split(/\s+/);
words.each(function(word,index){words[index]=word.capitalize();});
return words.join(' ');
}
String.prototype.title_for_url=function(){
return this.gsub(/[^\s\w]/,'').gsub(/\b(an|a|the)\b\s*/i,'').strip().gsub(/\s+/,'-');
};
String.prototype.sum=function(){
var sum=0,str_len=this.length;
for(var i=0;i<str_len;i++){
sum+=this.charCodeAt(i);
}
return sum;
};
String.prototype.html_entity_decode=function(){
var result=this.unescapeHTML();
return result.gsub(/&#(\d+);/,function(match){
return String.fromCharCode(match[1]);
});
};
var OrderedHash=Class.create({
initialize:function(){
this._array=[];
this._hash={};
},
get:function(key){
return this._hash[key];
},
get_by_index:function(index){
return this._hash[this._array[index]];
},
insert:function(key,value,position){
var old_value=this._hash[key];
this._hash[key]=value;
if(old_value){
for(var i=0,len=this._array.length;i<len;++i){
if(this._array[i]==key){
this._array[i]=key;
break;
}
}
}
if(position){
this._array.splice(position,0,key);
}else{
this._array.push(key);
}
},
size:function(){
return this._array.length;
},
remove:function(key){
var index=-1;
for(var i=0,len=this._array.length;i<len;++i){
if(this._array[i]==key){
index=i;
break;
}
}
var val=null;
if(index>-1){
val=this.remove_at_index(index);
}
return val;
},
remove_at_index:function(index){
var key=this._array[index];
var val=null;
if(key){
this._hash[key]=null;
val=this._array.splice(index,1);
}
return val;
},
keys:function(){
return this._array.clone();
},
values:function(){
var arr=[];
for(var i=0,len=this._array.length;i<len;++i){
arr.push(this._hash[this._array[i]]);
}
return arr;
}
});
var fx=new Object();
fx.Base=function(){};
fx.Base.prototype={
_set_options:function(options){
this.options={
duration:500,
onComplete:'',
delay:100,sinusoidal:true
}
Object.extend(this.options,options||{});
this._percentage_thru=this._def_perc_thru();
},
_def_perc_thru:function(){
if(this.options.sinusoidal){
return function(){
return((-Math.cos(this.t_po*Math.PI)/2)+0.5);}.bind(this);
}else{
return function(){
return this.t_po;
}.bind(this);
}
},
_go:function(){
this.duration=this.options.duration;
this.startTime=(new Date).getTime();
this.timer=setInterval(this._step.bind(this),13);
},
_time_pos:function(){
return((new Date).getTime()-this.startTime)/this.duration;
},
_step:function(){
this.t_po=this._time_pos();
if(this.t_po>=1){
this.val=this.to_val;
clearInterval(this.timer);
this.timer=null;
if(this.options.onComplete){
setTimeout(this.options.onComplete.bind(this),this.options.delay);
}
}else{
this.val=(this._percentage_thru()*this.distance)+this.from_val;
}
this._set();
},
custom:function(from,to){
if(this.timer!=null)return;
this.from_val=parseInt(from);
this.to_val=parseInt(to);
this.distance=this.to_val-this.from_val;
this._go();
},
hide:function(){
this.val=0;
this._set();
},
clearTimer:function(){
clearInterval(this.timer);
this.timer=null;
}
};
fx.Opacity=Class.create();
fx.Opacity.prototype=Object.extend(new fx.Base(),{
initialize:function(el,options){
this.el=$(el);
this.val=1;
this._set_options(options);
},
_set:function(){
if(this.val==1)this.val=0.9999;
if(this.val>0&&this.el.style.visibility=="hidden"){
this.el.style.visibility="visible";
}
if(this.val==0)this.el.style.visibility="hidden";
if(window.ActiveXObject){
this.el.style.filter="alpha(opacity="+(this.val*100).toFixed(1)+")";
}
this.el.style.opacity=this.val;
},
toggle:function(){
if(window.ActiveXObject){
this.el.style.zoom=1
}
if(this.val>0)this.custom(1,0);
else this.custom(0,1);
},
snap_back:function(){
this.el.style.visibility="visible";
if(window.ActiveXObject)this.el.style.filter="";
this.el.style.opacity=1;
}
});
fx.ImgHeight=Class.create();
fx.ImgHeight.prototype=Object.extend(new fx.Base(),{
initialize:function(el,options){
this.el=$(el);
this.el.iniHeight=this.el.height;
this._set_options(options);
},
_set:function(){this.el.height=this.val;},
by:function(by){this.custom(this.el.height,this.el.height+by);},
to:function(to){this.custom(this.el.height,to);},
shrink:function(){this.custom(this.el.iniHeight,0);},
expand:function(){this.custom(0,this.el.iniHeight);},
toggle:function(){this.el.height>0?this.shrink():this.expand();}
});
fx.ImgWidth=Class.create();
fx.ImgWidth.prototype=Object.extend(new fx.Base(),{
initialize:function(el,options){
this.el=$(el);
this.el.iniWidth=this.el.width;
this._set_options(options);
},
_set:function(){this.el.width=this.val;},
by:function(by){this.custom(this.el.width,this.el.width+by);},
to:function(to){this.custom(this.el.width,to);},
shrink:function(){this.custom(this.el.iniWidth,0);},
expand:function(){this.custom(0,this.el.iniWidth);},
toggle:function(){this.el.width>0?this.shrink():this.expand();}
});
fx.Layout=Class.create();
fx.Layout.prototype=Object.extend(new fx.Base(),{
initialize:function(el,options){
this.el=$(el);
this.el.iniWidth=this.el.offsetWidth;
this.el.iniHeight=this.el.offsetHeight;
this.el.iniLeft=this.el.offsetLeft;
this.el.iniTop=this.el.offsetTop;
this._set_options(options);
}
});
fx.Height=Class.create();
Object.extend(Object.extend(fx.Height.prototype,fx.Layout.prototype),{
initialize:function(el,options){
this.el=$(el);
this.el.iniWidth=this.el.offsetWidth;
this.el.iniHeight=this.el.offsetHeight;
this.el.iniLeft=this.el.offsetLeft;
this.el.iniTop=this.el.offsetTop;
this._set_options(options);
},
_set:function(){
if(this.val==0){
this.val=1;
}
this.el.style.height=''+this.val+'px';
},
toggle:function(){
if(parseInt(this.el.style.height)>1){
this.custom(this.el.scrollHeight,1);
}else{
this.custom(1,this.el.scrollHeight);
}
},
reset:function(){
this.custom(null,this.el.iniHeight);
},
custom:function(from,to){
if(this.timer!=null)return;
from=parseInt(from);
to=parseInt(to);
this.distance=to-from;
if(from==null){
this.from_val=this.el.iniHeight;
}else{
this.from_val=from;
}
this.to_val=to;
this._go();
}
});
fx.Width=Class.create();
Object.extend(Object.extend(fx.Width.prototype,fx.Layout.prototype),{
initialize:function(el,options){
this.el=$(el);
var e=this.el;
this.el.style.overflow="hidden";e.iniWidth=e.offsetWidth;
e.iniHeight=e.offsetHeight;
e.iniLeft=e.offsetLeft;
e.iniTop=e.offsetTop;
this._set_options(options);
},
_set:function(){
this.el.style.width=this.val+"px";
},
toggle:function(){
if(this.el.offsetWidth>3){this.custom(this.el.offsetWidth,0);
}else{
this.custom(0,this.el.iniWidth);
}
}
});
fx.Left=Class.create();
Object.extend(fx.Left.prototype,fx.Layout.prototype);
Object.extend(fx.Left.prototype,{
_set:function(){
this.el.setStyle({left:this.val+'px'});
}
});
fx.Top=Class.create();
Object.extend(fx.Top.prototype,fx.Layout.prototype);
Object.extend(fx.Top.prototype,{
_set:function(){
this.el.setStyle({top:this.val+'px'});
}
});
fx.Scroll=Class.create();
fx.Scroll.prototype=Object.extend(new fx.Base(),{
initialize:function(options){
this._set_options(options);
},
scroll_to:function(el){
var dest=Position.cumulativeOffset($(el))[1];
var client=window.innerHeight||document.documentElement.clientHeight;
var full=document.documentElement.scrollHeight;
var top=window.pageYOffset||document.body.scrollTop||document.documentElement.scrollTop;
if(dest+client>full){
this.custom(top,dest-client+(full-dest));
}else{
this.custom(top,dest);
}
},
_set:function(){
window.scrollTo(0,this.now);
}
});
fx.FontSize=Class.create();
fx.FontSize.prototype=Object.extend(new fx.Base(),{
initialize:function(el,options){
this.el=$(el);
options.units=options.units||"em";
this._set_options(options);
},
_set:function(){
this.el.style.fontSize=this.val+this.options.units;
}
});
fx.FontColorPulse=Class.create();
fx.FontColorPulse.prototype=Object.extend(new fx.Base(),{
initialize:function(el,options){
this.el=$(el);
if(!this.el)return;
this.on_complete=Prototype.emptyFunction;
if(options){
this.on_complete=options.onComplete||Prototype.emptyFunction;
}
this._completed_count=0;
this._set_options(options);
this.options.onComplete=this._on_complete.bind(this);
this._orig_color=this.el.getStyle('color').parseColor('#ffffff')
},
_set:function(){
this.el.setStyle({color:$R(0,2).inject('#',function(m,v,i){
return m+(Math.round(this._base[i]+(this._delta[i]*this.val)).toColorPart());
}.bind(this))});
},
_on_complete:function(){
this._completed_count++;
if(this._completed_count==1){
var func=function(){
this.to_color(this._orig_color);
}.bind(this);
setTimeout(func,2000);
}
if(this._completed_count==2){
this.el.style.color='';
this.on_complete();
}
},
to_color:function(rgb){
if(!this.el)return;
this._startcolor=this.el.getStyle('color').parseColor('#ffffff');
this._endcolor=rgb||'#1e90ff';
this._base=$R(0,2).map(function(i){return parseInt(this._startcolor.slice(i*2+1,i*2+3),16)}.bind(this));
this._delta=$R(0,2).map(function(i){return parseInt(this._endcolor.slice(i*2+1,i*2+3),16)-this._base[i]}.bind(this));
this.custom(0,1);
}
});
fx.Move=Class.create();
fx.Move.prototype={
initialize:function(el,options){
if(options){
this.on_complete=options.onComplete||Prototype.emptyFunction;
this._completed_count=0;
options.onComplete=this._on_complete.bind(this);
}
this.l=new fx.Left(el,options);
if(options)options.onComplete=this._on_complete.bind(this);
this.t=new fx.Top(el,options);
this.el=$(el);
},
_on_complete:function(){
this._completed_count++;
if(this._completed_count==2){
this.on_complete();
}
},
by:function(x,y){
this.l.custom(this.el.offsetLeft,this.el.offsetLeft+x);
this.t.custom(this.el.offsetTop,this.el.offsetTop+y);
},
to:function(x,y){
this.l.custom(this.el.offsetLeft,x);
this.t.custom(this.el.offsetTop,y);
}
}
fx.MoveAndResize=Class.create();
fx.MoveAndResize.prototype={
initialize:function(el,options){
if(options){
this.on_complete=options.onComplete||Prototype.emptyFunction;
this._completed_count=0;
options.onComplete=this._on_complete.bind(this);
}
this.move=new fx.Move(el,options);
if(options)options.onComplete=this._on_complete.bind(this);
this.resize=new fx.Resize(el,options);
},
_on_complete:function(){
this._completed_count++;
if(this._completed_count==2){
this.on_complete();
}
},
to:function(x,y,w,h){
this.move.to(x,y);
this.resize.to(w,h);
}
};
fx.Resize=Class.create();
fx.Resize.prototype={
initialize:function(el,options){
if(options){
this.on_complete=options.onComplete||Prototype.emptyFunction;
this._completed_count=0;
options.onComplete=this._on_complete.bind(this);
}
this.w=new fx.Width(el,options);
if(options)options.onComplete=this._on_complete.bind(this);
this.h=new fx.Height(el,options);
this.el=$(el);
},
_on_complete:function(){
this._completed_count++;
if(this._completed_count==2){
this.on_complete();
}
},
toggle:function(){
this.w.toggle();
this.h.toggle();
},
by:function(w,h){
this.w.custom(this.el.offsetWidth,this.el.offsetWidth+w);
this.h.custom(this.el.offsetHeight,this.el.offsetHeight+h);
},
to:function(w,h){
this.w.custom(this.el.offsetWidth,w);
this.h.custom(this.el.offsetHeight,h);
},
hide_height:function(){
this.h.hide();
},
hide:function(){
this.w.hide();
this.h.hide();
}
};
fx.ImgSize=Class.create();
fx.ImgSize.prototype={
initialize:function(el,options){
this.w=new fx.ImgWidth(el,options);
if(options)options.onComplete=null;
this.h=new fx.ImgHeight(el,options);
this.el=$(el);
},
by:function(w,h){
this.w.by(w);
this.h.by(h);
},
to:function(w,h){
this.w.to(w);
this.h.to(h);
},
shrink:function(){
this.w.shrink();
this.h.shrink();
},
expand:function(){
this.w.expand();
this.h.expand();
},
toggle:function(){
this.w.toggle();
this.h.toggle();
}
};
fx.Morph=Class.create();
fx.Morph.prototype={
initialize:function(el,options){
this.resize=new fx.Resize(el,options);
if(options)options.onComplete=null;
this.move=new fx.Move(el,options);
this.fontsize=new fx.FontSize(el,options);
this.opacity=new fx.Opacity(el,options);
if(options.images){
this.images=options.images.collect(function(i){$(i)?new fx.ImgWidth(i,options):null}).compact();
}
this.el=$(el);
},
hide_height:function(){
this.resize.hide_height();
},
custom:function(params){
this.resize.to(params.width,params.height);
this.move.to(params.left,params.top);
this.fontsize.custom(params.old_font_size,params.new_font_size);
if(params.new_opacity){
this.opacity.custom(params.old_opacity,params.new_opacity);
}
if(this.images){this.images.invoke('toggle');}
}
};
fx.FadeSize=Class.create();
fx.FadeSize.prototype={
initialize:function(el,options){
this.el=$(el);
this.el.o=new fx.Opacity(el,options);
if(options)options.onComplete=null;
this.el.h=new fx.Height(el,options);
this.el.w=new fx.Width(el,options);
},
toggle:function(){
this.el.o.toggle();
for(var i=0;i<arguments.length;i++){
if(arguments[i]=='height')this.el.h.toggle();
if(arguments[i]=='width')this.el.w.toggle();
}
},
hide:function(){
this.el.o.hide();
for(var i=0;i<arguments.length;i++){
if(arguments[i]=='height')this.el.h.hide();
if(arguments[i]=='width')this.el.w.hide();
}
}
}
var Multi=new Object();
Multi=function(){};
Multi.prototype={
initialize:function(elements,options){
this.options=options;
this.el=$A(elements).collect(function(e){return $(e)?$(e):null;}).compact();
this.el.each(this._effect);
}
}
fx.MultiImgSize=Class.create();
fx.MultiImgSize.prototype=Object.extend(new Multi(),{
_effect:function(el){
el.imgSize=new fx.ImgWidth(el,this.options);
}
});
fx.MultiFadeSize=Class.create();
fx.MultiFadeSize.prototype=Object.extend(new Multi(),{
_effect:function(el){
el.fs=new fx.FadeSize(el,this.options);
},
showThisHideOpen:function(el,delay,mode){
for(i=0;i<this.els.length;i++){
if(this.els[i].offsetHeight>0&&this.el[i]!=el&&this.el[i].h.timer==null&&el.h.timer==null){
this.els[i].fs.toggle(mode);
setTimeout(function(){el.fs.toggle(mode);}.bind(el),delay);
}
}
},
hide:function(el,mode){
el.fs.hide(mode);
}
});
var Remember=new Object();
Remember=function(){};
Remember.prototype={
initialize:function(el,options){
this.el=$(el);
this.days=365;
this.options=options;
this.effect();
var cookie=this.readCookie();
if(cookie){
this.fx.val=cookie;
this.fx.set();
}
},
setCookie:function(value){
var date=new Date();
date.setTime(date.getTime()+(this.days*24*60*60*1000));
var expires="; expires="+date.toGMTString();
document.cookie=this.el+this.el.id+this.prefix+"="+value+expires+"; path=/";
},
readCookie:function(){
var nameEQ=this.el+this.el.id+this.prefix+"=";
var ca=document.cookie.split(';');
for(var i=0;i<ca.length;i++){
var c=ca[i];
while(c.charAt(0)==' ')c=c.substring(1,c.length);
if(c.indexOf(nameEQ)==0)return c.substring(nameEQ.length,c.length);
}
return false;
},
custom:function(from,to){
if(this.fx.val!=to){
this.setCookie(to);
this.fx.custom(from,to);
}
}
}
fx.RememberHeight=Class.create();
fx.RememberHeight.prototype=Object.extend(new Remember(),{
_effect:function(){
this.fx=new fx.Height(this.el,this.options);
this.prefix='height';
},
toggle:function(){
if(this.el.offsetHeight==0)this.setCookie(this.el.scrollHeight);
else this.setCookie(0);
this.fx.toggle();
},
resize:function(to){
this.setCookie(this.el.offsetHeight+to);
this.fx.custom(this.el.offsetHeight,this.el.offsetHeight+to);
},
hide:function(){
if(!this.readCookie()){
this.fx.hide();
}
}
});
fx.RememberText=Class.create();
fx.RememberText.prototype=Object.extend(new Remember(),{
_effect:function(){
this.fx=new fx.FontSize(this.el,this.options);
this.prefix='text';
}
});
var ParseClassNames=Class.create();
ParseClassNames.prototype={
initialize:function(options){
var babies=document.getElementsByTagName('*')||document.all;
for(var i=0;i<babies.length;i++){
var el=babies[i];
var effects=this.getEffects(el);
for(var j=0;j<effects.length;j++){
if(j==1&&options)options.onComplete=null;
el[effects[j]+"fx"]=new fx[effects[j]](el,options);
}
if(el.rel){
el.crel=el.rel.split(' ');
if(el.crel[0].indexOf("fx_")>-1){
var event=el.crel[0].replace('fx_','');
var tocompute=this.getEffects($(el.crel[1]));
el["on"+event]=function(){
for(var f=0;f<tocompute.length;f++){
$(this.crel[1])[tocompute[f]+"fx"][this.crel[2]||"toggle"](this.crel[3]||null,this.crel[4]||null);
}
}
}
}
}
},
getEffects:function(el){
var effects=new Array();
var css=el.className.split(' ');
for(var i=0;i<css.length;i++){
if(css[i].indexOf('fx_')>-1){
var effect=css[i].replace('fx_','');
effects.push(effect);
}
}
return effects;
}
}
Glyde.is_valid={
money_string:function(string){
var money_regexp=/^((\d+(\.\d{1,2})?)|(\.\d{1,2}))$/;
return money_regexp.test(string);
},
visa_number:function(string){
var visa_regexp=/^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/;
return visa_regexp.test(string);
},
mastercard_number:function(string){
var mastercard_regexp=/^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/;
return mastercard_regexp.test(string);
},
amex_number:function(string){
var amex_regexp=/^3[4,7]\d{13}$/;
return amex_regexp.test(string);
},
email_address:function(address){
var valid_email_regexp=/^[\w.%+-]+@[\w.-]+\.[\w]{2,6}$/;
return valid_email_regexp.test(address);
},
upc:function(upc_string){
var normalized_upc=upc_string.replace(/[- ]/g,'');
return/^[\dxX]{10,13}$/.test(normalized_upc);
},
external_sku:function(sku_string){
var normalized_sku=sku_string.replace(/ /g,'');
return/^[\x21-\x7e]{2,255}$/.test(normalized_sku);
}
};
Glyde.cookie={
get_all:function(){
var res={};
strs=document.cookie.split('; ');
for(var i=0;i<strs.length;++i){
var p=strs[i];
if(p.indexOf('=')){
var dyad=p.split('=');
res[dyad[0]]=dyad[1];
}
}
return $H(res);
},
get:function(name){
var cooks=Glyde.cookie.get_all();
return cooks.get(name);
},
set:function(name,value,days){
var expires='';
if(days){
var date=new Date();
date.setTime(date.getTime()+(days*24*60*60*1000));
expires="; expires="+date.toGMTString();
}
document.cookie=name+"="+value+expires+"; path=/";
},
remove:function(name){
Glyde.cookie.set(name,'',-1);
}
};
(function(){
var $$=Glyde.$$;
var $=Glyde.$;
_create_element=function(tag_name,attributes){
var el=document.createElement(tag_name);
var attrs=attributes||{};
var key,val;
for(key in attrs){
val=attrs[key];
el.setAttribute(key,val);
}
return el;
};
Glyde.dom={
add_stylesheet:function(href){
var head=document.getElementsByTagName('head')[0];
head.appendChild(_create_element('link',{
href:href,
type:'text/css',
rel:'stylesheet',
media:'screen'
}));
},
radio_value:function(radio_name){
var els=document.getElementsByName(radio_name);
var val=null;
for(var i=0;i<els.length;i++){
if(els[i].checked){
val=els[i].value;
break;
}
}
return val;
},
disable_link:function(id,disabled_class_name){
var a=$(id);
if(disabled_class_name==null){disabled_class_name='disabled';}
if(a&&(a.__enabled||(typeof(a.__enabled)=='undefined'))){
a._onclick=a.onclick;
a.onclick="javascript: void(0)";
a.addClassName(disabled_class_name);
a.__enabled=false;
}
},
enable_link:function(id,disabled_class_name){
var a=$(id);
if(disabled_class_name==null){disabled_class_name='disabled';}
if(a&&!a.__enabled){
a.onclick=a._onclick||a.onclick;
a._onclick=void(0);
a.removeClassName(disabled_class_name);
a.__enabled=true;
}
},
page_id:function(){
return document.getElementsByTagName('body')[0].id;
},
is_empty_field:function(field_id){
return Glyde.is.empty_string($(field_id).value);
},
destroy_node_ie:function(node){
var trash_node_name='ie_trash_can';
var trash_node=$(trash_node_name);
if(trash_node==null){
trash_node=new Element('div',{'id':trash_node_name});
trash_node.style.display='none';
document.body.appendChild(trash_node);
}
trash_node.appendChild(node);
trash_node.innerHTML='';
},
copy_to_clipboard_ie:function(str){
if(Glyde.Browser.IE){window.clipboardData.setData('Text',str);}
},
include_script:function(script_src,callback){
console.log('including '+script_src);
var tag_create_func=function(){
var script_elem=document.createElement("script");
script_elem.setAttribute("type","text/javascript");
script_elem.onload=script_elem.onreadystatechange=
function(){
Glyde.dom._handle_script_load(script_elem,callback);
};
script_elem.onerror=function(){
callback();
}
script_elem.setAttribute("src",script_src);
var head=(document.getElementsByTagName("head")[0]||
document.documentElement);
head.insertBefore(script_elem,head.firstChild);
}.bind(this);
setTimeout(tag_create_func,1);
},
_handle_script_load:function(script_elem,callback){
if((script_elem.readyState&&script_elem.readyState!=="complete"&&
script_elem.readyState!=="loaded")){
return;
}
script_elem.onload=script_elem.onreadystatechange=null;
var head=document.getElementsByTagName("head")[0]||document.documentElement;
if(head&&script_elem&&script_elem.parentNode){
script_elem.parentNode.removeChild(script_elem);
}
if(callback)callback();
}
};
})();
Glyde.xhr={
json_request:function(url,on_success,on_failure,parameters,method){
new Ajax.Request(url,{
method:method||'get',
parameters:parameters,
onComplete:function(response,o){
var response_json=response.responseJSON;
if(response_json&&response_json.success){
if(on_success){on_success(response_json);}
}else{
if(on_failure){on_failure(response);}
}
}
});
}
}
Glyde.JsonFragmentObject=Class.create({
initialize:function(json,silence_errors){
this._report_errors=!silence_errors;
this._loaded_fragment_names=[];
this._create_fragments(json);
},
_fragments:function(json){
return{};
},
is_empty:function(){
return this._loaded_fragment_names.length==0;
},
toString:function(){
var fragments=this._cached_fragments();
var buffer=this._loaded_fragment_names.inject([],function(array,fragment_name){
var property_buffer=[],stats_buffer=[];
var required_props=fragments[fragment_name].required;
var optional_props=fragments[fragment_name].optional;
var show_stats=false;
if(required_props){
var num_required=0;
required_props.each(function(property_name){
this._property_line_str(property_buffer,property_name,this[property_name])
++num_required;
}.bind(this));
stats_buffer.push(num_required,'/',required_props.length,' req');
}
if(optional_props){
var num_optional=0;
optional_props.each(function(property_name){
this._property_line_str(property_buffer,property_name,this[property_name],true)
++num_optional;
}.bind(this));
if(stats_buffer.length){stats_buffer.push(', ');}
stats_buffer.push(num_optional,'/',optional_props.length,' opt');
}
array.push('\n',fragment_name);
if(show_stats){array.push(' ',stats_buffer.join(''));}
array=array.concat(property_buffer);
return array;
}.bind(this));
return buffer.join('');
},
_property_line_str:function(buffer,property_name,value,is_optional){
if(value==null){
value='<null>';
}else{
if(Glyde.is.array(value)){value='[ '+value.join(', ')+' ]';}
}
if(is_optional){property_name+=' opt';}
buffer.push('\n  ',property_name,': ',value);
},
_cached_fragments:function(json){
if(this._cached_fragments_obj==null){this._cached_fragments_obj=this._fragments(json);}
return this._cached_fragments_obj;
},
_create_fragments:function(json){
var fragments=this._cached_fragments(json);
$H(fragments).keys().each(function(fragment_name){
var props=fragments[fragment_name];
var num_required=0,num_optional=0;
if(props.required){
var missing_required=this._add_properties(fragment_name,props.required,json,true);
num_required=props.required.length-missing_required.length;
if(missing_required.length&&missing_required.length<props.required.length){
this._report_property_error(fragment_name,missing_required.join(', '),"<undefined>");
}
}
if(props.optional){
var missing_optional=this._add_properties(fragment_name,props.optional,json)
num_optional+=props.optional.length-missing_optional.length;
}
if(num_required){
this._loaded_fragment_names.push(fragment_name);
var initializer=this['_init_'+fragment_name+'_fragment'];
if(initializer){(initializer.bind(this))();}
}
}.bind(this));
},
_add_properties:function(fragment_name,property_names,json,is_required){
var undefined_props=[];
property_names.each(function(property_name){
if(typeof json[property_name]!='undefined'){
if(is_required&&json[property_name==null]){
this._report_property_error(fragment_name,property_name,"<null>");
}
this[property_name]=json[property_name];
}else{
this[property_name]=null;
undefined_props.push(property_name);
}
}.bind(this));
return undefined_props;
},
_report_property_error:function(fragment_name,property_name,error){
if(this._report_errors){
console.log(['JsonFragmentError: ',fragment_name,'[',property_name,'] ',error].join(''));
}
}
});
Object.extend(Glyde.JsonFragmentObject,{
find:function(url,ctor,on_success,on_failure){
Glyde.xhr.json_request(url,
function(json_response){
on_success&&on_success(ctor(json_response));
},
function(response){
on_failure&&on_failure(response);
}
);
}
});
Glyde.User=Class.create({
initialize:function(json_data){
if(Glyde.has.all_properties(json_data,this._required_stats_properties)){
this._create_stats(json_data);
}
$H(json_data).keys().each(function(property){
this[property]=json_data[property];
}.bind(this));
},
_required_stats_properties:[
'num_listings','num_listings_above_market_price','num_purchase_orders'
],
_optional_stats_properties:[
'num_referrals_completed','num_referrals_until_bonus','per_user_referral_amount_cents','bonus_referral_amount_cents'
],
_create_stats:function(json_data){
var u=this;
var s=u.stats={
CHANGE_EVENT:'user:stats:change',
_set_property:function(property_name,new_value){
var new_value=Math.max(new_value,0);
var old_value=u.stats['_'+property_name];
u.stats['_'+property_name]=new_value;
Glyde.notify.publish(u.stats.CHANGE_EVENT,{
property_name:property_name,
old_value:old_value,
new_value:new_value
});
}
};
function add_property_accessors(property_name){
s['_'+property_name]=json_data[property_name];
delete json_data[property_name];
s[property_name]=function(){return s['_'+property_name];};
s['set_'+property_name]=function(new_value){s._set_property(property_name,new_value);};
s['increment_'+property_name]=function(){s._set_property(property_name,s[property_name]()+1);};
s['decrement_'+property_name]=function(){s._set_property(property_name,s[property_name]()-1);};
}
this._required_stats_properties.each(add_property_accessors);
this._optional_stats_properties.each(add_property_accessors);
}
});
Glyde.Glu=Class.create(Glyde.JsonFragmentObject,{
initialize:function($super,json,silence_errors){
$super(json,silence_errors);
var stock_info=new Glyde.StockInfo(json);
if(!stock_info.is_empty()){this.stock_info=stock_info;}
},
find_stock_info:function(stock_info_fragment_str,sku_fragment_str,buyable_skus_only,on_success,on_failure,secure){
Glyde.StockInfo.find(this.id,stock_info_fragment_str,sku_fragment_str,buyable_skus_only,
function(stock_info){
this.stock_info=stock_info;
on_success&&on_success(this.id,stock_info);
}.bind(this),
function(response){
on_failure&&on_failure(response);
},
true
);
},
friendly_vertical_name:function(pluralize,initial_capital,capitalize_acronyms){
return Glyde.Glu.friendly_vertical_name(this.vertical,pluralize,initial_capital,capitalize_acronyms);
},
condition:function(condition_id){
return Glyde.Sku.condition(this.condition_type,condition_id);
},
condition_name:function(condition_id){
return Glyde.Sku.condition_name(this.condition_type,condition_id);
},
conditions:function(){
return Glyde.Sku.conditions(this.condition_type);
},
tag_category_preposition:function(tag_type){
return Glyde.Glu.tag_category_preposition(tag_type,this.vertical);
},
cover_dimensions_for_max_w_h:function(max_width,max_height){
return Glyde.image.cover_dimensions_for_max_w_h(this,max_width,max_height);
},
cover_url_for_max_w_h:function(max_width,max_height,extension,suffix,protocol){
return Glyde.image.fully_qualified_cover_url_for_max(this,max_width,max_height,extension,suffix,protocol);
},
cover_url:function(width,height,extension,suffix,protocol){
return Glyde.image.fully_qualified_cover_url(this,width,height,extension,suffix,protocol);
},
sprited_cover_url:function(w1,h1,w2,h2,extension,suffix,protocol){
return Glyde.image.full_qualified_sprited_cover_url(this,w1,h1,w2,h2,extension,suffix,protocol);
},
product_page_url:function(){
return Glyde.Glu._product_url(this,false);
},
buy_page_url:function(){
return Glyde.Glu._product_url(this,true);
},
_normalized_rating:function(){
var rating=this.rating;
return(this.vertical=='books'||!rating||rating=='')?null:
this['_normalized_'+this.vertical+'_rating'](rating);
},
_normalized_videos_rating:function(rating){
if(!Glyde.Glu._video_rating_descriptions){
Glyde.Glu._video_old_rating_map={
'M':'PG',
'X':'NC-17',
'GP':'PG'
};
Glyde.Glu._video_rating_descriptions={
'G':'General audiences. Suitable for all ages',
'PG':'Parental guidance suggested. Some material may not be suitable for children under 10',
'PG-13':'Parents strongly cautioned. Some material may be inappropriate for children under 13',
'R':'Restricted. Under 17 requires accompanying parent or adult guardian',
'NC-17':'Suitable only for ages 17 and older'
}
}
var mapped_old_rating=Glyde.Glu._video_old_rating_map[rating];
if(mapped_old_rating){rating=mapped_old_rating;}
var rating_description=Glyde.Glu._video_rating_descriptions[rating];
if(rating_description){
return{
title:rating,
abbreviation:rating,
description:rating_description
};
}else{
return null;
}
},
_normalized_games_rating:function(rating){
if(!Glyde.Glu._games_rating_descriptions){
Glyde.Glu._games_old_rating_map={
'Kids to Adults':'Everyone'
};
Glyde.Glu._games_rating_descriptions={
'Early Childhood':['EC','Suitable for ages 3 and older. Contains no material that parents would find inappropriate'],
'Everyone':['E','Suitable for ages 6 and older. May contain minimal cartoon, fantasy or mild violence and/or infrequent use of mild language'],
'E10+':['E10+','Suitable for ages 10 and older. May contain cartoon, fantasy or mild violence, mild language and/or minimal suggestive themes'],
'Teen':['T','Suitable for ages 13 and older. May contain violence, suggestive themes, crude humor, minimal blood, simulated gambling, and/or infrequent use of strong language'],
'Mature':['M','Suitable for persons ages 17 and older. May contain intense violence, blood and gore, sexual content and/or strong language'],
'Adults Only':['AO','Should only be played by persons 18 years and older. May include prolonged scenes of intense violence and/or graphic sexual content and nudity']
}
}
var mapped_old_rating=Glyde.Glu._games_old_rating_map[rating];
if(mapped_old_rating){rating=mapped_old_rating;}
var rating_description=Glyde.Glu._games_rating_descriptions[rating];
if(rating_description){
return{
title:rating,
abbreviation:rating_description[0],
description:rating_description[1]
};
}else{
return null;
}
},
_normalized_music_rating:function(rating){
if(rating=='Parental Advisory'){
return{
title:rating,
abbreviation:'PA',
description:'Explicit content. May contain strong language or depictions of violence, sex or substance abuse. Parental discretion is advised'
}
}
},
_init_description_fragment:function(){
if(this.vertical=='music'&&this.track_list){
this.track_list_by_disc=Glyde.Glu.cd_tracklist_to_disc_tracklists(this.track_list);
}
},
_init_release_fragment:function(){
if(this.rating){this.rating=this._normalized_rating();}
},
_fragments:function(json){
var fragments={
basic:{required:['id','title','vertical','orig_release_year','is_sellable']},
image:{required:['has_image','img_width','img_height']},
creators:{required:['creators']},
description:{optional:['description']},
lineup_release_info:{
optional:['show_year','show_author','product_codes_html']
},
release:{
required:['release_medium_name','release_short_name','condition_type'],
optional:['release_long_name']
}
}
var vertical=json.vertical;
if(vertical!='books'){fragments.release.required.push('rating');}
switch(json.vertical){
case'games':
fragments.basic.required.push('platform');
break;
case'videos':
fragments.creators.required.push('stars','cast')
fragments.release.required.push('release_num_discs');
break;
case'music':
fragments.description.required=['num_discs','num_tracks','track_list'];
fragments.release.required.push('release_num_discs');
break;
case'books':
fragments.release.required.push('binding');
break;
}
return fragments;
},
toString:function($super,full_object){
if(full_object){
return $super();
}else{
var title=this.title.truncate_with_delimiters(12,null,null,true);
var release='';
if(this.release_short_name){
release=this.release_short_name.truncate_with_delimiters(8,null,null,true);
}
return[this.id,": ",title,"/",release].join('');
}
},
_property_line_str:function($super,buffer,property_name,value){
if(value!=null){
if(property_name=='description'){
value=value.truncate_with_delimiters(28,null,null,true);
}else if(property_name=='rating'){
value=value.title;
}
}
$super(buffer,property_name,value);
}
});
Object.extend(Glyde.Glu,{
find:function(id,glu_fragment_str,on_success,on_failure,secure){
var request_url=this.glu_fragment_request_url(id,'glu_fragments',glu_fragment_str,secure);
var ctor=function(json){return new Glyde.Glu(json.glu)};
Glyde.JsonFragmentObject.find(request_url,ctor,on_success,on_failure);
},
find_product_set:function(id,glu_fragment_str,include_self,on_success,on_failure,secure){
var params={include_self:include_self};
var request_url=this.glu_fragment_request_url(id,'product_set_fragments',glu_fragment_str,params,secure);
Glyde.JsonFragmentObject.find(request_url,this._to_glus_array,on_success,on_failure);
},
find_lineup:function(id,glu_fragment_str,on_success,on_failure,offset,limit,secure){
var params={};
if(offset){params.offset=offset;}
if(limit){params.limit=limit;}
var request_url=this.glu_fragment_request_url(id,'lineup_fragments',glu_fragment_str,params,secure)
Glyde.JsonFragmentObject.find(request_url,
function(json){
return{glu_id:id,total:json.total,glus:this._to_glus_array(json)};
}.bind(this),
on_success,
on_failure
);
},
is_valid_vertical:function(vertical_name){
return['videos','music','games','books'].indexOf(vertical_name)!=-1;
},
friendly_vertical_name:function(vertical,pluralize,initial_capital,capitalize_acronyms){
var result;
if(vertical=='videos'){
result=(capitalize_acronyms)?'DVD':(initial_capital)?'Dvd':'dvd';
}else if(vertical=='music'){
result=(capitalize_acronyms)?'CD':(initial_capital)?'Cd':'cd';
}else{
if(vertical.endsWith('s')){
result=vertical.slice(0,-1);
}else{
result=vertical;
}
if(initial_capital){result=result.capitalize();}
}
return pluralize?(result+'s'):result;
},
base_request_url:function(secure){
return['http',(secure?'s':''),'://',Glyde.config.server_name,'/glus/'].join('');
},
glu_request_url:function(glu_id,method_name,params,secure){
var url=[this.base_request_url(secure),glu_id,'/',method_name];
if(params){url.push('?',$H(params).toQueryString());}
return url.join('');
},
glu_fragment_request_url:function(glu_id,method_name,glu_fragment_str,params,secure){
params=params||{};
if(glu_fragment_str){params.glu_fragment_str=glu_fragment_str;}
return this.glu_request_url(glu_id,method_name,params,secure);
},
product_page_url:function(glu){
return this._product_url(glu,false);
},
buy_page_url:function(glu){
return this._product_url(glu,true);
},
_product_url:function(glu,buy_page){
var glu_id=glu.glu_id||glu.id;var initial_path=(buy_page?'/#!viabrowse':'')+'/products/';
return['http://',Glyde.config.server_name,initial_path,glu_id,'/',encodeURIComponent(glu.title.title_for_url())].join('');
},
_to_glus_array:function(json){
return $A(json.glus).inject([],function(array,json_glu){
array.push(new Glyde.Glu(json_glu));
return array;
});
},
add_glu_id_to_glus:function(glus_array){
var len=glus_array.length;
for(var i=0;i<len;++i){
glus_array[i].glu_id=glus_array[i].id;
}
},
cd_tracklist_to_disc_tracklists:function(extra_info_track_list){
var disc_track_lists=[];
var tl=extra_info_track_list;
if(tl.length>1&&tl[0].track_num==0&&tl[0].title=='No track list available'){
tl.shift();
}
for(var i=0;i<tl.length;++i){
if(i==0&&tl[i].track_num==0&&tl[i+1]&&tl[i+1].track_num==0){continue;}
if(i==0&&tl[i].track_num!=0){
disc_track_lists.push(tl);
break;
}
if(tl[i].track_num==0){
var arr=new Array();
var x=i+1;
arr.push(tl[i]);
while(x<tl.length){
if(tl[x].track_num==0)break;
arr.push(tl[x]);
++x;
}
disc_track_lists.push(arr);
}
}
return disc_track_lists;
},
tag_category_preposition:function(tag_type,vertical){
var tag_category_dictionary=this.tag_category_dictionary();
return tag_category_dictionary[vertical][tag_type]||'about';
},
tag_category_dictionary:function(){
if(!this._tag_category_dictionary){
this._tag_category_dictionary={
'books':{
classification:'in',
creator:'by',
movement:'about',
location:'about',
category:'in',
series:'in',
edition:'in'
},
'games':{
company:'by',
category:'in',
platform:'for',
rating:'rated',
series:'in'
},
'music':{
creator:'by',
category:'in',
mus_label:'from'
},
'videos':{
star:'with',
cast:'with',
creator:'by',
keyword:'in',
category:'in',
language:'in'
}
};
}
return this._tag_category_dictionary;
}
});
Glyde.Sku=Class.create(Glyde.JsonFragmentObject,{
initialize:function($super,json,silence_errors){
$super(json,silence_errors);
if(this.condition_id&&this.condition_type){
var static_info=Glyde.Sku.conditions(this.condition_type)[this.condition_id-1];
this.condition_name=static_info.name;
this.condition_descriptions=static_info;
}
},
toString:function(){
var buffer=[this.condition_name,': { '];
var fragments=this._fragments();
var num_found=0
var render_properties=function(property_names,is_optional){
if(property_names&&property_names.length){
property_names.each(function(property_name){
if(this[property_name]!=null){
if(num_found++){buffer.push(', ');}
buffer.push(property_name,': ',this[property_name]);
}
}.bind(this));
}
}.bind(this);
this._loaded_fragment_names.each(function(fragment_name){
var fragment=fragments[fragment_name];
render_properties(fragment.required);
render_properties(fragment.optional,true);
})
buffer.push(' }');
return buffer.join('');
},
_fragments:function(){
return{
ask_price_counts:{required:['ask_price_counts']},
basic:{required:['id','condition_id','condition_type','glu_id']},
full:{
required:['lowest_price','mailer_cost','market_price','suggested_price','floor_price'],
optional:['best_price']
},
purchase_pricing:{
required:['best_price','shipping_price'],
optional:['percent_off_msrp']
}
};
}
});
Object.extend(Glyde.Sku,{
conditions:function(condition_type){
switch(condition_type){
case'BkCondition':return Glyde.conditions.books;
case'VidCondition':return Glyde.conditions.videos;
case'GameCartridgeCondition':return Glyde.conditions.games_cartridge;
case'GameDiscCondition':return Glyde.conditions.games_disc;
case'MusCondition':return Glyde.conditions.music;
default:return null;
}
},
condition:function(condition_type,condition_id){
return this.conditions(condition_type)[condition_id-1];
},
condition_name:function(condition_type,condition_id){
return this.conditions(condition_type)[condition_id-1].name;
}
});
Glyde.RgsTags={
tags_from_rgs_bundle_data:function(data){
var tags=[],used_tag_ids={};
if(data.related_glu_bundles&&!data.__tags){
var x=0;var blen=data.related_glu_bundles.length;var glu_bundle;
for(x;x<blen;++x){
glu_bundle=data.related_glu_bundles[x];
if(glu_bundle.tags){
var i=0;var tlen=glu_bundle.tags.length;var tag;
for(i;i<tlen;++i){
tag=glu_bundle.tags[i];
if(used_tag_ids[tag.id]==null&&(tag.glu_count==null||tag.glu_count>0)){
tags.push(tag);
used_tag_ids[tag.id]=true;
}
}
}
}
data.__tags=tags;
}
return data.__tags;
},
tags_by_match_type:function(tags,active_tags_only){
var results={
match_any:[],
match_all:[],
match_none:[]
};
tags.each(function(tag){
if(active_tags_only&&!tag.is_active){return;}
results['match_'+tag.match_type].push(tag);
});
return results;
}
};
Glyde.StockInfo=Class.create(Glyde.JsonFragmentObject,{
_init_skus_fragment:function(){
var has_skus=false;
if(this.skus&&this.skus.length){
has_skus=true;
this.skus.each(function(sku_json,index){this.skus[index]=new Glyde.Sku(sku_json);}.bind(this));
this.lowest_priced_sku=this.skus.sortBy(function(sku){return(sku.best_price&&sku.best_price.cents)||0;})[0];
}
this.has_skus=has_skus;
},
_fragments:function(json){
return{
availability:{required:['is_available']},
lowest_price:{required:['lowest_price_cents'],optional:['msrp_percent_off']},
skus:{required:['skus']}
};
},
_property_line_str:function($super,buffer,property_name,value){
if(value!=null){
if(property_name=='skus'){
var sku_buffer=[];
value.each(function(sku){sku_buffer.push('\n    '+sku);})
value=sku_buffer.join('');
}
}
$super(buffer,property_name,value);
}
});
Object.extend(Glyde.StockInfo,{
find:function(id,stock_info_fragment_str,sku_fragment_str,buyable_skus_only,on_success,on_failure,secure){
var request_url=this.fragment_request_url(id,stock_info_fragment_str,sku_fragment_str,buyable_skus_only,secure);
var ctor=function(json){return new Glyde.StockInfo(json.stock_info)};
Glyde.JsonFragmentObject.find(request_url,ctor,on_success,on_failure);
},
fragment_request_url:function(id,stock_info_str,sku_str,buyable_skus_only,secure){
var url_buffer=[Glyde.Glu.base_request_url(secure),id,'/stock_info_fragments?'];
if(stock_info_str){url_buffer.push('stock_info_fragment_str=',stock_info_str,'&');}
if(sku_str){url_buffer.push('sku_fragment_str=',sku_str,'&');}
if(buyable_skus_only){url_buffer.push('buyable_skus_only=true');}
return url_buffer.join('');
}
});
Glyde.share={
MAX_TWITTER_MESSAGE_LENGTH:120,twitter_url:function(tweet){
return'http://twitter.com/home?status='+encodeURIComponent(tweet);
},
open_twitter_window:function(tweet){
window.open(Glyde.share.twitter_url(tweet),'twitter_share');
},
open_facebook_window:function(url,publish_data,campaign_type,referral_code,callback){
var tracking_params={};
if(campaign_type){
tracking_params={
utm_source:'glyde',
utm_campaign:'raf-'+campaign_type,
utm_medium:'fb'
};
}
if(referral_code)tracking_params['rid']=referral_code;
var new_url=Glyde.share._add_query_params(url,tracking_params);
if(publish_data&&window.FB&&FB.ui){
var attachment={
name:publish_data.title,
caption:Glyde.config.server_name,
href:new_url
};
if(publish_data.description){
attachment.description=publish_data.description;
}
if(Glyde.rails_env=='production'){
attachment.media=[{'type':'image','src':publish_data.image,'href':new_url}];
}
FB.ui(
{
method:'stream.publish',
message:publish_data.message,
attachment:attachment,
user_message_prompt:publish_data.prompt
}
);
}else{
var query_params=$H({u:new_url}).toQueryString();
var window_params='toolbar=0,status=0,width=626,height=324';
window.open('http://www.facebook.com/sharer.php?'+query_params,'facebook_share',window_params);
}
},
_add_query_params:function(url,params_hash){
if(Object.keys(params_hash).length==0)return url;
var query_match=url.match(/\?([^#]+)/);
var url_query;
if(query_match)
url_query=Object.toQueryString(Object.extend(query_match[1].parseQuery(),params_hash));
else
url_query=Object.toQueryString(params_hash);
var url_anchor=url.split('#')[1];
var url_base=url.split(/[?#]/)[0];
return url_base+'?'+url_query+(url_anchor?'#'+url_anchor:'');
},
mailto_url:function(recipients,subject,body){
var url=['mailto:',recipients,'?'];
if(subject){url.push('subject=',encodeURIComponent(subject),'&');}
if(body){url.push('body=',encodeURIComponent(body));}
return url.join('');
}
};
Glyde.Money=Glyde.Class.create({
initialize:function(cents){
this.cents=cents;
},
dollars_and_cents:function(){
return Glyde.Money.cents_to_dollars_and_cents(this.cents);
}
});
Glyde.object_extend(Glyde.Money,{
format_cents:function(cents){
return Glyde.Money.cents_to_dollars_and_cents(cents);
},
cents_to_dollars_and_cents:function(cents){
var dollars=cents/100;
return dollars.toFixed(2);
},
float_to_cents_int:function(float_str){
var parts=float_str.split('.');
if(parts.length==1){
return parseInt(parts[0],10)*100;
}else{
return parseInt(parts[0]+parts[1].substring(0,2),10);
}
},
has_visa_prefix:function(number){
return/^4/.test(number);
},
has_mastercard_prefix:function(number){
return/^5[1-5]/.test(number);
},
has_amex_prefix:function(number){
return/^3[4,7]/.test(number);
}
});
Glyde.image={
fully_qualified_sprited_cover_url:function(glu,w1,h1,w2,h2,extension,suffix,protocol){
return Glyde.image.fully_qualified_url(Glyde.image.sprited_cover_path(glu,w1,h1,w2,h2,extension,suffix),protocol)
},
fully_qualified_cover_url_for_max_w_h:function(glu,max_width,max_height,extension,suffix,protocol){
return Glyde.image.fully_qualified_url(Glyde.image.cover_path_for_max_w_h(glu,max_width,max_height,extension,suffix),protocol);
},
fully_qualified_cover_url:function(glu,width,height,extension,suffix,protocol){
return Glyde.image.fully_qualified_url(Glyde.image.cover_path(glu,width,height,extension,suffix),protocol);
},
sprited_cover_path:function(item,max_width1,max_height1,max_width2,max_height2,extension,suffix){
var dims1=Glyde.image.cover_dimensions_for_max_w_h(item,max_width1,max_height1);
var dims2=Glyde.image.cover_dimensions_for_max_w_h(item,max_width2,max_height2);
var i=item.attrs?item.attrs:item;
var id=i.glu_id||i.id;
var image_suffix='.'+(suffix!=null?suffix:'jpg');
var path_buffer=['images/'];
if(!i.has_image){path_buffer.push('missing/');}
path_buffer.push(i.vertical,'/',dims1.width,'x',dims1.height);
path_buffer.push('-',dims2.width,'x',dims2.height,'/',id);
if(extension){path_buffer.push(extension);}
path_buffer.push(image_suffix);
return path_buffer.join('');
},
cover_path_for_max_w_h:function(item,max_width,max_height,extension,suffix){
var dims=Glyde.image.cover_dimensions_for_max_w_h(item,max_width,max_height);
return this._cover_path(item,dims,extension,suffix);
},
cover_path:function(item,width,height,extension,suffix){
var dims={width:width,height:height};
return this._cover_path(item,dims,extension,suffix);
},
_cover_path:function(item,dims,extension,suffix){
var i=item.attrs?item.attrs:item;
var id=i.glu_id||i.id;
var image_suffix='.'+(suffix!=null?suffix:'jpg');
var path_buffer=['images/'];
if(!i.has_image){path_buffer.push('missing/');}
path_buffer.push(i.vertical,'/',dims.width,'x',dims.height,'/',id);
if(extension){path_buffer.push(extension);}
path_buffer.push(image_suffix);
return path_buffer.join('');
},
cover_dimensions_for_max_w_h:function(item,max_width,max_height){
var i=item.attrs?item.attrs:item;
var width=height=0;
if(i.img_height&&i.img_width){
if(i.img_height>i.img_width){
width=Math.round(i.img_width/i.img_height*max_height);
height=(width>max_width)?Math.round((i.img_height/i.img_width)*max_width):max_height;
width=Math.min(width,max_width);
}else{
height=Math.round((i.img_height/i.img_width)*max_width);
width=(height>max_height)?Math.round((i.img_width/i.img_height)*max_height):max_width;
height=Math.min(height,max_height);
}
}else{
height=max_height;
width=max_width;
}
if(i.vertical!='books'){
height=Math.round(height*0.92);
width=Math.round(width*0.92);
}
return{height:height,width:width};
},
cover_url_with_suffix:function(url,suffix,extension){
var matches=url.match(/(.*?)[A-Za-z]?\.(png|jpg|gif)$/);
return matches[1]+(suffix?suffix:'')+'.'+(extension?extension:matches[2]);
},
dimensions_from_cover_url:function(url){
var size_regexp=/\/(\d+)x(\d+)\/[^\/]+/;
var matches=url.match(size_regexp);
return{width:parseInt(matches[1]),height:parseInt(matches[2])};
},
dimensions_from_sprited_cover_url:function(url){
var size_regexp=/\/(\d+)x(\d+)-(\d+)x(\d+)\/[^\/]+/;
var matches=url.match(size_regexp);
return{
small_width:parseInt(matches[1]),
small_height:parseInt(matches[2]),
large_width:parseInt(matches[3]),
large_height:parseInt(matches[4])
};
},
fully_qualified_url:function(relative_url,protocol){
var url_buffer=[Glyde.image.asset_host(relative_url,protocol),'/static/',Glyde.config.app_version];
if(relative_url.charAt(0)!='/'){url_buffer.push('/');}
url_buffer.push(relative_url);
return url_buffer.join('');
},
asset_host:function(relative_url,protocol){
var host;
if(location.protocol=='https:'){
host=Glyde.config.server_name;
}else{
var matches=relative_url.match(/(\/?images\/)?(.*)/);
relative_url=matches[matches.length-1];
var host_num=Glyde.image.str_sum(relative_url)%Glyde.config.num_asset_hosts;
host=Glyde.config.img_asset_prefix+host_num+'.'+Glyde.config.asset_domain;
}
return((protocol||location.protocol)+'//'+host);
},
str_sum:function(str){
var sum=0,str_len=str.length;
for(var i=0;i<str_len;i++){
sum+=str.charCodeAt(i);
}
return sum;
},
preload:function(image_url,callback,add_to_dom){
var image=new Image();
if(callback){
var on_complete=function(event){
image.onload=null;
image.onerror=null;
image=null;
callback(event||window.event);
};
image.onload=on_complete;
image.onerror=on_complete;
}
image.src=image_url;
if(add_to_dom){
image.className='offscreen';
document.body.appendChild(image);
}
},
preload_multiple:function(image_urls,callback,add_to_dom){
var num_loaded=0;
image_urls.each(function(image_url){
Glyde.image.preload(image_url,function(){
if(++num_loaded==image_urls.length&&callback!=null){callback();}
});
});
}
};
var Header=Class.create({
initialize:function(){
this.login_callbacks={
on_success:Prototype.emptyFunction,
on_cancel:Prototype.emptyFunction
};
Glyde.notify.subscribe("login:succeeded",
this._handle_login_succeeded.bind(this));
Glyde.notify.subscribe("login:clicked",
this.login.bind(this));
},
signup:function(context_hash){
this.redirect_to_url("/users/new",context_hash);
return false;
},
checkout:function(sku_id,title,query_params_hash){
var curr_url=location.toString();
var checkout_url='https://'+location.hostname+'/checkout/'+sku_id+'/'+title.title_for_url();
if(this._coupon_code)hash.coupon_code=this._coupon_code;
this.redirect_to_url(checkout_url,query_params_hash);
},
sell_checkout:function(glu,params){
var sell_checkout_url='https://'+location.hostname+'/sell_signup/'+glu.id+'/'+glu.title.title_for_url();
var query_params_hash={
cents:params.cents,
condition:params.condition,
charity_percentage:params.charity_percentage,
charity_id:params.charity_id,
return_to:params.return_to
};
if(params.listing_id){query_params_hash.listing_id=params.listing_id;}
if(params.sc_id){query_params_hash.sc_id=params.sc_id;}
this.redirect_to_url(sell_checkout_url,query_params_hash);
},
redirect_to_url:function(url,context_hash){
var local_url=url+(context_hash?'?'+$H(context_hash).toQueryString():'');
if(Glyde.Browser.IE6){
setTimeout(function(){window.location=local_url;},0);
}else{
window.location=local_url;
}
},
login:function(callbacks,context,signup_params){
if(Glyde.page.on_before_login()==false){return;}
Object.extend(this.login_callbacks,callbacks||{});
var options={
overlay_on_cancel:this.on_login_cancel.bind(this),
overlay_on_success:this.on_login_success.bind(this),
context:context,
signup_params:signup_params
};
options.user_fragment_str='b';
if(Glyde.page_id=='scroll_index'||Glyde.page_id=='listings_new'){
options.user_fragment_str+='s';
}
new_session=new Session(options);
},
_handle_login_succeeded:function(){
if(Glyde.page_id!="users_show"){
new Ajax.Updater('header_box','/header',{method:'get'});
}
},
on_login_cancel:function(){
Glyde.page.on_login_cancel();
var cb=this.login_callbacks;
if(cb.on_cancel){
cb.on_cancel();
}
},
on_login_success:function(data){
Glyde.page.on_login_success(data);
var cb=this.login_callbacks;
if(cb.on_success){
cb.on_success(data);
}
},
sell:function(include_search_and_hash){
Glyde.page.go_to_sell(include_search_and_hash);
return false;
},
organize:function(){
this.redirect_to_url((Glyde.user)?Glyde.urls.collections_url:Glyde.urls.how_to_organize_url);
},
create_context_param:function(context_hash){
return{ctx:encodeURIComponent($H(context_hash).toQueryString())};
},
buy:function(context_hash){
this.redirect_to_url("/");
return false;
}
});
Glyde.Page=Class.create({
HBS_RENDERED_DIV_ID:'glyde_page_rendered_via_headless_browser',
MESSAGE_HEADLESS_RENDER:'glyde_page_headless_render:render',
MESSAGE_NOTICE_AREA_EMPTY:'glyde_page_notice_area_empty',
initialize:function(header){
if(arguments.length==0)return;
this.page=null;
this.header=header;
this.already_logging_in=false;
this.page_rendered=false;
document.observe('dom:loaded',this._onload.bindAsEventListener(this));
},
register_page:function(page){
this.page=page;
},
page_has_method:function(method_name){
return(this.page&&this.page[method_name]);
},
set_title:function(title){
var sub_title=title?title:global_var.tagline;
document.title=global_var.company_name+': '+sub_title;
},
is_facebook:function(){
return $$('body')[0].hasClassName('facebook');
},
on_before_login:function(){
if(!this.already_logging_in){
this.already_logging_in=true;
Glyde.notify.publish('login:initiated');
}
},
on_login_cancel:function(){
Glyde.notify.publish('login:canceled');this.already_logging_in=false;
},
on_login_success:function(data){
this.already_logging_in=false;
Glyde.user=new Glyde.User(data.user);
Glyde.notify.publish('login:succeeded');
},
sign_up:function(){
},
is_user_bulk_seller:function(user){
var u=user||Glyde.user;
return(u&&u.is_bulk_seller);
},
go_to_sell:function(include_search_and_hash){
var includes='';
if(include_search_and_hash){
includes=(window.location.search+
window.location.href.replace(/http[^#]*/,''));
}
window.location=Glyde.urls.sell_url+includes;
},
on_history_change:function(current_state,prev_state){
this.is_loading=true;
var is_init_state=this.history_observer.is_initial_state(prev_state);
var params=this.history_params(current_state);
this._setup_async_load_handler();
if(is_init_state){
this.__loading_req_count=this.page.onload(params,true)||0;
}else{
this.__loading_req_count=this.page.on_in_page_back(params)||0;
}
if(this.__loading_req_count==0){
this._unset_async_load_handler();
}
},
page_render_finished:function(){
this.page_rendered=true;
if(Glyde.requested_via_headless_browser){
this._on_headless_browser_render();
}
if(Glyde.flash_notice){
this.flash_notice(Glyde.flash_notice);
}
},
_on_headless_browser_render:function(){
var rendered_div=document.createElement('div');
rendered_div.id=this.HBS_RENDERED_DIV_ID;
document.body.appendChild(rendered_div);
Glyde.notify.publish(this.MESSAGE_HEADLESS_RENDER,{});
},
has_page_render_finished:function(){
return this.page_rendered;
},
_async_ajax_request_listener:function(message_name,resp){
--this.__loading_req_count;
if(this.__loading_req_count==0){
this._unset_async_load_handler();
};
},
_create_loading_request_count_func:function(){
return function(message_name,resp){
--this.__loading_req_count;
if(this.__loading_req_count==0){
this.is_loading=false;
};
}.bind(this);
},
history_params:function(state_str){
if(this.page.accepted_sub_routes){
return this.parse_pretty_history_params(state_str);
}else if(this.page.parse_history_params){
return this.page.parse_history_params(state_str);
}else{
return state_str.parseQuery();
}
},
parse_pretty_history_params:function(current_state_str){
var params={};
var routes=this.page.accepted_sub_routes();
var i=0;var len=routes.length;var route=null;var regex=null;
for(;i<len;++i){
route=routes[i];
regex=new RegExp('^'+route.join('/').replace(/:[^\/]+/g,'[^\\/]+')+'$')
if(current_state_str.match(regex)){
break;
}else{
route=null;
}
}
if(route){
var state_arr=current_state_str.split('/');
if(state_arr.length>0){
i=0;len=state_arr.length;
for(;i<len;++i){
if(route[i].charAt(0)==':'){
params[route[i].replace(/:/,'')]=state_arr[i];
}
}
}
}
return params;
},
current_page_state:function(){
var state={};
state=this.page.current_state(state);
return state;
},
run_client_backable_action:function(action){
this.start_backable_action();
if(action){action();}
this.end_backable_action();
},
start_backable_action:function(){
if(this.is_loading)return;
Loading.show();
},
end_backable_action:function(){
if(this.is_loading)return;
var state=this.current_page_state({});
if(!Glyde.is.string(state))state=Hash.toQueryString(state);
this.history_observer.set_state(state);
Loading.hide();
},
update_submit_button:function(button,on_submit,use_async,disabled_class_name){
Loading.show();
this._disable_button_and_fire_callback($(button),on_submit,use_async,disabled_class_name);
},
reset_submit_button:function(button,disabled_class_name){
Loading.hide();
var b=$(button);
if(b._disabled){
if(b._disable_timeout!=null){
window.clearTimeout(b._disable_timeout);
b._disable_timeout=null;
}
this._enable_button(b,disabled_class_name);
}
},
handle_server_errors:function(server_data){
if(server_data&&server_data.exception&&!this._is_prod_mode()){
this.show_server_error(server_data.exception);
}else{
if(server_data&&server_data.redirect_to){
window.location=server_data.redirect_to;
}else{
alert('errors occurred on the server');
}
}
},
show_server_error:function(exception){
var d=$('error_div_id');
if(!d)return;
d.style.visibility="hidden";
var backtrace=exception.backtrace?exception.backtrace:exception.b;
var exc=backtrace.realEscapeHTML(true);
d.innerHTML=exception.message.realEscapeHTML(true)+'<br/><br/>'+exc;
d.style.visibility="visible";
$('error_log_box').style.display='block';
},
close_error_box:function(){
$('error_log_box').undisplay();
},
flash_notice:function(status_text,time_in_millis){
var t_millis=time_in_millis||5000;
var me=this;
var opts={
onComplete:function(){
var func=function(){
$('status_text').undisplay();
Glyde.notify.publish(me.MESSAGE_NOTICE_AREA_EMPTY,{});
};
setTimeout(func,t_millis);
}
};
this.set_notice(status_text,opts);
},
set_notice:function(status_text,pulse_options){
if(status_text){
this.status_text=status_text;
$('notice_wrapper').update("<span id='status_text'>"+status_text+"</span>");
var opts=pulse_options||{};
new fx.FontColorPulse('status_text',opts).to_color();
}
},
set_rails_env:function(rails_env_str){
this.rails_env=rails_env_str;
},
server_API:{
hidden_input_for_iframe_pipe:function(){
var i=document.createElement('input');
i.type='hidden';
i.name='use_iframe_pipe';
i.value=true;
return i;
},
frame_pipe_callback:null,upload_callback:null,
frame_pipe_loaded:function(json){
if(!Glyde.page.server_API.frame_pipe_callback)return;
var func=function(){
Glyde.page.server_API.frame_pipe_callback(json);
Glyde.page.server_API.frame_pipe_callback=null;
};
setTimeout(func,10);
},
upload_finished:function(error_code){
if(this.upload_callback!=null&&
typeof(this.upload_callback)=='function'){
this.upload_callback(error_code);
}
},
is_http_page:function(){
return(window.location.protocol=='http:');
}
},
_onload:function(){
try{
HistoryObserver.update_old_links();
var rendered_div=$(this.HBS_RENDERED_DIV_ID);
if(!rendered_div){
this.is_loading=true;
this._enable_history();
this.set_rails_env(Glyde.rails_env);
this._pre_page_load();this._load_page_with_params();
this._post_page_load();}
}catch(ex){
console.log('exception in onload ',ex);
throw ex;
}
},
_pre_page_load:function(){
},
_post_page_load:function(){
},
_is_prod_mode:function(){
return this.rails_env=='production';
},
_change_button_color:function(b){
if(b.__orig_color==null)b.__orig_color=b.style.color;
b.style.color='#ccc';
},
_disable_button_and_fire_callback:function(button,callback,use_async,disabled_class_name){
if(use_async){
var f=function(){this._disable_button(button,disabled_class_name);};
button._disable_timeout=window.setTimeout(f.bind(this),1);
if(callback!=null)window.setTimeout(callback,200);
}else{
this._disable_button(button,disabled_class_name);
if(callback)callback();
}
},
_disable_button:function(button,disabled_class_name){
if(button.tagName=='INPUT'){
this._change_button_color(button);
button.disabled=true;
}else{
button.addClassName(disabled_class_name||'disabled');
}
button._disabled=true;
},
_enable_button:function(button,disabled_class_name){
if(button.tagName=='INPUT'){
button.style.color=button.__orig_color;
button.disabled=false;
}else{
button.removeClassName(disabled_class_name||'disabled');
}
button._disabled=false;
},
is_async_loading:function(){
return(this.__loading_req_count>0);
},
_enable_history:function(){
if(this._is_back_enabled()){
this.history_observer=HistoryObserver.create(this.on_history_change.bind(this));
}
},
_is_back_enabled:function(){
return this.page_has_method('current_state');
},
_load_page_with_params:function(){
if(this.page_has_method('onload')){
this._setup_async_load_handler();
var is_back=this.history_observer&&this.history_observer.is_back_request();
this.__loading_req_count=this.page.onload(this.query_str_params(),is_back)||0;
if(this.__loading_req_count==0){
this._unset_async_load_handler();
this.page_render_finished();
}
}else{
this.page_render_finished();
}
},
_setup_async_load_handler:function(){
this.__loading_request_handler=this._async_ajax_request_listener.bind(this);
Glyde.notify.subscribe(Ajax.Responders.MESSAGE_REQUEST_COMPLETE,
this.__loading_request_handler);
},
_unset_async_load_handler:function(){
this.is_loading=false;
Glyde.notify.unsubscribe(Ajax.Responders.MESSAGE_REQUEST_COMPLETE,
this.__loading_request_handler);
},
query_str_params:function(){
var params=window.location.search.parseQuery();
Object.extend(params,this.history_params(HistoryObserver.prototype._find_current_state()));
if(typeof(g_in_page_params)!='undefined'){
Object.extend(params,g_in_page_params);
}
return params;
}
});
Glyde.ApplicationPage=Class.create(Glyde.Page,{
initialize:function($super){
$super(new Header());
},
_pre_page_load:function(){
this._initialize_unsupported_browser();
},
_post_page_load:function(){
this._initialize_import_updater();
this._set_google_affiliate_cookie_if_the_messed_up_the_url();
if($('header_search')){
this._search_widget=new Glyde.widgets.Search($('header_search'),{selected_domains:['books','games','music','videos'],is_buy_side:true});
this._search_widget.observe('widget:select',this.on_search_select.bindAsEventListener(this));
}
},
on_search_select:function(event){
new Ajax.Request('/glus/shelf/',{
method:'get',
parameters:{vertical:event.memo.domain,res_id:event.memo.res_id},
onComplete:function(response){
var glu=response.responseJSON.glu;
window.location='/products/'+glu.id+'/'+glu.title.title_for_url();
}.bind(this)
});
},
_set_google_affiliate_cookie_if_the_messed_up_the_url:function(){
hash_str=window.location.hash.replace('#','');
if(hash_str.indexOf('?')!=-1){
var mangled_query_string=hash_str.replace(/^[^\?]*\?/,'');
var mangled_params=mangled_query_string.parseQuery();
if(mangled_params.sid!=null){
var cookie_name=Glyde.config.google_affiliate_cookie_name;
var num_days=Glyde.config.google_affiliate_cookie_num_days_till_exp;
Glyde.cookie.set(cookie_name,mangled_params.sid,num_days);
}
}
},
BROWSER_NOTICE_COOKIE:'hide_browser_notice',
_initialize_unsupported_browser:function(){
var notice=$('notice_wrapper');
if(notice){
if(!Glyde.cookie.get('hide_browser_notice')&&Glyde.unsupported_browser){
notice.innerHTML=this._render_unsupported_browser();
notice.select('.close')[0].observe('click',function(){
notice.innerHTML='';
Glyde.cookie.set('hide_browser_notice',1);
});
}
}
},
_initialize_import_updater:function(){
if($('notice_wrapper')){
this.import_updater=new ImportStatusUpdater('notice_wrapper');
if(Glyde.user&&Glyde.user.active_import_id){
this.import_updater.start_poll(Glyde.user.active_import_id);
}
}
},
is_buydown_store:function(storefront_id){
return storefront_id==Glyde.config.buydown_storefront_id;
}
});
Glyde.page=new Glyde.ApplicationPage();
Glyde.ApplicationPage.prototype._render_unsupported_browser=function(){
var _j=new Jaml();
_j.ns('<span');_j.s(' id="status_text"');_j.s(' style="'+("color:red; display:inline")+'"');_j.s('>');
_j.ns('Our site may not work properly in your web browser.');
_j.ns('<a');_j.s(' href="'+('/recommended-browsers')+'"');_j.s('>We recommend one of these.');
_j.ns('</a>');
_j.ns('<a');_j.s(' class="close"');_j.s(' href="'+('#')+'"');_j.s(' onclick="'+('return false;')+'"');_j.s('>Hide.');
_j.ns('</a>');
_j.ns('</span>');
return _j.v();
};
var EventDispatcher=Class.create({
initialize:function(){
this.registry={};
},
add_handler:function(event_name,handler_func){
var new_tuple={
method:handler_func,
is_asynch:arguments[2]||false
};
if(this.registry[event_name]){
this.registry[event_name].push(new_tuple);
}else{
this.registry[event_name]=[new_tuple];
}
},
rm_handler:function(event_name,handler_func){
if(this.registry[event_name]){
this.registry[event_name]=
this.registry[event_name].reject(function(tuple){
return tuple.method==handler_func;
});
}
},
rm_event:function(event_name){
this.registry[event_name]=null;
},
rm_all_events:function(){this.registry={};},
fire:function(event_name){
if(this.registry[event_name]==null){return;}
var event_args=arguments[1];
this.registry[event_name].each(function(tuple){
try{
if(event_args){
if(tuple.is_asynch){
var method=tuple.method.bind(this);
setTimeout(function(){method(event_args)}.bind(this),10);
}else{
tuple.method(event_args);
}
}else{
if(tuple.is_asynch){
var method=tuple.method;
setTimeout(method,10);
}else{
if(tuple.method){
tuple.method();
}
}
}
}catch(e){
alert("error: error in "+(this.id?this.id:'[unknown object]')+".fire():\n\nevent name: "+event_name+"\n\nerror message: "+e.message);
}
}.bind(this));
}
});
var g_event_dispatcher=new EventDispatcher();
var SubmitButton=Class.create({
disabled_color:'#ccc',
async_disable_delay:200,
initialize:function(elem_id,on_submit,use_async){
this.elem_id=elem_id;
this.on_submit=on_submit;
this.use_async=use_async;
this.orig_color=$(elem_id).style.color;
},
disable:function(){
this._disable_and_fire_callback();
$(this.elem_id).style.color=this.disabled_color;
Loading.show();
},
reset:function(){
Loading.hide();
$(this.elem_id).style.color=this.orig_color;
this._re_enable();
},
_re_enable:function(){
this._cancel_disable();
$(this.elem_id).disabled=false;
},
_cancel_disable:function(){
if(this.disable_timeout!=null){
window.clearTimeout(this.disable_timeout);
this.disable_timeout=null;
}
},
_disable_and_fire_callback:function(){
this.use_async?this._async_disable():this._sync_disable();
},
_sync_disable:function(){
$(this.elem_id).disabled=true;
if(this.on_submit){
this.on_submit();
}
},
_async_disable:function(){
var f=function(){$(this.elem_id).disabled=true;}
this.disable_timeout=window.setTimeout(f,1);
if(this.on_submit!=null){
window.setTimeout(this.on_submit,this.async_disable_delay);
}
}
});
Glyde.TinyUrl={
product_page:function(glu_id,referral_code){
var url=[Glyde.config.tiny_url,'/p',Glyde.TinyUrl._encode_id(glu_id)].join('');
return Glyde.TinyUrl._with_referral(url,referral_code);
},
buy_page:function(glu_id,referral_code){
var url=[Glyde.config.tiny_url,'/b',Glyde.TinyUrl._encode_id(glu_id)].join('');
return Glyde.TinyUrl._with_referral(url,referral_code);
},
collection_page:function(listing_id,referral_code){
var url=[Glyde.config.tiny_url,'/c',Glyde.TinyUrl._encode_id(listing_id)].join('');
return Glyde.TinyUrl._with_referral(url,referral_code);
},
home_page:function(referral_code){
var url=[Glyde.config.tiny_url,'/h'].join('');
return Glyde.TinyUrl._with_referral(url,referral_code);
},
_with_referral:function(url,referral_code){
return[url,referral_code].compact().join('/');
},
_encode_id:function(id){
return id.toString(36);
}
};
var ConversionTracker=Class.create({
IMG_PATH:'www.googleadservices.com/pagead/conversion/',
CONVERSION_ID:1034524045,
initialize:function(analytics_id){
var a_id=analytics_id||window.g_google_analytics_id;
if(!Object.isUndefined(a_id)){
this._get_script();
_gaq=window._gaq||[];
_gaq.push(['_setAccount',a_id]);
}
},
track:function(url){
this.push(['_trackPageview',url]);
},
push:function(array){
if(window._gaq){
_gaq.push(array);
}
},
track_account_created:function(is_continuing){
var params={
value:1.0,
label:"PFIsCOOylQEQjaum7QM"
};
this._send_conversion(params);
this.track('/users/account_created'+(is_continuing?'?type=full':''));
},
track_full_registration:function(){
var params={
value:2.0,
label:"jcafCOvAlQEQjaum7QM"
};
this._send_conversion(params);
this.track('/users/fully_registered');
},
track_item_for_sale:function(cents){
var params={
value:cents/100,
label:"fZWlCMXBlQEQjaum7QM"
};
this._send_conversion(params);
},
track_purchase:function(cents){
var params={
value:cents/100,
label:"4othCJ37lAEQjaum7QM"
};
this._send_conversion(params);
this._send_pricegrabber_conversion();
},
track_event:function(category_name,action_name,optional_label,optional_value){
this.doGAFunction('_trackEvent',category_name,action_name,
optional_label,optional_value);
},
page_tracker:function(){
if(window._gaq){
return _gaq;
}
return null;
},
doGAFunction:function(){
if(window._gaq){
return this.push(Array.prototype.slice.call(arguments));
}
return null;
},
_send_conversion:function(params){
Object.extend(params,{
guid:'ON',
script:0
});
Glyde.image.preload(window.location.protocol+'//'+this.IMG_PATH+this.CONVERSION_ID+'/?'+Object.toQueryString(params));
},
_send_pricegrabber_conversion:function(){
if(window.g_pricegrabber_id)
Glyde.image.preload("https://www.pricegrabber.com/conversion.php?retid="+window.g_pricegrabber_id);
},
_get_script:function(){
var ga=document.createElement('script');
ga.type='text/javascript';
ga.async=true;
ga.src=('https:'==document.location.protocol?'https://ssl':'http://www')+'.google-analytics.com/ga.js';
var s=document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(ga,s);
}
});
ConversionTracker.create_instance=function(analytics_id){
if(!ConversionTracker._instance){
ConversionTracker._instance=new ConversionTracker(analytics_id);
}
return ConversionTracker._instance;
};
ConversionTracker._instance=null;
ConversionTracker.get_instance=function(){
if(!ConversionTracker._instance){
ConversionTracker.create_instance();
}
return ConversionTracker._instance;
};
Ajax.Responders.register({
onComplete:function(req,o){
var url=req.url;
if(req.options.trackRequest!=false){
var tr=ConversionTracker.get_instance();
tr.track(url);
}
}
});
Ajax.Responders.register({
onComplete:function(req,transport){
if(req.url=='/purchase_orders'&&transport.responseJSON.success){
var data=transport.responseJSON;
var context_str=window.location.pathname;
var match_data=null;
if(match_data=window.location.search.match(/return_to[^&]+(viabrowse|viasearch)/)){
context_str=context_str+'/'+match_data[1];
}else if(match_data=window.location.hash.match(/(viabrowse|viasearch)/)){
context_str=context_str+'/'+match_data[1];
}
var tr=ConversionTracker.get_instance();
tr.doGAFunction('_addTrans',
data.purchase_order_number,
context_str,
data.purchase_cents/100+'',
"",
data.shipping_cents/100+'',
data.shipping_address_city,
data.shipping_address_state,
'USA'
);
tr.doGAFunction('_addItem',
data.purchase_order_number,
data.purchase_sku_id+'',
data.glu_title,
data.glu_vertical,
data.purchase_cents/100+'',
'1'
);
tr.doGAFunction('_trackTrans');
}
}
});
(function(){
var _$=Glyde.$wrapper;
Glyde.HoverTimer=Glyde.Class.create({
initialize:function(node,enter_delay_ms,exit_delay_ms,on_enter_callback,on_leave_callback,state){
this._delay_ms=enter_delay_ms||400;
this._exit_delay_ms=exit_delay_ms||0;
this._exit_timer_id=null;
this._enter_timer_id=null;
this._node=node;
this._on_enter_callback=on_enter_callback;
this._on_leave_callback=on_leave_callback;
this._state=state;
this._mouseover_listener=this._mouseover_handler.bindAsEventListener(this);
this._mousemove_listener=this._mousemove_handler.bindAsEventListener(this);
this._exit_timer_handler=this._on_exit_timer.bind(this);
this.connect();
},
connect:function(){
_$(this._node).observe('mouseover',this._mouseover_listener);
},
disconnect:function(){
this._cancel_enter_timer();
_$(this._node).stopObserving('mouseover',this._mouseover_listener);
this._stop_observing_mouse_move();
},
_stop_observing_mouse_move:function(){
_$(document).stopObserving('mousemove',this._mousemove_listener);
},
_mouseover_handler:function(event){
if(event.relatedTarget&&this._is_descendant_node(event.relatedTarget,this._node)){return;}
this._cancel_exit_timer();
if(this._enter_timer_id==null){
_$(document).observe('mousemove',this._mousemove_listener);
this._enter_timer_id=setTimeout(this._on_enter_timer.bind(this),this._delay_ms);
}
},
_mousemove_handler:function(event){
if(this._is_descendant_node(_$(event).element(),this._node)){return;}
this._cancel_enter_timer();
if(this._exit_delay_ms>0){
if(this._exit_timer_id==null){
this._exit_timer_id=setTimeout(this._exit_timer_handler,
this._exit_delay_ms);
}
}else{
this._on_exit_timer();
}
},
_on_exit_timer:function(){
this._stop_observing_mouse_move();
this._exit_timer_id=null;
if(this._on_leave_callback){
this._on_leave_callback(this._state||this._node);
}
},
_cancel_exit_timer:function(){
if(this._exit_timer_id!=null){
clearTimeout(this._exit_timer_id);
this._exit_timer_id=null;
}
},
_on_enter_timer:function(){
this._enter_timer_id=null;
if(this._on_enter_callback){this._on_enter_callback(this._state||this._node);}
},
_cancel_enter_timer:function(){
if(this._enter_timer_id!=null){
clearTimeout(this._enter_timer_id);
this._enter_timer_id=null;
}
},
_is_descendant_node:function(node,parent_node){
if(node==null){return false;}
if(node==this._node){return true;}
try{
return _$(node).descendantOf(parent_node);
}catch(e){
return false;
}
}
});
})();
String.prototype.parseColor=function(){
var color='#';
if(this.slice(0,4)=='rgb('){
var cols=this.slice(4,this.length-1).split(',');
var i=0;do{color+=parseInt(cols[i]).toColorPart()}while(++i<3);
}else{
if(this.slice(0,1)=='#'){
if(this.length==4)for(var i=1;i<4;i++)color+=(this.charAt(i)+this.charAt(i)).toLowerCase();
if(this.length==7)color=this.toLowerCase();
}
}
return(color.length==7?color:(arguments[0]||this));
};
Element.collectTextNodes=function(element){
return $A($(element).childNodes).collect(function(node){
return(node.nodeType==3?node.nodeValue:
(node.hasChildNodes()?Element.collectTextNodes(node):''));
}).flatten().join('');
};
Element.collectTextNodesIgnoreClass=function(element,className){
return $A($(element).childNodes).collect(function(node){
return(node.nodeType==3?node.nodeValue:
((node.hasChildNodes()&&!Element.hasClassName(node,className))?
Element.collectTextNodesIgnoreClass(node,className):''));
}).flatten().join('');
};
Element.setContentZoom=function(element,percent){
element=$(element);
element.setStyle({fontSize:(percent/100)+'em'});
if(Prototype.Browser.WebKit)window.scrollBy(0,0);
return element;
};
Element.getInlineOpacity=function(element){
return $(element).style.opacity||'';
};
Element.forceRerendering=function(element){
try{
element=$(element);
var n=document.createTextNode(' ');
element.appendChild(n);
element.removeChild(n);
}catch(e){}
};
var Effect={
_elementDoesNotExistError:{
name:'ElementDoesNotExistError',
message:'The specified DOM element does not exist, but is required for this effect to operate'
},
Transitions:{
linear:Prototype.K,
sinoidal:function(pos){
return(-Math.cos(pos*Math.PI)/2)+.5;
},
reverse:function(pos){
return 1-pos;
},
flicker:function(pos){
var pos=((-Math.cos(pos*Math.PI)/4)+.75)+Math.random()/4;
return pos>1?1:pos;
},
wobble:function(pos){
return(-Math.cos(pos*Math.PI*(9*pos))/2)+.5;
},
pulse:function(pos,pulses){
return(-Math.cos((pos*((pulses||5)-.5)*2)*Math.PI)/2)+.5;
},
spring:function(pos){
return 1-(Math.cos(pos*4.5*Math.PI)*Math.exp(-pos*6));
},
none:function(pos){
return 0;
},
full:function(pos){
return 1;
}
},
DefaultOptions:{
duration:1.0,fps:100,sync:false,from:0.0,
to:1.0,
delay:0.0,
queue:'parallel'
},
tagifyText:function(element){
var tagifyStyle='position:relative';
if(Prototype.Browser.IE)tagifyStyle+=';zoom:1';
element=$(element);
$A(element.childNodes).each(function(child){
if(child.nodeType==3){
child.nodeValue.toArray().each(function(character){
element.insertBefore(
new Element('span',{style:tagifyStyle}).update(
character==' '?String.fromCharCode(160):character),
child);
});
Element.remove(child);
}
});
},
multiple:function(element,effect){
var elements;
if(((typeof element=='object')||
Object.isFunction(element))&&
(element.length))
elements=element;
else
elements=$(element).childNodes;
var options=Object.extend({
speed:0.1,
delay:0.0
},arguments[2]||{});
var masterDelay=options.delay;
$A(elements).each(function(element,index){
new effect(element,Object.extend(options,{delay:index*options.speed+masterDelay}));
});
},
PAIRS:{
'slide':['SlideDown','SlideUp'],
'blind':['BlindDown','BlindUp'],
'appear':['Appear','Fade']
},
toggle:function(element,effect){
element=$(element);
effect=(effect||'appear').toLowerCase();
var options=Object.extend({
queue:{position:'end',scope:(element.id||'global'),limit:1}
},arguments[2]||{});
Effect[element.visible()?
Effect.PAIRS[effect][1]:Effect.PAIRS[effect][0]](element,options);
}
};
Effect.DefaultOptions.transition=Effect.Transitions.sinoidal;
Effect.ScopedQueue=Class.create(Enumerable,{
initialize:function(){
this.effects=[];
this.interval=null;
},
_each:function(iterator){
this.effects._each(iterator);
},
add:function(effect){
var timestamp=new Date().getTime();
var position=Object.isString(effect.options.queue)?
effect.options.queue:effect.options.queue.position;
switch(position){
case'front':
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),15);
},
remove:function(effect){
this.effects=this.effects.reject(function(e){return e==effect});
if(this.effects.length==0){
clearInterval(this.interval);
this.interval=null;
}
},
loop:function(){
var timePos=new Date().getTime();
for(var i=0,len=this.effects.length;i<len;i++)
this.effects[i]&&this.effects[i].loop(timePos);
}
});
Effect.Queues={
instances:$H(),
get:function(queueName){
if(!Object.isString(queueName))return queueName;
return this.instances.get(queueName)||
this.instances.set(queueName,new Effect.ScopedQueue());
}
};
Effect.Queue=Effect.Queues.get('global');
Effect.Base=Class.create({
position:null,
start:function(options){
function codeForEvent(options,eventName){
return(
(options[eventName+'Internal']?'this.options.'+eventName+'Internal(this);':'')+
(options[eventName]?'this.options.'+eventName+'(this);':'')
);
}
if(options&&options.transition===false)options.transition=Effect.Transitions.linear;
this.options=Object.extend(Object.extend({},Effect.DefaultOptions),options||{});
this.currentFrame=0;
this.state='idle';
this.startOn=this.options.delay*1000;
this.finishOn=this.startOn+(this.options.duration*1000);
this.fromToDelta=this.options.to-this.options.from;
this.totalTime=this.finishOn-this.startOn;
this.totalFrames=this.options.fps*this.options.duration;
this.render=(function(){
function dispatch(effect,eventName){
if(effect.options[eventName+'Internal'])
effect.options[eventName+'Internal'](effect);
if(effect.options[eventName])
effect.options[eventName](effect);
}
return function(pos){
if(this.state==="idle"){
this.state="running";
dispatch(this,'beforeSetup');
if(this.setup)this.setup();
dispatch(this,'afterSetup');
}
if(this.state==="running"){
pos=(this.options.transition(pos)*this.fromToDelta)+this.options.from;
this.position=pos;
dispatch(this,'beforeUpdate');
if(this.update)this.update(pos);
dispatch(this,'afterUpdate');
}
};
})();
this.event('beforeStart');
if(!this.options.sync)
Effect.Queues.get(Object.isString(this.options.queue)?
'global':this.options.queue.scope).add(this);
},
loop:function(timePos){
if(timePos>=this.startOn){
if(timePos>=this.finishOn){
this.render(1.0);
this.cancel();
this.event('beforeFinish');
if(this.finish)this.finish();
this.event('afterFinish');
return;
}
var pos=(timePos-this.startOn)/this.totalTime,
frame=(pos*this.totalFrames).round();
if(frame>this.currentFrame){
this.render(pos);
this.currentFrame=frame;
}
}
},
cancel:function(){
if(!this.options.sync)
Effect.Queues.get(Object.isString(this.options.queue)?
'global':this.options.queue.scope).remove(this);
this.state='finished';
},
event:function(eventName){
if(this.options[eventName+'Internal'])this.options[eventName+'Internal'](this);
if(this.options[eventName])this.options[eventName](this);
},
inspect:function(){
var data=$H();
for(property in this)
if(!Object.isFunction(this[property]))data.set(property,this[property]);
return'#<Effect:'+data.inspect()+',options:'+$H(this.options).inspect()+'>';
}
});
Effect.Parallel=Class.create(Effect.Base,{
initialize:function(effects){
this.effects=effects||[];
this.start(arguments[1]);
},
update:function(position){
this.effects.invoke('render',position);
},
finish:function(position){
this.effects.each(function(effect){
effect.render(1.0);
effect.cancel();
effect.event('beforeFinish');
if(effect.finish)effect.finish(position);
effect.event('afterFinish');
});
}
});
Effect.Tween=Class.create(Effect.Base,{
initialize:function(object,from,to){
object=Object.isString(object)?$(object):object;
var args=$A(arguments),method=args.last(),
options=args.length==5?args[3]:null;
this.method=Object.isFunction(method)?method.bind(object):
Object.isFunction(object[method])?object[method].bind(object):
function(value){object[method]=value};
this.start(Object.extend({from:from,to:to},options||{}));
},
update:function(position){
this.method(position);
}
});
Effect.Event=Class.create(Effect.Base,{
initialize:function(){
this.start(Object.extend({duration:0},arguments[0]||{}));
},
update:Prototype.emptyFunction
});
Effect.Opacity=Class.create(Effect.Base,{
initialize:function(element){
this.element=$(element);
if(!this.element)throw(Effect._elementDoesNotExistError);
if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout))
this.element.setStyle({zoom:1});
var options=Object.extend({
from:this.element.getOpacity()||0.0,
to:1.0
},arguments[1]||{});
this.start(options);
},
update:function(position){
this.element.setOpacity(position);
}
});
Effect.Move=Class.create(Effect.Base,{
initialize:function(element){
this.element=$(element);
if(!this.element)throw(Effect._elementDoesNotExistError);
var options=Object.extend({
x:0,
y:0,
mode:'relative'
},arguments[1]||{});
this.start(options);
},
setup:function(){
this.element.makePositioned();
this.originalLeft=parseFloat(this.element.getStyle('left')||'0');
this.originalTop=parseFloat(this.element.getStyle('top')||'0');
if(this.options.mode=='absolute'){
this.options.x=this.options.x-this.originalLeft;
this.options.y=this.options.y-this.originalTop;
}
},
update:function(position){
this.element.setStyle({
left:(this.options.x*position+this.originalLeft).round()+'px',
top:(this.options.y*position+this.originalTop).round()+'px'
});
}
});
Effect.MoveBy=function(element,toTop,toLeft){
return new Effect.Move(element,
Object.extend({x:toLeft,y:toTop},arguments[3]||{}));
};
Effect.Scale=Class.create(Effect.Base,{
initialize:function(element,percent){
this.element=$(element);
if(!this.element)throw(Effect._elementDoesNotExistError);
var options=Object.extend({
scaleX:true,
scaleY:true,
scaleContent:true,
scaleFromCenter:false,
scaleMode:'box',scaleFrom:100.0,
scaleTo:percent
},arguments[2]||{});
this.start(options);
},
setup:function(){
this.restoreAfterFinish=this.options.restoreAfterFinish||false;
this.elementPositioning=this.element.getStyle('position');
this.originalStyle={};
['top','left','width','height','fontSize'].each(function(k){
this.originalStyle[k]=this.element.style[k];
}.bind(this));
this.originalTop=this.element.offsetTop;
this.originalLeft=this.element.offsetLeft;
var fontSize=this.element.getStyle('font-size')||'100%';
['em','px','%','pt'].each(function(fontSizeType){
if(fontSize.indexOf(fontSizeType)>0){
this.fontSize=parseFloat(fontSize);
this.fontSizeType=fontSizeType;
}
}.bind(this));
this.factor=(this.options.scaleTo-this.options.scaleFrom)/100;
this.dims=null;
if(this.options.scaleMode=='box')
this.dims=[this.element.offsetHeight,this.element.offsetWidth];
if(/^content/.test(this.options.scaleMode))
this.dims=[this.element.scrollHeight,this.element.scrollWidth];
if(!this.dims)
this.dims=[this.options.scaleMode.originalHeight,
this.options.scaleMode.originalWidth];
},
update:function(position){
var currentScale=(this.options.scaleFrom/100.0)+(this.factor*position);
if(this.options.scaleContent&&this.fontSize)
this.element.setStyle({fontSize:this.fontSize*currentScale+this.fontSizeType});
this.setDimensions(this.dims[0]*currentScale,this.dims[1]*currentScale);
},
finish:function(position){
if(this.restoreAfterFinish)this.element.setStyle(this.originalStyle);
},
setDimensions:function(height,width){
var d={};
if(this.options.scaleX)d.width=width.round()+'px';
if(this.options.scaleY)d.height=height.round()+'px';
if(this.options.scaleFromCenter){
var topd=(height-this.dims[0])/2;
var leftd=(width-this.dims[1])/2;
if(this.elementPositioning=='absolute'){
if(this.options.scaleY)d.top=this.originalTop-topd+'px';
if(this.options.scaleX)d.left=this.originalLeft-leftd+'px';
}else{
if(this.options.scaleY)d.top=-topd+'px';
if(this.options.scaleX)d.left=-leftd+'px';
}
}
this.element.setStyle(d);
}
});
Effect.Highlight=Class.create(Effect.Base,{
initialize:function(element){
this.element=$(element);
if(!this.element)throw(Effect._elementDoesNotExistError);
var options=Object.extend({startcolor:'#ffff99'},arguments[1]||{});
this.start(options);
},
setup:function(){
if(this.element.getStyle('display')=='none'){this.cancel();return;}
this.oldStyle={};
if(!this.options.keepBackgroundImage){
this.oldStyle.backgroundImage=this.element.getStyle('background-image');
this.element.setStyle({backgroundImage:'none'});
}
if(!this.options.endcolor)
this.options.endcolor=this.element.getStyle('background-color').parseColor('#ffffff');
if(!this.options.restorecolor)
this.options.restorecolor=this.element.getStyle('background-color');
this._base=$R(0,2).map(function(i){return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16)}.bind(this));
this._delta=$R(0,2).map(function(i){return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i]}.bind(this));
},
update:function(position){
this.element.setStyle({backgroundColor:$R(0,2).inject('#',function(m,v,i){
return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart());}.bind(this))});
},
finish:function(){
this.element.setStyle(Object.extend(this.oldStyle,{
backgroundColor:this.options.restorecolor
}));
}
});
Effect.ScrollTo=function(element){
var options=arguments[1]||{},
scrollOffsets=document.viewport.getScrollOffsets(),
elementOffsets=$(element).cumulativeOffset();
if(options.offset)elementOffsets[1]+=options.offset;
return new Effect.Tween(null,
scrollOffsets.top,
elementOffsets[1],
options,
function(p){scrollTo(scrollOffsets.left,p.round());}
);
};
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 options=Object.extend({
distance:20,
duration:0.5
},arguments[1]||{});
var distance=parseFloat(options.distance);
var split=parseFloat(options.duration)/10.0;
var oldStyle={
top:element.getStyle('top'),
left:element.getStyle('left')};
return new Effect.Move(element,
{x:distance,y:0,duration:split,afterFinishInternal:function(effect){
new Effect.Move(effect.element,
{x:-distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){
new Effect.Move(effect.element,
{x:distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){
new Effect.Move(effect.element,
{x:-distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){
new Effect.Move(effect.element,
{x:distance*2,y:0,duration:split*2,afterFinishInternal:function(effect){
new Effect.Move(effect.element,
{x:-distance,y:0,duration:split,afterFinishInternal:function(effect){
effect.element.undoPositioned().setStyle(oldStyle);
}});}});}});}});}});}});
};
Effect.SlideDown=function(element){
element=$(element).cleanWhitespace();
var oldInnerBottom=element.down().getStyle('bottom');
var elementDimensions=element.getDimensions();
return new Effect.Scale(element,100,Object.extend({
scaleContent:false,
scaleX:false,
scaleFrom:window.opera?0:1,
scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},
restoreAfterFinish:true,
afterSetup:function(effect){
effect.element.makePositioned();
effect.element.down().makePositioned();
if(window.opera)effect.element.setStyle({top:''});
effect.element.makeClipping().setStyle({height:'0px'}).show();
},
afterUpdateInternal:function(effect){
effect.element.down().setStyle({bottom:
(effect.dims[0]-effect.element.clientHeight)+'px'});
},
afterFinishInternal:function(effect){
effect.element.undoClipping().undoPositioned();
effect.element.down().undoPositioned().setStyle({bottom:oldInnerBottom});}
},arguments[1]||{})
);
};
Effect.SlideUp=function(element){
element=$(element).cleanWhitespace();
var oldInnerBottom=element.down().getStyle('bottom');
var elementDimensions=element.getDimensions();
return new Effect.Scale(element,window.opera?0:1,
Object.extend({scaleContent:false,
scaleX:false,
scaleMode:'box',
scaleFrom:100,
scaleMode:{originalHeight:elementDimensions.height,originalWidth:elementDimensions.width},
restoreAfterFinish:true,
afterSetup:function(effect){
effect.element.makePositioned();
effect.element.down().makePositioned();
if(window.opera)effect.element.setStyle({top:''});
effect.element.makeClipping().show();
},
afterUpdateInternal:function(effect){
effect.element.down().setStyle({bottom:
(effect.dims[0]-effect.element.clientHeight)+'px'});
},
afterFinishInternal:function(effect){
effect.element.hide().undoClipping().undoPositioned();
effect.element.down().undoPositioned().setStyle({bottom:oldInnerBottom});
}
},arguments[1]||{})
);
};
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]||{},
oldOpacity=element.getInlineOpacity(),
transition=options.transition||Effect.Transitions.linear,
reverser=function(pos){
return 1-transition((-Math.cos((pos*(options.pulses||5)*2)*Math.PI)/2)+.5);
};
return new Effect.Opacity(element,
Object.extend(Object.extend({duration:2.0,from:0,
afterFinishInternal:function(effect){effect.element.setStyle({opacity:oldOpacity});}
},options),{transition:reverser}));
};
Effect.Fold=function(element){
element=$(element);
var oldStyle={
top:element.style.top,
left:element.style.left,
width:element.style.width,
height:element.style.height};
element.makeClipping();
return new Effect.Scale(element,5,Object.extend({
scaleContent:false,
scaleX:false,
afterFinishInternal:function(effect){
new Effect.Scale(element,1,{
scaleContent:false,
scaleY:false,
afterFinishInternal:function(effect){
effect.element.hide().undoClipping().setStyle(oldStyle);
}});
}},arguments[1]||{}));
};
Effect.Morph=Class.create(Effect.Base,{
initialize:function(element){
this.element=$(element);
if(!this.element)throw(Effect._elementDoesNotExistError);
var options=Object.extend({
style:{}
},arguments[1]||{});
if(!Object.isString(options.style))this.style=$H(options.style);
else{
if(options.style.include(':'))
this.style=options.style.parseStyle();
else{
this.element.addClassName(options.style);
this.style=$H(this.element.getStyles());
this.element.removeClassName(options.style);
var css=this.element.getStyles();
this.style=this.style.reject(function(style){
return style.value==css[style.key];
});
options.afterFinishInternal=function(effect){
effect.element.addClassName(effect.options.style);
effect.transforms.each(function(transform){
effect.element.style[transform.style]='';
});
};
}
}
this.start(options);
},
setup:function(){
function parseColor(color){
if(!color||['rgba(0, 0, 0, 0)','transparent'].include(color))color='#ffffff';
color=color.parseColor();
return $R(0,2).map(function(i){
return parseInt(color.slice(i*2+1,i*2+3),16);
});
}
this.transforms=this.style.map(function(pair){
var property=pair[0],value=pair[1],unit=null;
if(value.parseColor('#zzzzzz')!='#zzzzzz'){
value=value.parseColor();
unit='color';
}else if(property=='opacity'){
value=parseFloat(value);
if(Prototype.Browser.IE&&(!this.element.currentStyle.hasLayout))
this.element.setStyle({zoom:1});
}else if(Element.CSS_LENGTH.test(value)){
var components=value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
value=parseFloat(components[1]);
unit=(components.length==3)?components[2]:null;
}
var originalValue=this.element.getStyle(property);
return{
style:property.camelize(),
originalValue:unit=='color'?parseColor(originalValue):parseFloat(originalValue||0),
targetValue:unit=='color'?parseColor(value):value,
unit:unit
};
}.bind(this)).reject(function(transform){
return(
(transform.originalValue==transform.targetValue)||
(
transform.unit!='color'&&
(isNaN(transform.originalValue)||isNaN(transform.targetValue))
)
);
});
},
update:function(position){
var style={},transform,i=this.transforms.length;
while(i--)
style[(transform=this.transforms[i]).style]=
transform.unit=='color'?'#'+
(Math.round(transform.originalValue[0]+
(transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart()+
(Math.round(transform.originalValue[1]+
(transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart()+
(Math.round(transform.originalValue[2]+
(transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart():
(transform.originalValue+
(transform.targetValue-transform.originalValue)*position).toFixed(3)+
(transform.unit===null?'':transform.unit);
this.element.setStyle(style,true);
}
});
Effect.Transform=Class.create({
initialize:function(tracks){
this.tracks=[];
this.options=arguments[1]||{};
this.addTracks(tracks);
},
addTracks:function(tracks){
tracks.each(function(track){
track=$H(track);
var data=track.values().first();
this.tracks.push($H({
ids:track.keys().first(),
effect:Effect.Morph,
options:{style:data}
}));
}.bind(this));
return this;
},
play:function(){
return new Effect.Parallel(
this.tracks.map(function(track){
var ids=track.get('ids'),effect=track.get('effect'),options=track.get('options');
var elements=[$(ids)||$$(ids)].flatten();
return elements.map(function(e){return new effect(e,Object.extend({sync:true},options))});
}).flatten(),
this.options
);
}
});
Element.CSS_PROPERTIES=$w(
'backgroundColor backgroundPosition borderBottomColor borderBottomStyle '+
'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth '+
'borderRightColor borderRightStyle borderRightWidth borderSpacing '+
'borderTopColor borderTopStyle borderTopWidth bottom clip color '+
'fontSize fontWeight height left letterSpacing lineHeight '+
'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
'maxWidth minHeight minWidth opacity outlineColor outlineOffset '+
'outlineWidth paddingBottom paddingLeft paddingRight paddingTop '+
'right textIndent top width wordSpacing zIndex');
Element.CSS_LENGTH=/^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;
String.__parseStyleElement=document.createElement('div');
String.prototype.parseStyle=function(){
var style,styleRules=$H();
if(Prototype.Browser.WebKit)
style=new Element('div',{style:this}).style;
else{
String.__parseStyleElement.innerHTML='<div style="'+this+'"></div>';
style=String.__parseStyleElement.childNodes[0].style;
}
Element.CSS_PROPERTIES.each(function(property){
if(style[property])styleRules.set(property,style[property]);
});
if(Prototype.Browser.IE&&this.include('opacity'))
styleRules.set('opacity',this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);
return styleRules;
};
if(document.defaultView&&document.defaultView.getComputedStyle){
Element.getStyles=function(element){
var css=document.defaultView.getComputedStyle($(element),null);
return Element.CSS_PROPERTIES.inject({},function(styles,property){
styles[property]=css[property];
return styles;
});
};
}else{
Element.getStyles=function(element){
element=$(element);
var css=element.currentStyle,styles;
styles=Element.CSS_PROPERTIES.inject({},function(results,property){
results[property]=css[property];
return results;
});
if(!styles.opacity)styles.opacity=element.getOpacity();
return styles;
};
}
Effect.Methods={
morph:function(element,style){
element=$(element);
new Effect.Morph(element,Object.extend({style:style},arguments[2]||{}));
return element;
},
visualEffect:function(element,effect,options){
element=$(element);
var s=effect.dasherize().camelize(),klass=s.charAt(0).toUpperCase()+s.substring(1);
new Effect[klass](element,options);
return element;
},
highlight:function(element,options){
element=$(element);
new Effect.Highlight(element,options);
return element;
}
};
$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
'pulsate shake puff squish switchOff dropOut').each(
function(effect){
Effect.Methods[effect]=function(element,options){
element=$(element);
Effect[effect.charAt(0).toUpperCase()+effect.substring(1)](element,options);
return element;
};
}
);
$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each(
function(f){Effect.Methods[f]=Element[f];}
);
Element.addMethods(Effect.Methods);
Effect.Transitions.easeFromTo=function(pos){
if((pos/=0.5)<1)return 0.5*Math.pow(pos,4);
return-0.5*((pos-=2)*Math.pow(pos,3)-2);
};
Effect.Transitions.easeTo=function(pos){
return Math.pow(pos,0.35);
};
Effect.Transitions.easeFrom=function(pos){
return Math.pow(pos,4);
};
var LiveSearchResultsList=Class.create({
PER_DOMAIN_LIMIT:20,
DEFAULT_BUY_RESULT_SET_SIZE:4,
DEFAULT_SELL_RESULT_SET_SIZE:5,
highlighted_class_name:'highlighted_suggest_item',
initialize:function(live_search_input,
ajax_path,selected_domains,is_buy_side,on_selection,hide_out_of_stock)
{
this._live_search_input=live_search_input;
this.on_selection=on_selection||Prototype.emptyFunction;
var default_num_showing=(is_buy_side?this.DEFAULT_BUY_RESULT_SET_SIZE:
this.DEFAULT_SELL_RESULT_SET_SIZE);
this.requester=
new LiveSearchRequester(ajax_path,
selected_domains,
is_buy_side,
default_num_showing,
this.make_results_active.bind(this),
hide_out_of_stock);
this.results=
new LiveSearchResultsManager(this,
this._is_single_domain(selected_domains),
is_buy_side,
default_num_showing,
this);
this.is_active=false;
$(document.body).insert({bottom:this._wrappers_to_html()});
var lists=$$('.suggest_list');
this._element=lists[lists.length-1];
this._inner=this._element.select('.inner')[0];
this._on_window_resize=this._position.bind(this);
Event.observe(window,'resize',this._on_window_resize);
this.highlighted_id=null;
this._element.observe('mouseover',this.on_mouseover.bindAsEventListener(this));
this._element.observe('click',this.on_click.bindAsEventListener(this));
this._element.observe('mousedown',function(event){event.stop();}.bindAsEventListener(this));
this._element.observe('mouseup',function(event){event.stop();}.bindAsEventListener(this));
},
set_selected_domains:function(names){
this.requester.set_selected_domains(names);
this.results.set_show_all(this._is_single_domain(names));
},
get_width:function(){
return Math.max(this._get_flyout_reference_element().getDimensions().width,400);
},
remove_results_from_domain:function(domain_name){
this.results.fewer(domain_name);
},
add_results_to_domain:function(domain_name){
this.results.more(domain_name);
},
make_results_active:function(results_hash){
this.results.reset(results_hash);
this._inner.update(this.results.to_html());
this.show();
},
destroy:function(){
Event.stopObserving(window,'resize',this._on_window_resize);
this.requester.cancel_all();
},
on_click_outside:function(elem){
if(!this._is_elem_inside(elem)&&this.is_active){
this.hide();}
},
update:function(query_str){
if(!query_str||query_str.empty()){
this.hide();
}else{
this.requester.find(query_str,this.PER_DOMAIN_LIMIT);
}
},
reset_positioning:function(){
this._positioned_for_show=false;
},
show:function(){
this.is_active=true;
if(!this._positioned_for_show){
this._position();
this._positioned_for_show=true;
}
this._element.display();
this._reset_highlight();
},
hide:function(){
this._element.hide();
this.is_active=false;
},
_get_element_from_result_id:function(result_id){
return this._element.select('.result_'+result_id)[0];
},
_get_result_id_from_element:function(element){
return element.className.match(/result_([a-z]+_[0-9]+)/)[1];
},
_get_domain_name_from_element:function(element){
return element.className.match(/suggest_more_([a-z]+)/)[1];
},
highlight_next:function(){
if(this.highlighted_id==null){
var f=this.results.first().id;
if(f)this.highlighted_id=f;
}else{
this._unhighlight_item();
this.highlighted_id=this.results.next(this.highlighted_id).id;
}
this._highlight_item();
},
highlight_previous:function(){
if(this.highlighted_id==null){
this.highlighted_id=this.results.last().id;
}else{
this._unhighlight_item();
this.highlighted_id=this.results.previous(this.highlighted_id).id;
}
this._highlight_item();
},
activate_match:function(){
if(this.results&&(this.highlighted_id!=null)){
var result=this.results.get(this.highlighted_id);
if(result){
if(result.domain=='browse'){
this._on_select_browse_result(result);
}else{
this.on_selection(result);
}
this.requester.cancel_all();
this.hide();
this._inner.update('&nbsp;');
}
}
},
_on_select_browse_result:function(result){
var tags=result.tags.clone();
var name_and_vert=result.title.match(/^(.*) \((.*?)\)$/);
Glyde.notify.publish('live_search:list:browse_result_selected',
{glu_data_query:null,
glu_tags_any:tags,
glu_tags_all:[],
glu_tags_none:[],
glu_id:-1,
vertical:name_and_vert[2],
vertical_text:name_and_vert[2],
category_text:name_and_vert[1]
});
},
_is_single_domain:function(selected_domains){
return(selected_domains&&
selected_domains.length==1&&
selected_domains[0]!='all');
},
_get_flyout_reference_element:function(){
return $(this._live_search_input._element.parentNode);
},
_is_elem_inside:function(elem){
return $(elem).descendantOf(this._inner);
},
_position:function(){
if(!this.is_active){
this.reset_positioning();
return;
}
var STEM_OFFSET_X=18;
var STEM_OFFSET_Y=10;
var FRAMING_WIDTH=21;
var ref_elem=this._get_flyout_reference_element();
var left,top;
if(ref_elem.select('.search_box_icon').length>0){
var icon_elem=ref_elem.select('.search_box_icon')[0];
var vp_offset=icon_elem.viewportOffset();
var scroll_offset=icon_elem.cumulativeScrollOffset();
left=vp_offset.left+scroll_offset.left+Math.ceil(icon_elem.getWidth()/2)-STEM_OFFSET_X;
top=vp_offset.top+scroll_offset.top+icon_elem.getHeight()+STEM_OFFSET_Y;
}else{
var vp_offset=ref_elem.viewportOffset();
var scroll_offset=ref_elem.cumulativeScrollOffset();
left=vp_offset.left+scroll_offset.left;
top=vp_offset.top+scroll_offset.top+ref_elem.offsetHeight+8;
}
this._element.style.left=left+'px';
this._element.style.top=top+'px';
this._inner.style.width=this.get_width()-FRAMING_WIDTH+'px';
},
_highlight_item:function(){
if(this.highlighted_id){
var element=this._get_element_from_result_id(this.highlighted_id);
element.addClassName(this.highlighted_class_name);
}
},
_unhighlight_item:function(){
if(this.highlighted_id){
var element=this._get_element_from_result_id(this.highlighted_id);
if(element)element.removeClassName(this.highlighted_class_name);
}
},
_reset_highlight:function(){
this._unhighlight_item();
this.highlighted_id=null;
if(this.results&&this.results.size()==1){
this._highlighted_id=this.results.first().id;
this._highlight_item();
}
},
on_click:function(event){
var target=event.element();
var result_element;
if((result_element=(target.hasClassName('suggest_result')?target:false)||target.up('.suggest_result'))){
this.activate_match();this.is_active=false;
return;
}
var more_element;
if((more_element=(target.hasClassName('more_button')?target:false))){
this.add_results_to_domain(this._get_domain_name_from_element(more_element));
return;
}
var fewer_element;
if((fewer_element=(target.hasClassName('fewer_button')?target:false))){
this.remove_results_from_domain(this._get_domain_name_from_element(fewer_element));
return;
}
},
on_mouseover:function(event){
var target=event.element();
var result_element;
if((result_element=(target.hasClassName('suggest_result')?target:false)||target.up('.suggest_result'))){
var result_id=this._get_result_id_from_element(result_element);
if(result_id!=this.highlighted_id){
this._unhighlight_item();
this.highlighted_id=result_id;
this._highlight_item();
this.is_active=true;
}
return;
}
}
});
var LiveSearchInput=Class.create({
initialize:function(input_element,list_update_path,on_complete,selected_domains,is_buy_side,hide_out_of_stock)
{
this._element=$(input_element);
this.on_complete=on_complete;
this.query_str=null;
this.prev_query_str=null;
this.throttle_requests=false;
this.throttle_threshold=200;
this.list=new LiveSearchResultsList(this,list_update_path,selected_domains,
is_buy_side,this.on_selection.bind(this),hide_out_of_stock);
this._set_event_handlers();
},
set_selected_domains:function(domain_names){
this.list.set_selected_domains(domain_names);
this.prev_query_str=null;
this.destroy();
this.reset();
},
hide_results:function(){
this.list.hide();
},
destroy:function(){
this.list.destroy();
},
on_selection:function(search_result){
this.on_complete(search_result);
},
reset:function(){
this.set_text('');
},
current_text:function(){
return this._element.value;
},
set_text:function(text){
this._element.value=text;
},
activate:function(){
var str=this._canonicalize_query_str();
if(!this.list.is_active&&str!=''){
this.prev_query_str=null;this._on_change();
this.list.show();
}
},
_set_event_handlers:function(){
var e=this._element;
e.observe('focus',this._on_focus.bindAsEventListener(this));
e.observe('blur',this._on_blur.bindAsEventListener(this));
e.observe('keypress',this._on_keypress.bindAsEventListener(this));
e.observe('keydown',this._on_keydown.bindAsEventListener(this));
e.observe('keyup',this._on_keyup.bindAsEventListener(this));
$(document.body).observe('mouseup',this._on_doc_click.bindAsEventListener(this));
},
_on_doc_click:function(event){
var target=event.element();
if(target!=this._element){
this.list.on_click_outside(target);
}
},
_on_focus:function(event){
this.activate();
},
_on_blur:function(event){
if(!this.list.is_active){
this.list.hide();
}
},
_on_keyup:function(event){
switch(event.keyCode){
case Event.KEY_RETURN:
if(this.list.is_active){this.list.activate_match();
Event.stop(event);
}
break;
case Event.KEY_TAB:
if(this.list.is_active){
Event.stop(event);
}
break;
case Event.KEY_ESC:
this.list.hide();
Event.stop(event);
break;
default:
this._on_change();
}
},
_wake_up_safari:function(){
this.list.is_active=true;
if(Glyde.Browser.SAFARI){
this._element.blur();
}
},
_on_keypress:function(event){
switch(event.keyCode){
case Event.KEY_RETURN:
if(Glyde.Browser.NEW_SAFARI){
if(this.list.is_active){
this.list.activate_match();
}
}
event.stop();
break;
case Event.KEY_TAB:
if(this.list.is_active){
this.list.activate_match();
event.stop();
}
this._wake_up_safari();
this._element.focus();
break;
case Event.KEY_DOWN:
if(Glyde.Browser.TRUE_FF){
this._handle_the_down_key(event);
}
break;
case Event.KEY_UP:
if(Glyde.Browser.TRUE_FF){
this._handle_the_up_key(event);
}
break;
default:
this._element.focus();
break;
}
},
_handle_the_down_key:function(event){
if(this.list.is_active){
event.stop();
this.list.highlight_next();
}
},
_handle_the_up_key:function(event){
if(this.list.is_active){
event.stop();
this.list.highlight_previous();
}
},
_on_keydown:function(event){
switch(event.keyCode){
case Event.KEY_DOWN:
if(!Glyde.Browser.TRUE_FF){
this._handle_the_down_key(event);
}
break;
case Event.KEY_UP:
if(!Glyde.Browser.TRUE_FF){
this._handle_the_up_key(event);
}
break;
case Event.KEY_TAB:
if(this.list.is_active){
this.list.activate_match();
event.stop();
}
break;
case Event.KEY_RETURN:
event.stop();
break;
}
},
_canonicalize_query_str:function(){
return this._element.value.strip().gsub(/\s+/,' ');
},
_drop_init_article:function(str){
var no_the=str.sub(/^the (\S)/,'#{1}');
return((no_the==str)?str.sub(/^a (\S)/,'#{1}'):no_the);
},
_on_change:function(){
this.query_str=this._canonicalize_query_str();
if(this.query_str!=this.prev_query_str){
this.prev_query_str=this.query_str;
this.list.update(this.query_str);
}
}
});
LiveSearchResultsList.prototype._wrappers_to_html=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="suggest_list dialog_container"');_j.s('>');
_j.ns('<div');_j.s(' class="dialog_arrow_box"');_j.s('>');
_j.ns('<div');_j.s(' class="dialog_arrow up"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('<table');_j.s(' cellspacing="'+(0)+'"');_j.s(' cellpadding="'+(0)+'"');_j.s('>');
_j.ns('<tr');_j.s('>');
_j.ns('<td');_j.s(' class="md_tl"');_j.s('>');
_j.ns('</td>');
_j.ns('<td');_j.s(' class="md_tc"');_j.s('>');
_j.ns('</td>');
_j.ns('<td');_j.s(' class="md_tr"');_j.s('>');
_j.ns('</td>');
_j.ns('</tr>');
_j.ns('<tr');_j.s('>');
_j.ns('<td');_j.s(' class="md_cl"');_j.s('>&nbsp;');
_j.ns('</td>');
_j.ns('<td');_j.s(' class="md_cc"');_j.s('>');
_j.ns('<div');_j.s(' class="'+('inner'+(this._show_all_vertical_results?' single_vertical':'')+(Glyde.Browser.TRUE_FF?' old_firefox':''))+'"');_j.s('>');
_j.ns('</div>');
_j.ns('</td>');
_j.ns('<td');_j.s(' class="md_cr"');_j.s('>&nbsp;');
_j.ns('</td>');
_j.ns('</tr>');
_j.ns('<tr');_j.s('>');
_j.ns('<td');_j.s(' class="md_bl"');_j.s('>&nbsp;');
_j.ns('</td>');
_j.ns('<td');_j.s(' class="md_bc"');_j.s('>&nbsp;');
_j.ns('</td>');
_j.ns('<td');_j.s(' class="md_br"');_j.s('>&nbsp;');
_j.ns('</td>');
_j.ns('</tr>');
_j.ns('</table>');
_j.ns('</div>');
return _j.v();
};
var LiveSearcher=Class.create({
initialize:function(id,on_select,context)
{
var ctx=context||{};this.elem_id=id;
this.reset_text();
this._on_select_callback=on_select||Prototype.emptyFunction;
this.suggest_input=new LiveSearchInput(this.elem_id,
Glyde.urls.title_suggestions_url,
this.on_select.bind(this),
ctx.selected_domains,
ctx.is_buy_side);
try{
$(this.elem_id).focus();
}catch(e){}
},
set_selected_domains:function(domain_names){
this.suggest_input.set_selected_domains(domain_names);
},
deactivate:function(){
this.suggest_input.hide_results();
},
activate:function(){
this.suggest_input.activate();
},
current_text:function(){
return this.suggest_input.current_text();
},
set_text:function(text){
var elem=$(this.elem_id);
elem.__click_cleared=true;
elem.__key_cleared=true;
this.suggest_input.set_text(text);
},
clear_positioning:function(){
this.suggest_input.list.reset_positioning();
},
on_select:function(result){
this._on_select_callback(result.domain,result.text,result.res_id);
},
loading:function(){
Loading.show();
},
reset:function(){
this.deactivate();
this.reset_text();
this.set_focus();
},
reset_text:function(){
var elem=$(this.elem_id);
elem.value='';
var cs=$('cancel_search');
if(cs)cs.undisplay();
},
enable:function(){
var elem=$(this.elem_id);
elem.disabled=false;
elem.removeClassName("disabled").focus();
},
set_focus:function(){
this.suggest_input.prev_query_str=null;
try{
var elem=$(this.elem_id);
if(elem.__focus_attempts>10){
elem.__focus_attempts=0;
return;
}
elem.focus();
}catch(e){
$(this.elem_id).__focus_attempts++;
var func=this.set_focus.bind(this);
setTimeout(func,100);
}
},
remove_focus:function(){
$(this.elem_id).blur();
}
});
var LiveSearchEncoder={
RESERVED_CHAR_2_ENCODING:$H({
'\%':'%25','\#':'%23',
'\&':'%26',
'\/':'%2F',
'\=':'%3D',
'\?':'%3F',
'\[':'%5B',
'\\':'%5C',
'\]':'%5D',
'\^':'%5E',
'\{':'%7B',
'\|':'%7C',
'\}':'%7D'
}),
url_encode_reserved_chars:function(str){
this.RESERVED_CHAR_2_ENCODING.each(function(pair){
str=str.gsub(pair.key,pair.value);
});
return str;
}
};
var LiveSearchCache=Class.create({
ttl:10*60*1000,initialize:function(){
this._clear();
setInterval(this._clear.bind(this),this.ttl);
},
set:function(query_str,results){
this.query_2_results.set(query_str,results);
},
get:function(query_str){
return this.query_2_results.get(query_str);
},
_clear:function(){
this.query_2_results=new Hash();
}
});
var LiveSearchRequester=Class.create({
REQUEST_OPTIONS:{
method:'get',
asynchronous:true,
evalScripts:true,
onFailure:Prototype.emptyFunction,
trackRequest:false
},
initialize:function(ajax_path,selected_domains,is_buy_side,default_num_showing,on_data_callback,hide_out_of_stock)
{
this.on_data=on_data_callback||Glyde.empty_function;
this.ajax_path=ajax_path;
this.cache=new LiveSearchCache();
this._selected_domains=selected_domains;
this._is_buy_side=is_buy_side;
this._hide_out_of_stock=hide_out_of_stock;
this._default_num_showing=default_num_showing;
this._clear();
},
set_selected_domains:function(domains){
this._selected_domains=domains;
this.cache=new LiveSearchCache();
},
find:function(query_str,domain_limit){
var res=this.cache.get(query_str);
if(res){
this.on_data(res);
}else{
this._request(query_str,domain_limit);
}
},
cancel_all:function(){
this.requests.each(function(r){
r.transport.abort();
});
},
_request:function(query_str,domain_limit){
var opts=this._request_options(query_str,domain_limit);
var qs=LiveSearchEncoder.url_encode_reserved_chars(query_str);
this.requests.push(new Ajax.Request(this.ajax_path+"/results.js?query="+qs,opts));
},
_request_options:function(query_str,domain_limit){
var opts={
parameters:{limit:domain_limit},
onComplete:this._augmented_on_complete_fun(query_str)
}
if(this._is_buy_side){
opts.parameters.in_stock=true;
}
opts.parameters.show_size=this._default_num_showing;
var sd=this._selected_domains;
if(sd&&sd.length>0){
opts.parameters.domains=sd.join(',');
}
return Object.extend(this.REQUEST_OPTIONS,opts);
},
_augmented_on_complete_fun:function(query_str){
var tm=(new Date()).getTime();
return function(resp,o){
var ct=ConversionTracker.get_instance();
var data=Ajax.evalJSON(resp.responseText);
if(data){
if(data.success){
if(this._hide_out_of_stock){
data.results.each(function(result_set){
result_set.results=result_set.results.select(function(result){return result.in_stock;});
});
}
this._on_complete(data,tm,query_str);
}else{
var val=data.exception||((resp.status!=200)?'server status '+resp.status:'no data');
ct.track_event('Lsd error',val,Glyde.page_id);
console.log('lsd error : exception = ',val);
this._on_complete([],tm,query_str);
}
}else{
ct.track_event('Lsd error','no data',Glyde.page_id)
}
}.bind(this);
},
_on_complete:function(data,request_time,query_str){
var results=this._results_from_json(data);
if(request_time>this._highest_result_time){
this._highest_result_time=request_time;
this.on_data(results);
}
this.cache.set(query_str,results);
},
_results_from_json:function(obj){
return{domain_results:
(obj.results?this._augment_each_result(obj.results):null)
}
},
_augment_each_result:function(domain_results){
for(var vi=0;vi<domain_results.length;++vi){
var dr=domain_results[vi];
dr.name=dr.type;
for(var ri=0;ri<dr.results.length;++ri){
var r=dr.results[ri];
r.domain=dr.type;
r.title=r.text.replace(/(<([^>]+)>)/ig,'');
r.id=r.domain+'_'+ri;
}
}
return domain_results;
},
_clear:function(){
this.requests=[];
this._highest_result_time=-1;
}
});
var LiveSearchDomain=Class.create({
SUGGEST_VERTICAL_PREFIX:'suggest_vertical_',
MORE_BUTTON_PREFIX:'suggest_more_',
ROW_HEIGHT:14,
initialize:function(results_manager,
hash,show_all_results,is_buy_side,default_num_to_show)
{
this._results_manager=results_manager;
this.name=hash.name;this.display_name=
(this.name=='browse'?'browse':Glyde.Glu.friendly_vertical_name(this.name,true));
this.results=hash.results;this.num_showing=0;this._is_buy_side=is_buy_side;
this._show_in_stock_info=is_buy_side&&(this.name!='browse');
this._show_all_results=show_all_results;
this._default_num_to_show=default_num_to_show;
this.pref_num_to_show=default_num_to_show;
},
set_pref_num_to_show:function(num){
this.pref_num_to_show=num;
},
_default_result_set_size:function(){
return this._default_num_to_show;
},
default_num_to_show:function(){
return Math.min(this.results.length,this._default_result_set_size());
},
visible_results:function(){
return this._get_results(0,this.num_showing);
},
all_results:function(){
return this._get_results(0,this.results.length);
},
to_html:function(is_last,width){
this.num_showing=this._get_num_to_show();
return this._render(is_last,width,this._height());
},
set_size:function(size){
this.pref_num_to_show=(size!=null)?size:this._default_result_set_size();
this.num_showing=this._get_num_to_show();
this._show_link();
this._resize();
},
_get_num_to_show:function(){
return this._show_all_results?
this.results.length:
Math.min(this.pref_num_to_show,this.results.length);
},
_show_link:function(){
if(this._can_show_more()){
this._set_more_fewer_link(fewer=false);
}else if(this._can_show_fewer()){
this._set_more_fewer_link(fewer=true);
}else{
var list=this._results_manager._results_list;
var element=list._element.select('.'+this.MORE_BUTTON_PREFIX+this.name)[0];
element.undisplay();
}
},
_set_more_fewer_link:function(fewer){
var list=this._results_manager._results_list;
var el=list._element.select('.'+this.MORE_BUTTON_PREFIX+this.name)[0];
if(el){
if(fewer){
el.removeClassName('more_button');
el.addClassName('fewer_button');
el.update('fewer');
}else{
el.removeClassName('fewer_button');
el.addClassName('more_button');
el.update('more');
}
el.display();
}
},
_can_show_more:function(){
return(this.num_showing<this.results.length);
},
_can_show_fewer:function(){
return(this.results.length>0&&
!this._show_all_results&&
this.num_showing==this.results.length&&
this.num_showing>=this.pref_num_to_show&&
this.num_showing>this._default_result_set_size()
);
},
_resize:function(){
var list=this._results_manager._results_list;
var elem=list._element.select('.'+this.SUGGEST_VERTICAL_PREFIX+this.name)[0];
var effect=new fx.Height(elem,{duration:400});
effect.custom(elem.style.height,this._height());
},
_height:function(){
return(this.ROW_HEIGHT*this.num_showing)+((!Glyde.Browser.IE)?0:1);
},
_get_results:function(offset,limit){
var res=[];
var after=offset+limit;
for(var i=offset;i<after;++i){
res.push({value:this.results[i],
id:this.name+'_'+i
});
}
return res;
}
});
LiveSearchDomain.prototype._render=function(is_last,width,height){
var _j=new Jaml();
if(this.results.length>0){
_j.ns('<div');_j.s(' class="'+("suggest_vertical "+this.SUGGEST_VERTICAL_PREFIX+this.name)+'"');_j.s(' style="'+("height: "+height+"px;")+'"');_j.s('>');
var text_div_style="width: "+width+"px;";
var res,in_stock_class;
for(var i=0,len=this.results.length;i<len;++i){
_j.ns('<div');_j.s(' class="suggest_row"');_j.s('>');
res=this.results[i];
if(!this._show_all_results){
if(i!=0){
_j.ns('<div');_j.s(' class="suggest_vertical_indent"');_j.s('>&nbsp;');
_j.ns('</div>');
}
else{
_j.ns('<div');_j.s(' class="suggest_vertical_header"');_j.s('>'+(this.display_name));
_j.ns('</div>');
}
}
_j.ns('<div');_j.s(' class="'+('suggest_item suggest_result result_'+res.id)+'"');_j.s('>');
in_stock_class=this._show_in_stock_info?(!res.in_stock?' not_in_stock':''):'';
_j.ns('<div');_j.s(' class="'+('suggest_text'+in_stock_class)+'"');_j.s(' style="'+(text_div_style)+'"');_j.s(' title="'+(res.title)+'"');_j.s('>'+(res.text));
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</div>');
}
_j.ns('</div>');
if(this._can_show_more()){
_j.ns('<a');_j.s(' class="'+('more_button '+this.MORE_BUTTON_PREFIX+this.name)+'"');_j.s(' onclick="'+('return false;')+'"');_j.s('>more');
_j.ns('</a>');
}
else{
var disp="display:"+(this._can_show_fewer()?"block":"none");
_j.ns('<a');_j.s(' class="'+('fewer_button '+this.MORE_BUTTON_PREFIX+this.name)+'"');_j.s(' style="'+(disp)+'"');_j.s(' onclick="'+('return false;')+'"');_j.s('>fewer');
_j.ns('</a>');
}
if(!is_last){
_j.ns('<div');_j.s(' class="suggest_vertical_divider"');_j.s(' id="'+('suggest_vertical_divider_'+this.name)+'"');_j.s('>&nbsp;');
_j.ns('</div>');
}
}
return _j.v();
};
var LiveSearchResultsManager=Class.create({
SELL_PREFS_COOKIE_NAME:'glyde_live_search_prefs',
BUY_PREFS_COOKIE_NAME:'glyde_buy_live_search_prefs',
DEFAULT_TOTAL_SHOWING:20,
NUM_PIXELS_RES_NARROWER_THAN_INPUT:90,
NUM_PIXELS_RES_NARROWER_THAN_INPUT_ONE_DOMAIN:30,
initialize:function(live_search_results_list,
show_all_results_per_domain,is_buy_side,default_num_showing)
{
this._results_list=live_search_results_list;
this._show_all_results_per_domain=show_all_results_per_domain||false;
this._is_buy_side=is_buy_side||false;
this._default_num_showing=default_num_showing;
},
set_show_all:function(show_all){
this._show_all_results_per_domain=show_all;
},
reset:function(results_obj){
this._raw_results=results_obj;
this._domains_hash=this._results_by_domain(results_obj);
this._set_num_results();
this._set_prefs_from_cookie();
},
get:function(result_id){
var pair=result_id.split('_');
var name=pair[0],idx=pair[1];
if(name==undefined||idx==undefined)return null;
var dom=this._domains_hash.get(name);
return dom.results[idx];
},
first:function(){
return(this._visible_results&&this._visible_results[0]);
},
last:function(){
return(this._visible_results&&this._visible_results[this._visible_results.length-1]);
},
size:function(){
return(this._visible_results?this._visible_results.length:0);
},
previous:function(res_id){
var idx=this._find_visible_index_by_id(res_id);
if(idx==-1)return null;
var r=this._visible_results[idx-1];
return r?r:this._visible_results[this._visible_results.length-1];
},
next:function(res_id){
var idx=this._find_visible_index_by_id(res_id);
if(idx==-1)return null;
var r=this._visible_results[idx+1];
return r?r:this._visible_results[0];
},
to_html:function(){
if(this._num_results==0){
this._reset_visible_results();
return this._render_no_matches();
}else{
this._set_result_width();var html_strs=[];
var doms=this._domains_hash.values();
for(var i=0,len=doms.length;i<len;++i){
var dom=doms[i];
html_strs.push(dom.to_html(i==(len-1),this._result_width));
}
this._reset_visible_results();
return html_strs.join('');
}
},
more:function(domain_name){
var dom=this._domains_hash.get(domain_name);
this._set_domain_size(dom,dom.results.length);
this._rebalance_other_domains(dom);
this._set_cookie();
},
fewer:function(domain_name){
var dom=this._domains_hash.get(domain_name);
this._set_domain_size(dom,null);
this._rebalance_other_domains(dom);
this._set_cookie();
},
_set_result_width:function(){
this._result_width=
this._results_list.get_width()-
(this._show_all_results_per_domain?
this.NUM_PIXELS_RES_NARROWER_THAN_INPUT_ONE_DOMAIN:
this.NUM_PIXELS_RES_NARROWER_THAN_INPUT);
},
_rebalance_other_domains:function(domain){
var other_doms=this._domains_hash.values().reject(
function(d){return(d.name==domain.name)||(d.results.length==0);}
);
var spots_left=this.DEFAULT_TOTAL_SHOWING-domain.num_showing;
var num_for_each=Math.max(1,Math.ceil(spots_left/other_doms.length));
other_doms.each(
function(d){this._set_domain_size(d,Math.min(num_for_each,d.default_num_to_show()));}.bind(this)
);
},
_set_domain_size:function(domain,size){
domain.set_size(size);
this._reset_visible_results();
},
_find_visible_index_by_id:function(res_id){
var idx=-1;
for(var i=0,len=this._visible_results.length;i<len;++i){
if(this._visible_results[i].id==res_id){
idx=i;
break;
}
}
return idx;
},
_set_prefs_from_cookie:function(){
var str=this._get_cookie_str();
if(str){
var prefs=this._hash_from_cookie_str(str);
for(var i in prefs){
var d=this._domains_hash.get(i);
if(d){d.set_pref_num_to_show(prefs[i]);}
}
}
},
_get_cookie_str:function(){
return Glyde.cookie.get(this._cookie_name());
},
_hash_from_cookie_str:function(cookie){
var tuples=decodeURIComponent(cookie).split('&');
return this._hash_from_tuples(tuples);
},
_hash_from_tuples:function(tuples){
var h={};
for(var i=0,len=tuples.length;i<len;++i){
var t=tuples[i].split('=');
h[t[0]]=parseInt(t[1]);
}
return h;
},
_cookie_name:function(){
return this._is_buy_side?this.BUY_PREFS_COOKIE_NAME:this.SELL_PREFS_COOKIE_NAME;
},
_set_cookie:function(){
var pairs=[];
var doms=this._domains_hash.values();
for(var i=0,len=doms.length;i<len;++i){
var d=doms[i];
pairs.push(encodeURIComponent(d.name+'='+d.pref_num_to_show));
}
Glyde.cookie.set(this._cookie_name(),pairs.join('&'),1000);
},
_results_by_domain:function(results_obj){
var rs=this._ordered_results(results_obj);
var h=new OrderedHash();
for(var i=0,len=rs.length;i<len;++i){
var dom=new LiveSearchDomain(this,rs[i],this._show_all_results_per_domain,this._is_buy_side,
this._default_num_showing);
h.insert(dom.name,dom);
}
return h;
},
DOMAIN_ORDER:['browse','games','videos','music','books'],
_ordered_results:function(results_obj){
var rs=results_obj.domain_results||[];
var domain_order=this.DOMAIN_ORDER;
var ordered_rs=[];
rs.each(function(r){
var i=domain_order.indexOf(r.name);
if(i==-1)i=domain_order.length;
ordered_rs[i]=r;
});
return ordered_rs.compact();
},
_set_num_results:function(){
this._num_results=
this._domains_hash.values().inject(0,function(sum,dom){return sum+dom.results.length;});
},
_reset_visible_results:function(){
this._visible_results=
this._domains_hash.values().map(function(d){return d.visible_results();}).flatten();
}
});
LiveSearchResultsManager.prototype._render_no_matches=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="suggest_item suggest_header"');_j.s('>&nbsp;No matches');
_j.ns('</div>');
return _j.v();
};
Glyde.PriceAdjuster=Class.create({
increment:25,
interval:{
slow:150,
fast:50,
init_delay:1,
fast_delay:1500
},
timeout_id:null,
start_time:null,
interval_id:null,
interval_fast_id:null,
initialize:function(containing_element,onstop_callback,opts){
this._containing_element=containing_element;
this.value=(opts?opts.starting:null)||500;
this.ceiling=(opts?opts.ceiling:null)||null;
this.floor=(opts?opts.floor:null)||null;
this.uniq_id=(opts?opts.uniq_id_suffix:null)||'';
this.price_span_class=(opts?opts.span_class:null)||'listing_price_text'+this.uniq_id;
this.down_button_class=(opts?opts.down_button_class:null)||'price_down'+this.uniq_id;
this.up_button_class=(opts?opts.up_button_class:null)||'price_up'+this.uniq_id;;
this.onstop=onstop_callback||Prototype.emptyFunction;
this._set_up_button_handlers();
},
set_value:function(new_value,ceiling,floor,hidden_p){
this.value=new_value;
this.ceiling=ceiling||null;
this.floor=floor||null;
if(!hidden_p){
this.display();
}
},
is_at_ceiling:function(){
return this.value==this.ceiling;
},
is_below_ceiling:function(){
return this.value<this.ceiling;
},
is_at_price:function(comparable){
return this.value==comparable;
},
is_below_price:function(comparable){
return this.value<comparable;
},
is_above_price:function(comparable){
return this.value>comparable;
},
is_at_floor:function(){
return this.value==this.floor;
},
text_elem:function(){
return this._containing_element.select('.'+this.price_span_class)[0];
},
start_up:function(){
this.start('up');
},
stop_up:function(){
this.stop('up');
},
start_down:function(){
this.start('down');
},
stop_down:function(){
this.stop('down');
},
start:function(direction){
if(this.is_running())this.kill();
this.start_time=this._now();
this._current_direction=direction;
var method=(direction=='up'?'increase':'decrease');
var fun=function(){
this.interval_id=setInterval(this[method].bind(this),this.interval.slow);
};
this.timeout_id=setTimeout(fun.bind(this),this.interval.init_delay);
},
is_running:function(){
return(this.start_time!=null);
},
kill:function(){
this._clear_interval();
this._clear_fast_interval();
this.start_time=null;
this._current_direction=null;
},
stop:function(direction){
this.kill();
if(this.timeout_id){
clearTimeout(this.timeout_id);
this.timeout_id=null;
if(direction=='up'){
this._increase_with_checks();
}else{
this._decrease_with_checks();
}
}
this.onstop(this.value);
},
increase:function(){
this.timeout_id=null;
this._possibly_accelerate('_increase_with_checks');
this._increase_with_checks();
},
_increase_with_checks:function(){
try{
this._increase();
}catch(e){
if(e.type&&e.type=='increase_exception'){
this.stop('up');
this._open_max_alert();
}else{
throw e;
}
}
},
_up_button:function(){
return this._containing_element.select('.'+this.up_button_class)[0];
},
_open_max_alert:function(){
if(typeof GlydeAlert!='undefined'&&(!this._max_alert||!this._max_alert.is_open())){
var u_b=this._up_button();
this._max_alert=new GlydeAlert('You\'ve hit the maximum price for this item.',u_b,'Max Price Alert',{position_preference:Glyde.Dialog.prototype.POSITION_ABOVE});
}
Glyde.notify.publish(Glyde.PriceAdjuster.MAX_PRICE_EVENT);
},
_increase:function(){
if(this.value+this.increment<=this.ceiling){
this.value+=this.increment;
this.display();
}else{
throw{reason:'hit ceiling',type:'increase_exception'};
}
},
decrease:function(){
this.timeout_id=null;
this._possibly_accelerate('_decrease_with_checks');
this._decrease_with_checks();
},
_decrease_with_checks:function(){
try{
this._decrease();
}catch(e){
if(e.type&&e.type=='decrease_exception'){
this.stop('down');
this._open_min_alert();
}
else throw e;
}
},
_down_button:function(){
return this._containing_element.select('.'+this.down_button_class)[0];
},
_open_min_alert:function(){
if(typeof GlydeAlert!='undefined'&&(!this._min_alert||!this._min_alert.is_open())){
var d_b=this._down_button();
this._min_alert=new GlydeAlert('You\'ve hit the minimum price for this item.',d_b,'Min Price Alert',{position_preference:Glyde.Dialog.prototype.POSITION_BELOW});
}
Glyde.notify.publish(Glyde.PriceAdjuster.MIN_PRICE_EVENT);
},
_decrease:function(){
if(this.value-this.increment>=this.floor){
this.value-=this.increment;
this.display();
}else{
throw{reason:'hit floor',type:'decrease_exception'};
}
},
display:function(){
this.text_elem().firstChild.nodeValue=Glyde.Money.format_cents(this.value);
var e=this._down_button();
if(this.value==0){
this.kill();
e.disabled=true;
}else{
e.disabled=false;
}
},
_doc_mouse_up:function(event){
if(this.is_running()){
this.stop(this._current_direction);
}
},
_up_key_down:function(event){
var foo;
switch(event.keyCode){
case Event.KEY_SPACE:
if(!this._up_space_down){
this._up_space_down=true;
this.start('up');
}
break;
case Event.KEY_TAB:
this.stop('up');
this._up_space_down=false;
break
}
},
_up_key_up:function(event){
if(event.keyCode==Event.KEY_SPACE){
this.stop('up');
this._up_space_down=false;
}
},
_down_key_down:function(event){
var foo;
switch(event.keyCode){
case Event.KEY_SPACE:
if(!this._down_space_down){
this._down_space_down=true;
this.start('down');
}
break;
case Event.KEY_TAB:
this.stop('up');
this._up_space_down=false;
break;
}
},
_down_key_up:function(event){
if(event.keyCode==Event.KEY_SPACE){
this.stop('down');
this._down_space_down=false;
}
},
_clear_interval:function(){
clearInterval(this.interval_id);
this.interval_id=null;
},
_clear_fast_interval:function(){
clearInterval(this.interval_fast_id);
this.interval_fast_id=null;
},
_possibly_accelerate:function(method){
if(this._is_button_still_down()&&!this._is_going_fast()){
if(this._is_time_to_accelerate()){
this._accelerate(method);
}
}
},
_accelerate:function(method){
this._clear_interval();
this.interval_fast_id=setInterval(this[method].bind(this),this.interval.fast);
},
_is_time_to_accelerate:function(){
return(this._now()-this.start_time>this.interval.fast_delay);
},
_is_going_slowly:function(){
return this.interval_id;
},
_is_going_fast:function(){
return this.interval_fast_id;
},
_is_button_still_down:function(){
return this.interval_id;
},
_now:function(){
return new Date().getTime();
},
_set_up_button_handlers:function(){
this._down_button_handlers();
this._up_button_handlers();
Event.observe(document.body,'mouseup',this._doc_mouse_up.bindAsEventListener(this),false);
Event.observe(document.body,'mouseout',this._doc_mouse_up.bindAsEventListener(this),false);
},
_down_button_handlers:function(){
var b=this._down_button();
if(b){
b.onmousedown=this.start_down.bindAsEventListener(this);
b.onmouseup=this.stop_down.bindAsEventListener(this);
b.onkeydown=this._down_key_down.bindAsEventListener(this);
b.onkeyup=this._down_key_up.bindAsEventListener(this);
}
},
_up_button_handlers:function(){
var b=this._up_button();
if(b){
b.onmousedown=this.start_up.bindAsEventListener(this);
b.onmouseup=this.stop_up.bindAsEventListener(this);
b.onkeydown=this._up_key_down.bindAsEventListener(this);
b.onkeyup=this._up_key_up.bindAsEventListener(this);
}
}
});
Glyde.PriceAdjuster.MAX_PRICE_EVENT='price_adjuster:max_price_event';
Glyde.PriceAdjuster.MIN_PRICE_EVENT='price_adjuster:min_price_event';
var HistoryObserver=Class.create();
HistoryObserver.update_old_links=function(){
var hash=window.location.hash;
if(hash!=''&&hash.indexOf('#!')==-1){
console.log('new place old link');
window.location=window.location.href.replace(/#/,'#!');
}
};
HistoryObserver.create=function(callback){
switch(true){
case Glyde.Browser.IE6:return new IeHistoryObserver(callback);
case Glyde.Browser.IE7:return new IeHistoryObserver(callback);
case Glyde.Browser.IE8:return new Ie8HistoryObserver(callback);
case Glyde.Browser.SAFARI:return new NewSafariHistoryObserver(callback);
default:return new MozHistoryObserver(callback);
}
};
HistoryObserver.INITIAL_PREV_STATE='ho_initial_state';
HistoryObserver.prototype={
frequency:200,
initialize:function(callback){
this._initialize(callback);
},
set_state:function(){
alert('history_observer.js.  #set_state is abstract.');
},
_normalize_state_string:function(state_str){
var norm_str=null;
if(!state_str){
norm_str='#!';
}else{
norm_str='!'+state_str;
}
return norm_str;
},
is_initial_state:function(s){
return(s==HistoryObserver.INITIAL_PREV_STATE);
},
current_state:function(){
return this._find_current_state();
},
is_back_request:function(){
return(!Glyde.is.empty_string(this._find_current_state()));
},
HISTORY_INPUT:'history_input',
_history_input:function(){
return $(this.HISTORY_INPUT);
},
_write_state_to_state_holder:function(s){
this._history_input().value=s;
},
_initialize:function(callback){
this.orig_title=window.document.title;
var hash_value=window.location.hash.replace('#!','');
this.prev_state=(this.is_back_request())?hash_value:HistoryObserver.INITIAL_PREV_STATE;
this.callback=callback;
this._setup_observation();
},
_setup_observation:function(){
this.interval_id=setInterval(this._observe.bind(this),this.frequency);
},
_observe:function(){
var s=this._find_current_state();
if(this._is_new_state(s)){
this._handle_state_change(s);
}
},
_handle_state_change:function(new_state){
try{
this.callback(new_state,this.prev_state);
}catch(e){
if(console)console.log(e);
}
this.prev_state=new_state;
},
_find_current_state:function(){
return window.location.hash.replace(/^#!/,'');
},
_is_new_state:function(s){
return(!this.is_initial_state(this.prev_state)&&(s!=this.prev_state));
},
_set_title:function(s){
window.document.title=this.orig_title+((s=='')?'':(':: '+s));
}
};
var MozHistoryObserver=Class.create(HistoryObserver,{
set_state:function(str){
var s=this._normalize_state_string(str);
window.location.hash=s;
this.prev_state=window.location.hash.substring(2,window.location.hash.length);
this._write_state_to_state_holder(s);
},
_setup_observation:function(){
if(Glyde.Browser.FF36){
Event.observe(window,'hashchange',this._observe.bind(this));
}else{
this.interval_id=setInterval(this._observe.bind(this),this.frequency);
}
}
});
var NewSafariHistoryObserver=Class.create(HistoryObserver,{
set_state:function(str){
var s=this._normalize_state_string(str);
window.location.hash=s;
this.prev_state=window.location.hash.substring(2,window.location.hash.length);
this._write_state_to_state_holder(s);
}
});
var IeHistoryObserver=Class.create(HistoryObserver,{
frame_name:'history_frame',
frame_path:'/html/ie_back_frame.html',
initialize:function(callback){
if(!document.createElement){return null;}
if(document.getElementById('_yuiResizeMonitor')){
var yui_frame=document.getElementById('_yuiResizeMonitor');
yui_frame.parentNode.removeChild(yui_frame);
}
this._create_frame();
this._initialize(callback);
},
set_state:function(str){
var s=this._normalize_state_string(str);
this.prev_state=str;
window.location.hash=s;
this._set_frame_src(s);
this._write_state_to_state_holder(s);
},
_set_frame_src:function(state){
this.hf.contentWindow.location.href="about:blank";
IeHistoryObserver._temp_state=state;
this.hf.contentWindow.location.href='javascript:parent.IeHistoryObserver.iframe_HTML()';
},
_create_frame:function(){
try{
this._create_frame_standard();
}catch(exception){
}
},
_create_frame_standard:function(){
this.hf=$(this.frame_name);
}
});
IeHistoryObserver.INITIAL_STATE='IEHO_INITIAL_STATE=1';
IeHistoryObserver._temp_state=IeHistoryObserver.INITIAL_STATE;
IeHistoryObserver.iframe_loaded=function(){
var state=IeHistoryObserver._temp_state;
IeHistoryObserver._temp_state=void(0);
return state;
};
IeHistoryObserver.iframe_HTML=function(){
return("<html><head><script>"+
"location.replace('"+IeHistoryObserver.prototype.frame_path+"');"+
"</script></head></html>'");
};
Ie8HistoryObserver=Class.create(HistoryObserver,{
set_state:function(str){
var s=this._normalize_state_string(str);
window.location.hash=s;
this.prev_state=window.location.hash.substring(2,window.location.hash.length);
this._write_state_to_state_holder(s);
},
_setup_observation:function(){
Event.observe(window,'hashchange',this._observe.bind(this));
}
});
Glyde.widgets.Widget=Class.create({
DOM_CLASS:'widget',
initialize:function(element,no_class){
this._element=$(element);
if(!no_class){this._set_dom_class();}
this._instance_number=Glyde.widgets.Widget.instance_number++;
},
$$:function(selector){
return this._element.select(selector);
},
$$first:function(selector){
return this.$$(selector)[0];
},
id:function(id){
return id+'_'+this._instance_number;
},
observe:function(eventName,handler){
this._element.observe(eventName,handler);
},
stopObserving:function(eventName,handler){
this._element.stopObserving(eventName,handler);
},
fire:function(eventName,memo){
this._element.fire(eventName,Object.extend({widget:this},memo));
},
show:function(){
this._element.show();
},
hide:function(){
this._element.hide();
},
_set_dom_class:function(){
this._element.addClassName(this.DOM_CLASS);
var superclass=this.constructor.superclass;
while(superclass){
this._element.addClassName(superclass.prototype.DOM_CLASS);
superclass=superclass.superclass;
}
},
_create_overlay:function(){
var overlays=$('widget_overlays');
if(!overlays){
$(document.body).insert("<div id='widget_overlays'></div>");
overlays=$('widget_overlays');
}
overlays.insert('<div></div>');
return overlays.childElements().last;
}
});
Glyde.widgets.Widget.instance_number=0;
if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=(""+A[C]).split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules,B,H,G,F,C;if(!I[A]){I[A]={versions:[],builds:[]};}B=I[A];H=D.version;G=D.build;F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var D=function(H){var I=0;return parseFloat(H.replace(/\./g,function(){return(I++==1)?"":".";}));},G=navigator,F={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0,caja:G.cajaVersion,secure:false,os:null},C=navigator&&navigator.userAgent,E=window&&window.location,B=E&&E.href,A;F.secure=B&&(B.toLowerCase().indexOf("https")===0);if(C){if((/windows|win32/i).test(C)){F.os="windows";}else{if((/macintosh/i).test(C)){F.os="macintosh";}}if((/KHTML/).test(C)){F.webkit=1;}A=C.match(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){F.webkit=D(A[1]);if(/ Mobile\//.test(C)){F.mobile="Apple";}else{A=C.match(/NokiaN[^\/]*/);if(A){F.mobile=A[0];}}A=C.match(/AdobeAIR\/([^\s]*)/);if(A){F.air=A[0];}}if(!F.webkit){A=C.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){F.opera=D(A[1]);A=C.match(/Opera Mini[^;]*/);if(A){F.mobile=A[0];}}else{A=C.match(/MSIE\s([^;]*)/);if(A&&A[1]){F.ie=D(A[1]);}else{A=C.match(/Gecko\/([^\s]*)/);if(A){F.gecko=1;A=C.match(/rv:([^\s\)]*)/);if(A&&A[1]){F.gecko=D(A[1]);}}}}}}return F;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C++){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{};(function(){var B=YAHOO.lang,A=Object.prototype,H="[object Array]",C="[object Function]",G="[object Object]",E=[],F=["toString","valueOf"],D={isArray:function(I){return A.toString.apply(I)===H;},isBoolean:function(I){return typeof I==="boolean";},isFunction:function(I){return(typeof I==="function")||A.toString.apply(I)===C;},isNull:function(I){return I===null;},isNumber:function(I){return typeof I==="number"&&isFinite(I);},isObject:function(I){return(I&&(typeof I==="object"||B.isFunction(I)))||false;},isString:function(I){return typeof I==="string";},isUndefined:function(I){return typeof I==="undefined";},_IEEnumFix:(YAHOO.env.ua.ie)?function(K,J){var I,M,L;for(I=0;I<F.length;I=I+1){M=F[I];L=J[M];if(B.isFunction(L)&&L!=A[M]){K[M]=L;}}}:function(){},extend:function(L,M,K){if(!M||!L){throw new Error("extend failed, please check that "+"all dependencies are included.");}var J=function(){},I;J.prototype=M.prototype;L.prototype=new J();L.prototype.constructor=L;L.superclass=M.prototype;if(M.prototype.constructor==A.constructor){M.prototype.constructor=M;}if(K){for(I in K){if(B.hasOwnProperty(K,I)){L.prototype[I]=K[I];}}B._IEEnumFix(L.prototype,K);}},augmentObject:function(M,L){if(!L||!M){throw new Error("Absorb failed, verify dependencies.");}var I=arguments,K,N,J=I[2];if(J&&J!==true){for(K=2;K<I.length;K=K+1){M[I[K]]=L[I[K]];}}else{for(N in L){if(J||!(N in M)){M[N]=L[N];}}B._IEEnumFix(M,L);}},augmentProto:function(L,K){if(!K||!L){throw new Error("Augment failed, verify dependencies.");}var I=[L.prototype,K.prototype],J;for(J=2;J<arguments.length;J=J+1){I.push(arguments[J]);}B.augmentObject.apply(this,I);},dump:function(I,N){var K,M,P=[],Q="{...}",J="f(){...}",O=", ",L=" => ";if(!B.isObject(I)){return I+"";}else{if(I instanceof Date||("nodeType"in I&&"tagName"in I)){return I;}else{if(B.isFunction(I)){return J;}}}N=(B.isNumber(N))?N:3;if(B.isArray(I)){P.push("[");for(K=0,M=I.length;K<M;K=K+1){if(B.isObject(I[K])){P.push((N>0)?B.dump(I[K],N-1):Q);}else{P.push(I[K]);}P.push(O);}if(P.length>1){P.pop();}P.push("]");}else{P.push("{");for(K in I){if(B.hasOwnProperty(I,K)){P.push(K+L);if(B.isObject(I[K])){P.push((N>0)?B.dump(I[K],N-1):Q);}else{P.push(I[K]);}P.push(O);}}if(P.length>1){P.pop();}P.push("}");}return P.join("");},substitute:function(Y,J,R){var N,M,L,U,V,X,T=[],K,O="dump",S=" ",I="{",W="}",Q,P;for(;;){N=Y.lastIndexOf(I);if(N<0){break;}M=Y.indexOf(W,N);if(N+1>=M){break;}K=Y.substring(N+1,M);U=K;X=null;L=U.indexOf(S);if(L>-1){X=U.substring(L+1);U=U.substring(0,L);}V=J[U];if(R){V=R(U,V,X);}if(B.isObject(V)){if(B.isArray(V)){V=B.dump(V,parseInt(X,10));}else{X=X||"";Q=X.indexOf(O);if(Q>-1){X=X.substring(4);}P=V.toString();if(P===G||Q>-1){V=B.dump(V,parseInt(X,10));}else{V=P;}}}else{if(!B.isString(V)&&!B.isNumber(V)){V="~-"+T.length+"-~";T[T.length]=K;}}Y=Y.substring(0,N)+V+Y.substring(M+1);}for(N=T.length-1;N>=0;N=N-1){Y=Y.replace(new RegExp("~-"+N+"-~"),"{"+T[N]+"}","g");}return Y;},trim:function(I){try{return I.replace(/^\s+|\s+$/g,"");}catch(J){return I;}},merge:function(){var L={},J=arguments,I=J.length,K;for(K=0;K<I;K=K+1){B.augmentObject(L,J[K],true);}return L;},later:function(P,J,Q,L,M){P=P||0;J=J||{};var K=Q,O=L,N,I;if(B.isString(Q)){K=J[Q];}if(!K){throw new TypeError("method undefined");}if(O&&!B.isArray(O)){O=[L];}N=function(){K.apply(J,O||E);};I=(M)?setInterval(N,P):setTimeout(N,P);return{interval:M,cancel:function(){if(this.interval){clearInterval(I);}else{clearTimeout(I);}}};},isValue:function(I){return(B.isObject(I)||B.isString(I)||B.isNumber(I)||B.isBoolean(I));}};B.hasOwnProperty=(A.hasOwnProperty)?function(I,J){return I&&I.hasOwnProperty(J);}:function(I,J){return!B.isUndefined(I[J])&&I.constructor.prototype[J]!==I[J];};D.augmentObject(B,D,true);YAHOO.util.Lang=B;B.augment=B.augmentProto;YAHOO.augment=B.augmentProto;YAHOO.extend=B.extend;})();YAHOO.register("yahoo",YAHOO,{version:"2.8.0r4",build:"2449"});
YAHOO.util.Get=function(){var M={},L=0,R=0,E=false,N=YAHOO.env.ua,S=YAHOO.lang;var J=function(W,T,X){var U=X||window,Y=U.document,Z=Y.createElement(W);for(var V in T){if(T[V]&&YAHOO.lang.hasOwnProperty(T,V)){Z.setAttribute(V,T[V]);}}return Z;};var I=function(U,V,T){var W={id:"yui__dyn_"+(R++),type:"text/css",rel:"stylesheet",href:U};if(T){S.augmentObject(W,T);}return J("link",W,V);};var P=function(U,V,T){var W={id:"yui__dyn_"+(R++),type:"text/javascript",src:U};if(T){S.augmentObject(W,T);}return J("script",W,V);};var A=function(T,U){return{tId:T.tId,win:T.win,data:T.data,nodes:T.nodes,msg:U,purge:function(){D(this.tId);}};};var B=function(T,W){var U=M[W],V=(S.isString(T))?U.win.document.getElementById(T):T;if(!V){Q(W,"target node not found: "+T);}return V;};var Q=function(W,V){var T=M[W];if(T.onFailure){var U=T.scope||T.win;T.onFailure.call(U,A(T,V));}};var C=function(W){var T=M[W];T.finished=true;if(T.aborted){var V="transaction "+W+" was aborted";Q(W,V);return;}if(T.onSuccess){var U=T.scope||T.win;T.onSuccess.call(U,A(T));}};var O=function(V){var T=M[V];if(T.onTimeout){var U=T.scope||T;T.onTimeout.call(U,A(T));}};var G=function(V,Z){var U=M[V];if(U.timer){U.timer.cancel();}if(U.aborted){var X="transaction "+V+" was aborted";Q(V,X);return;}if(Z){U.url.shift();if(U.varName){U.varName.shift();}}else{U.url=(S.isString(U.url))?[U.url]:U.url;if(U.varName){U.varName=(S.isString(U.varName))?[U.varName]:U.varName;}}var c=U.win,b=c.document,a=b.getElementsByTagName("head")[0],W;if(U.url.length===0){if(U.type==="script"&&N.webkit&&N.webkit<420&&!U.finalpass&&!U.varName){var Y=P(null,U.win,U.attributes);Y.innerHTML='YAHOO.util.Get._finalize("'+V+'");';U.nodes.push(Y);a.appendChild(Y);}else{C(V);}return;}var T=U.url[0];if(!T){U.url.shift();return G(V);}if(U.timeout){U.timer=S.later(U.timeout,U,O,V);}if(U.type==="script"){W=P(T,c,U.attributes);}else{W=I(T,c,U.attributes);}F(U.type,W,V,T,c,U.url.length);U.nodes.push(W);if(U.insertBefore){var e=B(U.insertBefore,V);if(e){e.parentNode.insertBefore(W,e);}}else{a.appendChild(W);}if((N.webkit||N.gecko)&&U.type==="css"){G(V,T);}};var K=function(){if(E){return;}E=true;for(var T in M){var U=M[T];if(U.autopurge&&U.finished){D(U.tId);delete M[T];}}E=false;};var D=function(Z){if(M[Z]){var T=M[Z],U=T.nodes,X=U.length,c=T.win.document,a=c.getElementsByTagName("head")[0],V,Y,W,b;if(T.insertBefore){V=B(T.insertBefore,Z);if(V){a=V.parentNode;}}for(Y=0;Y<X;Y=Y+1){W=U[Y];if(W.clearAttributes){W.clearAttributes();}else{for(b in W){delete W[b];}}a.removeChild(W);}T.nodes=[];}};var H=function(U,T,V){var X="q"+(L++);V=V||{};if(L%YAHOO.util.Get.PURGE_THRESH===0){K();}M[X]=S.merge(V,{tId:X,type:U,url:T,finished:false,aborted:false,nodes:[]});var W=M[X];W.win=W.win||window;W.scope=W.scope||W.win;W.autopurge=("autopurge"in W)?W.autopurge:(U==="script")?true:false;if(V.charset){W.attributes=W.attributes||{};W.attributes.charset=V.charset;}S.later(0,W,G,X);return{tId:X};};var F=function(c,X,W,U,Y,Z,b){var a=b||G;if(N.ie){X.onreadystatechange=function(){var d=this.readyState;if("loaded"===d||"complete"===d){X.onreadystatechange=null;a(W,U);}};}else{if(N.webkit){if(c==="script"){if(N.webkit>=420){X.addEventListener("load",function(){a(W,U);});}else{var T=M[W];if(T.varName){var V=YAHOO.util.Get.POLL_FREQ;T.maxattempts=YAHOO.util.Get.TIMEOUT/V;T.attempts=0;T._cache=T.varName[0].split(".");T.timer=S.later(V,T,function(j){var f=this._cache,e=f.length,d=this.win,g;for(g=0;g<e;g=g+1){d=d[f[g]];if(!d){this.attempts++;if(this.attempts++>this.maxattempts){var h="Over retry limit, giving up";T.timer.cancel();Q(W,h);}else{}return;}}T.timer.cancel();a(W,U);},null,true);}else{S.later(YAHOO.util.Get.POLL_FREQ,null,a,[W,U]);}}}}else{X.onload=function(){a(W,U);};}}};return{POLL_FREQ:10,PURGE_THRESH:20,TIMEOUT:2000,_finalize:function(T){S.later(0,null,C,T);},abort:function(U){var V=(S.isString(U))?U:U.tId;var T=M[V];if(T){T.aborted=true;}},script:function(T,U){return H("script",T,U);},css:function(T,U){return H("css",T,U);}};}();YAHOO.register("get",YAHOO.util.Get,{version:"2.8.0r4",build:"2449"});(function(){var Y=YAHOO,util=Y.util,lang=Y.lang,env=Y.env,PROV="_provides",SUPER="_supersedes",REQ="expanded",AFTER="_after";var YUI={dupsAllowed:{"yahoo":true,"get":true},info:{"root":"2.8.0r4/build/","base":"http://yui.yahooapis.com/2.8.0r4/build/","comboBase":"http://yui.yahooapis.com/combo?","skin":{"defaultSkin":"sam","base":"assets/skins/","path":"skin.css","after":["reset","fonts","grids","base"],"rollup":3},dupsAllowed:["yahoo","get"],"moduleInfo":{"animation":{"type":"js","path":"animation/animation-min.js","requires":["dom","event"]},"autocomplete":{"type":"js","path":"autocomplete/autocomplete-min.js","requires":["dom","event","datasource"],"optional":["connection","animation"],"skinnable":true},"base":{"type":"css","path":"base/base-min.css","after":["reset","fonts","grids"]},"button":{"type":"js","path":"button/button-min.js","requires":["element"],"optional":["menu"],"skinnable":true},"calendar":{"type":"js","path":"calendar/calendar-min.js","requires":["event","dom"],supersedes:["datemeth"],"skinnable":true},"carousel":{"type":"js","path":"carousel/carousel-min.js","requires":["element"],"optional":["animation"],"skinnable":true},"charts":{"type":"js","path":"charts/charts-min.js","requires":["element","json","datasource","swf"]},"colorpicker":{"type":"js","path":"colorpicker/colorpicker-min.js","requires":["slider","element"],"optional":["animation"],"skinnable":true},"connection":{"type":"js","path":"connection/connection-min.js","requires":["event"],"supersedes":["connectioncore"]},"connectioncore":{"type":"js","path":"connection/connection_core-min.js","requires":["event"],"pkg":"connection"},"container":{"type":"js","path":"container/container-min.js","requires":["dom","event"],"optional":["dragdrop","animation","connection"],"supersedes":["containercore"],"skinnable":true},"containercore":{"type":"js","path":"container/container_core-min.js","requires":["dom","event"],"pkg":"container"},"cookie":{"type":"js","path":"cookie/cookie-min.js","requires":["yahoo"]},"datasource":{"type":"js","path":"datasource/datasource-min.js","requires":["event"],"optional":["connection"]},"datatable":{"type":"js","path":"datatable/datatable-min.js","requires":["element","datasource"],"optional":["calendar","dragdrop","paginator"],"skinnable":true},datemath:{"type":"js","path":"datemath/datemath-min.js","requires":["yahoo"]},"dom":{"type":"js","path":"dom/dom-min.js","requires":["yahoo"]},"dragdrop":{"type":"js","path":"dragdrop/dragdrop-min.js","requires":["dom","event"]},"editor":{"type":"js","path":"editor/editor-min.js","requires":["menu","element","button"],"optional":["animation","dragdrop"],"supersedes":["simpleeditor"],"skinnable":true},"element":{"type":"js","path":"element/element-min.js","requires":["dom","event"],"optional":["event-mouseenter","event-delegate"]},"element-delegate":{"type":"js","path":"element-delegate/element-delegate-min.js","requires":["element"]},"event":{"type":"js","path":"event/event-min.js","requires":["yahoo"]},"event-simulate":{"type":"js","path":"event-simulate/event-simulate-min.js","requires":["event"]},"event-delegate":{"type":"js","path":"event-delegate/event-delegate-min.js","requires":["event"],"optional":["selector"]},"event-mouseenter":{"type":"js","path":"event-mouseenter/event-mouseenter-min.js","requires":["dom","event"]},"fonts":{"type":"css","path":"fonts/fonts-min.css"},"get":{"type":"js","path":"get/get-min.js","requires":["yahoo"]},"grids":{"type":"css","path":"grids/grids-min.css","requires":["fonts"],"optional":["reset"]},"history":{"type":"js","path":"history/history-min.js","requires":["event"]},"imagecropper":{"type":"js","path":"imagecropper/imagecropper-min.js","requires":["dragdrop","element","resize"],"skinnable":true},"imageloader":{"type":"js","path":"imageloader/imageloader-min.js","requires":["event","dom"]},"json":{"type":"js","path":"json/json-min.js","requires":["yahoo"]},"layout":{"type":"js","path":"layout/layout-min.js","requires":["element"],"optional":["animation","dragdrop","resize","selector"],"skinnable":true},"logger":{"type":"js","path":"logger/logger-min.js","requires":["event","dom"],"optional":["dragdrop"],"skinnable":true},"menu":{"type":"js","path":"menu/menu-min.js","requires":["containercore"],"skinnable":true},"paginator":{"type":"js","path":"paginator/paginator-min.js","requires":["element"],"skinnable":true},"profiler":{"type":"js","path":"profiler/profiler-min.js","requires":["yahoo"]},"profilerviewer":{"type":"js","path":"profilerviewer/profilerviewer-min.js","requires":["profiler","yuiloader","element"],"skinnable":true},"progressbar":{"type":"js","path":"progressbar/progressbar-min.js","requires":["element"],"optional":["animation"],"skinnable":true},"reset":{"type":"css","path":"reset/reset-min.css"},"reset-fonts-grids":{"type":"css","path":"reset-fonts-grids/reset-fonts-grids.css","supersedes":["reset","fonts","grids","reset-fonts"],"rollup":4},"reset-fonts":{"type":"css","path":"reset-fonts/reset-fonts.css","supersedes":["reset","fonts"],"rollup":2},"resize":{"type":"js","path":"resize/resize-min.js","requires":["dragdrop","element"],"optional":["animation"],"skinnable":true},"selector":{"type":"js","path":"selector/selector-min.js","requires":["yahoo","dom"]},"simpleeditor":{"type":"js","path":"editor/simpleeditor-min.js","requires":["element"],"optional":["containercore","menu","button","animation","dragdrop"],"skinnable":true,"pkg":"editor"},"slider":{"type":"js","path":"slider/slider-min.js","requires":["dragdrop"],"optional":["animation"],"skinnable":true},"storage":{"type":"js","path":"storage/storage-min.js","requires":["yahoo","event","cookie"],"optional":["swfstore"]},"stylesheet":{"type":"js","path":"stylesheet/stylesheet-min.js","requires":["yahoo"]},"swf":{"type":"js","path":"swf/swf-min.js","requires":["element"],"supersedes":["swfdetect"]},"swfdetect":{"type":"js","path":"swfdetect/swfdetect-min.js","requires":["yahoo"]},"swfstore":{"type":"js","path":"swfstore/swfstore-min.js","requires":["element","cookie","swf"]},"tabview":{"type":"js","path":"tabview/tabview-min.js","requires":["element"],"optional":["connection"],"skinnable":true},"treeview":{"type":"js","path":"treeview/treeview-min.js","requires":["event","dom"],"optional":["json","animation","calendar"],"skinnable":true},"uploader":{"type":"js","path":"uploader/uploader-min.js","requires":["element"]},"utilities":{"type":"js","path":"utilities/utilities.js","supersedes":["yahoo","event","dragdrop","animation","dom","connection","element","yahoo-dom-event","get","yuiloader","yuiloader-dom-event"],"rollup":8},"yahoo":{"type":"js","path":"yahoo/yahoo-min.js"},"yahoo-dom-event":{"type":"js","path":"yahoo-dom-event/yahoo-dom-event.js","supersedes":["yahoo","event","dom"],"rollup":3},"yuiloader":{"type":"js","path":"yuiloader/yuiloader-min.js","supersedes":["yahoo","get"]},"yuiloader-dom-event":{"type":"js","path":"yuiloader-dom-event/yuiloader-dom-event.js","supersedes":["yahoo","dom","event","get","yuiloader","yahoo-dom-event"],"rollup":5},"yuitest":{"type":"js","path":"yuitest/yuitest-min.js","requires":["logger"],"optional":["event-simulate"],"skinnable":true}}},ObjectUtil:{appendArray:function(o,a){if(a){for(var i=0;
i<a.length;i=i+1){o[a[i]]=true;}}},keys:function(o,ordered){var a=[],i;for(i in o){if(lang.hasOwnProperty(o,i)){a.push(i);}}return a;}},ArrayUtil:{appendArray:function(a1,a2){Array.prototype.push.apply(a1,a2);},indexOf:function(a,val){for(var i=0;i<a.length;i=i+1){if(a[i]===val){return i;}}return-1;},toObject:function(a){var o={};for(var i=0;i<a.length;i=i+1){o[a[i]]=true;}return o;},uniq:function(a){return YUI.ObjectUtil.keys(YUI.ArrayUtil.toObject(a));}}};YAHOO.util.YUILoader=function(o){this._internalCallback=null;this._useYahooListener=false;this.onSuccess=null;this.onFailure=Y.log;this.onProgress=null;this.onTimeout=null;this.scope=this;this.data=null;this.insertBefore=null;this.charset=null;this.varName=null;this.base=YUI.info.base;this.comboBase=YUI.info.comboBase;this.combine=false;this.root=YUI.info.root;this.timeout=0;this.ignore=null;this.force=null;this.allowRollup=true;this.filter=null;this.required={};this.moduleInfo=lang.merge(YUI.info.moduleInfo);this.rollups=null;this.loadOptional=false;this.sorted=[];this.loaded={};this.dirty=true;this.inserted={};var self=this;env.listeners.push(function(m){if(self._useYahooListener){self.loadNext(m.name);}});this.skin=lang.merge(YUI.info.skin);this._config(o);};Y.util.YUILoader.prototype={FILTERS:{RAW:{"searchExp":"-min\\.js","replaceStr":".js"},DEBUG:{"searchExp":"-min\\.js","replaceStr":"-debug.js"}},SKIN_PREFIX:"skin-",_config:function(o){if(o){for(var i in o){if(lang.hasOwnProperty(o,i)){if(i=="require"){this.require(o[i]);}else{this[i]=o[i];}}}}var f=this.filter;if(lang.isString(f)){f=f.toUpperCase();if(f==="DEBUG"){this.require("logger");}if(!Y.widget.LogWriter){Y.widget.LogWriter=function(){return Y;};}this.filter=this.FILTERS[f];}},addModule:function(o){if(!o||!o.name||!o.type||(!o.path&&!o.fullpath)){return false;}o.ext=("ext"in o)?o.ext:true;o.requires=o.requires||[];this.moduleInfo[o.name]=o;this.dirty=true;return true;},require:function(what){var a=(typeof what==="string")?arguments:what;this.dirty=true;YUI.ObjectUtil.appendArray(this.required,a);},_addSkin:function(skin,mod){var name=this.formatSkin(skin),info=this.moduleInfo,sinf=this.skin,ext=info[mod]&&info[mod].ext;if(!info[name]){this.addModule({"name":name,"type":"css","path":sinf.base+skin+"/"+sinf.path,"after":sinf.after,"rollup":sinf.rollup,"ext":ext});}if(mod){name=this.formatSkin(skin,mod);if(!info[name]){var mdef=info[mod],pkg=mdef.pkg||mod;this.addModule({"name":name,"type":"css","after":sinf.after,"path":pkg+"/"+sinf.base+skin+"/"+mod+".css","ext":ext});}}return name;},getRequires:function(mod){if(!mod){return[];}if(!this.dirty&&mod.expanded){return mod.expanded;}mod.requires=mod.requires||[];var i,d=[],r=mod.requires,o=mod.optional,info=this.moduleInfo,m;for(i=0;i<r.length;i=i+1){d.push(r[i]);m=info[r[i]];YUI.ArrayUtil.appendArray(d,this.getRequires(m));}if(o&&this.loadOptional){for(i=0;i<o.length;i=i+1){d.push(o[i]);YUI.ArrayUtil.appendArray(d,this.getRequires(info[o[i]]));}}mod.expanded=YUI.ArrayUtil.uniq(d);return mod.expanded;},getProvides:function(name,notMe){var addMe=!(notMe),ckey=(addMe)?PROV:SUPER,m=this.moduleInfo[name],o={};if(!m){return o;}if(m[ckey]){return m[ckey];}var s=m.supersedes,done={},me=this;var add=function(mm){if(!done[mm]){done[mm]=true;lang.augmentObject(o,me.getProvides(mm));}};if(s){for(var i=0;i<s.length;i=i+1){add(s[i]);}}m[SUPER]=o;m[PROV]=lang.merge(o);m[PROV][name]=true;return m[ckey];},calculate:function(o){if(o||this.dirty){this._config(o);this._setup();this._explode();if(this.allowRollup){this._rollup();}this._reduce();this._sort();this.dirty=false;}},_setup:function(){var info=this.moduleInfo,name,i,j;for(name in info){if(lang.hasOwnProperty(info,name)){var m=info[name];if(m&&m.skinnable){var o=this.skin.overrides,smod;if(o&&o[name]){for(i=0;i<o[name].length;i=i+1){smod=this._addSkin(o[name][i],name);}}else{smod=this._addSkin(this.skin.defaultSkin,name);}m.requires.push(smod);}}}var l=lang.merge(this.inserted);if(!this._sandbox){l=lang.merge(l,env.modules);}if(this.ignore){YUI.ObjectUtil.appendArray(l,this.ignore);}if(this.force){for(i=0;i<this.force.length;i=i+1){if(this.force[i]in l){delete l[this.force[i]];}}}for(j in l){if(lang.hasOwnProperty(l,j)){lang.augmentObject(l,this.getProvides(j));}}this.loaded=l;},_explode:function(){var r=this.required,i,mod;for(i in r){if(lang.hasOwnProperty(r,i)){mod=this.moduleInfo[i];if(mod){var req=this.getRequires(mod);if(req){YUI.ObjectUtil.appendArray(r,req);}}}}},_skin:function(){},formatSkin:function(skin,mod){var s=this.SKIN_PREFIX+skin;if(mod){s=s+"-"+mod;}return s;},parseSkin:function(mod){if(mod.indexOf(this.SKIN_PREFIX)===0){var a=mod.split("-");return{skin:a[1],module:a[2]};}return null;},_rollup:function(){var i,j,m,s,rollups={},r=this.required,roll,info=this.moduleInfo;if(this.dirty||!this.rollups){for(i in info){if(lang.hasOwnProperty(info,i)){m=info[i];if(m&&m.rollup){rollups[i]=m;}}}this.rollups=rollups;}for(;;){var rolled=false;for(i in rollups){if(!r[i]&&!this.loaded[i]){m=info[i];s=m.supersedes;roll=false;if(!m.rollup){continue;}var skin=(m.ext)?false:this.parseSkin(i),c=0;if(skin){for(j in r){if(lang.hasOwnProperty(r,j)){if(i!==j&&this.parseSkin(j)){c++;roll=(c>=m.rollup);if(roll){break;}}}}}else{for(j=0;j<s.length;j=j+1){if(this.loaded[s[j]]&&(!YUI.dupsAllowed[s[j]])){roll=false;break;}else{if(r[s[j]]){c++;roll=(c>=m.rollup);if(roll){break;}}}}}if(roll){r[i]=true;rolled=true;this.getRequires(m);}}}if(!rolled){break;}}},_reduce:function(){var i,j,s,m,r=this.required;for(i in r){if(i in this.loaded){delete r[i];}else{var skinDef=this.parseSkin(i);if(skinDef){if(!skinDef.module){var skin_pre=this.SKIN_PREFIX+skinDef.skin;for(j in r){if(lang.hasOwnProperty(r,j)){m=this.moduleInfo[j];var ext=m&&m.ext;if(!ext&&j!==i&&j.indexOf(skin_pre)>-1){delete r[j];}}}}}else{m=this.moduleInfo[i];s=m&&m.supersedes;if(s){for(j=0;j<s.length;j=j+1){if(s[j]in r){delete r[s[j]];}}}}}}},_onFailure:function(msg){YAHOO.log("Failure","info","loader");var f=this.onFailure;if(f){f.call(this.scope,{msg:"failure: "+msg,data:this.data,success:false});
}},_onTimeout:function(){YAHOO.log("Timeout","info","loader");var f=this.onTimeout;if(f){f.call(this.scope,{msg:"timeout",data:this.data,success:false});}},_sort:function(){var s=[],info=this.moduleInfo,loaded=this.loaded,checkOptional=!this.loadOptional,me=this;var requires=function(aa,bb){var mm=info[aa];if(loaded[bb]||!mm){return false;}var ii,rr=mm.expanded,after=mm.after,other=info[bb],optional=mm.optional;if(rr&&YUI.ArrayUtil.indexOf(rr,bb)>-1){return true;}if(after&&YUI.ArrayUtil.indexOf(after,bb)>-1){return true;}if(checkOptional&&optional&&YUI.ArrayUtil.indexOf(optional,bb)>-1){return true;}var ss=info[bb]&&info[bb].supersedes;if(ss){for(ii=0;ii<ss.length;ii=ii+1){if(requires(aa,ss[ii])){return true;}}}if(mm.ext&&mm.type=="css"&&!other.ext&&other.type=="css"){return true;}return false;};for(var i in this.required){if(lang.hasOwnProperty(this.required,i)){s.push(i);}}var p=0;for(;;){var l=s.length,a,b,j,k,moved=false;for(j=p;j<l;j=j+1){a=s[j];for(k=j+1;k<l;k=k+1){if(requires(a,s[k])){b=s.splice(k,1);s.splice(j,0,b[0]);moved=true;break;}}if(moved){break;}else{p=p+1;}}if(!moved){break;}}this.sorted=s;},toString:function(){var o={type:"YUILoader",base:this.base,filter:this.filter,required:this.required,loaded:this.loaded,inserted:this.inserted};lang.dump(o,1);},_combine:function(){this._combining=[];var self=this,s=this.sorted,len=s.length,js=this.comboBase,css=this.comboBase,target,startLen=js.length,i,m,type=this.loadType;YAHOO.log("type "+type);for(i=0;i<len;i=i+1){m=this.moduleInfo[s[i]];if(m&&!m.ext&&(!type||type===m.type)){target=this.root+m.path;target+="&";if(m.type=="js"){js+=target;}else{css+=target;}this._combining.push(s[i]);}}if(this._combining.length){YAHOO.log("Attempting to combine: "+this._combining,"info","loader");var callback=function(o){var c=this._combining,len=c.length,i,m;for(i=0;i<len;i=i+1){this.inserted[c[i]]=true;}this.loadNext(o.data);},loadScript=function(){if(js.length>startLen){YAHOO.util.Get.script(self._filter(js),{data:self._loading,onSuccess:callback,onFailure:self._onFailure,onTimeout:self._onTimeout,insertBefore:self.insertBefore,charset:self.charset,timeout:self.timeout,scope:self});}};if(css.length>startLen){YAHOO.util.Get.css(this._filter(css),{data:this._loading,onSuccess:loadScript,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,scope:self});}else{loadScript();}return;}else{this.loadNext(this._loading);}},insert:function(o,type){this.calculate(o);this._loading=true;this.loadType=type;if(this.combine){return this._combine();}if(!type){var self=this;this._internalCallback=function(){self._internalCallback=null;self.insert(null,"js");};this.insert(null,"css");return;}this.loadNext();},sandbox:function(o,type){this._config(o);if(!this.onSuccess){throw new Error("You must supply an onSuccess handler for your sandbox");}this._sandbox=true;var self=this;if(!type||type!=="js"){this._internalCallback=function(){self._internalCallback=null;self.sandbox(null,"js");};this.insert(null,"css");return;}if(!util.Connect){var ld=new YAHOO.util.YUILoader();ld.insert({base:this.base,filter:this.filter,require:"connection",insertBefore:this.insertBefore,charset:this.charset,onSuccess:function(){this.sandbox(null,"js");},scope:this},"js");return;}this._scriptText=[];this._loadCount=0;this._stopCount=this.sorted.length;this._xhr=[];this.calculate();var s=this.sorted,l=s.length,i,m,url;for(i=0;i<l;i=i+1){m=this.moduleInfo[s[i]];if(!m){this._onFailure("undefined module "+m);for(var j=0;j<this._xhr.length;j=j+1){this._xhr[j].abort();}return;}if(m.type!=="js"){this._loadCount++;continue;}url=m.fullpath;url=(url)?this._filter(url):this._url(m.path);var xhrData={success:function(o){var idx=o.argument[0],name=o.argument[2];this._scriptText[idx]=o.responseText;if(this.onProgress){this.onProgress.call(this.scope,{name:name,scriptText:o.responseText,xhrResponse:o,data:this.data});}this._loadCount++;if(this._loadCount>=this._stopCount){var v=this.varName||"YAHOO";var t="(function() {\n";var b="\nreturn "+v+";\n})();";var ref=eval(t+this._scriptText.join("\n")+b);this._pushEvents(ref);if(ref){this.onSuccess.call(this.scope,{reference:ref,data:this.data});}else{this._onFailure.call(this.varName+" reference failure");}}},failure:function(o){this.onFailure.call(this.scope,{msg:"XHR failure",xhrResponse:o,data:this.data});},scope:this,argument:[i,url,s[i]]};this._xhr.push(util.Connect.asyncRequest("GET",url,xhrData));}},loadNext:function(mname){if(!this._loading){return;}if(mname){if(mname!==this._loading){return;}this.inserted[mname]=true;if(this.onProgress){this.onProgress.call(this.scope,{name:mname,data:this.data});}}var s=this.sorted,len=s.length,i,m;for(i=0;i<len;i=i+1){if(s[i]in this.inserted){continue;}if(s[i]===this._loading){return;}m=this.moduleInfo[s[i]];if(!m){this.onFailure.call(this.scope,{msg:"undefined module "+m,data:this.data});return;}if(!this.loadType||this.loadType===m.type){this._loading=s[i];var fn=(m.type==="css")?util.Get.css:util.Get.script,url=m.fullpath,self=this,c=function(o){self.loadNext(o.data);};url=(url)?this._filter(url):this._url(m.path);if(env.ua.webkit&&env.ua.webkit<420&&m.type==="js"&&!m.varName){c=null;this._useYahooListener=true;}fn(url,{data:s[i],onSuccess:c,onFailure:this._onFailure,onTimeout:this._onTimeout,insertBefore:this.insertBefore,charset:this.charset,timeout:this.timeout,varName:m.varName,scope:self});return;}}this._loading=null;if(this._internalCallback){var f=this._internalCallback;this._internalCallback=null;f.call(this);}else{if(this.onSuccess){this._pushEvents();this.onSuccess.call(this.scope,{data:this.data});}}},_pushEvents:function(ref){var r=ref||YAHOO;if(r.util&&r.util.Event){r.util.Event._load();}},_filter:function(str){var f=this.filter;return(f)?str.replace(new RegExp(f.searchExp,"g"),f.replaceStr):str;},_url:function(path){return this._filter((this.base||"")+path);}};})();YAHOO.register("yuiloader",YAHOO.util.YUILoader,{version:"2.8.0r4",build:"2449"});
(function(){YAHOO.env._id_counter=YAHOO.env._id_counter||0;var E=YAHOO.util,L=YAHOO.lang,m=YAHOO.env.ua,A=YAHOO.lang.trim,d={},h={},N=/^t(?:able|d|h)$/i,X=/color$/i,K=window.document,W=K.documentElement,e="ownerDocument",n="defaultView",v="documentElement",t="compatMode",b="offsetLeft",P="offsetTop",u="offsetParent",Z="parentNode",l="nodeType",C="tagName",O="scrollLeft",i="scrollTop",Q="getBoundingClientRect",w="getComputedStyle",a="currentStyle",M="CSS1Compat",c="BackCompat",g="class",F="className",J="",B=" ",s="(?:^|\\s)",k="(?= |$)",U="g",p="position",f="fixed",V="relative",j="left",o="top",r="medium",q="borderLeftWidth",R="borderTopWidth",D=m.opera,I=m.webkit,H=m.gecko,T=m.ie;E.Dom={CUSTOM_ATTRIBUTES:(!W.hasAttribute)?{"for":"htmlFor","class":F}:{"htmlFor":"for","className":g},DOT_ATTRIBUTES:{},get:function(z){var AB,x,AA,y,Y,G;if(z){if(z[l]||z.item){return z;}if(typeof z==="string"){AB=z;z=K.getElementById(z);G=(z)?z.attributes:null;if(z&&G&&G.id&&G.id.value===AB){return z;}else{if(z&&K.all){z=null;x=K.all[AB];for(y=0,Y=x.length;y<Y;++y){if(x[y].id===AB){return x[y];}}}}return z;}if(YAHOO.util.Element&&z instanceof YAHOO.util.Element){z=z.get("element");}if("length"in z){AA=[];for(y=0,Y=z.length;y<Y;++y){AA[AA.length]=E.Dom.get(z[y]);}return AA;}return z;}return null;},getComputedStyle:function(G,Y){if(window[w]){return G[e][n][w](G,null)[Y];}else{if(G[a]){return E.Dom.IE_ComputedStyle.get(G,Y);}}},getStyle:function(G,Y){return E.Dom.batch(G,E.Dom._getStyle,Y);},_getStyle:function(){if(window[w]){return function(G,y){y=(y==="float")?y="cssFloat":E.Dom._toCamel(y);var x=G.style[y],Y;if(!x){Y=G[e][n][w](G,null);if(Y){x=Y[y];}}return x;};}else{if(W[a]){return function(G,y){var x;switch(y){case"opacity":x=100;try{x=G.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(z){try{x=G.filters("alpha").opacity;}catch(Y){}}return x/100;case"float":y="styleFloat";default:y=E.Dom._toCamel(y);x=G[a]?G[a][y]:null;return(G.style[y]||x);}};}}}(),setStyle:function(G,Y,x){E.Dom.batch(G,E.Dom._setStyle,{prop:Y,val:x});},_setStyle:function(){if(T){return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){switch(x){case"opacity":if(L.isString(Y.style.filter)){Y.style.filter="alpha(opacity="+y*100+")";if(!Y[a]||!Y[a].hasLayout){Y.style.zoom=1;}}break;case"float":x="styleFloat";default:Y.style[x]=y;}}else{}};}else{return function(Y,G){var x=E.Dom._toCamel(G.prop),y=G.val;if(Y){if(x=="float"){x="cssFloat";}Y.style[x]=y;}else{}};}}(),getXY:function(G){return E.Dom.batch(G,E.Dom._getXY);},_canPosition:function(G){return(E.Dom._getStyle(G,"display")!=="none"&&E.Dom._inDoc(G));},_getXY:function(){if(K[v][Q]){return function(y){var z,Y,AA,AF,AE,AD,AC,G,x,AB=Math.floor,AG=false;if(E.Dom._canPosition(y)){AA=y[Q]();AF=y[e];z=E.Dom.getDocumentScrollLeft(AF);Y=E.Dom.getDocumentScrollTop(AF);AG=[AB(AA[j]),AB(AA[o])];if(T&&m.ie<8){AE=2;AD=2;AC=AF[t];if(m.ie===6){if(AC!==c){AE=0;AD=0;}}if((AC===c)){G=S(AF[v],q);x=S(AF[v],R);if(G!==r){AE=parseInt(G,10);}if(x!==r){AD=parseInt(x,10);}}AG[0]-=AE;AG[1]-=AD;}if((Y||z)){AG[0]+=z;AG[1]+=Y;}AG[0]=AB(AG[0]);AG[1]=AB(AG[1]);}else{}return AG;};}else{return function(y){var x,Y,AA,AB,AC,z=false,G=y;if(E.Dom._canPosition(y)){z=[y[b],y[P]];x=E.Dom.getDocumentScrollLeft(y[e]);Y=E.Dom.getDocumentScrollTop(y[e]);AC=((H||m.webkit>519)?true:false);while((G=G[u])){z[0]+=G[b];z[1]+=G[P];if(AC){z=E.Dom._calcBorders(G,z);}}if(E.Dom._getStyle(y,p)!==f){G=y;while((G=G[Z])&&G[C]){AA=G[i];AB=G[O];if(H&&(E.Dom._getStyle(G,"overflow")!=="visible")){z=E.Dom._calcBorders(G,z);}if(AA||AB){z[0]-=AB;z[1]-=AA;}}z[0]+=x;z[1]+=Y;}else{if(D){z[0]-=x;z[1]-=Y;}else{if(I||H){z[0]+=x;z[1]+=Y;}}}z[0]=Math.floor(z[0]);z[1]=Math.floor(z[1]);}else{}return z;};}}(),getX:function(G){var Y=function(x){return E.Dom.getXY(x)[0];};return E.Dom.batch(G,Y,E.Dom,true);},getY:function(G){var Y=function(x){return E.Dom.getXY(x)[1];};return E.Dom.batch(G,Y,E.Dom,true);},setXY:function(G,x,Y){E.Dom.batch(G,E.Dom._setXY,{pos:x,noRetry:Y});},_setXY:function(G,z){var AA=E.Dom._getStyle(G,p),y=E.Dom.setStyle,AD=z.pos,Y=z.noRetry,AB=[parseInt(E.Dom.getComputedStyle(G,j),10),parseInt(E.Dom.getComputedStyle(G,o),10)],AC,x;if(AA=="static"){AA=V;y(G,p,AA);}AC=E.Dom._getXY(G);if(!AD||AC===false){return false;}if(isNaN(AB[0])){AB[0]=(AA==V)?0:G[b];}if(isNaN(AB[1])){AB[1]=(AA==V)?0:G[P];}if(AD[0]!==null){y(G,j,AD[0]-AC[0]+AB[0]+"px");}if(AD[1]!==null){y(G,o,AD[1]-AC[1]+AB[1]+"px");}if(!Y){x=E.Dom._getXY(G);if((AD[0]!==null&&x[0]!=AD[0])||(AD[1]!==null&&x[1]!=AD[1])){E.Dom._setXY(G,{pos:AD,noRetry:true});}}},setX:function(Y,G){E.Dom.setXY(Y,[G,null]);},setY:function(G,Y){E.Dom.setXY(G,[null,Y]);},getRegion:function(G){var Y=function(x){var y=false;if(E.Dom._canPosition(x)){y=E.Region.getRegion(x);}else{}return y;};return E.Dom.batch(G,Y,E.Dom,true);},getClientWidth:function(){return E.Dom.getViewportWidth();},getClientHeight:function(){return E.Dom.getViewportHeight();},getElementsByClassName:function(AB,AF,AC,AE,x,AD){AF=AF||"*";AC=(AC)?E.Dom.get(AC):null||K;if(!AC){return[];}var Y=[],G=AC.getElementsByTagName(AF),z=E.Dom.hasClass;for(var y=0,AA=G.length;y<AA;++y){if(z(G[y],AB)){Y[Y.length]=G[y];}}if(AE){E.Dom.batch(Y,AE,x,AD);}return Y;},hasClass:function(Y,G){return E.Dom.batch(Y,E.Dom._hasClass,G);},_hasClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom._getAttribute(x,F)||J;if(Y.exec){G=Y.test(y);}else{G=Y&&(B+y+B).indexOf(B+Y+B)>-1;}}else{}return G;},addClass:function(Y,G){return E.Dom.batch(Y,E.Dom._addClass,G);},_addClass:function(x,Y){var G=false,y;if(x&&Y){y=E.Dom._getAttribute(x,F)||J;if(!E.Dom._hasClass(x,Y)){E.Dom.setAttribute(x,F,A(y+B+Y));G=true;}}else{}return G;},removeClass:function(Y,G){return E.Dom.batch(Y,E.Dom._removeClass,G);},_removeClass:function(y,x){var Y=false,AA,z,G;if(y&&x){AA=E.Dom._getAttribute(y,F)||J;E.Dom.setAttribute(y,F,AA.replace(E.Dom._getClassRegex(x),J));z=E.Dom._getAttribute(y,F);if(AA!==z){E.Dom.setAttribute(y,F,A(z));Y=true;if(E.Dom._getAttribute(y,F)===""){G=(y.hasAttribute&&y.hasAttribute(g))?g:F;
y.removeAttribute(G);}}}else{}return Y;},replaceClass:function(x,Y,G){return E.Dom.batch(x,E.Dom._replaceClass,{from:Y,to:G});},_replaceClass:function(y,x){var Y,AB,AA,G=false,z;if(y&&x){AB=x.from;AA=x.to;if(!AA){G=false;}else{if(!AB){G=E.Dom._addClass(y,x.to);}else{if(AB!==AA){z=E.Dom._getAttribute(y,F)||J;Y=(B+z.replace(E.Dom._getClassRegex(AB),B+AA)).split(E.Dom._getClassRegex(AA));Y.splice(1,0,B+AA);E.Dom.setAttribute(y,F,A(Y.join(J)));G=true;}}}}else{}return G;},generateId:function(G,x){x=x||"yui-gen";var Y=function(y){if(y&&y.id){return y.id;}var z=x+YAHOO.env._id_counter++;if(y){if(y[e]&&y[e].getElementById(z)){return E.Dom.generateId(y,z+x);}y.id=z;}return z;};return E.Dom.batch(G,Y,E.Dom,true)||Y.apply(E.Dom,arguments);},isAncestor:function(Y,x){Y=E.Dom.get(Y);x=E.Dom.get(x);var G=false;if((Y&&x)&&(Y[l]&&x[l])){if(Y.contains&&Y!==x){G=Y.contains(x);}else{if(Y.compareDocumentPosition){G=!!(Y.compareDocumentPosition(x)&16);}}}else{}return G;},inDocument:function(G,Y){return E.Dom._inDoc(E.Dom.get(G),Y);},_inDoc:function(Y,x){var G=false;if(Y&&Y[C]){x=x||Y[e];G=E.Dom.isAncestor(x[v],Y);}else{}return G;},getElementsBy:function(Y,AF,AB,AD,y,AC,AE){AF=AF||"*";AB=(AB)?E.Dom.get(AB):null||K;if(!AB){return[];}var x=[],G=AB.getElementsByTagName(AF);for(var z=0,AA=G.length;z<AA;++z){if(Y(G[z])){if(AE){x=G[z];break;}else{x[x.length]=G[z];}}}if(AD){E.Dom.batch(x,AD,y,AC);}return x;},getElementBy:function(x,G,Y){return E.Dom.getElementsBy(x,G,Y,null,null,null,true);},batch:function(x,AB,AA,z){var y=[],Y=(z)?AA:window;x=(x&&(x[C]||x.item))?x:E.Dom.get(x);if(x&&AB){if(x[C]||x.length===undefined){return AB.call(Y,x,AA);}for(var G=0;G<x.length;++G){y[y.length]=AB.call(Y,x[G],AA);}}else{return false;}return y;},getDocumentHeight:function(){var Y=(K[t]!=M||I)?K.body.scrollHeight:W.scrollHeight,G=Math.max(Y,E.Dom.getViewportHeight());return G;},getDocumentWidth:function(){var Y=(K[t]!=M||I)?K.body.scrollWidth:W.scrollWidth,G=Math.max(Y,E.Dom.getViewportWidth());return G;},getViewportHeight:function(){var G=self.innerHeight,Y=K[t];if((Y||T)&&!D){G=(Y==M)?W.clientHeight:K.body.clientHeight;}return G;},getViewportWidth:function(){var G=self.innerWidth,Y=K[t];if(Y||T){G=(Y==M)?W.clientWidth:K.body.clientWidth;}return G;},getAncestorBy:function(G,Y){while((G=G[Z])){if(E.Dom._testElement(G,Y)){return G;}}return null;},getAncestorByClassName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return E.Dom.hasClass(y,G);};return E.Dom.getAncestorBy(Y,x);},getAncestorByTagName:function(Y,G){Y=E.Dom.get(Y);if(!Y){return null;}var x=function(y){return y[C]&&y[C].toUpperCase()==G.toUpperCase();};return E.Dom.getAncestorBy(Y,x);},getPreviousSiblingBy:function(G,Y){while(G){G=G.previousSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getPreviousSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getPreviousSiblingBy(G);},getNextSiblingBy:function(G,Y){while(G){G=G.nextSibling;if(E.Dom._testElement(G,Y)){return G;}}return null;},getNextSibling:function(G){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getNextSiblingBy(G);},getFirstChildBy:function(G,x){var Y=(E.Dom._testElement(G.firstChild,x))?G.firstChild:null;return Y||E.Dom.getNextSiblingBy(G.firstChild,x);},getFirstChild:function(G,Y){G=E.Dom.get(G);if(!G){return null;}return E.Dom.getFirstChildBy(G);},getLastChildBy:function(G,x){if(!G){return null;}var Y=(E.Dom._testElement(G.lastChild,x))?G.lastChild:null;return Y||E.Dom.getPreviousSiblingBy(G.lastChild,x);},getLastChild:function(G){G=E.Dom.get(G);return E.Dom.getLastChildBy(G);},getChildrenBy:function(Y,y){var x=E.Dom.getFirstChildBy(Y,y),G=x?[x]:[];E.Dom.getNextSiblingBy(x,function(z){if(!y||y(z)){G[G.length]=z;}return false;});return G;},getChildren:function(G){G=E.Dom.get(G);if(!G){}return E.Dom.getChildrenBy(G);},getDocumentScrollLeft:function(G){G=G||K;return Math.max(G[v].scrollLeft,G.body.scrollLeft);},getDocumentScrollTop:function(G){G=G||K;return Math.max(G[v].scrollTop,G.body.scrollTop);},insertBefore:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}return G[Z].insertBefore(Y,G);},insertAfter:function(Y,G){Y=E.Dom.get(Y);G=E.Dom.get(G);if(!Y||!G||!G[Z]){return null;}if(G.nextSibling){return G[Z].insertBefore(Y,G.nextSibling);}else{return G[Z].appendChild(Y);}},getClientRegion:function(){var x=E.Dom.getDocumentScrollTop(),Y=E.Dom.getDocumentScrollLeft(),y=E.Dom.getViewportWidth()+Y,G=E.Dom.getViewportHeight()+x;return new E.Region(x,y,G,Y);},setAttribute:function(Y,G,x){E.Dom.batch(Y,E.Dom._setAttribute,{attr:G,val:x});},_setAttribute:function(x,Y){var G=E.Dom._toCamel(Y.attr),y=Y.val;if(x&&x.setAttribute){if(E.Dom.DOT_ATTRIBUTES[G]){x[G]=y;}else{G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;x.setAttribute(G,y);}}else{}},getAttribute:function(Y,G){return E.Dom.batch(Y,E.Dom._getAttribute,G);},_getAttribute:function(Y,G){var x;G=E.Dom.CUSTOM_ATTRIBUTES[G]||G;if(Y&&Y.getAttribute){x=Y.getAttribute(G,2);}else{}return x;},_toCamel:function(Y){var x=d;function G(y,z){return z.toUpperCase();}return x[Y]||(x[Y]=Y.indexOf("-")===-1?Y:Y.replace(/-([a-z])/gi,G));},_getClassRegex:function(Y){var G;if(Y!==undefined){if(Y.exec){G=Y;}else{G=h[Y];if(!G){Y=Y.replace(E.Dom._patterns.CLASS_RE_TOKENS,"\\$1");G=h[Y]=new RegExp(s+Y+k,U);}}}return G;},_patterns:{ROOT_TAG:/^body|html$/i,CLASS_RE_TOKENS:/([\.\(\)\^\$\*\+\?\|\[\]\{\}\\])/g},_testElement:function(G,Y){return G&&G[l]==1&&(!Y||Y(G));},_calcBorders:function(x,y){var Y=parseInt(E.Dom[w](x,R),10)||0,G=parseInt(E.Dom[w](x,q),10)||0;if(H){if(N.test(x[C])){Y=0;G=0;}}y[0]+=G;y[1]+=Y;return y;}};var S=E.Dom[w];if(m.opera){E.Dom[w]=function(Y,G){var x=S(Y,G);if(X.test(G)){x=E.Dom.Color.toRGB(x);}return x;};}if(m.webkit){E.Dom[w]=function(Y,G){var x=S(Y,G);if(x==="rgba(0, 0, 0, 0)"){x="transparent";}return x;};}if(m.ie&&m.ie>=8&&K.documentElement.hasAttribute){E.Dom.DOT_ATTRIBUTES.type=true;}})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this.y=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this.x=B;this[0]=B;
this.width=this.right-this.left;this.height=this.bottom-this.top;};YAHOO.util.Region.prototype.contains=function(A){return(A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top),D=Math.min(this.right,E.right),A=Math.min(this.bottom,E.bottom),B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B);}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top),D=Math.max(this.right,E.right),A=Math.max(this.bottom,E.bottom),B=Math.min(this.left,E.left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {"+"top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+", height: "+this.height+", width: "+this.width+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D),C=F[1],E=F[0]+D.offsetWidth,A=F[1]+D.offsetHeight,B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}YAHOO.util.Point.superclass.constructor.call(this,B,A,B,A);};YAHOO.extend(YAHOO.util.Point,YAHOO.util.Region);(function(){var B=YAHOO.util,A="clientTop",F="clientLeft",J="parentNode",K="right",W="hasLayout",I="px",U="opacity",L="auto",D="borderLeftWidth",G="borderTopWidth",P="borderRightWidth",V="borderBottomWidth",S="visible",Q="transparent",N="height",E="width",H="style",T="currentStyle",R=/^width|height$/,O=/^(\d[.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz|%){1}?/i,M={get:function(X,Z){var Y="",a=X[T][Z];if(Z===U){Y=B.Dom.getStyle(X,U);}else{if(!a||(a.indexOf&&a.indexOf(I)>-1)){Y=a;}else{if(B.Dom.IE_COMPUTED[Z]){Y=B.Dom.IE_COMPUTED[Z](X,Z);}else{if(O.test(a)){Y=B.Dom.IE.ComputedStyle.getPixel(X,Z);}else{Y=a;}}}}return Y;},getOffset:function(Z,e){var b=Z[T][e],X=e.charAt(0).toUpperCase()+e.substr(1),c="offset"+X,Y="pixel"+X,a="",d;if(b==L){d=Z[c];if(d===undefined){a=0;}a=d;if(R.test(e)){Z[H][e]=d;if(Z[c]>d){a=d-(Z[c]-d);}Z[H][e]=L;}}else{if(!Z[H][Y]&&!Z[H][e]){Z[H][e]=b;}a=Z[H][Y];}return a+I;},getBorderWidth:function(X,Z){var Y=null;if(!X[T][W]){X[H].zoom=1;}switch(Z){case G:Y=X[A];break;case V:Y=X.offsetHeight-X.clientHeight-X[A];break;case D:Y=X[F];break;case P:Y=X.offsetWidth-X.clientWidth-X[F];break;}return Y+I;},getPixel:function(Y,X){var a=null,b=Y[T][K],Z=Y[T][X];Y[H][K]=Z;a=Y[H].pixelRight;Y[H][K]=b;return a+I;},getMargin:function(Y,X){var Z;if(Y[T][X]==L){Z=0+I;}else{Z=B.Dom.IE.ComputedStyle.getPixel(Y,X);}return Z;},getVisibility:function(Y,X){var Z;while((Z=Y[T])&&Z[X]=="inherit"){Y=Y[J];}return(Z)?Z[X]:S;},getColor:function(Y,X){return B.Dom.Color.toRGB(Y[T][X])||Q;},getBorderColor:function(Y,X){var Z=Y[T],a=Z[X]||Z.color;return B.Dom.Color.toRGB(B.Dom.Color.toHex(a));}},C={};C.top=C.right=C.bottom=C.left=C[E]=C[N]=M.getOffset;C.color=M.getColor;C[G]=C[P]=C[V]=C[D]=M.getBorderWidth;C.marginTop=C.marginRight=C.marginBottom=C.marginLeft=M.getMargin;C.visibility=M.getVisibility;C.borderColor=C.borderTopColor=C.borderRightColor=C.borderBottomColor=C.borderLeftColor=M.getBorderColor;B.Dom.IE_COMPUTED=C;B.Dom.IE_ComputedStyle=M;})();(function(){var C="toString",A=parseInt,B=RegExp,D=YAHOO.util;D.Dom.Color={KEYWORDS:{black:"000",silver:"c0c0c0",gray:"808080",white:"fff",maroon:"800000",red:"f00",purple:"800080",fuchsia:"f0f",green:"008000",lime:"0f0",olive:"808000",yellow:"ff0",navy:"000080",blue:"00f",teal:"008080",aqua:"0ff"},re_RGB:/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i,re_hex:/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i,re_hex3:/([0-9A-F])/gi,toRGB:function(E){if(!D.Dom.Color.re_RGB.test(E)){E=D.Dom.Color.toHex(E);}if(D.Dom.Color.re_hex.exec(E)){E="rgb("+[A(B.$1,16),A(B.$2,16),A(B.$3,16)].join(", ")+")";}return E;},toHex:function(H){H=D.Dom.Color.KEYWORDS[H]||H;if(D.Dom.Color.re_RGB.exec(H)){var G=(B.$1.length===1)?"0"+B.$1:Number(B.$1),F=(B.$2.length===1)?"0"+B.$2:Number(B.$2),E=(B.$3.length===1)?"0"+B.$3:Number(B.$3);H=[G[C](16),F[C](16),E[C](16)].join("");}if(H.length<6){H=H.replace(D.Dom.Color.re_hex3,"$1$1");}if(H!=="transparent"&&H.indexOf("#")<0){H="#"+H;}return H.toLowerCase();}};}());YAHOO.register("dom",YAHOO.util.Dom,{version:"2.8.0r4",build:"2449"});YAHOO.util.CustomEvent=function(D,C,B,A,E){this.type=D;this.scope=C||window;this.silent=B;this.fireOnce=E;this.fired=false;this.firedWith=null;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var F="_YUICEOnSubscribe";if(D!==F){this.subscribeEvent=new YAHOO.util.CustomEvent(F,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(B,C,D){if(!B){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(B,C,D);}var A=new YAHOO.util.Subscriber(B,C,D);if(this.fireOnce&&this.fired){this.notify(A,this.firedWith);}else{this.subscribers.push(A);}},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B<A;++B){var C=this.subscribers[B];if(C&&C.contains(D,F)){this._delete(B);E=true;}}return E;},fire:function(){this.lastError=null;var H=[],A=this.subscribers.length;var D=[].slice.call(arguments,0),C=true,F,B=false;if(this.fireOnce){if(this.fired){return true;}else{this.firedWith=D;}}this.fired=true;if(!A&&this.silent){return true;}if(!this.silent){}var E=this.subscribers.slice();for(F=0;F<A;++F){var G=E[F];if(!G){B=true;}else{C=this.notify(G,D);if(false===C){if(!this.silent){}break;}}}return(C!==false);},notify:function(F,C){var B,H=null,E=F.getScope(this.scope),A=YAHOO.util.Event.throwErrors;if(!this.silent){}if(this.signature==YAHOO.util.CustomEvent.FLAT){if(C.length>0){H=C[0];}try{B=F.fn.call(E,H,F.obj);}catch(G){this.lastError=G;if(A){throw G;}}}else{try{B=F.fn.call(E,this.type,C,F.obj);}catch(D){this.lastError=D;if(A){throw D;}}}return B;},unsubscribeAll:function(){var A=this.subscribers.length,B;for(B=A-1;B>-1;B--){this._delete(B);}this.subscribers=[];return A;},_delete:function(A){var B=this.subscribers[A];if(B){delete B.fn;delete B.obj;}this.subscribers.splice(A,1);},toString:function(){return"CustomEvent: "+"'"+this.type+"', "+"context: "+this.scope;}};YAHOO.util.Subscriber=function(A,B,C){this.fn=A;this.obj=YAHOO.lang.isUndefined(B)?null:B;this.overrideContext=C;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.overrideContext){if(this.overrideContext===true){return this.obj;}else{return this.overrideContext;}}return A;};YAHOO.util.Subscriber.prototype.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", overrideContext: "+(this.overrideContext||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var G=false,H=[],J=[],A=0,E=[],B=0,C={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9},D=YAHOO.env.ua.ie,F="focusin",I="focusout";return{POLL_RETRYS:500,POLL_INTERVAL:40,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,CAPTURE:7,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:D,_interval:null,_dri:null,_specialTypes:{focusin:(D?"focusin":"focus"),focusout:(D?"focusout":"blur")},DOMReady:false,throwErrors:false,startInterval:function(){if(!this._interval){this._interval=YAHOO.lang.later(this.POLL_INTERVAL,this,this._tryPreloadAttach,null,true);}},onAvailable:function(Q,M,O,P,N){var K=(YAHOO.lang.isString(Q))?[Q]:Q;for(var L=0;L<K.length;L=L+1){E.push({id:K[L],fn:M,obj:O,overrideContext:P,checkReady:N});}A=this.POLL_RETRYS;this.startInterval();},onContentReady:function(N,K,L,M){this.onAvailable(N,K,L,M,true);},onDOMReady:function(){this.DOMReadyEvent.subscribe.apply(this.DOMReadyEvent,arguments);},_addListener:function(M,K,V,P,T,Y){if(!V||!V.call){return false;}if(this._isValidCollection(M)){var W=true;for(var Q=0,S=M.length;Q<S;++Q){W=this.on(M[Q],K,V,P,T)&&W;}return W;}else{if(YAHOO.lang.isString(M)){var O=this.getEl(M);if(O){M=O;}else{this.onAvailable(M,function(){YAHOO.util.Event._addListener(M,K,V,P,T,Y);});return true;}}}if(!M){return false;}if("unload"==K&&P!==this){J[J.length]=[M,K,V,P,T];return true;}var L=M;if(T){if(T===true){L=P;}else{L=T;}}var N=function(Z){return V.call(L,YAHOO.util.Event.getEvent(Z,M),P);};var X=[M,K,V,N,L,P,T,Y];var R=H.length;H[R]=X;try{this._simpleAdd(M,K,N,Y);}catch(U){this.lastError=U;this.removeListener(M,K,V);return false;}return true;},_getType:function(K){return this._specialTypes[K]||K;},addListener:function(M,P,L,N,O){var K=((P==F||P==I)&&!YAHOO.env.ua.ie)?true:false;return this._addListener(M,this._getType(P),L,N,O,K);},addFocusListener:function(L,K,M,N){return this.on(L,F,K,M,N);},removeFocusListener:function(L,K){return this.removeListener(L,F,K);},addBlurListener:function(L,K,M,N){return this.on(L,I,K,M,N);},removeBlurListener:function(L,K){return this.removeListener(L,I,K);},removeListener:function(L,K,R){var M,P,U;K=this._getType(K);if(typeof L=="string"){L=this.getEl(L);}else{if(this._isValidCollection(L)){var S=true;for(M=L.length-1;M>-1;M--){S=(this.removeListener(L[M],K,R)&&S);}return S;}}if(!R||!R.call){return this.purgeElement(L,false,K);}if("unload"==K){for(M=J.length-1;M>-1;M--){U=J[M];if(U&&U[0]==L&&U[1]==K&&U[2]==R){J.splice(M,1);return true;}}return false;}var N=null;var O=arguments[3];if("undefined"===typeof O){O=this._getCacheIndex(H,L,K,R);}if(O>=0){N=H[O];}if(!L||!N){return false;}var T=N[this.CAPTURE]===true?true:false;try{this._simpleRemove(L,K,N[this.WFN],T);}catch(Q){this.lastError=Q;return false;}delete H[O][this.WFN];delete H[O][this.FN];H.splice(O,1);return true;},getTarget:function(M,L){var K=M.target||M.srcElement;return this.resolveTextNode(K);},resolveTextNode:function(L){try{if(L&&3==L.nodeType){return L.parentNode;}}catch(K){}return L;},getPageX:function(L){var K=L.pageX;if(!K&&0!==K){K=L.clientX||0;if(this.isIE){K+=this._getScrollLeft();}}return K;},getPageY:function(K){var L=K.pageY;if(!L&&0!==L){L=K.clientY||0;if(this.isIE){L+=this._getScrollTop();}}return L;},getXY:function(K){return[this.getPageX(K),this.getPageY(K)];},getRelatedTarget:function(L){var K=L.relatedTarget;if(!K){if(L.type=="mouseout"){K=L.toElement;
}else{if(L.type=="mouseover"){K=L.fromElement;}}}return this.resolveTextNode(K);},getTime:function(M){if(!M.time){var L=new Date().getTime();try{M.time=L;}catch(K){this.lastError=K;return L;}}return M.time;},stopEvent:function(K){this.stopPropagation(K);this.preventDefault(K);},stopPropagation:function(K){if(K.stopPropagation){K.stopPropagation();}else{K.cancelBubble=true;}},preventDefault:function(K){if(K.preventDefault){K.preventDefault();}else{K.returnValue=false;}},getEvent:function(M,K){var L=M||window.event;if(!L){var N=this.getEvent.caller;while(N){L=N.arguments[0];if(L&&Event==L.constructor){break;}N=N.caller;}}return L;},getCharCode:function(L){var K=L.keyCode||L.charCode||0;if(YAHOO.env.ua.webkit&&(K in C)){K=C[K];}return K;},_getCacheIndex:function(M,P,Q,O){for(var N=0,L=M.length;N<L;N=N+1){var K=M[N];if(K&&K[this.FN]==O&&K[this.EL]==P&&K[this.TYPE]==Q){return N;}}return-1;},generateId:function(K){var L=K.id;if(!L){L="yuievtautoid-"+B;++B;K.id=L;}return L;},_isValidCollection:function(L){try{return(L&&typeof L!=="string"&&L.length&&!L.tagName&&!L.alert&&typeof L[0]!=="undefined");}catch(K){return false;}},elCache:{},getEl:function(K){return(typeof K==="string")?document.getElementById(K):K;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",YAHOO,0,0,1),_load:function(L){if(!G){G=true;var K=YAHOO.util.Event;K._ready();K._tryPreloadAttach();}},_ready:function(L){var K=YAHOO.util.Event;if(!K.DOMReady){K.DOMReady=true;K.DOMReadyEvent.fire();K._simpleRemove(document,"DOMContentLoaded",K._ready);}},_tryPreloadAttach:function(){if(E.length===0){A=0;if(this._interval){this._interval.cancel();this._interval=null;}return;}if(this.locked){return;}if(this.isIE){if(!this.DOMReady){this.startInterval();return;}}this.locked=true;var Q=!G;if(!Q){Q=(A>0&&E.length>0);}var P=[];var R=function(T,U){var S=T;if(U.overrideContext){if(U.overrideContext===true){S=U.obj;}else{S=U.overrideContext;}}U.fn.call(S,U.obj);};var L,K,O,N,M=[];for(L=0,K=E.length;L<K;L=L+1){O=E[L];if(O){N=this.getEl(O.id);if(N){if(O.checkReady){if(G||N.nextSibling||!Q){M.push(O);E[L]=null;}}else{R(N,O);E[L]=null;}}else{P.push(O);}}}for(L=0,K=M.length;L<K;L=L+1){O=M[L];R(this.getEl(O.id),O);}A--;if(Q){for(L=E.length-1;L>-1;L--){O=E[L];if(!O||!O.id){E.splice(L,1);}}this.startInterval();}else{if(this._interval){this._interval.cancel();this._interval=null;}}this.locked=false;},purgeElement:function(O,P,R){var M=(YAHOO.lang.isString(O))?this.getEl(O):O;var Q=this.getListeners(M,R),N,K;if(Q){for(N=Q.length-1;N>-1;N--){var L=Q[N];this.removeListener(M,L.type,L.fn);}}if(P&&M&&M.childNodes){for(N=0,K=M.childNodes.length;N<K;++N){this.purgeElement(M.childNodes[N],P,R);}}},getListeners:function(M,K){var P=[],L;if(!K){L=[H,J];}else{if(K==="unload"){L=[J];}else{K=this._getType(K);L=[H];}}var R=(YAHOO.lang.isString(M))?this.getEl(M):M;for(var O=0;O<L.length;O=O+1){var T=L[O];if(T){for(var Q=0,S=T.length;Q<S;++Q){var N=T[Q];if(N&&N[this.EL]===R&&(!K||K===N[this.TYPE])){P.push({type:N[this.TYPE],fn:N[this.FN],obj:N[this.OBJ],adjust:N[this.OVERRIDE],scope:N[this.ADJ_SCOPE],index:Q});}}}}return(P.length)?P:null;},_unload:function(R){var L=YAHOO.util.Event,O,N,M,Q,P,S=J.slice(),K;for(O=0,Q=J.length;O<Q;++O){M=S[O];if(M){K=window;if(M[L.ADJ_SCOPE]){if(M[L.ADJ_SCOPE]===true){K=M[L.UNLOAD_OBJ];}else{K=M[L.ADJ_SCOPE];}}M[L.FN].call(K,L.getEvent(R,M[L.EL]),M[L.UNLOAD_OBJ]);S[O]=null;}}M=null;K=null;J=null;if(H){for(N=H.length-1;N>-1;N--){M=H[N];if(M){L.removeListener(M[L.EL],M[L.TYPE],M[L.FN],N);}}M=null;}L._simpleRemove(window,"unload",L._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var K=document.documentElement,L=document.body;if(K&&(K.scrollTop||K.scrollLeft)){return[K.scrollTop,K.scrollLeft];}else{if(L){return[L.scrollTop,L.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(M,N,L,K){M.addEventListener(N,L,(K));};}else{if(window.attachEvent){return function(M,N,L,K){M.attachEvent("on"+N,L);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(M,N,L,K){M.removeEventListener(N,L,(K));};}else{if(window.detachEvent){return function(L,M,K){L.detachEvent("on"+M,K);};}else{return function(){};}}}()};}();(function(){var EU=YAHOO.util.Event;EU.on=EU.addListener;EU.onFocus=EU.addFocusListener;EU.onBlur=EU.addBlurListener;
if(EU.isIE){if(self!==self.top){document.onreadystatechange=function(){if(document.readyState=="complete"){document.onreadystatechange=null;EU._ready();}};}else{YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);var n=document.createElement("p");EU._dri=setInterval(function(){try{n.doScroll("left");clearInterval(EU._dri);EU._dri=null;EU._ready();n=null;}catch(ex){}},EU.POLL_INTERVAL);}}else{if(EU.webkit&&EU.webkit<525){EU._dri=setInterval(function(){var rs=document.readyState;if("loaded"==rs||"complete"==rs){clearInterval(EU._dri);EU._dri=null;EU._ready();}},EU.POLL_INTERVAL);}else{EU._simpleAdd(document,"DOMContentLoaded",EU._ready);}}EU._simpleAdd(window,"load",EU._load);EU._simpleAdd(window,"unload",EU._unload);EU._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,overrideContext:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);
},createEvent:function(B,G){this.__yui_events=this.__yui_events||{};var E=G||{},D=this.__yui_events,F;if(D[B]){}else{F=new YAHOO.util.CustomEvent(B,E.scope||this,E.silent,YAHOO.util.CustomEvent.FLAT,E.fireOnce);D[B]=F;if(E.onSubscribeCallback){F.subscribeEvent.subscribe(E.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{};var A=this.__yui_subscribers[B];if(A){for(var C=0;C<A.length;++C){F.subscribe(A[C].fn,A[C].obj,A[C].overrideContext);}}}return D[B];},fireEvent:function(B){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[B];if(!D){return null;}var A=[];for(var C=1;C<arguments.length;++C){A.push(arguments[C]);}return D.fire.apply(D,A);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};(function(){var A=YAHOO.util.Event,C=YAHOO.lang;YAHOO.util.KeyListener=function(D,I,E,F){if(!D){}else{if(!I){}else{if(!E){}}}if(!F){F=YAHOO.util.KeyListener.KEYDOWN;}var G=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(C.isString(D)){D=document.getElementById(D);}if(C.isFunction(E)){G.subscribe(E);}else{G.subscribe(E.fn,E.scope,E.correctScope);}function H(O,N){if(!I.shift){I.shift=false;}if(!I.alt){I.alt=false;}if(!I.ctrl){I.ctrl=false;}if(O.shiftKey==I.shift&&O.altKey==I.alt&&O.ctrlKey==I.ctrl){var J,M=I.keys,L;if(YAHOO.lang.isArray(M)){for(var K=0;K<M.length;K++){J=M[K];L=A.getCharCode(O);if(J==L){G.fire(L,O);break;}}}else{L=A.getCharCode(O);if(M==L){G.fire(L,O);}}}}this.enable=function(){if(!this.enabled){A.on(D,F,H);this.enabledEvent.fire(I);}this.enabled=true;};this.disable=function(){if(this.enabled){A.removeListener(D,F,H);this.disabledEvent.fire(I);}this.enabled=false;};this.toString=function(){return"KeyListener ["+I.keys+"] "+D.tagName+(D.id?"["+D.id+"]":"");};};var B=YAHOO.util.KeyListener;B.KEYDOWN="keydown";B.KEYUP="keyup";B.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};})();YAHOO.register("event",YAHOO.util.Event,{version:"2.8.0r4",build:"2449"});YAHOO.register("yuiloader-dom-event",YAHOO,{version:"2.8.0r4",build:"2449"});
(function(){var B=YAHOO.util;var A=function(D,C,E,F){if(!D){}this.init(D,C,E,F);};A.NAME="Anim";A.prototype={toString:function(){var C=this.getEl()||{};var D=C.id||C.tagName;return(this.constructor.NAME+": "+D);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(C,E,D){return this.method(this.currentFrame,E,D-E,this.totalFrames);},setAttribute:function(C,F,E){var D=this.getEl();if(this.patterns.noNegatives.test(C)){F=(F>0)?F:0;}if(C in D&&!("style"in D&&C in D.style)){D[C]=F;}else{B.Dom.setStyle(D,C,F+E);}},getAttribute:function(C){var E=this.getEl();var G=B.Dom.getStyle(E,C);if(G!=="auto"&&!this.patterns.offsetUnit.test(G)){return parseFloat(G);}var D=this.patterns.offsetAttribute.exec(C)||[];var H=!!(D[3]);var F=!!(D[2]);if("style"in E){if(F||(B.Dom.getStyle(E,"position")=="absolute"&&H)){G=E["offset"+D[0].charAt(0).toUpperCase()+D[0].substr(1)];}else{G=0;}}else{if(C in E){G=E[C];}}return G;},getDefaultUnit:function(C){if(this.patterns.defaultUnit.test(C)){return"px";}return"";},setRuntimeAttribute:function(D){var I;var E;var F=this.attributes;this.runtimeAttributes[D]={};var H=function(J){return(typeof J!=="undefined");};if(!H(F[D]["to"])&&!H(F[D]["by"])){return false;}I=(H(F[D]["from"]))?F[D]["from"]:this.getAttribute(D);if(H(F[D]["to"])){E=F[D]["to"];}else{if(H(F[D]["by"])){if(I.constructor==Array){E=[];for(var G=0,C=I.length;G<C;++G){E[G]=I[G]+F[D]["by"][G]*1;}}else{E=I+F[D]["by"]*1;}}}this.runtimeAttributes[D].start=I;this.runtimeAttributes[D].end=E;this.runtimeAttributes[D].unit=(H(F[D].unit))?F[D]["unit"]:this.getDefaultUnit(D);return true;},init:function(E,J,I,C){var D=false;var F=null;var H=0;E=B.Dom.get(E);this.attributes=J||{};this.duration=!YAHOO.lang.isUndefined(I)?I:1;this.method=C||B.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=B.AnimMgr.fps;this.setEl=function(M){E=B.Dom.get(M);};this.getEl=function(){return E;};this.isAnimated=function(){return D;};this.getStartTime=function(){return F;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(B.AnimMgr.fps*this.duration):this.duration;if(this.duration===0&&this.useSeconds){this.totalFrames=1;}B.AnimMgr.registerElement(this);return true;};this.stop=function(M){if(!this.isAnimated()){return false;}if(M){this.currentFrame=this.totalFrames;this._onTween.fire();}B.AnimMgr.stop(this);};var L=function(){this.onStart.fire();this.runtimeAttributes={};for(var M in this.attributes){this.setRuntimeAttribute(M);}D=true;H=0;F=new Date();};var K=function(){var O={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};O.toString=function(){return("duration: "+O.duration+", currentFrame: "+O.currentFrame);};this.onTween.fire(O);var N=this.runtimeAttributes;for(var M in N){this.setAttribute(M,this.doMethod(M,N[M].start,N[M].end),N[M].unit);}H+=1;};var G=function(){var M=(new Date()-F)/1000;var N={duration:M,frames:H,fps:H/M};N.toString=function(){return("duration: "+N.duration+", frames: "+N.frames+", fps: "+N.fps);};D=false;H=0;this.onComplete.fire(N);};this._onStart=new B.CustomEvent("_start",this,true);this.onStart=new B.CustomEvent("start",this);this.onTween=new B.CustomEvent("tween",this);this._onTween=new B.CustomEvent("_tween",this,true);this.onComplete=new B.CustomEvent("complete",this);this._onComplete=new B.CustomEvent("_complete",this,true);this._onStart.subscribe(L);this._onTween.subscribe(K);this._onComplete.subscribe(G);}};B.Anim=A;})();YAHOO.util.AnimMgr=new function(){var C=null;var B=[];var A=0;this.fps=1000;this.delay=1;this.registerElement=function(F){B[B.length]=F;A+=1;F._onStart.fire();this.start();};this.unRegister=function(G,F){F=F||E(G);if(!G.isAnimated()||F===-1){return false;}G._onComplete.fire();B.splice(F,1);A-=1;if(A<=0){this.stop();}return true;};this.start=function(){if(C===null){C=setInterval(this.run,this.delay);}};this.stop=function(H){if(!H){clearInterval(C);for(var G=0,F=B.length;G<F;++G){this.unRegister(B[0],0);}B=[];C=null;A=0;}else{this.unRegister(H);}};this.run=function(){for(var H=0,F=B.length;H<F;++H){var G=B[H];if(!G||!G.isAnimated()){continue;}if(G.currentFrame<G.totalFrames||G.totalFrames===null){G.currentFrame+=1;if(G.useSeconds){D(G);}G._onTween.fire();}else{YAHOO.util.AnimMgr.stop(G,H);}}};var E=function(H){for(var G=0,F=B.length;G<F;++G){if(B[G]===H){return G;}}return-1;};var D=function(G){var J=G.totalFrames;var I=G.currentFrame;var H=(G.currentFrame*G.duration*1000/G.totalFrames);var F=(new Date()-G.getStartTime());var K=0;if(F<G.duration*1000){K=Math.round((F/H-1)*G.currentFrame);}else{K=J-(I+1);}if(K>0&&isFinite(K)){if(G.currentFrame+K>=J){K=J-(I+1);}G.currentFrame+=K;}};this._queue=B;this._getIndex=E;};YAHOO.util.Bezier=new function(){this.getPosition=function(E,D){var F=E.length;var C=[];for(var B=0;B<F;++B){C[B]=[E[B][0],E[B][1]];}for(var A=1;A<F;++A){for(B=0;B<F-A;++B){C[B][0]=(1-D)*C[B][0]+D*C[parseInt(B+1,10)][0];C[B][1]=(1-D)*C[B][1]+D*C[parseInt(B+1,10)][1];}}return[C[0][0],C[0][1]];};};(function(){var A=function(F,E,G,H){A.superclass.constructor.call(this,F,E,G,H);};A.NAME="ColorAnim";A.DEFAULT_BGCOLOR="#fff";var C=YAHOO.util;YAHOO.extend(A,C.Anim);var D=A.superclass;var B=A.prototype;B.patterns.color=/color$/i;B.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;B.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;B.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;B.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;B.parseColor=function(E){if(E.length==3){return E;}var F=this.patterns.hex.exec(E);if(F&&F.length==4){return[parseInt(F[1],16),parseInt(F[2],16),parseInt(F[3],16)];}F=this.patterns.rgb.exec(E);if(F&&F.length==4){return[parseInt(F[1],10),parseInt(F[2],10),parseInt(F[3],10)];}F=this.patterns.hex3.exec(E);if(F&&F.length==4){return[parseInt(F[1]+F[1],16),parseInt(F[2]+F[2],16),parseInt(F[3]+F[3],16)];
}return null;};B.getAttribute=function(E){var G=this.getEl();if(this.patterns.color.test(E)){var I=YAHOO.util.Dom.getStyle(G,E);var H=this;if(this.patterns.transparent.test(I)){var F=YAHOO.util.Dom.getAncestorBy(G,function(J){return!H.patterns.transparent.test(I);});if(F){I=C.Dom.getStyle(F,E);}else{I=A.DEFAULT_BGCOLOR;}}}else{I=D.getAttribute.call(this,E);}return I;};B.doMethod=function(F,J,G){var I;if(this.patterns.color.test(F)){I=[];for(var H=0,E=J.length;H<E;++H){I[H]=D.doMethod.call(this,F,J[H],G[H]);}I="rgb("+Math.floor(I[0])+","+Math.floor(I[1])+","+Math.floor(I[2])+")";}else{I=D.doMethod.call(this,F,J,G);}return I;};B.setRuntimeAttribute=function(F){D.setRuntimeAttribute.call(this,F);if(this.patterns.color.test(F)){var H=this.attributes;var J=this.parseColor(this.runtimeAttributes[F].start);var G=this.parseColor(this.runtimeAttributes[F].end);if(typeof H[F]["to"]==="undefined"&&typeof H[F]["by"]!=="undefined"){G=this.parseColor(H[F].by);for(var I=0,E=J.length;I<E;++I){G[I]=J[I]+G[I];}}this.runtimeAttributes[F].start=J;this.runtimeAttributes[F].end=G;}};C.ColorAnim=A;})();
YAHOO.util.Easing={easeNone:function(B,A,D,C){return D*B/C+A;},easeIn:function(B,A,D,C){return D*(B/=C)*B+A;},easeOut:function(B,A,D,C){return-D*(B/=C)*(B-2)+A;},easeBoth:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B+A;}return-D/2*((--B)*(B-2)-1)+A;},easeInStrong:function(B,A,D,C){return D*(B/=C)*B*B*B+A;},easeOutStrong:function(B,A,D,C){return-D*((B=B/C-1)*B*B*B-1)+A;},easeBothStrong:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B*B*B+A;}return-D/2*((B-=2)*B*B*B-2)+A;},elasticIn:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return-(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;},elasticOut:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return B*Math.pow(2,-10*C)*Math.sin((C*F-D)*(2*Math.PI)/E)+G+A;},elasticBoth:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F/2)==2){return A+G;}if(!E){E=F*(0.3*1.5);}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}if(C<1){return-0.5*(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;}return B*Math.pow(2,-10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E)*0.5+G+A;},backIn:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*(B/=D)*B*((C+1)*B-C)+A;},backOut:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*((B=B/D-1)*B*((C+1)*B+C)+1)+A;},backBoth:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}if((B/=D/2)<1){return E/2*(B*B*(((C*=(1.525))+1)*B-C))+A;}return E/2*((B-=2)*B*(((C*=(1.525))+1)*B+C)+2)+A;},bounceIn:function(B,A,D,C){return D-YAHOO.util.Easing.bounceOut(C-B,0,D,C)+A;},bounceOut:function(B,A,D,C){if((B/=C)<(1/2.75)){return D*(7.5625*B*B)+A;}else{if(B<(2/2.75)){return D*(7.5625*(B-=(1.5/2.75))*B+0.75)+A;}else{if(B<(2.5/2.75)){return D*(7.5625*(B-=(2.25/2.75))*B+0.9375)+A;}}}return D*(7.5625*(B-=(2.625/2.75))*B+0.984375)+A;},bounceBoth:function(B,A,D,C){if(B<C/2){return YAHOO.util.Easing.bounceIn(B*2,0,D,C)*0.5+A;}return YAHOO.util.Easing.bounceOut(B*2-C,0,D,C)*0.5+D*0.5+A;}};(function(){var A=function(H,G,I,J){if(H){A.superclass.constructor.call(this,H,G,I,J);}};A.NAME="Motion";var E=YAHOO.util;YAHOO.extend(A,E.ColorAnim);var F=A.superclass;var C=A.prototype;C.patterns.points=/^points$/i;C.setAttribute=function(G,I,H){if(this.patterns.points.test(G)){H=H||"px";F.setAttribute.call(this,"left",I[0],H);F.setAttribute.call(this,"top",I[1],H);}else{F.setAttribute.call(this,G,I,H);}};C.getAttribute=function(G){if(this.patterns.points.test(G)){var H=[F.getAttribute.call(this,"left"),F.getAttribute.call(this,"top")];}else{H=F.getAttribute.call(this,G);}return H;};C.doMethod=function(G,K,H){var J=null;if(this.patterns.points.test(G)){var I=this.method(this.currentFrame,0,100,this.totalFrames)/100;J=E.Bezier.getPosition(this.runtimeAttributes[G],I);}else{J=F.doMethod.call(this,G,K,H);}return J;};C.setRuntimeAttribute=function(P){if(this.patterns.points.test(P)){var H=this.getEl();var J=this.attributes;var G;var L=J["points"]["control"]||[];var I;var M,O;if(L.length>0&&!(L[0]instanceof Array)){L=[L];}else{var K=[];for(M=0,O=L.length;M<O;++M){K[M]=L[M];}L=K;}if(E.Dom.getStyle(H,"position")=="static"){E.Dom.setStyle(H,"position","relative");}if(D(J["points"]["from"])){E.Dom.setXY(H,J["points"]["from"]);
}else{E.Dom.setXY(H,E.Dom.getXY(H));}G=this.getAttribute("points");if(D(J["points"]["to"])){I=B.call(this,J["points"]["to"],G);var N=E.Dom.getXY(this.getEl());for(M=0,O=L.length;M<O;++M){L[M]=B.call(this,L[M],G);}}else{if(D(J["points"]["by"])){I=[G[0]+J["points"]["by"][0],G[1]+J["points"]["by"][1]];for(M=0,O=L.length;M<O;++M){L[M]=[G[0]+L[M][0],G[1]+L[M][1]];}}}this.runtimeAttributes[P]=[G];if(L.length>0){this.runtimeAttributes[P]=this.runtimeAttributes[P].concat(L);}this.runtimeAttributes[P][this.runtimeAttributes[P].length]=I;}else{F.setRuntimeAttribute.call(this,P);}};var B=function(G,I){var H=E.Dom.getXY(this.getEl());G=[G[0]-H[0]+I[0],G[1]-H[1]+I[1]];return G;};var D=function(G){return(typeof G!=="undefined");};E.Motion=A;})();(function(){var D=function(F,E,G,H){if(F){D.superclass.constructor.call(this,F,E,G,H);}};D.NAME="Scroll";var B=YAHOO.util;YAHOO.extend(D,B.ColorAnim);var C=D.superclass;var A=D.prototype;A.doMethod=function(E,H,F){var G=null;if(E=="scroll"){G=[this.method(this.currentFrame,H[0],F[0]-H[0],this.totalFrames),this.method(this.currentFrame,H[1],F[1]-H[1],this.totalFrames)];}else{G=C.doMethod.call(this,E,H,F);}return G;};A.getAttribute=function(E){var G=null;var F=this.getEl();if(E=="scroll"){G=[F.scrollLeft,F.scrollTop];}else{G=C.getAttribute.call(this,E);}return G;};A.setAttribute=function(E,H,G){var F=this.getEl();if(E=="scroll"){F.scrollLeft=H[0];F.scrollTop=H[1];}else{C.setAttribute.call(this,E,H,G);}};B.Scroll=D;})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.8.0r4",build:"2449"});
(function(){YAHOO.util.Config=function(D){if(D){this.init(D);}};var B=YAHOO.lang,C=YAHOO.util.CustomEvent,A=YAHOO.util.Config;A.CONFIG_CHANGED_EVENT="configChanged";A.BOOLEAN_TYPE="boolean";A.prototype={owner:null,queueInProgress:false,config:null,initialConfig:null,eventQueue:null,configChangedEvent:null,init:function(D){this.owner=D;this.configChangedEvent=this.createEvent(A.CONFIG_CHANGED_EVENT);this.configChangedEvent.signature=C.LIST;this.queueInProgress=false;this.config={};this.initialConfig={};this.eventQueue=[];},checkBoolean:function(D){return(typeof D==A.BOOLEAN_TYPE);},checkNumber:function(D){return(!isNaN(D));},fireEvent:function(D,F){var E=this.config[D];if(E&&E.event){E.event.fire(F);}},addProperty:function(E,D){E=E.toLowerCase();this.config[E]=D;D.event=this.createEvent(E,{scope:this.owner});D.event.signature=C.LIST;D.key=E;if(D.handler){D.event.subscribe(D.handler,this.owner);}this.setProperty(E,D.value,true);if(!D.suppressEvent){this.queueProperty(E,D.value);}},getConfig:function(){var D={},F=this.config,G,E;for(G in F){if(B.hasOwnProperty(F,G)){E=F[G];if(E&&E.event){D[G]=E.value;}}}return D;},getProperty:function(D){var E=this.config[D.toLowerCase()];if(E&&E.event){return E.value;}else{return undefined;}},resetProperty:function(D){D=D.toLowerCase();var E=this.config[D];if(E&&E.event){if(this.initialConfig[D]&&!B.isUndefined(this.initialConfig[D])){this.setProperty(D,this.initialConfig[D]);return true;}}else{return false;}},setProperty:function(E,G,D){var F;E=E.toLowerCase();if(this.queueInProgress&&!D){this.queueProperty(E,G);return true;}else{F=this.config[E];if(F&&F.event){if(F.validator&&!F.validator(G)){return false;}else{F.value=G;if(!D){this.fireEvent(E,G);this.configChangedEvent.fire([E,G]);}return true;}}else{return false;}}},queueProperty:function(S,P){S=S.toLowerCase();var R=this.config[S],K=false,J,G,H,I,O,Q,F,M,N,D,L,T,E;if(R&&R.event){if(!B.isUndefined(P)&&R.validator&&!R.validator(P)){return false;}else{if(!B.isUndefined(P)){R.value=P;}else{P=R.value;}K=false;J=this.eventQueue.length;for(L=0;L<J;L++){G=this.eventQueue[L];if(G){H=G[0];I=G[1];if(H==S){this.eventQueue[L]=null;this.eventQueue.push([S,(!B.isUndefined(P)?P:I)]);K=true;break;}}}if(!K&&!B.isUndefined(P)){this.eventQueue.push([S,P]);}}if(R.supercedes){O=R.supercedes.length;for(T=0;T<O;T++){Q=R.supercedes[T];F=this.eventQueue.length;for(E=0;E<F;E++){M=this.eventQueue[E];if(M){N=M[0];D=M[1];if(N==Q.toLowerCase()){this.eventQueue.push([N,D]);this.eventQueue[E]=null;break;}}}}}return true;}else{return false;}},refireEvent:function(D){D=D.toLowerCase();var E=this.config[D];if(E&&E.event&&!B.isUndefined(E.value)){if(this.queueInProgress){this.queueProperty(D);}else{this.fireEvent(D,E.value);}}},applyConfig:function(D,G){var F,E;if(G){E={};for(F in D){if(B.hasOwnProperty(D,F)){E[F.toLowerCase()]=D[F];}}this.initialConfig=E;}for(F in D){if(B.hasOwnProperty(D,F)){this.queueProperty(F,D[F]);}}},refresh:function(){var D;for(D in this.config){if(B.hasOwnProperty(this.config,D)){this.refireEvent(D);}}},fireQueue:function(){var E,H,D,G,F;this.queueInProgress=true;for(E=0;E<this.eventQueue.length;E++){H=this.eventQueue[E];if(H){D=H[0];G=H[1];F=this.config[D];F.value=G;this.eventQueue[E]=null;this.fireEvent(D,G);}}this.queueInProgress=false;this.eventQueue=[];},subscribeToConfigEvent:function(D,E,G,H){var F=this.config[D.toLowerCase()];if(F&&F.event){if(!A.alreadySubscribed(F.event,E,G)){F.event.subscribe(E,G,H);}return true;}else{return false;}},unsubscribeFromConfigEvent:function(D,E,G){var F=this.config[D.toLowerCase()];if(F&&F.event){return F.event.unsubscribe(E,G);}else{return false;}},toString:function(){var D="Config";if(this.owner){D+=" ["+this.owner.toString()+"]";}return D;},outputEventQueue:function(){var D="",G,E,F=this.eventQueue.length;for(E=0;E<F;E++){G=this.eventQueue[E];if(G){D+=G[0]+"="+G[1]+", ";}}return D;},destroy:function(){var E=this.config,D,F;for(D in E){if(B.hasOwnProperty(E,D)){F=E[D];F.event.unsubscribeAll();F.event=null;}}this.configChangedEvent.unsubscribeAll();this.configChangedEvent=null;this.owner=null;this.config=null;this.initialConfig=null;this.eventQueue=null;}};A.alreadySubscribed=function(E,H,I){var F=E.subscribers.length,D,G;if(F>0){G=F-1;do{D=E.subscribers[G];if(D&&D.obj==I&&D.fn==H){return true;}}while(G--);}return false;};YAHOO.lang.augmentProto(A,YAHOO.util.EventProvider);}());(function(){YAHOO.widget.Module=function(R,Q){if(R){this.init(R,Q);}else{}};var F=YAHOO.util.Dom,D=YAHOO.util.Config,N=YAHOO.util.Event,M=YAHOO.util.CustomEvent,G=YAHOO.widget.Module,I=YAHOO.env.ua,H,P,O,E,A={"BEFORE_INIT":"beforeInit","INIT":"init","APPEND":"append","BEFORE_RENDER":"beforeRender","RENDER":"render","CHANGE_HEADER":"changeHeader","CHANGE_BODY":"changeBody","CHANGE_FOOTER":"changeFooter","CHANGE_CONTENT":"changeContent","DESTROY":"destroy","BEFORE_SHOW":"beforeShow","SHOW":"show","BEFORE_HIDE":"beforeHide","HIDE":"hide"},J={"VISIBLE":{key:"visible",value:true,validator:YAHOO.lang.isBoolean},"EFFECT":{key:"effect",suppressEvent:true,supercedes:["visible"]},"MONITOR_RESIZE":{key:"monitorresize",value:true},"APPEND_TO_DOCUMENT_BODY":{key:"appendtodocumentbody",value:false}};G.IMG_ROOT=null;G.IMG_ROOT_SSL=null;G.CSS_MODULE="yui-module";G.CSS_HEADER="hd";G.CSS_BODY="bd";G.CSS_FOOTER="ft";G.RESIZE_MONITOR_SECURE_URL="javascript:false;";G.RESIZE_MONITOR_BUFFER=1;G.textResizeEvent=new M("textResize");G.forceDocumentRedraw=function(){var Q=document.documentElement;if(Q){Q.className+=" ";Q.className=YAHOO.lang.trim(Q.className);}};function L(){if(!H){H=document.createElement("div");H.innerHTML=('<div class="'+G.CSS_HEADER+'"></div>'+'<div class="'+G.CSS_BODY+'"></div><div class="'+G.CSS_FOOTER+'"></div>');P=H.firstChild;O=P.nextSibling;E=O.nextSibling;}return H;}function K(){if(!P){L();}return(P.cloneNode(false));}function B(){if(!O){L();}return(O.cloneNode(false));}function C(){if(!E){L();}return(E.cloneNode(false));}G.prototype={constructor:G,element:null,header:null,body:null,footer:null,id:null,imageRoot:G.IMG_ROOT,initEvents:function(){var Q=M.LIST;
this.beforeInitEvent=this.createEvent(A.BEFORE_INIT);this.beforeInitEvent.signature=Q;this.initEvent=this.createEvent(A.INIT);this.initEvent.signature=Q;this.appendEvent=this.createEvent(A.APPEND);this.appendEvent.signature=Q;this.beforeRenderEvent=this.createEvent(A.BEFORE_RENDER);this.beforeRenderEvent.signature=Q;this.renderEvent=this.createEvent(A.RENDER);this.renderEvent.signature=Q;this.changeHeaderEvent=this.createEvent(A.CHANGE_HEADER);this.changeHeaderEvent.signature=Q;this.changeBodyEvent=this.createEvent(A.CHANGE_BODY);this.changeBodyEvent.signature=Q;this.changeFooterEvent=this.createEvent(A.CHANGE_FOOTER);this.changeFooterEvent.signature=Q;this.changeContentEvent=this.createEvent(A.CHANGE_CONTENT);this.changeContentEvent.signature=Q;this.destroyEvent=this.createEvent(A.DESTROY);this.destroyEvent.signature=Q;this.beforeShowEvent=this.createEvent(A.BEFORE_SHOW);this.beforeShowEvent.signature=Q;this.showEvent=this.createEvent(A.SHOW);this.showEvent.signature=Q;this.beforeHideEvent=this.createEvent(A.BEFORE_HIDE);this.beforeHideEvent.signature=Q;this.hideEvent=this.createEvent(A.HIDE);this.hideEvent.signature=Q;},platform:function(){var Q=navigator.userAgent.toLowerCase();if(Q.indexOf("windows")!=-1||Q.indexOf("win32")!=-1){return"windows";}else{if(Q.indexOf("macintosh")!=-1){return"mac";}else{return false;}}}(),browser:function(){var Q=navigator.userAgent.toLowerCase();if(Q.indexOf("opera")!=-1){return"opera";}else{if(Q.indexOf("msie 7")!=-1){return"ie7";}else{if(Q.indexOf("msie")!=-1){return"ie";}else{if(Q.indexOf("safari")!=-1){return"safari";}else{if(Q.indexOf("gecko")!=-1){return"gecko";}else{return false;}}}}}}(),isSecure:function(){if(window.location.href.toLowerCase().indexOf("https")===0){return true;}else{return false;}}(),initDefaultConfig:function(){this.cfg.addProperty(J.VISIBLE.key,{handler:this.configVisible,value:J.VISIBLE.value,validator:J.VISIBLE.validator});this.cfg.addProperty(J.EFFECT.key,{suppressEvent:J.EFFECT.suppressEvent,supercedes:J.EFFECT.supercedes});this.cfg.addProperty(J.MONITOR_RESIZE.key,{handler:this.configMonitorResize,value:J.MONITOR_RESIZE.value});this.cfg.addProperty(J.APPEND_TO_DOCUMENT_BODY.key,{value:J.APPEND_TO_DOCUMENT_BODY.value});},init:function(V,U){var S,W;this.initEvents();this.beforeInitEvent.fire(G);this.cfg=new D(this);if(this.isSecure){this.imageRoot=G.IMG_ROOT_SSL;}if(typeof V=="string"){S=V;V=document.getElementById(V);if(!V){V=(L()).cloneNode(false);V.id=S;}}this.id=F.generateId(V);this.element=V;W=this.element.firstChild;if(W){var R=false,Q=false,T=false;do{if(1==W.nodeType){if(!R&&F.hasClass(W,G.CSS_HEADER)){this.header=W;R=true;}else{if(!Q&&F.hasClass(W,G.CSS_BODY)){this.body=W;Q=true;}else{if(!T&&F.hasClass(W,G.CSS_FOOTER)){this.footer=W;T=true;}}}}}while((W=W.nextSibling));}this.initDefaultConfig();F.addClass(this.element,G.CSS_MODULE);if(U){this.cfg.applyConfig(U,true);}if(!D.alreadySubscribed(this.renderEvent,this.cfg.fireQueue,this.cfg)){this.renderEvent.subscribe(this.cfg.fireQueue,this.cfg,true);}this.initEvent.fire(G);},initResizeMonitor:function(){var R=(I.gecko&&this.platform=="windows");if(R){var Q=this;setTimeout(function(){Q._initResizeMonitor();},0);}else{this._initResizeMonitor();}},_initResizeMonitor:function(){var Q,S,U;function W(){G.textResizeEvent.fire();}if(!I.opera){S=F.get("_yuiResizeMonitor");var V=this._supportsCWResize();if(!S){S=document.createElement("iframe");if(this.isSecure&&G.RESIZE_MONITOR_SECURE_URL&&I.ie){S.src=G.RESIZE_MONITOR_SECURE_URL;}if(!V){U=["<html><head><script ",'type="text/javascript">',"window.onresize=function(){window.parent.","YAHOO.widget.Module.textResizeEvent.","fire();};<","/script></head>","<body></body></html>"].join("");S.src="data:text/html;charset=utf-8,"+encodeURIComponent(U);}S.id="_yuiResizeMonitor";S.title="Text Resize Monitor";S.style.position="absolute";S.style.visibility="hidden";var R=document.body,T=R.firstChild;if(T){R.insertBefore(S,T);}else{R.appendChild(S);}S.style.backgroundColor="transparent";S.style.borderWidth="0";S.style.width="2em";S.style.height="2em";S.style.left="0";S.style.top=(-1*(S.offsetHeight+G.RESIZE_MONITOR_BUFFER))+"px";S.style.visibility="visible";if(I.webkit){Q=S.contentWindow.document;Q.open();Q.close();}}if(S&&S.contentWindow){G.textResizeEvent.subscribe(this.onDomResize,this,true);if(!G.textResizeInitialized){if(V){if(!N.on(S.contentWindow,"resize",W)){N.on(S,"resize",W);}}G.textResizeInitialized=true;}this.resizeMonitor=S;}}},_supportsCWResize:function(){var Q=true;if(I.gecko&&I.gecko<=1.8){Q=false;}return Q;},onDomResize:function(S,R){var Q=-1*(this.resizeMonitor.offsetHeight+G.RESIZE_MONITOR_BUFFER);this.resizeMonitor.style.top=Q+"px";this.resizeMonitor.style.left="0";},setHeader:function(R){var Q=this.header||(this.header=K());if(R.nodeName){Q.innerHTML="";Q.appendChild(R);}else{Q.innerHTML=R;}if(this._rendered){this._renderHeader();}this.changeHeaderEvent.fire(R);this.changeContentEvent.fire();},appendToHeader:function(R){var Q=this.header||(this.header=K());Q.appendChild(R);this.changeHeaderEvent.fire(R);this.changeContentEvent.fire();},setBody:function(R){var Q=this.body||(this.body=B());if(R.nodeName){Q.innerHTML="";Q.appendChild(R);}else{Q.innerHTML=R;}if(this._rendered){this._renderBody();}this.changeBodyEvent.fire(R);this.changeContentEvent.fire();},appendToBody:function(R){var Q=this.body||(this.body=B());Q.appendChild(R);this.changeBodyEvent.fire(R);this.changeContentEvent.fire();},setFooter:function(R){var Q=this.footer||(this.footer=C());if(R.nodeName){Q.innerHTML="";Q.appendChild(R);}else{Q.innerHTML=R;}if(this._rendered){this._renderFooter();}this.changeFooterEvent.fire(R);this.changeContentEvent.fire();},appendToFooter:function(R){var Q=this.footer||(this.footer=C());Q.appendChild(R);this.changeFooterEvent.fire(R);this.changeContentEvent.fire();},render:function(S,Q){var T=this;function R(U){if(typeof U=="string"){U=document.getElementById(U);}if(U){T._addToParent(U,T.element);T.appendEvent.fire();}}this.beforeRenderEvent.fire();
if(!Q){Q=this.element;}if(S){R(S);}else{if(!F.inDocument(this.element)){return false;}}this._renderHeader(Q);this._renderBody(Q);this._renderFooter(Q);this._rendered=true;this.renderEvent.fire();return true;},_renderHeader:function(Q){Q=Q||this.element;if(this.header&&!F.inDocument(this.header)){var R=Q.firstChild;if(R){Q.insertBefore(this.header,R);}else{Q.appendChild(this.header);}}},_renderBody:function(Q){Q=Q||this.element;if(this.body&&!F.inDocument(this.body)){if(this.footer&&F.isAncestor(Q,this.footer)){Q.insertBefore(this.body,this.footer);}else{Q.appendChild(this.body);}}},_renderFooter:function(Q){Q=Q||this.element;if(this.footer&&!F.inDocument(this.footer)){Q.appendChild(this.footer);}},destroy:function(){var Q;if(this.element){N.purgeElement(this.element,true);Q=this.element.parentNode;}if(Q){Q.removeChild(this.element);}this.element=null;this.header=null;this.body=null;this.footer=null;G.textResizeEvent.unsubscribe(this.onDomResize,this);this.cfg.destroy();this.cfg=null;this.destroyEvent.fire();},show:function(){this.cfg.setProperty("visible",true);},hide:function(){this.cfg.setProperty("visible",false);},configVisible:function(R,Q,S){var T=Q[0];if(T){this.beforeShowEvent.fire();F.setStyle(this.element,"display","block");this.showEvent.fire();}else{this.beforeHideEvent.fire();F.setStyle(this.element,"display","none");this.hideEvent.fire();}},configMonitorResize:function(S,R,T){var Q=R[0];if(Q){this.initResizeMonitor();}else{G.textResizeEvent.unsubscribe(this.onDomResize,this,true);this.resizeMonitor=null;}},_addToParent:function(Q,R){if(!this.cfg.getProperty("appendtodocumentbody")&&Q===document.body&&Q.firstChild){Q.insertBefore(R,Q.firstChild);}else{Q.appendChild(R);}},toString:function(){return"Module "+this.id;}};YAHOO.lang.augmentProto(G,YAHOO.util.EventProvider);}());(function(){YAHOO.widget.Overlay=function(P,O){YAHOO.widget.Overlay.superclass.constructor.call(this,P,O);};var I=YAHOO.lang,M=YAHOO.util.CustomEvent,G=YAHOO.widget.Module,N=YAHOO.util.Event,F=YAHOO.util.Dom,D=YAHOO.util.Config,K=YAHOO.env.ua,B=YAHOO.widget.Overlay,H="subscribe",E="unsubscribe",C="contained",J,A={"BEFORE_MOVE":"beforeMove","MOVE":"move"},L={"X":{key:"x",validator:I.isNumber,suppressEvent:true,supercedes:["iframe"]},"Y":{key:"y",validator:I.isNumber,suppressEvent:true,supercedes:["iframe"]},"XY":{key:"xy",suppressEvent:true,supercedes:["iframe"]},"CONTEXT":{key:"context",suppressEvent:true,supercedes:["iframe"]},"FIXED_CENTER":{key:"fixedcenter",value:false,supercedes:["iframe","visible"]},"WIDTH":{key:"width",suppressEvent:true,supercedes:["context","fixedcenter","iframe"]},"HEIGHT":{key:"height",suppressEvent:true,supercedes:["context","fixedcenter","iframe"]},"AUTO_FILL_HEIGHT":{key:"autofillheight",supercedes:["height"],value:"body"},"ZINDEX":{key:"zindex",value:null},"CONSTRAIN_TO_VIEWPORT":{key:"constraintoviewport",value:false,validator:I.isBoolean,supercedes:["iframe","x","y","xy"]},"IFRAME":{key:"iframe",value:(K.ie==6?true:false),validator:I.isBoolean,supercedes:["zindex"]},"PREVENT_CONTEXT_OVERLAP":{key:"preventcontextoverlap",value:false,validator:I.isBoolean,supercedes:["constraintoviewport"]}};B.IFRAME_SRC="javascript:false;";B.IFRAME_OFFSET=3;B.VIEWPORT_OFFSET=10;B.TOP_LEFT="tl";B.TOP_RIGHT="tr";B.BOTTOM_LEFT="bl";B.BOTTOM_RIGHT="br";B.PREVENT_OVERLAP_X={"tltr":true,"blbr":true,"brbl":true,"trtl":true};B.PREVENT_OVERLAP_Y={"trbr":true,"tlbl":true,"bltl":true,"brtr":true};B.CSS_OVERLAY="yui-overlay";B.CSS_HIDDEN="yui-overlay-hidden";B.CSS_IFRAME="yui-overlay-iframe";B.STD_MOD_RE=/^\s*?(body|footer|header)\s*?$/i;B.windowScrollEvent=new M("windowScroll");B.windowResizeEvent=new M("windowResize");B.windowScrollHandler=function(P){var O=N.getTarget(P);if(!O||O===window||O===window.document){if(K.ie){if(!window.scrollEnd){window.scrollEnd=-1;}clearTimeout(window.scrollEnd);window.scrollEnd=setTimeout(function(){B.windowScrollEvent.fire();},1);}else{B.windowScrollEvent.fire();}}};B.windowResizeHandler=function(O){if(K.ie){if(!window.resizeEnd){window.resizeEnd=-1;}clearTimeout(window.resizeEnd);window.resizeEnd=setTimeout(function(){B.windowResizeEvent.fire();},100);}else{B.windowResizeEvent.fire();}};B._initialized=null;if(B._initialized===null){N.on(window,"scroll",B.windowScrollHandler);N.on(window,"resize",B.windowResizeHandler);B._initialized=true;}B._TRIGGER_MAP={"windowScroll":B.windowScrollEvent,"windowResize":B.windowResizeEvent,"textResize":G.textResizeEvent};YAHOO.extend(B,G,{CONTEXT_TRIGGERS:[],init:function(P,O){B.superclass.init.call(this,P);this.beforeInitEvent.fire(B);F.addClass(this.element,B.CSS_OVERLAY);if(O){this.cfg.applyConfig(O,true);}if(this.platform=="mac"&&K.gecko){if(!D.alreadySubscribed(this.showEvent,this.showMacGeckoScrollbars,this)){this.showEvent.subscribe(this.showMacGeckoScrollbars,this,true);}if(!D.alreadySubscribed(this.hideEvent,this.hideMacGeckoScrollbars,this)){this.hideEvent.subscribe(this.hideMacGeckoScrollbars,this,true);}}this.initEvent.fire(B);},initEvents:function(){B.superclass.initEvents.call(this);var O=M.LIST;this.beforeMoveEvent=this.createEvent(A.BEFORE_MOVE);this.beforeMoveEvent.signature=O;this.moveEvent=this.createEvent(A.MOVE);this.moveEvent.signature=O;},initDefaultConfig:function(){B.superclass.initDefaultConfig.call(this);var O=this.cfg;O.addProperty(L.X.key,{handler:this.configX,validator:L.X.validator,suppressEvent:L.X.suppressEvent,supercedes:L.X.supercedes});O.addProperty(L.Y.key,{handler:this.configY,validator:L.Y.validator,suppressEvent:L.Y.suppressEvent,supercedes:L.Y.supercedes});O.addProperty(L.XY.key,{handler:this.configXY,suppressEvent:L.XY.suppressEvent,supercedes:L.XY.supercedes});O.addProperty(L.CONTEXT.key,{handler:this.configContext,suppressEvent:L.CONTEXT.suppressEvent,supercedes:L.CONTEXT.supercedes});O.addProperty(L.FIXED_CENTER.key,{handler:this.configFixedCenter,value:L.FIXED_CENTER.value,validator:L.FIXED_CENTER.validator,supercedes:L.FIXED_CENTER.supercedes});O.addProperty(L.WIDTH.key,{handler:this.configWidth,suppressEvent:L.WIDTH.suppressEvent,supercedes:L.WIDTH.supercedes});
O.addProperty(L.HEIGHT.key,{handler:this.configHeight,suppressEvent:L.HEIGHT.suppressEvent,supercedes:L.HEIGHT.supercedes});O.addProperty(L.AUTO_FILL_HEIGHT.key,{handler:this.configAutoFillHeight,value:L.AUTO_FILL_HEIGHT.value,validator:this._validateAutoFill,supercedes:L.AUTO_FILL_HEIGHT.supercedes});O.addProperty(L.ZINDEX.key,{handler:this.configzIndex,value:L.ZINDEX.value});O.addProperty(L.CONSTRAIN_TO_VIEWPORT.key,{handler:this.configConstrainToViewport,value:L.CONSTRAIN_TO_VIEWPORT.value,validator:L.CONSTRAIN_TO_VIEWPORT.validator,supercedes:L.CONSTRAIN_TO_VIEWPORT.supercedes});O.addProperty(L.IFRAME.key,{handler:this.configIframe,value:L.IFRAME.value,validator:L.IFRAME.validator,supercedes:L.IFRAME.supercedes});O.addProperty(L.PREVENT_CONTEXT_OVERLAP.key,{value:L.PREVENT_CONTEXT_OVERLAP.value,validator:L.PREVENT_CONTEXT_OVERLAP.validator,supercedes:L.PREVENT_CONTEXT_OVERLAP.supercedes});},moveTo:function(O,P){this.cfg.setProperty("xy",[O,P]);},hideMacGeckoScrollbars:function(){F.replaceClass(this.element,"show-scrollbars","hide-scrollbars");},showMacGeckoScrollbars:function(){F.replaceClass(this.element,"hide-scrollbars","show-scrollbars");},_setDomVisibility:function(O){F.setStyle(this.element,"visibility",(O)?"visible":"hidden");var P=B.CSS_HIDDEN;if(O){F.removeClass(this.element,P);}else{F.addClass(this.element,P);}},configVisible:function(R,O,X){var Q=O[0],S=F.getStyle(this.element,"visibility"),Y=this.cfg.getProperty("effect"),V=[],U=(this.platform=="mac"&&K.gecko),g=D.alreadySubscribed,W,P,f,c,b,a,d,Z,T;if(S=="inherit"){f=this.element.parentNode;while(f.nodeType!=9&&f.nodeType!=11){S=F.getStyle(f,"visibility");if(S!="inherit"){break;}f=f.parentNode;}if(S=="inherit"){S="visible";}}if(Y){if(Y instanceof Array){Z=Y.length;for(c=0;c<Z;c++){W=Y[c];V[V.length]=W.effect(this,W.duration);}}else{V[V.length]=Y.effect(this,Y.duration);}}if(Q){if(U){this.showMacGeckoScrollbars();}if(Y){if(Q){if(S!="visible"||S===""){this.beforeShowEvent.fire();T=V.length;for(b=0;b<T;b++){P=V[b];if(b===0&&!g(P.animateInCompleteEvent,this.showEvent.fire,this.showEvent)){P.animateInCompleteEvent.subscribe(this.showEvent.fire,this.showEvent,true);}P.animateIn();}}}}else{if(S!="visible"||S===""){this.beforeShowEvent.fire();this._setDomVisibility(true);this.cfg.refireEvent("iframe");this.showEvent.fire();}else{this._setDomVisibility(true);}}}else{if(U){this.hideMacGeckoScrollbars();}if(Y){if(S=="visible"){this.beforeHideEvent.fire();T=V.length;for(a=0;a<T;a++){d=V[a];if(a===0&&!g(d.animateOutCompleteEvent,this.hideEvent.fire,this.hideEvent)){d.animateOutCompleteEvent.subscribe(this.hideEvent.fire,this.hideEvent,true);}d.animateOut();}}else{if(S===""){this._setDomVisibility(false);}}}else{if(S=="visible"||S===""){this.beforeHideEvent.fire();this._setDomVisibility(false);this.hideEvent.fire();}else{this._setDomVisibility(false);}}}},doCenterOnDOMEvent:function(){var O=this.cfg,P=O.getProperty("fixedcenter");if(O.getProperty("visible")){if(P&&(P!==C||this.fitsInViewport())){this.center();}}},fitsInViewport:function(){var S=B.VIEWPORT_OFFSET,Q=this.element,T=Q.offsetWidth,R=Q.offsetHeight,O=F.getViewportWidth(),P=F.getViewportHeight();return((T+S<O)&&(R+S<P));},configFixedCenter:function(S,Q,T){var U=Q[0],P=D.alreadySubscribed,R=B.windowResizeEvent,O=B.windowScrollEvent;if(U){this.center();if(!P(this.beforeShowEvent,this.center)){this.beforeShowEvent.subscribe(this.center);}if(!P(R,this.doCenterOnDOMEvent,this)){R.subscribe(this.doCenterOnDOMEvent,this,true);}if(!P(O,this.doCenterOnDOMEvent,this)){O.subscribe(this.doCenterOnDOMEvent,this,true);}}else{this.beforeShowEvent.unsubscribe(this.center);R.unsubscribe(this.doCenterOnDOMEvent,this);O.unsubscribe(this.doCenterOnDOMEvent,this);}},configHeight:function(R,P,S){var O=P[0],Q=this.element;F.setStyle(Q,"height",O);this.cfg.refireEvent("iframe");},configAutoFillHeight:function(T,S,P){var V=S[0],Q=this.cfg,U="autofillheight",W="height",R=Q.getProperty(U),O=this._autoFillOnHeightChange;Q.unsubscribeFromConfigEvent(W,O);G.textResizeEvent.unsubscribe(O);this.changeContentEvent.unsubscribe(O);if(R&&V!==R&&this[R]){F.setStyle(this[R],W,"");}if(V){V=I.trim(V.toLowerCase());Q.subscribeToConfigEvent(W,O,this[V],this);G.textResizeEvent.subscribe(O,this[V],this);this.changeContentEvent.subscribe(O,this[V],this);Q.setProperty(U,V,true);}},configWidth:function(R,O,S){var Q=O[0],P=this.element;F.setStyle(P,"width",Q);this.cfg.refireEvent("iframe");},configzIndex:function(Q,O,R){var S=O[0],P=this.element;if(!S){S=F.getStyle(P,"zIndex");if(!S||isNaN(S)){S=0;}}if(this.iframe||this.cfg.getProperty("iframe")===true){if(S<=0){S=1;}}F.setStyle(P,"zIndex",S);this.cfg.setProperty("zIndex",S,true);if(this.iframe){this.stackIframe();}},configXY:function(Q,P,R){var T=P[0],O=T[0],S=T[1];this.cfg.setProperty("x",O);this.cfg.setProperty("y",S);this.beforeMoveEvent.fire([O,S]);O=this.cfg.getProperty("x");S=this.cfg.getProperty("y");this.cfg.refireEvent("iframe");this.moveEvent.fire([O,S]);},configX:function(Q,P,R){var O=P[0],S=this.cfg.getProperty("y");this.cfg.setProperty("x",O,true);this.cfg.setProperty("y",S,true);this.beforeMoveEvent.fire([O,S]);O=this.cfg.getProperty("x");S=this.cfg.getProperty("y");F.setX(this.element,O,true);this.cfg.setProperty("xy",[O,S],true);this.cfg.refireEvent("iframe");this.moveEvent.fire([O,S]);},configY:function(Q,P,R){var O=this.cfg.getProperty("x"),S=P[0];this.cfg.setProperty("x",O,true);this.cfg.setProperty("y",S,true);this.beforeMoveEvent.fire([O,S]);O=this.cfg.getProperty("x");S=this.cfg.getProperty("y");F.setY(this.element,S,true);this.cfg.setProperty("xy",[O,S],true);this.cfg.refireEvent("iframe");this.moveEvent.fire([O,S]);},showIframe:function(){var P=this.iframe,O;if(P){O=this.element.parentNode;if(O!=P.parentNode){this._addToParent(O,P);}P.style.display="block";}},hideIframe:function(){if(this.iframe){this.iframe.style.display="none";}},syncIframe:function(){var O=this.iframe,Q=this.element,S=B.IFRAME_OFFSET,P=(S*2),R;if(O){O.style.width=(Q.offsetWidth+P+"px");
O.style.height=(Q.offsetHeight+P+"px");R=this.cfg.getProperty("xy");if(!I.isArray(R)||(isNaN(R[0])||isNaN(R[1]))){this.syncPosition();R=this.cfg.getProperty("xy");}F.setXY(O,[(R[0]-S),(R[1]-S)]);}},stackIframe:function(){if(this.iframe){var O=F.getStyle(this.element,"zIndex");if(!YAHOO.lang.isUndefined(O)&&!isNaN(O)){F.setStyle(this.iframe,"zIndex",(O-1));}}},configIframe:function(R,Q,S){var O=Q[0];function T(){var V=this.iframe,W=this.element,X;if(!V){if(!J){J=document.createElement("iframe");if(this.isSecure){J.src=B.IFRAME_SRC;}if(K.ie){J.style.filter="alpha(opacity=0)";J.frameBorder=0;}else{J.style.opacity="0";}J.style.position="absolute";J.style.border="none";J.style.margin="0";J.style.padding="0";J.style.display="none";J.tabIndex=-1;J.className=B.CSS_IFRAME;}V=J.cloneNode(false);V.id=this.id+"_f";X=W.parentNode;var U=X||document.body;this._addToParent(U,V);this.iframe=V;}this.showIframe();this.syncIframe();this.stackIframe();if(!this._hasIframeEventListeners){this.showEvent.subscribe(this.showIframe);this.hideEvent.subscribe(this.hideIframe);this.changeContentEvent.subscribe(this.syncIframe);this._hasIframeEventListeners=true;}}function P(){T.call(this);this.beforeShowEvent.unsubscribe(P);this._iframeDeferred=false;}if(O){if(this.cfg.getProperty("visible")){T.call(this);}else{if(!this._iframeDeferred){this.beforeShowEvent.subscribe(P);this._iframeDeferred=true;}}}else{this.hideIframe();if(this._hasIframeEventListeners){this.showEvent.unsubscribe(this.showIframe);this.hideEvent.unsubscribe(this.hideIframe);this.changeContentEvent.unsubscribe(this.syncIframe);this._hasIframeEventListeners=false;}}},_primeXYFromDOM:function(){if(YAHOO.lang.isUndefined(this.cfg.getProperty("xy"))){this.syncPosition();this.cfg.refireEvent("xy");this.beforeShowEvent.unsubscribe(this._primeXYFromDOM);}},configConstrainToViewport:function(P,O,Q){var R=O[0];if(R){if(!D.alreadySubscribed(this.beforeMoveEvent,this.enforceConstraints,this)){this.beforeMoveEvent.subscribe(this.enforceConstraints,this,true);}if(!D.alreadySubscribed(this.beforeShowEvent,this._primeXYFromDOM)){this.beforeShowEvent.subscribe(this._primeXYFromDOM);}}else{this.beforeShowEvent.unsubscribe(this._primeXYFromDOM);this.beforeMoveEvent.unsubscribe(this.enforceConstraints,this);}},configContext:function(U,T,Q){var X=T[0],R,O,V,S,P,W=this.CONTEXT_TRIGGERS;if(X){R=X[0];O=X[1];V=X[2];S=X[3];P=X[4];if(W&&W.length>0){S=(S||[]).concat(W);}if(R){if(typeof R=="string"){this.cfg.setProperty("context",[document.getElementById(R),O,V,S,P],true);}if(O&&V){this.align(O,V,P);}if(this._contextTriggers){this._processTriggers(this._contextTriggers,E,this._alignOnTrigger);}if(S){this._processTriggers(S,H,this._alignOnTrigger);this._contextTriggers=S;}}}},_alignOnTrigger:function(P,O){this.align();},_findTriggerCE:function(O){var P=null;if(O instanceof M){P=O;}else{if(B._TRIGGER_MAP[O]){P=B._TRIGGER_MAP[O];}}return P;},_processTriggers:function(S,U,R){var Q,T;for(var P=0,O=S.length;P<O;++P){Q=S[P];T=this._findTriggerCE(Q);if(T){T[U](R,this,true);}else{this[U](Q,R);}}},align:function(P,W,S){var V=this.cfg.getProperty("context"),T=this,O,Q,U;function R(Z,a){var Y=null,X=null;switch(P){case B.TOP_LEFT:Y=a;X=Z;break;case B.TOP_RIGHT:Y=a-Q.offsetWidth;X=Z;break;case B.BOTTOM_LEFT:Y=a;X=Z-Q.offsetHeight;break;case B.BOTTOM_RIGHT:Y=a-Q.offsetWidth;X=Z-Q.offsetHeight;break;}if(Y!==null&&X!==null){if(S){Y+=S[0];X+=S[1];}T.moveTo(Y,X);}}if(V){O=V[0];Q=this.element;T=this;if(!P){P=V[1];}if(!W){W=V[2];}if(!S&&V[4]){S=V[4];}if(Q&&O){U=F.getRegion(O);switch(W){case B.TOP_LEFT:R(U.top,U.left);break;case B.TOP_RIGHT:R(U.top,U.right);break;case B.BOTTOM_LEFT:R(U.bottom,U.left);break;case B.BOTTOM_RIGHT:R(U.bottom,U.right);break;}}}},enforceConstraints:function(P,O,Q){var S=O[0];var R=this.getConstrainedXY(S[0],S[1]);this.cfg.setProperty("x",R[0],true);this.cfg.setProperty("y",R[1],true);this.cfg.setProperty("xy",R,true);},_getConstrainedPos:function(X,P){var T=this.element,R=B.VIEWPORT_OFFSET,Z=(X=="x"),Y=(Z)?T.offsetWidth:T.offsetHeight,S=(Z)?F.getViewportWidth():F.getViewportHeight(),c=(Z)?F.getDocumentScrollLeft():F.getDocumentScrollTop(),b=(Z)?B.PREVENT_OVERLAP_X:B.PREVENT_OVERLAP_Y,O=this.cfg.getProperty("context"),U=(Y+R<S),W=this.cfg.getProperty("preventcontextoverlap")&&O&&b[(O[1]+O[2])],V=c+R,a=c+S-Y-R,Q=P;if(P<V||P>a){if(W){Q=this._preventOverlap(X,O[0],Y,S,c);}else{if(U){if(P<V){Q=V;}else{if(P>a){Q=a;}}}else{Q=V;}}}return Q;},_preventOverlap:function(X,W,Y,U,b){var Z=(X=="x"),T=B.VIEWPORT_OFFSET,S=this,Q=((Z)?F.getX(W):F.getY(W))-b,O=(Z)?W.offsetWidth:W.offsetHeight,P=Q-T,R=(U-(Q+O))-T,c=false,V=function(){var d;if((S.cfg.getProperty(X)-b)>Q){d=(Q-Y);}else{d=(Q+O);}S.cfg.setProperty(X,(d+b),true);return d;},a=function(){var e=((S.cfg.getProperty(X)-b)>Q)?R:P,d;if(Y>e){if(c){V();}else{V();c=true;d=a();}}return d;};a();return this.cfg.getProperty(X);},getConstrainedX:function(O){return this._getConstrainedPos("x",O);},getConstrainedY:function(O){return this._getConstrainedPos("y",O);},getConstrainedXY:function(O,P){return[this.getConstrainedX(O),this.getConstrainedY(P)];},center:function(){var R=B.VIEWPORT_OFFSET,S=this.element.offsetWidth,Q=this.element.offsetHeight,P=F.getViewportWidth(),T=F.getViewportHeight(),O,U;if(S<P){O=(P/2)-(S/2)+F.getDocumentScrollLeft();}else{O=R+F.getDocumentScrollLeft();}if(Q<T){U=(T/2)-(Q/2)+F.getDocumentScrollTop();}else{U=R+F.getDocumentScrollTop();}this.cfg.setProperty("xy",[parseInt(O,10),parseInt(U,10)]);this.cfg.refireEvent("iframe");if(K.webkit){this.forceContainerRedraw();}},syncPosition:function(){var O=F.getXY(this.element);this.cfg.setProperty("x",O[0],true);this.cfg.setProperty("y",O[1],true);this.cfg.setProperty("xy",O,true);},onDomResize:function(Q,P){var O=this;B.superclass.onDomResize.call(this,Q,P);setTimeout(function(){O.syncPosition();O.cfg.refireEvent("iframe");O.cfg.refireEvent("context");},0);},_getComputedHeight:(function(){if(document.defaultView&&document.defaultView.getComputedStyle){return function(P){var O=null;
if(P.ownerDocument&&P.ownerDocument.defaultView){var Q=P.ownerDocument.defaultView.getComputedStyle(P,"");if(Q){O=parseInt(Q.height,10);}}return(I.isNumber(O))?O:null;};}else{return function(P){var O=null;if(P.style.pixelHeight){O=P.style.pixelHeight;}return(I.isNumber(O))?O:null;};}})(),_validateAutoFillHeight:function(O){return(!O)||(I.isString(O)&&B.STD_MOD_RE.test(O));},_autoFillOnHeightChange:function(R,P,Q){var O=this.cfg.getProperty("height");if((O&&O!=="auto")||(O===0)){this.fillHeight(Q);}},_getPreciseHeight:function(P){var O=P.offsetHeight;if(P.getBoundingClientRect){var Q=P.getBoundingClientRect();O=Q.bottom-Q.top;}return O;},fillHeight:function(R){if(R){var P=this.innerElement||this.element,O=[this.header,this.body,this.footer],V,W=0,X=0,T=0,Q=false;for(var U=0,S=O.length;U<S;U++){V=O[U];if(V){if(R!==V){X+=this._getPreciseHeight(V);}else{Q=true;}}}if(Q){if(K.ie||K.opera){F.setStyle(R,"height",0+"px");}W=this._getComputedHeight(P);if(W===null){F.addClass(P,"yui-override-padding");W=P.clientHeight;F.removeClass(P,"yui-override-padding");}T=Math.max(W-X,0);F.setStyle(R,"height",T+"px");if(R.offsetHeight!=T){T=Math.max(T-(R.offsetHeight-T),0);}F.setStyle(R,"height",T+"px");}}},bringToTop:function(){var S=[],R=this.element;function V(Z,Y){var b=F.getStyle(Z,"zIndex"),a=F.getStyle(Y,"zIndex"),X=(!b||isNaN(b))?0:parseInt(b,10),W=(!a||isNaN(a))?0:parseInt(a,10);if(X>W){return-1;}else{if(X<W){return 1;}else{return 0;}}}function Q(Y){var X=F.hasClass(Y,B.CSS_OVERLAY),W=YAHOO.widget.Panel;if(X&&!F.isAncestor(R,Y)){if(W&&F.hasClass(Y,W.CSS_PANEL)){S[S.length]=Y.parentNode;}else{S[S.length]=Y;}}}F.getElementsBy(Q,"DIV",document.body);S.sort(V);var O=S[0],U;if(O){U=F.getStyle(O,"zIndex");if(!isNaN(U)){var T=false;if(O!=R){T=true;}else{if(S.length>1){var P=F.getStyle(S[1],"zIndex");if(!isNaN(P)&&(U==P)){T=true;}}}if(T){this.cfg.setProperty("zindex",(parseInt(U,10)+2));}}}},destroy:function(){if(this.iframe){this.iframe.parentNode.removeChild(this.iframe);}this.iframe=null;B.windowResizeEvent.unsubscribe(this.doCenterOnDOMEvent,this);B.windowScrollEvent.unsubscribe(this.doCenterOnDOMEvent,this);G.textResizeEvent.unsubscribe(this._autoFillOnHeightChange);if(this._contextTriggers){this._processTriggers(this._contextTriggers,E,this._alignOnTrigger);}B.superclass.destroy.call(this);},forceContainerRedraw:function(){var O=this;F.addClass(O.element,"yui-force-redraw");setTimeout(function(){F.removeClass(O.element,"yui-force-redraw");},0);},toString:function(){return"Overlay "+this.id;}});}());(function(){YAHOO.widget.OverlayManager=function(G){this.init(G);};var D=YAHOO.widget.Overlay,C=YAHOO.util.Event,E=YAHOO.util.Dom,B=YAHOO.util.Config,F=YAHOO.util.CustomEvent,A=YAHOO.widget.OverlayManager;A.CSS_FOCUSED="focused";A.prototype={constructor:A,overlays:null,initDefaultConfig:function(){this.cfg.addProperty("overlays",{suppressEvent:true});this.cfg.addProperty("focusevent",{value:"mousedown"});},init:function(I){this.cfg=new B(this);this.initDefaultConfig();if(I){this.cfg.applyConfig(I,true);}this.cfg.fireQueue();var H=null;this.getActive=function(){return H;};this.focus=function(J){var K=this.find(J);if(K){K.focus();}};this.remove=function(K){var M=this.find(K),J;if(M){if(H==M){H=null;}var L=(M.element===null&&M.cfg===null)?true:false;if(!L){J=E.getStyle(M.element,"zIndex");M.cfg.setProperty("zIndex",-1000,true);}this.overlays.sort(this.compareZIndexDesc);this.overlays=this.overlays.slice(0,(this.overlays.length-1));M.hideEvent.unsubscribe(M.blur);M.destroyEvent.unsubscribe(this._onOverlayDestroy,M);M.focusEvent.unsubscribe(this._onOverlayFocusHandler,M);M.blurEvent.unsubscribe(this._onOverlayBlurHandler,M);if(!L){C.removeListener(M.element,this.cfg.getProperty("focusevent"),this._onOverlayElementFocus);M.cfg.setProperty("zIndex",J,true);M.cfg.setProperty("manager",null);}if(M.focusEvent._managed){M.focusEvent=null;}if(M.blurEvent._managed){M.blurEvent=null;}if(M.focus._managed){M.focus=null;}if(M.blur._managed){M.blur=null;}}};this.blurAll=function(){var K=this.overlays.length,J;if(K>0){J=K-1;do{this.overlays[J].blur();}while(J--);}};this._manageBlur=function(J){var K=false;if(H==J){E.removeClass(H.element,A.CSS_FOCUSED);H=null;K=true;}return K;};this._manageFocus=function(J){var K=false;if(H!=J){if(H){H.blur();}H=J;this.bringToTop(H);E.addClass(H.element,A.CSS_FOCUSED);K=true;}return K;};var G=this.cfg.getProperty("overlays");if(!this.overlays){this.overlays=[];}if(G){this.register(G);this.overlays.sort(this.compareZIndexDesc);}},_onOverlayElementFocus:function(I){var G=C.getTarget(I),H=this.close;if(H&&(G==H||E.isAncestor(H,G))){this.blur();}else{this.focus();}},_onOverlayDestroy:function(H,G,I){this.remove(I);},_onOverlayFocusHandler:function(H,G,I){this._manageFocus(I);},_onOverlayBlurHandler:function(H,G,I){this._manageBlur(I);},_bindFocus:function(G){var H=this;if(!G.focusEvent){G.focusEvent=G.createEvent("focus");G.focusEvent.signature=F.LIST;G.focusEvent._managed=true;}else{G.focusEvent.subscribe(H._onOverlayFocusHandler,G,H);}if(!G.focus){C.on(G.element,H.cfg.getProperty("focusevent"),H._onOverlayElementFocus,null,G);G.focus=function(){if(H._manageFocus(this)){if(this.cfg.getProperty("visible")&&this.focusFirst){this.focusFirst();}this.focusEvent.fire();}};G.focus._managed=true;}},_bindBlur:function(G){var H=this;if(!G.blurEvent){G.blurEvent=G.createEvent("blur");G.blurEvent.signature=F.LIST;G.focusEvent._managed=true;}else{G.blurEvent.subscribe(H._onOverlayBlurHandler,G,H);}if(!G.blur){G.blur=function(){if(H._manageBlur(this)){this.blurEvent.fire();}};G.blur._managed=true;}G.hideEvent.subscribe(G.blur);},_bindDestroy:function(G){var H=this;G.destroyEvent.subscribe(H._onOverlayDestroy,G,H);},_syncZIndex:function(G){var H=E.getStyle(G.element,"zIndex");if(!isNaN(H)){G.cfg.setProperty("zIndex",parseInt(H,10));}else{G.cfg.setProperty("zIndex",0);}},register:function(G){var J=false,H,I;if(G instanceof D){G.cfg.addProperty("manager",{value:this});this._bindFocus(G);this._bindBlur(G);this._bindDestroy(G);
this._syncZIndex(G);this.overlays.push(G);this.bringToTop(G);J=true;}else{if(G instanceof Array){for(H=0,I=G.length;H<I;H++){J=this.register(G[H])||J;}}}return J;},bringToTop:function(M){var I=this.find(M),L,G,J;if(I){J=this.overlays;J.sort(this.compareZIndexDesc);G=J[0];if(G){L=E.getStyle(G.element,"zIndex");if(!isNaN(L)){var K=false;if(G!==I){K=true;}else{if(J.length>1){var H=E.getStyle(J[1].element,"zIndex");if(!isNaN(H)&&(L==H)){K=true;}}}if(K){I.cfg.setProperty("zindex",(parseInt(L,10)+2));}}J.sort(this.compareZIndexDesc);}}},find:function(G){var K=G instanceof D,I=this.overlays,M=I.length,J=null,L,H;if(K||typeof G=="string"){for(H=M-1;H>=0;H--){L=I[H];if((K&&(L===G))||(L.id==G)){J=L;break;}}}return J;},compareZIndexDesc:function(J,I){var H=(J.cfg)?J.cfg.getProperty("zIndex"):null,G=(I.cfg)?I.cfg.getProperty("zIndex"):null;if(H===null&&G===null){return 0;}else{if(H===null){return 1;}else{if(G===null){return-1;}else{if(H>G){return-1;}else{if(H<G){return 1;}else{return 0;}}}}}},showAll:function(){var H=this.overlays,I=H.length,G;for(G=I-1;G>=0;G--){H[G].show();}},hideAll:function(){var H=this.overlays,I=H.length,G;for(G=I-1;G>=0;G--){H[G].hide();}},toString:function(){return"OverlayManager";}};}());(function(){YAHOO.widget.ContainerEffect=function(E,H,G,D,F){if(!F){F=YAHOO.util.Anim;}this.overlay=E;this.attrIn=H;this.attrOut=G;this.targetElement=D||E.element;this.animClass=F;};var B=YAHOO.util.Dom,C=YAHOO.util.CustomEvent,A=YAHOO.widget.ContainerEffect;A.FADE=function(D,F){var G=YAHOO.util.Easing,I={attributes:{opacity:{from:0,to:1}},duration:F,method:G.easeIn},E={attributes:{opacity:{to:0}},duration:F,method:G.easeOut},H=new A(D,I,E,D.element);H.handleUnderlayStart=function(){var K=this.overlay.underlay;if(K&&YAHOO.env.ua.ie){var J=(K.filters&&K.filters.length>0);if(J){B.addClass(D.element,"yui-effect-fade");}}};H.handleUnderlayComplete=function(){var J=this.overlay.underlay;if(J&&YAHOO.env.ua.ie){B.removeClass(D.element,"yui-effect-fade");}};H.handleStartAnimateIn=function(K,J,L){B.addClass(L.overlay.element,"hide-select");if(!L.overlay.underlay){L.overlay.cfg.refireEvent("underlay");}L.handleUnderlayStart();L.overlay._setDomVisibility(true);B.setStyle(L.overlay.element,"opacity",0);};H.handleCompleteAnimateIn=function(K,J,L){B.removeClass(L.overlay.element,"hide-select");if(L.overlay.element.style.filter){L.overlay.element.style.filter=null;}L.handleUnderlayComplete();L.overlay.cfg.refireEvent("iframe");L.animateInCompleteEvent.fire();};H.handleStartAnimateOut=function(K,J,L){B.addClass(L.overlay.element,"hide-select");L.handleUnderlayStart();};H.handleCompleteAnimateOut=function(K,J,L){B.removeClass(L.overlay.element,"hide-select");if(L.overlay.element.style.filter){L.overlay.element.style.filter=null;}L.overlay._setDomVisibility(false);B.setStyle(L.overlay.element,"opacity",1);L.handleUnderlayComplete();L.overlay.cfg.refireEvent("iframe");L.animateOutCompleteEvent.fire();};H.init();return H;};A.SLIDE=function(F,D){var I=YAHOO.util.Easing,L=F.cfg.getProperty("x")||B.getX(F.element),K=F.cfg.getProperty("y")||B.getY(F.element),M=B.getClientWidth(),H=F.element.offsetWidth,J={attributes:{points:{to:[L,K]}},duration:D,method:I.easeIn},E={attributes:{points:{to:[(M+25),K]}},duration:D,method:I.easeOut},G=new A(F,J,E,F.element,YAHOO.util.Motion);G.handleStartAnimateIn=function(O,N,P){P.overlay.element.style.left=((-25)-H)+"px";P.overlay.element.style.top=K+"px";};G.handleTweenAnimateIn=function(Q,P,R){var S=B.getXY(R.overlay.element),O=S[0],N=S[1];if(B.getStyle(R.overlay.element,"visibility")=="hidden"&&O<L){R.overlay._setDomVisibility(true);}R.overlay.cfg.setProperty("xy",[O,N],true);R.overlay.cfg.refireEvent("iframe");};G.handleCompleteAnimateIn=function(O,N,P){P.overlay.cfg.setProperty("xy",[L,K],true);P.startX=L;P.startY=K;P.overlay.cfg.refireEvent("iframe");P.animateInCompleteEvent.fire();};G.handleStartAnimateOut=function(O,N,R){var P=B.getViewportWidth(),S=B.getXY(R.overlay.element),Q=S[1];R.animOut.attributes.points.to=[(P+25),Q];};G.handleTweenAnimateOut=function(P,O,Q){var S=B.getXY(Q.overlay.element),N=S[0],R=S[1];Q.overlay.cfg.setProperty("xy",[N,R],true);Q.overlay.cfg.refireEvent("iframe");};G.handleCompleteAnimateOut=function(O,N,P){P.overlay._setDomVisibility(false);P.overlay.cfg.setProperty("xy",[L,K]);P.animateOutCompleteEvent.fire();};G.init();return G;};A.prototype={init:function(){this.beforeAnimateInEvent=this.createEvent("beforeAnimateIn");this.beforeAnimateInEvent.signature=C.LIST;this.beforeAnimateOutEvent=this.createEvent("beforeAnimateOut");this.beforeAnimateOutEvent.signature=C.LIST;this.animateInCompleteEvent=this.createEvent("animateInComplete");this.animateInCompleteEvent.signature=C.LIST;this.animateOutCompleteEvent=this.createEvent("animateOutComplete");this.animateOutCompleteEvent.signature=C.LIST;this.animIn=new this.animClass(this.targetElement,this.attrIn.attributes,this.attrIn.duration,this.attrIn.method);this.animIn.onStart.subscribe(this.handleStartAnimateIn,this);this.animIn.onTween.subscribe(this.handleTweenAnimateIn,this);this.animIn.onComplete.subscribe(this.handleCompleteAnimateIn,this);this.animOut=new this.animClass(this.targetElement,this.attrOut.attributes,this.attrOut.duration,this.attrOut.method);this.animOut.onStart.subscribe(this.handleStartAnimateOut,this);this.animOut.onTween.subscribe(this.handleTweenAnimateOut,this);this.animOut.onComplete.subscribe(this.handleCompleteAnimateOut,this);},animateIn:function(){this.beforeAnimateInEvent.fire();this.animIn.animate();},animateOut:function(){this.beforeAnimateOutEvent.fire();this.animOut.animate();},handleStartAnimateIn:function(E,D,F){},handleTweenAnimateIn:function(E,D,F){},handleCompleteAnimateIn:function(E,D,F){},handleStartAnimateOut:function(E,D,F){},handleTweenAnimateOut:function(E,D,F){},handleCompleteAnimateOut:function(E,D,F){},toString:function(){var D="ContainerEffect";if(this.overlay){D+=" ["+this.overlay.toString()+"]";}return D;}};YAHOO.lang.augmentProto(A,YAHOO.util.EventProvider);
})();YAHOO.register("containercore",YAHOO.widget.Module,{version:"2.8.0r4",build:"2449"});
(function(){var K=YAHOO.env.ua,C=YAHOO.util.Dom,Z=YAHOO.util.Event,H=YAHOO.lang,T="DIV",P="hd",M="bd",O="ft",X="LI",A="disabled",D="mouseover",F="mouseout",U="mousedown",G="mouseup",V="click",B="keydown",N="keyup",I="keypress",L="clicktohide",S="position",Q="dynamic",Y="showdelay",J="selected",E="visible",W="UL",R="MenuManager";YAHOO.widget.MenuManager=function(){var l=false,d={},o={},h={},c={"click":"clickEvent","mousedown":"mouseDownEvent","mouseup":"mouseUpEvent","mouseover":"mouseOverEvent","mouseout":"mouseOutEvent","keydown":"keyDownEvent","keyup":"keyUpEvent","keypress":"keyPressEvent","focus":"focusEvent","focusin":"focusEvent","blur":"blurEvent","focusout":"blurEvent"},i=null;function b(r){var p,q;if(r&&r.tagName){switch(r.tagName.toUpperCase()){case T:p=r.parentNode;if((C.hasClass(r,P)||C.hasClass(r,M)||C.hasClass(r,O))&&p&&p.tagName&&p.tagName.toUpperCase()==T){q=p;}else{q=r;}break;case X:q=r;break;default:p=r.parentNode;if(p){q=b(p);}break;}}return q;}function e(t){var p=Z.getTarget(t),q=b(p),u=true,w=t.type,x,r,s,z,y;if(q){r=q.tagName.toUpperCase();if(r==X){s=q.id;if(s&&h[s]){z=h[s];y=z.parent;}}else{if(r==T){if(q.id){y=d[q.id];}}}}if(y){x=c[w];if(w=="click"&&(K.gecko&&y.platform!="mac")&&t.button>0){u=false;}if(u&&z&&!z.cfg.getProperty(A)){z[x].fire(t);}if(u){y[x].fire(t,z);}}else{if(w==U){for(var v in o){if(H.hasOwnProperty(o,v)){y=o[v];if(y.cfg.getProperty(L)&&!(y instanceof YAHOO.widget.MenuBar)&&y.cfg.getProperty(S)==Q){y.hide();if(K.ie&&p.focus){p.setActive();}}else{if(y.cfg.getProperty(Y)>0){y._cancelShowDelay();}if(y.activeItem){y.activeItem.blur();y.activeItem.cfg.setProperty(J,false);y.activeItem=null;}}}}}}}function n(q,p,r){if(d[r.id]){this.removeMenu(r);}}function k(q,p){var r=p[1];if(r){i=r;}}function f(q,p){i=null;}function a(r,q){var p=q[0],s=this.id;if(p){o[s]=this;}else{if(o[s]){delete o[s];}}}function j(q,p){m(this);}function m(q){var p=q.id;if(p&&h[p]){if(i==q){i=null;}delete h[p];q.destroyEvent.unsubscribe(j);}}function g(q,p){var s=p[0],r;if(s instanceof YAHOO.widget.MenuItem){r=s.id;if(!h[r]){h[r]=s;s.destroyEvent.subscribe(j);}}}return{addMenu:function(q){var p;if(q instanceof YAHOO.widget.Menu&&q.id&&!d[q.id]){d[q.id]=q;if(!l){p=document;Z.on(p,D,e,this,true);Z.on(p,F,e,this,true);Z.on(p,U,e,this,true);Z.on(p,G,e,this,true);Z.on(p,V,e,this,true);Z.on(p,B,e,this,true);Z.on(p,N,e,this,true);Z.on(p,I,e,this,true);Z.onFocus(p,e,this,true);Z.onBlur(p,e,this,true);l=true;}q.cfg.subscribeToConfigEvent(E,a);q.destroyEvent.subscribe(n,q,this);q.itemAddedEvent.subscribe(g);q.focusEvent.subscribe(k);q.blurEvent.subscribe(f);}},removeMenu:function(s){var q,p,r;if(s){q=s.id;if((q in d)&&(d[q]==s)){p=s.getItems();if(p&&p.length>0){r=p.length-1;do{m(p[r]);}while(r--);}delete d[q];if((q in o)&&(o[q]==s)){delete o[q];}if(s.cfg){s.cfg.unsubscribeFromConfigEvent(E,a);}s.destroyEvent.unsubscribe(n,s);s.itemAddedEvent.unsubscribe(g);s.focusEvent.unsubscribe(k);s.blurEvent.unsubscribe(f);}}},hideVisible:function(){var p;for(var q in o){if(H.hasOwnProperty(o,q)){p=o[q];if(!(p instanceof YAHOO.widget.MenuBar)&&p.cfg.getProperty(S)==Q){p.hide();}}}},getVisible:function(){return o;},getMenus:function(){return d;},getMenu:function(q){var p;if(q in d){p=d[q];}return p;},getMenuItem:function(q){var p;if(q in h){p=h[q];}return p;},getMenuItemGroup:function(t){var q=C.get(t),p,v,u,r,s;if(q&&q.tagName&&q.tagName.toUpperCase()==W){v=q.firstChild;if(v){p=[];do{r=v.id;if(r){u=this.getMenuItem(r);if(u){p[p.length]=u;}}}while((v=v.nextSibling));if(p.length>0){s=p;}}}return s;},getFocusedMenuItem:function(){return i;},getFocusedMenu:function(){var p;if(i){p=i.parent.getRoot();}return p;},toString:function(){return R;}};}();})();(function(){var AM=YAHOO.lang,Aq="Menu",G="DIV",K="div",Am="id",AH="SELECT",e="xy",R="y",Ax="UL",L="ul",AJ="first-of-type",k="LI",h="OPTGROUP",Az="OPTION",Ah="disabled",AY="none",y="selected",At="groupindex",i="index",O="submenu",Au="visible",AX="hidedelay",Ac="position",AD="dynamic",C="static",An=AD+","+C,Q="url",M="#",V="target",AU="maxheight",T="topscrollbar",x="bottomscrollbar",d="_",P=T+d+Ah,E=x+d+Ah,b="mousemove",Av="showdelay",c="submenuhidedelay",AF="iframe",w="constraintoviewport",A4="preventcontextoverlap",AO="submenualignment",Z="autosubmenudisplay",AC="clicktohide",g="container",j="scrollincrement",Aj="minscrollheight",A2="classname",Ag="shadow",Ar="keepopen",A0="hd",D="hastitle",p="context",u="",Ak="mousedown",Ae="keydown",Ao="height",U="width",AQ="px",Ay="effect",AE="monitorresize",AW="display",AV="block",J="visibility",z="absolute",AS="zindex",l="yui-menu-body-scrolled",AK="&#32;",A1=" ",Ai="mouseover",H="mouseout",AR="itemAdded",n="itemRemoved",AL="hidden",s="yui-menu-shadow",AG=s+"-visible",m=s+A1+AG;YAHOO.widget.Menu=function(A6,A5){if(A5){this.parent=A5.parent;this.lazyLoad=A5.lazyLoad||A5.lazyload;this.itemData=A5.itemData||A5.itemdata;}YAHOO.widget.Menu.superclass.constructor.call(this,A6,A5);};function B(A6){var A5=false;if(AM.isString(A6)){A5=(An.indexOf((A6.toLowerCase()))!=-1);}return A5;}var f=YAHOO.util.Dom,AA=YAHOO.util.Event,Aw=YAHOO.widget.Module,AB=YAHOO.widget.Overlay,r=YAHOO.widget.Menu,A3=YAHOO.widget.MenuManager,F=YAHOO.util.CustomEvent,As=YAHOO.env.ua,Ap,AT=false,Ad,Ab=[["mouseOverEvent",Ai],["mouseOutEvent",H],["mouseDownEvent",Ak],["mouseUpEvent","mouseup"],["clickEvent","click"],["keyPressEvent","keypress"],["keyDownEvent",Ae],["keyUpEvent","keyup"],["focusEvent","focus"],["blurEvent","blur"],["itemAddedEvent",AR],["itemRemovedEvent",n]],AZ={key:Au,value:false,validator:AM.isBoolean},AP={key:w,value:true,validator:AM.isBoolean,supercedes:[AF,"x",R,e]},AI={key:A4,value:true,validator:AM.isBoolean,supercedes:[w]},S={key:Ac,value:AD,validator:B,supercedes:[Au,AF]},A={key:AO,value:["tl","tr"]},t={key:Z,value:true,validator:AM.isBoolean,suppressEvent:true},Y={key:Av,value:250,validator:AM.isNumber,suppressEvent:true},q={key:AX,value:0,validator:AM.isNumber,suppressEvent:true},v={key:c,value:250,validator:AM.isNumber,suppressEvent:true},o={key:AC,value:true,validator:AM.isBoolean,suppressEvent:true},AN={key:g,suppressEvent:true},Af={key:j,value:1,validator:AM.isNumber,supercedes:[AU],suppressEvent:true},N={key:Aj,value:90,validator:AM.isNumber,supercedes:[AU],suppressEvent:true},X={key:AU,value:0,validator:AM.isNumber,supercedes:[AF],suppressEvent:true},W={key:A2,value:null,validator:AM.isString,suppressEvent:true},a={key:Ah,value:false,validator:AM.isBoolean,suppressEvent:true},I={key:Ag,value:true,validator:AM.isBoolean,suppressEvent:true,supercedes:[Au]},Al={key:Ar,value:false,validator:AM.isBoolean};
function Aa(A5){Ad=AA.getTarget(A5);}YAHOO.lang.extend(r,AB,{CSS_CLASS_NAME:"yuimenu",ITEM_TYPE:null,GROUP_TITLE_TAG_NAME:"h6",OFF_SCREEN_POSITION:"-999em",_useHideDelay:false,_bHandledMouseOverEvent:false,_bHandledMouseOutEvent:false,_aGroupTitleElements:null,_aItemGroups:null,_aListElements:null,_nCurrentMouseX:0,_bStopMouseEventHandlers:false,_sClassName:null,lazyLoad:false,itemData:null,activeItem:null,parent:null,srcElement:null,init:function(A7,A6){this._aItemGroups=[];this._aListElements=[];this._aGroupTitleElements=[];if(!this.ITEM_TYPE){this.ITEM_TYPE=YAHOO.widget.MenuItem;}var A5;if(AM.isString(A7)){A5=f.get(A7);}else{if(A7.tagName){A5=A7;}}if(A5&&A5.tagName){switch(A5.tagName.toUpperCase()){case G:this.srcElement=A5;if(!A5.id){A5.setAttribute(Am,f.generateId());}r.superclass.init.call(this,A5);this.beforeInitEvent.fire(r);break;case AH:this.srcElement=A5;r.superclass.init.call(this,f.generateId());this.beforeInitEvent.fire(r);break;}}else{r.superclass.init.call(this,A7);this.beforeInitEvent.fire(r);}if(this.element){f.addClass(this.element,this.CSS_CLASS_NAME);this.initEvent.subscribe(this._onInit);this.beforeRenderEvent.subscribe(this._onBeforeRender);this.renderEvent.subscribe(this._onRender);this.beforeShowEvent.subscribe(this._onBeforeShow);this.hideEvent.subscribe(this._onHide);this.showEvent.subscribe(this._onShow);this.beforeHideEvent.subscribe(this._onBeforeHide);this.mouseOverEvent.subscribe(this._onMouseOver);this.mouseOutEvent.subscribe(this._onMouseOut);this.clickEvent.subscribe(this._onClick);this.keyDownEvent.subscribe(this._onKeyDown);this.keyPressEvent.subscribe(this._onKeyPress);this.blurEvent.subscribe(this._onBlur);if(!AT){AA.onFocus(document,Aa);AT=true;}if((As.gecko&&As.gecko<1.9)||As.webkit){this.cfg.subscribeToConfigEvent(R,this._onYChange);}if(A6){this.cfg.applyConfig(A6,true);}A3.addMenu(this);this.initEvent.fire(r);}},_initSubTree:function(){var A6=this.srcElement,A5,A8,BB,BC,BA,A9,A7;if(A6){A5=(A6.tagName&&A6.tagName.toUpperCase());if(A5==G){BC=this.body.firstChild;if(BC){A8=0;BB=this.GROUP_TITLE_TAG_NAME.toUpperCase();do{if(BC&&BC.tagName){switch(BC.tagName.toUpperCase()){case BB:this._aGroupTitleElements[A8]=BC;break;case Ax:this._aListElements[A8]=BC;this._aItemGroups[A8]=[];A8++;break;}}}while((BC=BC.nextSibling));if(this._aListElements[0]){f.addClass(this._aListElements[0],AJ);}}}BC=null;if(A5){switch(A5){case G:BA=this._aListElements;A9=BA.length;if(A9>0){A7=A9-1;do{BC=BA[A7].firstChild;if(BC){do{if(BC&&BC.tagName&&BC.tagName.toUpperCase()==k){this.addItem(new this.ITEM_TYPE(BC,{parent:this}),A7);}}while((BC=BC.nextSibling));}}while(A7--);}break;case AH:BC=A6.firstChild;do{if(BC&&BC.tagName){switch(BC.tagName.toUpperCase()){case h:case Az:this.addItem(new this.ITEM_TYPE(BC,{parent:this}));break;}}}while((BC=BC.nextSibling));break;}}}},_getFirstEnabledItem:function(){var A5=this.getItems(),A9=A5.length,A8,A7;for(var A6=0;A6<A9;A6++){A8=A5[A6];if(A8&&!A8.cfg.getProperty(Ah)&&A8.element.style.display!=AY){A7=A8;break;}}return A7;},_addItemToGroup:function(BA,BB,BF){var BD,BG,A8,BE,A9,A6,A7,BC;function A5(BH,BI){return(BH[BI]||A5(BH,(BI+1)));}if(BB instanceof this.ITEM_TYPE){BD=BB;BD.parent=this;}else{if(AM.isString(BB)){BD=new this.ITEM_TYPE(BB,{parent:this});}else{if(AM.isObject(BB)){BB.parent=this;BD=new this.ITEM_TYPE(BB.text,BB);}}}if(BD){if(BD.cfg.getProperty(y)){this.activeItem=BD;}BG=AM.isNumber(BA)?BA:0;A8=this._getItemGroup(BG);if(!A8){A8=this._createItemGroup(BG);}if(AM.isNumber(BF)){A9=(BF>=A8.length);if(A8[BF]){A8.splice(BF,0,BD);}else{A8[BF]=BD;}BE=A8[BF];if(BE){if(A9&&(!BE.element.parentNode||BE.element.parentNode.nodeType==11)){this._aListElements[BG].appendChild(BE.element);}else{A6=A5(A8,(BF+1));if(A6&&(!BE.element.parentNode||BE.element.parentNode.nodeType==11)){this._aListElements[BG].insertBefore(BE.element,A6.element);}}BE.parent=this;this._subscribeToItemEvents(BE);this._configureSubmenu(BE);this._updateItemProperties(BG);this.itemAddedEvent.fire(BE);this.changeContentEvent.fire();BC=BE;}}else{A7=A8.length;A8[A7]=BD;BE=A8[A7];if(BE){if(!f.isAncestor(this._aListElements[BG],BE.element)){this._aListElements[BG].appendChild(BE.element);}BE.element.setAttribute(At,BG);BE.element.setAttribute(i,A7);BE.parent=this;BE.index=A7;BE.groupIndex=BG;this._subscribeToItemEvents(BE);this._configureSubmenu(BE);if(A7===0){f.addClass(BE.element,AJ);}this.itemAddedEvent.fire(BE);this.changeContentEvent.fire();BC=BE;}}}return BC;},_removeItemFromGroupByIndex:function(A8,A6){var A7=AM.isNumber(A8)?A8:0,A9=this._getItemGroup(A7),BB,BA,A5;if(A9){BB=A9.splice(A6,1);BA=BB[0];if(BA){this._updateItemProperties(A7);if(A9.length===0){A5=this._aListElements[A7];if(this.body&&A5){this.body.removeChild(A5);}this._aItemGroups.splice(A7,1);this._aListElements.splice(A7,1);A5=this._aListElements[0];if(A5){f.addClass(A5,AJ);}}this.itemRemovedEvent.fire(BA);this.changeContentEvent.fire();}}return BA;},_removeItemFromGroupByValue:function(A8,A5){var BA=this._getItemGroup(A8),BB,A9,A7,A6;if(BA){BB=BA.length;A9=-1;if(BB>0){A6=BB-1;do{if(BA[A6]==A5){A9=A6;break;}}while(A6--);if(A9>-1){A7=this._removeItemFromGroupByIndex(A8,A9);}}}return A7;},_updateItemProperties:function(A6){var A7=this._getItemGroup(A6),BA=A7.length,A9,A8,A5;if(BA>0){A5=BA-1;do{A9=A7[A5];if(A9){A8=A9.element;A9.index=A5;A9.groupIndex=A6;A8.setAttribute(At,A6);A8.setAttribute(i,A5);f.removeClass(A8,AJ);}}while(A5--);if(A8){f.addClass(A8,AJ);}}},_createItemGroup:function(A7){var A5,A6;if(!this._aItemGroups[A7]){this._aItemGroups[A7]=[];A5=document.createElement(L);this._aListElements[A7]=A5;A6=this._aItemGroups[A7];}return A6;},_getItemGroup:function(A7){var A5=AM.isNumber(A7)?A7:0,A8=this._aItemGroups,A6;if(A5 in A8){A6=A8[A5];}return A6;},_configureSubmenu:function(A5){var A6=A5.cfg.getProperty(O);if(A6){this.cfg.configChangedEvent.subscribe(this._onParentMenuConfigChange,A6,true);this.renderEvent.subscribe(this._onParentMenuRender,A6,true);}},_subscribeToItemEvents:function(A5){A5.destroyEvent.subscribe(this._onMenuItemDestroy,A5,this);
A5.cfg.configChangedEvent.subscribe(this._onMenuItemConfigChange,A5,this);},_onVisibleChange:function(A7,A6){var A5=A6[0];if(A5){f.addClass(this.element,Au);}else{f.removeClass(this.element,Au);}},_cancelHideDelay:function(){var A5=this.getRoot()._hideDelayTimer;if(A5){A5.cancel();}},_execHideDelay:function(){this._cancelHideDelay();var A5=this.getRoot();A5._hideDelayTimer=AM.later(A5.cfg.getProperty(AX),this,function(){if(A5.activeItem){if(A5.hasFocus()){A5.activeItem.focus();}A5.clearActiveItem();}if(A5==this&&!(this instanceof YAHOO.widget.MenuBar)&&this.cfg.getProperty(Ac)==AD){this.hide();}});},_cancelShowDelay:function(){var A5=this.getRoot()._showDelayTimer;if(A5){A5.cancel();}},_execSubmenuHideDelay:function(A7,A6,A5){A7._submenuHideDelayTimer=AM.later(50,this,function(){if(this._nCurrentMouseX>(A6+10)){A7._submenuHideDelayTimer=AM.later(A5,A7,function(){this.hide();});}else{A7.hide();}});},_disableScrollHeader:function(){if(!this._bHeaderDisabled){f.addClass(this.header,P);this._bHeaderDisabled=true;}},_disableScrollFooter:function(){if(!this._bFooterDisabled){f.addClass(this.footer,E);this._bFooterDisabled=true;}},_enableScrollHeader:function(){if(this._bHeaderDisabled){f.removeClass(this.header,P);this._bHeaderDisabled=false;}},_enableScrollFooter:function(){if(this._bFooterDisabled){f.removeClass(this.footer,E);this._bFooterDisabled=false;}},_onMouseOver:function(BH,BA){var BI=BA[0],BE=BA[1],A5=AA.getTarget(BI),A9=this.getRoot(),BG=this._submenuHideDelayTimer,A6,A8,BD,A7,BC,BB;var BF=function(){if(this.parent.cfg.getProperty(y)){this.show();}};if(!this._bStopMouseEventHandlers){if(!this._bHandledMouseOverEvent&&(A5==this.element||f.isAncestor(this.element,A5))){if(this._useHideDelay){this._cancelHideDelay();}this._nCurrentMouseX=0;AA.on(this.element,b,this._onMouseMove,this,true);if(!(BE&&f.isAncestor(BE.element,AA.getRelatedTarget(BI)))){this.clearActiveItem();}if(this.parent&&BG){BG.cancel();this.parent.cfg.setProperty(y,true);A6=this.parent.parent;A6._bHandledMouseOutEvent=true;A6._bHandledMouseOverEvent=false;}this._bHandledMouseOverEvent=true;this._bHandledMouseOutEvent=false;}if(BE&&!BE.handledMouseOverEvent&&!BE.cfg.getProperty(Ah)&&(A5==BE.element||f.isAncestor(BE.element,A5))){A8=this.cfg.getProperty(Av);BD=(A8>0);if(BD){this._cancelShowDelay();}A7=this.activeItem;if(A7){A7.cfg.setProperty(y,false);}BC=BE.cfg;BC.setProperty(y,true);if(this.hasFocus()||A9._hasFocus){BE.focus();A9._hasFocus=false;}if(this.cfg.getProperty(Z)){BB=BC.getProperty(O);if(BB){if(BD){A9._showDelayTimer=AM.later(A9.cfg.getProperty(Av),BB,BF);}else{BB.show();}}}BE.handledMouseOverEvent=true;BE.handledMouseOutEvent=false;}}},_onMouseOut:function(BD,A7){var BE=A7[0],BB=A7[1],A8=AA.getRelatedTarget(BE),BC=false,BA,A9,A5,A6;if(!this._bStopMouseEventHandlers){if(BB&&!BB.cfg.getProperty(Ah)){BA=BB.cfg;A9=BA.getProperty(O);if(A9&&(A8==A9.element||f.isAncestor(A9.element,A8))){BC=true;}if(!BB.handledMouseOutEvent&&((A8!=BB.element&&!f.isAncestor(BB.element,A8))||BC)){if(!BC){BB.cfg.setProperty(y,false);if(A9){A5=this.cfg.getProperty(c);A6=this.cfg.getProperty(Av);if(!(this instanceof YAHOO.widget.MenuBar)&&A5>0&&A6>=A5){this._execSubmenuHideDelay(A9,AA.getPageX(BE),A5);}else{A9.hide();}}}BB.handledMouseOutEvent=true;BB.handledMouseOverEvent=false;}}if(!this._bHandledMouseOutEvent&&((A8!=this.element&&!f.isAncestor(this.element,A8))||BC)){if(this._useHideDelay){this._execHideDelay();}AA.removeListener(this.element,b,this._onMouseMove);this._nCurrentMouseX=AA.getPageX(BE);this._bHandledMouseOutEvent=true;this._bHandledMouseOverEvent=false;}}},_onMouseMove:function(A6,A5){if(!this._bStopMouseEventHandlers){this._nCurrentMouseX=AA.getPageX(A6);}},_onClick:function(BG,A7){var BH=A7[0],BB=A7[1],BD=false,A9,BE,A6,A5,BA,BC,BF;var A8=function(){A6=this.getRoot();if(A6 instanceof YAHOO.widget.MenuBar||A6.cfg.getProperty(Ac)==C){A6.clearActiveItem();}else{A6.hide();}};if(BB){if(BB.cfg.getProperty(Ah)){AA.preventDefault(BH);A8.call(this);}else{A9=BB.cfg.getProperty(O);BA=BB.cfg.getProperty(Q);if(BA){BC=BA.indexOf(M);BF=BA.length;if(BC!=-1){BA=BA.substr(BC,BF);BF=BA.length;if(BF>1){A5=BA.substr(1,BF);BE=YAHOO.widget.MenuManager.getMenu(A5);if(BE){BD=(this.getRoot()===BE.getRoot());}}else{if(BF===1){BD=true;}}}}if(BD&&!BB.cfg.getProperty(V)){AA.preventDefault(BH);if(As.webkit){BB.focus();}else{BB.focusEvent.fire();}}if(!A9&&!this.cfg.getProperty(Ar)){A8.call(this);}}}},_onKeyDown:function(BK,BE){var BH=BE[0],BG=BE[1],BD,BI,A6,BA,BL,A5,BO,A9,BJ,A8,BF,BN,BB,BC;if(this._useHideDelay){this._cancelHideDelay();}function A7(){this._bStopMouseEventHandlers=true;AM.later(10,this,function(){this._bStopMouseEventHandlers=false;});}if(BG&&!BG.cfg.getProperty(Ah)){BI=BG.cfg;A6=this.parent;switch(BH.keyCode){case 38:case 40:BL=(BH.keyCode==38)?BG.getPreviousEnabledSibling():BG.getNextEnabledSibling();if(BL){this.clearActiveItem();BL.cfg.setProperty(y,true);BL.focus();if(this.cfg.getProperty(AU)>0){A5=this.body;BO=A5.scrollTop;A9=A5.offsetHeight;BJ=this.getItems();A8=BJ.length-1;BF=BL.element.offsetTop;if(BH.keyCode==40){if(BF>=(A9+BO)){A5.scrollTop=BF-A9;}else{if(BF<=BO){A5.scrollTop=0;}}if(BL==BJ[A8]){A5.scrollTop=BL.element.offsetTop;}}else{if(BF<=BO){A5.scrollTop=BF-BL.element.offsetHeight;}else{if(BF>=(BO+A9)){A5.scrollTop=BF;}}if(BL==BJ[0]){A5.scrollTop=0;}}BO=A5.scrollTop;BN=A5.scrollHeight-A5.offsetHeight;if(BO===0){this._disableScrollHeader();this._enableScrollFooter();}else{if(BO==BN){this._enableScrollHeader();this._disableScrollFooter();}else{this._enableScrollHeader();this._enableScrollFooter();}}}}AA.preventDefault(BH);A7();break;case 39:BD=BI.getProperty(O);if(BD){if(!BI.getProperty(y)){BI.setProperty(y,true);}BD.show();BD.setInitialFocus();BD.setInitialSelection();}else{BA=this.getRoot();if(BA instanceof YAHOO.widget.MenuBar){BL=BA.activeItem.getNextEnabledSibling();if(BL){BA.clearActiveItem();BL.cfg.setProperty(y,true);BD=BL.cfg.getProperty(O);if(BD){BD.show();BD.setInitialFocus();}else{BL.focus();}}}}AA.preventDefault(BH);
A7();break;case 37:if(A6){BB=A6.parent;if(BB instanceof YAHOO.widget.MenuBar){BL=BB.activeItem.getPreviousEnabledSibling();if(BL){BB.clearActiveItem();BL.cfg.setProperty(y,true);BD=BL.cfg.getProperty(O);if(BD){BD.show();BD.setInitialFocus();}else{BL.focus();}}}else{this.hide();A6.focus();}}AA.preventDefault(BH);A7();break;}}if(BH.keyCode==27){if(this.cfg.getProperty(Ac)==AD){this.hide();if(this.parent){this.parent.focus();}else{BC=this._focusedElement;if(BC&&BC.focus){try{BC.focus();}catch(BM){}}}}else{if(this.activeItem){BD=this.activeItem.cfg.getProperty(O);if(BD&&BD.cfg.getProperty(Au)){BD.hide();this.activeItem.focus();}else{this.activeItem.blur();this.activeItem.cfg.setProperty(y,false);}}}AA.preventDefault(BH);}},_onKeyPress:function(A7,A6){var A5=A6[0];if(A5.keyCode==40||A5.keyCode==38){AA.preventDefault(A5);}},_onBlur:function(A6,A5){if(this._hasFocus){this._hasFocus=false;}},_onYChange:function(A6,A5){var A8=this.parent,BA,A7,A9;if(A8){BA=A8.parent.body.scrollTop;if(BA>0){A9=(this.cfg.getProperty(R)-BA);f.setY(this.element,A9);A7=this.iframe;if(A7){f.setY(A7,A9);}this.cfg.setProperty(R,A9,true);}}},_onScrollTargetMouseOver:function(BB,BE){var BD=this._bodyScrollTimer;if(BD){BD.cancel();}this._cancelHideDelay();var A7=AA.getTarget(BB),A9=this.body,A8=this.cfg.getProperty(j),A5,A6;function BC(){var BF=A9.scrollTop;if(BF<A5){A9.scrollTop=(BF+A8);this._enableScrollHeader();}else{A9.scrollTop=A5;this._bodyScrollTimer.cancel();this._disableScrollFooter();}}function BA(){var BF=A9.scrollTop;if(BF>0){A9.scrollTop=(BF-A8);this._enableScrollFooter();}else{A9.scrollTop=0;this._bodyScrollTimer.cancel();this._disableScrollHeader();}}if(f.hasClass(A7,A0)){A6=BA;}else{A5=A9.scrollHeight-A9.offsetHeight;A6=BC;}this._bodyScrollTimer=AM.later(10,this,A6,null,true);},_onScrollTargetMouseOut:function(A7,A5){var A6=this._bodyScrollTimer;if(A6){A6.cancel();}this._cancelHideDelay();},_onInit:function(A6,A5){this.cfg.subscribeToConfigEvent(Au,this._onVisibleChange);var A7=!this.parent,A8=this.lazyLoad;if(((A7&&!A8)||(A7&&(this.cfg.getProperty(Au)||this.cfg.getProperty(Ac)==C))||(!A7&&!A8))&&this.getItemGroups().length===0){if(this.srcElement){this._initSubTree();}if(this.itemData){this.addItems(this.itemData);}}else{if(A8){this.cfg.fireQueue();}}},_onBeforeRender:function(A8,A7){var A9=this.element,BC=this._aListElements.length,A6=true,BB=0,A5,BA;if(BC>0){do{A5=this._aListElements[BB];if(A5){if(A6){f.addClass(A5,AJ);A6=false;}if(!f.isAncestor(A9,A5)){this.appendToBody(A5);}BA=this._aGroupTitleElements[BB];if(BA){if(!f.isAncestor(A9,BA)){A5.parentNode.insertBefore(BA,A5);}f.addClass(A5,D);}}BB++;}while(BB<BC);}},_onRender:function(A6,A5){if(this.cfg.getProperty(Ac)==AD){if(!this.cfg.getProperty(Au)){this.positionOffScreen();}}},_onBeforeShow:function(A7,A6){var A9,BC,A8,BA=this.cfg.getProperty(g);if(this.lazyLoad&&this.getItemGroups().length===0){if(this.srcElement){this._initSubTree();}if(this.itemData){if(this.parent&&this.parent.parent&&this.parent.parent.srcElement&&this.parent.parent.srcElement.tagName.toUpperCase()==AH){A9=this.itemData.length;for(BC=0;BC<A9;BC++){if(this.itemData[BC].tagName){this.addItem((new this.ITEM_TYPE(this.itemData[BC])));}}}else{this.addItems(this.itemData);}}A8=this.srcElement;if(A8){if(A8.tagName.toUpperCase()==AH){if(f.inDocument(A8)){this.render(A8.parentNode);}else{this.render(BA);}}else{this.render();}}else{if(this.parent){this.render(this.parent.element);}else{this.render(BA);}}}var BB=this.parent,A5;if(!BB&&this.cfg.getProperty(Ac)==AD){this.cfg.refireEvent(e);}if(BB){A5=BB.parent.cfg.getProperty(AO);this.cfg.setProperty(p,[BB.element,A5[0],A5[1]]);this.align();}},getConstrainedY:function(BH){var BS=this,BO=BS.cfg.getProperty(p),BV=BS.cfg.getProperty(AU),BR,BG={"trbr":true,"tlbl":true,"bltl":true,"brtr":true},BA=(BO&&BG[BO[1]+BO[2]]),BC=BS.element,BW=BC.offsetHeight,BQ=AB.VIEWPORT_OFFSET,BL=f.getViewportHeight(),BP=f.getDocumentScrollTop(),BM=(BS.cfg.getProperty(Aj)+BQ<BL),BU,BD,BJ,BK,BF=false,BE,A7,BI=BP+BQ,A9=BP+BL-BW-BQ,A5=BH;var BB=function(){var BX;if((BS.cfg.getProperty(R)-BP)>BJ){BX=(BJ-BW);}else{BX=(BJ+BK);}BS.cfg.setProperty(R,(BX+BP),true);return BX;};var A8=function(){if((BS.cfg.getProperty(R)-BP)>BJ){return(A7-BQ);}else{return(BE-BQ);}};var BN=function(){var BX;if((BS.cfg.getProperty(R)-BP)>BJ){BX=(BJ+BK);}else{BX=(BJ-BC.offsetHeight);}BS.cfg.setProperty(R,(BX+BP),true);};var A6=function(){BS._setScrollHeight(this.cfg.getProperty(AU));BS.hideEvent.unsubscribe(A6);};var BT=function(){var Ba=A8(),BX=(BS.getItems().length>0),BZ,BY;if(BW>Ba){BZ=BX?BS.cfg.getProperty(Aj):BW;if((Ba>BZ)&&BX){BR=Ba;}else{BR=BV;}BS._setScrollHeight(BR);BS.hideEvent.subscribe(A6);BN();if(Ba<BZ){if(BF){BB();}else{BB();BF=true;BY=BT();}}}else{if(BR&&(BR!==BV)){BS._setScrollHeight(BV);BS.hideEvent.subscribe(A6);BN();}}return BY;};if(BH<BI||BH>A9){if(BM){if(BS.cfg.getProperty(A4)&&BA){BD=BO[0];BK=BD.offsetHeight;BJ=(f.getY(BD)-BP);BE=BJ;A7=(BL-(BJ+BK));BT();A5=BS.cfg.getProperty(R);}else{if(!(BS instanceof YAHOO.widget.MenuBar)&&BW>=BL){BU=(BL-(BQ*2));if(BU>BS.cfg.getProperty(Aj)){BS._setScrollHeight(BU);BS.hideEvent.subscribe(A6);BN();A5=BS.cfg.getProperty(R);}}else{if(BH<BI){A5=BI;}else{if(BH>A9){A5=A9;}}}}}else{A5=BQ+BP;}}return A5;},_onHide:function(A6,A5){if(this.cfg.getProperty(Ac)===AD){this.positionOffScreen();}},_onShow:function(BD,BB){var A5=this.parent,A7,A8,BA,A6;function A9(BF){var BE;if(BF.type==Ak||(BF.type==Ae&&BF.keyCode==27)){BE=AA.getTarget(BF);if(BE!=A7.element||!f.isAncestor(A7.element,BE)){A7.cfg.setProperty(Z,false);AA.removeListener(document,Ak,A9);AA.removeListener(document,Ae,A9);}}}function BC(BF,BE,BG){this.cfg.setProperty(U,u);this.hideEvent.unsubscribe(BC,BG);}if(A5){A7=A5.parent;if(!A7.cfg.getProperty(Z)&&(A7 instanceof YAHOO.widget.MenuBar||A7.cfg.getProperty(Ac)==C)){A7.cfg.setProperty(Z,true);AA.on(document,Ak,A9);AA.on(document,Ae,A9);}if((this.cfg.getProperty("x")<A7.cfg.getProperty("x"))&&(As.gecko&&As.gecko<1.9)&&!this.cfg.getProperty(U)){A8=this.element;
BA=A8.offsetWidth;A8.style.width=BA+AQ;A6=(BA-(A8.offsetWidth-BA))+AQ;this.cfg.setProperty(U,A6);this.hideEvent.subscribe(BC,A6);}}if(this===this.getRoot()&&this.cfg.getProperty(Ac)===AD){this._focusedElement=Ad;this.focus();}},_onBeforeHide:function(A7,A6){var A5=this.activeItem,A9=this.getRoot(),BA,A8;if(A5){BA=A5.cfg;BA.setProperty(y,false);A8=BA.getProperty(O);if(A8){A8.hide();}}if(As.ie&&this.cfg.getProperty(Ac)===AD&&this.parent){A9._hasFocus=this.hasFocus();}if(A9==this){A9.blur();}},_onParentMenuConfigChange:function(A6,A5,A9){var A7=A5[0][0],A8=A5[0][1];switch(A7){case AF:case w:case AX:case Av:case c:case AC:case Ay:case A2:case j:case AU:case Aj:case AE:case Ag:case A4:case Ar:A9.cfg.setProperty(A7,A8);break;case AO:if(!(this.parent.parent instanceof YAHOO.widget.MenuBar)){A9.cfg.setProperty(A7,A8);}break;}},_onParentMenuRender:function(A6,A5,BB){var A8=BB.parent.parent,A7=A8.cfg,A9={constraintoviewport:A7.getProperty(w),xy:[0,0],clicktohide:A7.getProperty(AC),effect:A7.getProperty(Ay),showdelay:A7.getProperty(Av),hidedelay:A7.getProperty(AX),submenuhidedelay:A7.getProperty(c),classname:A7.getProperty(A2),scrollincrement:A7.getProperty(j),maxheight:A7.getProperty(AU),minscrollheight:A7.getProperty(Aj),iframe:A7.getProperty(AF),shadow:A7.getProperty(Ag),preventcontextoverlap:A7.getProperty(A4),monitorresize:A7.getProperty(AE),keepopen:A7.getProperty(Ar)},BA;if(!(A8 instanceof YAHOO.widget.MenuBar)){A9[AO]=A7.getProperty(AO);}BB.cfg.applyConfig(A9);if(!this.lazyLoad){BA=this.parent.element;if(this.element.parentNode==BA){this.render();}else{this.render(BA);}}},_onMenuItemDestroy:function(A7,A6,A5){this._removeItemFromGroupByValue(A5.groupIndex,A5);},_onMenuItemConfigChange:function(A7,A6,A5){var A9=A6[0][0],BA=A6[0][1],A8;switch(A9){case y:if(BA===true){this.activeItem=A5;}break;case O:A8=A6[0][1];if(A8){this._configureSubmenu(A5);}break;}},configVisible:function(A7,A6,A8){var A5,A9;if(this.cfg.getProperty(Ac)==AD){r.superclass.configVisible.call(this,A7,A6,A8);}else{A5=A6[0];A9=f.getStyle(this.element,AW);f.setStyle(this.element,J,Au);if(A5){if(A9!=AV){this.beforeShowEvent.fire();f.setStyle(this.element,AW,AV);this.showEvent.fire();}}else{if(A9==AV){this.beforeHideEvent.fire();f.setStyle(this.element,AW,AY);this.hideEvent.fire();}}}},configPosition:function(A7,A6,BA){var A9=this.element,A8=A6[0]==C?C:z,BB=this.cfg,A5;f.setStyle(A9,Ac,A8);if(A8==C){f.setStyle(A9,AW,AV);BB.setProperty(Au,true);}else{f.setStyle(A9,J,AL);}if(A8==z){A5=BB.getProperty(AS);if(!A5||A5===0){BB.setProperty(AS,1);}}},configIframe:function(A6,A5,A7){if(this.cfg.getProperty(Ac)==AD){r.superclass.configIframe.call(this,A6,A5,A7);}},configHideDelay:function(A6,A5,A7){var A8=A5[0];this._useHideDelay=(A8>0);},configContainer:function(A6,A5,A8){var A7=A5[0];if(AM.isString(A7)){this.cfg.setProperty(g,f.get(A7),true);}},_clearSetWidthFlag:function(){this._widthSetForScroll=false;this.cfg.unsubscribeFromConfigEvent(U,this._clearSetWidthFlag);},_setScrollHeight:function(BG){var BC=BG,BB=false,BH=false,A8,A9,BF,A6,BE,BI,A5,BD,BA,A7;if(this.getItems().length>0){A8=this.element;A9=this.body;BF=this.header;A6=this.footer;BE=this._onScrollTargetMouseOver;BI=this._onScrollTargetMouseOut;A5=this.cfg.getProperty(Aj);if(BC>0&&BC<A5){BC=A5;}f.setStyle(A9,Ao,u);f.removeClass(A9,l);A9.scrollTop=0;BH=((As.gecko&&As.gecko<1.9)||As.ie);if(BC>0&&BH&&!this.cfg.getProperty(U)){BA=A8.offsetWidth;A8.style.width=BA+AQ;A7=(BA-(A8.offsetWidth-BA))+AQ;this.cfg.unsubscribeFromConfigEvent(U,this._clearSetWidthFlag);this.cfg.setProperty(U,A7);this._widthSetForScroll=true;this.cfg.subscribeToConfigEvent(U,this._clearSetWidthFlag);}if(BC>0&&(!BF&&!A6)){this.setHeader(AK);this.setFooter(AK);BF=this.header;A6=this.footer;f.addClass(BF,T);f.addClass(A6,x);A8.insertBefore(BF,A9);A8.appendChild(A6);}BD=BC;if(BF&&A6){BD=(BD-(BF.offsetHeight+A6.offsetHeight));}if((BD>0)&&(A9.offsetHeight>BC)){f.addClass(A9,l);f.setStyle(A9,Ao,(BD+AQ));if(!this._hasScrollEventHandlers){AA.on(BF,Ai,BE,this,true);AA.on(BF,H,BI,this,true);AA.on(A6,Ai,BE,this,true);AA.on(A6,H,BI,this,true);this._hasScrollEventHandlers=true;}this._disableScrollHeader();this._enableScrollFooter();BB=true;}else{if(BF&&A6){if(this._widthSetForScroll){this._widthSetForScroll=false;this.cfg.unsubscribeFromConfigEvent(U,this._clearSetWidthFlag);this.cfg.setProperty(U,u);}this._enableScrollHeader();this._enableScrollFooter();if(this._hasScrollEventHandlers){AA.removeListener(BF,Ai,BE);AA.removeListener(BF,H,BI);AA.removeListener(A6,Ai,BE);AA.removeListener(A6,H,BI);this._hasScrollEventHandlers=false;}A8.removeChild(BF);A8.removeChild(A6);this.header=null;this.footer=null;BB=true;}}if(BB){this.cfg.refireEvent(AF);this.cfg.refireEvent(Ag);}}},_setMaxHeight:function(A6,A5,A7){this._setScrollHeight(A7);this.renderEvent.unsubscribe(this._setMaxHeight);},configMaxHeight:function(A6,A5,A7){var A8=A5[0];if(this.lazyLoad&&!this.body&&A8>0){this.renderEvent.subscribe(this._setMaxHeight,A8,this);}else{this._setScrollHeight(A8);}},configClassName:function(A7,A6,A8){var A5=A6[0];if(this._sClassName){f.removeClass(this.element,this._sClassName);}f.addClass(this.element,A5);this._sClassName=A5;},_onItemAdded:function(A6,A5){var A7=A5[0];if(A7){A7.cfg.setProperty(Ah,true);}},configDisabled:function(A7,A6,BA){var A9=A6[0],A5=this.getItems(),BB,A8;if(AM.isArray(A5)){BB=A5.length;if(BB>0){A8=BB-1;do{A5[A8].cfg.setProperty(Ah,A9);}while(A8--);}if(A9){this.clearActiveItem(true);f.addClass(this.element,Ah);this.itemAddedEvent.subscribe(this._onItemAdded);}else{f.removeClass(this.element,Ah);this.itemAddedEvent.unsubscribe(this._onItemAdded);}}},configShadow:function(BD,A7,BC){var BB=function(){var BG=this.element,BF=this._shadow;if(BF&&BG){if(BF.style.width&&BF.style.height){BF.style.width=u;BF.style.height=u;}BF.style.width=(BG.offsetWidth+6)+AQ;BF.style.height=(BG.offsetHeight+1)+AQ;}};var BE=function(){this.element.appendChild(this._shadow);};var A9=function(){f.addClass(this._shadow,AG);};var BA=function(){f.removeClass(this._shadow,AG);
};var A6=function(){var BG=this._shadow,BF;if(!BG){BF=this.element;if(!Ap){Ap=document.createElement(K);Ap.className=m;}BG=Ap.cloneNode(false);BF.appendChild(BG);this._shadow=BG;this.beforeShowEvent.subscribe(A9);this.beforeHideEvent.subscribe(BA);if(As.ie){AM.later(0,this,function(){BB.call(this);this.syncIframe();});this.cfg.subscribeToConfigEvent(U,BB);this.cfg.subscribeToConfigEvent(Ao,BB);this.cfg.subscribeToConfigEvent(AU,BB);this.changeContentEvent.subscribe(BB);Aw.textResizeEvent.subscribe(BB,this,true);this.destroyEvent.subscribe(function(){Aw.textResizeEvent.unsubscribe(BB,this);});}this.cfg.subscribeToConfigEvent(AU,BE);}};var A8=function(){if(this._shadow){BE.call(this);if(As.ie){BB.call(this);}}else{A6.call(this);}this.beforeShowEvent.unsubscribe(A8);};var A5=A7[0];if(A5&&this.cfg.getProperty(Ac)==AD){if(this.cfg.getProperty(Au)){if(this._shadow){BE.call(this);if(As.ie){BB.call(this);}}else{A6.call(this);}}else{this.beforeShowEvent.subscribe(A8);}}},initEvents:function(){r.superclass.initEvents.call(this);var A6=Ab.length-1,A7,A5;do{A7=Ab[A6];A5=this.createEvent(A7[1]);A5.signature=F.LIST;this[A7[0]]=A5;}while(A6--);},positionOffScreen:function(){var A6=this.iframe,A7=this.element,A5=this.OFF_SCREEN_POSITION;A7.style.top=u;A7.style.left=u;if(A6){A6.style.top=A5;A6.style.left=A5;}},getRoot:function(){var A7=this.parent,A6,A5;if(A7){A6=A7.parent;A5=A6?A6.getRoot():this;}else{A5=this;}return A5;},toString:function(){var A6=Aq,A5=this.id;if(A5){A6+=(A1+A5);}return A6;},setItemGroupTitle:function(BA,A9){var A8,A7,A6,A5;if(AM.isString(BA)&&BA.length>0){A8=AM.isNumber(A9)?A9:0;A7=this._aGroupTitleElements[A8];if(A7){A7.innerHTML=BA;}else{A7=document.createElement(this.GROUP_TITLE_TAG_NAME);A7.innerHTML=BA;this._aGroupTitleElements[A8]=A7;}A6=this._aGroupTitleElements.length-1;do{if(this._aGroupTitleElements[A6]){f.removeClass(this._aGroupTitleElements[A6],AJ);A5=A6;}}while(A6--);if(A5!==null){f.addClass(this._aGroupTitleElements[A5],AJ);}this.changeContentEvent.fire();}},addItem:function(A5,A6){return this._addItemToGroup(A6,A5);},addItems:function(A9,A8){var BB,A5,BA,A6,A7;if(AM.isArray(A9)){BB=A9.length;A5=[];for(A6=0;A6<BB;A6++){BA=A9[A6];if(BA){if(AM.isArray(BA)){A5[A5.length]=this.addItems(BA,A6);}else{A5[A5.length]=this._addItemToGroup(A8,BA);}}}if(A5.length){A7=A5;}}return A7;},insertItem:function(A5,A6,A7){return this._addItemToGroup(A7,A5,A6);},removeItem:function(A5,A7){var A8,A6;if(!AM.isUndefined(A5)){if(A5 instanceof YAHOO.widget.MenuItem){A8=this._removeItemFromGroupByValue(A7,A5);}else{if(AM.isNumber(A5)){A8=this._removeItemFromGroupByIndex(A7,A5);}}if(A8){A8.destroy();A6=A8;}}return A6;},getItems:function(){var A8=this._aItemGroups,A6,A7,A5=[];if(AM.isArray(A8)){A6=A8.length;A7=((A6==1)?A8[0]:(Array.prototype.concat.apply(A5,A8)));}return A7;},getItemGroups:function(){return this._aItemGroups;},getItem:function(A6,A7){var A8,A5;if(AM.isNumber(A6)){A8=this._getItemGroup(A7);if(A8){A5=A8[A6];}}return A5;},getSubmenus:function(){var A6=this.getItems(),BA=A6.length,A5,A7,A9,A8;if(BA>0){A5=[];for(A8=0;A8<BA;A8++){A9=A6[A8];if(A9){A7=A9.cfg.getProperty(O);if(A7){A5[A5.length]=A7;}}}}return A5;},clearContent:function(){var A9=this.getItems(),A6=A9.length,A7=this.element,A8=this.body,BD=this.header,A5=this.footer,BC,BB,BA;if(A6>0){BA=A6-1;do{BC=A9[BA];if(BC){BB=BC.cfg.getProperty(O);if(BB){this.cfg.configChangedEvent.unsubscribe(this._onParentMenuConfigChange,BB);this.renderEvent.unsubscribe(this._onParentMenuRender,BB);}this.removeItem(BC,BC.groupIndex);}}while(BA--);}if(BD){AA.purgeElement(BD);A7.removeChild(BD);}if(A5){AA.purgeElement(A5);A7.removeChild(A5);}if(A8){AA.purgeElement(A8);A8.innerHTML=u;}this.activeItem=null;this._aItemGroups=[];this._aListElements=[];this._aGroupTitleElements=[];this.cfg.setProperty(U,null);},destroy:function(){this.clearContent();this._aItemGroups=null;this._aListElements=null;this._aGroupTitleElements=null;r.superclass.destroy.call(this);},setInitialFocus:function(){var A5=this._getFirstEnabledItem();if(A5){A5.focus();}},setInitialSelection:function(){var A5=this._getFirstEnabledItem();if(A5){A5.cfg.setProperty(y,true);}},clearActiveItem:function(A7){if(this.cfg.getProperty(Av)>0){this._cancelShowDelay();}var A5=this.activeItem,A8,A6;if(A5){A8=A5.cfg;if(A7){A5.blur();this.getRoot()._hasFocus=true;}A8.setProperty(y,false);A6=A8.getProperty(O);if(A6){A6.hide();}this.activeItem=null;}},focus:function(){if(!this.hasFocus()){this.setInitialFocus();}},blur:function(){var A5;if(this.hasFocus()){A5=A3.getFocusedMenuItem();if(A5){A5.blur();}}},hasFocus:function(){return(A3.getFocusedMenu()==this.getRoot());},_doItemSubmenuSubscribe:function(A6,A5,A8){var A9=A5[0],A7=A9.cfg.getProperty(O);if(A7){A7.subscribe.apply(A7,A8);}},_doSubmenuSubscribe:function(A6,A5,A8){var A7=this.cfg.getProperty(O);if(A7){A7.subscribe.apply(A7,A8);}},subscribe:function(){r.superclass.subscribe.apply(this,arguments);r.superclass.subscribe.call(this,AR,this._doItemSubmenuSubscribe,arguments);var A5=this.getItems(),A9,A8,A6,A7;if(A5){A9=A5.length;if(A9>0){A7=A9-1;do{A8=A5[A7];A6=A8.cfg.getProperty(O);if(A6){A6.subscribe.apply(A6,arguments);}else{A8.cfg.subscribeToConfigEvent(O,this._doSubmenuSubscribe,arguments);}}while(A7--);}}},unsubscribe:function(){r.superclass.unsubscribe.apply(this,arguments);r.superclass.unsubscribe.call(this,AR,this._doItemSubmenuSubscribe,arguments);var A5=this.getItems(),A9,A8,A6,A7;if(A5){A9=A5.length;if(A9>0){A7=A9-1;do{A8=A5[A7];A6=A8.cfg.getProperty(O);if(A6){A6.unsubscribe.apply(A6,arguments);}else{A8.cfg.unsubscribeFromConfigEvent(O,this._doSubmenuSubscribe,arguments);}}while(A7--);}}},initDefaultConfig:function(){r.superclass.initDefaultConfig.call(this);var A5=this.cfg;A5.addProperty(AZ.key,{handler:this.configVisible,value:AZ.value,validator:AZ.validator});A5.addProperty(AP.key,{handler:this.configConstrainToViewport,value:AP.value,validator:AP.validator,supercedes:AP.supercedes});A5.addProperty(AI.key,{value:AI.value,validator:AI.validator,supercedes:AI.supercedes});
A5.addProperty(S.key,{handler:this.configPosition,value:S.value,validator:S.validator,supercedes:S.supercedes});A5.addProperty(A.key,{value:A.value,suppressEvent:A.suppressEvent});A5.addProperty(t.key,{value:t.value,validator:t.validator,suppressEvent:t.suppressEvent});A5.addProperty(Y.key,{value:Y.value,validator:Y.validator,suppressEvent:Y.suppressEvent});A5.addProperty(q.key,{handler:this.configHideDelay,value:q.value,validator:q.validator,suppressEvent:q.suppressEvent});A5.addProperty(v.key,{value:v.value,validator:v.validator,suppressEvent:v.suppressEvent});A5.addProperty(o.key,{value:o.value,validator:o.validator,suppressEvent:o.suppressEvent});A5.addProperty(AN.key,{handler:this.configContainer,value:document.body,suppressEvent:AN.suppressEvent});A5.addProperty(Af.key,{value:Af.value,validator:Af.validator,supercedes:Af.supercedes,suppressEvent:Af.suppressEvent});A5.addProperty(N.key,{value:N.value,validator:N.validator,supercedes:N.supercedes,suppressEvent:N.suppressEvent});A5.addProperty(X.key,{handler:this.configMaxHeight,value:X.value,validator:X.validator,suppressEvent:X.suppressEvent,supercedes:X.supercedes});A5.addProperty(W.key,{handler:this.configClassName,value:W.value,validator:W.validator,supercedes:W.supercedes});A5.addProperty(a.key,{handler:this.configDisabled,value:a.value,validator:a.validator,suppressEvent:a.suppressEvent});A5.addProperty(I.key,{handler:this.configShadow,value:I.value,validator:I.validator});A5.addProperty(Al.key,{value:Al.value,validator:Al.validator});}});})();(function(){YAHOO.widget.MenuItem=function(AS,AR){if(AS){if(AR){this.parent=AR.parent;this.value=AR.value;this.id=AR.id;}this.init(AS,AR);}};var x=YAHOO.util.Dom,j=YAHOO.widget.Module,AB=YAHOO.widget.Menu,c=YAHOO.widget.MenuItem,AK=YAHOO.util.CustomEvent,k=YAHOO.env.ua,AQ=YAHOO.lang,AL="text",O="#",Q="-",L="helptext",n="url",AH="target",A="emphasis",N="strongemphasis",b="checked",w="submenu",H="disabled",B="selected",P="hassubmenu",U="checked-disabled",AI="hassubmenu-disabled",AD="hassubmenu-selected",T="checked-selected",q="onclick",J="classname",AJ="",i="OPTION",v="OPTGROUP",K="LI",AE="href",r="SELECT",X="DIV",AN='<em class="helptext">',a="<em>",I="</em>",W="<strong>",y="</strong>",Y="preventcontextoverlap",h="obj",AG="scope",t="none",V="visible",E=" ",m="MenuItem",AA="click",D="show",M="hide",S="li",AF='<a href="#"></a>',p=[["mouseOverEvent","mouseover"],["mouseOutEvent","mouseout"],["mouseDownEvent","mousedown"],["mouseUpEvent","mouseup"],["clickEvent",AA],["keyPressEvent","keypress"],["keyDownEvent","keydown"],["keyUpEvent","keyup"],["focusEvent","focus"],["blurEvent","blur"],["destroyEvent","destroy"]],o={key:AL,value:AJ,validator:AQ.isString,suppressEvent:true},s={key:L,supercedes:[AL],suppressEvent:true},G={key:n,value:O,suppressEvent:true},AO={key:AH,suppressEvent:true},AP={key:A,value:false,validator:AQ.isBoolean,suppressEvent:true,supercedes:[AL]},d={key:N,value:false,validator:AQ.isBoolean,suppressEvent:true,supercedes:[AL]},l={key:b,value:false,validator:AQ.isBoolean,suppressEvent:true,supercedes:[H,B]},F={key:w,suppressEvent:true,supercedes:[H,B]},AM={key:H,value:false,validator:AQ.isBoolean,suppressEvent:true,supercedes:[AL,B]},f={key:B,value:false,validator:AQ.isBoolean,suppressEvent:true},u={key:q,suppressEvent:true},AC={key:J,value:null,validator:AQ.isString,suppressEvent:true},z={key:"keylistener",value:null,suppressEvent:true},C=null,e={};var Z=function(AU,AT){var AR=e[AU];if(!AR){e[AU]={};AR=e[AU];}var AS=AR[AT];if(!AS){AS=AU+Q+AT;AR[AT]=AS;}return AS;};var g=function(AR){x.addClass(this.element,Z(this.CSS_CLASS_NAME,AR));x.addClass(this._oAnchor,Z(this.CSS_LABEL_CLASS_NAME,AR));};var R=function(AR){x.removeClass(this.element,Z(this.CSS_CLASS_NAME,AR));x.removeClass(this._oAnchor,Z(this.CSS_LABEL_CLASS_NAME,AR));};c.prototype={CSS_CLASS_NAME:"yuimenuitem",CSS_LABEL_CLASS_NAME:"yuimenuitemlabel",SUBMENU_TYPE:null,_oAnchor:null,_oHelpTextEM:null,_oSubmenu:null,_oOnclickAttributeValue:null,_sClassName:null,constructor:c,index:null,groupIndex:null,parent:null,element:null,srcElement:null,value:null,browser:j.prototype.browser,id:null,init:function(AR,Ab){if(!this.SUBMENU_TYPE){this.SUBMENU_TYPE=AB;}this.cfg=new YAHOO.util.Config(this);this.initDefaultConfig();var AX=this.cfg,AY=O,AT,Aa,AZ,AS,AV,AU,AW;if(AQ.isString(AR)){this._createRootNodeStructure();AX.queueProperty(AL,AR);}else{if(AR&&AR.tagName){switch(AR.tagName.toUpperCase()){case i:this._createRootNodeStructure();AX.queueProperty(AL,AR.text);AX.queueProperty(H,AR.disabled);this.value=AR.value;this.srcElement=AR;break;case v:this._createRootNodeStructure();AX.queueProperty(AL,AR.label);AX.queueProperty(H,AR.disabled);this.srcElement=AR;this._initSubTree();break;case K:AZ=x.getFirstChild(AR);if(AZ){AY=AZ.getAttribute(AE,2);AS=AZ.getAttribute(AH);AV=AZ.innerHTML;}this.srcElement=AR;this.element=AR;this._oAnchor=AZ;AX.setProperty(AL,AV,true);AX.setProperty(n,AY,true);AX.setProperty(AH,AS,true);this._initSubTree();break;}}}if(this.element){AU=(this.srcElement||this.element).id;if(!AU){AU=this.id||x.generateId();this.element.id=AU;}this.id=AU;x.addClass(this.element,this.CSS_CLASS_NAME);x.addClass(this._oAnchor,this.CSS_LABEL_CLASS_NAME);AW=p.length-1;do{Aa=p[AW];AT=this.createEvent(Aa[1]);AT.signature=AK.LIST;this[Aa[0]]=AT;}while(AW--);if(Ab){AX.applyConfig(Ab);}AX.fireQueue();}},_createRootNodeStructure:function(){var AR,AS;if(!C){C=document.createElement(S);C.innerHTML=AF;}AR=C.cloneNode(true);AR.className=this.CSS_CLASS_NAME;AS=AR.firstChild;AS.className=this.CSS_LABEL_CLASS_NAME;this.element=AR;this._oAnchor=AS;},_initSubTree:function(){var AX=this.srcElement,AT=this.cfg,AV,AU,AS,AR,AW;if(AX.childNodes.length>0){if(this.parent.lazyLoad&&this.parent.srcElement&&this.parent.srcElement.tagName.toUpperCase()==r){AT.setProperty(w,{id:x.generateId(),itemdata:AX.childNodes});}else{AV=AX.firstChild;AU=[];do{if(AV&&AV.tagName){switch(AV.tagName.toUpperCase()){case X:AT.setProperty(w,AV);break;case i:AU[AU.length]=AV;break;}}}while((AV=AV.nextSibling));
AS=AU.length;if(AS>0){AR=new this.SUBMENU_TYPE(x.generateId());AT.setProperty(w,AR);for(AW=0;AW<AS;AW++){AR.addItem((new AR.ITEM_TYPE(AU[AW])));}}}}},configText:function(Aa,AT,AV){var AS=AT[0],AU=this.cfg,AY=this._oAnchor,AR=AU.getProperty(L),AZ=AJ,AW=AJ,AX=AJ;if(AS){if(AR){AZ=AN+AR+I;}if(AU.getProperty(A)){AW=a;AX=I;}if(AU.getProperty(N)){AW=W;AX=y;}AY.innerHTML=(AW+AS+AX+AZ);}},configHelpText:function(AT,AS,AR){this.cfg.refireEvent(AL);},configURL:function(AT,AS,AR){var AV=AS[0];if(!AV){AV=O;}var AU=this._oAnchor;if(k.opera){AU.removeAttribute(AE);}AU.setAttribute(AE,AV);},configTarget:function(AU,AT,AS){var AR=AT[0],AV=this._oAnchor;if(AR&&AR.length>0){AV.setAttribute(AH,AR);}else{AV.removeAttribute(AH);}},configEmphasis:function(AT,AS,AR){var AV=AS[0],AU=this.cfg;if(AV&&AU.getProperty(N)){AU.setProperty(N,false);}AU.refireEvent(AL);},configStrongEmphasis:function(AU,AT,AS){var AR=AT[0],AV=this.cfg;if(AR&&AV.getProperty(A)){AV.setProperty(A,false);}AV.refireEvent(AL);},configChecked:function(AT,AS,AR){var AV=AS[0],AU=this.cfg;if(AV){g.call(this,b);}else{R.call(this,b);}AU.refireEvent(AL);if(AU.getProperty(H)){AU.refireEvent(H);}if(AU.getProperty(B)){AU.refireEvent(B);}},configDisabled:function(AT,AS,AR){var AV=AS[0],AW=this.cfg,AU=AW.getProperty(w),AX=AW.getProperty(b);if(AV){if(AW.getProperty(B)){AW.setProperty(B,false);}g.call(this,H);if(AU){g.call(this,AI);}if(AX){g.call(this,U);}}else{R.call(this,H);if(AU){R.call(this,AI);}if(AX){R.call(this,U);}}},configSelected:function(AT,AS,AR){var AX=this.cfg,AW=this._oAnchor,AV=AS[0],AY=AX.getProperty(b),AU=AX.getProperty(w);if(k.opera){AW.blur();}if(AV&&!AX.getProperty(H)){g.call(this,B);if(AU){g.call(this,AD);}if(AY){g.call(this,T);}}else{R.call(this,B);if(AU){R.call(this,AD);}if(AY){R.call(this,T);}}if(this.hasFocus()&&k.opera){AW.focus();}},_onSubmenuBeforeHide:function(AU,AT){var AV=this.parent,AR;function AS(){AV._oAnchor.blur();AR.beforeHideEvent.unsubscribe(AS);}if(AV.hasFocus()){AR=AV.parent;AR.beforeHideEvent.subscribe(AS);}},configSubmenu:function(AY,AT,AW){var AV=AT[0],AU=this.cfg,AS=this.parent&&this.parent.lazyLoad,AX,AZ,AR;if(AV){if(AV instanceof AB){AX=AV;AX.parent=this;AX.lazyLoad=AS;}else{if(AQ.isObject(AV)&&AV.id&&!AV.nodeType){AZ=AV.id;AR=AV;AR.lazyload=AS;AR.parent=this;AX=new this.SUBMENU_TYPE(AZ,AR);AU.setProperty(w,AX,true);}else{AX=new this.SUBMENU_TYPE(AV,{lazyload:AS,parent:this});AU.setProperty(w,AX,true);}}if(AX){AX.cfg.setProperty(Y,true);g.call(this,P);if(AU.getProperty(n)===O){AU.setProperty(n,(O+AX.id));}this._oSubmenu=AX;if(k.opera){AX.beforeHideEvent.subscribe(this._onSubmenuBeforeHide);}}}else{R.call(this,P);if(this._oSubmenu){this._oSubmenu.destroy();}}if(AU.getProperty(H)){AU.refireEvent(H);}if(AU.getProperty(B)){AU.refireEvent(B);}},configOnClick:function(AT,AS,AR){var AU=AS[0];if(this._oOnclickAttributeValue&&(this._oOnclickAttributeValue!=AU)){this.clickEvent.unsubscribe(this._oOnclickAttributeValue.fn,this._oOnclickAttributeValue.obj);this._oOnclickAttributeValue=null;}if(!this._oOnclickAttributeValue&&AQ.isObject(AU)&&AQ.isFunction(AU.fn)){this.clickEvent.subscribe(AU.fn,((h in AU)?AU.obj:this),((AG in AU)?AU.scope:null));this._oOnclickAttributeValue=AU;}},configClassName:function(AU,AT,AS){var AR=AT[0];if(this._sClassName){x.removeClass(this.element,this._sClassName);}x.addClass(this.element,AR);this._sClassName=AR;},_dispatchClickEvent:function(){var AT=this,AS,AR;if(!AT.cfg.getProperty(H)){AS=x.getFirstChild(AT.element);if(k.ie){AS.fireEvent(q);}else{if((k.gecko&&k.gecko>=1.9)||k.opera||k.webkit){AR=document.createEvent("HTMLEvents");AR.initEvent(AA,true,true);}else{AR=document.createEvent("MouseEvents");AR.initMouseEvent(AA,true,true,window,0,0,0,0,0,false,false,false,false,0,null);}AS.dispatchEvent(AR);}}},_createKeyListener:function(AU,AT,AW){var AV=this,AS=AV.parent;var AR=new YAHOO.util.KeyListener(AS.element.ownerDocument,AW,{fn:AV._dispatchClickEvent,scope:AV,correctScope:true});if(AS.cfg.getProperty(V)){AR.enable();}AS.subscribe(D,AR.enable,null,AR);AS.subscribe(M,AR.disable,null,AR);AV._keyListener=AR;AS.unsubscribe(D,AV._createKeyListener,AW);},configKeyListener:function(AT,AS){var AV=AS[0],AU=this,AR=AU.parent;if(AU._keyData){AR.unsubscribe(D,AU._createKeyListener,AU._keyData);AU._keyData=null;}if(AU._keyListener){AR.unsubscribe(D,AU._keyListener.enable);AR.unsubscribe(M,AU._keyListener.disable);AU._keyListener.disable();AU._keyListener=null;}if(AV){AU._keyData=AV;AR.subscribe(D,AU._createKeyListener,AV,AU);}},initDefaultConfig:function(){var AR=this.cfg;AR.addProperty(o.key,{handler:this.configText,value:o.value,validator:o.validator,suppressEvent:o.suppressEvent});AR.addProperty(s.key,{handler:this.configHelpText,supercedes:s.supercedes,suppressEvent:s.suppressEvent});AR.addProperty(G.key,{handler:this.configURL,value:G.value,suppressEvent:G.suppressEvent});AR.addProperty(AO.key,{handler:this.configTarget,suppressEvent:AO.suppressEvent});AR.addProperty(AP.key,{handler:this.configEmphasis,value:AP.value,validator:AP.validator,suppressEvent:AP.suppressEvent,supercedes:AP.supercedes});AR.addProperty(d.key,{handler:this.configStrongEmphasis,value:d.value,validator:d.validator,suppressEvent:d.suppressEvent,supercedes:d.supercedes});AR.addProperty(l.key,{handler:this.configChecked,value:l.value,validator:l.validator,suppressEvent:l.suppressEvent,supercedes:l.supercedes});AR.addProperty(AM.key,{handler:this.configDisabled,value:AM.value,validator:AM.validator,suppressEvent:AM.suppressEvent});AR.addProperty(f.key,{handler:this.configSelected,value:f.value,validator:f.validator,suppressEvent:f.suppressEvent});AR.addProperty(F.key,{handler:this.configSubmenu,supercedes:F.supercedes,suppressEvent:F.suppressEvent});AR.addProperty(u.key,{handler:this.configOnClick,suppressEvent:u.suppressEvent});AR.addProperty(AC.key,{handler:this.configClassName,value:AC.value,validator:AC.validator,suppressEvent:AC.suppressEvent});AR.addProperty(z.key,{handler:this.configKeyListener,value:z.value,suppressEvent:z.suppressEvent});
},getNextSibling:function(){var AR=function(AX){return(AX.nodeName.toLowerCase()==="ul");},AV=this.element,AU=x.getNextSibling(AV),AT,AS,AW;if(!AU){AT=AV.parentNode;AS=x.getNextSiblingBy(AT,AR);if(AS){AW=AS;}else{AW=x.getFirstChildBy(AT.parentNode,AR);}AU=x.getFirstChild(AW);}return YAHOO.widget.MenuManager.getMenuItem(AU.id);},getNextEnabledSibling:function(){var AR=this.getNextSibling();return(AR.cfg.getProperty(H)||AR.element.style.display==t)?AR.getNextEnabledSibling():AR;},getPreviousSibling:function(){var AR=function(AX){return(AX.nodeName.toLowerCase()==="ul");},AV=this.element,AU=x.getPreviousSibling(AV),AT,AS,AW;if(!AU){AT=AV.parentNode;AS=x.getPreviousSiblingBy(AT,AR);if(AS){AW=AS;}else{AW=x.getLastChildBy(AT.parentNode,AR);}AU=x.getLastChild(AW);}return YAHOO.widget.MenuManager.getMenuItem(AU.id);},getPreviousEnabledSibling:function(){var AR=this.getPreviousSibling();return(AR.cfg.getProperty(H)||AR.element.style.display==t)?AR.getPreviousEnabledSibling():AR;},focus:function(){var AU=this.parent,AT=this._oAnchor,AR=AU.activeItem;function AS(){try{if(!(k.ie&&!document.hasFocus())){if(AR){AR.blurEvent.fire();}AT.focus();this.focusEvent.fire();}}catch(AV){}}if(!this.cfg.getProperty(H)&&AU&&AU.cfg.getProperty(V)&&this.element.style.display!=t){AQ.later(0,this,AS);}},blur:function(){var AR=this.parent;if(!this.cfg.getProperty(H)&&AR&&AR.cfg.getProperty(V)){AQ.later(0,this,function(){try{this._oAnchor.blur();this.blurEvent.fire();}catch(AS){}},0);}},hasFocus:function(){return(YAHOO.widget.MenuManager.getFocusedMenuItem()==this);},destroy:function(){var AT=this.element,AS,AR,AV,AU;if(AT){AS=this.cfg.getProperty(w);if(AS){AS.destroy();}AR=AT.parentNode;if(AR){AR.removeChild(AT);this.destroyEvent.fire();}AU=p.length-1;do{AV=p[AU];this[AV[0]].unsubscribeAll();}while(AU--);this.cfg.configChangedEvent.unsubscribeAll();}},toString:function(){var AS=m,AR=this.id;if(AR){AS+=(E+AR);}return AS;}};AQ.augmentProto(c,YAHOO.util.EventProvider);})();(function(){var B="xy",C="mousedown",F="ContextMenu",J=" ";YAHOO.widget.ContextMenu=function(L,K){YAHOO.widget.ContextMenu.superclass.constructor.call(this,L,K);};var I=YAHOO.util.Event,E=YAHOO.env.ua,G=YAHOO.widget.ContextMenu,A={"TRIGGER_CONTEXT_MENU":"triggerContextMenu","CONTEXT_MENU":(E.opera?C:"contextmenu"),"CLICK":"click"},H={key:"trigger",suppressEvent:true};function D(L,K,M){this.cfg.setProperty(B,M);this.beforeShowEvent.unsubscribe(D,M);}YAHOO.lang.extend(G,YAHOO.widget.Menu,{_oTrigger:null,_bCancelled:false,contextEventTarget:null,triggerContextMenuEvent:null,init:function(L,K){G.superclass.init.call(this,L);this.beforeInitEvent.fire(G);if(K){this.cfg.applyConfig(K,true);}this.initEvent.fire(G);},initEvents:function(){G.superclass.initEvents.call(this);this.triggerContextMenuEvent=this.createEvent(A.TRIGGER_CONTEXT_MENU);this.triggerContextMenuEvent.signature=YAHOO.util.CustomEvent.LIST;},cancel:function(){this._bCancelled=true;},_removeEventHandlers:function(){var K=this._oTrigger;if(K){I.removeListener(K,A.CONTEXT_MENU,this._onTriggerContextMenu);if(E.opera){I.removeListener(K,A.CLICK,this._onTriggerClick);}}},_onTriggerClick:function(L,K){if(L.ctrlKey){I.stopEvent(L);}},_onTriggerContextMenu:function(M,K){var L;if(!(M.type==C&&!M.ctrlKey)){this.contextEventTarget=I.getTarget(M);this.triggerContextMenuEvent.fire(M);if(!this._bCancelled){I.stopEvent(M);YAHOO.widget.MenuManager.hideVisible();L=I.getXY(M);if(!YAHOO.util.Dom.inDocument(this.element)){this.beforeShowEvent.subscribe(D,L);}else{this.cfg.setProperty(B,L);}this.show();}this._bCancelled=false;}},toString:function(){var L=F,K=this.id;if(K){L+=(J+K);}return L;},initDefaultConfig:function(){G.superclass.initDefaultConfig.call(this);this.cfg.addProperty(H.key,{handler:this.configTrigger,suppressEvent:H.suppressEvent});},destroy:function(){this._removeEventHandlers();G.superclass.destroy.call(this);},configTrigger:function(L,K,N){var M=K[0];if(M){if(this._oTrigger){this._removeEventHandlers();}this._oTrigger=M;I.on(M,A.CONTEXT_MENU,this._onTriggerContextMenu,this,true);if(E.opera){I.on(M,A.CLICK,this._onTriggerClick,this,true);}}else{this._removeEventHandlers();}}});}());YAHOO.widget.ContextMenuItem=YAHOO.widget.MenuItem;(function(){var D=YAHOO.lang,N="static",M="dynamic,"+N,A="disabled",F="selected",B="autosubmenudisplay",G="submenu",C="visible",Q=" ",H="submenutoggleregion",P="MenuBar";YAHOO.widget.MenuBar=function(T,S){YAHOO.widget.MenuBar.superclass.constructor.call(this,T,S);};function O(T){var S=false;if(D.isString(T)){S=(M.indexOf((T.toLowerCase()))!=-1);}return S;}var R=YAHOO.util.Event,L=YAHOO.widget.MenuBar,K={key:"position",value:N,validator:O,supercedes:[C]},E={key:"submenualignment",value:["tl","bl"]},J={key:B,value:false,validator:D.isBoolean,suppressEvent:true},I={key:H,value:false,validator:D.isBoolean};D.extend(L,YAHOO.widget.Menu,{init:function(T,S){if(!this.ITEM_TYPE){this.ITEM_TYPE=YAHOO.widget.MenuBarItem;}L.superclass.init.call(this,T);this.beforeInitEvent.fire(L);if(S){this.cfg.applyConfig(S,true);}this.initEvent.fire(L);},CSS_CLASS_NAME:"yuimenubar",SUBMENU_TOGGLE_REGION_WIDTH:20,_onKeyDown:function(U,T,Y){var S=T[0],Z=T[1],W,X,V;if(Z&&!Z.cfg.getProperty(A)){X=Z.cfg;switch(S.keyCode){case 37:case 39:if(Z==this.activeItem&&!X.getProperty(F)){X.setProperty(F,true);}else{V=(S.keyCode==37)?Z.getPreviousEnabledSibling():Z.getNextEnabledSibling();if(V){this.clearActiveItem();V.cfg.setProperty(F,true);W=V.cfg.getProperty(G);if(W){W.show();W.setInitialFocus();}else{V.focus();}}}R.preventDefault(S);break;case 40:if(this.activeItem!=Z){this.clearActiveItem();X.setProperty(F,true);Z.focus();}W=X.getProperty(G);if(W){if(W.cfg.getProperty(C)){W.setInitialSelection();W.setInitialFocus();}else{W.show();W.setInitialFocus();}}R.preventDefault(S);break;}}if(S.keyCode==27&&this.activeItem){W=this.activeItem.cfg.getProperty(G);if(W&&W.cfg.getProperty(C)){W.hide();this.activeItem.focus();}else{this.activeItem.cfg.setProperty(F,false);this.activeItem.blur();}R.preventDefault(S);}},_onClick:function(e,Y,b){L.superclass._onClick.call(this,e,Y,b);
var d=Y[1],T=true,S,f,U,W,Z,a,c,V;var X=function(){if(a.cfg.getProperty(C)){a.hide();}else{a.show();}};if(d&&!d.cfg.getProperty(A)){f=Y[0];U=R.getTarget(f);W=this.activeItem;Z=this.cfg;if(W&&W!=d){this.clearActiveItem();}d.cfg.setProperty(F,true);a=d.cfg.getProperty(G);if(a){S=d.element;c=YAHOO.util.Dom.getX(S);V=c+(S.offsetWidth-this.SUBMENU_TOGGLE_REGION_WIDTH);if(Z.getProperty(H)){if(R.getPageX(f)>V){X();R.preventDefault(f);T=false;}}else{X();}}}return T;},configSubmenuToggle:function(U,T){var S=T[0];if(S){this.cfg.setProperty(B,false);}},toString:function(){var T=P,S=this.id;if(S){T+=(Q+S);}return T;},initDefaultConfig:function(){L.superclass.initDefaultConfig.call(this);var S=this.cfg;S.addProperty(K.key,{handler:this.configPosition,value:K.value,validator:K.validator,supercedes:K.supercedes});S.addProperty(E.key,{value:E.value,suppressEvent:E.suppressEvent});S.addProperty(J.key,{value:J.value,validator:J.validator,suppressEvent:J.suppressEvent});S.addProperty(I.key,{value:I.value,validator:I.validator,handler:this.configSubmenuToggle});}});}());YAHOO.widget.MenuBarItem=function(B,A){YAHOO.widget.MenuBarItem.superclass.constructor.call(this,B,A);};YAHOO.lang.extend(YAHOO.widget.MenuBarItem,YAHOO.widget.MenuItem,{init:function(B,A){if(!this.SUBMENU_TYPE){this.SUBMENU_TYPE=YAHOO.widget.Menu;}YAHOO.widget.MenuBarItem.superclass.init.call(this,B);var C=this.cfg;if(A){C.applyConfig(A,true);}C.fireQueue();},CSS_CLASS_NAME:"yuimenubaritem",CSS_LABEL_CLASS_NAME:"yuimenubaritemlabel",toString:function(){var A="MenuBarItem";if(this.cfg&&this.cfg.getProperty("text")){A+=(": "+this.cfg.getProperty("text"));}return A;}});YAHOO.register("menu",YAHOO.widget.Menu,{version:"2.8.0r4",build:"2449"});
var SelectWidget=Class.create(Glyde.widgets.Widget,{
DOM_CLASS:'select_widget',
MESSAGE_SELECT_OPENING:'select_widget:opening',
initialize:function($super,element,items,selected_item,options){
$super(element);
this._options={};
Object.extend(this._options,options);
this._opening_message_handler=this.on_opening_message.bind(this);
Glyde.notify.subscribe(this.MESSAGE_SELECT_OPENING,this._opening_message_handler);
this._element.update(this._render_html());
this._select_box=this.$$('.select_box')[0];
this._create_overlay();
this._menu_id=YAHOO.util.Dom.generateId();
this._menu=new YAHOO.widget.Menu(this._menu_id);
this._menu.cfg.setProperty('context',[this._select_box,'tl','bl',['windowResize']]);
this._menu.subscribe('click',this.on_menu_click.bind(this));
this.set_content(items,selected_item);
this._mouseover_handler=this.on_mouseover.bindAsEventListener(this);
this._mouseout_handler=this.on_mouseout.bindAsEventListener(this);
this._click_handler=this.on_click.bindAsEventListener(this);
var e=this._element;
e.observe('mouseover',this._mouseover_handler);
e.observe('mouseout',this._mouseout_handler);
e.observe('click',this._click_handler);
},
destroy:function(){
Glyde.notify.unsubscribe(this.MESSAGE_SELECT_OPENING,this._opening_message_handler);
var e=this._element;
e.stopObserving('mouseover',this._mouseover_handler);
e.stopObserving('mouseout',this._mouseout_handler);
e.stopObserving('click',this._click_handler);
this._menu.destroy();
},
menu_id:function(){
return this._menu_id;
},
set_content:function(items,selected_item){
this._menu.clearContent();
if(this._options.width){this._menu.cfg.setProperty('width',this._options.width+'px');}
if(this._options.z_index){this._menu.cfg.setProperty('zindex',this._options.z_index);}
this._menu.addItems(items.items);
if(items.titles){
for(var c=0;c<items.titles.length;c++){
if(items.titles[c]){
this._menu.setItemGroupTitle(items.titles[c],c);
}
}
}
this._selected_item=this._menu.getItems()[0];
if(selected_item){
var item=this._find_item_by_key(this._menu,selected_item);
if(item){
this._selected_item=item;
}
}
this._set_selected_item_text(this.selected_item_display_value(),false,this._selected_item.value.preposition,this._selected_item.value.tooltip);
this._menu.render($('widget_overlays'));
},
on_menu_click:function(p_sType,p_aArgs){
var oEvent=p_aArgs[0],oMenuItem=p_aArgs[1];if(oMenuItem){
if(!oMenuItem.cfg.getProperty('submenu')){
this._select(oMenuItem);
}
}
},
on_mouseover:function(event){
if(event.element()==this._select_box||event.element().descendantOf(this._select_box)){
this._select_box.addClassName('hover');
}
},
on_mouseout:function(event){
if(event.element()==this._select_box||event.element().descendantOf(this._select_box)){
this._select_box.removeClassName('hover');
}
},
on_click:function(event){
if(event.element()==this._select_box||event.element().descendantOf(this._select_box)){
if(this.is_open()){
this.close();
}else{
this.open();
}
}
},
is_open:function(){
return this._menu.cfg.getProperty('visible');
},
open:function(){
Glyde.notify.publish(this.MESSAGE_SELECT_OPENING,{widget:this});
this._menu.align('tl','bl');
this._menu.show();
},
close:function(close_fast){
if(close_fast){
this._menu.hide();
}else{
this._menu.hide();
}
},
select:function(key,text,silent){
var item=this._find_item_by_key(this._menu,key);
if(item){
this._select(item,text,silent);
}
},
set_title:function(text,use_predefined_prefix){
this._selected_item=null;
this._set_selected_item_text(text,!use_predefined_prefix);
},
_select:function(menu_item,text,silent){
var old_selected=this._selected_item;
this._selected_item=menu_item;
this._set_selected_item_text((text!=null?text:this.selected_item_display_value()),false,
menu_item.value.preposition,menu_item.value.tooltip);
if(old_selected==this._selected_item){
return;
}
if(!silent){
this.fire('select_widget:change',{value:this._selected_item.value});
}
},
_set_selected_item_text:function(item_text,no_prefix,preposition,tooltip){
var prefix='';
if(!no_prefix){
if(preposition){
prefix=preposition+' ';
}else if(this._options.selected_value_prefix){
prefix=this._options.selected_value_prefix;
}
}
var selected_item_node=this.$$('.selected_item')[0];
selected_item_node.update(prefix+item_text);
selected_item_node.title=(tooltip?tooltip:'');
},
selected_item:function(){
return this._selected_item;
},
selected_item_display_value:function(){
return this._selected_item.value.selected_text;
},
on_opening_message:function(message_name,message_info){
if(message_info.widget!=this&&this.is_open()){
this.close(true);
}
},
_find_item_by_key:function(menu,key){
var items=menu.getItems();
for(c=0;c<items.length;c++){
if(items[c].value&&(items[c].value.key==key)){
return items[c];
}
}
var submenus=menu.getSubmenus();
var item;
for(var c=0;c<submenus.length;c++){
item=this._find_item_by_key(submenus[c],key);
if(item){
return item;
}
}
return null;
}
});
SelectWidget.prototype._render_html=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="select_box"');_j.s('>');
_j.ns('<div');_j.s(' class="selected_item"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="down_arrow"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
return _j.v();
};
var HeavySelectWidget=Class.create(SelectWidget,{
DOM_CLASS:'heavy_select_widget'
});
HeavySelectWidget.prototype._render_html=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="select_box"');_j.s('>');
_j.ns('<div');_j.s(' class="left_cap"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="selected_item"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="right_cap"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
return _j.v();
};
var CardWidget=Class.create(Glyde.widgets.Widget,{
DOM_CLASS:'card_widget',
TOP_CARD_ROW_HEIGHT:184,
BOTTOM_CARD_ROW_HEIGHT:8,
CARD_ROW_EDGE_WIDTH:8,
HEADER_HEIGHT:32,
FOOTER_HEIGHT:38,
initialize:function($super,element,options){
$super(element);
options=options||{};
this._scrolling=options.scrolling||false;
if(this.$$('.background_container').size()==0){
var background=new Element('DIV',{'class':'background_container'}).update(this._render_background_container());
this._element.insert({top:background});
}
if(options.header){
this.$$('.background_container')[0].addClassName('header');
}
},
set_size:function(width,height){
if(this._width!=width){
var middle_column_width=width-2*this.CARD_ROW_EDGE_WIDTH;
this._element.style.width=width+'px';
this.$$('.background_container')[0].style.width=width+'px';
this.$$('.background_container .top_middle')[0].style.width=middle_column_width+'px';
this.$$('.background_container .middle_middle')[0].style.width=middle_column_width+'px';
this.$$('.background_container .bottom_middle')[0].style.width=middle_column_width+'px';
this._width=width;
}
if(this._height!=height){
var middle_row_height=height-this.TOP_CARD_ROW_HEIGHT;
this._element.style.height=height+'px';
this.$$('.background_container .middle_row')[0].style.height=middle_row_height+'px';
if(Glyde.Browser.IE6&&this._height){
this.$$('.background_container .middle_row DIV').each(function(e){
e.style.height=middle_row_height+'px';
});
}
if(this._scrolling){
var viewport_height=height-this.HEADER_HEIGHT-this.FOOTER_HEIGHT;
var viewport_elem=this.$$('.viewport')[0];
viewport_elem.style.height=viewport_height+'px';
if(viewport_elem.scrollHeight>viewport_height){
viewport_elem.addClassName('scrollbar');
}else{
viewport_elem.removeClassName('scrollbar');
}
}
this._height=height;
}
}
});
CardWidget.prototype._render_background_container=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="card_row top_row"');_j.s('>');
_j.ns('<div');_j.s(' class="top_left"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="top_middle"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="top_right"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="card_row middle_row"');_j.s('>');
_j.ns('<div');_j.s(' class="middle_left"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="middle_middle"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="middle_right"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="card_row bottom_row"');_j.s('>');
_j.ns('<div');_j.s(' class="bottom_left"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="bottom_middle"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="bottom_right"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
return _j.v();
};
var FilterBoxWidget=Class.create(Glyde.widgets.Widget,{
DOM_CLASS:'filter_box_widget',
initialize:function($super,element,options){
$super(element);
this._options={};
Object.extend(this._options,options);
var e=this._element;
e.update(this._render_html());
e.observe('keypress',this._on_keypress.bindAsEventListener(this));
this.$$('.clear_query')[0].observe('click',this._on_clear_query_click.bindAsEventListener(this));
this._input=this.$$('.filter_box')[0];
this._focused_observer=new Form.Element.FocusedObserver(this._input,2.5,this._on_query_change.bind(this));
if(this._options.dead){
this._active_filter='';
this._filter_button=new DialogButtonWidget(this.$$('.filter_button')[0],'Search');
this._filter_button.observe('widget:activate',this._do_filter.bindAsEventListener(this));
}
},
set_query:function(query){
var old_query=this._input.getValue();
this._input.value=query;
if(query!=old_query){
this._active_filter=query;
this._set_has_query_class();
}
},
clear_query:function(){
this._input.value='';
this._element.removeClassName('has_query');
this._do_filter();
},
_on_query_change:function(){
if(!this._options.dead){
this._do_filter();
}
this._set_has_query_class();
},
_set_has_query_class:function(){
if(this._input.getValue()!=''){
this._element.addClassName('has_query');
}else{
this._element.removeClassName('has_query');
}
},
_on_keypress:function(event){
switch(event.keyCode){
case Event.KEY_RETURN:
if(this._options.dead){
this._filter_button.activate();
}
break;
case Event.KEY_ESC:
this.clear_query();
event.stop();
break;
}
},
_do_filter:function(){
var new_filter=this._input.getValue();
if(this._active_filter!=new_filter){
this.fire('widget:filter_request',{query:new_filter});
this._active_filter=new_filter;
}
},
_on_clear_query_click:function(event){
this.clear_query();
}
});
FilterBoxWidget.prototype._render_html=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="'+('outer_box'+(this._options.dead?' dead_filter':''))+'"');_j.s('>');
_j.ns('<input');_j.s(' class="filter_box"');_j.s(' type="'+('text')+'"');_j.s('>');
_j.ns('</input>');
_j.ns('<div');_j.s(' class="clear_query"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
if(this._options.dead){
_j.ns('<div');_j.s(' class="'+('filter_button')+'"');_j.s('>');
_j.ns('</div>');
}
return _j.v();
};
Glyde.ButtonWidget=Class.create(Glyde.widgets.Widget,{
DOM_CLASS:'button_widget',
initialize:function($super,element,title,options){
$super(element);
this.title=title||element.innerHTML;
var e=this._element;
e.update(this._render_html());
e.disable_drag_selection();
e.observe('mousedown',this._on_mousedown.bindAsEventListener(this));
e.observe('mouseover',this._on_mouseover.bindAsEventListener(this));
e.observe('mouseout',this._on_mouseout.bindAsEventListener(this));
e.observe('click',this._on_click.bindAsEventListener(this));
this._wrapper=this.$$('.wrapper')[0];
this._inner_wrapper=this.$$('.inner_wrapper')[0];
if(options){
if(options.color){
this._inner_wrapper.addClassName('color_'+options.color);
}
if(options.tooltip_text){
this._inner_wrapper.title=options.tooltip_text;
}
}
},
on_activate:function(callback){
this.observe('widget:activate',callback);
},
enable:function(){
this._wrapper.removeClassName('disabled');
},
disable:function(){
this._wrapper.addClassName('disabled');
},
is_disabled:function(){
return this._wrapper.hasClassName('disabled');
},
activate:function(){
if(!this.is_disabled()){
this._on_mousedown();
(function(){this._on_click();}).bind(this).delay(0.2);
}
},
update_title:function(title){
this._wrapper.select('.middle')[0].update(title);
},
_on_mousedown:function(event){
if((!event||event.isLeftClick())&&!this.is_disabled()){
this._wrapper.addClassName('active');
}
},
_on_click:function(){
if(!this.is_disabled()){
this._wrapper.removeClassName('active');
this.fire('widget:activate');
}
},
_on_mouseover:function(){
this._wrapper.addClassName('mouseover');
},
_on_mouseout:function(){
this._wrapper.removeClassName('active');
this._wrapper.removeClassName('mouseover');
}
});
Glyde.ButtonWidget.prototype._render_html=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="wrapper"');_j.s('>');
_j.ns('<div');_j.s(' class="inner_wrapper"');_j.s('>');
_j.ns('<div');_j.s(' class="left"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="middle"');_j.s('>'+(this.title));
_j.ns('</div>');
_j.ns('<div');_j.s(' class="right"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</div>');
return _j.v();
};
Glyde.widgets.BigButtonWidget=Class.create(Glyde.ButtonWidget,{
DOM_CLASS:'big_button_widget'
});
var DialogButtonWidget=Class.create(Glyde.ButtonWidget,{
DOM_CLASS:'dialog_button_widget'
});
Glyde.widgets.ScrollWidget=Class.create(Glyde.widgets.Widget,{
DOM_CLASS:'scroll_widget',
VIEWPORT_CLASS:'scroll_viewport',
INNER_CLASS:'scroll_inner',
LEFT_ARROW_CLASS:'scroll_arrow_left',
RIGHT_ARROW_CLASS:'scroll_arrow_right',
MAX_LOADED_PAGES:10,
PAGE_SELECTOR_MIN_BAR_WIDTH:4,
PAGE_SELECTOR_MAX_BAR_WIDTH:6,
initialize:function($super,element,page_size,start_page){
$super(element);
this._page_size=page_size||1;
this._element.update(this._render_skeleton());
this._viewport=this.$$('.'+this.VIEWPORT_CLASS)[0];
this._inner=this.$$('.'+this.INNER_CLASS)[0];
this._left_arrow=this.$$('.'+this.LEFT_ARROW_CLASS)[0];
this._right_arrow=this.$$('.'+this.RIGHT_ARROW_CLASS)[0];
this._page_selector=this.$$('.page_selector')[0];
this._page_container=this.$$('.page_container')[0];
this._item_width=this._viewport.getWidth()/this._page_size;
this._click_handler_func=this.click_handler.bindAsEventListener(this);
this._element.observe('click',this._click_handler_func);
this._disable_prev_and_next();
this._after_animate_handler=this._after_animate.bind(this);
this.initial_load(start_page);
},
item_width:function(){
return this._item_width;
},
initial_load:function(start_page){
this.refresh(start_page);
},
refresh:function(start_page){
this._inner.update();
this._item_map=[];
this._page_queue=[];
this.current_page=start_page||0;
this.hide_empty_message();
this._element.addClassName('loading');
function on_pages_ready(pages,total_items){
this._total_items=total_items;
var total_pages=this.num_pages();
this.current_page=Math.min(this.current_page,Math.max(0,total_pages-1));
this._inner.style.width=total_pages*this._page_size*this.item_width()+'px';
this._viewport.scrollLeft=this.current_page*this._page_size*this.item_width();
this._update_arrow_enablement();
this._init_page_selector();
this._on_pages_ready(pages,total_items);
this._on_initial_load_complete();
}
var page_range=[Math.max(0,this.current_page-1),this.current_page+1];
this._render_pages(page_range,on_pages_ready.bind(this));
},
_on_initial_load_complete:function(){
this._element.removeClassName('loading');
},
show_empty_message:function(){
this._element.addClassName('empty');
},
hide_empty_message:function(){
this._element.removeClassName('empty');
},
click_handler:function(e){
var target=e.element();
if(target.hasClassName('scroll_arrow_left')&&!target.hasClassName('disabled')){
this.page_back();
}
if(target.hasClassName('scroll_arrow_right')&&!target.hasClassName('disabled')){
this.page_forward();
}
if(target.hasClassName('page')){
var page_selected=this._get_page_number_from_bar_element(target);
if(page_selected!=this.current_page){
this.set_page(page_selected);
}
}
},
num_items:function(){
return this._total_items;
},
num_pages:function(){
return Math.ceil(this.num_items()/this._page_size);
},
set_page:function(page,animation_func_name){
var animation_function=animation_func_name?animation_func_name:'animate';
if(page>=0&&page<this.num_pages()){
var scroll_begin_page=this.current_page;
if(Math.abs(this.current_page-page)>1){
scroll_begin_page=(page>this.current_page?page-1:page+1);
}
this._viewport.scrollLeft=scroll_begin_page*this._page_size*this.item_width();
this[animation_function]((page*this._page_size*this.item_width()),(scroll_begin_page*this._page_size*this.item_width()),this._after_animate_handler);
this.current_page=page;
this._update_page_selector();
var page_range=[null,null];
for(var c=this.current_page-1;c<=this.current_page+1;c++){
if(c>=0&&c<this.num_pages()){
this._page_request(c);
if(!this._item_map[c*this._page_size]){
if(page_range[0]==null){
page_range[0]=c;
}
page_range[1]=c;
}
}
}
if(page_range[0]!=null){
this._render_pages(page_range);
}
}else{
throw'Requested page out of bounds: '+page;
}
},
page_forward:function(animation_function_name){
this.set_page(this.current_page+1,animation_function_name);
},
page_back:function(animation_function_name){
this.set_page(this.current_page-1,animation_function_name);
},
get_viewport:function(){
return this._viewport;
},
_render_pages:function(){
alert('widgets/scroll_widget.js:  #_render_pages is abstract');
},
_after_animate:function(){
},
_page_request:function(page){
this._page_queue.unshift(page);
this._page_queue=this._page_queue.uniq();
},
_trim_page_queue:function(){
var page_to_deallocate;
while(this._page_queue.length>this.MAX_LOADED_PAGES){
page_to_deallocate=this._page_queue.pop();
for(var i=0;i<this._page_size;i++){
var item_index=page_to_deallocate*this._page_size+i;
if(this._item_map[item_index]){
this._inner.removeChild(this._item_map[item_index]);
delete this._item_map[item_index];
}
}
}
},
_on_pages_ready:function(pages,total_items){
pages=pages.sortBy(function(p){return Math.abs(p.page_index-this.current_page);},this);
for(var c=0;c<pages.length;c++){
if(pages[c].items.length==0)continue;
this._page_request(pages[c].page_index);
this._trim_page_queue();
for(var i=0;i<this._page_size;i++){
var item_index=pages[c].page_index*this._page_size+i;
if(this._item_map[item_index]){
continue;
}
this._inner.insert(this._render_item_skeleton(item_index*this.item_width()));
this._item_map[item_index]=$(this._inner.lastChild);
if(i<pages[c].items.length){
var node=this._item_map[item_index];
node.update(pages[c].items[i]);
this._on_render_page(node);
}
}
}
},
_on_render_page:function(node){},
_init_page_selector:function(){
var available_width=this._page_selector.getWidth()-20;
if(this.num_pages()>1&&available_width>0){
var bar_margin=2;
var bar_width=Math.floor(available_width/this.num_pages())-bar_margin;
bar_width=Math.max(Math.min(bar_width,this.PAGE_SELECTOR_MAX_BAR_WIDTH),this.PAGE_SELECTOR_MIN_BAR_WIDTH);
this._page_selector_interval=Math.ceil(this.num_pages()/Math.floor(available_width/(bar_width+bar_margin)));
this._page_container.style.width=(Math.ceil(this.num_pages()/this._page_selector_interval)*(bar_width+bar_margin))+'px';
this._page_container.update(this._render_page_selector(bar_width,this._page_selector_interval));
this._bar_map=this._page_container.select('.page');
this._update_page_selector();
}
},
_update_page_selector:function(){
if(this._bar_map){
var elements=this._page_container.select('.page.selected');
if(elements.length==1){
elements[0].removeClassName('selected');
}
this._bar_map[Math.floor(this.current_page/this._page_selector_interval)].addClassName('selected');
}
},
_get_page_number_from_bar_element:function(element){
var range=element.title.substring(element.title.indexOf(' ')+1).split(' - ');
var page=parseInt(range[0])-1;
if(range.length>1&&page>Math.floor(this.num_pages()/2)){
page=parseInt(range[1])-1;
}
return page;
},
_create_item_block:function(html,is_new){
if(is_new){
this._inner.insert({top:html});
}else{
this._inner.insert(html);
}
},
_at_end:function(){
return(this.num_pages()==0||(this.num_pages()==(this.current_page+1)));
},
_at_beginning:function(){
return(this.current_page==0);
},
_update_arrow_enablement:function(){
var at_end=this._at_end();
var at_beginning=this._at_beginning();
if(at_end&&at_beginning){
this._disable_prev_and_next();
}else if(at_end){
this._enable_prev_only();
}else if(at_beginning){
this._enable_next_only();
}else{
this._enable_next_and_prev();
}
},
_disable_prev_and_next:function(){
this._right_arrow.addClassName("disabled");
this._left_arrow.addClassName("disabled");
},
_enable_prev_only:function(){
this._right_arrow.addClassName("disabled");
this._left_arrow.removeClassName("disabled");
},
_enable_next_only:function(){
this._right_arrow.removeClassName("disabled");
this._left_arrow.addClassName("disabled");
},
_enable_next_and_prev:function(){
this._right_arrow.removeClassName("disabled");
this._left_arrow.removeClassName("disabled");
},
animate:function(to,from,on_after_scroll){
this._scroll(to-from,on_after_scroll);
},
_scroll:function(num_px,on_after_scroll){
if(num_px){
if(this._scroll_timer){
clearTimeout(this._scroll_timer);
num_px=num_px+(this._target_offset-this._viewport.scrollLeft);
}
this._last_scroll=-9999;
this._target_offset=this._viewport.scrollLeft+num_px;
this._on_after_scroll=on_after_scroll||Glyde.empty_function;
this._continue_scroll(num_px);
}
},
_continue_scroll:function(num_px){
if(this._near_end(num_px)){
this._move_to_end_and_stop();
}else{
this._move_and_scroll_again(num_px);
}
this._update_arrow_enablement();
},
_move_and_scroll_again:function(num_px){
this._last_scroll=this._viewport.scrollLeft;
this._viewport.scrollLeft+=this._advance_scroll_left(num_px);
var func=function(){
this._continue_scroll([this._target_offset,0].max()-this._viewport.scrollLeft);
}.bind(this);
this._scroll_timer=setTimeout(func,this._scroll_interval());
},
_advance_scroll_left:function(num_px){
return Math.round(num_px*0.15);
},
_scroll_interval:function(){
return Glyde.Browser.IE?10:17;
},
_move_to_end_and_stop:function(){
this._viewport.scrollLeft=this._target_offset;
clearTimeout(this._scroll_timer);
this._scroll_timer=null;
this._on_after_scroll();
},
_near_end:function(num_px){
return(Math.abs(num_px)<=3);
}
});
Glyde.widgets.ScrollWidget.prototype._render_skeleton=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="scroll_viewport_wrapper"');_j.s('>');
_j.ns('<div');_j.s(' class="scroll_viewport"');_j.s('>');
_j.ns('<div');_j.s(' class="scroll_inner"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="scroll_gradient_left"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="scroll_gradient_right"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="scroll_loading_wrapper"');_j.s('>');
_j.ns('<div');_j.s(' class="scroll_loading"');_j.s('>');
_j.ns('<div');_j.s(' class="loading_throbber"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="loading_message"');_j.s('>Loading...');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="scroll_empty_wrapper"');_j.s('>');
_j.ns('<div');_j.s(' class="scroll_empty"');_j.s('>');
_j.ns('<div');_j.s(' class="scroll_empty_message"');_j.s('>');
_j.ns('<span');_j.s('>Sorry, there are no items for sale in this category.');
_j.ns('</span>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="scroll_control"');_j.s('>');
_j.ns(this._render_arrows());
_j.ns('</div>');
_j.ns('<div');_j.s(' class="page_selector"');_j.s('>');
_j.ns('<div');_j.s(' class="page_container"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
return _j.v();
};
Glyde.widgets.ScrollWidget.prototype._render_item_skeleton=function(left_offset){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="scroll_item_wrapper"');_j.s(' style="'+('left:'+left_offset+'px')+'"');_j.s('>');
_j.ns('</div>');
return _j.v();
};
Glyde.widgets.ScrollWidget.prototype._render_page_selector=function(bar_width,interval){
var _j=new Jaml();
for(var c=0;c<this.num_pages();c+=interval){
_j.ns('<div');_j.s(' class="page"');_j.s(' style="'+('width: '+bar_width+'px')+'"');_j.s(' title="'+((interval>1?'pages':'page')+' '+(c+1)+(interval>1?' - '+((c+interval)>this.num_pages()?this.num_pages():c+interval):''))+'"');_j.s('>');
_j.ns('</div>');
}
return _j.v();
};
Glyde.widgets.ScrollWidget.prototype._render_arrows=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="scroll_arrow_left"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="scroll_arrow_right"');_j.s('>');
_j.ns('</div>');
return _j.v();
};
Glyde.AnchorButton=function(){};
Glyde.AnchorButton.create_all=function(){
var i=0;
var buts=$$('.a_button');
for(i=0;i<buts.length;++i){
Glyde.AnchorButton.add_active_methods(buts[i]);
}
};
Glyde.AnchorButton.create_all_under=function(id){
var buts=$(id).getElementsByClassName('a_button');
for(i=0;i<buts.length;++i){
Glyde.AnchorButton.add_active_methods(buts[i]);
}
};
Glyde.AnchorButton.add_active_methods=function(element){
Event.observe(element,"mousedown",Glyde.AnchorButton.set_active.bindAsEventListener(this,element));
Event.observe(element,"mouseup",Glyde.AnchorButton.restore_active.bindAsEventListener(this,element));
Event.observe(element,"mouseout",Glyde.AnchorButton.restore_active.bindAsEventListener(this,element));
};
Glyde.AnchorButton.set_active=function(event,element){
element.addClassName('active');
};
Glyde.AnchorButton.restore_active=function(event,element){
element.removeClassName('active');
};
document.observe('dom:loaded',Glyde.AnchorButton.create_all);
(function(){
var $=Glyde.$;
var _$=Glyde.$wrapper;
Glyde.Dialog=Glyde.Class.create({
POSITION_BELOW:1,
POSITION_ABOVE:2,
ARROW_WIDTH:21,
ARROW_MIN_LEFT:10,
ARROW_MIN_RIGHT:20,
initialize:function(opts){
opts=opts||{};
this._handle_outside_click=false;
this._is_modal=opts.is_modal!=null?opts.is_modal:true;
this._is_open=opts.is_open!=null?opts.is_open:false;
this._disable_escape=opts.disable_escape!=null?opts.disable_escape:false;
this._should_center=opts.should_center!=null?opts.should_center:true;
this._use_arrow=(opts.should_center!=null&&!this._should_center)?opts.use_arrow:false;
this._is_light=opts.is_light!=null?opts.is_light:false;
this._use_small_close=opts.use_small_close!=null?opts.use_small_close:false;
this._position_preference=opts.position_preference?opts.position_preference:this.POSITION_BELOW;
this._on_enter_key=opts.on_enter_key;
this._actual_position=this._position_preference;
if(this._is_light){
this._is_modal=false;
this._disable_escape=false;
this._handle_outside_click=true;
}
this.on_open=opts.on_open||Glyde.empty_function;
this.on_close=opts.on_close||Glyde.empty_function;
this.on_position=opts.on_position||Glyde.empty_function;
this._mouse_down_handler=this._handle_mouse_down.bindAsEventListener(this);
this._mouse_up_handler=this._handle_mouse_up.bindAsEventListener(this);
this._resize_handler=this._handle_window_resize.bindAsEventListener(this);
this._close_button_handler=this._handle_close_button.bindAsEventListener(this);
this._mouse_down_within_dialog=false;
},
should_center:function(){
return true;
},
_set_container_ids:function(instance_num){
this._dialog_container_id='modal_dialog_container'+instance_num;
this._container_id='modal_dialog_content'+instance_num;
this._arrow_id='dialog_arrow'+instance_num;
this._close_button_id='dialog_close_button'+instance_num;
},
open:function(target,html,dialog_parent,instance_num){
try{
instance_num=(instance_num!=null)?instance_num:Glyde.Dialog._open_instances.length;
target=$(target);
this._set_container_ids(instance_num);
this._instance_num=instance_num;
this._create_container_if_necessary(instance_num);
if(dialog_parent){
this._dialog_parent=dialog_parent;
dialog_parent._dialog_child=this;
_$(this._dialog_container_id).addClassName('child_dialog');
}
if(!this._is_open){
var dialog_container=$(this._dialog_container_id);
this._set_modal_shield_if_necessary();
var content_container=$(this._container_id);
this._compose_content(content_container,html);
this._target=target;
this._set_dialog_and_arrow_position();
this._disable_known_problem_divs_for_ff2();
var close_box_container=_$(dialog_container).g_select('.dialog_close_box',dialog_container).first();
if(this._use_small_close){
close_box_container.addClassName('small');
}else{
close_box_container.removeClassName('small');
}
close_box_container.observe('click',this._close_button_handler);
_$(dialog_container).display();
this._is_open=true;
this.on_open();
}
if(this._is_modal){
var offsets=document.viewport.getScrollOffsets();
this.modal_shield().resize(offsets);
}
this._watch_window_resize();
Glyde.Dialog._open_instances.push(this);
if(Glyde.Dialog._open_instances.length==1){
_$(document).observe(this._meta_key_event_name(),
Glyde.Dialog._handle_meta_key);
}
if(this._handle_outside_click){
this._setup_outside_click_handlers();
this._setup_click_handle=this._setup_outside_click_handlers.bind(this);
this._remove_click_handle=this._remove_outside_click_handlers.bind(this);
Glyde.notify.subscribe('modal_shield:hidden',this._setup_click_handle);
Glyde.notify.subscribe('modal_shield:shown',this._remove_click_handle);
}
var container_node=$(this._container_id);
if(container_node){
var matches=_$(container_node).g_select('.initial_focus');
if(matches.length){matches[0].focus();}
}
}catch(ex){console.log(ex)}
},
_meta_key_event_name:function(){
return(Glyde.Browser.WEBKIT_VERSION!=null)?'keydown':'keypress';
},
close:function(no_on_close){
if(this._is_open){
var dialog_container=$(this._dialog_container_id);
_$(dialog_container).undisplay();
this._hide_modal_shield_if_necessary();
this._is_open=false;
if(this._dialog_parent){
this._dialog_parent._dialog_child=null;
this._dialog_parent=null;
_$(this._dialog_container_id).removeClassName('child_dialog');
}
var close_box_container=_$(this._dialog_container_id).g_select('.dialog_close_box').first();
_$(close_box_container).stopObserving('click',this._close_button_handler);
this._enable_known_problem_divs_for_ff2();
if(this._handle_outside_click){
this._remove_outside_click_handlers();
Glyde.notify.unsubscribe('modal_shield:hidden',this._setup_click_handle);
Glyde.notify.unsubscribe('modal_shield:shown',this._remove_click_handle);
}
this._stop_watching_window_resize();
if(this._use_arrow){
_$(this._arrow_id).undisplay();
}
this._close_finished(no_on_close);
}
},
container_element:function(){
return $(this._container_id);
},
$$:function(selector){
return _$(this._container_id).g_select(selector);
},
$$first:function(selector){
return this.$$(selector).first();
},
_close_finished:function(no_on_close){
if(!no_on_close){
this.on_close();
}
if(this===Glyde.Dialog._open_instances[Glyde.Dialog._open_instances.length-1]){
Glyde.Dialog._open_instances.pop();
}else{
var i,len,index=-1;
for(i=0,len=Glyde.Dialog._open_instances.length;i<len;++i){
if(Glyde.Dialog._open_instances[i]===this){
index=i;
break;
}
}
if(index>-1){
Glyde.Dialog._open_instances.splice(index,1);
}
}
if(Glyde.Dialog._open_instances.length==0){
_$(document).stopObserving(this._meta_key_event_name(),
Glyde.Dialog._handle_meta_key);
}
this._target=null;
},
undisplay:function(){
_$(this._dialog_container_id).undisplay();
},
display:function(){
_$(this._dialog_container_id).display();
},
target:function(){
return this._target;
},
is_open:function(){
return this._is_open;
},
modal_shield:function(){
if(!this._modal_shield){
this._modal_shield=new ModalShield(true);
}
return this._modal_shield;
},
_target_for_click_handlers:function(){
var targ=document;
if(Glyde.Browser.TRUE_FF){
targ=document.body;
}
return targ;
},
_setup_outside_click_handlers:function(){
var targ=_$(this._target_for_click_handlers());
targ.observe('mouseup',this._mouse_up_handler);
targ.observe('mousedown',this._mouse_down_handler);
},
_remove_outside_click_handlers:function(){
var targ=_$(this._target_for_click_handlers());
targ.stopObserving('mouseup',this._mouse_up_handler);
targ.stopObserving('mousedown',this._mouse_down_handler);
},
_disable_known_problem_divs_for_ff2:function(){
if(Glyde.Browser.FF2){
var div=$('list_view_pages');
if(div)div.style.overflow='hidden';
}
},
_enable_known_problem_divs_for_ff2:function(){
if(Glyde.Browser.FF2){
var div=$('list_view_pages');
if(div)div.style.overflow='auto';
}
},
_create_container_if_necessary:function(instance_num){
if(!$(this._container_id)){
var html=this._render_html(instance_num);
_$(document.body).getLastElementChild().after(html);
return true;
}
return false;
},
_get_dialog_container_id:function(){
return this._dialog_container_id;
},
_get_container_id:function(){
return this._container_id;
},
_handle_window_resize:function(){
this._set_dialog_and_arrow_position();
_$(this._dialog_container_id).display();
},
_watch_window_resize:function(){
_$(window).observe('resize',this._resize_handler);
},
_stop_watching_window_resize:function(){
_$(window).stopObserving('resize',this._resize_handler);
},
_set_modal_shield_if_necessary:function(){
if(this._is_modal){
var dialog_container=$(this._dialog_container_id);
if(Glyde.Dialog._open_instances.length!=0){
var curr_z_index=parseInt(dialog_container.getStyle('z-index'));
var new_z_index=dialog_container.style.zIndex=curr_z_index+20;
this._modal_shield_prev_z_index=this.modal_shield().z_index();
this.modal_shield().set_z_index(new_z_index-10);
}
this.modal_shield().show();
}
},
_hide_modal_shield_if_necessary:function(){
var other_modal_instances=[],i,len,inst;
for(i=0,len=Glyde.Dialog._open_instances.length;i<len;++i){
inst=Glyde.Dialog._open_instances[i];
if(inst._is_modal){
other_modal_instances.push(inst);
}
}
if(this._is_modal&&other_modal_instances.length==1){
this.modal_shield().hide();
}
},
_set_dialog_and_arrow_position:function(){
this._actual_position=this._position_preference;
if(this._should_center){
this.center_in_visible_area();
}else{
var container_node=$(this._dialog_container_id);
this._position_context={
viewport_bounds:Glyde.Browser.viewportBounds(),
dialog_container:container_node,
dialog_dims:_$(container_node).getDimensions(),
target_pos:_$(this._target).viewportOffsetFromRoot(),
target_dims:_$(this._target).getDimensions()
};
this._position();
if(this._use_arrow){
var arrow=$(this._arrow_id);
arrow.className='dialog_arrow '+(this._actual_position==this.POSITION_BELOW?'up':'down');
this._position_arrow(arrow);
_$(arrow).display();
}
this.on_position(container_node,this._target,this._arrow_id);
}
},
_position:function(){
this._position_horizontal();
this._position_vertical();
this._ensure_dialog_within_viewport();
},
_position_horizontal:function(){
var ctx=this._position_context;
var dialog_left=ctx.target_pos.left+Math.round((ctx.target_dims.width/2)-(ctx.dialog_dims.width/2));
ctx.dialog_container.style.left=dialog_left+'px';
},
_position_vertical:function(){
var ctx=this._position_context;
var new_top;
var dc_wrapper=_$(ctx.dialog_container);
if(this._actual_position==this.POSITION_BELOW){
new_top=ctx.target_pos.top+ctx.target_dims.height+(this._use_arrow?10:0)-this._dialog_px_up_from_target();
dc_wrapper.removeClassName('position_above');
}else{
new_top=ctx.target_pos.top-ctx.dialog_dims.height;
dc_wrapper.addClassName('position_above');
}
ctx.dialog_container.style.top=new_top+'px';
},
_dialog_px_up_from_target:function(){
return 0;
},
_ensure_dialog_within_viewport:function(){
var ctx=this._position_context;
var dialog_left=parseInt(ctx.dialog_container.style.left,10);
var viewport_margin=10;
var scrollbar_right_margin=Glyde.Browser.IE?0:15;
var available_width=ctx.viewport_bounds.width-viewport_margin-scrollbar_right_margin;
var delta=available_width-(dialog_left+ctx.dialog_dims.width);
var new_left=dialog_left;
if(delta<0){
new_left=Math.max(0,dialog_left+delta+ctx.viewport_bounds.offset_left);
}else if(dialog_left<viewport_margin+ctx.viewport_bounds.offset_left){
new_left=viewport_margin+ctx.viewport_bounds.offset_left;
}
ctx.dialog_container.style.left=new_left+'px';
var bottom=parseInt(ctx.dialog_container.style.top)+ctx.dialog_dims.height+ctx.viewport_bounds.offset_top;
var top=parseInt(ctx.dialog_container.style.top);
if(this._actual_position==this.POSITION_BELOW&&bottom>(ctx.viewport_bounds.offset_top+ctx.viewport_bounds.height)){
if(ctx.target_pos.top-ctx.dialog_dims.height>ctx.viewport_bounds.offset_top+viewport_margin){
this._actual_position=this.POSITION_ABOVE;
this._position_vertical();
}
}else if(this._actual_position==this.POSITION_ABOVE&&top<ctx.viewport_bounds.offset_top){
this._actual_position=this.POSITION_BELOW;
this._position_vertical();
}
},
_position_arrow:function(arrow){
var ctx=this._position_context;
var dialog_left=parseInt(ctx.dialog_container.style.left);
var new_left=Math.round(ctx.target_pos.left+(ctx.target_dims.width/2)-(this.ARROW_WIDTH/2)-dialog_left);
new_left+=this._dialog_arrow_left_offset_from_default();
var min_left=this.ARROW_MIN_LEFT;
var max_left=ctx.dialog_dims.width-this.ARROW_WIDTH-this.ARROW_MIN_RIGHT
new_left=Math.max(new_left,min_left);
new_left=Math.min(new_left,max_left);
arrow.style.left=new_left+'px';
return new_left;
},
_dialog_arrow_left_offset_from_default:function(){
return 0;
},
center_in_visible_area:function(){
var elem=$(this._dialog_container_id);
var el_width=elem.offsetWidth;
var el_height=elem.offsetHeight;
if(el_width==0&&el_height==0){
var dims=elem.dimensions_when_invisible();
el_width=dims.width;
el_height=dims.height;
}
var viewport_bounds=Glyde.Browser.viewportBounds();
var left=Math.max(5,(viewport_bounds.offset_left+(viewport_bounds.width-el_width)/2));
var top=100;
elem.setStyle({left:left+'px',top:top+'px'});
},
_handle_close_button:function(event){
this.close();
},
_handle_mouse_down:function(event){
if(ModalShield._is_shown)return;
if(this._click_is_within_dialog(_$(event).element())){
this._mouse_down_within_dialog=true;
}
},
_handle_mouse_up:function(event){
if(ModalShield._is_shown)return;
var target=_$(event).element();
var click_in_this_dialog=this._click_is_within_dialog(target);
var click_in_child_dialog=(this._dialog_child&&this._dialog_child._click_is_within_dialog(target));
if(!click_in_this_dialog&&!click_in_child_dialog&&
this._close_on_mouseup(event)){
this.close();
}
this._mouse_down_within_dialog=false;
},
_close_on_mouseup:function(event){
return!this._mouse_down_within_dialog;
},
_click_is_within_dialog:function(element){
return _$(element).descendantOf(this._dialog_container_id);
},
_compose_content:function(container,html){
container.innerHTML=html;
},
_dispose_of_content:function(container){
container.innerHTML='';
}
});
Glyde.Dialog._open_instances=[];
Glyde.Dialog.close=function(){
if(Glyde.Dialog._open_instances.length>0){
var last=Glyde.Dialog._open_instances[Glyde.Dialog._open_instances.length-1];
if(last)last.close();
}
};
Glyde.Dialog._handle_meta_key=function(event){
var oi=Glyde.Dialog._open_instances;
var last_dialog=oi[oi.length-1];
if(event.keyCode==27&&!last_dialog._disable_escape){
last_dialog.close();
}
if(event.keyCode==13&&last_dialog._on_enter_key!=null){
event.stop();
last_dialog._on_enter_key();
}
};
var ModalShield=Glyde.Class.create({
SCROLL_OFFSET_POLLING_SECONDS:0.25,
initialize:function(no_show){
this.elem_id='modal_shield';
this.on_resize=this._on_resize.bindAsEventListener(this);
this._create_element();
if(!no_show){
this.show();
}
},
show:function(){
this._display();
this._make_heavy_elements_invisible();
ModalShield._is_shown=true;
Glyde.notify.publish('modal_shield:shown');
},
hide:function(){
this._hide();
this._make_heavy_elements_visible_again();
ModalShield._is_shown=false;
Glyde.notify.publish('modal_shield:hidden');
},
resize:function(new_offsets){
var viewport_size=Glyde.getViewportDimensions();
var node=$(this.elem_id);
node.setStyle({
width:viewport_size.width+'px',
height:viewport_size.height+'px'
});
if(new_offsets!=null){
node.setStyle({
top:new_offsets.top+'px',
left:new_offsets.left+'px'
});
}
},
destroy:function(){
this.hide();
},
z_index:function(){
return $(this.elem_id).style.zIndex||1000;
},
set_z_index:function(new_z_index){
$(this.elem_id).style.zIndex=new_z_index;
},
_create_element:function(){
if(!$(this.elem_id)){
var html_to_insert=
'<div class="modal_shield" id="modal_shield"></div>';
_$(document.body).getLastElementChild().after(html_to_insert);
}
},
_display:function(){
this._scroll_offsets=document.viewport.getScrollOffsets();
this.resize();
$(this.elem_id).appear({duration:0.5,to:0.6});
this._start_event_handlers();
},
_make_heavy_elements_invisible:function(){
this._disable_elements(document.getElementsByTagName('SELECT'));
},
_disable_elements:function(elements){
var i=0,e=null;
var len=elements.length;
for(i;i<len;++i){
e=elements[i];
if(!e.disabled){
e.disabled=true;
e._reenable=true;
}
}
},
_enable_elements:function(elements){
var i=0,e=null;
var len=elements.length;
for(i;i<len;++i){
e=elements[i];
if(e._reenable){
e.disabled=false;
e._reenable=false;
}
}
},
_make_heavy_elements_visible_again:function(){
this._enable_elements(document.getElementsByTagName('SELECT'));
},
_hide:function(){
this._stop_event_handlers();
$(this.elem_id).fade({duration:0.2});
},
_on_resize:function(event){
this.resize();
},
_start_event_handlers:function(){
this._scroll_observer=new PeriodicalExecuter(function(){
var offsets=document.viewport.getScrollOffsets();
if(this._scroll_offsets.top!=offsets.top||this._scroll_offsets.left!=offsets.left){
this._scroll_offsets=offsets;
this.resize(offsets);
}
}.bind(this),this.SCROLL_OFFSET_POLLING_SECONDS);
_$(window).observe("resize",this.on_resize);
},
_stop_event_handlers:function(){
this._scroll_observer.stop();
_$(window).stopObserving("resize",this.on_resize);
}
});
ModalShield._is_shown=false;
})();
Glyde.Dialog.prototype._render_html=function(instance_num){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="modal_dialog_container dialog_container"');_j.s(' id="'+(this._dialog_container_id)+'"');_j.s('>');
_j.ns('<div');_j.s(' class="dialog_close_box"');_j.s('>');
_j.ns('<a');_j.s(' class="dialog_close_button close_button a_button"');_j.s(' id="'+(this._close_button_id)+'"');_j.s(' href="'+("javascript:void(0)")+'"');_j.s('>');
_j.ns('</a>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="dialog_arrow_box"');_j.s('>');
_j.ns('<div');_j.s(' class="dialog_arrow"');_j.s(' id="'+(this._arrow_id)+'"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="dialog_box"');_j.s('>');
_j.ns('<table');_j.s(' cellspacing="'+(0)+'"');_j.s(' cellpadding="'+(0)+'"');_j.s('>');
_j.ns('<tr');_j.s('>');
_j.ns('<td');_j.s(' class="md_tl"');_j.s('>');
_j.ns('</td>');
_j.ns('<td');_j.s(' class="md_tc"');_j.s('>');
_j.ns('</td>');
_j.ns('<td');_j.s(' class="md_tr"');_j.s('>');
_j.ns('</td>');
_j.ns('</tr>');
_j.ns('<tr');_j.s('>');
_j.ns('<td');_j.s(' class="md_cl"');_j.s('>');
_j.ns('</td>');
_j.ns('<td');_j.s(' class="md_cc"');_j.s('>');
_j.ns('<div');_j.s(' class="modal_dialog_content"');_j.s(' id="'+(this._container_id)+'"');_j.s('>');
_j.ns('</div>');
_j.ns('</td>');
_j.ns('<td');_j.s(' class="md_cr"');_j.s('>');
_j.ns('</td>');
_j.ns('</tr>');
_j.ns('<tr');_j.s('>');
_j.ns('<td');_j.s(' class="md_bl"');_j.s('>');
_j.ns('</td>');
_j.ns('<td');_j.s(' class="md_bc"');_j.s('>');
_j.ns('</td>');
_j.ns('<td');_j.s(' class="md_br"');_j.s('>');
_j.ns('</td>');
_j.ns('</tr>');
_j.ns('</table>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</div>');
return _j.v();
};
var AnnotationDialog=Class.create(Glyde.Dialog,{
initialize:function($super,elem){
var opts={
should_center:false,
is_modal:false,
use_arrow:false,
use_small_close:true
};
$super(opts);
},
open:function($super,elem,html){
$super(elem,html);
}
});
var GlydeAlert=Class.create(Glyde.Dialog,{
initialize:function($super,message,target,title,opts){
$super(opts);
this._target=target||null;
if(this._target){
this._should_center=false;
this._use_arrow=true;
}
this._title=title||'Alert';
this._message=message||' ';
this._on_enter_key=this.close.bind(this);
this.open();
},
open:function($super){
$super(this._target,this._render_message());
Glyde.AnchorButton.create_all_under('glyde_alert_dialog');
},
close:function($super){
$super();
}
});
GlydeAlert.prototype._render_message=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="alert_dialog"');_j.s(' id="glyde_alert_dialog"');_j.s('>');
_j.ns('<div');_j.s(' class="dialog_title"');_j.s('>'+(this._title));
_j.ns('</div>');
_j.ns('<div');_j.s(' class="horizontal_divider"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="confirmation_text"');_j.s('>'+(this._message));
_j.ns('</div>');
_j.ns('<div');_j.s(' class="buttons_row"');_j.s('>');
_j.ns('<div');_j.s(' class="button_box sfloatr"');_j.s('>');
_j.ns('<a');_j.s(' class="a_button"');_j.s(' id="ok_button"');_j.s(' href="'+("javascript: void(0)")+'"');_j.s(' onclick="'+("Glyde.Dialog.close()")+'"');_j.s('>&nbsp;');
_j.ns('</a>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</div>');
return _j.v();
};
var GlydeConfirm=Class.create(Glyde.Dialog,{
initialize:function($super,message,target,callback,ok_text,cancel_text,parent_dialog){
$super();
this._target=target||null;
if(this._target){
this._should_center=false;
this._use_arrow=true;
}
this._is_modal=false;
this._use_small_close=true;
this._handle_outside_click=true;
this._message=message||' ';
this._callback=callback||Prototype.emptyFunction;
this._ok_text=ok_text||'Ok';
this._cancel_text=cancel_text||'Cancel';
this._response=false;
this._on_enter_key=this.close.bind(this);
this.on_open=this._on_open.bind(this);
this.open(parent_dialog);
},
open:function($super,parent){
$super(this._target,this._render(),parent);
},
close:function($super){
this._callback(this._response);
$super();
},
on_ok:function(event){
this._response=true;
this.close();
},
on_cancel:function(event){
this._response=false;
this.close();
},
_on_open:function(){
var container=$(this._container_id);
this._ok_button=new DialogButtonWidget(container.select('.ok_button')[0],this._ok_text,{color:'blue'});
this._cancel_button=new DialogButtonWidget(container.select('.cancel_button')[0],this._cancel_text);
this._ok_button.observe('widget:activate',this.on_ok.bindAsEventListener(this));
this._cancel_button.observe('widget:activate',this.on_cancel.bindAsEventListener(this));
},
_handle_mouse_up:function(event){
if(!this._click_is_within_dialog(event.element())){
this.close();
}
this._mouse_down_within_dialog=false;
}
});
GlydeConfirm.prototype._render=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="confirm_dialog"');_j.s('>');
_j.ns('<div');_j.s(' class="message"');_j.s('>'+(this._message));
_j.ns('</div>');
_j.ns('<div');_j.s(' class="buttons"');_j.s('>');
_j.ns('<div');_j.s(' class="ok_button"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="cancel_button"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</div>');
return _j.v();
};
var ImportStatusUpdater=Class.create({
CONTAINING_DIV_ID:'import_status_updater',
IMPORT_STATUS_ID:'import_status',
IMPORT_CANCEL_ID:'import_cancel',
IMPORT_PROGRESS_ID:'import_progress',
PROGRESS_INDICATOR_ID:'progress_img',
EVENT_IMPORT_DONE:'import_updater:done_updating',
EVENT_IMPORT_START:'import_updater:start_updating',
EVENT_IMPORT_CANCELLED:'import_updater:canceled',
poll_ms:2000,
msg_clear_ms:30000,
STATUS_2_DISPLAY:{
initializing:"'Starting collection import'",
authenticating:"'Authenticating with '+this.IMPORT_TYPE_2_SITE_NAME[col_import.import_type]",
authentication_error:"'Please re-enter your '+this.IMPORT_TYPE_2_CREDENTIALS[col_import.import_type]",
reading:"'Reading from '+this.IMPORT_TYPE_2_SITE_NAME[col_import.import_type]",
creating_listings:"'Importing items'",
cancelling:"'Cancelling collection import and removing imported items'",
cancelled:"'Cancellation complete'",
error:"'We\\'re sorry, a server error occurred'",
rollback_error:"'Removing imported items'",
complete:"'Completed'",
scrape_error:"'We\\'re sorry, a server error occurred'"
},
IMPORT_TYPE_2_SITE_NAME:{
listal:'Listal',
library_thing:'LibraryThing',
goodreads:'Goodreads',
dvdspot:'DVDspot'
},
IMPORT_TYPE_2_CREDENTIALS:{
listal:'Listal username and password',
library_thing:'LibraryThing username and password',
goodreads:'email address and Goodreads password',
dvdspot:'DVDspot username and password'
},
initialize:function(elem_id,import_id){
this._elem_id=elem_id;
if(this._import_id){
this.start_poll();
}
},
start_poll:function(import_id){
this._ensure_elem_exists();
this._set_cancel_click_handler();
this._import_id=import_id;
$(this.CONTAINING_DIV_ID).removeClassName('import_error');
if(this._import_id){
Glyde.notify.publish(this.EVENT_IMPORT_START,{import_id:this._import_id});
this._poll_import();
}
},
is_importing:function(){
return(this._importing);
},
_poll_import:function(){
this._importing=true;
new Ajax.Request('/collection_imports/'+this._import_id,{
method:'get',
onComplete:this._update_status.bind(this)
});
},
_ensure_elem_exists:function(){
if(!$(this.IMPORT_STATUS_ID)){
$(this._elem_id).innerHTML=this.to_html();
$(this.PROGRESS_INDICATOR_ID).vhide();
if(this._import_id){
this._set_cancel_click_handler();
}
}
},
_set_cancel_click_handler:function(){
$(this.IMPORT_CANCEL_ID).onclick=this._send_cancel_request.bind(this);
},
_update_status:function(resp,o){
var json=resp.responseJSON;
if(json.success){
var col_import=json.collection_import;
this._ensure_elem_exists();
this._set_elem_innerHTML(col_import);
if(!json.collection_import.completed_at){
this._poll_timer_id=setTimeout(this._poll_import.bind(this),this.poll_ms);
}else{
this._poll_timer_id=null;
this._importing=false;
Glyde.notify.publish(this.EVENT_IMPORT_DONE,{import_id:this._import_id});
if(col_import.status.status=='authentication_error'){
if(typeof Collection!='undefined'){
dialog=Collection.get_instance().open_import_dialog();
eval('dialog._'+col_import.import_type+'_click()');
}
}else{
setTimeout(this._clear_display.bind(this),this.msg_clear_ms);
}
}
}else{
Glyde.page.handle_server_errors(json);
}
},
_clear_display:function(){
$(this._elem_id).innerHTML='';
},
_set_elem_innerHTML:function(col_import){
this._set_status_str(col_import);
this._set_progress_str(col_import);
this._set_cancel_str(col_import);
this._set_status_indicator(col_import);
},
_set_status_indicator:function(col_import){
var elem=$(this.PROGRESS_INDICATOR_ID);
this._show_status_indicator_p(col_import)?elem.vshow():elem.vhide();
if(col_import.status.status&&col_import.status.status.include('error')){
$(this.CONTAINING_DIV_ID).addClassName('import_error');
}
},
_show_status_indicator_p:function(col_import){
return!col_import.completed_at&&col_import.status.status!='complete';
},
_set_cancel_str:function(col_import){
var elem=$(this.IMPORT_CANCEL_ID);
if(this._is_cancellable(col_import)){
elem.innerHTML='Cancel';
}else{
elem.innerHTML='';
elem.onclick=null;
}
},
_is_cancellable:function(col_import){
return!col_import.completed_at&&!col_import.cancelled_at&&col_import.status.status!='complete';
},
_set_progress_str:function(col_import){
var show_progress_p=(col_import.product_count>0||col_import.completed_at)&&!col_import.cancelled_at;
$(this.IMPORT_PROGRESS_ID).innerHTML=this._progress_str(col_import);
},
_progress_str:function(col_import){
if(!col_import.status.total_value)col_import.total_value={'cents':0};
switch(col_import.status.status){
case'creating_listings':
return col_import.listing_count+' of '+col_import.product_count+' done.';break;
case'complete':
var num_not_imported=col_import.product_count-col_import.listing_count;
var str='Imported '+col_import.listing_count+' items valued at $'+(col_import.status.total_value.cents/100).toFixed(2)+'.';
if(num_not_imported>0)
str+=' '+num_not_imported+((num_not_imported>1)?' were':' was')+"n't imported.";
return str;
break;
default:
return'';
}
},
_set_status_str:function(col_import){
$(this.IMPORT_STATUS_ID).innerHTML=
(col_import.status.status?
eval(this.STATUS_2_DISPLAY[col_import.status.status]):
'Collection import in progress')+
'.';
},
_send_cancel_request:function(){
new Ajax.Request('/collection_imports/cancel/'+this._import_id,{
method:'put',
onComplete:this._cancel_request_complete.bind(this)
});
},
_cancel_request_complete:function(){
Glyde.notify.publish(this.EVENT_IMPORT_CANCELLED,{import_id:this._import_id});
}
});
ImportStatusUpdater.prototype.to_html=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' id="import_status_updater"');_j.s('>');
Jaml.x();_j.ns('<img');_j.s(' id="progress_img"');_j.s(' src="'+("images/wait.gif")+'"');_j.s(' />');
Jaml.x();Jaml.x();_j.ns('<span');_j.s(' class="import_text"');_j.s(' id="import_status"');_j.s('>');Jaml.x();
Jaml.x();_j.ns('</span>');Jaml.x();
Jaml.x();_j.ns('<span');_j.s(' class="import_text"');_j.s(' id="import_progress"');_j.s('>');Jaml.x();
Jaml.x();_j.ns('</span>');Jaml.x();
Jaml.x();_j.ns('<a');_j.s(' class="import_text"');_j.s(' id="import_cancel"');_j.s('>');Jaml.x();
Jaml.x();_j.ns('</a>');Jaml.x();
_j.ns('</div>');
return _j.v();
};
var GlydeSelect=Class.create({
GLOBAL_OPTIONS_LIST_CONTAINER:'glyde_select_options_list',
initialize:function(container_id,options_array,selected_option,defer,
extra_options_css_class){
this._container_id=container_id;
this._options=options_array;
this._selected_option=selected_option||this._options[0];
this._selected_option_container_id=this._container_id+'_glyde_select';
this._selected_option_box_id=this._container_id+'_selected_box';
this._down_arrow_id=this._container_id+'_down_arrow';
this._options_list_id=this._container_id+'_glyde_select_options_list';
this._extra_options_css_class=extra_options_css_class||'';
this._document_click_handler=this._handle_document_click.bindAsEventListener(this);
this._document_resize_handler=this._handle_document_resize.bind(this);
this._element_scroll_handler=this._handle_element_scroll.bind(this);
GlydeSelect.all[this._container_id]=this;
this.onchange=Glyde.empty_function;
this.onbeforechange=function(){return true;};
if(!defer){
this.render();
}
this._init_options();
},
render:function(){
$(this._container_id).innerHTML=this._render_selected();
},
render_to_string:function(){
return this._render_selected();
},
handle_container_click:function(event){
this.close_open_select_if_necessary();
GlydeSelect._open_select_container_id=this._container_id;
event=Event.extend(Event.get(event));
this.open_options();
},
open_options:function(){
$(this.GLOBAL_OPTIONS_LIST_CONTAINER).innerHTML=this._render_options();
this._position();
var click_targ=Glyde.Browser.IE?document.body:document;
var func=function(){
Event.observe(document.body,'click',this._document_click_handler);
Event.observe(window,'resize',this._document_resize_handler);
Glyde.notify.subscribe(GlydeSelect.EVENT_ELEMENT_SCROLL,this._element_scroll_handler);
}.bind(this);
setTimeout(func,100);
},
hide_options:function(){
$(this.GLOBAL_OPTIONS_LIST_CONTAINER).undisplay();
Event.stopObserving(document.body,'click',this._document_click_handler);
Event.stopObserving(window,'resize',this._document_resize_handler);
Glyde.notify.unsubscribe(GlydeSelect.EVENT_ELEMENT_SCROLL,this._element_scroll_handler);
},
set_selected_option:function(option_index){
this._selected_option=this._options[option_index];
},
select_value:function(option_value,fire_events){
var index=this.get_index_from_value(option_value);
if(index){
this.select(index,fire_events);
}
},
select:function(option_index,fire_events){
var old_selected=this._selected_option;
this.set_selected_option(option_index);
this.hide_options();
if(old_selected==this._selected_option)return;
var should_change=true;
if(fire_events){
should_change=this.onbeforechange(this._selected_option);
}
if(should_change){
var sell_box=$(this._selected_option_box_id);
if(sell_box){
sell_box.innerHTML=this._selected_option_display_value();
if(this._selected_option.selected_title){
sell_box.title=this._selected_option.selected_title;
}
}
if(fire_events){
this.onchange(this._selected_option.value);
}
}
this._set_always_selected_if_exists();
},
selected_value:function(){
return this._selected_option.value;
},
close_open_select_if_necessary:function(){
if(GlydeSelect._open_select_container_id&&this._container_id!=GlydeSelect._open_select_container_id){
GlydeSelect.all[GlydeSelect._open_select_container_id].hide_options();
}
},
_set_always_selected_if_exists:function(){
var index=-1,i=0;
for(i;i<this._options.length;++i){
if(this._options[i].always_selected){
index=i;
break;
}
}
if(index!=-1){
this.set_selected_option(index);
}
},
_selected_option_display_value:function(){
if(!this._selected_option)return'';
return(this._selected_option.selected_display_value||this._selected_option.display_value||this._selected_option.value);
},
on_option_select:function(event){
var target=Event.element(event);
var selected_option_elem=event.target;
var index=selected_option_elem.id.split('-')[1];
this.select(index,true);
},
_handle_document_click:function(event){
event=Event.get(event);
var target=Event.element(event);
var opts_container=$(this.GLOBAL_OPTIONS_LIST_CONTAINER);
var select_container=$(this._selected_option_container_id);
if(!target.descendantOf(opts_container)&&!target.descendantOf(select_container)){
this.hide_options();
}
},
_handle_document_resize:function(){
this._position();
},
_handle_element_scroll:function(event_name,info){
this.hide_options();
},
_position:function(){
var container=$(this._selected_option_box_id);
var pt=container.viewportOffsetFromRoot();
var height=container.getHeight();
var options_list=$(this.GLOBAL_OPTIONS_LIST_CONTAINER);
options_list.style.top=pt.top+height+'px';
options_list.style.left=pt.left+'px';
options_list.display();
},
_init_options:function(){
var list_box=$(this.GLOBAL_OPTIONS_LIST_CONTAINER);
if(!list_box){
Insertion.After(document.body.lastChild,this._render_options_container());
}
},
get_index_from_value:function(value){
for(var c=0;c<this._options.length;c++){
if(this._options[c].value==value){
return c;
}
}
return null;
}
});
GlydeSelect.EVENT_ELEMENT_SCROLL='element:scroll';
GlydeSelect.all=[];
GlydeSelect.prototype._render_options=function(){
var s=[];
s.push('<div class="glyde_select_options_box ');s.push(this._extra_options_css_class);s.push('">');
for(var i=0;i<this._options.length;++i){
if(this._options[i].always_selected)continue
s.push('<a id="');s.push(this._container_id);s.push('_option-');s.push(i);s.push('" class="option" href="javascript:void (0)" onclick="GlydeSelect.all[\'');s.push(this._container_id);s.push('\'].on_option_select(event)">');
var display_value=this._options[i].display_value
var value=this._options[i].value
s.push('');s.push((display_value?display_value:value));s.push('');
s.push('</a>');
}
s.push('</div>');
return s.join('');
}
GlydeSelect.prototype._render_selected=function(){
var s=[];
s.push('<div id="');s.push(this._selected_option_container_id);s.push('" class="glyde_select"');
s.push('onmouseover="$(this).addClassName(\'hover\')"');
s.push('onmouseout="$(this).removeClassName(\'hover\')"');
s.push('onclick="GlydeSelect.all[\'');s.push(this._container_id);s.push('\'].handle_container_click(event)"');
s.push('>');
s.push('<div id="');s.push(this._selected_option_box_id);s.push('" class="selected_box">');
s.push('');s.push(this._selected_option_display_value());s.push('');
s.push('</div>');
s.push('<div id="');s.push(this._down_arrow_id);s.push('" class="down_arrow">&nbsp;</div>');
s.push('</div>');
return s.join('');
}
GlydeSelect.prototype._render_options_container=function(){
var s=[];
s.push('<div id="glyde_select_options_list" class="glyde_select_options_list">');
s.push('</div>');
return s.join('');
}
var Session=Class.create();
Session.context_2_count={};
Session.increment_context_count=function(context){
if(!Session.context_2_count[context]){
Session.context_2_count[context]=0;
}
Session.context_2_count[context]++;
};
Session.prototype={
dialog_on_cancel:null,
dialog_on_success:null,
return_to_url:null,context_cache:{},initialize:function(options){
this.options=options;
this.dialog_on_cancel=options.overlay_on_cancel||Prototype.emptyFunction;
this.dialog_on_success=options.overlay_on_success||Prototype.emptyFunction;
this._signup_params=options.signup_params||null;
this._fetch_form();
},
_fetch_form:function(){
Session.increment_context_count(this.options.context);
var options={
onComplete:this.on_complete_request.bind(this),
method:'get',
evalScripts:true,
parameters:this._context_parameters()
};
new Ajax.Request('/sessions/new',options);
},
_context_parameters:function(){
var params={};
if(this.options.context){
params.ctx=this.options.context;
params.count=Session.count;
}
return params;
},
on_cancel:function(){
this.dialog.on_cancel();
},
on_complete_request:function(resp,o){
this._hide_buy_box_scroll_bar();
var callbacks={
on_cancel:this.dialog_on_cancel,
on_success:this.dialog_on_success
};
if(resp.responseJSON.success){
this.dialog=new LoginDialog(resp.responseJSON.html,callbacks,
this._signup_params,this.options.user_fragment_str);
}else{
var redirect_location=resp.responseJSON.redirect_to;
window.location=redirect_location;
}
},
_hide_buy_box_scroll_bar:function(){
if(window.BuyPage){
try{
BuyPage.get_instance().buy_box._hide_overflow();
}catch(e){}
}
}
};
var LoginDialog=Class.create(Glyde.Dialog,{
form_id:'login_form',
login_input_id:'login_dialog_user_login',
password_input_id:'login_dialog_user_password',
join_link_id:'join_link',
forgot_link_id:'forgot_link',
initialize:function($super,html,callbacks,signup_params,user_fragment_str){
$super();
this._use_arrow=false;
this._set_callbacks(callbacks);
this.open(null,html);
this._setup_focus_and_https();
this._signup_params=signup_params;
this._user_fragment_str=user_fragment_str;
var join_link=$(this.join_link_id);
if(join_link){
join_link.onclick=this._join_link.bind(this);
}
var forgot_link=$(this.forgot_link_id);
if(forgot_link){
forgot_link.observe('click',this._on_forgot.bind(this));
}
},
close:function(){
this.on_cancel();
Glyde.Dialog.prototype.close.call(this);
},
_set_container_ids:function($super,instance_num){
this._dialog_container_id='login_dialog_container';
this._container_id='login_dialog_content';
this._arrow_id='login_arrow';
this._close_button_id='login_close_button';
},
_join_link:function(){
var opts;
if(this._signup_params){
opts=this._signup_params;
}else{
var curr_url=location.toString();
opts={return_to:curr_url};
}
Glyde.page.header.signup(opts);
},
_on_forgot:function(){
var login_elem=$('login_main_panel');
this._forgot_password_widget=new ForgotPasswordWidget(login_elem,$F(this.login_input_id),null,this.close.bind(this));
return false;
},
_set_callbacks:function(callbacks){
this.callbacks={
on_cancel:Prototype.emptyFunction,
on_success:function(url){location.href=url;}
};
Object.extend(this.callbacks,callbacks||{});
},
_setup_focus_and_https:function(html){
setTimeout(this._set_focus.bind(this),100);Glyde.AnchorButton.create_all_under(this.form_id);
this._possibly_use_https();
},
_set_focus:function(){
if(!Glyde.Browser.IE6){
var l=$(this._dialog_container_id).select('.session_input')[0];
if(l&&l.getValue().strip()==''){
l.focus();
}else{
var p=$(this._dialog_container_id).select('.session_input')[1];
if(p){
if(p.focus)p.focus();
if(p.select)p.select();
}
}
}
},
_possibly_use_https:function(){
if(!Glyde.page.server_API.is_http_page()){
if(Glyde.Browser.SAFARI){
var f=$(this.form_id);
f.onsubmit=function(){return false;}.bind(this);
}
}
this._on_enter_key=this._handle_enter_key.bind(this);
$('login_go').observe('click',this._handle_click_login.bindAsEventListener(this));
},
_submit_function:function(){
if(Glyde.page.server_API.is_http_page()){
return this._submit_using_pipe.bind(this);
}else{
return this._submit_using_form.bind(this);
}
},
_handle_enter_key:function(){
if(this._forgot_password_widget==null){
this._submit_one_request();
}
},
_handle_click_login:function(event){
this._submit_one_request();
},
_submit_one_request:function(){
if(!this._currently_submitting){
this._currently_submitting=true;
var submit_func=this._submit_function();
submit_func();
}
},
_submit_using_form:function(){
var f=$(this.form_id);
var options={
onComplete:this.on_ajax_complete.bind(this),
onLoading:this.on_ajax_loading.bind(this),
parameters:Form.serialize(f)
};
new Ajax.Request(f.action,options);
return false;
},
_submit_using_pipe:function(event){
if(!this._validate()){
this._currently_submitting=false;
return false;
}
var do_submit=function(){
var hidden_input=Glyde.page.server_API.hidden_input_for_iframe_pipe();
var f=$(this.form_id);
f.appendChild(hidden_input);
if(this._user_fragment_str){
var i=document.createElement('input');
i.type='hidden';
i.name='user_fragment_str';
i.value=this._user_fragment_str;
f.appendChild(i);
}
f.submit();
}.bind(this);
Glyde.page.server_API.frame_pipe_callback=this.on_iframe_loaded.bind(this);
Glyde.page.update_submit_button('login_go',do_submit);
return false;
},
_validate:function(){
var is_valid=true;
$(this.password_input_id).removeClassName('error_notice');
$(this.login_input_id).removeClassName('error_notice');
if(Glyde.dom.is_empty_field(this.password_input_id)){
$(this.password_input_id).addClassName('error_notice');
$(this.password_input_id).focus();
is_valid=false;
}
if(Glyde.dom.is_empty_field(this.login_input_id)){
$(this.login_input_id).addClassName('error_notice');
$(this.login_input_id).focus();
is_valid=false;
}
return is_valid;
},
on_cancel:function(){
this.callbacks.on_cancel();
},
on_ajax_loading:function(){
var e=$('login_status_failure');
if(e)e.undisplay();
e=$('login_status_attempting');
if(e)e.display();
e=$('login_go');
if(e)e.disabled=true;
},
on_iframe_loaded:function(data){
Glyde.page.reset_submit_button('login_go');
this._login_complete(data);
},
on_ajax_complete:function(response){
$('login_status_attempting').hide();
var bean=response.responseJSON;
this._login_complete(bean);
},
on_success:function(data){
$('login_status_success').style.display='block';
try{
if(data.redirect_to){
throw data.redirect_to;
}
this.callbacks.on_success(data);
this.close();
}catch(e){
window.location=e.toString();
}
},
on_failure:function(){
Effect.Shake(this._dialog_container_id);
$('login_go').disabled=false;
$('login_status_failure').style.display='block';
$(this.password_input_id).focus();
},
_login_complete:function(data){
this._currently_submitting=false;
data.success?this.on_success(data):this.on_failure(data);
}
});
var ForgotPasswordWidget=Class.create(Glyde.widgets.Widget,{
DOM_CLASS:'forgot_password_widget',
FORM_ID:'login_form',
initialize:function($super,element,default_email,msg_elem,next_func){
$super(element);
this._default_email=default_email;
this._next_func=next_func;
element.innerHTML=this._render_password_reset_email_form(this._default_email);
this._msg_elem=$(msg_elem||'forgot_password_messaging');
this._setup();
},
_setup:function(){
this._continue_button=new Glyde.widgets.BigButtonWidget(this._element.select('.continue')[0],null,{color:'blue'});
this._continue_button.on_activate(this._on_forgot_submit.bind(this));
var form_elem=$(this.FORM_ID);
form_elem.focusFirstElement();
form_elem.observe('keypress',function(event){
if(event.keyCode==13){
this._on_forgot_submit();
}
}.bindAsEventListener(this));
this._set_forgot_password_messaging('Enter the email address you used to create your Glyde account',false);
},
_on_forgot_submit:function(){
var fields_empty=['password_reset_email','password_reset_email_confirm'].inject(false,(
function(result,id){
var elem=$(id);
elem.removeClassName('error_notice');
if(Glyde.dom.is_empty_field(elem)){
elem.addClassName('error_notice');
if(!result)elem.focus();
return true;
}else{
return result;
}
}));
if(!fields_empty){
this._continue_button.disable();
var options={
onComplete:this._on_password_reset.bind(this),
parameters:$('login_form').serialize(true)
};
new Ajax.Request('/password_resets',options);
}
},
_on_password_reset:function(response){
this._continue_button.enable();
var data=response.responseJSON;
if(data.error){
this._set_forgot_password_messaging(data.error,true);
$('password_reset_email').addClassName('error_notice');
$('password_reset_email_confirm').addClassName('error_notice');
}else{
this._set_forgot_password_messaging('');
$(this.FORM_ID).innerHTML=this._render_password_reset(data.email);
if(this._next_func){
new Glyde.widgets.BigButtonWidget($$('#login_main_panel .close')[0],'Close',{color:'blue'})
.on_activate(this._next_func);
}
}
},
_set_forgot_password_messaging:function(string,is_error){
var message_container=this._msg_elem;
is_error?message_container.addClassName('error'):message_container.removeClassName('error');
if(!string.blank()){
message_container.display();
message_container.innerHTML=string;
}else{
message_container.undisplay();
message_container.innerHTML='';
}
}
});
ForgotPasswordWidget.prototype._render_password_reset_email_form=function(email_address){
var _j=new Jaml();
_j.ns('<div');_j.s(' id="login_header"');_j.s('>');
_j.ns('<h4');_j.s(' class="sfloatl"');_j.s('>Password Help');
_j.ns('</h4>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="login_status"');_j.s(' id="forgot_password_messaging"');_j.s('>');
_j.ns('</div>');
_j.ns('<form');_j.s(' id="login_form"');_j.s(' method="'+('POST')+'"');_j.s(' onsubmit="'+('return false;')+'"');_j.s('>');
_j.ns('<label');_j.s(' for="'+('password_reset_email')+'"');_j.s('>Email');
_j.ns('</label>');
_j.ns('<input');_j.s(' class="session_input"');_j.s(' id="password_reset_email"');_j.s(' name="'+('password_reset[email]')+'"');_j.s(' value="'+(email_address||'')+'"');_j.s(' tabindex="'+(1)+'"');_j.s('>');
_j.ns('</input>');
_j.ns('<label');_j.s(' for="'+('password_reset_email_confirm')+'"');_j.s('>Confirm Email');
_j.ns('</label>');
_j.ns('<input');_j.s(' class="session_input"');_j.s(' id="password_reset_email_confirm"');_j.s(' name="'+('password_reset[email_confirmation]')+'"');_j.s(' tabindex="'+(2)+'"');_j.s('>');
_j.ns('</input>');
_j.ns('<div');_j.s(' id="submit_part"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="continue button"');_j.s(' tabindex="'+(3)+'"');_j.s('>Continue');
_j.ns('</div>');
_j.ns('</form>');
return _j.v();
};
ForgotPasswordWidget.prototype._render_password_reset=function(email_address){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="password_reset_message"');_j.s('>');
_j.ns('You should receive an email at');
_j.ns('<b');_j.s('>'+(email_address));
_j.ns('</b>');
_j.ns('within minutes. Please click the link in the email to change your password.');
_j.ns('<br');_j.s(' />');
_j.ns('<br');_j.s(' />');
_j.ns('If you don\'t receive an email, please check your spam or junk mail folder. If you have any questions, please contact service@glyde.com.');
_j.ns('</div>');
_j.ns('<div');_j.s(' id="submit_part"');_j.s('>');
_j.ns('<div');_j.s(' class="close button"');_j.s('>');
_j.ns('</div>');
_j.ns('</div>');
return _j.v();
};
var CouponCodeWidget=Class.create(Glyde.widgets.Widget,{
MESSAGE_COUPON_APPLIED:'coupon_code_widget:coupon_applied',
MESSAGE_COUPON_CANCELLED:'coupon_code_widget:coupon_cancelled',
COOKIE_NAME:'glyde:coupon_code_widget',
initialize:function($super,element,coupon_code,glu,storefront_id){
$super(element);
this._coupon_code=coupon_code||null;
this._glu=glu;
this._storefront_id=storefront_id;
this.$$first('.enter_link').onclick=this.open_input.bind(this);
this.$$first('.apply').onclick=this._handle_apply_code_click.bind(this);
this.$$first('.cancel_coupon').onclick=this.cancel.bind(this);
if(this._set_code_from_cookie()){
this.open_input();
this.$$first('input').value=this._coupon_code;
this.apply_code();
}
},
open_input:function(){
var coupon_box=this._element;
coupon_box.removeClassName('coupon_link');
coupon_box.removeClassName('coupon_accepted');
coupon_box.addClassName('coupon_entry');
var input=this.$$first('input');
input.focus();
input.onenterkey(this._on_input_enter.bindAsEventListener(this));
},
save_code:function(){
if(!Glyde.is.empty_string(this._coupon_code)){
Glyde.cookie.set(this.COOKIE_NAME,this._coupon_code);
}
},
coupon_code:function(){
return this._coupon_code;
},
has_unapplied_code:function(){
var _has_unapplied_code=false;
var current_value=this._coupon_code_input_value();
if(current_value!=this._coupon_code&&
current_value!=null&&
current_value!=''){
_has_unapplied_code=true;
}
return _has_unapplied_code;
},
_handle_apply_code_click:function(event){
this.apply_code();
},
apply_code:function(client_callback){
if(!this._applying_code){
this._coupon_code=this._coupon_code_input_value();
if(this._coupon_code==''){
this.cancel();
return;
}
this._applying_code=true;
var coupon_box=this._element;
var success_callback=function(){
coupon_box.removeClassName('coupon_entry');
coupon_box.addClassName('coupon_accepted');
Glyde.notify.publish(this.MESSAGE_COUPON_APPLIED,{code:this._coupon_code,
client_callback:client_callback});
};
this._validate_code(success_callback.bind(this));
}
},
apply_code_if_exists:function(callback){
var local_callback=callback||Glyde.empty_function;
if(this.has_unapplied_code()){
this.apply_code(local_callback);
}else{
local_callback();
}
},
cancel:function(){
var coupon_box=this._element
coupon_box.removeClassName('coupon_accepted');
coupon_box.addClassName('coupon_link');
this._coupon_code=null;
Glyde.notify.publish(this.MESSAGE_COUPON_CANCELLED,{code:this._coupon_code});
},
_coupon_code_input_value:function(){
var input=this.$$first('.coupon_input_box input');
return((input!=null)?this.$$first('.coupon_input_box input').value:null);
},
_set_code_from_cookie:function(){
var val=Glyde.cookie.get(this.COOKIE_NAME);
if(!Glyde.is.empty_string(val)){
this._coupon_code=val;
Glyde.cookie.remove(this.COOKIE_NAME);
return true;
}else{
return false;
}
},
_on_input_enter:function(event){
Event.stop(Event.get(event));
this.apply_code();
},
_validate_code:function(success_callback){
var options={
method:'get',
parameters:{
code:this._coupon_code,
glu_id:this._glu.id,
storefront_id:this._storefront_id
},
onComplete:function(resp,o){
var applying_code=false;
var data=resp.responseJSON;
if(data){
if(data.success){
(success_callback||Prototype.emptyFunction)(data);
var tr=ConversionTracker.get_instance();
tr.doGAFunction('_setCustomVar',2,'User-Type','Coupon-User',1);
}else{
this._coupon_code=null;
var coupon_box=this._element;
var elem=this._element;
if(coupon_box.hasClassName('coupon_entry')){
elem=this.$$first('input');
}else{
this.open_input();
elem=this.$$first('input');
}
applying_code=true;
this._glyde_alert=
new GlydeAlert('Invalid coupon code',elem,
'Warning',
{position_preference:Glyde.Dialog.prototype.POSITION_ABOVE,
on_close:this._on_alert_close.bind(this)});
elem.blur();
}
}
this._applying_code=applying_code;
}.bind(this)
};
new Ajax.Request('/buy_coupons/exists',options);
},
_on_alert_close:function(){
this._applying_code=false;
this._glyde_alert.target().focus();
}
});
var MerchandisingScrollWidget=Class.create(Glyde.widgets.ScrollWidget,{
DEFAULT_DELAY_MS:(30*1000),
ACTIVE_PAGE_CHANGE:'merchandising_scroll_widget:active_page_change',
INTERNAL_PAGE_SIZE:1,
MAX_COVER_WIDTH:84,
MAX_COVER_HEIGHT:117,
RANDOM_PAGE_WINDOW_SIZE:15,
initialize:function($super,element,page_size,disable_auto_animation,start_page){
this._paging_params={};
this._item_size=page_size;
this._use_auto_animation=!disable_auto_animation;
this._auto_animating=false;
this._glu_cache={};
this._last_count=0;
this._user_controlled=false;
$super(element,this.INTERNAL_PAGE_SIZE,start_page);
this._mouse_over_handler=this._handle_mouseover.bindAsEventListener(this);
this._mouse_out_handler=this._handle_mouseout.bindAsEventListener(this);
this._element.observe('mouseover',
this._mouse_over_handler);
this._element.observe('mouseout',
this._mouse_out_handler);
},
shutdown_observations:function(){
this._element.stopObserving('mouseover',this._mouse_over_handler);
this._element.stopObserving('mouseout',this._mouse_out_handler);
this._stop_timer();
},
_request_params:function(page_range){
var item_start=page_range[0]*this._page_size;
var item_end=(page_range[1]+1)*this._page_size;
var num_pages=1+(page_range[1]-page_range[0]);
var params={
page:page_range[0],
num_pages:num_pages,
offset:item_start*this._item_size,
limit:(item_end-item_start)*this._item_size
};
if(this._randomize_page_order&&this._first_random_query){params.full_pages=true;}
return params;
},
initial_load:function(start_page){
this.refresh(start_page,true);
},
refresh:function($super,start_page,randomize_page_order){
this._total_items=null;
this._randomize_page_order=randomize_page_order||false;
if(this._randomize_page_order){
this._random_window_size=this.RANDOM_PAGE_WINDOW_SIZE;
this._random_offset=Glyde.random_integer(0,this._random_window_size-2);
this._first_random_query=true;
}
if(this._use_auto_animation){this._safe_restart_timer();}
$super(start_page);
},
should_refresh_at_end:function(){
return true;
},
auto_page_forward:function(){
if(this._at_end()){
if(this.should_refresh_at_end()){
this.refresh();
return;
}else{
this._safe_restart_timer();
}
}else{
this.page_forward('auto_animate',true);
}
},
page_forward:function($super,animation_function_name,is_auto){
if(this._use_auto_animation){this._safe_restart_timer();}
if(!is_auto){
Glyde.notify.publish(this.ACTIVE_PAGE_CHANGE);
this._set_to_user_control_mode();
}
$super(animation_function_name);
},
page_back:function($super,animation_function_name,is_auto){
if(this._use_auto_animation&&!this._user_controlled){
this._restart_timer();
}
if(!is_auto){
Glyde.notify.publish(this.ACTIVE_PAGE_CHANGE);
this._set_to_user_control_mode();
}
$super();
},
_handle_mouseover:function(e){
var target=Event.element(Event.get(e));
if(target){
if(target.hasClassName('cover')||target.hasClassName('sticker')){
var glu_id=this._get_glu_id(target);
this._on_cell_mouseover({elem:target,id:glu_id,event:e});
}
}
},
_handle_mouseout:function(e){
var target=Event.element(Event.get(e));
if(target){
if(target.hasClassName('cover')||target.hasClassName('sticker')){
var glu_id=this._get_glu_id(target);
this._on_cell_mouseout({elem:target,id:glu_id,event:e});
}
}
},
_on_cell_mouseover:function(){
},
_on_cell_mouseout:function(){
},
_start_timer:function(){
this._timer=setTimeout(this.auto_page_forward.bind(this),this.DEFAULT_DELAY_MS);
},
_stop_timer:function(){
if(this._timer){
clearTimeout(this._timer);
this._timer=null;
}
},
_safe_restart_timer:function(){
if(!this._user_controlled){
this._restart_timer();
}
},
_restart_timer:function(){
this._stop_timer();
this._start_timer();
},
_set_to_user_control_mode:function(){
this._user_controlled=true;
this._stop_timer();
},
auto_animate:function(to,from,on_after_scroll){
this._auto_animating=true;
if((to-from)>0){
var options={
afterFinish:function(){
this._update_arrow_enablement();
this._auto_animating=false;
}.bind(this),
duration:3.0,
transition:Effect.Transitions.easeFromTo
};
new Effect.Tween(this._viewport,
from,
to,
options,
'scrollLeft');
}
},
set_page:function($super,page,animation_func_name){
if(this._auto_animating)return;
$super(page,animation_func_name);
},
_render_pages:function(page_range,callback){
var server_page_range=page_range;
if(this._randomize_page_order){
server_page_range=[
this._offset_page(page_range[0]),
this._offset_page(page_range[1])
];
if(server_page_range[0]>server_page_range[1]){
server_page_range[0]=0;
server_page_range[1]=this._random_window_size;
}
}else{
server_page_range=page_range;
}
this._send_paging_request_and_render(page_range,server_page_range,callback);
},
_offset_page:function(page_num){
return(page_num<this._random_window_size)?(page_num+this._random_offset)%this._random_window_size:page_num;
},
_send_paging_request_and_render:function(page_range,server_page_range,callback){
var params=this._request_params(server_page_range);
var options={
parameters:params,
method:'get',
onComplete:function(resp,o){
this._on_complete_paging_request(resp,o,page_range,server_page_range,callback);
}.bind(this)
};
this._send_request(options);
},
_set_count_from_response:function(count){
if(count)this._last_count=count;
},
_on_successful_glu_request:function(count,glus,page_range,callback){
this._set_count_from_response(count);
this._sniff_glus(glus);
if(glus.length==0&&this._paging_params.page>0){
var func=function(){
this._stop_timer();
this.refresh(0);
}.bind(this);
setTimeout(func,20);
return;
}
var total_item_wrappers=Math.ceil(count/(this._item_size*this._page_size));
var pages=[];
for(var c=page_range[0];c<=page_range[1];c++){
var start=(c-page_range[0])*this._page_size*this._item_size;
var stop=start+(this._page_size*this._item_size);
var slice=glus.slice(start,stop);
var items_html=slice.map(this._glu_html.bind(this)).join('');
pages.push({page_index:c,items:[items_html]});
}
(callback||this._on_pages_ready.bind(this))(pages,total_item_wrappers);
},
_on_complete_paging_request:function(resp,o,page_range,server_page_range,callback){
this._paging_params=resp.request.options.parameters;
var data=resp.responseJSON;
if(data&&data.success){
var count=data.count||this._last_count;
var glus=data.glus;
if(data.count!=null){
if(this._randomize_page_order&&this._first_random_query){
var num_whole_pages=Math.floor(data.count/this._item_size);
if(this._random_window_size>num_whole_pages){this._random_window_size=num_whole_pages;}
var page_num=parseInt(data.page);
if(page_num!=resp.request.options.parameters.page){this._random_offset=page_num;}
this._first_random_query=false;
}
}
this._on_successful_glu_request(count,glus,page_range,callback);
}else if(!data||!data.success){
this._stop_timer();
this._try_paging_request_again(page_range,server_page_range,callback);
}else{
Glyde.page.handle_server_errors(data);
}
},
_send_request:function(options){
new Ajax.Request('/glus/browse.js',options);
},
_try_paging_request_again:function(page_range,server_page_range,callback){
var func=function(){
localcallback=function(){
this._safe_restart_timer();
(callback||Glyde.empty_function)();
}.bind(this);
this._send_paging_request_and_render(page_range,server_page_range,localcallback);
}.bind(this);
setTimeout(func,10000);
},
_cover_extension:function(){
return'b';
},
_sniff_glus:function(glus){
var len=glus.length;
var glu=null;
for(var i=0;i<len;++i){
glu=glus[i];
glu.glu_id=glu.id;
glu.image_url=Glyde.image.fully_qualified_cover_url_for_max_w_h(glu,this.MAX_COVER_WIDTH,this.MAX_COVER_HEIGHT,this._cover_extension());
glu.buy_box_image_url=Glyde.image.fully_qualified_cover_url_for_max_w_h(glu,170,240);
this._glu_cache[glu.id]=glu;
this._post_fetch_process_glu_data(glu);
}
},
_get_glu_id:function(elem){
var scroll_item_box=elem.hasClassName('scroll_item_box')?elem:elem.up('.scroll_item_box');
return scroll_item_box.className.split(/glu_id_/)[1];
},
_post_fetch_process_glu_data:function(glu){
}
});
MerchandisingScrollWidget.prototype._glu_html=function(glu){
var _j=new Jaml();
var dims=Glyde.image.dimensions_from_cover_url(glu.image_url);
var style="background-image: url('"+glu.image_url+"')";
_j.ns('<div');_j.s(' class="'+('scroll_item_box glu_id_'+glu.id)+'"');_j.s('>');
_j.ns('<div');_j.s(' class="scroll_item"');_j.s(' style="'+(style)+'"');_j.s('>');
_j.ns('<a');_j.s(' class="cover"');_j.s(' style="'+("width: "+dims.width+"px; height: "+dims.height+"px;")+'"');_j.s('>');
if(glu.msrp_percent_off){
_j.ns(this._render_save_sticker(glu));
}
_j.ns('</a>');
_j.ns('<div');_j.s(' class="scroll_item_info"');_j.s('>');
_j.ns(this._render_glu_price(glu));
_j.ns('</div>');
_j.ns('</div>');
_j.ns('</div>');
return _j.v();
};
MerchandisingScrollWidget.prototype._render_glu_price=function(glu){
var _j=new Jaml();
if(glu.lowest_price_cents!=-1){
_j.ns('$'+Glyde.Money.format_cents(glu.lowest_price_cents));
}
else{
_j.ns('Out of Stock');
}
return _j.v();
};
MerchandisingScrollWidget.prototype._render_save_sticker=function(glu){
var _j=new Jaml();
if(Glyde.Browser.IE6){
_j.ns('<div');_j.s(' class="'+('save_sticker small_save percent_'+glu.msrp_percent_off)+'"');_j.s(' id="'+('sticker_image_'+glu.id)+'"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="sticker"');_j.s(' id="'+('sticker_'+glu.id)+'"');_j.s('>');
_j.ns('</div>');
}
else{
_j.ns('<div');_j.s(' class="'+('sticker save_sticker small_save percent_'+glu.msrp_percent_off)+'"');_j.s(' id="'+('sticker_image_'+glu.id)+'"');_j.s('>');
_j.ns('</div>');
}
return _j.v();
};
MerchandisingScrollWidget.prototype._render_arrows=function(){
var _j=new Jaml();
_j.ns('<a');_j.s(' class="scroll_arrow_left"');_j.s(' href="'+('javascript:void(0)')+'"');_j.s('>');
_j.ns('</a>');
_j.ns('<a');_j.s(' class="scroll_arrow_right"');_j.s(' href="'+('javascript:void(0)')+'"');_j.s('>');
_j.ns('</a>');
return _j.v();
};
var HowToWidget=Class.create(Glyde.widgets.Widget,{
MESSAGE_CLOSE:'how_to_widget:closed',
DOM_CLASS:'how_to_widget',
initialize:function($super,element,url){
this._html_url=url;
$super(element);
this._fetch_html();
},
_fetch_html:function(){
var options={
method:'get',
onComplete:this._on_after_html_load.bind(this),
trackRequest:false
};
new Ajax.Request(this._html_url,options);
},
_on_after_html_load:function(resp,o){
var data=resp.responseJSON;
if(data&&data.success){
this._element.innerHTML=this._render(data.html);
this._element.observe('click',
this._click_handler.bindAsEventListener(this));
}
},
open:function(){
this._is_open=true;
ConversionTracker.get_instance().track('/how_to_widget/open'+this._html_url);
this._element.show();
},
close:function(){
if(!this._is_open)return;
this._element.hide();
Glyde.notify.publish(this.MESSAGE_CLOSE);
this._is_open=false;
},
_click_handler:function(event){
var target=event.element();
if(target.hasClassName('close_box')){
this.close();
}
}
});
HowToWidget.prototype._render=function(html){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="close_box"');_j.s('>');
_j.ns('</div>');
_j.ns(html);
return _j.v();
};
(function(){
var $=Glyde.$;
var _$=Glyde.$wrapper;
Glyde.HoverDialog=Glyde.Class.create(Glyde.Dialog,{
FADE_MS:300,
ENTER_TIMER_MS:300,
EXIT_TIMER_MS:0,
initialize:function($super,hover_target_id,click_triggered){
var dialog_options={
is_light:true,
should_center:false,
use_arrow:true,
position_preference:this.POSITION_BELOW,
disable_escape:false,
use_small_close:true
};
$super(dialog_options);
this._close_on_mouseout=true;
this._click_triggered=click_triggered||false;
this._hover_target_id=hover_target_id;
this._dialog_instance_id=Glyde.HoverDialog._dialog_instance_id++;
var hover_target=$(hover_target_id);
if(!this._click_triggered){
this._hover_timer=new Glyde.HoverDialogTimer(this,hover_target,
this.ENTER_TIMER_MS,
this.EXIT_TIMER_MS,
this._on_show.bind(this),
this._on_hide.bind(this));
}
_$(hover_target).observe('click',
this._on_click_target.bindAsEventListener(this));
},
open:function($super){
var was_open=this._is_open;
$super($(this._hover_target_id),this._render(),null,this._dialog_instance_id);
$(this._close_button_id).style.display='none';
if(!was_open&&this._is_open&&!Glyde.Browser.IE){
var container=_$(this._dialog_container_id);
container.fade_in(this.FADE_MS,function(){
this._after_open_fade();
}.bind(this));
}else if(Glyde.Browser.IE){
this._after_open_fade();
}
},
close:function($super,no_on_close){
if(this._is_open){
this._before_close();
if(Glyde.Browser.IE){
$super(no_on_close);
}else{
var container=_$(this._dialog_container_id);
container.fade_out(this.FADE_MS,function(){
$super(no_on_close);
container.setOpacity(0);
}.bind(this));
}
}
},
enable_close_on_mouseout:function(){
this._close_on_mouseout=true;
},
disable_close_on_mouseout:function(){
this._close_on_mouseout=false;
},
_before_close:function(){
},
_after_open_fade:function(){
},
_on_click_target:function(event){
if(!this._is_open){this.open();}
},
_handle_mouse_up:function($super,event){
var hover_target=$(this._hover_target_id);
if(event.target.id!=this._hover_target_id){
$super(event);
}
},
_render:function(){
},
_on_show:function(){
if(!this._is_open){this.open();}
},
_on_hide:function(){
if(this._close_on_mouseout&&this._is_open){
this.close();
}
}
});
Glyde.HoverDialog._dialog_instance_id=0;
Glyde.HoverDialogTimer=Glyde.Class.create(Glyde.HoverTimer,{
initialize:function($super,dialog,node,enter_delay_ms,exit_delay_ms,on_show_callback,on_hide_callback,state){
this._dialog=dialog;
$super(node,enter_delay_ms,exit_delay_ms,on_show_callback,on_hide_callback,state);
},
_mousemove_handler:function($super,event){
var is_descendant=this._is_descendant_node(_$(event).element(),
this._dialog._dialog_container_id);
if(is_descendant){
this._cancel_exit_timer();
return;
}
$super(event);
}
});
})();
Glyde.widgets.Search=Class.create(Glyde.widgets.Widget,{
DOM_CLASS:'search_widget',
initialize:function($super,element,options){
$super(element);
this._options={};
Object.extend(this._options,options);
this._element.update(this._render_html());
this._input=this.$$first('.search_input');
this.reset_text();
this.suggest_input=new LiveSearchInput(this._input,
Glyde.urls.title_suggestions_url,
this.on_select.bind(this),
this._options.selected_domains,
this._options.is_buy_side);
this.observe('click',this.on_click.bindAsEventListener(this));
},
on_click:function(event){
this.set_focus();
},
set_selected_domains:function(domain_names){
this.suggest_input.set_selected_domains(domain_names);
},
deactivate:function(){
this.suggest_input.hide_results();
},
activate:function(){
this.suggest_input.activate();
},
current_text:function(){
return this.suggest_input.current_text();
},
set_text:function(text){
this.suggest_input.set_text(text);
},
clear_positioning:function(){
this.suggest_input.list.reset_positioning();
},
on_select:function(result){
this.fire('widget:select',result);
},
loading:function(){
Loading.show();
},
reset:function(){
this.deactivate();
this.reset_text();
this.set_focus();
},
reset_text:function(){
this._input.value='';
},
enable:function(){
this._input.disabled=false;
this._input.removeClassName("disabled").focus();
},
set_focus:function(){
this.suggest_input.prev_query_str=null;
try{
this._input.focus();
}catch(e){}
},
remove_focus:function(){
this._input.blur();
}
});
Glyde.widgets.Search.prototype._render_html=function(){
var _j=new Jaml();
_j.ns('<div');_j.s(' class="left_cap"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="middle"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="right_cap"');_j.s('>');
_j.ns('</div>');
_j.ns('<div');_j.s(' class="search_box_icon"');_j.s('>');
_j.ns('</div>');
_j.ns('<input');_j.s(' class="search_input"');_j.s(' type="'+("text")+'"');_j.s(' autocomplete="'+("off")+'"');_j.s('>');
_j.ns('</input>');
return _j.v();
};
var swfobject=function(){var D="undefined",r="object",S="Shockwave Flash",W="ShockwaveFlash.ShockwaveFlash",q="application/x-shockwave-flash",R="SWFObjectExprInst",x="onreadystatechange",O=window,j=document,t=navigator,T=false,U=[h],o=[],N=[],I=[],l,Q,E,B,J=false,a=false,n,G,m=true,M=function(){var aa=typeof j.getElementById!=D&&typeof j.getElementsByTagName!=D&&typeof j.createElement!=D,ah=t.userAgent.toLowerCase(),Y=t.platform.toLowerCase(),ae=Y?/win/.test(Y):/win/.test(ah),ac=Y?/mac/.test(Y):/mac/.test(ah),af=/webkit/.test(ah)?parseFloat(ah.replace(/^.*webkit\/(\d+(\.\d+)?).*$/,"$1")):false,X=!+"\v1",ag=[0,0,0],ab=null;if(typeof t.plugins!=D&&typeof t.plugins[S]==r){ab=t.plugins[S].description;if(ab&&!(typeof t.mimeTypes!=D&&t.mimeTypes[q]&&!t.mimeTypes[q].enabledPlugin)){T=true;X=false;ab=ab.replace(/^.*\s+(\S+\s+\S+$)/,"$1");ag[0]=parseInt(ab.replace(/^(.*)\..*$/,"$1"),10);ag[1]=parseInt(ab.replace(/^.*\.(.*)\s.*$/,"$1"),10);ag[2]=/[a-zA-Z]/.test(ab)?parseInt(ab.replace(/^.*[a-zA-Z]+(.*)$/,"$1"),10):0}}else{if(typeof O.ActiveXObject!=D){try{var ad=new ActiveXObject(W);if(ad){ab=ad.GetVariable("$version");if(ab){X=true;ab=ab.split(" ")[1].split(",");ag=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}}catch(Z){}}}return{w3:aa,pv:ag,wk:af,ie:X,win:ae,mac:ac}}(),k=function(){if(!M.w3){return}if((typeof j.readyState!=D&&j.readyState=="complete")||(typeof j.readyState==D&&(j.getElementsByTagName("body")[0]||j.body))){f()}if(!J){if(typeof j.addEventListener!=D){j.addEventListener("DOMContentLoaded",f,false)}if(M.ie&&M.win){j.attachEvent(x,function(){if(j.readyState=="complete"){j.detachEvent(x,arguments.callee);f()}});if(O==top){(function(){if(J){return}try{j.documentElement.doScroll("left")}catch(X){setTimeout(arguments.callee,0);return}f()})()}}if(M.wk){(function(){if(J){return}if(!/loaded|complete/.test(j.readyState)){setTimeout(arguments.callee,0);return}f()})()}s(f)}}();function f(){if(J){return}try{var Z=j.getElementsByTagName("body")[0].appendChild(C("span"));Z.parentNode.removeChild(Z)}catch(aa){return}J=true;var X=U.length;for(var Y=0;Y<X;Y++){U[Y]()}}function K(X){if(J){X()}else{U[U.length]=X}}function s(Y){if(typeof O.addEventListener!=D){O.addEventListener("load",Y,false)}else{if(typeof j.addEventListener!=D){j.addEventListener("load",Y,false)}else{if(typeof O.attachEvent!=D){i(O,"onload",Y)}else{if(typeof O.onload=="function"){var X=O.onload;O.onload=function(){X();Y()}}else{O.onload=Y}}}}}function h(){if(T){V()}else{H()}}function V(){var X=j.getElementsByTagName("body")[0];var aa=C(r);aa.setAttribute("type",q);var Z=X.appendChild(aa);if(Z){var Y=0;(function(){if(typeof Z.GetVariable!=D){var ab=Z.GetVariable("$version");if(ab){ab=ab.split(" ")[1].split(",");M.pv=[parseInt(ab[0],10),parseInt(ab[1],10),parseInt(ab[2],10)]}}else{if(Y<10){Y++;setTimeout(arguments.callee,10);return}}X.removeChild(aa);Z=null;H()})()}else{H()}}function H(){var ag=o.length;if(ag>0){for(var af=0;af<ag;af++){var Y=o[af].id;var ab=o[af].callbackFn;var aa={success:false,id:Y};if(M.pv[0]>0){var ae=c(Y);if(ae){if(F(o[af].swfVersion)&&!(M.wk&&M.wk<312)){w(Y,true);if(ab){aa.success=true;aa.ref=z(Y);ab(aa)}}else{if(o[af].expressInstall&&A()){var ai={};ai.data=o[af].expressInstall;ai.width=ae.getAttribute("width")||"0";ai.height=ae.getAttribute("height")||"0";if(ae.getAttribute("class")){ai.styleclass=ae.getAttribute("class")}if(ae.getAttribute("align")){ai.align=ae.getAttribute("align")}var ah={};var X=ae.getElementsByTagName("param");var ac=X.length;for(var ad=0;ad<ac;ad++){if(X[ad].getAttribute("name").toLowerCase()!="movie"){ah[X[ad].getAttribute("name")]=X[ad].getAttribute("value")}}P(ai,ah,Y,ab)}else{p(ae);if(ab){ab(aa)}}}}}else{w(Y,true);if(ab){var Z=z(Y);if(Z&&typeof Z.SetVariable!=D){aa.success=true;aa.ref=Z}ab(aa)}}}}}function z(aa){var X=null;var Y=c(aa);if(Y&&Y.nodeName=="OBJECT"){if(typeof Y.SetVariable!=D){X=Y}else{var Z=Y.getElementsByTagName(r)[0];if(Z){X=Z}}}return X}function A(){return!a&&F("6.0.65")&&(M.win||M.mac)&&!(M.wk&&M.wk<312)}function P(aa,ab,X,Z){a=true;E=Z||null;B={success:false,id:X};var ae=c(X);if(ae){if(ae.nodeName=="OBJECT"){l=g(ae);Q=null}else{l=ae;Q=X}aa.id=R;if(typeof aa.width==D||(!/%$/.test(aa.width)&&parseInt(aa.width,10)<310)){aa.width="310"}if(typeof aa.height==D||(!/%$/.test(aa.height)&&parseInt(aa.height,10)<137)){aa.height="137"}j.title=j.title.slice(0,47)+" - Flash Player Installation";var ad=M.ie&&M.win?"ActiveX":"PlugIn",ac="MMredirectURL="+O.location.toString().replace(/&/g,"%26")+"&MMplayerType="+ad+"&MMdoctitle="+j.title;if(typeof ab.flashvars!=D){ab.flashvars+="&"+ac}else{ab.flashvars=ac}if(M.ie&&M.win&&ae.readyState!=4){var Y=C("div");X+="SWFObjectNew";Y.setAttribute("id",X);ae.parentNode.insertBefore(Y,ae);ae.style.display="none";(function(){if(ae.readyState==4){ae.parentNode.removeChild(ae)}else{setTimeout(arguments.callee,10)}})()}u(aa,ab,X)}}function p(Y){if(M.ie&&M.win&&Y.readyState!=4){var X=C("div");Y.parentNode.insertBefore(X,Y);X.parentNode.replaceChild(g(Y),X);Y.style.display="none";(function(){if(Y.readyState==4){Y.parentNode.removeChild(Y)}else{setTimeout(arguments.callee,10)}})()}else{Y.parentNode.replaceChild(g(Y),Y)}}function g(ab){var aa=C("div");if(M.win&&M.ie){aa.innerHTML=ab.innerHTML}else{var Y=ab.getElementsByTagName(r)[0];if(Y){var ad=Y.childNodes;if(ad){var X=ad.length;for(var Z=0;Z<X;Z++){if(!(ad[Z].nodeType==1&&ad[Z].nodeName=="PARAM")&&!(ad[Z].nodeType==8)){aa.appendChild(ad[Z].cloneNode(true))}}}}}return aa}function u(ai,ag,Y){var X,aa=c(Y);if(M.wk&&M.wk<312){return X}if(aa){if(typeof ai.id==D){ai.id=Y}if(M.ie&&M.win){var ah="";for(var ae in ai){if(ai[ae]!=Object.prototype[ae]){if(ae.toLowerCase()=="data"){ag.movie=ai[ae]}else{if(ae.toLowerCase()=="styleclass"){ah+=' class="'+ai[ae]+'"'}else{if(ae.toLowerCase()!="classid"){ah+=" "+ae+'="'+ai[ae]+'"'}}}}}var af="";for(var ad in ag){if(ag[ad]!=Object.prototype[ad]){af+='<param name="'+ad+'" value="'+ag[ad]+'" />'}}aa.outerHTML='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"'+ah+">"+af+"</object>";N[N.length]=ai.id;X=c(ai.id)}else{var Z=C(r);Z.setAttribute("type",q);for(var ac in ai){if(ai[ac]!=Object.prototype[ac]){if(ac.toLowerCase()=="styleclass"){Z.setAttribute("class",ai[ac])}else{if(ac.toLowerCase()!="classid"){Z.setAttribute(ac,ai[ac])}}}}for(var ab in ag){if(ag[ab]!=Object.prototype[ab]&&ab.toLowerCase()!="movie"){e(Z,ab,ag[ab])}}aa.parentNode.replaceChild(Z,aa);X=Z}}return X}function e(Z,X,Y){var aa=C("param");aa.setAttribute("name",X);aa.setAttribute("value",Y);Z.appendChild(aa)}function y(Y){var X=c(Y);if(X&&X.nodeName=="OBJECT"){if(M.ie&&M.win){X.style.display="none";(function(){if(X.readyState==4){b(Y)}else{setTimeout(arguments.callee,10)}})()}else{X.parentNode.removeChild(X)}}}function b(Z){var Y=c(Z);if(Y){for(var X in Y){if(typeof Y[X]=="function"){Y[X]=null}}Y.parentNode.removeChild(Y)}}function c(Z){var X=null;try{X=j.getElementById(Z)}catch(Y){}return X}function C(X){return j.createElement(X)}function i(Z,X,Y){Z.attachEvent(X,Y);I[I.length]=[Z,X,Y]}function F(Z){var Y=M.pv,X=Z.split(".");X[0]=parseInt(X[0],10);X[1]=parseInt(X[1],10)||0;X[2]=parseInt(X[2],10)||0;return(Y[0]>X[0]||(Y[0]==X[0]&&Y[1]>X[1])||(Y[0]==X[0]&&Y[1]==X[1]&&Y[2]>=X[2]))?true:false}function v(ac,Y,ad,ab){if(M.ie&&M.mac){return}var aa=j.getElementsByTagName("head")[0];if(!aa){return}var X=(ad&&typeof ad=="string")?ad:"screen";if(ab){n=null;G=null}if(!n||G!=X){var Z=C("style");Z.setAttribute("type","text/css");Z.setAttribute("media",X);n=aa.appendChild(Z);if(M.ie&&M.win&&typeof j.styleSheets!=D&&j.styleSheets.length>0){n=j.styleSheets[j.styleSheets.length-1]}G=X}if(M.ie&&M.win){if(n&&typeof n.addRule==r){n.addRule(ac,Y)}}else{if(n&&typeof j.createTextNode!=D){n.appendChild(j.createTextNode(ac+" {"+Y+"}"))}}}function w(Z,X){if(!m){return}var Y=X?"visible":"hidden";if(J&&c(Z)){c(Z).style.visibility=Y}else{v("#"+Z,"visibility:"+Y)}}function L(Y){var Z=/[\\\"<>\.;]/;var X=Z.exec(Y)!=null;return X&&typeof encodeURIComponent!=D?encodeURIComponent(Y):Y}var d=function(){if(M.ie&&M.win){window.attachEvent("onunload",function(){var ac=I.length;for(var ab=0;ab<ac;ab++){I[ab][0].detachEvent(I[ab][1],I[ab][2])}var Z=N.length;for(var aa=0;aa<Z;aa++){y(N[aa])}for(var Y in M){M[Y]=null}M=null;for(var X in swfobject){swfobject[X]=null}swfobject=null})}}();return{registerObject:function(ab,X,aa,Z){if(M.w3&&ab&&X){var Y={};Y.id=ab;Y.swfVersion=X;Y.expressInstall=aa;Y.callbackFn=Z;o[o.length]=Y;w(ab,false)}else{if(Z){Z({success:false,id:ab})}}},getObjectById:function(X){if(M.w3){return z(X)}},embedSWF:function(ab,ah,ae,ag,Y,aa,Z,ad,af,ac){var X={success:false,id:ah};if(M.w3&&!(M.wk&&M.wk<312)&&ab&&ah&&ae&&ag&&Y){w(ah,false);K(function(){ae+="";ag+="";var aj={};if(af&&typeof af===r){for(var al in af){aj[al]=af[al]}}aj.data=ab;aj.width=ae;aj.height=ag;var am={};if(ad&&typeof ad===r){for(var ak in ad){am[ak]=ad[ak]}}if(Z&&typeof Z===r){for(var ai in Z){if(typeof am.flashvars!=D){am.flashvars+="&"+ai+"="+Z[ai]}else{am.flashvars=ai+"="+Z[ai]}}}if(F(Y)){var an=u(aj,am,ah);if(aj.id==ah){w(ah,true)}X.success=true;X.ref=an}else{if(aa&&A()){aj.data=aa;P(aj,am,ah,ac);return}else{w(ah,true)}}if(ac){ac(X)}})}else{if(ac){ac(X)}}},switchOffAutoHideShow:function(){m=false},ua:M,getFlashPlayerVersion:function(){return{major:M.pv[0],minor:M.pv[1],release:M.pv[2]}},hasFlashPlayerVersion:F,createSWF:function(Z,Y,X){if(M.w3){return u(Z,Y,X)}else{return undefined}},showExpressInstall:function(Z,aa,X,Y){if(M.w3&&A()){P(Z,aa,X,Y)}},removeSWF:function(X){if(M.w3){y(X)}},createCSS:function(aa,Z,Y,X){if(M.w3){v(aa,Z,Y,X)}},addDomLoadEvent:K,addLoadEvent:s,getQueryParamValue:function(aa){var Z=j.location.search||j.location.hash;if(Z){if(/\?/.test(Z)){Z=Z.split("?")[1]}if(aa==null){return L(Z)}var Y=Z.split("&");for(var X=0;X<Y.length;X++){if(Y[X].substring(0,Y[X].indexOf("="))==aa){return L(Y[X].substring((Y[X].indexOf("=")+1)))}}}return""},expressInstallCallback:function(){if(a){var X=c(R);if(X&&l){X.parentNode.replaceChild(l,X);if(Q){w(Q,true);if(M.ie&&M.win){l.style.display="block"}}if(E){E(B)}}a=false}}}}();
