/branches/v2.6-greffoir/vendors/extjs-2.0.1/adapter/prototype/ext-prototype-adapter.js |
---|
New file |
0,0 → 1,10 |
/* |
* Ext JS Library 2.0.2 |
* Copyright(c) 2006-2008, Ext JS, LLC. |
* licensing@extjs.com |
* |
* http://extjs.com/license |
*/ |
Ext={version:"2.0.2"};window["undefined"]=window["undefined"];Ext.apply=function(C,D,B){if(B){Ext.apply(C,B)}if(C&&D&&typeof D=="object"){for(var A in D){C[A]=D[A]}}return C};(function(){var idSeed=0;var ua=navigator.userAgent.toLowerCase();var isStrict=document.compatMode=="CSS1Compat",isOpera=ua.indexOf("opera")>-1,isSafari=(/webkit|khtml/).test(ua),isSafari3=isSafari&&ua.indexOf("webkit/5")!=-1,isIE=!isOpera&&ua.indexOf("msie")>-1,isIE7=!isOpera&&ua.indexOf("msie 7")>-1,isGecko=!isSafari&&ua.indexOf("gecko")>-1,isBorderBox=isIE&&!isStrict,isWindows=(ua.indexOf("windows")!=-1||ua.indexOf("win32")!=-1),isMac=(ua.indexOf("macintosh")!=-1||ua.indexOf("mac os x")!=-1),isAir=(ua.indexOf("adobeair")!=-1),isLinux=(ua.indexOf("linux")!=-1),isSecure=window.location.href.toLowerCase().indexOf("https")===0;if(isIE&&!isIE7){try{document.execCommand("BackgroundImageCache",false,true)}catch(e){}}Ext.apply(Ext,{isStrict:isStrict,isSecure:isSecure,isReady:false,enableGarbageCollector:true,enableListenerCollection:false,SSL_SECURE_URL:"javascript:false",BLANK_IMAGE_URL:"http:/"+"/extjs.com/s.gif",emptyFn:function(){},applyIf:function(o,c){if(o&&c){for(var p in c){if(typeof o[p]=="undefined"){o[p]=c[p]}}}return o},addBehaviors:function(o){if(!Ext.isReady){Ext.onReady(function(){Ext.addBehaviors(o)});return }var cache={};for(var b in o){var parts=b.split("@");if(parts[1]){var s=parts[0];if(!cache[s]){cache[s]=Ext.select(s)}cache[s].on(parts[1],o[b])}}cache=null},id:function(el,prefix){prefix=prefix||"ext-gen";el=Ext.getDom(el);var id=prefix+(++idSeed);return el?(el.id?el.id:(el.id=id)):id},extend:function(){var io=function(o){for(var m in o){this[m]=o[m]}};var oc=Object.prototype.constructor;return function(sb,sp,overrides){if(typeof sp=="object"){overrides=sp;sp=sb;sb=overrides.constructor!=oc?overrides.constructor:function(){sp.apply(this,arguments)}}var F=function(){},sbp,spp=sp.prototype;F.prototype=spp;sbp=sb.prototype=new F();sbp.constructor=sb;sb.superclass=spp;if(spp.constructor==oc){spp.constructor=sp}sb.override=function(o){Ext.override(sb,o)};sbp.override=io;Ext.override(sb,overrides);sb.extend=function(o){Ext.extend(sb,o)};return sb}}(),override:function(origclass,overrides){if(overrides){var p=origclass.prototype;for(var method in overrides){p[method]=overrides[method]}}},namespace:function(){var a=arguments,o=null,i,j,d,rt;for(i=0;i<a.length;++i){d=a[i].split(".");rt=d[0];eval("if (typeof "+rt+" == \"undefined\"){"+rt+" = {};} o = "+rt+";");for(j=1;j<d.length;++j){o[d[j]]=o[d[j]]||{};o=o[d[j]]}}},urlEncode:function(o){if(!o){return""}var buf=[];for(var key in o){var ov=o[key],k=encodeURIComponent(key);var type=typeof ov;if(type=="undefined"){buf.push(k,"=&")}else{if(type!="function"&&type!="object"){buf.push(k,"=",encodeURIComponent(ov),"&")}else{if(Ext.isArray(ov)){if(ov.length){for(var i=0,len=ov.length;i<len;i++){buf.push(k,"=",encodeURIComponent(ov[i]===undefined?"":ov[i]),"&")}}else{buf.push(k,"=&")}}}}}buf.pop();return buf.join("")},urlDecode:function(string,overwrite){if(!string||!string.length){return{}}var obj={};var pairs=string.split("&");var pair,name,value;for(var i=0,len=pairs.length;i<len;i++){pair=pairs[i].split("=");name=decodeURIComponent(pair[0]);value=decodeURIComponent(pair[1]);if(overwrite!==true){if(typeof obj[name]=="undefined"){obj[name]=value}else{if(typeof obj[name]=="string"){obj[name]=[obj[name]];obj[name].push(value)}else{obj[name].push(value)}}}else{obj[name]=value}}return obj},each:function(array,fn,scope){if(typeof array.length=="undefined"||typeof array=="string"){array=[array]}for(var i=0,len=array.length;i<len;i++){if(fn.call(scope||array[i],array[i],i,array)===false){return i}}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(Ext.isArray(a)){r=r.concat(a)}else{if(a.length!==undefined&&!a.substr){r=r.concat(Array.prototype.slice.call(a,0))}else{r.push(a)}}}return r},escapeRe:function(s){return s.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},callback:function(cb,scope,args,delay){if(typeof cb=="function"){if(delay){cb.defer(delay,scope,args||[])}else{cb.apply(scope,args||[])}}},getDom:function(el){if(!el||!document){return null}return el.dom?el.dom:(typeof el=="string"?document.getElementById(el):el)},getDoc:function(){return Ext.get(document)},getBody:function(){return Ext.get(document.body||document.documentElement)},getCmp:function(id){return Ext.ComponentMgr.get(id)},num:function(v,defaultValue){if(typeof v!="number"){return defaultValue}return v},destroy:function(){for(var i=0,a=arguments,len=a.length;i<len;i++){var as=a[i];if(as){if(typeof as.destroy=="function"){as.destroy()}else{if(as.dom){as.removeAllListeners();as.remove()}}}}},removeNode:isIE?function(){var d;return function(n){if(n&&n.tagName!="BODY"){d=d||document.createElement("div");d.appendChild(n);d.innerHTML=""}}}():function(n){if(n&&n.parentNode&&n.tagName!="BODY"){n.parentNode.removeChild(n)}},type:function(o){if(o===undefined||o===null){return false}if(o.htmlElement){return"element"}var t=typeof o;if(t=="object"&&o.nodeName){switch(o.nodeType){case 1:return"element";case 3:return(/\S/).test(o.nodeValue)?"textnode":"whitespace"}}if(t=="object"||t=="function"){switch(o.constructor){case Array:return"array";case RegExp:return"regexp"}if(typeof o.length=="number"&&typeof o.item=="function"){return"nodelist"}}return t},isEmpty:function(v,allowBlank){return v===null||v===undefined||(!allowBlank?v==="":false)},value:function(v,defaultValue,allowBlank){return Ext.isEmpty(v,allowBlank)?defaultValue:v},isArray:function(v){return v&&typeof v.pop=="function"},isDate:function(v){return v&&typeof v.getFullYear=="function"},isOpera:isOpera,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari&&!isSafari3,isIE:isIE,isIE6:isIE&&!isIE7,isIE7:isIE7,isGecko:isGecko,isBorderBox:isBorderBox,isLinux:isLinux,isWindows:isWindows,isMac:isMac,isAir:isAir,useShims:((isIE&&!isIE7)||(isGecko&&isMac))});Ext.ns=Ext.namespace})();Ext.ns("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib","Ext.layout","Ext.app","Ext.ux");Ext.apply(Function.prototype,{createCallback:function(){var A=arguments;var B=this;return function(){return B.apply(window,A)}},createDelegate:function(C,B,A){var D=this;return function(){var F=B||arguments;if(A===true){F=Array.prototype.slice.call(arguments,0);F=F.concat(B)}else{if(typeof A=="number"){F=Array.prototype.slice.call(arguments,0);var E=[A,0].concat(B);Array.prototype.splice.apply(F,E)}}return D.apply(C||window,F)}},defer:function(C,E,B,A){var D=this.createDelegate(E,B,A);if(C){return setTimeout(D,C)}D();return 0},createSequence:function(B,A){if(typeof B!="function"){return this}var C=this;return function(){var D=C.apply(this||window,arguments);B.apply(A||this||window,arguments);return D}},createInterceptor:function(B,A){if(typeof B!="function"){return this}var C=this;return function(){B.target=this;B.method=C;if(B.apply(A||this||window,arguments)===false){return }return C.apply(this||window,arguments)}}});Ext.applyIf(String,{escape:function(A){return A.replace(/('|\\)/g,"\\$1")},leftPad:function(D,B,C){var A=new String(D);if(!C){C=" "}while(A.length<B){A=C+A}return A.toString()},format:function(B){var A=Array.prototype.slice.call(arguments,1);return B.replace(/\{(\d+)\}/g,function(C,D){return A[D]})}});String.prototype.toggle=function(B,A){return this==B?A:B};String.prototype.trim=function(){var A=/^\s+|\s+$/g;return function(){return this.replace(A,"")}}();Ext.applyIf(Number.prototype,{constrain:function(B,A){return Math.min(Math.max(this,B),A)}});Ext.applyIf(Array.prototype,{indexOf:function(C){for(var B=0,A=this.length;B<A;B++){if(this[B]==C){return B}}return -1},remove:function(B){var A=this.indexOf(B);if(A!=-1){this.splice(A,1)}return this}});Date.prototype.getElapsed=function(A){return Math.abs((A||new Date()).getTime()-this.getTime())}; |
(function(){var B;Ext.lib.Dom={getViewWidth:function(D){return D?this.getDocumentWidth():this.getViewportWidth()},getViewHeight:function(D){return D?this.getDocumentHeight():this.getViewportHeight()},getDocumentHeight:function(){var D=(document.compatMode!="CSS1Compat")?document.body.scrollHeight:document.documentElement.scrollHeight;return Math.max(D,this.getViewportHeight())},getDocumentWidth:function(){var D=(document.compatMode!="CSS1Compat")?document.body.scrollWidth:document.documentElement.scrollWidth;return Math.max(D,this.getViewportWidth())},getViewportHeight:function(){var D=self.innerHeight;var E=document.compatMode;if((E||Ext.isIE)&&!Ext.isOpera){D=(E=="CSS1Compat")?document.documentElement.clientHeight:document.body.clientHeight}return D},getViewportWidth:function(){var D=self.innerWidth;var E=document.compatMode;if(E||Ext.isIE){D=(E=="CSS1Compat")?document.documentElement.clientWidth:document.body.clientWidth}return D},isAncestor:function(E,F){E=Ext.getDom(E);F=Ext.getDom(F);if(!E||!F){return false}if(E.contains&&!Ext.isSafari){return E.contains(F)}else{if(E.compareDocumentPosition){return !!(E.compareDocumentPosition(F)&16)}else{var D=F.parentNode;while(D){if(D==E){return true}else{if(!D.tagName||D.tagName.toUpperCase()=="HTML"){return false}}D=D.parentNode}return false}}},getRegion:function(D){return Ext.lib.Region.getRegion(D)},getY:function(D){return this.getXY(D)[1]},getX:function(D){return this.getXY(D)[0]},getXY:function(F){var E,J,L,M,I=(document.body||document.documentElement);F=Ext.getDom(F);if(F==I){return[0,0]}if(F.getBoundingClientRect){L=F.getBoundingClientRect();M=C(document).getScroll();return[L.left+M.left,L.top+M.top]}var N=0,K=0;E=F;var D=C(F).getStyle("position")=="absolute";while(E){N+=E.offsetLeft;K+=E.offsetTop;if(!D&&C(E).getStyle("position")=="absolute"){D=true}if(Ext.isGecko){J=C(E);var O=parseInt(J.getStyle("borderTopWidth"),10)||0;var G=parseInt(J.getStyle("borderLeftWidth"),10)||0;N+=G;K+=O;if(E!=F&&J.getStyle("overflow")!="visible"){N+=G;K+=O}}E=E.offsetParent}if(Ext.isSafari&&D){N-=I.offsetLeft;K-=I.offsetTop}if(Ext.isGecko&&!D){var H=C(I);N+=parseInt(H.getStyle("borderLeftWidth"),10)||0;K+=parseInt(H.getStyle("borderTopWidth"),10)||0}E=F.parentNode;while(E&&E!=I){if(!Ext.isOpera||(E.tagName!="TR"&&C(E).getStyle("display")!="inline")){N-=E.scrollLeft;K-=E.scrollTop}E=E.parentNode}return[N,K]},setXY:function(D,E){D=Ext.fly(D,"_setXY");D.position();var F=D.translatePoints(E);if(E[0]!==false){D.dom.style.left=F.left+"px"}if(E[1]!==false){D.dom.style.top=F.top+"px"}},setX:function(E,D){this.setXY(E,[D,false])},setY:function(D,E){this.setXY(D,[false,E])}};Ext.lib.Event={getPageX:function(D){return Event.pointerX(D.browserEvent||D)},getPageY:function(D){return Event.pointerY(D.browserEvent||D)},getXY:function(D){D=D.browserEvent||D;return[Event.pointerX(D),Event.pointerY(D)]},getTarget:function(D){return Event.element(D.browserEvent||D)},resolveTextNode:function(D){if(D&&3==D.nodeType){return D.parentNode}else{return D}},getRelatedTarget:function(E){E=E.browserEvent||E;var D=E.relatedTarget;if(!D){if(E.type=="mouseout"){D=E.toElement}else{if(E.type=="mouseover"){D=E.fromElement}}}return this.resolveTextNode(D)},on:function(F,D,E){Event.observe(F,D,E,false)},un:function(F,D,E){Event.stopObserving(F,D,E,false)},purgeElement:function(D){},preventDefault:function(D){D=D.browserEvent||D;if(D.preventDefault){D.preventDefault()}else{D.returnValue=false}},stopPropagation:function(D){D=D.browserEvent||D;if(D.stopPropagation){D.stopPropagation()}else{D.cancelBubble=true}},stopEvent:function(D){Event.stop(D.browserEvent||D)},onAvailable:function(I,E,D){var H=new Date(),G;var F=function(){if(H.getElapsed()>10000){clearInterval(G)}var J=document.getElementById(I);if(J){clearInterval(G);E.call(D||window,J)}};G=setInterval(F,50)}};Ext.lib.Ajax=function(){var E=function(F){return F.success?function(G){F.success.call(F.scope||window,{responseText:G.responseText,responseXML:G.responseXML,argument:F.argument})}:Ext.emptyFn};var D=function(F){return F.failure?function(G){F.failure.call(F.scope||window,{responseText:G.responseText,responseXML:G.responseXML,argument:F.argument})}:Ext.emptyFn};return{request:function(K,H,F,I,G){var J={method:K,parameters:I||"",timeout:F.timeout,onSuccess:E(F),onFailure:D(F)};if(G){if(G.headers){J.requestHeaders=G.headers}if(G.xmlData){K="POST";J.contentType="text/xml";J.postBody=G.xmlData;delete J.parameters}if(G.jsonData){K="POST";J.contentType="text/javascript";J.postBody=typeof G.jsonData=="object"?Ext.encode(G.jsonData):G.jsonData;delete J.parameters}}new Ajax.Request(H,J)},formRequest:function(J,I,G,K,F,H){new Ajax.Request(I,{method:Ext.getDom(J).method||"POST",parameters:Form.serialize(J)+(K?"&"+K:""),timeout:G.timeout,onSuccess:E(G),onFailure:D(G)})},isCallInProgress:function(F){return false},abort:function(F){return false},serializeForm:function(F){return Form.serialize(F.dom||F)}}}();Ext.lib.Anim=function(){var D={easeOut:function(F){return 1-Math.pow(1-F,2)},easeIn:function(F){return 1-Math.pow(1-F,2)}};var E=function(F,G){return{stop:function(H){this.effect.cancel()},isAnimated:function(){return this.effect.state=="running"},proxyCallback:function(){Ext.callback(F,G)}}};return{scroll:function(I,G,K,L,F,H){var J=E(F,H);I=Ext.getDom(I);if(typeof G.scroll.to[0]=="number"){I.scrollLeft=G.scroll.to[0]}if(typeof G.scroll.to[1]=="number"){I.scrollTop=G.scroll.to[1]}J.proxyCallback();return J},motion:function(I,G,J,K,F,H){return this.run(I,G,J,K,F,H)},color:function(I,G,J,K,F,H){return this.run(I,G,J,K,F,H)},run:function(G,O,K,N,H,Q,P){var F={};for(var J in O){switch(J){case"points":var M,S,L=Ext.fly(G,"_animrun");L.position();if(M=O.points.by){var R=L.getXY();S=L.translatePoints([R[0]+M[0],R[1]+M[1]])}else{S=L.translatePoints(O.points.to)}F.left=S.left+"px";F.top=S.top+"px";break;case"width":F.width=O.width.to+"px";break;case"height":F.height=O.height.to+"px";break;case"opacity":F.opacity=String(O.opacity.to);break;default:F[J]=String(O[J].to);break}}var I=E(H,Q);I.effect=new Effect.Morph(Ext.id(G),{duration:K,afterFinish:I.proxyCallback,transition:D[N]||Effect.Transitions.linear,style:F});return I}}}();function C(D){if(!B){B=new Ext.Element.Flyweight()}B.dom=D;return B}Ext.lib.Region=function(F,G,D,E){this.top=F;this[1]=F;this.right=G;this.bottom=D;this.left=E;this[0]=E};Ext.lib.Region.prototype={contains:function(D){return(D.left>=this.left&&D.right<=this.right&&D.top>=this.top&&D.bottom<=this.bottom)},getArea:function(){return((this.bottom-this.top)*(this.right-this.left))},intersect:function(H){var F=Math.max(this.top,H.top);var G=Math.min(this.right,H.right);var D=Math.min(this.bottom,H.bottom);var E=Math.max(this.left,H.left);if(D>=F&&G>=E){return new Ext.lib.Region(F,G,D,E)}else{return null}},union:function(H){var F=Math.min(this.top,H.top);var G=Math.max(this.right,H.right);var D=Math.max(this.bottom,H.bottom);var E=Math.min(this.left,H.left);return new Ext.lib.Region(F,G,D,E)},constrainTo:function(D){this.top=this.top.constrain(D.top,D.bottom);this.bottom=this.bottom.constrain(D.top,D.bottom);this.left=this.left.constrain(D.left,D.right);this.right=this.right.constrain(D.left,D.right);return this},adjust:function(F,E,D,G){this.top+=F;this.left+=E;this.right+=G;this.bottom+=D;return this}};Ext.lib.Region.getRegion=function(G){var I=Ext.lib.Dom.getXY(G);var F=I[1];var H=I[0]+G.offsetWidth;var D=I[1]+G.offsetHeight;var E=I[0];return new Ext.lib.Region(F,H,D,E)};Ext.lib.Point=function(D,E){if(Ext.isArray(D)){E=D[1];D=D[0]}this.x=this.right=this.left=this[0]=D;this.y=this.top=this.bottom=this[1]=E};Ext.lib.Point.prototype=new Ext.lib.Region();if(Ext.isIE){function A(){var D=Function.prototype;delete D.createSequence;delete D.defer;delete D.createDelegate;delete D.createCallback;delete D.createInterceptor;window.detachEvent("onunload",A)}window.attachEvent("onunload",A)}})(); |
/branches/v2.6-greffoir/vendors/extjs-2.0.1/adapter/prototype/prototype.js |
---|
New file |
0,0 → 1,4221 |
/* Prototype JavaScript framework, version 1.6.0.2 |
* (c) 2005-2008 Sam Stephenson |
* |
* Prototype is freely distributable under the terms of an MIT-style license. |
* For details, see the Prototype web site: http://www.prototypejs.org/ |
* |
*--------------------------------------------------------------------------*/ |
var Prototype = { |
Version: '1.6.0.2', |
Browser: { |
IE: !!(window.attachEvent && !window.opera), |
Opera: !!window.opera, |
WebKit: navigator.userAgent.indexOf('AppleWebKit/') > -1, |
Gecko: navigator.userAgent.indexOf('Gecko') > -1 && navigator.userAgent.indexOf('KHTML') == -1, |
MobileSafari: !!navigator.userAgent.match(/Apple.*Mobile.*Safari/) |
}, |
BrowserFeatures: { |
XPath: !!document.evaluate, |
ElementExtensions: !!window.HTMLElement, |
SpecificElementExtensions: |
document.createElement('div').__proto__ && |
document.createElement('div').__proto__ !== |
document.createElement('form').__proto__ |
}, |
ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>', |
JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/, |
emptyFunction: function() { }, |
K: function(x) { return x } |
}; |
if (Prototype.Browser.MobileSafari) |
Prototype.BrowserFeatures.SpecificElementExtensions = false; |
/* Based on Alex Arnell's inheritance implementation. */ |
var Class = { |
create: function() { |
var parent = null, properties = $A(arguments); |
if (Object.isFunction(properties[0])) |
parent = properties.shift(); |
function klass() { |
this.initialize.apply(this, arguments); |
} |
Object.extend(klass, Class.Methods); |
klass.superclass = parent; |
klass.subclasses = []; |
if (parent) { |
var subclass = function() { }; |
subclass.prototype = parent.prototype; |
klass.prototype = new subclass; |
parent.subclasses.push(klass); |
} |
for (var i = 0; i < properties.length; i++) |
klass.addMethods(properties[i]); |
if (!klass.prototype.initialize) |
klass.prototype.initialize = Prototype.emptyFunction; |
klass.prototype.constructor = klass; |
return klass; |
} |
}; |
Class.Methods = { |
addMethods: function(source) { |
var ancestor = this.superclass && this.superclass.prototype; |
var properties = Object.keys(source); |
if (!Object.keys({ toString: true }).length) |
properties.push("toString", "valueOf"); |
for (var i = 0, length = properties.length; i < length; i++) { |
var property = properties[i], value = source[property]; |
if (ancestor && Object.isFunction(value) && |
value.argumentNames().first() == "$super") { |
var method = value, value = Object.extend((function(m) { |
return function() { return ancestor[m].apply(this, arguments) }; |
})(property).wrap(method), { |
valueOf: function() { return method }, |
toString: function() { return method.toString() } |
}); |
} |
this.prototype[property] = value; |
} |
return this; |
} |
}; |
var Abstract = { }; |
Object.extend = function(destination, source) { |
for (var property in source) |
destination[property] = source[property]; |
return destination; |
}; |
Object.extend(Object, { |
inspect: function(object) { |
try { |
if (Object.isUndefined(object)) return 'undefined'; |
if (object === null) return 'null'; |
return object.inspect ? object.inspect() : String(object); |
} catch (e) { |
if (e instanceof RangeError) return '...'; |
throw e; |
} |
}, |
toJSON: function(object) { |
var type = typeof object; |
switch (type) { |
case 'undefined': |
case 'function': |
case 'unknown': return; |
case 'boolean': return object.toString(); |
} |
if (object === null) return 'null'; |
if (object.toJSON) return object.toJSON(); |
if (Object.isElement(object)) return; |
var results = []; |
for (var property in object) { |
var value = Object.toJSON(object[property]); |
if (!Object.isUndefined(value)) |
results.push(property.toJSON() + ': ' + value); |
} |
return '{' + results.join(', ') + '}'; |
}, |
toQueryString: function(object) { |
return $H(object).toQueryString(); |
}, |
toHTML: function(object) { |
return object && object.toHTML ? object.toHTML() : String.interpret(object); |
}, |
keys: function(object) { |
var keys = []; |
for (var property in object) |
keys.push(property); |
return keys; |
}, |
values: function(object) { |
var values = []; |
for (var property in object) |
values.push(object[property]); |
return values; |
}, |
clone: function(object) { |
return Object.extend({ }, object); |
}, |
isElement: function(object) { |
return object && object.nodeType == 1; |
}, |
isArray: function(object) { |
return object != null && typeof object == "object" && |
'splice' in object && 'join' in object; |
}, |
isHash: function(object) { |
return object instanceof Hash; |
}, |
isFunction: function(object) { |
return typeof object == "function"; |
}, |
isString: function(object) { |
return typeof object == "string"; |
}, |
isNumber: function(object) { |
return typeof object == "number"; |
}, |
isUndefined: function(object) { |
return typeof object == "undefined"; |
} |
}); |
Object.extend(Function.prototype, { |
argumentNames: function() { |
var names = this.toString().match(/^[\s\(]*function[^(]*\((.*?)\)/)[1].split(",").invoke("strip"); |
return names.length == 1 && !names[0] ? [] : names; |
}, |
bind: function() { |
if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this; |
var __method = this, args = $A(arguments), object = args.shift(); |
return function() { |
return __method.apply(object, args.concat($A(arguments))); |
} |
}, |
bindAsEventListener: function() { |
var __method = this, args = $A(arguments), object = args.shift(); |
return function(event) { |
return __method.apply(object, [event || window.event].concat(args)); |
} |
}, |
curry: function() { |
if (!arguments.length) return this; |
var __method = this, args = $A(arguments); |
return function() { |
return __method.apply(this, args.concat($A(arguments))); |
} |
}, |
delay: function() { |
var __method = this, args = $A(arguments), timeout = args.shift() * 1000; |
return window.setTimeout(function() { |
return __method.apply(__method, args); |
}, timeout); |
}, |
wrap: function(wrapper) { |
var __method = this; |
return function() { |
return wrapper.apply(this, [__method.bind(this)].concat($A(arguments))); |
} |
}, |
methodize: function() { |
if (this._methodized) return this._methodized; |
var __method = this; |
return this._methodized = function() { |
return __method.apply(null, [this].concat($A(arguments))); |
}; |
} |
}); |
Function.prototype.defer = Function.prototype.delay.curry(0.01); |
Date.prototype.toJSON = function() { |
return '"' + this.getUTCFullYear() + '-' + |
(this.getUTCMonth() + 1).toPaddedString(2) + '-' + |
this.getUTCDate().toPaddedString(2) + 'T' + |
this.getUTCHours().toPaddedString(2) + ':' + |
this.getUTCMinutes().toPaddedString(2) + ':' + |
this.getUTCSeconds().toPaddedString(2) + 'Z"'; |
}; |
var Try = { |
these: function() { |
var returnValue; |
for (var i = 0, length = arguments.length; i < length; i++) { |
var lambda = arguments[i]; |
try { |
returnValue = lambda(); |
break; |
} catch (e) { } |
} |
return returnValue; |
} |
}; |
RegExp.prototype.match = RegExp.prototype.test; |
RegExp.escape = function(str) { |
return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); |
}; |
/*--------------------------------------------------------------------------*/ |
var PeriodicalExecuter = Class.create({ |
initialize: function(callback, frequency) { |
this.callback = callback; |
this.frequency = frequency; |
this.currentlyExecuting = false; |
this.registerCallback(); |
}, |
registerCallback: function() { |
this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000); |
}, |
execute: function() { |
this.callback(this); |
}, |
stop: function() { |
if (!this.timer) return; |
clearInterval(this.timer); |
this.timer = null; |
}, |
onTimerEvent: function() { |
if (!this.currentlyExecuting) { |
try { |
this.currentlyExecuting = true; |
this.execute(); |
} finally { |
this.currentlyExecuting = false; |
} |
} |
} |
}); |
Object.extend(String, { |
interpret: function(value) { |
return value == null ? '' : String(value); |
}, |
specialChar: { |
'\b': '\\b', |
'\t': '\\t', |
'\n': '\\n', |
'\f': '\\f', |
'\r': '\\r', |
'\\': '\\\\' |
} |
}); |
Object.extend(String.prototype, { |
gsub: function(pattern, replacement) { |
var result = '', source = this, match; |
replacement = arguments.callee.prepareReplacement(replacement); |
while (source.length > 0) { |
if (match = source.match(pattern)) { |
result += source.slice(0, match.index); |
result += String.interpret(replacement(match)); |
source = source.slice(match.index + match[0].length); |
} else { |
result += source, source = ''; |
} |
} |
return result; |
}, |
sub: function(pattern, replacement, count) { |
replacement = this.gsub.prepareReplacement(replacement); |
count = Object.isUndefined(count) ? 1 : count; |
return this.gsub(pattern, function(match) { |
if (--count < 0) return match[0]; |
return replacement(match); |
}); |
}, |
scan: function(pattern, iterator) { |
this.gsub(pattern, iterator); |
return String(this); |
}, |
truncate: function(length, truncation) { |
length = length || 30; |
truncation = Object.isUndefined(truncation) ? '...' : truncation; |
return this.length > length ? |
this.slice(0, length - truncation.length) + truncation : String(this); |
}, |
strip: function() { |
return this.replace(/^\s+/, '').replace(/\s+$/, ''); |
}, |
stripTags: function() { |
return this.replace(/<\/?[^>]+>/gi, ''); |
}, |
stripScripts: function() { |
return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), ''); |
}, |
extractScripts: function() { |
var matchAll = new RegExp(Prototype.ScriptFragment, 'img'); |
var matchOne = new RegExp(Prototype.ScriptFragment, 'im'); |
return (this.match(matchAll) || []).map(function(scriptTag) { |
return (scriptTag.match(matchOne) || ['', ''])[1]; |
}); |
}, |
evalScripts: function() { |
return this.extractScripts().map(function(script) { return eval(script) }); |
}, |
escapeHTML: function() { |
var self = arguments.callee; |
self.text.data = this; |
return self.div.innerHTML; |
}, |
unescapeHTML: function() { |
var div = new Element('div'); |
div.innerHTML = this.stripTags(); |
return div.childNodes[0] ? (div.childNodes.length > 1 ? |
$A(div.childNodes).inject('', function(memo, node) { return memo+node.nodeValue }) : |
div.childNodes[0].nodeValue) : ''; |
}, |
toQueryParams: function(separator) { |
var match = this.strip().match(/([^?#]*)(#.*)?$/); |
if (!match) return { }; |
return match[1].split(separator || '&').inject({ }, function(hash, pair) { |
if ((pair = pair.split('='))[0]) { |
var key = decodeURIComponent(pair.shift()); |
var value = pair.length > 1 ? pair.join('=') : pair[0]; |
if (value != undefined) value = decodeURIComponent(value); |
if (key in hash) { |
if (!Object.isArray(hash[key])) hash[key] = [hash[key]]; |
hash[key].push(value); |
} |
else hash[key] = value; |
} |
return hash; |
}); |
}, |
toArray: function() { |
return this.split(''); |
}, |
succ: function() { |
return this.slice(0, this.length - 1) + |
String.fromCharCode(this.charCodeAt(this.length - 1) + 1); |
}, |
times: function(count) { |
return count < 1 ? '' : new Array(count + 1).join(this); |
}, |
camelize: function() { |
var parts = this.split('-'), len = parts.length; |
if (len == 1) return parts[0]; |
var camelized = this.charAt(0) == '-' |
? parts[0].charAt(0).toUpperCase() + parts[0].substring(1) |
: parts[0]; |
for (var i = 1; i < len; i++) |
camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1); |
return camelized; |
}, |
capitalize: function() { |
return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase(); |
}, |
underscore: function() { |
return this.gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'#{1}_#{2}').gsub(/([a-z\d])([A-Z])/,'#{1}_#{2}').gsub(/-/,'_').toLowerCase(); |
}, |
dasherize: function() { |
return this.gsub(/_/,'-'); |
}, |
inspect: function(useDoubleQuotes) { |
var escapedString = this.gsub(/[\x00-\x1f\\]/, function(match) { |
var character = String.specialChar[match[0]]; |
return character ? character : '\\u00' + match[0].charCodeAt().toPaddedString(2, 16); |
}); |
if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"'; |
return "'" + escapedString.replace(/'/g, '\\\'') + "'"; |
}, |
toJSON: function() { |
return this.inspect(true); |
}, |
unfilterJSON: function(filter) { |
return this.sub(filter || Prototype.JSONFilter, '#{1}'); |
}, |
isJSON: function() { |
var str = this; |
if (str.blank()) return false; |
str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''); |
return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str); |
}, |
evalJSON: function(sanitize) { |
var json = this.unfilterJSON(); |
try { |
if (!sanitize || json.isJSON()) return eval('(' + json + ')'); |
} catch (e) { } |
throw new SyntaxError('Badly formed JSON string: ' + this.inspect()); |
}, |
include: function(pattern) { |
return this.indexOf(pattern) > -1; |
}, |
startsWith: function(pattern) { |
return this.indexOf(pattern) === 0; |
}, |
endsWith: function(pattern) { |
var d = this.length - pattern.length; |
return d >= 0 && this.lastIndexOf(pattern) === d; |
}, |
empty: function() { |
return this == ''; |
}, |
blank: function() { |
return /^\s*$/.test(this); |
}, |
interpolate: function(object, pattern) { |
return new Template(this, pattern).evaluate(object); |
} |
}); |
if (Prototype.Browser.WebKit || Prototype.Browser.IE) Object.extend(String.prototype, { |
escapeHTML: function() { |
return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>'); |
}, |
unescapeHTML: function() { |
return this.replace(/&/g,'&').replace(/</g,'<').replace(/>/g,'>'); |
} |
}); |
String.prototype.gsub.prepareReplacement = function(replacement) { |
if (Object.isFunction(replacement)) return replacement; |
var template = new Template(replacement); |
return function(match) { return template.evaluate(match) }; |
}; |
String.prototype.parseQuery = String.prototype.toQueryParams; |
Object.extend(String.prototype.escapeHTML, { |
div: document.createElement('div'), |
text: document.createTextNode('') |
}); |
with (String.prototype.escapeHTML) div.appendChild(text); |
var Template = Class.create({ |
initialize: function(template, pattern) { |
this.template = template.toString(); |
this.pattern = pattern || Template.Pattern; |
}, |
evaluate: function(object) { |
if (Object.isFunction(object.toTemplateReplacements)) |
object = object.toTemplateReplacements(); |
return this.template.gsub(this.pattern, function(match) { |
if (object == null) return ''; |
var before = match[1] || ''; |
if (before == '\\') return match[2]; |
var ctx = object, expr = match[3]; |
var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/; |
match = pattern.exec(expr); |
if (match == null) return before; |
while (match != null) { |
var comp = match[1].startsWith('[') ? match[2].gsub('\\\\]', ']') : match[1]; |
ctx = ctx[comp]; |
if (null == ctx || '' == match[3]) break; |
expr = expr.substring('[' == match[3] ? match[1].length : match[0].length); |
match = pattern.exec(expr); |
} |
return before + String.interpret(ctx); |
}); |
} |
}); |
Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/; |
var $break = { }; |
var Enumerable = { |
each: function(iterator, context) { |
var index = 0; |
iterator = iterator.bind(context); |
try { |
this._each(function(value) { |
iterator(value, index++); |
}); |
} catch (e) { |
if (e != $break) throw e; |
} |
return this; |
}, |
eachSlice: function(number, iterator, context) { |
iterator = iterator ? iterator.bind(context) : Prototype.K; |
var index = -number, slices = [], array = this.toArray(); |
while ((index += number) < array.length) |
slices.push(array.slice(index, index+number)); |
return slices.collect(iterator, context); |
}, |
all: function(iterator, context) { |
iterator = iterator ? iterator.bind(context) : Prototype.K; |
var result = true; |
this.each(function(value, index) { |
result = result && !!iterator(value, index); |
if (!result) throw $break; |
}); |
return result; |
}, |
any: function(iterator, context) { |
iterator = iterator ? iterator.bind(context) : Prototype.K; |
var result = false; |
this.each(function(value, index) { |
if (result = !!iterator(value, index)) |
throw $break; |
}); |
return result; |
}, |
collect: function(iterator, context) { |
iterator = iterator ? iterator.bind(context) : Prototype.K; |
var results = []; |
this.each(function(value, index) { |
results.push(iterator(value, index)); |
}); |
return results; |
}, |
detect: function(iterator, context) { |
iterator = iterator.bind(context); |
var result; |
this.each(function(value, index) { |
if (iterator(value, index)) { |
result = value; |
throw $break; |
} |
}); |
return result; |
}, |
findAll: function(iterator, context) { |
iterator = iterator.bind(context); |
var results = []; |
this.each(function(value, index) { |
if (iterator(value, index)) |
results.push(value); |
}); |
return results; |
}, |
grep: function(filter, iterator, context) { |
iterator = iterator ? iterator.bind(context) : Prototype.K; |
var results = []; |
if (Object.isString(filter)) |
filter = new RegExp(filter); |
this.each(function(value, index) { |
if (filter.match(value)) |
results.push(iterator(value, index)); |
}); |
return results; |
}, |
include: function(object) { |
if (Object.isFunction(this.indexOf)) |
if (this.indexOf(object) != -1) return true; |
var found = false; |
this.each(function(value) { |
if (value == object) { |
found = true; |
throw $break; |
} |
}); |
return found; |
}, |
inGroupsOf: function(number, fillWith) { |
fillWith = Object.isUndefined(fillWith) ? null : fillWith; |
return this.eachSlice(number, function(slice) { |
while(slice.length < number) slice.push(fillWith); |
return slice; |
}); |
}, |
inject: function(memo, iterator, context) { |
iterator = iterator.bind(context); |
this.each(function(value, index) { |
memo = iterator(memo, value, index); |
}); |
return memo; |
}, |
invoke: function(method) { |
var args = $A(arguments).slice(1); |
return this.map(function(value) { |
return value[method].apply(value, args); |
}); |
}, |
max: function(iterator, context) { |
iterator = iterator ? iterator.bind(context) : Prototype.K; |
var result; |
this.each(function(value, index) { |
value = iterator(value, index); |
if (result == null || value >= result) |
result = value; |
}); |
return result; |
}, |
min: function(iterator, context) { |
iterator = iterator ? iterator.bind(context) : Prototype.K; |
var result; |
this.each(function(value, index) { |
value = iterator(value, index); |
if (result == null || value < result) |
result = value; |
}); |
return result; |
}, |
partition: function(iterator, context) { |
iterator = iterator ? iterator.bind(context) : Prototype.K; |
var trues = [], falses = []; |
this.each(function(value, index) { |
(iterator(value, index) ? |
trues : falses).push(value); |
}); |
return [trues, falses]; |
}, |
pluck: function(property) { |
var results = []; |
this.each(function(value) { |
results.push(value[property]); |
}); |
return results; |
}, |
reject: function(iterator, context) { |
iterator = iterator.bind(context); |
var results = []; |
this.each(function(value, index) { |
if (!iterator(value, index)) |
results.push(value); |
}); |
return results; |
}, |
sortBy: function(iterator, context) { |
iterator = iterator.bind(context); |
return this.map(function(value, index) { |
return {value: value, criteria: iterator(value, index)}; |
}).sort(function(left, right) { |
var a = left.criteria, b = right.criteria; |
return a < b ? -1 : a > b ? 1 : 0; |
}).pluck('value'); |
}, |
toArray: function() { |
return this.map(); |
}, |
zip: function() { |
var iterator = Prototype.K, args = $A(arguments); |
if (Object.isFunction(args.last())) |
iterator = args.pop(); |
var collections = [this].concat(args).map($A); |
return this.map(function(value, index) { |
return iterator(collections.pluck(index)); |
}); |
}, |
size: function() { |
return this.toArray().length; |
}, |
inspect: function() { |
return '#<Enumerable:' + this.toArray().inspect() + '>'; |
} |
}; |
Object.extend(Enumerable, { |
map: Enumerable.collect, |
find: Enumerable.detect, |
select: Enumerable.findAll, |
filter: Enumerable.findAll, |
member: Enumerable.include, |
entries: Enumerable.toArray, |
every: Enumerable.all, |
some: Enumerable.any |
}); |
function $A(iterable) { |
if (!iterable) return []; |
if (iterable.toArray) return iterable.toArray(); |
var length = iterable.length || 0, results = new Array(length); |
while (length--) results[length] = iterable[length]; |
return results; |
} |
if (Prototype.Browser.WebKit) { |
$A = function(iterable) { |
if (!iterable) return []; |
if (!(Object.isFunction(iterable) && iterable == '[object NodeList]') && |
iterable.toArray) return iterable.toArray(); |
var length = iterable.length || 0, results = new Array(length); |
while (length--) results[length] = iterable[length]; |
return results; |
}; |
} |
Array.from = $A; |
Object.extend(Array.prototype, Enumerable); |
if (!Array.prototype._reverse) Array.prototype._reverse = Array.prototype.reverse; |
Object.extend(Array.prototype, { |
_each: function(iterator) { |
for (var i = 0, length = this.length; i < length; i++) |
iterator(this[i]); |
}, |
clear: function() { |
this.length = 0; |
return this; |
}, |
first: function() { |
return this[0]; |
}, |
last: function() { |
return this[this.length - 1]; |
}, |
compact: function() { |
return this.select(function(value) { |
return value != null; |
}); |
}, |
flatten: function() { |
return this.inject([], function(array, value) { |
return array.concat(Object.isArray(value) ? |
value.flatten() : [value]); |
}); |
}, |
without: function() { |
var values = $A(arguments); |
return this.select(function(value) { |
return !values.include(value); |
}); |
}, |
reverse: function(inline) { |
return (inline !== false ? this : this.toArray())._reverse(); |
}, |
reduce: function() { |
return this.length > 1 ? this : this[0]; |
}, |
uniq: function(sorted) { |
return this.inject([], function(array, value, index) { |
if (0 == index || (sorted ? array.last() != value : !array.include(value))) |
array.push(value); |
return array; |
}); |
}, |
intersect: function(array) { |
return this.uniq().findAll(function(item) { |
return array.detect(function(value) { return item === value }); |
}); |
}, |
clone: function() { |
return [].concat(this); |
}, |
size: function() { |
return this.length; |
}, |
inspect: function() { |
return '[' + this.map(Object.inspect).join(', ') + ']'; |
}, |
toJSON: function() { |
var results = []; |
this.each(function(object) { |
var value = Object.toJSON(object); |
if (!Object.isUndefined(value)) results.push(value); |
}); |
return '[' + results.join(', ') + ']'; |
} |
}); |
// use native browser JS 1.6 implementation if available |
if (Object.isFunction(Array.prototype.forEach)) |
Array.prototype._each = Array.prototype.forEach; |
if (!Array.prototype.indexOf) Array.prototype.indexOf = function(item, i) { |
i || (i = 0); |
var length = this.length; |
if (i < 0) i = length + i; |
for (; i < length; i++) |
if (this[i] === item) return i; |
return -1; |
}; |
if (!Array.prototype.lastIndexOf) Array.prototype.lastIndexOf = function(item, i) { |
i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1; |
var n = this.slice(0, i).reverse().indexOf(item); |
return (n < 0) ? n : i - n - 1; |
}; |
Array.prototype.toArray = Array.prototype.clone; |
function $w(string) { |
if (!Object.isString(string)) return []; |
string = string.strip(); |
return string ? string.split(/\s+/) : []; |
} |
if (Prototype.Browser.Opera){ |
Array.prototype.concat = function() { |
var array = []; |
for (var i = 0, length = this.length; i < length; i++) array.push(this[i]); |
for (var i = 0, length = arguments.length; i < length; i++) { |
if (Object.isArray(arguments[i])) { |
for (var j = 0, arrayLength = arguments[i].length; j < arrayLength; j++) |
array.push(arguments[i][j]); |
} else { |
array.push(arguments[i]); |
} |
} |
return array; |
}; |
} |
Object.extend(Number.prototype, { |
toColorPart: function() { |
return this.toPaddedString(2, 16); |
}, |
succ: function() { |
return this + 1; |
}, |
times: function(iterator) { |
$R(0, this, true).each(iterator); |
return this; |
}, |
toPaddedString: function(length, radix) { |
var string = this.toString(radix || 10); |
return '0'.times(length - string.length) + string; |
}, |
toJSON: function() { |
return isFinite(this) ? this.toString() : 'null'; |
} |
}); |
$w('abs round ceil floor').each(function(method){ |
Number.prototype[method] = Math[method].methodize(); |
}); |
function $H(object) { |
return new Hash(object); |
}; |
var Hash = Class.create(Enumerable, (function() { |
function toQueryPair(key, value) { |
if (Object.isUndefined(value)) return key; |
return key + '=' + encodeURIComponent(String.interpret(value)); |
} |
return { |
initialize: function(object) { |
this._object = Object.isHash(object) ? object.toObject() : Object.clone(object); |
}, |
_each: function(iterator) { |
for (var key in this._object) { |
var value = this._object[key], pair = [key, value]; |
pair.key = key; |
pair.value = value; |
iterator(pair); |
} |
}, |
set: function(key, value) { |
return this._object[key] = value; |
}, |
get: function(key) { |
return this._object[key]; |
}, |
unset: function(key) { |
var value = this._object[key]; |
delete this._object[key]; |
return value; |
}, |
toObject: function() { |
return Object.clone(this._object); |
}, |
keys: function() { |
return this.pluck('key'); |
}, |
values: function() { |
return this.pluck('value'); |
}, |
index: function(value) { |
var match = this.detect(function(pair) { |
return pair.value === value; |
}); |
return match && match.key; |
}, |
merge: function(object) { |
return this.clone().update(object); |
}, |
update: function(object) { |
return new Hash(object).inject(this, function(result, pair) { |
result.set(pair.key, pair.value); |
return result; |
}); |
}, |
toQueryString: function() { |
return this.map(function(pair) { |
var key = encodeURIComponent(pair.key), values = pair.value; |
if (values && typeof values == 'object') { |
if (Object.isArray(values)) |
return values.map(toQueryPair.curry(key)).join('&'); |
} |
return toQueryPair(key, values); |
}).join('&'); |
}, |
inspect: function() { |
return '#<Hash:{' + this.map(function(pair) { |
return pair.map(Object.inspect).join(': '); |
}).join(', ') + '}>'; |
}, |
toJSON: function() { |
return Object.toJSON(this.toObject()); |
}, |
clone: function() { |
return new Hash(this); |
} |
} |
})()); |
Hash.prototype.toTemplateReplacements = Hash.prototype.toObject; |
Hash.from = $H; |
var ObjectRange = Class.create(Enumerable, { |
initialize: function(start, end, exclusive) { |
this.start = start; |
this.end = end; |
this.exclusive = exclusive; |
}, |
_each: function(iterator) { |
var value = this.start; |
while (this.include(value)) { |
iterator(value); |
value = value.succ(); |
} |
}, |
include: function(value) { |
if (value < this.start) |
return false; |
if (this.exclusive) |
return value < this.end; |
return value <= this.end; |
} |
}); |
var $R = function(start, end, exclusive) { |
return new ObjectRange(start, end, exclusive); |
}; |
var Ajax = { |
getTransport: function() { |
return Try.these( |
function() {return new XMLHttpRequest()}, |
function() {return new ActiveXObject('Msxml2.XMLHTTP')}, |
function() {return new ActiveXObject('Microsoft.XMLHTTP')} |
) || false; |
}, |
activeRequestCount: 0 |
}; |
Ajax.Responders = { |
responders: [], |
_each: function(iterator) { |
this.responders._each(iterator); |
}, |
register: function(responder) { |
if (!this.include(responder)) |
this.responders.push(responder); |
}, |
unregister: function(responder) { |
this.responders = this.responders.without(responder); |
}, |
dispatch: function(callback, request, transport, json) { |
this.each(function(responder) { |
if (Object.isFunction(responder[callback])) { |
try { |
responder[callback].apply(responder, [request, transport, json]); |
} catch (e) { } |
} |
}); |
} |
}; |
Object.extend(Ajax.Responders, Enumerable); |
Ajax.Responders.register({ |
onCreate: function() { Ajax.activeRequestCount++ }, |
onComplete: function() { Ajax.activeRequestCount-- } |
}); |
Ajax.Base = Class.create({ |
initialize: function(options) { |
this.options = { |
method: 'post', |
asynchronous: true, |
contentType: 'application/x-www-form-urlencoded', |
encoding: 'UTF-8', |
parameters: '', |
evalJSON: true, |
evalJS: true |
}; |
Object.extend(this.options, options || { }); |
this.options.method = this.options.method.toLowerCase(); |
if (Object.isString(this.options.parameters)) |
this.options.parameters = this.options.parameters.toQueryParams(); |
else if (Object.isHash(this.options.parameters)) |
this.options.parameters = this.options.parameters.toObject(); |
} |
}); |
Ajax.Request = Class.create(Ajax.Base, { |
_complete: false, |
initialize: function($super, url, options) { |
$super(options); |
this.transport = Ajax.getTransport(); |
this.request(url); |
}, |
request: function(url) { |
this.url = url; |
this.method = this.options.method; |
var params = Object.clone(this.options.parameters); |
if (!['get', 'post'].include(this.method)) { |
// simulate other verbs over post |
params['_method'] = this.method; |
this.method = 'post'; |
} |
this.parameters = params; |
if (params = Object.toQueryString(params)) { |
// when GET, append parameters to URL |
if (this.method == 'get') |
this.url += (this.url.include('?') ? '&' : '?') + params; |
else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent)) |
params += '&_='; |
} |
try { |
var response = new Ajax.Response(this); |
if (this.options.onCreate) this.options.onCreate(response); |
Ajax.Responders.dispatch('onCreate', this, response); |
this.transport.open(this.method.toUpperCase(), this.url, |
this.options.asynchronous); |
if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1); |
this.transport.onreadystatechange = this.onStateChange.bind(this); |
this.setRequestHeaders(); |
this.body = this.method == 'post' ? (this.options.postBody || params) : null; |
this.transport.send(this.body); |
/* Force Firefox to handle ready state 4 for synchronous requests */ |
if (!this.options.asynchronous && this.transport.overrideMimeType) |
this.onStateChange(); |
} |
catch (e) { |
this.dispatchException(e); |
} |
}, |
onStateChange: function() { |
var readyState = this.transport.readyState; |
if (readyState > 1 && !((readyState == 4) && this._complete)) |
this.respondToReadyState(this.transport.readyState); |
}, |
setRequestHeaders: function() { |
var headers = { |
'X-Requested-With': 'XMLHttpRequest', |
'X-Prototype-Version': Prototype.Version, |
'Accept': 'text/javascript, text/html, application/xml, text/xml, */*' |
}; |
if (this.method == 'post') { |
headers['Content-type'] = this.options.contentType + |
(this.options.encoding ? '; charset=' + this.options.encoding : ''); |
/* Force "Connection: close" for older Mozilla browsers to work |
* around a bug where XMLHttpRequest sends an incorrect |
* Content-length header. See Mozilla Bugzilla #246651. |
*/ |
if (this.transport.overrideMimeType && |
(navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005) |
headers['Connection'] = 'close'; |
} |
// user-defined headers |
if (typeof this.options.requestHeaders == 'object') { |
var extras = this.options.requestHeaders; |
if (Object.isFunction(extras.push)) |
for (var i = 0, length = extras.length; i < length; i += 2) |
headers[extras[i]] = extras[i+1]; |
else |
$H(extras).each(function(pair) { headers[pair.key] = pair.value }); |
} |
for (var name in headers) |
this.transport.setRequestHeader(name, headers[name]); |
}, |
success: function() { |
var status = this.getStatus(); |
return !status || (status >= 200 && status < 300); |
}, |
getStatus: function() { |
try { |
return this.transport.status || 0; |
} catch (e) { return 0 } |
}, |
respondToReadyState: function(readyState) { |
var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this); |
if (state == 'Complete') { |
try { |
this._complete = true; |
(this.options['on' + response.status] |
|| this.options['on' + (this.success() ? 'Success' : 'Failure')] |
|| Prototype.emptyFunction)(response, response.headerJSON); |
} catch (e) { |
this.dispatchException(e); |
} |
var contentType = response.getHeader('Content-type'); |
if (this.options.evalJS == 'force' |
|| (this.options.evalJS && this.isSameOrigin() && contentType |
&& contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i))) |
this.evalResponse(); |
} |
try { |
(this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON); |
Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON); |
} catch (e) { |
this.dispatchException(e); |
} |
if (state == 'Complete') { |
// avoid memory leak in MSIE: clean up |
this.transport.onreadystatechange = Prototype.emptyFunction; |
} |
}, |
isSameOrigin: function() { |
var m = this.url.match(/^\s*https?:\/\/[^\/]*/); |
return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({ |
protocol: location.protocol, |
domain: document.domain, |
port: location.port ? ':' + location.port : '' |
})); |
}, |
getHeader: function(name) { |
try { |
return this.transport.getResponseHeader(name) || null; |
} catch (e) { return null } |
}, |
evalResponse: function() { |
try { |
return eval((this.transport.responseText || '').unfilterJSON()); |
} catch (e) { |
this.dispatchException(e); |
} |
}, |
dispatchException: function(exception) { |
(this.options.onException || Prototype.emptyFunction)(this, exception); |
Ajax.Responders.dispatch('onException', this, exception); |
} |
}); |
Ajax.Request.Events = |
['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete']; |
Ajax.Response = Class.create({ |
initialize: function(request){ |
this.request = request; |
var transport = this.transport = request.transport, |
readyState = this.readyState = transport.readyState; |
if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) { |
this.status = this.getStatus(); |
this.statusText = this.getStatusText(); |
this.responseText = String.interpret(transport.responseText); |
this.headerJSON = this._getHeaderJSON(); |
} |
if(readyState == 4) { |
var xml = transport.responseXML; |
this.responseXML = Object.isUndefined(xml) ? null : xml; |
this.responseJSON = this._getResponseJSON(); |
} |
}, |
status: 0, |
statusText: '', |
getStatus: Ajax.Request.prototype.getStatus, |
getStatusText: function() { |
try { |
return this.transport.statusText || ''; |
} catch (e) { return '' } |
}, |
getHeader: Ajax.Request.prototype.getHeader, |
getAllHeaders: function() { |
try { |
return this.getAllResponseHeaders(); |
} catch (e) { return null } |
}, |
getResponseHeader: function(name) { |
return this.transport.getResponseHeader(name); |
}, |
getAllResponseHeaders: function() { |
return this.transport.getAllResponseHeaders(); |
}, |
_getHeaderJSON: function() { |
var json = this.getHeader('X-JSON'); |
if (!json) return null; |
json = decodeURIComponent(escape(json)); |
try { |
return json.evalJSON(this.request.options.sanitizeJSON || |
!this.request.isSameOrigin()); |
} catch (e) { |
this.request.dispatchException(e); |
} |
}, |
_getResponseJSON: function() { |
var options = this.request.options; |
if (!options.evalJSON || (options.evalJSON != 'force' && |
!(this.getHeader('Content-type') || '').include('application/json')) || |
this.responseText.blank()) |
return null; |
try { |
return this.responseText.evalJSON(options.sanitizeJSON || |
!this.request.isSameOrigin()); |
} catch (e) { |
this.request.dispatchException(e); |
} |
} |
}); |
Ajax.Updater = Class.create(Ajax.Request, { |
initialize: function($super, container, url, options) { |
this.container = { |
success: (container.success || container), |
failure: (container.failure || (container.success ? null : container)) |
}; |
options = Object.clone(options); |
var onComplete = options.onComplete; |
options.onComplete = (function(response, json) { |
this.updateContent(response.responseText); |
if (Object.isFunction(onComplete)) onComplete(response, json); |
}).bind(this); |
$super(url, options); |
}, |
updateContent: function(responseText) { |
var receiver = this.container[this.success() ? 'success' : 'failure'], |
options = this.options; |
if (!options.evalScripts) responseText = responseText.stripScripts(); |
if (receiver = $(receiver)) { |
if (options.insertion) { |
if (Object.isString(options.insertion)) { |
var insertion = { }; insertion[options.insertion] = responseText; |
receiver.insert(insertion); |
} |
else options.insertion(receiver, responseText); |
} |
else receiver.update(responseText); |
} |
} |
}); |
Ajax.PeriodicalUpdater = Class.create(Ajax.Base, { |
initialize: function($super, container, url, options) { |
$super(options); |
this.onComplete = this.options.onComplete; |
this.frequency = (this.options.frequency || 2); |
this.decay = (this.options.decay || 1); |
this.updater = { }; |
this.container = container; |
this.url = url; |
this.start(); |
}, |
start: function() { |
this.options.onComplete = this.updateComplete.bind(this); |
this.onTimerEvent(); |
}, |
stop: function() { |
this.updater.options.onComplete = undefined; |
clearTimeout(this.timer); |
(this.onComplete || Prototype.emptyFunction).apply(this, arguments); |
}, |
updateComplete: function(response) { |
if (this.options.decay) { |
this.decay = (response.responseText == this.lastText ? |
this.decay * this.options.decay : 1); |
this.lastText = response.responseText; |
} |
this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency); |
}, |
onTimerEvent: function() { |
this.updater = new Ajax.Updater(this.container, this.url, this.options); |
} |
}); |
function $(element) { |
if (arguments.length > 1) { |
for (var i = 0, elements = [], length = arguments.length; i < length; i++) |
elements.push($(arguments[i])); |
return elements; |
} |
if (Object.isString(element)) |
element = document.getElementById(element); |
return Element.extend(element); |
} |
if (Prototype.BrowserFeatures.XPath) { |
document._getElementsByXPath = function(expression, parentElement) { |
var results = []; |
var query = document.evaluate(expression, $(parentElement) || document, |
null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); |
for (var i = 0, length = query.snapshotLength; i < length; i++) |
results.push(Element.extend(query.snapshotItem(i))); |
return results; |
}; |
} |
/*--------------------------------------------------------------------------*/ |
if (!window.Node) var Node = { }; |
if (!Node.ELEMENT_NODE) { |
// DOM level 2 ECMAScript Language Binding |
Object.extend(Node, { |
ELEMENT_NODE: 1, |
ATTRIBUTE_NODE: 2, |
TEXT_NODE: 3, |
CDATA_SECTION_NODE: 4, |
ENTITY_REFERENCE_NODE: 5, |
ENTITY_NODE: 6, |
PROCESSING_INSTRUCTION_NODE: 7, |
COMMENT_NODE: 8, |
DOCUMENT_NODE: 9, |
DOCUMENT_TYPE_NODE: 10, |
DOCUMENT_FRAGMENT_NODE: 11, |
NOTATION_NODE: 12 |
}); |
} |
(function() { |
var element = this.Element; |
this.Element = function(tagName, attributes) { |
attributes = attributes || { }; |
tagName = tagName.toLowerCase(); |
var cache = Element.cache; |
if (Prototype.Browser.IE && attributes.name) { |
tagName = '<' + tagName + ' name="' + attributes.name + '">'; |
delete attributes.name; |
return Element.writeAttribute(document.createElement(tagName), attributes); |
} |
if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName)); |
return Element.writeAttribute(cache[tagName].cloneNode(false), attributes); |
}; |
Object.extend(this.Element, element || { }); |
}).call(window); |
Element.cache = { }; |
Element.Methods = { |
visible: function(element) { |
return $(element).style.display != 'none'; |
}, |
toggle: function(element) { |
element = $(element); |
Element[Element.visible(element) ? 'hide' : 'show'](element); |
return element; |
}, |
hide: function(element) { |
$(element).style.display = 'none'; |
return element; |
}, |
show: function(element) { |
$(element).style.display = ''; |
return element; |
}, |
remove: function(element) { |
element = $(element); |
element.parentNode.removeChild(element); |
return element; |
}, |
update: function(element, content) { |
element = $(element); |
if (content && content.toElement) content = content.toElement(); |
if (Object.isElement(content)) return element.update().insert(content); |
content = Object.toHTML(content); |
element.innerHTML = content.stripScripts(); |
content.evalScripts.bind(content).defer(); |
return element; |
}, |
replace: function(element, content) { |
element = $(element); |
if (content && content.toElement) content = content.toElement(); |
else if (!Object.isElement(content)) { |
content = Object.toHTML(content); |
var range = element.ownerDocument.createRange(); |
range.selectNode(element); |
content.evalScripts.bind(content).defer(); |
content = range.createContextualFragment(content.stripScripts()); |
} |
element.parentNode.replaceChild(content, element); |
return element; |
}, |
insert: function(element, insertions) { |
element = $(element); |
if (Object.isString(insertions) || Object.isNumber(insertions) || |
Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML))) |
insertions = {bottom:insertions}; |
var content, insert, tagName, childNodes; |
for (var position in insertions) { |
content = insertions[position]; |
position = position.toLowerCase(); |
insert = Element._insertionTranslations[position]; |
if (content && content.toElement) content = content.toElement(); |
if (Object.isElement(content)) { |
insert(element, content); |
continue; |
} |
content = Object.toHTML(content); |
tagName = ((position == 'before' || position == 'after') |
? element.parentNode : element).tagName.toUpperCase(); |
childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); |
if (position == 'top' || position == 'after') childNodes.reverse(); |
childNodes.each(insert.curry(element)); |
content.evalScripts.bind(content).defer(); |
} |
return element; |
}, |
wrap: function(element, wrapper, attributes) { |
element = $(element); |
if (Object.isElement(wrapper)) |
$(wrapper).writeAttribute(attributes || { }); |
else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes); |
else wrapper = new Element('div', wrapper); |
if (element.parentNode) |
element.parentNode.replaceChild(wrapper, element); |
wrapper.appendChild(element); |
return wrapper; |
}, |
inspect: function(element) { |
element = $(element); |
var result = '<' + element.tagName.toLowerCase(); |
$H({'id': 'id', 'className': 'class'}).each(function(pair) { |
var property = pair.first(), attribute = pair.last(); |
var value = (element[property] || '').toString(); |
if (value) result += ' ' + attribute + '=' + value.inspect(true); |
}); |
return result + '>'; |
}, |
recursivelyCollect: function(element, property) { |
element = $(element); |
var elements = []; |
while (element = element[property]) |
if (element.nodeType == 1) |
elements.push(Element.extend(element)); |
return elements; |
}, |
ancestors: function(element) { |
return $(element).recursivelyCollect('parentNode'); |
}, |
descendants: function(element) { |
return $(element).select("*"); |
}, |
firstDescendant: function(element) { |
element = $(element).firstChild; |
while (element && element.nodeType != 1) element = element.nextSibling; |
return $(element); |
}, |
immediateDescendants: function(element) { |
if (!(element = $(element).firstChild)) return []; |
while (element && element.nodeType != 1) element = element.nextSibling; |
if (element) return [element].concat($(element).nextSiblings()); |
return []; |
}, |
previousSiblings: function(element) { |
return $(element).recursivelyCollect('previousSibling'); |
}, |
nextSiblings: function(element) { |
return $(element).recursivelyCollect('nextSibling'); |
}, |
siblings: function(element) { |
element = $(element); |
return element.previousSiblings().reverse().concat(element.nextSiblings()); |
}, |
match: function(element, selector) { |
if (Object.isString(selector)) |
selector = new Selector(selector); |
return selector.match($(element)); |
}, |
up: function(element, expression, index) { |
element = $(element); |
if (arguments.length == 1) return $(element.parentNode); |
var ancestors = element.ancestors(); |
return Object.isNumber(expression) ? ancestors[expression] : |
Selector.findElement(ancestors, expression, index); |
}, |
down: function(element, expression, index) { |
element = $(element); |
if (arguments.length == 1) return element.firstDescendant(); |
return Object.isNumber(expression) ? element.descendants()[expression] : |
element.select(expression)[index || 0]; |
}, |
previous: function(element, expression, index) { |
element = $(element); |
if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element)); |
var previousSiblings = element.previousSiblings(); |
return Object.isNumber(expression) ? previousSiblings[expression] : |
Selector.findElement(previousSiblings, expression, index); |
}, |
next: function(element, expression, index) { |
element = $(element); |
if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element)); |
var nextSiblings = element.nextSiblings(); |
return Object.isNumber(expression) ? nextSiblings[expression] : |
Selector.findElement(nextSiblings, expression, index); |
}, |
select: function() { |
var args = $A(arguments), element = $(args.shift()); |
return Selector.findChildElements(element, args); |
}, |
adjacent: function() { |
var args = $A(arguments), element = $(args.shift()); |
return Selector.findChildElements(element.parentNode, args).without(element); |
}, |
identify: function(element) { |
element = $(element); |
var id = element.readAttribute('id'), self = arguments.callee; |
if (id) return id; |
do { id = 'anonymous_element_' + self.counter++ } while ($(id)); |
element.writeAttribute('id', id); |
return id; |
}, |
readAttribute: function(element, name) { |
element = $(element); |
if (Prototype.Browser.IE) { |
var t = Element._attributeTranslations.read; |
if (t.values[name]) return t.values[name](element, name); |
if (t.names[name]) name = t.names[name]; |
if (name.include(':')) { |
return (!element.attributes || !element.attributes[name]) ? null : |
element.attributes[name].value; |
} |
} |
return element.getAttribute(name); |
}, |
writeAttribute: function(element, name, value) { |
element = $(element); |
var attributes = { }, t = Element._attributeTranslations.write; |
if (typeof name == 'object') attributes = name; |
else attributes[name] = Object.isUndefined(value) ? true : value; |
for (var attr in attributes) { |
name = t.names[attr] || attr; |
value = attributes[attr]; |
if (t.values[attr]) name = t.values[attr](element, value); |
if (value === false || value === null) |
element.removeAttribute(name); |
else if (value === true) |
element.setAttribute(name, name); |
else element.setAttribute(name, value); |
} |
return element; |
}, |
getHeight: function(element) { |
return $(element).getDimensions().height; |
}, |
getWidth: function(element) { |
return $(element).getDimensions().width; |
}, |
classNames: function(element) { |
return new Element.ClassNames(element); |
}, |
hasClassName: function(element, className) { |
if (!(element = $(element))) return; |
var elementClassName = element.className; |
return (elementClassName.length > 0 && (elementClassName == className || |
new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName))); |
}, |
addClassName: function(element, className) { |
if (!(element = $(element))) return; |
if (!element.hasClassName(className)) |
element.className += (element.className ? ' ' : '') + className; |
return element; |
}, |
removeClassName: function(element, className) { |
if (!(element = $(element))) return; |
element.className = element.className.replace( |
new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip(); |
return element; |
}, |
toggleClassName: function(element, className) { |
if (!(element = $(element))) return; |
return element[element.hasClassName(className) ? |
'removeClassName' : 'addClassName'](className); |
}, |
// removes whitespace-only text node children |
cleanWhitespace: function(element) { |
element = $(element); |
var node = element.firstChild; |
while (node) { |
var nextNode = node.nextSibling; |
if (node.nodeType == 3 && !/\S/.test(node.nodeValue)) |
element.removeChild(node); |
node = nextNode; |
} |
return element; |
}, |
empty: function(element) { |
return $(element).innerHTML.blank(); |
}, |
descendantOf: function(element, ancestor) { |
element = $(element), ancestor = $(ancestor); |
var originalAncestor = ancestor; |
if (element.compareDocumentPosition) |
return (element.compareDocumentPosition(ancestor) & 8) === 8; |
if (element.sourceIndex && !Prototype.Browser.Opera) { |
var e = element.sourceIndex, a = ancestor.sourceIndex, |
nextAncestor = ancestor.nextSibling; |
if (!nextAncestor) { |
do { ancestor = ancestor.parentNode; } |
while (!(nextAncestor = ancestor.nextSibling) && ancestor.parentNode); |
} |
if (nextAncestor && nextAncestor.sourceIndex) |
return (e > a && e < nextAncestor.sourceIndex); |
} |
while (element = element.parentNode) |
if (element == originalAncestor) return true; |
return false; |
}, |
scrollTo: function(element) { |
element = $(element); |
var pos = element.cumulativeOffset(); |
window.scrollTo(pos[0], pos[1]); |
return element; |
}, |
getStyle: function(element, style) { |
element = $(element); |
style = style == 'float' ? 'cssFloat' : style.camelize(); |
var value = element.style[style]; |
if (!value) { |
var css = document.defaultView.getComputedStyle(element, null); |
value = css ? css[style] : null; |
} |
if (style == 'opacity') return value ? parseFloat(value) : 1.0; |
return value == 'auto' ? null : value; |
}, |
getOpacity: function(element) { |
return $(element).getStyle('opacity'); |
}, |
setStyle: function(element, styles) { |
element = $(element); |
var elementStyle = element.style, match; |
if (Object.isString(styles)) { |
element.style.cssText += ';' + styles; |
return styles.include('opacity') ? |
element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element; |
} |
for (var property in styles) |
if (property == 'opacity') element.setOpacity(styles[property]); |
else |
elementStyle[(property == 'float' || property == 'cssFloat') ? |
(Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') : |
property] = styles[property]; |
return element; |
}, |
setOpacity: function(element, value) { |
element = $(element); |
element.style.opacity = (value == 1 || value === '') ? '' : |
(value < 0.00001) ? 0 : value; |
return element; |
}, |
getDimensions: function(element) { |
element = $(element); |
var display = $(element).getStyle('display'); |
if (display != 'none' && display != null) // Safari bug |
return {width: element.offsetWidth, height: element.offsetHeight}; |
// All *Width and *Height properties give 0 on elements with display none, |
// so enable the element temporarily |
var els = element.style; |
var originalVisibility = els.visibility; |
var originalPosition = els.position; |
var originalDisplay = els.display; |
els.visibility = 'hidden'; |
els.position = 'absolute'; |
els.display = 'block'; |
var originalWidth = element.clientWidth; |
var originalHeight = element.clientHeight; |
els.display = originalDisplay; |
els.position = originalPosition; |
els.visibility = originalVisibility; |
return {width: originalWidth, height: originalHeight}; |
}, |
makePositioned: function(element) { |
element = $(element); |
var pos = Element.getStyle(element, 'position'); |
if (pos == 'static' || !pos) { |
element._madePositioned = true; |
element.style.position = 'relative'; |
// Opera returns the offset relative to the positioning context, when an |
// element is position relative but top and left have not been defined |
if (window.opera) { |
element.style.top = 0; |
element.style.left = 0; |
} |
} |
return element; |
}, |
undoPositioned: function(element) { |
element = $(element); |
if (element._madePositioned) { |
element._madePositioned = undefined; |
element.style.position = |
element.style.top = |
element.style.left = |
element.style.bottom = |
element.style.right = ''; |
} |
return element; |
}, |
makeClipping: function(element) { |
element = $(element); |
if (element._overflow) return element; |
element._overflow = Element.getStyle(element, 'overflow') || 'auto'; |
if (element._overflow !== 'hidden') |
element.style.overflow = 'hidden'; |
return element; |
}, |
undoClipping: function(element) { |
element = $(element); |
if (!element._overflow) return element; |
element.style.overflow = element._overflow == 'auto' ? '' : element._overflow; |
element._overflow = null; |
return element; |
}, |
cumulativeOffset: function(element) { |
var valueT = 0, valueL = 0; |
do { |
valueT += element.offsetTop || 0; |
valueL += element.offsetLeft || 0; |
element = element.offsetParent; |
} while (element); |
return Element._returnOffset(valueL, valueT); |
}, |
positionedOffset: function(element) { |
var valueT = 0, valueL = 0; |
do { |
valueT += element.offsetTop || 0; |
valueL += element.offsetLeft || 0; |
element = element.offsetParent; |
if (element) { |
if (element.tagName == 'BODY') break; |
var p = Element.getStyle(element, 'position'); |
if (p !== 'static') break; |
} |
} while (element); |
return Element._returnOffset(valueL, valueT); |
}, |
absolutize: function(element) { |
element = $(element); |
if (element.getStyle('position') == 'absolute') return; |
// Position.prepare(); // To be done manually by Scripty when it needs it. |
var offsets = element.positionedOffset(); |
var top = offsets[1]; |
var left = offsets[0]; |
var width = element.clientWidth; |
var height = element.clientHeight; |
element._originalLeft = left - parseFloat(element.style.left || 0); |
element._originalTop = top - parseFloat(element.style.top || 0); |
element._originalWidth = element.style.width; |
element._originalHeight = element.style.height; |
element.style.position = 'absolute'; |
element.style.top = top + 'px'; |
element.style.left = left + 'px'; |
element.style.width = width + 'px'; |
element.style.height = height + 'px'; |
return element; |
}, |
relativize: function(element) { |
element = $(element); |
if (element.getStyle('position') == 'relative') return; |
// Position.prepare(); // To be done manually by Scripty when it needs it. |
element.style.position = 'relative'; |
var top = parseFloat(element.style.top || 0) - (element._originalTop || 0); |
var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0); |
element.style.top = top + 'px'; |
element.style.left = left + 'px'; |
element.style.height = element._originalHeight; |
element.style.width = element._originalWidth; |
return element; |
}, |
cumulativeScrollOffset: function(element) { |
var valueT = 0, valueL = 0; |
do { |
valueT += element.scrollTop || 0; |
valueL += element.scrollLeft || 0; |
element = element.parentNode; |
} while (element); |
return Element._returnOffset(valueL, valueT); |
}, |
getOffsetParent: function(element) { |
if (element.offsetParent) return $(element.offsetParent); |
if (element == document.body) return $(element); |
while ((element = element.parentNode) && element != document.body) |
if (Element.getStyle(element, 'position') != 'static') |
return $(element); |
return $(document.body); |
}, |
viewportOffset: function(forElement) { |
var valueT = 0, valueL = 0; |
var element = forElement; |
do { |
valueT += element.offsetTop || 0; |
valueL += element.offsetLeft || 0; |
// Safari fix |
if (element.offsetParent == document.body && |
Element.getStyle(element, 'position') == 'absolute') break; |
} while (element = element.offsetParent); |
element = forElement; |
do { |
if (!Prototype.Browser.Opera || element.tagName == 'BODY') { |
valueT -= element.scrollTop || 0; |
valueL -= element.scrollLeft || 0; |
} |
} while (element = element.parentNode); |
return Element._returnOffset(valueL, valueT); |
}, |
clonePosition: function(element, source) { |
var options = Object.extend({ |
setLeft: true, |
setTop: true, |
setWidth: true, |
setHeight: true, |
offsetTop: 0, |
offsetLeft: 0 |
}, arguments[2] || { }); |
// find page position of source |
source = $(source); |
var p = source.viewportOffset(); |
// find coordinate system to use |
element = $(element); |
var delta = [0, 0]; |
var parent = null; |
// delta [0,0] will do fine with position: fixed elements, |
// position:absolute needs offsetParent deltas |
if (Element.getStyle(element, 'position') == 'absolute') { |
parent = element.getOffsetParent(); |
delta = parent.viewportOffset(); |
} |
// correct by body offsets (fixes Safari) |
if (parent == document.body) { |
delta[0] -= document.body.offsetLeft; |
delta[1] -= document.body.offsetTop; |
} |
// set position |
if (options.setLeft) element.style.left = (p[0] - delta[0] + options.offsetLeft) + 'px'; |
if (options.setTop) element.style.top = (p[1] - delta[1] + options.offsetTop) + 'px'; |
if (options.setWidth) element.style.width = source.offsetWidth + 'px'; |
if (options.setHeight) element.style.height = source.offsetHeight + 'px'; |
return element; |
} |
}; |
Element.Methods.identify.counter = 1; |
Object.extend(Element.Methods, { |
getElementsBySelector: Element.Methods.select, |
childElements: Element.Methods.immediateDescendants |
}); |
Element._attributeTranslations = { |
write: { |
names: { |
className: 'class', |
htmlFor: 'for' |
}, |
values: { } |
} |
}; |
if (Prototype.Browser.Opera) { |
Element.Methods.getStyle = Element.Methods.getStyle.wrap( |
function(proceed, element, style) { |
switch (style) { |
case 'left': case 'top': case 'right': case 'bottom': |
if (proceed(element, 'position') === 'static') return null; |
case 'height': case 'width': |
// returns '0px' for hidden elements; we want it to return null |
if (!Element.visible(element)) return null; |
// returns the border-box dimensions rather than the content-box |
// dimensions, so we subtract padding and borders from the value |
var dim = parseInt(proceed(element, style), 10); |
if (dim !== element['offset' + style.capitalize()]) |
return dim + 'px'; |
var properties; |
if (style === 'height') { |
properties = ['border-top-width', 'padding-top', |
'padding-bottom', 'border-bottom-width']; |
} |
else { |
properties = ['border-left-width', 'padding-left', |
'padding-right', 'border-right-width']; |
} |
return properties.inject(dim, function(memo, property) { |
var val = proceed(element, property); |
return val === null ? memo : memo - parseInt(val, 10); |
}) + 'px'; |
default: return proceed(element, style); |
} |
} |
); |
Element.Methods.readAttribute = Element.Methods.readAttribute.wrap( |
function(proceed, element, attribute) { |
if (attribute === 'title') return element.title; |
return proceed(element, attribute); |
} |
); |
} |
else if (Prototype.Browser.IE) { |
// IE doesn't report offsets correctly for static elements, so we change them |
// to "relative" to get the values, then change them back. |
Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap( |
function(proceed, element) { |
element = $(element); |
var position = element.getStyle('position'); |
if (position !== 'static') return proceed(element); |
element.setStyle({ position: 'relative' }); |
var value = proceed(element); |
element.setStyle({ position: position }); |
return value; |
} |
); |
$w('positionedOffset viewportOffset').each(function(method) { |
Element.Methods[method] = Element.Methods[method].wrap( |
function(proceed, element) { |
element = $(element); |
var position = element.getStyle('position'); |
if (position !== 'static') return proceed(element); |
// Trigger hasLayout on the offset parent so that IE6 reports |
// accurate offsetTop and offsetLeft values for position: fixed. |
var offsetParent = element.getOffsetParent(); |
if (offsetParent && offsetParent.getStyle('position') === 'fixed') |
offsetParent.setStyle({ zoom: 1 }); |
element.setStyle({ position: 'relative' }); |
var value = proceed(element); |
element.setStyle({ position: position }); |
return value; |
} |
); |
}); |
Element.Methods.getStyle = function(element, style) { |
element = $(element); |
style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize(); |
var value = element.style[style]; |
if (!value && element.currentStyle) value = element.currentStyle[style]; |
if (style == 'opacity') { |
if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/)) |
if (value[1]) return parseFloat(value[1]) / 100; |
return 1.0; |
} |
if (value == 'auto') { |
if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none')) |
return element['offset' + style.capitalize()] + 'px'; |
return null; |
} |
return value; |
}; |
Element.Methods.setOpacity = function(element, value) { |
function stripAlpha(filter){ |
return filter.replace(/alpha\([^\)]*\)/gi,''); |
} |
element = $(element); |
var currentStyle = element.currentStyle; |
if ((currentStyle && !currentStyle.hasLayout) || |
(!currentStyle && element.style.zoom == 'normal')) |
element.style.zoom = 1; |
var filter = element.getStyle('filter'), style = element.style; |
if (value == 1 || value === '') { |
(filter = stripAlpha(filter)) ? |
style.filter = filter : style.removeAttribute('filter'); |
return element; |
} else if (value < 0.00001) value = 0; |
style.filter = stripAlpha(filter) + |
'alpha(opacity=' + (value * 100) + ')'; |
return element; |
}; |
Element._attributeTranslations = { |
read: { |
names: { |
'class': 'className', |
'for': 'htmlFor' |
}, |
values: { |
_getAttr: function(element, attribute) { |
return element.getAttribute(attribute, 2); |
}, |
_getAttrNode: function(element, attribute) { |
var node = element.getAttributeNode(attribute); |
return node ? node.value : ""; |
}, |
_getEv: function(element, attribute) { |
attribute = element.getAttribute(attribute); |
return attribute ? attribute.toString().slice(23, -2) : null; |
}, |
_flag: function(element, attribute) { |
return $(element).hasAttribute(attribute) ? attribute : null; |
}, |
style: function(element) { |
return element.style.cssText.toLowerCase(); |
}, |
title: function(element) { |
return element.title; |
} |
} |
} |
}; |
Element._attributeTranslations.write = { |
names: Object.extend({ |
cellpadding: 'cellPadding', |
cellspacing: 'cellSpacing' |
}, Element._attributeTranslations.read.names), |
values: { |
checked: function(element, value) { |
element.checked = !!value; |
}, |
style: function(element, value) { |
element.style.cssText = value ? value : ''; |
} |
} |
}; |
Element._attributeTranslations.has = {}; |
$w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' + |
'encType maxLength readOnly longDesc').each(function(attr) { |
Element._attributeTranslations.write.names[attr.toLowerCase()] = attr; |
Element._attributeTranslations.has[attr.toLowerCase()] = attr; |
}); |
(function(v) { |
Object.extend(v, { |
href: v._getAttr, |
src: v._getAttr, |
type: v._getAttr, |
action: v._getAttrNode, |
disabled: v._flag, |
checked: v._flag, |
readonly: v._flag, |
multiple: v._flag, |
onload: v._getEv, |
onunload: v._getEv, |
onclick: v._getEv, |
ondblclick: v._getEv, |
onmousedown: v._getEv, |
onmouseup: v._getEv, |
onmouseover: v._getEv, |
onmousemove: v._getEv, |
onmouseout: v._getEv, |
onfocus: v._getEv, |
onblur: v._getEv, |
onkeypress: v._getEv, |
onkeydown: v._getEv, |
onkeyup: v._getEv, |
onsubmit: v._getEv, |
onreset: v._getEv, |
onselect: v._getEv, |
onchange: v._getEv |
}); |
})(Element._attributeTranslations.read.values); |
} |
else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) { |
Element.Methods.setOpacity = function(element, value) { |
element = $(element); |
element.style.opacity = (value == 1) ? 0.999999 : |
(value === '') ? '' : (value < 0.00001) ? 0 : value; |
return element; |
}; |
} |
else if (Prototype.Browser.WebKit) { |
Element.Methods.setOpacity = function(element, value) { |
element = $(element); |
element.style.opacity = (value == 1 || value === '') ? '' : |
(value < 0.00001) ? 0 : value; |
if (value == 1) |
if(element.tagName == 'IMG' && element.width) { |
element.width++; element.width--; |
} else try { |
var n = document.createTextNode(' '); |
element.appendChild(n); |
element.removeChild(n); |
} catch (e) { } |
return element; |
}; |
// Safari returns margins on body which is incorrect if the child is absolutely |
// positioned. For performance reasons, redefine Element#cumulativeOffset for |
// KHTML/WebKit only. |
Element.Methods.cumulativeOffset = function(element) { |
var valueT = 0, valueL = 0; |
do { |
valueT += element.offsetTop || 0; |
valueL += element.offsetLeft || 0; |
if (element.offsetParent == document.body) |
if (Element.getStyle(element, 'position') == 'absolute') break; |
element = element.offsetParent; |
} while (element); |
return Element._returnOffset(valueL, valueT); |
}; |
} |
if (Prototype.Browser.IE || Prototype.Browser.Opera) { |
// IE and Opera are missing .innerHTML support for TABLE-related and SELECT elements |
Element.Methods.update = function(element, content) { |
element = $(element); |
if (content && content.toElement) content = content.toElement(); |
if (Object.isElement(content)) return element.update().insert(content); |
content = Object.toHTML(content); |
var tagName = element.tagName.toUpperCase(); |
if (tagName in Element._insertionTranslations.tags) { |
$A(element.childNodes).each(function(node) { element.removeChild(node) }); |
Element._getContentFromAnonymousElement(tagName, content.stripScripts()) |
.each(function(node) { element.appendChild(node) }); |
} |
else element.innerHTML = content.stripScripts(); |
content.evalScripts.bind(content).defer(); |
return element; |
}; |
} |
if ('outerHTML' in document.createElement('div')) { |
Element.Methods.replace = function(element, content) { |
element = $(element); |
if (content && content.toElement) content = content.toElement(); |
if (Object.isElement(content)) { |
element.parentNode.replaceChild(content, element); |
return element; |
} |
content = Object.toHTML(content); |
var parent = element.parentNode, tagName = parent.tagName.toUpperCase(); |
if (Element._insertionTranslations.tags[tagName]) { |
var nextSibling = element.next(); |
var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts()); |
parent.removeChild(element); |
if (nextSibling) |
fragments.each(function(node) { parent.insertBefore(node, nextSibling) }); |
else |
fragments.each(function(node) { parent.appendChild(node) }); |
} |
else element.outerHTML = content.stripScripts(); |
content.evalScripts.bind(content).defer(); |
return element; |
}; |
} |
Element._returnOffset = function(l, t) { |
var result = [l, t]; |
result.left = l; |
result.top = t; |
return result; |
}; |
Element._getContentFromAnonymousElement = function(tagName, html) { |
var div = new Element('div'), t = Element._insertionTranslations.tags[tagName]; |
if (t) { |
div.innerHTML = t[0] + html + t[1]; |
t[2].times(function() { div = div.firstChild }); |
} else div.innerHTML = html; |
return $A(div.childNodes); |
}; |
Element._insertionTranslations = { |
before: function(element, node) { |
element.parentNode.insertBefore(node, element); |
}, |
top: function(element, node) { |
element.insertBefore(node, element.firstChild); |
}, |
bottom: function(element, node) { |
element.appendChild(node); |
}, |
after: function(element, node) { |
element.parentNode.insertBefore(node, element.nextSibling); |
}, |
tags: { |
TABLE: ['<table>', '</table>', 1], |
TBODY: ['<table><tbody>', '</tbody></table>', 2], |
TR: ['<table><tbody><tr>', '</tr></tbody></table>', 3], |
TD: ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4], |
SELECT: ['<select>', '</select>', 1] |
} |
}; |
(function() { |
Object.extend(this.tags, { |
THEAD: this.tags.TBODY, |
TFOOT: this.tags.TBODY, |
TH: this.tags.TD |
}); |
}).call(Element._insertionTranslations); |
Element.Methods.Simulated = { |
hasAttribute: function(element, attribute) { |
attribute = Element._attributeTranslations.has[attribute] || attribute; |
var node = $(element).getAttributeNode(attribute); |
return node && node.specified; |
} |
}; |
Element.Methods.ByTag = { }; |
Object.extend(Element, Element.Methods); |
if (!Prototype.BrowserFeatures.ElementExtensions && |
document.createElement('div').__proto__) { |
window.HTMLElement = { }; |
window.HTMLElement.prototype = document.createElement('div').__proto__; |
Prototype.BrowserFeatures.ElementExtensions = true; |
} |
Element.extend = (function() { |
if (Prototype.BrowserFeatures.SpecificElementExtensions) |
return Prototype.K; |
var Methods = { }, ByTag = Element.Methods.ByTag; |
var extend = Object.extend(function(element) { |
if (!element || element._extendedByPrototype || |
element.nodeType != 1 || element == window) return element; |
var methods = Object.clone(Methods), |
tagName = element.tagName, property, value; |
// extend methods for specific tags |
if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]); |
for (property in methods) { |
value = methods[property]; |
if (Object.isFunction(value) && !(property in element)) |
element[property] = value.methodize(); |
} |
element._extendedByPrototype = Prototype.emptyFunction; |
return element; |
}, { |
refresh: function() { |
// extend methods for all tags (Safari doesn't need this) |
if (!Prototype.BrowserFeatures.ElementExtensions) { |
Object.extend(Methods, Element.Methods); |
Object.extend(Methods, Element.Methods.Simulated); |
} |
} |
}); |
extend.refresh(); |
return extend; |
})(); |
Element.hasAttribute = function(element, attribute) { |
if (element.hasAttribute) return element.hasAttribute(attribute); |
return Element.Methods.Simulated.hasAttribute(element, attribute); |
}; |
Element.addMethods = function(methods) { |
var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag; |
if (!methods) { |
Object.extend(Form, Form.Methods); |
Object.extend(Form.Element, Form.Element.Methods); |
Object.extend(Element.Methods.ByTag, { |
"FORM": Object.clone(Form.Methods), |
"INPUT": Object.clone(Form.Element.Methods), |
"SELECT": Object.clone(Form.Element.Methods), |
"TEXTAREA": Object.clone(Form.Element.Methods) |
}); |
} |
if (arguments.length == 2) { |
var tagName = methods; |
methods = arguments[1]; |
} |
if (!tagName) Object.extend(Element.Methods, methods || { }); |
else { |
if (Object.isArray(tagName)) tagName.each(extend); |
else extend(tagName); |
} |
function extend(tagName) { |
tagName = tagName.toUpperCase(); |
if (!Element.Methods.ByTag[tagName]) |
Element.Methods.ByTag[tagName] = { }; |
Object.extend(Element.Methods.ByTag[tagName], methods); |
} |
function copy(methods, destination, onlyIfAbsent) { |
onlyIfAbsent = onlyIfAbsent || false; |
for (var property in methods) { |
var value = methods[property]; |
if (!Object.isFunction(value)) continue; |
if (!onlyIfAbsent || !(property in destination)) |
destination[property] = value.methodize(); |
} |
} |
function findDOMClass(tagName) { |
var klass; |
var trans = { |
"OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph", |
"FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList", |
"DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading", |
"H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote", |
"INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION": |
"TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD": |
"TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR": |
"TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET": |
"FrameSet", "IFRAME": "IFrame" |
}; |
if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element'; |
if (window[klass]) return window[klass]; |
klass = 'HTML' + tagName + 'Element'; |
if (window[klass]) return window[klass]; |
klass = 'HTML' + tagName.capitalize() + 'Element'; |
if (window[klass]) return window[klass]; |
window[klass] = { }; |
window[klass].prototype = document.createElement(tagName).__proto__; |
return window[klass]; |
} |
if (F.ElementExtensions) { |
copy(Element.Methods, HTMLElement.prototype); |
copy(Element.Methods.Simulated, HTMLElement.prototype, true); |
} |
if (F.SpecificElementExtensions) { |
for (var tag in Element.Methods.ByTag) { |
var klass = findDOMClass(tag); |
if (Object.isUndefined(klass)) continue; |
copy(T[tag], klass.prototype); |
} |
} |
Object.extend(Element, Element.Methods); |
delete Element.ByTag; |
if (Element.extend.refresh) Element.extend.refresh(); |
Element.cache = { }; |
}; |
document.viewport = { |
getDimensions: function() { |
var dimensions = { }; |
var B = Prototype.Browser; |
$w('width height').each(function(d) { |
var D = d.capitalize(); |
dimensions[d] = (B.WebKit && !document.evaluate) ? self['inner' + D] : |
(B.Opera) ? document.body['client' + D] : document.documentElement['client' + D]; |
}); |
return dimensions; |
}, |
getWidth: function() { |
return this.getDimensions().width; |
}, |
getHeight: function() { |
return this.getDimensions().height; |
}, |
getScrollOffsets: function() { |
return Element._returnOffset( |
window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft, |
window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop); |
} |
}; |
/* Portions of the Selector class are derived from Jack Slocum’s DomQuery, |
* part of YUI-Ext version 0.40, distributed under the terms of an MIT-style |
* license. Please see http://www.yui-ext.com/ for more information. */ |
var Selector = Class.create({ |
initialize: function(expression) { |
this.expression = expression.strip(); |
this.compileMatcher(); |
}, |
shouldUseXPath: function() { |
if (!Prototype.BrowserFeatures.XPath) return false; |
var e = this.expression; |
// Safari 3 chokes on :*-of-type and :empty |
if (Prototype.Browser.WebKit && |
(e.include("-of-type") || e.include(":empty"))) |
return false; |
// XPath can't do namespaced attributes, nor can it read |
// the "checked" property from DOM nodes |
if ((/(\[[\w-]*?:|:checked)/).test(this.expression)) |
return false; |
return true; |
}, |
compileMatcher: function() { |
if (this.shouldUseXPath()) |
return this.compileXPathMatcher(); |
var e = this.expression, ps = Selector.patterns, h = Selector.handlers, |
c = Selector.criteria, le, p, m; |
if (Selector._cache[e]) { |
this.matcher = Selector._cache[e]; |
return; |
} |
this.matcher = ["this.matcher = function(root) {", |
"var r = root, h = Selector.handlers, c = false, n;"]; |
while (e && le != e && (/\S/).test(e)) { |
le = e; |
for (var i in ps) { |
p = ps[i]; |
if (m = e.match(p)) { |
this.matcher.push(Object.isFunction(c[i]) ? c[i](m) : |
new Template(c[i]).evaluate(m)); |
e = e.replace(m[0], ''); |
break; |
} |
} |
} |
this.matcher.push("return h.unique(n);\n}"); |
eval(this.matcher.join('\n')); |
Selector._cache[this.expression] = this.matcher; |
}, |
compileXPathMatcher: function() { |
var e = this.expression, ps = Selector.patterns, |
x = Selector.xpath, le, m; |
if (Selector._cache[e]) { |
this.xpath = Selector._cache[e]; return; |
} |
this.matcher = ['.//*']; |
while (e && le != e && (/\S/).test(e)) { |
le = e; |
for (var i in ps) { |
if (m = e.match(ps[i])) { |
this.matcher.push(Object.isFunction(x[i]) ? x[i](m) : |
new Template(x[i]).evaluate(m)); |
e = e.replace(m[0], ''); |
break; |
} |
} |
} |
this.xpath = this.matcher.join(''); |
Selector._cache[this.expression] = this.xpath; |
}, |
findElements: function(root) { |
root = root || document; |
if (this.xpath) return document._getElementsByXPath(this.xpath, root); |
return this.matcher(root); |
}, |
match: function(element) { |
this.tokens = []; |
var e = this.expression, ps = Selector.patterns, as = Selector.assertions; |
var le, p, m; |
while (e && le !== e && (/\S/).test(e)) { |
le = e; |
for (var i in ps) { |
p = ps[i]; |
if (m = e.match(p)) { |
// use the Selector.assertions methods unless the selector |
// is too complex. |
if (as[i]) { |
this.tokens.push([i, Object.clone(m)]); |
e = e.replace(m[0], ''); |
} else { |
// reluctantly do a document-wide search |
// and look for a match in the array |
return this.findElements(document).include(element); |
} |
} |
} |
} |
var match = true, name, matches; |
for (var i = 0, token; token = this.tokens[i]; i++) { |
name = token[0], matches = token[1]; |
if (!Selector.assertions[name](element, matches)) { |
match = false; break; |
} |
} |
return match; |
}, |
toString: function() { |
return this.expression; |
}, |
inspect: function() { |
return "#<Selector:" + this.expression.inspect() + ">"; |
} |
}); |
Object.extend(Selector, { |
_cache: { }, |
xpath: { |
descendant: "//*", |
child: "/*", |
adjacent: "/following-sibling::*[1]", |
laterSibling: '/following-sibling::*', |
tagName: function(m) { |
if (m[1] == '*') return ''; |
return "[local-name()='" + m[1].toLowerCase() + |
"' or local-name()='" + m[1].toUpperCase() + "']"; |
}, |
className: "[contains(concat(' ', @class, ' '), ' #{1} ')]", |
id: "[@id='#{1}']", |
attrPresence: function(m) { |
m[1] = m[1].toLowerCase(); |
return new Template("[@#{1}]").evaluate(m); |
}, |
attr: function(m) { |
m[1] = m[1].toLowerCase(); |
m[3] = m[5] || m[6]; |
return new Template(Selector.xpath.operators[m[2]]).evaluate(m); |
}, |
pseudo: function(m) { |
var h = Selector.xpath.pseudos[m[1]]; |
if (!h) return ''; |
if (Object.isFunction(h)) return h(m); |
return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m); |
}, |
operators: { |
'=': "[@#{1}='#{3}']", |
'!=': "[@#{1}!='#{3}']", |
'^=': "[starts-with(@#{1}, '#{3}')]", |
'$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']", |
'*=': "[contains(@#{1}, '#{3}')]", |
'~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]", |
'|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]" |
}, |
pseudos: { |
'first-child': '[not(preceding-sibling::*)]', |
'last-child': '[not(following-sibling::*)]', |
'only-child': '[not(preceding-sibling::* or following-sibling::*)]', |
'empty': "[count(*) = 0 and (count(text()) = 0 or translate(text(), ' \t\r\n', '') = '')]", |
'checked': "[@checked]", |
'disabled': "[@disabled]", |
'enabled': "[not(@disabled)]", |
'not': function(m) { |
var e = m[6], p = Selector.patterns, |
x = Selector.xpath, le, v; |
var exclusion = []; |
while (e && le != e && (/\S/).test(e)) { |
le = e; |
for (var i in p) { |
if (m = e.match(p[i])) { |
v = Object.isFunction(x[i]) ? x[i](m) : new Template(x[i]).evaluate(m); |
exclusion.push("(" + v.substring(1, v.length - 1) + ")"); |
e = e.replace(m[0], ''); |
break; |
} |
} |
} |
return "[not(" + exclusion.join(" and ") + ")]"; |
}, |
'nth-child': function(m) { |
return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m); |
}, |
'nth-last-child': function(m) { |
return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m); |
}, |
'nth-of-type': function(m) { |
return Selector.xpath.pseudos.nth("position() ", m); |
}, |
'nth-last-of-type': function(m) { |
return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m); |
}, |
'first-of-type': function(m) { |
m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m); |
}, |
'last-of-type': function(m) { |
m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m); |
}, |
'only-of-type': function(m) { |
var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m); |
}, |
nth: function(fragment, m) { |
var mm, formula = m[6], predicate; |
if (formula == 'even') formula = '2n+0'; |
if (formula == 'odd') formula = '2n+1'; |
if (mm = formula.match(/^(\d+)$/)) // digit only |
return '[' + fragment + "= " + mm[1] + ']'; |
if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b |
if (mm[1] == "-") mm[1] = -1; |
var a = mm[1] ? Number(mm[1]) : 1; |
var b = mm[2] ? Number(mm[2]) : 0; |
predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " + |
"((#{fragment} - #{b}) div #{a} >= 0)]"; |
return new Template(predicate).evaluate({ |
fragment: fragment, a: a, b: b }); |
} |
} |
} |
}, |
criteria: { |
tagName: 'n = h.tagName(n, r, "#{1}", c); c = false;', |
className: 'n = h.className(n, r, "#{1}", c); c = false;', |
id: 'n = h.id(n, r, "#{1}", c); c = false;', |
attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;', |
attr: function(m) { |
m[3] = (m[5] || m[6]); |
return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m); |
}, |
pseudo: function(m) { |
if (m[6]) m[6] = m[6].replace(/"/g, '\\"'); |
return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m); |
}, |
descendant: 'c = "descendant";', |
child: 'c = "child";', |
adjacent: 'c = "adjacent";', |
laterSibling: 'c = "laterSibling";' |
}, |
patterns: { |
// combinators must be listed first |
// (and descendant needs to be last combinator) |
laterSibling: /^\s*~\s*/, |
child: /^\s*>\s*/, |
adjacent: /^\s*\+\s*/, |
descendant: /^\s/, |
// selectors follow |
tagName: /^\s*(\*|[\w\-]+)(\b|$)?/, |
id: /^#([\w\-\*]+)(\b|$)/, |
className: /^\.([\w\-\*]+)(\b|$)/, |
pseudo: |
/^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/, |
attrPresence: /^\[([\w]+)\]/, |
attr: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ |
}, |
// for Selector.match and Element#match |
assertions: { |
tagName: function(element, matches) { |
return matches[1].toUpperCase() == element.tagName.toUpperCase(); |
}, |
className: function(element, matches) { |
return Element.hasClassName(element, matches[1]); |
}, |
id: function(element, matches) { |
return element.id === matches[1]; |
}, |
attrPresence: function(element, matches) { |
return Element.hasAttribute(element, matches[1]); |
}, |
attr: function(element, matches) { |
var nodeValue = Element.readAttribute(element, matches[1]); |
return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]); |
} |
}, |
handlers: { |
// UTILITY FUNCTIONS |
// joins two collections |
concat: function(a, b) { |
for (var i = 0, node; node = b[i]; i++) |
a.push(node); |
return a; |
}, |
// marks an array of nodes for counting |
mark: function(nodes) { |
var _true = Prototype.emptyFunction; |
for (var i = 0, node; node = nodes[i]; i++) |
node._countedByPrototype = _true; |
return nodes; |
}, |
unmark: function(nodes) { |
for (var i = 0, node; node = nodes[i]; i++) |
node._countedByPrototype = undefined; |
return nodes; |
}, |
// mark each child node with its position (for nth calls) |
// "ofType" flag indicates whether we're indexing for nth-of-type |
// rather than nth-child |
index: function(parentNode, reverse, ofType) { |
parentNode._countedByPrototype = Prototype.emptyFunction; |
if (reverse) { |
for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) { |
var node = nodes[i]; |
if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++; |
} |
} else { |
for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++) |
if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++; |
} |
}, |
// filters out duplicates and extends all nodes |
unique: function(nodes) { |
if (nodes.length == 0) return nodes; |
var results = [], n; |
for (var i = 0, l = nodes.length; i < l; i++) |
if (!(n = nodes[i])._countedByPrototype) { |
n._countedByPrototype = Prototype.emptyFunction; |
results.push(Element.extend(n)); |
} |
return Selector.handlers.unmark(results); |
}, |
// COMBINATOR FUNCTIONS |
descendant: function(nodes) { |
var h = Selector.handlers; |
for (var i = 0, results = [], node; node = nodes[i]; i++) |
h.concat(results, node.getElementsByTagName('*')); |
return results; |
}, |
child: function(nodes) { |
var h = Selector.handlers; |
for (var i = 0, results = [], node; node = nodes[i]; i++) { |
for (var j = 0, child; child = node.childNodes[j]; j++) |
if (child.nodeType == 1 && child.tagName != '!') results.push(child); |
} |
return results; |
}, |
adjacent: function(nodes) { |
for (var i = 0, results = [], node; node = nodes[i]; i++) { |
var next = this.nextElementSibling(node); |
if (next) results.push(next); |
} |
return results; |
}, |
laterSibling: function(nodes) { |
var h = Selector.handlers; |
for (var i = 0, results = [], node; node = nodes[i]; i++) |
h.concat(results, Element.nextSiblings(node)); |
return results; |
}, |
nextElementSibling: function(node) { |
while (node = node.nextSibling) |
if (node.nodeType == 1) return node; |
return null; |
}, |
previousElementSibling: function(node) { |
while (node = node.previousSibling) |
if (node.nodeType == 1) return node; |
return null; |
}, |
// TOKEN FUNCTIONS |
tagName: function(nodes, root, tagName, combinator) { |
var uTagName = tagName.toUpperCase(); |
var results = [], h = Selector.handlers; |
if (nodes) { |
if (combinator) { |
// fastlane for ordinary descendant combinators |
if (combinator == "descendant") { |
for (var i = 0, node; node = nodes[i]; i++) |
h.concat(results, node.getElementsByTagName(tagName)); |
return results; |
} else nodes = this[combinator](nodes); |
if (tagName == "*") return nodes; |
} |
for (var i = 0, node; node = nodes[i]; i++) |
if (node.tagName.toUpperCase() === uTagName) results.push(node); |
return results; |
} else return root.getElementsByTagName(tagName); |
}, |
id: function(nodes, root, id, combinator) { |
var targetNode = $(id), h = Selector.handlers; |
if (!targetNode) return []; |
if (!nodes && root == document) return [targetNode]; |
if (nodes) { |
if (combinator) { |
if (combinator == 'child') { |
for (var i = 0, node; node = nodes[i]; i++) |
if (targetNode.parentNode == node) return [targetNode]; |
} else if (combinator == 'descendant') { |
for (var i = 0, node; node = nodes[i]; i++) |
if (Element.descendantOf(targetNode, node)) return [targetNode]; |
} else if (combinator == 'adjacent') { |
for (var i = 0, node; node = nodes[i]; i++) |
if (Selector.handlers.previousElementSibling(targetNode) == node) |
return [targetNode]; |
} else nodes = h[combinator](nodes); |
} |
for (var i = 0, node; node = nodes[i]; i++) |
if (node == targetNode) return [targetNode]; |
return []; |
} |
return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : []; |
}, |
className: function(nodes, root, className, combinator) { |
if (nodes && combinator) nodes = this[combinator](nodes); |
return Selector.handlers.byClassName(nodes, root, className); |
}, |
byClassName: function(nodes, root, className) { |
if (!nodes) nodes = Selector.handlers.descendant([root]); |
var needle = ' ' + className + ' '; |
for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) { |
nodeClassName = node.className; |
if (nodeClassName.length == 0) continue; |
if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle)) |
results.push(node); |
} |
return results; |
}, |
attrPresence: function(nodes, root, attr, combinator) { |
if (!nodes) nodes = root.getElementsByTagName("*"); |
if (nodes && combinator) nodes = this[combinator](nodes); |
var results = []; |
for (var i = 0, node; node = nodes[i]; i++) |
if (Element.hasAttribute(node, attr)) results.push(node); |
return results; |
}, |
attr: function(nodes, root, attr, value, operator, combinator) { |
if (!nodes) nodes = root.getElementsByTagName("*"); |
if (nodes && combinator) nodes = this[combinator](nodes); |
var handler = Selector.operators[operator], results = []; |
for (var i = 0, node; node = nodes[i]; i++) { |
var nodeValue = Element.readAttribute(node, attr); |
if (nodeValue === null) continue; |
if (handler(nodeValue, value)) results.push(node); |
} |
return results; |
}, |
pseudo: function(nodes, name, value, root, combinator) { |
if (nodes && combinator) nodes = this[combinator](nodes); |
if (!nodes) nodes = root.getElementsByTagName("*"); |
return Selector.pseudos[name](nodes, value, root); |
} |
}, |
pseudos: { |
'first-child': function(nodes, value, root) { |
for (var i = 0, results = [], node; node = nodes[i]; i++) { |
if (Selector.handlers.previousElementSibling(node)) continue; |
results.push(node); |
} |
return results; |
}, |
'last-child': function(nodes, value, root) { |
for (var i = 0, results = [], node; node = nodes[i]; i++) { |
if (Selector.handlers.nextElementSibling(node)) continue; |
results.push(node); |
} |
return results; |
}, |
'only-child': function(nodes, value, root) { |
var h = Selector.handlers; |
for (var i = 0, results = [], node; node = nodes[i]; i++) |
if (!h.previousElementSibling(node) && !h.nextElementSibling(node)) |
results.push(node); |
return results; |
}, |
'nth-child': function(nodes, formula, root) { |
return Selector.pseudos.nth(nodes, formula, root); |
}, |
'nth-last-child': function(nodes, formula, root) { |
return Selector.pseudos.nth(nodes, formula, root, true); |
}, |
'nth-of-type': function(nodes, formula, root) { |
return Selector.pseudos.nth(nodes, formula, root, false, true); |
}, |
'nth-last-of-type': function(nodes, formula, root) { |
return Selector.pseudos.nth(nodes, formula, root, true, true); |
}, |
'first-of-type': function(nodes, formula, root) { |
return Selector.pseudos.nth(nodes, "1", root, false, true); |
}, |
'last-of-type': function(nodes, formula, root) { |
return Selector.pseudos.nth(nodes, "1", root, true, true); |
}, |
'only-of-type': function(nodes, formula, root) { |
var p = Selector.pseudos; |
return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root); |
}, |
// handles the an+b logic |
getIndices: function(a, b, total) { |
if (a == 0) return b > 0 ? [b] : []; |
return $R(1, total).inject([], function(memo, i) { |
if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i); |
return memo; |
}); |
}, |
// handles nth(-last)-child, nth(-last)-of-type, and (first|last)-of-type |
nth: function(nodes, formula, root, reverse, ofType) { |
if (nodes.length == 0) return []; |
if (formula == 'even') formula = '2n+0'; |
if (formula == 'odd') formula = '2n+1'; |
var h = Selector.handlers, results = [], indexed = [], m; |
h.mark(nodes); |
for (var i = 0, node; node = nodes[i]; i++) { |
if (!node.parentNode._countedByPrototype) { |
h.index(node.parentNode, reverse, ofType); |
indexed.push(node.parentNode); |
} |
} |
if (formula.match(/^\d+$/)) { // just a number |
formula = Number(formula); |
for (var i = 0, node; node = nodes[i]; i++) |
if (node.nodeIndex == formula) results.push(node); |
} else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b |
if (m[1] == "-") m[1] = -1; |
var a = m[1] ? Number(m[1]) : 1; |
var b = m[2] ? Number(m[2]) : 0; |
var indices = Selector.pseudos.getIndices(a, b, nodes.length); |
for (var i = 0, node, l = indices.length; node = nodes[i]; i++) { |
for (var j = 0; j < l; j++) |
if (node.nodeIndex == indices[j]) results.push(node); |
} |
} |
h.unmark(nodes); |
h.unmark(indexed); |
return results; |
}, |
'empty': function(nodes, value, root) { |
for (var i = 0, results = [], node; node = nodes[i]; i++) { |
// IE treats comments as element nodes |
if (node.tagName == '!' || (node.firstChild && !node.innerHTML.match(/^\s*$/))) continue; |
results.push(node); |
} |
return results; |
}, |
'not': function(nodes, selector, root) { |
var h = Selector.handlers, selectorType, m; |
var exclusions = new Selector(selector).findElements(root); |
h.mark(exclusions); |
for (var i = 0, results = [], node; node = nodes[i]; i++) |
if (!node._countedByPrototype) results.push(node); |
h.unmark(exclusions); |
return results; |
}, |
'enabled': function(nodes, value, root) { |
for (var i = 0, results = [], node; node = nodes[i]; i++) |
if (!node.disabled) results.push(node); |
return results; |
}, |
'disabled': function(nodes, value, root) { |
for (var i = 0, results = [], node; node = nodes[i]; i++) |
if (node.disabled) results.push(node); |
return results; |
}, |
'checked': function(nodes, value, root) { |
for (var i = 0, results = [], node; node = nodes[i]; i++) |
if (node.checked) results.push(node); |
return results; |
} |
}, |
operators: { |
'=': function(nv, v) { return nv == v; }, |
'!=': function(nv, v) { return nv != v; }, |
'^=': function(nv, v) { return nv.startsWith(v); }, |
'$=': function(nv, v) { return nv.endsWith(v); }, |
'*=': function(nv, v) { return nv.include(v); }, |
'~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); }, |
'|=': function(nv, v) { return ('-' + nv.toUpperCase() + '-').include('-' + v.toUpperCase() + '-'); } |
}, |
split: function(expression) { |
var expressions = []; |
expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) { |
expressions.push(m[1].strip()); |
}); |
return expressions; |
}, |
matchElements: function(elements, expression) { |
var matches = $$(expression), h = Selector.handlers; |
h.mark(matches); |
for (var i = 0, results = [], element; element = elements[i]; i++) |
if (element._countedByPrototype) results.push(element); |
h.unmark(matches); |
return results; |
}, |
findElement: function(elements, expression, index) { |
if (Object.isNumber(expression)) { |
index = expression; expression = false; |
} |
return Selector.matchElements(elements, expression || '*')[index || 0]; |
}, |
findChildElements: function(element, expressions) { |
expressions = Selector.split(expressions.join(',')); |
var results = [], h = Selector.handlers; |
for (var i = 0, l = expressions.length, selector; i < l; i++) { |
selector = new Selector(expressions[i].strip()); |
h.concat(results, selector.findElements(element)); |
} |
return (l > 1) ? h.unique(results) : results; |
} |
}); |
if (Prototype.Browser.IE) { |
Object.extend(Selector.handlers, { |
// IE returns comment nodes on getElementsByTagName("*"). |
// Filter them out. |
concat: function(a, b) { |
for (var i = 0, node; node = b[i]; i++) |
if (node.tagName !== "!") a.push(node); |
return a; |
}, |
// IE improperly serializes _countedByPrototype in (inner|outer)HTML. |
unmark: function(nodes) { |
for (var i = 0, node; node = nodes[i]; i++) |
node.removeAttribute('_countedByPrototype'); |
return nodes; |
} |
}); |
} |
function $$() { |
return Selector.findChildElements(document, $A(arguments)); |
} |
var Form = { |
reset: function(form) { |
$(form).reset(); |
return form; |
}, |
serializeElements: function(elements, options) { |
if (typeof options != 'object') options = { hash: !!options }; |
else if (Object.isUndefined(options.hash)) options.hash = true; |
var key, value, submitted = false, submit = options.submit; |
var data = elements.inject({ }, function(result, element) { |
if (!element.disabled && element.name) { |
key = element.name; value = $(element).getValue(); |
if (value != null && (element.type != 'submit' || (!submitted && |
submit !== false && (!submit || key == submit) && (submitted = true)))) { |
if (key in result) { |
// a key is already present; construct an array of values |
if (!Object.isArray(result[key])) result[key] = [result[key]]; |
result[key].push(value); |
} |
else result[key] = value; |
} |
} |
return result; |
}); |
return options.hash ? data : Object.toQueryString(data); |
} |
}; |
Form.Methods = { |
serialize: function(form, options) { |
return Form.serializeElements(Form.getElements(form), options); |
}, |
getElements: function(form) { |
return $A($(form).getElementsByTagName('*')).inject([], |
function(elements, child) { |
if (Form.Element.Serializers[child.tagName.toLowerCase()]) |
elements.push(Element.extend(child)); |
return elements; |
} |
); |
}, |
getInputs: function(form, typeName, name) { |
form = $(form); |
var inputs = form.getElementsByTagName('input'); |
if (!typeName && !name) return $A(inputs).map(Element.extend); |
for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) { |
var input = inputs[i]; |
if ((typeName && input.type != typeName) || (name && input.name != name)) |
continue; |
matchingInputs.push(Element.extend(input)); |
} |
return matchingInputs; |
}, |
disable: function(form) { |
form = $(form); |
Form.getElements(form).invoke('disable'); |
return form; |
}, |
enable: function(form) { |
form = $(form); |
Form.getElements(form).invoke('enable'); |
return form; |
}, |
findFirstElement: function(form) { |
var elements = $(form).getElements().findAll(function(element) { |
return 'hidden' != element.type && !element.disabled; |
}); |
var firstByIndex = elements.findAll(function(element) { |
return element.hasAttribute('tabIndex') && element.tabIndex >= 0; |
}).sortBy(function(element) { return element.tabIndex }).first(); |
return firstByIndex ? firstByIndex : elements.find(function(element) { |
return ['input', 'select', 'textarea'].include(element.tagName.toLowerCase()); |
}); |
}, |
focusFirstElement: function(form) { |
form = $(form); |
form.findFirstElement().activate(); |
return form; |
}, |
request: function(form, options) { |
form = $(form), options = Object.clone(options || { }); |
var params = options.parameters, action = form.readAttribute('action') || ''; |
if (action.blank()) action = window.location.href; |
options.parameters = form.serialize(true); |
if (params) { |
if (Object.isString(params)) params = params.toQueryParams(); |
Object.extend(options.parameters, params); |
} |
if (form.hasAttribute('method') && !options.method) |
options.method = form.method; |
return new Ajax.Request(action, options); |
} |
}; |
/*--------------------------------------------------------------------------*/ |
Form.Element = { |
focus: function(element) { |
$(element).focus(); |
return element; |
}, |
select: function(element) { |
$(element).select(); |
return element; |
} |
}; |
Form.Element.Methods = { |
serialize: function(element) { |
element = $(element); |
if (!element.disabled && element.name) { |
var value = element.getValue(); |
if (value != undefined) { |
var pair = { }; |
pair[element.name] = value; |
return Object.toQueryString(pair); |
} |
} |
return ''; |
}, |
getValue: function(element) { |
element = $(element); |
var method = element.tagName.toLowerCase(); |
return Form.Element.Serializers[method](element); |
}, |
setValue: function(element, value) { |
element = $(element); |
var method = element.tagName.toLowerCase(); |
Form.Element.Serializers[method](element, value); |
return element; |
}, |
clear: function(element) { |
$(element).value = ''; |
return element; |
}, |
present: function(element) { |
return $(element).value != ''; |
}, |
activate: function(element) { |
element = $(element); |
try { |
element.focus(); |
if (element.select && (element.tagName.toLowerCase() != 'input' || |
!['button', 'reset', 'submit'].include(element.type))) |
element.select(); |
} catch (e) { } |
return element; |
}, |
disable: function(element) { |
element = $(element); |
element.blur(); |
element.disabled = true; |
return element; |
}, |
enable: function(element) { |
element = $(element); |
element.disabled = false; |
return element; |
} |
}; |
/*--------------------------------------------------------------------------*/ |
var Field = Form.Element; |
var $F = Form.Element.Methods.getValue; |
/*--------------------------------------------------------------------------*/ |
Form.Element.Serializers = { |
input: function(element, value) { |
switch (element.type.toLowerCase()) { |
case 'checkbox': |
case 'radio': |
return Form.Element.Serializers.inputSelector(element, value); |
default: |
return Form.Element.Serializers.textarea(element, value); |
} |
}, |
inputSelector: function(element, value) { |
if (Object.isUndefined(value)) return element.checked ? element.value : null; |
else element.checked = !!value; |
}, |
textarea: function(element, value) { |
if (Object.isUndefined(value)) return element.value; |
else element.value = value; |
}, |
select: function(element, index) { |
if (Object.isUndefined(index)) |
return this[element.type == 'select-one' ? |
'selectOne' : 'selectMany'](element); |
else { |
var opt, value, single = !Object.isArray(index); |
for (var i = 0, length = element.length; i < length; i++) { |
opt = element.options[i]; |
value = this.optionValue(opt); |
if (single) { |
if (value == index) { |
opt.selected = true; |
return; |
} |
} |
else opt.selected = index.include(value); |
} |
} |
}, |
selectOne: function(element) { |
var index = element.selectedIndex; |
return index >= 0 ? this.optionValue(element.options[index]) : null; |
}, |
selectMany: function(element) { |
var values, length = element.length; |
if (!length) return null; |
for (var i = 0, values = []; i < length; i++) { |
var opt = element.options[i]; |
if (opt.selected) values.push(this.optionValue(opt)); |
} |
return values; |
}, |
optionValue: function(opt) { |
// extend element because hasAttribute may not be native |
return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text; |
} |
}; |
/*--------------------------------------------------------------------------*/ |
Abstract.TimedObserver = Class.create(PeriodicalExecuter, { |
initialize: function($super, element, frequency, callback) { |
$super(callback, frequency); |
this.element = $(element); |
this.lastValue = this.getValue(); |
}, |
execute: function() { |
var value = this.getValue(); |
if (Object.isString(this.lastValue) && Object.isString(value) ? |
this.lastValue != value : String(this.lastValue) != String(value)) { |
this.callback(this.element, value); |
this.lastValue = value; |
} |
} |
}); |
Form.Element.Observer = Class.create(Abstract.TimedObserver, { |
getValue: function() { |
return Form.Element.getValue(this.element); |
} |
}); |
Form.Observer = Class.create(Abstract.TimedObserver, { |
getValue: function() { |
return Form.serialize(this.element); |
} |
}); |
/*--------------------------------------------------------------------------*/ |
Abstract.EventObserver = Class.create({ |
initialize: function(element, callback) { |
this.element = $(element); |
this.callback = callback; |
this.lastValue = this.getValue(); |
if (this.element.tagName.toLowerCase() == 'form') |
this.registerFormCallbacks(); |
else |
this.registerCallback(this.element); |
}, |
onElementEvent: function() { |
var value = this.getValue(); |
if (this.lastValue != value) { |
this.callback(this.element, value); |
this.lastValue = value; |
} |
}, |
registerFormCallbacks: function() { |
Form.getElements(this.element).each(this.registerCallback, this); |
}, |
registerCallback: function(element) { |
if (element.type) { |
switch (element.type.toLowerCase()) { |
case 'checkbox': |
case 'radio': |
Event.observe(element, 'click', this.onElementEvent.bind(this)); |
break; |
default: |
Event.observe(element, 'change', this.onElementEvent.bind(this)); |
break; |
} |
} |
} |
}); |
Form.Element.EventObserver = Class.create(Abstract.EventObserver, { |
getValue: function() { |
return Form.Element.getValue(this.element); |
} |
}); |
Form.EventObserver = Class.create(Abstract.EventObserver, { |
getValue: function() { |
return Form.serialize(this.element); |
} |
}); |
if (!window.Event) var Event = { }; |
Object.extend(Event, { |
KEY_BACKSPACE: 8, |
KEY_TAB: 9, |
KEY_RETURN: 13, |
KEY_ESC: 27, |
KEY_LEFT: 37, |
KEY_UP: 38, |
KEY_RIGHT: 39, |
KEY_DOWN: 40, |
KEY_DELETE: 46, |
KEY_HOME: 36, |
KEY_END: 35, |
KEY_PAGEUP: 33, |
KEY_PAGEDOWN: 34, |
KEY_INSERT: 45, |
cache: { }, |
relatedTarget: function(event) { |
var element; |
switch(event.type) { |
case 'mouseover': element = event.fromElement; break; |
case 'mouseout': element = event.toElement; break; |
default: return null; |
} |
return Element.extend(element); |
} |
}); |
Event.Methods = (function() { |
var isButton; |
if (Prototype.Browser.IE) { |
var buttonMap = { 0: 1, 1: 4, 2: 2 }; |
isButton = function(event, code) { |
return event.button == buttonMap[code]; |
}; |
} else if (Prototype.Browser.WebKit) { |
isButton = function(event, code) { |
switch (code) { |
case 0: return event.which == 1 && !event.metaKey; |
case 1: return event.which == 1 && event.metaKey; |
default: return false; |
} |
}; |
} else { |
isButton = function(event, code) { |
return event.which ? (event.which === code + 1) : (event.button === code); |
}; |
} |
return { |
isLeftClick: function(event) { return isButton(event, 0) }, |
isMiddleClick: function(event) { return isButton(event, 1) }, |
isRightClick: function(event) { return isButton(event, 2) }, |
element: function(event) { |
var node = Event.extend(event).target; |
return Element.extend(node.nodeType == Node.TEXT_NODE ? node.parentNode : node); |
}, |
findElement: function(event, expression) { |
var element = Event.element(event); |
if (!expression) return element; |
var elements = [element].concat(element.ancestors()); |
return Selector.findElement(elements, expression, 0); |
}, |
pointer: function(event) { |
return { |
x: event.pageX || (event.clientX + |
(document.documentElement.scrollLeft || document.body.scrollLeft)), |
y: event.pageY || (event.clientY + |
(document.documentElement.scrollTop || document.body.scrollTop)) |
}; |
}, |
pointerX: function(event) { return Event.pointer(event).x }, |
pointerY: function(event) { return Event.pointer(event).y }, |
stop: function(event) { |
Event.extend(event); |
event.preventDefault(); |
event.stopPropagation(); |
event.stopped = true; |
} |
}; |
})(); |
Event.extend = (function() { |
var methods = Object.keys(Event.Methods).inject({ }, function(m, name) { |
m[name] = Event.Methods[name].methodize(); |
return m; |
}); |
if (Prototype.Browser.IE) { |
Object.extend(methods, { |
stopPropagation: function() { this.cancelBubble = true }, |
preventDefault: function() { this.returnValue = false }, |
inspect: function() { return "[object Event]" } |
}); |
return function(event) { |
if (!event) return false; |
if (event._extendedByPrototype) return event; |
event._extendedByPrototype = Prototype.emptyFunction; |
var pointer = Event.pointer(event); |
Object.extend(event, { |
target: event.srcElement, |
relatedTarget: Event.relatedTarget(event), |
pageX: pointer.x, |
pageY: pointer.y |
}); |
return Object.extend(event, methods); |
}; |
} else { |
Event.prototype = Event.prototype || document.createEvent("HTMLEvents").__proto__; |
Object.extend(Event.prototype, methods); |
return Prototype.K; |
} |
})(); |
Object.extend(Event, (function() { |
var cache = Event.cache; |
function getEventID(element) { |
if (element._prototypeEventID) return element._prototypeEventID[0]; |
arguments.callee.id = arguments.callee.id || 1; |
return element._prototypeEventID = [++arguments.callee.id]; |
} |
function getDOMEventName(eventName) { |
if (eventName && eventName.include(':')) return "dataavailable"; |
return eventName; |
} |
function getCacheForID(id) { |
return cache[id] = cache[id] || { }; |
} |
function getWrappersForEventName(id, eventName) { |
var c = getCacheForID(id); |
return c[eventName] = c[eventName] || []; |
} |
function createWrapper(element, eventName, handler) { |
var id = getEventID(element); |
var c = getWrappersForEventName(id, eventName); |
if (c.pluck("handler").include(handler)) return false; |
var wrapper = function(event) { |
if (!Event || !Event.extend || |
(event.eventName && event.eventName != eventName)) |
return false; |
Event.extend(event); |
handler.call(element, event); |
}; |
wrapper.handler = handler; |
c.push(wrapper); |
return wrapper; |
} |
function findWrapper(id, eventName, handler) { |
var c = getWrappersForEventName(id, eventName); |
return c.find(function(wrapper) { return wrapper.handler == handler }); |
} |
function destroyWrapper(id, eventName, handler) { |
var c = getCacheForID(id); |
if (!c[eventName]) return false; |
c[eventName] = c[eventName].without(findWrapper(id, eventName, handler)); |
} |
function destroyCache() { |
for (var id in cache) |
for (var eventName in cache[id]) |
cache[id][eventName] = null; |
} |
if (window.attachEvent) { |
window.attachEvent("onunload", destroyCache); |
} |
return { |
observe: function(element, eventName, handler) { |
element = $(element); |
var name = getDOMEventName(eventName); |
var wrapper = createWrapper(element, eventName, handler); |
if (!wrapper) return element; |
if (element.addEventListener) { |
element.addEventListener(name, wrapper, false); |
} else { |
element.attachEvent("on" + name, wrapper); |
} |
return element; |
}, |
stopObserving: function(element, eventName, handler) { |
element = $(element); |
var id = getEventID(element), name = getDOMEventName(eventName); |
if (!handler && eventName) { |
getWrappersForEventName(id, eventName).each(function(wrapper) { |
element.stopObserving(eventName, wrapper.handler); |
}); |
return element; |
} else if (!eventName) { |
Object.keys(getCacheForID(id)).each(function(eventName) { |
element.stopObserving(eventName); |
}); |
return element; |
} |
var wrapper = findWrapper(id, eventName, handler); |
if (!wrapper) return element; |
if (element.removeEventListener) { |
element.removeEventListener(name, wrapper, false); |
} else { |
element.detachEvent("on" + name, wrapper); |
} |
destroyWrapper(id, eventName, handler); |
return element; |
}, |
fire: function(element, eventName, memo) { |
element = $(element); |
if (element == document && document.createEvent && !element.dispatchEvent) |
element = document.documentElement; |
var event; |
if (document.createEvent) { |
event = document.createEvent("HTMLEvents"); |
event.initEvent("dataavailable", true, true); |
} else { |
event = document.createEventObject(); |
event.eventType = "ondataavailable"; |
} |
event.eventName = eventName; |
event.memo = memo || { }; |
if (document.createEvent) { |
element.dispatchEvent(event); |
} else { |
element.fireEvent(event.eventType, event); |
} |
return Event.extend(event); |
} |
}; |
})()); |
Object.extend(Event, Event.Methods); |
Element.addMethods({ |
fire: Event.fire, |
observe: Event.observe, |
stopObserving: Event.stopObserving |
}); |
Object.extend(document, { |
fire: Element.Methods.fire.methodize(), |
observe: Element.Methods.observe.methodize(), |
stopObserving: Element.Methods.stopObserving.methodize(), |
loaded: false |
}); |
(function() { |
/* Support for the DOMContentLoaded event is based on work by Dan Webb, |
Matthias Miller, Dean Edwards and John Resig. */ |
var timer; |
function fireContentLoadedEvent() { |
if (document.loaded) return; |
if (timer) window.clearInterval(timer); |
document.fire("dom:loaded"); |
document.loaded = true; |
} |
if (document.addEventListener) { |
if (Prototype.Browser.WebKit) { |
timer = window.setInterval(function() { |
if (/loaded|complete/.test(document.readyState)) |
fireContentLoadedEvent(); |
}, 0); |
Event.observe(window, "load", fireContentLoadedEvent); |
} else { |
document.addEventListener("DOMContentLoaded", |
fireContentLoadedEvent, false); |
} |
} else { |
document.write("<script id=__onDOMContentLoaded defer src=//:><\/script>"); |
$("__onDOMContentLoaded").onreadystatechange = function() { |
if (this.readyState == "complete") { |
this.onreadystatechange = null; |
fireContentLoadedEvent(); |
} |
}; |
} |
})(); |
/*------------------------------- DEPRECATED -------------------------------*/ |
Hash.toQueryString = Object.toQueryString; |
var Toggle = { display: Element.toggle }; |
Element.Methods.childOf = Element.Methods.descendantOf; |
var Insertion = { |
Before: function(element, content) { |
return Element.insert(element, {before:content}); |
}, |
Top: function(element, content) { |
return Element.insert(element, {top:content}); |
}, |
Bottom: function(element, content) { |
return Element.insert(element, {bottom:content}); |
}, |
After: function(element, content) { |
return Element.insert(element, {after:content}); |
} |
}; |
var $continue = new Error('"throw $continue" is deprecated, use "return" instead'); |
// This should be moved to script.aculo.us; notice the deprecated methods |
// further below, that map to the newer Element methods. |
var Position = { |
// set to true if needed, warning: firefox performance problems |
// NOT neeeded for page scrolling, only if draggable contained in |
// scrollable elements |
includeScrollOffsets: false, |
// must be called before calling withinIncludingScrolloffset, every time the |
// page is scrolled |
prepare: function() { |
this.deltaX = window.pageXOffset |
|| document.documentElement.scrollLeft |
|| document.body.scrollLeft |
|| 0; |
this.deltaY = window.pageYOffset |
|| document.documentElement.scrollTop |
|| document.body.scrollTop |
|| 0; |
}, |
// caches x/y coordinate pair to use with overlap |
within: function(element, x, y) { |
if (this.includeScrollOffsets) |
return this.withinIncludingScrolloffsets(element, x, y); |
this.xcomp = x; |
this.ycomp = y; |
this.offset = Element.cumulativeOffset(element); |
return (y >= this.offset[1] && |
y < this.offset[1] + element.offsetHeight && |
x >= this.offset[0] && |
x < this.offset[0] + element.offsetWidth); |
}, |
withinIncludingScrolloffsets: function(element, x, y) { |
var offsetcache = Element.cumulativeScrollOffset(element); |
this.xcomp = x + offsetcache[0] - this.deltaX; |
this.ycomp = y + offsetcache[1] - this.deltaY; |
this.offset = Element.cumulativeOffset(element); |
return (this.ycomp >= this.offset[1] && |
this.ycomp < this.offset[1] + element.offsetHeight && |
this.xcomp >= this.offset[0] && |
this.xcomp < this.offset[0] + element.offsetWidth); |
}, |
// within must be called directly before |
overlap: function(mode, element) { |
if (!mode) return 0; |
if (mode == 'vertical') |
return ((this.offset[1] + element.offsetHeight) - this.ycomp) / |
element.offsetHeight; |
if (mode == 'horizontal') |
return ((this.offset[0] + element.offsetWidth) - this.xcomp) / |
element.offsetWidth; |
}, |
// Deprecation layer -- use newer Element methods now (1.5.2). |
cumulativeOffset: Element.Methods.cumulativeOffset, |
positionedOffset: Element.Methods.positionedOffset, |
absolutize: function(element) { |
Position.prepare(); |
return Element.absolutize(element); |
}, |
relativize: function(element) { |
Position.prepare(); |
return Element.relativize(element); |
}, |
realOffset: Element.Methods.cumulativeScrollOffset, |
offsetParent: Element.Methods.getOffsetParent, |
page: Element.Methods.viewportOffset, |
clone: function(source, target, options) { |
options = options || { }; |
return Element.clonePosition(target, source, options); |
} |
}; |
/*--------------------------------------------------------------------------*/ |
if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){ |
function iter(name) { |
return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]"; |
} |
instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ? |
function(element, className) { |
className = className.toString().strip(); |
var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className); |
return cond ? document._getElementsByXPath('.//*' + cond, element) : []; |
} : function(element, className) { |
className = className.toString().strip(); |
var elements = [], classNames = (/\s/.test(className) ? $w(className) : null); |
if (!classNames && !className) return elements; |
var nodes = $(element).getElementsByTagName('*'); |
className = ' ' + className + ' '; |
for (var i = 0, child, cn; child = nodes[i]; i++) { |
if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) || |
(classNames && classNames.all(function(name) { |
return !name.toString().blank() && cn.include(' ' + name + ' '); |
})))) |
elements.push(Element.extend(child)); |
} |
return elements; |
}; |
return function(className, parentElement) { |
return $(parentElement || document.body).getElementsByClassName(className); |
}; |
}(Element.Methods); |
/*--------------------------------------------------------------------------*/ |
Element.ClassNames = Class.create(); |
Element.ClassNames.prototype = { |
initialize: function(element) { |
this.element = $(element); |
}, |
_each: function(iterator) { |
this.element.className.split(/\s+/).select(function(name) { |
return name.length > 0; |
})._each(iterator); |
}, |
set: function(className) { |
this.element.className = className; |
}, |
add: function(classNameToAdd) { |
if (this.include(classNameToAdd)) return; |
this.set($A(this).concat(classNameToAdd).join(' ')); |
}, |
remove: function(classNameToRemove) { |
if (!this.include(classNameToRemove)) return; |
this.set($A(this).without(classNameToRemove).join(' ')); |
}, |
toString: function() { |
return $A(this).join(' '); |
} |
}; |
Object.extend(Element.ClassNames.prototype, Enumerable); |
/*--------------------------------------------------------------------------*/ |
Element.addMethods(); |
/branches/v2.6-greffoir/vendors/extjs-2.0.1/adapter/prototype/effects.js |
---|
New file |
0,0 → 1,1122 |
// script.aculo.us effects.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008 |
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) |
// Contributors: |
// Justin Palmer (http://encytemedia.com/) |
// Mark Pilgrim (http://diveintomark.org/) |
// Martin Bialasinki |
// |
// script.aculo.us is freely distributable under the terms of an MIT-style license. |
// For details, see the script.aculo.us web site: http://script.aculo.us/ |
// converts rgb() and #xxx to #xxxxxx format, |
// returns self (or first argument) if not convertable |
String.prototype.parseColor = function() { |
var color = '#'; |
if (this.slice(0,4) == 'rgb(') { |
var cols = this.slice(4,this.length-1).split(','); |
var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3); |
} else { |
if (this.slice(0,1) == '#') { |
if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase(); |
if (this.length==7) color = this.toLowerCase(); |
} |
} |
return (color.length==7 ? color : (arguments[0] || this)); |
}; |
/*--------------------------------------------------------------------------*/ |
Element.collectTextNodes = function(element) { |
return $A($(element).childNodes).collect( function(node) { |
return (node.nodeType==3 ? node.nodeValue : |
(node.hasChildNodes() ? Element.collectTextNodes(node) : '')); |
}).flatten().join(''); |
}; |
Element.collectTextNodesIgnoreClass = function(element, className) { |
return $A($(element).childNodes).collect( function(node) { |
return (node.nodeType==3 ? node.nodeValue : |
((node.hasChildNodes() && !Element.hasClassName(node,className)) ? |
Element.collectTextNodesIgnoreClass(node, className) : '')); |
}).flatten().join(''); |
}; |
Element.setContentZoom = function(element, percent) { |
element = $(element); |
element.setStyle({fontSize: (percent/100) + 'em'}); |
if (Prototype.Browser.WebKit) window.scrollBy(0,0); |
return element; |
}; |
Element.getInlineOpacity = function(element){ |
return $(element).style.opacity || ''; |
}; |
Element.forceRerendering = function(element) { |
try { |
element = $(element); |
var n = document.createTextNode(' '); |
element.appendChild(n); |
element.removeChild(n); |
} catch(e) { } |
}; |
/*--------------------------------------------------------------------------*/ |
var Effect = { |
_elementDoesNotExistError: { |
name: 'ElementDoesNotExistError', |
message: 'The specified DOM element does not exist, but is required for this effect to operate' |
}, |
Transitions: { |
linear: Prototype.K, |
sinoidal: function(pos) { |
return (-Math.cos(pos*Math.PI)/2) + 0.5; |
}, |
reverse: function(pos) { |
return 1-pos; |
}, |
flicker: function(pos) { |
var pos = ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4; |
return pos > 1 ? 1 : pos; |
}, |
wobble: function(pos) { |
return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5; |
}, |
pulse: function(pos, pulses) { |
pulses = pulses || 5; |
return ( |
((pos % (1/pulses)) * pulses).round() == 0 ? |
((pos * pulses * 2) - (pos * pulses * 2).floor()) : |
1 - ((pos * pulses * 2) - (pos * pulses * 2).floor()) |
); |
}, |
spring: function(pos) { |
return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6)); |
}, |
none: function(pos) { |
return 0; |
}, |
full: function(pos) { |
return 1; |
} |
}, |
DefaultOptions: { |
duration: 1.0, // seconds |
fps: 100, // 100= assume 66fps max. |
sync: false, // true for combining |
from: 0.0, |
to: 1.0, |
delay: 0.0, |
queue: 'parallel' |
}, |
tagifyText: function(element) { |
var tagifyStyle = 'position:relative'; |
if (Prototype.Browser.IE) tagifyStyle += ';zoom:1'; |
element = $(element); |
$A(element.childNodes).each( function(child) { |
if (child.nodeType==3) { |
child.nodeValue.toArray().each( function(character) { |
element.insertBefore( |
new Element('span', {style: tagifyStyle}).update( |
character == ' ' ? String.fromCharCode(160) : character), |
child); |
}); |
Element.remove(child); |
} |
}); |
}, |
multiple: function(element, effect) { |
var elements; |
if (((typeof element == 'object') || |
Object.isFunction(element)) && |
(element.length)) |
elements = element; |
else |
elements = $(element).childNodes; |
var options = Object.extend({ |
speed: 0.1, |
delay: 0.0 |
}, arguments[2] || { }); |
var masterDelay = options.delay; |
$A(elements).each( function(element, index) { |
new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay })); |
}); |
}, |
PAIRS: { |
'slide': ['SlideDown','SlideUp'], |
'blind': ['BlindDown','BlindUp'], |
'appear': ['Appear','Fade'] |
}, |
toggle: function(element, effect) { |
element = $(element); |
effect = (effect || 'appear').toLowerCase(); |
var options = Object.extend({ |
queue: { position:'end', scope:(element.id || 'global'), limit: 1 } |
}, arguments[2] || { }); |
Effect[element.visible() ? |
Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options); |
} |
}; |
Effect.DefaultOptions.transition = Effect.Transitions.sinoidal; |
/* ------------- core effects ------------- */ |
Effect.ScopedQueue = Class.create(Enumerable, { |
initialize: function() { |
this.effects = []; |
this.interval = null; |
}, |
_each: function(iterator) { |
this.effects._each(iterator); |
}, |
add: function(effect) { |
var timestamp = new Date().getTime(); |
var position = Object.isString(effect.options.queue) ? |
effect.options.queue : effect.options.queue.position; |
switch(position) { |
case 'front': |
// move unstarted effects after this effect |
this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) { |
e.startOn += effect.finishOn; |
e.finishOn += effect.finishOn; |
}); |
break; |
case 'with-last': |
timestamp = this.effects.pluck('startOn').max() || timestamp; |
break; |
case 'end': |
// start effect after last queued effect has finished |
timestamp = this.effects.pluck('finishOn').max() || timestamp; |
break; |
} |
effect.startOn += timestamp; |
effect.finishOn += timestamp; |
if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit)) |
this.effects.push(effect); |
if (!this.interval) |
this.interval = setInterval(this.loop.bind(this), 15); |
}, |
remove: function(effect) { |
this.effects = this.effects.reject(function(e) { return e==effect }); |
if (this.effects.length == 0) { |
clearInterval(this.interval); |
this.interval = null; |
} |
}, |
loop: function() { |
var timePos = new Date().getTime(); |
for(var i=0, len=this.effects.length;i<len;i++) |
this.effects[i] && this.effects[i].loop(timePos); |
} |
}); |
Effect.Queues = { |
instances: $H(), |
get: function(queueName) { |
if (!Object.isString(queueName)) return queueName; |
return this.instances.get(queueName) || |
this.instances.set(queueName, new Effect.ScopedQueue()); |
} |
}; |
Effect.Queue = Effect.Queues.get('global'); |
Effect.Base = Class.create({ |
position: null, |
start: function(options) { |
function codeForEvent(options,eventName){ |
return ( |
(options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') + |
(options[eventName] ? 'this.options.'+eventName+'(this);' : '') |
); |
} |
if (options && options.transition === false) options.transition = Effect.Transitions.linear; |
this.options = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { }); |
this.currentFrame = 0; |
this.state = 'idle'; |
this.startOn = this.options.delay*1000; |
this.finishOn = this.startOn+(this.options.duration*1000); |
this.fromToDelta = this.options.to-this.options.from; |
this.totalTime = this.finishOn-this.startOn; |
this.totalFrames = this.options.fps*this.options.duration; |
eval('this.render = function(pos){ '+ |
'if (this.state=="idle"){this.state="running";'+ |
codeForEvent(this.options,'beforeSetup')+ |
(this.setup ? 'this.setup();':'')+ |
codeForEvent(this.options,'afterSetup')+ |
'};if (this.state=="running"){'+ |
'pos=this.options.transition(pos)*'+this.fromToDelta+'+'+this.options.from+';'+ |
'this.position=pos;'+ |
codeForEvent(this.options,'beforeUpdate')+ |
(this.update ? 'this.update(pos);':'')+ |
codeForEvent(this.options,'afterUpdate')+ |
'}}'); |
this.event('beforeStart'); |
if (!this.options.sync) |
Effect.Queues.get(Object.isString(this.options.queue) ? |
'global' : this.options.queue.scope).add(this); |
}, |
loop: function(timePos) { |
if (timePos >= this.startOn) { |
if (timePos >= this.finishOn) { |
this.render(1.0); |
this.cancel(); |
this.event('beforeFinish'); |
if (this.finish) this.finish(); |
this.event('afterFinish'); |
return; |
} |
var pos = (timePos - this.startOn) / this.totalTime, |
frame = (pos * this.totalFrames).round(); |
if (frame > this.currentFrame) { |
this.render(pos); |
this.currentFrame = frame; |
} |
} |
}, |
cancel: function() { |
if (!this.options.sync) |
Effect.Queues.get(Object.isString(this.options.queue) ? |
'global' : this.options.queue.scope).remove(this); |
this.state = 'finished'; |
}, |
event: function(eventName) { |
if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this); |
if (this.options[eventName]) this.options[eventName](this); |
}, |
inspect: function() { |
var data = $H(); |
for(property in this) |
if (!Object.isFunction(this[property])) data.set(property, this[property]); |
return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>'; |
} |
}); |
Effect.Parallel = Class.create(Effect.Base, { |
initialize: function(effects) { |
this.effects = effects || []; |
this.start(arguments[1]); |
}, |
update: function(position) { |
this.effects.invoke('render', position); |
}, |
finish: function(position) { |
this.effects.each( function(effect) { |
effect.render(1.0); |
effect.cancel(); |
effect.event('beforeFinish'); |
if (effect.finish) effect.finish(position); |
effect.event('afterFinish'); |
}); |
} |
}); |
Effect.Tween = Class.create(Effect.Base, { |
initialize: function(object, from, to) { |
object = Object.isString(object) ? $(object) : object; |
var args = $A(arguments), method = args.last(), |
options = args.length == 5 ? args[3] : null; |
this.method = Object.isFunction(method) ? method.bind(object) : |
Object.isFunction(object[method]) ? object[method].bind(object) : |
function(value) { object[method] = value }; |
this.start(Object.extend({ from: from, to: to }, options || { })); |
}, |
update: function(position) { |
this.method(position); |
} |
}); |
Effect.Event = Class.create(Effect.Base, { |
initialize: function() { |
this.start(Object.extend({ duration: 0 }, arguments[0] || { })); |
}, |
update: Prototype.emptyFunction |
}); |
Effect.Opacity = Class.create(Effect.Base, { |
initialize: function(element) { |
this.element = $(element); |
if (!this.element) throw(Effect._elementDoesNotExistError); |
// make this work on IE on elements without 'layout' |
if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout)) |
this.element.setStyle({zoom: 1}); |
var options = Object.extend({ |
from: this.element.getOpacity() || 0.0, |
to: 1.0 |
}, arguments[1] || { }); |
this.start(options); |
}, |
update: function(position) { |
this.element.setOpacity(position); |
} |
}); |
Effect.Move = Class.create(Effect.Base, { |
initialize: function(element) { |
this.element = $(element); |
if (!this.element) throw(Effect._elementDoesNotExistError); |
var options = Object.extend({ |
x: 0, |
y: 0, |
mode: 'relative' |
}, arguments[1] || { }); |
this.start(options); |
}, |
setup: function() { |
this.element.makePositioned(); |
this.originalLeft = parseFloat(this.element.getStyle('left') || '0'); |
this.originalTop = parseFloat(this.element.getStyle('top') || '0'); |
if (this.options.mode == 'absolute') { |
this.options.x = this.options.x - this.originalLeft; |
this.options.y = this.options.y - this.originalTop; |
} |
}, |
update: function(position) { |
this.element.setStyle({ |
left: (this.options.x * position + this.originalLeft).round() + 'px', |
top: (this.options.y * position + this.originalTop).round() + 'px' |
}); |
} |
}); |
// for backwards compatibility |
Effect.MoveBy = function(element, toTop, toLeft) { |
return new Effect.Move(element, |
Object.extend({ x: toLeft, y: toTop }, arguments[3] || { })); |
}; |
Effect.Scale = Class.create(Effect.Base, { |
initialize: function(element, percent) { |
this.element = $(element); |
if (!this.element) throw(Effect._elementDoesNotExistError); |
var options = Object.extend({ |
scaleX: true, |
scaleY: true, |
scaleContent: true, |
scaleFromCenter: false, |
scaleMode: 'box', // 'box' or 'contents' or { } with provided values |
scaleFrom: 100.0, |
scaleTo: percent |
}, arguments[2] || { }); |
this.start(options); |
}, |
setup: function() { |
this.restoreAfterFinish = this.options.restoreAfterFinish || false; |
this.elementPositioning = this.element.getStyle('position'); |
this.originalStyle = { }; |
['top','left','width','height','fontSize'].each( function(k) { |
this.originalStyle[k] = this.element.style[k]; |
}.bind(this)); |
this.originalTop = this.element.offsetTop; |
this.originalLeft = this.element.offsetLeft; |
var fontSize = this.element.getStyle('font-size') || '100%'; |
['em','px','%','pt'].each( function(fontSizeType) { |
if (fontSize.indexOf(fontSizeType)>0) { |
this.fontSize = parseFloat(fontSize); |
this.fontSizeType = fontSizeType; |
} |
}.bind(this)); |
this.factor = (this.options.scaleTo - this.options.scaleFrom)/100; |
this.dims = null; |
if (this.options.scaleMode=='box') |
this.dims = [this.element.offsetHeight, this.element.offsetWidth]; |
if (/^content/.test(this.options.scaleMode)) |
this.dims = [this.element.scrollHeight, this.element.scrollWidth]; |
if (!this.dims) |
this.dims = [this.options.scaleMode.originalHeight, |
this.options.scaleMode.originalWidth]; |
}, |
update: function(position) { |
var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position); |
if (this.options.scaleContent && this.fontSize) |
this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType }); |
this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale); |
}, |
finish: function(position) { |
if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle); |
}, |
setDimensions: function(height, width) { |
var d = { }; |
if (this.options.scaleX) d.width = width.round() + 'px'; |
if (this.options.scaleY) d.height = height.round() + 'px'; |
if (this.options.scaleFromCenter) { |
var topd = (height - this.dims[0])/2; |
var leftd = (width - this.dims[1])/2; |
if (this.elementPositioning == 'absolute') { |
if (this.options.scaleY) d.top = this.originalTop-topd + 'px'; |
if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px'; |
} else { |
if (this.options.scaleY) d.top = -topd + 'px'; |
if (this.options.scaleX) d.left = -leftd + 'px'; |
} |
} |
this.element.setStyle(d); |
} |
}); |
Effect.Highlight = Class.create(Effect.Base, { |
initialize: function(element) { |
this.element = $(element); |
if (!this.element) throw(Effect._elementDoesNotExistError); |
var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { }); |
this.start(options); |
}, |
setup: function() { |
// Prevent executing on elements not in the layout flow |
if (this.element.getStyle('display')=='none') { this.cancel(); return; } |
// Disable background image during the effect |
this.oldStyle = { }; |
if (!this.options.keepBackgroundImage) { |
this.oldStyle.backgroundImage = this.element.getStyle('background-image'); |
this.element.setStyle({backgroundImage: 'none'}); |
} |
if (!this.options.endcolor) |
this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff'); |
if (!this.options.restorecolor) |
this.options.restorecolor = this.element.getStyle('background-color'); |
// init color calculations |
this._base = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this)); |
this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this)); |
}, |
update: function(position) { |
this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){ |
return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) }); |
}, |
finish: function() { |
this.element.setStyle(Object.extend(this.oldStyle, { |
backgroundColor: this.options.restorecolor |
})); |
} |
}); |
Effect.ScrollTo = function(element) { |
var options = arguments[1] || { }, |
scrollOffsets = document.viewport.getScrollOffsets(), |
elementOffsets = $(element).cumulativeOffset(), |
max = (window.height || document.body.scrollHeight) - document.viewport.getHeight(); |
if (options.offset) elementOffsets[1] += options.offset; |
return new Effect.Tween(null, |
scrollOffsets.top, |
elementOffsets[1] > max ? max : elementOffsets[1], |
options, |
function(p){ scrollTo(scrollOffsets.left, p.round()) } |
); |
}; |
/* ------------- combination effects ------------- */ |
Effect.Fade = function(element) { |
element = $(element); |
var oldOpacity = element.getInlineOpacity(); |
var options = Object.extend({ |
from: element.getOpacity() || 1.0, |
to: 0.0, |
afterFinishInternal: function(effect) { |
if (effect.options.to!=0) return; |
effect.element.hide().setStyle({opacity: oldOpacity}); |
} |
}, arguments[1] || { }); |
return new Effect.Opacity(element,options); |
}; |
Effect.Appear = function(element) { |
element = $(element); |
var options = Object.extend({ |
from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0), |
to: 1.0, |
// force Safari to render floated elements properly |
afterFinishInternal: function(effect) { |
effect.element.forceRerendering(); |
}, |
beforeSetup: function(effect) { |
effect.element.setOpacity(effect.options.from).show(); |
}}, arguments[1] || { }); |
return new Effect.Opacity(element,options); |
}; |
Effect.Puff = function(element) { |
element = $(element); |
var oldStyle = { |
opacity: element.getInlineOpacity(), |
position: element.getStyle('position'), |
top: element.style.top, |
left: element.style.left, |
width: element.style.width, |
height: element.style.height |
}; |
return new Effect.Parallel( |
[ new Effect.Scale(element, 200, |
{ sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), |
new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], |
Object.extend({ duration: 1.0, |
beforeSetupInternal: function(effect) { |
Position.absolutize(effect.effects[0].element) |
}, |
afterFinishInternal: function(effect) { |
effect.effects[0].element.hide().setStyle(oldStyle); } |
}, arguments[1] || { }) |
); |
}; |
Effect.BlindUp = function(element) { |
element = $(element); |
element.makeClipping(); |
return new Effect.Scale(element, 0, |
Object.extend({ scaleContent: false, |
scaleX: false, |
restoreAfterFinish: true, |
afterFinishInternal: function(effect) { |
effect.element.hide().undoClipping(); |
} |
}, arguments[1] || { }) |
); |
}; |
Effect.BlindDown = function(element) { |
element = $(element); |
var elementDimensions = element.getDimensions(); |
return new Effect.Scale(element, 100, Object.extend({ |
scaleContent: false, |
scaleX: false, |
scaleFrom: 0, |
scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, |
restoreAfterFinish: true, |
afterSetup: function(effect) { |
effect.element.makeClipping().setStyle({height: '0px'}).show(); |
}, |
afterFinishInternal: function(effect) { |
effect.element.undoClipping(); |
} |
}, arguments[1] || { })); |
}; |
Effect.SwitchOff = function(element) { |
element = $(element); |
var oldOpacity = element.getInlineOpacity(); |
return new Effect.Appear(element, Object.extend({ |
duration: 0.4, |
from: 0, |
transition: Effect.Transitions.flicker, |
afterFinishInternal: function(effect) { |
new Effect.Scale(effect.element, 1, { |
duration: 0.3, scaleFromCenter: true, |
scaleX: false, scaleContent: false, restoreAfterFinish: true, |
beforeSetup: function(effect) { |
effect.element.makePositioned().makeClipping(); |
}, |
afterFinishInternal: function(effect) { |
effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity}); |
} |
}) |
} |
}, arguments[1] || { })); |
}; |
Effect.DropOut = function(element) { |
element = $(element); |
var oldStyle = { |
top: element.getStyle('top'), |
left: element.getStyle('left'), |
opacity: element.getInlineOpacity() }; |
return new Effect.Parallel( |
[ new Effect.Move(element, {x: 0, y: 100, sync: true }), |
new Effect.Opacity(element, { sync: true, to: 0.0 }) ], |
Object.extend( |
{ duration: 0.5, |
beforeSetup: function(effect) { |
effect.effects[0].element.makePositioned(); |
}, |
afterFinishInternal: function(effect) { |
effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle); |
} |
}, arguments[1] || { })); |
}; |
Effect.Shake = function(element) { |
element = $(element); |
var options = Object.extend({ |
distance: 20, |
duration: 0.5 |
}, arguments[1] || {}); |
var distance = parseFloat(options.distance); |
var split = parseFloat(options.duration) / 10.0; |
var oldStyle = { |
top: element.getStyle('top'), |
left: element.getStyle('left') }; |
return new Effect.Move(element, |
{ x: distance, y: 0, duration: split, afterFinishInternal: function(effect) { |
new Effect.Move(effect.element, |
{ x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) { |
new Effect.Move(effect.element, |
{ x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) { |
new Effect.Move(effect.element, |
{ x: -distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) { |
new Effect.Move(effect.element, |
{ x: distance*2, y: 0, duration: split*2, afterFinishInternal: function(effect) { |
new Effect.Move(effect.element, |
{ x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) { |
effect.element.undoPositioned().setStyle(oldStyle); |
}}) }}) }}) }}) }}) }}); |
}; |
Effect.SlideDown = function(element) { |
element = $(element).cleanWhitespace(); |
// SlideDown need to have the content of the element wrapped in a container element with fixed height! |
var oldInnerBottom = element.down().getStyle('bottom'); |
var elementDimensions = element.getDimensions(); |
return new Effect.Scale(element, 100, Object.extend({ |
scaleContent: false, |
scaleX: false, |
scaleFrom: window.opera ? 0 : 1, |
scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, |
restoreAfterFinish: true, |
afterSetup: function(effect) { |
effect.element.makePositioned(); |
effect.element.down().makePositioned(); |
if (window.opera) effect.element.setStyle({top: ''}); |
effect.element.makeClipping().setStyle({height: '0px'}).show(); |
}, |
afterUpdateInternal: function(effect) { |
effect.element.down().setStyle({bottom: |
(effect.dims[0] - effect.element.clientHeight) + 'px' }); |
}, |
afterFinishInternal: function(effect) { |
effect.element.undoClipping().undoPositioned(); |
effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); } |
}, arguments[1] || { }) |
); |
}; |
Effect.SlideUp = function(element) { |
element = $(element).cleanWhitespace(); |
var oldInnerBottom = element.down().getStyle('bottom'); |
var elementDimensions = element.getDimensions(); |
return new Effect.Scale(element, window.opera ? 0 : 1, |
Object.extend({ scaleContent: false, |
scaleX: false, |
scaleMode: 'box', |
scaleFrom: 100, |
scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width}, |
restoreAfterFinish: true, |
afterSetup: function(effect) { |
effect.element.makePositioned(); |
effect.element.down().makePositioned(); |
if (window.opera) effect.element.setStyle({top: ''}); |
effect.element.makeClipping().show(); |
}, |
afterUpdateInternal: function(effect) { |
effect.element.down().setStyle({bottom: |
(effect.dims[0] - effect.element.clientHeight) + 'px' }); |
}, |
afterFinishInternal: function(effect) { |
effect.element.hide().undoClipping().undoPositioned(); |
effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); |
} |
}, arguments[1] || { }) |
); |
}; |
// Bug in opera makes the TD containing this element expand for a instance after finish |
Effect.Squish = function(element) { |
return new Effect.Scale(element, window.opera ? 1 : 0, { |
restoreAfterFinish: true, |
beforeSetup: function(effect) { |
effect.element.makeClipping(); |
}, |
afterFinishInternal: function(effect) { |
effect.element.hide().undoClipping(); |
} |
}); |
}; |
Effect.Grow = function(element) { |
element = $(element); |
var options = Object.extend({ |
direction: 'center', |
moveTransition: Effect.Transitions.sinoidal, |
scaleTransition: Effect.Transitions.sinoidal, |
opacityTransition: Effect.Transitions.full |
}, arguments[1] || { }); |
var oldStyle = { |
top: element.style.top, |
left: element.style.left, |
height: element.style.height, |
width: element.style.width, |
opacity: element.getInlineOpacity() }; |
var dims = element.getDimensions(); |
var initialMoveX, initialMoveY; |
var moveX, moveY; |
switch (options.direction) { |
case 'top-left': |
initialMoveX = initialMoveY = moveX = moveY = 0; |
break; |
case 'top-right': |
initialMoveX = dims.width; |
initialMoveY = moveY = 0; |
moveX = -dims.width; |
break; |
case 'bottom-left': |
initialMoveX = moveX = 0; |
initialMoveY = dims.height; |
moveY = -dims.height; |
break; |
case 'bottom-right': |
initialMoveX = dims.width; |
initialMoveY = dims.height; |
moveX = -dims.width; |
moveY = -dims.height; |
break; |
case 'center': |
initialMoveX = dims.width / 2; |
initialMoveY = dims.height / 2; |
moveX = -dims.width / 2; |
moveY = -dims.height / 2; |
break; |
} |
return new Effect.Move(element, { |
x: initialMoveX, |
y: initialMoveY, |
duration: 0.01, |
beforeSetup: function(effect) { |
effect.element.hide().makeClipping().makePositioned(); |
}, |
afterFinishInternal: function(effect) { |
new Effect.Parallel( |
[ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }), |
new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }), |
new Effect.Scale(effect.element, 100, { |
scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, |
sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true}) |
], Object.extend({ |
beforeSetup: function(effect) { |
effect.effects[0].element.setStyle({height: '0px'}).show(); |
}, |
afterFinishInternal: function(effect) { |
effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); |
} |
}, options) |
) |
} |
}); |
}; |
Effect.Shrink = function(element) { |
element = $(element); |
var options = Object.extend({ |
direction: 'center', |
moveTransition: Effect.Transitions.sinoidal, |
scaleTransition: Effect.Transitions.sinoidal, |
opacityTransition: Effect.Transitions.none |
}, arguments[1] || { }); |
var oldStyle = { |
top: element.style.top, |
left: element.style.left, |
height: element.style.height, |
width: element.style.width, |
opacity: element.getInlineOpacity() }; |
var dims = element.getDimensions(); |
var moveX, moveY; |
switch (options.direction) { |
case 'top-left': |
moveX = moveY = 0; |
break; |
case 'top-right': |
moveX = dims.width; |
moveY = 0; |
break; |
case 'bottom-left': |
moveX = 0; |
moveY = dims.height; |
break; |
case 'bottom-right': |
moveX = dims.width; |
moveY = dims.height; |
break; |
case 'center': |
moveX = dims.width / 2; |
moveY = dims.height / 2; |
break; |
} |
return new Effect.Parallel( |
[ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }), |
new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}), |
new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }) |
], Object.extend({ |
beforeStartInternal: function(effect) { |
effect.effects[0].element.makePositioned().makeClipping(); |
}, |
afterFinishInternal: function(effect) { |
effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); } |
}, options) |
); |
}; |
Effect.Pulsate = function(element) { |
element = $(element); |
var options = arguments[1] || { }; |
var oldOpacity = element.getInlineOpacity(); |
var transition = options.transition || Effect.Transitions.sinoidal; |
var reverser = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) }; |
reverser.bind(transition); |
return new Effect.Opacity(element, |
Object.extend(Object.extend({ duration: 2.0, from: 0, |
afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); } |
}, options), {transition: reverser})); |
}; |
Effect.Fold = function(element) { |
element = $(element); |
var oldStyle = { |
top: element.style.top, |
left: element.style.left, |
width: element.style.width, |
height: element.style.height }; |
element.makeClipping(); |
return new Effect.Scale(element, 5, Object.extend({ |
scaleContent: false, |
scaleX: false, |
afterFinishInternal: function(effect) { |
new Effect.Scale(element, 1, { |
scaleContent: false, |
scaleY: false, |
afterFinishInternal: function(effect) { |
effect.element.hide().undoClipping().setStyle(oldStyle); |
} }); |
}}, arguments[1] || { })); |
}; |
Effect.Morph = Class.create(Effect.Base, { |
initialize: function(element) { |
this.element = $(element); |
if (!this.element) throw(Effect._elementDoesNotExistError); |
var options = Object.extend({ |
style: { } |
}, arguments[1] || { }); |
if (!Object.isString(options.style)) this.style = $H(options.style); |
else { |
if (options.style.include(':')) |
this.style = options.style.parseStyle(); |
else { |
this.element.addClassName(options.style); |
this.style = $H(this.element.getStyles()); |
this.element.removeClassName(options.style); |
var css = this.element.getStyles(); |
this.style = this.style.reject(function(style) { |
return style.value == css[style.key]; |
}); |
options.afterFinishInternal = function(effect) { |
effect.element.addClassName(effect.options.style); |
effect.transforms.each(function(transform) { |
effect.element.style[transform.style] = ''; |
}); |
} |
} |
} |
this.start(options); |
}, |
setup: function(){ |
function parseColor(color){ |
if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff'; |
color = color.parseColor(); |
return $R(0,2).map(function(i){ |
return parseInt( color.slice(i*2+1,i*2+3), 16 ) |
}); |
} |
this.transforms = this.style.map(function(pair){ |
var property = pair[0], value = pair[1], unit = null; |
if (value.parseColor('#zzzzzz') != '#zzzzzz') { |
value = value.parseColor(); |
unit = 'color'; |
} else if (property == 'opacity') { |
value = parseFloat(value); |
if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout)) |
this.element.setStyle({zoom: 1}); |
} else if (Element.CSS_LENGTH.test(value)) { |
var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/); |
value = parseFloat(components[1]); |
unit = (components.length == 3) ? components[2] : null; |
} |
var originalValue = this.element.getStyle(property); |
return { |
style: property.camelize(), |
originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), |
targetValue: unit=='color' ? parseColor(value) : value, |
unit: unit |
}; |
}.bind(this)).reject(function(transform){ |
return ( |
(transform.originalValue == transform.targetValue) || |
( |
transform.unit != 'color' && |
(isNaN(transform.originalValue) || isNaN(transform.targetValue)) |
) |
) |
}); |
}, |
update: function(position) { |
var style = { }, transform, i = this.transforms.length; |
while(i--) |
style[(transform = this.transforms[i]).style] = |
transform.unit=='color' ? '#'+ |
(Math.round(transform.originalValue[0]+ |
(transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() + |
(Math.round(transform.originalValue[1]+ |
(transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() + |
(Math.round(transform.originalValue[2]+ |
(transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() : |
(transform.originalValue + |
(transform.targetValue - transform.originalValue) * position).toFixed(3) + |
(transform.unit === null ? '' : transform.unit); |
this.element.setStyle(style, true); |
} |
}); |
Effect.Transform = Class.create({ |
initialize: function(tracks){ |
this.tracks = []; |
this.options = arguments[1] || { }; |
this.addTracks(tracks); |
}, |
addTracks: function(tracks){ |
tracks.each(function(track){ |
track = $H(track); |
var data = track.values().first(); |
this.tracks.push($H({ |
ids: track.keys().first(), |
effect: Effect.Morph, |
options: { style: data } |
})); |
}.bind(this)); |
return this; |
}, |
play: function(){ |
return new Effect.Parallel( |
this.tracks.map(function(track){ |
var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options'); |
var elements = [$(ids) || $$(ids)].flatten(); |
return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) }); |
}).flatten(), |
this.options |
); |
} |
}); |
Element.CSS_PROPERTIES = $w( |
'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + |
'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' + |
'borderRightColor borderRightStyle borderRightWidth borderSpacing ' + |
'borderTopColor borderTopStyle borderTopWidth bottom clip color ' + |
'fontSize fontWeight height left letterSpacing lineHeight ' + |
'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+ |
'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' + |
'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' + |
'right textIndent top width wordSpacing zIndex'); |
Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/; |
String.__parseStyleElement = document.createElement('div'); |
String.prototype.parseStyle = function(){ |
var style, styleRules = $H(); |
if (Prototype.Browser.WebKit) |
style = new Element('div',{style:this}).style; |
else { |
String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>'; |
style = String.__parseStyleElement.childNodes[0].style; |
} |
Element.CSS_PROPERTIES.each(function(property){ |
if (style[property]) styleRules.set(property, style[property]); |
}); |
if (Prototype.Browser.IE && this.include('opacity')) |
styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]); |
return styleRules; |
}; |
if (document.defaultView && document.defaultView.getComputedStyle) { |
Element.getStyles = function(element) { |
var css = document.defaultView.getComputedStyle($(element), null); |
return Element.CSS_PROPERTIES.inject({ }, function(styles, property) { |
styles[property] = css[property]; |
return styles; |
}); |
}; |
} else { |
Element.getStyles = function(element) { |
element = $(element); |
var css = element.currentStyle, styles; |
styles = Element.CSS_PROPERTIES.inject({ }, function(results, property) { |
results[property] = css[property]; |
return results; |
}); |
if (!styles.opacity) styles.opacity = element.getOpacity(); |
return styles; |
}; |
}; |
Effect.Methods = { |
morph: function(element, style) { |
element = $(element); |
new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { })); |
return element; |
}, |
visualEffect: function(element, effect, options) { |
element = $(element) |
var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1); |
new Effect[klass](element, options); |
return element; |
}, |
highlight: function(element, options) { |
element = $(element); |
new Effect.Highlight(element, options); |
return element; |
} |
}; |
$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+ |
'pulsate shake puff squish switchOff dropOut').each( |
function(effect) { |
Effect.Methods[effect] = function(element, options){ |
element = $(element); |
Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options); |
return element; |
} |
} |
); |
$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each( |
function(f) { Effect.Methods[f] = Element[f]; } |
); |
Element.addMethods(Effect.Methods); |
/branches/v2.6-greffoir/vendors/extjs-2.0.1/adapter/prototype/scriptaculous.js |
---|
New file |
0,0 → 1,58 |
// script.aculo.us scriptaculous.js v1.8.1, Thu Jan 03 22:07:12 -0500 2008 |
// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us) |
// |
// Permission is hereby granted, free of charge, to any person obtaining |
// a copy of this software and associated documentation files (the |
// "Software"), to deal in the Software without restriction, including |
// without limitation the rights to use, copy, modify, merge, publish, |
// distribute, sublicense, and/or sell copies of the Software, and to |
// permit persons to whom the Software is furnished to do so, subject to |
// the following conditions: |
// |
// The above copyright notice and this permission notice shall be |
// included in all copies or substantial portions of the Software. |
// |
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE |
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION |
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION |
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
// |
// For details, see the script.aculo.us web site: http://script.aculo.us/ |
var Scriptaculous = { |
Version: '1.8.1', |
require: function(libraryName) { |
// inserting via DOM fails in Safari 2.0, so brute force approach |
document.write('<script type="text/javascript" src="'+libraryName+'"><\/script>'); |
}, |
REQUIRED_PROTOTYPE: '1.6.0', |
load: function() { |
function convertVersionString(versionString){ |
var r = versionString.split('.'); |
return parseInt(r[0])*100000 + parseInt(r[1])*1000 + parseInt(r[2]); |
} |
if((typeof Prototype=='undefined') || |
(typeof Element == 'undefined') || |
(typeof Element.Methods=='undefined') || |
(convertVersionString(Prototype.Version) < |
convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE))) |
throw("script.aculo.us requires the Prototype JavaScript framework >= " + |
Scriptaculous.REQUIRED_PROTOTYPE); |
$A(document.getElementsByTagName("script")).findAll( function(s) { |
return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/)) |
}).each( function(s) { |
var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,''); |
var includes = s.src.match(/\?.*load=([a-z,]*)/); |
(includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each( |
function(include) { Scriptaculous.require(path+include+'.js') }); |
}); |
} |
} |
Scriptaculous.load(); |
/branches/v2.6-greffoir/vendors/extjs-2.0.1/adapter/yui/ext-yui-adapter.js |
---|
New file |
0,0 → 1,10 |
/* |
* Ext JS Library 2.0.2 |
* Copyright(c) 2006-2008, Ext JS, LLC. |
* licensing@extjs.com |
* |
* http://extjs.com/license |
*/ |
Ext={version:"2.0.2"};window["undefined"]=window["undefined"];Ext.apply=function(C,D,B){if(B){Ext.apply(C,B)}if(C&&D&&typeof D=="object"){for(var A in D){C[A]=D[A]}}return C};(function(){var idSeed=0;var ua=navigator.userAgent.toLowerCase();var isStrict=document.compatMode=="CSS1Compat",isOpera=ua.indexOf("opera")>-1,isSafari=(/webkit|khtml/).test(ua),isSafari3=isSafari&&ua.indexOf("webkit/5")!=-1,isIE=!isOpera&&ua.indexOf("msie")>-1,isIE7=!isOpera&&ua.indexOf("msie 7")>-1,isGecko=!isSafari&&ua.indexOf("gecko")>-1,isBorderBox=isIE&&!isStrict,isWindows=(ua.indexOf("windows")!=-1||ua.indexOf("win32")!=-1),isMac=(ua.indexOf("macintosh")!=-1||ua.indexOf("mac os x")!=-1),isAir=(ua.indexOf("adobeair")!=-1),isLinux=(ua.indexOf("linux")!=-1),isSecure=window.location.href.toLowerCase().indexOf("https")===0;if(isIE&&!isIE7){try{document.execCommand("BackgroundImageCache",false,true)}catch(e){}}Ext.apply(Ext,{isStrict:isStrict,isSecure:isSecure,isReady:false,enableGarbageCollector:true,enableListenerCollection:false,SSL_SECURE_URL:"javascript:false",BLANK_IMAGE_URL:"http:/"+"/extjs.com/s.gif",emptyFn:function(){},applyIf:function(o,c){if(o&&c){for(var p in c){if(typeof o[p]=="undefined"){o[p]=c[p]}}}return o},addBehaviors:function(o){if(!Ext.isReady){Ext.onReady(function(){Ext.addBehaviors(o)});return }var cache={};for(var b in o){var parts=b.split("@");if(parts[1]){var s=parts[0];if(!cache[s]){cache[s]=Ext.select(s)}cache[s].on(parts[1],o[b])}}cache=null},id:function(el,prefix){prefix=prefix||"ext-gen";el=Ext.getDom(el);var id=prefix+(++idSeed);return el?(el.id?el.id:(el.id=id)):id},extend:function(){var io=function(o){for(var m in o){this[m]=o[m]}};var oc=Object.prototype.constructor;return function(sb,sp,overrides){if(typeof sp=="object"){overrides=sp;sp=sb;sb=overrides.constructor!=oc?overrides.constructor:function(){sp.apply(this,arguments)}}var F=function(){},sbp,spp=sp.prototype;F.prototype=spp;sbp=sb.prototype=new F();sbp.constructor=sb;sb.superclass=spp;if(spp.constructor==oc){spp.constructor=sp}sb.override=function(o){Ext.override(sb,o)};sbp.override=io;Ext.override(sb,overrides);sb.extend=function(o){Ext.extend(sb,o)};return sb}}(),override:function(origclass,overrides){if(overrides){var p=origclass.prototype;for(var method in overrides){p[method]=overrides[method]}}},namespace:function(){var a=arguments,o=null,i,j,d,rt;for(i=0;i<a.length;++i){d=a[i].split(".");rt=d[0];eval("if (typeof "+rt+" == \"undefined\"){"+rt+" = {};} o = "+rt+";");for(j=1;j<d.length;++j){o[d[j]]=o[d[j]]||{};o=o[d[j]]}}},urlEncode:function(o){if(!o){return""}var buf=[];for(var key in o){var ov=o[key],k=encodeURIComponent(key);var type=typeof ov;if(type=="undefined"){buf.push(k,"=&")}else{if(type!="function"&&type!="object"){buf.push(k,"=",encodeURIComponent(ov),"&")}else{if(Ext.isArray(ov)){if(ov.length){for(var i=0,len=ov.length;i<len;i++){buf.push(k,"=",encodeURIComponent(ov[i]===undefined?"":ov[i]),"&")}}else{buf.push(k,"=&")}}}}}buf.pop();return buf.join("")},urlDecode:function(string,overwrite){if(!string||!string.length){return{}}var obj={};var pairs=string.split("&");var pair,name,value;for(var i=0,len=pairs.length;i<len;i++){pair=pairs[i].split("=");name=decodeURIComponent(pair[0]);value=decodeURIComponent(pair[1]);if(overwrite!==true){if(typeof obj[name]=="undefined"){obj[name]=value}else{if(typeof obj[name]=="string"){obj[name]=[obj[name]];obj[name].push(value)}else{obj[name].push(value)}}}else{obj[name]=value}}return obj},each:function(array,fn,scope){if(typeof array.length=="undefined"||typeof array=="string"){array=[array]}for(var i=0,len=array.length;i<len;i++){if(fn.call(scope||array[i],array[i],i,array)===false){return i}}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(Ext.isArray(a)){r=r.concat(a)}else{if(a.length!==undefined&&!a.substr){r=r.concat(Array.prototype.slice.call(a,0))}else{r.push(a)}}}return r},escapeRe:function(s){return s.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},callback:function(cb,scope,args,delay){if(typeof cb=="function"){if(delay){cb.defer(delay,scope,args||[])}else{cb.apply(scope,args||[])}}},getDom:function(el){if(!el||!document){return null}return el.dom?el.dom:(typeof el=="string"?document.getElementById(el):el)},getDoc:function(){return Ext.get(document)},getBody:function(){return Ext.get(document.body||document.documentElement)},getCmp:function(id){return Ext.ComponentMgr.get(id)},num:function(v,defaultValue){if(typeof v!="number"){return defaultValue}return v},destroy:function(){for(var i=0,a=arguments,len=a.length;i<len;i++){var as=a[i];if(as){if(typeof as.destroy=="function"){as.destroy()}else{if(as.dom){as.removeAllListeners();as.remove()}}}}},removeNode:isIE?function(){var d;return function(n){if(n&&n.tagName!="BODY"){d=d||document.createElement("div");d.appendChild(n);d.innerHTML=""}}}():function(n){if(n&&n.parentNode&&n.tagName!="BODY"){n.parentNode.removeChild(n)}},type:function(o){if(o===undefined||o===null){return false}if(o.htmlElement){return"element"}var t=typeof o;if(t=="object"&&o.nodeName){switch(o.nodeType){case 1:return"element";case 3:return(/\S/).test(o.nodeValue)?"textnode":"whitespace"}}if(t=="object"||t=="function"){switch(o.constructor){case Array:return"array";case RegExp:return"regexp"}if(typeof o.length=="number"&&typeof o.item=="function"){return"nodelist"}}return t},isEmpty:function(v,allowBlank){return v===null||v===undefined||(!allowBlank?v==="":false)},value:function(v,defaultValue,allowBlank){return Ext.isEmpty(v,allowBlank)?defaultValue:v},isArray:function(v){return v&&typeof v.pop=="function"},isDate:function(v){return v&&typeof v.getFullYear=="function"},isOpera:isOpera,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari&&!isSafari3,isIE:isIE,isIE6:isIE&&!isIE7,isIE7:isIE7,isGecko:isGecko,isBorderBox:isBorderBox,isLinux:isLinux,isWindows:isWindows,isMac:isMac,isAir:isAir,useShims:((isIE&&!isIE7)||(isGecko&&isMac))});Ext.ns=Ext.namespace})();Ext.ns("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib","Ext.layout","Ext.app","Ext.ux");Ext.apply(Function.prototype,{createCallback:function(){var A=arguments;var B=this;return function(){return B.apply(window,A)}},createDelegate:function(C,B,A){var D=this;return function(){var F=B||arguments;if(A===true){F=Array.prototype.slice.call(arguments,0);F=F.concat(B)}else{if(typeof A=="number"){F=Array.prototype.slice.call(arguments,0);var E=[A,0].concat(B);Array.prototype.splice.apply(F,E)}}return D.apply(C||window,F)}},defer:function(C,E,B,A){var D=this.createDelegate(E,B,A);if(C){return setTimeout(D,C)}D();return 0},createSequence:function(B,A){if(typeof B!="function"){return this}var C=this;return function(){var D=C.apply(this||window,arguments);B.apply(A||this||window,arguments);return D}},createInterceptor:function(B,A){if(typeof B!="function"){return this}var C=this;return function(){B.target=this;B.method=C;if(B.apply(A||this||window,arguments)===false){return }return C.apply(this||window,arguments)}}});Ext.applyIf(String,{escape:function(A){return A.replace(/('|\\)/g,"\\$1")},leftPad:function(D,B,C){var A=new String(D);if(!C){C=" "}while(A.length<B){A=C+A}return A.toString()},format:function(B){var A=Array.prototype.slice.call(arguments,1);return B.replace(/\{(\d+)\}/g,function(C,D){return A[D]})}});String.prototype.toggle=function(B,A){return this==B?A:B};String.prototype.trim=function(){var A=/^\s+|\s+$/g;return function(){return this.replace(A,"")}}();Ext.applyIf(Number.prototype,{constrain:function(B,A){return Math.min(Math.max(this,B),A)}});Ext.applyIf(Array.prototype,{indexOf:function(C){for(var B=0,A=this.length;B<A;B++){if(this[B]==C){return B}}return -1},remove:function(B){var A=this.indexOf(B);if(A!=-1){this.splice(A,1)}return this}});Date.prototype.getElapsed=function(A){return Math.abs((A||new Date()).getTime()-this.getTime())}; |
if(typeof YAHOO=="undefined"){throw"Unable to load Ext, core YUI utilities (yahoo, dom, event) not found."}(function(){var I=YAHOO.util.Event;var J=YAHOO.util.Dom;var C=YAHOO.util.Connect;var K=YAHOO.util.Easing;var B=YAHOO.util.Anim;var G;Ext.lib.Dom={getViewWidth:function(A){return A?J.getDocumentWidth():J.getViewportWidth()},getViewHeight:function(A){return A?J.getDocumentHeight():J.getViewportHeight()},isAncestor:function(A,D){return J.isAncestor(A,D)},getRegion:function(A){return J.getRegion(A)},getY:function(A){return this.getXY(A)[1]},getX:function(A){return this.getXY(A)[0]},getXY:function(E){var D,O,Q,R,N=(document.body||document.documentElement);E=Ext.getDom(E);if(E==N){return[0,0]}if(E.getBoundingClientRect){Q=E.getBoundingClientRect();R=H(document).getScroll();return[Q.left+R.left,Q.top+R.top]}var S=0,P=0;D=E;var A=H(E).getStyle("position")=="absolute";while(D){S+=D.offsetLeft;P+=D.offsetTop;if(!A&&H(D).getStyle("position")=="absolute"){A=true}if(Ext.isGecko){O=H(D);var T=parseInt(O.getStyle("borderTopWidth"),10)||0;var L=parseInt(O.getStyle("borderLeftWidth"),10)||0;S+=L;P+=T;if(D!=E&&O.getStyle("overflow")!="visible"){S+=L;P+=T}}D=D.offsetParent}if(Ext.isSafari&&A){S-=N.offsetLeft;P-=N.offsetTop}if(Ext.isGecko&&!A){var M=H(N);S+=parseInt(M.getStyle("borderLeftWidth"),10)||0;P+=parseInt(M.getStyle("borderTopWidth"),10)||0}D=E.parentNode;while(D&&D!=N){if(!Ext.isOpera||(D.tagName!="TR"&&H(D).getStyle("display")!="inline")){S-=D.scrollLeft;P-=D.scrollTop}D=D.parentNode}return[S,P]},setXY:function(A,D){A=Ext.fly(A,"_setXY");A.position();var E=A.translatePoints(D);if(D[0]!==false){A.dom.style.left=E.left+"px"}if(D[1]!==false){A.dom.style.top=E.top+"px"}},setX:function(D,A){this.setXY(D,[A,false])},setY:function(A,D){this.setXY(A,[false,D])}};Ext.lib.Event={getPageX:function(A){return I.getPageX(A.browserEvent||A)},getPageY:function(A){return I.getPageY(A.browserEvent||A)},getXY:function(A){return I.getXY(A.browserEvent||A)},getTarget:function(A){return I.getTarget(A.browserEvent||A)},getRelatedTarget:function(A){return I.getRelatedTarget(A.browserEvent||A)},on:function(M,A,L,E,D){I.on(M,A,L,E,D)},un:function(E,A,D){I.removeListener(E,A,D)},purgeElement:function(A){I.purgeElement(A)},preventDefault:function(A){I.preventDefault(A.browserEvent||A)},stopPropagation:function(A){I.stopPropagation(A.browserEvent||A)},stopEvent:function(A){I.stopEvent(A.browserEvent||A)},onAvailable:function(L,E,D,A){return I.onAvailable(L,E,D,A)}};Ext.lib.Ajax={request:function(O,M,A,N,D){if(D){var E=D.headers;if(E){for(var L in E){if(E.hasOwnProperty(L)){C.initHeader(L,E[L],false)}}}if(D.xmlData){C.initHeader("Content-Type","text/xml",false);O="POST";N=D.xmlData}else{if(D.jsonData){C.initHeader("Content-Type","text/javascript",false);O="POST";N=typeof D.jsonData=="object"?Ext.encode(D.jsonData):D.jsonData}}}return C.asyncRequest(O,M,A,N)},formRequest:function(M,L,D,N,A,E){C.setForm(M,A,E);return C.asyncRequest(Ext.getDom(M).method||"POST",L,D,N)},isCallInProgress:function(A){return C.isCallInProgress(A)},abort:function(A){return C.abort(A)},serializeForm:function(A){var D=C.setForm(A.dom||A);C.resetFormState();return D}};Ext.lib.Region=YAHOO.util.Region;Ext.lib.Point=YAHOO.util.Point;Ext.lib.Anim={scroll:function(L,D,M,N,A,E){this.run(L,D,M,N,A,E,YAHOO.util.Scroll)},motion:function(L,D,M,N,A,E){this.run(L,D,M,N,A,E,YAHOO.util.Motion)},color:function(L,D,M,N,A,E){this.run(L,D,M,N,A,E,YAHOO.util.ColorAnim)},run:function(M,D,O,P,A,L,E){E=E||YAHOO.util.Anim;if(typeof P=="string"){P=YAHOO.util.Easing[P]}var N=new E(M,D,O,P);N.animateX(function(){Ext.callback(A,L)});return N}};function H(A){if(!G){G=new Ext.Element.Flyweight()}G.dom=A;return G}if(Ext.isIE){function F(){var A=Function.prototype;delete A.createSequence;delete A.defer;delete A.createDelegate;delete A.createCallback;delete A.createInterceptor;window.detachEvent("onunload",F)}window.attachEvent("onunload",F)}if(YAHOO.util.Anim){YAHOO.util.Anim.prototype.animateX=function(E,A){var D=function(){this.onComplete.unsubscribe(D);if(typeof E=="function"){E.call(A||this,this)}};this.onComplete.subscribe(D,this,true);this.animate()}}if(YAHOO.util.DragDrop&&Ext.dd.DragDrop){YAHOO.util.DragDrop.defaultPadding=Ext.dd.DragDrop.defaultPadding;YAHOO.util.DragDrop.constrainTo=Ext.dd.DragDrop.constrainTo}YAHOO.util.Dom.getXY=function(A){var D=function(E){return Ext.lib.Dom.getXY(E)};return YAHOO.util.Dom.batch(A,D,YAHOO.util.Dom,true)};if(YAHOO.util.AnimMgr){YAHOO.util.AnimMgr.fps=1000}YAHOO.util.Region.prototype.adjust=function(E,D,A,L){this.top+=E;this.left+=D;this.right+=L;this.bottom+=A;return this};YAHOO.util.Region.prototype.constrainTo=function(A){this.top=this.top.constrain(A.top,A.bottom);this.bottom=this.bottom.constrain(A.top,A.bottom);this.left=this.left.constrain(A.left,A.right);this.right=this.right.constrain(A.left,A.right);return this}})(); |
/branches/v2.6-greffoir/vendors/extjs-2.0.1/adapter/yui/yui-utilities.js |
---|
New file |
0,0 → 1,17 |
/* |
Copyright (c) 2007, Yahoo! Inc. All rights reserved. |
Code licensed under the BSD License: |
http://developer.yahoo.net/yui/license.txt |
version: 2.4.1 |
*/ |
if(typeof YAHOO=="undefined"||!YAHOO){var YAHOO={};}YAHOO.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=A[C].split(".");E=YAHOO;for(B=(D[0]=="YAHOO")?1:0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]];}}return E;};YAHOO.log=function(D,A,C){var B=YAHOO.widget.Logger;if(B&&B.log){return B.log(D,A,C);}else{return false;}};YAHOO.register=function(A,E,D){var I=YAHOO.env.modules;if(!I[A]){I[A]={versions:[],builds:[]};}var B=I[A],H=D.version,G=D.build,F=YAHOO.env.listeners;B.name=A;B.version=H;B.build=G;B.versions.push(H);B.builds.push(G);B.mainClass=E;for(var C=0;C<F.length;C=C+1){F[C](B);}if(E){E.VERSION=H;E.BUILD=G;}else{YAHOO.log("mainClass is undefined for module "+A,"warn");}};YAHOO.env=YAHOO.env||{modules:[],listeners:[]};YAHOO.env.getVersion=function(A){return YAHOO.env.modules[A]||null;};YAHOO.env.ua=function(){var C={ie:0,opera:0,gecko:0,webkit:0,mobile:null};var B=navigator.userAgent,A;if((/KHTML/).test(B)){C.webkit=1;}A=B.match(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){C.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){C.mobile="Apple";}else{A=B.match(/NokiaN[^\/]*/);if(A){C.mobile=A[0];}}}if(!C.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){C.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){C.mobile=A[0];}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){C.ie=parseFloat(A[1]);}else{A=B.match(/Gecko\/([^\s]*)/);if(A){C.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){C.gecko=parseFloat(A[1]);}}}}}return C;}();(function(){YAHOO.namespace("util","widget","example");if("undefined"!==typeof YAHOO_config){var B=YAHOO_config.listener,A=YAHOO.env.listeners,D=true,C;if(B){for(C=0;C<A.length;C=C+1){if(A[C]==B){D=false;break;}}if(D){A.push(B);}}}})();YAHOO.lang=YAHOO.lang||{isArray:function(B){if(B){var A=YAHOO.lang;return A.isNumber(B.length)&&A.isFunction(B.splice);}return false;},isBoolean:function(A){return typeof A==="boolean";},isFunction:function(A){return typeof A==="function";},isNull:function(A){return A===null;},isNumber:function(A){return typeof A==="number"&&isFinite(A);},isObject:function(A){return(A&&(typeof A==="object"||YAHOO.lang.isFunction(A)))||false;},isString:function(A){return typeof A==="string";},isUndefined:function(A){return typeof A==="undefined";},hasOwnProperty:function(A,B){if(Object.prototype.hasOwnProperty){return A.hasOwnProperty(B);}return !YAHOO.lang.isUndefined(A[B])&&A.constructor.prototype[B]!==A[B];},_IEEnumFix:function(C,B){if(YAHOO.env.ua.ie){var E=["toString","valueOf"],A;for(A=0;A<E.length;A=A+1){var F=E[A],D=B[F];if(YAHOO.lang.isFunction(D)&&D!=Object.prototype[F]){C[F]=D;}}}},extend:function(D,E,C){if(!E||!D){throw new Error("YAHOO.lang.extend failed, please check that all dependencies are included.");}var B=function(){};B.prototype=E.prototype;D.prototype=new B();D.prototype.constructor=D;D.superclass=E.prototype;if(E.prototype.constructor==Object.prototype.constructor){E.prototype.constructor=E;}if(C){for(var A in C){D.prototype[A]=C[A];}YAHOO.lang._IEEnumFix(D.prototype,C);}},augmentObject:function(E,D){if(!D||!E){throw new Error("Absorb failed, verify dependencies.");}var A=arguments,C,F,B=A[2];if(B&&B!==true){for(C=2;C<A.length;C=C+1){E[A[C]]=D[A[C]];}}else{for(F in D){if(B||!E[F]){E[F]=D[F];}}YAHOO.lang._IEEnumFix(E,D);}},augmentProto:function(D,C){if(!C||!D){throw new Error("Augment failed, verify dependencies.");}var A=[D.prototype,C.prototype];for(var B=2;B<arguments.length;B=B+1){A.push(arguments[B]);}YAHOO.lang.augmentObject.apply(this,A);},dump:function(A,G){var C=YAHOO.lang,D,F,I=[],J="{...}",B="f(){...}",H=", ",E=" => ";if(!C.isObject(A)){return A+"";}else{if(A instanceof Date||("nodeType" in A&&"tagName" in A)){return A;}else{if(C.isFunction(A)){return B;}}}G=(C.isNumber(G))?G:3;if(C.isArray(A)){I.push("[");for(D=0,F=A.length;D<F;D=D+1){if(C.isObject(A[D])){I.push((G>0)?C.dump(A[D],G-1):J);}else{I.push(A[D]);}I.push(H);}if(I.length>1){I.pop();}I.push("]");}else{I.push("{");for(D in A){if(C.hasOwnProperty(A,D)){I.push(D+E);if(C.isObject(A[D])){I.push((G>0)?C.dump(A[D],G-1):J);}else{I.push(A[D]);}I.push(H);}}if(I.length>1){I.pop();}I.push("}");}return I.join("");},substitute:function(Q,B,J){var G,F,E,M,N,P,D=YAHOO.lang,L=[],C,H="dump",K=" ",A="{",O="}";for(;;){G=Q.lastIndexOf(A);if(G<0){break;}F=Q.indexOf(O,G);if(G+1>=F){break;}C=Q.substring(G+1,F);M=C;P=null;E=M.indexOf(K);if(E>-1){P=M.substring(E+1);M=M.substring(0,E);}N=B[M];if(J){N=J(M,N,P);}if(D.isObject(N)){if(D.isArray(N)){N=D.dump(N,parseInt(P,10));}else{P=P||"";var I=P.indexOf(H);if(I>-1){P=P.substring(4);}if(N.toString===Object.prototype.toString||I>-1){N=D.dump(N,parseInt(P,10));}else{N=N.toString();}}}else{if(!D.isString(N)&&!D.isNumber(N)){N="~-"+L.length+"-~";L[L.length]=C;}}Q=Q.substring(0,G)+N+Q.substring(F+1);}for(G=L.length-1;G>=0;G=G-1){Q=Q.replace(new RegExp("~-"+G+"-~"),"{"+L[G]+"}","g");}return Q;},trim:function(A){try{return A.replace(/^\s+|\s+$/g,"");}catch(B){return A;}},merge:function(){var D={},B=arguments;for(var C=0,A=B.length;C<A;C=C+1){YAHOO.lang.augmentObject(D,B[C],true);}return D;},later:function(H,B,I,D,E){H=H||0;B=B||{};var C=I,G=D,F,A;if(YAHOO.lang.isString(I)){C=B[I];}if(!C){throw new TypeError("method undefined");}if(!YAHOO.lang.isArray(G)){G=[D];}F=function(){C.apply(B,G);};A=(E)?setInterval(F,H):setTimeout(F,H);return{interval:E,cancel:function(){if(this.interval){clearInterval(A);}else{clearTimeout(A);}}};},isValue:function(B){var A=YAHOO.lang;return(A.isObject(B)||A.isString(B)||A.isNumber(B)||A.isBoolean(B));}};YAHOO.util.Lang=YAHOO.lang;YAHOO.lang.augment=YAHOO.lang.augmentProto;YAHOO.augment=YAHOO.lang.augmentProto;YAHOO.extend=YAHOO.lang.extend;YAHOO.register("yahoo",YAHOO,{version:"2.4.1",build:"742"});(function(){var B=YAHOO.util,L,J,H=0,K={},F={},N=window.document;var C=YAHOO.env.ua.opera,M=YAHOO.env.ua.webkit,A=YAHOO.env.ua.gecko,G=YAHOO.env.ua.ie;var E={HYPHEN:/(-[a-z])/i,ROOT_TAG:/^body|html$/i};var O=function(Q){if(!E.HYPHEN.test(Q)){return Q;}if(K[Q]){return K[Q];}var R=Q;while(E.HYPHEN.exec(R)){R=R.replace(RegExp.$1,RegExp.$1.substr(1).toUpperCase());}K[Q]=R;return R;};var P=function(R){var Q=F[R];if(!Q){Q=new RegExp("(?:^|\\s+)"+R+"(?:\\s+|$)");F[R]=Q;}return Q;};if(N.defaultView&&N.defaultView.getComputedStyle){L=function(Q,T){var S=null;if(T=="float"){T="cssFloat";}var R=N.defaultView.getComputedStyle(Q,"");if(R){S=R[O(T)];}return Q.style[T]||S;};}else{if(N.documentElement.currentStyle&&G){L=function(Q,S){switch(O(S)){case"opacity":var U=100;try{U=Q.filters["DXImageTransform.Microsoft.Alpha"].opacity;}catch(T){try{U=Q.filters("alpha").opacity;}catch(T){}}return U/100;case"float":S="styleFloat";default:var R=Q.currentStyle?Q.currentStyle[S]:null;return(Q.style[S]||R);}};}else{L=function(Q,R){return Q.style[R];};}}if(G){J=function(Q,R,S){switch(R){case"opacity":if(YAHOO.lang.isString(Q.style.filter)){Q.style.filter="alpha(opacity="+S*100+")";if(!Q.currentStyle||!Q.currentStyle.hasLayout){Q.style.zoom=1;}}break;case"float":R="styleFloat";default:Q.style[R]=S;}};}else{J=function(Q,R,S){if(R=="float"){R="cssFloat";}Q.style[R]=S;};}var D=function(Q,R){return Q&&Q.nodeType==1&&(!R||R(Q));};YAHOO.util.Dom={get:function(S){if(S&&(S.tagName||S.item)){return S;}if(YAHOO.lang.isString(S)||!S){return N.getElementById(S);}if(S.length!==undefined){var T=[];for(var R=0,Q=S.length;R<Q;++R){T[T.length]=B.Dom.get(S[R]);}return T;}return S;},getStyle:function(Q,S){S=O(S);var R=function(T){return L(T,S);};return B.Dom.batch(Q,R,B.Dom,true);},setStyle:function(Q,S,T){S=O(S);var R=function(U){J(U,S,T);};B.Dom.batch(Q,R,B.Dom,true);},getXY:function(Q){var R=function(S){if((S.parentNode===null||S.offsetParent===null||this.getStyle(S,"display")=="none")&&S!=S.ownerDocument.body){return false;}return I(S);};return B.Dom.batch(Q,R,B.Dom,true);},getX:function(Q){var R=function(S){return B.Dom.getXY(S)[0];};return B.Dom.batch(Q,R,B.Dom,true);},getY:function(Q){var R=function(S){return B.Dom.getXY(S)[1];};return B.Dom.batch(Q,R,B.Dom,true);},setXY:function(Q,T,S){var R=function(W){var V=this.getStyle(W,"position");if(V=="static"){this.setStyle(W,"position","relative");V="relative";}var Y=this.getXY(W);if(Y===false){return false;}var X=[parseInt(this.getStyle(W,"left"),10),parseInt(this.getStyle(W,"top"),10)];if(isNaN(X[0])){X[0]=(V=="relative")?0:W.offsetLeft;}if(isNaN(X[1])){X[1]=(V=="relative")?0:W.offsetTop;}if(T[0]!==null){W.style.left=T[0]-Y[0]+X[0]+"px";}if(T[1]!==null){W.style.top=T[1]-Y[1]+X[1]+"px";}if(!S){var U=this.getXY(W);if((T[0]!==null&&U[0]!=T[0])||(T[1]!==null&&U[1]!=T[1])){this.setXY(W,T,true);}}};B.Dom.batch(Q,R,B.Dom,true);},setX:function(R,Q){B.Dom.setXY(R,[Q,null]);},setY:function(Q,R){B.Dom.setXY(Q,[null,R]);},getRegion:function(Q){var R=function(S){if((S.parentNode===null||S.offsetParent===null||this.getStyle(S,"display")=="none")&&S!=N.body){return false;}var T=B.Region.getRegion(S);return T;};return B.Dom.batch(Q,R,B.Dom,true);},getClientWidth:function(){return B.Dom.getViewportWidth();},getClientHeight:function(){return B.Dom.getViewportHeight();},getElementsByClassName:function(U,Y,V,W){Y=Y||"*";V=(V)?B.Dom.get(V):null||N;if(!V){return[];}var R=[],Q=V.getElementsByTagName(Y),X=P(U);for(var S=0,T=Q.length;S<T;++S){if(X.test(Q[S].className)){R[R.length]=Q[S];if(W){W.call(Q[S],Q[S]);}}}return R;},hasClass:function(S,R){var Q=P(R);var T=function(U){return Q.test(U.className);};return B.Dom.batch(S,T,B.Dom,true);},addClass:function(R,Q){var S=function(T){if(this.hasClass(T,Q)){return false;}T.className=YAHOO.lang.trim([T.className,Q].join(" "));return true;};return B.Dom.batch(R,S,B.Dom,true);},removeClass:function(S,R){var Q=P(R);var T=function(U){if(!this.hasClass(U,R)){return false;}var V=U.className;U.className=V.replace(Q," ");if(this.hasClass(U,R)){this.removeClass(U,R);}U.className=YAHOO.lang.trim(U.className);return true;};return B.Dom.batch(S,T,B.Dom,true);},replaceClass:function(T,R,Q){if(!Q||R===Q){return false;}var S=P(R);var U=function(V){if(!this.hasClass(V,R)){this.addClass(V,Q);return true;}V.className=V.className.replace(S," "+Q+" ");if(this.hasClass(V,R)){this.replaceClass(V,R,Q);}V.className=YAHOO.lang.trim(V.className);return true;};return B.Dom.batch(T,U,B.Dom,true);},generateId:function(Q,S){S=S||"yui-gen";var R=function(T){if(T&&T.id){return T.id;}var U=S+H++;if(T){T.id=U;}return U;};return B.Dom.batch(Q,R,B.Dom,true)||R.apply(B.Dom,arguments);},isAncestor:function(Q,R){Q=B.Dom.get(Q);R=B.Dom.get(R);if(!Q||!R){return false;}if(Q.contains&&R.nodeType&&!M){return Q.contains(R);}else{if(Q.compareDocumentPosition&&R.nodeType){return !!(Q.compareDocumentPosition(R)&16);}else{if(R.nodeType){return !!this.getAncestorBy(R,function(S){return S==Q;});}}}return false;},inDocument:function(Q){return this.isAncestor(N.documentElement,Q);},getElementsBy:function(X,R,S,U){R=R||"*";S=(S)?B.Dom.get(S):null||N;if(!S){return[];}var T=[],W=S.getElementsByTagName(R);for(var V=0,Q=W.length;V<Q;++V){if(X(W[V])){T[T.length]=W[V];if(U){U(W[V]);}}}return T;},batch:function(U,X,W,S){U=(U&&(U.tagName||U.item))?U:B.Dom.get(U);if(!U||!X){return false;}var T=(S)?W:window;if(U.tagName||U.length===undefined){return X.call(T,U,W);}var V=[];for(var R=0,Q=U.length;R<Q;++R){V[V.length]=X.call(T,U[R],W);}return V;},getDocumentHeight:function(){var R=(N.compatMode!="CSS1Compat")?N.body.scrollHeight:N.documentElement.scrollHeight;var Q=Math.max(R,B.Dom.getViewportHeight());return Q;},getDocumentWidth:function(){var R=(N.compatMode!="CSS1Compat")?N.body.scrollWidth:N.documentElement.scrollWidth;var Q=Math.max(R,B.Dom.getViewportWidth());return Q;},getViewportHeight:function(){var Q=self.innerHeight;var R=N.compatMode;if((R||G)&&!C){Q=(R=="CSS1Compat")?N.documentElement.clientHeight:N.body.clientHeight; |
}return Q;},getViewportWidth:function(){var Q=self.innerWidth;var R=N.compatMode;if(R||G){Q=(R=="CSS1Compat")?N.documentElement.clientWidth:N.body.clientWidth;}return Q;},getAncestorBy:function(Q,R){while(Q=Q.parentNode){if(D(Q,R)){return Q;}}return null;},getAncestorByClassName:function(R,Q){R=B.Dom.get(R);if(!R){return null;}var S=function(T){return B.Dom.hasClass(T,Q);};return B.Dom.getAncestorBy(R,S);},getAncestorByTagName:function(R,Q){R=B.Dom.get(R);if(!R){return null;}var S=function(T){return T.tagName&&T.tagName.toUpperCase()==Q.toUpperCase();};return B.Dom.getAncestorBy(R,S);},getPreviousSiblingBy:function(Q,R){while(Q){Q=Q.previousSibling;if(D(Q,R)){return Q;}}return null;},getPreviousSibling:function(Q){Q=B.Dom.get(Q);if(!Q){return null;}return B.Dom.getPreviousSiblingBy(Q);},getNextSiblingBy:function(Q,R){while(Q){Q=Q.nextSibling;if(D(Q,R)){return Q;}}return null;},getNextSibling:function(Q){Q=B.Dom.get(Q);if(!Q){return null;}return B.Dom.getNextSiblingBy(Q);},getFirstChildBy:function(Q,S){var R=(D(Q.firstChild,S))?Q.firstChild:null;return R||B.Dom.getNextSiblingBy(Q.firstChild,S);},getFirstChild:function(Q,R){Q=B.Dom.get(Q);if(!Q){return null;}return B.Dom.getFirstChildBy(Q);},getLastChildBy:function(Q,S){if(!Q){return null;}var R=(D(Q.lastChild,S))?Q.lastChild:null;return R||B.Dom.getPreviousSiblingBy(Q.lastChild,S);},getLastChild:function(Q){Q=B.Dom.get(Q);return B.Dom.getLastChildBy(Q);},getChildrenBy:function(R,T){var S=B.Dom.getFirstChildBy(R,T);var Q=S?[S]:[];B.Dom.getNextSiblingBy(S,function(U){if(!T||T(U)){Q[Q.length]=U;}return false;});return Q;},getChildren:function(Q){Q=B.Dom.get(Q);if(!Q){}return B.Dom.getChildrenBy(Q);},getDocumentScrollLeft:function(Q){Q=Q||N;return Math.max(Q.documentElement.scrollLeft,Q.body.scrollLeft);},getDocumentScrollTop:function(Q){Q=Q||N;return Math.max(Q.documentElement.scrollTop,Q.body.scrollTop);},insertBefore:function(R,Q){R=B.Dom.get(R);Q=B.Dom.get(Q);if(!R||!Q||!Q.parentNode){return null;}return Q.parentNode.insertBefore(R,Q);},insertAfter:function(R,Q){R=B.Dom.get(R);Q=B.Dom.get(Q);if(!R||!Q||!Q.parentNode){return null;}if(Q.nextSibling){return Q.parentNode.insertBefore(R,Q.nextSibling);}else{return Q.parentNode.appendChild(R);}},getClientRegion:function(){var S=B.Dom.getDocumentScrollTop(),R=B.Dom.getDocumentScrollLeft(),T=B.Dom.getViewportWidth()+R,Q=B.Dom.getViewportHeight()+S;return new B.Region(S,T,Q,R);}};var I=function(){if(N.documentElement.getBoundingClientRect){return function(R){var S=R.getBoundingClientRect();var Q=R.ownerDocument;return[S.left+B.Dom.getDocumentScrollLeft(Q),S.top+B.Dom.getDocumentScrollTop(Q)];};}else{return function(S){var T=[S.offsetLeft,S.offsetTop];var R=S.offsetParent;var Q=(M&&B.Dom.getStyle(S,"position")=="absolute"&&S.offsetParent==S.ownerDocument.body);if(R!=S){while(R){T[0]+=R.offsetLeft;T[1]+=R.offsetTop;if(!Q&&M&&B.Dom.getStyle(R,"position")=="absolute"){Q=true;}R=R.offsetParent;}}if(Q){T[0]-=S.ownerDocument.body.offsetLeft;T[1]-=S.ownerDocument.body.offsetTop;}R=S.parentNode;while(R.tagName&&!E.ROOT_TAG.test(R.tagName)){if(B.Dom.getStyle(R,"display").search(/^inline|table-row.*$/i)){T[0]-=R.scrollLeft;T[1]-=R.scrollTop;}R=R.parentNode;}return T;};}}();})();YAHOO.util.Region=function(C,D,A,B){this.top=C;this[1]=C;this.right=D;this.bottom=A;this.left=B;this[0]=B;};YAHOO.util.Region.prototype.contains=function(A){return(A.left>=this.left&&A.right<=this.right&&A.top>=this.top&&A.bottom<=this.bottom);};YAHOO.util.Region.prototype.getArea=function(){return((this.bottom-this.top)*(this.right-this.left));};YAHOO.util.Region.prototype.intersect=function(E){var C=Math.max(this.top,E.top);var D=Math.min(this.right,E.right);var A=Math.min(this.bottom,E.bottom);var B=Math.max(this.left,E.left);if(A>=C&&D>=B){return new YAHOO.util.Region(C,D,A,B);}else{return null;}};YAHOO.util.Region.prototype.union=function(E){var C=Math.min(this.top,E.top);var D=Math.max(this.right,E.right);var A=Math.max(this.bottom,E.bottom);var B=Math.min(this.left,E.left);return new YAHOO.util.Region(C,D,A,B);};YAHOO.util.Region.prototype.toString=function(){return("Region {top: "+this.top+", right: "+this.right+", bottom: "+this.bottom+", left: "+this.left+"}");};YAHOO.util.Region.getRegion=function(D){var F=YAHOO.util.Dom.getXY(D);var C=F[1];var E=F[0]+D.offsetWidth;var A=F[1]+D.offsetHeight;var B=F[0];return new YAHOO.util.Region(C,E,A,B);};YAHOO.util.Point=function(A,B){if(YAHOO.lang.isArray(A)){B=A[1];A=A[0];}this.x=this.right=this.left=this[0]=A;this.y=this.top=this.bottom=this[1]=B;};YAHOO.util.Point.prototype=new YAHOO.util.Region();YAHOO.register("dom",YAHOO.util.Dom,{version:"2.4.1",build:"742"});YAHOO.util.CustomEvent=function(D,B,C,A){this.type=D;this.scope=B||window;this.silent=C;this.signature=A||YAHOO.util.CustomEvent.LIST;this.subscribers=[];if(!this.silent){}var E="_YUICEOnSubscribe";if(D!==E){this.subscribeEvent=new YAHOO.util.CustomEvent(E,this,true);}this.lastError=null;};YAHOO.util.CustomEvent.LIST=0;YAHOO.util.CustomEvent.FLAT=1;YAHOO.util.CustomEvent.prototype={subscribe:function(B,C,A){if(!B){throw new Error("Invalid callback for subscriber to '"+this.type+"'");}if(this.subscribeEvent){this.subscribeEvent.fire(B,C,A);}this.subscribers.push(new YAHOO.util.Subscriber(B,C,A));},unsubscribe:function(D,F){if(!D){return this.unsubscribeAll();}var E=false;for(var B=0,A=this.subscribers.length;B<A;++B){var C=this.subscribers[B];if(C&&C.contains(D,F)){this._delete(B);E=true;}}return E;},fire:function(){var D=this.subscribers.length;if(!D&&this.silent){return true;}var H=[],F=true,C,I=false;for(C=0;C<arguments.length;++C){H.push(arguments[C]);}if(!this.silent){}for(C=0;C<D;++C){var L=this.subscribers[C];if(!L){I=true;}else{if(!this.silent){}var K=L.getScope(this.scope);if(this.signature==YAHOO.util.CustomEvent.FLAT){var A=null;if(H.length>0){A=H[0];}try{F=L.fn.call(K,A,L.obj);}catch(E){this.lastError=E;}}else{try{F=L.fn.call(K,this.type,H,L.obj);}catch(G){this.lastError=G;}}if(false===F){if(!this.silent){}return false;}}}if(I){var J=[],B=this.subscribers;for(C=0,D=B.length;C<D;C=C+1){J.push(B[C]);}this.subscribers=J;}return true;},unsubscribeAll:function(){for(var B=0,A=this.subscribers.length;B<A;++B){this._delete(A-1-B);}this.subscribers=[];return B;},_delete:function(A){var B=this.subscribers[A];if(B){delete B.fn;delete B.obj;}this.subscribers[A]=null;},toString:function(){return"CustomEvent: '"+this.type+"', scope: "+this.scope;}};YAHOO.util.Subscriber=function(B,C,A){this.fn=B;this.obj=YAHOO.lang.isUndefined(C)?null:C;this.override=A;};YAHOO.util.Subscriber.prototype.getScope=function(A){if(this.override){if(this.override===true){return this.obj;}else{return this.override;}}return A;};YAHOO.util.Subscriber.prototype.contains=function(A,B){if(B){return(this.fn==A&&this.obj==B);}else{return(this.fn==A);}};YAHOO.util.Subscriber.prototype.toString=function(){return"Subscriber { obj: "+this.obj+", override: "+(this.override||"no")+" }";};if(!YAHOO.util.Event){YAHOO.util.Event=function(){var H=false;var I=[];var J=[];var G=[];var E=[];var C=0;var F=[];var B=[];var A=0;var D={63232:38,63233:40,63234:37,63235:39,63276:33,63277:34,25:9};return{POLL_RETRYS:4000,POLL_INTERVAL:10,EL:0,TYPE:1,FN:2,WFN:3,UNLOAD_OBJ:3,ADJ_SCOPE:4,OBJ:5,OVERRIDE:6,lastError:null,isSafari:YAHOO.env.ua.webkit,webkit:YAHOO.env.ua.webkit,isIE:YAHOO.env.ua.ie,_interval:null,_dri:null,DOMReady:false,startInterval:function(){if(!this._interval){var K=this;var L=function(){K._tryPreloadAttach();};this._interval=setInterval(L,this.POLL_INTERVAL);}},onAvailable:function(P,M,Q,O,N){var K=(YAHOO.lang.isString(P))?[P]:P;for(var L=0;L<K.length;L=L+1){F.push({id:K[L],fn:M,obj:Q,override:O,checkReady:N});}C=this.POLL_RETRYS;this.startInterval();},onContentReady:function(M,K,N,L){this.onAvailable(M,K,N,L,true);},onDOMReady:function(K,M,L){if(this.DOMReady){setTimeout(function(){var N=window;if(L){if(L===true){N=M;}else{N=L;}}K.call(N,"DOMReady",[],M);},0);}else{this.DOMReadyEvent.subscribe(K,M,L);}},addListener:function(M,K,V,Q,L){if(!V||!V.call){return false;}if(this._isValidCollection(M)){var W=true;for(var R=0,T=M.length;R<T;++R){W=this.on(M[R],K,V,Q,L)&&W;}return W;}else{if(YAHOO.lang.isString(M)){var P=this.getEl(M);if(P){M=P;}else{this.onAvailable(M,function(){YAHOO.util.Event.on(M,K,V,Q,L);});return true;}}}if(!M){return false;}if("unload"==K&&Q!==this){J[J.length]=[M,K,V,Q,L];return true;}var Y=M;if(L){if(L===true){Y=Q;}else{Y=L;}}var N=function(Z){return V.call(Y,YAHOO.util.Event.getEvent(Z,M),Q);};var X=[M,K,V,N,Y,Q,L];var S=I.length;I[S]=X;if(this.useLegacyEvent(M,K)){var O=this.getLegacyIndex(M,K);if(O==-1||M!=G[O][0]){O=G.length;B[M.id+K]=O;G[O]=[M,K,M["on"+K]];E[O]=[];M["on"+K]=function(Z){YAHOO.util.Event.fireLegacyEvent(YAHOO.util.Event.getEvent(Z),O);};}E[O].push(X);}else{try{this._simpleAdd(M,K,N,false);}catch(U){this.lastError=U;this.removeListener(M,K,V);return false;}}return true;},fireLegacyEvent:function(O,M){var Q=true,K,S,R,T,P;S=E[M];for(var L=0,N=S.length;L<N;++L){R=S[L];if(R&&R[this.WFN]){T=R[this.ADJ_SCOPE];P=R[this.WFN].call(T,O);Q=(Q&&P);}}K=G[M];if(K&&K[2]){K[2](O);}return Q;},getLegacyIndex:function(L,M){var K=this.generateId(L)+M;if(typeof B[K]=="undefined"){return -1;}else{return B[K];}},useLegacyEvent:function(L,M){if(this.webkit&&("click"==M||"dblclick"==M)){var K=parseInt(this.webkit,10);if(!isNaN(K)&&K<418){return true;}}return false;},removeListener:function(L,K,T){var O,R,V;if(typeof L=="string"){L=this.getEl(L);}else{if(this._isValidCollection(L)){var U=true;for(O=0,R=L.length;O<R;++O){U=(this.removeListener(L[O],K,T)&&U);}return U;}}if(!T||!T.call){return this.purgeElement(L,false,K);}if("unload"==K){for(O=0,R=J.length;O<R;O++){V=J[O];if(V&&V[0]==L&&V[1]==K&&V[2]==T){J[O]=null;return true;}}return false;}var P=null;var Q=arguments[3];if("undefined"===typeof Q){Q=this._getCacheIndex(L,K,T);}if(Q>=0){P=I[Q];}if(!L||!P){return false;}if(this.useLegacyEvent(L,K)){var N=this.getLegacyIndex(L,K);var M=E[N];if(M){for(O=0,R=M.length;O<R;++O){V=M[O];if(V&&V[this.EL]==L&&V[this.TYPE]==K&&V[this.FN]==T){M[O]=null;break;}}}}else{try{this._simpleRemove(L,K,P[this.WFN],false);}catch(S){this.lastError=S;return false;}}delete I[Q][this.WFN];delete I[Q][this.FN];I[Q]=null;return true;},getTarget:function(M,L){var K=M.target||M.srcElement;return this.resolveTextNode(K);},resolveTextNode:function(K){if(K&&3==K.nodeType){return K.parentNode;}else{return K;}},getPageX:function(L){var K=L.pageX;if(!K&&0!==K){K=L.clientX||0;if(this.isIE){K+=this._getScrollLeft();}}return K;},getPageY:function(K){var L=K.pageY;if(!L&&0!==L){L=K.clientY||0;if(this.isIE){L+=this._getScrollTop();}}return L;},getXY:function(K){return[this.getPageX(K),this.getPageY(K)]; |
},getRelatedTarget:function(L){var K=L.relatedTarget;if(!K){if(L.type=="mouseout"){K=L.toElement;}else{if(L.type=="mouseover"){K=L.fromElement;}}}return this.resolveTextNode(K);},getTime:function(M){if(!M.time){var L=new Date().getTime();try{M.time=L;}catch(K){this.lastError=K;return L;}}return M.time;},stopEvent:function(K){this.stopPropagation(K);this.preventDefault(K);},stopPropagation:function(K){if(K.stopPropagation){K.stopPropagation();}else{K.cancelBubble=true;}},preventDefault:function(K){if(K.preventDefault){K.preventDefault();}else{K.returnValue=false;}},getEvent:function(M,K){var L=M||window.event;if(!L){var N=this.getEvent.caller;while(N){L=N.arguments[0];if(L&&Event==L.constructor){break;}N=N.caller;}}return L;},getCharCode:function(L){var K=L.keyCode||L.charCode||0;if(YAHOO.env.ua.webkit&&(K in D)){K=D[K];}return K;},_getCacheIndex:function(O,P,N){for(var M=0,L=I.length;M<L;++M){var K=I[M];if(K&&K[this.FN]==N&&K[this.EL]==O&&K[this.TYPE]==P){return M;}}return -1;},generateId:function(K){var L=K.id;if(!L){L="yuievtautoid-"+A;++A;K.id=L;}return L;},_isValidCollection:function(L){try{return(L&&typeof L!=="string"&&L.length&&!L.tagName&&!L.alert&&typeof L[0]!=="undefined");}catch(K){return false;}},elCache:{},getEl:function(K){return(typeof K==="string")?document.getElementById(K):K;},clearCache:function(){},DOMReadyEvent:new YAHOO.util.CustomEvent("DOMReady",this),_load:function(L){if(!H){H=true;var K=YAHOO.util.Event;K._ready();K._tryPreloadAttach();}},_ready:function(L){var K=YAHOO.util.Event;if(!K.DOMReady){K.DOMReady=true;K.DOMReadyEvent.fire();K._simpleRemove(document,"DOMContentLoaded",K._ready);}},_tryPreloadAttach:function(){if(this.locked){return false;}if(this.isIE){if(!this.DOMReady){this.startInterval();return false;}}this.locked=true;var P=!H;if(!P){P=(C>0);}var O=[];var Q=function(S,T){var R=S;if(T.override){if(T.override===true){R=T.obj;}else{R=T.override;}}T.fn.call(R,T.obj);};var L,K,N,M;for(L=0,K=F.length;L<K;++L){N=F[L];if(N&&!N.checkReady){M=this.getEl(N.id);if(M){Q(M,N);F[L]=null;}else{O.push(N);}}}for(L=0,K=F.length;L<K;++L){N=F[L];if(N&&N.checkReady){M=this.getEl(N.id);if(M){if(H||M.nextSibling){Q(M,N);F[L]=null;}}else{O.push(N);}}}C=(O.length===0)?0:C-1;if(P){this.startInterval();}else{clearInterval(this._interval);this._interval=null;}this.locked=false;return true;},purgeElement:function(O,P,R){var M=(YAHOO.lang.isString(O))?this.getEl(O):O;var Q=this.getListeners(M,R),N,K;if(Q){for(N=0,K=Q.length;N<K;++N){var L=Q[N];this.removeListener(M,L.type,L.fn,L.index);}}if(P&&M&&M.childNodes){for(N=0,K=M.childNodes.length;N<K;++N){this.purgeElement(M.childNodes[N],P,R);}}},getListeners:function(M,K){var P=[],L;if(!K){L=[I,J];}else{if(K==="unload"){L=[J];}else{L=[I];}}var R=(YAHOO.lang.isString(M))?this.getEl(M):M;for(var O=0;O<L.length;O=O+1){var T=L[O];if(T&&T.length>0){for(var Q=0,S=T.length;Q<S;++Q){var N=T[Q];if(N&&N[this.EL]===R&&(!K||K===N[this.TYPE])){P.push({type:N[this.TYPE],fn:N[this.FN],obj:N[this.OBJ],adjust:N[this.OVERRIDE],scope:N[this.ADJ_SCOPE],index:Q});}}}}return(P.length)?P:null;},_unload:function(R){var Q=YAHOO.util.Event,O,N,L,K,M;for(O=0,K=J.length;O<K;++O){L=J[O];if(L){var P=window;if(L[Q.ADJ_SCOPE]){if(L[Q.ADJ_SCOPE]===true){P=L[Q.UNLOAD_OBJ];}else{P=L[Q.ADJ_SCOPE];}}L[Q.FN].call(P,Q.getEvent(R,L[Q.EL]),L[Q.UNLOAD_OBJ]);J[O]=null;L=null;P=null;}}J=null;if(YAHOO.env.ua.ie&&I&&I.length>0){N=I.length;while(N){M=N-1;L=I[M];if(L){Q.removeListener(L[Q.EL],L[Q.TYPE],L[Q.FN],M);}N--;}L=null;}G=null;Q._simpleRemove(window,"unload",Q._unload);},_getScrollLeft:function(){return this._getScroll()[1];},_getScrollTop:function(){return this._getScroll()[0];},_getScroll:function(){var K=document.documentElement,L=document.body;if(K&&(K.scrollTop||K.scrollLeft)){return[K.scrollTop,K.scrollLeft];}else{if(L){return[L.scrollTop,L.scrollLeft];}else{return[0,0];}}},regCE:function(){},_simpleAdd:function(){if(window.addEventListener){return function(M,N,L,K){M.addEventListener(N,L,(K));};}else{if(window.attachEvent){return function(M,N,L,K){M.attachEvent("on"+N,L);};}else{return function(){};}}}(),_simpleRemove:function(){if(window.removeEventListener){return function(M,N,L,K){M.removeEventListener(N,L,(K));};}else{if(window.detachEvent){return function(L,M,K){L.detachEvent("on"+M,K);};}else{return function(){};}}}()};}();(function(){var A=YAHOO.util.Event;A.on=A.addListener;if(A.isIE){YAHOO.util.Event.onDOMReady(YAHOO.util.Event._tryPreloadAttach,YAHOO.util.Event,true);A._dri=setInterval(function(){var C=document.createElement("p");try{C.doScroll("left");clearInterval(A._dri);A._dri=null;A._ready();C=null;}catch(B){C=null;}},A.POLL_INTERVAL);}else{if(A.webkit){A._dri=setInterval(function(){var B=document.readyState;if("loaded"==B||"complete"==B){clearInterval(A._dri);A._dri=null;A._ready();}},A.POLL_INTERVAL);}else{A._simpleAdd(document,"DOMContentLoaded",A._ready);}}A._simpleAdd(window,"load",A._load);A._simpleAdd(window,"unload",A._unload);A._tryPreloadAttach();})();}YAHOO.util.EventProvider=function(){};YAHOO.util.EventProvider.prototype={__yui_events:null,__yui_subscribers:null,subscribe:function(A,C,F,E){this.__yui_events=this.__yui_events||{};var D=this.__yui_events[A];if(D){D.subscribe(C,F,E);}else{this.__yui_subscribers=this.__yui_subscribers||{};var B=this.__yui_subscribers;if(!B[A]){B[A]=[];}B[A].push({fn:C,obj:F,override:E});}},unsubscribe:function(C,E,G){this.__yui_events=this.__yui_events||{};var A=this.__yui_events;if(C){var F=A[C];if(F){return F.unsubscribe(E,G);}}else{var B=true;for(var D in A){if(YAHOO.lang.hasOwnProperty(A,D)){B=B&&A[D].unsubscribe(E,G);}}return B;}return false;},unsubscribeAll:function(A){return this.unsubscribe(A);},createEvent:function(G,D){this.__yui_events=this.__yui_events||{};var A=D||{};var I=this.__yui_events;if(I[G]){}else{var H=A.scope||this;var E=(A.silent);var B=new YAHOO.util.CustomEvent(G,H,E,YAHOO.util.CustomEvent.FLAT);I[G]=B;if(A.onSubscribeCallback){B.subscribeEvent.subscribe(A.onSubscribeCallback);}this.__yui_subscribers=this.__yui_subscribers||{}; |
var F=this.__yui_subscribers[G];if(F){for(var C=0;C<F.length;++C){B.subscribe(F[C].fn,F[C].obj,F[C].override);}}}return I[G];},fireEvent:function(E,D,A,C){this.__yui_events=this.__yui_events||{};var G=this.__yui_events[E];if(!G){return null;}var B=[];for(var F=1;F<arguments.length;++F){B.push(arguments[F]);}return G.fire.apply(G,B);},hasEvent:function(A){if(this.__yui_events){if(this.__yui_events[A]){return true;}}return false;}};YAHOO.util.KeyListener=function(A,F,B,C){if(!A){}else{if(!F){}else{if(!B){}}}if(!C){C=YAHOO.util.KeyListener.KEYDOWN;}var D=new YAHOO.util.CustomEvent("keyPressed");this.enabledEvent=new YAHOO.util.CustomEvent("enabled");this.disabledEvent=new YAHOO.util.CustomEvent("disabled");if(typeof A=="string"){A=document.getElementById(A);}if(typeof B=="function"){D.subscribe(B);}else{D.subscribe(B.fn,B.scope,B.correctScope);}function E(J,I){if(!F.shift){F.shift=false;}if(!F.alt){F.alt=false;}if(!F.ctrl){F.ctrl=false;}if(J.shiftKey==F.shift&&J.altKey==F.alt&&J.ctrlKey==F.ctrl){var G;if(F.keys instanceof Array){for(var H=0;H<F.keys.length;H++){G=F.keys[H];if(G==J.charCode){D.fire(J.charCode,J);break;}else{if(G==J.keyCode){D.fire(J.keyCode,J);break;}}}}else{G=F.keys;if(G==J.charCode){D.fire(J.charCode,J);}else{if(G==J.keyCode){D.fire(J.keyCode,J);}}}}}this.enable=function(){if(!this.enabled){YAHOO.util.Event.addListener(A,C,E);this.enabledEvent.fire(F);}this.enabled=true;};this.disable=function(){if(this.enabled){YAHOO.util.Event.removeListener(A,C,E);this.disabledEvent.fire(F);}this.enabled=false;};this.toString=function(){return"KeyListener ["+F.keys+"] "+A.tagName+(A.id?"["+A.id+"]":"");};};YAHOO.util.KeyListener.KEYDOWN="keydown";YAHOO.util.KeyListener.KEYUP="keyup";YAHOO.util.KeyListener.KEY={ALT:18,BACK_SPACE:8,CAPS_LOCK:20,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,LEFT:37,META:224,NUM_LOCK:144,PAGE_DOWN:34,PAGE_UP:33,PAUSE:19,PRINTSCREEN:44,RIGHT:39,SCROLL_LOCK:145,SHIFT:16,SPACE:32,TAB:9,UP:38};YAHOO.register("event",YAHOO.util.Event,{version:"2.4.1",build:"742"});YAHOO.util.Connect={_msxml_progid:["Microsoft.XMLHTTP","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP"],_http_headers:{},_has_http_headers:false,_use_default_post_header:true,_default_post_header:"application/x-www-form-urlencoded; charset=UTF-8",_default_form_header:"application/x-www-form-urlencoded",_use_default_xhr_header:true,_default_xhr_header:"XMLHttpRequest",_has_default_headers:true,_default_headers:{},_isFormSubmit:false,_isFileUpload:false,_formNode:null,_sFormData:null,_poll:{},_timeOut:{},_polling_interval:50,_transaction_id:0,_submitElementValue:null,_hasSubmitListener:(function(){if(YAHOO.util.Event){YAHOO.util.Event.addListener(document,"click",function(B){var A=YAHOO.util.Event.getTarget(B);if(A.type&&A.type.toLowerCase()=="submit"){YAHOO.util.Connect._submitElementValue=encodeURIComponent(A.name)+"="+encodeURIComponent(A.value);}});return true;}return false;})(),startEvent:new YAHOO.util.CustomEvent("start"),completeEvent:new YAHOO.util.CustomEvent("complete"),successEvent:new YAHOO.util.CustomEvent("success"),failureEvent:new YAHOO.util.CustomEvent("failure"),uploadEvent:new YAHOO.util.CustomEvent("upload"),abortEvent:new YAHOO.util.CustomEvent("abort"),_customEvents:{onStart:["startEvent","start"],onComplete:["completeEvent","complete"],onSuccess:["successEvent","success"],onFailure:["failureEvent","failure"],onUpload:["uploadEvent","upload"],onAbort:["abortEvent","abort"]},setProgId:function(A){this._msxml_progid.unshift(A);},setDefaultPostHeader:function(A){if(typeof A=="string"){this._default_post_header=A;}else{if(typeof A=="boolean"){this._use_default_post_header=A;}}},setDefaultXhrHeader:function(A){if(typeof A=="string"){this._default_xhr_header=A;}else{this._use_default_xhr_header=A;}},setPollingInterval:function(A){if(typeof A=="number"&&isFinite(A)){this._polling_interval=A;}},createXhrObject:function(E){var D,A;try{A=new XMLHttpRequest();D={conn:A,tId:E};}catch(C){for(var B=0;B<this._msxml_progid.length;++B){try{A=new ActiveXObject(this._msxml_progid[B]);D={conn:A,tId:E};break;}catch(C){}}}finally{return D;}},getConnectionObject:function(A){var C;var D=this._transaction_id;try{if(!A){C=this.createXhrObject(D);}else{C={};C.tId=D;C.isUpload=true;}if(C){this._transaction_id++;}}catch(B){}finally{return C;}},asyncRequest:function(F,C,E,A){var D=(this._isFileUpload)?this.getConnectionObject(true):this.getConnectionObject();var B=(E&&E.argument)?E.argument:null;if(!D){return null;}else{if(E&&E.customevents){this.initCustomEvents(D,E);}if(this._isFormSubmit){if(this._isFileUpload){this.uploadFile(D,E,C,A);return D;}if(F.toUpperCase()=="GET"){if(this._sFormData.length!==0){C+=((C.indexOf("?")==-1)?"?":"&")+this._sFormData;}}else{if(F.toUpperCase()=="POST"){A=A?this._sFormData+"&"+A:this._sFormData;}}}if(F.toUpperCase()=="GET"&&(E&&E.cache===false)){C+=((C.indexOf("?")==-1)?"?":"&")+"rnd="+new Date().valueOf().toString();}D.conn.open(F,C,true);if(this._use_default_xhr_header){if(!this._default_headers["X-Requested-With"]){this.initHeader("X-Requested-With",this._default_xhr_header,true);}}if((F.toUpperCase()=="POST"&&this._use_default_post_header)&&this._isFormSubmit===false){this.initHeader("Content-Type",this._default_post_header);}if(this._has_default_headers||this._has_http_headers){this.setHeader(D);}this.handleReadyState(D,E);D.conn.send(A||null);if(this._isFormSubmit===true){this.resetFormState();}this.startEvent.fire(D,B);if(D.startEvent){D.startEvent.fire(D,B);}return D;}},initCustomEvents:function(A,C){for(var B in C.customevents){if(this._customEvents[B][0]){A[this._customEvents[B][0]]=new YAHOO.util.CustomEvent(this._customEvents[B][1],(C.scope)?C.scope:null);A[this._customEvents[B][0]].subscribe(C.customevents[B]);}}},handleReadyState:function(C,D){var B=this;var A=(D&&D.argument)?D.argument:null;if(D&&D.timeout){this._timeOut[C.tId]=window.setTimeout(function(){B.abort(C,D,true);},D.timeout);}this._poll[C.tId]=window.setInterval(function(){if(C.conn&&C.conn.readyState===4){window.clearInterval(B._poll[C.tId]);delete B._poll[C.tId];if(D&&D.timeout){window.clearTimeout(B._timeOut[C.tId]);delete B._timeOut[C.tId];}B.completeEvent.fire(C,A);if(C.completeEvent){C.completeEvent.fire(C,A);}B.handleTransactionResponse(C,D);}},this._polling_interval);},handleTransactionResponse:function(F,G,A){var D,C;var B=(G&&G.argument)?G.argument:null;try{if(F.conn.status!==undefined&&F.conn.status!==0){D=F.conn.status;}else{D=13030;}}catch(E){D=13030;}if(D>=200&&D<300||D===1223){C=this.createResponseObject(F,B);if(G&&G.success){if(!G.scope){G.success(C);}else{G.success.apply(G.scope,[C]);}}this.successEvent.fire(C);if(F.successEvent){F.successEvent.fire(C);}}else{switch(D){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:C=this.createExceptionObject(F.tId,B,(A?A:false));if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}break;default:C=this.createResponseObject(F,B);if(G&&G.failure){if(!G.scope){G.failure(C);}else{G.failure.apply(G.scope,[C]);}}}this.failureEvent.fire(C);if(F.failureEvent){F.failureEvent.fire(C);}}this.releaseObject(F);C=null;},createResponseObject:function(A,G){var D={};var I={};try{var C=A.conn.getAllResponseHeaders();var F=C.split("\n");for(var E=0;E<F.length;E++){var B=F[E].indexOf(":");if(B!=-1){I[F[E].substring(0,B)]=F[E].substring(B+2);}}}catch(H){}D.tId=A.tId;D.status=(A.conn.status==1223)?204:A.conn.status;D.statusText=(A.conn.status==1223)?"No Content":A.conn.statusText;D.getResponseHeader=I;D.getAllResponseHeaders=C;D.responseText=A.conn.responseText;D.responseXML=A.conn.responseXML;if(G){D.argument=G;}return D;},createExceptionObject:function(H,D,A){var F=0;var G="communication failure";var C=-1;var B="transaction aborted";var E={};E.tId=H;if(A){E.status=C;E.statusText=B;}else{E.status=F;E.statusText=G;}if(D){E.argument=D;}return E;},initHeader:function(A,D,C){var B=(C)?this._default_headers:this._http_headers;B[A]=D;if(C){this._has_default_headers=true;}else{this._has_http_headers=true;}},setHeader:function(A){if(this._has_default_headers){for(var B in this._default_headers){if(YAHOO.lang.hasOwnProperty(this._default_headers,B)){A.conn.setRequestHeader(B,this._default_headers[B]); |
}}}if(this._has_http_headers){for(var B in this._http_headers){if(YAHOO.lang.hasOwnProperty(this._http_headers,B)){A.conn.setRequestHeader(B,this._http_headers[B]);}}delete this._http_headers;this._http_headers={};this._has_http_headers=false;}},resetDefaultHeaders:function(){delete this._default_headers;this._default_headers={};this._has_default_headers=false;},setForm:function(K,E,B){this.resetFormState();var J;if(typeof K=="string"){J=(document.getElementById(K)||document.forms[K]);}else{if(typeof K=="object"){J=K;}else{return ;}}if(E){var F=this.createFrame(B?B:null);this._isFormSubmit=true;this._isFileUpload=true;this._formNode=J;return ;}var A,I,G,L;var H=false;for(var D=0;D<J.elements.length;D++){A=J.elements[D];L=A.disabled;I=A.name;G=A.value;if(!L&&I){switch(A.type){case"select-one":case"select-multiple":for(var C=0;C<A.options.length;C++){if(A.options[C].selected){if(window.ActiveXObject){this._sFormData+=encodeURIComponent(I)+"="+encodeURIComponent(A.options[C].attributes["value"].specified?A.options[C].value:A.options[C].text)+"&";}else{this._sFormData+=encodeURIComponent(I)+"="+encodeURIComponent(A.options[C].hasAttribute("value")?A.options[C].value:A.options[C].text)+"&";}}}break;case"radio":case"checkbox":if(A.checked){this._sFormData+=encodeURIComponent(I)+"="+encodeURIComponent(G)+"&";}break;case"file":case undefined:case"reset":case"button":break;case"submit":if(H===false){if(this._hasSubmitListener&&this._submitElementValue){this._sFormData+=this._submitElementValue+"&";}else{this._sFormData+=encodeURIComponent(I)+"="+encodeURIComponent(G)+"&";}H=true;}break;default:this._sFormData+=encodeURIComponent(I)+"="+encodeURIComponent(G)+"&";}}}this._isFormSubmit=true;this._sFormData=this._sFormData.substr(0,this._sFormData.length-1);this.initHeader("Content-Type",this._default_form_header);return this._sFormData;},resetFormState:function(){this._isFormSubmit=false;this._isFileUpload=false;this._formNode=null;this._sFormData="";},createFrame:function(A){var B="yuiIO"+this._transaction_id;var C;if(window.ActiveXObject){C=document.createElement("<iframe id=\""+B+"\" name=\""+B+"\" />");if(typeof A=="boolean"){C.src="javascript:false";}else{if(typeof secureURI=="string"){C.src=A;}}}else{C=document.createElement("iframe");C.id=B;C.name=B;}C.style.position="absolute";C.style.top="-1000px";C.style.left="-1000px";document.body.appendChild(C);},appendPostData:function(A){var D=[];var B=A.split("&");for(var C=0;C<B.length;C++){var E=B[C].indexOf("=");if(E!=-1){D[C]=document.createElement("input");D[C].type="hidden";D[C].name=B[C].substring(0,E);D[C].value=B[C].substring(E+1);this._formNode.appendChild(D[C]);}}return D;},uploadFile:function(D,M,E,C){var N=this;var H="yuiIO"+D.tId;var I="multipart/form-data";var K=document.getElementById(H);var J=(M&&M.argument)?M.argument:null;var B={action:this._formNode.getAttribute("action"),method:this._formNode.getAttribute("method"),target:this._formNode.getAttribute("target")};this._formNode.setAttribute("action",E);this._formNode.setAttribute("method","POST");this._formNode.setAttribute("target",H);if(this._formNode.encoding){this._formNode.setAttribute("encoding",I);}else{this._formNode.setAttribute("enctype",I);}if(C){var L=this.appendPostData(C);}this._formNode.submit();this.startEvent.fire(D,J);if(D.startEvent){D.startEvent.fire(D,J);}if(M&&M.timeout){this._timeOut[D.tId]=window.setTimeout(function(){N.abort(D,M,true);},M.timeout);}if(L&&L.length>0){for(var G=0;G<L.length;G++){this._formNode.removeChild(L[G]);}}for(var A in B){if(YAHOO.lang.hasOwnProperty(B,A)){if(B[A]){this._formNode.setAttribute(A,B[A]);}else{this._formNode.removeAttribute(A);}}}this.resetFormState();var F=function(){if(M&&M.timeout){window.clearTimeout(N._timeOut[D.tId]);delete N._timeOut[D.tId];}N.completeEvent.fire(D,J);if(D.completeEvent){D.completeEvent.fire(D,J);}var P={};P.tId=D.tId;P.argument=M.argument;try{P.responseText=K.contentWindow.document.body?K.contentWindow.document.body.innerHTML:K.contentWindow.document.documentElement.textContent;P.responseXML=K.contentWindow.document.XMLDocument?K.contentWindow.document.XMLDocument:K.contentWindow.document;}catch(O){}if(M&&M.upload){if(!M.scope){M.upload(P);}else{M.upload.apply(M.scope,[P]);}}N.uploadEvent.fire(P);if(D.uploadEvent){D.uploadEvent.fire(P);}YAHOO.util.Event.removeListener(K,"load",F);setTimeout(function(){document.body.removeChild(K);N.releaseObject(D);},100);};YAHOO.util.Event.addListener(K,"load",F);},abort:function(E,G,A){var D;var B=(G&&G.argument)?G.argument:null;if(E&&E.conn){if(this.isCallInProgress(E)){E.conn.abort();window.clearInterval(this._poll[E.tId]);delete this._poll[E.tId];if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{if(E&&E.isUpload===true){var C="yuiIO"+E.tId;var F=document.getElementById(C);if(F){YAHOO.util.Event.removeListener(F,"load");document.body.removeChild(F);if(A){window.clearTimeout(this._timeOut[E.tId]);delete this._timeOut[E.tId];}D=true;}}else{D=false;}}if(D===true){this.abortEvent.fire(E,B);if(E.abortEvent){E.abortEvent.fire(E,B);}this.handleTransactionResponse(E,G,true);}return D;},isCallInProgress:function(B){if(B&&B.conn){return B.conn.readyState!==4&&B.conn.readyState!==0;}else{if(B&&B.isUpload===true){var A="yuiIO"+B.tId;return document.getElementById(A)?true:false;}else{return false;}}},releaseObject:function(A){if(A&&A.conn){A.conn=null;A=null;}}};YAHOO.register("connection",YAHOO.util.Connect,{version:"2.4.1",build:"742"});YAHOO.util.Anim=function(B,A,C,D){if(!B){}this.init(B,A,C,D);};YAHOO.util.Anim.prototype={toString:function(){var A=this.getEl();var B=A.id||A.tagName||A;return("Anim "+B);},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(A,C,B){return this.method(this.currentFrame,C,B-C,this.totalFrames);},setAttribute:function(A,C,B){if(this.patterns.noNegatives.test(A)){C=(C>0)?C:0;}YAHOO.util.Dom.setStyle(this.getEl(),A,C+B);},getAttribute:function(A){var C=this.getEl();var E=YAHOO.util.Dom.getStyle(C,A);if(E!=="auto"&&!this.patterns.offsetUnit.test(E)){return parseFloat(E);}var B=this.patterns.offsetAttribute.exec(A)||[];var F=!!(B[3]);var D=!!(B[2]);if(D||(YAHOO.util.Dom.getStyle(C,"position")=="absolute"&&F)){E=C["offset"+B[0].charAt(0).toUpperCase()+B[0].substr(1)];}else{E=0;}return E;},getDefaultUnit:function(A){if(this.patterns.defaultUnit.test(A)){return"px";}return"";},setRuntimeAttribute:function(B){var G;var C;var D=this.attributes;this.runtimeAttributes[B]={};var F=function(H){return(typeof H!=="undefined");};if(!F(D[B]["to"])&&!F(D[B]["by"])){return false;}G=(F(D[B]["from"]))?D[B]["from"]:this.getAttribute(B);if(F(D[B]["to"])){C=D[B]["to"];}else{if(F(D[B]["by"])){if(G.constructor==Array){C=[];for(var E=0,A=G.length;E<A;++E){C[E]=G[E]+D[B]["by"][E]*1;}}else{C=G+D[B]["by"]*1;}}}this.runtimeAttributes[B].start=G;this.runtimeAttributes[B].end=C;this.runtimeAttributes[B].unit=(F(D[B].unit))?D[B]["unit"]:this.getDefaultUnit(B);return true;},init:function(C,H,G,A){var B=false;var D=null;var F=0;C=YAHOO.util.Dom.get(C);this.attributes=H||{};this.duration=!YAHOO.lang.isUndefined(G)?G:1;this.method=A||YAHOO.util.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=YAHOO.util.AnimMgr.fps;this.setEl=function(K){C=YAHOO.util.Dom.get(K);};this.getEl=function(){return C;};this.isAnimated=function(){return B;};this.getStartTime=function(){return D;};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false;}this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(YAHOO.util.AnimMgr.fps*this.duration):this.duration;if(this.duration===0&&this.useSeconds){this.totalFrames=1;}YAHOO.util.AnimMgr.registerElement(this);return true;};this.stop=function(K){if(!this.isAnimated()){return false;}if(K){this.currentFrame=this.totalFrames;this._onTween.fire();}YAHOO.util.AnimMgr.stop(this);};var J=function(){this.onStart.fire();this.runtimeAttributes={};for(var K in this.attributes){this.setRuntimeAttribute(K);}B=true;F=0;D=new Date();};var I=function(){var M={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};M.toString=function(){return("duration: "+M.duration+", currentFrame: "+M.currentFrame);};this.onTween.fire(M);var L=this.runtimeAttributes;for(var K in L){this.setAttribute(K,this.doMethod(K,L[K].start,L[K].end),L[K].unit);}F+=1;};var E=function(){var K=(new Date()-D)/1000;var L={duration:K,frames:F,fps:F/K};L.toString=function(){return("duration: "+L.duration+", frames: "+L.frames+", fps: "+L.fps);};B=false;F=0;this.onComplete.fire(L);};this._onStart=new YAHOO.util.CustomEvent("_start",this,true);this.onStart=new YAHOO.util.CustomEvent("start",this);this.onTween=new YAHOO.util.CustomEvent("tween",this);this._onTween=new YAHOO.util.CustomEvent("_tween",this,true);this.onComplete=new YAHOO.util.CustomEvent("complete",this);this._onComplete=new YAHOO.util.CustomEvent("_complete",this,true);this._onStart.subscribe(J);this._onTween.subscribe(I);this._onComplete.subscribe(E);}};YAHOO.util.AnimMgr=new function(){var C=null;var B=[];var A=0;this.fps=1000;this.delay=1;this.registerElement=function(F){B[B.length]=F;A+=1;F._onStart.fire();this.start();};this.unRegister=function(G,F){F=F||E(G);if(!G.isAnimated()||F==-1){return false;}G._onComplete.fire();B.splice(F,1);A-=1;if(A<=0){this.stop();}return true;};this.start=function(){if(C===null){C=setInterval(this.run,this.delay);}};this.stop=function(H){if(!H){clearInterval(C);for(var G=0,F=B.length;G<F;++G){this.unRegister(B[0],0);}B=[];C=null;A=0;}else{this.unRegister(H);}};this.run=function(){for(var H=0,F=B.length;H<F;++H){var G=B[H];if(!G||!G.isAnimated()){continue;}if(G.currentFrame<G.totalFrames||G.totalFrames===null){G.currentFrame+=1;if(G.useSeconds){D(G);}G._onTween.fire();}else{YAHOO.util.AnimMgr.stop(G,H);}}};var E=function(H){for(var G=0,F=B.length;G<F;++G){if(B[G]==H){return G;}}return -1;};var D=function(G){var J=G.totalFrames;var I=G.currentFrame;var H=(G.currentFrame*G.duration*1000/G.totalFrames);var F=(new Date()-G.getStartTime());var K=0;if(F<G.duration*1000){K=Math.round((F/H-1)*G.currentFrame);}else{K=J-(I+1);}if(K>0&&isFinite(K)){if(G.currentFrame+K>=J){K=J-(I+1);}G.currentFrame+=K;}};};YAHOO.util.Bezier=new function(){this.getPosition=function(E,D){var F=E.length;var C=[];for(var B=0;B<F;++B){C[B]=[E[B][0],E[B][1]];}for(var A=1;A<F;++A){for(B=0;B<F-A;++B){C[B][0]=(1-D)*C[B][0]+D*C[parseInt(B+1,10)][0];C[B][1]=(1-D)*C[B][1]+D*C[parseInt(B+1,10)][1];}}return[C[0][0],C[0][1]];};};(function(){YAHOO.util.ColorAnim=function(E,D,F,G){YAHOO.util.ColorAnim.superclass.constructor.call(this,E,D,F,G);};YAHOO.extend(YAHOO.util.ColorAnim,YAHOO.util.Anim);var B=YAHOO.util;var C=B.ColorAnim.superclass;var A=B.ColorAnim.prototype;A.toString=function(){var D=this.getEl();var E=D.id||D.tagName;return("ColorAnim "+E);};A.patterns.color=/color$/i;A.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;A.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;A.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;A.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;A.parseColor=function(D){if(D.length==3){return D;}var E=this.patterns.hex.exec(D);if(E&&E.length==4){return[parseInt(E[1],16),parseInt(E[2],16),parseInt(E[3],16)];}E=this.patterns.rgb.exec(D);if(E&&E.length==4){return[parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10)]; |
}E=this.patterns.hex3.exec(D);if(E&&E.length==4){return[parseInt(E[1]+E[1],16),parseInt(E[2]+E[2],16),parseInt(E[3]+E[3],16)];}return null;};A.getAttribute=function(D){var F=this.getEl();if(this.patterns.color.test(D)){var G=YAHOO.util.Dom.getStyle(F,D);if(this.patterns.transparent.test(G)){var E=F.parentNode;G=B.Dom.getStyle(E,D);while(E&&this.patterns.transparent.test(G)){E=E.parentNode;G=B.Dom.getStyle(E,D);if(E.tagName.toUpperCase()=="HTML"){G="#fff";}}}}else{G=C.getAttribute.call(this,D);}return G;};A.doMethod=function(E,I,F){var H;if(this.patterns.color.test(E)){H=[];for(var G=0,D=I.length;G<D;++G){H[G]=C.doMethod.call(this,E,I[G],F[G]);}H="rgb("+Math.floor(H[0])+","+Math.floor(H[1])+","+Math.floor(H[2])+")";}else{H=C.doMethod.call(this,E,I,F);}return H;};A.setRuntimeAttribute=function(E){C.setRuntimeAttribute.call(this,E);if(this.patterns.color.test(E)){var G=this.attributes;var I=this.parseColor(this.runtimeAttributes[E].start);var F=this.parseColor(this.runtimeAttributes[E].end);if(typeof G[E]["to"]==="undefined"&&typeof G[E]["by"]!=="undefined"){F=this.parseColor(G[E].by);for(var H=0,D=I.length;H<D;++H){F[H]=I[H]+F[H];}}this.runtimeAttributes[E].start=I;this.runtimeAttributes[E].end=F;}};})();YAHOO.util.Easing={easeNone:function(B,A,D,C){return D*B/C+A;},easeIn:function(B,A,D,C){return D*(B/=C)*B+A;},easeOut:function(B,A,D,C){return -D*(B/=C)*(B-2)+A;},easeBoth:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B+A;}return -D/2*((--B)*(B-2)-1)+A;},easeInStrong:function(B,A,D,C){return D*(B/=C)*B*B*B+A;},easeOutStrong:function(B,A,D,C){return -D*((B=B/C-1)*B*B*B-1)+A;},easeBothStrong:function(B,A,D,C){if((B/=C/2)<1){return D/2*B*B*B*B+A;}return -D/2*((B-=2)*B*B*B-2)+A;},elasticIn:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return -(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;},elasticOut:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F)==1){return A+G;}if(!E){E=F*0.3;}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}return B*Math.pow(2,-10*C)*Math.sin((C*F-D)*(2*Math.PI)/E)+G+A;},elasticBoth:function(C,A,G,F,B,E){if(C==0){return A;}if((C/=F/2)==2){return A+G;}if(!E){E=F*(0.3*1.5);}if(!B||B<Math.abs(G)){B=G;var D=E/4;}else{var D=E/(2*Math.PI)*Math.asin(G/B);}if(C<1){return -0.5*(B*Math.pow(2,10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E))+A;}return B*Math.pow(2,-10*(C-=1))*Math.sin((C*F-D)*(2*Math.PI)/E)*0.5+G+A;},backIn:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*(B/=D)*B*((C+1)*B-C)+A;},backOut:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}return E*((B=B/D-1)*B*((C+1)*B+C)+1)+A;},backBoth:function(B,A,E,D,C){if(typeof C=="undefined"){C=1.70158;}if((B/=D/2)<1){return E/2*(B*B*(((C*=(1.525))+1)*B-C))+A;}return E/2*((B-=2)*B*(((C*=(1.525))+1)*B+C)+2)+A;},bounceIn:function(B,A,D,C){return D-YAHOO.util.Easing.bounceOut(C-B,0,D,C)+A;},bounceOut:function(B,A,D,C){if((B/=C)<(1/2.75)){return D*(7.5625*B*B)+A;}else{if(B<(2/2.75)){return D*(7.5625*(B-=(1.5/2.75))*B+0.75)+A;}else{if(B<(2.5/2.75)){return D*(7.5625*(B-=(2.25/2.75))*B+0.9375)+A;}}}return D*(7.5625*(B-=(2.625/2.75))*B+0.984375)+A;},bounceBoth:function(B,A,D,C){if(B<C/2){return YAHOO.util.Easing.bounceIn(B*2,0,D,C)*0.5+A;}return YAHOO.util.Easing.bounceOut(B*2-C,0,D,C)*0.5+D*0.5+A;}};(function(){YAHOO.util.Motion=function(G,F,H,I){if(G){YAHOO.util.Motion.superclass.constructor.call(this,G,F,H,I);}};YAHOO.extend(YAHOO.util.Motion,YAHOO.util.ColorAnim);var D=YAHOO.util;var E=D.Motion.superclass;var B=D.Motion.prototype;B.toString=function(){var F=this.getEl();var G=F.id||F.tagName;return("Motion "+G);};B.patterns.points=/^points$/i;B.setAttribute=function(F,H,G){if(this.patterns.points.test(F)){G=G||"px";E.setAttribute.call(this,"left",H[0],G);E.setAttribute.call(this,"top",H[1],G);}else{E.setAttribute.call(this,F,H,G);}};B.getAttribute=function(F){if(this.patterns.points.test(F)){var G=[E.getAttribute.call(this,"left"),E.getAttribute.call(this,"top")];}else{G=E.getAttribute.call(this,F);}return G;};B.doMethod=function(F,J,G){var I=null;if(this.patterns.points.test(F)){var H=this.method(this.currentFrame,0,100,this.totalFrames)/100;I=D.Bezier.getPosition(this.runtimeAttributes[F],H);}else{I=E.doMethod.call(this,F,J,G);}return I;};B.setRuntimeAttribute=function(O){if(this.patterns.points.test(O)){var G=this.getEl();var I=this.attributes;var F;var K=I["points"]["control"]||[];var H;var L,N;if(K.length>0&&!(K[0] instanceof Array)){K=[K];}else{var J=[];for(L=0,N=K.length;L<N;++L){J[L]=K[L];}K=J;}if(D.Dom.getStyle(G,"position")=="static"){D.Dom.setStyle(G,"position","relative");}if(C(I["points"]["from"])){D.Dom.setXY(G,I["points"]["from"]);}else{D.Dom.setXY(G,D.Dom.getXY(G));}F=this.getAttribute("points");if(C(I["points"]["to"])){H=A.call(this,I["points"]["to"],F);var M=D.Dom.getXY(this.getEl());for(L=0,N=K.length;L<N;++L){K[L]=A.call(this,K[L],F);}}else{if(C(I["points"]["by"])){H=[F[0]+I["points"]["by"][0],F[1]+I["points"]["by"][1]];for(L=0,N=K.length;L<N;++L){K[L]=[F[0]+K[L][0],F[1]+K[L][1]];}}}this.runtimeAttributes[O]=[F];if(K.length>0){this.runtimeAttributes[O]=this.runtimeAttributes[O].concat(K);}this.runtimeAttributes[O][this.runtimeAttributes[O].length]=H;}else{E.setRuntimeAttribute.call(this,O);}};var A=function(F,H){var G=D.Dom.getXY(this.getEl());F=[F[0]-G[0]+H[0],F[1]-G[1]+H[1]];return F;};var C=function(F){return(typeof F!=="undefined");};})();(function(){YAHOO.util.Scroll=function(E,D,F,G){if(E){YAHOO.util.Scroll.superclass.constructor.call(this,E,D,F,G);}};YAHOO.extend(YAHOO.util.Scroll,YAHOO.util.ColorAnim);var B=YAHOO.util;var C=B.Scroll.superclass;var A=B.Scroll.prototype;A.toString=function(){var D=this.getEl();var E=D.id||D.tagName;return("Scroll "+E);};A.doMethod=function(D,G,E){var F=null;if(D=="scroll"){F=[this.method(this.currentFrame,G[0],E[0]-G[0],this.totalFrames),this.method(this.currentFrame,G[1],E[1]-G[1],this.totalFrames)]; |
}else{F=C.doMethod.call(this,D,G,E);}return F;};A.getAttribute=function(D){var F=null;var E=this.getEl();if(D=="scroll"){F=[E.scrollLeft,E.scrollTop];}else{F=C.getAttribute.call(this,D);}return F;};A.setAttribute=function(D,G,F){var E=this.getEl();if(D=="scroll"){E.scrollLeft=G[0];E.scrollTop=G[1];}else{C.setAttribute.call(this,D,G,F);}};})();YAHOO.register("animation",YAHOO.util.Anim,{version:"2.4.1",build:"742"});if(!YAHOO.util.DragDropMgr){YAHOO.util.DragDropMgr=function(){var A=YAHOO.util.Event;return{ids:{},handleIds:{},dragCurrent:null,dragOvers:{},deltaX:0,deltaY:0,preventDefault:true,stopPropagation:true,initialized:false,locked:false,interactionInfo:null,init:function(){this.initialized=true;},POINT:0,INTERSECT:1,STRICT_INTERSECT:2,mode:0,_execOnAll:function(D,C){for(var E in this.ids){for(var B in this.ids[E]){var F=this.ids[E][B];if(!this.isTypeOfDD(F)){continue;}F[D].apply(F,C);}}},_onLoad:function(){this.init();A.on(document,"mouseup",this.handleMouseUp,this,true);A.on(document,"mousemove",this.handleMouseMove,this,true);A.on(window,"unload",this._onUnload,this,true);A.on(window,"resize",this._onResize,this,true);},_onResize:function(B){this._execOnAll("resetConstraints",[]);},lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isLocked:function(){return this.locked;},locationCache:{},useCache:true,clickPixelThresh:3,clickTimeThresh:1000,dragThreshMet:false,clickTimeout:null,startX:0,startY:0,fromTimeout:false,regDragDrop:function(C,B){if(!this.initialized){this.init();}if(!this.ids[B]){this.ids[B]={};}this.ids[B][C.id]=C;},removeDDFromGroup:function(D,B){if(!this.ids[B]){this.ids[B]={};}var C=this.ids[B];if(C&&C[D.id]){delete C[D.id];}},_remove:function(C){for(var B in C.groups){if(B&&this.ids[B][C.id]){delete this.ids[B][C.id];}}delete this.handleIds[C.id];},regHandle:function(C,B){if(!this.handleIds[C]){this.handleIds[C]={};}this.handleIds[C][B]=B;},isDragDrop:function(B){return(this.getDDById(B))?true:false;},getRelated:function(G,C){var F=[];for(var E in G.groups){for(var D in this.ids[E]){var B=this.ids[E][D];if(!this.isTypeOfDD(B)){continue;}if(!C||B.isTarget){F[F.length]=B;}}}return F;},isLegalTarget:function(F,E){var C=this.getRelated(F,true);for(var D=0,B=C.length;D<B;++D){if(C[D].id==E.id){return true;}}return false;},isTypeOfDD:function(B){return(B&&B.__ygDragDrop);},isHandle:function(C,B){return(this.handleIds[C]&&this.handleIds[C][B]);},getDDById:function(C){for(var B in this.ids){if(this.ids[B][C]){return this.ids[B][C];}}return null;},handleMouseDown:function(D,C){this.currentTarget=YAHOO.util.Event.getTarget(D);this.dragCurrent=C;var B=C.getEl();this.startX=YAHOO.util.Event.getPageX(D);this.startY=YAHOO.util.Event.getPageY(D);this.deltaX=this.startX-B.offsetLeft;this.deltaY=this.startY-B.offsetTop;this.dragThreshMet=false;this.clickTimeout=setTimeout(function(){var E=YAHOO.util.DDM;E.startDrag(E.startX,E.startY);E.fromTimeout=true;},this.clickTimeThresh);},startDrag:function(B,D){clearTimeout(this.clickTimeout);var C=this.dragCurrent;if(C){C.b4StartDrag(B,D);}if(C){C.startDrag(B,D);}this.dragThreshMet=true;},handleMouseUp:function(B){if(this.dragCurrent){clearTimeout(this.clickTimeout);if(this.dragThreshMet){if(this.fromTimeout){this.handleMouseMove(B);}this.fromTimeout=false;this.fireEvents(B,true);}else{}this.stopDrag(B);this.stopEvent(B);}},stopEvent:function(B){if(this.stopPropagation){YAHOO.util.Event.stopPropagation(B);}if(this.preventDefault){YAHOO.util.Event.preventDefault(B);}},stopDrag:function(C,B){if(this.dragCurrent&&!B){if(this.dragThreshMet){this.dragCurrent.b4EndDrag(C);this.dragCurrent.endDrag(C);}this.dragCurrent.onMouseUp(C);}this.dragCurrent=null;this.dragOvers={};},handleMouseMove:function(E){var B=this.dragCurrent;if(B){if(YAHOO.util.Event.isIE&&!E.button){this.stopEvent(E);return this.handleMouseUp(E);}if(!this.dragThreshMet){var D=Math.abs(this.startX-YAHOO.util.Event.getPageX(E));var C=Math.abs(this.startY-YAHOO.util.Event.getPageY(E));if(D>this.clickPixelThresh||C>this.clickPixelThresh){this.startDrag(this.startX,this.startY);}}if(this.dragThreshMet){B.b4Drag(E);if(B){B.onDrag(E);}if(B){this.fireEvents(E,false);}}this.stopEvent(E);}},fireEvents:function(T,J){var V=this.dragCurrent;if(!V||V.isLocked()||V.dragOnly){return ;}var L=YAHOO.util.Event.getPageX(T),K=YAHOO.util.Event.getPageY(T),M=new YAHOO.util.Point(L,K),H=V.getTargetCoord(M.x,M.y),E=V.getDragEl(),S=new YAHOO.util.Region(H.y,H.x+E.offsetWidth,H.y+E.offsetHeight,H.x),G=[],I=[],D=[],U=[],R=[],C={},N=[];for(var P in this.dragOvers){var W=this.dragOvers[P];if(!this.isTypeOfDD(W)){continue;}if(!this.isOverTarget(M,W,this.mode,S)){I.push(W);}G[P]=true;delete this.dragOvers[P];}for(var O in V.groups){if("string"!=typeof O){continue;}for(P in this.ids[O]){var F=this.ids[O][P];if(!this.isTypeOfDD(F)){continue;}if(F.isTarget&&!F.isLocked()&&F!=V){if(this.isOverTarget(M,F,this.mode,S)){C[O]=true;if(J){U.push(F);}else{if(!G[F.id]){R.push(F);}else{D.push(F);}this.dragOvers[F.id]=F;}}}}}this.interactionInfo={out:I,enter:R,over:D,drop:U,point:M,draggedRegion:S,sourceRegion:this.locationCache[V.id],validDrop:J};for(var B in C){N.push(B);}if(J&&!U.length){this.interactionInfo.validDrop=false;V.onInvalidDrop(T);}if(this.mode){if(I.length){V.b4DragOut(T,I);if(V){V.onDragOut(T,I);}}if(R.length){if(V){V.onDragEnter(T,R,N);}}if(D.length){if(V){V.b4DragOver(T,D,N);}if(V){V.onDragOver(T,D,N);}}if(U.length){if(V){V.b4DragDrop(T,U,N);}if(V){V.onDragDrop(T,U,N);}}}else{var Q=0;for(P=0,Q=I.length;P<Q;++P){if(V){V.b4DragOut(T,I[P].id,N[0]);}if(V){V.onDragOut(T,I[P].id,N[0]);}}for(P=0,Q=R.length;P<Q;++P){if(V){V.onDragEnter(T,R[P].id,N[0]);}}for(P=0,Q=D.length;P<Q;++P){if(V){V.b4DragOver(T,D[P].id,N[0]);}if(V){V.onDragOver(T,D[P].id,N[0]);}}for(P=0,Q=U.length;P<Q;++P){if(V){V.b4DragDrop(T,U[P].id,N[0]);}if(V){V.onDragDrop(T,U[P].id,N[0]);}}}},getBestMatch:function(D){var F=null;var C=D.length;if(C==1){F=D[0];}else{for(var E=0;E<C;++E){var B=D[E];if(this.mode==this.INTERSECT&&B.cursorIsOver){F=B;break;}else{if(!F||!F.overlap||(B.overlap&&F.overlap.getArea()<B.overlap.getArea())){F=B;}}}}return F;},refreshCache:function(C){var E=C||this.ids;for(var B in E){if("string"!=typeof B){continue;}for(var D in this.ids[B]){var F=this.ids[B][D];if(this.isTypeOfDD(F)){var G=this.getLocation(F);if(G){this.locationCache[F.id]=G;}else{delete this.locationCache[F.id];}}}}},verifyEl:function(C){try{if(C){var B=C.offsetParent; |
if(B){return true;}}}catch(D){}return false;},getLocation:function(G){if(!this.isTypeOfDD(G)){return null;}var E=G.getEl(),J,D,C,L,K,M,B,I,F;try{J=YAHOO.util.Dom.getXY(E);}catch(H){}if(!J){return null;}D=J[0];C=D+E.offsetWidth;L=J[1];K=L+E.offsetHeight;M=L-G.padding[0];B=C+G.padding[1];I=K+G.padding[2];F=D-G.padding[3];return new YAHOO.util.Region(M,B,I,F);},isOverTarget:function(J,B,D,E){var F=this.locationCache[B.id];if(!F||!this.useCache){F=this.getLocation(B);this.locationCache[B.id]=F;}if(!F){return false;}B.cursorIsOver=F.contains(J);var I=this.dragCurrent;if(!I||(!D&&!I.constrainX&&!I.constrainY)){return B.cursorIsOver;}B.overlap=null;if(!E){var G=I.getTargetCoord(J.x,J.y);var C=I.getDragEl();E=new YAHOO.util.Region(G.y,G.x+C.offsetWidth,G.y+C.offsetHeight,G.x);}var H=E.intersect(F);if(H){B.overlap=H;return(D)?true:B.cursorIsOver;}else{return false;}},_onUnload:function(C,B){this.unregAll();},unregAll:function(){if(this.dragCurrent){this.stopDrag();this.dragCurrent=null;}this._execOnAll("unreg",[]);this.ids={};},elementCache:{},getElWrapper:function(C){var B=this.elementCache[C];if(!B||!B.el){B=this.elementCache[C]=new this.ElementWrapper(YAHOO.util.Dom.get(C));}return B;},getElement:function(B){return YAHOO.util.Dom.get(B);},getCss:function(C){var B=YAHOO.util.Dom.get(C);return(B)?B.style:null;},ElementWrapper:function(B){this.el=B||null;this.id=this.el&&B.id;this.css=this.el&&B.style;},getPosX:function(B){return YAHOO.util.Dom.getX(B);},getPosY:function(B){return YAHOO.util.Dom.getY(B);},swapNode:function(D,B){if(D.swapNode){D.swapNode(B);}else{var E=B.parentNode;var C=B.nextSibling;if(C==D){E.insertBefore(D,B);}else{if(B==D.nextSibling){E.insertBefore(B,D);}else{D.parentNode.replaceChild(B,D);E.insertBefore(D,C);}}}},getScroll:function(){var D,B,E=document.documentElement,C=document.body;if(E&&(E.scrollTop||E.scrollLeft)){D=E.scrollTop;B=E.scrollLeft;}else{if(C){D=C.scrollTop;B=C.scrollLeft;}else{}}return{top:D,left:B};},getStyle:function(C,B){return YAHOO.util.Dom.getStyle(C,B);},getScrollTop:function(){return this.getScroll().top;},getScrollLeft:function(){return this.getScroll().left;},moveToEl:function(B,D){var C=YAHOO.util.Dom.getXY(D);YAHOO.util.Dom.setXY(B,C);},getClientHeight:function(){return YAHOO.util.Dom.getViewportHeight();},getClientWidth:function(){return YAHOO.util.Dom.getViewportWidth();},numericSort:function(C,B){return(C-B);},_timeoutCount:0,_addListeners:function(){var B=YAHOO.util.DDM;if(YAHOO.util.Event&&document){B._onLoad();}else{if(B._timeoutCount>2000){}else{setTimeout(B._addListeners,10);if(document&&document.body){B._timeoutCount+=1;}}}},handleWasClicked:function(B,D){if(this.isHandle(D,B.id)){return true;}else{var C=B.parentNode;while(C){if(this.isHandle(D,C.id)){return true;}else{C=C.parentNode;}}}return false;}};}();YAHOO.util.DDM=YAHOO.util.DragDropMgr;YAHOO.util.DDM._addListeners();}(function(){var A=YAHOO.util.Event;var B=YAHOO.util.Dom;YAHOO.util.DragDrop=function(E,C,D){if(E){this.init(E,C,D);}};YAHOO.util.DragDrop.prototype={id:null,config:null,dragElId:null,handleElId:null,invalidHandleTypes:null,invalidHandleIds:null,invalidHandleClasses:null,startPageX:0,startPageY:0,groups:null,locked:false,lock:function(){this.locked=true;},unlock:function(){this.locked=false;},isTarget:true,padding:null,dragOnly:false,_domRef:null,__ygDragDrop:true,constrainX:false,constrainY:false,minX:0,maxX:0,minY:0,maxY:0,deltaX:0,deltaY:0,maintainOffset:false,xTicks:null,yTicks:null,primaryButtonOnly:true,available:false,hasOuterHandles:false,cursorIsOver:false,overlap:null,b4StartDrag:function(C,D){},startDrag:function(C,D){},b4Drag:function(C){},onDrag:function(C){},onDragEnter:function(C,D){},b4DragOver:function(C){},onDragOver:function(C,D){},b4DragOut:function(C){},onDragOut:function(C,D){},b4DragDrop:function(C){},onDragDrop:function(C,D){},onInvalidDrop:function(C){},b4EndDrag:function(C){},endDrag:function(C){},b4MouseDown:function(C){},onMouseDown:function(C){},onMouseUp:function(C){},onAvailable:function(){},getEl:function(){if(!this._domRef){this._domRef=B.get(this.id);}return this._domRef;},getDragEl:function(){return B.get(this.dragElId);},init:function(E,C,D){this.initTarget(E,C,D);A.on(this._domRef||this.id,"mousedown",this.handleMouseDown,this,true);},initTarget:function(E,C,D){this.config=D||{};this.DDM=YAHOO.util.DDM;this.groups={};if(typeof E!=="string"){this._domRef=E;E=B.generateId(E);}this.id=E;this.addToGroup((C)?C:"default");this.handleElId=E;A.onAvailable(E,this.handleOnAvailable,this,true);this.setDragElId(E);this.invalidHandleTypes={A:"A"};this.invalidHandleIds={};this.invalidHandleClasses=[];this.applyConfig();},applyConfig:function(){this.padding=this.config.padding||[0,0,0,0];this.isTarget=(this.config.isTarget!==false);this.maintainOffset=(this.config.maintainOffset);this.primaryButtonOnly=(this.config.primaryButtonOnly!==false);this.dragOnly=((this.config.dragOnly===true)?true:false);},handleOnAvailable:function(){this.available=true;this.resetConstraints();this.onAvailable();},setPadding:function(E,C,F,D){if(!C&&0!==C){this.padding=[E,E,E,E];}else{if(!F&&0!==F){this.padding=[E,C,E,C];}else{this.padding=[E,C,F,D];}}},setInitPosition:function(F,E){var G=this.getEl();if(!this.DDM.verifyEl(G)){return ;}var D=F||0;var C=E||0;var H=B.getXY(G);this.initPageX=H[0]-D;this.initPageY=H[1]-C;this.lastPageX=H[0];this.lastPageY=H[1];this.setStartPosition(H);},setStartPosition:function(D){var C=D||B.getXY(this.getEl());this.deltaSetXY=null;this.startPageX=C[0];this.startPageY=C[1];},addToGroup:function(C){this.groups[C]=true;this.DDM.regDragDrop(this,C);},removeFromGroup:function(C){if(this.groups[C]){delete this.groups[C];}this.DDM.removeDDFromGroup(this,C);},setDragElId:function(C){this.dragElId=C;},setHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.handleElId=C;this.DDM.regHandle(this.id,C);},setOuterHandleElId:function(C){if(typeof C!=="string"){C=B.generateId(C);}A.on(C,"mousedown",this.handleMouseDown,this,true);this.setHandleElId(C); |
this.hasOuterHandles=true;},unreg:function(){A.removeListener(this.id,"mousedown",this.handleMouseDown);this._domRef=null;this.DDM._remove(this);},isLocked:function(){return(this.DDM.isLocked()||this.locked);},handleMouseDown:function(H,G){var D=H.which||H.button;if(this.primaryButtonOnly&&D>1){return ;}if(this.isLocked()){return ;}var C=this.b4MouseDown(H);var E=this.onMouseDown(H);if((C===false)||(E===false)){return ;}this.DDM.refreshCache(this.groups);var F=new YAHOO.util.Point(A.getPageX(H),A.getPageY(H));if(!this.hasOuterHandles&&!this.DDM.isOverTarget(F,this)){}else{if(this.clickValidator(H)){this.setStartPosition();this.DDM.handleMouseDown(H,this);this.DDM.stopEvent(H);}else{}}},clickValidator:function(D){var C=A.getTarget(D);return(this.isValidHandleChild(C)&&(this.id==this.handleElId||this.DDM.handleWasClicked(C,this.id)));},getTargetCoord:function(E,D){var C=E-this.deltaX;var F=D-this.deltaY;if(this.constrainX){if(C<this.minX){C=this.minX;}if(C>this.maxX){C=this.maxX;}}if(this.constrainY){if(F<this.minY){F=this.minY;}if(F>this.maxY){F=this.maxY;}}C=this.getTick(C,this.xTicks);F=this.getTick(F,this.yTicks);return{x:C,y:F};},addInvalidHandleType:function(C){var D=C.toUpperCase();this.invalidHandleTypes[D]=D;},addInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}this.invalidHandleIds[C]=C;},addInvalidHandleClass:function(C){this.invalidHandleClasses.push(C);},removeInvalidHandleType:function(C){var D=C.toUpperCase();delete this.invalidHandleTypes[D];},removeInvalidHandleId:function(C){if(typeof C!=="string"){C=B.generateId(C);}delete this.invalidHandleIds[C];},removeInvalidHandleClass:function(D){for(var E=0,C=this.invalidHandleClasses.length;E<C;++E){if(this.invalidHandleClasses[E]==D){delete this.invalidHandleClasses[E];}}},isValidHandleChild:function(F){var E=true;var H;try{H=F.nodeName.toUpperCase();}catch(G){H=F.nodeName;}E=E&&!this.invalidHandleTypes[H];E=E&&!this.invalidHandleIds[F.id];for(var D=0,C=this.invalidHandleClasses.length;E&&D<C;++D){E=!B.hasClass(F,this.invalidHandleClasses[D]);}return E;},setXTicks:function(F,C){this.xTicks=[];this.xTickSize=C;var E={};for(var D=this.initPageX;D>=this.minX;D=D-C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}for(D=this.initPageX;D<=this.maxX;D=D+C){if(!E[D]){this.xTicks[this.xTicks.length]=D;E[D]=true;}}this.xTicks.sort(this.DDM.numericSort);},setYTicks:function(F,C){this.yTicks=[];this.yTickSize=C;var E={};for(var D=this.initPageY;D>=this.minY;D=D-C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}for(D=this.initPageY;D<=this.maxY;D=D+C){if(!E[D]){this.yTicks[this.yTicks.length]=D;E[D]=true;}}this.yTicks.sort(this.DDM.numericSort);},setXConstraint:function(E,D,C){this.leftConstraint=parseInt(E,10);this.rightConstraint=parseInt(D,10);this.minX=this.initPageX-this.leftConstraint;this.maxX=this.initPageX+this.rightConstraint;if(C){this.setXTicks(this.initPageX,C);}this.constrainX=true;},clearConstraints:function(){this.constrainX=false;this.constrainY=false;this.clearTicks();},clearTicks:function(){this.xTicks=null;this.yTicks=null;this.xTickSize=0;this.yTickSize=0;},setYConstraint:function(C,E,D){this.topConstraint=parseInt(C,10);this.bottomConstraint=parseInt(E,10);this.minY=this.initPageY-this.topConstraint;this.maxY=this.initPageY+this.bottomConstraint;if(D){this.setYTicks(this.initPageY,D);}this.constrainY=true;},resetConstraints:function(){if(this.initPageX||this.initPageX===0){var D=(this.maintainOffset)?this.lastPageX-this.initPageX:0;var C=(this.maintainOffset)?this.lastPageY-this.initPageY:0;this.setInitPosition(D,C);}else{this.setInitPosition();}if(this.constrainX){this.setXConstraint(this.leftConstraint,this.rightConstraint,this.xTickSize);}if(this.constrainY){this.setYConstraint(this.topConstraint,this.bottomConstraint,this.yTickSize);}},getTick:function(I,F){if(!F){return I;}else{if(F[0]>=I){return F[0];}else{for(var D=0,C=F.length;D<C;++D){var E=D+1;if(F[E]&&F[E]>=I){var H=I-F[D];var G=F[E]-I;return(G>H)?F[D]:F[E];}}return F[F.length-1];}}},toString:function(){return("DragDrop "+this.id);}};})();YAHOO.util.DD=function(C,A,B){if(C){this.init(C,A,B);}};YAHOO.extend(YAHOO.util.DD,YAHOO.util.DragDrop,{scroll:true,autoOffset:function(C,B){var A=C-this.startPageX;var D=B-this.startPageY;this.setDelta(A,D);},setDelta:function(B,A){this.deltaX=B;this.deltaY=A;},setDragElPos:function(C,B){var A=this.getDragEl();this.alignElWithMouse(A,C,B);},alignElWithMouse:function(C,G,F){var E=this.getTargetCoord(G,F);if(!this.deltaSetXY){var H=[E.x,E.y];YAHOO.util.Dom.setXY(C,H);var D=parseInt(YAHOO.util.Dom.getStyle(C,"left"),10);var B=parseInt(YAHOO.util.Dom.getStyle(C,"top"),10);this.deltaSetXY=[D-E.x,B-E.y];}else{YAHOO.util.Dom.setStyle(C,"left",(E.x+this.deltaSetXY[0])+"px");YAHOO.util.Dom.setStyle(C,"top",(E.y+this.deltaSetXY[1])+"px");}this.cachePosition(E.x,E.y);var A=this;setTimeout(function(){A.autoScroll.call(A,E.x,E.y,C.offsetHeight,C.offsetWidth);},0);},cachePosition:function(B,A){if(B){this.lastPageX=B;this.lastPageY=A;}else{var C=YAHOO.util.Dom.getXY(this.getEl());this.lastPageX=C[0];this.lastPageY=C[1];}},autoScroll:function(J,I,E,K){if(this.scroll){var L=this.DDM.getClientHeight();var B=this.DDM.getClientWidth();var N=this.DDM.getScrollTop();var D=this.DDM.getScrollLeft();var H=E+I;var M=K+J;var G=(L+N-I-this.deltaY);var F=(B+D-J-this.deltaX);var C=40;var A=(document.all)?80:30;if(H>L&&G<C){window.scrollTo(D,N+A);}if(I<N&&N>0&&I-N<C){window.scrollTo(D,N-A);}if(M>B&&F<C){window.scrollTo(D+A,N);}if(J<D&&D>0&&J-D<C){window.scrollTo(D-A,N);}}},applyConfig:function(){YAHOO.util.DD.superclass.applyConfig.call(this);this.scroll=(this.config.scroll!==false);},b4MouseDown:function(A){this.setStartPosition();this.autoOffset(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},b4Drag:function(A){this.setDragElPos(YAHOO.util.Event.getPageX(A),YAHOO.util.Event.getPageY(A));},toString:function(){return("DD "+this.id);}});YAHOO.util.DDProxy=function(C,A,B){if(C){this.init(C,A,B);this.initFrame(); |
}};YAHOO.util.DDProxy.dragElId="ygddfdiv";YAHOO.extend(YAHOO.util.DDProxy,YAHOO.util.DD,{resizeFrame:true,centerFrame:false,createFrame:function(){var B=this,A=document.body;if(!A||!A.firstChild){setTimeout(function(){B.createFrame();},50);return ;}var F=this.getDragEl(),E=YAHOO.util.Dom;if(!F){F=document.createElement("div");F.id=this.dragElId;var D=F.style;D.position="absolute";D.visibility="hidden";D.cursor="move";D.border="2px solid #aaa";D.zIndex=999;D.height="25px";D.width="25px";var C=document.createElement("div");E.setStyle(C,"height","100%");E.setStyle(C,"width","100%");E.setStyle(C,"background-color","#ccc");E.setStyle(C,"opacity","0");F.appendChild(C);A.insertBefore(F,A.firstChild);}},initFrame:function(){this.createFrame();},applyConfig:function(){YAHOO.util.DDProxy.superclass.applyConfig.call(this);this.resizeFrame=(this.config.resizeFrame!==false);this.centerFrame=(this.config.centerFrame);this.setDragElId(this.config.dragElId||YAHOO.util.DDProxy.dragElId);},showFrame:function(E,D){var C=this.getEl();var A=this.getDragEl();var B=A.style;this._resizeProxy();if(this.centerFrame){this.setDelta(Math.round(parseInt(B.width,10)/2),Math.round(parseInt(B.height,10)/2));}this.setDragElPos(E,D);YAHOO.util.Dom.setStyle(A,"visibility","visible");},_resizeProxy:function(){if(this.resizeFrame){var H=YAHOO.util.Dom;var B=this.getEl();var C=this.getDragEl();var G=parseInt(H.getStyle(C,"borderTopWidth"),10);var I=parseInt(H.getStyle(C,"borderRightWidth"),10);var F=parseInt(H.getStyle(C,"borderBottomWidth"),10);var D=parseInt(H.getStyle(C,"borderLeftWidth"),10);if(isNaN(G)){G=0;}if(isNaN(I)){I=0;}if(isNaN(F)){F=0;}if(isNaN(D)){D=0;}var E=Math.max(0,B.offsetWidth-I-D);var A=Math.max(0,B.offsetHeight-G-F);H.setStyle(C,"width",E+"px");H.setStyle(C,"height",A+"px");}},b4MouseDown:function(B){this.setStartPosition();var A=YAHOO.util.Event.getPageX(B);var C=YAHOO.util.Event.getPageY(B);this.autoOffset(A,C);},b4StartDrag:function(A,B){this.showFrame(A,B);},b4EndDrag:function(A){YAHOO.util.Dom.setStyle(this.getDragEl(),"visibility","hidden");},endDrag:function(D){var C=YAHOO.util.Dom;var B=this.getEl();var A=this.getDragEl();C.setStyle(A,"visibility","");C.setStyle(B,"visibility","hidden");YAHOO.util.DDM.moveToEl(B,A);C.setStyle(A,"visibility","hidden");C.setStyle(B,"visibility","");},toString:function(){return("DDProxy "+this.id);}});YAHOO.util.DDTarget=function(C,A,B){if(C){this.initTarget(C,A,B);}};YAHOO.extend(YAHOO.util.DDTarget,YAHOO.util.DragDrop,{toString:function(){return("DDTarget "+this.id);}});YAHOO.register("dragdrop",YAHOO.util.DragDropMgr,{version:"2.4.1",build:"742"});YAHOO.util.Attribute=function(B,A){if(A){this.owner=A;this.configure(B,true);}};YAHOO.util.Attribute.prototype={name:undefined,value:null,owner:null,readOnly:false,writeOnce:false,_initialConfig:null,_written:false,method:null,validator:null,getValue:function(){return this.value;},setValue:function(F,B){var E;var A=this.owner;var C=this.name;var D={type:C,prevValue:this.getValue(),newValue:F};if(this.readOnly||(this.writeOnce&&this._written)){return false;}if(this.validator&&!this.validator.call(A,F)){return false;}if(!B){E=A.fireBeforeChangeEvent(D);if(E===false){return false;}}if(this.method){this.method.call(A,F);}this.value=F;this._written=true;D.type=C;if(!B){this.owner.fireChangeEvent(D);}return true;},configure:function(B,C){B=B||{};this._written=false;this._initialConfig=this._initialConfig||{};for(var A in B){if(A&&YAHOO.lang.hasOwnProperty(B,A)){this[A]=B[A];if(C){this._initialConfig[A]=B[A];}}}},resetValue:function(){return this.setValue(this._initialConfig.value);},resetConfig:function(){this.configure(this._initialConfig);},refresh:function(A){this.setValue(this.value,A);}};(function(){var A=YAHOO.util.Lang;YAHOO.util.AttributeProvider=function(){};YAHOO.util.AttributeProvider.prototype={_configs:null,get:function(C){this._configs=this._configs||{};var B=this._configs[C];if(!B){return undefined;}return B.value;},set:function(D,E,B){this._configs=this._configs||{};var C=this._configs[D];if(!C){return false;}return C.setValue(E,B);},getAttributeKeys:function(){this._configs=this._configs;var D=[];var B;for(var C in this._configs){B=this._configs[C];if(A.hasOwnProperty(this._configs,C)&&!A.isUndefined(B)){D[D.length]=C;}}return D;},setAttributes:function(D,B){for(var C in D){if(A.hasOwnProperty(D,C)){this.set(C,D[C],B);}}},resetValue:function(C,B){this._configs=this._configs||{};if(this._configs[C]){this.set(C,this._configs[C]._initialConfig.value,B);return true;}return false;},refresh:function(E,C){this._configs=this._configs;E=((A.isString(E))?[E]:E)||this.getAttributeKeys();for(var D=0,B=E.length;D<B;++D){if(this._configs[E[D]]&&!A.isUndefined(this._configs[E[D]].value)&&!A.isNull(this._configs[E[D]].value)){this._configs[E[D]].refresh(C);}}},register:function(B,C){this.setAttributeConfig(B,C);},getAttributeConfig:function(C){this._configs=this._configs||{};var B=this._configs[C]||{};var D={};for(C in B){if(A.hasOwnProperty(B,C)){D[C]=B[C];}}return D;},setAttributeConfig:function(B,C,D){this._configs=this._configs||{};C=C||{};if(!this._configs[B]){C.name=B;this._configs[B]=this.createAttribute(C);}else{this._configs[B].configure(C,D);}},configureAttribute:function(B,C,D){this.setAttributeConfig(B,C,D);},resetAttributeConfig:function(B){this._configs=this._configs||{};this._configs[B].resetConfig();},subscribe:function(B,C){this._events=this._events||{};if(!(B in this._events)){this._events[B]=this.createEvent(B);}YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){this.subscribe.apply(this,arguments);},addListener:function(){this.subscribe.apply(this,arguments);},fireBeforeChangeEvent:function(C){var B="before";B+=C.type.charAt(0).toUpperCase()+C.type.substr(1)+"Change";C.type=B;return this.fireEvent(C.type,C);},fireChangeEvent:function(B){B.type+="Change";return this.fireEvent(B.type,B);},createAttribute:function(B){return new YAHOO.util.Attribute(B,this);}};YAHOO.augment(YAHOO.util.AttributeProvider,YAHOO.util.EventProvider);})();(function(){var D=YAHOO.util.Dom,F=YAHOO.util.AttributeProvider;YAHOO.util.Element=function(G,H){if(arguments.length){this.init(G,H);}};YAHOO.util.Element.prototype={DOM_EVENTS:null,appendChild:function(G){G=G.get?G.get("element"):G;this.get("element").appendChild(G);},getElementsByTagName:function(G){return this.get("element").getElementsByTagName(G);},hasChildNodes:function(){return this.get("element").hasChildNodes();},insertBefore:function(G,H){G=G.get?G.get("element"):G;H=(H&&H.get)?H.get("element"):H;this.get("element").insertBefore(G,H);},removeChild:function(G){G=G.get?G.get("element"):G;this.get("element").removeChild(G);return true;},replaceChild:function(G,H){G=G.get?G.get("element"):G;H=H.get?H.get("element"):H;return this.get("element").replaceChild(G,H);},initAttributes:function(G){},addListener:function(K,J,L,I){var H=this.get("element");I=I||this;H=this.get("id")||H;var G=this;if(!this._events[K]){if(this.DOM_EVENTS[K]){YAHOO.util.Event.addListener(H,K,function(M){if(M.srcElement&&!M.target){M.target=M.srcElement;}G.fireEvent(K,M);},L,I);}this.createEvent(K,this);}YAHOO.util.EventProvider.prototype.subscribe.apply(this,arguments);},on:function(){this.addListener.apply(this,arguments);},subscribe:function(){this.addListener.apply(this,arguments);},removeListener:function(H,G){this.unsubscribe.apply(this,arguments);},addClass:function(G){D.addClass(this.get("element"),G);},getElementsByClassName:function(H,G){return D.getElementsByClassName(H,G,this.get("element"));},hasClass:function(G){return D.hasClass(this.get("element"),G);},removeClass:function(G){return D.removeClass(this.get("element"),G);},replaceClass:function(H,G){return D.replaceClass(this.get("element"),H,G);},setStyle:function(I,H){var G=this.get("element");if(!G){return this._queue[this._queue.length]=["setStyle",arguments];}return D.setStyle(G,I,H);},getStyle:function(G){return D.getStyle(this.get("element"),G);},fireQueue:function(){var H=this._queue;for(var I=0,G=H.length;I<G;++I){this[H[I][0]].apply(this,H[I][1]);}},appendTo:function(H,I){H=(H.get)?H.get("element"):D.get(H);this.fireEvent("beforeAppendTo",{type:"beforeAppendTo",target:H});I=(I&&I.get)?I.get("element"):D.get(I);var G=this.get("element");if(!G){return false;}if(!H){return false;}if(G.parent!=H){if(I){H.insertBefore(G,I);}else{H.appendChild(G);}}this.fireEvent("appendTo",{type:"appendTo",target:H});},get:function(G){var I=this._configs||{};var H=I.element;if(H&&!I[G]&&!YAHOO.lang.isUndefined(H.value[G])){return H.value[G];}return F.prototype.get.call(this,G);},setAttributes:function(L,H){var K=this.get("element"); |
for(var J in L){if(!this._configs[J]&&!YAHOO.lang.isUndefined(K[J])){this.setAttributeConfig(J);}}for(var I=0,G=this._configOrder.length;I<G;++I){if(L[this._configOrder[I]]){this.set(this._configOrder[I],L[this._configOrder[I]],H);}}},set:function(H,J,G){var I=this.get("element");if(!I){this._queue[this._queue.length]=["set",arguments];if(this._configs[H]){this._configs[H].value=J;}return ;}if(!this._configs[H]&&!YAHOO.lang.isUndefined(I[H])){C.call(this,H);}return F.prototype.set.apply(this,arguments);},setAttributeConfig:function(G,I,J){var H=this.get("element");if(H&&!this._configs[G]&&!YAHOO.lang.isUndefined(H[G])){C.call(this,G,I);}else{F.prototype.setAttributeConfig.apply(this,arguments);}this._configOrder.push(G);},getAttributeKeys:function(){var H=this.get("element");var I=F.prototype.getAttributeKeys.call(this);for(var G in H){if(!this._configs[G]){I[G]=I[G]||H[G];}}return I;},createEvent:function(H,G){this._events[H]=true;F.prototype.createEvent.apply(this,arguments);},init:function(H,G){A.apply(this,arguments);}};var A=function(H,G){this._queue=this._queue||[];this._events=this._events||{};this._configs=this._configs||{};this._configOrder=[];G=G||{};G.element=G.element||H||null;this.DOM_EVENTS={"click":true,"dblclick":true,"keydown":true,"keypress":true,"keyup":true,"mousedown":true,"mousemove":true,"mouseout":true,"mouseover":true,"mouseup":true,"focus":true,"blur":true,"submit":true};var I=false;if(YAHOO.lang.isString(H)){C.call(this,"id",{value:G.element});}if(D.get(H)){I=true;E.call(this,G);B.call(this,G);}YAHOO.util.Event.onAvailable(G.element,function(){if(!I){E.call(this,G);}this.fireEvent("available",{type:"available",target:G.element});},this,true);YAHOO.util.Event.onContentReady(G.element,function(){if(!I){B.call(this,G);}this.fireEvent("contentReady",{type:"contentReady",target:G.element});},this,true);};var E=function(G){this.setAttributeConfig("element",{value:D.get(G.element),readOnly:true});};var B=function(G){this.initAttributes(G);this.setAttributes(G,true);this.fireQueue();};var C=function(G,I){var H=this.get("element");I=I||{};I.name=G;I.method=I.method||function(J){H[G]=J;};I.value=I.value||H[G];this._configs[G]=new YAHOO.util.Attribute(I,this);};YAHOO.augment(YAHOO.util.Element,F);})();YAHOO.register("element",YAHOO.util.Element,{version:"2.4.1",build:"742"});YAHOO.register("utilities", YAHOO, {version: "2.4.1", build: "742"}); |
/branches/v2.6-greffoir/vendors/extjs-2.0.1/adapter/jquery/jquery.js |
---|
New file |
0,0 → 1,3408 |
(function(){ |
/* |
* jQuery 1.2.3 - New Wave Javascript |
* |
* Copyright (c) 2008 John Resig (jquery.com) |
* Dual licensed under the MIT (MIT-LICENSE.txt) |
* and GPL (GPL-LICENSE.txt) licenses. |
* |
* $Date: 2008-02-06 00:21:25 -0500 (Wed, 06 Feb 2008) $ |
* $Rev: 4663 $ |
*/ |
// Map over jQuery in case of overwrite |
if ( window.jQuery ) |
var _jQuery = window.jQuery; |
var jQuery = window.jQuery = function( selector, context ) { |
// The jQuery object is actually just the init constructor 'enhanced' |
return new jQuery.prototype.init( selector, context ); |
}; |
// Map over the $ in case of overwrite |
if ( window.$ ) |
var _$ = window.$; |
// Map the jQuery namespace to the '$' one |
window.$ = jQuery; |
// A simple way to check for HTML strings or ID strings |
// (both of which we optimize for) |
var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/; |
// Is it a simple selector |
var isSimple = /^.[^:#\[\.]*$/; |
jQuery.fn = jQuery.prototype = { |
init: function( selector, context ) { |
// Make sure that a selection was provided |
selector = selector || document; |
// Handle $(DOMElement) |
if ( selector.nodeType ) { |
this[0] = selector; |
this.length = 1; |
return this; |
// Handle HTML strings |
} else if ( typeof selector == "string" ) { |
// Are we dealing with HTML string or an ID? |
var match = quickExpr.exec( selector ); |
// Verify a match, and that no context was specified for #id |
if ( match && (match[1] || !context) ) { |
// HANDLE: $(html) -> $(array) |
if ( match[1] ) |
selector = jQuery.clean( [ match[1] ], context ); |
// HANDLE: $("#id") |
else { |
var elem = document.getElementById( match[3] ); |
// Make sure an element was located |
if ( elem ) |
// Handle the case where IE and Opera return items |
// by name instead of ID |
if ( elem.id != match[3] ) |
return jQuery().find( selector ); |
// Otherwise, we inject the element directly into the jQuery object |
else { |
this[0] = elem; |
this.length = 1; |
return this; |
} |
else |
selector = []; |
} |
// HANDLE: $(expr, [context]) |
// (which is just equivalent to: $(content).find(expr) |
} else |
return new jQuery( context ).find( selector ); |
// HANDLE: $(function) |
// Shortcut for document ready |
} else if ( jQuery.isFunction( selector ) ) |
return new jQuery( document )[ jQuery.fn.ready ? "ready" : "load" ]( selector ); |
return this.setArray( |
// HANDLE: $(array) |
selector.constructor == Array && selector || |
// HANDLE: $(arraylike) |
// Watch for when an array-like object, contains DOM nodes, is passed in as the selector |
(selector.jquery || selector.length && selector != window && !selector.nodeType && selector[0] != undefined && selector[0].nodeType) && jQuery.makeArray( selector ) || |
// HANDLE: $(*) |
[ selector ] ); |
}, |
// The current version of jQuery being used |
jquery: "1.2.3", |
// The number of elements contained in the matched element set |
size: function() { |
return this.length; |
}, |
// The number of elements contained in the matched element set |
length: 0, |
// Get the Nth element in the matched element set OR |
// Get the whole matched element set as a clean array |
get: function( num ) { |
return num == undefined ? |
// Return a 'clean' array |
jQuery.makeArray( this ) : |
// Return just the object |
this[ num ]; |
}, |
// Take an array of elements and push it onto the stack |
// (returning the new matched element set) |
pushStack: function( elems ) { |
// Build a new jQuery matched element set |
var ret = jQuery( elems ); |
// Add the old object onto the stack (as a reference) |
ret.prevObject = this; |
// Return the newly-formed element set |
return ret; |
}, |
// Force the current matched set of elements to become |
// the specified array of elements (destroying the stack in the process) |
// You should use pushStack() in order to do this, but maintain the stack |
setArray: function( elems ) { |
// Resetting the length to 0, then using the native Array push |
// is a super-fast way to populate an object with array-like properties |
this.length = 0; |
Array.prototype.push.apply( this, elems ); |
return this; |
}, |
// Execute a callback for every element in the matched set. |
// (You can seed the arguments with an array of args, but this is |
// only used internally.) |
each: function( callback, args ) { |
return jQuery.each( this, callback, args ); |
}, |
// Determine the position of an element within |
// the matched set of elements |
index: function( elem ) { |
var ret = -1; |
// Locate the position of the desired element |
this.each(function(i){ |
if ( this == elem ) |
ret = i; |
}); |
return ret; |
}, |
attr: function( name, value, type ) { |
var options = name; |
// Look for the case where we're accessing a style value |
if ( name.constructor == String ) |
if ( value == undefined ) |
return this.length && jQuery[ type || "attr" ]( this[0], name ) || undefined; |
else { |
options = {}; |
options[ name ] = value; |
} |
// Check to see if we're setting style values |
return this.each(function(i){ |
// Set all the styles |
for ( name in options ) |
jQuery.attr( |
type ? |
this.style : |
this, |
name, jQuery.prop( this, options[ name ], type, i, name ) |
); |
}); |
}, |
css: function( key, value ) { |
// ignore negative width and height values |
if ( (key == 'width' || key == 'height') && parseFloat(value) < 0 ) |
value = undefined; |
return this.attr( key, value, "curCSS" ); |
}, |
text: function( text ) { |
if ( typeof text != "object" && text != null ) |
return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) ); |
var ret = ""; |
jQuery.each( text || this, function(){ |
jQuery.each( this.childNodes, function(){ |
if ( this.nodeType != 8 ) |
ret += this.nodeType != 1 ? |
this.nodeValue : |
jQuery.fn.text( [ this ] ); |
}); |
}); |
return ret; |
}, |
wrapAll: function( html ) { |
if ( this[0] ) |
// The elements to wrap the target around |
jQuery( html, this[0].ownerDocument ) |
.clone() |
.insertBefore( this[0] ) |
.map(function(){ |
var elem = this; |
while ( elem.firstChild ) |
elem = elem.firstChild; |
return elem; |
}) |
.append(this); |
return this; |
}, |
wrapInner: function( html ) { |
return this.each(function(){ |
jQuery( this ).contents().wrapAll( html ); |
}); |
}, |
wrap: function( html ) { |
return this.each(function(){ |
jQuery( this ).wrapAll( html ); |
}); |
}, |
append: function() { |
return this.domManip(arguments, true, false, function(elem){ |
if (this.nodeType == 1) |
this.appendChild( elem ); |
}); |
}, |
prepend: function() { |
return this.domManip(arguments, true, true, function(elem){ |
if (this.nodeType == 1) |
this.insertBefore( elem, this.firstChild ); |
}); |
}, |
before: function() { |
return this.domManip(arguments, false, false, function(elem){ |
this.parentNode.insertBefore( elem, this ); |
}); |
}, |
after: function() { |
return this.domManip(arguments, false, true, function(elem){ |
this.parentNode.insertBefore( elem, this.nextSibling ); |
}); |
}, |
end: function() { |
return this.prevObject || jQuery( [] ); |
}, |
find: function( selector ) { |
var elems = jQuery.map(this, function(elem){ |
return jQuery.find( selector, elem ); |
}); |
return this.pushStack( /[^+>] [^+>]/.test( selector ) || selector.indexOf("..") > -1 ? |
jQuery.unique( elems ) : |
elems ); |
}, |
clone: function( events ) { |
// Do the clone |
var ret = this.map(function(){ |
if ( jQuery.browser.msie && !jQuery.isXMLDoc(this) ) { |
// IE copies events bound via attachEvent when |
// using cloneNode. Calling detachEvent on the |
// clone will also remove the events from the orignal |
// In order to get around this, we use innerHTML. |
// Unfortunately, this means some modifications to |
// attributes in IE that are actually only stored |
// as properties will not be copied (such as the |
// the name attribute on an input). |
var clone = this.cloneNode(true), |
container = document.createElement("div"); |
container.appendChild(clone); |
return jQuery.clean([container.innerHTML])[0]; |
} else |
return this.cloneNode(true); |
}); |
// Need to set the expando to null on the cloned set if it exists |
// removeData doesn't work here, IE removes it from the original as well |
// this is primarily for IE but the data expando shouldn't be copied over in any browser |
var clone = ret.find("*").andSelf().each(function(){ |
if ( this[ expando ] != undefined ) |
this[ expando ] = null; |
}); |
// Copy the events from the original to the clone |
if ( events === true ) |
this.find("*").andSelf().each(function(i){ |
if (this.nodeType == 3) |
return; |
var events = jQuery.data( this, "events" ); |
for ( var type in events ) |
for ( var handler in events[ type ] ) |
jQuery.event.add( clone[ i ], type, events[ type ][ handler ], events[ type ][ handler ].data ); |
}); |
// Return the cloned set |
return ret; |
}, |
filter: function( selector ) { |
return this.pushStack( |
jQuery.isFunction( selector ) && |
jQuery.grep(this, function(elem, i){ |
return selector.call( elem, i ); |
}) || |
jQuery.multiFilter( selector, this ) ); |
}, |
not: function( selector ) { |
if ( selector.constructor == String ) |
// test special case where just one selector is passed in |
if ( isSimple.test( selector ) ) |
return this.pushStack( jQuery.multiFilter( selector, this, true ) ); |
else |
selector = jQuery.multiFilter( selector, this ); |
var isArrayLike = selector.length && selector[selector.length - 1] !== undefined && !selector.nodeType; |
return this.filter(function() { |
return isArrayLike ? jQuery.inArray( this, selector ) < 0 : this != selector; |
}); |
}, |
add: function( selector ) { |
return !selector ? this : this.pushStack( jQuery.merge( |
this.get(), |
selector.constructor == String ? |
jQuery( selector ).get() : |
selector.length != undefined && (!selector.nodeName || jQuery.nodeName(selector, "form")) ? |
selector : [selector] ) ); |
}, |
is: function( selector ) { |
return selector ? |
jQuery.multiFilter( selector, this ).length > 0 : |
false; |
}, |
hasClass: function( selector ) { |
return this.is( "." + selector ); |
}, |
val: function( value ) { |
if ( value == undefined ) { |
if ( this.length ) { |
var elem = this[0]; |
// We need to handle select boxes special |
if ( jQuery.nodeName( elem, "select" ) ) { |
var index = elem.selectedIndex, |
values = [], |
options = elem.options, |
one = elem.type == "select-one"; |
// Nothing was selected |
if ( index < 0 ) |
return null; |
// Loop through all the selected options |
for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) { |
var option = options[ i ]; |
if ( option.selected ) { |
// Get the specifc value for the option |
value = jQuery.browser.msie && !option.attributes.value.specified ? option.text : option.value; |
// We don't need an array for one selects |
if ( one ) |
return value; |
// Multi-Selects return an array |
values.push( value ); |
} |
} |
return values; |
// Everything else, we just grab the value |
} else |
return (this[0].value || "").replace(/\r/g, ""); |
} |
return undefined; |
} |
return this.each(function(){ |
if ( this.nodeType != 1 ) |
return; |
if ( value.constructor == Array && /radio|checkbox/.test( this.type ) ) |
this.checked = (jQuery.inArray(this.value, value) >= 0 || |
jQuery.inArray(this.name, value) >= 0); |
else if ( jQuery.nodeName( this, "select" ) ) { |
var values = value.constructor == Array ? |
value : |
[ value ]; |
jQuery( "option", this ).each(function(){ |
this.selected = (jQuery.inArray( this.value, values ) >= 0 || |
jQuery.inArray( this.text, values ) >= 0); |
}); |
if ( !values.length ) |
this.selectedIndex = -1; |
} else |
this.value = value; |
}); |
}, |
html: function( value ) { |
return value == undefined ? |
(this.length ? |
this[0].innerHTML : |
null) : |
this.empty().append( value ); |
}, |
replaceWith: function( value ) { |
return this.after( value ).remove(); |
}, |
eq: function( i ) { |
return this.slice( i, i + 1 ); |
}, |
slice: function() { |
return this.pushStack( Array.prototype.slice.apply( this, arguments ) ); |
}, |
map: function( callback ) { |
return this.pushStack( jQuery.map(this, function(elem, i){ |
return callback.call( elem, i, elem ); |
})); |
}, |
andSelf: function() { |
return this.add( this.prevObject ); |
}, |
data: function( key, value ){ |
var parts = key.split("."); |
parts[1] = parts[1] ? "." + parts[1] : ""; |
if ( value == null ) { |
var data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]); |
if ( data == undefined && this.length ) |
data = jQuery.data( this[0], key ); |
return data == null && parts[1] ? |
this.data( parts[0] ) : |
data; |
} else |
return this.trigger("setData" + parts[1] + "!", [parts[0], value]).each(function(){ |
jQuery.data( this, key, value ); |
}); |
}, |
removeData: function( key ){ |
return this.each(function(){ |
jQuery.removeData( this, key ); |
}); |
}, |
domManip: function( args, table, reverse, callback ) { |
var clone = this.length > 1, elems; |
return this.each(function(){ |
if ( !elems ) { |
elems = jQuery.clean( args, this.ownerDocument ); |
if ( reverse ) |
elems.reverse(); |
} |
var obj = this; |
if ( table && jQuery.nodeName( this, "table" ) && jQuery.nodeName( elems[0], "tr" ) ) |
obj = this.getElementsByTagName("tbody")[0] || this.appendChild( this.ownerDocument.createElement("tbody") ); |
var scripts = jQuery( [] ); |
jQuery.each(elems, function(){ |
var elem = clone ? |
jQuery( this ).clone( true )[0] : |
this; |
// execute all scripts after the elements have been injected |
if ( jQuery.nodeName( elem, "script" ) ) { |
scripts = scripts.add( elem ); |
} else { |
// Remove any inner scripts for later evaluation |
if ( elem.nodeType == 1 ) |
scripts = scripts.add( jQuery( "script", elem ).remove() ); |
// Inject the elements into the document |
callback.call( obj, elem ); |
} |
}); |
scripts.each( evalScript ); |
}); |
} |
}; |
// Give the init function the jQuery prototype for later instantiation |
jQuery.prototype.init.prototype = jQuery.prototype; |
function evalScript( i, elem ) { |
if ( elem.src ) |
jQuery.ajax({ |
url: elem.src, |
async: false, |
dataType: "script" |
}); |
else |
jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" ); |
if ( elem.parentNode ) |
elem.parentNode.removeChild( elem ); |
} |
jQuery.extend = jQuery.fn.extend = function() { |
// copy reference to target object |
var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; |
// Handle a deep copy situation |
if ( target.constructor == Boolean ) { |
deep = target; |
target = arguments[1] || {}; |
// skip the boolean and the target |
i = 2; |
} |
// Handle case when target is a string or something (possible in deep copy) |
if ( typeof target != "object" && typeof target != "function" ) |
target = {}; |
// extend jQuery itself if only one argument is passed |
if ( length == 1 ) { |
target = this; |
i = 0; |
} |
for ( ; i < length; i++ ) |
// Only deal with non-null/undefined values |
if ( (options = arguments[ i ]) != null ) |
// Extend the base object |
for ( var name in options ) { |
// Prevent never-ending loop |
if ( target === options[ name ] ) |
continue; |
// Recurse if we're merging object values |
if ( deep && options[ name ] && typeof options[ name ] == "object" && target[ name ] && !options[ name ].nodeType ) |
target[ name ] = jQuery.extend( target[ name ], options[ name ] ); |
// Don't bring in undefined values |
else if ( options[ name ] != undefined ) |
target[ name ] = options[ name ]; |
} |
// Return the modified object |
return target; |
}; |
var expando = "jQuery" + (new Date()).getTime(), uuid = 0, windowData = {}; |
// exclude the following css properties to add px |
var exclude = /z-?index|font-?weight|opacity|zoom|line-?height/i; |
jQuery.extend({ |
noConflict: function( deep ) { |
window.$ = _$; |
if ( deep ) |
window.jQuery = _jQuery; |
return jQuery; |
}, |
// See test/unit/core.js for details concerning this function. |
isFunction: function( fn ) { |
return !!fn && typeof fn != "string" && !fn.nodeName && |
fn.constructor != Array && /function/i.test( fn + "" ); |
}, |
// check if an element is in a (or is an) XML document |
isXMLDoc: function( elem ) { |
return elem.documentElement && !elem.body || |
elem.tagName && elem.ownerDocument && !elem.ownerDocument.body; |
}, |
// Evalulates a script in a global context |
globalEval: function( data ) { |
data = jQuery.trim( data ); |
if ( data ) { |
// Inspired by code by Andrea Giammarchi |
// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html |
var head = document.getElementsByTagName("head")[0] || document.documentElement, |
script = document.createElement("script"); |
script.type = "text/javascript"; |
if ( jQuery.browser.msie ) |
script.text = data; |
else |
script.appendChild( document.createTextNode( data ) ); |
head.appendChild( script ); |
head.removeChild( script ); |
} |
}, |
nodeName: function( elem, name ) { |
return elem.nodeName && elem.nodeName.toUpperCase() == name.toUpperCase(); |
}, |
cache: {}, |
data: function( elem, name, data ) { |
elem = elem == window ? |
windowData : |
elem; |
var id = elem[ expando ]; |
// Compute a unique ID for the element |
if ( !id ) |
id = elem[ expando ] = ++uuid; |
// Only generate the data cache if we're |
// trying to access or manipulate it |
if ( name && !jQuery.cache[ id ] ) |
jQuery.cache[ id ] = {}; |
// Prevent overriding the named cache with undefined values |
if ( data != undefined ) |
jQuery.cache[ id ][ name ] = data; |
// Return the named cache data, or the ID for the element |
return name ? |
jQuery.cache[ id ][ name ] : |
id; |
}, |
removeData: function( elem, name ) { |
elem = elem == window ? |
windowData : |
elem; |
var id = elem[ expando ]; |
// If we want to remove a specific section of the element's data |
if ( name ) { |
if ( jQuery.cache[ id ] ) { |
// Remove the section of cache data |
delete jQuery.cache[ id ][ name ]; |
// If we've removed all the data, remove the element's cache |
name = ""; |
for ( name in jQuery.cache[ id ] ) |
break; |
if ( !name ) |
jQuery.removeData( elem ); |
} |
// Otherwise, we want to remove all of the element's data |
} else { |
// Clean up the element expando |
try { |
delete elem[ expando ]; |
} catch(e){ |
// IE has trouble directly removing the expando |
// but it's ok with using removeAttribute |
if ( elem.removeAttribute ) |
elem.removeAttribute( expando ); |
} |
// Completely remove the data cache |
delete jQuery.cache[ id ]; |
} |
}, |
// args is for internal usage only |
each: function( object, callback, args ) { |
if ( args ) { |
if ( object.length == undefined ) { |
for ( var name in object ) |
if ( callback.apply( object[ name ], args ) === false ) |
break; |
} else |
for ( var i = 0, length = object.length; i < length; i++ ) |
if ( callback.apply( object[ i ], args ) === false ) |
break; |
// A special, fast, case for the most common use of each |
} else { |
if ( object.length == undefined ) { |
for ( var name in object ) |
if ( callback.call( object[ name ], name, object[ name ] ) === false ) |
break; |
} else |
for ( var i = 0, length = object.length, value = object[0]; |
i < length && callback.call( value, i, value ) !== false; value = object[++i] ){} |
} |
return object; |
}, |
prop: function( elem, value, type, i, name ) { |
// Handle executable functions |
if ( jQuery.isFunction( value ) ) |
value = value.call( elem, i ); |
// Handle passing in a number to a CSS property |
return value && value.constructor == Number && type == "curCSS" && !exclude.test( name ) ? |
value + "px" : |
value; |
}, |
className: { |
// internal only, use addClass("class") |
add: function( elem, classNames ) { |
jQuery.each((classNames || "").split(/\s+/), function(i, className){ |
if ( elem.nodeType == 1 && !jQuery.className.has( elem.className, className ) ) |
elem.className += (elem.className ? " " : "") + className; |
}); |
}, |
// internal only, use removeClass("class") |
remove: function( elem, classNames ) { |
if (elem.nodeType == 1) |
elem.className = classNames != undefined ? |
jQuery.grep(elem.className.split(/\s+/), function(className){ |
return !jQuery.className.has( classNames, className ); |
}).join(" ") : |
""; |
}, |
// internal only, use is(".class") |
has: function( elem, className ) { |
return jQuery.inArray( className, (elem.className || elem).toString().split(/\s+/) ) > -1; |
} |
}, |
// A method for quickly swapping in/out CSS properties to get correct calculations |
swap: function( elem, options, callback ) { |
var old = {}; |
// Remember the old values, and insert the new ones |
for ( var name in options ) { |
old[ name ] = elem.style[ name ]; |
elem.style[ name ] = options[ name ]; |
} |
callback.call( elem ); |
// Revert the old values |
for ( var name in options ) |
elem.style[ name ] = old[ name ]; |
}, |
css: function( elem, name, force ) { |
if ( name == "width" || name == "height" ) { |
var val, props = { position: "absolute", visibility: "hidden", display:"block" }, which = name == "width" ? [ "Left", "Right" ] : [ "Top", "Bottom" ]; |
function getWH() { |
val = name == "width" ? elem.offsetWidth : elem.offsetHeight; |
var padding = 0, border = 0; |
jQuery.each( which, function() { |
padding += parseFloat(jQuery.curCSS( elem, "padding" + this, true)) || 0; |
border += parseFloat(jQuery.curCSS( elem, "border" + this + "Width", true)) || 0; |
}); |
val -= Math.round(padding + border); |
} |
if ( jQuery(elem).is(":visible") ) |
getWH(); |
else |
jQuery.swap( elem, props, getWH ); |
return Math.max(0, val); |
} |
return jQuery.curCSS( elem, name, force ); |
}, |
curCSS: function( elem, name, force ) { |
var ret; |
// A helper method for determining if an element's values are broken |
function color( elem ) { |
if ( !jQuery.browser.safari ) |
return false; |
var ret = document.defaultView.getComputedStyle( elem, null ); |
return !ret || ret.getPropertyValue("color") == ""; |
} |
// We need to handle opacity special in IE |
if ( name == "opacity" && jQuery.browser.msie ) { |
ret = jQuery.attr( elem.style, "opacity" ); |
return ret == "" ? |
"1" : |
ret; |
} |
// Opera sometimes will give the wrong display answer, this fixes it, see #2037 |
if ( jQuery.browser.opera && name == "display" ) { |
var save = elem.style.outline; |
elem.style.outline = "0 solid black"; |
elem.style.outline = save; |
} |
// Make sure we're using the right name for getting the float value |
if ( name.match( /float/i ) ) |
name = styleFloat; |
if ( !force && elem.style && elem.style[ name ] ) |
ret = elem.style[ name ]; |
else if ( document.defaultView && document.defaultView.getComputedStyle ) { |
// Only "float" is needed here |
if ( name.match( /float/i ) ) |
name = "float"; |
name = name.replace( /([A-Z])/g, "-$1" ).toLowerCase(); |
var getComputedStyle = document.defaultView.getComputedStyle( elem, null ); |
if ( getComputedStyle && !color( elem ) ) |
ret = getComputedStyle.getPropertyValue( name ); |
// If the element isn't reporting its values properly in Safari |
// then some display: none elements are involved |
else { |
var swap = [], stack = []; |
// Locate all of the parent display: none elements |
for ( var a = elem; a && color(a); a = a.parentNode ) |
stack.unshift(a); |
// Go through and make them visible, but in reverse |
// (It would be better if we knew the exact display type that they had) |
for ( var i = 0; i < stack.length; i++ ) |
if ( color( stack[ i ] ) ) { |
swap[ i ] = stack[ i ].style.display; |
stack[ i ].style.display = "block"; |
} |
// Since we flip the display style, we have to handle that |
// one special, otherwise get the value |
ret = name == "display" && swap[ stack.length - 1 ] != null ? |
"none" : |
( getComputedStyle && getComputedStyle.getPropertyValue( name ) ) || ""; |
// Finally, revert the display styles back |
for ( var i = 0; i < swap.length; i++ ) |
if ( swap[ i ] != null ) |
stack[ i ].style.display = swap[ i ]; |
} |
// We should always get a number back from opacity |
if ( name == "opacity" && ret == "" ) |
ret = "1"; |
} else if ( elem.currentStyle ) { |
var camelCase = name.replace(/\-(\w)/g, function(all, letter){ |
return letter.toUpperCase(); |
}); |
ret = elem.currentStyle[ name ] || elem.currentStyle[ camelCase ]; |
// From the awesome hack by Dean Edwards |
// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 |
// If we're not dealing with a regular pixel number |
// but a number that has a weird ending, we need to convert it to pixels |
if ( !/^\d+(px)?$/i.test( ret ) && /^\d/.test( ret ) ) { |
// Remember the original values |
var style = elem.style.left, runtimeStyle = elem.runtimeStyle.left; |
// Put in the new values to get a computed value out |
elem.runtimeStyle.left = elem.currentStyle.left; |
elem.style.left = ret || 0; |
ret = elem.style.pixelLeft + "px"; |
// Revert the changed values |
elem.style.left = style; |
elem.runtimeStyle.left = runtimeStyle; |
} |
} |
return ret; |
}, |
clean: function( elems, context ) { |
var ret = []; |
context = context || document; |
// !context.createElement fails in IE with an error but returns typeof 'object' |
if (typeof context.createElement == 'undefined') |
context = context.ownerDocument || context[0] && context[0].ownerDocument || document; |
jQuery.each(elems, function(i, elem){ |
if ( !elem ) |
return; |
if ( elem.constructor == Number ) |
elem = elem.toString(); |
// Convert html string into DOM nodes |
if ( typeof elem == "string" ) { |
// Fix "XHTML"-style tags in all browsers |
elem = elem.replace(/(<(\w+)[^>]*?)\/>/g, function(all, front, tag){ |
return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i) ? |
all : |
front + "></" + tag + ">"; |
}); |
// Trim whitespace, otherwise indexOf won't work as expected |
var tags = jQuery.trim( elem ).toLowerCase(), div = context.createElement("div"); |
var wrap = |
// option or optgroup |
!tags.indexOf("<opt") && |
[ 1, "<select multiple='multiple'>", "</select>" ] || |
!tags.indexOf("<leg") && |
[ 1, "<fieldset>", "</fieldset>" ] || |
tags.match(/^<(thead|tbody|tfoot|colg|cap)/) && |
[ 1, "<table>", "</table>" ] || |
!tags.indexOf("<tr") && |
[ 2, "<table><tbody>", "</tbody></table>" ] || |
// <thead> matched above |
(!tags.indexOf("<td") || !tags.indexOf("<th")) && |
[ 3, "<table><tbody><tr>", "</tr></tbody></table>" ] || |
!tags.indexOf("<col") && |
[ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ] || |
// IE can't serialize <link> and <script> tags normally |
jQuery.browser.msie && |
[ 1, "div<div>", "</div>" ] || |
[ 0, "", "" ]; |
// Go to html and back, then peel off extra wrappers |
div.innerHTML = wrap[1] + elem + wrap[2]; |
// Move to the right depth |
while ( wrap[0]-- ) |
div = div.lastChild; |
// Remove IE's autoinserted <tbody> from table fragments |
if ( jQuery.browser.msie ) { |
// String was a <table>, *may* have spurious <tbody> |
var tbody = !tags.indexOf("<table") && tags.indexOf("<tbody") < 0 ? |
div.firstChild && div.firstChild.childNodes : |
// String was a bare <thead> or <tfoot> |
wrap[1] == "<table>" && tags.indexOf("<tbody") < 0 ? |
div.childNodes : |
[]; |
for ( var j = tbody.length - 1; j >= 0 ; --j ) |
if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) |
tbody[ j ].parentNode.removeChild( tbody[ j ] ); |
// IE completely kills leading whitespace when innerHTML is used |
if ( /^\s/.test( elem ) ) |
div.insertBefore( context.createTextNode( elem.match(/^\s*/)[0] ), div.firstChild ); |
} |
elem = jQuery.makeArray( div.childNodes ); |
} |
if ( elem.length === 0 && (!jQuery.nodeName( elem, "form" ) && !jQuery.nodeName( elem, "select" )) ) |
return; |
if ( elem[0] == undefined || jQuery.nodeName( elem, "form" ) || elem.options ) |
ret.push( elem ); |
else |
ret = jQuery.merge( ret, elem ); |
}); |
return ret; |
}, |
attr: function( elem, name, value ) { |
// don't set attributes on text and comment nodes |
if (!elem || elem.nodeType == 3 || elem.nodeType == 8) |
return undefined; |
var fix = jQuery.isXMLDoc( elem ) ? |
{} : |
jQuery.props; |
// Safari mis-reports the default selected property of a hidden option |
// Accessing the parent's selectedIndex property fixes it |
if ( name == "selected" && jQuery.browser.safari ) |
elem.parentNode.selectedIndex; |
// Certain attributes only work when accessed via the old DOM 0 way |
if ( fix[ name ] ) { |
if ( value != undefined ) |
elem[ fix[ name ] ] = value; |
return elem[ fix[ name ] ]; |
} else if ( jQuery.browser.msie && name == "style" ) |
return jQuery.attr( elem.style, "cssText", value ); |
else if ( value == undefined && jQuery.browser.msie && jQuery.nodeName( elem, "form" ) && (name == "action" || name == "method") ) |
return elem.getAttributeNode( name ).nodeValue; |
// IE elem.getAttribute passes even for style |
else if ( elem.tagName ) { |
if ( value != undefined ) { |
// We can't allow the type property to be changed (since it causes problems in IE) |
if ( name == "type" && jQuery.nodeName( elem, "input" ) && elem.parentNode ) |
throw "type property can't be changed"; |
// convert the value to a string (all browsers do this but IE) see #1070 |
elem.setAttribute( name, "" + value ); |
} |
if ( jQuery.browser.msie && /href|src/.test( name ) && !jQuery.isXMLDoc( elem ) ) |
return elem.getAttribute( name, 2 ); |
return elem.getAttribute( name ); |
// elem is actually elem.style ... set the style |
} else { |
// IE actually uses filters for opacity |
if ( name == "opacity" && jQuery.browser.msie ) { |
if ( value != undefined ) { |
// IE has trouble with opacity if it does not have layout |
// Force it by setting the zoom level |
elem.zoom = 1; |
// Set the alpha filter to set the opacity |
elem.filter = (elem.filter || "").replace( /alpha\([^)]*\)/, "" ) + |
(parseFloat( value ).toString() == "NaN" ? "" : "alpha(opacity=" + value * 100 + ")"); |
} |
return elem.filter && elem.filter.indexOf("opacity=") >= 0 ? |
(parseFloat( elem.filter.match(/opacity=([^)]*)/)[1] ) / 100).toString() : |
""; |
} |
name = name.replace(/-([a-z])/ig, function(all, letter){ |
return letter.toUpperCase(); |
}); |
if ( value != undefined ) |
elem[ name ] = value; |
return elem[ name ]; |
} |
}, |
trim: function( text ) { |
return (text || "").replace( /^\s+|\s+$/g, "" ); |
}, |
makeArray: function( array ) { |
var ret = []; |
// Need to use typeof to fight Safari childNodes crashes |
if ( typeof array != "array" ) |
for ( var i = 0, length = array.length; i < length; i++ ) |
ret.push( array[ i ] ); |
else |
ret = array.slice( 0 ); |
return ret; |
}, |
inArray: function( elem, array ) { |
for ( var i = 0, length = array.length; i < length; i++ ) |
if ( array[ i ] == elem ) |
return i; |
return -1; |
}, |
merge: function( first, second ) { |
// We have to loop this way because IE & Opera overwrite the length |
// expando of getElementsByTagName |
// Also, we need to make sure that the correct elements are being returned |
// (IE returns comment nodes in a '*' query) |
if ( jQuery.browser.msie ) { |
for ( var i = 0; second[ i ]; i++ ) |
if ( second[ i ].nodeType != 8 ) |
first.push( second[ i ] ); |
} else |
for ( var i = 0; second[ i ]; i++ ) |
first.push( second[ i ] ); |
return first; |
}, |
unique: function( array ) { |
var ret = [], done = {}; |
try { |
for ( var i = 0, length = array.length; i < length; i++ ) { |
var id = jQuery.data( array[ i ] ); |
if ( !done[ id ] ) { |
done[ id ] = true; |
ret.push( array[ i ] ); |
} |
} |
} catch( e ) { |
ret = array; |
} |
return ret; |
}, |
grep: function( elems, callback, inv ) { |
var ret = []; |
// Go through the array, only saving the items |
// that pass the validator function |
for ( var i = 0, length = elems.length; i < length; i++ ) |
if ( !inv && callback( elems[ i ], i ) || inv && !callback( elems[ i ], i ) ) |
ret.push( elems[ i ] ); |
return ret; |
}, |
map: function( elems, callback ) { |
var ret = []; |
// Go through the array, translating each of the items to their |
// new value (or values). |
for ( var i = 0, length = elems.length; i < length; i++ ) { |
var value = callback( elems[ i ], i ); |
if ( value !== null && value != undefined ) { |
if ( value.constructor != Array ) |
value = [ value ]; |
ret = ret.concat( value ); |
} |
} |
return ret; |
} |
}); |
var userAgent = navigator.userAgent.toLowerCase(); |
// Figure out what browser is being used |
jQuery.browser = { |
version: (userAgent.match( /.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/ ) || [])[1], |
safari: /webkit/.test( userAgent ), |
opera: /opera/.test( userAgent ), |
msie: /msie/.test( userAgent ) && !/opera/.test( userAgent ), |
mozilla: /mozilla/.test( userAgent ) && !/(compatible|webkit)/.test( userAgent ) |
}; |
var styleFloat = jQuery.browser.msie ? |
"styleFloat" : |
"cssFloat"; |
jQuery.extend({ |
// Check to see if the W3C box model is being used |
boxModel: !jQuery.browser.msie || document.compatMode == "CSS1Compat", |
props: { |
"for": "htmlFor", |
"class": "className", |
"float": styleFloat, |
cssFloat: styleFloat, |
styleFloat: styleFloat, |
innerHTML: "innerHTML", |
className: "className", |
value: "value", |
disabled: "disabled", |
checked: "checked", |
readonly: "readOnly", |
selected: "selected", |
maxlength: "maxLength", |
selectedIndex: "selectedIndex", |
defaultValue: "defaultValue", |
tagName: "tagName", |
nodeName: "nodeName" |
} |
}); |
jQuery.each({ |
parent: function(elem){return elem.parentNode;}, |
parents: function(elem){return jQuery.dir(elem,"parentNode");}, |
next: function(elem){return jQuery.nth(elem,2,"nextSibling");}, |
prev: function(elem){return jQuery.nth(elem,2,"previousSibling");}, |
nextAll: function(elem){return jQuery.dir(elem,"nextSibling");}, |
prevAll: function(elem){return jQuery.dir(elem,"previousSibling");}, |
siblings: function(elem){return jQuery.sibling(elem.parentNode.firstChild,elem);}, |
children: function(elem){return jQuery.sibling(elem.firstChild);}, |
contents: function(elem){return jQuery.nodeName(elem,"iframe")?elem.contentDocument||elem.contentWindow.document:jQuery.makeArray(elem.childNodes);} |
}, function(name, fn){ |
jQuery.fn[ name ] = function( selector ) { |
var ret = jQuery.map( this, fn ); |
if ( selector && typeof selector == "string" ) |
ret = jQuery.multiFilter( selector, ret ); |
return this.pushStack( jQuery.unique( ret ) ); |
}; |
}); |
jQuery.each({ |
appendTo: "append", |
prependTo: "prepend", |
insertBefore: "before", |
insertAfter: "after", |
replaceAll: "replaceWith" |
}, function(name, original){ |
jQuery.fn[ name ] = function() { |
var args = arguments; |
return this.each(function(){ |
for ( var i = 0, length = args.length; i < length; i++ ) |
jQuery( args[ i ] )[ original ]( this ); |
}); |
}; |
}); |
jQuery.each({ |
removeAttr: function( name ) { |
jQuery.attr( this, name, "" ); |
if (this.nodeType == 1) |
this.removeAttribute( name ); |
}, |
addClass: function( classNames ) { |
jQuery.className.add( this, classNames ); |
}, |
removeClass: function( classNames ) { |
jQuery.className.remove( this, classNames ); |
}, |
toggleClass: function( classNames ) { |
jQuery.className[ jQuery.className.has( this, classNames ) ? "remove" : "add" ]( this, classNames ); |
}, |
remove: function( selector ) { |
if ( !selector || jQuery.filter( selector, [ this ] ).r.length ) { |
// Prevent memory leaks |
jQuery( "*", this ).add(this).each(function(){ |
jQuery.event.remove(this); |
jQuery.removeData(this); |
}); |
if (this.parentNode) |
this.parentNode.removeChild( this ); |
} |
}, |
empty: function() { |
// Remove element nodes and prevent memory leaks |
jQuery( ">*", this ).remove(); |
// Remove any remaining nodes |
while ( this.firstChild ) |
this.removeChild( this.firstChild ); |
} |
}, function(name, fn){ |
jQuery.fn[ name ] = function(){ |
return this.each( fn, arguments ); |
}; |
}); |
jQuery.each([ "Height", "Width" ], function(i, name){ |
var type = name.toLowerCase(); |
jQuery.fn[ type ] = function( size ) { |
// Get window width or height |
return this[0] == window ? |
// Opera reports document.body.client[Width/Height] properly in both quirks and standards |
jQuery.browser.opera && document.body[ "client" + name ] || |
// Safari reports inner[Width/Height] just fine (Mozilla and Opera include scroll bar widths) |
jQuery.browser.safari && window[ "inner" + name ] || |
// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode |
document.compatMode == "CSS1Compat" && document.documentElement[ "client" + name ] || document.body[ "client" + name ] : |
// Get document width or height |
this[0] == document ? |
// Either scroll[Width/Height] or offset[Width/Height], whichever is greater |
Math.max( |
Math.max(document.body["scroll" + name], document.documentElement["scroll" + name]), |
Math.max(document.body["offset" + name], document.documentElement["offset" + name]) |
) : |
// Get or set width or height on the element |
size == undefined ? |
// Get width or height on the element |
(this.length ? jQuery.css( this[0], type ) : null) : |
// Set the width or height on the element (default to pixels if value is unitless) |
this.css( type, size.constructor == String ? size : size + "px" ); |
}; |
}); |
var chars = jQuery.browser.safari && parseInt(jQuery.browser.version) < 417 ? |
"(?:[\\w*_-]|\\\\.)" : |
"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)", |
quickChild = new RegExp("^>\\s*(" + chars + "+)"), |
quickID = new RegExp("^(" + chars + "+)(#)(" + chars + "+)"), |
quickClass = new RegExp("^([#.]?)(" + chars + "*)"); |
jQuery.extend({ |
expr: { |
"": function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);}, |
"#": function(a,i,m){return a.getAttribute("id")==m[2];}, |
":": { |
// Position Checks |
lt: function(a,i,m){return i<m[3]-0;}, |
gt: function(a,i,m){return i>m[3]-0;}, |
nth: function(a,i,m){return m[3]-0==i;}, |
eq: function(a,i,m){return m[3]-0==i;}, |
first: function(a,i){return i==0;}, |
last: function(a,i,m,r){return i==r.length-1;}, |
even: function(a,i){return i%2==0;}, |
odd: function(a,i){return i%2;}, |
// Child Checks |
"first-child": function(a){return a.parentNode.getElementsByTagName("*")[0]==a;}, |
"last-child": function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;}, |
"only-child": function(a){return !jQuery.nth(a.parentNode.lastChild,2,"previousSibling");}, |
// Parent Checks |
parent: function(a){return a.firstChild;}, |
empty: function(a){return !a.firstChild;}, |
// Text Check |
contains: function(a,i,m){return (a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;}, |
// Visibility |
visible: function(a){return "hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";}, |
hidden: function(a){return "hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";}, |
// Form attributes |
enabled: function(a){return !a.disabled;}, |
disabled: function(a){return a.disabled;}, |
checked: function(a){return a.checked;}, |
selected: function(a){return a.selected||jQuery.attr(a,"selected");}, |
// Form elements |
text: function(a){return "text"==a.type;}, |
radio: function(a){return "radio"==a.type;}, |
checkbox: function(a){return "checkbox"==a.type;}, |
file: function(a){return "file"==a.type;}, |
password: function(a){return "password"==a.type;}, |
submit: function(a){return "submit"==a.type;}, |
image: function(a){return "image"==a.type;}, |
reset: function(a){return "reset"==a.type;}, |
button: function(a){return "button"==a.type||jQuery.nodeName(a,"button");}, |
input: function(a){return /input|select|textarea|button/i.test(a.nodeName);}, |
// :has() |
has: function(a,i,m){return jQuery.find(m[3],a).length;}, |
// :header |
header: function(a){return /h\d/i.test(a.nodeName);}, |
// :animated |
animated: function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;} |
} |
}, |
// The regular expressions that power the parsing engine |
parse: [ |
// Match: [@value='test'], [@foo] |
/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/, |
// Match: :contains('foo') |
/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/, |
// Match: :even, :last-chlid, #id, .class |
new RegExp("^([:.#]*)(" + chars + "+)") |
], |
multiFilter: function( expr, elems, not ) { |
var old, cur = []; |
while ( expr && expr != old ) { |
old = expr; |
var f = jQuery.filter( expr, elems, not ); |
expr = f.t.replace(/^\s*,\s*/, "" ); |
cur = not ? elems = f.r : jQuery.merge( cur, f.r ); |
} |
return cur; |
}, |
find: function( t, context ) { |
// Quickly handle non-string expressions |
if ( typeof t != "string" ) |
return [ t ]; |
// check to make sure context is a DOM element or a document |
if ( context && context.nodeType != 1 && context.nodeType != 9) |
return [ ]; |
// Set the correct context (if none is provided) |
context = context || document; |
// Initialize the search |
var ret = [context], done = [], last, nodeName; |
// Continue while a selector expression exists, and while |
// we're no longer looping upon ourselves |
while ( t && last != t ) { |
var r = []; |
last = t; |
t = jQuery.trim(t); |
var foundToken = false; |
// An attempt at speeding up child selectors that |
// point to a specific element tag |
var re = quickChild; |
var m = re.exec(t); |
if ( m ) { |
nodeName = m[1].toUpperCase(); |
// Perform our own iteration and filter |
for ( var i = 0; ret[i]; i++ ) |
for ( var c = ret[i].firstChild; c; c = c.nextSibling ) |
if ( c.nodeType == 1 && (nodeName == "*" || c.nodeName.toUpperCase() == nodeName) ) |
r.push( c ); |
ret = r; |
t = t.replace( re, "" ); |
if ( t.indexOf(" ") == 0 ) continue; |
foundToken = true; |
} else { |
re = /^([>+~])\s*(\w*)/i; |
if ( (m = re.exec(t)) != null ) { |
r = []; |
var merge = {}; |
nodeName = m[2].toUpperCase(); |
m = m[1]; |
for ( var j = 0, rl = ret.length; j < rl; j++ ) { |
var n = m == "~" || m == "+" ? ret[j].nextSibling : ret[j].firstChild; |
for ( ; n; n = n.nextSibling ) |
if ( n.nodeType == 1 ) { |
var id = jQuery.data(n); |
if ( m == "~" && merge[id] ) break; |
if (!nodeName || n.nodeName.toUpperCase() == nodeName ) { |
if ( m == "~" ) merge[id] = true; |
r.push( n ); |
} |
if ( m == "+" ) break; |
} |
} |
ret = r; |
// And remove the token |
t = jQuery.trim( t.replace( re, "" ) ); |
foundToken = true; |
} |
} |
// See if there's still an expression, and that we haven't already |
// matched a token |
if ( t && !foundToken ) { |
// Handle multiple expressions |
if ( !t.indexOf(",") ) { |
// Clean the result set |
if ( context == ret[0] ) ret.shift(); |
// Merge the result sets |
done = jQuery.merge( done, ret ); |
// Reset the context |
r = ret = [context]; |
// Touch up the selector string |
t = " " + t.substr(1,t.length); |
} else { |
// Optimize for the case nodeName#idName |
var re2 = quickID; |
var m = re2.exec(t); |
// Re-organize the results, so that they're consistent |
if ( m ) { |
m = [ 0, m[2], m[3], m[1] ]; |
} else { |
// Otherwise, do a traditional filter check for |
// ID, class, and element selectors |
re2 = quickClass; |
m = re2.exec(t); |
} |
m[2] = m[2].replace(/\\/g, ""); |
var elem = ret[ret.length-1]; |
// Try to do a global search by ID, where we can |
if ( m[1] == "#" && elem && elem.getElementById && !jQuery.isXMLDoc(elem) ) { |
// Optimization for HTML document case |
var oid = elem.getElementById(m[2]); |
// Do a quick check for the existence of the actual ID attribute |
// to avoid selecting by the name attribute in IE |
// also check to insure id is a string to avoid selecting an element with the name of 'id' inside a form |
if ( (jQuery.browser.msie||jQuery.browser.opera) && oid && typeof oid.id == "string" && oid.id != m[2] ) |
oid = jQuery('[@id="'+m[2]+'"]', elem)[0]; |
// Do a quick check for node name (where applicable) so |
// that div#foo searches will be really fast |
ret = r = oid && (!m[3] || jQuery.nodeName(oid, m[3])) ? [oid] : []; |
} else { |
// We need to find all descendant elements |
for ( var i = 0; ret[i]; i++ ) { |
// Grab the tag name being searched for |
var tag = m[1] == "#" && m[3] ? m[3] : m[1] != "" || m[0] == "" ? "*" : m[2]; |
// Handle IE7 being really dumb about <object>s |
if ( tag == "*" && ret[i].nodeName.toLowerCase() == "object" ) |
tag = "param"; |
r = jQuery.merge( r, ret[i].getElementsByTagName( tag )); |
} |
// It's faster to filter by class and be done with it |
if ( m[1] == "." ) |
r = jQuery.classFilter( r, m[2] ); |
// Same with ID filtering |
if ( m[1] == "#" ) { |
var tmp = []; |
// Try to find the element with the ID |
for ( var i = 0; r[i]; i++ ) |
if ( r[i].getAttribute("id") == m[2] ) { |
tmp = [ r[i] ]; |
break; |
} |
r = tmp; |
} |
ret = r; |
} |
t = t.replace( re2, "" ); |
} |
} |
// If a selector string still exists |
if ( t ) { |
// Attempt to filter it |
var val = jQuery.filter(t,r); |
ret = r = val.r; |
t = jQuery.trim(val.t); |
} |
} |
// An error occurred with the selector; |
// just return an empty set instead |
if ( t ) |
ret = []; |
// Remove the root context |
if ( ret && context == ret[0] ) |
ret.shift(); |
// And combine the results |
done = jQuery.merge( done, ret ); |
return done; |
}, |
classFilter: function(r,m,not){ |
m = " " + m + " "; |
var tmp = []; |
for ( var i = 0; r[i]; i++ ) { |
var pass = (" " + r[i].className + " ").indexOf( m ) >= 0; |
if ( !not && pass || not && !pass ) |
tmp.push( r[i] ); |
} |
return tmp; |
}, |
filter: function(t,r,not) { |
var last; |
// Look for common filter expressions |
while ( t && t != last ) { |
last = t; |
var p = jQuery.parse, m; |
for ( var i = 0; p[i]; i++ ) { |
m = p[i].exec( t ); |
if ( m ) { |
// Remove what we just matched |
t = t.substring( m[0].length ); |
m[2] = m[2].replace(/\\/g, ""); |
break; |
} |
} |
if ( !m ) |
break; |
// :not() is a special case that can be optimized by |
// keeping it out of the expression list |
if ( m[1] == ":" && m[2] == "not" ) |
// optimize if only one selector found (most common case) |
r = isSimple.test( m[3] ) ? |
jQuery.filter(m[3], r, true).r : |
jQuery( r ).not( m[3] ); |
// We can get a big speed boost by filtering by class here |
else if ( m[1] == "." ) |
r = jQuery.classFilter(r, m[2], not); |
else if ( m[1] == "[" ) { |
var tmp = [], type = m[3]; |
for ( var i = 0, rl = r.length; i < rl; i++ ) { |
var a = r[i], z = a[ jQuery.props[m[2]] || m[2] ]; |
if ( z == null || /href|src|selected/.test(m[2]) ) |
z = jQuery.attr(a,m[2]) || ''; |
if ( (type == "" && !!z || |
type == "=" && z == m[5] || |
type == "!=" && z != m[5] || |
type == "^=" && z && !z.indexOf(m[5]) || |
type == "$=" && z.substr(z.length - m[5].length) == m[5] || |
(type == "*=" || type == "~=") && z.indexOf(m[5]) >= 0) ^ not ) |
tmp.push( a ); |
} |
r = tmp; |
// We can get a speed boost by handling nth-child here |
} else if ( m[1] == ":" && m[2] == "nth-child" ) { |
var merge = {}, tmp = [], |
// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6' |
test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec( |
m[3] == "even" && "2n" || m[3] == "odd" && "2n+1" || |
!/\D/.test(m[3]) && "0n+" + m[3] || m[3]), |
// calculate the numbers (first)n+(last) including if they are negative |
first = (test[1] + (test[2] || 1)) - 0, last = test[3] - 0; |
// loop through all the elements left in the jQuery object |
for ( var i = 0, rl = r.length; i < rl; i++ ) { |
var node = r[i], parentNode = node.parentNode, id = jQuery.data(parentNode); |
if ( !merge[id] ) { |
var c = 1; |
for ( var n = parentNode.firstChild; n; n = n.nextSibling ) |
if ( n.nodeType == 1 ) |
n.nodeIndex = c++; |
merge[id] = true; |
} |
var add = false; |
if ( first == 0 ) { |
if ( node.nodeIndex == last ) |
add = true; |
} else if ( (node.nodeIndex - last) % first == 0 && (node.nodeIndex - last) / first >= 0 ) |
add = true; |
if ( add ^ not ) |
tmp.push( node ); |
} |
r = tmp; |
// Otherwise, find the expression to execute |
} else { |
var fn = jQuery.expr[ m[1] ]; |
if ( typeof fn == "object" ) |
fn = fn[ m[2] ]; |
if ( typeof fn == "string" ) |
fn = eval("false||function(a,i){return " + fn + ";}"); |
// Execute it against the current filter |
r = jQuery.grep( r, function(elem, i){ |
return fn(elem, i, m, r); |
}, not ); |
} |
} |
// Return an array of filtered elements (r) |
// and the modified expression string (t) |
return { r: r, t: t }; |
}, |
dir: function( elem, dir ){ |
var matched = []; |
var cur = elem[dir]; |
while ( cur && cur != document ) { |
if ( cur.nodeType == 1 ) |
matched.push( cur ); |
cur = cur[dir]; |
} |
return matched; |
}, |
nth: function(cur,result,dir,elem){ |
result = result || 1; |
var num = 0; |
for ( ; cur; cur = cur[dir] ) |
if ( cur.nodeType == 1 && ++num == result ) |
break; |
return cur; |
}, |
sibling: function( n, elem ) { |
var r = []; |
for ( ; n; n = n.nextSibling ) { |
if ( n.nodeType == 1 && (!elem || n != elem) ) |
r.push( n ); |
} |
return r; |
} |
}); |
/* |
* A number of helper functions used for managing events. |
* Many of the ideas behind this code orignated from |
* Dean Edwards' addEvent library. |
*/ |
jQuery.event = { |
// Bind an event to an element |
// Original by Dean Edwards |
add: function(elem, types, handler, data) { |
if ( elem.nodeType == 3 || elem.nodeType == 8 ) |
return; |
// For whatever reason, IE has trouble passing the window object |
// around, causing it to be cloned in the process |
if ( jQuery.browser.msie && elem.setInterval != undefined ) |
elem = window; |
// Make sure that the function being executed has a unique ID |
if ( !handler.guid ) |
handler.guid = this.guid++; |
// if data is passed, bind to handler |
if( data != undefined ) { |
// Create temporary function pointer to original handler |
var fn = handler; |
// Create unique handler function, wrapped around original handler |
handler = function() { |
// Pass arguments and context to original handler |
return fn.apply(this, arguments); |
}; |
// Store data in unique handler |
handler.data = data; |
// Set the guid of unique handler to the same of original handler, so it can be removed |
handler.guid = fn.guid; |
} |
// Init the element's event structure |
var events = jQuery.data(elem, "events") || jQuery.data(elem, "events", {}), |
handle = jQuery.data(elem, "handle") || jQuery.data(elem, "handle", function(){ |
// returned undefined or false |
var val; |
// Handle the second event of a trigger and when |
// an event is called after a page has unloaded |
if ( typeof jQuery == "undefined" || jQuery.event.triggered ) |
return val; |
val = jQuery.event.handle.apply(arguments.callee.elem, arguments); |
return val; |
}); |
// Add elem as a property of the handle function |
// This is to prevent a memory leak with non-native |
// event in IE. |
handle.elem = elem; |
// Handle multiple events seperated by a space |
// jQuery(...).bind("mouseover mouseout", fn); |
jQuery.each(types.split(/\s+/), function(index, type) { |
// Namespaced event handlers |
var parts = type.split("."); |
type = parts[0]; |
handler.type = parts[1]; |
// Get the current list of functions bound to this event |
var handlers = events[type]; |
// Init the event handler queue |
if (!handlers) { |
handlers = events[type] = {}; |
// Check for a special event handler |
// Only use addEventListener/attachEvent if the special |
// events handler returns false |
if ( !jQuery.event.special[type] || jQuery.event.special[type].setup.call(elem) === false ) { |
// Bind the global event handler to the element |
if (elem.addEventListener) |
elem.addEventListener(type, handle, false); |
else if (elem.attachEvent) |
elem.attachEvent("on" + type, handle); |
} |
} |
// Add the function to the element's handler list |
handlers[handler.guid] = handler; |
// Keep track of which events have been used, for global triggering |
jQuery.event.global[type] = true; |
}); |
// Nullify elem to prevent memory leaks in IE |
elem = null; |
}, |
guid: 1, |
global: {}, |
// Detach an event or set of events from an element |
remove: function(elem, types, handler) { |
// don't do events on text and comment nodes |
if ( elem.nodeType == 3 || elem.nodeType == 8 ) |
return; |
var events = jQuery.data(elem, "events"), ret, index; |
if ( events ) { |
// Unbind all events for the element |
if ( types == undefined || (typeof types == "string" && types.charAt(0) == ".") ) |
for ( var type in events ) |
this.remove( elem, type + (types || "") ); |
else { |
// types is actually an event object here |
if ( types.type ) { |
handler = types.handler; |
types = types.type; |
} |
// Handle multiple events seperated by a space |
// jQuery(...).unbind("mouseover mouseout", fn); |
jQuery.each(types.split(/\s+/), function(index, type){ |
// Namespaced event handlers |
var parts = type.split("."); |
type = parts[0]; |
if ( events[type] ) { |
// remove the given handler for the given type |
if ( handler ) |
delete events[type][handler.guid]; |
// remove all handlers for the given type |
else |
for ( handler in events[type] ) |
// Handle the removal of namespaced events |
if ( !parts[1] || events[type][handler].type == parts[1] ) |
delete events[type][handler]; |
// remove generic event handler if no more handlers exist |
for ( ret in events[type] ) break; |
if ( !ret ) { |
if ( !jQuery.event.special[type] || jQuery.event.special[type].teardown.call(elem) === false ) { |
if (elem.removeEventListener) |
elem.removeEventListener(type, jQuery.data(elem, "handle"), false); |
else if (elem.detachEvent) |
elem.detachEvent("on" + type, jQuery.data(elem, "handle")); |
} |
ret = null; |
delete events[type]; |
} |
} |
}); |
} |
// Remove the expando if it's no longer used |
for ( ret in events ) break; |
if ( !ret ) { |
var handle = jQuery.data( elem, "handle" ); |
if ( handle ) handle.elem = null; |
jQuery.removeData( elem, "events" ); |
jQuery.removeData( elem, "handle" ); |
} |
} |
}, |
trigger: function(type, data, elem, donative, extra) { |
// Clone the incoming data, if any |
data = jQuery.makeArray(data || []); |
if ( type.indexOf("!") >= 0 ) { |
type = type.slice(0, -1); |
var exclusive = true; |
} |
// Handle a global trigger |
if ( !elem ) { |
// Only trigger if we've ever bound an event for it |
if ( this.global[type] ) |
jQuery("*").add([window, document]).trigger(type, data); |
// Handle triggering a single element |
} else { |
// don't do events on text and comment nodes |
if ( elem.nodeType == 3 || elem.nodeType == 8 ) |
return undefined; |
var val, ret, fn = jQuery.isFunction( elem[ type ] || null ), |
// Check to see if we need to provide a fake event, or not |
event = !data[0] || !data[0].preventDefault; |
// Pass along a fake event |
if ( event ) |
data.unshift( this.fix({ type: type, target: elem }) ); |
// Enforce the right trigger type |
data[0].type = type; |
if ( exclusive ) |
data[0].exclusive = true; |
// Trigger the event |
if ( jQuery.isFunction( jQuery.data(elem, "handle") ) ) |
val = jQuery.data(elem, "handle").apply( elem, data ); |
// Handle triggering native .onfoo handlers |
if ( !fn && elem["on"+type] && elem["on"+type].apply( elem, data ) === false ) |
val = false; |
// Extra functions don't get the custom event object |
if ( event ) |
data.shift(); |
// Handle triggering of extra function |
if ( extra && jQuery.isFunction( extra ) ) { |
// call the extra function and tack the current return value on the end for possible inspection |
ret = extra.apply( elem, val == null ? data : data.concat( val ) ); |
// if anything is returned, give it precedence and have it overwrite the previous value |
if (ret !== undefined) |
val = ret; |
} |
// Trigger the native events (except for clicks on links) |
if ( fn && donative !== false && val !== false && !(jQuery.nodeName(elem, 'a') && type == "click") ) { |
this.triggered = true; |
try { |
elem[ type ](); |
// prevent IE from throwing an error for some hidden elements |
} catch (e) {} |
} |
this.triggered = false; |
} |
return val; |
}, |
handle: function(event) { |
// returned undefined or false |
var val; |
// Empty object is for triggered events with no data |
event = jQuery.event.fix( event || window.event || {} ); |
// Namespaced event handlers |
var parts = event.type.split("."); |
event.type = parts[0]; |
var handlers = jQuery.data(this, "events") && jQuery.data(this, "events")[event.type], args = Array.prototype.slice.call( arguments, 1 ); |
args.unshift( event ); |
for ( var j in handlers ) { |
var handler = handlers[j]; |
// Pass in a reference to the handler function itself |
// So that we can later remove it |
args[0].handler = handler; |
args[0].data = handler.data; |
// Filter the functions by class |
if ( !parts[1] && !event.exclusive || handler.type == parts[1] ) { |
var ret = handler.apply( this, args ); |
if ( val !== false ) |
val = ret; |
if ( ret === false ) { |
event.preventDefault(); |
event.stopPropagation(); |
} |
} |
} |
// Clean up added properties in IE to prevent memory leak |
if (jQuery.browser.msie) |
event.target = event.preventDefault = event.stopPropagation = |
event.handler = event.data = null; |
return val; |
}, |
fix: function(event) { |
// store a copy of the original event object |
// and clone to set read-only properties |
var originalEvent = event; |
event = jQuery.extend({}, originalEvent); |
// add preventDefault and stopPropagation since |
// they will not work on the clone |
event.preventDefault = function() { |
// if preventDefault exists run it on the original event |
if (originalEvent.preventDefault) |
originalEvent.preventDefault(); |
// otherwise set the returnValue property of the original event to false (IE) |
originalEvent.returnValue = false; |
}; |
event.stopPropagation = function() { |
// if stopPropagation exists run it on the original event |
if (originalEvent.stopPropagation) |
originalEvent.stopPropagation(); |
// otherwise set the cancelBubble property of the original event to true (IE) |
originalEvent.cancelBubble = true; |
}; |
// Fix target property, if necessary |
if ( !event.target ) |
event.target = event.srcElement || document; // Fixes #1925 where srcElement might not be defined either |
// check if target is a textnode (safari) |
if ( event.target.nodeType == 3 ) |
event.target = originalEvent.target.parentNode; |
// Add relatedTarget, if necessary |
if ( !event.relatedTarget && event.fromElement ) |
event.relatedTarget = event.fromElement == event.target ? event.toElement : event.fromElement; |
// Calculate pageX/Y if missing and clientX/Y available |
if ( event.pageX == null && event.clientX != null ) { |
var doc = document.documentElement, body = document.body; |
event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc.clientLeft || 0); |
event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc.clientTop || 0); |
} |
// Add which for key events |
if ( !event.which && ((event.charCode || event.charCode === 0) ? event.charCode : event.keyCode) ) |
event.which = event.charCode || event.keyCode; |
// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs) |
if ( !event.metaKey && event.ctrlKey ) |
event.metaKey = event.ctrlKey; |
// Add which for click: 1 == left; 2 == middle; 3 == right |
// Note: button is not normalized, so don't use it |
if ( !event.which && event.button ) |
event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) )); |
return event; |
}, |
special: { |
ready: { |
setup: function() { |
// Make sure the ready event is setup |
bindReady(); |
return; |
}, |
teardown: function() { return; } |
}, |
mouseenter: { |
setup: function() { |
if ( jQuery.browser.msie ) return false; |
jQuery(this).bind("mouseover", jQuery.event.special.mouseenter.handler); |
return true; |
}, |
teardown: function() { |
if ( jQuery.browser.msie ) return false; |
jQuery(this).unbind("mouseover", jQuery.event.special.mouseenter.handler); |
return true; |
}, |
handler: function(event) { |
// If we actually just moused on to a sub-element, ignore it |
if ( withinElement(event, this) ) return true; |
// Execute the right handlers by setting the event type to mouseenter |
arguments[0].type = "mouseenter"; |
return jQuery.event.handle.apply(this, arguments); |
} |
}, |
mouseleave: { |
setup: function() { |
if ( jQuery.browser.msie ) return false; |
jQuery(this).bind("mouseout", jQuery.event.special.mouseleave.handler); |
return true; |
}, |
teardown: function() { |
if ( jQuery.browser.msie ) return false; |
jQuery(this).unbind("mouseout", jQuery.event.special.mouseleave.handler); |
return true; |
}, |
handler: function(event) { |
// If we actually just moused on to a sub-element, ignore it |
if ( withinElement(event, this) ) return true; |
// Execute the right handlers by setting the event type to mouseleave |
arguments[0].type = "mouseleave"; |
return jQuery.event.handle.apply(this, arguments); |
} |
} |
} |
}; |
jQuery.fn.extend({ |
bind: function( type, data, fn ) { |
return type == "unload" ? this.one(type, data, fn) : this.each(function(){ |
jQuery.event.add( this, type, fn || data, fn && data ); |
}); |
}, |
one: function( type, data, fn ) { |
return this.each(function(){ |
jQuery.event.add( this, type, function(event) { |
jQuery(this).unbind(event); |
return (fn || data).apply( this, arguments); |
}, fn && data); |
}); |
}, |
unbind: function( type, fn ) { |
return this.each(function(){ |
jQuery.event.remove( this, type, fn ); |
}); |
}, |
trigger: function( type, data, fn ) { |
return this.each(function(){ |
jQuery.event.trigger( type, data, this, true, fn ); |
}); |
}, |
triggerHandler: function( type, data, fn ) { |
if ( this[0] ) |
return jQuery.event.trigger( type, data, this[0], false, fn ); |
return undefined; |
}, |
toggle: function() { |
// Save reference to arguments for access in closure |
var args = arguments; |
return this.click(function(event) { |
// Figure out which function to execute |
this.lastToggle = 0 == this.lastToggle ? 1 : 0; |
// Make sure that clicks stop |
event.preventDefault(); |
// and execute the function |
return args[this.lastToggle].apply( this, arguments ) || false; |
}); |
}, |
hover: function(fnOver, fnOut) { |
return this.bind('mouseenter', fnOver).bind('mouseleave', fnOut); |
}, |
ready: function(fn) { |
// Attach the listeners |
bindReady(); |
// If the DOM is already ready |
if ( jQuery.isReady ) |
// Execute the function immediately |
fn.call( document, jQuery ); |
// Otherwise, remember the function for later |
else |
// Add the function to the wait list |
jQuery.readyList.push( function() { return fn.call(this, jQuery); } ); |
return this; |
} |
}); |
jQuery.extend({ |
isReady: false, |
readyList: [], |
// Handle when the DOM is ready |
ready: function() { |
// Make sure that the DOM is not already loaded |
if ( !jQuery.isReady ) { |
// Remember that the DOM is ready |
jQuery.isReady = true; |
// If there are functions bound, to execute |
if ( jQuery.readyList ) { |
// Execute all of them |
jQuery.each( jQuery.readyList, function(){ |
this.apply( document ); |
}); |
// Reset the list of functions |
jQuery.readyList = null; |
} |
// Trigger any bound ready events |
jQuery(document).triggerHandler("ready"); |
} |
} |
}); |
var readyBound = false; |
function bindReady(){ |
if ( readyBound ) return; |
readyBound = true; |
// Mozilla, Opera (see further below for it) and webkit nightlies currently support this event |
if ( document.addEventListener && !jQuery.browser.opera) |
// Use the handy event callback |
document.addEventListener( "DOMContentLoaded", jQuery.ready, false ); |
// If IE is used and is not in a frame |
// Continually check to see if the document is ready |
if ( jQuery.browser.msie && window == top ) (function(){ |
if (jQuery.isReady) return; |
try { |
// If IE is used, use the trick by Diego Perini |
// http://javascript.nwbox.com/IEContentLoaded/ |
document.documentElement.doScroll("left"); |
} catch( error ) { |
setTimeout( arguments.callee, 0 ); |
return; |
} |
// and execute any waiting functions |
jQuery.ready(); |
})(); |
if ( jQuery.browser.opera ) |
document.addEventListener( "DOMContentLoaded", function () { |
if (jQuery.isReady) return; |
for (var i = 0; i < document.styleSheets.length; i++) |
if (document.styleSheets[i].disabled) { |
setTimeout( arguments.callee, 0 ); |
return; |
} |
// and execute any waiting functions |
jQuery.ready(); |
}, false); |
if ( jQuery.browser.safari ) { |
var numStyles; |
(function(){ |
if (jQuery.isReady) return; |
if ( document.readyState != "loaded" && document.readyState != "complete" ) { |
setTimeout( arguments.callee, 0 ); |
return; |
} |
if ( numStyles === undefined ) |
numStyles = jQuery("style, link[rel=stylesheet]").length; |
if ( document.styleSheets.length != numStyles ) { |
setTimeout( arguments.callee, 0 ); |
return; |
} |
// and execute any waiting functions |
jQuery.ready(); |
})(); |
} |
// A fallback to window.onload, that will always work |
jQuery.event.add( window, "load", jQuery.ready ); |
} |
jQuery.each( ("blur,focus,load,resize,scroll,unload,click,dblclick," + |
"mousedown,mouseup,mousemove,mouseover,mouseout,change,select," + |
"submit,keydown,keypress,keyup,error").split(","), function(i, name){ |
// Handle event binding |
jQuery.fn[name] = function(fn){ |
return fn ? this.bind(name, fn) : this.trigger(name); |
}; |
}); |
// Checks if an event happened on an element within another element |
// Used in jQuery.event.special.mouseenter and mouseleave handlers |
var withinElement = function(event, elem) { |
// Check if mouse(over|out) are still within the same parent element |
var parent = event.relatedTarget; |
// Traverse up the tree |
while ( parent && parent != elem ) try { parent = parent.parentNode; } catch(error) { parent = elem; } |
// Return true if we actually just moused on to a sub-element |
return parent == elem; |
}; |
// Prevent memory leaks in IE |
// And prevent errors on refresh with events like mouseover in other browsers |
// Window isn't included so as not to unbind existing unload events |
jQuery(window).bind("unload", function() { |
jQuery("*").add(document).unbind(); |
}); |
jQuery.fn.extend({ |
load: function( url, params, callback ) { |
if ( jQuery.isFunction( url ) ) |
return this.bind("load", url); |
var off = url.indexOf(" "); |
if ( off >= 0 ) { |
var selector = url.slice(off, url.length); |
url = url.slice(0, off); |
} |
callback = callback || function(){}; |
// Default to a GET request |
var type = "GET"; |
// If the second parameter was provided |
if ( params ) |
// If it's a function |
if ( jQuery.isFunction( params ) ) { |
// We assume that it's the callback |
callback = params; |
params = null; |
// Otherwise, build a param string |
} else { |
params = jQuery.param( params ); |
type = "POST"; |
} |
var self = this; |
// Request the remote document |
jQuery.ajax({ |
url: url, |
type: type, |
dataType: "html", |
data: params, |
complete: function(res, status){ |
// If successful, inject the HTML into all the matched elements |
if ( status == "success" || status == "notmodified" ) |
// See if a selector was specified |
self.html( selector ? |
// Create a dummy div to hold the results |
jQuery("<div/>") |
// inject the contents of the document in, removing the scripts |
// to avoid any 'Permission Denied' errors in IE |
.append(res.responseText.replace(/<script(.|\s)*?\/script>/g, "")) |
// Locate the specified elements |
.find(selector) : |
// If not, just inject the full result |
res.responseText ); |
self.each( callback, [res.responseText, status, res] ); |
} |
}); |
return this; |
}, |
serialize: function() { |
return jQuery.param(this.serializeArray()); |
}, |
serializeArray: function() { |
return this.map(function(){ |
return jQuery.nodeName(this, "form") ? |
jQuery.makeArray(this.elements) : this; |
}) |
.filter(function(){ |
return this.name && !this.disabled && |
(this.checked || /select|textarea/i.test(this.nodeName) || |
/text|hidden|password/i.test(this.type)); |
}) |
.map(function(i, elem){ |
var val = jQuery(this).val(); |
return val == null ? null : |
val.constructor == Array ? |
jQuery.map( val, function(val, i){ |
return {name: elem.name, value: val}; |
}) : |
{name: elem.name, value: val}; |
}).get(); |
} |
}); |
// Attach a bunch of functions for handling common AJAX events |
jQuery.each( "ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","), function(i,o){ |
jQuery.fn[o] = function(f){ |
return this.bind(o, f); |
}; |
}); |
var jsc = (new Date).getTime(); |
jQuery.extend({ |
get: function( url, data, callback, type ) { |
// shift arguments if data argument was ommited |
if ( jQuery.isFunction( data ) ) { |
callback = data; |
data = null; |
} |
return jQuery.ajax({ |
type: "GET", |
url: url, |
data: data, |
success: callback, |
dataType: type |
}); |
}, |
getScript: function( url, callback ) { |
return jQuery.get(url, null, callback, "script"); |
}, |
getJSON: function( url, data, callback ) { |
return jQuery.get(url, data, callback, "json"); |
}, |
post: function( url, data, callback, type ) { |
if ( jQuery.isFunction( data ) ) { |
callback = data; |
data = {}; |
} |
return jQuery.ajax({ |
type: "POST", |
url: url, |
data: data, |
success: callback, |
dataType: type |
}); |
}, |
ajaxSetup: function( settings ) { |
jQuery.extend( jQuery.ajaxSettings, settings ); |
}, |
ajaxSettings: { |
global: true, |
type: "GET", |
timeout: 0, |
contentType: "application/x-www-form-urlencoded", |
processData: true, |
async: true, |
data: null, |
username: null, |
password: null, |
accepts: { |
xml: "application/xml, text/xml", |
html: "text/html", |
script: "text/javascript, application/javascript", |
json: "application/json, text/javascript", |
text: "text/plain", |
_default: "*/*" |
} |
}, |
// Last-Modified header cache for next request |
lastModified: {}, |
ajax: function( s ) { |
var jsonp, jsre = /=\?(&|$)/g, status, data; |
// Extend the settings, but re-extend 's' so that it can be |
// checked again later (in the test suite, specifically) |
s = jQuery.extend(true, s, jQuery.extend(true, {}, jQuery.ajaxSettings, s)); |
// convert data if not already a string |
if ( s.data && s.processData && typeof s.data != "string" ) |
s.data = jQuery.param(s.data); |
// Handle JSONP Parameter Callbacks |
if ( s.dataType == "jsonp" ) { |
if ( s.type.toLowerCase() == "get" ) { |
if ( !s.url.match(jsre) ) |
s.url += (s.url.match(/\?/) ? "&" : "?") + (s.jsonp || "callback") + "=?"; |
} else if ( !s.data || !s.data.match(jsre) ) |
s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?"; |
s.dataType = "json"; |
} |
// Build temporary JSONP function |
if ( s.dataType == "json" && (s.data && s.data.match(jsre) || s.url.match(jsre)) ) { |
jsonp = "jsonp" + jsc++; |
// Replace the =? sequence both in the query string and the data |
if ( s.data ) |
s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1"); |
s.url = s.url.replace(jsre, "=" + jsonp + "$1"); |
// We need to make sure |
// that a JSONP style response is executed properly |
s.dataType = "script"; |
// Handle JSONP-style loading |
window[ jsonp ] = function(tmp){ |
data = tmp; |
success(); |
complete(); |
// Garbage collect |
window[ jsonp ] = undefined; |
try{ delete window[ jsonp ]; } catch(e){} |
if ( head ) |
head.removeChild( script ); |
}; |
} |
if ( s.dataType == "script" && s.cache == null ) |
s.cache = false; |
if ( s.cache === false && s.type.toLowerCase() == "get" ) { |
var ts = (new Date()).getTime(); |
// try replacing _= if it is there |
var ret = s.url.replace(/(\?|&)_=.*?(&|$)/, "$1_=" + ts + "$2"); |
// if nothing was replaced, add timestamp to the end |
s.url = ret + ((ret == s.url) ? (s.url.match(/\?/) ? "&" : "?") + "_=" + ts : ""); |
} |
// If data is available, append data to url for get requests |
if ( s.data && s.type.toLowerCase() == "get" ) { |
s.url += (s.url.match(/\?/) ? "&" : "?") + s.data; |
// IE likes to send both get and post data, prevent this |
s.data = null; |
} |
// Watch for a new set of requests |
if ( s.global && ! jQuery.active++ ) |
jQuery.event.trigger( "ajaxStart" ); |
// If we're requesting a remote document |
// and trying to load JSON or Script with a GET |
if ( (!s.url.indexOf("http") || !s.url.indexOf("//")) && s.dataType == "script" && s.type.toLowerCase() == "get" ) { |
var head = document.getElementsByTagName("head")[0]; |
var script = document.createElement("script"); |
script.src = s.url; |
if (s.scriptCharset) |
script.charset = s.scriptCharset; |
// Handle Script loading |
if ( !jsonp ) { |
var done = false; |
// Attach handlers for all browsers |
script.onload = script.onreadystatechange = function(){ |
if ( !done && (!this.readyState || |
this.readyState == "loaded" || this.readyState == "complete") ) { |
done = true; |
success(); |
complete(); |
head.removeChild( script ); |
} |
}; |
} |
head.appendChild(script); |
// We handle everything using the script element injection |
return undefined; |
} |
var requestDone = false; |
// Create the request object; Microsoft failed to properly |
// implement the XMLHttpRequest in IE7, so we use the ActiveXObject when it is available |
var xml = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest(); |
// Open the socket |
xml.open(s.type, s.url, s.async, s.username, s.password); |
// Need an extra try/catch for cross domain requests in Firefox 3 |
try { |
// Set the correct header, if data is being sent |
if ( s.data ) |
xml.setRequestHeader("Content-Type", s.contentType); |
// Set the If-Modified-Since header, if ifModified mode. |
if ( s.ifModified ) |
xml.setRequestHeader("If-Modified-Since", |
jQuery.lastModified[s.url] || "Thu, 01 Jan 1970 00:00:00 GMT" ); |
// Set header so the called script knows that it's an XMLHttpRequest |
xml.setRequestHeader("X-Requested-With", "XMLHttpRequest"); |
// Set the Accepts header for the server, depending on the dataType |
xml.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ? |
s.accepts[ s.dataType ] + ", */*" : |
s.accepts._default ); |
} catch(e){} |
// Allow custom headers/mimetypes |
if ( s.beforeSend ) |
s.beforeSend(xml); |
if ( s.global ) |
jQuery.event.trigger("ajaxSend", [xml, s]); |
// Wait for a response to come back |
var onreadystatechange = function(isTimeout){ |
// The transfer is complete and the data is available, or the request timed out |
if ( !requestDone && xml && (xml.readyState == 4 || isTimeout == "timeout") ) { |
requestDone = true; |
// clear poll interval |
if (ival) { |
clearInterval(ival); |
ival = null; |
} |
status = isTimeout == "timeout" && "timeout" || |
!jQuery.httpSuccess( xml ) && "error" || |
s.ifModified && jQuery.httpNotModified( xml, s.url ) && "notmodified" || |
"success"; |
if ( status == "success" ) { |
// Watch for, and catch, XML document parse errors |
try { |
// process the data (runs the xml through httpData regardless of callback) |
data = jQuery.httpData( xml, s.dataType ); |
} catch(e) { |
status = "parsererror"; |
} |
} |
// Make sure that the request was successful or notmodified |
if ( status == "success" ) { |
// Cache Last-Modified header, if ifModified mode. |
var modRes; |
try { |
modRes = xml.getResponseHeader("Last-Modified"); |
} catch(e) {} // swallow exception thrown by FF if header is not available |
if ( s.ifModified && modRes ) |
jQuery.lastModified[s.url] = modRes; |
// JSONP handles its own success callback |
if ( !jsonp ) |
success(); |
} else |
jQuery.handleError(s, xml, status); |
// Fire the complete handlers |
complete(); |
// Stop memory leaks |
if ( s.async ) |
xml = null; |
} |
}; |
if ( s.async ) { |
// don't attach the handler to the request, just poll it instead |
var ival = setInterval(onreadystatechange, 13); |
// Timeout checker |
if ( s.timeout > 0 ) |
setTimeout(function(){ |
// Check to see if the request is still happening |
if ( xml ) { |
// Cancel the request |
xml.abort(); |
if( !requestDone ) |
onreadystatechange( "timeout" ); |
} |
}, s.timeout); |
} |
// Send the data |
try { |
xml.send(s.data); |
} catch(e) { |
jQuery.handleError(s, xml, null, e); |
} |
// firefox 1.5 doesn't fire statechange for sync requests |
if ( !s.async ) |
onreadystatechange(); |
function success(){ |
// If a local callback was specified, fire it and pass it the data |
if ( s.success ) |
s.success( data, status ); |
// Fire the global callback |
if ( s.global ) |
jQuery.event.trigger( "ajaxSuccess", [xml, s] ); |
} |
function complete(){ |
// Process result |
if ( s.complete ) |
s.complete(xml, status); |
// The request was completed |
if ( s.global ) |
jQuery.event.trigger( "ajaxComplete", [xml, s] ); |
// Handle the global AJAX counter |
if ( s.global && ! --jQuery.active ) |
jQuery.event.trigger( "ajaxStop" ); |
} |
// return XMLHttpRequest to allow aborting the request etc. |
return xml; |
}, |
handleError: function( s, xml, status, e ) { |
// If a local callback was specified, fire it |
if ( s.error ) s.error( xml, status, e ); |
// Fire the global callback |
if ( s.global ) |
jQuery.event.trigger( "ajaxError", [xml, s, e] ); |
}, |
// Counter for holding the number of active queries |
active: 0, |
// Determines if an XMLHttpRequest was successful or not |
httpSuccess: function( r ) { |
try { |
// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450 |
return !r.status && location.protocol == "file:" || |
( r.status >= 200 && r.status < 300 ) || r.status == 304 || r.status == 1223 || |
jQuery.browser.safari && r.status == undefined; |
} catch(e){} |
return false; |
}, |
// Determines if an XMLHttpRequest returns NotModified |
httpNotModified: function( xml, url ) { |
try { |
var xmlRes = xml.getResponseHeader("Last-Modified"); |
// Firefox always returns 200. check Last-Modified date |
return xml.status == 304 || xmlRes == jQuery.lastModified[url] || |
jQuery.browser.safari && xml.status == undefined; |
} catch(e){} |
return false; |
}, |
httpData: function( r, type ) { |
var ct = r.getResponseHeader("content-type"); |
var xml = type == "xml" || !type && ct && ct.indexOf("xml") >= 0; |
var data = xml ? r.responseXML : r.responseText; |
if ( xml && data.documentElement.tagName == "parsererror" ) |
throw "parsererror"; |
// If the type is "script", eval it in global context |
if ( type == "script" ) |
jQuery.globalEval( data ); |
// Get the JavaScript object, if JSON is used. |
if ( type == "json" ) |
data = eval("(" + data + ")"); |
return data; |
}, |
// Serialize an array of form elements or a set of |
// key/values into a query string |
param: function( a ) { |
var s = []; |
// If an array was passed in, assume that it is an array |
// of form elements |
if ( a.constructor == Array || a.jquery ) |
// Serialize the form elements |
jQuery.each( a, function(){ |
s.push( encodeURIComponent(this.name) + "=" + encodeURIComponent( this.value ) ); |
}); |
// Otherwise, assume that it's an object of key/value pairs |
else |
// Serialize the key/values |
for ( var j in a ) |
// If the value is an array then the key names need to be repeated |
if ( a[j] && a[j].constructor == Array ) |
jQuery.each( a[j], function(){ |
s.push( encodeURIComponent(j) + "=" + encodeURIComponent( this ) ); |
}); |
else |
s.push( encodeURIComponent(j) + "=" + encodeURIComponent( a[j] ) ); |
// Return the resulting serialization |
return s.join("&").replace(/%20/g, "+"); |
} |
}); |
jQuery.fn.extend({ |
show: function(speed,callback){ |
return speed ? |
this.animate({ |
height: "show", width: "show", opacity: "show" |
}, speed, callback) : |
this.filter(":hidden").each(function(){ |
this.style.display = this.oldblock || ""; |
if ( jQuery.css(this,"display") == "none" ) { |
var elem = jQuery("<" + this.tagName + " />").appendTo("body"); |
this.style.display = elem.css("display"); |
// handle an edge condition where css is - div { display:none; } or similar |
if (this.style.display == "none") |
this.style.display = "block"; |
elem.remove(); |
} |
}).end(); |
}, |
hide: function(speed,callback){ |
return speed ? |
this.animate({ |
height: "hide", width: "hide", opacity: "hide" |
}, speed, callback) : |
this.filter(":visible").each(function(){ |
this.oldblock = this.oldblock || jQuery.css(this,"display"); |
this.style.display = "none"; |
}).end(); |
}, |
// Save the old toggle function |
_toggle: jQuery.fn.toggle, |
toggle: function( fn, fn2 ){ |
return jQuery.isFunction(fn) && jQuery.isFunction(fn2) ? |
this._toggle( fn, fn2 ) : |
fn ? |
this.animate({ |
height: "toggle", width: "toggle", opacity: "toggle" |
}, fn, fn2) : |
this.each(function(){ |
jQuery(this)[ jQuery(this).is(":hidden") ? "show" : "hide" ](); |
}); |
}, |
slideDown: function(speed,callback){ |
return this.animate({height: "show"}, speed, callback); |
}, |
slideUp: function(speed,callback){ |
return this.animate({height: "hide"}, speed, callback); |
}, |
slideToggle: function(speed, callback){ |
return this.animate({height: "toggle"}, speed, callback); |
}, |
fadeIn: function(speed, callback){ |
return this.animate({opacity: "show"}, speed, callback); |
}, |
fadeOut: function(speed, callback){ |
return this.animate({opacity: "hide"}, speed, callback); |
}, |
fadeTo: function(speed,to,callback){ |
return this.animate({opacity: to}, speed, callback); |
}, |
animate: function( prop, speed, easing, callback ) { |
var optall = jQuery.speed(speed, easing, callback); |
return this[ optall.queue === false ? "each" : "queue" ](function(){ |
if ( this.nodeType != 1) |
return false; |
var opt = jQuery.extend({}, optall); |
var hidden = jQuery(this).is(":hidden"), self = this; |
for ( var p in prop ) { |
if ( prop[p] == "hide" && hidden || prop[p] == "show" && !hidden ) |
return jQuery.isFunction(opt.complete) && opt.complete.apply(this); |
if ( p == "height" || p == "width" ) { |
// Store display property |
opt.display = jQuery.css(this, "display"); |
// Make sure that nothing sneaks out |
opt.overflow = this.style.overflow; |
} |
} |
if ( opt.overflow != null ) |
this.style.overflow = "hidden"; |
opt.curAnim = jQuery.extend({}, prop); |
jQuery.each( prop, function(name, val){ |
var e = new jQuery.fx( self, opt, name ); |
if ( /toggle|show|hide/.test(val) ) |
e[ val == "toggle" ? hidden ? "show" : "hide" : val ]( prop ); |
else { |
var parts = val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/), |
start = e.cur(true) || 0; |
if ( parts ) { |
var end = parseFloat(parts[2]), |
unit = parts[3] || "px"; |
// We need to compute starting value |
if ( unit != "px" ) { |
self.style[ name ] = (end || 1) + unit; |
start = ((end || 1) / e.cur(true)) * start; |
self.style[ name ] = start + unit; |
} |
// If a +=/-= token was provided, we're doing a relative animation |
if ( parts[1] ) |
end = ((parts[1] == "-=" ? -1 : 1) * end) + start; |
e.custom( start, end, unit ); |
} else |
e.custom( start, val, "" ); |
} |
}); |
// For JS strict compliance |
return true; |
}); |
}, |
queue: function(type, fn){ |
if ( jQuery.isFunction(type) || ( type && type.constructor == Array )) { |
fn = type; |
type = "fx"; |
} |
if ( !type || (typeof type == "string" && !fn) ) |
return queue( this[0], type ); |
return this.each(function(){ |
if ( fn.constructor == Array ) |
queue(this, type, fn); |
else { |
queue(this, type).push( fn ); |
if ( queue(this, type).length == 1 ) |
fn.apply(this); |
} |
}); |
}, |
stop: function(clearQueue, gotoEnd){ |
var timers = jQuery.timers; |
if (clearQueue) |
this.queue([]); |
this.each(function(){ |
// go in reverse order so anything added to the queue during the loop is ignored |
for ( var i = timers.length - 1; i >= 0; i-- ) |
if ( timers[i].elem == this ) { |
if (gotoEnd) |
// force the next step to be the last |
timers[i](true); |
timers.splice(i, 1); |
} |
}); |
// start the next in the queue if the last step wasn't forced |
if (!gotoEnd) |
this.dequeue(); |
return this; |
} |
}); |
var queue = function( elem, type, array ) { |
if ( !elem ) |
return undefined; |
type = type || "fx"; |
var q = jQuery.data( elem, type + "queue" ); |
if ( !q || array ) |
q = jQuery.data( elem, type + "queue", |
array ? jQuery.makeArray(array) : [] ); |
return q; |
}; |
jQuery.fn.dequeue = function(type){ |
type = type || "fx"; |
return this.each(function(){ |
var q = queue(this, type); |
q.shift(); |
if ( q.length ) |
q[0].apply( this ); |
}); |
}; |
jQuery.extend({ |
speed: function(speed, easing, fn) { |
var opt = speed && speed.constructor == Object ? speed : { |
complete: fn || !fn && easing || |
jQuery.isFunction( speed ) && speed, |
duration: speed, |
easing: fn && easing || easing && easing.constructor != Function && easing |
}; |
opt.duration = (opt.duration && opt.duration.constructor == Number ? |
opt.duration : |
{ slow: 600, fast: 200 }[opt.duration]) || 400; |
// Queueing |
opt.old = opt.complete; |
opt.complete = function(){ |
if ( opt.queue !== false ) |
jQuery(this).dequeue(); |
if ( jQuery.isFunction( opt.old ) ) |
opt.old.apply( this ); |
}; |
return opt; |
}, |
easing: { |
linear: function( p, n, firstNum, diff ) { |
return firstNum + diff * p; |
}, |
swing: function( p, n, firstNum, diff ) { |
return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum; |
} |
}, |
timers: [], |
timerId: null, |
fx: function( elem, options, prop ){ |
this.options = options; |
this.elem = elem; |
this.prop = prop; |
if ( !options.orig ) |
options.orig = {}; |
} |
}); |
jQuery.fx.prototype = { |
// Simple function for setting a style value |
update: function(){ |
if ( this.options.step ) |
this.options.step.apply( this.elem, [ this.now, this ] ); |
(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this ); |
// Set display property to block for height/width animations |
if ( this.prop == "height" || this.prop == "width" ) |
this.elem.style.display = "block"; |
}, |
// Get the current size |
cur: function(force){ |
if ( this.elem[this.prop] != null && this.elem.style[this.prop] == null ) |
return this.elem[ this.prop ]; |
var r = parseFloat(jQuery.css(this.elem, this.prop, force)); |
return r && r > -10000 ? r : parseFloat(jQuery.curCSS(this.elem, this.prop)) || 0; |
}, |
// Start an animation from one number to another |
custom: function(from, to, unit){ |
this.startTime = (new Date()).getTime(); |
this.start = from; |
this.end = to; |
this.unit = unit || this.unit || "px"; |
this.now = this.start; |
this.pos = this.state = 0; |
this.update(); |
var self = this; |
function t(gotoEnd){ |
return self.step(gotoEnd); |
} |
t.elem = this.elem; |
jQuery.timers.push(t); |
if ( jQuery.timerId == null ) { |
jQuery.timerId = setInterval(function(){ |
var timers = jQuery.timers; |
for ( var i = 0; i < timers.length; i++ ) |
if ( !timers[i]() ) |
timers.splice(i--, 1); |
if ( !timers.length ) { |
clearInterval( jQuery.timerId ); |
jQuery.timerId = null; |
} |
}, 13); |
} |
}, |
// Simple 'show' function |
show: function(){ |
// Remember where we started, so that we can go back to it later |
this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop ); |
this.options.show = true; |
// Begin the animation |
this.custom(0, this.cur()); |
// Make sure that we start at a small width/height to avoid any |
// flash of content |
if ( this.prop == "width" || this.prop == "height" ) |
this.elem.style[this.prop] = "1px"; |
// Start by showing the element |
jQuery(this.elem).show(); |
}, |
// Simple 'hide' function |
hide: function(){ |
// Remember where we started, so that we can go back to it later |
this.options.orig[this.prop] = jQuery.attr( this.elem.style, this.prop ); |
this.options.hide = true; |
// Begin the animation |
this.custom(this.cur(), 0); |
}, |
// Each step of an animation |
step: function(gotoEnd){ |
var t = (new Date()).getTime(); |
if ( gotoEnd || t > this.options.duration + this.startTime ) { |
this.now = this.end; |
this.pos = this.state = 1; |
this.update(); |
this.options.curAnim[ this.prop ] = true; |
var done = true; |
for ( var i in this.options.curAnim ) |
if ( this.options.curAnim[i] !== true ) |
done = false; |
if ( done ) { |
if ( this.options.display != null ) { |
// Reset the overflow |
this.elem.style.overflow = this.options.overflow; |
// Reset the display |
this.elem.style.display = this.options.display; |
if ( jQuery.css(this.elem, "display") == "none" ) |
this.elem.style.display = "block"; |
} |
// Hide the element if the "hide" operation was done |
if ( this.options.hide ) |
this.elem.style.display = "none"; |
// Reset the properties, if the item has been hidden or shown |
if ( this.options.hide || this.options.show ) |
for ( var p in this.options.curAnim ) |
jQuery.attr(this.elem.style, p, this.options.orig[p]); |
} |
// If a callback was provided, execute it |
if ( done && jQuery.isFunction( this.options.complete ) ) |
// Execute the complete function |
this.options.complete.apply( this.elem ); |
return false; |
} else { |
var n = t - this.startTime; |
this.state = n / this.options.duration; |
// Perform the easing function, defaults to swing |
this.pos = jQuery.easing[this.options.easing || (jQuery.easing.swing ? "swing" : "linear")](this.state, n, 0, 1, this.options.duration); |
this.now = this.start + ((this.end - this.start) * this.pos); |
// Perform the next step of the animation |
this.update(); |
} |
return true; |
} |
}; |
jQuery.fx.step = { |
scrollLeft: function(fx){ |
fx.elem.scrollLeft = fx.now; |
}, |
scrollTop: function(fx){ |
fx.elem.scrollTop = fx.now; |
}, |
opacity: function(fx){ |
jQuery.attr(fx.elem.style, "opacity", fx.now); |
}, |
_default: function(fx){ |
fx.elem.style[ fx.prop ] = fx.now + fx.unit; |
} |
}; |
// The Offset Method |
// Originally By Brandon Aaron, part of the Dimension Plugin |
// http://jquery.com/plugins/project/dimensions |
jQuery.fn.offset = function() { |
var left = 0, top = 0, elem = this[0], results; |
if ( elem ) with ( jQuery.browser ) { |
var parent = elem.parentNode, |
offsetChild = elem, |
offsetParent = elem.offsetParent, |
doc = elem.ownerDocument, |
safari2 = safari && parseInt(version) < 522 && !/adobeair/i.test(userAgent), |
fixed = jQuery.css(elem, "position") == "fixed"; |
// Use getBoundingClientRect if available |
if ( elem.getBoundingClientRect ) { |
var box = elem.getBoundingClientRect(); |
// Add the document scroll offsets |
add(box.left + Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft), |
box.top + Math.max(doc.documentElement.scrollTop, doc.body.scrollTop)); |
// IE adds the HTML element's border, by default it is medium which is 2px |
// IE 6 and 7 quirks mode the border width is overwritable by the following css html { border: 0; } |
// IE 7 standards mode, the border is always 2px |
// This border/offset is typically represented by the clientLeft and clientTop properties |
// However, in IE6 and 7 quirks mode the clientLeft and clientTop properties are not updated when overwriting it via CSS |
// Therefore this method will be off by 2px in IE while in quirksmode |
add( -doc.documentElement.clientLeft, -doc.documentElement.clientTop ); |
// Otherwise loop through the offsetParents and parentNodes |
} else { |
// Initial element offsets |
add( elem.offsetLeft, elem.offsetTop ); |
// Get parent offsets |
while ( offsetParent ) { |
// Add offsetParent offsets |
add( offsetParent.offsetLeft, offsetParent.offsetTop ); |
// Mozilla and Safari > 2 does not include the border on offset parents |
// However Mozilla adds the border for table or table cells |
if ( mozilla && !/^t(able|d|h)$/i.test(offsetParent.tagName) || safari && !safari2 ) |
border( offsetParent ); |
// Add the document scroll offsets if position is fixed on any offsetParent |
if ( !fixed && jQuery.css(offsetParent, "position") == "fixed" ) |
fixed = true; |
// Set offsetChild to previous offsetParent unless it is the body element |
offsetChild = /^body$/i.test(offsetParent.tagName) ? offsetChild : offsetParent; |
// Get next offsetParent |
offsetParent = offsetParent.offsetParent; |
} |
// Get parent scroll offsets |
while ( parent && parent.tagName && !/^body|html$/i.test(parent.tagName) ) { |
// Remove parent scroll UNLESS that parent is inline or a table to work around Opera inline/table scrollLeft/Top bug |
if ( !/^inline|table.*$/i.test(jQuery.css(parent, "display")) ) |
// Subtract parent scroll offsets |
add( -parent.scrollLeft, -parent.scrollTop ); |
// Mozilla does not add the border for a parent that has overflow != visible |
if ( mozilla && jQuery.css(parent, "overflow") != "visible" ) |
border( parent ); |
// Get next parent |
parent = parent.parentNode; |
} |
// Safari <= 2 doubles body offsets with a fixed position element/offsetParent or absolutely positioned offsetChild |
// Mozilla doubles body offsets with a non-absolutely positioned offsetChild |
if ( (safari2 && (fixed || jQuery.css(offsetChild, "position") == "absolute")) || |
(mozilla && jQuery.css(offsetChild, "position") != "absolute") ) |
add( -doc.body.offsetLeft, -doc.body.offsetTop ); |
// Add the document scroll offsets if position is fixed |
if ( fixed ) |
add(Math.max(doc.documentElement.scrollLeft, doc.body.scrollLeft), |
Math.max(doc.documentElement.scrollTop, doc.body.scrollTop)); |
} |
// Return an object with top and left properties |
results = { top: top, left: left }; |
} |
function border(elem) { |
add( jQuery.curCSS(elem, "borderLeftWidth", true), jQuery.curCSS(elem, "borderTopWidth", true) ); |
} |
function add(l, t) { |
left += parseInt(l) || 0; |
top += parseInt(t) || 0; |
} |
return results; |
}; |
})(); |
/branches/v2.6-greffoir/vendors/extjs-2.0.1/adapter/jquery/ext-jquery-adapter.js |
---|
New file |
0,0 → 1,10 |
/* |
* Ext JS Library 2.0.2 |
* Copyright(c) 2006-2008, Ext JS, LLC. |
* licensing@extjs.com |
* |
* http://extjs.com/license |
*/ |
Ext={version:"2.0.2"};window["undefined"]=window["undefined"];Ext.apply=function(C,D,B){if(B){Ext.apply(C,B)}if(C&&D&&typeof D=="object"){for(var A in D){C[A]=D[A]}}return C};(function(){var idSeed=0;var ua=navigator.userAgent.toLowerCase();var isStrict=document.compatMode=="CSS1Compat",isOpera=ua.indexOf("opera")>-1,isSafari=(/webkit|khtml/).test(ua),isSafari3=isSafari&&ua.indexOf("webkit/5")!=-1,isIE=!isOpera&&ua.indexOf("msie")>-1,isIE7=!isOpera&&ua.indexOf("msie 7")>-1,isGecko=!isSafari&&ua.indexOf("gecko")>-1,isBorderBox=isIE&&!isStrict,isWindows=(ua.indexOf("windows")!=-1||ua.indexOf("win32")!=-1),isMac=(ua.indexOf("macintosh")!=-1||ua.indexOf("mac os x")!=-1),isAir=(ua.indexOf("adobeair")!=-1),isLinux=(ua.indexOf("linux")!=-1),isSecure=window.location.href.toLowerCase().indexOf("https")===0;if(isIE&&!isIE7){try{document.execCommand("BackgroundImageCache",false,true)}catch(e){}}Ext.apply(Ext,{isStrict:isStrict,isSecure:isSecure,isReady:false,enableGarbageCollector:true,enableListenerCollection:false,SSL_SECURE_URL:"javascript:false",BLANK_IMAGE_URL:"http:/"+"/extjs.com/s.gif",emptyFn:function(){},applyIf:function(o,c){if(o&&c){for(var p in c){if(typeof o[p]=="undefined"){o[p]=c[p]}}}return o},addBehaviors:function(o){if(!Ext.isReady){Ext.onReady(function(){Ext.addBehaviors(o)});return }var cache={};for(var b in o){var parts=b.split("@");if(parts[1]){var s=parts[0];if(!cache[s]){cache[s]=Ext.select(s)}cache[s].on(parts[1],o[b])}}cache=null},id:function(el,prefix){prefix=prefix||"ext-gen";el=Ext.getDom(el);var id=prefix+(++idSeed);return el?(el.id?el.id:(el.id=id)):id},extend:function(){var io=function(o){for(var m in o){this[m]=o[m]}};var oc=Object.prototype.constructor;return function(sb,sp,overrides){if(typeof sp=="object"){overrides=sp;sp=sb;sb=overrides.constructor!=oc?overrides.constructor:function(){sp.apply(this,arguments)}}var F=function(){},sbp,spp=sp.prototype;F.prototype=spp;sbp=sb.prototype=new F();sbp.constructor=sb;sb.superclass=spp;if(spp.constructor==oc){spp.constructor=sp}sb.override=function(o){Ext.override(sb,o)};sbp.override=io;Ext.override(sb,overrides);sb.extend=function(o){Ext.extend(sb,o)};return sb}}(),override:function(origclass,overrides){if(overrides){var p=origclass.prototype;for(var method in overrides){p[method]=overrides[method]}}},namespace:function(){var a=arguments,o=null,i,j,d,rt;for(i=0;i<a.length;++i){d=a[i].split(".");rt=d[0];eval("if (typeof "+rt+" == \"undefined\"){"+rt+" = {};} o = "+rt+";");for(j=1;j<d.length;++j){o[d[j]]=o[d[j]]||{};o=o[d[j]]}}},urlEncode:function(o){if(!o){return""}var buf=[];for(var key in o){var ov=o[key],k=encodeURIComponent(key);var type=typeof ov;if(type=="undefined"){buf.push(k,"=&")}else{if(type!="function"&&type!="object"){buf.push(k,"=",encodeURIComponent(ov),"&")}else{if(Ext.isArray(ov)){if(ov.length){for(var i=0,len=ov.length;i<len;i++){buf.push(k,"=",encodeURIComponent(ov[i]===undefined?"":ov[i]),"&")}}else{buf.push(k,"=&")}}}}}buf.pop();return buf.join("")},urlDecode:function(string,overwrite){if(!string||!string.length){return{}}var obj={};var pairs=string.split("&");var pair,name,value;for(var i=0,len=pairs.length;i<len;i++){pair=pairs[i].split("=");name=decodeURIComponent(pair[0]);value=decodeURIComponent(pair[1]);if(overwrite!==true){if(typeof obj[name]=="undefined"){obj[name]=value}else{if(typeof obj[name]=="string"){obj[name]=[obj[name]];obj[name].push(value)}else{obj[name].push(value)}}}else{obj[name]=value}}return obj},each:function(array,fn,scope){if(typeof array.length=="undefined"||typeof array=="string"){array=[array]}for(var i=0,len=array.length;i<len;i++){if(fn.call(scope||array[i],array[i],i,array)===false){return i}}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(Ext.isArray(a)){r=r.concat(a)}else{if(a.length!==undefined&&!a.substr){r=r.concat(Array.prototype.slice.call(a,0))}else{r.push(a)}}}return r},escapeRe:function(s){return s.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},callback:function(cb,scope,args,delay){if(typeof cb=="function"){if(delay){cb.defer(delay,scope,args||[])}else{cb.apply(scope,args||[])}}},getDom:function(el){if(!el||!document){return null}return el.dom?el.dom:(typeof el=="string"?document.getElementById(el):el)},getDoc:function(){return Ext.get(document)},getBody:function(){return Ext.get(document.body||document.documentElement)},getCmp:function(id){return Ext.ComponentMgr.get(id)},num:function(v,defaultValue){if(typeof v!="number"){return defaultValue}return v},destroy:function(){for(var i=0,a=arguments,len=a.length;i<len;i++){var as=a[i];if(as){if(typeof as.destroy=="function"){as.destroy()}else{if(as.dom){as.removeAllListeners();as.remove()}}}}},removeNode:isIE?function(){var d;return function(n){if(n&&n.tagName!="BODY"){d=d||document.createElement("div");d.appendChild(n);d.innerHTML=""}}}():function(n){if(n&&n.parentNode&&n.tagName!="BODY"){n.parentNode.removeChild(n)}},type:function(o){if(o===undefined||o===null){return false}if(o.htmlElement){return"element"}var t=typeof o;if(t=="object"&&o.nodeName){switch(o.nodeType){case 1:return"element";case 3:return(/\S/).test(o.nodeValue)?"textnode":"whitespace"}}if(t=="object"||t=="function"){switch(o.constructor){case Array:return"array";case RegExp:return"regexp"}if(typeof o.length=="number"&&typeof o.item=="function"){return"nodelist"}}return t},isEmpty:function(v,allowBlank){return v===null||v===undefined||(!allowBlank?v==="":false)},value:function(v,defaultValue,allowBlank){return Ext.isEmpty(v,allowBlank)?defaultValue:v},isArray:function(v){return v&&typeof v.pop=="function"},isDate:function(v){return v&&typeof v.getFullYear=="function"},isOpera:isOpera,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari&&!isSafari3,isIE:isIE,isIE6:isIE&&!isIE7,isIE7:isIE7,isGecko:isGecko,isBorderBox:isBorderBox,isLinux:isLinux,isWindows:isWindows,isMac:isMac,isAir:isAir,useShims:((isIE&&!isIE7)||(isGecko&&isMac))});Ext.ns=Ext.namespace})();Ext.ns("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib","Ext.layout","Ext.app","Ext.ux");Ext.apply(Function.prototype,{createCallback:function(){var A=arguments;var B=this;return function(){return B.apply(window,A)}},createDelegate:function(C,B,A){var D=this;return function(){var F=B||arguments;if(A===true){F=Array.prototype.slice.call(arguments,0);F=F.concat(B)}else{if(typeof A=="number"){F=Array.prototype.slice.call(arguments,0);var E=[A,0].concat(B);Array.prototype.splice.apply(F,E)}}return D.apply(C||window,F)}},defer:function(C,E,B,A){var D=this.createDelegate(E,B,A);if(C){return setTimeout(D,C)}D();return 0},createSequence:function(B,A){if(typeof B!="function"){return this}var C=this;return function(){var D=C.apply(this||window,arguments);B.apply(A||this||window,arguments);return D}},createInterceptor:function(B,A){if(typeof B!="function"){return this}var C=this;return function(){B.target=this;B.method=C;if(B.apply(A||this||window,arguments)===false){return }return C.apply(this||window,arguments)}}});Ext.applyIf(String,{escape:function(A){return A.replace(/('|\\)/g,"\\$1")},leftPad:function(D,B,C){var A=new String(D);if(!C){C=" "}while(A.length<B){A=C+A}return A.toString()},format:function(B){var A=Array.prototype.slice.call(arguments,1);return B.replace(/\{(\d+)\}/g,function(C,D){return A[D]})}});String.prototype.toggle=function(B,A){return this==B?A:B};String.prototype.trim=function(){var A=/^\s+|\s+$/g;return function(){return this.replace(A,"")}}();Ext.applyIf(Number.prototype,{constrain:function(B,A){return Math.min(Math.max(this,B),A)}});Ext.applyIf(Array.prototype,{indexOf:function(C){for(var B=0,A=this.length;B<A;B++){if(this[B]==C){return B}}return -1},remove:function(B){var A=this.indexOf(B);if(A!=-1){this.splice(A,1)}return this}});Date.prototype.getElapsed=function(A){return Math.abs((A||new Date()).getTime()-this.getTime())}; |
if(typeof jQuery=="undefined"){throw"Unable to load Ext, jQuery not found."}(function(){var B;Ext.lib.Dom={getViewWidth:function(D){return D?Math.max(jQuery(document).width(),jQuery(window).width()):jQuery(window).width()},getViewHeight:function(D){return D?Math.max(jQuery(document).height(),jQuery(window).height()):jQuery(window).height()},isAncestor:function(E,F){E=Ext.getDom(E);F=Ext.getDom(F);if(!E||!F){return false}if(E.contains&&!Ext.isSafari){return E.contains(F)}else{if(E.compareDocumentPosition){return !!(E.compareDocumentPosition(F)&16)}else{var D=F.parentNode;while(D){if(D==E){return true}else{if(!D.tagName||D.tagName.toUpperCase()=="HTML"){return false}}D=D.parentNode}return false}}},getRegion:function(D){return Ext.lib.Region.getRegion(D)},getY:function(D){return this.getXY(D)[1]},getX:function(D){return this.getXY(D)[0]},getXY:function(F){var E,J,L,M,I=(document.body||document.documentElement);F=Ext.getDom(F);if(F==I){return[0,0]}if(F.getBoundingClientRect){L=F.getBoundingClientRect();M=C(document).getScroll();return[L.left+M.left,L.top+M.top]}var N=0,K=0;E=F;var D=C(F).getStyle("position")=="absolute";while(E){N+=E.offsetLeft;K+=E.offsetTop;if(!D&&C(E).getStyle("position")=="absolute"){D=true}if(Ext.isGecko){J=C(E);var O=parseInt(J.getStyle("borderTopWidth"),10)||0;var G=parseInt(J.getStyle("borderLeftWidth"),10)||0;N+=G;K+=O;if(E!=F&&J.getStyle("overflow")!="visible"){N+=G;K+=O}}E=E.offsetParent}if(Ext.isSafari&&D){N-=I.offsetLeft;K-=I.offsetTop}if(Ext.isGecko&&!D){var H=C(I);N+=parseInt(H.getStyle("borderLeftWidth"),10)||0;K+=parseInt(H.getStyle("borderTopWidth"),10)||0}E=F.parentNode;while(E&&E!=I){if(!Ext.isOpera||(E.tagName!="TR"&&C(E).getStyle("display")!="inline")){N-=E.scrollLeft;K-=E.scrollTop}E=E.parentNode}return[N,K]},setXY:function(D,E){D=Ext.fly(D,"_setXY");D.position();var F=D.translatePoints(E);if(E[0]!==false){D.dom.style.left=F.left+"px"}if(E[1]!==false){D.dom.style.top=F.top+"px"}},setX:function(E,D){this.setXY(E,[D,false])},setY:function(D,E){this.setXY(D,[false,E])}};function C(D){if(!B){B=new Ext.Element.Flyweight()}B.dom=D;return B}Ext.lib.Event={getPageX:function(D){D=D.browserEvent||D;return D.pageX},getPageY:function(D){D=D.browserEvent||D;return D.pageY},getXY:function(D){D=D.browserEvent||D;return[D.pageX,D.pageY]},getTarget:function(D){return D.target},on:function(H,D,G,F,E){jQuery(H).bind(D,G)},un:function(F,D,E){jQuery(F).unbind(D,E)},purgeElement:function(D){jQuery(D).unbind()},preventDefault:function(D){D=D.browserEvent||D;if(D.preventDefault){D.preventDefault()}else{D.returnValue=false}},stopPropagation:function(D){D=D.browserEvent||D;if(D.stopPropagation){D.stopPropagation()}else{D.cancelBubble=true}},stopEvent:function(D){this.preventDefault(D);this.stopPropagation(D)},onAvailable:function(I,E,D){var H=new Date();var F=function(){if(H.getElapsed()>10000){clearInterval(G)}var J=document.getElementById(I);if(J){clearInterval(G);E.call(D||window,J)}};var G=setInterval(F,50)},resolveTextNode:function(D){if(D&&3==D.nodeType){return D.parentNode}else{return D}},getRelatedTarget:function(E){E=E.browserEvent||E;var D=E.relatedTarget;if(!D){if(E.type=="mouseout"){D=E.toElement}else{if(E.type=="mouseover"){D=E.fromElement}}}return this.resolveTextNode(D)}};Ext.lib.Ajax=function(){var D=function(E){return function(G,F){if((F=="error"||F=="timeout")&&E.failure){E.failure.call(E.scope||window,{responseText:G.responseText,responseXML:G.responseXML,argument:E.argument})}else{if(E.success){E.success.call(E.scope||window,{responseText:G.responseText,responseXML:G.responseXML,argument:E.argument})}}}};return{request:function(J,G,E,H,F){var I={type:J,url:G,data:H,timeout:E.timeout,complete:D(E)};if(F){if(F.xmlData){I.data=F.xmlData;I.processData=false;I.type="POST";I.contentType="text/xml"}else{if(F.jsonData){I.data=typeof F.jsonData=="object"?Ext.encode(F.jsonData):F.jsonData;I.processData=false;I.type="POST";I.contentType="text/javascript"}}if(F.headers){I.beforeSend=function(M){var K=F.headers;for(var L in K){if(K.hasOwnProperty(L)){M.setRequestHeader(L,K[L])}}}}}jQuery.ajax(I)},formRequest:function(I,H,F,J,E,G){jQuery.ajax({type:Ext.getDom(I).method||"POST",url:H,data:jQuery(I).serialize()+(J?"&"+J:""),timeout:F.timeout,complete:D(F)})},isCallInProgress:function(E){return false},abort:function(E){return false},serializeForm:function(E){return jQuery(E.dom||E).serialize()}}}();Ext.lib.Anim=function(){var D=function(E,F){var G=true;return{stop:function(H){},isAnimated:function(){return G},proxyCallback:function(){G=false;Ext.callback(E,F)}}};return{scroll:function(H,F,J,K,E,G){var I=D(E,G);H=Ext.getDom(H);if(typeof F.scroll.to[0]=="number"){H.scrollLeft=F.scroll.to[0]}if(typeof F.scroll.to[1]=="number"){H.scrollTop=F.scroll.to[1]}I.proxyCallback();return I},motion:function(H,F,I,J,E,G){return this.run(H,F,I,J,E,G)},color:function(H,F,J,K,E,G){var I=D(E,G);I.proxyCallback();return I},run:function(F,N,I,M,G,P,O){var J=D(G,P),K=Ext.fly(F,"_animrun");var E={};for(var H in N){if(N[H].from){if(H!="points"){K.setStyle(H,N[H].from)}}switch(H){case"points":var L,R;K.position();if(L=N.points.by){var Q=K.getXY();R=K.translatePoints([Q[0]+L[0],Q[1]+L[1]])}else{R=K.translatePoints(N.points.to)}E.left=R.left;E.top=R.top;if(!parseInt(K.getStyle("left"),10)){K.setLeft(0)}if(!parseInt(K.getStyle("top"),10)){K.setTop(0)}if(N.points.from){K.setXY(N.points.from)}break;case"width":E.width=N.width.to;break;case"height":E.height=N.height.to;break;case"opacity":E.opacity=N.opacity.to;break;case"left":E.left=N.left.to;break;case"top":E.top=N.top.to;break;default:E[H]=N[H].to;break}}jQuery(F).animate(E,I*1000,undefined,J.proxyCallback);return J}}}();Ext.lib.Region=function(F,G,D,E){this.top=F;this[1]=F;this.right=G;this.bottom=D;this.left=E;this[0]=E};Ext.lib.Region.prototype={contains:function(D){return(D.left>=this.left&&D.right<=this.right&&D.top>=this.top&&D.bottom<=this.bottom)},getArea:function(){return((this.bottom-this.top)*(this.right-this.left))},intersect:function(H){var F=Math.max(this.top,H.top);var G=Math.min(this.right,H.right);var D=Math.min(this.bottom,H.bottom);var E=Math.max(this.left,H.left);if(D>=F&&G>=E){return new Ext.lib.Region(F,G,D,E)}else{return null}},union:function(H){var F=Math.min(this.top,H.top);var G=Math.max(this.right,H.right);var D=Math.max(this.bottom,H.bottom);var E=Math.min(this.left,H.left);return new Ext.lib.Region(F,G,D,E)},constrainTo:function(D){this.top=this.top.constrain(D.top,D.bottom);this.bottom=this.bottom.constrain(D.top,D.bottom);this.left=this.left.constrain(D.left,D.right);this.right=this.right.constrain(D.left,D.right);return this},adjust:function(F,E,D,G){this.top+=F;this.left+=E;this.right+=G;this.bottom+=D;return this}};Ext.lib.Region.getRegion=function(G){var I=Ext.lib.Dom.getXY(G);var F=I[1];var H=I[0]+G.offsetWidth;var D=I[1]+G.offsetHeight;var E=I[0];return new Ext.lib.Region(F,H,D,E)};Ext.lib.Point=function(D,E){if(Ext.isArray(D)){E=D[1];D=D[0]}this.x=this.right=this.left=this[0]=D;this.y=this.top=this.bottom=this[1]=E};Ext.lib.Point.prototype=new Ext.lib.Region();if(Ext.isIE){function A(){var D=Function.prototype;delete D.createSequence;delete D.defer;delete D.createDelegate;delete D.createCallback;delete D.createInterceptor;window.detachEvent("onunload",A)}window.attachEvent("onunload",A)}})(); |
/branches/v2.6-greffoir/vendors/extjs-2.0.1/adapter/ext/ext-base.js |
---|
New file |
0,0 → 1,10 |
/* |
* Ext JS Library 2.0.2 |
* Copyright(c) 2006-2008, Ext JS, LLC. |
* licensing@extjs.com |
* |
* http://extjs.com/license |
*/ |
Ext={version:"2.0.2"};window["undefined"]=window["undefined"];Ext.apply=function(C,D,B){if(B){Ext.apply(C,B)}if(C&&D&&typeof D=="object"){for(var A in D){C[A]=D[A]}}return C};(function(){var idSeed=0;var ua=navigator.userAgent.toLowerCase();var isStrict=document.compatMode=="CSS1Compat",isOpera=ua.indexOf("opera")>-1,isSafari=(/webkit|khtml/).test(ua),isSafari3=isSafari&&ua.indexOf("webkit/5")!=-1,isIE=!isOpera&&ua.indexOf("msie")>-1,isIE7=!isOpera&&ua.indexOf("msie 7")>-1,isGecko=!isSafari&&ua.indexOf("gecko")>-1,isBorderBox=isIE&&!isStrict,isWindows=(ua.indexOf("windows")!=-1||ua.indexOf("win32")!=-1),isMac=(ua.indexOf("macintosh")!=-1||ua.indexOf("mac os x")!=-1),isAir=(ua.indexOf("adobeair")!=-1),isLinux=(ua.indexOf("linux")!=-1),isSecure=window.location.href.toLowerCase().indexOf("https")===0;if(isIE&&!isIE7){try{document.execCommand("BackgroundImageCache",false,true)}catch(e){}}Ext.apply(Ext,{isStrict:isStrict,isSecure:isSecure,isReady:false,enableGarbageCollector:true,enableListenerCollection:false,SSL_SECURE_URL:"javascript:false",BLANK_IMAGE_URL:"http:/"+"/extjs.com/s.gif",emptyFn:function(){},applyIf:function(o,c){if(o&&c){for(var p in c){if(typeof o[p]=="undefined"){o[p]=c[p]}}}return o},addBehaviors:function(o){if(!Ext.isReady){Ext.onReady(function(){Ext.addBehaviors(o)});return }var cache={};for(var b in o){var parts=b.split("@");if(parts[1]){var s=parts[0];if(!cache[s]){cache[s]=Ext.select(s)}cache[s].on(parts[1],o[b])}}cache=null},id:function(el,prefix){prefix=prefix||"ext-gen";el=Ext.getDom(el);var id=prefix+(++idSeed);return el?(el.id?el.id:(el.id=id)):id},extend:function(){var io=function(o){for(var m in o){this[m]=o[m]}};var oc=Object.prototype.constructor;return function(sb,sp,overrides){if(typeof sp=="object"){overrides=sp;sp=sb;sb=overrides.constructor!=oc?overrides.constructor:function(){sp.apply(this,arguments)}}var F=function(){},sbp,spp=sp.prototype;F.prototype=spp;sbp=sb.prototype=new F();sbp.constructor=sb;sb.superclass=spp;if(spp.constructor==oc){spp.constructor=sp}sb.override=function(o){Ext.override(sb,o)};sbp.override=io;Ext.override(sb,overrides);sb.extend=function(o){Ext.extend(sb,o)};return sb}}(),override:function(origclass,overrides){if(overrides){var p=origclass.prototype;for(var method in overrides){p[method]=overrides[method]}}},namespace:function(){var a=arguments,o=null,i,j,d,rt;for(i=0;i<a.length;++i){d=a[i].split(".");rt=d[0];eval("if (typeof "+rt+" == \"undefined\"){"+rt+" = {};} o = "+rt+";");for(j=1;j<d.length;++j){o[d[j]]=o[d[j]]||{};o=o[d[j]]}}},urlEncode:function(o){if(!o){return""}var buf=[];for(var key in o){var ov=o[key],k=encodeURIComponent(key);var type=typeof ov;if(type=="undefined"){buf.push(k,"=&")}else{if(type!="function"&&type!="object"){buf.push(k,"=",encodeURIComponent(ov),"&")}else{if(Ext.isArray(ov)){if(ov.length){for(var i=0,len=ov.length;i<len;i++){buf.push(k,"=",encodeURIComponent(ov[i]===undefined?"":ov[i]),"&")}}else{buf.push(k,"=&")}}}}}buf.pop();return buf.join("")},urlDecode:function(string,overwrite){if(!string||!string.length){return{}}var obj={};var pairs=string.split("&");var pair,name,value;for(var i=0,len=pairs.length;i<len;i++){pair=pairs[i].split("=");name=decodeURIComponent(pair[0]);value=decodeURIComponent(pair[1]);if(overwrite!==true){if(typeof obj[name]=="undefined"){obj[name]=value}else{if(typeof obj[name]=="string"){obj[name]=[obj[name]];obj[name].push(value)}else{obj[name].push(value)}}}else{obj[name]=value}}return obj},each:function(array,fn,scope){if(typeof array.length=="undefined"||typeof array=="string"){array=[array]}for(var i=0,len=array.length;i<len;i++){if(fn.call(scope||array[i],array[i],i,array)===false){return i}}},combine:function(){var as=arguments,l=as.length,r=[];for(var i=0;i<l;i++){var a=as[i];if(Ext.isArray(a)){r=r.concat(a)}else{if(a.length!==undefined&&!a.substr){r=r.concat(Array.prototype.slice.call(a,0))}else{r.push(a)}}}return r},escapeRe:function(s){return s.replace(/([.*+?^${}()|[\]\/\\])/g,"\\$1")},callback:function(cb,scope,args,delay){if(typeof cb=="function"){if(delay){cb.defer(delay,scope,args||[])}else{cb.apply(scope,args||[])}}},getDom:function(el){if(!el||!document){return null}return el.dom?el.dom:(typeof el=="string"?document.getElementById(el):el)},getDoc:function(){return Ext.get(document)},getBody:function(){return Ext.get(document.body||document.documentElement)},getCmp:function(id){return Ext.ComponentMgr.get(id)},num:function(v,defaultValue){if(typeof v!="number"){return defaultValue}return v},destroy:function(){for(var i=0,a=arguments,len=a.length;i<len;i++){var as=a[i];if(as){if(typeof as.destroy=="function"){as.destroy()}else{if(as.dom){as.removeAllListeners();as.remove()}}}}},removeNode:isIE?function(){var d;return function(n){if(n&&n.tagName!="BODY"){d=d||document.createElement("div");d.appendChild(n);d.innerHTML=""}}}():function(n){if(n&&n.parentNode&&n.tagName!="BODY"){n.parentNode.removeChild(n)}},type:function(o){if(o===undefined||o===null){return false}if(o.htmlElement){return"element"}var t=typeof o;if(t=="object"&&o.nodeName){switch(o.nodeType){case 1:return"element";case 3:return(/\S/).test(o.nodeValue)?"textnode":"whitespace"}}if(t=="object"||t=="function"){switch(o.constructor){case Array:return"array";case RegExp:return"regexp"}if(typeof o.length=="number"&&typeof o.item=="function"){return"nodelist"}}return t},isEmpty:function(v,allowBlank){return v===null||v===undefined||(!allowBlank?v==="":false)},value:function(v,defaultValue,allowBlank){return Ext.isEmpty(v,allowBlank)?defaultValue:v},isArray:function(v){return v&&typeof v.pop=="function"},isDate:function(v){return v&&typeof v.getFullYear=="function"},isOpera:isOpera,isSafari:isSafari,isSafari3:isSafari3,isSafari2:isSafari&&!isSafari3,isIE:isIE,isIE6:isIE&&!isIE7,isIE7:isIE7,isGecko:isGecko,isBorderBox:isBorderBox,isLinux:isLinux,isWindows:isWindows,isMac:isMac,isAir:isAir,useShims:((isIE&&!isIE7)||(isGecko&&isMac))});Ext.ns=Ext.namespace})();Ext.ns("Ext","Ext.util","Ext.grid","Ext.dd","Ext.tree","Ext.data","Ext.form","Ext.menu","Ext.state","Ext.lib","Ext.layout","Ext.app","Ext.ux");Ext.apply(Function.prototype,{createCallback:function(){var A=arguments;var B=this;return function(){return B.apply(window,A)}},createDelegate:function(C,B,A){var D=this;return function(){var F=B||arguments;if(A===true){F=Array.prototype.slice.call(arguments,0);F=F.concat(B)}else{if(typeof A=="number"){F=Array.prototype.slice.call(arguments,0);var E=[A,0].concat(B);Array.prototype.splice.apply(F,E)}}return D.apply(C||window,F)}},defer:function(C,E,B,A){var D=this.createDelegate(E,B,A);if(C){return setTimeout(D,C)}D();return 0},createSequence:function(B,A){if(typeof B!="function"){return this}var C=this;return function(){var D=C.apply(this||window,arguments);B.apply(A||this||window,arguments);return D}},createInterceptor:function(B,A){if(typeof B!="function"){return this}var C=this;return function(){B.target=this;B.method=C;if(B.apply(A||this||window,arguments)===false){return }return C.apply(this||window,arguments)}}});Ext.applyIf(String,{escape:function(A){return A.replace(/('|\\)/g,"\\$1")},leftPad:function(D,B,C){var A=new String(D);if(!C){C=" "}while(A.length<B){A=C+A}return A.toString()},format:function(B){var A=Array.prototype.slice.call(arguments,1);return B.replace(/\{(\d+)\}/g,function(C,D){return A[D]})}});String.prototype.toggle=function(B,A){return this==B?A:B};String.prototype.trim=function(){var A=/^\s+|\s+$/g;return function(){return this.replace(A,"")}}();Ext.applyIf(Number.prototype,{constrain:function(B,A){return Math.min(Math.max(this,B),A)}});Ext.applyIf(Array.prototype,{indexOf:function(C){for(var B=0,A=this.length;B<A;B++){if(this[B]==C){return B}}return -1},remove:function(B){var A=this.indexOf(B);if(A!=-1){this.splice(A,1)}return this}});Date.prototype.getElapsed=function(A){return Math.abs((A||new Date()).getTime()-this.getTime())}; |
(function(){var B;Ext.lib.Dom={getViewWidth:function(E){return E?this.getDocumentWidth():this.getViewportWidth()},getViewHeight:function(E){return E?this.getDocumentHeight():this.getViewportHeight()},getDocumentHeight:function(){var E=(document.compatMode!="CSS1Compat")?document.body.scrollHeight:document.documentElement.scrollHeight;return Math.max(E,this.getViewportHeight())},getDocumentWidth:function(){var E=(document.compatMode!="CSS1Compat")?document.body.scrollWidth:document.documentElement.scrollWidth;return Math.max(E,this.getViewportWidth())},getViewportHeight:function(){if(Ext.isIE){return Ext.isStrict?document.documentElement.clientHeight:document.body.clientHeight}else{return self.innerHeight}},getViewportWidth:function(){if(Ext.isIE){return Ext.isStrict?document.documentElement.clientWidth:document.body.clientWidth}else{return self.innerWidth}},isAncestor:function(F,G){F=Ext.getDom(F);G=Ext.getDom(G);if(!F||!G){return false}if(F.contains&&!Ext.isSafari){return F.contains(G)}else{if(F.compareDocumentPosition){return !!(F.compareDocumentPosition(G)&16)}else{var E=G.parentNode;while(E){if(E==F){return true}else{if(!E.tagName||E.tagName.toUpperCase()=="HTML"){return false}}E=E.parentNode}return false}}},getRegion:function(E){return Ext.lib.Region.getRegion(E)},getY:function(E){return this.getXY(E)[1]},getX:function(E){return this.getXY(E)[0]},getXY:function(G){var F,K,M,N,J=(document.body||document.documentElement);G=Ext.getDom(G);if(G==J){return[0,0]}if(G.getBoundingClientRect){M=G.getBoundingClientRect();N=C(document).getScroll();return[M.left+N.left,M.top+N.top]}var O=0,L=0;F=G;var E=C(G).getStyle("position")=="absolute";while(F){O+=F.offsetLeft;L+=F.offsetTop;if(!E&&C(F).getStyle("position")=="absolute"){E=true}if(Ext.isGecko){K=C(F);var P=parseInt(K.getStyle("borderTopWidth"),10)||0;var H=parseInt(K.getStyle("borderLeftWidth"),10)||0;O+=H;L+=P;if(F!=G&&K.getStyle("overflow")!="visible"){O+=H;L+=P}}F=F.offsetParent}if(Ext.isSafari&&E){O-=J.offsetLeft;L-=J.offsetTop}if(Ext.isGecko&&!E){var I=C(J);O+=parseInt(I.getStyle("borderLeftWidth"),10)||0;L+=parseInt(I.getStyle("borderTopWidth"),10)||0}F=G.parentNode;while(F&&F!=J){if(!Ext.isOpera||(F.tagName!="TR"&&C(F).getStyle("display")!="inline")){O-=F.scrollLeft;L-=F.scrollTop}F=F.parentNode}return[O,L]},setXY:function(E,F){E=Ext.fly(E,"_setXY");E.position();var G=E.translatePoints(F);if(F[0]!==false){E.dom.style.left=G.left+"px"}if(F[1]!==false){E.dom.style.top=G.top+"px"}},setX:function(F,E){this.setXY(F,[E,false])},setY:function(E,F){this.setXY(E,[false,F])}};Ext.lib.Event=function(){var F=false;var G=[];var K=[];var I=0;var H=[];var E=0;var J=null;return{POLL_RETRYS:200,POLL_INTERVAL:20,EL:0,TYPE:1,FN:2,WFN:3,OBJ:3,ADJ_SCOPE:4,_interval:null,startInterval:function(){if(!this._interval){var L=this;var M=function(){L._tryPreloadAttach()};this._interval=setInterval(M,this.POLL_INTERVAL)}},onAvailable:function(N,L,O,M){H.push({id:N,fn:L,obj:O,override:M,checkReady:false});I=this.POLL_RETRYS;this.startInterval()},addListener:function(Q,M,P){Q=Ext.getDom(Q);if(!Q||!P){return false}if("unload"==M){K[K.length]=[Q,M,P];return true}var O=function(R){return typeof Ext!="undefined"?P(Ext.lib.Event.getEvent(R)):false};var L=[Q,M,P,O];var N=G.length;G[N]=L;this.doAdd(Q,M,O,false);return true},removeListener:function(S,O,R){var Q,N;S=Ext.getDom(S);if(!R){return this.purgeElement(S,false,O)}if("unload"==O){for(Q=0,N=K.length;Q<N;Q++){var M=K[Q];if(M&&M[0]==S&&M[1]==O&&M[2]==R){K.splice(Q,1);return true}}return false}var L=null;var P=arguments[3];if("undefined"==typeof P){P=this._getCacheIndex(S,O,R)}if(P>=0){L=G[P]}if(!S||!L){return false}this.doRemove(S,O,L[this.WFN],false);delete G[P][this.WFN];delete G[P][this.FN];G.splice(P,1);return true},getTarget:function(N,M){N=N.browserEvent||N;var L=N.target||N.srcElement;return this.resolveTextNode(L)},resolveTextNode:function(L){if(Ext.isSafari&&L&&3==L.nodeType){return L.parentNode}else{return L}},getPageX:function(M){M=M.browserEvent||M;var L=M.pageX;if(!L&&0!==L){L=M.clientX||0;if(Ext.isIE){L+=this.getScroll()[1]}}return L},getPageY:function(L){L=L.browserEvent||L;var M=L.pageY;if(!M&&0!==M){M=L.clientY||0;if(Ext.isIE){M+=this.getScroll()[0]}}return M},getXY:function(L){L=L.browserEvent||L;return[this.getPageX(L),this.getPageY(L)]},getRelatedTarget:function(M){M=M.browserEvent||M;var L=M.relatedTarget;if(!L){if(M.type=="mouseout"){L=M.toElement}else{if(M.type=="mouseover"){L=M.fromElement}}}return this.resolveTextNode(L)},getTime:function(N){N=N.browserEvent||N;if(!N.time){var M=new Date().getTime();try{N.time=M}catch(L){this.lastError=L;return M}}return N.time},stopEvent:function(L){this.stopPropagation(L);this.preventDefault(L)},stopPropagation:function(L){L=L.browserEvent||L;if(L.stopPropagation){L.stopPropagation()}else{L.cancelBubble=true}},preventDefault:function(L){L=L.browserEvent||L;if(L.preventDefault){L.preventDefault()}else{L.returnValue=false}},getEvent:function(M){var L=M||window.event;if(!L){var N=this.getEvent.caller;while(N){L=N.arguments[0];if(L&&Event==L.constructor){break}N=N.caller}}return L},getCharCode:function(L){L=L.browserEvent||L;return L.charCode||L.keyCode||0},_getCacheIndex:function(Q,N,P){for(var O=0,M=G.length;O<M;++O){var L=G[O];if(L&&L[this.FN]==P&&L[this.EL]==Q&&L[this.TYPE]==N){return O}}return -1},elCache:{},getEl:function(L){return document.getElementById(L)},clearCache:function(){},_load:function(M){F=true;var L=Ext.lib.Event;if(Ext.isIE){L.doRemove(window,"load",L._load)}},_tryPreloadAttach:function(){if(this.locked){return false}this.locked=true;var R=!F;if(!R){R=(I>0)}var Q=[];for(var M=0,L=H.length;M<L;++M){var P=H[M];if(P){var O=this.getEl(P.id);if(O){if(!P.checkReady||F||O.nextSibling||(document&&document.body)){var N=O;if(P.override){if(P.override===true){N=P.obj}else{N=P.override}}P.fn.call(N,P.obj);H[M]=null}}else{Q.push(P)}}}I=(Q.length===0)?0:I-1;if(R){this.startInterval()}else{clearInterval(this._interval);this._interval=null}this.locked=false;return true},purgeElement:function(P,Q,N){var R=this.getListeners(P,N);if(R){for(var O=0,L=R.length;O<L;++O){var M=R[O];this.removeListener(P,M.type,M.fn)}}if(Q&&P&&P.childNodes){for(O=0,L=P.childNodes.length;O<L;++O){this.purgeElement(P.childNodes[O],Q,N)}}},getListeners:function(M,R){var P=[],L;if(!R){L=[G,K]}else{if(R=="unload"){L=[K]}else{L=[G]}}for(var O=0;O<L.length;++O){var T=L[O];if(T&&T.length>0){for(var Q=0,S=T.length;Q<S;++Q){var N=T[Q];if(N&&N[this.EL]===M&&(!R||R===N[this.TYPE])){P.push({type:N[this.TYPE],fn:N[this.FN],obj:N[this.OBJ],adjust:N[this.ADJ_SCOPE],index:Q})}}}}return(P.length)?P:null},_unload:function(S){var R=Ext.lib.Event,P,O,M,L,N;for(P=0,L=K.length;P<L;++P){M=K[P];if(M){var Q=window;if(M[R.ADJ_SCOPE]){if(M[R.ADJ_SCOPE]===true){Q=M[R.OBJ]}else{Q=M[R.ADJ_SCOPE]}}M[R.FN].call(Q,R.getEvent(S),M[R.OBJ]);K[P]=null;M=null;Q=null}}K=null;if(G&&G.length>0){O=G.length;while(O){N=O-1;M=G[N];if(M){R.removeListener(M[R.EL],M[R.TYPE],M[R.FN],N)}O=O-1}M=null;R.clearCache()}R.doRemove(window,"unload",R._unload)},getScroll:function(){var L=document.documentElement,M=document.body;if(L&&(L.scrollTop||L.scrollLeft)){return[L.scrollTop,L.scrollLeft]}else{if(M){return[M.scrollTop,M.scrollLeft]}else{return[0,0]}}},doAdd:function(){if(window.addEventListener){return function(O,M,N,L){O.addEventListener(M,N,(L))}}else{if(window.attachEvent){return function(O,M,N,L){O.attachEvent("on"+M,N)}}else{return function(){}}}}(),doRemove:function(){if(window.removeEventListener){return function(O,M,N,L){O.removeEventListener(M,N,(L))}}else{if(window.detachEvent){return function(N,L,M){N.detachEvent("on"+L,M)}}else{return function(){}}}}()}}();var D=Ext.lib.Event;D.on=D.addListener;D.un=D.removeListener;if(document&&document.body){D._load()}else{D.doAdd(window,"load",D._load)}D.doAdd(window,"unload",D._unload);D._tryPreloadAttach();Ext.lib.Ajax={request:function(K,I,E,J,F){if(F){var G=F.headers;if(G){for(var H in G){if(G.hasOwnProperty(H)){this.initHeader(H,G[H],false)}}}if(F.xmlData){this.initHeader("Content-Type","text/xml",false);K="POST";J=F.xmlData}else{if(F.jsonData){this.initHeader("Content-Type","text/javascript",false);K="POST";J=typeof F.jsonData=="object"?Ext.encode(F.jsonData):F.jsonData}}}return this.asyncRequest(K,I,E,J)},serializeForm:function(F){if(typeof F=="string"){F=(document.getElementById(F)||document.forms[F])}var G,E,H,J,K="",M=false;for(var L=0;L<F.elements.length;L++){G=F.elements[L];J=F.elements[L].disabled;E=F.elements[L].name;H=F.elements[L].value;if(!J&&E){switch(G.type){case"select-one":case"select-multiple":for(var I=0;I<G.options.length;I++){if(G.options[I].selected){if(Ext.isIE){K+=encodeURIComponent(E)+"="+encodeURIComponent(G.options[I].attributes["value"].specified?G.options[I].value:G.options[I].text)+"&"}else{K+=encodeURIComponent(E)+"="+encodeURIComponent(G.options[I].hasAttribute("value")?G.options[I].value:G.options[I].text)+"&"}}}break;case"radio":case"checkbox":if(G.checked){K+=encodeURIComponent(E)+"="+encodeURIComponent(H)+"&"}break;case"file":case undefined:case"reset":case"button":break;case"submit":if(M==false){K+=encodeURIComponent(E)+"="+encodeURIComponent(H)+"&";M=true}break;default:K+=encodeURIComponent(E)+"="+encodeURIComponent(H)+"&";break}}}K=K.substr(0,K.length-1);return K},headers:{},hasHeaders:false,useDefaultHeader:true,defaultPostHeader:"application/x-www-form-urlencoded",useDefaultXhrHeader:true,defaultXhrHeader:"XMLHttpRequest",hasDefaultHeaders:true,defaultHeaders:{},poll:{},timeout:{},pollInterval:50,transactionId:0,setProgId:function(E){this.activeX.unshift(E)},setDefaultPostHeader:function(E){this.useDefaultHeader=E},setDefaultXhrHeader:function(E){this.useDefaultXhrHeader=E},setPollingInterval:function(E){if(typeof E=="number"&&isFinite(E)){this.pollInterval=E}},createXhrObject:function(I){var H,E;try{E=new XMLHttpRequest();H={conn:E,tId:I}}catch(G){for(var F=0;F<this.activeX.length;++F){try{E=new ActiveXObject(this.activeX[F]);H={conn:E,tId:I};break}catch(G){}}}finally{return H}},getConnectionObject:function(){var F;var G=this.transactionId;try{F=this.createXhrObject(G);if(F){this.transactionId++}}catch(E){}finally{return F}},asyncRequest:function(I,F,H,E){var G=this.getConnectionObject();if(!G){return null}else{G.conn.open(I,F,true);if(this.useDefaultXhrHeader){if(!this.defaultHeaders["X-Requested-With"]){this.initHeader("X-Requested-With",this.defaultXhrHeader,true)}}if(E&&this.useDefaultHeader){this.initHeader("Content-Type",this.defaultPostHeader)}if(this.hasDefaultHeaders||this.hasHeaders){this.setHeader(G)}this.handleReadyState(G,H);G.conn.send(E||null);return G}},handleReadyState:function(F,G){var E=this;if(G&&G.timeout){this.timeout[F.tId]=window.setTimeout(function(){E.abort(F,G,true)},G.timeout)}this.poll[F.tId]=window.setInterval(function(){if(F.conn&&F.conn.readyState==4){window.clearInterval(E.poll[F.tId]);delete E.poll[F.tId];if(G&&G.timeout){window.clearTimeout(E.timeout[F.tId]);delete E.timeout[F.tId]}E.handleTransactionResponse(F,G)}},this.pollInterval)},handleTransactionResponse:function(I,J,E){if(!J){this.releaseObject(I);return }var G,F;try{if(I.conn.status!==undefined&&I.conn.status!=0){G=I.conn.status}else{G=13030}}catch(H){G=13030}if(G>=200&&G<300){F=this.createResponseObject(I,J.argument);if(J.success){if(!J.scope){J.success(F)}else{J.success.apply(J.scope,[F])}}}else{switch(G){case 12002:case 12029:case 12030:case 12031:case 12152:case 13030:F=this.createExceptionObject(I.tId,J.argument,(E?E:false));if(J.failure){if(!J.scope){J.failure(F)}else{J.failure.apply(J.scope,[F])}}break;default:F=this.createResponseObject(I,J.argument);if(J.failure){if(!J.scope){J.failure(F)}else{J.failure.apply(J.scope,[F])}}}}this.releaseObject(I);F=null},createResponseObject:function(E,K){var H={};var M={};try{var G=E.conn.getAllResponseHeaders();var J=G.split("\n");for(var I=0;I<J.length;I++){var F=J[I].indexOf(":");if(F!=-1){M[J[I].substring(0,F)]=J[I].substring(F+2)}}}catch(L){}H.tId=E.tId;H.status=E.conn.status;H.statusText=E.conn.statusText;H.getResponseHeader=M;H.getAllResponseHeaders=G;H.responseText=E.conn.responseText;H.responseXML=E.conn.responseXML;if(typeof K!==undefined){H.argument=K}return H},createExceptionObject:function(L,H,E){var J=0;var K="communication failure";var G=-1;var F="transaction aborted";var I={};I.tId=L;if(E){I.status=G;I.statusText=F}else{I.status=J;I.statusText=K}if(H){I.argument=H}return I},initHeader:function(E,H,G){var F=(G)?this.defaultHeaders:this.headers;if(F[E]===undefined){F[E]=H}else{F[E]=H+","+F[E]}if(G){this.hasDefaultHeaders=true}else{this.hasHeaders=true}},setHeader:function(E){if(this.hasDefaultHeaders){for(var F in this.defaultHeaders){if(this.defaultHeaders.hasOwnProperty(F)){E.conn.setRequestHeader(F,this.defaultHeaders[F])}}}if(this.hasHeaders){for(var F in this.headers){if(this.headers.hasOwnProperty(F)){E.conn.setRequestHeader(F,this.headers[F])}}this.headers={};this.hasHeaders=false}},resetDefaultHeaders:function(){delete this.defaultHeaders;this.defaultHeaders={};this.hasDefaultHeaders=false},abort:function(F,G,E){if(this.isCallInProgress(F)){F.conn.abort();window.clearInterval(this.poll[F.tId]);delete this.poll[F.tId];if(E){delete this.timeout[F.tId]}this.handleTransactionResponse(F,G,true);return true}else{return false}},isCallInProgress:function(E){if(E.conn){return E.conn.readyState!=4&&E.conn.readyState!=0}else{return false}},releaseObject:function(E){E.conn=null;E=null},activeX:["MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft.XMLHTTP"]};Ext.lib.Region=function(G,H,E,F){this.top=G;this[1]=G;this.right=H;this.bottom=E;this.left=F;this[0]=F};Ext.lib.Region.prototype={contains:function(E){return(E.left>=this.left&&E.right<=this.right&&E.top>=this.top&&E.bottom<=this.bottom)},getArea:function(){return((this.bottom-this.top)*(this.right-this.left))},intersect:function(I){var G=Math.max(this.top,I.top);var H=Math.min(this.right,I.right);var E=Math.min(this.bottom,I.bottom);var F=Math.max(this.left,I.left);if(E>=G&&H>=F){return new Ext.lib.Region(G,H,E,F)}else{return null}},union:function(I){var G=Math.min(this.top,I.top);var H=Math.max(this.right,I.right);var E=Math.max(this.bottom,I.bottom);var F=Math.min(this.left,I.left);return new Ext.lib.Region(G,H,E,F)},constrainTo:function(E){this.top=this.top.constrain(E.top,E.bottom);this.bottom=this.bottom.constrain(E.top,E.bottom);this.left=this.left.constrain(E.left,E.right);this.right=this.right.constrain(E.left,E.right);return this},adjust:function(G,F,E,H){this.top+=G;this.left+=F;this.right+=H;this.bottom+=E;return this}};Ext.lib.Region.getRegion=function(H){var J=Ext.lib.Dom.getXY(H);var G=J[1];var I=J[0]+H.offsetWidth;var E=J[1]+H.offsetHeight;var F=J[0];return new Ext.lib.Region(G,I,E,F)};Ext.lib.Point=function(E,F){if(Ext.isArray(E)){F=E[1];E=E[0]}this.x=this.right=this.left=this[0]=E;this.y=this.top=this.bottom=this[1]=F};Ext.lib.Point.prototype=new Ext.lib.Region();Ext.lib.Anim={scroll:function(H,F,I,J,E,G){return this.run(H,F,I,J,E,G,Ext.lib.Scroll)},motion:function(H,F,I,J,E,G){return this.run(H,F,I,J,E,G,Ext.lib.Motion)},color:function(H,F,I,J,E,G){return this.run(H,F,I,J,E,G,Ext.lib.ColorAnim)},run:function(I,F,K,L,E,H,G){G=G||Ext.lib.AnimBase;if(typeof L=="string"){L=Ext.lib.Easing[L]}var J=new G(I,F,K,L);J.animateX(function(){Ext.callback(E,H)});return J}};function C(E){if(!B){B=new Ext.Element.Flyweight()}B.dom=E;return B}if(Ext.isIE){function A(){var E=Function.prototype;delete E.createSequence;delete E.defer;delete E.createDelegate;delete E.createCallback;delete E.createInterceptor;window.detachEvent("onunload",A)}window.attachEvent("onunload",A)}Ext.lib.AnimBase=function(F,E,G,H){if(F){this.init(F,E,G,H)}};Ext.lib.AnimBase.prototype={toString:function(){var E=this.getEl();var F=E.id||E.tagName;return("Anim "+F)},patterns:{noNegatives:/width|height|opacity|padding/i,offsetAttribute:/^((width|height)|(top|left))$/,defaultUnit:/width|height|top$|bottom$|left$|right$/i,offsetUnit:/\d+(em|%|en|ex|pt|in|cm|mm|pc)$/i},doMethod:function(E,G,F){return this.method(this.currentFrame,G,F-G,this.totalFrames)},setAttribute:function(E,G,F){if(this.patterns.noNegatives.test(E)){G=(G>0)?G:0}Ext.fly(this.getEl(),"_anim").setStyle(E,G+F)},getAttribute:function(E){var G=this.getEl();var I=C(G).getStyle(E);if(I!=="auto"&&!this.patterns.offsetUnit.test(I)){return parseFloat(I)}var F=this.patterns.offsetAttribute.exec(E)||[];var J=!!(F[3]);var H=!!(F[2]);if(H||(C(G).getStyle("position")=="absolute"&&J)){I=G["offset"+F[0].charAt(0).toUpperCase()+F[0].substr(1)]}else{I=0}return I},getDefaultUnit:function(E){if(this.patterns.defaultUnit.test(E)){return"px"}return""},animateX:function(G,E){var F=function(){this.onComplete.removeListener(F);if(typeof G=="function"){G.call(E||this,this)}};this.onComplete.addListener(F,this);this.animate()},setRuntimeAttribute:function(F){var K;var G;var H=this.attributes;this.runtimeAttributes[F]={};var J=function(L){return(typeof L!=="undefined")};if(!J(H[F]["to"])&&!J(H[F]["by"])){return false}K=(J(H[F]["from"]))?H[F]["from"]:this.getAttribute(F);if(J(H[F]["to"])){G=H[F]["to"]}else{if(J(H[F]["by"])){if(K.constructor==Array){G=[];for(var I=0,E=K.length;I<E;++I){G[I]=K[I]+H[F]["by"][I]}}else{G=K+H[F]["by"]}}}this.runtimeAttributes[F].start=K;this.runtimeAttributes[F].end=G;this.runtimeAttributes[F].unit=(J(H[F].unit))?H[F]["unit"]:this.getDefaultUnit(F)},init:function(G,L,K,E){var F=false;var H=null;var J=0;G=Ext.getDom(G);this.attributes=L||{};this.duration=K||1;this.method=E||Ext.lib.Easing.easeNone;this.useSeconds=true;this.currentFrame=0;this.totalFrames=Ext.lib.AnimMgr.fps;this.getEl=function(){return G};this.isAnimated=function(){return F};this.getStartTime=function(){return H};this.runtimeAttributes={};this.animate=function(){if(this.isAnimated()){return false}this.currentFrame=0;this.totalFrames=(this.useSeconds)?Math.ceil(Ext.lib.AnimMgr.fps*this.duration):this.duration;Ext.lib.AnimMgr.registerElement(this)};this.stop=function(O){if(O){this.currentFrame=this.totalFrames;this._onTween.fire()}Ext.lib.AnimMgr.stop(this)};var N=function(){this.onStart.fire();this.runtimeAttributes={};for(var O in this.attributes){this.setRuntimeAttribute(O)}F=true;J=0;H=new Date()};var M=function(){var Q={duration:new Date()-this.getStartTime(),currentFrame:this.currentFrame};Q.toString=function(){return("duration: "+Q.duration+", currentFrame: "+Q.currentFrame)};this.onTween.fire(Q);var P=this.runtimeAttributes;for(var O in P){this.setAttribute(O,this.doMethod(O,P[O].start,P[O].end),P[O].unit)}J+=1};var I=function(){var O=(new Date()-H)/1000;var P={duration:O,frames:J,fps:J/O};P.toString=function(){return("duration: "+P.duration+", frames: "+P.frames+", fps: "+P.fps)};F=false;J=0;this.onComplete.fire(P)};this._onStart=new Ext.util.Event(this);this.onStart=new Ext.util.Event(this);this.onTween=new Ext.util.Event(this);this._onTween=new Ext.util.Event(this);this.onComplete=new Ext.util.Event(this);this._onComplete=new Ext.util.Event(this);this._onStart.addListener(N);this._onTween.addListener(M);this._onComplete.addListener(I)}};Ext.lib.AnimMgr=new function(){var G=null;var F=[];var E=0;this.fps=1000;this.delay=1;this.registerElement=function(J){F[F.length]=J;E+=1;J._onStart.fire();this.start()};this.unRegister=function(K,J){K._onComplete.fire();J=J||I(K);if(J!=-1){F.splice(J,1)}E-=1;if(E<=0){this.stop()}};this.start=function(){if(G===null){G=setInterval(this.run,this.delay)}};this.stop=function(L){if(!L){clearInterval(G);for(var K=0,J=F.length;K<J;++K){if(F[0].isAnimated()){this.unRegister(F[0],0)}}F=[];G=null;E=0}else{this.unRegister(L)}};this.run=function(){for(var L=0,J=F.length;L<J;++L){var K=F[L];if(!K||!K.isAnimated()){continue}if(K.currentFrame<K.totalFrames||K.totalFrames===null){K.currentFrame+=1;if(K.useSeconds){H(K)}K._onTween.fire()}else{Ext.lib.AnimMgr.stop(K,L)}}};var I=function(L){for(var K=0,J=F.length;K<J;++K){if(F[K]==L){return K}}return -1};var H=function(K){var N=K.totalFrames;var M=K.currentFrame;var L=(K.currentFrame*K.duration*1000/K.totalFrames);var J=(new Date()-K.getStartTime());var O=0;if(J<K.duration*1000){O=Math.round((J/L-1)*K.currentFrame)}else{O=N-(M+1)}if(O>0&&isFinite(O)){if(K.currentFrame+O>=N){O=N-(M+1)}K.currentFrame+=O}}};Ext.lib.Bezier=new function(){this.getPosition=function(I,H){var J=I.length;var G=[];for(var F=0;F<J;++F){G[F]=[I[F][0],I[F][1]]}for(var E=1;E<J;++E){for(F=0;F<J-E;++F){G[F][0]=(1-H)*G[F][0]+H*G[parseInt(F+1,10)][0];G[F][1]=(1-H)*G[F][1]+H*G[parseInt(F+1,10)][1]}}return[G[0][0],G[0][1]]}};(function(){Ext.lib.ColorAnim=function(I,H,J,K){Ext.lib.ColorAnim.superclass.constructor.call(this,I,H,J,K)};Ext.extend(Ext.lib.ColorAnim,Ext.lib.AnimBase);var F=Ext.lib;var G=F.ColorAnim.superclass;var E=F.ColorAnim.prototype;E.toString=function(){var H=this.getEl();var I=H.id||H.tagName;return("ColorAnim "+I)};E.patterns.color=/color$/i;E.patterns.rgb=/^rgb\(([0-9]+)\s*,\s*([0-9]+)\s*,\s*([0-9]+)\)$/i;E.patterns.hex=/^#?([0-9A-F]{2})([0-9A-F]{2})([0-9A-F]{2})$/i;E.patterns.hex3=/^#?([0-9A-F]{1})([0-9A-F]{1})([0-9A-F]{1})$/i;E.patterns.transparent=/^transparent|rgba\(0, 0, 0, 0\)$/;E.parseColor=function(H){if(H.length==3){return H}var I=this.patterns.hex.exec(H);if(I&&I.length==4){return[parseInt(I[1],16),parseInt(I[2],16),parseInt(I[3],16)]}I=this.patterns.rgb.exec(H);if(I&&I.length==4){return[parseInt(I[1],10),parseInt(I[2],10),parseInt(I[3],10)]}I=this.patterns.hex3.exec(H);if(I&&I.length==4){return[parseInt(I[1]+I[1],16),parseInt(I[2]+I[2],16),parseInt(I[3]+I[3],16)]}return null};E.getAttribute=function(H){var J=this.getEl();if(this.patterns.color.test(H)){var K=C(J).getStyle(H);if(this.patterns.transparent.test(K)){var I=J.parentNode;K=C(I).getStyle(H);while(I&&this.patterns.transparent.test(K)){I=I.parentNode;K=C(I).getStyle(H);if(I.tagName.toUpperCase()=="HTML"){K="#fff"}}}}else{K=G.getAttribute.call(this,H)}return K};E.doMethod=function(I,M,J){var L;if(this.patterns.color.test(I)){L=[];for(var K=0,H=M.length;K<H;++K){L[K]=G.doMethod.call(this,I,M[K],J[K])}L="rgb("+Math.floor(L[0])+","+Math.floor(L[1])+","+Math.floor(L[2])+")"}else{L=G.doMethod.call(this,I,M,J)}return L};E.setRuntimeAttribute=function(I){G.setRuntimeAttribute.call(this,I);if(this.patterns.color.test(I)){var K=this.attributes;var M=this.parseColor(this.runtimeAttributes[I].start);var J=this.parseColor(this.runtimeAttributes[I].end);if(typeof K[I]["to"]==="undefined"&&typeof K[I]["by"]!=="undefined"){J=this.parseColor(K[I].by);for(var L=0,H=M.length;L<H;++L){J[L]=M[L]+J[L]}}this.runtimeAttributes[I].start=M;this.runtimeAttributes[I].end=J}}})();Ext.lib.Easing={easeNone:function(F,E,H,G){return H*F/G+E},easeIn:function(F,E,H,G){return H*(F/=G)*F+E},easeOut:function(F,E,H,G){return -H*(F/=G)*(F-2)+E},easeBoth:function(F,E,H,G){if((F/=G/2)<1){return H/2*F*F+E}return -H/2*((--F)*(F-2)-1)+E},easeInStrong:function(F,E,H,G){return H*(F/=G)*F*F*F+E},easeOutStrong:function(F,E,H,G){return -H*((F=F/G-1)*F*F*F-1)+E},easeBothStrong:function(F,E,H,G){if((F/=G/2)<1){return H/2*F*F*F*F+E}return -H/2*((F-=2)*F*F*F-2)+E},elasticIn:function(G,E,K,J,F,I){if(G==0){return E}if((G/=J)==1){return E+K}if(!I){I=J*0.3}if(!F||F<Math.abs(K)){F=K;var H=I/4}else{var H=I/(2*Math.PI)*Math.asin(K/F)}return -(F*Math.pow(2,10*(G-=1))*Math.sin((G*J-H)*(2*Math.PI)/I))+E},elasticOut:function(G,E,K,J,F,I){if(G==0){return E}if((G/=J)==1){return E+K}if(!I){I=J*0.3}if(!F||F<Math.abs(K)){F=K;var H=I/4}else{var H=I/(2*Math.PI)*Math.asin(K/F)}return F*Math.pow(2,-10*G)*Math.sin((G*J-H)*(2*Math.PI)/I)+K+E},elasticBoth:function(G,E,K,J,F,I){if(G==0){return E}if((G/=J/2)==2){return E+K}if(!I){I=J*(0.3*1.5)}if(!F||F<Math.abs(K)){F=K;var H=I/4}else{var H=I/(2*Math.PI)*Math.asin(K/F)}if(G<1){return -0.5*(F*Math.pow(2,10*(G-=1))*Math.sin((G*J-H)*(2*Math.PI)/I))+E}return F*Math.pow(2,-10*(G-=1))*Math.sin((G*J-H)*(2*Math.PI)/I)*0.5+K+E},backIn:function(F,E,I,H,G){if(typeof G=="undefined"){G=1.70158}return I*(F/=H)*F*((G+1)*F-G)+E},backOut:function(F,E,I,H,G){if(typeof G=="undefined"){G=1.70158}return I*((F=F/H-1)*F*((G+1)*F+G)+1)+E},backBoth:function(F,E,I,H,G){if(typeof G=="undefined"){G=1.70158}if((F/=H/2)<1){return I/2*(F*F*(((G*=(1.525))+1)*F-G))+E}return I/2*((F-=2)*F*(((G*=(1.525))+1)*F+G)+2)+E},bounceIn:function(F,E,H,G){return H-Ext.lib.Easing.bounceOut(G-F,0,H,G)+E},bounceOut:function(F,E,H,G){if((F/=G)<(1/2.75)){return H*(7.5625*F*F)+E}else{if(F<(2/2.75)){return H*(7.5625*(F-=(1.5/2.75))*F+0.75)+E}else{if(F<(2.5/2.75)){return H*(7.5625*(F-=(2.25/2.75))*F+0.9375)+E}}}return H*(7.5625*(F-=(2.625/2.75))*F+0.984375)+E},bounceBoth:function(F,E,H,G){if(F<G/2){return Ext.lib.Easing.bounceIn(F*2,0,H,G)*0.5+E}return Ext.lib.Easing.bounceOut(F*2-G,0,H,G)*0.5+H*0.5+E}};(function(){Ext.lib.Motion=function(K,J,L,M){if(K){Ext.lib.Motion.superclass.constructor.call(this,K,J,L,M)}};Ext.extend(Ext.lib.Motion,Ext.lib.ColorAnim);var H=Ext.lib;var I=H.Motion.superclass;var F=H.Motion.prototype;F.toString=function(){var J=this.getEl();var K=J.id||J.tagName;return("Motion "+K)};F.patterns.points=/^points$/i;F.setAttribute=function(J,L,K){if(this.patterns.points.test(J)){K=K||"px";I.setAttribute.call(this,"left",L[0],K);I.setAttribute.call(this,"top",L[1],K)}else{I.setAttribute.call(this,J,L,K)}};F.getAttribute=function(J){if(this.patterns.points.test(J)){var K=[I.getAttribute.call(this,"left"),I.getAttribute.call(this,"top")]}else{K=I.getAttribute.call(this,J)}return K};F.doMethod=function(J,N,K){var M=null;if(this.patterns.points.test(J)){var L=this.method(this.currentFrame,0,100,this.totalFrames)/100;M=H.Bezier.getPosition(this.runtimeAttributes[J],L)}else{M=I.doMethod.call(this,J,N,K)}return M};F.setRuntimeAttribute=function(S){if(this.patterns.points.test(S)){var K=this.getEl();var M=this.attributes;var J;var O=M["points"]["control"]||[];var L;var P,R;if(O.length>0&&!Ext.isArray(O[0])){O=[O]}else{var N=[];for(P=0,R=O.length;P<R;++P){N[P]=O[P]}O=N}Ext.fly(K).position();if(G(M["points"]["from"])){Ext.lib.Dom.setXY(K,M["points"]["from"])}else{Ext.lib.Dom.setXY(K,Ext.lib.Dom.getXY(K))}J=this.getAttribute("points");if(G(M["points"]["to"])){L=E.call(this,M["points"]["to"],J);var Q=Ext.lib.Dom.getXY(this.getEl());for(P=0,R=O.length;P<R;++P){O[P]=E.call(this,O[P],J)}}else{if(G(M["points"]["by"])){L=[J[0]+M["points"]["by"][0],J[1]+M["points"]["by"][1]];for(P=0,R=O.length;P<R;++P){O[P]=[J[0]+O[P][0],J[1]+O[P][1]]}}}this.runtimeAttributes[S]=[J];if(O.length>0){this.runtimeAttributes[S]=this.runtimeAttributes[S].concat(O)}this.runtimeAttributes[S][this.runtimeAttributes[S].length]=L}else{I.setRuntimeAttribute.call(this,S)}};var E=function(J,L){var K=Ext.lib.Dom.getXY(this.getEl());J=[J[0]-K[0]+L[0],J[1]-K[1]+L[1]];return J};var G=function(J){return(typeof J!=="undefined")}})();(function(){Ext.lib.Scroll=function(I,H,J,K){if(I){Ext.lib.Scroll.superclass.constructor.call(this,I,H,J,K)}};Ext.extend(Ext.lib.Scroll,Ext.lib.ColorAnim);var F=Ext.lib;var G=F.Scroll.superclass;var E=F.Scroll.prototype;E.toString=function(){var H=this.getEl();var I=H.id||H.tagName;return("Scroll "+I)};E.doMethod=function(H,K,I){var J=null;if(H=="scroll"){J=[this.method(this.currentFrame,K[0],I[0]-K[0],this.totalFrames),this.method(this.currentFrame,K[1],I[1]-K[1],this.totalFrames)]}else{J=G.doMethod.call(this,H,K,I)}return J};E.getAttribute=function(H){var J=null;var I=this.getEl();if(H=="scroll"){J=[I.scrollLeft,I.scrollTop]}else{J=G.getAttribute.call(this,H)}return J};E.setAttribute=function(H,K,J){var I=this.getEl();if(H=="scroll"){I.scrollLeft=K[0];I.scrollTop=K[1]}else{G.setAttribute.call(this,H,K,J)}}})()})(); |