/* START Telerik.Web.UI.Calendar.RadCalendarScript.js */
Type.registerNamespace("Telerik.Web.UI.Calendar");
Telerik.Web.UI.Calendar.DateTimeFormatInfo=function(_1){
this.DayNames=_1[0];
this.AbbreviatedDayNames=_1[1];
this.MonthNames=_1[2];
this.AbbreviatedMonthNames=_1[3];
this.FullDateTimePattern=_1[4];
this.LongDatePattern=_1[5];
this.LongTimePattern=_1[6];
this.MonthDayPattern=_1[7];
this.RFC1123Pattern=_1[8];
this.ShortDatePattern=_1[9];
this.ShortTimePattern=_1[10];
this.SortableDateTimePattern=_1[11];
this.UniversalSortableDateTimePattern=_1[12];
this.YearMonthPattern=_1[13];
this.AMDesignator=_1[14];
this.PMDesignator=_1[15];
this.DateSeparator=_1[16];
this.TimeSeparator=_1[17];
this.FirstDayOfWeek=_1[18];
this.CalendarWeekRule=0;
this.Calendar=null;
};
Telerik.Web.UI.Calendar.DateTimeFormatInfo.prototype={LeadZero:function(x){
return (x<0||x>9?"":"0")+x;
},FormatDate:function(_3,_4){
_4=_4+"";
_4=_4.replace(/%/ig,"");
var _5="";
var _6=0;
var c="";
var _8="";
var y=""+_3[0];
var M=_3[1];
var d=_3[2];
var E=this.Calendar.GetDayOfWeek(_3);
var H=0;
var m=0;
var s=0;
var _10,yy,MMM,MM,dd,hh,h,mm,ss,_19,HH,H,KK,K,kk,k;
var _1f=new Object();
if(y.length<4){
var _20=y.length;
for(var i=0;i<4-_20;i++){
y="0"+y;
}
}
var _22=y.substring(2,4);
var _23=0+_22;
if(_23<10){
_1f["y"]=""+_22.substring(1,2);
}else{
_1f["y"]=""+_22;
}
_1f["yyyy"]=y;
_1f["yy"]=_22;
_1f["M"]=M;
_1f["MM"]=this.LeadZero(M);
_1f["MMM"]=this.AbbreviatedMonthNames[M-1];
_1f["MMMM"]=this.MonthNames[M-1];
_1f["d"]=d;
_1f["dd"]=this.LeadZero(d);
_1f["dddd"]=this.DayNames[E];
_1f["ddd"]=this.AbbreviatedDayNames[E];
_1f["H"]=H;
_1f["HH"]=this.LeadZero(H);
if(H==0){
_1f["h"]=12;
}else{
if(H>12){
_1f["h"]=H-12;
}else{
_1f["h"]=H;
}
}
_1f["hh"]=this.LeadZero(_1f["h"]);
if(H>11){
_1f["tt"]="PM";
_1f["t"]="P";
}else{
_1f["tt"]="AM";
_1f["t"]="A";
}
_1f["m"]=m;
_1f["mm"]=this.LeadZero(m);
_1f["s"]=s;
_1f["ss"]=this.LeadZero(s);
while(_6<_4.length){
c=_4.charAt(_6);
_8="";
if(_4.charAt(_6)=="'"){
_6++;
while((_4.charAt(_6)!="'")){
_8+=_4.charAt(_6);
_6++;
}
_6++;
_5+=_8;
continue;
}
while((_4.charAt(_6)==c)&&(_6<_4.length)){
_8+=_4.charAt(_6++);
}
if(_1f[_8]!=null){
_5+=_1f[_8];
}else{
_5+=_8;
}
}
return _5;
}};
Telerik.Web.UI.Calendar.DateTimeFormatInfo.registerClass("Telerik.Web.UI.Calendar.DateTimeFormatInfo");
Type.registerNamespace("Telerik.Web.UI.Calendar");
Telerik.Web.UI.Calendar.MonthYearFastNavigation=function(_24,_25,_26,_27,_28,_29){
this.MonthNames=_24;
this.MinYear=_25;
this.MaxYear=_26;
this.Skin=_27;
this.CalendarID=_28;
this.TodayButtonCaption=_29[0];
this.OkButtonCaption=_29[1];
this.CancelButtonCaption=_29[2];
this.DateIsOutOfRangeMessage=_29[3];
};
Telerik.Web.UI.Calendar.MonthYearFastNavigation.prototype={CreateLayout:function(_2a){
var _2b=this;
var _2c=this.Month;
var _2d=document.createElement("TABLE");
_2d.id=this.CalendarID+"_FastNavPopup";
_2d.cellSpacing=0;
_2d.className=_2a[1];
_2d.style.cssText=_2a[0];
var _2e=this.MonthNames;
var _2f=_2e.length;
if(!_2e[12]){
_2f--;
}
var _30=Math.ceil(_2f/2);
_2d.YearRowsCount=_30-1;
var _31=0;
var row,_33;
this.YearCells=[];
this.MonthCells=[];
for(var i=0;i<_30;i++){
row=_2d.insertRow(_2d.rows.length);
_33=this.AddMonthCell(row,_31++);
if(null!=_33.Month){
this.MonthCells[this.MonthCells.length]=_33;
}
_33=this.AddMonthCell(row,_31++);
if(null!=_33.Month){
this.MonthCells[this.MonthCells.length]=_33;
}
_33=row.insertCell(row.cells.length);
this.FastNavPrevYears=_33;
_33.unselectable="on";
if(i<(_30-1)){
this.YearCells[this.YearCells.length]=_33;
_33.innerHTML="&nbsp;";
_33.onclick=function(){
_2b.SelectYear(this.Year);
};
}else{
_33.id="RadCalendar_FastNav_PrevYears";
_33.innerHTML="&lt;&lt;";
if(_2b.StartYear<_2b.MinYear[0]){
_33.style.color="GrayText";
}else{
_33.onclick=function(){
_2b.ScrollYears(-10);
};
}
}
_33=row.insertCell(row.cells.length);
this.FastNavNextYears=_33;
_33.unselectable="on";
if(i<(_30-1)){
this.YearCells[this.YearCells.length]=_33;
_33.innerHTML="&nbsp;";
_33.onclick=function(){
_2b.SelectYear(this.Year);
};
}else{
_33.id="RadCalendar_FastNav_NextYears";
_33.innerHTML="&gt;&gt;";
var _35=_2b.StartYear+10;
if(_35>_2b.MaxYear[0]){
_33.style.color="GrayText";
}else{
_33.onclick=function(){
_2b.ScrollYears(10);
};
}
}
}
row=_2d.insertRow(_2d.rows.length);
_33=row.insertCell(row.cells.length);
_33.className="bottom_"+this.Skin;
_33.colSpan=4;
_33.noWrap=true;
this.CreateButton("RadCalendar_FastNav_TodayButton",_33,this.TodayButtonCaption,Telerik.Web.UI.Calendar.Utils.AttachMethod(this.OnToday,this));
_33.appendChild(document.createTextNode(" "));
this.CreateButton("RadCalendar_FastNav_OkButton",_33,this.OkButtonCaption,Telerik.Web.UI.Calendar.Utils.AttachMethod(this.OnOK,this));
_33.appendChild(document.createTextNode(" "));
this.CreateButton("RadCalendar_FastNav_CancelButton",_33,this.CancelButtonCaption,Telerik.Web.UI.Calendar.Utils.AttachMethod(this.OnCancel,this));
return _2d;
},CreateButton:function(_36,_37,_38,_39){
var btn=document.createElement("INPUT");
btn.id=_36;
btn.type="button";
btn.value=_38;
if("function"==typeof (_39)){
btn.onclick=_39;
}
_37.appendChild(btn);
return btn;
},FillYears:function(){
var _3b=this.StartYear;
var _3c=this.YearCells;
var _3d=[];
var _3e;
var _3f=_3c.length/2;
for(var i=0;i<_3f;i++){
_3e=_3c[i*2];
this.SelectCell(_3e,false);
_3e.id="RadCalendar_FastNav_"+_3b.toString();
_3e.innerHTML=_3b;
_3e.Year=_3b;
if(_3e.Year<this.MinYear[0]||_3e.Year>this.MaxYear[0]){
_3e.onclick=null;
_3e.style.color="GrayText";
}else{
_3e.style.color="";
if(_3e.onclick==null){
var _41=this;
_3e.onclick=function(){
_41.SelectYear(this.Year);
};
}
}
_3d[_3b]=_3e;
_3e=_3c[i*2+1];
this.SelectCell(_3e,false);
_3e.id="RadCalendar_FastNav_"+(_3b+_3f).toString();
_3e.innerHTML=_3b+_3f;
_3e.Year=_3b+_3f;
if(_3e.Year<this.MinYear[0]||_3e.Year>this.MaxYear[0]){
_3e.onclick=null;
_3e.style.color="GrayText";
}else{
_3e.style.color="";
if(_3e.onclick==null){
var _41=this;
_3e.onclick=function(){
_41.SelectYear(this.Year);
};
}
}
_3d[_3b+_3f]=_3e;
_3b++;
}
this.YearsLookup=_3d;
},SelectCell:function(_42,_43){
if(_42){
_42.className=(false==_43?"":"selected_"+this.Skin);
}
},SelectYear:function(_44){
var _45=this.YearsLookup[_44];
this.Year=_44;
this.SelectCell(this.SelectedYearCell,false);
this.SelectCell(_45,true);
this.SelectedYearCell=_45;
},SelectMonth:function(_46){
var _47=this.MonthCells[_46];
this.Month=_46;
this.SelectCell(this.SelectedMonthCell,false);
this.SelectCell(_47,true);
this.SelectedMonthCell=_47;
},ScrollYears:function(_48){
this.StartYear+=_48;
this.FillYears();
this.SetNavCells();
},SetNavCells:function(){
var _49=this.StartYear+10;
var _4a=this.FastNavPrevYears;
var _4b=this.FastNavNextYears;
var _4c=this;
if(this.StartYear<this.MinYear[0]){
_4a.style.color="GrayText";
_4a.onclick=null;
}else{
_4a.style.color="";
if(_4a.onclick==null){
_4a.onclick=function(){
_4c.ScrollYears(-10);
};
}
}
if(_49>this.MaxYear[0]){
_4b.style.color="GrayText";
_4b.onclick=null;
}else{
_4b.style.color="";
if(_4b.onclick==null){
_4b.onclick=function(){
_4c.ScrollYears(10);
};
}
}
},AddMonthCell:function(row,_4e){
var _4f=row.insertCell(row.cells.length);
_4f.innerHTML="&nbsp;";
_4f.unselectable="on";
var _50=this.MonthNames[_4e];
if(_50){
_4f.id="RadCalendar_FastNav_"+_50;
_4f.innerHTML=_50;
_4f.Month=_4e;
var _51=this;
_4f.onclick=function(e){
_51.SelectMonth(this.Month);
};
}
return _4f;
},GetYear:function(){
return this.Year;
},GetMonth:function(){
return this.Month;
},Show:function(_53,x,y,_56,_57,_58,_59){
if(!_53){
return;
}
this.Popup=_53;
this.StartYear=_57-4;
var _5a=this.DomElement;
if(!_5a){
_5a=this.CreateLayout(_59);
this.DomElement=_5a;
}else{
this.SetNavCells();
}
this.FillYears();
this.SelectYear(_57);
this.SelectMonth(_56-1);
this.ExitFunc=_58;
_53.Show(x,y,_5a,Telerik.Web.UI.Calendar.Utils.AttachMethod(this.OnExit,this));
},OnExit:function(){
if("function"==typeof (this.ExitFunc)){
this.ExitFunc(this.Year,this.Month,this.Date);
this.Date=null;
}
},OnToday:function(e){
var _5c=new Date();
this.Date=_5c.getDate();
this.Month=_5c.getMonth();
this.Year=_5c.getFullYear();
this.Popup.Hide(true);
},OnOK:function(e){
this.Popup.Hide(true);
},OnCancel:function(e){
this.Popup.Hide();
},dispose:function(){
if(this.DomElement){
var _5f=this.DomElement.getElementsByTagName("TD");
for(var i=0;i<_5f.length;i++){
_5f[i].onclick=null;
}
this.DomElement=null;
}
}};
Telerik.Web.UI.Calendar.MonthYearFastNavigation.registerClass("Telerik.Web.UI.Calendar.MonthYearFastNavigation",null,Sys.IDisposable);
Type.registerNamespace("Telerik.Web.UI");
Telerik.Web.UI.RadCalendar=function(_61){
Telerik.Web.UI.RadCalendar.initializeBase(this,[_61]);
this._formatInfoArray=null;
this._specialDaysArray=null;
this._viewsHash=null;
this._monthYearNavigationSettings=null;
this._stylesHash=null;
this._dayRenderChangedDays=null;
this._viewRepeatableDays=null;
this._postBackCall=null;
this._firstDayOfWeek=null;
this._skin=null;
this._calendarWeekRule=null;
this._enabled=true;
this._useColumnHeadersAsSelectors=true;
this._useRowHeadersAsSelectors=true;
this._showOtherMonthsDays=true;
this._enableMultiSelect=true;
this._singleViewColumns=7;
this._singleViewRows=6;
this._multiViewColumns=1;
this._multiViewRows=1;
this._fastNavigationStep=3;
this._enableNavigationAnimation=false;
this._cellDayFormat="%d";
this._presentationType=Telerik.Web.UI.Calendar.PresentationType.Interactive;
this._orientation=Telerik.Web.UI.Calendar.Orientation.RenderInRows;
this._titleFormat="MMMM yyyy";
this._dayCellToolTipFormat="dddd, MMMM dd, yyyy";
this._dateRangeSeparator=" - ";
this._autoPostBack=false;
this._calendarEnableNavigation=true;
this._calendarEnableMonthYearFastNavigation=true;
this._enableRepeatableDaysOnClient=true;
this._onLoadDelegate=null;
};
Telerik.Web.UI.RadCalendar.prototype={initialize:function(){
Telerik.Web.UI.RadCalendar.callBaseMethod(this,"initialize");
this.EnableTodayButtonSelection=(this.get_monthYearNavigationSettings()[4]=="False")?false:true;
this.DateTimeFormatInfo=new Telerik.Web.UI.Calendar.DateTimeFormatInfo(this.get__FormatInfoArray());
this.DateTimeFormatInfo.Calendar=Telerik.Web.UI.Calendar.GregorianCalendar;
this.DateTimeFormatInfo.CalendarWeekRule=this._calendarWeekRule;
var i,j,_64;
var _65=this._auxDatesHidden();
var _66=eval(_65.value);
this.RangeMinDate=_66[0];
this.RangeMaxDate=_66[1];
this.FocusedDate=_66[2];
this.SpecialDays=new Telerik.Web.UI.Calendar.DateCollection();
for(i=0;i<this.get_specialDaysArray().length;i++){
var rd=new Telerik.Web.UI.Calendar.RenderDay(this.get_specialDaysArray()[i]);
this.SpecialDays.Add(rd.get_date(),rd);
}
this.RecurringDays=new Telerik.Web.UI.Calendar.DateCollection();
for(var _68 in this.get__ViewRepeatableDays()){
if(!this.get__ViewRepeatableDays().hasOwnProperty(_68)){
continue;
}
var _69=_68.split("_");
var _6a=this.get__ViewRepeatableDays()[_68].split("_");
var _6b=this.SpecialDays.Get(_6a);
this.RecurringDays.Add(_69,_6b);
}
this.RangeValidation=new Telerik.Web.UI.Calendar.RangeValidation(this.RangeMinDate,this.RangeMaxDate);
this.Selection=new Telerik.Web.UI.Calendar.Selection(this.RangeValidation,this.SpecialDays,this.RecurringDays,this.get_enableMultiSelect());
var _6c=[];
for(var _6d in this.get__ViewsHash()){
if(!this.get__ViewsHash().hasOwnProperty(_6d)){
continue;
}
_6c[_6c.length]=_6d;
}
this._topViewID=_6c[0];
this._titleID=this.get_id()+"_Title";
var _6e=this._selectedDatesHidden();
var _6f=eval(_6e.value);
for(i=0;i<_6f.length;i++){
this.Selection.Add(_6f[i]);
}
this._lastSelectedDate=null;
this._calendarDomObject=$get(this.get_id());
this._viewIDs=_6c;
this._initViews();
this._enableNavigation(this._isNavigationEnabled());
this._attachEventHandlers();
this.raise_init(Sys.EventArgs.Empty);
},dispose:function(){
if(!this.disposed){
this.disposed=true;
this._destroyViews();
this._calendarDomObject=null;
if(this.MonthYearFastNav){
this.MonthYearFastNav.dispose();
}
}
Telerik.Web.UI.RadCalendar.callBaseMethod(this,"dispose");
},selectDate:function(_70,_71){
if(this.EnableDateSelect==false){
return false;
}
this._performDateSelection(_70,true,_71);
},selectDates:function(_72,_73){
if(false==this.EnableDateSelect){
return false;
}
for(var i=0;i<_72.length;i++){
this._performDateSelection(_72[i],true,false,false);
}
this.navigateToDate(_72[_72.length-1]);
},unselectDate:function(_75){
if(false==this.EnableDateSelect){
return false;
}
this._performDateSelection(_75,false,false);
},unselectDates:function(_76){
if(false==this.EnableDateSelect){
return false;
}
for(var i=0;i<_76.length;i++){
this._performDateSelection(_76[i],false,false,true);
}
this._submit("d");
},calculateDateFromStep:function(_78){
var _79=this.CurrentViews[0];
if(!_79){
return;
}
var _7a=(_78<0?_79._MonthStartDate:_79._MonthEndDate);
_7a=this.DateTimeFormatInfo.Calendar.AddDays(_7a,_78);
return _7a;
},navigateToDate:function(_7b){
if(!this.RangeValidation.IsDateValid(_7b)){
_7b=this._getBoundaryDate(_7b);
if(_7b==null){
alert(this._getFastNavigation().DateIsOutOfRangeMessage);
return;
}
}
var _7c=this._getStepFromDate(_7b);
this._navigate(_7c);
},GetSelectedDates:function(){
return this.get_selectedDates();
},GetRangeMinDate:function(){
return this.get_rangeMinDate();
},SetRangeMinDate:function(_7d){
this.set_rangeMinDate(_7d);
},GetRangeMaxDate:function(){
return this.get_rangeMaxDate();
},SetRangeMaxDate:function(_7e){
this.set_rangeMaxDate(_7e);
},get_selectedDates:function(){
return this.Selection._selectedDates.GetValues();
},get_rangeMinDate:function(){
return this.RangeMinDate;
},set_rangeMinDate:function(_7f){
if(this.RangeValidation.CompareDates(_7f,this.RangeMaxDate)>0){
alert("RangeMinDate should be less than the RangeMaxDate value!");
return;
}
var _80=this.RangeMinDate;
this.RangeMinDate=_7f;
this.RangeValidation._rangeMinDate=_7f;
this.MonthYearFastNav=null;
var _81=[this.FocusedDate[0],this.FocusedDate[1],1];
if(this.RangeValidation.CompareDates(_81,this.RangeMinDate)<=0||this.RangeValidation.InSameMonth(_81,_80)||this.RangeValidation.InSameMonth(_81,this.RangeMinDate)){
if(!this.RangeValidation.IsDateValid(this.FocusedDate)){
var _82=new Date();
_82.setFullYear(_7f[0],_7f[1]-1,_7f[2]+1);
this.FocusedDate=[_82.getFullYear(),_82.getMonth()+1,_82.getDate()];
}
this._moveToDate(this.FocusedDate,true);
}
this._serializeAuxDates();
this._updateSelectedDates();
},get_rangeMaxDate:function(){
return this.RangeMaxDate;
},set_rangeMaxDate:function(_83){
if(this.RangeValidation.CompareDates(_83,this.RangeMinDate)<0){
alert("RangeMaxDate should be greater than the RangeMinDate value!");
return;
}
var _84=this.RangeMaxDate;
this.RangeMaxDate=_83;
this.RangeValidation._rangeMaxDate=_83;
this.MonthYearFastNav=null;
var _85=[this.FocusedDate[0],this.FocusedDate[1],1];
if(this.RangeValidation.CompareDates(_85,this.RangeMaxDate)>0||this.RangeValidation.InSameMonth(_85,_84)||this.RangeValidation.InSameMonth(_85,this.RangeMaxDate)){
if(!this.RangeValidation.IsDateValid(this.FocusedDate)){
var _86=new Date();
_86.setFullYear(_83[0],_83[1]-1,_83[2]-1);
this.FocusedDate=[_86.getFullYear(),_86.getMonth()+1,_86.getDate()];
}
this._moveToDate(this.FocusedDate,true);
}
this._serializeAuxDates();
this._updateSelectedDates();
},get_focusedDate:function(){
return this.FocusedDate;
},set_focusedDate:function(_87){
this.FocusedDate=_87;
},get_specialDaysArray:function(){
return this._specialDaysArray;
},set_specialDaysArray:function(_88){
if(this._specialDaysArray!==_88){
this._specialDaysArray=_88;
this.raisePropertyChanged("specialDaysArray");
}
},get_enabled:function(){
return this._enabled;
},set_enabled:function(_89){
if(this._enabled!==_89){
this._enabled=_89;
this.raisePropertyChanged("enabled");
}
},get_useColumnHeadersAsSelectors:function(){
return this._useColumnHeadersAsSelectors;
},set_useColumnHeadersAsSelectors:function(_8a){
if(this._useColumnHeadersAsSelectors!==_8a){
this._useColumnHeadersAsSelectors=_8a;
this.raisePropertyChanged("useColumnHeadersAsSelectors");
}
},get_useRowHeadersAsSelectors:function(){
return this._useRowHeadersAsSelectors;
},set_useRowHeadersAsSelectors:function(_8b){
if(this._useRowHeadersAsSelectors!==_8b){
this._useRowHeadersAsSelectors=_8b;
this.raisePropertyChanged("useRowHeadersAsSelectors");
}
},get_showOtherMonthsDays:function(){
return this._showOtherMonthsDays;
},set_showOtherMonthsDays:function(_8c){
if(this._showOtherMonthsDays!==_8c){
this._showOtherMonthsDays=_8c;
this.raisePropertyChanged("showOtherMonthsDays");
}
},get_enableMultiSelect:function(){
return this._enableMultiSelect;
},set_enableMultiSelect:function(_8d){
if(this._enableMultiSelect!==_8d){
this._enableMultiSelect=_8d;
this.raisePropertyChanged("enableMultiSelect");
}
},get_singleViewColumns:function(){
return this._singleViewColumns;
},set_singleViewColumns:function(_8e){
if(this._singleViewColumns!==_8e){
this._singleViewColumns=_8e;
this.raisePropertyChanged("singleViewColumns");
}
},get_singleViewRows:function(){
return this._singleViewRows;
},set_singleViewRows:function(_8f){
if(this._singleViewRows!==_8f){
this._singleViewRows=_8f;
this.raisePropertyChanged("singleViewRows");
}
},get_multiViewColumns:function(){
return this._multiViewColumns;
},set_multiViewColumns:function(_90){
if(this._multiViewColumns!==_90){
this._multiViewColumns=_90;
this.raisePropertyChanged("multiViewColumns");
}
},get_multiViewRows:function(){
return this._multiViewRows;
},set_multiViewRows:function(_91){
if(this._multiViewRows!==_91){
this._multiViewRows=_91;
this.raisePropertyChanged("multiViewRows");
}
},get_fastNavigationStep:function(){
return this._fastNavigationStep;
},set_fastNavigationStep:function(_92){
if(this._fastNavigationStep!==_92){
this._fastNavigationStep=_92;
this.raisePropertyChanged("fastNavigationStep");
}
},get_skin:function(){
return this._skin;
},set_skin:function(_93){
if(this._skin!==_93){
this._skin=_93;
this.raisePropertyChanged("skin");
}
},get_enableNavigationAnimation:function(){
return this._enableNavigationAnimation;
},set_enableNavigationAnimation:function(_94){
if(this._enableNavigationAnimation!==_94){
this._enableNavigationAnimation=_94;
this.raisePropertyChanged("enableNavigationAnimation");
}
},get_cellDayFormat:function(){
return this._cellDayFormat;
},set_cellDayFormat:function(_95){
if(this._cellDayFormat!==_95){
this._cellDayFormat=_95;
this.raisePropertyChanged("cellDayFormat");
}
},get_presentationType:function(){
return this._presentationType;
},set_presentationType:function(_96){
if(this._presentationType!==_96){
this._presentationType=_96;
this.raisePropertyChanged("presentationType");
}
},get_orientation:function(){
return this._orientation;
},set_orientation:function(_97){
if(this._orientation!==_97){
this._orientation=_97;
this.raisePropertyChanged("orientation");
}
},get_titleFormat:function(){
return this._titleFormat;
},set_titleFormat:function(_98){
if(this._titleFormat!==_98){
this._titleFormat=_98;
this.raisePropertyChanged("titleFormat");
}
},get_dayCellToolTipFormat:function(){
return this._dayCellToolTipFormat;
},set_dayCellToolTipFormat:function(_99){
if(this._dayCellToolTipFormat!==_99){
this._dayCellToolTipFormat=_99;
this.raisePropertyChanged("dayCellToolTipFormat");
}
},get_dateRangeSeparator:function(){
return this._dateRangeSeparator;
},set_dateRangeSeparator:function(_9a){
if(this._dateRangeSeparator!==_9a){
this._dateRangeSeparator=_9a;
this.raisePropertyChanged("dateRangeSeparator");
}
},get_autoPostBack:function(){
return this._autoPostBack;
},set_autoPostBack:function(_9b){
if(this._autoPostBack!==_9b){
this._autoPostBack=_9b;
this.raisePropertyChanged("autoPostBack");
}
},get_calendarEnableNavigation:function(){
return this._calendarEnableNavigation;
},set_calendarEnableNavigation:function(_9c){
if(this._calendarEnableNavigation!==_9c){
this._calendarEnableNavigation=_9c;
this.raisePropertyChanged("calendarEnableNavigation");
}
},get_calendarEnableMonthYearFastNavigation:function(){
return this._calendarEnableMonthYearFastNavigation;
},set_calendarEnableMonthYearFastNavigation:function(_9d){
if(this._calendarEnableMonthYearFastNavigation!==_9d){
this._calendarEnableMonthYearFastNavigation=_9d;
this.raisePropertyChanged("calendarEnableMonthYearFastNavigation");
}
},get_enableRepeatableDaysOnClient:function(){
return this._enableRepeatableDaysOnClient;
},set_enableRepeatableDaysOnClient:function(_9e){
if(this._enableRepeatableDaysOnClient!==_9e){
this._enableRepeatableDaysOnClient=_9e;
this.raisePropertyChanged("enableRepeatableDaysOnClient");
}
},get_monthYearNavigationSettings:function(){
return this._monthYearNavigationSettings;
},set_monthYearNavigationSettings:function(_9f){
if(this._monthYearNavigationSettings!==_9f){
this._monthYearNavigationSettings=_9f;
this.raisePropertyChanged("monthYearNavigationSettings");
}
},get_stylesHash:function(){
return this._stylesHash;
},set_stylesHash:function(_a0){
if(this._stylesHash!==_a0){
this._stylesHash=_a0;
this.raisePropertyChanged("stylesHash");
}
},_destroyViews:function(){
for(var i=this._viewIDs.length-1;i>=0;i--){
this._disposeView(this._viewIDs[i]);
}
this.CurrentViews=null;
this._viewsHash=null;
},_attachEventHandlers:function(){
this._onLoadDelegate=Function.createDelegate(this,this._onLoadHandler);
Sys.Application.add_load(this._onLoadDelegate);
},_isRtl:function(){
if(typeof (this.Rtl)=="undefined"){
this.Rtl=(this._getTextDirection()=="rtl");
}
return this.Rtl;
},_getTextDirection:function(){
var _a2=this._calendarDomObject;
while(_a2!=null){
if(_a2.dir.toLowerCase()=="rtl"){
return "rtl";
}
_a2=_a2.parentNode;
}
return "ltr";
},_getItemStyle:function(_a3,_a4,_a5,_a6,_a7,_a8){
var _a9;
if(_a4){
_a9=this.get_stylesHash()["OutOfRangeDayStyle"];
}else{
if(_a3&&!this.get_showOtherMonthsDays()){
_a9=this.get_stylesHash()["OtherMonthDayStyle"];
}else{
if(_a6){
_a9=this.get_stylesHash()["SelectedDayStyle"];
}else{
if(_a8){
_a9=_a8;
}else{
if(_a3){
_a9=this.get_stylesHash()["OtherMonthDayStyle"];
}else{
if(_a5){
_a9=this.get_stylesHash()["WeekendDayStyle"];
}else{
_a9=this.get_stylesHash()["DayStyle"];
}
}
}
}
}
}
return _a9;
},_isNavigationEnabled:function(){
if(!this.get_enabled()||!this.get_calendarEnableNavigation()){
return false;
}
return true;
},_isMonthYearNavigationEnabled:function(){
if(!this.get_enabled()||!this.get_calendarEnableMonthYearFastNavigation()){
return false;
}
return true;
},_enableNavigation:function(_aa){
_aa=(false!=_aa);
var el=$get(this.get_id()+"_FNP");
if(el){
el.onclick=(!_aa?null:Telerik.Web.UI.Calendar.Utils.AttachMethod(this._fastNavigatePrev,this));
}
el=$get(this.get_id()+"_NP");
if(el){
el.onclick=(!_aa?null:Telerik.Web.UI.Calendar.Utils.AttachMethod(this._navigatePrev,this));
}
el=$get(this.get_id()+"_NN");
if(el){
el.onclick=(!_aa?null:Telerik.Web.UI.Calendar.Utils.AttachMethod(this._navigateNext,this));
}
el=$get(this.get_id()+"_FNN");
if(el){
el.onclick=(!_aa?null:Telerik.Web.UI.Calendar.Utils.AttachMethod(this._fastNavigateNext,this));
}
el=$get(this._titleID);
if(el&&this._isMonthYearNavigationEnabled()){
el.onclick=Telerik.Web.UI.Calendar.Utils.AttachMethod(this._showMonthYearFastNav,this);
el.oncontextmenu=Telerik.Web.UI.Calendar.Utils.AttachMethod(this._showMonthYearFastNav,this);
}
},_findRenderDay:function(_ac){
var _ad=null;
for(var i=0;i<this.CurrentViews.length;i++){
var _af=this.CurrentViews[i];
if(_af.RenderDays==null){
continue;
}
_ad=_af.RenderDays.Get(_ac);
if(_ad!=null){
return _ad;
}
}
return null;
},_performDateSelection:function(_b0,_b1,_b2,_b3){
if(this.Selection.CanSelect(_b0)){
if(_b2==true){
this.navigateToDate(_b0);
}
var _b4=this._findRenderDay(_b0);
if(_b1){
if(_b4){
_b4.Select(true,_b3);
}else{
var _b5=this._findRenderDay(this._lastSelectedDate);
if(_b5&&!this.get_enableMultiSelect()){
_b5.PerformSelect(false);
}
this.Selection.Add(_b0);
this._serializeSelectedDates();
this._lastSelectedDate=_b0;
}
}else{
if(_b4){
_b4.Select(false,_b3);
}else{
this.Selection.Remove(_b0);
this._serializeSelectedDates();
}
}
}
},_disposeView:function(_b6){
for(var i=0;i<this.CurrentViews.length;i++){
var _b8=this.CurrentViews[i];
if(_b8.DomTable&&_b8.DomTable.id==_b6){
_b8.dispose();
this.CurrentViews.splice(i,1);
return;
}
}
},_findView:function(_b9){
var _ba=null;
for(var i=0;i<this.CurrentViews.length;i++){
var _bc=this.CurrentViews[i];
if(_bc.DomTable.id==_b9){
_ba=_bc;
break;
}
}
return _ba;
},_initViews:function(_bd){
if(!_bd){
_bd=this._viewIDs;
}
this.CurrentViews=[];
var _be;
for(var i=0;i<_bd.length;i++){
_be=(i==0&&_bd.length>1);
var _c0=_bd[i];
var _c1=new Telerik.Web.UI.Calendar.CalendarView(this,$get(_bd[i]),_c0,_be?this.get_multiViewColumns():this.get_singleViewColumns(),_be?this.get_multiViewRows():this.get_singleViewRows(),_be,this.get_useRowHeadersAsSelectors(),this.get_useColumnHeadersAsSelectors(),this.get_orientation());
_c1.MonthsInView=this.get__ViewsHash()[_c0][1];
this._disposeView(_bd[i]);
this.CurrentViews[i]=_c1;
}
if((typeof (this.CurrentViews)!="undefined")&&(typeof (this.CurrentViews[0])!="undefined")&&this.CurrentViews[0].IsMultiView){
this.CurrentViews[0]._ViewStartDate=this.CurrentViews[0]._MonthStartDate=this.CurrentViews[1]._MonthStartDate;
this.CurrentViews[0]._ViewEndDate=this.CurrentViews[0]._MonthEndDate=this.CurrentViews[(this.CurrentViews.length-1)]._MonthEndDate;
}
},_serializeSelectedDates:function(){
var _c2="[";
var _c3=this.Selection._selectedDates.GetValues();
for(var i=0;i<_c3.length;i++){
if(_c3[i]){
_c2+="["+_c3[i][0]+","+_c3[i][1]+","+_c3[i][2]+"],";
}
}
if(_c2.length>1){
_c2=_c2.substring(0,_c2.length-1);
}
_c2+="]";
if(this._selectedDatesHidden()!=null){
this._selectedDatesHidden().value=_c2;
}
},_selectedDatesHidden:function(){
return $get(this.get_id()+"_SD");
},_serializeAuxDates:function(){
var _c5="[["+this.RangeMinDate+"],["+this.RangeMaxDate+"],["+this.FocusedDate+"]]";
if(this._auxDatesHidden()!=null){
this._auxDatesHidden().value=_c5;
}
},_auxDatesHidden:function(){
return $get(this.get_id()+"_AD");
},_submit:function(_c6){
if(this.get_autoPostBack()){
this._doPostBack(_c6);
}else{
this._execClientAction(_c6);
}
},_deserializeNavigationArgument:function(_c7){
var _c8=_c7.split(":");
return _c8;
},_execClientAction:function(_c9){
var _ca=_c9.split(":");
switch(_ca[0]){
case "d":
break;
case "n":
if(!this.CurrentViews[0].IsMultiView){
var _cb=parseInt(_ca[1],0);
var _cc=parseInt(_ca[2],0);
this._moveByStep(_cb,_cc);
}
break;
case "nd":
var _cd=[parseInt(_ca[1]),parseInt(_ca[2]),parseInt(_ca[3])];
this._moveToDate(_cd);
break;
}
},_moveByStep:function(_ce,_cf){
var _d0=this.CurrentViews[0];
if(!_d0){
return;
}
var _d1=(_ce<0?_d0._MonthStartDate:_d0._MonthEndDate);
_d1=this.DateTimeFormatInfo.Calendar.AddMonths(_d1,_ce);
if(!this.RangeValidation.IsDateValid(_d1)){
if(_ce>0){
_d1=[this.RangeMaxDate[0],this.RangeMaxDate[1],this.RangeMaxDate[2]];
}else{
_d1=[this.RangeMinDate[0],this.RangeMinDate[1],this.RangeMinDate[2]];
}
}
if(_ce!=0){
this._moveToDate(_d1);
}
},_moveToDate:function(_d2,_d3){
if(typeof (_d3)=="undefined"){
_d3=false;
}
if(!this.RangeValidation.IsDateValid(_d2)){
_d2=this._getBoundaryDate(_d2);
if(_d2==null){
alert(this._getFastNavigation().DateIsOutOfRangeMessage);
return;
}
}
var _d4=this.FocusedDate;
this.FocusedDate=_d2;
_d2[2]=_d4[2]=1;
var _d5=this.RangeValidation.CompareDates(_d2,_d4);
if(_d5==0&&!_d3){
return;
}
var _d6=this._viewIDs[0];
var _d7=false;
this._disposeView(_d6);
var _d8=new Telerik.Web.UI.Calendar.CalendarView(this,$get(_d6),_d6,_d7?this.get_multiViewColumns():this.get_singleViewColumns(),_d7?this.get_multiViewRows():this.get_singleViewRows(),_d7,this.get_useRowHeadersAsSelectors(),this.get_useColumnHeadersAsSelectors(),this.get_orientation(),_d2);
this.CurrentViews[this.CurrentViews.length]=_d8;
_d8.ScrollDir=_d5;
_d8.RenderDaysSingleView();
},_checkRequestConditions:function(_d9){
var _da=this._deserializeNavigationArgument(_d9);
var _db=0;
var _dc=null;
if(_da[0]!="d"){
if(_da[0]=="n"){
_db=parseInt(_da[1],0);
_dc=this.calculateDateFromStep(_db);
}else{
if(_da[0]=="nd"){
_dc=[parseInt(_da[1]),parseInt(_da[2]),parseInt(_da[3])];
}
}
if(!this.RangeValidation.IsDateValid(_dc)){
_dc=this._getBoundaryDate(_dc);
if(_dc==null){
alert(this._getFastNavigation().DateIsOutOfRangeMessage);
return false;
}
}
}
return true;
},_doPostBack:function(_dd){
if(this._checkRequestConditions(_dd)){
var _de=this._postBackCall.replace("@@",_dd);
if(this.postbackAction!=null){
window.clearTimeout(this.postbackAction);
}
var _df=this;
this.postbackAction=window.setTimeout(function(){
_df.postbackAction=null;
eval(_de);
},200);
}
},_getStepFromDate:function(_e0){
var _e1=_e0[0]-this.FocusedDate[0];
var _e2=_e0[1]-this.FocusedDate[1];
var _e3=_e1*12+_e2;
return _e3;
},_getBoundaryDate:function(_e4){
if(!this.RangeValidation.IsDateValid(_e4)){
if(this._isInSameMonth(_e4,this.RangeMinDate)){
return [this.RangeMinDate[0],this.RangeMinDate[1],this.RangeMinDate[2]];
}
if(this._isInSameMonth(_e4,this.RangeMaxDate)){
return [this.RangeMaxDate[0],this.RangeMaxDate[1],this.RangeMaxDate[2]];
}
return null;
}
return _e4;
},_navigate:function(_e5){
var _e6=new Telerik.Web.UI.CalendarViewChangingEventArgs(_e5);
this.raise_calendarViewChanging(_e6);
if(_e6.get_cancel()){
return;
}
this.navStep=_e5;
this._submit("n:"+_e5);
this._serializeAuxDates();
var _e7=new Telerik.Web.UI.CalendarViewChangedEventArgs(_e5);
this.raise_calendarViewChanged(_e7);
},_fastNavigatePrev:function(){
var _e8=this._findView(this._topViewID);
var _e9=(-this.get_fastNavigationStep())*_e8.MonthsInView;
this._navigate(_e9);
return false;
},_navigatePrev:function(){
var _ea=this._findView(this._topViewID);
this._navigate(-_ea.MonthsInView);
return false;
},_navigateNext:function(){
var _eb=this._findView(this._topViewID);
this._navigate(_eb.MonthsInView);
return false;
},_fastNavigateNext:function(){
var _ec=this._findView(this._topViewID);
var _ed=this.get_fastNavigationStep()*_ec.MonthsInView;
this._navigate(_ed);
return false;
},_getRenderDayID:function(_ee){
return (this.get_id()+"_"+_ee.join("_"));
},_isInSameMonth:function(_ef,_f0){
if(!_ef||_ef.length!=3){
throw new Error("Date1 must be array: [y, m, d]");
}
if(!_f0||_f0.length!=3){
throw new Error("Date2 must be array: [y, m, d]");
}
var y1=_ef[0];
var y2=_f0[0];
if(y1<y2){
return false;
}
if(y1>y2){
return false;
}
var m1=_ef[1];
var m2=_f0[1];
if(m1<m2){
return false;
}
if(m1>m2){
return false;
}
return true;
},_getFastNavigation:function(){
var _f5=this.MonthYearFastNav;
if(!_f5){
_f5=new Telerik.Web.UI.Calendar.MonthYearFastNavigation(this.DateTimeFormatInfo.AbbreviatedMonthNames,this.RangeMinDate,this.RangeMaxDate,this.get_skin(),this.get_id(),this.get_monthYearNavigationSettings());
this.MonthYearFastNav=_f5;
}
return this.MonthYearFastNav;
},_showMonthYearFastNav:function(e){
if(!e){
e=window.event;
}
this._enableNavigation(this._isNavigationEnabled());
if(this._isMonthYearNavigationEnabled()){
this._getFastNavigation().Show(this._getPopup(),RadHelperUtils.MouseEventX(e),RadHelperUtils.MouseEventY(e),this.FocusedDate[1],this.FocusedDate[0],Telerik.Web.UI.Calendar.Utils.AttachMethod(this._monthYearFastNavExitFunc,this),this.get_stylesHash()["FastNavigationStyle"]);
}
e.returnValue=false;
e.cancelBubble=true;
if(e.stopPropagation){
e.stopPropagation();
}
if(!document.all){
window.setTimeout(function(){
try{
document.getElementsByTagName("INPUT")[0].focus();
}
catch(ex){
}
},1);
}
return false;
},_getPopup:function(){
var _f7=this.Popup;
if(!_f7){
_f7=new Telerik.Web.UI.Calendar.Popup();
this.Popup=_f7;
}
return _f7;
},_monthYearFastNavExitFunc:function(_f8,_f9,_fa){
if(!_fa||!this.EnableTodayButtonSelection){
this.navigateToDate([_f8,_f9+1,1]);
}else{
this.unselectDate([_f8,_f9+1,_fa]);
this.selectDate([_f8,_f9+1,_fa],true);
if(this.EnableTodayButtonSelection&&this.get_autoPostBack()){
this._submit(["nd",_f8,(_f9+1),_fa].join(":"));
}
}
},_updateSelectedDates:function(){
var _fb=this.get_selectedDates();
for(var i=0;i<_fb.length;i++){
if(!this.RangeValidation.IsDateValid(_fb[i])){
this.Selection.Remove(_fb[i]);
}
}
},_onLoadHandler:function(e){
this.raise_load(Sys.EventArgs.Empty);
},get__FormatInfoArray:function(){
return this._formatInfoArray;
},set__FormatInfoArray:function(_fe){
if(this._formatInfoArray!==_fe){
this._formatInfoArray=_fe;
this.raisePropertyChanged("formatInfoArray");
}
},get__ViewsHash:function(){
return this._viewsHash;
},set__ViewsHash:function(_ff){
if(this._viewsHash!==_ff){
this._viewsHash=_ff;
this.raisePropertyChanged("viewsHash");
}
},get__DayRenderChangedDays:function(){
return this._dayRenderChangedDays;
},set__DayRenderChangedDays:function(_100){
if(this._dayRenderChangedDays!==_100){
this._dayRenderChangedDays=_100;
this.raisePropertyChanged("dayRenderChangedDays");
}
},get__ViewRepeatableDays:function(){
return this._viewRepeatableDays;
},set__ViewRepeatableDays:function(_101){
if(this._viewRepeatableDays!==_101){
this._viewRepeatableDays=_101;
this.raisePropertyChanged("viewRepeatableDays");
}
},add_init:function(_102){
this.get_events().addHandler("init",_102);
},remove_init:function(_103){
this.get_events().removeHandler("init",_103);
},raise_init:function(args){
this.raiseEvent("init",args);
},add_load:function(_105){
this.get_events().addHandler("load",_105);
},remove_load:function(_106){
this.get_events().removeHandler("load",_106);
},raise_load:function(args){
this.raiseEvent("load",args);
},add_dateSelecting:function(_108){
this.get_events().addHandler("dateSelecting",_108);
},remove_dateSelecting:function(_109){
this.get_events().removeHandler("dateSelecting",_109);
},raise_dateSelecting:function(args){
this.raiseEvent("dateSelecting",args);
},add_dateSelected:function(_10b){
this.get_events().addHandler("dateSelected",_10b);
},remove_dateSelected:function(_10c){
this.get_events().removeHandler("dateSelected",_10c);
},raise_dateSelected:function(args){
this.raiseEvent("dateSelected",args);
},add_dateClick:function(_10e){
this.get_events().addHandler("dateClick",_10e);
},remove_dateClick:function(_10f){
this.get_events().removeHandler("dateClick",_10f);
},raise_dateClick:function(args){
this.raiseEvent("dateClick",args);
},add_calendarViewChanging:function(_111){
this.get_events().addHandler("calendarViewChanging",_111);
},remove_calendarViewChanging:function(_112){
this.get_events().removeHandler("calendarViewChanging",_112);
},raise_calendarViewChanging:function(args){
this.raiseEvent("calendarViewChanging",args);
},add_calendarViewChanged:function(_114){
this.get_events().addHandler("calendarViewChanged",_114);
},remove_calendarViewChanged:function(_115){
this.get_events().removeHandler("calendarViewChanged",_115);
},raise_calendarViewChanged:function(args){
this.raiseEvent("calendarViewChanged",args);
},add_dayRender:function(_117){
this.get_events().addHandler("dayRender",_117);
},remove_dayRender:function(_118){
this.get_events().removeHandler("dayRender",_118);
},raise_dayRender:function(args){
this.raiseEvent("dayRender",args);
},add_rowHeaderClick:function(_11a){
this.get_events().addHandler("rowHeaderClick",_11a);
},remove_rowHeaderClick:function(_11b){
this.get_events().removeHandler("rowHeaderClick",_11b);
},raise_rowHeaderClick:function(args){
this.raiseEvent("rowHeaderClick",args);
},add_columnHeaderClick:function(_11d){
this.get_events().addHandler("columnHeaderClick",_11d);
},remove_columnHeaderClick:function(_11e){
this.get_events().removeHandler("columnHeaderClick",_11e);
},raise_columnHeaderClick:function(args){
this.raiseEvent("columnHeaderClick",args);
},add_viewSelectorClick:function(_120){
this.get_events().addHandler("viewSelectorClick",_120);
},remove_viewSelectorClick:function(_121){
this.get_events().removeHandler("viewSelectorClick",_121);
},raise_viewSelectorClick:function(args){
this.raiseEvent("viewSelectorClick",args);
}};
Telerik.Web.UI.RadCalendar.registerClass("Telerik.Web.UI.RadCalendar",Telerik.Web.UI.RadWebControl);
Type.registerNamespace("Telerik.Web.UI.Calendar");
Telerik.Web.UI.Calendar.Selector=function(_123,_124,_125,_126,_127,_128){
this.SelectorType=_123;
this.RadCalendar=_126;
this.RadCalendarView=_127;
this.DomElement=_128;
this.IsSelected=false;
this.RowIndex=_124;
this.ColIndex=_125;
var _129=this;
};
Telerik.Web.UI.Calendar.Selector.prototype={Dispose:function(){
this.disposed=true;
this.DomElement=null;
this.RadCalendar=null;
this.RadCalendarView=null;
},MouseOver:function(){
var _12a=document.getElementById(this.RadCalendarView.ID);
switch(this.SelectorType){
case Telerik.Web.UI.Calendar.Utils.COLUMN_HEADER:
for(var i=0;i<this.RadCalendarView.Rows;i++){
var id=_12a.rows[this.RowIndex+i].cells[this.ColIndex].DayId;
var date=Telerik.Web.UI.Calendar.Utils.GetDateFromId(id);
var temp=this.RadCalendarView.RenderDays.Get(date);
if(temp){
temp.MouseOver();
}
}
break;
case Telerik.Web.UI.Calendar.Utils.VIEW_HEADER:
for(var i=0;i<this.RadCalendarView.Rows;i++){
for(var j=0;j<this.RadCalendarView.Cols;j++){
var id=_12a.rows[this.RowIndex+i].cells[this.ColIndex+j].DayId;
var date=Telerik.Web.UI.Calendar.Utils.GetDateFromId(id);
var temp=this.RadCalendarView.RenderDays.Get(date);
if(temp){
temp.MouseOver();
}
}
}
break;
case Telerik.Web.UI.Calendar.Utils.ROW_HEADER:
for(var i=0;i<this.RadCalendarView.Cols;i++){
var id=_12a.rows[this.RowIndex].cells[this.ColIndex+i].DayId;
var date=Telerik.Web.UI.Calendar.Utils.GetDateFromId(id);
var temp=this.RadCalendarView.RenderDays.Get(date);
if(temp){
temp.MouseOver();
}
}
break;
}
},MouseOut:function(){
var _130=document.getElementById(this.RadCalendarView.ID);
switch(this.SelectorType){
case Telerik.Web.UI.Calendar.Utils.COLUMN_HEADER:
for(var i=0;i<this.RadCalendarView.Rows;i++){
var id=_130.rows[this.RowIndex+i].cells[this.ColIndex].DayId;
var date=Telerik.Web.UI.Calendar.Utils.GetDateFromId(id);
var temp=this.RadCalendarView.RenderDays.Get(date);
if(temp){
temp.MouseOut();
}
}
break;
case Telerik.Web.UI.Calendar.Utils.VIEW_HEADER:
for(var i=0;i<this.RadCalendarView.Rows;i++){
for(var j=0;j<this.RadCalendarView.Cols;j++){
var id=_130.rows[this.RowIndex+i].cells[this.ColIndex+j].DayId;
var date=Telerik.Web.UI.Calendar.Utils.GetDateFromId(id);
var temp=this.RadCalendarView.RenderDays.Get(date);
if(temp){
temp.MouseOut();
}
}
}
break;
case Telerik.Web.UI.Calendar.Utils.ROW_HEADER:
for(var i=0;i<this.RadCalendarView.Cols;i++){
var id=_130.rows[this.RowIndex].cells[this.ColIndex+i].DayId;
var date=Telerik.Web.UI.Calendar.Utils.GetDateFromId(id);
var temp=this.RadCalendarView.RenderDays.Get(date);
if(temp){
temp.MouseOut();
}
}
break;
}
},Click:function(){
switch(this.SelectorType){
case Telerik.Web.UI.Calendar.Utils.COLUMN_HEADER:
var _136=new Telerik.Web.UI.CalendarClickEventArgs(this.DomElement,this.ColIndex);
this.RadCalendar.raise_columnHeaderClick(_136);
if(_136.get_cancel()==true){
return;
}
break;
case Telerik.Web.UI.Calendar.Utils.ROW_HEADER:
var _136=new Telerik.Web.UI.CalendarClickEventArgs(this.DomElement,this.RowIndex);
this.RadCalendar.raise_rowHeaderClick(_136);
if(_136.get_cancel()==true){
return;
}
break;
case Telerik.Web.UI.Calendar.Utils.VIEW_HEADER:
var _136=new Telerik.Web.UI.CalendarClickEventArgs(this.DomElement,-1);
this.RadCalendar.raise_viewSelectorClick(_136);
if(_136.get_cancel()==true){
return;
}
break;
}
if(this.RadCalendar.get_enableMultiSelect()){
var _137=document.getElementById(this.RadCalendarView.ID);
this.IsSelected=true;
switch(this.SelectorType){
case Telerik.Web.UI.Calendar.Utils.COLUMN_HEADER:
for(var j=0;j<this.RadCalendarView.Rows;j++){
var id=_137.rows[this.RowIndex+j].cells[this.ColIndex].DayId;
var date=Telerik.Web.UI.Calendar.Utils.GetDateFromId(id);
var temp=this.RadCalendarView.RenderDays.Get(date);
if(!temp){
continue;
}
if(temp.IsSelected==false){
this.IsSelected=!this.IsSelected;
break;
}
}
for(var i=0;i<this.RadCalendarView.Rows;i++){
var id=_137.rows[this.RowIndex+i].cells[this.ColIndex].DayId;
var date=Telerik.Web.UI.Calendar.Utils.GetDateFromId(id);
var temp=this.RadCalendarView.RenderDays.Get(date);
if(!temp){
continue;
}
if(this.IsSelected){
if(temp.IsSelected){
temp.Select(false,true);
}
}else{
if(!temp.IsSelected){
temp.Select(true,true);
}
}
}
break;
case Telerik.Web.UI.Calendar.Utils.VIEW_HEADER:
for(var i=0;i<this.RadCalendarView.Rows;i++){
for(var j=0;j<this.RadCalendarView.Cols;j++){
var id=_137.rows[this.RowIndex+i].cells[this.ColIndex+j].DayId;
var date=Telerik.Web.UI.Calendar.Utils.GetDateFromId(id);
var temp=this.RadCalendarView.RenderDays.Get(date);
if(!temp){
continue;
}
if(temp.IsSelected==false){
this.IsSelected=!this.IsSelected;
break;
}
}
if(this.IsSelected==false){
break;
}
}
for(var i=0;i<this.RadCalendarView.Rows;i++){
for(var j=0;j<this.RadCalendarView.Cols;j++){
var id=_137.rows[this.RowIndex+i].cells[this.ColIndex+j].DayId;
var date=Telerik.Web.UI.Calendar.Utils.GetDateFromId(id);
var temp=this.RadCalendarView.RenderDays.Get(date);
if(!temp){
continue;
}
if(this.IsSelected){
if(temp.IsSelected){
temp.Select(false,true);
}
}else{
if(!temp.IsSelected){
temp.Select(true,true);
}
}
}
}
break;
case Telerik.Web.UI.Calendar.Utils.ROW_HEADER:
for(var j=0;j<this.RadCalendarView.Cols;j++){
var id=_137.rows[this.RowIndex].cells[this.ColIndex+j].DayId;
var date=Telerik.Web.UI.Calendar.Utils.GetDateFromId(id);
var temp=this.RadCalendarView.RenderDays.Get(date);
if(!temp){
continue;
}
if(temp.IsSelected==false){
this.IsSelected=!this.IsSelected;
break;
}
}
for(var i=0;i<this.RadCalendarView.Cols;i++){
var id=_137.rows[this.RowIndex].cells[this.ColIndex+i].DayId;
var date=Telerik.Web.UI.Calendar.Utils.GetDateFromId(id);
var temp=this.RadCalendarView.RenderDays.Get(date);
if(!temp){
continue;
}
if(this.IsSelected){
if(temp.IsSelected){
temp.Select(false,true);
}
}else{
if(!temp.IsSelected){
temp.Select(true,true);
}
}
}
break;
}
this.RadCalendar._serializeSelectedDates();
this.RadCalendar._submit("d");
}
}};
Telerik.Web.UI.Calendar.Selector.registerClass("Telerik.Web.UI.Calendar.Selector");
Type.registerNamespace("Telerik.Web.UI.Calendar");
Telerik.Web.UI.Calendar.RangeValidation=function(_13d,_13e){
this._rangeMinDate=_13d;
this._rangeMaxDate=_13e;
};
Telerik.Web.UI.Calendar.RangeValidation.prototype={IsDateValid:function(date){
return (this.CompareDates(this._rangeMinDate,date)<=0&&this.CompareDates(date,this._rangeMaxDate)<=0);
},CompareDates:function(_140,_141){
if(!_140||_140.length!=3){
throw new Error("Date1 must be array: [y, m, d]");
}
if(!_141||_141.length!=3){
throw new Error("Date2 must be array: [y, m, d]");
}
var y1=_140[0];
var y2=_141[0];
if(y1<y2){
return -1;
}
if(y1>y2){
return 1;
}
var m1=_140[1];
var m2=_141[1];
if(m1<m2){
return -1;
}
if(m1>m2){
return 1;
}
var d1=_140[2];
var d2=_141[2];
if(d1<d2){
return -1;
}
if(d1>d2){
return 1;
}
return 0;
},InSameMonth:function(_148,_149){
return ((_148[0]==_149[0])&&(_148[1]==_149[1]));
}};
Telerik.Web.UI.Calendar.RangeValidation.registerClass("Telerik.Web.UI.Calendar.RangeValidation");
Type.registerNamespace("Telerik.Web.UI.Calendar");
Telerik.Web.UI.Calendar.Selection=function(_14a,_14b,_14c,_14d){
this._specialDays=_14b;
this._recurringDays=_14c;
this._enableMultiSelect=_14d;
this._selectedDates=new Telerik.Web.UI.Calendar.DateCollection();
this._rangeValidation=_14a;
};
Telerik.Web.UI.Calendar.Selection.prototype={CanSelect:function(date){
if(!this._rangeValidation.IsDateValid(date)){
return false;
}
var _14f=this._specialDays.Get(date);
if(_14f!=null){
return _14f.IsSelectable!=0;
}else{
var _150=this._recurringDays.Get(date);
if(_150!=null){
return _150.IsSelectable!=0;
}else{
return true;
}
}
},Add:function(date){
if(!this.CanSelect(date)){
return;
}
if(!this._enableMultiSelect){
this._selectedDates.Clear();
}
this._selectedDates.Add(date,date);
},Remove:function(date){
this._selectedDates.Remove(date);
}};
Telerik.Web.UI.Calendar.Selection.registerClass("Telerik.Web.UI.Calendar.Selection");
Type.registerNamespace("Telerik.Web.UI.Calendar");
Telerik.Web.UI.Calendar.GregorianCalendar={DatePartDay:3,DatePartDayOfYear:1,DatePartMonth:2,DatePartYear:0,DaysPer100Years:36524,DaysPer400Years:146097,DaysPer4Years:1461,DaysPerYear:365,DaysTo10000:3652059,DaysToMonth365:[0,31,59,90,120,151,181,212,243,273,304,334,365],DaysToMonth366:[0,31,60,91,121,152,182,213,244,274,305,335,366],MaxMillis:315537897600000,MillisPerDay:86400000,MillisPerHour:3600000,MillisPerMinute:60000,MillisPerSecond:1000,TicksPerDay:864000000000,TicksPerHour:36000000000,TicksPerMillisecond:10000,TicksPerMinute:600000000,TicksPerSecond:10000000,MaxYear:9999,GetDateFromArguments:function(){
var year,_154,date;
switch(arguments.length){
case 1:
var date=arguments[0];
if("object"!=typeof (date)){
throw new Error("Unsupported input format");
}
if(date.getDate){
year=date.getFullYear();
_154=date.getMonth()+1;
date=date.getDate();
}else{
if(3==date.length){
year=date[0];
_154=date[1];
date=date[2];
}else{
throw new Error("Unsupported input format");
}
}
break;
case 3:
year=arguments[0];
_154=arguments[1];
date=arguments[2];
break;
default:
throw new Error("Unsupported input format");
break;
}
year=parseInt(year);
if(isNaN(year)){
throw new Error("Invalid YEAR");
}
_154=parseInt(_154);
if(isNaN(_154)){
throw new Error("Invalid MONTH");
}
date=parseInt(date);
if(isNaN(date)){
throw new Error("Invalid DATE");
}
return [year,_154,date];
},DateToTicks:function(){
var arr=this.GetDateFromArguments.apply(null,arguments);
var year=arr[0];
var _158=arr[1];
var day=arr[2];
return (this.GetAbsoluteDate(year,_158,day)*this.TicksPerDay);
},TicksToDate:function(_15a){
var y=this.GetDatePart(_15a,0);
var m=this.GetDatePart(_15a,2);
var d=this.GetDatePart(_15a,3);
return [y,m,d];
},GetAbsoluteDate:function(year,_15f,day){
if(year<1||year>this.MaxYear+1){
throw new Error("Year is out of range [1..9999].");
}
if(_15f<1||_15f>12){
throw new Error("Month is out of range [1..12].");
}
var _161=((year%4==0)&&((year%100!=0)||(year%400==0)));
var _162=_161?this.DaysToMonth366:this.DaysToMonth365;
var _163=_162[_15f]-_162[_15f-1];
if(day<1||day>_163){
throw new Error("Day is out of range for the current month.");
}
var _164=year-1;
var num=_164*this.DaysPerYear+this.GetInt(_164/4)-this.GetInt(_164/100)+this.GetInt(_164/400)+_162[_15f-1]+day-1;
return num;
},GetDatePart:function(_166,part){
var num1=this.GetInt(_166/this.TicksPerDay);
var num2=this.GetInt(num1/this.DaysPer400Years);
num1-=this.GetInt(num2*this.DaysPer400Years);
var num3=this.GetInt(num1/this.DaysPer100Years);
if(num3==4){
num3=3;
}
num1-=this.GetInt(num3*this.DaysPer100Years);
var num4=this.GetInt(num1/this.DaysPer4Years);
num1-=this.GetInt(num4*this.DaysPer4Years);
var num5=this.GetInt(num1/this.DaysPerYear);
if(num5==4){
num5=3;
}
if(part==0){
return (((((num2*400)+(num3*100))+(num4*4))+num5)+1);
}
num1-=this.GetInt(num5*365);
if(part==1){
return (num1+1);
}
var _16d=(num5==3)&&((num4!=24)||(num3==3));
var _16e=_16d?this.DaysToMonth366:this.DaysToMonth365;
var num6=num1>>6;
while(num1>=_16e[num6]){
num6++;
}
if(part==2){
return num6;
}
return ((num1-_16e[num6-1])+1);
},GetDayOfMonth:function(date){
return (this.GetDatePart(this.DateToTicks(date),3)+1);
},GetDayOfWeek:function(date){
var _172=this.DateToTicks(date);
var _173=(_172/864000000000)+1;
return this.GetInt(_173%7);
},AddMonths:function(date,_175){
var _176=this.DateToTicks(date);
var num1=this.GetInt(this.GetDatePart(_176,0));
var num2=this.GetInt(this.GetDatePart(_176,2));
var num3=this.GetInt(this.GetDatePart(_176,3));
var num4=this.GetInt((num2-1)+_175);
if(num4>=0){
num2=this.GetInt((num4%12)+1);
num1+=this.GetInt((num4/12));
}else{
num2=this.GetInt(12+((num4+1)%12));
num1+=this.GetInt((num4-11)/12);
}
var _17b=(((num1%4)==0)&&(((num1%100)!=0)||((num1%400)==0)))?this.DaysToMonth366:this.DaysToMonth365;
var num5=_17b[num2]-_17b[num2-1];
if(num3>num5){
num3=num5;
}
var num6=this.GetInt(this.DateToTicks(num1,num2,num3)+(_176%864000000000));
return ([this.GetDatePart(num6,0),this.GetDatePart(num6,2),this.GetDatePart(num6,3)]);
},AddYears:function(date,_17f){
return this.AddMonths(date,_17f*12);
},AddDays:function(date,days){
return this.Add(date,days,this.MillisPerDay);
},Add:function(date,_183,_184){
var _185=this.DateToTicks(date);
var _186=this.GetInt(_183*_184*this.TicksPerMillisecond);
var _187=this.GetInt(_185+_186);
if(_187<0){
_187=0;
}
return this.TicksToDate(_187);
},GetWeekOfYear:function(date,rule,_18a){
switch(rule){
case Telerik.Web.UI.Calendar.Utils.FIRST_DAY:
return this.GetInt(this.GetFirstDayWeekOfYear(date,_18a));
case Telerik.Web.UI.Calendar.Utils.FIRST_FULL_WEEK:
return this.GetInt(this.InternalGetWeekOfYearFullDays(date,_18a,7,365));
case Telerik.Web.UI.Calendar.Utils.FIRST_FOUR_DAY_WEEK:
return this.GetInt(this.InternalGetWeekOfYearFullDays(date,_18a,4,365));
}
},InternalGetWeekOfYearFullDays:function(time,_18c,_18d,_18e){
var num4=this.GetDayOfYear(time)-1;
var num1=((this.GetDayOfWeek(time))-(num4%7));
var num2=((_18c-num1)+14)%7;
if((num2!=0)&&(num2>=_18d)){
num2-=7;
}
var num3=num4-num2;
if(num3>=0){
return ((num3/7)+1);
}
var num5=this.GetYear(time);
num4=this.GetDaysInYear(num5-1);
num1-=(num4%7);
num2=((_18c-num1)+14)%7;
if((num2!=0)&&(num2>=_18d)){
num2-=7;
}
num3=num4-num2;
return ((num3/7)+1);
},GetFirstDayWeekOfYear:function(date,_195){
var num1=this.GetDayOfYear(date)-1;
var num2=(this.GetDayOfWeek(date))-(num1%7);
var num3=((num2-_195)+14)%7;
return (((num1+num3)/7)+1);
},GetLeapMonth:function(year){
var year=this.GetGregorianYear(year);
return 0;
},GetMonth:function(date){
return this.GetDatePart(this.DateToTicks(date),2);
},GetMonthsInYear:function(year){
var year=this.GetGregorianYear(year);
return 12;
},GetDaysInMonth:function(year,_19d){
var year=this.GetGregorianYear(year);
var _19e=(((year%4)==0)&&(((year%100)!=0)||((year%400)==0)))?this.DaysToMonth366:this.DaysToMonth365;
return (_19e[_19d]-_19e[_19d-1]);
},GetDaysInYear:function(year){
var year=this.GetGregorianYear(year);
if(((year%4)==0)&&(((year%100)!=0)||((year%400)==0))){
return 366;
}
return 365;
},GetDayOfYear:function(date){
return this.GetInt(this.GetDatePart(this.DateToTicks(date),1));
},GetGregorianYear:function(year){
return year;
},GetYear:function(date){
var num1=this.DateToTicks(date);
var num2=this.GetDatePart(num1,0);
return (num2);
},IsLeapDay:function(date){
var year=date.getFullYear();
var _1a7=date.getMonth();
var day=date.getDate();
if(this.IsLeapYear(date)&&((_1a7==2)&&(day==29))){
return true;
}
return false;
},IsLeapMonth:function(date){
var year=date.getFullYear();
var _1ab=date.getMonth();
if(this.IsLeapYear(date)){
if(_1ab==2){
return true;
}
}
return false;
},IsLeapYear:function(date){
var year=date.getFullYear();
if((year%4)!=0){
return false;
}
if((year%100)==0){
return ((year%400)==0);
}
return true;
},GetInt:function(_1ae){
if(_1ae>0){
return Math.floor(_1ae);
}else{
return Math.ceil(_1ae);
}
}};
Type.registerNamespace("Telerik.Web.UI.Calendar");
Telerik.Web.UI.Calendar.DateCollection=function(){
this.Initialize();
};
Telerik.Web.UI.Calendar.DateCollection.prototype={Initialize:function(){
this.Container={};
},GetStringKey:function(_1af){
return _1af.join("-");
},Add:function(_1b0,_1b1){
if(!_1b0||!_1b1){
return;
}
var _1b2=this.GetStringKey(_1b0);
this.Container[_1b2]=_1b1;
},Remove:function(_1b3){
if(!_1b3){
return;
}
var _1b4=this.GetStringKey(_1b3);
if(this.Container[_1b4]!=null){
this.Container[_1b4]=null;
delete this.Container[_1b4];
}
},Clear:function(){
this.Initialize();
},Get:function(_1b5){
if(!_1b5){
return;
}
var _1b6=this.GetStringKey(_1b5);
if(this.Container[_1b6]!=null){
return this.Container[_1b6];
}else{
return null;
}
},GetValues:function(){
var _1b7=[];
for(var key in this.Container){
if(key.indexOf("-")==-1){
continue;
}
_1b7[_1b7.length]=this.Container[key];
}
return _1b7;
},Count:function(){
return this.GetValues().length;
}};
Telerik.Web.UI.Calendar.DateCollection.registerClass("Telerik.Web.UI.Calendar.DateCollection");
Type.registerNamespace("Telerik.Web.UI.Calendar");
Telerik.Web.UI.Calendar.CalendarView=function(_1b9,_1ba,id,cols,rows,_1be,_1bf,_1c0,_1c1,_1c2){
this._onClickDelegate=null;
this._onMouseOverDelegate=null;
this._onMouseOutDelegate=null;
this._SingleViewMatrix=_1ba;
this._ViewInMonthDate=_1c2;
this.MonthsInView=1;
this._MonthStartDate=null;
this._MonthDays=null;
this._MonthEndDate=null;
this._ViewStartDate=null;
this._ContentRows=rows;
this._ContentColumns=cols;
this._TitleContent=null;
this.RadCalendar=_1b9;
this.DateTimeFormatInfo=_1b9?_1b9.DateTimeFormatInfo:null;
this.Calendar=this.DateTimeFormatInfo?this.DateTimeFormatInfo.Calendar:null;
if(!_1be){
this.SetViewDateRange();
}
this.DomTable=_1ba;
this.ID=id;
this.Cols=cols;
this.Rows=rows;
this.IsMultiView=_1be;
if(_1be){
return;
}
if(!this.RadCalendar.get_enabled()){
return;
}
var _1c3=false;
var _1c4=false;
var _1c5=false;
var _1c6=false;
this.UseRowHeadersAsSelectors=_1bf;
this.UseColumnHeadersAsSelectors=_1c0;
var _1c7=0;
var _1c8=_1ba.rows[_1c7].cells[0].id;
if(_1c8.indexOf("_hd")>-1){
_1c3=true;
_1c8=_1ba.rows[++_1c7].cells[0].id;
}
if(_1c8.indexOf("_vs")>-1){
_1c5=true;
}
var _1c9=_1ba.rows[_1c7].cells.length-this.Cols;
if(_1ba.rows[_1c7].cells[_1c9]&&_1ba.rows[_1c7].cells[_1c9].id.indexOf("_cs")>-1){
_1c4=true;
}
var _1ca=_1ba.rows.length-this.Rows;
if(_1ba.rows[_1c7+_1ca]&&_1ba.rows[_1c7+_1ca].cells[0].id.indexOf("_rs")>-1){
_1c6=true;
}
var _1cb=0;
var _1cc=0;
if(_1c3){
_1cb++;
}
if(_1c4||_1c5){
_1cb++;
}
if(_1c6||_1c5){
_1cc++;
}
this.StartRowIndex=_1cb;
this.StartColumnIndex=_1cc;
var _1cd=[];
if(_1c1==Telerik.Web.UI.Calendar.Utils.RENDERINROWS){
_1cd=this.ComputeHeaders(rows,cols);
}
if(_1c1==Telerik.Web.UI.Calendar.Utils.RENDERINCOLUMNS){
_1cd=this.ComputeHeaders(cols,rows);
}
if(!_1be){
this.RenderDays=new Telerik.Web.UI.Calendar.DateCollection();
for(var i=_1cb;i<_1ba.rows.length;i++){
var row=_1ba.rows[i];
for(var j=_1cc;j<row.cells.length;j++){
var _1d1=row.cells[j];
if(typeof (_1d1.DayId)=="undefined"){
_1d1.DayId="";
}
var _1d2=this.GetDate(i-_1cb,j-_1cc,cols,rows,this._ViewStartDate);
var _1d3=!this.RadCalendar.RangeValidation.IsDateValid(_1d2);
var _1d4=!((this.RadCalendar.RangeValidation.CompareDates(_1d2,this._MonthStartDate)>=0)&&(this.RadCalendar.RangeValidation.CompareDates(this._MonthEndDate,_1d2)>=0));
if(_1d3||(_1d4&&!this.RadCalendar.get_showOtherMonthsDays())){
continue;
}
if(isNaN(_1d2[0])||isNaN(_1d2[1])||isNaN(_1d2[2])){
continue;
}
var _1d5=_1d1.DayId;
if(!_1d5){
_1d1.DayId=this.RadCalendar.get_id()+"_"+_1d2.join("_");
_1d5=_1d1.DayId;
}
if(!_1d5){
continue;
}
var _1d6=(null!=this.RadCalendar.Selection._selectedDates.Get(_1d2));
var _1d7=this.RadCalendar.SpecialDays.Get(_1d2);
var _1d8=this.Calendar.GetDayOfWeek(_1d2);
var _1d9=(0==_1d8||6==_1d8);
var _1da=(_1d7&&_1d7.Repeatable==Telerik.Web.UI.Calendar.Utils.RECURRING_TODAY);
var _1db=(_1d2[1]==this._MonthStartDate[1]);
var _1dc=_1d7?_1d7.IsDisabled:false;
var _1dd=null;
if(_1d7){
var _1de="SpecialDayStyle_"+_1d7.get_date().join("_");
_1dd=_1d7.ItemStyle[_1de];
}
var _1df=this.RadCalendar._getItemStyle(!_1db,_1d3,_1d9,_1d6,_1dc,_1dd);
var _1e0=[null,_1d2,true,_1d6,null,_1da,null,_1d9,null,_1d7?_1d7.ItemStyle:_1df,_1d1,this.RadCalendar,_1d5,this,i-_1cb,j-_1cc];
var _1e1=new Telerik.Web.UI.Calendar.RenderDay(_1e0);
this.RenderDays.Add(_1e1.get_date(),_1e1);
}
}
if(this.RadCalendar.get_presentationType()==2){
return;
}
this._onClickDelegate=Function.createDelegate(this,this._onClickHandler);
this._onMouseOverDelegate=Function.createDelegate(this,this._onMouseOverHandler);
this._onMouseOutDelegate=Function.createDelegate(this,this._onMouseOutHandler);
$addHandler(this.DomTable,"click",this._onClickDelegate);
$addHandler(this.DomTable,"mouseover",this._onMouseOverDelegate);
$addHandler(this.DomTable,"mouseout",this._onMouseOutDelegate);
}
var _1e2=Math.max(_1cb-1,0);
if(_1c1==Telerik.Web.UI.Calendar.Utils.RENDERINCOLUMNS&&_1c4){
for(i=0;i<this.Cols;i++){
var cell=_1ba.rows[_1e2].cells[_1cc+i];
if(this.isNumber(cell.innerHTML)){
cell.innerHTML=_1cd[i];
}else{
break;
}
}
}
if(_1c1==Telerik.Web.UI.Calendar.Utils.RENDERINROWS&&_1c6){
for(i=0;i<this.Rows;i++){
var cell=_1ba.rows[_1cb+i].cells[0];
if(this.isNumber(cell.innerHTML)){
cell.innerHTML=_1cd[i];
}else{
break;
}
}
}
this.ColumnHeaders=[];
if(_1c4&&this.UseColumnHeadersAsSelectors){
for(i=0;i<this.Cols;i++){
var cell=_1ba.rows[_1e2].cells[_1cc+i];
var _1e4=new Telerik.Web.UI.Calendar.Selector(Telerik.Web.UI.Calendar.Utils.COLUMN_HEADER,_1cb,_1cc+i,this.RadCalendar,this,cell);
this.ColumnHeaders[i]=_1e4;
}
}
this.RowHeaders=[];
if(_1c6&&this.UseRowHeadersAsSelectors){
for(i=0;i<this.Rows;i++){
var cell=_1ba.rows[_1cb+i].cells[0];
var _1e5=new Telerik.Web.UI.Calendar.Selector(Telerik.Web.UI.Calendar.Utils.ROW_HEADER,_1cb+i,1,this.RadCalendar,this,cell);
this.RowHeaders[i]=_1e5;
}
}
this.ViewSelector=null;
if(_1c5){
var _1e6=new Telerik.Web.UI.Calendar.Selector(Telerik.Web.UI.Calendar.Utils.VIEW_HEADER,_1e2+1,1,this.RadCalendar,this,_1ba.rows[_1e2].cells[0]);
this.ViewSelector=_1e6;
}
};
Telerik.Web.UI.Calendar.CalendarView.prototype={_onMouseOverHandler:function(e){
this._onGenericHandler(e,"MouseOver");
},_onMouseOutHandler:function(e){
this._onGenericHandler(e,"MouseOut");
},_onClickHandler:function(e){
this._onGenericHandler(e,"Click");
},_onGenericHandler:function(e,_1eb){
if(this.RadCalendar==null){
return;
}
var _1ec=Telerik.Web.UI.Calendar.Utils.FindTarget(e,this.RadCalendar.get_id());
if(_1ec==null){
return;
}
if(_1ec.DayId){
var _1ed=Telerik.Web.UI.Calendar.Utils.GetRenderDay(this,_1ec.DayId);
if(_1ed!=null){
if(_1eb=="Click"){
_1ed[_1eb].apply(_1ed,[e]);
}else{
_1ed[_1eb].apply(_1ed);
}
}
}else{
if(_1ec.id!=null&&_1ec.id!=""){
if(_1ec.id.indexOf("_cs")>-1){
for(var i=0;i<this.ColumnHeaders.length;i++){
var _1ef=this.ColumnHeaders[i];
if(_1ef.DomElement.id==_1ec.id){
_1ef[_1eb].apply(_1ef);
}
}
}else{
if(_1ec.id.indexOf("_rs")>-1){
for(var i=0;i<this.RowHeaders.length;i++){
var _1f0=this.RowHeaders[i];
if(_1f0.DomElement.id==_1ec.id){
_1f0[_1eb].apply(_1f0);
}
}
}else{
if(_1ec.id.indexOf("_vs")>-1){
this.ViewSelector[_1eb].apply(this.ViewSelector);
}
}
}
}
}
},isNumber:function(a){
if(isNaN(parseInt(a))){
return false;
}else{
return true;
}
},ComputeHeaders:function(_1f2,_1f3){
var _1f4=[];
var date=this._ViewStartDate;
for(var i=0;i<_1f2;i++){
if(_1f3<=7){
var _1f7=this.Calendar.AddDays(date,_1f3-1);
if(_1f7[2]<date[2]){
var _1f8=[_1f7[0],_1f7[1],1];
_1f4[_1f4.length]=this.GetWeekOfYear(_1f8);
}else{
_1f4[_1f4.length]=this.GetWeekOfYear(date);
}
date=this.Calendar.AddDays(_1f7,1);
}else{
var _1f7=this.Calendar.AddDays(date,6);
if(_1f7[2]<date[2]){
var _1f8=[_1f7[0],_1f7[1],1];
_1f4[_1f4.length]=this.GetWeekOfYear(_1f8);
}else{
_1f4[_1f4.length]=this.GetWeekOfYear(date);
}
date=this.Calendar.AddDays(_1f7,_1f3-6);
}
}
return _1f4;
},GetDate:function(_1f9,_1fa,cols,rows,_1fd){
var _1fe;
if(this.RadCalendar.get_orientation()==Telerik.Web.UI.Calendar.Utils.RENDERINROWS){
_1fe=(cols*_1f9)+_1fa;
}else{
if(this.RadCalendar.get_orientation()==Telerik.Web.UI.Calendar.Utils.RENDERINCOLUMNS){
_1fe=(rows*_1fa)+_1f9;
}
}
var _1ff=this.Calendar.AddDays(_1fd,_1fe);
return _1ff;
},dispose:function(){
if(this.disposed){
return;
}
this.disposed=true;
if(this.RenderDays!=null){
var days=this.RenderDays.GetValues();
for(var i=0;i<days.length;i++){
days[i].dispose();
}
this.RenderDays.Clear();
}
if(this.ColumnHeaders!=null){
for(var i=0;i<this.ColumnHeaders.length;i++){
this.ColumnHeaders[i].Dispose();
}
}
this.ColumnHeaders=null;
if(this.RowHeaders!=null){
for(var i=0;i<this.RowHeaders.length;i++){
this.RowHeaders[i].Dispose();
}
}
$clearHandlers(this.DomTable);
this.genericHandler=null;
this.RowHeaders=null;
if(this.ViewSelector!=null){
this.ViewSelector.Dispose();
}
this.ViewSelector=null;
this._SingleViewMatrix=null;
this._ContentRows=null;
this._ContentColumns=null;
this.RadCalendar.RecurringDays.Clear();
this.RadCalendar=null;
this.Calendar=null;
this.DomTable=null;
this.Cols=null;
this.Rows=null;
},GetWeekOfYear:function(date){
return this.Calendar.GetWeekOfYear(date,this.DateTimeFormatInfo.CalendarWeekRule,this.NumericFirstDayOfWeek());
},NumericFirstDayOfWeek:function(){
if(this.RadCalendar._firstDayOfWeek!=Telerik.Web.UI.Calendar.Utils.DEFAULT){
return this.RadCalendar._firstDayOfWeek;
}
return this.DateTimeFormatInfo.FirstDayOfWeek;
},EffectiveVisibleDate:function(){
var date=this._ViewInMonthDate||this.RadCalendar.FocusedDate;
return [date[0],date[1],1];
},FirstCalendarDay:function(_204){
var _205=_204;
var num1=(this.Calendar.GetDayOfWeek(_205))-this.NumericFirstDayOfWeek();
if(num1<=0){
num1+=7;
}
return this.Calendar.AddDays(_205,-num1);
},SetViewDateRange:function(){
var _207=(this.RadCalendar._viewIDs.length>1);
if(!_207){
this._MonthStartDate=this.EffectiveVisibleDate();
}else{
this._MonthStartDate=this.RadCalendar.get__ViewsHash()[this._SingleViewMatrix.id][0];
}
this._MonthDays=this.Calendar.GetDaysInMonth(this._MonthStartDate[0],this._MonthStartDate[1]);
this._MonthEndDate=this.Calendar.AddDays(this._MonthStartDate,this._MonthDays-1);
this._ViewStartDate=this.FirstCalendarDay(this._MonthStartDate);
this._ViewEndDate=this.Calendar.AddDays(this._ViewStartDate,(this._ContentRows*this._ContentColumns-1));
this.GetTitleContentAsString();
},GetTitleContentAsString:function(){
if(!this.IsMultiView){
this._TitleContent=this.DateTimeFormatInfo.FormatDate(this.EffectiveVisibleDate(),this.RadCalendar.get_titleFormat());
}else{
this._TitleContent=this.DateTimeFormatInfo.FormatDate(this._ViewStartDate,this.RadCalendar.get_titleFormat())+this.RadCalendar.get_dateRangeSeparator()+this.DateTimeFormatInfo.FormatDate(this._ViewEndDate,this.RadCalendar.get_titleFormat());
}
return this._TitleContent;
},RenderDaysSingleView:function(){
this.SetViewDateRange();
var _208=this.EffectiveVisibleDate();
var _209=this.FirstCalendarDay(_208);
var _20a=this._SingleViewMatrix;
this.RenderViewDays(_20a,_209,_208,this.RadCalendar.get_orientation(),this.StartRowIndex,this.StartColumnIndex);
this.ApplyViewTable(_20a,this.ScrollDir||0);
var _20b=$get(this.RadCalendar._titleID);
if(_20b){
_20b.innerHTML=this._TitleContent;
}
return _20a;
},RenderViewDays:function(_20c,_20d,_20e,_20f,_210,_211){
var date=_20d;
var row,cell;
if(_20f==Telerik.Web.UI.Calendar.Utils.RENDERINROWS){
for(var i=_210;i<_20c.rows.length;i++){
var row=_20c.rows[i];
for(var j=_211;j<row.cells.length;j++){
cell=row.cells[j];
this.SetCalendarCell(cell,date,i,j);
date=this.Calendar.AddDays(date,1);
}
}
}else{
if(_20f==Telerik.Web.UI.Calendar.Utils.RENDERINCOLUMNS){
var _217=_20c.rows[0].cells.length;
for(var i=_211;i<_217;i++){
for(var j=_210;j<_20c.rows.length;j++){
cell=_20c.rows[j].cells[i];
this.SetCalendarCell(cell,date,j,i);
date=this.Calendar.AddDays(date,1);
}
}
}
}
},SetCalendarCell:function(cell,date,_21a,_21b){
var _21c=!this.RadCalendar.RangeValidation.IsDateValid(date);
var _21d=(date[1]==this._MonthStartDate[1]);
var text=this.DateTimeFormatInfo.FormatDate(date,this.RadCalendar.get_cellDayFormat());
var _21f=this.RadCalendar.SpecialDays.Get(date);
if(this.RadCalendar.get_enableRepeatableDaysOnClient()&&_21f==null){
var _220=Telerik.Web.UI.Calendar.Utils.RECURRING_NONE;
var _221=this.RadCalendar.SpecialDays.GetValues();
for(var i=0;i<_221.length;i++){
_220=_221[i].IsRecurring(date,this);
if(_220!=Telerik.Web.UI.Calendar.Utils.RECURRING_NONE){
_21f=_221[i];
this.RadCalendar.RecurringDays.Add(date,_21f);
break;
}
}
}
var _223=this.RadCalendar.Selection._selectedDates.Get(date);
var _224=false;
if(_21d||(!_21d&&this.RadCalendar.get_showOtherMonthsDays())){
if(_223!=null){
_224=true;
}
if(!_21c){
text="<a href='#' onclick='return false;'>"+text+"</a>";
}else{
text="<span>"+text+"</span>";
}
}else{
text="&#160;";
}
var _225=this.Calendar.GetDayOfWeek(date);
var _226=(0==_225||6==_225);
var _227=_21f?_21f.IsDisabled:false;
var _228=(_21f&&_21f.Repeatable==Telerik.Web.UI.Calendar.Utils.RECURRING_TODAY);
cell.innerHTML=text;
var _229=null;
if(_21f){
var _22a="SpecialDayStyle_"+_21f.get_date().join("_");
_229=_21f.ItemStyle[_22a];
}
var _22b=this.RadCalendar._getItemStyle(!_21d,_21c,_226,_224,_227,_229);
if(_22b){
var _22c=this.RadCalendar.get__DayRenderChangedDays()[date.join("_")];
if(_22c!=null&&(_21d||(!_21d&&this.RadCalendar.get_showOtherMonthsDays()))){
cell.style.cssText=Telerik.Web.UI.Calendar.Utils.MergeStyles(_22c[0],_22b[0]);
cell.className=Telerik.Web.UI.Calendar.Utils.MergeClassName(_22c[1],_22b[1]);
}else{
cell.style.cssText=_22b[0];
cell.className=_22b[1];
}
}
var _22d=this.RadCalendar._getRenderDayID(date);
cell.DayId=(!_21d&&!this.RadCalendar.get_showOtherMonthsDays())?"":_22d;
var _22e=null;
if(!_21c){
var _22f=[null,date,true,_224,null,_228,null,_226,null,_22b,cell,this.RadCalendar,_22d,this,_21a,_21b];
_22e=new Telerik.Web.UI.Calendar.RenderDay(_22f);
this.RenderDays.Add(_22e.get_date(),_22e);
}else{
if(cell.RenderDay!=null){
if(cell.RenderDay.disposed==null){
cell.RenderDay.Dispose();
}
cell.RenderDay=null;
this.RenderDays.Remove(date);
}
}
var _230="";
var _231=this.RadCalendar.SpecialDays.Get(date);
if(_231!=null&&_231.ToolTip!=null){
_230=_231.ToolTip;
}else{
if(typeof (this.RadCalendar.get_dayCellToolTipFormat())!="undefined"){
_230=this.DateTimeFormatInfo.FormatDate(date,this.RadCalendar.get_dayCellToolTipFormat());
}
}
if(!this.RadCalendar.get_showOtherMonthsDays()&&cell.DayId==""){
cell.title="";
}else{
cell.title=_230;
}
var _232=cell.style.cssText;
var _233=cell.className;
var _234=new Telerik.Web.UI.CalendarDayRenderEventArgs(cell,date,_22e);
this.RadCalendar.raise_dayRender(_234);
var _235=cell.style.cssText;
var _236=cell.className;
if(_232!=_235||_233!=_236){
if(this.RadCalendar.get__DayRenderChangedDays()[date.join("_")]==null){
this.RadCalendar.get__DayRenderChangedDays()[date.join("_")]=[];
}
this.RadCalendar.get__DayRenderChangedDays()[date.join("_")][0]=Telerik.Web.UI.Calendar.Utils.MergeStyles(_235,_232);
this.RadCalendar.get__DayRenderChangedDays()[date.join("_")][1]=Telerik.Web.UI.Calendar.Utils.MergeClassName(_236,_233);
}
},ApplyViewTable:function(_237,dir){
this.RadCalendar._enableNavigation(false);
this.RadCalendar.EnableDateSelect=false;
var view=this._SingleViewMatrix;
var _23a=view.parentNode;
var _23b=_23a.scrollWidth;
var _23c=_23a.scrollHeight;
var _23d=document.createElement("DIV");
_23d.style.overflow="hidden";
_23d.style.width=_23b+"px";
_23d.style.height=_23c+"px";
_23d.style.border="0px solid red";
var _23e=document.createElement("DIV");
_23e.style.width=2*_23b+"px";
_23e.style.height=_23c+"px";
_23e.style.border="0px solid blue";
_23d.appendChild(_23e);
if(view.parentNode){
view.parentNode.removeChild(view);
}
if(_237.parentNode){
_237.parentNode.removeChild(_237);
}
if(document.all){
view.style.display="inline";
_237.style.display="inline";
}else{
view.style.setProperty("float","left","");
_237.style.setProperty("float","left","");
}
var _dir=0;
if(dir>0){
_dir=1;
_23e.appendChild(view);
_237.parentNode.removeChild(_237);
_23e.appendChild(_237);
}else{
if(dir<0){
_dir=-1;
_23e.appendChild(_237);
view.parentNode.removeChild(view);
_23e.appendChild(view);
}
}
_23a.appendChild(_23d);
if(dir<0){
_23d.scrollLeft=_23a.offsetWidth+10;
}
var _240=this;
var step=10;
var _242=function(){
if(_23d.parentNode){
_23d.parentNode.removeChild(_23d);
}
if(_23e.parentNode){
_23e.parentNode.removeChild(_23e);
}
if(view.parentNode){
view.parentNode.removeChild(view);
}
_23a.appendChild(_237);
_240.RadCalendar._enableNavigation(true);
_240.RadCalendar.EnableDateSelect=true;
};
var _243=function(){
if((_dir>0&&(_23d.scrollLeft+_23d.offsetWidth)<_23d.scrollWidth)||(_dir<0&&_23d.scrollLeft>0)){
_23d.scrollLeft+=_dir*step;
window.setTimeout(_243,10);
}else{
_242();
}
};
var _244=function(){
window.setTimeout(_243,100);
};
if(!this.RadCalendar._isRtl()&&this.RadCalendar.get_enableNavigationAnimation()==true){
_244();
}else{
_242();
}
}};
Telerik.Web.UI.Calendar.CalendarView.registerClass("Telerik.Web.UI.Calendar.CalendarView",null,Sys.IDisposable);
Type.registerNamespace("Telerik.Web.UI.Calendar");
Telerik.Web.UI.Calendar.RenderDay=function(data){
if(typeof (data)!="undefined"){
var i=0;
this.TemplateID=data[i++];
this._date=data[i++];
this.IsSelectable=data[i++];
this.IsSelected=data[i++];
this.IsDisabled=data[i++];
this.IsToday=data[i++];
this.Repeatable=data[i++];
this.IsWeekend=data[i++];
this.ToolTip=data[i++];
this.ItemStyle=data[i++];
this.DomElement=data[i++];
this.RadCalendar=data[i++];
this.ID=data[i++];
this.RadCalendarView=data[i++];
this.DayRow=data[i++];
this.DayColumn=data[i++];
}
};
Telerik.Web.UI.Calendar.RenderDay.prototype={dispose:function(){
this.disposed=true;
if(this.DomElement){
this.DomElement.DayId="";
this.DomElement.RenderDay=null;
}
this.DomElement=null;
this.RadCalendar=null;
this.RadCalendarView=null;
this.DayRow=null;
this.DayColumn=null;
},MouseOver:function(){
if(!this.ApplyHoverBehavior()){
return;
}
var _247=this.RadCalendar.get_stylesHash()["DayOverStyle"];
this.DomElement.className=_247[1];
this.DomElement.style.cssText=_247[0];
},MouseOut:function(){
if(!this.ApplyHoverBehavior()){
return;
}
var _248=this.GetDefaultItemStyle();
this.DomElement.className=_248[1];
this.DomElement.style.cssText=_248[0];
},Click:function(e){
var _24a=new Telerik.Web.UI.CalendarDateClickEventArgs(e,this);
this.RadCalendar.raise_dateClick(_24a);
if(_24a.get_cancel()){
return;
}
this.Select(!this.IsSelected);
},Select:function(_24b,_24c){
if(!this.RadCalendar.Selection.CanSelect(this.get_date())){
return;
}
if(null==_24b){
_24b=true;
}
if(this.RadCalendar.get_enableMultiSelect()){
this.PerformSelect(_24b);
}else{
var _24d=false;
if(_24b){
var _24e=this.RadCalendar._findRenderDay(this.RadCalendar._lastSelectedDate);
if(_24e&&_24e!=this){
_24d=(false==_24e.Select(false));
}
var _24f=this.RadCalendar.Selection._selectedDates.GetValues();
for(var i=0;i<_24f.length;i++){
if(_24f[i]){
var _24e=this.RadCalendar._findRenderDay(_24f[i]);
if(_24e&&_24e!=this){
_24d=(false==_24e.Select(false,true));
}
}
}
}
var _251=false;
if(!_24d){
var _252=this.PerformSelect(_24b);
if(typeof (_252)!="undefined"){
_251=!_252;
}
if(this.RadCalendar){
this.RadCalendar._lastSelectedDate=(this.IsSelected?this.get_date():null);
}else{
return;
}
}
}
this.RadCalendar._serializeSelectedDates();
if(!_24c&&!_251){
this.RadCalendar._submit("d");
}
},PerformSelect:function(_253){
if(null==_253){
_253=true;
}
if(this.IsSelected!=_253){
var _254=new Telerik.Web.UI.CalendarDateSelectingEventArgs(_253,this);
this.RadCalendar.raise_dateSelecting(_254);
if(_254.get_cancel()){
return false;
}
this.IsSelected=_253;
var _255=this.GetDefaultItemStyle();
if(_255){
this.DomElement.className=_255[1];
this.DomElement.style.cssText=_255[0];
}
if(_253){
this.RadCalendar.Selection.Add(this.get_date());
}else{
this.RadCalendar.Selection.Remove(this.get_date());
}
this.RadCalendar.raise_dateSelected(new Telerik.Web.UI.CalendarDateSelectedEventArgs(this));
}
},GetDefaultItemStyle:function(){
var _256=(this.get_date()[1]==this.RadCalendarView._MonthStartDate[1]);
var _257=this.RadCalendar.SpecialDays.Get(this.get_date());
if(_257==null&&this.RadCalendar.RecurringDays.Get(this.get_date())!=null){
_257=this.RadCalendar.RecurringDays.Get(this.get_date());
}
var _258=null;
if(this.IsSelected){
_258=this.RadCalendar.get_stylesHash()["SelectedDayStyle"];
return _258;
}else{
if(_257){
var _259="SpecialDayStyle_"+_257.get_date().join("_");
_258=_257.ItemStyle[_259];
var _25a=null;
if(!_256){
_25a=this.RadCalendar.get_stylesHash()["OtherMonthDayStyle"];
}else{
if(this.IsWeekend){
_25a=this.RadCalendar.get_stylesHash()["WeekendDayStyle"];
}else{
_25a=this.RadCalendar.get_stylesHash()["DayStyle"];
}
}
_258[0]=Telerik.Web.UI.Calendar.Utils.MergeStyles(_25a[0],_258[0]);
_258[1]=Telerik.Web.UI.Calendar.Utils.MergeClassName(_25a[1],_258[1]);
}else{
if(!_256){
_258=this.RadCalendar.get_stylesHash()["OtherMonthDayStyle"];
}else{
if(this.IsWeekend){
_258=this.RadCalendar.get_stylesHash()["WeekendDayStyle"];
}else{
_258=this.RadCalendar.get_stylesHash()["DayStyle"];
}
}
}
}
var _25b=this.RadCalendar.get__DayRenderChangedDays()[this.get_date().join("_")];
var _25c=[];
if(_25b!=null){
_25c[0]=Telerik.Web.UI.Calendar.Utils.MergeStyles(_25b[0],_258[0]);
_25c[1]=Telerik.Web.UI.Calendar.Utils.MergeClassName(_25b[1],_258[1]);
return _25c;
}
return _258;
},ApplyHoverBehavior:function(){
var _25d=this.RadCalendar.SpecialDays.Get(this.get_date());
if(_25d&&!_25d.IsSelectable){
return false;
}
if(this.RadCalendar.get_enableRepeatableDaysOnClient()){
var _25e=Telerik.Web.UI.Calendar.Utils.RECURRING_NONE;
var _25f=this.RadCalendar.SpecialDays.GetValues();
for(var i=0;i<_25f.length;i++){
_25e=_25f[i].IsRecurring(this.get_date(),this.RadCalendarView);
if(_25e!=Telerik.Web.UI.Calendar.Utils.RECURRING_NONE){
_25d=_25f[i];
if(!_25d.IsSelectable){
return false;
}
}
}
}
return true;
},IsRecurring:function(_261,_262){
if(this.Repeatable!=Telerik.Web.UI.Calendar.Utils.RECURRING_NONE){
switch(this.Repeatable){
case Telerik.Web.UI.Calendar.Utils.RECURRING_DAYINMONTH:
if(_261[2]==this.get_date()[2]){
return this.Repeatable;
}
break;
case Telerik.Web.UI.Calendar.Utils.RECURRING_TODAY:
var _263=new Date();
if((_261[0]==_263.getFullYear())&&(_261[1]==(_263.getMonth()+1))&&(_261[2]==_263.getDate())){
return this.Repeatable;
}
break;
case Telerik.Web.UI.Calendar.Utils.RECURRING_DAYANDMONTH:
if((_261[1]==this.get_date()[1])&&(_261[2]==this.get_date()[2])){
return this.Repeatable;
}
break;
case Telerik.Web.UI.Calendar.Utils.RECURRING_WEEKANDMONTH:
var _264=new Date();
_264.setFullYear(_261[0],(_261[1]-1),_261[2]);
var _265=new Date();
_265.setFullYear(this.get_date()[0],(this.get_date()[1]-1),this.get_date()[2]);
if((_264.getDay()==_265.getDay())&&(_261[1]==this.get_date()[1])){
return this.Repeatable;
}
break;
case Telerik.Web.UI.Calendar.Utils.RECURRING_WEEK:
var _264=new Date();
_264.setFullYear(_261[0],(_261[1]-1),_261[2]);
var _265=new Date();
_265.setFullYear(this.get_date()[0],(this.get_date()[1]-1),this.get_date()[2]);
if(_264.getDay()==_265.getDay()){
return this.Repeatable;
}
break;
case Telerik.Web.UI.Calendar.Utils.RECURRING_WEEKDAYWEEKNUMBERANDMONTH:
var _264=new Date();
_264.setFullYear(_261[0],(_261[1]-1),_261[2]);
var _265=new Date();
_265.setFullYear(this.get_date()[0],(this.get_date()[1]-1),this.get_date()[2]);
var _266=this._getNumberOfWeekDayInMonth(_264,_262);
var _267=this._getNumberOfWeekDayInMonth(_265,_262);
if((_261[1]==this.get_date()[1])&&(_264.getDay()==_265.getDay())&&(_266==_267)){
return this.Repeatable;
}
break;
default:
break;
}
}
return Telerik.Web.UI.Calendar.Utils.RECURRING_NONE;
},_getNumberOfWeekDayInMonth:function(date,view){
var rule=view.DateTimeFormatInfo.CalendarWeekRule;
var _26b=view.RadCalendar._firstDayOfWeek;
var _26c=view.Calendar.GetWeekOfYear(date,rule,_26b);
var _26d=new Date();
_26d.setFullYear(date.getFullYear(),date.getMonth(),1);
var _26e=view.Calendar.GetDayOfWeek(date);
while(_26e!=view.Calendar.GetDayOfWeek(_26d)){
_26d.setDate(_26d.getDate()+1);
}
var _26f=view.Calendar.GetWeekOfYear(_26d,rule,_26b);
return _26c-_26f;
},get_date:function(){
return this._date;
},set_date:function(_270){
if(this._date!==_270){
this._date=_270;
this.raisePropertyChanged("date");
}
},get_isSelectable:function(){
return this.IsSelectable;
},get_isSelected:function(){
return this.IsSelected;
},get_isToday:function(){
return this.IsToday;
},get_isWeekend:function(){
return this.IsWeekend;
}};
Telerik.Web.UI.Calendar.RenderDay.registerClass("Telerik.Web.UI.Calendar.RenderDay",null,Sys.IDisposable);


/* END Telerik.Web.UI.Calendar.RadCalendarScript.js */
/* START Telerik.Web.UI.Input.MaskedTextBox.RadMaskedInputScript.js */
Type.registerNamespace("Telerik.Web.UI");
Telerik.Web.UI.MaskedEventWrap=function(e,_2){
this.event=e.rawEvent;
this._selectionStart=_2.selectionStart;
this._selectionEnd=_2.selectionEnd;
this.fieldValue=_2.value;
};
Telerik.Web.UI.MaskedEventWrap.prototype={IsUpArrow:function(){
return this.event.keyCode==38;
},IsDownArrow:function(){
return this.event.keyCode==40;
}};
Telerik.Web.UI.MaskedEventWrap.registerClass("Telerik.Web.UI.MaskedEventWrap");
Type.registerNamespace("Telerik.Web.UI");
Telerik.Web.UI.RadMaskPart=function(){
this.value="";
this.index=-1;
this.type=-1;
this.PromptChar="_";
};
Telerik.Web.UI.RadMaskPart.prototype={HandleKey:function(ev){
return false;
},HandleWheel:function(_4){
return true;
},SetController:function(_5){
this.controller=_5;
},GetValue:function(){
return this.value.toString();
},GetVisValue:function(){
return "";
},SetValue:function(_6,_7){
return true;
},CanHandle:function(_8,_9){
return true;
},IsCaseSensitive:function(){
return false;
},GetLength:function(){
return 1;
},IsAlpha:function(_a){
return _a.match(/[^\u005D\u005B\t\n\r\f\s\v\\!-@|^_`{-¿]{1}/)!=null;
}};
Telerik.Web.UI.RadMaskPart.registerClass("Telerik.Web.UI.RadMaskPart");
Type.registerNamespace("Telerik.Web.UI");
Telerik.Web.UI.RadDigitMaskPart=function(){
Telerik.Web.UI.RadDigitMaskPart.initializeBase(this);
};
Telerik.Web.UI.RadDigitMaskPart.prototype={GetValue:function(){
return this.value.toString();
},IsCaseSensitive:function(){
return true;
},GetVisValue:function(){
if(this.value.toString()==""){
return this.PromptChar;
}
return this.value.toString();
},CanHandle:function(_b,_c){
if(isNaN(parseInt(_b))){
this.controller._OnChunkError(this,this.GetValue(),_b);
return false;
}
return true;
},SetValue:function(_d,_e){
if(_d==""||_d==this.PromptChar||_d==" "){
this.value="";
return true;
}
if(this.CanHandle(_d,_e)){
this.value=parseInt(_d);
}
return true;
}};
Telerik.Web.UI.RadDigitMaskPart.registerClass("Telerik.Web.UI.RadDigitMaskPart",Telerik.Web.UI.RadMaskPart);
Type.registerNamespace("Telerik.Web.UI");
Telerik.Web.UI.RadEnumerationMaskPart=function(_f){
Telerik.Web.UI.RadEnumerationMaskPart.initializeBase(this);
this.SetOptions(_f);
this.lastOffsetPunched=-1;
this.selectedForCompletion=0;
this.FlipDirection=0;
this.RebuildKeyBuff();
};
Telerik.Web.UI.RadEnumerationMaskPart.prototype={SetOptions:function(_10){
this.length=0;
this.Options=_10;
this.optionsIndex=[];
for(var i=0;i<this.Options.length;i++){
this.length=Math.max(this.length,this.Options[i].length);
this.optionsIndex[this.Options[i]]=i;
}
},CanHandle:function(){
return true;
},SetController:function(_12){
this.controller=_12;
this.InitializeSelection(_12.get_allowEmptyEnumerations());
},InitializeSelection:function(_13){
if(_13){
this.value="";
this.selectedIndex=-1;
}else{
this.value=this.Options[0];
this.selectedIndex=0;
}
},RebuildKeyBuff:function(){
this.keyBuff=[];
for(i=0;i<this.length;i++){
this.keyBuff[i]="";
}
this.keyBuffRebuilt=true;
},IsCaseSensitive:function(){
return true;
},ResetCompletion:function(){
this.selectedForCompetion=0;
},SelectNextCompletion:function(){
this.selectedForCompletion++;
},Store:function(_14,_15){
if(this.lastOffsetPunched==_15){
if(this.keyBuff[_15]==_14){
this.SelectNextCompletion();
}else{
this.RebuildKeyBuff();
}
}else{
this.ResetCompletion();
}
this.lastOffsetPunched=_15;
this.keyBuff[_15]=_14;
},SetNoCompletionValue:function(){
if(this.controller.get_allowEmptyEnumerations()){
this.SetOption(-1);
}
},SetValue:function(_16,_17){
_17-=this.offset;
this.Store(_16,_17);
var _18=new Telerik.Web.UI.CompletionList(this.Options,this.PromptChar);
var _19=_18.GetCompletions(this.keyBuff,_17);
if(_19.length>0){
var _1a=this.optionsIndex[_19[this.selectedForCompletion%_19.length]];
this.SetOption(_1a);
}else{
this.SetNoCompletionValue();
return false;
}
return true;
},GetVisValue:function(){
var v=this.value;
while(v.length<this.length){
v+=this.PromptChar;
}
return v;
},GetLength:function(){
return this.length;
},GetSelectedIndex:function(){
return this.selectedIndex;
},SetOption:function(_1c,up){
var _1e=this.value;
if(this.controller.get_allowEmptyEnumerations()){
if(_1c<-1){
_1c=this.Options.length+_1c+1;
this.FlipDirection=-1;
}else{
if(_1c>=this.Options.length){
_1c=_1c-this.Options.length-1;
this.FlipDirection=1;
}
}
}else{
if(_1c<0){
_1c=this.Options.length+_1c;
this.FlipDirection=-1;
}else{
if(_1c>=this.Options.length){
_1c=_1c-this.Options.length;
this.FlipDirection=1;
}
}
}
this.selectedIndex=_1c;
this.value=_1c==-1?"":this.Options[_1c];
if(typeof (up)!="undefined"){
if(up){
this.controller._OnMoveUp(this,_1e,this.value);
}else{
this.controller._OnMoveDown(this,_1e,this.value);
}
}
this.controller._OnEnumChanged(this,_1e,this.value);
this.FlipDirection=0;
},HandleKey:function(e){
this.controller._calculateSelection();
var _20=new Telerik.Web.UI.MaskedEventWrap(e,this.controller._textBoxElement);
if(_20.IsDownArrow()){
this.SetOption(this.selectedIndex+1,false);
this.controller._Visualise();
this.controller._FixSelection(_20);
return true;
}else{
if(_20.IsUpArrow()){
this.SetOption(this.selectedIndex-1,true);
this.controller._Visualise();
this.controller._FixSelection(_20);
return true;
}
}
},HandleWheel:function(e){
this.controller._calculateSelection();
var _22=new Telerik.Web.UI.MaskedEventWrap(e,this.controller._textBoxElement);
this.SetOption(this.selectedIndex-e.rawEvent.wheelDelta/120);
this.controller._Visualise();
this.controller._FixSelection(_22);
return false;
}};
Telerik.Web.UI.RadEnumerationMaskPart.registerClass("Telerik.Web.UI.RadEnumerationMaskPart",Telerik.Web.UI.RadMaskPart);
Telerik.Web.UI.CompletionList=function(_23,_24){
this.options=_23;
this.blankChar=_24;
};
Telerik.Web.UI.CompletionList.prototype={GetCompletions:function(_25,_26){
var _27=this.options;
for(var _28=0;_28<=_26;_28++){
var _29=_25[_28].toLowerCase();
_27=this.FilterCompletions(_27,_28,_29);
}
return _27;
},FilterCompletions:function(_2a,_2b,key){
var _2d=[];
for(var _2e=0;_2e<_2a.length;_2e++){
var _2f=_2a[_2e];
var _30=_2f.charAt(_2b).toLowerCase();
if(this.CharacterMatchesCompletion(key,_30)){
_2d[_2d.length]=_2f;
}
}
return _2d;
},CharacterMatchesCompletion:function(_31,_32){
return _31==this.blankChar||_31==" "||_31==_32;
}};
Telerik.Web.UI.CompletionList.registerClass("Telerik.Web.UI.CompletionList");
Type.registerNamespace("Telerik.Web.UI");
Telerik.Web.UI.RadFreeMaskPart=function(){
Telerik.Web.UI.RadFreeMaskPart.initializeBase(this);
};
Telerik.Web.UI.RadFreeMaskPart.prototype={IsCaseSensitive:function(){
return true;
},GetVisValue:function(){
if(this.value.toString()==""){
return this.PromptChar;
}
return this.value;
},SetValue:function(_33,_34){
this.value=_33;
return true;
}};
Telerik.Web.UI.RadFreeMaskPart.registerClass("Telerik.Web.UI.RadFreeMaskPart",Telerik.Web.UI.RadMaskPart);
Type.registerNamespace("Telerik.Web.UI");
Telerik.Web.UI.RadLiteralMaskPart=function(ch){
Telerik.Web.UI.RadLiteralMaskPart.initializeBase(this);
this.ch=ch;
};
Telerik.Web.UI.RadLiteralMaskPart.prototype={GetVisValue:function(){
return this.ch;
},GetLength:function(){
if(Sys.Browser.agent==Sys.Browser.Firefox){
return this.ch.length-(this.ch.split("\r\n").length-1);
}
return this.ch.length;
},GetValue:function(){
return "";
},IsCaseSensitive:function(){
if(this.NextChunk!=null){
return this.NextChunk.IsCaseSensitive();
}
},SetValue:function(_36,_37){
_37-=this.offset;
return _36==this.ch.charAt(_37)||!_36;
},CanHandle:function(_38,_39){
_39-=this.offset;
if(_38==this.ch.charAt(_39)){
return true;
}
if(!_38){
return true;
}
if(this.NextChunk!=null){
return this.NextChunk.CanHandle(_38,_39+this.GetLength());
}
}};
Telerik.Web.UI.RadLiteralMaskPart.registerClass("Telerik.Web.UI.RadLiteralMaskPart",Telerik.Web.UI.RadMaskPart);
Type.registerNamespace("Telerik.Web.UI");
Telerik.Web.UI.RadLowerMaskPart=function(){
Telerik.Web.UI.RadLowerMaskPart.initializeBase(this);
};
Telerik.Web.UI.RadLowerMaskPart.prototype={CanHandle:function(_3a,_3b){
if(!this.IsAlpha(_3a)){
this.controller._OnChunkError(this,this.GetValue(),_3a);
return false;
}
return true;
},GetVisValue:function(){
if(this.value.toString()==""){
return this.PromptChar;
}
return this.value.toString();
},SetValue:function(_3c,_3d){
if(_3c==""){
this.value="";
return true;
}
if(this.IsAlpha(_3c)){
this.value=_3c.toLowerCase();
}else{
this.controller._OnChunkError(this,this.GetValue(),_3c);
}
return true;
}};
Telerik.Web.UI.RadLowerMaskPart.registerClass("Telerik.Web.UI.RadLowerMaskPart",Telerik.Web.UI.RadMaskPart);
Type.registerNamespace("Telerik.Web.UI");
Telerik.Web.UI.RadNumericRangeMaskPart=function(_3e,_3f,_40,_41){
Telerik.Web.UI.RadNumericRangeMaskPart.initializeBase(this);
this.upperLimit=_3f;
this.lowerLimit=_3e;
this.length=Math.max(this.lowerLimit.toString().length,this.upperLimit.toString().length);
this.leftAlign=_40;
this.zeroFill=_41;
this.minusIncluded=this.lowerLimit<0||this.upperLimit<0;
this.value=_3e;
this.FlipDirection=0;
};
Telerik.Web.UI.RadNumericRangeMaskPart.prototype={SetController:function(_42){
this.controller=_42;
this.GetVisValue();
},IsCaseSensitive:function(){
return true;
},CanHandle:function(_43,_44){
if((_43=="-"||_43=="+")&&this.lowerLimit<0){
return true;
}
if(isNaN(parseInt(_43))){
this.controller._OnChunkError(this,this.GetValue(),_43);
return false;
}
return true;
},InsertAt:function(_45,_46){
return this.visValue.substr(0,_46)+_45.toString()+this.visValue.substr(_46+1,this.visValue.length);
},ReplacePromptChar:function(_47){
var _48=this.leftAlign?"":"0";
while(_47.indexOf(this.PromptChar)>-1){
_47=_47.replace(this.PromptChar,_48);
}
return _47;
},SetValue:function(_49,_4a){
if(_49==""){
_49=0;
}
if(isNaN(parseInt(_49))&&_49!="+"&&_49!="-"){
return true;
}
_4a-=this.offset;
var _4b=this.InsertAt(_49,_4a);
_4b=this.ReplacePromptChar(_4b);
if(_4b.indexOf("-")!=-1&&_4b.indexOf("-")>0){
_4b=_4b.replace("-","0");
}
if(isNaN(parseInt(_4b))){
_4b=0;
}
if(this.controller.get_roundNumericRanges()){
_4b=Math.min(this.upperLimit,_4b);
_4b=Math.max(this.lowerLimit,_4b);
this.setInternalValue(_4b);
}else{
if(_4b<=this.upperLimit&&_4b>=this.lowerLimit){
this.setInternalValue(_4b);
this.GetVisValue();
}else{
return false;
}
}
this.GetVisValue();
return true;
},setInternalValue:function(_4c){
var _4d=this.value;
this.value=_4c;
this.controller._OnEnumChanged(this,_4d,_4c);
if(_4d>_4c){
this.controller._OnMoveDown(this,_4d,_4c);
}else{
if(_4d<_4c){
this.controller._OnMoveUp(this,_4d,_4c);
}
}
this.FlipDirection=0;
},GetVisValue:function(){
var out="";
var _4f=Math.abs(this.value).toString();
if(this.leftAlign){
if(this.value<0){
out+=this.PromptChar;
}
out+=_4f;
while(out.length<this.length){
out+=this.controller.get_promptChar();
}
}else{
var _50=this.zeroFill?"0":this.controller.get_promptChar();
if(this.value<0){
_4f="-"+_4f;
}
while(out.length<this.length-_4f.length){
out+=_50;
}
out+=_4f;
}
this.visValue=out;
return out;
},GetLength:function(){
return this.length;
},HandleKey:function(e){
this.controller._calculateSelection();
var _52=new Telerik.Web.UI.MaskedEventWrap(e,this.controller._textBoxElement);
if(_52.IsDownArrow()){
this.MoveDown();
this.controller._FixSelection(_52);
return true;
}else{
if(_52.IsUpArrow()){
this.MoveUp();
this.controller._FixSelection(_52);
return true;
}
}
},MoveUp:function(){
var _53=this.value;
_53++;
if(_53>this.upperLimit){
_53=this.lowerLimit;
this.FlipDirection=1;
}
this.setInternalValue(_53);
this.controller._Visualise();
},MoveDown:function(){
var _54=this.value;
_54--;
if(_54<this.lowerLimit){
_54=this.upperLimit;
this.FlipDirection=-1;
}
this.setInternalValue(_54);
this.controller._Visualise();
},HandleWheel:function(e){
var _56=this.value;
var _57;
if(e.rawEvent.wheelDelta){
_57=e.rawEvent.wheelDelta/120;
if(window.opera){
_57=-_57;
}
}else{
if(e.rawEvent.detail){
_57=-e.rawEvent.detail/3;
}
}
_56=parseInt(_56)+_57;
var _58=new Telerik.Web.UI.MaskedEventWrap(e,this.controller._textBoxElement);
if(_56<this.lowerLimit){
_56=this.upperLimit-(this.lowerLimit-_56-1);
this.FlipDirection=-1;
}
if(_56>this.upperLimit){
_56=this.lowerLimit+(_56-this.upperLimit-1);
this.FlipDirection=1;
}
this.setInternalValue(_56);
this.controller._Visualise();
this.controller._FixSelection(_58);
return false;
}};
Telerik.Web.UI.RadNumericRangeMaskPart.registerClass("Telerik.Web.UI.RadNumericRangeMaskPart",Telerik.Web.UI.RadMaskPart);
Type.registerNamespace("Telerik.Web.UI");
Telerik.Web.UI.RadUpperMaskPart=function(){
Telerik.Web.UI.RadUpperMaskPart.initializeBase(this);
};
Telerik.Web.UI.RadUpperMaskPart.prototype={CanHandle:function(_59,_5a){
if(!this.IsAlpha(_59)){
this.controller._OnChunkError(this,this.GetValue(),_59);
return false;
}
return true;
},GetVisValue:function(){
if(this.value.toString()==""){
return this.PromptChar;
}
return this.value.toString();
},SetValue:function(_5b,_5c){
if(_5b==""){
this.value="";
return true;
}
if(this.IsAlpha(_5b)){
this.value=_5b.toUpperCase();
}else{
this.controller._OnChunkError(this,this.GetValue(),_5b);
}
return true;
}};
Telerik.Web.UI.RadUpperMaskPart.registerClass("Telerik.Web.UI.RadUpperMaskPart",Telerik.Web.UI.RadMaskPart);
Type.registerNamespace("Telerik.Web.UI");
Telerik.Web.UI.RadMaskedTextBox=function(_5d){
Telerik.Web.UI.RadMaskedTextBox.initializeBase(this,[_5d]);
this._parts=[];
this._partIndex=[];
this._displayPartIndex=[];
this._value="";
this._lastState=null;
this._length=0;
this._displayLength=0;
this._internalValueUpdate=false;
this._projectedValue="";
this._isTextarea=false;
this._initialMasks=[];
this._initialDisplayMasks=[];
this._promptChar="_";
this._displayPromptChar="_";
this._displayFormatPosition=Telerik.Web.UI.DisplayFormatPosition.Left;
this._hideOnBlur=false;
this._resetCaretOnFocus=false;
this._roundNumericRanges=true;
this._allowEmptyEnumerations=false;
this._readOnly=false;
this._focusOnStartup=false;
this._onTextBoxMouseUpDelegate=null;
this._onTextBoxMouseDownDelegate=null;
this._onTextBoxPasteDelegate=null;
this._onTextBoxPropertyChangeDelegate=null;
this._onTextBoxInputDelegate=null;
this._onFormResetDelegate=null;
this._isInitialized=false;
this._originalValue="";
};
Telerik.Web.UI.RadMaskedTextBox.prototype={initialize:function(){
Telerik.Web.UI.RadMaskedTextBox.callBaseMethod(this,"initialize");
this._fixAbsolutePositioning();
this._setMask(this.get__initialMasks());
if(this.get__initialDisplayMasks().length){
this._setDisplayMask(this.get__initialDisplayMasks());
}
this._SetValue(this._textBoxElement.value);
this._Visualise();
this._textBoxElement._oldValue=this._textBoxElement.value;
this._isTextarea=this._textBoxElement.tagName.toLowerCase()=="textarea";
if(this.get_focusOnStartup()){
this.focus();
}
this._RecordInitialState();
this._isInitialized=true;
},dispose:function(){
if(this._onTextBoxMouseUpDelegate){
$removeHandler(this._textBoxElement,"mouseup",this._onTextBoxMouseUpDelegate);
this._onTextBoxMouseUpDelegate=null;
}
if(this._onTextBoxMouseDownDelegate){
$removeHandler(this._textBoxElement,"mousedown",this._onTextBoxMouseDownDelegate);
this._onTextBoxMouseDownDelegate=null;
}
if(this._onFormResetDelegate){
if(this._textBoxElement.form){
$removeHandler(this._textBoxElement.form,"reset",this._onFormResetDelegate);
}
this._onFormResetDelegate=null;
}
if(Sys.Browser.agent==Sys.Browser.InternetExplorer){
if(this._onTextBoxPasteDelegate){
$removeHandler(this._textBoxElement,"paste",this._onTextBoxPasteDelegate);
this._onTextBoxPasteDelegate=null;
}
if(this._onTextBoxPropertyChangeDelegate){
$removeHandler(this._textBoxElement,"propertychange",this._onTextBoxPropertyChangeDelegate);
this._onTextBoxPropertyChangeDelegate=null;
}
}else{
if(this._onTextBoxInputDelegate){
$removeHandler(this._textBoxElement,"input",this._onTextBoxInputDelegate);
this._onTextBoxInputDelegate=null;
}
}
Telerik.Web.UI.RadMaskedTextBox.callBaseMethod(this,"dispose");
},isEmpty:function(){
return this._value=="";
},resetCursor:function(){
this.set_cursorPosition(0);
},inSelection:function(e){
this._calculateSelection();
if(this._textBoxElement.selectionStart!=this._textBoxElement.selectionEnd){
this._OnActivity(e);
return true;
}
if(e.ctrlKey||e.altKey||Sys.Browser.agent==Sys.Browser.Safari){
this._OnActivity(e);
return true;
}
return false;
},updateDisplayValue:function(){
if(this._isInitialized){
if(this._focused){
if((this.get_hideOnBlur()&&this.isEmpty())||this._displayParts){
this._Visualise();
this._textBoxElement.select();
}
if(this.get_resetCaretOnFocus()){
this.resetCursor();
}
}else{
this._Visualise();
}
}
},updateHiddenValue:function(){
return this._setHiddenValue(this.get_valueWithPromptAndLiterals());
},GetValueWithLiterals:function(){
return this.get_valueWithLiterals();
},GetValueWithPromptAndLiterals:function(){
return this.get_valueWithPromptAndLiterals();
},GetPrompt:function(){
return this.get_prompt();
},SetCursorPosition:function(_5f){
this.set_cursorPosition(_5f);
},get_valueWithLiterals:function(){
var _60=[];
for(var i=0;i<this._parts.length;i++){
_60[i]=this._parts[i].ch||this._parts[i].GetValue();
}
return _60.join("");
},get_valueWithPromptAndLiterals:function(){
return this._GetVisibleValues(this._parts);
},get_prompt:function(){
var _62=new RegExp(".","g");
var _63=[];
for(var i=0;i<this._parts.length;i++){
_63[i]=this._parts[i].ch||this._parts[i].GetVisValue().replace(_62,this.get_promptChar());
}
return _63.join("");
},get_displayValue:function(){
var _65=this._value;
while(_65.length<this._displayLength){
if(this.get_displayFormatPosition()){
_65=this.get_promptChar()+_65;
}else{
_65+=this.get_promptChar();
}
}
this._UpdateDisplayPartsInRange(_65,0,this._displayLength);
return this._GetVisibleValues(this._displayParts);
},set_cursorPosition:function(_66){
if(!this._focused){
return;
}
this._calculateSelection();
if(Sys.Browser.agent==Sys.Browser.InternetExplorer){
this._textBoxElement.select();
sel=document.selection.createRange();
var _67=this._textBoxElement.value.substr(0,_66).split("\r\n").length-1;
sel.move("character",_66-_67);
sel.select();
}else{
this._textBoxElement.selectionStart=_66;
this._textBoxElement.selectionEnd=_66;
}
},get_value:function(){
var _68=[];
for(var i=0;i<this._parts.length;i++){
_68[i]=this._parts[i].GetValue();
}
return _68.join("");
},set_value:function(_6a){
this._SetValue(_6a);
this.raise_valueChanged();
this._textBoxElement._oldValue=this._textBoxElement.value;
},get_promptChar:function(){
return this._promptChar;
},set_promptChar:function(_6b){
if(this._promptChar!=_6b){
this._promptChar=_6b;
this.raisePropertyChanged("PromptChar");
}
},get_displayPromptChar:function(){
return this._displayPromptChar;
},set_displayPromptChar:function(_6c){
if(this._displayPromptChar!=_6c){
this._displayPromptChar=_6c;
this.raisePropertyChanged("DisplayPromptChar");
}
},get_displayPromptChar:function(){
return this._displayPromptChar;
},set_displayPromptChar:function(_6d){
if(this._displayPromptChar!=_6d){
this._displayPromptChar=_6d;
this.raisePropertyChanged("DisplayPromptChar");
}
},get_displayPromptChar:function(){
return this._displayPromptChar;
},set_displayPromptChar:function(_6e){
if(this._displayPromptChar!=_6e){
this._displayPromptChar=_6e;
this.raisePropertyChanged("DisplayPromptChar");
}
},get_displayFormatPosition:function(){
return this._displayFormatPosition;
},set_displayFormatPosition:function(_6f){
if(this._displayFormatPosition!=_6f){
this._displayFormatPosition=_6f;
this.raisePropertyChanged("DisplayFormatPosition");
}
},get_hideOnBlur:function(){
return this._hideOnBlur;
},set_hideOnBlur:function(_70){
if(this._hideOnBlur!=_70){
this._hideOnBlur=_70;
this.raisePropertyChanged("HideOnBlur");
}
},get_resetCaretOnFocus:function(){
return this._resetCaretOnFocus;
},set_resetCaretOnFocus:function(_71){
if(this._resetCaretOnFocus!=_71){
this._resetCaretOnFocus=_71;
this.raisePropertyChanged("ResetCaretOnFocus");
}
},get_roundNumericRanges:function(){
return this._roundNumericRanges;
},set_roundNumericRanges:function(_72){
if(this._roundNumericRanges!=_72){
this._roundNumericRanges=_72;
this.raisePropertyChanged("RoundNumericRanges");
}
},get_allowEmptyEnumerations:function(){
return this._allowEmptyEnumerations;
},set_allowEmptyEnumerations:function(_73){
if(this._allowEmptyEnumerations!=_73){
this._allowEmptyEnumerations=_73;
this.raisePropertyChanged("AllowEmptyEnumerations");
}
},get_readOnly:function(){
return this._readOnly;
},set_readOnly:function(_74){
if(this._readOnly!=_74){
this._readOnly=_74;
this.raisePropertyChanged("ReadOnly");
}
},get_focusOnStartup:function(){
return this._focusOnStartup;
},set_focusOnStartup:function(_75){
if(this._focusOnStartup!=_75){
this._focusOnStartup=_75;
this.raisePropertyChanged("FocusOnStartup");
}
},_attachMouseEventHandlers:function(){
Telerik.Web.UI.RadMaskedTextBox.callBaseMethod(this,"_attachMouseEventHandlers");
this._onTextBoxMouseUpDelegate=Function.createDelegate(this,this._onTextBoxMouseUpHandler);
this._onTextBoxMouseDownDelegate=Function.createDelegate(this,this._onTextBoxMouseDownHandler);
$addHandler(this._textBoxElement,"mouseup",this._onTextBoxMouseUpDelegate);
$addHandler(this._textBoxElement,"mousedown",this._onTextBoxMouseDownDelegate);
},_attachEventHandlers:function(){
Telerik.Web.UI.RadMaskedTextBox.callBaseMethod(this,"_attachEventHandlers");
this._onFormResetDelegate=Function.createDelegate(this,this._onFormResetHandler);
$addHandler(this._textBoxElement.form,"reset",this._onFormResetDelegate);
if(Sys.Browser.agent==Sys.Browser.InternetExplorer){
this._onTextBoxPasteDelegate=Function.createDelegate(this,this._onTextBoxPasteHandler);
this._onTextBoxPropertyChangeDelegate=Function.createDelegate(this,this._onTextBoxPropertyChangeHandler);
$addHandler(this._textBoxElement,"paste",this._onTextBoxPasteDelegate);
$addHandler(this._textBoxElement,"propertychange",this._onTextBoxPropertyChangeDelegate);
}else{
this._onTextBoxInputDelegate=Function.createDelegate(this,this._onTextBoxInputHandler);
$addHandler(this._textBoxElement,"input",this._onTextBoxInputDelegate);
}
if(Sys.Browser.agent==Sys.Browser.Opera){
var _76=this;
var _77=function(){
return _76._ValueHandler({});
};
setInterval(_77,10);
}
},_SetValue:function(_78){
this._internalValueUpdate=true;
this._UpdatePartsInRange(_78,0,this._length);
this._internalValueUpdate=false;
this._Visualise();
},_initializeHiddenElement:function(id){
this._hiddenElement=$get(id+"_Value");
},_initializeValidationField:function(id){
this._validationField=$get(id);
},_setValidationField:function(_7b){
if(this.isEmpty()){
this._validationField.value="";
}else{
this._validationField.value=this.get_valueWithLiterals();
}
},_getValidationField:function(_7c){
return this._validationField;
},_onFormResetHandler:function(e){
if(this._originalValue==null){
this._originalValue="";
}
this._setHiddenValue(this._originalValue);
this._SetValue(this._originalValue);
},_onTextBoxInputHandler:function(e){
this._ValueHandler(e);
},_onMouseWheel:function(e){
return this._OnMouseWheel(event);
},_onTextBoxPropertyChangeHandler:function(e){
this._OnPropertyChange();
},_onTextBoxPasteHandler:function(e){
if(this.get_readOnly()){
return false;
}
var _82=this;
setTimeout(function(){
_82._FakeOnPropertyChange();
},1);
},_onTextBoxBlurHandler:function(e){
this._focused=false;
this._hovered=false;
this.raise_valueChanged();
this.raise_blur(Sys.EventArgs.Empty);
this.updateDisplayValue();
this.updateCssClass();
if(this.get_autoPostBack()&&this._ValueHasChanged()){
this.raisePostBackEvent();
}
this._textBoxElement._oldValue=this._textBoxElement.value;
},_onTextBoxMouseUpHandler:function(e){
this._FakeOnPropertyChange();
this._ValueHandler(e);
this._ActivityHandler(e);
},_onTextBoxMouseOutHandler:function(e){
this._hovered=false;
this.updateCssClass();
this.raise_mouseOut(Sys.EventArgs.Empty);
},_onTextBoxMouseOverHandler:function(e){
this._FakeOnPropertyChange();
this._hovered=true;
this.updateCssClass();
this.raise_mouseOver(Sys.EventArgs.Empty);
},_onTextBoxMouseDownHandler:function(e){
this._FakeOnPropertyChange();
this._ActivityHandler(e);
},_onTextBoxFocusHandler:function(e){
this._focused=true;
this.updateDisplayValue();
this.updateCssClass();
this._updateSelectionOnFocus();
this._FakeOnPropertyChange();
this._ActivityHandler(e);
this.raise_focus(Sys.EventArgs.Empty);
},_onTextBoxKeyUpHandler:function(e){
this._FakeOnPropertyChange();
},_OnActivity:function(e){
this._calculateSelection();
this._lastState=new Telerik.Web.UI.MaskedEventWrap(e,this._textBoxElement);
},_OnPropertyChange:function(){
if(this._internalValueUpdate){
return;
}
if(event.propertyName=="value"){
var e=event;
var _8c=this;
var _8d=function(){
_8c._ValueHandler(e);
};
this._calculateSelection();
if(this._textBoxElement.selectionStart>0||this._textBoxElement.selectionEnd>0){
_8d();
}else{
setTimeout(_8d,1);
}
}
},_onTextBoxMouseWheelHandler:function(e){
if(this.get_readOnly()){
return false;
}
this._calculateSelection();
var _8f=this._partIndex[this._textBoxElement.selectionStart];
if(_8f==null){
return true;
}
return _8f.HandleWheel(e);
},_updateSelectionOnFocus:function(){
switch(this.get_selectionOnFocus()){
case 0:
break;
case 1:
var _90=0;
var i;
for(i=0;i<this._partIndex.length;i++){
if(!this._partIndex[i].ch){
_90=i;
break;
}
}
this.set_caretPosition(_90);
break;
case 2:
if(this._textBoxElement.value.length>0){
this.set_caretPosition(this._textBoxElement.value.length);
}
break;
case 3:
this.selectAllText();
break;
default:
this.set_caretPosition(0);
break;
}
},_onTextBoxKeyDownHandler:function(e){
this._FakeOnPropertyChange();
if(this.inSelection(e)){
return true;
}
var _93=this._partIndex[this._textBoxElement.selectionStart];
if(this.get_readOnly()&&(e.keyCode==46||e.keyCode==8||e.keyCode==38||e.keyCode==40)){
e.preventDefault();
return false;
}else{
if(e.keyCode==13){
return true;
}else{
if(_93==null&&e.keyCode!=8){
return true;
}else{
if(_93!=null){
if(_93.HandleKey(e)){
e.preventDefault();
return false;
}
}
}
}
}
var _94=this._textBoxElement.selectionEnd;
var _95=false;
if((e.keyCode==46)&&_94<this._textBoxElement.value.length&&Sys.Browser.agent!=Sys.Browser.Opera){
_93.SetValue("",this._textBoxElement.selectionStart);
_94++;
_95=true;
}else{
if(e.keyCode==8&&_94&&Sys.Browser.agent!=Sys.Browser.Opera){
this._partIndex[this._textBoxElement.selectionStart-1].SetValue("",this._textBoxElement.selectionStart-1);
_94--;
_95=true;
}
}
if(_95){
return this._UpdateAfterKeyHandled(e,_94);
}
this._OnActivity(e);
return true;
},_onTextBoxKeyPressHandler:function(e){
if(this.get_readOnly()){
e.preventDefault();
e.stopPropagation();
return false;
}
var _97=new Telerik.Web.UI.InputKeyPressEventArgs(e,e.charCode,String.fromCharCode(e.charCode));
this.raise_keyPress(_97);
if(_97.get_cancel()){
e.stopPropagation();
e.preventDefault();
return false;
}
if(this.inSelection(e)){
return true;
}
var _98=this._partIndex[this._textBoxElement.selectionStart];
if(_98==null){
return true;
}
if(Sys.Browser.agent==Sys.Browser.Firefox||Sys.Browser.agent==Sys.Browser.Opera){
if(e.charCode==8){
e.preventDefault();
e.stopPropagation();
return false;
}
if(!e.which){
this._OnActivity(e);
e.stopPropagation();
return true;
}
}
var _99=this._textBoxElement.selectionEnd;
if(e.charCode==13){
if(this.get_autoPostBack()){
this.raisePostBackEvent();
}
return true;
}
var ch=String.fromCharCode(e.charCode);
if(_98.CanHandle(ch)){
while(_99<this._textBoxElement.value.length){
if(this._partIndex[_99].SetValue(ch,_99)){
_99++;
break;
}
_99++;
}
}
var _9b=this._UpdateAfterKeyHandled(e,_99);
if(!_9b){
e.preventDefault();
}
e.stopPropagation();
return _9b;
},_OnEnumChanged:function(_9c,_9d,_9e){
var _9f=new Telerik.Web.UI.MaskedTextBoxEventArgs(_9e,_9d,_9c);
this.raise_enumerationChanged(_9f);
},_OnMoveUp:function(_a0,_a1,_a2){
var _a3=new Telerik.Web.UI.MaskedTextBoxEventArgs(_a2,_a1,_a0);
this.raise_moveUp(_a3);
},_OnMoveDown:function(_a4,_a5,_a6){
var _a7=new Telerik.Web.UI.MaskedTextBoxEventArgs(_a6,_a5,_a4);
this.raise_moveDown(_a7);
},_OnValueChange:function(_a8,_a9,_aa){
var _ab=new Telerik.Web.UI.MaskedTextBoxEventArgs(_aa,_a9,_a8);
this.raiseEvent("valueChanged",_ab);
},_OnChunkError:function(_ac,_ad,_ae){
var _af=new Telerik.Web.UI.MaskedTextBoxEventArgs(_ae,_ad,_ac);
this.raise_error(_af);
},_fixAbsolutePositioning:function(){
var f=this._textBoxElement;
if(f.previousSibling&&f.previousSibling.tagName.toLowerCase()=="label"&&f.style.position=="absolute"){
f.style.position="static";
var _b1=f.parentNode;
_b1.style.position="absolute";
_b1.style.top=f.style.top;
_b1.style.left=f.style.left;
}
},_RecordInitialState:function(){
this.initialFieldValue=this._textBoxElement.value;
},_PartAt:function(_b2){
return this._partIndex[_b2];
},_CreatePartCollection:function(_b3,_b4){
var _b5;
var _b6=[];
var _b7=0;
for(var j=0;j<_b3.length;j++){
_b5=_b3[j];
_b5.PromptChar=_b4;
_b5.SetController(this);
_b5.index=this._parts.length;
_b6[_b6.length]=_b5;
if(_b6.length>1){
_b6[_b6.length-2].NextChunk=_b5;
}
_b5.NextChunk=null;
var _b9=_b5.GetLength();
_b5.offset=_b7;
_b7+=_b9;
}
return _b6;
},_setMask:function(_ba){
this._parts=this._CreatePartCollection(_ba,this.get_promptChar());
for(var i=0;i<this._parts.length;i++){
var _bc=this._parts[i].GetLength();
for(var j=this._length;j<this._length+_bc;j++){
this._partIndex[j]=this._parts[i];
}
this._length+=_bc;
}
},_setDisplayMask:function(_be){
this._displayParts=this._CreatePartCollection(_be,this.get_displayPromptChar());
for(var i=0;i<this._displayParts.length;i++){
var _c0=this._displayParts[i];
var _c1=_c0.GetLength();
if(_c0.ch){
continue;
}
for(var j=this._displayLength;j<this._displayLength+_c1;j++){
this._displayPartIndex[j]=this._displayParts[i];
}
this._displayLength+=_c1;
}
},_SafariSelectionFix:function(e){
var _c4=this._StrCompare(this._lastState.fieldValue,e.fieldValue);
e._selectionStart=_c4[0];
e._selectionEnd=_c4[0];
this._lastState._selectionStart=_c4[1];
this._lastState._selectionEnd=_c4[2];
},_HandleValueChange:function(e){
if(this.get_readOnly()){
this._Visualise();
return false;
}
if(this._lastState==null){
return;
}
var i,j;
if(Sys.Browser.agent==Sys.Browser.Safari){
this._SafariSelectionFix(e);
}
if(this._lastState.fieldValue.length>e.fieldValue.length){
if(e._selectionStart==this._textBoxElement.value.length){
this._partIndex[this._partIndex.length-1].SetValue("",this._partIndex.length-1);
}
if(this._lastState._selectionEnd>e._selectionStart){
i=this._lastState._selectionEnd;
while(i-->e._selectionStart){
this._partIndex[i].SetValue("",i);
}
}else{
i=this._lastState._selectionEnd+1;
while(i-->e._selectionStart){
this._partIndex[i].SetValue("",i);
e._selectionEnd++;
}
}
}
var _c8=this._lastState._selectionStart;
var _c9=Math.min(e._selectionStart,this._length);
var _ca=e.fieldValue.substr(_c8,_c9-_c8);
var _cb=this._UpdatePartsInRange(_ca,_c8,_c9);
e._selectionEnd+=_cb;
this._FixSelection(e);
},_SetPartValues:function(_cc,_cd,_ce,_cf,to){
var _d1;
var i=0;
var j=_cf;
var _d4=0;
_ce=_ce.toString();
while(i<to-_cf&&j<_cd){
_d1=_ce.charAt(i);
if(_d1==this.get_promptChar()){
_d1="";
}
if(_cc[j].SetValue(_d1,j)){
i++;
}else{
_d4++;
}
j++;
}
return _d4;
},_UpdateDisplayPartsInRange:function(_d5,_d6,to){
this._SetPartValues(this._displayPartIndex,this._displayLength,_d5,_d6,to);
},_UpdatePartsInRange:function(_d8,_d9,to){
var _db=this._SetPartValues(this._partIndex,this._length,_d8,_d9,to);
this._Visualise();
return _db;
},_FixSelection:function(_dc){
this.set_cursorPosition(_dc._selectionEnd);
},_GetVisibleValues:function(_dd){
var _de=[];
for(var i=0;i<_dd.length;i++){
_de[i]=_dd[i].GetVisValue();
}
return _de.join("");
},_Visualise:function(){
var _e0=this.get_valueWithPromptAndLiterals();
var _e1=this.get_value();
this._internalValueUpdate=true;
this._Render(_e0);
this.updateCssClass();
this._value=_e1;
this.updateHiddenValue();
this._internalValueUpdate=false;
this._projectedValue=this._textBoxElement.value;
},_Render:function(_e2){
this._isEmptyMessage=false;
if(!this._focused){
if(this.get_hideOnBlur()&&this.isEmpty()){
this._isEmptyMessage=true;
this.set_textBoxValue(this.get_emptyMessage());
}else{
if(this._displayParts&&this._displayParts.length){
this.set_textBoxValue(this.get_displayValue());
}else{
this.set_textBoxValue(_e2);
}
}
}else{
this.set_textBoxValue(_e2);
}
},_getResetValue:function(){
var _e3="";
var _e4=this._parts[0];
while(_e4.NextChunk){
if(_e4.GetVisValue()==_e4.GetValue()){
_e3+=_e4.PromptChar;
}else{
_e3+=_e4.GetVisValue();
}
_e4=_e4.NextChunk;
}
return _e3;
},_ValueHasChanged:function(){
return this._textBoxElement.value!=this._textBoxElement._oldValue;
},_FakeOnPropertyChange:function(){
if(document.createEventObject){
if(event){
var ev=document.createEventObject(event);
}else{
var ev=document.createEventObject();
}
ev.propertyName="value";
this._textBoxElement.fireEvent("onpropertychange",ev);
}
},_UpdateAfterKeyHandled:function(e,_e7){
this._Visualise();
var _e8=new Telerik.Web.UI.MaskedEventWrap(e,this._textBoxElement);
_e8._selectionEnd=_e7;
this._FixSelection(_e8);
return false;
},_ValueHandler:function(e){
if(this._internalValueUpdate){
return true;
}
if(!e){
e=window.event;
}
this._calculateSelection();
var _ea=new Telerik.Web.UI.MaskedEventWrap(e,this._textBoxElement);
if(_ea.fieldValue!=this._projectedValue){
this._HandleValueChange(_ea);
}
return true;
},_ActivityHandler:function(e){
if(this._internalValueUpdate){
return true;
}
if(!e){
e=window.event;
}
this._OnActivity(e);
return true;
},_calculateSelection:function(){
if(document.selection&&Sys.Browser.agent!=Sys.Browser.Opera){
var s1;
try{
s1=document.selection.createRange();
}
catch(error){
return;
}
if(s1.parentElement()!=this._textBoxElement){
return;
}
var s=s1.duplicate();
if(this._isTextarea){
s.moveToElementText(this._textBoxElement);
}else{
s.move("character",-this._textBoxElement.value.length);
}
s.setEndPoint("EndToStart",s1);
this._textBoxElement.selectionStart=s.text.length;
this._textBoxElement.selectionEnd=this._textBoxElement.selectionStart+s1.text.length;
if(this._isTextarea){
}
}
},_StrCompare:function(_ee,_ef){
var i;
var _f1,_f2,_f3;
i=0;
while(_ee.charAt(i)==_ef.charAt(i)&&i<_ee.length){
i++;
}
_f2=i;
_ee=_ee.substr(_f2).split("").reverse().join("");
_ef=_ef.substr(_f2).split("").reverse().join("");
i=0;
while(_ee.charAt(i)==_ef.charAt(i)&&i<_ee.length){
i++;
}
_f1=_f2+_ef.length-i;
_f3=_ee.length-i+_f2;
return [_f1,_f2,_f3];
},get__initialMasks:function(){
return this._initialMasks;
},set__initialMasks:function(_f4){
this._initialMasks=_f4;
},get__initialDisplayMasks:function(){
return this._initialDisplayMasks;
},set__initialDisplayMasks:function(_f5){
this._initialDisplayMasks=_f5;
},raise_valueChanged:function(){
if(this._ValueHasChanged()){
this._triggerDOMChangeEvent(this._getValidationField());
this._OnValueChange(null,this._textBoxElement._oldValue,this._textBoxElement.value);
}
}};
Telerik.Web.UI.RadMaskedTextBox.registerClass("Telerik.Web.UI.RadMaskedTextBox",Telerik.Web.UI.RadInputControl);


/* END Telerik.Web.UI.Input.MaskedTextBox.RadMaskedInputScript.js */
/* START AjaxControlToolkit.Common.Common.js */
// (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.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />


// 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() {
    /// <summary>
    /// The BoxSide enumeration describes the sides of a DOM element
    /// </summary>
    /// <field name="Top" type="Number" integer="true" static="true" />
    /// <field name="Right" type="Number" integer="true" static="true" />
    /// <field name="Bottom" type="Number" integer="true" static="true" />
    /// <field name="Left" type="Number" integer="true" static="true" />
}
AjaxControlToolkit.BoxSide.prototype = {
    Top : 0,
    Right : 1,
    Bottom : 2,
    Left : 3
}
AjaxControlToolkit.BoxSide.registerEnum("AjaxControlToolkit.BoxSide", false);


AjaxControlToolkit._CommonToolkitScripts = function() {
    /// <summary>
    /// The _CommonToolkitScripts class contains functionality utilized across a number
    /// of controls (but not universally)
    /// </summary>
    /// <remarks>
    /// You should not create new instances of _CommonToolkitScripts.  Instead you should use the shared instance CommonToolkitScripts (or AjaxControlToolkit.CommonToolkitScripts).
    /// </remarks>
}
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) {
        /// <summary>
        /// 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.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// Live DOM element to check style of
        /// </param>
        /// <param name="attribute" type="String">
        /// 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").
        /// </param>
        /// <param name="defaultValue" type="Object" mayBeNull="true" optional="true">
        /// 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).
        /// </param>
        /// <returns type="Object">
        /// Current style of the element's attribute
        /// </returns>

        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) {
        /// <summary>
        /// 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).
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// Live DOM element to get the background color of
        /// </param>
        /// <returns type="String">
        /// Background color of the element
        /// </returns>
        
        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) {
    /// <summary>Gets the coordinates of a DOM element.</summary>
    /// <param name="element" domElement="true"/>
    /// <returns type="Sys.UI.Point">
    ///   A Point object with two fields, x and y, which contain the pixel coordinates of the element.
    /// </returns>

    // 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) {
        /// <summary>
        /// Sets the current location for an element.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <param name="point" type="Object">
        /// Point object (of the form {x,y})
        /// </param>
        /// <remarks>
        /// 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.
        /// </remarks>
        Sys.UI.DomElement.setLocation(element, point.x, point.y);
    },
    
    getContentSize : function(element) {
        /// <summary>
        /// Gets the "content-box" size of an element.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <returns type="Object">
        /// Size of the element (in the form {width,height})
        /// </returns>
        /// <remarks>
        /// 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.
        /// </remarks>
        
        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) {
        /// <summary>
        /// Gets the "border-box" size of an element.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <returns type="Object">
        /// Size of the element (in the form {width,height})
        /// </returns>
        /// <remarks>
        /// 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.
        /// </remarks>
        
        if (!element) {
            throw Error.argumentNull('element');
        }
        return {
            width:  element.offsetWidth,
            height: element.offsetHeight
        };
    },
    
    setContentSize : function(element, size) {
        /// <summary>
        /// Sets the "content-box" size of an element.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <param name="size" type="Object">
        /// Size of the element (in the form {width,height})
        /// </param>
        /// <remarks>
        /// 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.
        /// </remarks>
        
        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) {
        /// <summary>
        /// Sets the "border-box" size of an element.
        /// </summary>
        /// <remarks>
        /// 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.
        /// </remarks>
        /// <param name="element" type="Sys.UI.DomElement">DOM element</param>
        /// <param name="size" type="Object">Size of the element (in the form {width,height})</param>
        /// <returns />
        
        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) {
        /// <summary>Gets the coordinates, width and height of an element.</summary>
        /// <param name="element" domElement="true"/>
        /// <returns type="Sys.UI.Bounds">
        ///   A Bounds object with four fields, x, y, width and height, which contain the pixel coordinates,
        ///   width and height of the element.
        /// </returns>
        /// <remarks>
        ///   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.
        /// </remarks>
        
        var offset = $common.getLocation(element);
        return new Sys.UI.Bounds(offset.x, offset.y, element.offsetWidth || 0, element.offsetHeight || 0);
    }, 
    
    setBounds : function(element, bounds) {
        /// <summary>
        /// Sets the "border-box" bounds of an element
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <param name="bounds" type="Object">
        /// Bounds of the element (of the form {x,y,width,height})
        /// </param>
        /// <remarks>
        /// 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.
        /// </remarks>
        
        if (!element) {
            throw Error.argumentNull('element');
        }
        if (!bounds) {
            throw Error.argumentNull('bounds');
        }
        this.setSize(element, bounds);
        $common.setLocation(element, bounds);
    },
    
    getClientBounds : function() {
        /// <summary>
        /// Gets the width and height of the browser client window (excluding scrollbars)
        /// </summary>
        /// <returns type="Sys.UI.Bounds">
        /// Browser's client width and height
        /// </returns>

        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) {
        /// <summary>
        /// Gets the entire margin box sizes.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <returns type="Object">
        /// Element's margin box sizes (of the form {top,left,bottom,right,horizontal,vertical})
        /// </returns>
        
        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) {
        /// <summary>
        /// Gets the entire border box sizes.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <returns type="Object">
        /// Element's border box sizes (of the form {top,left,bottom,right,horizontal,vertical})
        /// </returns>
        
        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) {
        /// <summary>
        /// Gets the entire padding box sizes.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <returns type="Object">
        /// Element's padding box sizes (of the form {top,left,bottom,right,horizontal,vertical})
        /// </returns>
        
        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) {
        /// <summary>
        /// Gets whether the current border style for an element on a specific boxSide is not 'none'.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <param name="boxSide" type="AjaxControlToolkit.BoxSide">
        /// Side of the element
        /// </param>
        /// <returns type="Boolean">
        /// Whether the current border style for an element on a specific boxSide is not 'none'.
        /// </returns>
        
        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) {
        /// <summary>
        /// Gets the margin thickness of an element on a specific boxSide.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <param name="boxSide" type="AjaxControlToolkit.BoxSide">
        /// Side of the element
        /// </param>
        /// <returns type="Number" integer="true">
        /// Margin thickness on the element's specified side
        /// </returns>
        
        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) {
        /// <summary>
        /// Gets the border thickness of an element on a specific boxSide.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <param name="boxSide" type="AjaxControlToolkit.BoxSide">
        /// Side of the element
        /// </param>
        /// <returns type="Number" integer="true">
        /// Border thickness on the element's specified side
        /// </returns>
        
        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) {
        /// <summary>
        /// Gets the padding thickness of an element on a specific boxSide.
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// DOM element
        /// </param>
        /// <param name="boxSide" type="AjaxControlToolkit.BoxSide">
        /// Side of the element
        /// </param>
        /// <returns type="Number" integer="true">
        /// Padding on the element's specified side
        /// </returns>
        
        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) {
        /// <summary>
        /// Parses a border-width string into a pixel size
        /// </summary>
        /// <param name="borderWidth" type="String" mayBeNull="true">
        /// Type of border ('thin','medium','thick','inherit',px unit,null,'')
        /// </param>
        /// <returns type="Number" integer="true">
        /// Number of pixels in the border-width
        /// </returns>
        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) {
        /// <summary>
        /// Parses a padding string into a pixel size
        /// </summary>
        /// <param name="padding" type="String" mayBeNull="true">
        /// Padding to parse ('inherit',px unit,null,'')
        /// </param>
        /// <returns type="Number" integer="true">
        /// Number of pixels in the padding
        /// </returns>
        
        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) {
        /// <summary>
        /// Parses a unit string into a unit object
        /// </summary>
        /// <param name="value" type="String" mayBeNull="true">
        /// Value to parse (of the form px unit,% unit,em unit,...)
        /// </param>
        /// <returns type="Object">
        /// Parsed unit (of the form {size,type})
        /// </returns>
        
        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) {
        /// <summary>
        /// Get the element's opacity
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// Element
        /// </param>
        /// <returns type="Number">
        /// Opacity of the element
        /// </returns>
        
        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) {
        /// <summary>
        /// Set the element's opacity
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// Element
        /// </param>
        /// <param name="value" type="Number">
        /// Opacity of the element
        /// </param>
        
        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) {
        /// <summary>
        /// Check if an element is visible
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// Element
        /// </param>
        /// <returns type="Boolean" mayBeNull="false">
        /// True if the element is visible, false otherwise
        /// </returns>
        
        // 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) {
        /// <summary>
        /// Check if an element is visible
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement" domElement="true">
        /// Element
        /// </param>
        /// <param name="value" type="Boolean" mayBeNull="false">
        /// True to make the element visible, false to hide it
        /// </param>
        
        // 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) {
        /// <summary>
        /// Returns a function reference that corresponds to the provided value
        /// </summary>
        /// <param name="value" type="Object">
        /// 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.
        /// </param>
        /// <returns type="Function">
        /// Reference to the function, or null if not found
        /// </returns>
        
        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) {
        /// <summary>
        /// Adds multiple css classes to a DomElement
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement">The element to modify</param>
        /// <param name="classNames" type="Array">The class names to add</param>
        
        for(var i = 0; i < classNames.length; i++) {
            Sys.UI.DomElement.addCssClass(element, classNames[i]);
        }
    },
    removeCssClasses : function(element, classNames) {
        /// <summary>
        /// Removes multiple css classes to a DomElement
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement">The element to modify</param>
        /// <param name="classNames" type="Array">The class names to remove</param>
        
        for(var i = 0; i < classNames.length; i++) {
            Sys.UI.DomElement.removeCssClass(element, classNames[i]);
        }
    },
    setStyle : function(element, style) {
        /// <summary>
        /// Sets the style of the element using the supplied style template object
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement">The element to modify</param>
        /// <param name="style" type="Object">The template</param>

        $common.applyProperties(element.style, style);
    },
    removeHandlers : function(element, events) {
        /// <summary>
        /// Removes a set of event handlers from an element
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement">The element to modify</param>
        /// <param name="events" type="Object">The template object that contains event names and delegates</param>
        /// <remarks>
        /// 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
        /// </remarks>
        for (var name in events) {
            $removeHandler(element, name, events[name]);
        }
    },
    
    overlaps : function(r1, r2) {
        /// <summary>
        /// Determine if two rectangles overlap
        /// </summary>
        /// <param name="r1" type="Object">
        /// Rectangle
        /// </param>
        /// <param name="r2" type="Object">
        /// Rectangle
        /// </param>
        /// <returns type="Boolean">
        /// True if the rectangles overlap, false otherwise
        /// </returns>
        
         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) {
        /// <summary>
        /// Tests whether a point (x,y) is contained within a rectangle
        /// </summary>
        /// <param name="rect" type="Object">The rectangle</param>
        /// <param name="x" type="Number">The x coordinate of the point</param>
        /// <param name="y" type="Number">The y coordinate of the point</param>
        
        return x >= rect.x && x < (rect.x + rect.width) && y >= rect.y && y < (rect.y + rect.height);
    },

    isKeyDigit : function(keyCode) { 
        /// <summary>
        /// Gets whether the supplied key-code is a digit
        /// </summary>
        /// <param name="keyCode" type="Number" integer="true">The key code of the event (from Sys.UI.DomEvent)</param>
        /// <returns type="Boolean" />

        return (0x30 <= keyCode && keyCode <= 0x39); 
    },
    
    isKeyNavigation : function(keyCode) { 
        /// <summary>
        /// Gets whether the supplied key-code is a navigation key
        /// </summary>
        /// <param name="keyCode" type="Number" integer="true">The key code of the event (from Sys.UI.DomEvent)</param>
        /// <returns type="Boolean" />

        return (Sys.UI.Key.left <= keyCode && keyCode <= Sys.UI.Key.down); 
    },
    
    padLeft : function(text, size, ch, truncate) { 
        /// <summary>
        /// Pads the left hand side of the supplied text with the specified pad character up to the requested size
        /// </summary>
        /// <param name="text" type="String">The text to pad</param>
        /// <param name="size" type="Number" integer="true" optional="true">The size to pad the text (default is 2)</param>
        /// <param name="ch" type="String" optional="true">The single character to use as the pad character (default is ' ')</param>
        /// <param name="truncate" type="Boolean" optional="true">Whether to truncate the text to size (default is false)</param>
        
        return $common._pad(text, size || 2, ch || ' ', 'l', truncate || false); 
    },
    
    padRight : function(text, size, ch, truncate) { 
        /// <summary>
        /// Pads the right hand side of the supplied text with the specified pad character up to the requested size
        /// </summary>
        /// <param name="text" type="String">The text to pad</param>
        /// <param name="size" type="Number" integer="true" optional="true">The size to pad the text (default is 2)</param>
        /// <param name="ch" type="String" optional="true">The single character to use as the pad character (default is ' ')</param>
        /// <param name="truncate" type="Boolean" optional="true">Whether to truncate the text to size (default is false)</param>

        return $common._pad(text, size || 2, ch || ' ', 'r', truncate || false); 
    },
    
    _pad : function(text, size, ch, side, truncate) {
        /// <summary>
        /// Pads supplied text with the specified pad character up to the requested size
        /// </summary>
        /// <param name="text" type="String">The text to pad</param>
        /// <param name="size" type="Number" integer="true">The size to pad the text</param>
        /// <param name="ch" type="String">The single character to use as the pad character</param>
        /// <param name="side" type="String">Either 'l' or 'r' to siginfy whether to pad the Left or Right side respectively</param>
        /// <param name="truncate" type="Boolean">Whether to truncate the text to size</param>

        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) {
        /// <summary>
        /// Attempts to fire a raw DOM event on an element
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement">The element to fire the event</param>
        /// <param name="rawEvent" type="Object">The raw DOM event object to fire. Must not be Sys.UI.DomEvent</param>
        /// <returns type="Boolean">True if the event was successfully fired, otherwise false</returns>
        
        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) {
        /// <summary>
        /// Attempts to fire a DOM event on an element
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement">The element to fire the event</param>
        /// <param name="eventName" type="String">The name of the event to fire (without an 'on' prefix)</param>
        /// <param name="properties" type="Object">Properties to add to the event</param>
        /// <returns type="Boolean">True if the event was successfully fired, otherwise false</returns>
        
        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) {
        /// <summary>
        /// Wraps an inner element with a new outer element at the same DOM location as the inner element
        /// </summary>
        /// <param name="innerElement" type="Sys.UI.DomElement">The element to be wrapped</param>
        /// <param name="newOuterElement" type="Sys.UI.DomElement">The new parent for the element</param>
        /// <returns />
        
        var parent = innerElement.parentNode;
        parent.replaceChild(newOuterElement, innerElement);        
        (newInnerParentElement || newOuterElement).appendChild(innerElement);
    },

    unwrapElement : function(innerElement, oldOuterElement) {
        /// <summary>
        /// Unwraps an inner element from an outer element at the same DOM location as the outer element
        /// </summary>
        /// <param name="innerElement" type="Sys.UI.DomElement">The element to be wrapped</param>
        /// <param name="newOuterElement" type="Sys.UI.DomElement">The new parent for the element</param>
        /// <returns />

        var parent = oldOuterElement.parentNode;
        if (parent != null) {
            $common.removeElement(innerElement);
            parent.replaceChild(innerElement, oldOuterElement);
        }
    },
    
    removeElement : function(element) {
        /// <summary>
        /// Removes an element from the DOM tree
        /// </summary>
        /// <param name="element" type="Sys.UI.DomElement">The element to be removed</param>
        /// <returns />

        var parent = element.parentNode;
        if (parent != null) {
            parent.removeChild(element);
        }
    },
 
    applyProperties : function(target, properties) {
        /// <summary>
        /// Quick utility method to copy properties from a template object to a target object
        /// </summary>
        /// <param name="target" type="Object">The object to apply to</param>
        /// <param name="properties" type="Object">The template to copy values from</param>
        
        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) {
        /// <summary>
        /// Creates an element for the current document based on a template object
        /// </summary>
        /// <param name="template" type="Object">The template from which to create the element</param>
        /// <param name="appendToParent" type="Sys.UI.DomElement" optional="true" mayBeNull="true">A DomElement under which to append this element</param>
        /// <param name="nameTable" type="Object" optional="true" mayBeNull="true">An object to use as the storage for the element using template.name as the key</param>
        /// <returns type="Sys.UI.DomElement" />
        /// <remarks>
        /// 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:
        /// <code>
        /// 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);
        /// </code>
        /// </remarks>
        
        // 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 () {
        /// <summary>
        /// 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.
        /// </summary>   
        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 () {
        /// <summary>
        /// Updates the hidden buffer to ensure that the latest document stream is picked up
        /// by the screen reader.
        /// </summary>
        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() {
    /// <summary>
    /// Utility functions for manipulating the DOM
    /// </summary>
}
AjaxControlToolkit._DomUtility.prototype = {
    isDescendant : function(ancestor, descendant) {
        /// <summary>
        /// Whether the specified element is a descendant of the ancestor
        /// </summary>
        /// <param name="ancestor" type="Sys.UI.DomElement">Ancestor node</param>
        /// <param name="descendant" type="Sys.UI.DomElement">Possible descendant node</param>
        /// <returns type="Boolean" />
        
        for (var n = descendant.parentNode; n != null; n = n.parentNode) {
            if (n == ancestor) return true;
        }
        return false;
    },
    isDescendantOrSelf : function(ancestor, descendant) {
        /// <summary>
        /// Whether the specified element is a descendant of the ancestor or the same as the ancestor
        /// </summary>
        /// <param name="ancestor" type="Sys.UI.DomElement">Ancestor node</param>
        /// <param name="descendant" type="Sys.UI.DomElement">Possible descendant node</param>
        /// <returns type="Boolean" />

        if (ancestor === descendant) 
            return true;
        return AjaxControlToolkit.DomUtility.isDescendant(ancestor, descendant);
    },
    isAncestor : function(descendant, ancestor) {
        /// <summary>
        /// Whether the specified element is an ancestor of the descendant
        /// </summary>
        /// <param name="descendant" type="Sys.UI.DomElement">Descendant node</param>
        /// <param name="ancestor" type="Sys.UI.DomElement">Possible ancestor node</param>
        /// <returns type="Boolean" />

        return AjaxControlToolkit.DomUtility.isDescendant(ancestor, descendant);
    },
    isAncestorOrSelf : function(descendant, ancestor) {
        /// <summary>
        /// Whether the specified element is an ancestor of the descendant or the same as the descendant
        /// </summary>
        /// <param name="descendant" type="Sys.UI.DomElement">Descendant node</param>
        /// <param name="ancestor" type="Sys.UI.DomElement">Possible ancestor node</param>
        /// <returns type="Boolean" />
        
        if (descendant === ancestor)
            return true;
            
        return AjaxControlToolkit.DomUtility.isDescendant(ancestor, descendant);
    },
    isSibling : function(self, sibling) {
        /// <summary>
        /// Whether the specified element is a sibling of the self element
        /// </summary>
        /// <param name="self" type="Sys.UI.DomElement">Self node</param>
        /// <param name="sibling" type="Sys.UI.DomElement">Possible sibling node</param>
        /// <returns type="Boolean" />
        
        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) {
    /// <summary>
    /// 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.
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// The DOM element the behavior is associated with
    /// </param>
    AjaxControlToolkit.TextBoxWrapper.initializeBase(this, [element]);
    this._current = element.value;
    this._watermark = null;
    this._isWatermarked = false;
}

AjaxControlToolkit.TextBoxWrapper.prototype = {

    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>
        this.get_element().AjaxControlToolkitTextBoxWrapper = null;
        AjaxControlToolkit.TextBoxWrapper.callBaseMethod(this, 'dispose');
    },

    get_Current : function() {
        /// <value type="String">
        /// Current value actually in the TextBox (i.e., TextBox.value)
        /// </value>
        this._current = this.get_element().value;
        return this._current;
    },
    set_Current : function(value) {
        this._current = value;
        this._updateElement();
    },

    get_Value : function() {
        /// <value type="String">
        /// Conceptual "value" of the TextBox - its contents if no watermark is present
        /// or "" if one is
        /// </value>
        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() {
        /// <value type="String">
        /// Text of the watermark for the TextBox
        /// </value>
        return this._watermark;
    },
    set_Watermark : function(value) {
        this._watermark = value;
        this._updateElement();
    },

    get_IsWatermarked : function() {
        /// <value type="Boolean">
        /// true iff the TextBox is watermarked
        /// </value>
        return this._isWatermarked;
    },
    set_IsWatermarked : function(isWatermarked) {
        if (this._isWatermarked != isWatermarked) {
            this._isWatermarked = isWatermarked;
            this._updateElement();
            this._raiseWatermarkChanged();
        }
    },

    _updateElement : function() {
        /// <summary>
        /// Updates the actual contents of the TextBox according to what should be there
        /// </summary>
        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) {
        /// <summary>
        /// Adds a handler for the WatermarkChanged event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().addHandler("WatermarkChanged", handler);
    },
    remove_WatermarkChanged : function(handler) {
        /// <summary>
        /// Removes a handler for the WatermarkChanged event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().removeHandler("WatermarkChanged", handler);
    },
    _raiseWatermarkChanged : function() {
        /// <summary>
        /// Raises the WatermarkChanged event
        /// </summary>
        var onWatermarkChangedHandler = this.get_events().getHandler("WatermarkChanged");
        if (onWatermarkChangedHandler) {
            onWatermarkChangedHandler(this, Sys.EventArgs.Empty);
        }
    }
}
AjaxControlToolkit.TextBoxWrapper.get_Wrapper = function(element) {
    /// <summary>
    /// Gets (creating one if necessary) the TextBoxWrapper for the specified TextBox
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// TextBox for which to get the wrapper
    /// </param>
    /// <returns type="AjaxControlToolkit.TextBoxWrapper">
    /// TextBoxWrapper instance
    /// </returns>
    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) {
    /// <summary>
    /// Wrapper for ASP.NET's validatorGetValue to return the value from the wrapper if present
    /// </summary>
    /// <param name="id" type="String">
    /// id of the element
    /// </param>
    /// <returns type="Object">
    /// Value from the wrapper or result of original ValidatorGetValue
    /// </returns>
    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;
    }
}

/* END AjaxControlToolkit.Common.Common.js */
/* START AjaxControlToolkit.ExtenderBase.BaseScripts.js */
// (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.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />


Type.registerNamespace('AjaxControlToolkit');

// This is the base behavior for all extender behaviors
AjaxControlToolkit.BehaviorBase = function(element) {
    /// <summary>
    /// Base behavior for all extender behaviors
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// Element the behavior is associated with
    /// </param>
    AjaxControlToolkit.BehaviorBase.initializeBase(this,[element]);
    
    this._clientStateFieldID = null;
    this._pageRequestManager = null;
    this._partialUpdateBeginRequestHandler = null;
    this._partialUpdateEndRequestHandler = null;
}
AjaxControlToolkit.BehaviorBase.prototype = {
    initialize : function() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>

        // TODO: Evaluate necessity
        AjaxControlToolkit.BehaviorBase.callBaseMethod(this, 'initialize');
    },

    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>
        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() {
        /// <value type="String">
        /// ID of the hidden field used to store client state
        /// </value>
        return this._clientStateFieldID;
    },
    set_ClientStateFieldID : function(value) {
        if (this._clientStateFieldID != value) {
            this._clientStateFieldID = value;
            this.raisePropertyChanged('ClientStateFieldID');
        }
    },

    get_ClientState : function() {
        /// <value type="String">
        /// Client state
        /// </value>
        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() {
        /// <summary>
        /// Register for beginRequest and endRequest events on the PageRequestManager,
        /// (which cause _partialUpdateBeginRequest and _partialUpdateEndRequest to be
        /// called when an UpdatePanel refreshes)
        /// </summary>

        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) {
        /// <summary>
        /// Method that will be called when a partial update (via an UpdatePanel) begins,
        /// if registerPartialUpdateEvents() has been called.
        /// </summary>
        /// <param name="sender" type="Object">
        /// Sender
        /// </param>
        /// <param name="beginRequestEventArgs" type="Sys.WebForms.BeginRequestEventArgs">
        /// Event arguments
        /// </param>

        // Nothing done here; override this method in a child class
    },
    
    _partialUpdateEndRequest : function(sender, endRequestEventArgs) {
        /// <summary>
        /// Method that will be called when a partial update (via an UpdatePanel) finishes,
        /// if registerPartialUpdateEvents() has been called.
        /// </summary>
        /// <param name="sender" type="Object">
        /// Sender
        /// </param>
        /// <param name="endRequestEventArgs" type="Sys.WebForms.EndRequestEventArgs">
        /// Event arguments
        /// </param>

        // 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) {
    /// <summary>
    /// 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.
    /// </summary>
    /// <param name="element" type="Sys.UI.DomElement" domElement="true">
    /// DOM Element the behavior is associated with
    /// </param>
    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() {
        /// <summary>
        /// Initialize the behavior
        /// </summary>

        AjaxControlToolkit.DynamicPopulateBehaviorBase.callBaseMethod(this, 'initialize');

        // Create event handlers
        this._populatingHandler = Function.createDelegate(this, this._onPopulating);
        this._populatedHandler = Function.createDelegate(this, this._onPopulated);
    },

    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>

        // 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) {
        /// <summary>
        /// Demand-create the DynamicPopulateBehavior and use it to populate the target element
        /// </summary>
        /// <param name="contextKeyOverride" type="String" mayBeNull="true" optional="true">
        /// 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.
        /// </param>

        // 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) {
        /// <summary>
        /// Handler for DynamicPopulate behavior's Populating event
        /// </summary>
        /// <param name="sender" type="Object">
        /// DynamicPopulate behavior
        /// </param>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event args
        /// </param>
        this.raisePopulating(eventArgs);
    },

    _onPopulated : function(sender, eventArgs) {
        /// <summary>
        /// Handler for DynamicPopulate behavior's Populated event
        /// </summary>
        /// <param name="sender" type="Object">
        /// DynamicPopulate behavior
        /// </param>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event args
        /// </param>
        this.raisePopulated(eventArgs);
    },

    get_dynamicControlID : function() {
        /// <value type="String">
        /// ID of the element to populate with dynamic content
        /// </value>
        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() {
        /// <value type="String">
        /// 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.
        /// </value>
        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() {
        /// <value type="String" mayBeNull="true" optional="true">
        /// 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.
        /// </value>
        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() {
        /// <value type="String">
        /// The name of the method to call on the page or web service
        /// </value>
        /// <remarks>
        /// The signature of the method must exactly match the following:
        ///     [WebMethod]
        ///     string DynamicPopulateMethod(string contextKey)
        ///     {
        ///         ...
        ///     }
        /// </remarks>
        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() {
        /// <value type="Boolean" mayBeNull="false">
        /// Whether the results of the dynamic population should be cached and
        /// not fetched again after the first load
        /// </value>
        return this._cacheDynamicResults;
    },
    set_cacheDynamicResults : function(value) {
        if (this._cacheDynamicResults != value) {
            this._cacheDynamicResults = value;
            this.raisePropertyChanged('cacheDynamicResults');
        }
    },
    
    add_populated : function(handler) {
        /// <summary>
        /// Add a handler on the populated event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().addHandler("populated", handler);
    },
    remove_populated : function(handler) {
        /// <summary>
        /// Remove a handler from the populated event
        /// </summary>
        /// <param name="handler" type="Function">
        /// Handler
        /// </param>
        this.get_events().removeHandler("populated", handler);
    },
    raisePopulated : function(arg) {
        /// <summary>
        /// Raise the populated event
        /// </summary>
        /// <param name="arg" type="Sys.EventArgs">
        /// Event arguments
        /// </param>
        var handler = this.get_events().getHandler("populated");  
        if (handler) handler(this, arg);
    },
    
    add_populating : function(handler) {
        /// <summary>
        /// Add an event handler for the populating event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('populating', handler);
    },
    remove_populating : function(handler) {
        /// <summary>
        /// Remove an event handler from the populating event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('populating', handler);
    },
    raisePopulating : function(eventArgs) {
        /// <summary>
        /// Raise the populating event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the populating event
        /// </param>
        /// <returns />
        
        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) {
        // <summary>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) {
        /// <remarks>override this method to intercept client state loading after a callback</remarks>
    },
    saveClientState : function() {
        /// <remarks>override this method to intercept client state acquisition before a callback</remarks>
        return null;
    },
    _invoke : function(name, args, cb) {
        /// <summary>invokes a callback method on the server control</summary>        
        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);

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."};
/* END AjaxControlToolkit.ExtenderBase.BaseScripts.js */
/* START AjaxControlToolkit.PasswordStrength.PasswordStrengthExtenderBehavior.js */
// (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.


/// <reference name="MicrosoftAjax.debug.js" />
/// <reference name="MicrosoftAjaxTimer.debug.js" />
/// <reference name="MicrosoftAjaxWebForms.debug.js" />
/// <reference path="../ExtenderBase/BaseScripts.js" />
/// <reference path="../Common/Common.js" />


Type.registerNamespace('AjaxControlToolkit');

AjaxControlToolkit.PasswordStrengthExtenderBehavior = function(element) {
    AjaxControlToolkit.PasswordStrengthExtenderBehavior.initializeBase(this, [element]);

    // The array holding the default textual descriptions for the password strength levels
    this._levelArray = new Array();
    this._styleArray = new Array();
    
    this._txtPwdStrengthCssClass = null;
    this._barBorderCssClass = null;
    this._barIndicatorCssClass = null;
    this._displayPosition = AjaxControlToolkit.DisplayPosition.RightSide;
    this._strengthIndicator = AjaxControlToolkit.StrengthIndicatorTypes.Text;
    
    this._preferredPasswordLength = 0;
    this._minimumNumericCharacters = 0;
    this._minimumSymbolCharacters = 0;
    this._requiresUpperAndLowerCaseCharacters = false;
    this._helpHandleCssClass = '';
    this._helpHandlePosition =  AjaxControlToolkit.DisplayPosition.AboveRight;
    this._helpText = '';
    this._helpStatusLabelID = null;
    
    this._displayDiv = null; // The DIV for displaying the textual indicator
    this._helpDiv = null;  // The DIV that the user can click on to display the password requirements
    
    this._barOuterDiv = null;  // The outer DIV for the bar indicator
    this._barInnerDiv = null;  // The Inner DIV for the bar indicator
    
    this._keyPressHandler = null;
    this._blurHandler = null;
    this._helpClickHandler = null;
    this._prefixText = AjaxControlToolkit.Resources.PasswordStrength_StrengthPrompt;
    
    // The default set of textual strength descriptions
    this._txtStrengthDescriptions = AjaxControlToolkit.Resources.PasswordStrength_DefaultStrengthDescriptions;
    this._strengthStyles = '';
    this._barIndicatorStyles = '';
    this._txtseparator = ';';
    this._MIN_TXT_LEVEL_COUNT = 2;
    this._MAX_TXT_LEVEL_COUNT = 10;
    
    // The default weighting/ratio used for password strength calculation.
    // ...Password Length = 50%
    // ...Numerics = 15%
    // ...Casing = 15%
    // ...Symbols = 20%
    this._calcWeightings = "50;15;15;20";

    this._minLowerCaseChars = 0;
    this._minUpperCaseChars = 0;
}
        
AjaxControlToolkit.PasswordStrengthExtenderBehavior.prototype = {
    
    
    initialize : function() {
        AjaxControlToolkit.PasswordStrengthExtenderBehavior.callBaseMethod(this, 'initialize');
        
        this._createIndicatorDisplayElement();
        
        var e = this.get_element();

        // Create our delegates
        this._keyPressHandler = Function.createDelegate(this, this._onKeyPress);
        this._blurHandler = Function.createDelegate(this, this._onBlur);
        

        // Attach events/associate the events with the delegates already defined above
        $addHandler(e,'keyup', this._keyPressHandler);
        $addHandler(e,'blur', this._blurHandler);
        
        // Set some defaults
        if (this._preferredPasswordLength == null || this._preferredPasswordLength == '' || this._preferredPasswordLength <= 0) {
            this._preferredPasswordLength = 10;  // Set to at least 10 chars as a preferred pwd length, even though this is very small.
                                           // Ideally, it should be set to 20 or greater for a passphrase type scenario. Remember this is preferred, NOT minimum
            this.raisePropertyChanged('PreferredPasswordLength');
        }
        if (this._calcWeightings == null || this._calcWeightings == "") {
            this._calcWeightings = "50;15;15;20";
            this.raisePropertyChanged('CalculationWeightings');
        }
        
        // Get our initial password strength calculated values. This performsn an initial calculation and sets up the helptext.
        this._getPasswordStrength();

    },
    
    _createIndicatorDisplayElement : function() {
            
        if (this._strengthIndicator == AjaxControlToolkit.StrengthIndicatorTypes.BarIndicator)
            this._createBarIndicatorDisplayElement();
        else
            this._createTextDisplayElement();
        
        // If the Help display DIV was created ok, then set its position.
        if (this._createHelpDisplayElement() == true)
        {
            // We need to do this first as we need to find its bounding area and can only do that after its been made visible
             $common.setVisible(this._helpDiv,true);

            
            var bounds = $common.getBounds(this.get_element());
            
            var helpBounds = $common.getBounds(this._helpDiv);
            var posY;
            var posX;
            var offset = 3;  // 3 pixels for a very small amount of overlap to "connect" the help icon to the textbox

            if (this._helpHandlePosition == "LeftSide")
            {
                posY = bounds.y + ((bounds.height / 2) - (helpBounds.height / 2));
                posX = bounds.x - helpBounds.width;
            } else if (this._helpHandlePosition == "BelowRight")
            {
                posY = bounds.y + bounds.height - offset;   // Just one pixel for a small overlap
                posX = bounds.x + bounds.width - offset;
            } else if (this._helpHandlePosition == "BelowLeft")
            {
                posY = bounds.y + bounds.height - offset;
                posX = bounds.x - helpBounds.width + offset;
            } else if (this._helpHandlePosition == "RightSide")
            {
                posY = bounds.y + ((bounds.height / 2) - (helpBounds.height / 2));
                posX = bounds.x + bounds.width;
            } else if (this._helpHandlePosition == "AboveLeft")
            {
                posY = bounds.y - helpBounds.height + offset;
                posX = bounds.x - helpBounds.width + offset;

            } else   // This fall through logic gets called if the Help position is "AboveRight" or anything else for that matter
            {
                posY = bounds.y  - helpBounds.height + offset;
                posX = bounds.x + bounds.width - offset;
            }

            this._helpDiv.style.top = posY + 'px';
            this._helpDiv.style.left = posX + 'px';

        }

    },
    
    _createTextDisplayElement : function() {
        //*******************************************************************************
        // **** Create the element for textual display
        //********************************************************************************
        // Create a DIV element so we can place our own content in there.
        // This is for the textual display.
        var p = document.createElement("label");  
        p.style.position= "absolute"; 
        p.style.visibility="hidden";
        p.style.display = "none";

        // Create the control id        
        if (this.get_element().id) {
            p.id = this.get_element().id + "_PasswordStrength";
        }
        
        this._displayDiv = p;
        

        this._setTextDisplayLocation(p);
        
        // Add the DIV element to the document
        document.body.appendChild(p);
        
        this._setTextDisplayStyle(0);
        
    },
    
    _setTextDisplayStyle : function(index) {
        //*******************************************************************************
        // **** Takes care of setting the appropriate CSS class style for the textual strength display
        //********************************************************************************
        if (this._styleArray.length == 0)
        {
            if (this._txtPwdStrengthCssClass != null && this._txtPwdStrengthCssClass != '')
                this._displayDiv.className = this._txtPwdStrengthCssClass;
            else
                this._displayDiv.style.backgroundColor = "yellow";
        } else
        {
            this._displayDiv.style.backgroundColor = "";
            if ( (this._txtPwdStrengthCssClass != null && this._txtPwdStrengthCssClass != '') &&
                Sys.UI.DomElement.containsCssClass(this._displayDiv,this._txtPwdStrengthCssClass))
            {
                Sys.UI.DomElement.removeCssClass(this._displayDiv,this._txtPwdStrengthCssClass)
            }
            this._displayDiv.className = this._styleArray[index];
        }
        
    },
    
    _setBarDisplayStyle : function(index) {
        //*******************************************************************************
        // **** Takes care of setting the appropriate CSS class style for the textual strength display
        //********************************************************************************
        if (this._barBorderCssClass != '')
            this._barOuterDiv.className = this._barBorderCssClass;
        else
        {
            d1.style.width="200px";
            d1.style.borderStyle="solid";
            d1.style.borderWidth="1px";
        }

        if (this._styleArray.length == 0)
        {
            if (this._barIndicatorCssClass != '')
                this._barInnerDiv.className = this._barIndicatorCssClass;
            else
                this._barInnerDiv.style.backgroundColor = "red";
        } else
        {
            if ( (this._barIndicatorCssClass != null && this._barIndicatorCssClass != '') &&
                Sys.UI.DomElement.containsCssClass(this._barInnerDiv,this._barIndicatorCssClass))
            {
                Sys.UI.DomElement.removeCssClass(this._barInnerDiv,this._barIndicatorCssClass)
            }
            this._barInnerDiv.className = this._styleArray[index];
            
        }
        
    },

    _createBarIndicatorDisplayElement : function() {
        //*******************************************************************************
        // **** Create the element for BarIndicator display
        //********************************************************************************
        var d1 = document.createElement("div");  // outer div
        d1.style.position= "absolute"; 
        d1.style.visibility="hidden";
        d1.style.display = "none";

        var d2 = document.createElement("div");  // inner div, the bar itself
        d2.style.position= "absolute"; 
        d2.style.visibility="hidden";
        d2.style.display = "none";
        
        d1.style.height = this.get_element().offsetHeight+4 + "px";

        if (this.get_element().id) {
            d1.id = this.get_element().id + "_PasswordStrengthBar1";
            d2.id = this.get_element().id + "_PasswordStrengthBar2";
        }

        this._barOuterDiv = d1;
        this._barInnerDiv = d2;
        
        this._extractStyles();
        
        this._setBarDisplayStyle(0);

        document.body.appendChild(d1);
        document.body.appendChild(d2);

        this._setBarDisplayLocation(d1,d2);
        
    },

    // Create the DIV element that is used to represent the image to click on to display
    // the password requirements. If the _requirementsHandleCssClass is set then
    // its created and appended to the document and returns true, otherwise it returns
    // false and wont be displayed.
    _createHelpDisplayElement : function() {
        if (this._helpHandleCssClass != '')
        {
            var req = document.createElement("a");
            
            req.style.position= "absolute"; 
            req.style.visibility="hidden";
            req.style.display = "none";
            req.href = "#"; // fix for work item #8217
            req.title = AjaxControlToolkit.Resources.PasswordStrength_GetHelpRequirements;

            if (this.get_element().id) {
                req.id = this.get_element().id + "_PasswordStrengthReqDisplay";
            }

            this._helpClickHandler = Function.createDelegate(this,this._onHelpClick);
            $addHandler(req,'click',this._helpClickHandler);

            this._helpDiv = req;
            
        
            this._helpDiv.className = this._helpHandleCssClass;
            if (this.get_element().parentElement != null && this.get_element().parentElement.canHaveChildren)
                this.get_element().parentElement.appendChild(req);
            else
                document.body.appendChild(req);
            
            return true;
        } else
            return false;
    },

    _setTextDisplayLocation : function(htmlElement) {
        // Whats our current position of the textbox
        var location = $common.getLocation(this.get_element());
        var bounds = $common.getBounds(this.get_element());
        var offsetAmount = 15;
        
        if (this._displayPosition == AjaxControlToolkit.DisplayPosition.LeftSide)
        {
            htmlElement.style.top = location.y + "px";
            htmlElement.style.left = location.x - bounds.width - offsetAmount + "px"; 
        } else if (this._displayPosition == "BelowRight")
        {
            htmlElement.style.top = location.y + this.get_element().offsetHeight + "px";
            htmlElement.style.left = location.x + this.get_element().offsetWidth - (this.get_element().offsetWidth/4) + "px";
        } else if (this._displayPosition == AjaxControlToolkit.DisplayPosition.BelowLeft)
        {
            htmlElement.style.top = location.y + this.get_element().offsetHeight + "px";
            htmlElement.style.left = location.x - offsetAmount + "px";
        } else if (this._displayPosition == AjaxControlToolkit.DisplayPosition.AboveRight)
        {
            htmlElement.style.top = location.y  - this.get_element().offsetHeight + "px";
            htmlElement.style.left = location.x + this.get_element().offsetWidth - (this.get_element().offsetWidth/4) + "px";
        } else if (this._displayPosition == AjaxControlToolkit.DisplayPosition.AboveLeft)
        {
            htmlElement.style.top = location.y - this.get_element().offsetHeight + "px";
            htmlElement.style.left = location.x - offsetAmount + "px";
        } else   // This fall through logic gets called if the DisplayPositon is "RightSide" or anything else for that matter
        {
            htmlElement.style.top = location.y + "px";
            htmlElement.style.left = location.x + this.get_element().offsetWidth + offsetAmount + "px";
        }
    },
    
    _setBarDisplayLocation : function(outerElement, innerElement) {
        
        // Re: issue #1893. If the target element has a display:none, the this.get_element().offsetHeight caclulation is 0, making
        // this.get_element().offsetHeight -2 an invalid size. This test circumvents the negative problem, and we also recalc/set the
        // inner and outer div height each time this routine is called.
        if (this.get_element().offsetHeight > 0) {

            var outerBorder = $common.getBorderBox(outerElement);
            var outerPadding = $common.getPaddingBox(outerElement);
            var leftIndent = outerBorder.left + outerPadding.left;
            var topIndent = outerBorder.top + outerPadding.top;
            
            innerElement.style.height = this.get_element().offsetHeight  + "px";    // why does IE only do a minimum height????
            outerElement.style.height = this.get_element().offsetHeight  + "px";
            

            var location = $common.getLocation(this.get_element());

            var offsetAmount = 15;
            
            if (this._displayPosition == AjaxControlToolkit.DisplayPosition.LeftSide)
            {
                // We need to work out how wide the outer/surrounding DIV element is so we can subtract that from the textbox x position.
                // For whatever reason, we need to make the outer DIV element visible before the width is accurately reported, otherwise
                // it always comes back as zero. Not sure if this is IE6 specific or not.
                // To circumvent this, we briefly make the control visible, get its width, then make it invisble again.
                
                // Fix bug where the bar was displayed initially but then hidden after the calculation.
                var initialVisibleState = $common.getVisible(this._barOuterDiv);
                
                // Get the content size so we take into account padding.
                $common.setVisible(this._barOuterDiv,true);        
                var barBounds = $common.getContentSize(outerElement);
                $common.setVisible(this._barOuterDiv, initialVisibleState);   
                
                var _barIndicatorWidth = barBounds.width;

                outerElement.style.top = location.y + "px";
                outerElement.style.left = location.x - parseInt(_barIndicatorWidth) - offsetAmount + "px";
                
                innerElement.style.top = location.y + topIndent + "px";
                innerElement.style.left = location.x - parseInt(_barIndicatorWidth) - offsetAmount + leftIndent + "px";
            } else if (this._displayPosition == AjaxControlToolkit.DisplayPosition.BelowRight)
            {
                outerElement.style.top = location.y + this.get_element().offsetHeight + "px";
                outerElement.style.left = location.x + this.get_element().offsetWidth + "px";
                
                innerElement.style.top = location.y + this.get_element().offsetHeight + topIndent + "px";
                innerElement.style.left = location.x + this.get_element().offsetWidth + leftIndent + "px";
            } else if (this._displayPosition == AjaxControlToolkit.DisplayPosition.BelowLeft)
            {
                outerElement.style.top = location.y + this.get_element().offsetHeight + "px";
                outerElement.style.left = location.x + "px";
                
                innerElement.style.top = location.y + this.get_element().offsetHeight + topIndent + "px";
                innerElement.style.left = location.x + leftIndent + "px";
            } else if (this._displayPosition == AjaxControlToolkit.DisplayPosition.AboveRight)
            {
                outerElement.style.top = location.y-this.get_element().offsetHeight + "px";
                outerElement.style.left = location.x + this.get_element().offsetWidth + "px";
                
                innerElement.style.top = location.y-this.get_element().offsetHeight + topIndent + "px";
                innerElement.style.left = location.x + this.get_element().offsetWidth + leftIndent + "px";

            } else if (this._displayPosition == AjaxControlToolkit.DisplayPosition.AboveLeft)
            {
                outerElement.style.top = location.y-this.get_element().offsetHeight + "px";
                outerElement.style.left = location.x + "px";
                
                innerElement.style.top = location.y-this.get_element().offsetHeight + topIndent + "px";
                innerElement.style.left = location.x + leftIndent + "px";
            } else   // This fall through logic gets called if the DisplayPositon is "RightSide" or anything else for that matter
            {
                outerElement.style.top = location.y + "px";
                outerElement.style.left = location.x + this.get_element().offsetWidth + offsetAmount + "px";
                
                innerElement.style.top = location.y + topIndent + "px";
                innerElement.style.left = location.x + this.get_element().offsetWidth + offsetAmount + leftIndent + "px";
            }
        }
    },

    // Determine what mode of dispay we are using and show the appropriate indicator
    _showStrength : function() {
    
        var e = this.get_element();
        
        // Here we check to see if the target element is in readonly mode. If so, then we dont want to
        // display the password strength indicator. we do it here because the application may dynamically
        // manipulate the readonly state so we need to ensure we check for it each time.
        if (e.readOnly == true)
            return;

        var pwdStrength = this._getPasswordStrength();
        
        if (this._strengthIndicator == AjaxControlToolkit.StrengthIndicatorTypes.BarIndicator)
        {
            
            // Set the visibility to true initially so that width and height calculations are accurate 
            $common.setVisible(this._barOuterDiv , true);
            $common.setVisible(this._barInnerDiv, true);

            var index = 0;
            if (this._styleArray != null && this._styleArray.length > 0)
            {
                index = parseInt(pwdStrength/100 * (this._styleArray.length-1));
            }
            this._setBarDisplayStyle(index);

            this._setBarDisplayLocation(this._barOuterDiv,this._barInnerDiv);
             
            this._showStrengthAsBarValue(pwdStrength);
            
            
        } else
        {
            this._createTextDescriptions(this._txtStrengthDescriptions);
      
            $common.setVisible(this._displayDiv, true);
            
            var index = parseInt(pwdStrength/100 * (this._levelArray.length-1));
            var pwdStrengthText = this._levelArray[index];
            
            this._setTextDisplayStyle(index);
            
            this._setTextDisplayLocation(this._displayDiv);
            
            this._showStrengthAsText(pwdStrengthText);   

        }
        
    },
    
    _showStrengthAsText : function(pwdStrengthVal) {
        this._displayDiv.innerHTML = this._prefixText + pwdStrengthVal;
    },
    
    _showStrengthAsBarValue : function(strengthValue) {
        var bounds = $common.getContentSize(this._barOuterDiv);
        var outerPadding = $common.getPaddingBox(this._barOuterDiv);
        var barLength = parseInt( bounds.width * (strengthValue / 100));
        this._barInnerDiv.style.width = barLength + "px";
    },
    
    _getPasswordStrength : function() {
        // work out how strong the text entered into the textbox is for a password
        // and return an integer in between 1 .. 100 (ie. a percentage value)
        // 1 = weakest
        // 100 = strongest
        // Note: Password determination involves
        //       Length (makes up 50% of score)
        //       Does it contain numbers (makes up 15% of score)
        //       Does it contain upper and lowercase (makes up 15% of score)
        //       Does it contain special symbols (makes up 20% of score)
        
        var pwd = AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).get_Value();
        
        var pwdRequirements = '';  // This will contain what is required to make this password a 'strong' password.
        
        var percentTotal = 0;
        
        // Extract the password calculation weighting ratios
        var weights = this._calcWeightings.split(';');
        if (weights.length != 4)
            Sys.Debug.assert(null, AjaxControlToolkit.Resources.PasswordStrength_InvalidWeightingRatios);

        var _ratioLen = parseInt(weights[0]);
        var _ratioNum = parseInt(weights[1]);
        var _ratioCas = parseInt(weights[2]);
        var _ratioSym = parseInt(weights[3]);
        
        //***********************************************
        // Length Criteria
        // Any pwd with a length > 20 is a passphrase and is a good thing
        var ratio = pwd.length / this._preferredPasswordLength;
        if (ratio > 1)
            ratio = 1;
        
        var lengthStrength = (ratio * _ratioLen);
        
        // Add to our percentage total
        percentTotal += lengthStrength;
        
        if (ratio < 1)
            pwdRequirements = String.format(AjaxControlToolkit.Resources.PasswordStrength_RemainingCharacters, this._preferredPasswordLength - pwd.length);
            
        //***********************************************
        // Numeric Criteria
        // Does it contain numbers?
        if (this._minimumNumericCharacters > 0)
        {
            var numbersRegex = new RegExp("[0-9]", "g");
            var numCount = this._getRegexCount(numbersRegex,pwd);
            if ( numCount >= this._minimumNumericCharacters)
                percentTotal += _ratioNum;
            
            if (numCount < this._minimumNumericCharacters)
            {
                if (pwdRequirements != '')
                    pwdRequirements += ', ';
                pwdRequirements += String.format(AjaxControlToolkit.Resources.PasswordStrength_RemainingNumbers, this._minimumNumericCharacters - numCount);
            }
        } else
        {
            // If the user has not specified that the password should contain numerics, then we just figure out the ratio according
            // to the password length as that is always something
            percentTotal += (ratio * _ratioNum);
        }
            
        //***********************************************
        // Casing Criteria
        // Does it contain lowercase AND uppercase Text
        if (this._requiresUpperAndLowerCaseCharacters == true ||
            (typeof(this._requiresUpperAndLowerCaseCharacters) == 'String' && Boolean.parse(this._requiresUpperAndLowerCaseCharacters) == true) )
        {
            var lowercaseRegex = new RegExp("[a-z]", "g");
            var uppercaseRegex = new RegExp("[A-Z]", "g");
            
            var numLower = this._getRegexCount(lowercaseRegex,pwd);
            var numUpper = this._getRegexCount(uppercaseRegex,pwd);

            if (numLower > 0 || numUpper > 0)
            {
                if (numLower >= this._minLowerCaseChars && numUpper >= this._minUpperCaseChars)
                    percentTotal += _ratioCas;
                else
                {
                    if (this._minLowerCaseChars > 0 && (this._minLowerCaseChars - numLower) > 0)
                    {
                        if (pwdRequirements != '')
                            pwdRequirements += ', ';
                        pwdRequirements += String.format(AjaxControlToolkit.Resources.PasswordStrength_RemainingLowerCase, this._minLowerCaseChars - numLower);
                    }
                    if (this._minUpperCaseChars > 0 && (this._minUpperCaseChars - numUpper) > 0)
                    {
                        if (pwdRequirements != '')
                            pwdRequirements += ', ';
                        pwdRequirements += String.format(AjaxControlToolkit.Resources.PasswordStrength_RemainingUpperCase, this._minUpperCaseChars - numUpper);
                    }
                }
                
            }
            else
            {
                if (pwdRequirements != '')
                    pwdRequirements += ', ';
                pwdRequirements += AjaxControlToolkit.Resources.PasswordStrength_RemainingMixedCase;

            }
        } else
        {
            // If the user has not specified that the password should contain numerics, then we just figure out the ratio according
            // to the password length as  that is always something
            percentTotal += (ratio * _ratioCas);
        }


        //***********************************************
        // Symbol Criteria
        // Does it contain any special symbols?
        if (this._minimumSymbolCharacters > 0)
        {
            var symbolRegex = new RegExp("[^a-z,A-Z,0-9,\x20]", "g"); // related to work item 1034
            var numCount = this._getRegexCount(symbolRegex,pwd);
            if (numCount >= this._minimumSymbolCharacters)
                percentTotal += _ratioSym;
            
            if (numCount < this._minimumSymbolCharacters)
            {
                if (pwdRequirements != '')
                    pwdRequirements += ', ';
                pwdRequirements += String.format(AjaxControlToolkit.Resources.PasswordStrength_RemainingSymbols, this._minimumSymbolCharacters - numCount);
            }

        } else
        {
            // If the user has not specified that the password should contain numerics, then we just figure out the ratio according
            // to the password length as that is always something
            percentTotal += (ratio * _ratioSym);
        }
        
        this.set_HelpText(pwdRequirements);
        
        return percentTotal;
        
    },
    
    // *******************************************************
    // Determines the number of matches according to the regex spec and the test string
    _getRegexCount : function(regex,testString) {
        var cnt = 0;
        if (testString != null && testString != "")
        {
            var results = testString.match(regex);
            if (results != null)
                cnt = results.length;
        }
        return cnt;
    },

    // Extract the styles (if present) from out comma delimited list    
    _extractStyles : function() {
       // Get our styles for each text indicator in the array
        if (this._strengthStyles != null && this._strengthStyles != "" )
            this._styleArray = this._strengthStyles.split(this._txtseparator);

    },
    
    //************************************************************
    // ** Split the TextStrengthDescriptions property into our internal
    // ** array
    //************************************************************
    _createTextDescriptions : function(descriptions) {
        this._levelArray = this._txtStrengthDescriptions.split(this._txtseparator);
        
        this._extractStyles();
                
        // Make sure we have the same number of styles as per the number of actual text descriptions
        if (this._styleArray.length > 0 && this._styleArray.length != this._levelArray.length)
        {
            Sys.Debug.assert(false, AjaxControlToolkit.Resources.PasswordStrength_InvalidStrengthDescriptionStyles);
        }
            
        // Check to see that there were enough text descriptions specified and that it didn't exceed our maximum
        if (this._levelArray.length < this._MIN_TXT_LEVEL_COUNT || this._levelArray > this._MAX_TXT_LEVEL_COUNT)
        {
            Sys.Debug.assert(false, AjaxControlToolkit.Resources.PasswordStrength_InvalidStrengthDescriptions);
            // Do we need to do more here? Should we jsut be relying on the server side validation to pick up any inconsistencies?
        }
        // Everything is ok
    },
    
    _onKeyPress : function() {
        
        this._showStrength();
    },

    _onBlur : function() {
        if (this._strengthIndicator == AjaxControlToolkit.StrengthIndicatorTypes.BarIndicator)
        {
             $common.setVisible(this._barOuterDiv, false);
             $common.setVisible(this._barInnerDiv, false);
        } else
        {
            $common.setVisible(this._displayDiv, false);
        }
    },
    
    _onHelpClick : function() {
        if (this._helpText == '')
            alert(AjaxControlToolkit.Resources.PasswordStrength_Satisfied);
        else
            alert(this._helpText);
    },
    
    dispose : function() {
        var e = this.get_element();

        // Detach events
        if (this._keyPressHandler) {
            $removeHandler(e,'keyup', this._keyPressHandler);
            this._keyPressHandler = null;
        }
        if (this._blurHandler) {
            $removeHandler(e,'blur', this._blurHandler);
            this._blurHandler = null;
        }
        if (this._helpClickHandler) {
            $removeHandler(this._helpDiv, 'click', this._helpClickHandler);
            this._helpClickHandler = null;
        }

        // Clear text display if applicable
        if(this._displayDiv) 
           $common.setVisible(this._displayDiv, false);

        // Clear Bar display if applicable
        if (this._barOuterDiv)
             $common.setVisible(this._barOuterDiv,false);
        if (this._barInnerDiv)
             $common.setVisible(this._barInnerDiv, false);
        
        
        if (this._helpHandleCssClass != '' && this._helpDiv)
             $common.setVisible(this._helpDiv ,false);
       
        AjaxControlToolkit.PasswordStrengthExtenderBehavior.callBaseMethod(this, 'dispose');
    },
    
    get_PreferredPasswordLength : function() {
        return this._preferredPasswordLength;
    },

    set_PreferredPasswordLength : function(value) {
        if (this._preferredPasswordLength != value) {
            this._preferredPasswordLength = value;
            this.raisePropertyChanged('PreferredPasswordLength');
        }
    },

    get_MinimumNumericCharacters : function() {
        return this._minimumNumericCharacters;
    },

    set_MinimumNumericCharacters : function(value) {
        if (this._minimumNumericCharacters != value) {
            this._minimumNumericCharacters = value;
            this.raisePropertyChanged('MinimumNumericCharacters');
        }
    },
    
    get_MinimumSymbolCharacters : function() {
        return this._minimumSymbolCharacters;
    },

    set_MinimumSymbolCharacters : function(value) {
        if (this._minimumSymbolCharacters != value) {
            this._minimumSymbolCharacters = value;
            this.raisePropertyChanged('MinimumSymbolCharacters');
        }
    },
    get_RequiresUpperAndLowerCaseCharacters : function() {
        return this._requiresUpperAndLowerCaseCharacters;
    },

    set_RequiresUpperAndLowerCaseCharacters : function(value) {
        if (this._requiresUpperAndLowerCaseCharacters != value) {
            this._requiresUpperAndLowerCaseCharacters = value;
            this.raisePropertyChanged('RequiresUpperAndLowerCaseCharacters');
        }
    },

    get_TextCssClass : function() {
        return this._txtPwdStrengthCssClass;
    },

    set_TextCssClass : function(value) {
        if (this._txtPwdStrengthCssClass != value) {
            this._txtPwdStrengthCssClass = value;
            this.raisePropertyChanged('TextCssClass');
        }
    },

    get_BarBorderCssClass : function() {
        return this._barBorderCssClass;
    },

    set_BarBorderCssClass : function(value) {
        if (this._barBorderCssClass != value) {
            this._barBorderCssClass = value;
            this.raisePropertyChanged('BarBorderCssClass');
        }
    },
    get_BarIndicatorCssClass : function() {
        return this._barIndicatorCssClass;
    },
    
    set_BarIndicatorCssClass : function(value) {
        if (this._barIndicatorCssClass != value) {
            this._barIndicatorCssClass = value;
            this.raisePropertyChanged('BarIndicatorCssClass');
        }
    },


    get_DisplayPosition : function() {
        return this._displayPosition;
    },
    
    set_DisplayPosition : function(value) {
        if (this._displayPosition != value) {
            this._displayPosition = value;
            this.raisePropertyChanged('DisplayPosition');
        }
    },

    
    get_PrefixText : function() {
        return this._prefixText;
    },
    
    set_PrefixText : function(value) {
        if (this._prefixText != value) {
            this._prefixText = value;
            this.raisePropertyChanged('PrefixText');
        }
    },

    get_StrengthIndicatorType : function() {
        return this._strengthIndicator;
    },
    
    set_StrengthIndicatorType : function(value) {
        if (this._strengthIndicator != value) {
            this._strengthIndicator = value;
            this.raisePropertyChanged('StrengthIndicatorType');
        }
    },
    
    get_TextStrengthDescriptions : function() {
        return this._txtStrengthDescriptions;
    },
    
    set_TextStrengthDescriptions : function(value) {
        if (value != null && value != '' && value != this._txtStrengthDescriptions) {
            this._txtStrengthDescriptions = value;
            this.raisePropertyChanged('TextStrengthDescriptions');
        }
    },

    get_StrengthStyles : function() {
        return this._strengthStyles;
    },
    
    set_StrengthStyles : function(value) {
        if (value != null && value != '' && value != this._strengthStyles) {
            this._strengthStyles = value;
            this.raisePropertyChanged('StrengthStyles');
        }
    },
    
    //*********************************************
    // NOTE: The TextStrengthDescriptionStyles properties
    // have been deprecated in faour of the StrengthStyles properties
    get_TextStrengthDescriptionStyles : function() {
        return this.get_StrengthStyles();
    },
    
    //*********************************************
    // NOTE: The TextStrengthDescriptionStyles properties
    // have been deprecated in faour of the StrengthStyles properties
    set_TextStrengthDescriptionStyles : function(value) {
    	this.set_StrengthStyles(value);
    },

    
    get_HelpHandleCssClass : function() {
        return this._helpHandleCssClass;
    },
    
    set_HelpHandleCssClass : function(value) {
        if (this._helpHandleCssClass != value) {
            this._helpHandleCssClass = value;
            this.raisePropertyChanged('HelpHandleCssClass');
        }
    },
        
    get_HelpHandlePosition : function() {
        return this._helpHandlePosition;
    },
    
    set_HelpHandlePosition : function(value) {
        if (this._helpHandlePosition != value) {
            this._helpHandlePosition = value;
            this.raisePropertyChanged('HelpHandlePosition');
        }
    },
    
    get_HelpText : function() {
        return this._helpText;
    },
    
    get_CalculationWeightings : function() {
        return this._calcWeightings;
    },
    
    set_CalculationWeightings : function(value) {
        if (this._calcWeightings != value) {
            this._calcWeightings = value;
            this.raisePropertyChanged('CalculationWeightings');
        }
    },
    
    set_HelpText : function(value) {
        if (this._helpStatusLabelID) {
            var label = $get(this._helpStatusLabelID);
            if (label) {
                if (AjaxControlToolkit.TextBoxWrapper.get_Wrapper(this.get_element()).get_Value().length > 0) {            
                    label.innerHTML = value;
                }
                else {
                    label.innerHTML = "";
                }
            }
        }
        if (this._helpText != value) {
            this._helpText = value;
            this.raisePropertyChanged('HelpText');
        }
    },
    
    get_MinimumLowerCaseCharacters : function() {
        return this._minLowerCaseChars;
    },
            
    set_MinimumLowerCaseCharacters : function(value) {
        this._minLowerCaseChars = value;
    },

    get_MinimumUpperCaseCharacters : function() {
        return this._minUpperCaseChars;
    },
            
    set_MinimumUpperCaseCharacters : function(value) {
        this._minUpperCaseChars = value;
    },

    get_HelpStatusLabelID : function() {
        return this._helpStatusLabelID;
    },
    
    set_HelpStatusLabelID : function(value) {
        if (this._helpStatusLabelID != value) {
            this._helpStatusLabelID = value;
            this.raisePropertyChanged('HelpStatusLabelID');
        }
    }
}


AjaxControlToolkit.PasswordStrengthExtenderBehavior.registerClass('AjaxControlToolkit.PasswordStrengthExtenderBehavior', AjaxControlToolkit.BehaviorBase);


// Register enumerations  

AjaxControlToolkit.StrengthIndicatorTypes = function() {
    throw Error.invalidOperation();
}
AjaxControlToolkit.DisplayPosition = function() {
    throw Error.invalidOperation();
}

AjaxControlToolkit.StrengthIndicatorTypes.prototype = {
    Text: 0,
    BarIndicator: 1
}

AjaxControlToolkit.DisplayPosition.prototype = {
    RightSide: 0,
    AboveRight: 1,
    AboveLeft: 2,
    LeftSide: 3,
    BelowRight: 4,
    BelowLeft: 5
}

AjaxControlToolkit.DisplayPosition.registerEnum('AjaxControlToolkit.DisplayPosition');
AjaxControlToolkit.StrengthIndicatorTypes.registerEnum('AjaxControlToolkit.StrengthIndicatorTypes');

/* END AjaxControlToolkit.PasswordStrength.PasswordStrengthExtenderBehavior.js */
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();
(function() {var fn = function() {$get('ctl00_RadScriptManager1_HiddenField').value += ';;Telerik.Web.UI, Version=2008.2.826.35, Culture=neutral, PublicKeyToken=121fae78165ba3d4:it:2b1b618c-2ad2-4d4e-8b5a-afa3e17baf61:6f2bcae9:e9e0cae;AjaxControlToolkit, Version=3.0.20820.21195, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e:it:7b909a52-07c5-4c7e-bf6c-8505bb9a51c2:e2e86ef9;AjaxControlToolkit, Version=3.0.20820.21195, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e:it:7b909a52-07c5-4c7e-bf6c-8505bb9a51c2:1df13a87;AjaxControlToolkit, Version=3.0.20820.21195, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e:it:7b909a52-07c5-4c7e-bf6c-8505bb9a51c2:7e79e346';Sys.Application.remove_load(fn);};Sys.Application.add_load(fn);})();
