﻿(function(){if(typeof Spry=="undefined"||!Spry.Utils||!Spry.$$){alert("SpryWidget.js requires SpryDOMUtils.js");return}if(!Spry.Widget)Spry.Widget={};Spry.Widget.setOptions=function(b,a,e){if(b&&a)for(var c in a){var d=a[c];if(!e||d!=undefined)b[c]=d}return b};Spry.Widget.onLoadDidFire=false;Spry.Widget.onLoadQueue=[];Spry.Widget.addCallbackToOnLoadQueue=function(a,b){if(a){if(b){var c=a;a=function(){c.call(b)}}Spry.Widget.onLoadQueue.push(a)}};Spry.Widget.triggerCallbackAfterOnLoad=function(a,b){if(Spry.Widget.onLoadDidFire)a.call(b);else Spry.Widget.addCallbackToOnLoadQueue(a,b)};Spry.Widget.processOnLoadQueue=function(){Spry.Widget.onLoadDidFire=true;var a=Spry.Widget.onLoadQueue;while(a.length)a.shift()()};Spry.Utils.addLoadListener(Spry.Widget.processOnLoadQueue);Spry.Widget.Base=function(){Spry.Widget.Base.Notifier.call(this)};Spry.Widget.Base.Notifier=function(){this.observers=[];this.suppressNotifications=0};Spry.Widget.Base.Notifier.prototype.addObserver=function(a){if(!a)return;var c=this.observers.length;for(var b=0;b<c;b++)if(this.observers[b]==a)return;this.observers[c]=a};Spry.Widget.Base.Notifier.prototype.removeObserver=function(b){if(!b)return;for(var a=0;a<this.observers.length;a++)if(this.observers[a]==b){this.observers.splice(a,1);break}};Spry.Widget.Base.Notifier.prototype.notifyObservers=function(b,d){if(!b)return;if(!this.suppressNotifications){var e=this.observers.length;for(var c=0;c<e;c++){var a=this.observers[c];if(a)if(typeof a=="function")a(b,this,d);else if(a[b])a[b](this,d)}}};Spry.Widget.Base.Notifier.prototype.enableNotifications=function(){if(--this.suppressNotifications<0){this.suppressNotifications=0;Spry.Debug.reportError("Unbalanced enableNotifications() call!\n")}};Spry.Widget.Base.Notifier.prototype.disableNotifications=function(){++this.suppressNotifications};Spry.Widget.Base.prototype=new Spry.Widget.Base.Notifier;Spry.Widget.Base.prototype.constructor=Spry.Widget.Base;Spry.Widget.Base.getElement=function(a){return Spry.$(a)};Spry.Widget.Base.getElements=function(a){var d=typeof a;if(d=="string")return Spry.$$(a);else if(d=="object")if(a.constructor==Array){var b=[];for(var c=0;c<a.length;c++)b=b.concat(Spry.Widget.Base.getElements(a[c]));return b}else return [a];return []};Spry.Widget.Base.getElementsByClassName=function(d,e){var c=[];if(typeof d.getElementsByClassName!="undefined"){var b=d.getElementsByClassName(e);for(var a=0;a<b.length;a++)c.push(b.item(a))}else{var g=new RegExp("\\b"+e+"\\b"),b=d.getElementsByTagName("*");for(var a=0;a<b.length;a++){var f=b.item(a);if(f.className.search(g)!=-1)c.push(f)}}return c};Spry.Widget.Base.prototype.getElementChildren=function(c){var b=[];if(c){var a=c.firstChild;while(a){if(a.nodeType==1)b.push(a);a=a.nextSibling}}return b};Spry.Widget.Base.prototype.groupContentByDelimeter=function(c){var e=[],h=c.length;for(var b=0;b<h;b++){var f=c[b],d=[];d.push(f);var g=c[b+1],a=f.nextSibling;while(a&&a!=g){d.push(a);a=a.nextSibling}e.push(d)}return e};Spry.Widget.Base.prototype.createElement=function(e,b,c,d){var a=document.createElement(e);if(b)a.className=b;if(c)c.appendChild(a);if(d)a.appendChild(d);return a};Spry.Widget.Base.prototype.sliceLeftClassStr="Left";Spry.Widget.Base.prototype.sliceRightClassStr="Right";Spry.Widget.Base.prototype.sliceCenterClassStr="Center";Spry.Widget.Base.prototype.sliceTopClassStr="Top";Spry.Widget.Base.prototype.sliceBottomClassStr="Bottom";Spry.Widget.Base.prototype.sliceFuncs={};Spry.Widget.Base.prototype.sliceFuncs["2slice"]=function(e,d,c){var a=e?e:document.createElement(d),b=document.createElement(d);this.appendChildNodes(b,this.extractChildNodes(a));a.appendChild(b);this.addClassName(a,c+this.sliceLeftClassStr);b.className=c+this.sliceRightClassStr;a.contentContainer=b;return a};Spry.Widget.Base.prototype.sliceFuncs["3slice"]=function(f,d,c){var a=f?f:document.createElement(d),e=document.createElement(d),b=document.createElement(d);this.appendChildNodes(b,this.extractChildNodes(a));a.appendChild(e);e.appendChild(b);this.addClassName(a,c+this.sliceLeftClassStr);e.className=c+this.sliceRightClassStr;b.className=c+this.sliceCenterClassStr;a.contentContainer=b;return a};Spry.Widget.Base.prototype.sliceFuncs["3sliceStacked"]=function(a,c,b){a=a?a:document.createElement(c);var e=document.createElement(c),d=document.createElement(c),f=document.createElement(c);this.appendChildNodes(d,this.extractChildNodes(a));a.appendChild(e);a.appendChild(d);a.appendChild(f);this.addClassName(a,b);e.className=b+this.sliceLeftClassStr;d.className=b+this.sliceCenterClassStr;f.className=b+this.sliceRightClassStr;a.contentContainer=d;return a};Spry.Widget.Base.prototype.sliceFuncs["9slice"]=function(a,c,b){if(!a)a=document.createElement(c);this.addClassName(a,b);var g=this.create3SliceStructure(null,c,b+this.sliceTopClassStr),d=this.create3SliceStructure(null,c,b),f=this.create3SliceStructure(null,c,b+this.sliceBottomClassStr);this.appendChildNodes(d.contentContainer,this.extractChildNodes(a));a.appendChild(g);a.appendChild(d);a.appendChild(f);var e=d.contentContainer;a.contentContainer=e;e.rootContainer=a;return a};Spry.Widget.Base.prototype.create3SliceStructure=Spry.Widget.Base.prototype.sliceFuncs["3slice"];Spry.Widget.Base.prototype.create9SliceStructure=Spry.Widget.Base.prototype.sliceFuncs["9slice"];Spry.Widget.Base.prototype.createOptionalSlicedStructure=function(a,g,d,e,c){if(!e)e=this.sliceMap?this.sliceMap:{};if(!c)c=g;var b=e[d];b=b?b:"none";if(!a)a=document.createElement(g);this.addClassName(a,d);var f=this.sliceFuncs[b];if(f)a=f.call(this,a,c,d);else a.contentContainer=a;return a};Spry.Widget.Base.prototype.extractChildNodes=function(a){var b=[];while(a.firstChild){var c=a.firstChild;b.push(c);a.removeChild(c)}return b};Spry.Widget.Base.prototype.appendChildNodes=function(c,b){for(var a=0;a<b.length;a++)c.appendChild(b[a])};Spry.Widget.Base.prototype.setOptions=Spry.Widget.setOptions;Spry.Widget.Base.prototype.getOnLoadDidFire=function(){return Spry.Widget.onLoadDidFire};Spry.Widget.Base.prototype.addCallbackToOnLoadQueue=Spry.Widget.addCallbackToOnLoadQueue;Spry.Widget.Base.prototype.triggerCallbackAfterOnLoad=Spry.Widget.triggerCallbackAfterOnLoad;Spry.Widget.Base.prototype.getElement=Spry.Widget.Base.getElement;Spry.Widget.Base.prototype.getElements=Spry.Widget.Base.getElements;Spry.Widget.Base.prototype.addClassName=Spry.Utils.addClassName;Spry.Widget.Base.prototype.hasClassName=Spry.Utils.hasClassName;Spry.Widget.Base.prototype.removeClassName=Spry.Utils.removeClassName;Spry.Widget.Base.prototype.addEventListener=Spry.Utils.addEventListener;Spry.Widget.Base.prototype.removeEventListener=Spry.Utils.removeEventListener;Spry.Widget.Base.prototype.indexOf=function(a,c){if(a){if(a.indexOf)return a.indexOf(c);for(var b=0;b<a.length;b++)if(a[b]==c)return b}return -1};Spry.Widget.Base.prototype.initializePlugIns=function(e,f){var d=new Spry.Widget.Event(this);this.notifyObservers("onPreInitializePlugIns",d);if(!d.performDefaultAction)return;var c=f?f:{},i=typeof c.useDefaultPlugIns=="undefined"?true:c.useDefaultPlugIns,j=i&&e?e:[],k=c.plugIns?c.plugIns:[],a=[],g=j.concat(k);for(var b=0;b<g.length;b++){var h=g[b];if(this.indexOf(a,h)<0)a.push(h)}a=a.sort(function(a,b){var c=typeof a.priority=="undefined"?50:a.priority,d=typeof b.priority=="undefined"?50:b.priority;return c-d});this.plugIns=a;for(var b=0;a&&b<a.length;b++)if(a[b].initialize)a[b].initialize(this);this.notifyObservers("onPostInitializePlugIns",d)};Spry.Widget.Base.prototype.getClientPosition=function(c){var b={};b.x=c.offsetLeft;b.y=c.offsetTop;var a=c.offsetParent;while(a){b.x+=a.offsetLeft;b.y+=a.offsetTop;a=a.offsetParent}return b};Spry.Widget.Base.prototype.getStyleProp=function(b,d){var a,c=Spry.Utils.camelizeString(d);try{if(b.style)a=b.style[c];if(!a)if(document.defaultView&&document.defaultView.getComputedStyle){var e=document.defaultView.getComputedStyle(b,null);a=e?e.getPropertyValue(d):null}else if(b.currentStyle)a=b.currentStyle[c]}catch(f){}return a=="auto"?null:a};Spry.Widget.Base.prototype.makePositioned=function(a){var b=this.getStyleProp(a,"position");if(!b||b=="static"){a.style.position="relative";if(window.opera){a.style.top=0;a.style.left=0}}};Spry.Widget.Base.prototype.clearIEAlphaFilter=function(b){var a=b.style.filter;if(a){a=a.replace(/alpha\([^\)]*\)/,"");a=a.replace(/^\s+|\s+$/,"");b.style.filter=a}else a="";return a};Spry.Widget.Base.prototype.setOpacity=function(b,c){b.style.opacity=""+c;var a=this.clearIEAlphaFilter(b);if(a)a+=" ";b.style.filter=a+"alpha(opacity="+c*100+")"};Spry.Widget.Event=function(a,b){this.widget=a;Spry.Widget.setOptions(this,b);this.performDefaultAction=true};Spry.Widget.Event.prototype.preventDefault=function(){this.performDefaultAction=false};Spry.Widget.Button=function(c,b){Spry.Widget.Base.call(this);this.element=Spry.$$(c)[0];this.setOptions(this,Spry.Widget.Button.config);this.setOptions(this,b);var a=this;this.addEventListener(this.element,"mousedown",function(b){return a.handleMouseDown(b)},false);this.addEventListener(this.element,"mouseover",function(b){return a.handleMouseOver(b)},false);this.addEventListener(this.element,"mouseout",function(b){return a.handleMouseOut(b)},false);this.focusElement=this.getFocusElement(this.element);if(this.focusElement){this.addEventListener(this.focusElement,"focus",function(b){return a.handleFocus(b)},false);this.addEventListener(this.focusElement,"blur",function(b){return a.handleBlur(b)},false);this.addEventListener(this.focusElement,"keydown",function(b){return a.handleKeyDown(b)},false)}this.addEventListener(this.element,"click",function(){return false},false);this.mouseUpCallback=function(b){return a.handleMouseUp(b)}};Spry.Widget.Button.config={disabled:false,mouseOutCancelsClick:true,onclick:null,downClass:"ButtonDown",hoverClass:"ButtonHover",disabledClass:"ButtonDisabled",focusedClass:"ButtonFocused"};Spry.Widget.Button.prototype=new Spry.Widget.Base;Spry.Widget.Button.prototype.constructor=Spry.Widget.Button;Spry.Widget.Button.prototype.handleMouseDown=function(a){if(this.disabled)return false;this.addClassName(this.element,this.downClass);this.addEventListener(document,"mouseup",this.mouseUpCallback,true);this.notifyObservers("onButtonDown",{event:a})};Spry.Widget.Button.prototype.handleMouseUp=function(a){if(this.disabled)return false;this.removeClassName(this.element,this.downClass);this.removeEventListener(document,"mouseup",this.mouseUpCallback,true);if(this.onclick)this.onclick(a);this.notifyObservers("onButtonUp");this.notifyObservers("onButtonClick")};Spry.Widget.Button.prototype.handleMouseOver=function(){if(this.disabled)return false;this.addClassName(this.element,this.hoverClass);this.notifyObservers("onButtonEnter")};Spry.Widget.Button.prototype.handleMouseOut=function(){if(this.disabled)return false;var a=this.element;this.removeClassName(a,this.hoverClass);if(this.mouseOutCancelsClick){this.removeClassName(a,this.downClass);this.removeEventListener(document,"mouseup",this.mouseUpCallback,true)}this.notifyObservers("onButtonExit")};Spry.Widget.Button.prototype.handleFocus=function(){if(this.disabled)return false;this.addClassName(this.element,this.focusedClass);this.notifyObservers("onButtonFocused")};Spry.Widget.Button.prototype.handleBlur=function(){if(this.disabled)return false;this.removeClassName(this.element,this.focusedClass);this.notifyObservers("onButtonBlur")};Spry.Widget.Button.prototype.handleKeyDown=function(a){if(this.disabled)return false;this.notifyObservers("onButtonKeyDown",{event:a,element:this.element})};Spry.Widget.Button.prototype.getFocusElement=function(d){var b=null,c=null,a=null;this.preorderTraversal(d,function(b){if(b.nodeType==1){var e=d.attributes.getNamedItem("tabindex");if(e){c=b;return true}if(!a&&b.nodeName.toLowerCase()=="a")a=b}return false});if(c)b=c;else if(a)b=a;return b};Spry.Widget.Button.prototype.preorderTraversal=function(c,d){var b=false;if(c){b=d(c);if(c.hasChildNodes()){var a=c.firstChild;while(!b&&a){b=this.preorderTraversal(a,d);try{a=a.nextSibling}catch(e){a=null}}}}return b};Spry.Widget.Button.prototype.disable=function(){this.disabled=true;this.removeClassName(this.element,this.downClass);this.removeClassName(this.element,this.hoverClass);this.addClassName(this.element,this.disabledClass);this.removeEventListener(document,"mouseup",this.mouseUpCallback,true)};Spry.Widget.Button.prototype.enable=function(){this.disabled=false;this.removeClassName(this.element,this.disabledClass)};Spry.Widget.Button.prototype.focus=function(){if(this.disabled)return false;if(this.focusElement)this.focusElement.focus()}})()
