function type(val){if(val==null)return null;if(typeof(val)=='object'){if(val.nodeType)return'Element';var otype=String(val.constructor).match(/function\s+(\w+)/);if(val.type)return'Event';else if(otype)return otype[1];else return null;}else{return typeof(val);}} function contains(array,item){for(var i=0;i=0;end--){if(!contains(characters,this.charAt(end-1)))break;} return this.substring(start,end);} String.prototype.endswith=function(string){return this.substring(this.length-string.length)==string;} String.prototype.startswith=function(string){return this.substring(0,string.length)==string;} function Element(nodetype,text,styles){var elem;if(type(nodetype)=='string')nodetype=components(nodetype);if(type(nodetype)=='Object'){elem=$(document.createElement(nodetype.tag||'div'));if(nodetype.id)elem.id=nodetype.id;if(nodetype.classes){for(var i=0;i=0;i--){this.events[etype][i].call(this,e);if(!e.neighbourly)break;}}} if(propagate){var node=this;while(node!=document.body&&!e.stopped){node=node.parentNode;$(node).trigger(etype,true,e);}}});Element.addMethod('unevent',function(etype,callback){if(!this.events)return;var idx=find(this.events[etype],callback);if(this.addEventListener){this.removeEventListener(etype,this._events[etype][idx],false);}else{this.detachEvent("on"+etype,this._events[etype][idx]);} if(idx>=0){this.events[etype].splice(idx,1);this._events[etype].splice(idx,1);} if(etype=='droppedon'){idx=find(DroppedOn,this);if(idx>=0)DroppedOn.splice(idx,1);}});var ControlKey=256;var Keys={};Keys.PAGE_UP=ControlKey+33;Keys.PAGE_DOWN=ControlKey+34;Keys.HOME=ControlKey+36;Keys.END=ControlKey+35;Keys.DOWN_ARROW=ControlKey+40;Keys.UP_ARROW=ControlKey+38;Keys.LEFT_ARROW=ControlKey+37;Keys.RIGHT_ARROW=ControlKey+39;Keys.INSERT=ControlKey+45;Keys.DELETE=ControlKey+46;Keys.BACKSPACE=ControlKey+8;Keys.ENTER=ControlKey+13;Keys.TAB=ControlKey+9;Keys.ESCAPE=ControlKey+27;Keys.NUM_LOCK=ControlKey+144;Keys.SHIFT=ControlKey+16;Keys.CTRL=ControlKey+17;Keys.ALT=ControlKey+18;Keys.SCROLL_LOCK=ControlKey+145;Keys.PAUSE=ControlKey+19;Keys.CAPS_LOCK=ControlKey+20;Keys.FUNCTION=[];for(var i=0;i<12;i++){Keys.FUNCTION.push(ControlKey+112+i);} function _mousePos(event){var x=0;var y=0;if(event.pageX||event.pageY){x=event.pageX;y=event.pageY;}else if(event.clientX||event.clientY){x=event.clientX+document.body.scrollLeft+document.documentElement.scrollLeft;y=event.clientY+document.body.scrollTop+document.documentElement.scrollTop;} return[x,y];} Event.addMethod('normalizeProperties',function(){this.time=new Date();if(!this.target)this.target=this.srcElement;if(this.relatedTarget)this.other=this.relatedTarget;else if(this.type=='mouseout')this.other=this.toElement;else if(this.type=='mouseover')this.other=this.fromElement;$(this.target);$(this.other);this.mouse={};var xy=_mousePos(this);this.mouse.x=xy[0];this.mouse.y=xy[1];if(this.which==1)this.mouse.primary=true;else if(this.which==2)this.mouse.middle=true;else if(this.which==3)this.mouse.secondary=true;else{if(this.button&1)this.mouse.primary=true;if(this.button&4)this.mouse.middle=true;if(this.button&2)this.mouse.secondary=true;} var code=this.keyCode||this.which;if(this.type=='keydown'){if((code>=48&&code<=90)||code==32){this.key=String.fromCharCode(code);} else this.key=ControlKey+code;} if(this.type=='keyup'){if((code>=48&&code<=90)||code==32){this.key=String.fromCharCode(code);} else this.key=ControlKey+code;} if(this.type=='keypress'){if(code<32||code>126)this.key=null else this.key=String.fromCharCode(code);}});var DroppedOn=[];Element.addMethod('event',function(etype,callback){var elem=this;var callfunc=function(e){e=$(e||window.event);e.normalizeProperties();elem.trigger(e.type,false,e);if(e.type=='mouseout'){if((e.target==elem||e.target.within(elem))&&(elem!=e.other&&!e.other.within(elem))){elem.trigger('mouseleave',false);}} if(e.type=='mouseover'){if((e.target==elem||e.target.within(elem))&&(elem!=e.other&&!e.other.within(elem))){elem.trigger('mouseenter',false);}}};if(!this.events){this.events={};this._events={};} if(!this.events[etype]||!this.events[etype].length){this.events[etype]=[];this._events[etype]=[];var addEvent=function(elem,etype,callfunc){if(elem.addEventListener)elem.addEventListener(etype,callfunc,false);else elem.attachEvent('on'+etype,callfunc);} if(etype=='mouseenter')addEvent(this,'mouseover',callfunc);else if(etype=='mouseleave')addEvent(this,'mouseout',callfunc);else addEvent(this,etype,callfunc);if(etype=='droppedon')DroppedOn.push(this);} this.events[etype].push(callback);this._events[etype].push(callfunc);});Element.addMethod('append',function(nodetype,text){var elem=Element(nodetype,text);this.appendChild(elem);return elem;});Element.addMethod('prepend',function(nodetype,text){var elem=Element(nodetype,text) this.insertBefore(elem,this.firstChild);return elem;});Element.addMethod('preinsert',function(nodetype,text){var elem=Element(nodetype,text) this.parentNode.insertBefore(elem,this);return elem;});Element.addMethod('postinsert',function(nodetype,text){var elem=Element(nodetype,text) if(this.nextSibling){this.parentNode.insertBefore(elem,this.nextSibling);}else{this.parentNode.appendChild(elem);} return elem;});Element.addMethod('unlink',function(){while(this.firstChild){this.parentNode.insertBefore(this.firstChild,this);} this.remove();});Element.addMethod('remove',function(nodetype){if(nodetype==null){this.parentNode.removeChild(this);}else{var elems=this.$$(nodetype);for(var i=0;i=simple.length)break;} while(true){c=simple.charAt(i);if(start=='['){if(c==']'){i++;break;}} else if(contains(['.','[','#'],c))break;if(++i>=simple.length)break;} var match=simple.substring(0,i);simple=simple.substring(match.length);if(start)match=match.substring(1);if(!start)tag=match;if(start=='#')id=match;if(start=='.')classes.push(match);if(start=='['){var attr=match.split('=',2);if(attr[1])attrs[attr[0]]=attr[1].substring(0,attr[1].length-1);else attrs[attr[0].substring(0,attr[0].length-1)]=null;}} return{tag:tag,id:id,classes:classes,attrs:attrs};} function simples(selector){var s=[];while(selector){var combinator=/ *[><\+]* */.exec(selector)[0];selector=selector.substring(combinator.length);var simple;if(selector.indexOf(' ')>=0){simple=selector.substring(0,selector.indexOf(' '));selector=selector.substring(selector.indexOf(' '));} else{simple=selector;selector='';} combinator=combinator.strip();if(!combinator)combinator=null;s.push([combinator,simple]);} return s;} function $$simple(simple,parent,combinator){if(!simple)return null;var elems=[];$(parent);var comps=components(simple);if(combinator=='+'||combinator=='++'){elems=[$(parent.nextSibling)];if(combinator=='++'&&elems[0].nodeName.charAt(0)=='#'){elems=[$(elems[0].nextSibling)];}}else if(combinator=='<'){elems=[$(parent.parentNode)];}else{if(comps.id){var elem=$(document.getElementById(comps.id));if(elem)elems=[elem];else elems=[]}else{var elems_=parent.getElementsByTagName(comps.tag||'*');for(var i=0;i'&&parent!=elems[i].parentNode)drop=true;if(!drop)elems_.push(elems[i]);} elems=elems_;return elems;} function $$single(selector,parent){var label;$(parent);if(!selector)return[];var pool=[parent];var pool_=[];var simps=simples(selector);for(var i in simps){combinator=simps[i][0];simple=simps[i][1];pool_=[];for(var j in pool){pool_=pool_.concat($$simple(simple,pool[j],combinator));} pool=pool_;if(!pool.length)break;} for(var i in pool)$(pool[i]);return pool;} function $$(selector,parent){if(parent==null)parent=document;if(selector==null){return[];}else if(type(selector)=='Array'){for(var i=0;i=1)this.range=sel.getRangeAt(0);}else{this.range=this.document.selection.createRange();} this.setup();};this.setup=function(){if(this.implementation=='w3c'){this.rangetype='w3c';this.collapsed=true;this.enclosure=null;this.start={node:this.range.startContainer,offset:this.range.startOffset};this.end={node:this.range.endContainer,offset:this.range.endOffset};this.collapsed=this.range.collapsed;this.enclosure=this.range.commonAncestorContainer;if(this.start.node.nodeType==1&&!this.text().replace(/\s/g,'')){this.enclosure=this.start.node.childNodes[this.start.offset];}}else{this.collapsed=false;if(this.range.item){this.rangetype='mscontrol';this.enclosure=this.range.item(0);}else{this.rangetype='mstext';this.enclosure=this.range.parentElement();if(!this.range.htmlText)this.collapsed=true;} this.ieSetBoundaries();} if(this.enclosure){if(this.enclosure.nodeType==3){this.enclosure=this.enclosure.parentNode;} $(this.enclosure);}};this.text=function(){if(this.implementation=='ms'){if(this.rangetype=='mscontrol')return'';return this.range.text;}else{return this.range.toString();}};this.hierarchy=function(topnode){if(!topnode)topnode=this.document.body.parentNode;var node=this.enclosure;var list=[];$(topnode);if(!node.within(topnode))return list;if(!node)return list;while(node!=topnode){list.push(node);node=node.parentNode;} return list;};this.surround=function(attributes,defaultText,styles){var newnode=Element(attributes,null,styles);if(this.collapsed)newnode.txt(defaultText);if(this.implementation=='w3c'){if(this.collapsed){this.range.insertNode(newnode);this.selectNodeContents(newnode);}else{this.range.surroundContents(newnode);}}else{if(this.rangetype=='mscontrol'){this.enclosure.postinsert(newnode);newnode.append(this.enclosure);return;} var parent=Element('div');parent.append(newnode);if(!this.collapsed){newnode.innerHTML=this.range.htmlText;} this.range.pasteHTML(parent.innerHTML);this.range.moveStart('character',-(newnode.innerText.length));} this.setup();};this.ieSetBoundaries=function(){if(this.rangetype=='mscontrol'){this.start={node:this.range.item(0),offset:0};this.end={node:this.range.item(0),offset:0};return;} var startRange=this.range.duplicate();var endRange=this.range.duplicate();startRange.collapse(true);endRange.collapse(false);var offset=function(collapsedRange){var tmprange=collapsedRange.duplicate();var element=collapsedRange.parentElement();tmprange.moveToElementText(element);tmprange.setEndPoint('EndToStart',collapsedRange);return tmprange.text.length;} this.start={node:startRange.parentElement(),offset:offset(startRange)};this.end={node:endRange.parentElement(),offset:offset(endRange)};};this.overlapping=function(){var overlapping=[];var started=false;var descendants=this.enclosure.$$('*');descendants.push(this.enclosure);var start=this.start.node;if(start.nodeType==3)start=start.parentNode;var end=this.end.node;if(end.nodeType==3)end=end.parentNode;for(var d in descendants){if(descendants[d]==start)started=true;if(!started)continue;overlapping.push(descendants[d]);if(descendants[d]==end)break;} return overlapping;};this.activate=function(){if(this.implementation=='w3c'){var sel=window.getSelection();sel.removeAllRanges();sel.addRange(this.range);}else{this.range.select();}};this.collapse=function(to_start){if(this.rangetype!='mscontrol')this.range.collapse(to_start);this.setup();} this.selectNode=function(node){if(this.implementation=='ms'){this.range=this.document.body.createTextRange();this.range.moveToElementText(node);}else{this.range.selectNode(node);} this.setup();};this.selectNodeContents=function(node){if(this.implementation=='ms')this.selectNode(node);else this.range.selectNodeContents(node);this.setup();}} selection.implementation=window.getSelection?'w3c':'ms';var Widgets={drag:function(params){params=this.smartParams({constraint:'string',minx:'int',maxx:'int',miny:'int',maxy:'int',drag:'selector'},params);var elem=this;if(params.drag)elem=$(params.drag);this.event('mousedown',function(e){var style=elem.computedStyle();if(style.position=='static'||!style.position)elem.style.position='relative';var mouseOrig={x:e.mouse.x,y:e.mouse.y};var left=style.left;var top=style.top;if(left=='auto')left='0px';if(top=='auto')top='0px';elem._orig={x:elem.cssUnits(left,'px'),y:elem.cssUnits(top,'px')};var move=function(e){var shift={x:elem._orig.x+e.mouse.x-mouseOrig.x,y:elem._orig.y+e.mouse.y-mouseOrig.y};if(params.maxx)shift.x=Math.min(shift.x,params.maxx);if(params.maxy)shift.y=Math.min(shift.y,params.maxy);if(params.minx)shift.x=Math.max(shift.x,params.minx);if(params.miny)shift.y=Math.max(shift.y,params.miny);if(params.constraint=='x')shift.y=0;if(params.constraint=='y')shift.x=0;elem.style.left=shift.x+"px";elem.style.top=shift.y+"px";e.stop();};var drop=function(e){$(document).unevent('mousemove',move);document.unevent('mouseup',drop);document.unevent('keypress',drop);var over=findOver(e.mouse);if(over){var e=Event('droppedon');e.other=elem;over.trigger('droppedon',false,e);}else{elem.trigger('release');} var e=Event('drop');if(over)e.other=over;elem.trigger('drop',false,e);};var findOver=function(mouse){var overs=elem.overlapping(DroppedOn);var over=null;for(var i=0;i=0&¶ms.href.indexOf('...')>=0){this.event('mouseover',unmungeEmail);}},'form':function(){this.event('submit',this.clearEmptyInputs);if(this.hasClass('disabled')){var inputs=this.$$('input, select, textarea');for(j=0;j