/*
Copyright (c) 2009, Stephen Reay, http://www.bobs-bits.com
All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
Neither the name of Stephen Reay nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
if(!Object.size){Object.size=function size(object){if(object.length){return object.length}if(object.__count__){return object.__count__}var count=0;for(var i in object){if(object.hasOwnProperty(i)){count++}}return count}}if(!Object.update){Object.update=function update(object,updates){if(Object.isUndefined(updates)){return object}for(var att in updates){if(updates.hasOwnProperty(att)){if(object.hasOwnProperty(att)&&Object.isObject(object[att])&&Object.isObject(updates[att])){Object.update(object[att],updates[att])}else{object[att]=updates[att]}}}return object}}if(!Object.merge){Object.merge=function merge(object,updates){var newObj={};for(var att in object){if(object.hasOwnProperty(att)){newObj[att]=object[att]}}return Object.update(newObj,updates)}}if(!Object.prototype.inherits){Object.prototype.inherits=function inherits(parentClass){if(Object.isFunction(parentClass)){if(this.constructor===parentClass){throw new ReferenceError("A Class can't inherit from itself")}if(arguments.length>1){parentClass.apply(this,Array.prototype.slice.call(arguments,1))}else{parentClass.call(this)}}}}if(!Object.isObject){Object.isObject=function isObject(object){return!Object.isUndefined(object)&&object.constructor===Object}}if(!Object.isArray){Object.isArray=function isArray(object){return!Object.isUndefined(object)&&object.constructor===Array}}if(!Object.isString){Object.isString=function isString(object){return!Object.isUndefined(object)&&object.constructor===String}}if(!Object.isNumber){Object.isNumber=function isNumber(object){return!Object.isUndefined(object)&&object.constructor===Number}}if(!Object.isDate){Object.isDate=function isDate(object){return!Object.isUndefined(object)&&object.constructor===Date}}if(!Object.isRegExp){Object.isRegExp=function isRegExp(object){return!Object.isUndefined(object)&&object.constructor===RegExp}}if(!Object.isFunction){Object.isFunction=function isFunction(object){return!Object.isUndefined(object)&&object.constructor===Function}}if(!Object.isBoolean){Object.isBoolean=function isBoolean(object){return!Object.isUndefined(object)&&object.constructor===Boolean}}if(!Object.isElement){Object.isElement=function isElement(object,tag){return!Object.isUndefined(object)&&object.nodeType===1&&(Object.isUndefined(tag)||object.nodeName.toLowerCase()===tag.toLowerCase())}}if(!Object.isUndefined){Object.isUndefined=function isUndefined(object){return typeof object==='undefined'}}if(!Object.toArray){Object.toArray=function toArray(object){if(Object.isArray(object)){return object}try{return Array.prototype.slice.call(object,0)}catch(e){return Array.prototype.map.call(object,function(a){return a})}}}if(!Object.forEach){Object.forEach=function forEach(object,callback,context){if(!Object.isFunction(callback)){throw new TypeError()}for(var i in object){if(object.hasOwnProperty(i)){callback.call(context,object[i],i,object)}}}}if(!Object.map){Object.map=function map(object,callback,context){if(!Object.isFunction(callback)){throw new TypeError()}var obj={};for(var i in object){if(object.hasOwnProperty(i)){obj[i]=callback.call(context,object[i],i,object)}}return obj}}if(!Object.every){Object.every=function every(object,callback,context){if(!Object.isFunction(callback)){throw new TypeError()}for(var i in object){if(object.hasOwnProperty(i)&&!callback.call(context,object[i],i,object)){return false}}return true}}if(!Object.some){Object.some=function some(object,callback,context){if(!Object.isFunction(callback)){throw new TypeError()}for(var i in object){if(object.hasOwnProperty(i)&&callback.call(context,object[i],i,object)){return true}return true}return false}}if(!Object.filter){Object.filter=function filter(object,callback,context){if(!Object.isFunction(callback)){throw new TypeError()}var obj={};for(var i in object){if(object.hasOwnProperty(i)){var val=object[i];if(callback.call(context,val,i,object)){obj[i]=val}}}return obj}}if(!Object.serialize){Object.serialize=function serialize(object,seperator){seperator=seperator||'&';var serializedString="";for(var i in object){if(object.hasOwnProperty(i)&&!Object.isFunction(object[i])){if(serializedString.length>0){serializedString+=seperator}if(Object.isArray(object[i])){serializedString+=(i+'='+object[i].join(seperator+i+'='))}else{serializedString+=(i+'='+object[i])}}}return serializedString}}if(!Object.toURLString){Object.toURLString=function toURLString(object){var urlStr=object.protocol+'//'+object.host+object.pathname+object.search+'#'+object.hash.replace('#','');return urlStr}}if(!Object.getKeys){Object.getKeys=function getKeys(object){var newArr=[];for(var i in object){if(object.hasOwnProperty(i)){newArr.push(i)}}return newArr}}if(!Object.getValues){Object.getValues=function getValues(object){var newArr=[];for(var i in object){if(object.hasOwnProperty(i)){newArr.push(object[i])}}return newArr}}if(!Array.prototype.forEach){Array.prototype.forEach=function forEach(callback,context){var len=this.length;if(typeof callback!=="function"){throw new TypeError()}for(var i=0;i<len;i++){if(i in this){callback.call(context,this[i],i,this)}}}}if(!Array.forEach){Array.forEach=function forEachHelper(array,callback,context){Array.prototype.forEach.call(array,callback,context)}}if(!Array.prototype.indexOf){Array.prototype.indexOf=function indexOf(searchElement,from){var len=this.length;from=Number(from)||0;from=(from<0)?Math.ceil(from):Math.floor(from);if(from<0){from+=len}for(;from<len;from++){if(from in this&&this[from]===searchElement){return from}}return-1}}if(!Array.prototype.lastIndexOf){Array.prototype.lastIndexOf=function lastIndexOf(searchElement,from){var len=this.length;from=Number(from);if(isNaN(from)){from=len-1}else{from=(from<0)?Math.ceil(from):Math.floor(from);if(from<0){from+=len}else if(from>=len){from=len-1}}for(;from>-1;from--){if(from in this&&this[from]===searchElement){return from}}return-1}}if(!Array.prototype.filter){Array.prototype.filter=function filter(callback,context){var len=this.length;if(typeof callback!=="function"){throw new TypeError()}var res=[];for(var i=0;i<len;i++){if(i in this){var val=this[i];if(callback.call(context,val,i,this)){res.push(val)}}}return res}}if(!Array.prototype.every){Array.prototype.every=function every(callback,context){var len=this.length;if(typeof callback!=="function"){throw new TypeError()}for(var i=0;i<len;i++){if(i in this&&!callback.call(context,this[i],i,this)){return false}}return true}}if(!Array.prototype.map){Array.prototype.map=function map(callback,context){var len=this.length;if(typeof callback!=="function"){throw new TypeError()}var res=[];for(var i=0;i<len;i++){if(i in this){res[i]=callback.call(context,this[i],i,this)}}return res}}if(!Array.prototype.some){Array.prototype.some=function some(callback,context){var len=this.length;if(typeof callback!=="function"){throw new TypeError()}for(var i=0;i<len;i++){if(i in this&&callback.call(context,this[i],i,this)){return true}}return false}}if(!Array.prototype.reduce){Array.prototype.reduce=function reduce(callback,initial){var len=this.length;if(typeof callback!=="function"){throw new TypeError()}if(len===0&&arguments.length===1){throw new TypeError()}var i=0;if(arguments.length>=2){var rv=initial}else{do{if(i in this){rv=this[i++];break}if(++i>=len){throw new TypeError()}}while(true)}for(;i<len;i++){if(i in this){rv=callback.call(null,rv,this[i],i,this)}}return rv}}if(!Array.prototype.reduceRight){Array.prototype.reduceRight=function reduceRight(callback,initial){var len=this.length;if(typeof callback!=="function"){throw new TypeError()}if(len===0&&arguments.length===1){throw new TypeError()}var i=len-1;if(arguments.length>=2){var rv=initial}else{do{if(i in this){rv=this[i--];break}if(--i<0){throw new TypeError()}}while(true)}for(;i>=0;i--){if(i in this){rv=callback.call(null,rv,this[i],i,this)}}return rv}}if(!Array.prototype.inArray){Array.prototype.inArray=function inArray(value){return(this.indexOf(value)>=0)}}if(!Array.prototype.collect){Array.prototype.collect=function collect(property){return this.map(function(entry){return entry[property]})}}if(!Array.prototype.unique){Array.prototype.unique=function unique(){var arr=this.filter(function(entry,index){return this.indexOf(entry,index+1)===-1},this);return arr}}if(!String.prototype.replaceMulti){String.prototype.replaceMulti=function replaceMulti(findVal,replaceVal){var that=this.toString();if(typeof findVal==='string'){return that.replace(new RegExp(findVal,'g'),replaceVal)}else{replaceVal=typeof replaceVal==='string'?[replaceVal]:replaceVal;for(var i=0;i<findVal.length;i++){var repStr=replaceVal[i]?replaceVal[i]:replaceVal[0];that=that.replace(new RegExp(findVal[i],'g'),repStr)}}return that}}if(!String.prototype.toCamelCase){String.prototype.toCamelCase=function toCamelCase(){var that=this.toString();if(!/[\-\s]/.test(that)){return that}var bits=that.split(/[\-\s]/);that=bits[0];for(var i=1;i<bits.length;i++){if(bits[i].length>0){that+=bits[i].charAt(0).toUpperCase();that+=bits[i].substring(1)}}return that}}if(!String.prototype.toDashed){String.prototype.toDashed=function toDashed(){var that=this.toString();return that.replace(/([A-Z])/g,'-$1').toLowerCase()}}if(!String.prototype.stripTags){String.prototype.stripTags=function stripTags(tag,removeContent){var that=this.toString();removeContent=removeContent||false;tag=(tag||'')+'[^>]';var reStr=removeContent?'<'+tag+'[.\\s]*?<\/'+tag+'*?>':'</?'+tag+'*?>';var re=new RegExp(reStr,'gi');return that.replace(re,'')}}if(!String.prototype.stripScripts){String.prototype.stripScripts=function stripScripts(){return this.toString().stripTags('script',true)}}if(!String.prototype.trim){String.prototype.trim=function trim(chars){var that=this.toString();chars=(chars||'[\\s]')+'*';var re=new RegExp('^('+chars+')|('+chars+')$','g');return that.replace(re,'')}}if(!String.prototype.ltrim){String.prototype.ltrim=function ltrim(chars){var that=this.toString();chars=(chars||'[\\s]')+'*';var re=new RegExp('^'+chars);return that.replace(re,'')}}if(!String.prototype.rtrim){String.prototype.rtrim=function rtrim(chars){var that=this.toString();chars=(chars||'[\\s]')+'*';var re=new RegExp(chars+'$');return that.replace(re,'')}}if(!String.prototype.excapeRegex){String.prototype.escapeRegex=function escapeRegex(){var that=this.toString();var reChars=new RegExp("[.*+?|$^()\\[\\]{}\\\\]",'g');return that.replace(reChars,"\\$&")}}if(!String.prototype.parseURL){String.prototype.parseURL=function parseURL(){var that=decodeURIComponent(this.toString());var anchor=document.createElement('a');anchor.setAttribute('href',that);var props=['href','protocol','host','hostname','port','pathname','search','hash'];var parts={};props.forEach(function(prop){parts[prop]=anchor[prop]});if(parts.pathname.charAt(0)!=='/'){parts.pathname='/'+parts.pathname}return parts}}if(!String.prototype.parseQuery){String.prototype.parseQuery=function parseQuery(seperator,convert){var that=decodeURIComponent(this.toString().ltrim('\\?'));seperator=seperator||"&";convert=convert||false;var parts=that.split(seperator);var args={};for(var i=0;i<parts.length;i++){var bits=parts[i].split('=');if(args.hasOwnProperty(bits[0])){if(!Object.isArray(args[bits[0]])){var tmp=args[bits[0]];args[bits[0]]=[tmp]}args[bits[0]].push(bits[1])}else{args[bits[0]]=bits[1]}}return args}}Number.prototype.toPaddedString=function toPaddedString(length,char){length=length||2;char=char||'0';var that=this.toString();while(that.length<length){that=char+that}return that};Date.prototype.getWeekOfYear=function getWeekOfYear(dowOffset){dowOffset=typeof(dowOffset)=='int'?dowOffset:0;var newYear=new Date(this.getFullYear(),0,1);var day=newYear.getDay()-dowOffset;day=(day>=0?day:day+7);var daynum=Math.floor((this.getTime()-newYear.getTime()-(this.getTimezoneOffset()-newYear.getTimezoneOffset())*60000)/86400000)+1;var weeknum;if(day<4){weeknum=Math.floor((daynum+day-1)/7)+1;if(weeknum>52){nYear=new Date(this.getFullYear()+1,0,1);nday=nYear.getDay()-dowOffset;nday=nday>=0?nday:nday+7;weeknum=nday<4?1:53}}else{weeknum=Math.floor((daynum+day-1)/7)}return weeknum};Date.prototype.daysOfWeek={'en':['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday']};Date.prototype.monthsOfYear={'en':['January','February','March','April','May','June','July','August','September','October','November','December']};Date.prototype.getDaysOfWeek=function getDaysOfWeek(lang){if(!Object.isUndefined(lang)&&!Object.isString(lang)){throw new TypeError()}lang=(lang||window.navigator.language||window.navigator.userLanguage).toLowerCase();if(!(lang in this.daysOfWeek)){lang=lang.split('-')[0]}if(!(lang in this.daysOfWeek)){lang='en'}return this.daysOfWeek[lang]};Date.prototype.getMonthsOfYear=function getMonthsOfYear(lang){lang=(lang||window.navigator.language||window.navigator.userLanguage).toLowerCase();if(!(lang in this.monthsOfYear)){lang=lang.split('-')[0]}if(!(lang in this.monthsOfYear)){lang='en'}return this.monthsOfYear[lang]};Date.prototype.getDaysInMonth=function getDaysInMonth(){var lengths=[31,28,31,30,31,30,31,31,30,31,30,31];if(this.getMonth()===1&&this.isLeapYear()){return 29}else{return lengths[this.getMonth()]}};Date.prototype.isLeapYear=function isLeapYear(){return(((this.getFullYear()%4===0)&&(this.getFullYear()%100!==0))||this.getFullYear()%400===0)};Date.prototype.getDayOfYear=function getDayOfYear(){var days=0;for(var i=0;i<this.getMonth();i++){var tmpDate=new Date(this.getFullYear(),i,1);days+=tmpDate.getDaysInMonth()}days+=this.getDate();return days};Date.prototype.formatDate=function formatDate(format){if(!Object.isString(format)){throw new TypeError()}var values={'d':this.getDate().toPaddedString(),'D':this.getDaysOfWeek()[this.getDay()].substr(0,3),'j':this.getDate(),'l':this.getDaysOfWeek()[this.getDay()],'N':this.getDay()+1,'S':'','w':this.getDay(),'z':this.getDayOfYear(),'W':this.getWeekOfYear(1),'F':this.getMonthsOfYear()[this.getMonth()],'m':(this.getMonth()+1).toPaddedString(),'M':this.getMonthsOfYear()[this.getMonth()].substr(0,3),'n':this.getMonth()+1,'t':this.getDaysInMonth(),'L':this.isLeapYear()?1:0,'o':this.getWeekOfYear(1)===0?this.getFullYear()-1:this.getFullYear(),'Y':this.getFullYear(),'y':this.getYear(),'a':this.getHours()<12?'am':'pm','A':this.getHours()<12?'AM':'PM','g':this.getHours()<12?this.getHours()+1:this.getHours()-11,'G':this.getHours(),'h':(this.getHours()<12?this.getHours()+1:this.getHours()-11).toPaddedString(),'H':this.getHours().toPaddedString(),'i':this.getMinutes().toPaddedString(),'s':this.getSeconds().toPaddedString()};var keys=Object.getKeys(values).map(function(char){return'%'+char+'%'});var str=format.replaceMulti(keys,Object.getValues(values));return str};if(!Function.prototype.bind){Function.prototype.bind=function bind(context){var callback=this;var args=Object.toArray(arguments);var object=args.shift();return function(){return callback.apply(object,args.concat(Object.toArray(arguments)))}}}if(!Function.prototype.bindAsEventListener){Function.prototype.bindAsEventListener=function bindAsEventListener(context){var callback=this;var args=Object.toArray(arguments);var object=args.shift();return function(event){return callback.apply(object,[event||window.event].concat(args))}}}if(!Function.prototype.curry){Function.prototype.curry=function curry(){var callback=this;var args=Object.toArray(arguments);return function(){return callback.apply(null,args.concat(Object.toArray(arguments)))}}}if(!Function.prototype.inherits){Function.prototype.inherits=function inherits(ParentClass){if(this===ParentClass){throw new ReferenceError("A Class can't inherit from itself")}this.prototype=new ParentClass();this.prototype.constructor=this}}if(!this.JSON){JSON={}}(function(){function f(n){return n<10?'0'+n:n}if(typeof Date.prototype.toJSON!=='function'){Date.prototype.toJSON=function(key){return this.getUTCFullYear()+'-'+f(this.getUTCMonth()+1)+'-'+f(this.getUTCDate())+'T'+f(this.getUTCHours())+':'+f(this.getUTCMinutes())+':'+f(this.getUTCSeconds())+'Z'};String.prototype.toJSON=Number.prototype.toJSON=Boolean.prototype.toJSON=function(key){return this.valueOf()}}var cx=/[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,escapable=/[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){escapable.lastIndex=0;return escapable.test(string)?'"'+string.replace(escapable,function(a){var c=meta[a];return typeof c==='string'?c:'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4)})+'"':'"'+string+'"'}function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key)}if(typeof rep==='function'){value=rep.call(holder,key,value)}switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null'}gap+=indent;partial=[];if(Object.prototype.toString.apply(value)==='[object Array]'){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null'}v=partial.length===0?'[]':gap?'[\n'+gap+partial.join(',\n'+gap)+'\n'+mind+']':'['+partial.join(',')+']';gap=mind;return v}if(rep&&typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v)}}}}else{for(k in value){if(Object.hasOwnProperty.call(value,k)){v=str(k,value);if(v){partial.push(quote(k)+(gap?': ':':')+v)}}}}v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+mind+'}':'{'+partial.join(',')+'}';gap=mind;return v}}if(typeof JSON.stringify!=='function'){JSON.stringify=function(value,replacer,space){var i;gap='';indent='';if(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' '}}else if(typeof space==='string'){indent=space}rep=replacer;if(replacer&&typeof replacer!=='function'&&(typeof replacer!=='object'||typeof replacer.length!=='number')){throw new Error('JSON.stringify')}return str('',{'':value})}}if(typeof JSON.parse!=='function'){JSON.parse=function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v}else{delete value[k]}}}}return reviver.call(holder,key,value)}cx.lastIndex=0;if(cx.test(text)){text=text.replace(cx,function(a){return'\\u'+('0000'+a.charCodeAt(0).toString(16)).slice(-4)})}if(/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j}throw new SyntaxError('JSON.parse')}}})();if(typeof document.getElementsByTagName('head')[0].innerText==='undefined'){HTMLElement.prototype.__defineGetter__("innerText",function getInnerText(){return this.innerHTML.stripScripts().stripTags()});HTMLElement.prototype.__defineSetter__('innerText',function setInnerText(text){this.textContent=text})}var BTM={};(function(){BTM.version='1.0.5';BTM.library=false;BTM.options={};BTM.loadOption=function loadOption(name,defaultVal){if(Object.isUndefined(defaultVal)){throw new TypeError('You must define a default value')}if(name in opts){var val=opts[name];switch(val){case'true':val=true;break;case'false':val=false;break;default:if(/^[\d]+[\.]{0,1}[\d]*$/.test(val)){val=parseFloat(val)}break}BTM.options[name]=val}else{BTM.options[name]=defaultVal}};var scripts=document.getElementsByTagName('script');var opts=false;for(var i=0;opts===false&&i<scripts.length;i++){if(scripts[i].src&&/btm(-packed){0,1}\.js/.test(scripts[i].src)){var url=scripts[i].src.parseURL();var opts=url.search.parseQuery();BTM.loadOption('debug',false);BTM.loadOption('jsdir',scripts[i].src.split(/btm(-packed)?\.js/i)[0]);BTM.loadOption('imgdir',BTM.options.jsdir+'../images/')}}var libraryProps=[{'identifier':window.Prototype,'name':'Prototype','version':function(){return Prototype.Version}},{'identifier':window.jQuery,'name':'jQuery','version':function(){return jQuery.fn.jquery}},{'identifier':window.cssQuery,'name':'cssQuery','versionRegExp':/version ([\d.]*)/i,'versionRegExpIndex':1,'version':function(){return cssQuery.toString()}}];function detectLibrary(library){if(!BTM.library&&library.identifier){BTM.library={'name':library.name};if(typeof library.versionRegExp==='undefined'){BTM.library.version=library.version()}else{BTM.library.version=library.version().match(library.versionRegExp)[library.versionRegExpIndex]}return}}libraryProps.forEach(detectLibrary);BTM.self=function self(value){return value};BTM.selfProp=function selfProp(value,name){return value[name]};BTM.log=function log(message,object){if(BTM.options.debug&&window.console&&window.console.log){console.log.apply(console,arguments)}};BTM.error=function error(message,object){if(BTM.options.debug&&window.console&&window.console.error){window.console.error(message,object)}}})();BTM.Util={};BTM.Util.compareURLs=function compareURLs(url1,url2,compareHash){compareHash=compareHash||false;url1=Object.isString(url1)?url1.parseURL():url1;url2=Object.isString(url2)?url2.parseURL():url2;var result=((url1.protocol===url2.protocol)&&(url1.hostname===url2.hostname)&&(url1.port===url2.port)&&(url1.pathname===url2.pathname)&&(url1.search===url2.search)&&(compareHash===false||(url1.hash===url2.hash)));return result};BTM.Util.getHashLoaders=function getHashLoaders(hash,split){split=split||',';hash=decodeURIComponent(hash||document.location.hash).replace('#','');if(hash!==''){return hash.split(split)}else{return[]}};BTM.Text={};BTM.Text.makeCodeView=function makeCodeView(element){return new CodeView(element,type)};BTM.Text.CodeView=function CodeView(element,type,options){};BTM.Text.parseTemplate=function parseTemplate(string,data,identifier){identifier=identifier||'%';Object.forEach(data,function(entry,key){var bit=(identifier+key+identifier).escapeRegex();string=string.replace(bit,entry)});return string};BTM.Sort={};BTM.Sort.currencySymbols=["\\$","&cent;","&#162;","\\u00A2","&pound;","&#163;","\\u00A3","&curren;","&#164;","\\u00A4","&yen;","&#165;","\\u00A5","&euro;","&#8364;","\\u20AC"];BTM.Sort.currencySymbolsRegExp=function currencySymbolsRegExp(){return new RegExp(BTM.Sort.currencySymbols.join('|'),'g')};BTM.Sort.sort=function sort(a,b){if(a<b){return-1}if(a>b){return 1}return 0};BTM.Sort.general=function general(a,b){return BTM.Sort.sort(a.stripTags().toLowerCase()+"",b.stripTags().toLowerCase()+"")};BTM.Sort.caseSensitive=function caseSensitive(a,b){return BTM.Sort.sort(a.stripTags()+"",b.stripTags()+"")};BTM.Sort.numeric=function numeric(a,b){return BTM.Sort.sort(parseFloat(a),parseFloat(b))};BTM.Sort.currency=function currency(a,b){return BTM.Sort.numeric(a.replace(BTM.Sort.currencySymbolsRegExp(),""),b.replace(BTM.Sort.currencySymbolsRegExp(),""))};BTM.Sort.documentOrder=function documentOrder(a,b){if(BTM.$(a).sourceIndex){return BTM.Sort.sort(BTM.$(a).sourceIndex,BTM.$(b).sourceIndex)}else if(BTM.$(a).compareDocumentPosition){return 3-(BTM.$(a).compareDocumentPosition(BTM.$(b))&6)}};BTM.Event={DOMLoaded:false,eventHandlers:[],keyCodes:{3:'KEY_CANCEL',6:'KEY_HELP',8:'KEY_BACK_SPACE',9:'KEY_TAB',12:'KEY_CLEAR',13:'KEY_RETURN',14:'KEY_ENTER',16:'KEY_SHIFT',17:'KEY_CONTROL',18:'KEY_ALT',19:'KEY_PAUSE',20:'KEY_CAPS_LOCK',27:'KEY_ESCAPE',32:'KEY_SPACE',33:'KEY_PAGE_UP',34:'KEY_PAGE_DOWN',35:'KEY_END',36:'KEY_HOME',37:'KEY_LEFT',38:'KEY_UP',39:'KEY_RIGHT',40:'KEY_DOWN',44:'KEY_PRINTSCREEN',45:'KEY_INSERT',46:'KEY_DELETE',48:'KEY_0',49:'KEY_1',50:'KEY_2',51:'KEY_3',52:'KEY_4',53:'KEY_5',54:'KEY_6',55:'KEY_7',56:'KEY_8',57:'KEY_9',59:'KEY_SEMICOLON',61:'KEY_EQUALS',65:'KEY_A',66:'KEY_B',67:'KEY_C',68:'KEY_D',69:'KEY_E',70:'KEY_F',71:'KEY_G',72:'KEY_H',73:'KEY_I',74:'KEY_J',75:'KEY_K',76:'KEY_L',77:'KEY_M',78:'KEY_N',79:'KEY_O',80:'KEY_P',81:'KEY_Q',82:'KEY_R',83:'KEY_S',84:'KEY_T',85:'KEY_U',86:'KEY_V',87:'KEY_W',88:'KEY_X',89:'KEY_Y',90:'KEY_Z',93:'KEY_CONTEXT_MENU',96:'KEY_NUMPAD0',97:'KEY_NUMPAD1',98:'KEY_NUMPAD2',99:'KEY_NUMPAD3',100:'KEY_NUMPAD4',101:'KEY_NUMPAD5',102:'KEY_NUMPAD6',103:'KEY_NUMPAD7',104:'KEY_NUMPAD8',105:'KEY_NUMPAD9',106:'KEY_MULTIPLY',107:'KEY_ADD',108:'KEY_SEPARATOR',109:'KEY_SUBTRACT',110:'KEY_DECIMAL',111:'KEY_DIVIDE',112:'KEY_F1',113:'KEY_F2',114:'KEY_F3',115:'KEY_F4',116:'KEY_F5',117:'KEY_F6',118:'KEY_F7',119:'KEY_F8',120:'KEY_F9',121:'KEY_F10',122:'KEY_F11',123:'KEY_F12',124:'KEY_F13',125:'KEY_F14',126:'KEY_F15',127:'KEY_F16',128:'KEY_F17',129:'KEY_F18',130:'KEY_F19',131:'KEY_F20',132:'KEY_F21',133:'KEY_F22',134:'KEY_F23',135:'KEY_F24',144:'KEY_NUM_LOCK',145:'KEY_SCROLL_LOCK',188:'KEY_COMMA',190:'KEY_PERIOD',191:'KEY_SLASH',192:'KEY_BACK_QUOTE',219:'KEY_OPEN_BRACKET',220:'KEY_BACK_SLASH',221:'KEY_CLOSE_BRACKET',222:'KEY_QUOTE',224:'KEY_META'}};BTM.Event.observe=function observe(element,eventType,callback,priority){element=Object.isString(element)?BTM.$(element):element;if(!Object.isFunction(callback)){throw new TypeError()}priority=priority||5;var callbackName=callback.name||'anonymous Function';if(Object.isUndefined(element.observerID)){element.observerID=BTM.Event.eventHandlers.push({'element':element})-1}BTM.log("Adding '"+eventType+"' handler '"+callbackName+"'",element);if(!BTM.Event.eventHandlers[element.observerID][eventType]){BTM.Event.eventHandlers[element.observerID][eventType]=[];var loaderCallback=BTM.Event.runEventFuncs.bindAsEventListener(window,element,eventType);if(element.addEventListener){element.addEventListener(eventType,loaderCallback,false)}else if(element===window&&document.addEventListener){document.addEventListener(eventType,loaderCallback,false)}else if(element.attachEvent){element.attachEvent('on'+eventType,loaderCallback)}}if(!BTM.Event.eventHandlers[element.observerID][eventType][priority]){BTM.Event.eventHandlers[element.observerID][eventType][priority]=[]}return BTM.Event.eventHandlers[element.observerID][eventType][priority].push(callback)-1};BTM.observe=BTM.Event.observe;BTM.Event.stopObserving=function stopObserving(element,eventType,callbackIndex,priority){element=Object.isString(element)?BTM.$(element):element;priority=Object.isUndefined(priority)?5:priority;if(element.observerID&&BTM.Event.eventHandlers[element.observerID]&&BTM.Event.eventHandlers[element.observerID][eventType]&&BTM.Event.eventHandlers[element.observerID][eventType][priority]&&BTM.Event.eventHandlers[element.observerID][eventType][priority][callbackIndex]){var callback=BTM.Event.eventHandlers[element.observerID][eventType][priority][callbackIndex];var callbackName=callback.name||'anonymous Function';BTM.log("Removing '"+eventType+"' handler '"+callbackName+"'",element);delete BTM.Event.eventHandlers[element.observerID][eventType][priority][callbackIndex];return callback}};BTM.stopObserving=BTM.Event.stopObserving;BTM.Event.fakeEvent=function fakeEvent(element,type,extras){var eventObject=Object.update({'createdBy':'BTM Event Handling','target':element,'type':type},extras||{});return eventObject};BTM.Event.runEventFuncs=function runEventFuncs(event,element,eventType){var data=BTM.Event.eventHandlers[element.observerID][eventType];event=event||false;BTM.log("Running '"+eventType+"' event listeners",element);data.forEach(function(callbacks,level){BTM.log("Running "+callbacks.length+" callbacks at level "+level);callbacks.forEach(function(callback){callback(event)})})};BTM.Event.fire=function fire(element,eventType,extras){element=BTM.$(element);BTM.log("Firing '"+eventType+"' event",element);if(!Object.isUndefined(element.observerID)){var evt=BTM.Event.fakeEvent(element,eventType,extras);BTM.Event.runEventFuncs(evt,element,eventType)}};BTM.Event.cancelEvent=function cancelEvent(event){if(event===false){return false}else if(Object.isUndefined(event)){event=window.event}BTM.log("Attempting to cancel event",event);event.cancelBubble=true;event.returnValue=false;if(event.stopPropagation){event.stopPropagation()}if(event.preventDefault){event.preventDefault()}};BTM.Event.getTarget=function getTarget(event){var target;BTM.log("Finding target Element for event",event);if(event.target){target=event.target}else if(event.srcElement){target=event.srcElement}if(target.nodeType===3){target=target.parentNode}return target};BTM.Event.getKeyCode=function getKeyCode(event){var code;if(event.keyCode){code=event.keyCode}else if(event.which){code=event.which}return code};(function mimicDOMContentLoaded(){function runLoadEvents(event){if(BTM.Event.DOMLoaded){return false}if(typeof ieOnLoadScript!=='undefined'){ieOnLoadScript.parentNode.removeChild(ieOnLoadScript)}BTM.Event.DOMLoaded=true;BTM.Event.runEventFuncs(false,document,'DOMContentLoaded')}BTM.Event.eventHandlers[0]={element:document,DOMContentLoaded:[]};document.observerID=0;var timer=false;if(document.addEventListener){document.addEventListener("DOMContentLoaded",runLoadEvents,false)}if(/WebKit/i.test(navigator.userAgent)){timer=setInterval(function(){if(/loaded|complete/.test(document.readyState)){clearInterval(timer);runLoadEvents();}},10)}window.onload=runLoadEvents;})();BTM.Browser={};(function(){var browserData=[{nameString:navigator.userAgent,namesearch:"Chrome",versionString:navigator.userAgent,versionSearch:/Chrome\/([^\r\n\s]*)/,identity:"Chrome"},{nameString:navigator.userAgent,nameSearch:"OmniWeb",versionString:navigator.userAgent,versionSearch:/OmniWeb\/v?([^\r\n\s]*)/,identity:"OmniWeb"},{nameString:navigator.vendor,nameSearch:"Apple",versionString:navigator.userAgent,versionSearch:/(Safari|Version)\/([^\r\n\s]*)/,versionPosition:2,versionMatrix:{'85.5':'1','85.5':'1','85.7':'1.0.2','85.8':'1.0.3','85.8.1':'1.0.3','100':'1.1','100.1':'1.1.1','125.7':'1.2.2','125.8':'1.2.2','125.9':'1.2.3','125.11':'1.2.4','125.12':'1.2.4','312':'1.3','312.3':'1.3.1','312.3.1':'1.3.1','312.5':'1.3.2','312.6':'1.3.2','412':'2','412.2':'2','412.2.2':'2','412.5':'2.0.1','416.12':'2.0.2','416.13':'2.0.2','417.8':'2.0.3','417.9.2':'2.0.3','417.9.3':'2.0.3','419.3':'2.0.4'},identity:"Safari"},{nameProp:window.opera,versionString:navigator.userAgent,versionSearch:/Opera[\/ ]([^\r\n\s]*)/,identity:"Opera"},{nameString:navigator.vendor,nameSearch:"iCab",versionString:navigator.userAgent,versionSearch:/iCab[\/ ]([^\r\n\s]*)/,identity:"iCab"},{nameString:navigator.vendor,nameSearch:"KDE",versionString:navigator.userAgent,versionSearch:/Konqueror\/([^\r\n\s]*?);/,identity:"Konqueror"},{nameString:navigator.userAgent,nameSearch:"Firefox",versionString:navigator.userAgent,versionSearch:/Firefox\/([^\r\n\s]*)/,identity:"Firefox"},{nameString:navigator.userAgent,nameSearch:"Camino",versionString:navigator.userAgent,versionSearch:/Camino\/([^\r\n\s]*)/,identity:"Camino"},{nameString:navigator.userAgent,nameSearch:"Netscape",versionString:navigator.userAgent,versionSearch:/Netscape6?\/([^\r\n\s]*)|Navigator\/([^\r\n\s]*)/,identity:"Netscape"},{nameString:navigator.userAgent,nameSearch:"MSIE",versionString:navigator.userAgent,versionSearch:new RegExp('MSIE ([^\r\n\s]*);'),identity:"Explorer"},{nameString:navigator.userAgent,nameSearch:"Gecko",versionString:navigator.userAgent,versionSearch:/rv:([^\r\n\s]*)/,identity:"Mozilla"},{nameString:navigator.userAgent,nameSearch:"Mozilla",versionString:navigator.userAgent,versionSearch:/Mozilla\/([^\r\n\s\-]*)/,identity:"Netscape"}];BTM.log("Defined Browser checks: "+browserData.length);var osData=[{nameString:navigator.platform,nameSearch:"Win",identity:"Windows"},{nameString:navigator.platform,nameSearch:"Mac",identity:"Mac"},{nameString:navigator.platform,nameSearch:"Linux",identity:"Linux"}];BTM.log("Defined Operating System checks: "+osData.length);var engineData=[{nameString:navigator.userAgent,nameSearch:/AppleWebKit/,versionString:navigator.userAgent,versionSearch:/AppleWebKit\/([\d\.]*\+?)/,identity:"WebKit"},{nameString:navigator.userAgent,nameSearch:/Opera/,versionString:navigator.userAgent,versionSearch:/Opera[\/ ]([\d\.]*)/,identity:"Presto"},{nameString:navigator.userAgent,nameSearch:/iCab/,versionString:navigator.userAgent,versionSearch:/iCab[\/ ]([0-3][\d\.]*)/,identity:"iCab"},{nameString:navigator.userAgent,nameSearch:/KHTML/,versionString:navigator.userAgent,versionSearch:/KHTML\/([\d\.]*)/,identity:"KHTML"},{nameString:navigator.userAgent,nameSearch:/MSIE/,versionString:navigator.userAgent,versionSearch:/MSIE (.*?)\;/,identity:"Trident"},{nameString:navigator.userAgent,nameSearch:/Gecko/,versionString:navigator.userAgent,versionSearch:/rv:(.*?)\)/,identity:"Gecko"}];BTM.log("Defined Rendering Engine checks: "+engineData.length);var combos=[['name'],['name','_','version'],['engine'],['engine','_','engineVersion'],['platform']];BTM.log("Defined Browser/OS/Engine class combinations:"+combos.length);var targets={'width':[640,800,1024,1280,1680,1920,2560],'height':[480,600,720,768,800,1024,1050,1080,1200,1400,1440,1536,1600]};function findDimensions(axis){var dimensions={};BTM.log("Finding Window dimension values");if(Object.isNumber(window.innerWidth)){dimensions.width=window.innerWidth;dimensions.height=window.innerHeight}else if(document.documentElement&&(document.documentElement.clientWidth||document.documentElement.clientHeight)){dimensions.width=document.documentElement.clientWidth;dimensions.height=document.documentElement.clientHeight}else if(document.body&&(document.body.clientWidth||document.body.clientHeight)){dimensions.width=document.body.clientWidth;dimensions.height=document.body.clientHeight}Object.update(BTM.Browser,dimensions);BTM.log("Window dimensions detected: "+dimensions.width+'x'+dimensions.height);if(Object.isString(axis)){return dimensions[axis]}else{return dimensions}}function findName(data){for(var i=0;i<data.length;i++){if(data[i].nameSearch&&data[i].nameString){var test=data[i].nameString.match(data[i].nameSearch);if(test){return data[i].identity}}else if(data[i].prop){return data[i].identity}}}function findVersion(data){for(var i=0;i<data.length;i++){var match=data[i].versionString.match(data[i].versionSearch);if(match){var index=data[i].versionPosition||1;if(data[i].versionMatrix&&data[i].versionMatrix[match[index]]){return data[i].versionMatrix[match[index]]}else{return match[index]}}}}function makeCombo(data){var str='';for(var i=0;i<data.length;i++){if(BTM.Browser[data[i]]){str+=BTM.Browser[data[i]]}else{str+=data[i]}}return str.replaceMulti(['\\.','\\#','\\!','\\~'],'-').toLowerCase()}function addBrowserClasses(data){BTM.log('Adding Browser Targetting classes',data);for(var i=0;i<data.length;i++){var className=makeCombo(data[i]);BTM.DOM.addClass(document.body,className)}}function addResClasses(data){BTM.log('Adding Resolution Targetting classes',data);for(var i=0;i<data.length;i++){var className=makeCombo(data[i]);BTM.DOM.addClass(document.body,className)}}function findMode(){BTM.log("Finding Browser mode",document.compatMode);if(Object.isUndefined(document.compatMode)){var el=BTM.DOM.createElement('div',{'style':'position:absolute;width:0;height:0;width:1'});document.compatMode=el.style.width=='1px'?'BackCompat':'CSS1Compat'}if(document.compatMode==='BackCompat'){BTM.Browser.mode='quirks'}else if(document.compatMode==='CSS1Compat'){BTM.Browser.mode='strict'}}BTM.Browser.is=function is(name,version,mode){mode=mode||'eq';version=version||false;if(BTM.Browser.engine===name){var ver=BTM.Browser.engineVersion;var verStr=BTM.Browser.engineVersionString}else if(BTM.Browser.name===name){var ver=BTM.Browser.version;var verStr=BTM.Browser.versionString}else{return false}if(version===false){return true}if(Object.isString(version)){return(verStr===version)}else{switch(mode){case'lt':return ver<version;break;case'lte':return ver<=version;break;case'gt':return ver>version;break;case'gte':return ver>=version;break;case'eq':default:return(ver===version);break}}};BTM.log("Finding Browser/Engine/Platform information");BTM.Browser.name=findName(browserData);BTM.Browser.versionString=findVersion(browserData);BTM.Browser.version=parseFloat(BTM.Browser.versionString);BTM.Browser.engine=findName(engineData);BTM.Browser.engineVersionString=findVersion(engineData);BTM.Browser.engineVersion=parseFloat(BTM.Browser.engineVersionString);BTM.Browser.platform=findName(osData);BTM.log("Browser/Egnine/Platform information found",BTM.Browser);BTM.observe(document,'DOMContentLoaded',findMode,0);BTM.observe(document,'DOMContentLoaded',addBrowserClasses.curry(combos),0);BTM.observe(document,'DOMContentLoaded',findDimensions,0);BTM.observe(window,'resize',findDimensions,0)})();BTM.DOM={inlineElements:['area','base','basefont','br','hr','input','img','link','meta'],standardAttributes:['class','id','style','title','dir','lang','accesskey','tabindex'],conditionalAttributes:{a:['charset','coords','href','hreflang','name','rel','rev','shape','target','type'],area:['alt','coords','href','getShref','shape','target'],base:['href','target'],bdo:['dir'],blockquote:['cite'],button:['disabled','name','type','value'],caption:['align'],col:['align','char','charoff','span','valign','width'],colgroup:['align','char','charoff','span','valign','width'],del:['cite','datetime'],form:['action','accept','accept-charset','enctype','method','name','target'],frame:['frameborder','longdesc','marginheight','marginwidth','name','noresize','scrolling','src'],frameset:['cols','rows'],iframe:['frameborder','height','longdesc','marginheight','marginwidth','name','scrolling','src','width'],img:['alt','src'],input:['accept','alt','checked','disabled','maxlength','name','readonly','size','src','type','value'],ins:['cite','datetime'],label:['for'],link:['charset','href','hreflang','media','rel','rev','target','type'],map:['name'],object:['align','archive','border','classid','codebase','codetype','data','declare','height','hspace','name','standby','type','usemap','vspace','width'],optgroup:['label','disabled'],option:['disabled','selected','value'],param:['name','type','value','valuetype'],q:['cite'],script:['type','charset','defer','language','src'],select:['disabled','multiple','name','size'],style:['type','media'],table:['border','cellpadding','cellspacing','frame','rules','summary','width'],tbody:['align','char','charoff','valign'],td:['abbr','align','axis','char','charoff','colspan','headers','rowspan','scope','valign'],textarea:['cols','rows','disabled','name','readonly'],tfoot:['align','char','charoff','valign'],th:['abbr','align','axis','char','charoff','colspan','headers','rowspan','scope','valign'],thead:['align','char','charoff','valign'],tr:['align','char','charoff','valign']},pixelRegEx:/^\-?\d+(px)?$/i,lengthProperties:['width','height','lineHeight','top','right','bottom','left','margin','marginLeft','marginRight','marginTop','marginBottom','padding','paddingLeft','paddingRight','paddingTop','paddingBottom','border','borderWidth','borderLeft','borderLeftWidth','borderRight','borderRightWidth','borderTop','borderTopWidth','borderBottom','borderBottomWidth'],anonymousElements:0};if(BTM.Browser.is('Trident',7,'lte')){BTM.DOM.renamedAttributes={'class':'className','for':'htmlFor'};BTM.DOM.newElementUnsafeAttributes=['name','type']}BTM.DOM.$=function $(selector){if(Object.isElement(selector)||Object.isObject(selector)){return selector}else if(Object.isString(selector)){return document.getElementById(selector)||false}};BTM.$=BTM.DOM.$;BTM.DOM.identify=function identify(element){element=BTM.$(element);if(BTM.DOM.hasAttribute(element,'id')){return BTM.DOM.getAttribute(element,'id')}else{var newID;do{newID='anonymous_element_'+BTM.DOM.anonymousElements++}while(BTM.$(newID));BTM.DOM.setAttribute(element,'id',newID);return newID}};BTM.DOM.$$=function $$(selector,context){context=BTM.$(context)||document;BTM.log("Finding elements matching: '"+selector+"'",context);if(context.querySelectorAll){try{BTM.log("Attempting lookup of '"+selector+"' using native querySelector");return Object.toArray(context.querySelectorAll(selector))}catch(e){BTM.log('Falling back to JavaScript query selector',e)}}if(BTM.library){switch(BTM.library.name){case'Prototype':return Element.select(context,selector).toArray();break;case'jQuery':return Object.toArray(jQuery(selector,context));break;case'cssQuery':return cssQuery(selector,context).unique();break}}else{try{return Object.toArray(document.getElementsByTagName(selector))}catch(e){BTM.error("Cannot process the supplied selector string natively!")}}};BTM.$$=BTM.DOM.$$;BTM.DOM.addClass=function addClass(element,className){element=BTM.$(element);if(!className){return false}if(Object.isString(className)&&className.indexOf(' ')>=0){className=className.trim().split(/\s/)}if(Object.isArray(className)){BTM.log("Adding '"+className.length+"' classes",element);className.forEach(BTM.DOM.addClass.curry(element))}else if(!BTM.DOM.hasClass(element,className)){BTM.log("Adding class '"+className+"'",element);element.className=element.className+' '+className}return element};BTM.DOM.removeClass=function removeClass(element,className){element=BTM.$(element);if(className.indexOf(' ')>=0){className=className.trim().split(/\s/)}if(Object.isArray(className)){className.forEach(BTM.DOM.removeClass.curry(element))}else{BTM.log("Removing class '"+className+"'",element);element.className=element.className.replace(new RegExp('(^|\\s)'+className+'($|\\s)','g'),' ')}return element};BTM.DOM.hasClass=function hasClass(element,className){element=BTM.$(element);BTM.log("Checking for class '"+className+"'",element);var classes=element.className.split(' ');return classes.inArray(className)};BTM.DOM.swapClass=function swapClass(element,className1,className2){element=BTM.$(element);className2=className2||'';BTM.log("Swapping classes '"+className1+"' and '"+className2+"'",element);var classToAdd=BTM.DOM.hasClass(element,className1)?className2:className1;var classToRemove=classToAdd===className1?className2:className1;BTM.DOM.addClass(element,classToAdd);BTM.DOM.removeClass(element,classToRemove);return element};BTM.DOM.wrap=function wrap(element,newTag,attributes){element=BTM.$(element);var newElement=BTM.DOM.createElement(newTag,attributes||{});BTM.log("Wrapping with new '"+newTag+"' element",element);element.parentNode.replaceChild(newElement,element);newElement.appendChild(element);return newElement};BTM.DOM.createElement=function createElement(tag,attributes,content){attributes=attributes||false;if(BTM.Browser.is('Trident',7,'lte')&&(!attributes||BTM.DOM.newElementUnsafeAttributes.some(function(el){return attributes.hasOwnProperty(el)}))){var newElStr='<'+tag+' ';for(var i=0;i<BTM.DOM.newElementUnsafeAttributes.length;i++){if(attributes.hasOwnProperty(BTM.DOM.newElementUnsafeAttributes[i])){newElStr+=BTM.DOM.newElementUnsafeAttributes[i]+'="'+attributes[BTM.DOM.newElementUnsafeAttributes[i]]+'" '}}if(BTM.DOM.inlineElements.indexOf(tag)!==-1){newElStr+='/>'}else{newElStr+='></'+tag+'>'}var element=document.createElement(newElStr)}else{var element=document.createElement(tag)}BTM.log("Creating new '"+tag+"' element with "+Object.size(attributes)+" attributes",element,attributes);if(attributes){BTM.DOM.setAttribute(element,attributes)}if(content){BTM.DOM.update(element,content)}return element};BTM.DOM.getAttribute=function getAttribute(element,name){element=BTM.$(element);if(!element){return element}if(Object.isString(name)){BTM.log("Getting attribute '"+name+"'",element);if(BTM.DOM.renamedAttributes&&BTM.DOM.renamedAttributes.hasOwnProperty(name)){BTM.log("Using attribute name '"+BTM.DOM.renamedAttributes[name]+"' instead of '"+name+"'",element);name=BTM.DOM.renamedAttributes[name]}if(BTM.DOM.hasAttribute(element,name)){return element.getAttribute(name)}}else if(Object.isArray(name)){var atts={};BTM.log("Getting attributes",element);name.forEach(function(att){if(BTM.DOM.renamedAttributes&&BTM.DOM.renamedAttributes.hasOwnProperty(name)){var newName=BTM.DOM.renamedAttributes[att];att=newName}if(BTM.DOM.hasAttribute(element,att)){atts[att]=BTM.DOM.getAttribute(element,att)}});return atts}};BTM.DOM.setAttribute=function setAttribute(element,name,value){element=BTM.$(element);if(Object.isString(name)){BTM.log("Setting '"+name+"' attribute to '"+value+"'",element);if(BTM.DOM.renamedAttributes&&BTM.DOM.renamedAttributes.hasOwnProperty(name)){BTM.log("Using attribute name '"+BTM.DOM.renamedAttributes[name]+"' instead of '"+name+"'",element);name=BTM.DOM.renamedAttributes[name]}element.setAttribute(name,value)}else{BTM.log("Setting attributes",element);for(var att in name){if(name.hasOwnProperty(att)){BTM.DOM.setAttribute(element,att,name[att])}}}return element};BTM.DOM.removeAttribute=function removeAttribute(element,name){element=BTM.$(element);if(Object.isString(name)){BTM.log("Removing '"+name+"' attribute",element);if(BTM.DOM.renamedAttributes&&BTM.DOM.renamedAttributes.hasOwnProperty(name)){BTM.log("Using attribute name '"+BTM.DOM.renamedAttributes[name]+"' instead of '"+name+"'",element);name=BTM.DOM.renamedAttributes[name]}element.removeAttribute(name)}else if(Object.isArray(name)){name.forEach(BTM.DOM.removeAttribute.curry(element))}return element};BTM.DOM.hasAttribute=function hasAttribute(element,name){element=BTM.$(element);if(BTM.DOM.renamedAttributes&&BTM.DOM.renamedAttributes.hasOwnProperty(name)){name=BTM.DOM.renamedAttributes[name]}if(element.hasAttribute){return element.hasAttribute(name)}else{return element.getAttribute(name)!==null}};BTM.DOM.setStyle=function setStyle(element,name,value){element=BTM.$(element);if(Object.isString(name)){if(name==='float'){name=Object.isUndefined(element.style.styleFloat)?'cssFloat':'styleFloat'}BTM.log("Setting '"+name+"' style property to '"+value+"'",element);element.style[name.toCamelCase()]=value}else{for(var att in name){if(name.hasOwnProperty(att)){BTM.log("Setting '"+att+"' style property to '"+name[att]+"'",element);element.style[att.toCamelCase()]=name[att]}}}return element};BTM.DOM.getPixelValue=function getPixelValue(element,value){if(BTM.DOM.pixelRegEx.test(value)){return parseInt(value)}try{if(element.runtimeStyle){var style=element.style.left;var runtimeStyle=element.runtimeStyle.left;element.runtimeStyle.left=element.currentStyle.left;element.style.left=value||0;value=element.style.pixelLeft;element.style.left=style;element.runtimeStyle.left=runtimeStyle}}catch(e){}return value};BTM.DOM.getComputedStyle=function getComputedStyle(element,styleProperty){element=BTM.$(element);if(styleProperty==='float'){styleProperty=element.style.styleFloat?'styleFloat':'cssFloat'}styleProperty=styleProperty.toCamelCase();var hide=false;if(styleProperty!=='display'&&element.style.display==='none'){hide=true;BTM.Effect.show(element)}if(element.currentStyle){if(styleProperty==='border'){var style=element.currentStyle.borderStyle+" "+element.currentStyle.borderWidth+" "+element.currentStyle.borderColor}else{var style=element.currentStyle[styleProperty]}}else if(window.getComputedStyle&&document.defaultView){var computedStyle=document.defaultView.getComputedStyle(element,null);var style=computedStyle[styleProperty]}if(BTM.DOM.lengthProperties.inArray(styleProperty)){style=BTM.DOM.getPixelValue(element,style)}if(hide){BTM.Effect.hide(element)}return style};BTM.DOM.getStyle=function getStyle(element,styleProperty){element=BTM.$(element);if(styleProperty==='float'){styleProperty=element.style.styleFloat?'styleFloat':'cssFloat'}var hide=false;if(styleProperty!=='display'&&element.style.display==='none'){hide=true;BTM.Effect.show(element)}var style=element.style[styleProperty.toCamelCase()];if(hide){BTM.Effect.hide(element)}return style};BTM.DOM.morph=function morph(element,newTag,options){element=BTM.$(element);var atts=BTM.DOM.getAttribute(element,BTM.DOM.standardAttributes.concat(BTM.DOM.conditionalAttributes[newTag]));atts=Object.filter(atts,function(att){return att!==''&&att!==null});var newElement=BTM.DOM.createElement(newTag,atts);if(!BTM.DOM.inlineElements.inArray(newTag)&&atts.value&&newElement.innerText===""){newElement.appendChild(document.createTextNode(atts.value))}element.parentNode.replaceChild(newElement,element);return newElement};BTM.DOM.update=function update(element,content){element=BTM.$(element);content=content||"";if(Object.isElement(content)){element.innerHTML="";element.appendChild(content)}else if(Object.isString(content)){element.innerHTML=content}else if(content.toHTML){element.innerHTML=content.toHTML()}else if(content.toString){element.innerHTML=content.toString()}return element};BTM.DOM.makeUnselectable=function makeUnselectable(element){element=BTM.$(element);var style={'user-select':'none'};switch(BTM.Browser.engine){case'Gecko':style['-moz-user-select']='none';break;case'KHTML':style['-khtml-user-select']='none';break;case'WebKit':style['-webkit-user-select']='none';break;case'Trident':var makeUnselectableFunc=BTM.observe(element,'selectstart',BTM.self.curry(false));BTM.DOM.setAttribute('makeUnselectableFunc',makeUnselectableFunc);break}BTM.log("Making element unselectable",element);BTM.DOM.setStyle(element,style)};BTM.DOM.makeSelectable=function makeSelectable(element){element=BTM.$(element);var style={'user-select':''};switch(BTM.Browser.engine){case'Gecko':style['-moz-user-select']='';break;case'KHTML':style['-khtml-user-select']='';break;case'WebKit':style['-webkit-user-select']='';break;case'Trident':var makeUnselectableFunc=BTM.DOM.getAttribute('makeUnselectableFunc');BTM.stopObserving(element,'selectstart',makeUnselectableFunc);break}BTM.log("Making element selectable",element);BTM.DOM.setStyle(element,style)};BTM.DOM.getDimensions=function getDimensions(element,includeMargins){element=BTM.$(element);includeMargins=includeMargins||false;var dimensions={'height':element.offsetHeight,'width':element.offsetWidth};if(includeMargins){var margins={'width':parseInt(BTM.DOM.getComputedStyle(element,'margin-top')||0)+parseInt(BTM.DOM.getComputedStyle(element,'margin-bottom')||0),'height':parseInt(BTM.DOM.getComputedStyle(element,'margin-left')||0)+parseInt(BTM.DOM.getComputedStyle(element,'margin-right')||0)};dimensions.height+=margins.height;dimensions.width+=margins.width}return dimensions};BTM.DOM.getAvailableSpace=function getAvailableSpace(element,dimensions){element=BTM.$(element);dimensions=dimensions||{'width':element.clientWidth,'height':element.clientHeight};var spacing={'width':parseInt(BTM.DOM.getComputedStyle(element,'padding-left')||0)+parseInt(BTM.DOM.getComputedStyle(element,'padding-right')||0)+parseInt(BTM.DOM.getComputedStyle(element,'margin-left')||0)+parseInt(BTM.DOM.getComputedStyle(element,'margin-right')||0)+parseInt(BTM.DOM.getComputedStyle(element,'border-left-width')||0)+parseInt(BTM.DOM.getComputedStyle(element,'border-right-width')||0),'height':parseInt(BTM.DOM.getComputedStyle(element,'padding-top')||0)+parseInt(BTM.DOM.getComputedStyle(element,'padding-bottom')||0)+parseInt(BTM.DOM.getComputedStyle(element,'margin-top')||0)+parseInt(BTM.DOM.getComputedStyle(element,'margin-bottom')||0)+parseInt(BTM.DOM.getComputedStyle(element,'border-top-width')||0)+parseInt(BTM.DOM.getComputedStyle(element,'border-bottom-width')||0)};var innerDimensions={'width':dimensions.width-spacing.width,'height':dimensions.height-spacing.height};return innerDimensions};BTM.Mapping={};BTM.loadOption('runMappings',true);BTM.Mapping.callbacks=[];BTM.Mapping.mappingsHaveRun=false;BTM.Mapping.add=function add(selector,callback,initOrder){initOrder=Object.isUndefined(initOrder)?5:initOrder;if(BTM.Mapping.mappingsHaveRun){return BTM.$$(selector).forEach(callback)}if(!BTM.Mapping.callbacks[initOrder]){BTM.Mapping.callbacks[initOrder]={}}if(!BTM.Mapping.callbacks[initOrder][selector]){BTM.Mapping.callbacks[initOrder][selector]=[]}var index=BTM.Mapping.callbacks[initOrder][selector].push(callback);return index};BTM.Mapping.remove=function remove(selector,index,initOrder){initOrder=Object.isUndefined(initOrder)?5:initOrder;if(BTM.Mapping.callbacks[initOrder]&&BTM.Mapping.callbacks[initOrder][selector]&&BTM.Mapping.callbacks[initOrder][selector][index]){var func=delete BTM.Mapping.callbacks[initOrder][selector][index];return func}return false};BTM.Mapping.run=function run(container,mappings,level){if(Object.isObject(mappings)){BTM.log('Running Mappings at Level: '+level);Object.forEach(mappings,BTM.Mapping.run.curry(container),this)}else if(Object.isArray(mappings)){BTM.log('Running Mappings for Selector: '+level);var elements=BTM.$$(level,container);for(var i=0;i<mappings.length;i++){if(Object.isFunction(mappings[i])){elements.forEach(mappings[i])}}}};BTM.Mapping.init=function init(container){if(!BTM.options.runMappings){return false}container=BTM.$(container)||document;BTM.log("Running all Mappings",container);BTM.Mapping.mappingsHaveRun=true;var startTime=new Date();BTM.Mapping.callbacks.forEach(BTM.Mapping.run.curry(container),this);var finishTime=new Date();BTM.log("Mappings finished in "+((finishTime-startTime)/1000)+" seconds");return finishTime-startTime};BTM.observe(document,'DOMContentLoaded',BTM.Mapping.init);BTM.Compatibility={};BTM.Compatibility.MSIE={};BTM.Compatibility.MSIE.Six={};BTM.Compatibility.MSIE.Six.fixBackgroundCache=function fixBackgroundCache(){BTM.log("Fixing Background Image Cache issue for MSIE 6");try{document.execCommand("BackgroundImageCache",false,true)}catch(err){}};BTM.Compatibility.MSIE.Six.fixPNG=function fixPNG(element){element=BTM.$(element);if(/png/gi.test(element.mimeType)){BTM.log("Fixing PNG Alpha Image issue for MSIE 6",element);BTM.DOM.setStyle(element,'filter',"progid:DXImageTransform.Microsoft.AlphaImageLoader(enabled=true, sizingMethod=scale, src='"+element.src+"')");BTM.DOM.setAttribute(element,'src',BTM.options.imgdir+'trans.gif')}};BTM.Compatibility.MSIE.Six.hideSELECT=function hideSELECT(element){BTM.DOM.setStyle(element,{'visibility':'hidden','position':'absolute'})};BTM.Compatibility.MSIE.Six.showSELECT=function showSELECT(element){BTM.DOM.setStyle(element,{'visibility':'','position':''})};BTM.Compatibility.MSIE.Six.fixSELECT=function fixSELECT(element){element=BTM.$(element);var iframe=BTM.DOM.createElement('iframe',{'src':'javascript:false','frameborder':'0','scrolling':'no'});var size=BTM.DOM.getDimensions(element);BTM.DOM.setStyle(iframe,{'display':'none','position':'absolute','filter':'progid:DXImageTransform.Microsoft.Alpha(opacity=0)','width':size.width+'px','height':size.height+'px','zIndex':BTM.DOM.getComputedStyle(element,'zIndex')-1});if(element.offsetParent.nodeName.toLowerCase()!=='html'){element.offsetParent.appendChild(iframe)}else{document.body.appendChild(iframe)}return iframe};BTM.Compatibility.MSIE.Six.fixHover=function fixHover(element){element=BTM.$(element);BTM.observe(element,'mouseover',BTM.DOM.addClass.curry(element,'hover'));BTM.observe(element,'mouseout',BTM.DOM.removeClass.curry(element,'hover'));return element};BTM.Compatibility.MSIE.Six.fixFirstChild=function fixFirstChild(element){BTM.DOM.addClass(element,'first-child')};if(BTM.Browser.is('Trident',6,'lte')){BTM.Compatibility.MSIE.Six.fixBackgroundCache();BTM.Mapping.add('*:first-child',BTM.Compatibility.MSIE.Six.fixFirstChild);BTM.Mapping.add('img[src$=".png"]',BTM.Compatibility.MSIE.Six.fixPNG,0)}BTM.Effect={};BTM.Effect.toggle=function toggle(element){if(Object.isArray(element)){element.forEach(BTM.Effect.toggle)}else{element=BTM.$(element);var func=BTM.DOM.getComputedStyle(element,'display')==='none'?BTM.Effect.show:BTM.Effect.hide;func(element)}return element};BTM.Effect.hide=function hide(element){if(Object.isArray(element)){element.forEach(BTM.Effect.hide)}else{element=BTM.$(element);BTM.DOM.setStyle(element,'display','none');if(BTM.Browser.engine==='Trident'&&BTM.Browser.engineVersion<7){BTM.$$('select',element).forEach(BTM.Compatibility.MSIE.Six.hideSELECT)}}return element};BTM.Effect.show=function show(element){if(Object.isArray(element)){element.forEach(BTM.Effect.show)}else{element=BTM.$(element);BTM.DOM.setStyle(element,'display','');if(BTM.Browser.engine==='Trident'&&BTM.Browser.engineVersion<7){BTM.$$('select',element).forEach(BTM.Compatibility.MSIE.Six.showSELECT)}}return element};BTM.Effect.Animation=function Animation(element,style,options){this.element=BTM.$(element);this.endStyle=style;this.options=Object.update({'timer':5},options);this.options.timer*=1000;var delay=15;var step=0;var steps=timer/delay;this.apply=function apply(){step++;BTM.DOM.setStyle(this.element,'width',this.style/steps*step+'px');if(step>=steps){window.clearTimeout(this.timeout);this.end=new Date();window.console.log(this.end-this.start+'milliseconds')}};this.start=new Date();this.apply();this.timeout=window.setInterval(this.apply.bind(this),delay)};BTM.Form={};BTM.Form.getValue=function getValue(element){element=BTM.$(element);BTM.log("Getting form field value",element);if(!Object.isElement(element)&&element.hasOwnProperty(0)&&Object.isElement(element[0],'input')){return Object.toArray(element).map(BTM.Form.getValue)}switch(element.type){case'checkbox':case'radio':if(BTM.Form.Checkbox.isChecked(element)){return element.value}break;case'select':return BTM.DOM.hasAttribute(element.options[element.selectedIndex],'value')?element.value:element.options[element.selectedIndex].innerText;break;case'select-multiple':var vals=[];for(var i=0;i<element.options.length;i++){if(element.options[i].selected){vals.push(BTM.DOM.hasAttribute(element.options[i],'value')?element.options[i].value:element.options[i].innerText)}}return vals;break;default:return element.value;break}};BTM.Form.Select={};BTM.Form.Select.addOption=function addOption(element,text,value,defaultSelected,selected){element=BTM.$(element);var delayOnChange=false;defaultSelected=defaultSelected||false;selected=selected||false;if(Object.isArray(text)){text.forEach(BTM.Form.Select.addOption.curry(element))}else if(Object.isObject(text)){delayOnChange=true;value=text.value;if(typeof value==='object'){value=value.value}text=text.text||text.key}var option=new Option(text,value,defaultSelected,selected);BTM.log("Adding Option ('"+text+"':'"+value+"')",element);try{element.add(option,null)}catch(e){element.add(option)}if(!delayOnChange){BTM.Event.fire(element,'change')}return element};BTM.Form.Select.optionWorker=function optionWorker(element,destination,autoSort,moveMode){element=BTM.$(element);destination=BTM.$(destination);moveMode=moveMode||false;autoSort=autoSort||true;for(var i=0;i<element.options.length;i++){if(element.options[i].selected){if(destination){BTM.Form.Select.addOption(destination,element.options[i].text,element.options[i].value)}if(moveMode){BTM.log("Removing Option ",element.options[i],element);element.remove(i)}}}if(autoSort){BTM.Form.Select.sort(destination)}if(moveMode){BTM.Event.fire(element,'change')}if(destination){BTM.Event.fire(destination,'change')}return element};BTM.Form.Select.selectAll=function selectAll(element){element=BTM.$(element);for(var i=0;i<element.options.length;i++){element.options[i].selected='selected'}return element};BTM.Form.Select.copySelectedOptions=function copySelectedOptions(element,destination,autoSort){return BTM.Form.Select.optionWorker(element,destination,autoSort,false)};BTM.Form.Select.copyAllOptions=function copyAllOptions(element,destination,autoSort){BTM.Form.Select.selectAll(element);return BTM.Form.Select.optionWorker(element,destination,autoSort,false)};BTM.Form.Select.moveSelectedOptions=function moveSelectedOptions(element,destination,autoSort){return BTM.Form.Select.optionWorker(element,destination,autoSort,true)};BTM.Form.Select.moveAllOptions=function moveAllOptions(element,destination,autoSort){BTM.Form.Select.selectAll(element);return BTM.Form.Select.optionWorker(element,destination,autoSort,true)};BTM.Form.Select.removeSelectedOptions=function removeSelectedOptions(element){return BTM.Form.Select.optionWorker(element,false,false,true)};BTM.Form.Select.removeAllOptions=function removeAllOptions(element){element=BTM.$(element);element.options.length=0;BTM.Event.fire(element,'change')};BTM.Form.Select.sort=function sort(element){element=BTM.$(element);var opts=[];if(element.options.length>0){for(var i=0;i<element.options.length;i++){opts.push(new Option(element.options[i].text,element.options[i].value,element.options[i].defaultSelected,element.options[i].selected))}BTM.Form.Select.removeAllOptions(element,false);opts=opts.sort(function(a,b){if((a.text.toLowerCase()+"")<(b.text.toLowerCase()+"")){return-1}if((a.text.toLowerCase()+"")>(b.text.toLowerCase()+"")){return 1}return 0});opts.forEach(function(item){BTM.Form.Select.addOption(element,item.text,item.value,item.defaultSelected,item.selected)})}return element};BTM.Form.Select.Dependant=function Dependant(elements,options){function initData(index,filter){index=index||0;var element=this.selectElements[index];var data={};for(var i=0;i<element.options.length;i++){if(Object.isUndefined(filter)||BTM.DOM.hasClass(element.options[i],filter)){var subData=index+1<this.selectElements.length?initData.call(this,index+1,element.options[i].value):false;data[element.options[i].text]={'value':element.options[i].value,'defaultSelected':element.options[i].selected,'children':subData}}}return data}this.display=function display(index){index=index||0;if(index+1<this.selectElements.length){this.selectElements[index+1].disabled=false;BTM.Form.Select.removeAllOptions(this.selectElements[index+1]);var data=this.data;for(var i=1;i<=index;i++){var levelData={};var selected=BTM.Form.getValue(this.selectElements[i-1]);Object.forEach(data,function(entry,name){if(selected.inArray(entry.value)){Object.update(levelData,entry.children)}});data=levelData}for(var j=0;j<this.selectElements[index].options.length;j++){if(this.selectElements[index].options[j].selected){var entries=data[this.selectElements[index].options[j].text].children||false;for(var k in entries){if(entries.hasOwnProperty(k)){BTM.Form.Select.addOption(this.selectElements[index+1],k,entries[k].value,entries[k].defaultSelected,false)}}}}this.selectElements[index+1].selectedIndex=-1;if(this.selectElements[index+1].options.length===0){this.selectElements[index+1].disabled=true}else if(this.options.sort){BTM.Form.Select.sort(this.selectElements[index+1])}BTM.Event.fire(this.selectElements[index+1],'change')}};function observe(element,index){BTM.observe(element,'change',this.display.bind(this,index))}this.selectElements=elements.map(BTM.$);this.options=Object.update({'sort':true},options);this.data=initData.call(this);this.selectElements.forEach(observe,this);this.display()};BTM.Form.Text={};BTM.Form.Text.empty=function empty(element){element=BTM.$(element);return element.value.length===0};BTM.Form.Text.makePlaceholder=function makePlaceholder(element){return new BTM.Form.Text.Placeholder(element)};BTM.Mapping.add('input[type=text], textarea',BTM.Form.Text.makePlaceholder);BTM.Form.Text.Placeholder=function Placeholder(element,placeholderText){this.element=BTM.$(element);this.element.Placeholder=this;this.placeholderText=placeholderText||(BTM.DOM.hasAttribute(this.element,'title')?this.element.getAttribute('title'):false);this.placeholderActive=false;this.show=function show(){if(BTM.Form.Text.empty(this.element)){BTM.log("Showing Placeholder text",element);this.element.value=this.placeholderText;BTM.DOM.setStyle(this.element,'color','#999999');this.placeholderActive=true}return element};this.hide=function hide(){if(this.placeholderActive){BTM.log("Hiding Placeholder text",element);this.element.value='';BTM.DOM.setStyle(this.element,'color','');this.placeholderActive=false}};if(this.placeholderText){BTM.log("Adding Placeholder properties and handlers",element);BTM.observe(this.element,'focus',this.hide.bind(this));BTM.observe(this.element,'blur',this.show.bind(this));this.show()}};BTM.Form.Button={};BTM.Form.Button.makeBranded=function makeBranded(element){return new BTM.Form.Button.Branded(element)};BTM.Mapping.add('button, input[type=button], input[type=submit], input[type=reset], input[type=image], a.btm-button',BTM.Form.Button.makeBranded);BTM.Form.Button.Branded=function Branded(element){this.baseClassName='btm-button';this.button=BTM.$(element);if(BTM.DOM.hasClass(this.button.parentNode.parentNode,this.baseClassName)){return false}this.disabled=this.button.getAttribute('disabled')==='disabled';if(this.button.nodeName.toLowerCase()==='input'){var oldOnClick=this.button.onclick||false;this.buttonIcon=BTM.DOM.getAttribute(this.button,'type')==='image'?BTM.DOM.getAttribute(this.button,['src','alt']):false;this.button=BTM.DOM.morph(this.button,'button');if(this.buttonIcon){BTM.DOM.setAttribute(this.button,'type','submit');this.buttonIcon=BTM.DOM.createElement('img',this.buttonIcon);if(BTM.Browser.engine==='Trident'&&BTM.Browser.engineVersion<=6&&/\.png$/i.test(this.buttonIcon.src)){BTM.Compatibility.MSIE.Six.fixPNG(this.buttonIcon)}this.button.insertBefore(this.buttonIcon,this.button.firstChild)}}this.element=BTM.DOM.wrap(BTM.DOM.wrap(this.button,'span'),'span',{'class':this.baseClassName});BTM.DOM.addClass(this.element,BTM.DOM.getAttribute(this.button,'class'));if(oldOnClick){BTM.observe(this.button,'click',oldOnClick.bind(this.element))}BTM.DOM.makeUnselectable(this.element);this.disable=function disable(){BTM.DOM.addClass(this.element,'disabled');this.button.disabled=true;this.disabled=true};this.enable=function enable(){BTM.DOM.removeClass(this.element,'disabled');this.button.disabled=false;this.disabled=false}};BTM.Form.Checkbox={};BTM.Form.Checkbox.initSelectAll=function initSelectAll(element,selector,context){element=BTM.$(element);context=context||element.form;if(BTM.DOM.$$(selector).collect('checked').every(BTM.self)){BTM.Form.Checkbox.check(element)}else{BTM.Form.Checkbox.unCheck(element)}BTM.observe(element,'click',BTM.Form.Checkbox.selectAll.curry(element,selector,context))};BTM.Form.Checkbox.selectAll=function selectAll(element,selector,context){element=BTM.$(element);context=context||element.form;var checks=BTM.$$(selector,context);var func=element.checked?BTM.Form.Checkbox.check:BTM.Form.Checkbox.unCheck;checks.forEach(func)};BTM.Form.Checkbox.toggle=function toggle(element,force){element=BTM.$(element);force=force||false;if(!element.disabled||force){element.checked=!element.checked}return element};BTM.Form.Checkbox.check=function check(element){element=BTM.$(element);element.checked=true;return element};BTM.Form.Checkbox.unCheck=function unCheck(element){element=BTM.$(element);element.checked=false;return element};BTM.Form.Checkbox.isChecked=function isChecked(element){element=BTM.$(element);return element.checked};BTM.Form.FieldRules=function FieldRules(form,rules){this.classPrefix='require-';this.classPrefixRegex=new RegExp('^'+this.classPrefix);this.init=function init(form,rules){this.form=BTM.$(form);this.rules=this.readRules().concat(rules)};this.commonTypes={'number':{'require':/^[\d]+$/,'message':'Must be a number'},'number-or-space':{'require':/^[\d\s]+$/,'message':'Must be a number or a space'},'not-number':{'require':/^[^\d]+$/,'message':'Must not be a number'},'empty':{'require':/^$/,'message':'Must be empty'},'empty-or-space':{'require':/^\s*$/,'message':'Must be empty or space only'},'not-empty':{'require':/^(.|\s)+$/,'message':'Must not be empty'},'not-empty-or-space':{'require':/^[^\s]+$/,'message':'Must not be empty or space only'},'alphanumeric':{'require':/^[\w]+$/,'message':'Must be AlphaNumeric (letters and/or numbers)'},'alphanumeric-or-space':{'require':/^[\w\s]+$/,'message':'Must be AlphaNumeric (letters/numbers) or space'},'alpha-and-numeric':{'require':/[\d]+[a-z]+|[a-z]+[\d]+/gi,'message':'Must contain letters and numbers'},'email':{'require':/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i,'message':'Must be a valid Email address'},'checked':{'require':function(element){return BTM.Form.Checkbox.isChecked(element)},'message':'Must be checked'},'not-checked':{'require':function(element){return!BTM.Form.Checkbox.isChecked(element)},'message':'Must not be checked'},'one-checked':{'require':function(element){var checks=Object.toArray(element.form[element.name]);return checks.some(BTM.Form.Checkbox.isChecked)},'message':'Must have one checked'},'all-checked':{'require':function(element){var checks=Object.toArray(element.form[element.name]);return checks.every(BTM.Form.Checkbox.isChecked)},'message':'Must all be checked'},'none-checked':{'require':function(element){var checks=Object.toArray(element.form[element.name]);return!checks.some(BTM.Form.Checkbox.isChecked)},'message':'Must have none checked'},'one-selected':{'require':function(element){return element.selectedIndex!==-1},'message':'Must have one selected'},'none-selected':{'require':function(element){return element.selectedIndex===-1},'message':'Must have none selected'}};this.runChecks=function runChecks(){BTM.log("Running FieldRules checks for '"+this.form+"'");this.result=this.rules.map(this.checkRule,this);if(!this.result.every(function(res){return res.result})){return false}return true};this.readRules=function readRules(){var elements=this.form.elements;var rules=[];for(var i=0;i<elements.length;i++){var classes=BTM.DOM.getAttribute(elements[i],'class');if(this.classPrefixRegex.test(classes)){classes=classes.split(' ').filter(function(c){return this.classPrefixRegex.test(c)},this);if(classes.length>0){var els=/checked/.test(classes[0])?'[name='+elements[i].name+']':'#'+BTM.DOM.identify(elements[i]);rules.push(Object.update({'elements':els},this.commonTypes[classes[0].replace(this.classPrefix,'')]))}}}return rules};this.checkRule=function checkRule(rule){var elements=BTM.$$(rule.elements);var condition=rule.condition||false;var require=rule.require;var values=elements.map(BTM.Form.getValue);var returnVal=true;var message=rule.message||false;if(!condition||condition.map(this.checkRule,this).every(function(res){return res.result})){if(Object.isString(require)){if(this.commonTypes.hasOwnProperty(require)){message=this.commonTypes[require].message;require=this.commonTypes[require].require}else{require=new RegExp(require,'gi')}}if(Object.isRegExp(require)){returnVal=values.every(function(val){return require.test(val)})}else if(Object.isFunction(require)){returnVal=elements.every(require)}}var result=Object.merge(rule,{'elements':elements,'condition':condition,'require':require,'values':values,'message':message,'result':returnVal});return result};if(!Object.isUndefined(form)){this.init(form,rules)}};BTM.Form.makeValidator=function makeValidator(element){return new BTM.Form.Validator(element)};BTM.Mapping.add('form.btm-validation',BTM.Form.makeValidator);BTM.Form.Validator=function Validator(form,rules,errorHandler,successHandler){this.inherits(BTM.Form.FieldRules);if(!Object.isUndefined(form)){this.init(form,rules)}this.customHandlers={'onError':errorHandler||false,'onSuccess':successHandler||false};this.onError=function onError(rule){if(!rule.result){if(this.customHandlers.onError){this.customHandlers.onError(rule)}else{rule.elements.forEach(function(el){BTM.DOM.setStyle(el,'background-color','red');BTM.DOM.addClass(el,'error')})}}};this.onSuccess=function onSuccess(rule){if(rule.result){if(this.customHandlers.onSuccess){this.customHandlers.onSuccess(rule)}else{rule.elements.forEach(function(el){BTM.DOM.setStyle(el,'background-color','');BTM.DOM.removeClass(el,'error')})}}};this.validate=function validate(event){var res=this.runChecks();this.result.forEach(this.onError,this);this.result.forEach(this.onSuccess,this);if(!res){if(event){BTM.Event.cancelEvent(event)}return false}return true};this.form.validate=this.validate.bind(this);BTM.observe(this.form,'submit',this.validate.bindAsEventListener(this))};BTM.Form.Validator.inherits(BTM.Form.FieldRules);BTM.Table={};BTM.Table.makeDynamic=function makeDynamic(element){return new BTM.Table.Dynamic(element)};BTM.Mapping.add('table.btm-table:not(.custom)',BTM.Table.makeDynamic);BTM.Table.Dynamic=function Dynamic(table,options){this.table=BTM.$(table);var head=this.table?this.table.tHead.rows[0]:false;var sortCol=false;var sortReverse=false;var selectCol=false;options=Object.update({'columnTypes':[],'filterTypes':[],'rememberSorting':true},options);var columnTypeRegex={'currency':/Price|Cost|Amount/gi,'numeric':/Number|Max|Min|Count/gi,'checkbox':function(element){return BTM.$$('input[type="checkbox"], input[type="checkbox"]',element).length>0}};var filterTypeClasses={'select':'select'};this.display=function display(){while(this.table.tBodies[0].rows.length>0){this.table.tBodies[0].removeChild(this.table.tBodies[0].rows[0]);}data.forEach(displayRow,this);BTM.$$('span.loading',this.table).forEach(function(el){BTM.DOM.removeClass(el,'loading')});if(this.table.tFoot){BTM.DOM.update(this.table.tFoot.rows[0].cells[0],'Showing '+data.length+' of '+originalData.length+' records.')}};function displayRow(row,rowIndex){var tRow=this.table.tBodies[0].insertRow(rowIndex);for(var i=0;i<row.length;i++){tRow.appendChild(row[i])}BTM.Table.initClickToSelectRow(this.table.tBodies[0].rows[rowIndex]);BTM.Table.zebraStripes(this.table.tBodies[0].rows[rowIndex])}this.sort=function sort(event,column,keepDirection){type=options.columnTypes[column]||'general';keepDirection=keepDirection||false;if(event){BTM.Event.cancelEvent(event)}BTM.log('Sorting table on column "'+column+'" with type "'+type);BTM.DOM.addClass(BTM.$$('span',head.cells[sortCol])[0],'loading');if(sortCol===column){sortReverse=keepDirection?sortReverse:!sortReverse;BTM.DOM.removeClass(head.cells[sortCol],'sort-'+(sortReverse?'asc':'desc'))}else{if(sortCol!==false){BTM.DOM.removeClass(head.cells[sortCol],'sort sort-asc sort-desc')}sortCol=column;sortReverse=false}BTM.DOM.addClass(head.cells[column],'sort sort-'+(sortReverse?'desc':'asc'));data.sort(function(a,b){return BTM.Sort[type](a[column].innerText,b[column].innerText)});if(sortReverse){data.reverse()}this.display()};this.filter=function filter(){BTM.log('Filtering table');data=originalData.filter(function(element){for(var i=0;i<element.length;i++){if(filters[i]&&(!filters[i].Placeholder||!filters[i].Placeholder.placeholderActive)){var filterVal=filters[i].value.escapeRegex();if(options.filterTypes[i]==='select'&&filterVal!==''){filterVal="^"+filterVal+'$'}if(!new RegExp(filterVal,'gi').test(element[i].innerText)){return false}}}return true},this);if(sortCol!==false){this.sort(false,sortCol,true)}else{this.display()}};this.filterTimeout=function filterTimeout(event){if(this.timeout){window.clearTimeout(this.timeout)}this.timeout=window.setTimeout(this.filter.bind(this),50)};BTM.Table.zebraStripes(this.table);var headers=initHeaders.call(this);var originalData=initData.call(this);var data=originalData.concat([]);var filters=initFilters.call(this);if(this.table.tFoot){BTM.DOM.update(this.table.tFoot.rows[0].cells[0],'Showing '+data.length+' of '+originalData.length+' records.')}function initHeaders(){var headers=[];if(BTM.DOM.hasClass(head,'filter')){head=this.table.tHead.rows[1]}for(var i=0;i<head.cells.length;i++){if(selectCol===false){var selectAll=BTM.$$('input.select-all',head.cells[i]);if(selectAll.length>0){selectCol=i;selectIdentifier=BTM.DOM.getAttribute(BTM.$$('input[type="'+selectAll[0].type+'"]',this.table.tBodies[0].rows[0].cells[i])[0],'name');BTM.Form.Checkbox.initSelectAll(selectAll[0],'input[name="'+selectIdentifier+'"]',this.table)}}headers[i]=head.cells[i].innerText;if(headers[i].trim()===""){headers[i]=head.cells[i].innerHTML}for(var j in columnTypeRegex){if(columnTypeRegex.hasOwnProperty(j)&&((Object.isRegExp(columnTypeRegex[j])&&columnTypeRegex[j].test(headers[i]))||(Object.isFunction(columnTypeRegex[j])&&columnTypeRegex[j](head.cells[i])))&&!options.columnTypes.hasOwnProperty[i]){options.columnTypes[i]=j;break}}for(var k in filterTypeClasses){if(filterTypeClasses.hasOwnProperty(k)&&BTM.DOM.hasClass(head.cells[i],filterTypeClasses[k])){options.filterTypes[i]=k}}if(!BTM.DOM.hasClass(head.cells[i],'no-sort')){var span=BTM.DOM.update(BTM.DOM.createElement('span'),head.cells[i].innerHTML);BTM.DOM.update(head.cells[i],span);BTM.observe(head.cells[i],'click',this.sort.bindAsEventListener(this,i));BTM.DOM.makeUnselectable(head.cells[i])}}return headers}function initData(){var data=[];for(var i=0;i<this.table.tBodies[0].rows.length;i++){data[i]=Array.prototype.map.call(this.table.tBodies[0].rows[i].cells,BTM.self);BTM.Table.initClickToSelectRow(this.table.tBodies[0].rows[i],selectCol)}return data}function initFilters(){var filters=[];var caption=this.table.caption;if(BTM.DOM.$$('span',caption).length===0){var span=BTM.DOM.update(BTM.DOM.createElement('span',{'class':'caption'}),caption.innerHTML);BTM.DOM.update(caption,span)}if(!BTM.DOM.hasClass(this.table,'no-filter')){var filterButton=BTM.DOM.createElement('button',{'class':'small','type':'button'});BTM.DOM.update(filterButton,'Filter');span.insertBefore(filterButton,span.firstChild);BTM.Mapping.init(this.table.caption);BTM.DOM.setStyle(filterButton.parentNode.parentNode,'float','right');var filterSection=this.table.tHead.insertRow(0);BTM.DOM.addClass(filterSection,'filter');BTM.Effect.hide(filterSection);for(var i=0;i<head.cells.length;i++){var cell=filterSection.appendChild(BTM.DOM.createElement('th'));if(!BTM.DOM.hasClass(this.table.tHead.rows[1].cells[i],'no-sort')&&options.columnTypes[i]!=='checkbox'){if(options.filterTypes[i]==='select'){var select=BTM.DOM.createElement('select');filters[i]=select;var opts=[];data.forEach(function(row){if(opts.indexOf(row[i].innerText)===-1){opts.push(row[i].innerText)}},this);opts.sort();BTM.Form.Select.addOption(select,'Filter','');opts.forEach(function(txt){BTM.Form.Select.addOption(select,txt,txt)});cell.appendChild(select);BTM.observe(select,'change',this.filterTimeout.bind(this));BTM.observe(select,'keypress',this.filterTimeout.bind(this))}else{var input=BTM.DOM.createElement('input',{'type':'text','title':'Filter'});filters[i]=input;cell.appendChild(input);BTM.Form.Text.makePlaceholder(input);BTM.observe(input,'keyup',this.filterTimeout.bind(this))}}}BTM.observe(filterButton,'click',function(){BTM.Effect.toggle(filterSection);BTM.DOM.swapClass(filterButton.parentNode.parentNode,'btm-branded-button-on')})}return filters}};BTM.Table.initClickToSelectRow=function initClickToSelectRow(element,index,selector){element=BTM.$(element);selector=selector||"input[type=checkbox], input[type=radio]";index=index||0;var input=BTM.$$(selector,element)[index];if(!input){return false}BTM.observe(element,'click',function(event){if(BTM.Event.getTarget(event)!==input){BTM.Form.Checkbox.toggle(input)}})};BTM.Table.arrayToRows=function arrayToRows(element,array){element=BTM.$(element);if(element.nodeName.toLowerCase()==='table'){element=element.tBodies[0]}for(var i=0;i<array.length;i++){var row=element.insertRow(-1);BTM.Table.zebraStripes(row);for(var j=0;j<array[i].length;j++){var cell=row.insertCell(-1);BTM.DOM.update(cell,array[i][j])}}};BTM.Table.zebraStripes=function zebraStripes(element,classes){element=BTM.$(element);classes=classes&&Object.isArray(classes)?classes:['odd','even'];switch(element.nodeName.toLowerCase()){case'tr':var r=element.sectionRowIndex%classes.length;var className=classes[r];BTM.DOM.removeClass(element,classes.join(' '));BTM.DOM.addClass(element,className);break;case'tbody':Array.forEach(element.rows,BTM.Table.zebraStripes);break;case'table':Array.forEach(element.tBodies,BTM.Table.zebraStripes);break}return element};BTM.AJAX={};BTM.AJAX.Request=function Request(url,data,callbacks,options){this.request=false;if(!Object.isUndefined(url)){this.url=url.parseURL();this.data=this.url.search.parseQuery();this.url.search="";this.url.href=Object.toURLString(this.url)}else{this.url=false}if(data){Object.update(this.data,data)}this.JSONregexp=/json/gi;this.callbacks=typeof callbacks!=='undefined'?Object.isFunction(callbacks)?{'onSuccess':callbacks}:callbacks:false;if(this.callbacks){for(var i in this.callbacks){if(this.callbacks.hasOwnProperty(i)&&!Object.isFunction(this.callbacks[i])){throw new TypeError("Not a callback",this.callbacks[i])}}}this.options=Object.update({'method':'POST','forceJSON':false,'forceXML':false,'autoRun':true,'cache':true},options);this.options.method=this.options.method.toUpperCase();if(!this.options.cache){this.data._noCache=new Date().getTime()}this.statusNames={200:'onSuccess',400:'onError',500:'onError'};this.response={'responseText':'','responseXML':null,'responseJSON':null};var XHRMembersToCopy=['responseText','responseXML','status','statusText','abort'];this.readyStateChanged=function readyStateChanged(){buildResponse.call(this);switch(this.request.readyState){case 0:if(this.callbacks.onBeforeStart){this.callbacks.onBeforeStart(this.response)}break;case 1:if(this.callbacks.onLoading){this.callbacks.onLoading(this.response)}break;case 2:if(this.callbacks.onLoaded){this.callbacks.onLoaded(this.response)}break;case 3:if(this.callbacks.onInteractive){this.callbacks.onInteractive(this.response)}break;case 4:if(this.callbacks[this.request.status]){this.callbacks[this.request.status](this.response)}else if(this.callbacks[this.statusNames[Math.floor(this.request.status/100)*100]]){this.callbacks[this.statusNames[Math.floor(this.request.status/100)*100]](this.response)}if(this.callbacks.onComplete){this.callbacks.onComplete(this.response)}break}};function buildResponse(){for(var i=0;i<XHRMembersToCopy.length;i++){try{if(Object.isFunction(XHRMembersToCopy[i])){this.response[XHRMembersToCopy[i]]=this.request[XHRMembersToCopy[i]].bind(this.request)}else{this.response[XHRMembersToCopy[i]]=this.request[XHRMembersToCopy[i]]}}catch(e){}}if(this.request.readyState===4){this.response.contentType=this.request.getResponseHeader('Content-Type');if(this.options.forceJSON||this.JSONregexp.test(this.response.contentType)){this.response.responseJSON=JSON.parse(this.request.responseText)}else if(this.options.forceXML&&!this.response.responseXML){try{var parser=new DOMParser();this.response.responseXML=parser.parseFromString(this.request.responseText,"text/xml")}catch(e){this.response.responseXML=new ActiveXObject("Microsoft.XMLDOM");this.response.responseXML.async="false";this.response.responseXML.loadXML(this.request.responseText)}}}}if(window.ActiveXObject){this.request=new ActiveXObject("Microsoft.XMLHTTP")}else{this.request=new XMLHttpRequest()}this.run=function run(){var paramStr=Object.serialize(this.data);if(this.options.method==='GET'){this.url.href+='?'+paramStr}this.request.open(this.options.method.toUpperCase(),this.url.href,true);this.request.onreadystatechange=this.readyStateChanged.bind(this);if(this.options.method==='POST'){this.request.setRequestHeader("Content-type","application/x-www-form-urlencoded");this.request.send(paramStr)}else{this.request.send(null)}};if(this.url&&this.request&&this.options.autoRun){this.run()}};BTM.AJAX.Updater=function Updater(element,url,data,callbacks,options){this.element=BTM.$(element);callbacks=callbacks||{};data=data||false;this.update=function update(response){BTM.DOM.update(element,response.responseText);BTM.Mapping.init(element);if(oldComplete){oldComplete(response)}};if(Object.isObject(callbacks)&&callbacks.onComplete){var oldComplete=callbacks.onComplete}callbacks.onComplete=this.update.bind(this);this.inherits(BTM.AJAX.Request,url,data,callbacks,options)};BTM.AJAX.Updater.inherits(BTM.AJAX.Request);BTM.UI={};BTM.UI.scaleTo=function scaleTo(originalWidth,originalHeight,maxWidth,maxHeight){var newSize={'width':originalWidth,'height':originalHeight};if(originalWidth>maxWidth||originalHeight>maxHeight){var ratio=originalWidth/originalHeight;var fitRatio=maxWidth/maxHeight;if(ratio>=fitRatio){newSize.width=maxWidth;newSize.height=maxWidth/originalWidth*originalHeight}else if(ratio<=fitRatio){newSize.height=maxHeight;newSize.width=maxHeight/originalHeight*originalWidth}else if(ratio===fitRatio){newSize.width=maxWidth;newSize.height=maxHeight}}return newSize};BTM.UI.WindowBase=function WindowBase(options){this.options=Object.update({'class':'btm-window','fullscreen':false,'centered':true,'autoscroll':true,'clickToClose':false,'noContent':false,'autoAppend':true,'ie6iframe':true},options);this.open=false;this.attachWindow=function attachWindow(element,before){element=BTM.$(element);before=BTM.$(before);if(!element){element=document.body}if(before){element.insertBefore(this.frame,before)}else{element.appendChild(this.frame)}if(this.options.ie6iframe&&BTM.Browser.is('Trident',6,'lte')){this.iframe=BTM.Compatibility.MSIE.Six.fixSELECT(this.frame)}};this.init=function init(){this.frame=BTM.DOM.createElement('div',{'class':this.options['class']});if(!this.options.noContent){this.element=BTM.DOM.createElement('div',{'class':'content'});this.frame.appendChild(this.element)}else{this.element=this.frame}if(BTM.Browser.is('Trident',6,'lte')){BTM.Compatibility.MSIE.Six.fixHover(this.frame);BTM.Compatibility.MSIE.Six.fixHover(this.element)}this.hide();if(this.options.autoAppend){this.attachWindow()}if(this.options.clickToClose){BTM.observe(this.frame,'click',this.hide.bind(this))}BTM.observe(window,'resize',this.resizeWindow.bind(this));this.resizeWindow()};this.resizeWindow=function resizeWindow(width,height){if(this.options.fullscreen){this.fullScreenResize()}else{this.options.maxSize=BTM.DOM.getAvailableSpace(this.element,BTM.Browser);if(this.options.resizeHandler){this.options.resizeHandler.call(this)}if(this.options.centered){var margins={'left':this.frame.clientWidth/2,'top':this.frame.clientHeight/2};if(BTM.Browser.is('Trident',(BTM.Browser.mode==='quirks'?7:6),'lte')){BTM.DOM.setStyle(this.frame,{'position':'absolute'});margins.left+=document.documentElement.scrollLeft;margins.top+=document.documentElement.scrollTop}BTM.DOM.setStyle(this.frame,{'margin-left':'-'+margins.left+'px','margin-top':'-'+margins.top+'px'})}}if(this.iframe){BTM.DOM.setStyle(this.iframe,Object.update({'left':this.frame.offsetLeft+'px','top':this.frame.offsetTop+'px'},BTM.DOM.getDimensions(this.frame)))}};this.fullScreenResize=function fullScreenResize(){var size={'width':BTM.Browser.width+'px','height':BTM.Browser.height+'px','top':0,'left':0};if(BTM.Browser.is('Trident',(BTM.Browser.mode==='quirks'?7:6),'lte')){size['top']=document.documentElement.scrollTop+'px';size['left']=document.documentElement.scrollLeft+'px'}BTM.DOM.setStyle(this.frame,size)};this.show=function show(){if(!this.open){BTM.DOM.setStyle(this.frame,'visibility','hidden');var fadeIn=true}if(this.iframe){BTM.Effect.show(this.iframe)}BTM.Effect.show(this.frame);this.open=true;this.resizeWindow();if(fadeIn&&BTM.Effect.fadeIn){BTM.Effect.fadeIn(this.frame)}else if(fadeIn){BTM.DOM.setStyle(this.frame,'visibility','visible')}};this.hide=function hide(){BTM.Effect.hide(this.frame);if(this.iframe){BTM.Effect.hide(this.iframe)}this.open=false};if(options){this.init()}};BTM.UI.Backdrop=function Backdrop(options){this.options=Object.update({'class':'btm-backdrop','fullscreen':true,'clickToClose':true,'noContent':true},options);this.inherits(BTM.UI.WindowBase,this.options)};BTM.UI.Backdrop.inherits(BTM.UI.WindowBase);BTM.UI.makeImageViewer=function makeImageViewer(element){return new BTM.UI.ImageViewer(element)};BTM.Mapping.add('.btm-imageviewer-images',BTM.UI.makeImageViewer);BTM.UI.ImageViewer=function ImageViewer(baseElement,options){baseElement=BTM.$(baseElement);BTM.log("Creating new Image Viewer",baseElement);this.options=Object.update({'class':'btm-imageviewer','fullscreen':false,'clickToClose':false,'ie6iframe':false},options);this.inherits(BTM.UI.WindowBase,this.options);this.currentImage=false;this.imageTypes=['jpg','jpeg','tiff','png','gif','bmp'];this.initImages=function initImages(){var selector="a[href].imageviewer, a[href$="+this.imageTypes.join("], a[href$=")+"], a[href][type^=image]";var links=BTM.$$(selector,baseElement);links.sort(BTM.Sort.documentOrder);return links.map(this.initLink,this)};this.initLink=function initLink(element,index){element=BTM.$(element);BTM.observe(element,'click',this.showImage.bindAsEventListener(this,index));var thumb=BTM.$$('img',element)[0]||false;var prop={'element':element,'url':BTM.DOM.getAttribute(element,'href'),'loaded':false,'width':false,'height':false,'thumb':thumb,'image':BTM.DOM.createElement('img'),'title':BTM.DOM.getAttribute(element,'title')||false,'description':BTM.DOM.getAttribute(thumb,'alt')||false,'moreinfo':BTM.DOM.getAttribute(thumb,'longdesc')||false};BTM.observe(prop.image,'load',this.imageHasLoaded.bind(this,index));return prop};this.initWindow=function initWindow(){var imageHolder=BTM.DOM.createElement('div',{'class':'image'});this.popupImage=BTM.DOM.createElement('img',{'class':'popup','width':'300','height':'300'});this.closeButton=BTM.DOM.createElement('span',{'class':'close'},'&times;');if(this.images.length>1){this.nextButton=BTM.DOM.createElement('span',{'class':'next'},'&rarr;');this.previousButton=BTM.DOM.createElement('span',{'class':'previous'},'&larr;');BTM.DOM.makeUnselectable(this.previousButton);BTM.DOM.makeUnselectable(this.nextButton);this.element.appendChild(this.previousButton);this.element.appendChild(this.nextButton);BTM.observe(this.nextButton,'click',this.flipImage.bindAsEventListener(this,1));BTM.observe(this.previousButton,'click',this.flipImage.bindAsEventListener(this,-1))}this.popupTitle=BTM.DOM.createElement('span',{'class':'title'});this.popupDescription=BTM.DOM.createElement('span',{'class':'description'});this.popupMoreInfo=BTM.DOM.createElement('a',{'class':'moreinfo'});BTM.Effect.hide(BTM.DOM.update(this.popupMoreInfo,'More Info'));BTM.DOM.makeUnselectable(this.closeButton);imageHolder.appendChild(this.popupImage);this.element.appendChild(this.closeButton);this.element.appendChild(imageHolder);this.element.appendChild(this.popupTitle);this.element.appendChild(this.popupDescription);this.element.appendChild(this.popupMoreInfo);this.backdrop=new BTM.UI.Backdrop({'clickToClose':false});BTM.observe(this.closeButton,'click',this.hideImage.bind(this));BTM.observe(this.backdrop.element,'click',this.hideImage.bind(this));BTM.observe(document,'keydown',this.keyPress.bindAsEventListener(this));this.moreInfoWindow=new BTM.UI.HTMLWindow('')};this.scaleImage=function scaleImage(){if(this.currentImage!==false){this.options.maxSize.height=this.options.maxSize.height-BTM.DOM.getDimensions(this.popupTitle,true).height-BTM.DOM.getDimensions(this.popupDescription,true).height;var img=this.images[this.currentImage].image;BTM.DOM.setAttribute(this.popupImage,BTM.UI.scaleTo(img.width,img.height,this.options.maxSize.width,this.options.maxSize.height))}};this.showMoreInfo=function showMoreInfo(event){BTM.Event.cancelEvent(event);this.moreInfoWindow.update(this.popupMoreInfo);this.moreInfoWindow.show()};this.showImage=function showImage(event,index){BTM.Event.cancelEvent(event);this.backdrop.show();if(this.images[index].title){BTM.DOM.update(this.popupTitle,this.images[index].title||"");BTM.DOM.update(this.popupDescription,this.images[index].description||"")}else if(this.images[index].description){BTM.DOM.update(this.popupTitle,this.images[index].description||"")}else{BTM.DOM.update(this.popupTitle,"");BTM.DOM.update(this.popupDescription,"")}if(this.images[index].moreinfo){BTM.DOM.setAttribute(this.popupMoreInfo,'href',this.images[index].moreinfo);BTM.Effect.show(this.popupMoreInfo)}else{BTM.DOM.removeAttribute(this.popupMoreInfo,'href');BTM.Effect.hide(this.popupMoreInfo)}BTM.DOM.setAttribute(this.popupImage,{'src':BTM.options.imgdir+'trans.gif','width':'300','height':'300'});BTM.DOM.addClass(this.popupImage,'loading');this.show();this.currentImage=index;this.loadImage(index)};this.loadImage=function loadImage(index){if(this.images[index].loaded){BTM.log("Image Viewer image with ID '"+index+"' and url '"+this.images[index].url+"' has already loaded");this.imageHasLoaded(index)}else{BTM.log("Loading Image Viewer image with ID '"+index+"' and url '"+this.images[index].url+"'");this.images[index].image.src=this.images[index].url}};this.imageHasLoaded=function imageHasLoaded(index){BTM.log("Image Viewer image with ID '"+index+"' and url '"+this.images[index].url+"' has loaded");this.images[index].loaded=true;if(this.currentImage===index&&this.open){this.resizeWindow();BTM.DOM.setAttribute(this.popupImage,'src',this.images[index].image.src);if(BTM.Browser.engine==='Trident'&&BTM.Browser.engineVersion<=6){BTM.Compatibility.MSIE.Six.fixPNG(this.popupImage)}BTM.Mapping.init(this.element);BTM.DOM.removeClass(this.popupImage,'loading');this.resizeWindow()}};this.hideImage=function hideImage(){this.hide();this.backdrop.hide()};this.keyPress=function keyPress(event){var code=BTM.Event.getKeyCode(event);if(this.open){if(BTM.Event.keyCodes[code]==='KEY_LEFT'){this.flipImage(false,-1)}else if(BTM.Event.keyCodes[code]==='KEY_RIGHT'){this.flipImage(false,1)}else if(BTM.Event.keyCodes[code]==='KEY_ESCAPE'){this.hideImage()}}};this.flipImage=function flipImage(event,direction){var newImg=this.currentImage+direction;if(newImg<0){newImg=this.images.length-1}else if(newImg>=this.images.length){newImg=0}this.showImage(event,newImg)};if(this.element){this.options.resizeHandler=this.scaleImage;this.images=this.initImages();this.initWindow()}};BTM.UI.ImageViewer.inherits(BTM.UI.WindowBase);BTM.UI.HTMLWindow=function HTMLWindow(content,options){BTM.log("Creating new HTMLWindow");this.options=Object.update({'class':'btm-htmlwindow','fullscreen':false,'clickToClose':false},options);this.inherits(BTM.UI.WindowBase,this.options);this.update=function update(content){BTM.DOM.update(this.element,content)};if(content){this.update(this.element,content)}};BTM.UI.HTMLWindow.inherits(BTM.UI.WindowBase);BTM.UI.makeDatePicker=function makeDatePicker(element){return new BTM.UI.DatePicker(element)};BTM.Mapping.add('input.btm-date',BTM.UI.makeDatePicker);BTM.UI.DatePicker=function DatePicker(input,options){this.input=BTM.$(input);BTM.log("Creating new Date Picker");this.options=Object.update({'class':'btm-datepicker','fullscreen':false,'clickToClose':false,'centered':false,'autoAppend':false,'firstDayOfWeek':0,'showWeekNumbers':true,'dateFormat':'%j%/%n%/%Y%','outputHandler':false,'position':'br'},options);this.today=new Date();this.tmpDate=new Date();this.currentDate=new Date();this.inherits(BTM.UI.WindowBase,this.options);this.positionCalendar=function positionCalendar(){var posStyle={'left':false,'top':false};switch(this.options.position){case'br':posStyle={'left':this.input.offsetLeft+this.input.offsetWidth+'px','top':this.input.offsetTop+this.input.offsetHeight+'px'};break;case'tr':posStyle={'left':this.input.offsetLeft+this.input.offsetWidth+'px','top':this.input.offsetTop+'px'};break;case'bl':posStyle={'left':this.input.offsetLeft+'px','top':this.input.offsetTop+this.input.offsetHeight+'px'};break}BTM.DOM.setStyle(this.frame,posStyle)};this.flip=function flip(direction){this.tmpDate.setDate(1);this.tmpDate.setMonth(this.tmpDate.getMonth()+direction);this.displayCalendar()};this.goToDate=function goToDate(year,month,day){if(Object.isDate(year)){this.tmpDate=new Date(year)}else{month=month||0;day=day||1;this.tmpDate=new Date(year,month,day)}this.displayCalendar()};this.selectDate=function selectDate(cell){if(!BTM.DOM.hasClass(cell,'unselectable')){this.currentDate=new Date(this.tmpDate.getFullYear(),this.tmpDate.getMonth(),parseInt(cell.innerHTML));BTM.$$('td.current',this.calendarTBODY).forEach(function(td){BTM.DOM.removeClass(td,'current')});BTM.DOM.addClass(cell,'current');if(this.options.outputHandler&&Object.isFunction(this.options.outputHandler)){this.options.outputHandler(this.currentDate,this)}else{this.input.value=this.currentDate.formatDate(this.options.dateFormat)}this.hideCalendar()}};this.keyPress=function keyPress(event){var code=BTM.Event.getKeyCode(event);if(this.open){var multiplier=event.shiftKey?12:1;if(BTM.Event.keyCodes[code]==='KEY_LEFT'){this.flip(-1*multiplier)}else if(BTM.Event.keyCodes[code]==='KEY_RIGHT'){this.flip(1*multiplier)}else if(BTM.Event.keyCodes[code]==='KEY_ESCAPE'){this.hideCalendar()}else if(BTM.Event.keyCodes[code]==='KEY_HOME'){this.goToDate(this.today)}}};this.initCalendar=function initCalendar(){this.positionCalendar();this.backdrop=new BTM.UI.Backdrop({'class':'btm-datepicker-backdrop'});this.closeButton=BTM.DOM.createElement('button',{'class':'close small'},'&times;');this.element.appendChild(this.closeButton);BTM.observe(this.closeButton,'click',this.hideCalendar.bind(this));this.calendarTable=BTM.DOM.createElement('table',{'class':'btm-table custom','cellspacing':'0'});this.element.appendChild(this.calendarTable);var buttonGroup=BTM.DOM.createElement('span',{'class':'btm-multi-button small'});var nextMonthBtn=BTM.DOM.createElement('button',false,"&rsaquo;");var prevMonthBtn=BTM.DOM.createElement('button',false,"&lsaquo;");var todayBtn=BTM.DOM.createElement('button',false,"Today");var nextYearBtn=BTM.DOM.createElement('button',false,"&raquo;");var prevYearBtn=BTM.DOM.createElement('button',false,"&laquo;");var buttonBox=BTM.DOM.createElement('div',{'class':'buttons'});buttonGroup.appendChild(prevYearBtn);buttonGroup.appendChild(prevMonthBtn);buttonGroup.appendChild(todayBtn);buttonGroup.appendChild(nextMonthBtn);buttonGroup.appendChild(nextYearBtn);buttonBox.appendChild(buttonGroup);BTM.observe(nextMonthBtn,'click',this.flip.bind(this,1));BTM.observe(prevMonthBtn,'click',this.flip.bind(this,-1));BTM.observe(todayBtn,'click',this.goToDate.bind(this,this.today));BTM.observe(nextYearBtn,'click',this.flip.bind(this,12));BTM.observe(prevYearBtn,'click',this.flip.bind(this,-12));BTM.observe(document,'keydown',this.keyPress.bindAsEventListener(this));if(Object.isString(this.options.firstDayOfWeek)){this.options.firstDayOfWeek=this.tmpDate.getDaysOfWeek().indexOf(this.options.firstDayOfWeek)}var tmp=this.tmpDate.getDaysOfWeek().map(BTM.self);this.daysOfWeek=this.tmpDate.getDaysOfWeek().slice(this.options.firstDayOfWeek).concat(tmp.slice(this.options.firstDayOfWeek-1));this.monthCell=BTM.DOM.createElement('span',{'class':'month'});var capSpan=BTM.DOM.createElement('span',{'class':'caption'});var caption=BTM.DOM.createElement('caption',false,capSpan);capSpan.appendChild(this.monthCell);capSpan.appendChild(buttonBox);var thead=BTM.DOM.createElement('thead');var tfoot=BTM.DOM.createElement('tfoot');this.calendarTBody=BTM.DOM.createElement('tbody',{'class':'no-row-hover'});this.calendarTable.appendChild(caption);this.calendarTable.appendChild(thead);thead.insertRow(0);this.calendarTable.appendChild(tfoot);tfoot.insertRow(0);this.footerCell=BTM.DOM.createElement('td',{'colSpan':this.options.showWeekNumbers?'8':'7'});tfoot.rows[0].appendChild(this.footerCell);this.calendarTable.appendChild(this.calendarTBody);var firstCell=this.options.showWeekNumbers?1:0;if(this.options.showWeekNumbers){thead.rows[0].appendChild(BTM.DOM.createElement('th',{'class':'no-sort weeknumber'},'W'))}var j=firstCell+6;var dayNum=0;for(i=firstCell;i<=j;i++){var th=BTM.DOM.createElement('th',{'class':'no-sort','scope':'col'},'<span>'+this.daysOfWeek[dayNum].substr(0,3)+'</span>');dayNum++;thead.rows[0].appendChild(th)}for(var k=0;k<6;k++){this.calendarTBody.insertRow(k);if(this.options.showWeekNumbers){var th=BTM.DOM.createElement('th',{'class':'weeknumber','scope':'row'});this.calendarTBody.rows[k].appendChild(th)}for(var l=firstCell;l<=6+firstCell;l++){var cell=this.calendarTBody.rows[k].insertCell(l);BTM.observe(cell,'click',this.selectDate.bind(this,cell))}}BTM.Table.zebraStripes(this.calendarTBody);BTM.Mapping.init(this.element);BTM.observe(this.input,'focus',this.showCalendar.bind(this));BTM.observe(this.input,'click',this.showCalendar.bind(this));BTM.observe(this.backdrop.frame,'click',this.hideCalendar.bind(this))};this.displayCalendar=function displayCalendar(){this.positionCalendar();this.tmpDate.setDate(1);var firstCell=this.options.showWeekNumbers?1:0;var currentCell=firstDay=this.tmpDate.getDay()+firstCell;var dayOfMonth=1;var currentMonth=this.tmpDate.getMonth();BTM.DOM.update(this.monthCell,this.tmpDate.getMonthsOfYear()[this.tmpDate.getMonth()]+', '+this.tmpDate.getFullYear());if(this.currentDate){BTM.DOM.update(this.footerCell,this.tmpDate.getMonthsOfYear()[this.currentDate.getMonth()]+' '+this.currentDate.getDate()+', '+this.currentDate.getFullYear())}for(var i=0;i<6;i++){BTM.Effect.show(this.calendarTBody.rows[i]);if(this.options.showWeekNumbers&&dayOfMonth<=this.tmpDate.getDaysInMonth()){this.tmpDate.setDate(dayOfMonth);BTM.DOM.update(this.calendarTBody.rows[i].cells[0],this.tmpDate.getWeekOfYear(this.options.firstDayOfWeek))}else if(dayOfMonth>this.tmpDate.getDaysInMonth()){BTM.Effect.hide(this.calendarTBody.rows[i]);break}if(currentCell>firstCell){for(var j=firstCell;j<currentCell;j++){BTM.DOM.update(this.calendarTBody.rows[i].cells[j],"");BTM.DOM.removeClass(this.calendarTBody.rows[i].cells[j],'current');BTM.DOM.addClass(this.calendarTBody.rows[i].cells[j],['no-hover','unselectable'])}}for(;currentCell<=6+firstCell;currentCell++){if(dayOfMonth<=this.tmpDate.getDaysInMonth()){BTM.DOM.update(this.calendarTBody.rows[i].cells[currentCell],dayOfMonth+"");BTM.DOM.removeClass(this.calendarTBody.rows[i].cells[currentCell],['current','today','no-hover','unselectable']);if(this.tmpDate.getFullYear()===this.today.getFullYear()&&this.tmpDate.getMonth()===this.today.getMonth()&&dayOfMonth===this.today.getDate()){BTM.DOM.addClass(this.calendarTBody.rows[i].cells[currentCell],'today')}else if(this.tmpDate.getFullYear()===this.currentDate.getFullYear()&&this.tmpDate.getMonth()===this.currentDate.getMonth()&&dayOfMonth===this.currentDate.getDate()){BTM.DOM.addClass(this.calendarTBody.rows[i].cells[currentCell],'current')}dayOfMonth++}else{BTM.DOM.update(this.calendarTBody.rows[i].cells[currentCell],"");BTM.DOM.removeClass(this.calendarTBody.rows[i].cells[currentCell],['current','today']);BTM.DOM.addClass(this.calendarTBody.rows[i].cells[currentCell],['no-hover','unselectable'])}}currentCell=firstCell}};this.showCalendar=function showCalendar(){this.displayCalendar();this.backdrop.show();this.show()};this.hideCalendar=function hideCalendar(){this.backdrop.hide();this.hide()};if(this.input){this.attachWindow(this.input.offsetParent);this.initCalendar()}};BTM.UI.DatePicker.inherits(BTM.UI.WindowBase);BTM.UI.makeTabs=function makeTabs(element){return new BTM.UI.Tabs(element)};BTM.Mapping.add('ul.btm-tabs',BTM.UI.makeTabs);BTM.UI.Tabs=function Tabs(element,options){this.findTab=function findTab(tab){if(Object.isElement(tab)||Object.isString(tab)){tab=this.tabs[BTM.$(tab).tabID]}else if(Object.isNumber(tab)){tab=this.tabs[tab]}return tab};this.clicked=function clicked(event,tab){this.showTab(tab)};this.showTab=function showTab(tab){tab=tab||0;tab=this.findTab(tab);this.currentTab=tab.id;this.loadingTab=false;if(tab===this.currentTab){return}if(!tab.url||(tab.url&&tab.ajaxLoaded)){this.tabs.forEach(this.hideTab,this);BTM.DOM.addClass(tab.element,'current');BTM.Effect.show(tab.target)}else if(tab.url){this.loadFromAJAX(tab,true)}};this.hideTab=function hideTab(tab){tab=this.findTab(tab);BTM.DOM.removeClass(tab.element,'current');BTM.Effect.hide(tab.target)};this.ajaxLoaded=function ajaxLoaded(tab){tab=this.findTab(tab);tab.ajaxLoaded=true;BTM.DOM.removeClass(tab.anchor,'loading');if(this.loadingTab===tab.tabID){this.showTab(tab)}};this.loadFromAJAX=function loadFromAJAX(tab,showAfterLoad){tab=this.findTab(tab);var callbacks=showAfterLoad?{'onComplete':this.ajaxLoaded.bind(this,tab)}:{};if(tab.url){BTM.DOM.addClass(tab.anchor,'loading');this.loadingTab=tab.tabID;new BTM.AJAX.Updater(tab.target,tab.url,false,callbacks)}};function initTabs(){var tabs=BTM.$$('li',this.element);return tabs.map(initTab,this)}function initTab(tab,index,array){tab=BTM.$(tab);var anchor=BTM.$$('a',tab)[0];var urlprops=BTM.DOM.getAttribute(anchor,'href').parseURL();var props={'id':index,'element':tab,'anchor':anchor,'url':false};var docprops=window.location.href.parseURL();if(!BTM.Util.compareURLs(urlprops,docprops)){props.url=urlprops.href;if(BTM.DOM.hasClass(anchor,'no-ajax')){return{}}props.target=BTM.DOM.createElement('div');var elID=urlprops.pathname;this.contentBox.appendChild(props.target);BTM.DOM.setAttribute(anchor,'href','#'+elID);if(BTM.DOM.hasClass(anchor,'preload')||this.options.preloadAJAX){this.loadFromAJAX(tab,false)}}else{var elID=urlprops.hash.replace('#','');props.target=BTM.$(elID)}BTM.DOM.removeAttribute(props.target,'id');tab.tabID=index;BTM.observe(anchor,'click',this.showTab.bind(this,index));var hashes=BTM.Util.getHashLoaders();var current=hashes.inArray(elID)?true:(this.current===false&&BTM.DOM.hasClass(tab,'current'))?true:false;if(current){this.current=index}else{BTM.Effect.hide(props.target);BTM.DOM.removeClass(tab,'current')}return props}this.options=Object.update({'preloadAJAX':false,'cacheAJAX':true},options);this.element=BTM.$(element);this.contentBox=BTM.$$('.btm-tab-content',this.element.parentNode)[0];this.current=false;this.loadingTab=false;this.tabs=initTabs.call(this);this.showTab(this.current)};BTM.UI.makeTreeView=function makeTreeView(element){return new BTM.UI.TreeView(element)};BTM.Mapping.add('ul.btm-treeview',BTM.UI.makeTreeView);BTM.UI.TreeView=function TreeView(element,options){this.element=BTM.$(element);this.options=Object.update({'defaultOpen':BTM.DOM.hasClass(this.element,'open')},options);this.initItem=function initItem(element){element=BTM.$(element);var span=BTM.DOM.createElement('span',{'class':'btm-treeview-item'});var i=0;while(element.parentNode.childNodes.length>1){if(element.parentNode.childNodes[i]!==element){span.appendChild(element.parentNode.childNodes[i])}else{i++}}element.parentNode.insertBefore(span,element);var parent=element.parentNode;if(!this.options.defaultOpen&&!BTM.DOM.hasClass(element,'open')){BTM.Effect.hide(element)}var btn=BTM.DOM.createElement('button',{'class':(this.options.defaultOpen?'hide':'show')},this.options.defaultOpen?'-':'+');var btnCont=BTM.DOM.createElement('span',{'class':'btm-treeview-button-container'},btn);BTM.observe(btn,'click',this.toggle.bind(this,element,btn));parent.insertBefore(btnCont,parent.firstChild);BTM.Form.Button.makeBranded(btn)};this.toggle=function toggle(element,button){BTM.Effect.toggle(element);var show=BTM.DOM.hasClass(button,'show');BTM.DOM.update(button,show?'-':'+');BTM.DOM.swapClass(button,'show','hide')};if(this.element){BTM.$$('ul',this.element).forEach(this.initItem,this);}};