//---------------------------------------------------------- // Copyright (C) Microsoft Corporation. All rights reserved. //---------------------------------------------------------- // MicrosoftAjax.js Function.__typeName="Function";Function.__class=true;Function.createCallback=function(b,a){return function(){var e=arguments.length;if(e>0){var d=[];for(var c=0;c=d)break;a=Function._validateParameter(g[b],f,h);if(a){a.popStackFrame();return a}}return null};Function._validateParameterCount=function(j,d,i){var a,c,b=d.length,e=j.length;if(eb){c=true;for(a=0;a0&&(d=0};Array.dequeue=function(a){return a.shift()};Array.forEach=function(b,e,d){for(var a=0,f=b.length;a=0)b.splice(a,1);return a>=0};Array.removeAt=function(a,b){a.splice(b,1)};Sys._indexOf=function(d,e,a){if(typeof e==="undefined")return -1;var c=d.length;if(c!==0){a=a-0;if(isNaN(a))a=0;else{if(isFinite(a))a=a-a%1;if(a<0)a=Math.max(0,c+a)}for(var b=a;b-1){Sys.Browser.agent=Sys.Browser.InternetExplorer;Sys.Browser.version=parseFloat(navigator.userAgent.match(/MSIE (\d+\.\d+)/)[1]);if(Sys.Browser.version>=8)if(document.documentMode>=7)Sys.Browser.documentMode=document.documentMode;Sys.Browser.hasDebuggerStatement=true}else if(navigator.userAgent.indexOf(" Firefox/")>-1){Sys.Browser.agent=Sys.Browser.Firefox;Sys.Browser.version=parseFloat(navigator.userAgent.match(/Firefox\/(\d+\.\d+)/)[1]);Sys.Browser.name="Firefox";Sys.Browser.hasDebuggerStatement=true}else if(navigator.userAgent.indexOf(" AppleWebKit/")>-1){Sys.Browser.agent=Sys.Browser.Safari;Sys.Browser.version=parseFloat(navigator.userAgent.match(/AppleWebKit\/(\d+(\.\d+)?)/)[1]);Sys.Browser.name="Safari"}else if(navigator.userAgent.indexOf("Opera/")>-1)Sys.Browser.agent=Sys.Browser.Opera;Sys.EventArgs=function(){};Sys.EventArgs.registerClass("Sys.EventArgs");Sys.EventArgs.Empty=new Sys.EventArgs;Sys.CancelEventArgs=function(){Sys.CancelEventArgs.initializeBase(this);this._cancel=false};Sys.CancelEventArgs.prototype={get_cancel:function(){return this._cancel},set_cancel:function(a){this._cancel=a}};Sys.CancelEventArgs.registerClass("Sys.CancelEventArgs",Sys.EventArgs);Type.registerNamespace("Sys.UI");Sys._Debug=function(){};Sys._Debug.prototype={_appendConsole:function(a){if(typeof Debug!=="undefined"&&Debug.writeln)Debug.writeln(a);if(window.console&&window.console.log)window.console.log(a);if(window.opera)window.opera.postError(a);if(window.debugService)window.debugService.trace(a)},_appendTrace:function(b){var a=document.getElementById("TraceConsole");if(a&&a.tagName.toUpperCase()==="TEXTAREA")a.value+=b+"\n"},assert:function(c,a,b){if(!c){a=b&&this.assert.caller?String.format(Sys.Res.assertFailedCaller,a,this.assert.caller):String.format(Sys.Res.assertFailed,a);if(confirm(String.format(Sys.Res.breakIntoDebugger,a)))this.fail(a)}},clearTrace:function(){var a=document.getElementById("TraceConsole");if(a&&a.tagName.toUpperCase()==="TEXTAREA")a.value=""},fail:function(message){this._appendConsole(message);if(Sys.Browser.hasDebuggerStatement)eval("debugger")},trace:function(a){this._appendConsole(a);this._appendTrace(a)},traceDump:function(a,b){var c=this._traceDump(a,b,true)},_traceDump:function(a,c,f,b,d){c=c?c:"traceDump";b=b?b:"";if(a===null){this.trace(b+c+": null");return}switch(typeof a){case "undefined":this.trace(b+c+": Undefined");break;case "number":case "string":case "boolean":this.trace(b+c+": "+a);break;default:if(Date.isInstanceOfType(a)||RegExp.isInstanceOfType(a)){this.trace(b+c+": "+a.toString());break}if(!d)d=[];else if(Array.contains(d,a)){this.trace(b+c+": ...");return}Array.add(d,a);if(a==window||a===document||window.HTMLElement&&a instanceof HTMLElement||typeof a.nodeName==="string"){var k=a.tagName?a.tagName:"DomElement";if(a.id)k+=" - "+a.id;this.trace(b+c+" {"+k+"}")}else{var i=Object.getTypeName(a);this.trace(b+c+(typeof i==="string"?" {"+i+"}":""));if(b===""||f){b+=" ";var e,j,l,g,h;if(Array.isInstanceOfType(a)){j=a.length;for(e=0;e=0;d--){var k=h[d].trim();b=a[k];if(typeof b!=="number")throw Error.argument("value",String.format(Sys.Res.enumInvalidValue,c.split(",")[d].trim(),this.__typeName));j|=b}return j}}function Sys$Enum$toString(c){if(typeof c==="undefined"||c===null)return this.__string;var d=this.prototype,a;if(!this.__flags||c===0){for(a in d)if(d[a]===c)return a}else{var b=this.__sortedValues;if(!b){b=[];for(a in d)b[b.length]={key:a,value:d[a]};b.sort(function(a,b){return a.value-b.value});this.__sortedValues=b}var e=[],g=c;for(a=b.length-1;a>=0;a--){var h=b[a],f=h.value;if(f===0)continue;if((f&c)===f){e[e.length]=h.key;g-=f;if(g===0)break}}if(e.length&&g===0)return e.reverse().join(", ")}return ""}Type.prototype.registerEnum=function(b,c){Sys.__upperCaseTypes[b.toUpperCase()]=this;for(var a in this.prototype)this[a]=this.prototype[a];this.__typeName=b;this.parse=Sys$Enum$parse;this.__string=this.toString();this.toString=Sys$Enum$toString;this.__flags=c;this.__enum=true};Type.isEnum=function(a){if(typeof a==="undefined"||a===null)return false;return !!a.__enum};Type.isFlags=function(a){if(typeof a==="undefined"||a===null)return false;return !!a.__flags};Sys.CollectionChange=function(e,a,c,b,d){this.action=e;if(a)if(!(a instanceof Array))a=[a];this.newItems=a||null;if(typeof c!=="number")c=-1;this.newStartingIndex=c;if(b)if(!(b instanceof Array))b=[b];this.oldItems=b||null;if(typeof d!=="number")d=-1;this.oldStartingIndex=d};Sys.CollectionChange.registerClass("Sys.CollectionChange");Sys.NotifyCollectionChangedAction=function(){throw Error.notImplemented()};Sys.NotifyCollectionChangedAction.prototype={add:0,remove:1,reset:2};Sys.NotifyCollectionChangedAction.registerEnum("Sys.NotifyCollectionChangedAction");Sys.NotifyCollectionChangedEventArgs=function(a){this._changes=a;Sys.NotifyCollectionChangedEventArgs.initializeBase(this)};Sys.NotifyCollectionChangedEventArgs.prototype={get_changes:function(){return this._changes||[]}};Sys.NotifyCollectionChangedEventArgs.registerClass("Sys.NotifyCollectionChangedEventArgs",Sys.EventArgs);Sys.Observer=function(){};Sys.Observer.registerClass("Sys.Observer");Sys.Observer.makeObservable=function(a){var c=a instanceof Array,b=Sys.Observer;if(a.setValue===b._observeMethods.setValue)return a;b._addMethods(a,b._observeMethods);if(c)b._addMethods(a,b._arrayMethods);return a};Sys.Observer._addMethods=function(c,b){for(var a in b)c[a]=b[a]};Sys.Observer._addEventHandler=function(c,a,b){Sys.Observer._getContext(c,true).events._addHandler(a,b)};Sys.Observer.addEventHandler=function(c,a,b){Sys.Observer._addEventHandler(c,a,b)};Sys.Observer._removeEventHandler=function(c,a,b){Sys.Observer._getContext(c,true).events._removeHandler(a,b)};Sys.Observer.removeEventHandler=function(c,a,b){Sys.Observer._removeEventHandler(c,a,b)};Sys.Observer.raiseEvent=function(b,e,d){var c=Sys.Observer._getContext(b);if(!c)return;var a=c.events.getHandler(e);if(a)a(b,d)};Sys.Observer.addPropertyChanged=function(b,a){Sys.Observer._addEventHandler(b,"propertyChanged",a)};Sys.Observer.removePropertyChanged=function(b,a){Sys.Observer._removeEventHandler(b,"propertyChanged",a)};Sys.Observer.beginUpdate=function(a){Sys.Observer._getContext(a,true).updating=true};Sys.Observer.endUpdate=function(b){var a=Sys.Observer._getContext(b);if(!a||!a.updating)return;a.updating=false;var d=a.dirty;a.dirty=false;if(d){if(b instanceof Array){var c=a.changes;a.changes=null;Sys.Observer.raiseCollectionChanged(b,c)}Sys.Observer.raisePropertyChanged(b,"")}};Sys.Observer.isUpdating=function(b){var a=Sys.Observer._getContext(b);return a?a.updating:false};Sys.Observer._setValue=function(a,j,g){var b,f,k=a,d=j.split(".");for(var i=0,m=d.length-1;i-1&&ac.Calendar.TwoDigitYearMax)a-=100}return a};Date._getEra=function(e,c){if(!c)return 0;var b,d=e.getTime();for(var a=0,f=c.length;a=b)return a}return 0};Date._getEraYear=function(d,b,e,c){var a=d.getFullYear();if(!c&&b.eras)a-=b.eras[e+3];return a};Date._getParseRegExp=function(b,e){if(!b._parseRegExp)b._parseRegExp={};else if(b._parseRegExp[e])return b._parseRegExp[e];var c=Date._expandFormat(b,e);c=c.replace(/([\^\$\.\*\+\?\|\[\]\(\)\{\}])/g,"\\\\$1");var a=new Sys.StringBuilder("^"),j=[],f=0,i=0,h=Date._getTokenRegExp(),d;while((d=h.exec(c))!==null){var l=c.slice(f,d.index);f=h.lastIndex;i+=Date._appendPreOrPostMatch(l,a);if(i%2===1){a.append(d[0]);continue}switch(d[0]){case "dddd":case "ddd":case "MMMM":case "MMM":case "gg":case "g":a.append("(\\D+)");break;case "tt":case "t":a.append("(\\D*)");break;case "yyyy":a.append("(\\d{4})");break;case "fff":a.append("(\\d{3})");break;case "ff":a.append("(\\d{2})");break;case "f":a.append("(\\d)");break;case "dd":case "d":case "MM":case "M":case "yy":case "y":case "HH":case "H":case "hh":case "h":case "mm":case "m":case "ss":case "s":a.append("(\\d\\d?)");break;case "zzz":a.append("([+-]?\\d\\d?:\\d{2})");break;case "zz":case "z":a.append("([+-]?\\d\\d?)");break;case "/":a.append("(\\"+b.DateSeparator+")")}Array.add(j,d[0])}Date._appendPreOrPostMatch(c.slice(f),a);a.append("$");var k=a.toString().replace(/\s+/g,"\\s+"),g={"regExp":k,"groups":j};b._parseRegExp[e]=g;return g};Date._getTokenRegExp=function(){return /\/|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z|gg|g/g};Date.parseLocale=function(a){return Date._parse(a,Sys.CultureInfo.CurrentCulture,arguments)};Date.parseInvariant=function(a){return Date._parse(a,Sys.CultureInfo.InvariantCulture,arguments)};Date._parse=function(h,d,i){var a,c,b,f,e,g=false;for(a=1,c=i.length;a31)return null;break;case "MMMM":c=k._getMonthIndex(a);if(c<0||c>11)return null;break;case "MMM":c=k._getAbbrMonthIndex(a);if(c<0||c>11)return null;break;case "M":case "MM":c=parseInt(a,10)-1;if(c<0||c>11)return null;break;case "y":case "yy":e=Date._expandYear(g,parseInt(a,10));if(e<0||e>9999)return null;break;case "yyyy":e=parseInt(a,10);if(e<0||e>9999)return null;break;case "h":case "hh":d=parseInt(a,10);if(d===12)d=0;if(d<0||d>11)return null;break;case "H":case "HH":d=parseInt(a,10);if(d<0||d>23)return null;break;case "m":case "mm":p=parseInt(a,10);if(p<0||p>59)return null;break;case "s":case "ss":q=parseInt(a,10);if(q<0||q>59)return null;break;case "tt":case "t":var z=a.toUpperCase();v=z===g.PMDesignator.toUpperCase();if(!v&&z!==g.AMDesignator.toUpperCase())return null;break;case "f":f=parseInt(a,10)*100;if(f<0||f>999)return null;break;case "ff":f=parseInt(a,10)*10;if(f<0||f>999)return null;break;case "fff":f=parseInt(a,10);if(f<0||f>999)return null;break;case "dddd":i=k._getDayIndex(a);if(i<0||i>6)return null;break;case "ddd":i=k._getAbbrDayIndex(a);if(i<0||i>6)return null;break;case "zzz":var u=a.split(/:/);if(u.length!==2)return null;h=parseInt(u[0],10);if(h<-12||h>13)return null;var m=parseInt(u[1],10);if(m<0||m>59)return null;l=h*60+(a.startsWith("-")?-m:m);break;case "z":case "zz":h=parseInt(a,10);if(h<-12||h>13)return null;l=h*60;break;case "g":case "gg":var o=a;if(!o||!g.eras)return null;o=o.toLowerCase().trim();for(var r=0,F=g.eras.length;r0)return this.toLocaleString();else return this.toString();var o=["n %","n%","%n"],n=["-n %","-n%","-%n"],p=["(n)","-n","- n","n-","n -"],m=["$n","n$","$ n","n $"],l=["($n)","-$n","$-n","$n-","(n$)","-n$","n-$","n$-","-n $","-$ n","n $-","$ n-","$ -n","n- $","($ n)","(n $)"];function g(a,c,d){for(var b=a.length;b1?parseInt(e[1]):0;e=b.split(".");b=e[0];a=e.length>1?e[1]:"";var q;if(c>0){a=g(a,c,false);b+=a.slice(0,c);a=a.substr(c)}else if(c<0){c=-c;b=g(b,c+1,true);a=b.slice(-c,b.length)+a;b=b.slice(0,-c)}if(i>0){if(a.length>i)a=a.slice(0,i);else a=g(a,i,false);a=p+a}else a="";var d=b.length-1,f="";while(d>=0){if(h===0||h>d)if(f.length>0)return b.slice(0,d+1)+n+f+a;else return b.slice(0,d+1)+a;if(f.length>0)f=b.slice(d-h+1,d+1)+n+f;else f=b.slice(d-h+1,d+1);d-=h;if(k1)b=parseInt(e.slice(1),10);var c;switch(e.charAt(0)){case "d":case "D":c="n";if(b!==-1)d=g(""+d,b,true);if(this<0)d=-d;break;case "c":case "C":if(this<0)c=l[a.CurrencyNegativePattern];else c=m[a.CurrencyPositivePattern];if(b===-1)b=a.CurrencyDecimalDigits;d=i(Math.abs(this),b,a.CurrencyGroupSizes,a.CurrencyGroupSeparator,a.CurrencyDecimalSeparator);break;case "n":case "N":if(this<0)c=p[a.NumberNegativePattern];else c="n";if(b===-1)b=a.NumberDecimalDigits;d=i(Math.abs(this),b,a.NumberGroupSizes,a.NumberGroupSeparator,a.NumberDecimalSeparator);break;case "p":case "P":if(this<0)c=n[a.PercentNegativePattern];else c=o[a.PercentPositivePattern];if(b===-1)b=a.PercentDecimalDigits;d=i(Math.abs(this)*100,b,a.PercentGroupSizes,a.PercentGroupSeparator,a.PercentDecimalSeparator);break;default:throw Error.format(Sys.Res.formatBadFormatSpecifier)}var k=/n|\$|-|%/g,f="";for(;true;){var q=k.lastIndex,h=k.exec(c);f+=c.slice(q,h?h.index:c.length);if(!h)break;switch(h[0]){case "n":f+=d;break;case "$":f+=a.CurrencySymbol;break;case "-":if(/[1-9]/.test(d))f+=a.NegativeSign;break;case "%":f+=a.PercentSymbol}}return f};Sys.CultureInfo=function(c,b,a){this.name=c;this.numberFormat=b;this.dateTimeFormat=a};Sys.CultureInfo.prototype={_getDateTimeFormats:function(){if(!this._dateTimeFormats){var a=this.dateTimeFormat;this._dateTimeFormats=[a.MonthDayPattern,a.YearMonthPattern,a.ShortDatePattern,a.ShortTimePattern,a.LongDatePattern,a.LongTimePattern,a.FullDateTimePattern,a.RFC1123Pattern,a.SortableDateTimePattern,a.UniversalSortableDateTimePattern]}return this._dateTimeFormats},_getIndex:function(c,d,e){var b=this._toUpper(c),a=Array.indexOf(d,b);if(a===-1)a=Array.indexOf(e,b);return a},_getMonthIndex:function(a){if(!this._upperMonths){this._upperMonths=this._toUpperArray(this.dateTimeFormat.MonthNames);this._upperMonthsGenitive=this._toUpperArray(this.dateTimeFormat.MonthGenitiveNames)}return this._getIndex(a,this._upperMonths,this._upperMonthsGenitive)},_getAbbrMonthIndex:function(a){if(!this._upperAbbrMonths){this._upperAbbrMonths=this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames);this._upperAbbrMonthsGenitive=this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthGenitiveNames)}return this._getIndex(a,this._upperAbbrMonths,this._upperAbbrMonthsGenitive)},_getDayIndex:function(a){if(!this._upperDays)this._upperDays=this._toUpperArray(this.dateTimeFormat.DayNames);return Array.indexOf(this._upperDays,this._toUpper(a))},_getAbbrDayIndex:function(a){if(!this._upperAbbrDays)this._upperAbbrDays=this._toUpperArray(this.dateTimeFormat.AbbreviatedDayNames);return Array.indexOf(this._upperAbbrDays,this._toUpper(a))},_toUpperArray:function(c){var b=[];for(var a=0,d=c.length;a0)a.append(",");Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(b[c],a,false,g)}a.append("]")}else{if(Date.isInstanceOfType(b)){a.append('"\\/Date(');a.append(b.getTime());a.append(')\\/"');break}var d=[],f=0;for(var e in b){if(e.startsWith("$"))continue;if(e===Sys.Serialization.JavaScriptSerializer._serverTypeFieldName&&f!==0){d[f++]=d[0];d[0]=e}else d[f++]=e}if(i)d.sort();a.append("{");var j=false;for(c=0;c=0;c--){var f=d[c];if(!g||f.autoRemove)$removeHandler(a,b,f.handler)}}a._events=null}};Sys.UI.DomEvent._disposeHandlers=function(){Sys.UI.DomEvent._clearHandlers(this,true);var b=this._chainDispose,a=typeof b;if(a!=="undefined"){this.dispose=b;this._chainDispose=null;if(a==="function")this.dispose()}};var $removeHandler=Sys.UI.DomEvent.removeHandler=function(b,a,c){Sys.UI.DomEvent._removeHandler(b,a,c)};Sys.UI.DomEvent._removeHandler=function(a,e,f){var d=null,c=a._events[e];for(var b=0,g=c.length;b=3){d+=parseInt(b.borderLeftWidth);e+=parseInt(b.borderTopWidth)}}b=Sys.UI.DomElement._getCurrentStyle(c);var h=b?b.position:null;if(!h||h!=="absolute")for(a=c.parentNode;a;a=a.parentNode){f=a.tagName?a.tagName.toUpperCase():null;if(f!=="BODY"&&f!=="HTML"&&(a.scrollLeft||a.scrollTop)){d-=a.scrollLeft||0;e-=a.scrollTop||0}b=Sys.UI.DomElement._getCurrentStyle(a);var i=b?b.position:null;if(i&&i==="absolute")break}return new Sys.UI.Point(d,e)};else Sys.UI.DomElement.getLocation=function(d){if(d.window&&d.window===d||d.nodeType===9)return new Sys.UI.Point(0,0);var e=0,f=0,a,i=null,g=null,b=null;for(a=d;a;i=a,(g=b,a=a.offsetParent)){var c=a.tagName?a.tagName.toUpperCase():null;b=Sys.UI.DomElement._getCurrentStyle(a);if((a.offsetLeft||a.offsetTop)&&!(c==="BODY"&&(!g||g.position!=="absolute"))){e+=a.offsetLeft;f+=a.offsetTop}if(i!==null&&b){if(c!=="TABLE"&&c!=="TD"&&c!=="HTML"){e+=parseInt(b.borderLeftWidth)||0;f+=parseInt(b.borderTopWidth)||0}if(c==="TABLE"&&(b.position==="relative"||b.position==="absolute")){e+=parseInt(b.marginLeft)||0;f+=parseInt(b.marginTop)||0}}}b=Sys.UI.DomElement._getCurrentStyle(d);var h=b?b.position:null;if(!h||h!=="absolute")for(a=d.parentNode;a;a=a.parentNode){c=a.tagName?a.tagName.toUpperCase():null;if(c!=="BODY"&&c!=="HTML"&&(a.scrollLeft||a.scrollTop)){e-=a.scrollLeft||0;f-=a.scrollTop||0;b=Sys.UI.DomElement._getCurrentStyle(a);if(b){e+=parseInt(b.borderLeftWidth)||0;f+=parseInt(b.borderTopWidth)||0}}}return new Sys.UI.Point(e,f)};Sys.UI.DomElement.isDomElement=function(a){return Sys._isDomElement(a)};Sys.UI.DomElement.removeCssClass=function(d,c){var a=" "+d.className+" ",b=a.indexOf(" "+c+" ");if(b>=0)d.className=(a.substr(0,b)+" "+a.substring(b+c.length+1,a.length)).trim()};Sys.UI.DomElement.resolveElement=function(b,c){var a=b;if(!a)return null;if(typeof a==="string")a=Sys.UI.DomElement.getElementById(a,c);return a};Sys.UI.DomElement.raiseBubbleEvent=function(c,d){var b=c;while(b){var a=b.control;if(a&&a.onBubbleEvent&&a.raiseBubbleEvent){Sys.UI.DomElement._raiseBubbleEventFromControl(a,c,d);return}b=b.parentNode}};Sys.UI.DomElement._raiseBubbleEventFromControl=function(a,b,c){if(!a.onBubbleEvent(b,c))a._raiseBubbleEvent(b,c)};Sys.UI.DomElement.setLocation=function(b,c,d){var a=b.style;a.position="absolute";a.left=c+"px";a.top=d+"px"};Sys.UI.DomElement.toggleCssClass=function(b,a){if(Sys.UI.DomElement.containsCssClass(b,a))Sys.UI.DomElement.removeCssClass(b,a);else Sys.UI.DomElement.addCssClass(b,a)};Sys.UI.DomElement.getVisibilityMode=function(a){return a._visibilityMode===Sys.UI.VisibilityMode.hide?Sys.UI.VisibilityMode.hide:Sys.UI.VisibilityMode.collapse};Sys.UI.DomElement.setVisibilityMode=function(a,b){Sys.UI.DomElement._ensureOldDisplayMode(a);if(a._visibilityMode!==b){a._visibilityMode=b;if(Sys.UI.DomElement.getVisible(a)===false)if(a._visibilityMode===Sys.UI.VisibilityMode.hide)a.style.display=a._oldDisplayMode;else a.style.display="none";a._visibilityMode=b}};Sys.UI.DomElement.getVisible=function(b){var a=b.currentStyle||Sys.UI.DomElement._getCurrentStyle(b);if(!a)return true;return a.visibility!=="hidden"&&a.display!=="none"};Sys.UI.DomElement.setVisible=function(a,b){if(b!==Sys.UI.DomElement.getVisible(a)){Sys.UI.DomElement._ensureOldDisplayMode(a);a.style.visibility=b?"visible":"hidden";if(b||a._visibilityMode===Sys.UI.VisibilityMode.hide)a.style.display=a._oldDisplayMode;else a.style.display="none"}};Sys.UI.DomElement._ensureOldDisplayMode=function(a){if(!a._oldDisplayMode){var b=a.currentStyle||Sys.UI.DomElement._getCurrentStyle(a);a._oldDisplayMode=b?b.display:null;if(!a._oldDisplayMode||a._oldDisplayMode==="none")switch(a.tagName.toUpperCase()){case "DIV":case "P":case "ADDRESS":case "BLOCKQUOTE":case "BODY":case "COL":case "COLGROUP":case "DD":case "DL":case "DT":case "FIELDSET":case "FORM":case "H1":case "H2":case "H3":case "H4":case "H5":case "H6":case "HR":case "IFRAME":case "LEGEND":case "OL":case "PRE":case "TABLE":case "TD":case "TH":case "TR":case "UL":a._oldDisplayMode="block";break;case "LI":a._oldDisplayMode="list-item";break;default:a._oldDisplayMode="inline"}}};Sys.UI.DomElement._getWindow=function(a){var b=a.ownerDocument||a.document||a;return b.defaultView||b.parentWindow};Sys.UI.DomElement._getCurrentStyle=function(a){if(a.nodeType===3)return null;var c=Sys.UI.DomElement._getWindow(a);if(a.documentElement)a=a.documentElement;var b=c&&a!==c&&c.getComputedStyle?c.getComputedStyle(a,null):a.currentStyle||a.style;if(!b&&Sys.Browser.agent===Sys.Browser.Safari&&a.style){var g=a.style.display,f=a.style.position;a.style.position="absolute";a.style.display="block";var e=c.getComputedStyle(a,null);a.style.display=g;a.style.position=f;b={};for(var d in e)b[d]=e[d];b.display="none"}return b};Sys.IContainer=function(){};Sys.IContainer.prototype={};Sys.IContainer.registerInterface("Sys.IContainer");Sys.ApplicationLoadEventArgs=function(b,a){Sys.ApplicationLoadEventArgs.initializeBase(this);this._components=b;this._isPartialLoad=a};Sys.ApplicationLoadEventArgs.prototype={get_components:function(){return this._components},get_isPartialLoad:function(){return this._isPartialLoad}};Sys.ApplicationLoadEventArgs.registerClass("Sys.ApplicationLoadEventArgs",Sys.EventArgs);Sys._Application=function(){Sys._Application.initializeBase(this);this._disposableObjects=[];this._components={};this._createdComponents=[];this._secondPassComponents=[];this._unloadHandlerDelegate=Function.createDelegate(this,this._unloadHandler);Sys.UI.DomEvent.addHandler(window,"unload",this._unloadHandlerDelegate);this._domReady()};Sys._Application.prototype={_creatingComponents:false,_disposing:false,_deleteCount:0,get_isCreatingComponents:function(){return this._creatingComponents},get_isDisposing:function(){return this._disposing},add_init:function(a){if(this._initialized)a(this,Sys.EventArgs.Empty);else this.get_events().addHandler("init",a)},remove_init:function(a){this.get_events().removeHandler("init",a)},add_load:function(a){this.get_events().addHandler("load",a)},remove_load:function(a){this.get_events().removeHandler("load",a)},add_unload:function(a){this.get_events().addHandler("unload",a)},remove_unload:function(a){this.get_events().removeHandler("unload",a)},addComponent:function(a){this._components[a.get_id()]=a},beginCreateComponents:function(){this._creatingComponents=true},dispose:function(){if(!this._disposing){this._disposing=true;if(this._timerCookie){window.clearTimeout(this._timerCookie);delete this._timerCookie}if(this._endRequestHandler){Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(this._endRequestHandler);delete this._endRequestHandler}if(this._beginRequestHandler){Sys.WebForms.PageRequestManager.getInstance().remove_beginRequest(this._beginRequestHandler);delete this._beginRequestHandler}if(window.pageUnload)window.pageUnload(this,Sys.EventArgs.Empty);var c=this.get_events().getHandler("unload");if(c)c(this,Sys.EventArgs.Empty);var b=Array.clone(this._disposableObjects);for(var a=0,f=b.length;a=0;b--){var d=i[b],f=d.dispose;if(f&&typeof f==="function")d.dispose();else{var e=d.control;if(e&&typeof e.dispose==="function")e.dispose()}var a=d._behaviors;if(a)this._disposeComponents(a);a=d._components;if(a){this._disposeComponents(a);d._components=null}}if(!j){var f=c.dispose;if(f&&typeof f==="function")c.dispose();else{var e=c.control;if(e&&typeof e.dispose==="function")e.dispose()}var a=c._behaviors;if(a)this._disposeComponents(a);a=c._components;if(a){this._disposeComponents(a);c._components=null}}}},endCreateComponents:function(){var b=this._secondPassComponents;for(var a=0,d=b.length;a1000){var c=[];for(var d=0,f=b.length;d=0;b--){var c=a[b];if(typeof c.dispose==="function")c.dispose()}},_domReady:function(){var a,g,f=this;function b(){f.initialize()}var c=function(){Sys.UI.DomEvent.removeHandler(window,"load",c);b()};Sys.UI.DomEvent.addHandler(window,"load",c);if(document.addEventListener)try{document.addEventListener("DOMContentLoaded",a=function(){document.removeEventListener("DOMContentLoaded",a,false);b()},false)}catch(h){}else if(document.attachEvent)if(window==window.top&&document.documentElement.doScroll){var e,d=document.createElement("div");a=function(){try{d.doScroll("left")}catch(c){e=window.setTimeout(a,0);return}d=null;b()};a()}else document.attachEvent("onreadystatechange",a=function(){if(document.readyState==="complete"){document.detachEvent("onreadystatechange",a);b()}})},_raiseInit:function(){var a=this.get_events().getHandler("init");if(a){this.beginCreateComponents();a(this,Sys.EventArgs.Empty);this.endCreateComponents()}},_unloadHandler:function(){this.dispose()}};Sys._Application.registerClass("Sys._Application",Sys.Component,Sys.IContainer);Sys.Application=new Sys._Application;var $find=Sys.Application.findComponent;Sys.UI.Behavior=function(b){Sys.UI.Behavior.initializeBase(this);this._element=b;var a=b._behaviors;if(!a)b._behaviors=[this];else a[a.length]=this};Sys.UI.Behavior.prototype={_name:null,get_element:function(){return this._element},get_id:function(){var a=Sys.UI.Behavior.callBaseMethod(this,"get_id");if(a)return a;if(!this._element||!this._element.id)return "";return this._element.id+"$"+this.get_name()},get_name:function(){if(this._name)return this._name;var a=Object.getTypeName(this),b=a.lastIndexOf(".");if(b!==-1)a=a.substr(b+1);if(!this.get_isInitialized())this._name=a;return a},set_name:function(a){this._name=a},initialize:function(){Sys.UI.Behavior.callBaseMethod(this,"initialize");var a=this.get_name();if(a)this._element[a]=this},dispose:function(){Sys.UI.Behavior.callBaseMethod(this,"dispose");var a=this._element;if(a){var c=this.get_name();if(c)a[c]=null;var b=a._behaviors;Array.remove(b,this);if(b.length===0)a._behaviors=null;delete this._element}}};Sys.UI.Behavior.registerClass("Sys.UI.Behavior",Sys.Component);Sys.UI.Behavior.getBehaviorByName=function(b,c){var a=b[c];return a&&Sys.UI.Behavior.isInstanceOfType(a)?a:null};Sys.UI.Behavior.getBehaviors=function(a){if(!a._behaviors)return [];return Array.clone(a._behaviors)};Sys.UI.Behavior.getBehaviorsByType=function(d,e){var a=d._behaviors,c=[];if(a)for(var b=0,f=a.length;b0&&a.charAt(0)==="#")a=a.substring(1);return a};Sys._Application.prototype.get_enableHistory=function(){return this._enableHistory};Sys._Application.prototype.set_enableHistory=function(a){this._enableHistory=a};Sys._Application.prototype.add_navigate=function(a){this.get_events().addHandler("navigate",a)};Sys._Application.prototype.remove_navigate=function(a){this.get_events().removeHandler("navigate",a)};Sys._Application.prototype.addHistoryPoint=function(c,f){this._ensureHistory();var b=this._state;for(var a in c){var d=c[a];if(d===null){if(typeof b[a]!=="undefined")delete b[a]}else b[a]=d}var e=this._serializeState(b);this._historyPointIsNew=true;this._setState(e,f);this._raiseNavigate()};Sys._Application.prototype.setServerId=function(a,b){this._clientId=a;this._uniqueId=b};Sys._Application.prototype.setServerState=function(a){this._ensureHistory();this._state.__s=a;this._updateHiddenField(a)};Sys._Application.prototype._deserializeState=function(a){var e={};a=a||"";var b=a.indexOf("&&");if(b!==-1&&b+27){var e=document.title;document.title=c;this._setState(a);document.title=e}else this._setState(a);this._raiseNavigate()}else{this._setState(a);this._raiseNavigate()}}};Sys._Application.prototype._raiseNavigate=function(){var d=this._historyPointIsNew,c=this.get_events().getHandler("navigate"),b={};for(var a in this._state)if(a!=="__s")b[a]=this._state[a];var e=new Sys.HistoryEventArgs(b);if(c)c(this,e);if(!d){var f;try{if(Sys.Browser.agent===Sys.Browser.Firefox&&window.location.hash&&(!window.frameElement||window.top.location.hash))Sys.Browser.version<3.5?window.history.go(0):(location.hash=this.get_stateString())}catch(g){}}};Sys._Application.prototype._serializeState=function(d){var b=[];for(var a in d){var e=d[a];if(a==="__s")var c=e;else b[b.length]=a+"="+encodeURIComponent(e)}return b.join("&")+(c?"&&"+c:"")};Sys._Application.prototype._setState=function(a,b){if(this._enableHistory){a=a||"";if(a!==this._currentEntry){if(window.theForm){var d=window.theForm.action,e=d.indexOf("#");window.theForm.action=(e!==-1?d.substring(0,e):d)+"#"+a}if(this._historyFrame&&this._historyPointIsNew){var f=document.createElement("div");f.appendChild(document.createTextNode(b||document.title));var g=f.innerHTML;this._ignoreIFrame=true;var c=this._historyFrame.contentWindow.document;c.open("javascript:''");c.write(""+g+"parent.Sys.Application._onIFrameLoad('+Sys.Serialization.JavaScriptSerializer.serialize(a)+");");c.close()}this._ignoreTimer=false;this._currentEntry=a;if(this._historyFrame||this._historyPointIsNew){var h=this.get_stateString();if(a!==h){window.location.hash=a;this._currentEntry=this.get_stateString();if(typeof b!=="undefined"&&b!==null)document.title=b}}this._historyPointIsNew=false}}};Sys._Application.prototype._updateHiddenField=function(b){if(this._clientId){var a=document.getElementById(this._clientId);if(a)a.value=b}};if(!window.XMLHttpRequest)window.XMLHttpRequest=function(){var b=["Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP"];for(var a=0,c=b.length;a0)this._timer=window.setTimeout(Function.createDelegate(this,this._onTimeout),d);this._xmlHttpRequest.send(c);this._started=true},getResponseHeader:function(b){var a;try{a=this._xmlHttpRequest.getResponseHeader(b)}catch(c){}if(!a)a="";return a},getAllResponseHeaders:function(){return this._xmlHttpRequest.getAllResponseHeaders()},get_responseData:function(){return this._xmlHttpRequest.responseText},get_statusCode:function(){var a=0;try{a=this._xmlHttpRequest.status}catch(b){}return a},get_statusText:function(){return this._xmlHttpRequest.statusText},get_xml:function(){var a=this._xmlHttpRequest.responseXML;if(!a||!a.documentElement){a=Sys.Net.XMLDOM(this._xmlHttpRequest.responseText);if(!a||!a.documentElement)return null}else if(navigator.userAgent.indexOf("MSIE")!==-1&&typeof a.setProperty!="undefined")a.setProperty("SelectionLanguage","XPath");if(a.documentElement.namespaceURI==="http://www.mozilla.org/newlayout/xml/parsererror.xml"&&a.documentElement.tagName==="parsererror")return null;if(a.documentElement.firstChild&&a.documentElement.firstChild.tagName==="parsererror")return null;return a},abort:function(){if(this._aborted||this._responseAvailable||this._timedOut)return;this._aborted=true;this._clearTimer();if(this._xmlHttpRequest&&!this._responseAvailable){this._xmlHttpRequest.onreadystatechange=Function.emptyMethod;this._xmlHttpRequest.abort();this._xmlHttpRequest=null;this._webRequest.completed(Sys.EventArgs.Empty)}}};Sys.Net.XMLHttpExecutor.registerClass("Sys.Net.XMLHttpExecutor",Sys.Net.WebRequestExecutor);Sys.Net._WebRequestManager=function(){this._defaultTimeout=0;this._defaultExecutorType="Sys.Net.XMLHttpExecutor"};Sys.Net._WebRequestManager.prototype={add_invokingRequest:function(a){this._get_eventHandlerList().addHandler("invokingRequest",a)},remove_invokingRequest:function(a){this._get_eventHandlerList().removeHandler("invokingRequest",a)},add_completedRequest:function(a){this._get_eventHandlerList().addHandler("completedRequest",a)},remove_completedRequest:function(a){this._get_eventHandlerList().removeHandler("completedRequest",a)},_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_defaultTimeout:function(){return this._defaultTimeout},set_defaultTimeout:function(a){this._defaultTimeout=a},get_defaultExecutorType:function(){return this._defaultExecutorType},set_defaultExecutorType:function(a){this._defaultExecutorType=a},executeRequest:function(webRequest){var executor=webRequest.get_executor();if(!executor){var failed=false;try{var executorType=eval(this._defaultExecutorType);executor=new executorType}catch(a){failed=true}webRequest.set_executor(executor)}if(executor.get_aborted())return;var evArgs=new Sys.Net.NetworkRequestEventArgs(webRequest),handler=this._get_eventHandlerList().getHandler("invokingRequest");if(handler)handler(this,evArgs);if(!evArgs.get_cancel())executor.executeRequest()}};Sys.Net._WebRequestManager.registerClass("Sys.Net._WebRequestManager");Sys.Net.WebRequestManager=new Sys.Net._WebRequestManager;Sys.Net.NetworkRequestEventArgs=function(a){Sys.Net.NetworkRequestEventArgs.initializeBase(this);this._webRequest=a};Sys.Net.NetworkRequestEventArgs.prototype={get_webRequest:function(){return this._webRequest}};Sys.Net.NetworkRequestEventArgs.registerClass("Sys.Net.NetworkRequestEventArgs",Sys.CancelEventArgs);Sys.Net.WebRequest=function(){this._url="";this._headers={};this._body=null;this._userContext=null;this._httpVerb=null;this._executor=null;this._invokeCalled=false;this._timeout=0};Sys.Net.WebRequest.prototype={add_completed:function(a){this._get_eventHandlerList().addHandler("completed",a)},remove_completed:function(a){this._get_eventHandlerList().removeHandler("completed",a)},completed:function(b){var a=Sys.Net.WebRequestManager._get_eventHandlerList().getHandler("completedRequest");if(a)a(this._executor,b);a=this._get_eventHandlerList().getHandler("completed");if(a)a(this._executor,b)},_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_url:function(){return this._url},set_url:function(a){this._url=a},get_headers:function(){return this._headers},get_httpVerb:function(){if(this._httpVerb===null){if(this._body===null)return "GET";return "POST"}return this._httpVerb},set_httpVerb:function(a){this._httpVerb=a},get_body:function(){return this._body},set_body:function(a){this._body=a},get_userContext:function(){return this._userContext},set_userContext:function(a){this._userContext=a},get_executor:function(){return this._executor},set_executor:function(a){this._executor=a;this._executor._set_webRequest(this)},get_timeout:function(){if(this._timeout===0)return Sys.Net.WebRequestManager.get_defaultTimeout();return this._timeout},set_timeout:function(a){this._timeout=a},getResolvedUrl:function(){return Sys.Net.WebRequest._resolveUrl(this._url)},invoke:function(){Sys.Net.WebRequestManager.executeRequest(this);this._invokeCalled=true}};Sys.Net.WebRequest._resolveUrl=function(b,a){if(b&&b.indexOf("://")!==-1)return b;if(!a||a.length===0){var d=document.getElementsByTagName("base")[0];if(d&&d.href&&d.href.length>0)a=d.href;else a=document.URL}var c=a.indexOf("?");if(c!==-1)a=a.substr(0,c);c=a.indexOf("#");if(c!==-1)a=a.substr(0,c);a=a.substr(0,a.lastIndexOf("/")+1);if(!b||b.length===0)return a;if(b.charAt(0)==="/"){var e=a.indexOf("://"),g=a.indexOf("/",e+3);return a.substr(0,g)+b}else{var f=a.lastIndexOf("/");return a.substr(0,f+1)+b}};Sys.Net.WebRequest._createQueryString=function(c,b,f){b=b||encodeURIComponent;var h=0,e,g,d,a=new Sys.StringBuilder;if(c)for(d in c){e=c[d];if(typeof e==="function")continue;g=Sys.Serialization.JavaScriptSerializer.serialize(e);if(h++)a.append("&");a.append(d);a.append("=");a.append(b(g))}if(f){if(h)a.append("&");a.append(f)}return a.toString()};Sys.Net.WebRequest._createUrl=function(a,b,c){if(!b&&!c)return a;var d=Sys.Net.WebRequest._createQueryString(b,null,c);return d.length?a+(a&&a.indexOf("?")>=0?"&":"?")+d:a};Sys.Net.WebRequest.registerClass("Sys.Net.WebRequest");Sys._ScriptLoaderTask=function(b,a){this._scriptElement=b;this._completedCallback=a};Sys._ScriptLoaderTask.prototype={get_scriptElement:function(){return this._scriptElement},dispose:function(){if(this._disposed)return;this._disposed=true;this._removeScriptElementHandlers();Sys._ScriptLoaderTask._clearScript(this._scriptElement);this._scriptElement=null},execute:function(){if(this._ensureReadyStateLoaded())this._executeInternal()},_executeInternal:function(){this._addScriptElementHandlers();document.getElementsByTagName("head")[0].appendChild(this._scriptElement)},_ensureReadyStateLoaded:function(){if(this._useReadyState()&&this._scriptElement.readyState!=="loaded"&&this._scriptElement.readyState!=="complete"){this._scriptDownloadDelegate=Function.createDelegate(this,this._executeInternal);$addHandler(this._scriptElement,"readystatechange",this._scriptDownloadDelegate);return false}return true},_addScriptElementHandlers:function(){if(this._scriptDownloadDelegate){$removeHandler(this._scriptElement,"readystatechange",this._scriptDownloadDelegate);this._scriptDownloadDelegate=null}this._scriptLoadDelegate=Function.createDelegate(this,this._scriptLoadHandler);if(this._useReadyState())$addHandler(this._scriptElement,"readystatechange",this._scriptLoadDelegate);else $addHandler(this._scriptElement,"load",this._scriptLoadDelegate);if(this._scriptElement.addEventListener){this._scriptErrorDelegate=Function.createDelegate(this,this._scriptErrorHandler);this._scriptElement.addEventListener("error",this._scriptErrorDelegate,false)}},_removeScriptElementHandlers:function(){if(this._scriptLoadDelegate){var a=this.get_scriptElement();if(this._scriptDownloadDelegate){$removeHandler(this._scriptElement,"readystatechange",this._scriptDownloadDelegate);this._scriptDownloadDelegate=null}if(this._useReadyState()&&this._scriptLoadDelegate)$removeHandler(a,"readystatechange",this._scriptLoadDelegate);else $removeHandler(a,"load",this._scriptLoadDelegate);if(this._scriptErrorDelegate){this._scriptElement.removeEventListener("error",this._scriptErrorDelegate,false);this._scriptErrorDelegate=null}this._scriptLoadDelegate=null}},_scriptErrorHandler:function(){if(this._disposed)return;this._completedCallback(this.get_scriptElement(),false)},_scriptLoadHandler:function(){if(this._disposed)return;var a=this.get_scriptElement();if(this._useReadyState()&&a.readyState!=="complete")return;this._completedCallback(a,true)},_useReadyState:function(){return Sys.Browser.agent===Sys.Browser.InternetExplorer&&(Sys.Browser.version<9||(document.documentMode||0)<9)}};Sys._ScriptLoaderTask.registerClass("Sys._ScriptLoaderTask",null,Sys.IDisposable);Sys._ScriptLoaderTask._clearScript=function(a){if(!Sys.Debug.isDebug&&a.parentNode)a.parentNode.removeChild(a)};Type.registerNamespace("Sys.Net");Sys.Net.WebServiceProxy=function(){};Sys.Net.WebServiceProxy.prototype={get_timeout:function(){return this._timeout||0},set_timeout:function(a){if(a<0)throw Error.argumentOutOfRange("value",a,Sys.Res.invalidTimeout);this._timeout=a},get_defaultUserContext:function(){return typeof this._userContext==="undefined"?null:this._userContext},set_defaultUserContext:function(a){this._userContext=a},get_defaultSucceededCallback:function(){return this._succeeded||null},set_defaultSucceededCallback:function(a){this._succeeded=a},get_defaultFailedCallback:function(){return this._failed||null},set_defaultFailedCallback:function(a){this._failed=a},get_enableJsonp:function(){return !!this._jsonp},set_enableJsonp:function(a){this._jsonp=a},get_path:function(){return this._path||null},set_path:function(a){this._path=a},get_jsonpCallbackParameter:function(){return this._callbackParameter||"callback"},set_jsonpCallbackParameter:function(a){this._callbackParameter=a},_invoke:function(d,e,g,f,c,b,a){c=c||this.get_defaultSucceededCallback();b=b||this.get_defaultFailedCallback();if(a===null||typeof a==="undefined")a=this.get_defaultUserContext();return Sys.Net.WebServiceProxy.invoke(d,e,g,f,c,b,a,this.get_timeout(),this.get_enableJsonp(),this.get_jsonpCallbackParameter())}};Sys.Net.WebServiceProxy.registerClass("Sys.Net.WebServiceProxy");Sys.Net.WebServiceProxy.invoke=function(q,a,m,l,j,b,g,e,w,p){var i=w!==false?Sys.Net.WebServiceProxy._xdomain.exec(q):null,c,n=i&&i.length===3&&(i[1]!==location.protocol||i[2]!==location.host);m=n||m;if(n){p=p||"callback";c="_jsonp"+Sys._jsonp++}if(!l)l={};var r=l;if(!m||!r)r={};var s,h,f=null,k,o=null,u=Sys.Net.WebRequest._createUrl(a?q+"/"+encodeURIComponent(a):q,r,n?p+"=Sys."+c:null);if(n){s=document.createElement("script");s.src=u;k=new Sys._ScriptLoaderTask(s,function(d,b){if(!b||c)t({Message:String.format(Sys.Res.webServiceFailedNoMsg,a)},-1)});function v(){if(f===null)return;f=null;h=new Sys.Net.WebServiceError(true,String.format(Sys.Res.webServiceTimedOut,a));k.dispose();delete Sys[c];if(b)b(h,g,a)}function t(d,e){if(f!==null){window.clearTimeout(f);f=null}k.dispose();delete Sys[c];c=null;if(typeof e!=="undefined"&&e!==200){if(b){h=new Sys.Net.WebServiceError(false,d.Message||String.format(Sys.Res.webServiceFailedNoMsg,a),d.StackTrace||null,d.ExceptionType||null,d);h._statusCode=e;b(h,g,a)}}else if(j)j(d,g,a)}Sys[c]=t;e=e||Sys.Net.WebRequestManager.get_defaultTimeout();if(e>0)f=window.setTimeout(v,e);k.execute();return null}var d=new Sys.Net.WebRequest;d.set_url(u);d.get_headers()["Content-Type"]="application/json; charset=utf-8";if(!m){o=Sys.Serialization.JavaScriptSerializer.serialize(l);if(o==="{}")o=""}d.set_body(o);d.add_completed(x);if(e&&e>0)d.set_timeout(e);d.invoke();function x(d){if(d.get_responseAvailable()){var f=d.get_statusCode(),c=null;try{var e=d.getResponseHeader("Content-Type");if(e.startsWith("application/json"))c=d.get_object();else if(e.startsWith("text/xml"))c=d.get_xml();else c=d.get_responseData()}catch(m){}var k=d.getResponseHeader("jsonerror"),h=k==="true";if(h){if(c)c=new Sys.Net.WebServiceError(false,c.Message,c.StackTrace,c.ExceptionType,c)}else if(e.startsWith("application/json"))c=!c||typeof c.d==="undefined"?c:c.d;if(f<200||f>=300||h){if(b){if(!c||!h)c=new Sys.Net.WebServiceError(false,String.format(Sys.Res.webServiceFailedNoMsg,a));c._statusCode=f;b(c,g,a)}}else if(j)j(c,g,a)}else{var i;if(d.get_timedOut())i=String.format(Sys.Res.webServiceTimedOut,a);else i=String.format(Sys.Res.webServiceFailedNoMsg,a);if(b)b(new Sys.Net.WebServiceError(d.get_timedOut(),i,"",""),g,a)}}return d};Sys.Net.WebServiceProxy._generateTypedConstructor=function(a){return function(b){if(b)for(var c in b)this[c]=b[c];this.__type=a}};Sys._jsonp=0;Sys.Net.WebServiceProxy._xdomain=/^\s*([a-zA-Z0-9\+\-\.]+\:)\/\/([^?#\/]+)/;Sys.Net.WebServiceError=function(d,e,c,a,b){this._timedOut=d;this._message=e;this._stackTrace=c;this._exceptionType=a;this._errorObject=b;this._statusCode=-1};Sys.Net.WebServiceError.prototype={get_timedOut:function(){return this._timedOut},get_statusCode:function(){return this._statusCode},get_message:function(){return this._message},get_stackTrace:function(){return this._stackTrace||""},get_exceptionType:function(){return this._exceptionType||""},get_errorObject:function(){return this._errorObject||null}};Sys.Net.WebServiceError.registerClass("Sys.Net.WebServiceError"); Type.registerNamespace('Sys');Sys.Res={"argumentInteger":"Value must be an integer.","invokeCalledTwice":"Cannot call invoke more than once.","webServiceFailed":"The server method \u0027{0}\u0027 failed with the following error: {1}","argumentType":"Object cannot be converted to the required type.","argumentNull":"Value cannot be null.","scriptAlreadyLoaded":"The script \u0027{0}\u0027 has been referenced multiple times. If referencing Microsoft AJAX scripts explicitly, set the MicrosoftAjaxMode property of the ScriptManager to Explicit.","scriptDependencyNotFound":"The script \u0027{0}\u0027 failed to load because it is dependent on script \u0027{1}\u0027.","formatBadFormatSpecifier":"Format specifier was invalid.","requiredScriptReferenceNotIncluded":"\u0027{0}\u0027 requires that you have included a script reference to \u0027{1}\u0027.","webServiceFailedNoMsg":"The server method \u0027{0}\u0027 failed.","argumentDomElement":"Value must be a DOM element.","invalidExecutorType":"Could not create a valid Sys.Net.WebRequestExecutor from: {0}.","cannotCallBeforeResponse":"Cannot call {0} when responseAvailable is false.","actualValue":"Actual value was {0}.","enumInvalidValue":"\u0027{0}\u0027 is not a valid value for enum {1}.","scriptLoadFailed":"The script \u0027{0}\u0027 could not be loaded.","parameterCount":"Parameter count mismatch.","cannotDeserializeEmptyString":"Cannot deserialize empty string.","formatInvalidString":"Input string was not in a correct format.","invalidTimeout":"Value must be greater than or equal to zero.","cannotAbortBeforeStart":"Cannot abort when executor has not started.","argument":"Value does not fall within the expected range.","cannotDeserializeInvalidJson":"Cannot deserialize. The data does not correspond to valid JSON.","invalidHttpVerb":"httpVerb cannot be set to an empty or null string.","nullWebRequest":"Cannot call executeRequest with a null webRequest.","eventHandlerInvalid":"Handler was not added through the Sys.UI.DomEvent.addHandler method.","cannotSerializeNonFiniteNumbers":"Cannot serialize non finite numbers.","argumentUndefined":"Value cannot be undefined.","webServiceInvalidReturnType":"The server method \u0027{0}\u0027 returned an invalid type. Expected type: {1}","servicePathNotSet":"The path to the web service has not been set.","argumentTypeWithTypes":"Object of type \u0027{0}\u0027 cannot be converted to type \u0027{1}\u0027.","cannotCallOnceStarted":"Cannot call {0} once started.","badBaseUrl1":"Base URL does not contain ://.","badBaseUrl2":"Base URL does not contain another /.","badBaseUrl3":"Cannot find last / in base URL.","setExecutorAfterActive":"Cannot set executor after it has become active.","paramName":"Parameter name: {0}","nullReferenceInPath":"Null reference while evaluating data path: \u0027{0}\u0027.","cannotCallOutsideHandler":"Cannot call {0} outside of a completed event handler.","cannotSerializeObjectWithCycle":"Cannot serialize object with cyclic reference within child properties.","format":"One of the identified items was in an invalid format.","assertFailedCaller":"Assertion Failed: {0}\r\nat {1}","argumentOutOfRange":"Specified argument was out of the range of valid values.","webServiceTimedOut":"The server method \u0027{0}\u0027 timed out.","notImplemented":"The method or operation is not implemented.","assertFailed":"Assertion Failed: {0}","invalidOperation":"Operation is not valid due to the current state of the object.","breakIntoDebugger":"{0}\r\n\r\nBreak into debugger?"}; //---------------------------------------------------------- // Copyright (C) Microsoft Corporation. All rights reserved. //---------------------------------------------------------- // MicrosoftAjaxWebForms.js Type._registerScript("MicrosoftAjaxWebForms.js",["MicrosoftAjaxCore.js","MicrosoftAjaxSerialization.js","MicrosoftAjaxNetwork.js","MicrosoftAjaxComponentModel.js"]);Type.registerNamespace("Sys.WebForms");Sys.WebForms.BeginRequestEventArgs=function(c,b,a){Sys.WebForms.BeginRequestEventArgs.initializeBase(this);this._request=c;this._postBackElement=b;this._updatePanelsToUpdate=a};Sys.WebForms.BeginRequestEventArgs.prototype={get_postBackElement:function(){return this._postBackElement},get_request:function(){return this._request},get_updatePanelsToUpdate:function(){return this._updatePanelsToUpdate?Array.clone(this._updatePanelsToUpdate):[]}};Sys.WebForms.BeginRequestEventArgs.registerClass("Sys.WebForms.BeginRequestEventArgs",Sys.EventArgs);Sys.WebForms.EndRequestEventArgs=function(c,a,b){Sys.WebForms.EndRequestEventArgs.initializeBase(this);this._errorHandled=false;this._error=c;this._dataItems=a||{};this._response=b};Sys.WebForms.EndRequestEventArgs.prototype={get_dataItems:function(){return this._dataItems},get_error:function(){return this._error},get_errorHandled:function(){return this._errorHandled},set_errorHandled:function(a){this._errorHandled=a},get_response:function(){return this._response}};Sys.WebForms.EndRequestEventArgs.registerClass("Sys.WebForms.EndRequestEventArgs",Sys.EventArgs);Sys.WebForms.InitializeRequestEventArgs=function(c,b,a){Sys.WebForms.InitializeRequestEventArgs.initializeBase(this);this._request=c;this._postBackElement=b;this._updatePanelsToUpdate=a};Sys.WebForms.InitializeRequestEventArgs.prototype={get_postBackElement:function(){return this._postBackElement},get_request:function(){return this._request},get_updatePanelsToUpdate:function(){return this._updatePanelsToUpdate?Array.clone(this._updatePanelsToUpdate):[]},set_updatePanelsToUpdate:function(a){this._updated=true;this._updatePanelsToUpdate=a}};Sys.WebForms.InitializeRequestEventArgs.registerClass("Sys.WebForms.InitializeRequestEventArgs",Sys.CancelEventArgs);Sys.WebForms.PageLoadedEventArgs=function(b,a,c){Sys.WebForms.PageLoadedEventArgs.initializeBase(this);this._panelsUpdated=b;this._panelsCreated=a;this._dataItems=c||{}};Sys.WebForms.PageLoadedEventArgs.prototype={get_dataItems:function(){return this._dataItems},get_panelsCreated:function(){return this._panelsCreated},get_panelsUpdated:function(){return this._panelsUpdated}};Sys.WebForms.PageLoadedEventArgs.registerClass("Sys.WebForms.PageLoadedEventArgs",Sys.EventArgs);Sys.WebForms.PageLoadingEventArgs=function(b,a,c){Sys.WebForms.PageLoadingEventArgs.initializeBase(this);this._panelsUpdating=b;this._panelsDeleting=a;this._dataItems=c||{}};Sys.WebForms.PageLoadingEventArgs.prototype={get_dataItems:function(){return this._dataItems},get_panelsDeleting:function(){return this._panelsDeleting},get_panelsUpdating:function(){return this._panelsUpdating}};Sys.WebForms.PageLoadingEventArgs.registerClass("Sys.WebForms.PageLoadingEventArgs",Sys.EventArgs);Sys._ScriptLoader=function(){this._scriptsToLoad=null;this._sessions=[];this._scriptLoadedDelegate=Function.createDelegate(this,this._scriptLoadedHandler)};Sys._ScriptLoader.prototype={dispose:function(){this._stopSession();this._loading=false;if(this._events)delete this._events;this._sessions=null;this._currentSession=null;this._scriptLoadedDelegate=null},loadScripts:function(d,b,c,a){var e={allScriptsLoadedCallback:b,scriptLoadFailedCallback:c,scriptLoadTimeoutCallback:a,scriptsToLoad:this._scriptsToLoad,scriptTimeout:d};this._scriptsToLoad=null;this._sessions[this._sessions.length]=e;if(!this._loading)this._nextSession()},queueCustomScriptTag:function(a){if(!this._scriptsToLoad)this._scriptsToLoad=[];Array.add(this._scriptsToLoad,a)},queueScriptBlock:function(a){if(!this._scriptsToLoad)this._scriptsToLoad=[];Array.add(this._scriptsToLoad,{text:a})},queueScriptReference:function(a,b){if(!this._scriptsToLoad)this._scriptsToLoad=[];Array.add(this._scriptsToLoad,{src:a,fallback:b})},_createScriptElement:function(c){var a=document.createElement("script");a.type="text/javascript";for(var b in c)a[b]=c[b];return a},_loadScriptsInternal:function(){var c=this._currentSession;if(c.scriptsToLoad&&c.scriptsToLoad.length>0){var b=Array.dequeue(c.scriptsToLoad),f=this._scriptLoadedDelegate;if(b.fallback){var g=b.fallback;delete b.fallback;var d=this;f=function(b,a){a||function(){var a=d._createScriptElement({src:g});d._currentTask=new Sys._ScriptLoaderTask(a,d._scriptLoadedDelegate);d._currentTask.execute()}()}}var a=this._createScriptElement(b);if(a.text&&Sys.Browser.agent===Sys.Browser.Safari){a.innerHTML=a.text;delete a.text}if(typeof b.src==="string"){this._currentTask=new Sys._ScriptLoaderTask(a,f);this._currentTask.execute()}else{document.getElementsByTagName("head")[0].appendChild(a);Sys._ScriptLoaderTask._clearScript(a);this._loadScriptsInternal()}}else{this._stopSession();var e=c.allScriptsLoadedCallback;if(e)e(this);this._nextSession()}},_nextSession:function(){if(this._sessions.length===0){this._loading=false;this._currentSession=null;return}this._loading=true;var a=Array.dequeue(this._sessions);this._currentSession=a;if(a.scriptTimeout>0)this._timeoutCookie=window.setTimeout(Function.createDelegate(this,this._scriptLoadTimeoutHandler),a.scriptTimeout*1000);this._loadScriptsInternal()},_raiseError:function(){var b=this._currentSession.scriptLoadFailedCallback,a=this._currentTask.get_scriptElement();this._stopSession();if(b){b(this,a);this._nextSession()}else{this._loading=false;throw Sys._ScriptLoader._errorScriptLoadFailed(a.src)}},_scriptLoadedHandler:function(a,b){if(b){Array.add(Sys._ScriptLoader._getLoadedScripts(),a.src);this._currentTask.dispose();this._currentTask=null;this._loadScriptsInternal()}else this._raiseError()},_scriptLoadTimeoutHandler:function(){var a=this._currentSession.scriptLoadTimeoutCallback;this._stopSession();if(a)a(this);this._nextSession()},_stopSession:function(){if(this._timeoutCookie){window.clearTimeout(this._timeoutCookie);this._timeoutCookie=null}if(this._currentTask){this._currentTask.dispose();this._currentTask=null}}};Sys._ScriptLoader.registerClass("Sys._ScriptLoader",null,Sys.IDisposable);Sys._ScriptLoader.getInstance=function(){var a=Sys._ScriptLoader._activeInstance;if(!a)a=Sys._ScriptLoader._activeInstance=new Sys._ScriptLoader;return a};Sys._ScriptLoader.isScriptLoaded=function(b){var a=document.createElement("script");a.src=b;return Array.contains(Sys._ScriptLoader._getLoadedScripts(),a.src)};Sys._ScriptLoader.readLoadedScripts=function(){if(!Sys._ScriptLoader._referencedScripts){var c=Sys._ScriptLoader._referencedScripts=[],d=document.getElementsByTagName("script");for(var b=d.length-1;b>=0;b--){var e=d[b],a=e.src;if(a.length)if(!Array.contains(c,a))Array.add(c,a)}}};Sys._ScriptLoader._errorScriptLoadFailed=function(b){var a;a=Sys.Res.scriptLoadFailed;var d="Sys.ScriptLoadFailedException: "+String.format(a,b),c=Error.create(d,{name:"Sys.ScriptLoadFailedException","scriptUrl":b});c.popStackFrame();return c};Sys._ScriptLoader._getLoadedScripts=function(){if(!Sys._ScriptLoader._referencedScripts){Sys._ScriptLoader._referencedScripts=[];Sys._ScriptLoader.readLoadedScripts()}return Sys._ScriptLoader._referencedScripts};Sys.WebForms.PageRequestManager=function(){this._form=null;this._activeDefaultButton=null;this._activeDefaultButtonClicked=false;this._updatePanelIDs=null;this._updatePanelClientIDs=null;this._updatePanelHasChildrenAsTriggers=null;this._asyncPostBackControlIDs=null;this._asyncPostBackControlClientIDs=null;this._postBackControlIDs=null;this._postBackControlClientIDs=null;this._scriptManagerID=null;this._pageLoadedHandler=null;this._additionalInput=null;this._onsubmit=null;this._onSubmitStatements=[];this._originalDoPostBack=null;this._originalDoPostBackWithOptions=null;this._originalFireDefaultButton=null;this._originalDoCallback=null;this._isCrossPost=false;this._postBackSettings=null;this._request=null;this._onFormSubmitHandler=null;this._onFormElementClickHandler=null;this._onWindowUnloadHandler=null;this._asyncPostBackTimeout=null;this._controlIDToFocus=null;this._scrollPosition=null;this._processingRequest=false;this._scriptDisposes={};this._transientFields=["__VIEWSTATEENCRYPTED","__VIEWSTATEFIELDCOUNT"];this._textTypes=/^(text|password|hidden|search|tel|url|email|number|range|color|datetime|date|month|week|time|datetime-local)$/i};Sys.WebForms.PageRequestManager.prototype={_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_isInAsyncPostBack:function(){return this._request!==null},add_beginRequest:function(a){this._get_eventHandlerList().addHandler("beginRequest",a)},remove_beginRequest:function(a){this._get_eventHandlerList().removeHandler("beginRequest",a)},add_endRequest:function(a){this._get_eventHandlerList().addHandler("endRequest",a)},remove_endRequest:function(a){this._get_eventHandlerList().removeHandler("endRequest",a)},add_initializeRequest:function(a){this._get_eventHandlerList().addHandler("initializeRequest",a)},remove_initializeRequest:function(a){this._get_eventHandlerList().removeHandler("initializeRequest",a)},add_pageLoaded:function(a){this._get_eventHandlerList().addHandler("pageLoaded",a)},remove_pageLoaded:function(a){this._get_eventHandlerList().removeHandler("pageLoaded",a)},add_pageLoading:function(a){this._get_eventHandlerList().addHandler("pageLoading",a)},remove_pageLoading:function(a){this._get_eventHandlerList().removeHandler("pageLoading",a)},abortPostBack:function(){if(!this._processingRequest&&this._request){this._request.get_executor().abort();this._request=null}},beginAsyncPostBack:function(c,a,f,d,e){if(d&&typeof Page_ClientValidate==="function"&&!Page_ClientValidate(e||null))return;this._postBackSettings=this._createPostBackSettings(true,c,a);var b=this._form;b.__EVENTTARGET.value=a||"";b.__EVENTARGUMENT.value=f||"";this._isCrossPost=false;this._additionalInput=null;this._onFormSubmit()},_cancelPendingCallbacks:function(){for(var a=0,e=window.__pendingCallbacks.length;a0)theForm.action=a.actionUrl;if(a.trackFocus){var c=theForm.elements["__LASTFOCUS"];if(typeof c!="undefined"&&c!=null)if(typeof document.activeElement=="undefined")c.value=a.eventTarget;else{var b=document.activeElement;if(typeof b!="undefined"&&b!=null)if(typeof b.id!="undefined"&&b.id!=null&&b.id.length>0)c.value=b.id;else if(typeof b.name!="undefined")c.value=b.name}}}if(a.clientSubmit)this._doPostBack(a.eventTarget,a.eventArgument)},_elementContains:function(b,a){while(a){if(a===b)return true;a=a.parentNode}return false},_endPostBack:function(a,d,f){if(this._request===d.get_webRequest()){this._processingRequest=false;this._additionalInput=null;this._request=null}var e=this._get_eventHandlerList().getHandler("endRequest"),b=false;if(e){var c=new Sys.WebForms.EndRequestEventArgs(a,f?f.dataItems:{},d);e(this,c);b=c.get_errorHandled()}if(a&&!b)throw a},_ensureUniqueIds:function(a){if(!a)return a;a=a instanceof Array?a:[a];var c=[];for(var b=0,f=a.length;b-1?this._updatePanelIDs[d]:e)}return c},_findNearestElement:function(a){while(a.length>0){var d=this._uniqueIDToClientID(a),c=document.getElementById(d);if(c)return c;var b=a.lastIndexOf("$");if(b===-1)return null;a=a.substring(0,b)}return null},_findText:function(b,a){var c=Math.max(0,a-20),d=Math.min(b.length,a+20);return b.substring(c,d)},_fireDefaultButton:function(a,d){if(a.keyCode===13){var c=a.srcElement||a.target;if(!c||c.tagName.toLowerCase()!=="textarea"){var b=document.getElementById(d);if(b&&typeof b.click!=="undefined"){this._activeDefaultButton=b;this._activeDefaultButtonClicked=false;try{b.click()}finally{this._activeDefaultButton=null}a.cancelBubble=true;if(typeof a.stopPropagation==="function")a.stopPropagation();return false}}}return true},_getPageLoadedEventArgs:function(n,c){var m=[],l=[],k=c?c.version4:false,d=c?c.updatePanelData:null,e,g,h,b;if(!d){e=this._updatePanelIDs;g=this._updatePanelClientIDs;h=null;b=null}else{e=d.updatePanelIDs;g=d.updatePanelClientIDs;h=d.childUpdatePanelIDs;b=d.panelsToRefreshIDs}var a,f,j,i;if(b)for(a=0,f=b.length;a-1))Array.add(i,document.getElementById(l[a]))}return new Sys.WebForms.PageLoadingEventArgs(j,i,f.dataItems)},_getPostBackSettings:function(a,c){var d=a,b=null;while(a){if(a.id){if(!b&&Array.contains(this._asyncPostBackControlClientIDs,a.id))b=this._createPostBackSettings(true,null,c,d);else if(!b&&Array.contains(this._postBackControlClientIDs,a.id))return this._createPostBackSettings(false);else{var e=Array.indexOf(this._updatePanelClientIDs,a.id);if(e!==-1)if(this._updatePanelHasChildrenAsTriggers[e])return this._createPostBackSettings(true,[this._updatePanelIDs[e]],c,d);else return this._createPostBackSettings(true,null,c,d)}if(!b&&this._matchesParentIDInList(a.id,this._asyncPostBackControlClientIDs))b=this._createPostBackSettings(true,null,c,d);else if(!b&&this._matchesParentIDInList(a.id,this._postBackControlClientIDs))return this._createPostBackSettings(false)}a=a.parentNode}if(!b)return this._createPostBackSettings(false);else return b},_getScrollPosition:function(){var a=document.documentElement;if(a&&(this._validPosition(a.scrollLeft)||this._validPosition(a.scrollTop)))return {x:a.scrollLeft,y:a.scrollTop};else{a=document.body;if(a&&(this._validPosition(a.scrollLeft)||this._validPosition(a.scrollTop)))return {x:a.scrollLeft,y:a.scrollTop};else if(this._validPosition(window.pageXOffset)||this._validPosition(window.pageYOffset))return {x:window.pageXOffset,y:window.pageYOffset};else return {x:0,y:0}}},_initializeInternal:function(f,g,a,b,e,c,d){if(this._prmInitialized)throw Error.invalidOperation(Sys.WebForms.Res.PRM_CannotRegisterTwice);this._prmInitialized=true;this._masterPageUniqueID=d;this._scriptManagerID=f;this._form=Sys.UI.DomElement.resolveElement(g);this._onsubmit=this._form.onsubmit;this._form.onsubmit=null;this._onFormSubmitHandler=Function.createDelegate(this,this._onFormSubmit);this._onFormElementClickHandler=Function.createDelegate(this,this._onFormElementClick);this._onWindowUnloadHandler=Function.createDelegate(this,this._onWindowUnload);Sys.UI.DomEvent.addHandler(this._form,"submit",this._onFormSubmitHandler);Sys.UI.DomEvent.addHandler(this._form,"click",this._onFormElementClickHandler);Sys.UI.DomEvent.addHandler(window,"unload",this._onWindowUnloadHandler);this._originalDoPostBack=window.__doPostBack;if(this._originalDoPostBack)window.__doPostBack=Function.createDelegate(this,this._doPostBack);this._originalDoPostBackWithOptions=window.WebForm_DoPostBackWithOptions;if(this._originalDoPostBackWithOptions)window.WebForm_DoPostBackWithOptions=Function.createDelegate(this,this._doPostBackWithOptions);this._originalFireDefaultButton=window.WebForm_FireDefaultButton;if(this._originalFireDefaultButton)window.WebForm_FireDefaultButton=Function.createDelegate(this,this._fireDefaultButton);this._originalDoCallback=window.WebForm_DoCallback;if(this._originalDoCallback)window.WebForm_DoCallback=Function.createDelegate(this,this._doCallback);this._pageLoadedHandler=Function.createDelegate(this,this._pageLoadedInitialLoad);Sys.UI.DomEvent.addHandler(window,"load",this._pageLoadedHandler);if(a)this._updateControls(a,b,e,c,true)},_matchesParentIDInList:function(c,b){for(var a=0,d=b.length;a=c.length){e=this._findText(c,c.length);break}D=c.substr(b,i);b+=i;if(c.charAt(b)!=="|"){e=this._findText(c,b);break}b++;Array.add(k,{type:E,id:F,content:D})}if(e){this._endPostBack(this._createPageRequestManagerParserError(String.format(Sys.WebForms.Res.PRM_ParserErrorDetails,e)),h,null);return null}var x=[],w=[],q=[],j=[],t=[],C=[],A=[],z=[],v=[],s=[],m,p,u,n,o,r,y,g;for(var l=0,G=k.length;l=4)a.content=unescape(a.content);if(Sys.Browser.agent===Sys.Browser.InternetExplorer){var f=document.createElement("a");f.style.display="none";f.attachEvent("onclick",B);f.href=a.content;this._form.parentNode.insertBefore(f,this._form);f.click();f.detachEvent("onclick",B);this._form.parentNode.removeChild(f);function B(a){a.cancelBubble=true}}else window.location.href=a.content;return null;case "error":this._endPostBack(this._createPageRequestManagerServerError(Number.parseInvariant(a.id),a.content),h,null);return null;case "pageTitle":document.title=a.content;break;case "focus":this._controlIDToFocus=a.content;break;default:this._endPostBack(this._createPageRequestManagerParserError(String.format(Sys.WebForms.Res.PRM_UnknownToken,a.type)),h,null);return null}}return {version4:g?parseFloat(g.content)>=4:false,executor:h,updatePanelNodes:x,hiddenFieldNodes:w,arrayDeclarationNodes:q,scriptBlockNodes:j,scriptStartupNodes:t,expandoNodes:C,onSubmitNodes:A,dataItemNodes:z,dataItemJsonNodes:v,scriptDisposeNodes:s,asyncPostBackControlIDsNode:m,postBackControlIDsNode:p,updatePanelIDsNode:u,asyncPostBackTimeoutNode:n,childUpdatePanelIDsNode:o,panelsToRefreshNode:r,formActionNode:y}},_processUpdatePanelArrays:function(e,q,r,f){var d,c,b;if(e){var i=e.length,j=f?2:1;d=new Array(i/j);c=new Array(i/j);b=new Array(i/j);for(var g=0,h=0;g /// /// // Add common toolkit scripts here. To consume the scripts on a control add // // [RequiredScript(typeof(CommonToolkitScripts))] // public class SomeExtender : ... // // to the controls extender class declaration. Type.registerNamespace('AjaxControlToolkit'); AjaxControlToolkit.BoxSide = function() { /// /// The BoxSide enumeration describes the sides of a DOM element /// /// /// /// /// } AjaxControlToolkit.BoxSide.prototype = { Top : 0, Right : 1, Bottom : 2, Left : 3 } AjaxControlToolkit.BoxSide.registerEnum("AjaxControlToolkit.BoxSide", false); AjaxControlToolkit._CommonToolkitScripts = function() { /// /// The _CommonToolkitScripts class contains functionality utilized across a number /// of controls (but not universally) /// /// /// You should not create new instances of _CommonToolkitScripts. Instead you should use the shared instance CommonToolkitScripts (or AjaxControlToolkit.CommonToolkitScripts). /// } AjaxControlToolkit._CommonToolkitScripts.prototype = { // The order of these lookup tables is directly linked to the BoxSide enum defined above _borderStyleNames : ["borderTopStyle","borderRightStyle","borderBottomStyle","borderLeftStyle"], _borderWidthNames : ["borderTopWidth", "borderRightWidth", "borderBottomWidth", "borderLeftWidth"], _paddingWidthNames : ["paddingTop", "paddingRight", "paddingBottom", "paddingLeft"], _marginWidthNames : ["marginTop", "marginRight", "marginBottom", "marginLeft"], getCurrentStyle : function(element, attribute, defaultValue) { /// /// CommonToolkitScripts.getCurrentStyle is used to compute the value of a style attribute on an /// element that is currently being displayed. This is especially useful for scenarios where /// several CSS classes and style attributes are merged, or when you need information about the /// size of an element (such as its padding or margins) that is not exposed in any other fashion. /// /// /// Live DOM element to check style of /// /// /// The style attribute's name is expected to be in a camel-cased form that you would use when /// accessing a JavaScript property instead of the hyphenated form you would use in a CSS /// stylesheet (i.e. it should be "backgroundColor" and not "background-color"). /// /// /// In the event of a problem (i.e. a null element or an attribute that cannot be found) we /// return this object (or null if none if not specified). /// /// /// Current style of the element's attribute /// var currentValue = null; if (element) { if (element.currentStyle) { currentValue = element.currentStyle[attribute]; } else if (document.defaultView && document.defaultView.getComputedStyle) { var style = document.defaultView.getComputedStyle(element, null); if (style) { currentValue = style[attribute]; } } if (!currentValue && element.style.getPropertyValue) { currentValue = element.style.getPropertyValue(attribute); } else if (!currentValue && element.style.getAttribute) { currentValue = element.style.getAttribute(attribute); } } if ((!currentValue || currentValue == "" || typeof(currentValue) === 'undefined')) { if (typeof(defaultValue) != 'undefined') { currentValue = defaultValue; } else { currentValue = null; } } return currentValue; }, getInheritedBackgroundColor : function(element) { /// /// CommonToolkitScripts.getInheritedBackgroundColor provides the ability to get the displayed /// background-color of an element. In most cases calling CommonToolkitScripts.getCurrentStyle /// won't do the job because it will return "transparent" unless the element has been given a /// specific background color. This function will walk up the element's parents until it finds /// a non-transparent color. If we get all the way to the top of the document or have any other /// problem finding a color, we will return the default value '#FFFFFF'. This function is /// especially important when we're using opacity in IE (because ClearType will make text look /// horrendous if you fade it with a transparent background color). /// /// /// Live DOM element to get the background color of /// /// /// Background color of the element /// if (!element) return '#FFFFFF'; var background = this.getCurrentStyle(element, 'backgroundColor'); try { while (!background || background == '' || background == 'transparent' || background == 'rgba(0, 0, 0, 0)') { element = element.parentNode; if (!element) { background = '#FFFFFF'; } else { background = this.getCurrentStyle(element, 'backgroundColor'); } } } catch(ex) { background = '#FFFFFF'; } return background; }, getLocation : function(element) { /// Gets the coordinates of a DOM element. /// /// /// A Point object with two fields, x and y, which contain the pixel coordinates of the element. /// // workaround for an issue in getLocation where it will compute the location of the document element. // this will return an offset if scrolled. // if (element === document.documentElement) { return new Sys.UI.Point(0,0); } // Workaround for IE6 bug in getLocation (also required patching getBounds - remove that fix when this is removed) if (Sys.Browser.agent == Sys.Browser.InternetExplorer && Sys.Browser.version < 7) { if (element.window === element || element.nodeType === 9 || !element.getClientRects || !element.getBoundingClientRect) return new Sys.UI.Point(0,0); // Get the first bounding rectangle in screen coordinates var screenRects = element.getClientRects(); if (!screenRects || !screenRects.length) { return new Sys.UI.Point(0,0); } var first = screenRects[0]; // Delta between client coords and screen coords var dLeft = 0; var dTop = 0; var inFrame = false; try { inFrame = element.ownerDocument.parentWindow.frameElement; } catch(ex) { // If accessing the frameElement fails, a frame is probably in a different // domain than its parent - and we still want to do the calculation below inFrame = true; } // If we're in a frame, get client coordinates too so we can compute the delta if (inFrame) { // Get the bounding rectangle in client coords var clientRect = element.getBoundingClientRect(); if (!clientRect) { return new Sys.UI.Point(0,0); } // Find the minima in screen coords var minLeft = first.left; var minTop = first.top; for (var i = 1; i < screenRects.length; i++) { var r = screenRects[i]; if (r.left < minLeft) { minLeft = r.left; } if (r.top < minTop) { minTop = r.top; } } // Compute the delta between screen and client coords dLeft = minLeft - clientRect.left; dTop = minTop - clientRect.top; } // Subtract 2px, the border of the viewport (It can be changed in IE6 by applying a border style to the HTML element, // but this is not supported by ASP.NET AJAX, and it cannot be changed in IE7.), and also subtract the delta between // screen coords and client coords var ownerDocument = element.document.documentElement; return new Sys.UI.Point(first.left - 2 - dLeft + ownerDocument.scrollLeft, first.top - 2 - dTop + ownerDocument.scrollTop); } return Sys.UI.DomElement.getLocation(element); }, setLocation : function(element, point) { /// /// Sets the current location for an element. /// /// /// DOM element /// /// /// Point object (of the form {x,y}) /// /// /// This method does not attempt to set the positioning mode of an element. /// The position is relative from the elements nearest position:relative or /// position:absolute element. /// Sys.UI.DomElement.setLocation(element, point.x, point.y); }, getContentSize : function(element) { /// /// Gets the "content-box" size of an element. /// /// /// DOM element /// /// /// Size of the element (in the form {width,height}) /// /// /// The "content-box" is the size of the content area *inside* of the borders and /// padding of an element. The "content-box" size does not include the margins around /// the element. /// if (!element) { throw Error.argumentNull('element'); } var size = this.getSize(element); var borderBox = this.getBorderBox(element); var paddingBox = this.getPaddingBox(element); return { width : size.width - borderBox.horizontal - paddingBox.horizontal, height : size.height - borderBox.vertical - paddingBox.vertical } }, getSize : function(element) { /// /// Gets the "border-box" size of an element. /// /// /// DOM element /// /// /// Size of the element (in the form {width,height}) /// /// /// The "border-box" is the size of the content area *outside* of the borders and /// padding of an element. The "border-box" size does not include the margins around /// the element. /// if (!element) { throw Error.argumentNull('element'); } return { width: element.offsetWidth, height: element.offsetHeight }; }, setContentSize : function(element, size) { /// /// Sets the "content-box" size of an element. /// /// /// DOM element /// /// /// Size of the element (in the form {width,height}) /// /// /// The "content-box" is the size of the content area *inside* of the borders and /// padding of an element. The "content-box" size does not include the margins around /// the element. /// if (!element) { throw Error.argumentNull('element'); } if (!size) { throw Error.argumentNull('size'); } // FF respects -moz-box-sizing css extension, so adjust the box size for the border-box if(this.getCurrentStyle(element, 'MozBoxSizing') == 'border-box' || this.getCurrentStyle(element, 'BoxSizing') == 'border-box') { var borderBox = this.getBorderBox(element); var paddingBox = this.getPaddingBox(element); size = { width: size.width + borderBox.horizontal + paddingBox.horizontal, height: size.height + borderBox.vertical + paddingBox.vertical }; } element.style.width = size.width.toString() + 'px'; element.style.height = size.height.toString() + 'px'; }, setSize : function(element, size) { /// /// Sets the "border-box" size of an element. /// /// /// The "border-box" is the size of the content area *outside* of the borders and /// padding of an element. The "border-box" size does not include the margins around /// the element. /// /// DOM element /// Size of the element (in the form {width,height}) /// if (!element) { throw Error.argumentNull('element'); } if (!size) { throw Error.argumentNull('size'); } var borderBox = this.getBorderBox(element); var paddingBox = this.getPaddingBox(element); var contentSize = { width: size.width - borderBox.horizontal - paddingBox.horizontal, height: size.height - borderBox.vertical - paddingBox.vertical }; this.setContentSize(element, contentSize); }, getBounds : function(element) { /// Gets the coordinates, width and height of an element. /// /// /// A Bounds object with four fields, x, y, width and height, which contain the pixel coordinates, /// width and height of the element. /// /// /// Use the CommonToolkitScripts version of getLocation to handle the workaround for IE6. We can /// remove the below implementation and just call Sys.UI.DomElement.getBounds when the other bug /// is fixed. /// var offset = $common.getLocation(element); return new Sys.UI.Bounds(offset.x, offset.y, element.offsetWidth || 0, element.offsetHeight || 0); }, setBounds : function(element, bounds) { /// /// Sets the "border-box" bounds of an element /// /// /// DOM element /// /// /// Bounds of the element (of the form {x,y,width,height}) /// /// /// The "border-box" is the size of the content area *outside* of the borders and /// padding of an element. The "border-box" size does not include the margins around /// the element. /// if (!element) { throw Error.argumentNull('element'); } if (!bounds) { throw Error.argumentNull('bounds'); } this.setSize(element, bounds); $common.setLocation(element, bounds); }, getClientBounds : function() { /// /// Gets the width and height of the browser client window (excluding scrollbars) /// /// /// Browser's client width and height /// var clientWidth; var clientHeight; switch(Sys.Browser.agent) { case Sys.Browser.InternetExplorer: clientWidth = document.documentElement.clientWidth; clientHeight = document.documentElement.clientHeight; break; case Sys.Browser.Safari: clientWidth = window.innerWidth; clientHeight = window.innerHeight; break; case Sys.Browser.Opera: clientWidth = Math.min(window.innerWidth, document.body.clientWidth); clientHeight = Math.min(window.innerHeight, document.body.clientHeight); break; default: // Sys.Browser.Firefox, etc. clientWidth = Math.min(window.innerWidth, document.documentElement.clientWidth); clientHeight = Math.min(window.innerHeight, document.documentElement.clientHeight); break; } return new Sys.UI.Bounds(0, 0, clientWidth, clientHeight); }, getMarginBox : function(element) { /// /// Gets the entire margin box sizes. /// /// /// DOM element /// /// /// Element's margin box sizes (of the form {top,left,bottom,right,horizontal,vertical}) /// if (!element) { throw Error.argumentNull('element'); } var box = { top: this.getMargin(element, AjaxControlToolkit.BoxSide.Top), right: this.getMargin(element, AjaxControlToolkit.BoxSide.Right), bottom: this.getMargin(element, AjaxControlToolkit.BoxSide.Bottom), left: this.getMargin(element, AjaxControlToolkit.BoxSide.Left) }; box.horizontal = box.left + box.right; box.vertical = box.top + box.bottom; return box; }, getBorderBox : function(element) { /// /// Gets the entire border box sizes. /// /// /// DOM element /// /// /// Element's border box sizes (of the form {top,left,bottom,right,horizontal,vertical}) /// if (!element) { throw Error.argumentNull('element'); } var box = { top: this.getBorderWidth(element, AjaxControlToolkit.BoxSide.Top), right: this.getBorderWidth(element, AjaxControlToolkit.BoxSide.Right), bottom: this.getBorderWidth(element, AjaxControlToolkit.BoxSide.Bottom), left: this.getBorderWidth(element, AjaxControlToolkit.BoxSide.Left) }; box.horizontal = box.left + box.right; box.vertical = box.top + box.bottom; return box; }, getPaddingBox : function(element) { /// /// Gets the entire padding box sizes. /// /// /// DOM element /// /// /// Element's padding box sizes (of the form {top,left,bottom,right,horizontal,vertical}) /// if (!element) { throw Error.argumentNull('element'); } var box = { top: this.getPadding(element, AjaxControlToolkit.BoxSide.Top), right: this.getPadding(element, AjaxControlToolkit.BoxSide.Right), bottom: this.getPadding(element, AjaxControlToolkit.BoxSide.Bottom), left: this.getPadding(element, AjaxControlToolkit.BoxSide.Left) }; box.horizontal = box.left + box.right; box.vertical = box.top + box.bottom; return box; }, isBorderVisible : function(element, boxSide) { /// /// Gets whether the current border style for an element on a specific boxSide is not 'none'. /// /// /// DOM element /// /// /// Side of the element /// /// /// Whether the current border style for an element on a specific boxSide is not 'none'. /// if (!element) { throw Error.argumentNull('element'); } if(boxSide < AjaxControlToolkit.BoxSide.Top || boxSide > AjaxControlToolkit.BoxSide.Left) { throw Error.argumentOutOfRange(String.format(Sys.Res.enumInvalidValue, boxSide, 'AjaxControlToolkit.BoxSide')); } var styleName = this._borderStyleNames[boxSide]; var styleValue = this.getCurrentStyle(element, styleName); return styleValue != "none"; }, getMargin : function(element, boxSide) { /// /// Gets the margin thickness of an element on a specific boxSide. /// /// /// DOM element /// /// /// Side of the element /// /// /// Margin thickness on the element's specified side /// if (!element) { throw Error.argumentNull('element'); } if(boxSide < AjaxControlToolkit.BoxSide.Top || boxSide > AjaxControlToolkit.BoxSide.Left) { throw Error.argumentOutOfRange(String.format(Sys.Res.enumInvalidValue, boxSide, 'AjaxControlToolkit.BoxSide')); } var styleName = this._marginWidthNames[boxSide]; var styleValue = this.getCurrentStyle(element, styleName); try { return this.parsePadding(styleValue); } catch(ex) { return 0; } }, getBorderWidth : function(element, boxSide) { /// /// Gets the border thickness of an element on a specific boxSide. /// /// /// DOM element /// /// /// Side of the element /// /// /// Border thickness on the element's specified side /// if (!element) { throw Error.argumentNull('element'); } if(boxSide < AjaxControlToolkit.BoxSide.Top || boxSide > AjaxControlToolkit.BoxSide.Left) { throw Error.argumentOutOfRange(String.format(Sys.Res.enumInvalidValue, boxSide, 'AjaxControlToolkit.BoxSide')); } if(!this.isBorderVisible(element, boxSide)) { return 0; } var styleName = this._borderWidthNames[boxSide]; var styleValue = this.getCurrentStyle(element, styleName); return this.parseBorderWidth(styleValue); }, getPadding : function(element, boxSide) { /// /// Gets the padding thickness of an element on a specific boxSide. /// /// /// DOM element /// /// /// Side of the element /// /// /// Padding on the element's specified side /// if (!element) { throw Error.argumentNull('element'); } if(boxSide < AjaxControlToolkit.BoxSide.Top || boxSide > AjaxControlToolkit.BoxSide.Left) { throw Error.argumentOutOfRange(String.format(Sys.Res.enumInvalidValue, boxSide, 'AjaxControlToolkit.BoxSide')); } var styleName = this._paddingWidthNames[boxSide]; var styleValue = this.getCurrentStyle(element, styleName); return this.parsePadding(styleValue); }, parseBorderWidth : function(borderWidth) { /// /// Parses a border-width string into a pixel size /// /// /// Type of border ('thin','medium','thick','inherit',px unit,null,'') /// /// /// Number of pixels in the border-width /// if (!this._borderThicknesses) { // Populate the borderThicknesses lookup table var borderThicknesses = { }; var div0 = document.createElement('div'); div0.style.visibility = 'hidden'; div0.style.position = 'absolute'; div0.style.fontSize = '1px'; document.body.appendChild(div0) var div1 = document.createElement('div'); div1.style.height = '0px'; div1.style.overflow = 'hidden'; div0.appendChild(div1); var base = div0.offsetHeight; div1.style.borderTop = 'solid black'; div1.style.borderTopWidth = 'thin'; borderThicknesses['thin'] = div0.offsetHeight - base; div1.style.borderTopWidth = 'medium'; borderThicknesses['medium'] = div0.offsetHeight - base; div1.style.borderTopWidth = 'thick'; borderThicknesses['thick'] = div0.offsetHeight - base; div0.removeChild(div1); document.body.removeChild(div0); this._borderThicknesses = borderThicknesses; } if (borderWidth) { switch(borderWidth) { case 'thin': case 'medium': case 'thick': return this._borderThicknesses[borderWidth]; case 'inherit': return 0; } var unit = this.parseUnit(borderWidth); Sys.Debug.assert(unit.type == 'px', String.format(AjaxControlToolkit.Resources.Common_InvalidBorderWidthUnit, unit.type)); return unit.size; } return 0; }, parsePadding : function(padding) { /// /// Parses a padding string into a pixel size /// /// /// Padding to parse ('inherit',px unit,null,'') /// /// /// Number of pixels in the padding /// if(padding) { if(padding == 'inherit') { return 0; } var unit = this.parseUnit(padding); Sys.Debug.assert(unit.type == 'px', String.format(AjaxControlToolkit.Resources.Common_InvalidPaddingUnit, unit.type)); return unit.size; } return 0; }, parseUnit : function(value) { /// /// Parses a unit string into a unit object /// /// /// Value to parse (of the form px unit,% unit,em unit,...) /// /// /// Parsed unit (of the form {size,type}) /// if (!value) { throw Error.argumentNull('value'); } value = value.trim().toLowerCase(); var l = value.length; var s = -1; for(var i = 0; i < l; i++) { var ch = value.substr(i, 1); if((ch < '0' || ch > '9') && ch != '-' && ch != '.' && ch != ',') { break; } s = i; } if(s == -1) { throw Error.create(AjaxControlToolkit.Resources.Common_UnitHasNoDigits); } var type; var size; if(s < (l - 1)) { type = value.substring(s + 1).trim(); } else { type = 'px'; } size = parseFloat(value.substr(0, s + 1)); if(type == 'px') { size = Math.floor(size); } return { size: size, type: type }; }, getElementOpacity : function(element) { /// /// Get the element's opacity /// /// /// Element /// /// /// Opacity of the element /// if (!element) { throw Error.argumentNull('element'); } var hasOpacity = false; var opacity; if (element.filters) { var filters = element.filters; if (filters.length !== 0) { var alphaFilter = filters['DXImageTransform.Microsoft.Alpha']; if (alphaFilter) { opacity = alphaFilter.opacity / 100.0; hasOpacity = true; } } } else { opacity = this.getCurrentStyle(element, 'opacity', 1); hasOpacity = true; } if (hasOpacity === false) { return 1.0; } return parseFloat(opacity); }, setElementOpacity : function(element, value) { /// /// Set the element's opacity /// /// /// Element /// /// /// Opacity of the element /// if (!element) { throw Error.argumentNull('element'); } if (element.filters) { var filters = element.filters; var createFilter = true; if (filters.length !== 0) { var alphaFilter = filters['DXImageTransform.Microsoft.Alpha']; if (alphaFilter) { createFilter = false; alphaFilter.opacity = value * 100; } } if (createFilter) { element.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + (value * 100) + ')'; } } else { element.style.opacity = value; } }, getVisible : function(element) { /// /// Check if an element is visible /// /// /// Element /// /// /// True if the element is visible, false otherwise /// // Note: reference to CommonToolkitScripts must be left intact (i.e. don't // replace with 'this') because this function will be aliased return (element && ("none" != $common.getCurrentStyle(element, "display")) && ("hidden" != $common.getCurrentStyle(element, "visibility"))); }, setVisible : function(element, value) { /// /// Check if an element is visible /// /// /// Element /// /// /// True to make the element visible, false to hide it /// // Note: reference to CommonToolkitScripts must be left intact (i.e. don't // replace with 'this') because this function will be aliased if (element && value != $common.getVisible(element)) { if (value) { if (element.style.removeAttribute) { element.style.removeAttribute("display"); } else { element.style.removeProperty("display"); } } else { element.style.display = 'none'; } element.style.visibility = value ? 'visible' : 'hidden'; } }, resolveFunction : function(value) { /// /// Returns a function reference that corresponds to the provided value /// /// /// The value can either be a Function, the name of a function (that can be found using window['name']), /// or an expression that evaluates to a function. /// /// /// Reference to the function, or null if not found /// if (value) { if (value instanceof Function) { return value; } else if (String.isInstanceOfType(value) && value.length > 0) { var func; if ((func = window[value]) instanceof Function) { return func; } else if ((func = eval(value)) instanceof Function) { return func; } } } return null; }, addCssClasses : function(element, classNames) { /// /// Adds multiple css classes to a DomElement /// /// The element to modify /// The class names to add for(var i = 0; i < classNames.length; i++) { Sys.UI.DomElement.addCssClass(element, classNames[i]); } }, removeCssClasses : function(element, classNames) { /// /// Removes multiple css classes to a DomElement /// /// The element to modify /// The class names to remove for(var i = 0; i < classNames.length; i++) { Sys.UI.DomElement.removeCssClass(element, classNames[i]); } }, setStyle : function(element, style) { /// /// Sets the style of the element using the supplied style template object /// /// The element to modify /// The template $common.applyProperties(element.style, style); }, removeHandlers : function(element, events) { /// /// Removes a set of event handlers from an element /// /// The element to modify /// The template object that contains event names and delegates /// /// This is NOT the same as $clearHandlers which removes all delegates from a DomElement. This rather removes select delegates /// from a specified element and has a matching signature as $addHandlers /// for (var name in events) { $removeHandler(element, name, events[name]); } }, overlaps : function(r1, r2) { /// /// Determine if two rectangles overlap /// /// /// Rectangle /// /// /// Rectangle /// /// /// True if the rectangles overlap, false otherwise /// return r1.x < (r2.x + r2.width) && r2.x < (r1.x + r1.width) && r1.y < (r2.y + r2.height) && r2.y < (r1.y + r1.height); }, containsPoint : function(rect, x, y) { /// /// Tests whether a point (x,y) is contained within a rectangle /// /// The rectangle /// The x coordinate of the point /// The y coordinate of the point return x >= rect.x && x < (rect.x + rect.width) && y >= rect.y && y < (rect.y + rect.height); }, isKeyDigit : function(keyCode) { /// /// Gets whether the supplied key-code is a digit /// /// The key code of the event (from Sys.UI.DomEvent) /// return (0x30 <= keyCode && keyCode <= 0x39); }, isKeyNavigation : function(keyCode) { /// /// Gets whether the supplied key-code is a navigation key /// /// The key code of the event (from Sys.UI.DomEvent) /// return (Sys.UI.Key.left <= keyCode && keyCode <= Sys.UI.Key.down); }, padLeft : function(text, size, ch, truncate) { /// /// Pads the left hand side of the supplied text with the specified pad character up to the requested size /// /// The text to pad /// The size to pad the text (default is 2) /// The single character to use as the pad character (default is ' ') /// Whether to truncate the text to size (default is false) return $common._pad(text, size || 2, ch || ' ', 'l', truncate || false); }, padRight : function(text, size, ch, truncate) { /// /// Pads the right hand side of the supplied text with the specified pad character up to the requested size /// /// The text to pad /// The size to pad the text (default is 2) /// The single character to use as the pad character (default is ' ') /// Whether to truncate the text to size (default is false) return $common._pad(text, size || 2, ch || ' ', 'r', truncate || false); }, _pad : function(text, size, ch, side, truncate) { /// /// Pads supplied text with the specified pad character up to the requested size /// /// The text to pad /// The size to pad the text /// The single character to use as the pad character /// Either 'l' or 'r' to siginfy whether to pad the Left or Right side respectively /// Whether to truncate the text to size text = text.toString(); var length = text.length; var builder = new Sys.StringBuilder(); if (side == 'r') { builder.append(text); } while (length < size) { builder.append(ch); length++; } if (side == 'l') { builder.append(text); } var result = builder.toString(); if (truncate && result.length > size) { if (side == 'l') { result = result.substr(result.length - size, size); } else { result = result.substr(0, size); } } return result; }, __DOMEvents : { focusin : { eventGroup : "UIEvents", init : function(e, p) { e.initUIEvent("focusin", true, false, window, 1); } }, focusout : { eventGroup : "UIEvents", init : function(e, p) { e.initUIEvent("focusout", true, false, window, 1); } }, activate : { eventGroup : "UIEvents", init : function(e, p) { e.initUIEvent("activate", true, true, window, 1); } }, focus : { eventGroup : "UIEvents", init : function(e, p) { e.initUIEvent("focus", false, false, window, 1); } }, blur : { eventGroup : "UIEvents", init : function(e, p) { e.initUIEvent("blur", false, false, window, 1); } }, click : { eventGroup : "MouseEvents", init : function(e, p) { e.initMouseEvent("click", true, true, window, 1, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } }, dblclick : { eventGroup : "MouseEvents", init : function(e, p) { e.initMouseEvent("click", true, true, window, 2, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } }, mousedown : { eventGroup : "MouseEvents", init : function(e, p) { e.initMouseEvent("mousedown", true, true, window, 1, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } }, mouseup : { eventGroup : "MouseEvents", init : function(e, p) { e.initMouseEvent("mouseup", true, true, window, 1, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } }, mouseover : { eventGroup : "MouseEvents", init : function(e, p) { e.initMouseEvent("mouseover", true, true, window, 1, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } }, mousemove : { eventGroup : "MouseEvents", init : function(e, p) { e.initMouseEvent("mousemove", true, true, window, 1, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } }, mouseout : { eventGroup : "MouseEvents", init : function(e, p) { e.initMouseEvent("mousemove", true, true, window, 1, p.screenX || 0, p.screenY || 0, p.clientX || 0, p.clientY || 0, p.ctrlKey || false, p.altKey || false, p.shiftKey || false, p.metaKey || false, p.button || 0, p.relatedTarget || null); } }, load : { eventGroup : "HTMLEvents", init : function(e, p) { e.initEvent("load", false, false); } }, unload : { eventGroup : "HTMLEvents", init : function(e, p) { e.initEvent("unload", false, false); } }, select : { eventGroup : "HTMLEvents", init : function(e, p) { e.initEvent("select", true, false); } }, change : { eventGroup : "HTMLEvents", init : function(e, p) { e.initEvent("change", true, false); } }, submit : { eventGroup : "HTMLEvents", init : function(e, p) { e.initEvent("submit", true, true); } }, reset : { eventGroup : "HTMLEvents", init : function(e, p) { e.initEvent("reset", true, false); } }, resize : { eventGroup : "HTMLEvents", init : function(e, p) { e.initEvent("resize", true, false); } }, scroll : { eventGroup : "HTMLEvents", init : function(e, p) { e.initEvent("scroll", true, false); } } }, tryFireRawEvent : function(element, rawEvent) { /// /// Attempts to fire a raw DOM event on an element /// /// The element to fire the event /// The raw DOM event object to fire. Must not be Sys.UI.DomEvent /// True if the event was successfully fired, otherwise false try { if (element.fireEvent) { element.fireEvent("on" + rawEvent.type, rawEvent); return true; } else if (element.dispatchEvent) { element.dispatchEvent(rawEvent); return true; } } catch (e) { } return false; }, tryFireEvent : function(element, eventName, properties) { /// /// Attempts to fire a DOM event on an element /// /// The element to fire the event /// The name of the event to fire (without an 'on' prefix) /// Properties to add to the event /// True if the event was successfully fired, otherwise false try { if (document.createEventObject) { var e = document.createEventObject(); $common.applyProperties(e, properties || {}); element.fireEvent("on" + eventName, e); return true; } else if (document.createEvent) { var def = $common.__DOMEvents[eventName]; if (def) { var e = document.createEvent(def.eventGroup); def.init(e, properties || {}); element.dispatchEvent(e); return true; } } } catch (e) { } return false; }, wrapElement : function(innerElement, newOuterElement, newInnerParentElement) { /// /// Wraps an inner element with a new outer element at the same DOM location as the inner element /// /// The element to be wrapped /// The new parent for the element /// var parent = innerElement.parentNode; parent.replaceChild(newOuterElement, innerElement); (newInnerParentElement || newOuterElement).appendChild(innerElement); }, unwrapElement : function(innerElement, oldOuterElement) { /// /// Unwraps an inner element from an outer element at the same DOM location as the outer element /// /// The element to be wrapped /// The new parent for the element /// var parent = oldOuterElement.parentNode; if (parent != null) { $common.removeElement(innerElement); parent.replaceChild(innerElement, oldOuterElement); } }, removeElement : function(element) { /// /// Removes an element from the DOM tree /// /// The element to be removed /// var parent = element.parentNode; if (parent != null) { parent.removeChild(element); } }, applyProperties : function(target, properties) { /// /// Quick utility method to copy properties from a template object to a target object /// /// The object to apply to /// The template to copy values from for (var p in properties) { var pv = properties[p]; if (pv != null && Object.getType(pv)===Object) { var tv = target[p]; $common.applyProperties(tv, pv); } else { target[p] = pv; } } }, createElementFromTemplate : function(template, appendToParent, nameTable) { /// /// Creates an element for the current document based on a template object /// /// The template from which to create the element /// A DomElement under which to append this element /// An object to use as the storage for the element using template.name as the key /// /// /// This method is useful if you find yourself using the same or similar DomElement constructions throughout a class. You can even set the templates /// as static properties for a type to cut down on overhead. This method is often called with a JSON style template: /// /// var elt = $common.createElementFromTemplate({ /// nodeName : "div", /// properties : { /// style : { /// height : "100px", /// width : "100px", /// backgroundColor : "white" /// }, /// expandoAttribute : "foo" /// }, /// events : { /// click : function() { alert("foo"); }, /// mouseover : function() { elt.backgroundColor = "silver"; }, /// mouseout : function() { elt.backgroundColor = "white"; } /// }, /// cssClasses : [ "class0", "class1" ], /// visible : true, /// opacity : .5 /// }, someParent); /// /// // if we wish to override the name table we do so here if (typeof(template.nameTable)!='undefined') { var newNameTable = template.nameTable; if (String.isInstanceOfType(newNameTable)) { newNameTable = nameTable[newNameTable]; } if (newNameTable != null) { nameTable = newNameTable; } } // get a name for the element in the nameTable var elementName = null; if (typeof(template.name)!=='undefined') { elementName = template.name; } // create or acquire the element var elt = document.createElement(template.nodeName); // if our element is named, add it to the name table if (typeof(template.name)!=='undefined' && nameTable) { nameTable[template.name] = elt; } // if we wish to supply a default parent we do so here if (typeof(template.parent)!=='undefined' && appendToParent == null) { var newParent = template.parent; if (String.isInstanceOfType(newParent)) { newParent = nameTable[newParent]; } if (newParent != null) { appendToParent = newParent; } } // properties are applied as expando values to the element if (typeof(template.properties)!=='undefined' && template.properties != null) { $common.applyProperties(elt, template.properties); } // css classes are added to the element's className property if (typeof(template.cssClasses)!=='undefined' && template.cssClasses != null) { $common.addCssClasses(elt, template.cssClasses); } // events are added to the dom element using $addHandlers if (typeof(template.events)!=='undefined' && template.events != null) { $addHandlers(elt, template.events); } // if the element is visible or not its visibility is set if (typeof(template.visible)!=='undefined' && template.visible != null) { this.setVisible(elt, template.visible); } // if we have an appendToParent we will now append to it if (appendToParent) { appendToParent.appendChild(elt); } // if we have opacity, apply it if (typeof(template.opacity)!=='undefined' && template.opacity != null) { $common.setElementOpacity(elt, template.opacity); } // if we have child templates, process them if (typeof(template.children)!=='undefined' && template.children != null) { for (var i = 0; i < template.children.length; i++) { var subtemplate = template.children[i]; $common.createElementFromTemplate(subtemplate, elt, nameTable); } } // if we have a content presenter for the element get it (the element itself is the default presenter for content) var contentPresenter = elt; if (typeof(template.contentPresenter)!=='undefined' && template.contentPresenter != null) { contentPresenter = nameTable[contentPresenter]; } // if we have content, add it if (typeof(template.content)!=='undefined' && template.content != null) { var content = template.content; if (String.isInstanceOfType(content)) { content = nameTable[content]; } if (content.parentNode) { $common.wrapElement(content, elt, contentPresenter); } else { contentPresenter.appendChild(content); } } // return the created element return elt; }, prepareHiddenElementForATDeviceUpdate : function () { /// /// JAWS, an Assistive Technology device responds to updates to form elements /// and refreshes its document buffer to what is showing live /// in the browser. To ensure that Toolkit controls that make XmlHttpRequests to /// retrieve content are useful to users with visual disabilities, we update a /// hidden form element to ensure that JAWS conveys what is in /// the browser. See this article for more details: /// http://juicystudio.com/article/improving-ajax-applications-for-jaws-users.php /// This method creates a hidden input on the screen for any page that uses a Toolkit /// control that will perform an XmlHttpRequest. /// var objHidden = document.getElementById('hiddenInputToUpdateATBuffer_CommonToolkitScripts'); if (!objHidden) { var objHidden = document.createElement('input'); objHidden.setAttribute('type', 'hidden'); objHidden.setAttribute('value', '1'); objHidden.setAttribute('id', 'hiddenInputToUpdateATBuffer_CommonToolkitScripts'); objHidden.setAttribute('name', 'hiddenInputToUpdateATBuffer_CommonToolkitScripts'); if ( document.forms[0] ) { document.forms[0].appendChild(objHidden); } } }, updateFormToRefreshATDeviceBuffer : function () { /// /// Updates the hidden buffer to ensure that the latest document stream is picked up /// by the screen reader. /// var objHidden = document.getElementById('hiddenInputToUpdateATBuffer_CommonToolkitScripts'); if (objHidden) { if (objHidden.getAttribute('value') == '1') { objHidden.setAttribute('value', '0'); } else { objHidden.setAttribute('value', '1'); } } } } // Create the singleton instance of the CommonToolkitScripts var CommonToolkitScripts = AjaxControlToolkit.CommonToolkitScripts = new AjaxControlToolkit._CommonToolkitScripts(); var $common = CommonToolkitScripts; // Alias functions that were moved from BlockingScripts into Common Sys.UI.DomElement.getVisible = $common.getVisible; Sys.UI.DomElement.setVisible = $common.setVisible; Sys.UI.Control.overlaps = $common.overlaps; AjaxControlToolkit._DomUtility = function() { /// /// Utility functions for manipulating the DOM /// } AjaxControlToolkit._DomUtility.prototype = { isDescendant : function(ancestor, descendant) { /// /// Whether the specified element is a descendant of the ancestor /// /// Ancestor node /// Possible descendant node /// for (var n = descendant.parentNode; n != null; n = n.parentNode) { if (n == ancestor) return true; } return false; }, isDescendantOrSelf : function(ancestor, descendant) { /// /// Whether the specified element is a descendant of the ancestor or the same as the ancestor /// /// Ancestor node /// Possible descendant node /// if (ancestor === descendant) return true; return AjaxControlToolkit.DomUtility.isDescendant(ancestor, descendant); }, isAncestor : function(descendant, ancestor) { /// /// Whether the specified element is an ancestor of the descendant /// /// Descendant node /// Possible ancestor node /// return AjaxControlToolkit.DomUtility.isDescendant(ancestor, descendant); }, isAncestorOrSelf : function(descendant, ancestor) { /// /// Whether the specified element is an ancestor of the descendant or the same as the descendant /// /// Descendant node /// Possible ancestor node /// if (descendant === ancestor) return true; return AjaxControlToolkit.DomUtility.isDescendant(ancestor, descendant); }, isSibling : function(self, sibling) { /// /// Whether the specified element is a sibling of the self element /// /// Self node /// Possible sibling node /// var parent = self.parentNode; for (var i = 0; i < parent.childNodes.length; i++) { if (parent.childNodes[i] == sibling) return true; } return false; } } AjaxControlToolkit._DomUtility.registerClass("AjaxControlToolkit._DomUtility"); AjaxControlToolkit.DomUtility = new AjaxControlToolkit._DomUtility(); AjaxControlToolkit.TextBoxWrapper = function(element) { /// /// Class that wraps a TextBox (INPUT type="text") to abstract-out the /// presence of a watermark (which may be visible to the user but which /// should never be read by script. /// /// /// The DOM element the behavior is associated with /// AjaxControlToolkit.TextBoxWrapper.initializeBase(this, [element]); this._current = element.value; this._watermark = null; this._isWatermarked = false; } AjaxControlToolkit.TextBoxWrapper.prototype = { dispose : function() { /// /// Dispose the behavior /// this.get_element().AjaxControlToolkitTextBoxWrapper = null; AjaxControlToolkit.TextBoxWrapper.callBaseMethod(this, 'dispose'); }, get_Current : function() { /// /// Current value actually in the TextBox (i.e., TextBox.value) /// this._current = this.get_element().value; return this._current; }, set_Current : function(value) { this._current = value; this._updateElement(); }, get_Value : function() { /// /// Conceptual "value" of the TextBox - its contents if no watermark is present /// or "" if one is /// if (this.get_IsWatermarked()) { return ""; } else { return this.get_Current(); } }, set_Value : function(text) { this.set_Current(text); if (!text || (0 == text.length)) { if (null != this._watermark) { this.set_IsWatermarked(true); } } else { this.set_IsWatermarked(false); } }, get_Watermark : function() { /// /// Text of the watermark for the TextBox /// return this._watermark; }, set_Watermark : function(value) { this._watermark = value; this._updateElement(); }, get_IsWatermarked : function() { /// /// true iff the TextBox is watermarked /// return this._isWatermarked; }, set_IsWatermarked : function(isWatermarked) { if (this._isWatermarked != isWatermarked) { this._isWatermarked = isWatermarked; this._updateElement(); this._raiseWatermarkChanged(); } }, _updateElement : function() { /// /// Updates the actual contents of the TextBox according to what should be there /// var element = this.get_element(); if (this._isWatermarked) { if (element.value != this._watermark) { element.value = this._watermark; } } else { if (element.value != this._current) { element.value = this._current; } } }, add_WatermarkChanged : function(handler) { /// /// Adds a handler for the WatermarkChanged event /// /// /// Handler /// this.get_events().addHandler("WatermarkChanged", handler); }, remove_WatermarkChanged : function(handler) { /// /// Removes a handler for the WatermarkChanged event /// /// /// Handler /// this.get_events().removeHandler("WatermarkChanged", handler); }, _raiseWatermarkChanged : function() { /// /// Raises the WatermarkChanged event /// var onWatermarkChangedHandler = this.get_events().getHandler("WatermarkChanged"); if (onWatermarkChangedHandler) { onWatermarkChangedHandler(this, Sys.EventArgs.Empty); } } } AjaxControlToolkit.TextBoxWrapper.get_Wrapper = function(element) { /// /// Gets (creating one if necessary) the TextBoxWrapper for the specified TextBox /// /// /// TextBox for which to get the wrapper /// /// /// TextBoxWrapper instance /// if (null == element.AjaxControlToolkitTextBoxWrapper) { element.AjaxControlToolkitTextBoxWrapper = new AjaxControlToolkit.TextBoxWrapper(element); } return element.AjaxControlToolkitTextBoxWrapper; } AjaxControlToolkit.TextBoxWrapper.registerClass('AjaxControlToolkit.TextBoxWrapper', Sys.UI.Behavior); AjaxControlToolkit.TextBoxWrapper.validatorGetValue = function(id) { /// /// Wrapper for ASP.NET's validatorGetValue to return the value from the wrapper if present /// /// /// id of the element /// /// /// Value from the wrapper or result of original ValidatorGetValue /// var control = $get(id); if (control && control.AjaxControlToolkitTextBoxWrapper) { return control.AjaxControlToolkitTextBoxWrapper.get_Value(); } return AjaxControlToolkit.TextBoxWrapper._originalValidatorGetValue(id); } // Wrap ASP.NET's ValidatorGetValue with AjaxControlToolkit.TextBoxWrapper.validatorGetValue // to make validators work properly with watermarked TextBoxes if (typeof(ValidatorGetValue) == 'function') { AjaxControlToolkit.TextBoxWrapper._originalValidatorGetValue = ValidatorGetValue; ValidatorGetValue = AjaxControlToolkit.TextBoxWrapper.validatorGetValue; } // Temporary fix null reference bug in Sys.CultureInfo._getAbbrMonthIndex if (Sys.CultureInfo.prototype._getAbbrMonthIndex) { try { Sys.CultureInfo.prototype._getAbbrMonthIndex(''); } catch(ex) { Sys.CultureInfo.prototype._getAbbrMonthIndex = function(value) { if (!this._upperAbbrMonths) { this._upperAbbrMonths = this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames); } return Array.indexOf(this._upperAbbrMonths, this._toUpper(value)); } Sys.CultureInfo.CurrentCulture._getAbbrMonthIndex = Sys.CultureInfo.prototype._getAbbrMonthIndex; Sys.CultureInfo.InvariantCulture._getAbbrMonthIndex = Sys.CultureInfo.prototype._getAbbrMonthIndex; } } // (c) Copyright Microsoft Corporation. // This source is subject to the Microsoft Permissive License. // See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx. // All other rights reserved. /// /// /// Type.registerNamespace('AjaxControlToolkit'); // This is the base behavior for all extender behaviors AjaxControlToolkit.BehaviorBase = function(element) { /// /// Base behavior for all extender behaviors /// /// /// Element the behavior is associated with /// AjaxControlToolkit.BehaviorBase.initializeBase(this,[element]); this._clientStateFieldID = null; this._pageRequestManager = null; this._partialUpdateBeginRequestHandler = null; this._partialUpdateEndRequestHandler = null; } AjaxControlToolkit.BehaviorBase.prototype = { initialize : function() { /// /// Initialize the behavior /// // TODO: Evaluate necessity AjaxControlToolkit.BehaviorBase.callBaseMethod(this, 'initialize'); }, dispose : function() { /// /// Dispose the behavior /// AjaxControlToolkit.BehaviorBase.callBaseMethod(this, 'dispose'); if (this._pageRequestManager) { if (this._partialUpdateBeginRequestHandler) { this._pageRequestManager.remove_beginRequest(this._partialUpdateBeginRequestHandler); this._partialUpdateBeginRequestHandler = null; } if (this._partialUpdateEndRequestHandler) { this._pageRequestManager.remove_endRequest(this._partialUpdateEndRequestHandler); this._partialUpdateEndRequestHandler = null; } this._pageRequestManager = null; } }, get_ClientStateFieldID : function() { /// /// ID of the hidden field used to store client state /// return this._clientStateFieldID; }, set_ClientStateFieldID : function(value) { if (this._clientStateFieldID != value) { this._clientStateFieldID = value; this.raisePropertyChanged('ClientStateFieldID'); } }, get_ClientState : function() { /// /// Client state /// if (this._clientStateFieldID) { var input = document.getElementById(this._clientStateFieldID); if (input) { return input.value; } } return null; }, set_ClientState : function(value) { if (this._clientStateFieldID) { var input = document.getElementById(this._clientStateFieldID); if (input) { input.value = value; } } }, registerPartialUpdateEvents : function() { /// /// Register for beginRequest and endRequest events on the PageRequestManager, /// (which cause _partialUpdateBeginRequest and _partialUpdateEndRequest to be /// called when an UpdatePanel refreshes) /// if (Sys && Sys.WebForms && Sys.WebForms.PageRequestManager){ this._pageRequestManager = Sys.WebForms.PageRequestManager.getInstance(); if (this._pageRequestManager) { this._partialUpdateBeginRequestHandler = Function.createDelegate(this, this._partialUpdateBeginRequest); this._pageRequestManager.add_beginRequest(this._partialUpdateBeginRequestHandler); this._partialUpdateEndRequestHandler = Function.createDelegate(this, this._partialUpdateEndRequest); this._pageRequestManager.add_endRequest(this._partialUpdateEndRequestHandler); } } }, _partialUpdateBeginRequest : function(sender, beginRequestEventArgs) { /// /// Method that will be called when a partial update (via an UpdatePanel) begins, /// if registerPartialUpdateEvents() has been called. /// /// /// Sender /// /// /// Event arguments /// // Nothing done here; override this method in a child class }, _partialUpdateEndRequest : function(sender, endRequestEventArgs) { /// /// Method that will be called when a partial update (via an UpdatePanel) finishes, /// if registerPartialUpdateEvents() has been called. /// /// /// Sender /// /// /// Event arguments /// // Nothing done here; override this method in a child class } } AjaxControlToolkit.BehaviorBase.registerClass('AjaxControlToolkit.BehaviorBase', Sys.UI.Behavior); // Dynamically populates content when the populate method is called AjaxControlToolkit.DynamicPopulateBehaviorBase = function(element) { /// /// DynamicPopulateBehaviorBase is used to add DynamicPopulateBehavior funcitonality /// to other extenders. It will dynamically populate the contents of the target element /// when its populate method is called. /// /// /// DOM Element the behavior is associated with /// AjaxControlToolkit.DynamicPopulateBehaviorBase.initializeBase(this, [element]); this._DynamicControlID = null; this._DynamicContextKey = null; this._DynamicServicePath = null; this._DynamicServiceMethod = null; this._cacheDynamicResults = false; this._dynamicPopulateBehavior = null; this._populatingHandler = null; this._populatedHandler = null; } AjaxControlToolkit.DynamicPopulateBehaviorBase.prototype = { initialize : function() { /// /// Initialize the behavior /// AjaxControlToolkit.DynamicPopulateBehaviorBase.callBaseMethod(this, 'initialize'); // Create event handlers this._populatingHandler = Function.createDelegate(this, this._onPopulating); this._populatedHandler = Function.createDelegate(this, this._onPopulated); }, dispose : function() { /// /// Dispose the behavior /// // Dispose of event handlers if (this._populatedHandler) { if (this._dynamicPopulateBehavior) { this._dynamicPopulateBehavior.remove_populated(this._populatedHandler); } this._populatedHandler = null; } if (this._populatingHandler) { if (this._dynamicPopulateBehavior) { this._dynamicPopulateBehavior.remove_populating(this._populatingHandler); } this._populatingHandler = null; } // Dispose of the placeholder control and behavior if (this._dynamicPopulateBehavior) { this._dynamicPopulateBehavior.dispose(); this._dynamicPopulateBehavior = null; } AjaxControlToolkit.DynamicPopulateBehaviorBase.callBaseMethod(this, 'dispose'); }, populate : function(contextKeyOverride) { /// /// Demand-create the DynamicPopulateBehavior and use it to populate the target element /// /// /// An arbitrary string value to be passed to the web method. For example, if the element to be populated is within a data-bound repeater, this could be the ID of the current row. /// // If the DynamicPopulateBehavior's element is out of date, dispose of it if (this._dynamicPopulateBehavior && (this._dynamicPopulateBehavior.get_element() != $get(this._DynamicControlID))) { this._dynamicPopulateBehavior.dispose(); this._dynamicPopulateBehavior = null; } // If a DynamicPopulateBehavior is not available and the necessary information is, create one if (!this._dynamicPopulateBehavior && this._DynamicControlID && this._DynamicServiceMethod) { this._dynamicPopulateBehavior = $create(AjaxControlToolkit.DynamicPopulateBehavior, { "id" : this.get_id() + "_DynamicPopulateBehavior", "ContextKey" : this._DynamicContextKey, "ServicePath" : this._DynamicServicePath, "ServiceMethod" : this._DynamicServiceMethod, "cacheDynamicResults" : this._cacheDynamicResults }, null, null, $get(this._DynamicControlID)); // Attach event handlers this._dynamicPopulateBehavior.add_populating(this._populatingHandler); this._dynamicPopulateBehavior.add_populated(this._populatedHandler); } // If a DynamicPopulateBehavior is available, use it to populate the dynamic content if (this._dynamicPopulateBehavior) { this._dynamicPopulateBehavior.populate(contextKeyOverride ? contextKeyOverride : this._DynamicContextKey); } }, _onPopulating : function(sender, eventArgs) { /// /// Handler for DynamicPopulate behavior's Populating event /// /// /// DynamicPopulate behavior /// /// /// Event args /// this.raisePopulating(eventArgs); }, _onPopulated : function(sender, eventArgs) { /// /// Handler for DynamicPopulate behavior's Populated event /// /// /// DynamicPopulate behavior /// /// /// Event args /// this.raisePopulated(eventArgs); }, get_dynamicControlID : function() { /// /// ID of the element to populate with dynamic content /// return this._DynamicControlID; }, get_DynamicControlID : this.get_dynamicControlID, set_dynamicControlID : function(value) { if (this._DynamicControlID != value) { this._DynamicControlID = value; this.raisePropertyChanged('dynamicControlID'); this.raisePropertyChanged('DynamicControlID'); } }, set_DynamicControlID : this.set_dynamicControlID, get_dynamicContextKey : function() { /// /// An arbitrary string value to be passed to the web method. /// For example, if the element to be populated is within a /// data-bound repeater, this could be the ID of the current row. /// return this._DynamicContextKey; }, get_DynamicContextKey : this.get_dynamicContextKey, set_dynamicContextKey : function(value) { if (this._DynamicContextKey != value) { this._DynamicContextKey = value; this.raisePropertyChanged('dynamicContextKey'); this.raisePropertyChanged('DynamicContextKey'); } }, set_DynamicContextKey : this.set_dynamicContextKey, get_dynamicServicePath : function() { /// /// The URL of the web service to call. If the ServicePath is not defined, then we will invoke a PageMethod instead of a web service. /// return this._DynamicServicePath; }, get_DynamicServicePath : this.get_dynamicServicePath, set_dynamicServicePath : function(value) { if (this._DynamicServicePath != value) { this._DynamicServicePath = value; this.raisePropertyChanged('dynamicServicePath'); this.raisePropertyChanged('DynamicServicePath'); } }, set_DynamicServicePath : this.set_dynamicServicePath, get_dynamicServiceMethod : function() { /// /// The name of the method to call on the page or web service /// /// /// The signature of the method must exactly match the following: /// [WebMethod] /// string DynamicPopulateMethod(string contextKey) /// { /// ... /// } /// return this._DynamicServiceMethod; }, get_DynamicServiceMethod : this.get_dynamicServiceMethod, set_dynamicServiceMethod : function(value) { if (this._DynamicServiceMethod != value) { this._DynamicServiceMethod = value; this.raisePropertyChanged('dynamicServiceMethod'); this.raisePropertyChanged('DynamicServiceMethod'); } }, set_DynamicServiceMethod : this.set_dynamicServiceMethod, get_cacheDynamicResults : function() { /// /// Whether the results of the dynamic population should be cached and /// not fetched again after the first load /// return this._cacheDynamicResults; }, set_cacheDynamicResults : function(value) { if (this._cacheDynamicResults != value) { this._cacheDynamicResults = value; this.raisePropertyChanged('cacheDynamicResults'); } }, add_populated : function(handler) { /// /// Add a handler on the populated event /// /// /// Handler /// this.get_events().addHandler("populated", handler); }, remove_populated : function(handler) { /// /// Remove a handler from the populated event /// /// /// Handler /// this.get_events().removeHandler("populated", handler); }, raisePopulated : function(arg) { /// /// Raise the populated event /// /// /// Event arguments /// var handler = this.get_events().getHandler("populated"); if (handler) handler(this, arg); }, add_populating : function(handler) { /// /// Add an event handler for the populating event /// /// /// Event handler /// /// this.get_events().addHandler('populating', handler); }, remove_populating : function(handler) { /// /// Remove an event handler from the populating event /// /// /// Event handler /// /// this.get_events().removeHandler('populating', handler); }, raisePopulating : function(eventArgs) { /// /// Raise the populating event /// /// /// Event arguments for the populating event /// /// var handler = this.get_events().getHandler('populating'); if (handler) { handler(this, eventArgs); } } } AjaxControlToolkit.DynamicPopulateBehaviorBase.registerClass('AjaxControlToolkit.DynamicPopulateBehaviorBase', AjaxControlToolkit.BehaviorBase); AjaxControlToolkit.ControlBase = function(element) { AjaxControlToolkit.ControlBase.initializeBase(this, [element]); this._clientStateField = null; this._callbackTarget = null; this._onsubmit$delegate = Function.createDelegate(this, this._onsubmit); this._oncomplete$delegate = Function.createDelegate(this, this._oncomplete); this._onerror$delegate = Function.createDelegate(this, this._onerror); } AjaxControlToolkit.ControlBase.prototype = { initialize : function() { AjaxControlToolkit.ControlBase.callBaseMethod(this, "initialize"); // load the client state if possible if (this._clientStateField) { this.loadClientState(this._clientStateField.value); } // attach an event to save the client state before a postback or updatepanel partial postback if (typeof(Sys.WebForms)!=="undefined" && typeof(Sys.WebForms.PageRequestManager)!=="undefined") { Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, this._onsubmit$delegate); } else { $addHandler(document.forms[0], "submit", this._onsubmit$delegate); } }, dispose : function() { if (typeof(Sys.WebForms)!=="undefined" && typeof(Sys.WebForms.PageRequestManager)!=="undefined") { Array.remove(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, this._onsubmit$delegate); } else { $removeHandler(document.forms[0], "submit", this._onsubmit$delegate); } AjaxControlToolkit.ControlBase.callBaseMethod(this, "dispose"); }, findElement : function(id) { // Finds an element within this control (ScriptControl/ScriptUserControl are NamingContainers); return $get(this.get_id() + '_' + id.split(':').join('_')); }, get_clientStateField : function() { return this._clientStateField; }, set_clientStateField : function(value) { if (this.get_isInitialized()) throw Error.invalidOperation(AjaxControlToolkit.Resources.ExtenderBase_CannotSetClientStateField); if (this._clientStateField != value) { this._clientStateField = value; this.raisePropertyChanged('clientStateField'); } }, loadClientState : function(value) { /// override this method to intercept client state loading after a callback }, saveClientState : function() { /// override this method to intercept client state acquisition before a callback return null; }, _invoke : function(name, args, cb) { /// invokes a callback method on the server control if (!this._callbackTarget) { throw Error.invalidOperation(AjaxControlToolkit.Resources.ExtenderBase_ControlNotRegisteredForCallbacks); } if (typeof(WebForm_DoCallback)==="undefined") { throw Error.invalidOperation(AjaxControlToolkit.Resources.ExtenderBase_PageNotRegisteredForCallbacks); } var ar = []; for (var i = 0; i < args.length; i++) ar[i] = args[i]; var clientState = this.saveClientState(); if (clientState != null && !String.isInstanceOfType(clientState)) { throw Error.invalidOperation(AjaxControlToolkit.Resources.ExtenderBase_InvalidClientStateType); } var payload = Sys.Serialization.JavaScriptSerializer.serialize({name:name,args:ar,state:this.saveClientState()}); WebForm_DoCallback(this._callbackTarget, payload, this._oncomplete$delegate, cb, this._onerror$delegate, true); }, _oncomplete : function(result, context) { result = Sys.Serialization.JavaScriptSerializer.deserialize(result); if (result.error) { throw Error.create(result.error); } this.loadClientState(result.state); context(result.result); }, _onerror : function(message, context) { throw Error.create(message); }, _onsubmit : function() { if (this._clientStateField) { this._clientStateField.value = this.saveClientState(); } return true; } } AjaxControlToolkit.ControlBase.registerClass("AjaxControlToolkit.ControlBase", Sys.UI.Control); Type.registerNamespace('AjaxControlToolkit');AjaxControlToolkit.Resources={"PasswordStrength_InvalidWeightingRatios":"Strength Weighting ratios must have 4 elements","Animation_ChildrenNotAllowed":"AjaxControlToolkit.Animation.createAnimation cannot add child animations to type \"{0}\" that does not derive from AjaxControlToolkit.Animation.ParentAnimation","PasswordStrength_RemainingSymbols":"{0} symbol characters","ExtenderBase_CannotSetClientStateField":"clientStateField can only be set before initialization","RTE_PreviewHTML":"Preview HTML","RTE_JustifyCenter":"Justify Center","PasswordStrength_RemainingUpperCase":"{0} more upper case characters","Animation_TargetNotFound":"AjaxControlToolkit.Animation.Animation.set_animationTarget requires the ID of a Sys.UI.DomElement or Sys.UI.Control. No element or control could be found corresponding to \"{0}\"","RTE_FontColor":"Font Color","RTE_LabelColor":"Label Color","Common_InvalidBorderWidthUnit":"A unit type of \"{0}\"\u0027 is invalid for parseBorderWidth","RTE_Heading":"Heading","Tabs_PropertySetBeforeInitialization":"{0} cannot be changed before initialization","RTE_OrderedList":"Ordered List","ReorderList_DropWatcherBehavior_NoChild":"Could not find child of list with id \"{0}\"","CascadingDropDown_MethodTimeout":"[Method timeout]","RTE_Columns":"Columns","RTE_InsertImage":"Insert Image","RTE_InsertTable":"Insert Table","RTE_Values":"Values","RTE_OK":"OK","ExtenderBase_PageNotRegisteredForCallbacks":"This Page has not been registered for callbacks","Animation_NoDynamicPropertyFound":"AjaxControlToolkit.Animation.createAnimation found no property corresponding to \"{0}\" or \"{1}\"","Animation_InvalidBaseType":"AjaxControlToolkit.Animation.registerAnimation can only register types that inherit from AjaxControlToolkit.Animation.Animation","RTE_UnorderedList":"Unordered List","ResizableControlBehavior_InvalidHandler":"{0} handler not a function, function name, or function text","Animation_InvalidColor":"Color must be a 7-character hex representation (e.g. #246ACF), not \"{0}\"","RTE_CellColor":"Cell Color","PasswordStrength_RemainingMixedCase":"Mixed case characters","RTE_Italic":"Italic","CascadingDropDown_NoParentElement":"Failed to find parent element \"{0}\"","ValidatorCallout_DefaultErrorMessage":"This control is invalid","RTE_Indent":"Indent","ReorderList_DropWatcherBehavior_CallbackError":"Reorder failed, see details below.\\r\\n\\r\\n{0}","PopupControl_NoDefaultProperty":"No default property supported for control \"{0}\" of type \"{1}\"","RTE_Normal":"Normal","PopupExtender_NoParentElement":"Couldn\u0027t find parent element \"{0}\"","RTE_ViewValues":"View Values","RTE_Legend":"Legend","RTE_Labels":"Labels","RTE_CellSpacing":"Cell Spacing","PasswordStrength_RemainingNumbers":"{0} more numbers","RTE_Border":"Border","RTE_Create":"Create","RTE_BackgroundColor":"Background Color","RTE_Cancel":"Cancel","RTE_JustifyFull":"Justify Full","RTE_JustifyLeft":"Justify Left","RTE_Cut":"Cut","ResizableControlBehavior_CannotChangeProperty":"Changes to {0} not supported","RTE_ViewSource":"View Source","Common_InvalidPaddingUnit":"A unit type of \"{0}\" is invalid for parsePadding","RTE_Paste":"Paste","ExtenderBase_ControlNotRegisteredForCallbacks":"This Control has not been registered for callbacks","Calendar_Today":"Today: {0}","MultiHandleSlider_CssHeightWidthRequired":"You must specify a CSS width and height for all handle styles as well as the rail.","Common_DateTime_InvalidFormat":"Invalid format","ListSearch_DefaultPrompt":"Type to search","CollapsiblePanel_NoControlID":"Failed to find element \"{0}\"","RTE_ViewEditor":"View Editor","RTE_BarColor":"Bar Color","PasswordStrength_DefaultStrengthDescriptions":"NonExistent;Very Weak;Weak;Poor;Almost OK;Barely Acceptable;Average;Good;Strong;Excellent;Unbreakable!","RTE_Inserttexthere":"Insert text here","Animation_UknownAnimationName":"AjaxControlToolkit.Animation.createAnimation could not find an Animation corresponding to the name \"{0}\"","ExtenderBase_InvalidClientStateType":"saveClientState must return a value of type String","Rating_CallbackError":"An unhandled exception has occurred:\\r\\n{0}","Tabs_OwnerExpected":"owner must be set before initialize","DynamicPopulate_WebServiceTimeout":"Web service call timed out","PasswordStrength_RemainingLowerCase":"{0} more lower case characters","Animation_MissingAnimationName":"AjaxControlToolkit.Animation.createAnimation requires an object with an AnimationName property","RTE_JustifyRight":"Justify Right","Tabs_ActiveTabArgumentOutOfRange":"Argument is not a member of the tabs collection","RTE_CellPadding":"Cell Padding","RTE_ClearFormatting":"Clear Formatting","AlwaysVisible_ElementRequired":"AjaxControlToolkit.AlwaysVisibleControlBehavior must have an element","Slider_NoSizeProvided":"Please set valid values for the height and width attributes in the slider\u0027s CSS classes","DynamicPopulate_WebServiceError":"Web Service call failed: {0}","PasswordStrength_StrengthPrompt":"Strength: ","PasswordStrength_RemainingCharacters":"{0} more characters","PasswordStrength_Satisfied":"Nothing more required","RTE_Hyperlink":"Hyperlink","Animation_NoPropertyFound":"AjaxControlToolkit.Animation.createAnimation found no property corresponding to \"{0}\"","PasswordStrength_InvalidStrengthDescriptionStyles":"Text Strength description style classes must match the number of text descriptions.","PasswordStrength_GetHelpRequirements":"Get help on password requirements","PasswordStrength_InvalidStrengthDescriptions":"Invalid number of text strength descriptions specified","RTE_Underline":"Underline","Tabs_PropertySetAfterInitialization":"{0} cannot be changed after initialization","RTE_Rows":"Rows","RTE_Redo":"Redo","RTE_Size":"Size","RTE_Undo":"Undo","RTE_Bold":"Bold","RTE_Copy":"Copy","RTE_Font":"Font","CascadingDropDown_MethodError":"[Method error {0}]","RTE_BorderColor":"Border Color","RTE_Paragraph":"Paragraph","RTE_InsertHorizontalRule":"Insert Horizontal Rule","Common_UnitHasNoDigits":"No digits","RTE_Outdent":"Outdent","Common_DateTime_InvalidTimeSpan":"\"{0}\" is not a valid TimeSpan format","Animation_CannotNestSequence":"AjaxControlToolkit.Animation.SequenceAnimation cannot be nested inside AjaxControlToolkit.Animation.ParallelAnimation","Shared_BrowserSecurityPreventsPaste":"Your browser security settings don\u0027t permit the automatic execution of paste operations. Please use the keyboard shortcut Ctrl+V instead."}; // (c) Copyright Microsoft Corporation. // This source is subject to the Microsoft Permissive License. // See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx. // All other rights reserved. /// /// /// /// /// Type.registerNamespace('AjaxControlToolkit'); AjaxControlToolkit.DynamicPopulateBehavior = function(element) { /// /// The DynamicPopulateBehavior replaces the contents of an element with the result of a web service or page method call. The method call returns a string of HTML that is inserted as the children of the target element. /// /// /// DOM Element the behavior is associated with /// AjaxControlToolkit.DynamicPopulateBehavior.initializeBase(this, [element]); this._servicePath = null; this._serviceMethod = null; this._contextKey = null; this._cacheDynamicResults = false; this._populateTriggerID = null; this._setUpdatingCssClass = null; this._clearDuringUpdate = true; this._customScript = null; this._clickHandler = null; this._callID = 0; this._currentCallID = -1; // Whether or not we've already populated (used for cacheDynamicResults) this._populated = false; } AjaxControlToolkit.DynamicPopulateBehavior.prototype = { initialize : function() { /// /// Initialize the behavior /// AjaxControlToolkit.DynamicPopulateBehavior.callBaseMethod(this, 'initialize'); $common.prepareHiddenElementForATDeviceUpdate(); // hook up the trigger if we have one. if (this._populateTriggerID) { var populateTrigger = $get(this._populateTriggerID); if (populateTrigger) { this._clickHandler = Function.createDelegate(this, this._onPopulateTriggerClick); $addHandler(populateTrigger, "click", this._clickHandler); } } }, dispose : function() { /// /// Dispose the behavior /// // clean up the trigger event. if (this._populateTriggerID && this._clickHandler) { var populateTrigger = $get(this._populateTriggerID); if (populateTrigger) { $removeHandler(populateTrigger, "click", this._clickHandler); } this._populateTriggerID = null; this._clickHandler = null; } AjaxControlToolkit.DynamicPopulateBehavior.callBaseMethod(this, 'dispose'); }, populate : function(contextKey) { /// /// Get the dymanic content and use it to populate the target element /// /// /// An arbitrary string value to be passed to the web method. For example, if the element to be /// populated is within a data-bound repeater, this could be the ID of the current row. /// // Don't populate if we already cached the results if (this._populated && this._cacheDynamicResults) { return; } // Initialize the population if this is the very first call if (this._currentCallID == -1) { var eventArgs = new Sys.CancelEventArgs(); this.raisePopulating(eventArgs); if (eventArgs.get_cancel()) { return; } this._setUpdating(true); } // Either run the custom population script or invoke the web service if (this._customScript) { // Call custom javascript call to populate control var scriptResult = eval(this._customScript); this._setTargetHtml(scriptResult); this._setUpdating(false); } else { this._currentCallID = ++this._callID; if (this._servicePath && this._serviceMethod) { Sys.Net.WebServiceProxy.invoke(this._servicePath, this._serviceMethod, false, { contextKey:(contextKey ? contextKey : this._contextKey) }, Function.createDelegate(this, this._onMethodComplete), Function.createDelegate(this, this._onMethodError), this._currentCallID); $common.updateFormToRefreshATDeviceBuffer(); } } }, _onMethodComplete : function (result, userContext, methodName) { /// /// Callback used when the populating service returns successfully /// /// /// The data returned from the Web service method call /// /// /// The context information that was passed when the Web service method was invoked /// /// /// The Web service method that was invoked /// // ignore if it's not the current call. if (userContext != this._currentCallID) return; this._setTargetHtml(result); this._setUpdating(false); }, _onMethodError : function(webServiceError, userContext, methodName) { /// /// Callback used when the populating service fails /// /// /// Web service error /// /// /// The context information that was passed when the Web service method was invoked /// /// /// The Web service method that was invoked /// // ignore if it's not the current call. if (userContext != this._currentCallID) return; if (webServiceError.get_timedOut()) { this._setTargetHtml(AjaxControlToolkit.Resources.DynamicPopulate_WebServiceTimeout); } else { this._setTargetHtml(String.format(AjaxControlToolkit.Resources.DynamicPopulate_WebServiceError, webServiceError.get_statusCode())); } this._setUpdating(false); }, _onPopulateTriggerClick : function() { /// /// Handler for the element described by PopulateTriggerID's click event /// // just call through to the trigger. this.populate(this._contextKey); }, _setUpdating : function(updating) { /// /// Toggle the display elements to indicate if they are being updated or not /// /// /// Whether or not the display should indicated it is being updated /// this.setStyle(updating); if (!updating) { this._currentCallID = -1; this._populated = true; this.raisePopulated(this, Sys.EventArgs.Empty); } }, _setTargetHtml : function(value) { /// /// Populate the target element with the given value /// /// /// The data to populate the target element. /// // Make sure the element is still accessible var e = this.get_element() if (e) { // Use value for input elements; otherwise innerHTML if (e.tagName == "INPUT") { e.value = value; } else { e.innerHTML = value; } } }, setStyle : function(updating) { /// /// Set the style of the display /// /// /// Whether or not the display is being updated /// var e = this.get_element(); if (this._setUpdatingCssClass) { if (!updating) { e.className = this._oldCss; this._oldCss = null; } else { this._oldCss = e.className; e.className = this._setUpdatingCssClass; } } if (updating && this._clearDuringUpdate) { this._setTargetHtml(""); } }, get_ClearContentsDuringUpdate : function() { /// /// Whether the contents of the target should be cleared when an update begins /// return this._clearDuringUpdate; }, set_ClearContentsDuringUpdate : function(value) { if (this._clearDuringUpdate != value) { this._clearDuringUpdate = value; this.raisePropertyChanged('ClearContentsDuringUpdate'); } }, get_ContextKey : function() { /// /// An arbitrary string value to be passed to the web method. /// For example, if the element to be populated is within a /// data-bound repeater, this could be the ID of the current row. /// return this._contextKey; }, set_ContextKey : function(value) { if (this._contextKey != value) { this._contextKey = value; this.raisePropertyChanged('ContextKey'); } }, get_PopulateTriggerID : function() { /// /// Name of an element that triggers the population of the target when clicked /// return this._populateTriggerID; }, set_PopulateTriggerID : function(value) { if (this._populateTriggerID != value) { this._populateTriggerID = value; this.raisePropertyChanged('PopulateTriggerID'); } }, get_ServicePath : function() { /// /// The URL of the web service to call. If the ServicePath is not defined, then we will invoke a PageMethod instead of a web service. /// return this._servicePath; }, set_ServicePath : function(value) { if (this._servicePath != value) { this._servicePath = value; this.raisePropertyChanged('ServicePath'); } }, get_ServiceMethod : function() { /// /// The name of the method to call on the page or web service /// /// /// The signature of the method must exactly match the following: /// [WebMethod] /// string DynamicPopulateMethod(string contextKey) /// { /// ... /// } /// return this._serviceMethod; }, set_ServiceMethod : function(value) { if (this._serviceMethod != value) { this._serviceMethod = value; this.raisePropertyChanged('ServiceMethod'); } }, get_cacheDynamicResults : function() { /// /// Whether the results of the dynamic population should be cached and /// not fetched again after the first load /// return this._cacheDynamicResults; }, set_cacheDynamicResults : function(value) { if (this._cacheDynamicResults != value) { this._cacheDynamicResults = value; this.raisePropertyChanged('cacheDynamicResults'); } }, get_UpdatingCssClass : function() { /// /// The CSS class to apply to the target during asynchronous calls /// return this._setUpdatingCssClass; }, set_UpdatingCssClass : function(value) { if (this._setUpdatingCssClass != value) { this._setUpdatingCssClass = value; this.raisePropertyChanged('UpdatingCssClass'); } }, get_CustomScript : function() { /// /// The script to invoke instead of calling a Web or Page method. This script must evaluate to a string value. /// return this._customScript; }, set_CustomScript : function(value) { if (this._customScript != value) { this._customScript = value; this.raisePropertyChanged('CustomScript'); } }, add_populating : function(handler) { /// /// Add an event handler for the populating event /// /// /// Event handler /// /// this.get_events().addHandler('populating', handler); }, remove_populating : function(handler) { /// /// Remove an event handler from the populating event /// /// /// Event handler /// /// this.get_events().removeHandler('populating', handler); }, raisePopulating : function(eventArgs) { /// /// Raise the populating event /// /// /// Event arguments for the populating event /// /// var handler = this.get_events().getHandler('populating'); if (handler) { handler(this, eventArgs); } }, add_populated : function(handler) { /// /// Add an event handler for the populated event /// /// /// Event handler /// /// this.get_events().addHandler('populated', handler); }, remove_populated : function(handler) { /// /// Remove an event handler from the populated event /// /// /// Event handler /// /// this.get_events().removeHandler('populated', handler); }, raisePopulated : function(eventArgs) { /// /// Raise the populated event /// /// /// Event arguments for the populated event /// /// var handler = this.get_events().getHandler('populated'); if (handler) { handler(this, eventArgs); } } } AjaxControlToolkit.DynamicPopulateBehavior.registerClass('AjaxControlToolkit.DynamicPopulateBehavior', AjaxControlToolkit.BehaviorBase); // (c) Copyright Microsoft Corporation. // This source is subject to the Microsoft Permissive License. // See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx. // All other rights reserved. /// /// /// /////////////////////////////////////////////////////////////////////////////// // Sys.Timer Sys.Timer = function() { Sys.Timer.initializeBase(this); this._interval = 1000; this._enabled = false; this._timer = null; } Sys.Timer.prototype = { get_interval: function() { return this._interval; }, set_interval: function(value) { if (this._interval !== value) { this._interval = value; this.raisePropertyChanged('interval'); if (!this.get_isUpdating() && (this._timer !== null)) { this._stopTimer(); this._startTimer(); } } }, get_enabled: function() { return this._enabled; }, set_enabled: function(value) { if (value !== this.get_enabled()) { this._enabled = value; this.raisePropertyChanged('enabled'); if (!this.get_isUpdating()) { if (value) { this._startTimer(); } else { this._stopTimer(); } } } }, add_tick: function(handler) { this.get_events().addHandler("tick", handler); }, remove_tick: function(handler) { this.get_events().removeHandler("tick", handler); }, dispose: function() { this.set_enabled(false); this._stopTimer(); Sys.Timer.callBaseMethod(this, 'dispose'); }, updated: function() { Sys.Timer.callBaseMethod(this, 'updated'); if (this._enabled) { this._stopTimer(); this._startTimer(); } }, _timerCallback: function() { var handler = this.get_events().getHandler("tick"); if (handler) { handler(this, Sys.EventArgs.Empty); } }, _startTimer: function() { this._timer = window.setInterval(Function.createDelegate(this, this._timerCallback), this._interval); }, _stopTimer: function() { window.clearInterval(this._timer); this._timer = null; } } Sys.Timer.descriptor = { properties: [ {name: 'interval', type: Number}, {name: 'enabled', type: Boolean} ], events: [ {name: 'tick'} ] } Sys.Timer.registerClass('Sys.Timer', Sys.Component); // (c) Copyright Microsoft Corporation. // This source is subject to the Microsoft Permissive License. // See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx. // All other rights reserved. /// /// /// /// /// /////////////////////////////////////////////////////////////////////////////// // IDropSource Type.registerNamespace('AjaxControlToolkit'); AjaxControlToolkit.IDragSource = function() { } AjaxControlToolkit.IDragSource.prototype = { // Type get_dragDataType() get_dragDataType: function() { throw Error.notImplemented(); }, // Object getDragData(Context) getDragData: function() { throw Error.notImplemented(); }, // DragMode get_dragMode() get_dragMode: function() { throw Error.notImplemented(); }, // void onDragStart() onDragStart: function() { throw Error.notImplemented(); }, // void onDrag() onDrag: function() { throw Error.notImplemented(); }, // void onDragEnd(Cancelled) onDragEnd: function() { throw Error.notImplemented(); } } AjaxControlToolkit.IDragSource.registerInterface('AjaxControlToolkit.IDragSource'); /////////////////////////////////////////////////////////////////////////////// // IDropTarget AjaxControlToolkit.IDropTarget = function() { } AjaxControlToolkit.IDropTarget.prototype = { get_dropTargetElement: function() { throw Error.notImplemented(); }, // bool canDrop(DragMode, DataType, Data) canDrop: function() { throw Error.notImplemented(); }, // void drop(DragMode, DataType, Data) drop: function() { throw Error.notImplemented(); }, // void onDragEnterTarget(DragMode, DataType, Data) onDragEnterTarget: function() { throw Error.notImplemented(); }, // void onDragLeaveTarget(DragMode, DataType, Data) onDragLeaveTarget: function() { throw Error.notImplemented(); }, // void onDragInTarget(DragMode, DataType, Data) onDragInTarget: function() { throw Error.notImplemented(); } } AjaxControlToolkit.IDropTarget.registerInterface('AjaxControlToolkit.IDropTarget'); /////////////////////////////////////////////// // DragMode // AjaxControlToolkit.DragMode = function() { throw Error.invalidOperation(); } AjaxControlToolkit.DragMode.prototype = { Copy: 0, Move: 1 } AjaxControlToolkit.DragMode.registerEnum('AjaxControlToolkit.DragMode'); //////////////////////////////////////////////////////////////////// // DragDropEventArgs // AjaxControlToolkit.DragDropEventArgs = function(dragMode, dragDataType, dragData) { this._dragMode = dragMode; this._dataType = dragDataType; this._data = dragData; } AjaxControlToolkit.DragDropEventArgs.prototype = { get_dragMode: function() { return this._dragMode || null; }, get_dragDataType: function() { return this._dataType || null; }, get_dragData: function() { return this._data || null; } } AjaxControlToolkit.DragDropEventArgs.registerClass('AjaxControlToolkit.DragDropEventArgs'); AjaxControlToolkit._DragDropManager = function() { this._instance = null; this._events = null; } AjaxControlToolkit._DragDropManager.prototype = { add_dragStart: function(handler) { this.get_events().addHandler('dragStart', handler); }, remove_dragStart: function(handler) { this.get_events().removeHandler('dragStart', handler); }, get_events: function() { // todo: doc comments. this one is commented out (two //) due to a bug with the preprocessor. // // if (!this._events) { this._events = new Sys.EventHandlerList(); } return this._events; }, add_dragStop: function(handler) { this.get_events().addHandler('dragStop', handler); }, remove_dragStop: function(handler) { this.get_events().removeHandler('dragStop', handler); }, _getInstance: function() { if (!this._instance) { if (Sys.Browser.agent === Sys.Browser.InternetExplorer) { this._instance = new AjaxControlToolkit.IEDragDropManager(); } else { this._instance = new AjaxControlToolkit.GenericDragDropManager(); } this._instance.initialize(); this._instance.add_dragStart(Function.createDelegate(this, this._raiseDragStart)); this._instance.add_dragStop(Function.createDelegate(this, this._raiseDragStop)); } return this._instance; }, startDragDrop: function(dragSource, dragVisual, context) { this._getInstance().startDragDrop(dragSource, dragVisual, context); }, registerDropTarget: function(target) { this._getInstance().registerDropTarget(target); }, unregisterDropTarget: function(target) { this._getInstance().unregisterDropTarget(target); }, dispose: function() { delete this._events; Sys.Application.unregisterDisposableObject(this); Sys.Application.removeComponent(this); }, _raiseDragStart: function(sender, eventArgs) { var handler = this.get_events().getHandler('dragStart'); if(handler) { handler(this, eventArgs); } }, _raiseDragStop: function(sender, eventArgs) { var handler = this.get_events().getHandler('dragStop'); if(handler) { handler(this, eventArgs); } } } AjaxControlToolkit._DragDropManager.registerClass('AjaxControlToolkit._DragDropManager'); AjaxControlToolkit.DragDropManager = new AjaxControlToolkit._DragDropManager(); AjaxControlToolkit.IEDragDropManager = function() { AjaxControlToolkit.IEDragDropManager.initializeBase(this); this._dropTargets = null; // Radius of the cursor used to determine what drop target we // are hovering. Anything below the cursor's zone may be a // potential drop target. this._radius = 10; this._activeDragVisual = null; this._activeContext = null; this._activeDragSource = null; this._underlyingTarget = null; this._oldOffset = null; this._potentialTarget = null; this._isDragging = false; this._mouseUpHandler = null; this._documentMouseMoveHandler = null; this._documentDragOverHandler = null; this._dragStartHandler = null; this._mouseMoveHandler = null; this._dragEnterHandler = null; this._dragLeaveHandler = null; this._dragOverHandler = null; this._dropHandler = null; } AjaxControlToolkit.IEDragDropManager.prototype = { add_dragStart : function(handler) { this.get_events().addHandler("dragStart", handler); }, remove_dragStart : function(handler) { this.get_events().removeHandler("dragStart", handler); }, add_dragStop : function(handler) { this.get_events().addHandler("dragStop", handler); }, remove_dragStop : function(handler) { this.get_events().removeHandler("dragStop", handler); }, initialize : function() { AjaxControlToolkit.IEDragDropManager.callBaseMethod(this, 'initialize'); this._mouseUpHandler = Function.createDelegate(this, this._onMouseUp); this._documentMouseMoveHandler = Function.createDelegate(this, this._onDocumentMouseMove); this._documentDragOverHandler = Function.createDelegate(this, this._onDocumentDragOver); this._dragStartHandler = Function.createDelegate(this, this._onDragStart); this._mouseMoveHandler = Function.createDelegate(this, this._onMouseMove); this._dragEnterHandler = Function.createDelegate(this, this._onDragEnter); this._dragLeaveHandler = Function.createDelegate(this, this._onDragLeave); this._dragOverHandler = Function.createDelegate(this, this._onDragOver); this._dropHandler = Function.createDelegate(this, this._onDrop); }, dispose : function() { if(this._dropTargets) { for (var i = 0; i < this._dropTargets; i++) { this.unregisterDropTarget(this._dropTargets[i]); } this._dropTargets = null; } AjaxControlToolkit.IEDragDropManager.callBaseMethod(this, 'dispose'); }, startDragDrop : function(dragSource, dragVisual, context) { var ev = window._event; // Don't allow drag and drop if there is another active drag operation going on. if (this._isDragging) { return; } this._underlyingTarget = null; this._activeDragSource = dragSource; this._activeDragVisual = dragVisual; this._activeContext = context; var mousePosition = { x: ev.clientX, y: ev.clientY }; // By default we use absolute positioning, unless a different type // of positioning is set explicitly. dragVisual.originalPosition = dragVisual.style.position; dragVisual.style.position = "absolute"; document._lastPosition = mousePosition; dragVisual.startingPoint = mousePosition; var scrollOffset = this.getScrollOffset(dragVisual, /* recursive */ true); dragVisual.startingPoint = this.addPoints(dragVisual.startingPoint, scrollOffset); if (dragVisual.style.position == "absolute") { dragVisual.startingPoint = this.subtractPoints(dragVisual.startingPoint, $common.getLocation(dragVisual)); } else { var left = parseInt(dragVisual.style.left); var top = parseInt(dragVisual.style.top); if (isNaN(left)) left = "0"; if (isNaN(top)) top = "0"; dragVisual.startingPoint = this.subtractPoints(dragVisual.startingPoint, { x: left, y: top }); } // Monitor DOM changes. this._prepareForDomChanges(); dragSource.onDragStart(); var eventArgs = new AjaxControlToolkit.DragDropEventArgs( dragSource.get_dragMode(), dragSource.get_dragDataType(), dragSource.getDragData(context)); var handler = this.get_events().getHandler('dragStart'); if(handler) handler(this,eventArgs); this._recoverFromDomChanges(); this._wireEvents(); this._drag(/* isInitialDrag */ true); }, _stopDragDrop : function(cancelled) { var ev = window._event; if (this._activeDragSource != null) { this._unwireEvents(); if (!cancelled) { // The drag operation is cancelled if there // is no drop target. cancelled = (this._underlyingTarget == null); } if (!cancelled && this._underlyingTarget != null) { this._underlyingTarget.drop(this._activeDragSource.get_dragMode(), this._activeDragSource.get_dragDataType(), this._activeDragSource.getDragData(this._activeContext)); } this._activeDragSource.onDragEnd(cancelled); var handler = this.get_events().getHandler('dragStop'); if(handler) handler(this,Sys.EventArgs.Empty); this._activeDragVisual.style.position = this._activeDragVisual.originalPosition; this._activeDragSource = null; this._activeContext = null; this._activeDragVisual = null; this._isDragging = false; this._potentialTarget = null; ev.preventDefault(); } }, _drag : function(isInitialDrag) { var ev = window._event; var mousePosition = { x: ev.clientX, y: ev.clientY }; // NOTE: We store the event object to be able to determine the current // mouse position in Mozilla in other event handlers such as keydown. document._lastPosition = mousePosition; var scrollOffset = this.getScrollOffset(this._activeDragVisual, /* recursive */ true); var position = this.addPoints(this.subtractPoints(mousePosition, this._activeDragVisual.startingPoint), scrollOffset); // Check if the visual moved at all. if (!isInitialDrag && parseInt(this._activeDragVisual.style.left) == position.x && parseInt(this._activeDragVisual.style.top) == position.y) { return; } $common.setLocation(this._activeDragVisual, position); // Monitor DOM changes. this._prepareForDomChanges(); this._activeDragSource.onDrag(); this._recoverFromDomChanges(); // Find a potential target. this._potentialTarget = this._findPotentialTarget(this._activeDragSource, this._activeDragVisual); var movedToOtherTarget = (this._potentialTarget != this._underlyingTarget || this._potentialTarget == null); // Check if we are leaving an underlying target. if (movedToOtherTarget && this._underlyingTarget != null) { this._leaveTarget(this._activeDragSource, this._underlyingTarget); } if (this._potentialTarget != null) { // Check if we are entering a new target. if (movedToOtherTarget) { this._underlyingTarget = this._potentialTarget; // Enter the new target. this._enterTarget(this._activeDragSource, this._underlyingTarget); } else { this._moveInTarget(this._activeDragSource, this._underlyingTarget); } } else { this._underlyingTarget = null; } }, _wireEvents : function() { $addHandler(document, "mouseup", this._mouseUpHandler); $addHandler(document, "mousemove", this._documentMouseMoveHandler); $addHandler(document.body, "dragover", this._documentDragOverHandler); $addHandler(this._activeDragVisual, "dragstart", this._dragStartHandler); $addHandler(this._activeDragVisual, "dragend", this._mouseUpHandler); $addHandler(this._activeDragVisual, "drag", this._mouseMoveHandler); }, _unwireEvents : function() { $removeHandler(this._activeDragVisual, "drag", this._mouseMoveHandler); $removeHandler(this._activeDragVisual, "dragend", this._mouseUpHandler); $removeHandler(this._activeDragVisual, "dragstart", this._dragStartHandler); $removeHandler(document.body, "dragover", this._documentDragOverHandler); $removeHandler(document, "mousemove", this._documentMouseMoveHandler); $removeHandler(document, "mouseup", this._mouseUpHandler); }, registerDropTarget : function(dropTarget) { if (this._dropTargets == null) { this._dropTargets = []; } Array.add(this._dropTargets, dropTarget); this._wireDropTargetEvents(dropTarget); }, unregisterDropTarget : function(dropTarget) { this._unwireDropTargetEvents(dropTarget); if (this._dropTargets) { Array.remove(this._dropTargets, dropTarget); } }, _wireDropTargetEvents : function(dropTarget) { var associatedElement = dropTarget.get_dropTargetElement(); associatedElement._dropTarget = dropTarget; $addHandler(associatedElement, "dragenter", this._dragEnterHandler); $addHandler(associatedElement, "dragleave", this._dragLeaveHandler); $addHandler(associatedElement, "dragover", this._dragOverHandler); $addHandler(associatedElement, "drop", this._dropHandler); }, _unwireDropTargetEvents : function(dropTarget) { var associatedElement = dropTarget.get_dropTargetElement(); // make sure that the handlers are not removed twice if(associatedElement._dropTarget) { associatedElement._dropTarget = null; $removeHandler(associatedElement, "dragenter", this._dragEnterHandler); $removeHandler(associatedElement, "dragleave", this._dragLeaveHandler); $removeHandler(associatedElement, "dragover", this._dragOverHandler); $removeHandler(associatedElement, "drop", this._dropHandler); } }, _onDragStart : function(ev) { window._event = ev; document.selection.empty(); var dt = ev.dataTransfer; if(!dt && ev.rawEvent) dt = ev.rawEvent.dataTransfer; var dataType = this._activeDragSource.get_dragDataType().toLowerCase(); var data = this._activeDragSource.getDragData(this._activeContext); if (data) { // TODO: How do we want to deal with 'non-compatible types'? if (dataType != "text" && dataType != "url") { dataType = "text"; if (data.innerHTML != null) { data = data.innerHTML; } } dt.effectAllowed = "move"; dt.setData(dataType, data.toString()); } }, _onMouseUp : function(ev) { window._event = ev; this._stopDragDrop(false); }, _onDocumentMouseMove : function(ev) { window._event = ev; this._dragDrop(); }, _onDocumentDragOver : function(ev) { window._event = ev; if(this._potentialTarget) ev.preventDefault(); //ev.returnValue = (_potentialTarget == null); }, _onMouseMove : function(ev) { window._event = ev; this._drag(); }, _onDragEnter : function(ev) { window._event = ev; if (this._isDragging) { ev.preventDefault(); //ev.returnValue = false; } else { // An external object is dragged to the drop target. var dataObjects = AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.target)); for (var i = 0; i < dataObjects.length; i++) { this._dropTarget.onDragEnterTarget(AjaxControlToolkit.DragMode.Copy, dataObjects[i].type, dataObjects[i].value); } } }, _onDragLeave : function(ev) { window._event = ev; if (this._isDragging) { ev.preventDefault(); //ev.returnValue = false; } else { // An external object is dragged to the drop target. var dataObjects = AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.target)); for (var i = 0; i < dataObjects.length; i++) { this._dropTarget.onDragLeaveTarget(AjaxControlToolkit.DragMode.Copy, dataObjects[i].type, dataObjects[i].value); } } }, _onDragOver : function(ev) { window._event = ev; if (this._isDragging) { ev.preventDefault(); //ev.returnValue = false; } else { // An external object is dragged over the drop target. var dataObjects = AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.target)); for (var i = 0; i < dataObjects.length; i++) { this._dropTarget.onDragInTarget(AjaxControlToolkit.DragMode.Copy, dataObjects[i].type, dataObjects[i].value); } } }, _onDrop : function(ev) { window._event = ev; if (!this._isDragging) { // An external object is dropped on the drop target. var dataObjects = AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget(this._getDropTarget(ev.target)); for (var i = 0; i < dataObjects.length; i++) { this._dropTarget.drop(AjaxControlToolkit.DragMode.Copy, dataObjects[i].type, dataObjects[i].value); } } ev.preventDefault(); //ev.returnValue = false; }, _getDropTarget : function(element) { while (element) { if (element._dropTarget != null) { return element._dropTarget; } element = element.parentNode; } return null; }, _dragDrop : function() { if (this._isDragging) { return; } this._isDragging = true; this._activeDragVisual.dragDrop(); document.selection.empty(); }, _moveInTarget : function(dragSource, dropTarget) { // Monitor DOM changes. this._prepareForDomChanges(); dropTarget.onDragInTarget(dragSource.get_dragMode(), dragSource.get_dragDataType(), dragSource.getDragData(this._activeContext)); this._recoverFromDomChanges(); }, _enterTarget : function(dragSource, dropTarget) { // Monitor DOM changes. this._prepareForDomChanges(); dropTarget.onDragEnterTarget(dragSource.get_dragMode(), dragSource.get_dragDataType(), dragSource.getDragData(this._activeContext)); this._recoverFromDomChanges(); }, _leaveTarget : function(dragSource, dropTarget) { // Monitor DOM changes. this._prepareForDomChanges(); dropTarget.onDragLeaveTarget(dragSource.get_dragMode(), dragSource.get_dragDataType(), dragSource.getDragData(this._activeContext)); this._recoverFromDomChanges(); }, _findPotentialTarget : function(dragSource, dragVisual) { var ev = window._event; if (this._dropTargets == null) { return null; } var type = dragSource.get_dragDataType(); var mode = dragSource.get_dragMode(); var data = dragSource.getDragData(this._activeContext); // Get the current cursor location. var scrollOffset = this.getScrollOffset(document.body, /* recursive */ true); var x = ev.clientX + scrollOffset.x; var y = ev.clientY + scrollOffset.y; var cursorRect = { x: x - this._radius, y: y - this._radius, width: this._radius * 2, height: this._radius * 2 }; // Find any targets near the current cursor location. var targetRect; for (var i = 0; i < this._dropTargets.length; i++) { targetRect = $common.getBounds(this._dropTargets[i].get_dropTargetElement()); if ($common.overlaps(cursorRect, targetRect) && this._dropTargets[i].canDrop(mode, type, data)) { return this._dropTargets[i]; } } return null; }, _prepareForDomChanges : function() { this._oldOffset = $common.getLocation(this._activeDragVisual); }, _recoverFromDomChanges : function() { var newOffset = $common.getLocation(this._activeDragVisual); if (this._oldOffset.x != newOffset.x || this._oldOffset.y != newOffset.y) { this._activeDragVisual.startingPoint = this.subtractPoints(this._activeDragVisual.startingPoint, this.subtractPoints(this._oldOffset, newOffset)); scrollOffset = this.getScrollOffset(this._activeDragVisual, /* recursive */ true); var position = this.addPoints(this.subtractPoints(document._lastPosition, this._activeDragVisual.startingPoint), scrollOffset); $common.setLocation(this._activeDragVisual, position); } }, addPoints : function(p1, p2) { return { x: p1.x + p2.x, y: p1.y + p2.y }; }, subtractPoints : function(p1, p2) { return { x: p1.x - p2.x, y: p1.y - p2.y }; }, // -- Drag and drop helper methods. getScrollOffset : function(element, recursive) { var left = element.scrollLeft; var top = element.scrollTop; if (recursive) { var parent = element.parentNode; while (parent != null && parent.scrollLeft != null) { left += parent.scrollLeft; top += parent.scrollTop; // Don't include anything below the body. if (parent == document.body && (left != 0 && top != 0)) break; parent = parent.parentNode; } } return { x: left, y: top }; }, getBrowserRectangle : function() { var width = window.innerWidth; var height = window.innerHeight; if (width == null) { width = document.body.clientWidth; } if (height == null) { height = document.body.clientHeight; } return { x: 0, y: 0, width: width, height: height }; }, getNextSibling : function(item) { for (item = item.nextSibling; item != null; item = item.nextSibling) { if (item.innerHTML != null) { return item; } } return null; }, hasParent : function(element) { return (element.parentNode != null && element.parentNode.tagName != null); } } AjaxControlToolkit.IEDragDropManager.registerClass('AjaxControlToolkit.IEDragDropManager', Sys.Component); AjaxControlToolkit.IEDragDropManager._getDataObjectsForDropTarget = function(dropTarget) { if (dropTarget == null) { return []; } var ev = window._event; var dataObjects = []; var dataTypes = [ "URL", "Text" ]; var data; for (var i = 0; i < dataTypes.length; i++) { var dt = ev.dataTransfer; if(!dt && ev.rawEvent) dt = ev.rawEvent.dataTransfer; data = dt.getData(dataTypes[i]); if (dropTarget.canDrop(AjaxControlToolkit.DragMode.Copy, dataTypes[i], data)) { if (data) { Array.add(dataObjects, { type : dataTypes[i], value : data }); } } } return dataObjects; } AjaxControlToolkit.GenericDragDropManager = function() { AjaxControlToolkit.GenericDragDropManager.initializeBase(this); this._dropTargets = null; // Radius of the cursor used to determine what drop target we // are hovering. Anything below the cursor's zone may be a // potential drop target. this._scrollEdgeConst = 40; this._scrollByConst = 10; this._scroller = null; this._scrollDeltaX = 0; this._scrollDeltaY = 0; this._activeDragVisual = null; this._activeContext = null; this._activeDragSource = null; this._oldOffset = null; this._potentialTarget = null; this._mouseUpHandler = null; this._mouseMoveHandler = null; this._keyPressHandler = null; this._scrollerTickHandler = null; } AjaxControlToolkit.GenericDragDropManager.prototype = { initialize : function() { AjaxControlToolkit.GenericDragDropManager.callBaseMethod(this, "initialize"); this._mouseUpHandler = Function.createDelegate(this, this._onMouseUp); this._mouseMoveHandler = Function.createDelegate(this, this._onMouseMove); this._keyPressHandler = Function.createDelegate(this, this._onKeyPress); this._scrollerTickHandler = Function.createDelegate(this, this._onScrollerTick); if (Sys.Browser.agent === Sys.Browser.Safari) { AjaxControlToolkit.GenericDragDropManager.__loadSafariCompatLayer(this); } this._scroller = new Sys.Timer(); this._scroller.set_interval(10); this._scroller.add_tick(this._scrollerTickHandler); }, startDragDrop : function(dragSource, dragVisual, context) { this._activeDragSource = dragSource; this._activeDragVisual = dragVisual; this._activeContext = context; AjaxControlToolkit.GenericDragDropManager.callBaseMethod(this, "startDragDrop", [dragSource, dragVisual, context]); }, _stopDragDrop : function(cancelled) { this._scroller.set_enabled(false); AjaxControlToolkit.GenericDragDropManager.callBaseMethod(this, "_stopDragDrop", [cancelled]); }, _drag : function(isInitialDrag) { AjaxControlToolkit.GenericDragDropManager.callBaseMethod(this, "_drag", [isInitialDrag]); this._autoScroll(); }, _wireEvents : function() { $addHandler(document, "mouseup", this._mouseUpHandler); $addHandler(document, "mousemove", this._mouseMoveHandler); $addHandler(document, "keypress", this._keyPressHandler); }, _unwireEvents : function() { $removeHandler(document, "keypress", this._keyPressHandler); $removeHandler(document, "mousemove", this._mouseMoveHandler); $removeHandler(document, "mouseup", this._mouseUpHandler); }, _wireDropTargetEvents : function(dropTarget) { // }, _unwireDropTargetEvents : function(dropTarget) { // }, _onMouseUp : function(e) { window._event = e; this._stopDragDrop(false); }, _onMouseMove : function(e) { window._event = e; this._drag(); }, _onKeyPress : function(e) { window._event = e; // Escape. var k = e.keyCode ? e.keyCode : e.rawEvent.keyCode; if (k == 27) { this._stopDragDrop(/* cancel */ true); } }, _autoScroll : function() { var ev = window._event; var browserRect = this.getBrowserRectangle(); if (browserRect.width > 0) { this._scrollDeltaX = this._scrollDeltaY = 0; if (ev.clientX < browserRect.x + this._scrollEdgeConst) this._scrollDeltaX = -this._scrollByConst; else if (ev.clientX > browserRect.width - this._scrollEdgeConst) this._scrollDeltaX = this._scrollByConst; if (ev.clientY < browserRect.y + this._scrollEdgeConst) this._scrollDeltaY = -this._scrollByConst; else if (ev.clientY > browserRect.height - this._scrollEdgeConst) this._scrollDeltaY = this._scrollByConst; if (this._scrollDeltaX != 0 || this._scrollDeltaY != 0) { this._scroller.set_enabled(true); } else { this._scroller.set_enabled(false); } } }, _onScrollerTick : function() { var oldLeft = document.body.scrollLeft; var oldTop = document.body.scrollTop; window.scrollBy(this._scrollDeltaX, this._scrollDeltaY); var newLeft = document.body.scrollLeft; var newTop = document.body.scrollTop; var dragVisual = this._activeDragVisual; var position = { x: parseInt(dragVisual.style.left) + (newLeft - oldLeft), y: parseInt(dragVisual.style.top) + (newTop - oldTop) }; $common.setLocation(dragVisual, position); } } AjaxControlToolkit.GenericDragDropManager.registerClass('AjaxControlToolkit.GenericDragDropManager', AjaxControlToolkit.IEDragDropManager); if (Sys.Browser.agent === Sys.Browser.Safari) { AjaxControlToolkit.GenericDragDropManager.__loadSafariCompatLayer = function(ddm) { ddm._getScrollOffset = ddm.getScrollOffset; ddm.getScrollOffset = function(element, recursive) { return { x: 0, y: 0 }; } ddm._getBrowserRectangle = ddm.getBrowserRectangle; ddm.getBrowserRectangle = function() { var browserRect = ddm._getBrowserRectangle(); var offset = ddm._getScrollOffset(document.body, true); return { x: browserRect.x + offset.x, y: browserRect.y + offset.y, width: browserRect.width + offset.x, height: browserRect.height + offset.y }; } } } // (c) Copyright Microsoft Corporation. // This source is subject to the Microsoft Permissive License. // See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx. // All other rights reserved. /// /// /// /// /// /// /// AjaxControlToolkit.FloatingBehavior = function(element) { AjaxControlToolkit.FloatingBehavior.initializeBase(this,[element]); var _handle; var _location; var _dragStartLocation; var _profileProperty; var _profileComponent; var _mouseDownHandler = Function.createDelegate(this, mouseDownHandler); this.add_move = function(handler) { this.get_events().addHandler('move', handler); } this.remove_move = function(handler) { this.get_events().removeHandler('move', handler); } this.get_handle = function() { return _handle; } this.set_handle = function(value) { if (_handle != null) { $removeHandler(_handle, "mousedown", _mouseDownHandler); } _handle = value; $addHandler(_handle, "mousedown", _mouseDownHandler); } this.get_profileProperty = function() { return _profileProperty; } this.set_profileProperty = function(value) { //##DEBUG Sys.Debug.assert(!this.get_isInitialized() || _profileProperty === value, "You cannot change the profile property after initialization."); _profileProperty = value; } this.get_profileComponent = function() { return _profileComponent; } this.set_profileComponent = function(value) { _profileComponent = value; } this.get_location = function() { return _location; } this.set_location = function(value) { if (_location != value) { _location = value; if (this.get_isInitialized()) { $common.setLocation(this.get_element(), _location); } this.raisePropertyChanged('location'); } } this.initialize = function() { AjaxControlToolkit.FloatingBehavior.callBaseMethod(this, 'initialize'); AjaxControlToolkit.DragDropManager.registerDropTarget(this); var el = this.get_element(); if (!_location) { _location = $common.getLocation(el); } el.style.position = "fixed"; $common.setLocation(el, _location); // var p = this.get_profileProperty(); // if(p) { // var b = new Sys.Preview.Binding(); // b.beginUpdate(); // b.set_target(this); // b.set_property("location"); // var profile = this.get_profileComponent(); // if(!profile) profile = Sys.Preview.Services.Components.Profile.instance; // b.set_dataContext(profile); // b.set_dataPath(p); // b.set_direction(Sys.Preview.BindingDirection.InOut); // // // we must hook into the loaded event since the profile may be loaded and the location property // // will be different. But profile doesnt raise a change notificaiton for every property after a load // var a = new Sys.Preview.InvokeMethodAction(); // a.beginUpdate(); // a.set_eventSource(profile); // a.set_eventName("loadComplete"); // a.set_target(b); // a.set_method("evaluateIn"); // a.endUpdate(); // b.endUpdate(); // this._binding = b; // this._action = a; // } } this.dispose = function() { AjaxControlToolkit.DragDropManager.unregisterDropTarget(this); if (_handle && _mouseDownHandler) { $removeHandler(_handle, "mousedown", _mouseDownHandler); //_handle.detachEvent("onmousedown", _mouseDownHandler); } _mouseDownHandler = null; AjaxControlToolkit.FloatingBehavior.callBaseMethod(this, 'dispose'); } this.checkCanDrag = function(element) { var undraggableTagNames = ["input", "button", "select", "textarea", "label"]; var tagName = element.tagName; if ((tagName.toLowerCase() == "a") && (element.href != null) && (element.href.length > 0)) { return false; } if (Array.indexOf(undraggableTagNames, tagName.toLowerCase()) > -1) { return false; } return true; } function mouseDownHandler(ev) { window._event = ev; var el = this.get_element(); if (this.checkCanDrag(ev.target)) { _dragStartLocation = $common.getLocation(el); ev.preventDefault(); this.startDragDrop(el); } } // Type get_dataType() this.get_dragDataType = function() { return "_floatingObject"; } // Object get_data(Context) this.getDragData = function(context) { return null; } // DragMode get_dragMode() this.get_dragMode = function() { return AjaxControlToolkit.DragMode.Move; } // void onDragStart() this.onDragStart = function() { } // void onDrag() this.onDrag = function() { } // void onDragEnd(Canceled) this.onDragEnd = function(canceled) { if (!canceled) { var handler = this.get_events().getHandler('move'); if(handler) { var cancelArgs = new Sys.CancelEventArgs(); handler(this, cancelArgs); canceled = cancelArgs.get_cancel(); } } var el = this.get_element(); if (canceled) { // Restore the position of the control. $common.setLocation(el, _dragStartLocation); } else { _location = $common.getLocation(el); this.raisePropertyChanged('location'); } } this.startDragDrop = function(dragVisual) { AjaxControlToolkit.DragDropManager.startDragDrop(this, dragVisual, null); } this.get_dropTargetElement = function() { return document.body; } // bool canDrop(DragMode, DataType, Data) this.canDrop = function(dragMode, dataType, data) { return (dataType == "_floatingObject"); } // void drop(DragMode, DataType, Data) this.drop = function(dragMode, dataType, data) {} // void onDragEnterTarget(DragMode, DataType, Data) this.onDragEnterTarget = function(dragMode, dataType, data) {} // void onDragLeaveTarget(DragMode, DataType, Data) this.onDragLeaveTarget = function(dragMode, dataType, data) {} // void onDragInTarget(DragMode, DataType, Data) this.onDragInTarget = function(dragMode, dataType, data) {} } //AjaxControlToolkit.FloatingBehavior.descriptor = { // properties: [ {name: "profileProperty", type: String}, // {name: "profileComponent", type: Object}, // {name: "dragData", type: Object, readOnly: true}, // {name: "dragDataType", type: String, readOnly: true}, // {name: "dragMode", type: AjaxControlToolkit.DragMode, readOnly: true}, // {name: "dropTargetElement", type: Object, readOnly: true}, // {name: "handle", type: Sys.UI.DomElement}, // {name: "location", type: String} ], // events: [ {name: "move"} ] //} AjaxControlToolkit.FloatingBehavior.registerClass('AjaxControlToolkit.FloatingBehavior', AjaxControlToolkit.BehaviorBase, AjaxControlToolkit.IDragSource, AjaxControlToolkit.IDropTarget, Sys.IDisposable); // (c) Copyright Microsoft Corporation. // This source is subject to the Microsoft Permissive License. // See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx. // All other rights reserved. /// /// /// /// /// Type.registerNamespace('AjaxControlToolkit'); AjaxControlToolkit.BoxCorners = function() { /// /// Corners of an element /// /// /// /// /// /// /// /// /// /// /// throw Error.invalidOperation(); } AjaxControlToolkit.BoxCorners.prototype = { None : 0x00, TopLeft : 0x01, TopRight : 0x02, BottomRight : 0x04, BottomLeft : 0x08, Top : 0x01 | 0x02, Right : 0x02 | 0x04, Bottom : 0x04 | 0x08, Left : 0x08 | 0x01, All : 0x01 | 0x02 | 0x04 | 0x08 } AjaxControlToolkit.BoxCorners.registerEnum("AjaxControlToolkit.BoxCorners", true); AjaxControlToolkit.RoundedCornersBehavior = function(element) { /// /// The RoundedCornersBehavior rounds the corners of its target element /// /// /// DOM element associated with the behavior /// AjaxControlToolkit.RoundedCornersBehavior.initializeBase(this, [element]); this._corners = AjaxControlToolkit.BoxCorners.All; this._radius = 5; this._color = null; this._parentDiv = null; this._originalStyle = null; this._borderColor = null; this._isDirty = true; } AjaxControlToolkit.RoundedCornersBehavior.prototype = { initialize: function() { /// /// Initialize the behavior /// AjaxControlToolkit.RoundedCornersBehavior.callBaseMethod(this, 'initialize'); this.update(); }, dispose: function() { /// /// Dispose the behavior /// this.disposeParentDiv(); AjaxControlToolkit.RoundedCornersBehavior.callBaseMethod(this, 'dispose'); }, update: function() { /// /// Create the surrounding div that will have rounded corners /// var e = this.get_element(); if (!e || !this._isDirty || this.get_isUpdating()) return; this.disposeParentDiv(); var color = this.getBackgroundColor(); var originalWidth = e.offsetWidth; var newParent = e.cloneNode(false); // move all children into the new div. this.moveChildren(e, newParent); // modify the target element to be transparent // and set up the new parent this._originalStyle = e.style.cssText; e.style.backgroundColor = "transparent"; e.style.verticalAlign = "top"; e.style.padding = "0"; e.style.overflow = ""; e.style.className = ""; // Don't assume there is a numerical value for height. A height of "auto" is possible. if (e.style.height && e.style.height != "auto") { // Increase the height to account for the rounded corners e.style.height = parseInt($common.getCurrentStyle(e, 'height')) + (this._radius * 2) + "px"; } else { // Note: Do NOT use $common.getCurrentStyle in the check below // because that breaks the work-around if (!e.style.width && (0 < originalWidth)) { // The following line works around a problem where IE renders the first // rounded DIV about 6 pixels too high if e doesn't have a width or height e.style.width = originalWidth + "px"; } } // these are properties we don't want cloned down to the new parent newParent.style.position = ""; newParent.style.border = ""; newParent.style.margin = ""; newParent.style.width = "100%"; newParent.id = ""; newParent.removeAttribute("control"); if (this._borderColor) { newParent.style.borderTopStyle = "none"; newParent.style.borderBottomStyle = "none"; newParent.style.borderLeftStyle = "solid"; newParent.style.borderRightStyle = "solid"; newParent.style.borderLeftColor = this._borderColor; newParent.style.borderRightColor = this._borderColor; newParent.style.borderLeftWidth = "1px"; newParent.style.borderRightWidth = "1px"; if (this._radius == 0) { newParent.style.borderTopStyle = "solid"; newParent.style.borderBottomStyle = "solid"; newParent.style.borderTopColor = this._borderColor; newParent.style.borderBottomColor = this._borderColor; newParent.style.borderTopWidth = "1px"; newParent.style.borderBottomWidth = "1px"; } } else { newParent.style.borderTopStyle = "none"; newParent.style.borderBottomStyle = "none"; newParent.style.borderLeftStyle = "none"; newParent.style.borderRightStyle = "none"; } // build a set of steps on each end to fake the corners. // ------- (step 0) // -------- (step n-1) // --------- (step n) // XXXXXXXXX (inner div) // XXXXXXXXX // --------- (bottom step n) // -------- (bottom step n-1) // ------ (bottom step 0) var lastDiv = null; var radius = this._radius; var lines = this._radius; var lastDelta = 0; for (var i = lines; i > 0; i--) { // figure out how much we'll need to subtract from each item var angle = Math.acos(i / radius); var delta = radius - Math.round(Math.sin(angle) * radius); // build a 1 pixel tall div // that's delta pixels shorter on each end. // add the top one var newDiv = document.createElement("DIV"); newDiv.__roundedDiv = true; newDiv.style.backgroundColor = color; newDiv.style.marginLeft = delta + "px"; newDiv.style.marginRight = (delta - (this._borderColor ? 2 : 0)) + "px"; newDiv.style.height = "1px"; newDiv.style.fontSize = "1px"; // workaround for IE wierdness with 1px divs. newDiv.style.overflow = "hidden"; if (this._borderColor) { newDiv.style.borderLeftStyle = "solid"; newDiv.style.borderRightStyle = "solid"; newDiv.style.borderLeftColor = this._borderColor; newDiv.style.borderRightColor = this._borderColor; var offset = Math.max(0, lastDelta - delta - 1); newDiv.style.borderLeftWidth = (offset + 1) + "px"; newDiv.style.borderRightWidth = (offset + 1) + "px"; if (i == lines) { newDiv.__roundedDivNoBorder = true; newDiv.style.backgroundColor = this._borderColor; } } e.insertBefore(newDiv, lastDiv); var topDiv = newDiv; // add the bottom one one newDiv = newDiv.cloneNode(true); newDiv.__roundedDiv = true; e.insertBefore(newDiv, lastDiv); var bottomDiv = newDiv; lastDiv = newDiv; lastDelta = delta; if (!this.isCornerSet(AjaxControlToolkit.BoxCorners.TopLeft)) { topDiv.style.marginLeft = "0"; if (this._borderColor) { topDiv.style.borderLeftWidth = "1px"; } } if (!this.isCornerSet(AjaxControlToolkit.BoxCorners.TopRight)) { topDiv.style.marginRight = "0"; if (this._borderColor) { topDiv.style.borderRightWidth = "1px"; topDiv.style.marginRight = "-2px"; } } if (!this.isCornerSet(AjaxControlToolkit.BoxCorners.BottomLeft)) { bottomDiv.style.marginLeft = "0"; if (this._borderColor) { bottomDiv.style.borderLeftWidth = "1px"; } } if (!this.isCornerSet(AjaxControlToolkit.BoxCorners.BottomRight)) { bottomDiv.style.marginRight = "0"; if (this._borderColor) { bottomDiv.style.borderRightWidth = "1px"; bottomDiv.style.marginRight = "-2px"; } } } // finally, add the newParent (which has all the original content) // into the div. e.insertBefore(newParent, lastDiv); this._parentDiv = newParent; this._isDirty = false; }, disposeParentDiv: function() { /// /// Dispose the surrounding div with rounded corners /// if (this._parentDiv) { // clean up the divs we added. var e = this.get_element(); var children = e.childNodes; for (var i = children.length - 1; i >= 0; i--) { var child = children[i]; if (child) { if (child == this._parentDiv) { this.moveChildren(child, e); } try { e.removeChild(child); } catch (e) { // Safari likes to throw NOT_FOUND_ERR (DOMException 8) // but it seems to work fine anyway. } } } // restore the original style if (this._originalStyle) { e.style.cssText = this._originalStyle; this._originalStyle = null; } this._parentDiv = null; } }, getBackgroundColor: function() { /// /// Get the background color of the target element /// if (this._color) { return this._color; } return $common.getCurrentStyle(this.get_element(), 'backgroundColor'); }, moveChildren: function(src, dest) { /// /// Move the child nodes from one element to another /// /// /// DOM Element /// /// /// DOM Element /// var moveCount = 0; while (src.hasChildNodes()) { var child = src.childNodes[0]; child = src.removeChild(child); dest.appendChild(child); moveCount++; } return moveCount; }, isCornerSet: function(corner) { /// /// Check whether the a flag for this corner has been set /// /// /// Corner to check /// /// /// True if it is included in the flags, false otherwise /// return (this._corners & corner) != AjaxControlToolkit.BoxCorners.None; }, setCorner: function(corner, value) { /// /// Set a corner as one that should be rounded /// /// /// Corner to set /// /// /// True to set the value, False to clear it /// if (value) { this.set_Corners(this._corners | corner); } else { this.set_Corners(this._corners & ~corner); } }, get_Color: function() { /// /// The background color of the rounded area an corners. By default this picks up the background color of the panel that it is attached to. /// return this._color; }, set_Color: function(value) { if (value != this._color) { this._color = value; this._isDirty = true; this.update(); this.raisePropertyChanged('Color'); } }, get_Radius: function() { /// /// The radius of the corners (and height of the added area). Default is 5. /// return this._radius; }, set_Radius: function(value) { if (value != this._radius) { this._radius = value; this._isDirty = true; this.update(); this.raisePropertyChanged('Radius'); } }, get_Corners: function() { /// /// Corners that should be rounded /// return this._corners; }, set_Corners: function(value) { if (value != this._corners) { this._corners = value; this._isDirty = true; this.update(); this.raisePropertyChanged("Corners"); } }, get_BorderColor: function() { /// /// Color of the border (and hence the rounded corners) /// return this._borderColor; }, set_BorderColor: function(value) { if (value != this._borderColor) { this._borderColor = value; this._isDirty = true; this.update(); this.raisePropertyChanged("BorderColor"); } } } AjaxControlToolkit.RoundedCornersBehavior.registerClass('AjaxControlToolkit.RoundedCornersBehavior', AjaxControlToolkit.BehaviorBase); // (c) Copyright Microsoft Corporation. // This source is subject to the Microsoft Permissive License. // See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx. // All other rights reserved. /// /// /// /// /// /// /// Type.registerNamespace('AjaxControlToolkit'); AjaxControlToolkit.DropShadowBehavior = function(element) { /// /// The DropShadowBehavior is used to attach a drop shadow to the element /// /// /// DOM Element the behavior is associated with /// AjaxControlToolkit.DropShadowBehavior.initializeBase(this, [element]); // our property values this._opacity = 1.0; this._width = 5; // the div we create for the shadow. this._shadowDiv = null; // our timer for tracking position this._trackPosition = null; this._trackPositionDelay = 50; this._timer = null; this._tickHandler = null; this._roundedBehavior = null; this._shadowRoundedBehavior = null; this._rounded = false; this._radius = 5; // our cache of our last size and position for tracking this._lastX = null; this._lastY = null; this._lastW = null; this._lastH = null; } AjaxControlToolkit.DropShadowBehavior.prototype = { initialize : function() { /// /// Initialize the behavior /// AjaxControlToolkit.DropShadowBehavior.callBaseMethod(this, 'initialize'); var e = this.get_element(); // flip the styles position to relative so that we z-order properly. if ($common.getCurrentStyle(e, 'position', e.style.position) != "absolute") { e.style.position = "relative"; } // set up our initial state if (this._rounded) { this.setupRounded(); } if (this._trackPosition) { this.startTimer(); } this.setShadow(); }, dispose : function() { /// /// Dispose the behavior /// this.stopTimer(); this.disposeShadowDiv(); AjaxControlToolkit.DropShadowBehavior.callBaseMethod(this, 'dispose'); }, buildShadowDiv : function() { /// /// Create the div that we'll use as the shadow /// var e = this.get_element(); if (!this.get_isInitialized() || !e || !this._width) return; var div = document.createElement("DIV"); div.style.backgroundColor = "black"; div.style.position= "absolute"; if (e.id) { div.id = e.id + "_DropShadow"; } // initialize a control around it, and // set up the opacity behavior and rounding this._shadowDiv = div; e.parentNode.appendChild(div); if (this._rounded ) { this._shadowDiv.style.height = Math.max(0, e.offsetHeight - (2*this._radius)) + "px"; if (!this._shadowRoundedBehavior) { this._shadowRoundedBehavior = $create(AjaxControlToolkit.RoundedCornersBehavior, {"Radius": this._radius}, null, null, this._shadowDiv); } else { this._shadowRoundedBehavior.set_Radius(this._radius); } } else if (this._shadowRoundedBehavior) { this._shadowRoundedBehavior.set_Radius(0); } if (this._opacity != 1.0) { this.setupOpacity(); } this.setShadow(false, true); this.updateZIndex(); }, disposeShadowDiv : function() { /// /// Dispose of the div we use as the shadow /// if (this._shadowDiv) { // on page teardown (or in an update panel, this may already // be gone) // if (this._shadowDiv.parentNode) { this._shadowDiv.parentNode.removeChild(this._shadowDiv); } this._shadowDiv = null; } if (this._shadowRoundedBehavior) { this._shadowRoundedBehavior.dispose(); this._shadowRoundedBehavior = null; } }, onTimerTick : function() { /// /// Timer's tick handler that is used to position the shadow when its target moves /// this.setShadow(); }, startTimer : function() { /// /// Start the timer (and hence start tracking the bounds of the target element) /// if (!this._timer) { if (!this._tickHandler) { this._tickHandler = Function.createDelegate(this, this.onTimerTick); } this._timer = new Sys.Timer(); this._timer.set_interval(this._trackPositionDelay); this._timer.add_tick(this._tickHandler); this._timer.set_enabled(true); } }, stopTimer : function() { /// /// Stop the timer (and hence stop tracking the bounds of the target element) /// // on stop, just clean the thing up completely if (this._timer) { this._timer.remove_tick(this._tickHandler); this._timer.set_enabled(false); this._timer.dispose(); this._timer = null; } }, setShadow : function(force, norecurse) { /// /// This function does the heavy lifting of positioning and sizing the shadow. /// It caches values to avoid extra work - it's called on a timer so we need to /// keep it light weight. /// /// /// Whether to force the bounds change /// /// /// Whether to recurse if we need to recreate the shadow div /// var e = this.get_element(); if (!this.get_isInitialized() || !e || (!this._width && !force)) return; var existingShadow = this._shadowDiv; if (!existingShadow) { this.buildShadowDiv(); } // Consider calling offsetLeft first to avoid recursive math of location? var location = $common.getLocation(e); if (force || this._lastX != location.x || this._lastY != location.y || !existingShadow) { this._lastX = location.x; this._lastY = location.y; var w = this.get_Width(); // to work around setlocation bug because elements embedded within fixed\absolute // elements are set relative to their parent instead of the window if((e.parentNode.style.position == "absolute") || (e.parentNode.style.position == "fixed") ) { location.x = w; location.y = w; } else if (e.parentNode.style.position == "relative") { location.x = w; var paddingTop = e.parentNode.style.paddingTop; paddingTop = paddingTop.replace("px", ""); var intPaddingTop = 0; intPaddingTop = parseInt(paddingTop); location.y = w + intPaddingTop; } else { location.x += w; location.y += w; } $common.setLocation(this._shadowDiv, location); } var h = e.offsetHeight; var w = e.offsetWidth; if (force || h != this._lastH || w != this._lastW || !existingShadow) { this._lastW = w; this._lastH = h; if (!this._rounded || !existingShadow || norecurse) { this._shadowDiv.style.width = w + "px"; this._shadowDiv.style.height = h + "px"; } else { // recurse if we need to redo the div this.disposeShadowDiv(); this.setShadow(); } } if (this._shadowDiv) { this._shadowDiv.style.visibility = $common.getCurrentStyle(e, 'visibility'); } }, setupOpacity : function() { /// /// Set the opacity of the shadow div /// if (this.get_isInitialized() && this._shadowDiv) { $common.setElementOpacity(this._shadowDiv, this._opacity); } }, setupRounded : function() { /// /// Demand create and initialize the RoundedCornersBehavior /// if (!this._roundedBehavior && this._rounded) { this._roundedBehavior = $create(AjaxControlToolkit.RoundedCornersBehavior, null, null, null, this.get_element()); } if (this._roundedBehavior) { this._roundedBehavior.set_Radius(this._rounded ? this._radius : 0); } }, updateZIndex : function() { /// /// Update the z-Index so the shadow div remains behind the target element /// if (!this._shadowDiv) return; var e = this.get_element(); var targetZIndex = e.style.zIndex; var shadowZIndex = this._shadowDiv.style.zIndex; if (shadowZIndex && targetZIndex && targetZIndex > shadowZIndex) { return; } else { targetZIndex = Math.max(2, targetZIndex); shadowZIndex = targetZIndex - 1; } e.style.zIndex = targetZIndex; this._shadowDiv.style.zIndex = shadowZIndex; }, updateRoundedCorners : function() { /// /// Update the RoundedCorndersBehavior and recreate the shadow div so its corners are rounded as well /// if (this.get_isInitialized()) { this.setupRounded(); this.disposeShadowDiv(); this.setShadow(); } }, get_Opacity : function() { /// /// The opacity of the drop shadow, from 0 (fully transparent) to 1.0 (fully opaque). The default value is .5. /// return this._opacity; }, set_Opacity : function(value) { if (this._opacity != value) { this._opacity = value; this.setupOpacity(); this.raisePropertyChanged('Opacity'); } }, get_Rounded : function() { /// /// Whether or not the corners of the target and drop shadow should be rounded /// return this._rounded; }, set_Rounded : function(value) { if (value != this._rounded) { this._rounded = value; this.updateRoundedCorners(); this.raisePropertyChanged('Rounded'); } }, get_Radius : function() { /// /// Radius, in pixels, of the rounded corners /// return this._radius; }, set_Radius : function(value) { if (value != this._radius) { this._radius = value; this.updateRoundedCorners(); this.raisePropertyChanged('Radius'); } }, get_Width : function() { /// /// Width in pixels of the drop shadow. The default value is 5 pixels. /// return this._width; }, set_Width : function(value) { if (value != this._width) { this._width = value; if (this._shadowDiv) { $common.setVisible(this._shadowDiv, value > 0); } this.setShadow(true); this.raisePropertyChanged('Width'); } }, get_TrackPositionDelay : function() { /// /// Length of the timer interval used when tracking the position of the target /// return this._trackPositionDelay; }, set_TrackPositionDelay : function(value) { if (value != this._trackPositionDelay) { this._trackPositionDelay = value; if (this._trackPosition) { this.stopTimer(); this.startTimer(); } this.raisePropertyChanged('TrackPositionDelay'); } }, get_TrackPosition : function() { /// /// Whether the drop shadow should track the position of the panel it is attached to. Use this if the panel is absolutely positioned or will otherwise move. /// return this._trackPosition; }, set_TrackPosition : function(value) { if (value != this._trackPosition) { this._trackPosition = value; if (this.get_element()) { if (value) { this.startTimer(); } else { this.stopTimer(); } } this.raisePropertyChanged('TrackPosition'); } } } AjaxControlToolkit.DropShadowBehavior.registerClass('AjaxControlToolkit.DropShadowBehavior', AjaxControlToolkit.BehaviorBase); // getDescriptor : function() { // var td = AjaxControlToolkit.DropShadowBehavior.callBaseMethod(this, 'getDescriptor'); // td.addProperty('Opacity', Number); // td.addProperty('Width', Number); // td.addProperty('TrackPosition', Boolean); // td.addProperty('TrackPositionDelay', Number); // td.addProperty('Rounded', Boolean); // td.addProperty('Radius', Number); // return td; // }, // (c) Copyright Microsoft Corporation. // This source is subject to the Microsoft Permissive License. // See http://www.microsoft.com/resources/sharedsource/licensingbasics/sharedsourcelicenses.mspx. // All other rights reserved. /// /// /// /// /// /// /// /// /// /// /// Type.registerNamespace('AjaxControlToolkit'); AjaxControlToolkit.ModalPopupRepositionMode = function() { /// /// The ModalPopupRepositionMode enumeration describes how the modal popup repositions /// /// /// /// /// throw Error.invalidOperation(); } AjaxControlToolkit.ModalPopupRepositionMode.prototype = { None : 0, RepositionOnWindowResize : 1, RepositionOnWindowScroll : 2, RepositionOnWindowResizeAndScroll : 3 } AjaxControlToolkit.ModalPopupRepositionMode.registerEnum('AjaxControlToolkit.ModalPopupRepositionMode'); AjaxControlToolkit.ModalPopupBehavior = function(element) { /// /// The ModalPopupBehavior is used to display the target element as a modal dialog /// /// /// DOM Element the behavior is associated with /// AjaxControlToolkit.ModalPopupBehavior.initializeBase(this, [element]); // Properties this._PopupControlID = null; this._PopupDragHandleControlID = null; this._BackgroundCssClass = null; this._DropShadow = false; this._Drag = false; this._OkControlID = null; this._CancelControlID = null; this._OnOkScript = null; this._OnCancelScript = null; this._xCoordinate = -1; this._yCoordinate = -1; this._repositionMode = AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowResizeAndScroll; // Variables this._backgroundElement = null; this._foregroundElement = null; this._relativeOrAbsoluteParentElement = null; this._popupElement = null; this._dragHandleElement = null; this._showHandler = null; this._okHandler = null; this._cancelHandler = null; this._scrollHandler = null; this._resizeHandler = null; this._windowHandlersAttached = false; this._dropShadowBehavior = null; this._dragBehavior = null; this._isIE6 = false; this._saveTabIndexes = new Array(); this._saveDesableSelect = new Array(); this._tagWithTabIndex = new Array('A','AREA','BUTTON','INPUT','OBJECT','SELECT','TEXTAREA','IFRAME'); } AjaxControlToolkit.ModalPopupBehavior.prototype = { initialize : function() { /// /// Initialize the behavior /// /*
*/ AjaxControlToolkit.ModalPopupBehavior.callBaseMethod(this, 'initialize'); this._isIE6 = (Sys.Browser.agent == Sys.Browser.InternetExplorer && Sys.Browser.version < 7); if(this._PopupDragHandleControlID) this._dragHandleElement = $get(this._PopupDragHandleControlID); this._popupElement = $get(this._PopupControlID); if(this._DropShadow) { this._foregroundElement = document.createElement('div'); this._foregroundElement.id = this.get_id() + '_foregroundElement'; this._popupElement.parentNode.appendChild(this._foregroundElement); this._foregroundElement.appendChild(this._popupElement); } else { this._foregroundElement = this._popupElement; } this._backgroundElement = document.createElement('div'); this._backgroundElement.id = this.get_id() + '_backgroundElement'; this._backgroundElement.style.display = 'none'; this._backgroundElement.style.position = 'fixed'; this._backgroundElement.style.left = '0px'; this._backgroundElement.style.top = '0px'; // Want zIndex to big enough that the background sits above everything else // CSS 2.1 defines no bounds for the type, so pick arbitrarily this._backgroundElement.style.zIndex = 10000; if (this._BackgroundCssClass) { this._backgroundElement.className = this._BackgroundCssClass; } this._foregroundElement.parentNode.appendChild(this._backgroundElement); this._foregroundElement.style.display = 'none'; this._foregroundElement.style.position = 'fixed'; this._foregroundElement.style.zIndex = $common.getCurrentStyle(this._backgroundElement, 'zIndex', this._backgroundElement.style.zIndex) + 1; this._showHandler = Function.createDelegate(this, this._onShow); $addHandler(this.get_element(), 'click', this._showHandler); if (this._OkControlID) { this._okHandler = Function.createDelegate(this, this._onOk); $addHandler($get(this._OkControlID), 'click', this._okHandler); } if (this._CancelControlID) { this._cancelHandler = Function.createDelegate(this, this._onCancel); $addHandler($get(this._CancelControlID), 'click', this._cancelHandler); } this._scrollHandler = Function.createDelegate(this, this._onLayout); this._resizeHandler = Function.createDelegate(this, this._onLayout); // Need to know when partial updates complete this.registerPartialUpdateEvents(); }, dispose : function() { /// /// Dispose the behavior /// // Going away; restore any changes to the page this._hideImplementation(); if (this._foregroundElement && this._foregroundElement.parentNode) { // Remove background we added to the DOM this._foregroundElement.parentNode.removeChild(this._backgroundElement); if(this._DropShadow) { // Remove DIV wrapper added in initialize this._foregroundElement.parentNode.appendChild(this._popupElement); this._foregroundElement.parentNode.removeChild(this._foregroundElement); } } this._scrollHandler = null; this._resizeHandler = null; if (this._cancelHandler && $get(this._CancelControlID)) { $removeHandler($get(this._CancelControlID), 'click', this._cancelHandler); this._cancelHandler = null; } if (this._okHandler && $get(this._OkControlID)) { $removeHandler($get(this._OkControlID), 'click', this._okHandler); this._okHandler = null; } if (this._showHandler) { $removeHandler(this.get_element(), 'click', this._showHandler); this._showHandler = null; } AjaxControlToolkit.ModalPopupBehavior.callBaseMethod(this, 'dispose'); }, _attachPopup : function() { /// /// Attach the event handlers for the popup /// if (this._DropShadow && !this._dropShadowBehavior) { this._dropShadowBehavior = $create(AjaxControlToolkit.DropShadowBehavior, {}, null, null, this._popupElement); } if (this._dragHandleElement && !this._dragBehavior) { this._dragBehavior = $create(AjaxControlToolkit.FloatingBehavior, {"handle" : this._dragHandleElement}, null, null, this._foregroundElement); } $addHandler(window, 'resize', this._resizeHandler); $addHandler(window, 'scroll', this._scrollHandler); this._windowHandlersAttached = true; }, _detachPopup : function() { /// /// Detach the event handlers for the popup /// if (this._windowHandlersAttached) { if (this._scrollHandler) { $removeHandler(window, 'scroll', this._scrollHandler); } if (this._resizeHandler) { $removeHandler(window, 'resize', this._resizeHandler); } this._windowHandlersAttached = false; } if (this._dragBehavior) { this._dragBehavior.dispose(); this._dragBehavior = null; } if (this._dropShadowBehavior) { this._dropShadowBehavior.dispose(); this._dropShadowBehavior = null; } }, _onShow : function(e) { /// /// Handler for the target's click event /// /// /// Event info /// if (!this.get_element().disabled) { this.show(); e.preventDefault(); return false; } }, _onOk : function(e) { /// /// Handler for the modal dialog's OK button click /// /// /// Event info /// var element = $get(this._OkControlID); if (element && !element.disabled) { if (this.hide() && this._OnOkScript) { window.setTimeout(this._OnOkScript, 0); } e.preventDefault(); return false; } }, _onCancel : function(e) { /// /// Handler for the modal dialog's Cancel button click /// /// /// Event info /// var element = $get(this._CancelControlID); if (element && !element.disabled) { if (this.hide() && this._OnCancelScript) { window.setTimeout(this._OnCancelScript, 0); } e.preventDefault(); return false; } }, _onLayout : function(e) { /// /// Handler for scrolling and resizing events that would require a repositioning of the modal dialog /// /// /// Event info /// var positioning = this.get_repositionMode(); if (((positioning === AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowScroll) || (positioning === AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowResizeAndScroll)) && (e.type === 'scroll')) { this._layout(); } else if (((positioning === AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowResize) || (positioning === AjaxControlToolkit.ModalPopupRepositionMode.RepositionOnWindowResizeAndScroll)) && (e.type === 'resize')) { this._layout(); } else { // Layout background element again to make sure it covers the whole background. // This needs to be called separately since _layout will not be always called // to reposition the popup depending on the RepositionMode but the background needs // to handle the resize/scroll every time. this._layoutBackgroundElement(); } }, show : function() { /// /// Display the element referenced by PopupControlID as a modal dialog /// var eventArgs = new Sys.CancelEventArgs(); this.raiseShowing(eventArgs); if (eventArgs.get_cancel()) { return; } this.populate(); this._attachPopup(); this._backgroundElement.style.display = ''; this._foregroundElement.style.display = ''; this._popupElement.style.display = ''; if (this._isIE6) { this._foregroundElement.style.position = 'absolute'; this._backgroundElement.style.position = 'absolute'; // find the relative or absolute parent var tempRelativeOrAbsoluteParent = this._foregroundElement.parentNode; while (tempRelativeOrAbsoluteParent && (tempRelativeOrAbsoluteParent != document.documentElement)) { if((tempRelativeOrAbsoluteParent.style.position != 'relative') && (tempRelativeOrAbsoluteParent.style.position != 'absolute')) { tempRelativeOrAbsoluteParent = tempRelativeOrAbsoluteParent.parentNode; } else { this._relativeOrAbsoluteParentElement = tempRelativeOrAbsoluteParent; break; } } } // Disable TAB this.disableTab(); this._layout(); // On pages that don't need scrollbars, Firefox and Safari act like // one or both are present the first time the layout code runs which // obviously leads to display issues - run the layout code a second // time to work around this problem this._layout(); this.raiseShown(Sys.EventArgs.Empty); }, disableTab : function() { /// /// Change the tab indices so we only tab through the modal popup /// (and hide SELECT tags in IE6) /// var i = 0; var tagElements; var tagElementsInPopUp = new Array(); Array.clear(this._saveTabIndexes); //Save all popup's tag in tagElementsInPopUp for (var j = 0; j < this._tagWithTabIndex.length; j++) { tagElements = this._foregroundElement.getElementsByTagName(this._tagWithTabIndex[j]); for (var k = 0 ; k < tagElements.length; k++) { tagElementsInPopUp[i] = tagElements[k]; i++; } } i = 0; for (var j = 0; j < this._tagWithTabIndex.length; j++) { tagElements = document.getElementsByTagName(this._tagWithTabIndex[j]); for (var k = 0 ; k < tagElements.length; k++) { if (Array.indexOf(tagElementsInPopUp, tagElements[k]) == -1) { this._saveTabIndexes[i] = {tag: tagElements[k], index: tagElements[k].tabIndex}; tagElements[k].tabIndex="-1"; i++; } } } //IE6 Bug with SELECT element always showing up on top i = 0; if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)) { //Save SELECT in PopUp var tagSelectInPopUp = new Array(); for (var j = 0; j < this._tagWithTabIndex.length; j++) { tagElements = this._foregroundElement.getElementsByTagName('SELECT'); for (var k = 0 ; k < tagElements.length; k++) { tagSelectInPopUp[i] = tagElements[k]; i++; } } i = 0; Array.clear(this._saveDesableSelect); tagElements = document.getElementsByTagName('SELECT'); for (var k = 0 ; k < tagElements.length; k++) { if (Array.indexOf(tagSelectInPopUp, tagElements[k]) == -1) { this._saveDesableSelect[i] = {tag: tagElements[k], visib: $common.getCurrentStyle(tagElements[k], 'visibility')} ; tagElements[k].style.visibility = 'hidden'; i++; } } } }, restoreTab : function() { /// /// Restore the tab indices so we tab through the page like normal /// (and restore SELECT tags in IE6) /// for (var i = 0; i < this._saveTabIndexes.length; i++) { this._saveTabIndexes[i].tag.tabIndex = this._saveTabIndexes[i].index; } Array.clear(this._saveTabIndexes); //IE6 Bug with SELECT element always showing up on top if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)) { for (var k = 0 ; k < this._saveDesableSelect.length; k++) { this._saveDesableSelect[k].tag.style.visibility = this._saveDesableSelect[k].visib; } Array.clear(this._saveDesableSelect); } }, hide : function() { /// /// Hide the modal dialog /// /// /// Whether or not the dialog was hidden /// var eventArgs = new Sys.CancelEventArgs(); this.raiseHiding(eventArgs); if (eventArgs.get_cancel()) { return false; } this._hideImplementation(); this.raiseHidden(Sys.EventArgs.Empty); return true; }, _hideImplementation : function() { /// /// Internal implementation to hide the modal dialog /// this._backgroundElement.style.display = 'none'; this._foregroundElement.style.display = 'none'; this.restoreTab(); this._detachPopup(); }, _layout : function() { /// /// Position the modal dialog /// var scrollLeft = (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft); var scrollTop = (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop); var clientBounds = $common.getClientBounds(); var clientWidth = clientBounds.width; var clientHeight = clientBounds.height; // Setup the location of the background element this._layoutBackgroundElement(); var xCoord = 0; var yCoord = 0; if(this._xCoordinate < 0) { var foregroundelementwidth = this._foregroundElement.offsetWidth? this._foregroundElement.offsetWidth: this._foregroundElement.scrollWidth; xCoord = ((clientWidth-foregroundelementwidth)/2); // workaround for drag behavior which calls setlocation which in turn // changes the position of the panel to be absolute and requiring us // to add the scrollLeft so that it is positioned correctly. if (this._foregroundElement.style.position == 'absolute') { xCoord += scrollLeft; } this._foregroundElement.style.left = xCoord + 'px'; } else { if(this._isIE6) { this._foregroundElement.style.left = (this._xCoordinate + scrollLeft) + 'px'; xCoord = this._xCoordinate + scrollLeft; } else { this._foregroundElement.style.left = this._xCoordinate + 'px'; xCoord = this._xCoordinate; } } if(this._yCoordinate < 0) { var foregroundelementheight = this._foregroundElement.offsetHeight? this._foregroundElement.offsetHeight: this._foregroundElement.scrollHeight; yCoord = ((clientHeight-foregroundelementheight)/2); // workaround for drag behavior which calls setlocation which in turn // changes the position of the panel to be absolute and requiring us // to add the scrollLeft so that it is positioned correctly. if (this._foregroundElement.style.position == 'absolute') { yCoord += scrollTop; } this._foregroundElement.style.top = yCoord + 'px'; } else { if(this._isIE6) { this._foregroundElement.style.top = (this._yCoordinate + scrollTop) + 'px'; yCoord = this._yCoordinate + scrollTop; } else { this._foregroundElement.style.top = this._yCoordinate + 'px'; yCoord = this._yCoordinate; } } // make sure get location agrees with the location of the foreground element this._layoutForegroundElement(xCoord, yCoord); if (this._dropShadowBehavior) { this._dropShadowBehavior.setShadow(); window.setTimeout(Function.createDelegate(this, this._fixupDropShadowBehavior), 0); } // layout background element again to make sure it covers the whole background // in case things moved around when laying out the foreground element this._layoutBackgroundElement(); }, _layoutForegroundElement : function(xCoord, yCoord) { /// /// Set the correct location of the foreground element to ensure that it is absolutely /// positioned with respect to the browser. This is just a workaround for IE 6 since /// elements nested in relative parents cause modal popup positioning issues and 'fixed' /// is not supported by IE 6. Hence we manually compute the right location of the popup. /// /// /// /// if (this._isIE6 && this._relativeOrAbsoluteParentElement) { var foregroundLocation = $common.getLocation(this._foregroundElement); var relativeParentLocation = $common.getLocation(this._relativeOrAbsoluteParentElement); var getLocationXCoord = foregroundLocation.x; if (getLocationXCoord != xCoord) { // offset it by that amount this._foregroundElement.style.left = (xCoord - relativeParentLocation.x) + 'px'; } var getLocationYCoord = foregroundLocation.y; if (getLocationYCoord != yCoord) { // offset it by that amount this._foregroundElement.style.top = (yCoord - relativeParentLocation.y) + 'px'; } } }, _layoutBackgroundElement : function() { /// /// Set the correct location of the background element to ensure that it is absolutely /// positioned with respect to the browser. /// // Background element needs to cover the visible client area completely hence its // top and left coordinates need to be 0, and if relatively positioned its getlocation // value needs to be 0. if(this._isIE6) { var backgroundLocation = $common.getLocation(this._backgroundElement); var backgroundXCoord = backgroundLocation.x; if (backgroundXCoord != 0) { // offset it by that amount. This is assuming only one level of nesting. If // multiple parents with absolute/relative positioning are setup this may not // cover the whole background. this._backgroundElement.style.left = (-backgroundXCoord) + 'px'; } var backgroundYCoord = backgroundLocation.y; if (backgroundYCoord != 0) { // offset it by that amount. This is assuming only one level of nesting. If // multiple parents with absolute/relative positioning are setup this may not // cover the whole background. this._backgroundElement.style.top = (-backgroundYCoord) + 'px'; } } var clientBounds = $common.getClientBounds(); var clientWidth = clientBounds.width; var clientHeight = clientBounds.height; this._backgroundElement.style.width = Math.max(Math.max(document.documentElement.scrollWidth, document.body.scrollWidth), clientWidth)+'px'; this._backgroundElement.style.height = Math.max(Math.max(document.documentElement.scrollHeight, document.body.scrollHeight), clientHeight)+'px'; }, _fixupDropShadowBehavior : function() { /// /// Some browsers don't update the location values immediately, so /// the location of the drop shadow would always be a step behind /// without this method /// if (this._dropShadowBehavior) { this._dropShadowBehavior.setShadow(); } }, _partialUpdateEndRequest : function(sender, endRequestEventArgs) { /// /// Show the popup if requested during a partial postback /// /// /// Sender /// /// /// Event arguments /// /// AjaxControlToolkit.ModalPopupBehavior.callBaseMethod(this, '_partialUpdateEndRequest', [sender, endRequestEventArgs]); if (this.get_element()) { // Look up result by element's ID var action = endRequestEventArgs.get_dataItems()[this.get_element().id]; if ("show" == action) { this.show(); } else if ("hide" == action) { this.hide(); } } // Async postback may have added content; re-layout to accomodate it this._layout(); }, _onPopulated : function(sender, eventArgs) { /// /// Re-layout the popup after we've dynamically populated /// /// /// Sender /// /// /// Event arguments /// /// AjaxControlToolkit.ModalPopupBehavior.callBaseMethod(this, '_onPopulated', [sender, eventArgs]); // Dynamic populate may have added content; re-layout to accomodate it this._layout(); }, get_PopupControlID : function() { /// /// The ID of the element to display as a modal popup /// return this._PopupControlID; }, set_PopupControlID : function(value) { if (this._PopupControlID != value) { this._PopupControlID = value; this.raisePropertyChanged('PopupControlID'); } }, get_X: function() { /// /// The number of pixels from the left of the browser to position the modal popup. /// return this._xCoordinate; }, set_X: function(value) { if (this._xCoordinate != value) { this._xCoordinate = value; this.raisePropertyChanged('X'); } }, get_Y: function() { /// /// The number of pixels from the top of the browser to position the modal popup. /// return this._yCoordinate; }, set_Y: function(value) { if (this._yCoordinate != value) { this._yCoordinate = value; this.raisePropertyChanged('Y'); } }, get_PopupDragHandleControlID : function() { /// /// The ID of the element to display as the drag handle for the modal popup /// return this._PopupDragHandleControlID; }, set_PopupDragHandleControlID : function(value) { if (this._PopupDragHandleControlID != value) { this._PopupDragHandleControlID = value; this.raisePropertyChanged('PopupDragHandleControlID'); } }, get_BackgroundCssClass : function() { /// /// The CSS class to apply to the background when the modal popup is displayed /// return this._BackgroundCssClass; }, set_BackgroundCssClass : function(value) { if (this._BackgroundCssClass != value) { this._BackgroundCssClass = value; this.raisePropertyChanged('BackgroundCssClass'); } }, get_DropShadow : function() { /// /// Whether or not a drop-shadow should be added to the modal popup /// return this._DropShadow; }, set_DropShadow : function(value) { if (this._DropShadow != value) { this._DropShadow = value; this.raisePropertyChanged('DropShadow'); } }, get_Drag : function() { /// /// Obsolete: Setting the _Drag property is a noop /// return this._Drag; }, set_Drag : function(value) { if (this._Drag != value) { this._Drag = value; this.raisePropertyChanged('Drag'); } }, get_OkControlID : function() { /// /// The ID of the element that dismisses the modal popup /// return this._OkControlID; }, set_OkControlID : function(value) { if (this._OkControlID != value) { this._OkControlID = value; this.raisePropertyChanged('OkControlID'); } }, get_CancelControlID : function() { /// /// The ID of the element that cancels the modal popup /// return this._CancelControlID; }, set_CancelControlID : function(value) { if (this._CancelControlID != value) { this._CancelControlID = value; this.raisePropertyChanged('CancelControlID'); } }, get_OnOkScript : function() { /// /// Script to run when the modal popup is dismissed with the OkControlID /// return this._OnOkScript; }, set_OnOkScript : function(value) { if (this._OnOkScript != value) { this._OnOkScript = value; this.raisePropertyChanged('OnOkScript'); } }, get_OnCancelScript : function() { /// /// Script to run when the modal popup is dismissed with the CancelControlID /// return this._OnCancelScript; }, set_OnCancelScript : function(value) { if (this._OnCancelScript != value) { this._OnCancelScript = value; this.raisePropertyChanged('OnCancelScript'); } }, get_repositionMode : function() { /// /// Determines if the ModalPopup should be repositioned on window resize/scroll /// return this._repositionMode; }, set_repositionMode : function(value) { if (this._repositionMode !== value) { this._repositionMode = value; this.raisePropertyChanged('RepositionMode'); } }, add_showing : function(handler) { /// /// Add an event handler for the showing event /// /// /// Event handler /// /// this.get_events().addHandler('showing', handler); }, remove_showing : function(handler) { /// /// Remove an event handler from the showing event /// /// /// Event handler /// /// this.get_events().removeHandler('showing', handler); }, raiseShowing : function(eventArgs) { /// /// Raise the showing event /// /// /// Event arguments for the showing event /// /// var handler = this.get_events().getHandler('showing'); if (handler) { handler(this, eventArgs); } }, add_shown : function(handler) { /// /// Add an event handler for the shown event /// /// /// Event handler /// /// this.get_events().addHandler('shown', handler); }, remove_shown : function(handler) { /// /// Remove an event handler from the shown event /// /// /// Event handler /// /// this.get_events().removeHandler('shown', handler); }, raiseShown : function(eventArgs) { /// /// Raise the shown event /// /// /// Event arguments for the shown event /// /// var handler = this.get_events().getHandler('shown'); if (handler) { handler(this, eventArgs); } }, add_hiding : function(handler) { /// /// Add an event handler for the hiding event /// /// /// Event handler /// /// this.get_events().addHandler('hiding', handler); }, remove_hiding : function(handler) { /// /// Remove an event handler from the hiding event /// /// /// Event handler /// /// this.get_events().removeHandler('hiding', handler); }, raiseHiding : function(eventArgs) { /// /// Raise the hiding event /// /// /// Event arguments for the hiding event /// /// var handler = this.get_events().getHandler('hiding'); if (handler) { handler(this, eventArgs); } }, add_hidden : function(handler) { /// /// Add an event handler for the hidden event /// /// /// Event handler /// /// this.get_events().addHandler('hidden', handler); }, remove_hidden : function(handler) { /// /// Remove an event handler from the hidden event /// /// /// Event handler /// /// this.get_events().removeHandler('hidden', handler); }, raiseHidden : function(eventArgs) { /// /// Raise the hidden event /// /// /// Event arguments for the hidden event /// /// var handler = this.get_events().getHandler('hidden'); if (handler) { handler(this, eventArgs); } } } AjaxControlToolkit.ModalPopupBehavior.registerClass('AjaxControlToolkit.ModalPopupBehavior', AjaxControlToolkit.DynamicPopulateBehaviorBase); AjaxControlToolkit.ModalPopupBehavior.invokeViaServer = function(behaviorID, show) { /// /// This static function (that is intended to be called from script emitted /// on the server) will show or hide the behavior associated with behaviorID /// (i.e. to use this, the ModalPopupExtender must have an ID or BehaviorID) and /// will either show or hide depending on the show parameter. /// /// /// ID of the modal popup behavior /// /// /// Whether to show or hide the modal popup /// var behavior = $find(behaviorID); if (behavior) { if (show) { behavior.show(); } else { behavior.hide(); } } }