﻿//----------------------------------------------------------
// Copyright (C) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------
// MicrosoftAjax.js
Function.__typeName="Function";Function.__class=true;Function.createCallback=function(b,a){return function(){var e=arguments.length;if(e>0){var d=[];for(var c=0;c<e;c++)d[c]=arguments[c];d[e]=a;return b.apply(this,d)}return b.call(this,a)}};Function.createDelegate=function(a,b){return function(){return b.apply(a,arguments)}};Function.emptyFunction=Function.emptyMethod=function(){};Function._validateParams=function(e,c){var a;a=Function._validateParameterCount(e,c);if(a){a.popStackFrame();return a}for(var b=0;b<e.length;b++){var d=c[Math.min(b,c.length-1)],f=d.name;if(d.parameterArray)f+="["+(b-c.length+1)+"]";a=Function._validateParameter(e[b],d,f);if(a){a.popStackFrame();return a}}return null};Function._validateParameterCount=function(e,a){var c=a.length,d=0;for(var b=0;b<a.length;b++)if(a[b].parameterArray)c=Number.MAX_VALUE;else if(!a[b].optional)d++;if(e.length<d||e.length>c){var f=Error.parameterCount();f.popStackFrame();return f}return null};Function._validateParameter=function(c,a,h){var b,g=a.type,l=!!a.integer,k=!!a.domElement,m=!!a.mayBeNull;b=Function._validateParameterType(c,g,l,k,m,h);if(b){b.popStackFrame();return b}var e=a.elementType,f=!!a.elementMayBeNull;if(g===Array&&typeof c!=="undefined"&&c!==null&&(e||!f)){var j=!!a.elementInteger,i=!!a.elementDomElement;for(var d=0;d<c.length;d++){var n=c[d];b=Function._validateParameterType(n,e,j,i,f,h+"["+d+"]");if(b){b.popStackFrame();return b}}}return null};Function._validateParameterType=function(a,c,n,m,k,d){var b;if(typeof a==="undefined")if(k)return null;else{b=Error.argumentUndefined(d);b.popStackFrame();return b}if(a===null)if(k)return null;else{b=Error.argumentNull(d);b.popStackFrame();return b}if(c&&c.__enum){if(typeof a!=="number"){b=Error.argumentType(d,Object.getType(a),c);b.popStackFrame();return b}if(a%1===0){var e=c.prototype;if(!c.__flags||a===0){for(var i in e)if(e[i]===a)return null}else{var l=a;for(var i in e){var f=e[i];if(f===0)continue;if((f&a)===f)l-=f;if(l===0)return null}}}b=Error.argumentOutOfRange(d,a,String.format(Sys.Res.enumInvalidValue,a,c.getName()));b.popStackFrame();return b}if(m){var h;if(typeof a.nodeType!=="number"){var g=a.ownerDocument||a.document||a;if(g!=a){var j=g.defaultView||g.parentWindow;h=j!=a&&!(j.document&&a.document&&j.document===a.document)}else h=typeof g.body==="undefined"}else h=a.nodeType===3;if(h){b=Error.argument(d,Sys.Res.argumentDomElement);b.popStackFrame();return b}}if(c&&!c.isInstanceOfType(a)){b=Error.argumentType(d,Object.getType(a),c);b.popStackFrame();return b}if(c===Number&&n)if(a%1!==0){b=Error.argumentOutOfRange(d,a,Sys.Res.argumentInteger);b.popStackFrame();return b}return null};Error.__typeName="Error";Error.__class=true;Error.create=function(d,b){var a=new Error(d);a.message=d;if(b)for(var c in b)a[c]=b[c];a.popStackFrame();return a};Error.argument=function(a,c){var b="Sys.ArgumentException: "+(c?c:Sys.Res.argument);if(a)b+="\n"+String.format(Sys.Res.paramName,a);var d=Error.create(b,{name:"Sys.ArgumentException",paramName:a});d.popStackFrame();return d};Error.argumentNull=function(a,c){var b="Sys.ArgumentNullException: "+(c?c:Sys.Res.argumentNull);if(a)b+="\n"+String.format(Sys.Res.paramName,a);var d=Error.create(b,{name:"Sys.ArgumentNullException",paramName:a});d.popStackFrame();return d};Error.argumentOutOfRange=function(c,a,d){var b="Sys.ArgumentOutOfRangeException: "+(d?d:Sys.Res.argumentOutOfRange);if(c)b+="\n"+String.format(Sys.Res.paramName,c);if(typeof a!=="undefined"&&a!==null)b+="\n"+String.format(Sys.Res.actualValue,a);var e=Error.create(b,{name:"Sys.ArgumentOutOfRangeException",paramName:c,actualValue:a});e.popStackFrame();return e};Error.argumentType=function(d,c,b,e){var a="Sys.ArgumentTypeException: ";if(e)a+=e;else if(c&&b)a+=String.format(Sys.Res.argumentTypeWithTypes,c.getName(),b.getName());else a+=Sys.Res.argumentType;if(d)a+="\n"+String.format(Sys.Res.paramName,d);var f=Error.create(a,{name:"Sys.ArgumentTypeException",paramName:d,actualType:c,expectedType:b});f.popStackFrame();return f};Error.argumentUndefined=function(a,c){var b="Sys.ArgumentUndefinedException: "+(c?c:Sys.Res.argumentUndefined);if(a)b+="\n"+String.format(Sys.Res.paramName,a);var d=Error.create(b,{name:"Sys.ArgumentUndefinedException",paramName:a});d.popStackFrame();return d};Error.format=function(a){var c="Sys.FormatException: "+(a?a:Sys.Res.format),b=Error.create(c,{name:"Sys.FormatException"});b.popStackFrame();return b};Error.invalidOperation=function(a){var c="Sys.InvalidOperationException: "+(a?a:Sys.Res.invalidOperation),b=Error.create(c,{name:"Sys.InvalidOperationException"});b.popStackFrame();return b};Error.notImplemented=function(a){var c="Sys.NotImplementedException: "+(a?a:Sys.Res.notImplemented),b=Error.create(c,{name:"Sys.NotImplementedException"});b.popStackFrame();return b};Error.parameterCount=function(a){var c="Sys.ParameterCountException: "+(a?a:Sys.Res.parameterCount),b=Error.create(c,{name:"Sys.ParameterCountException"});b.popStackFrame();return b};Error.prototype.popStackFrame=function(){if(typeof this.stack==="undefined"||this.stack===null||typeof this.fileName==="undefined"||this.fileName===null||typeof this.lineNumber==="undefined"||this.lineNumber===null)return;var a=this.stack.split("\n"),c=a[0],e=this.fileName+":"+this.lineNumber;while(typeof c!=="undefined"&&c!==null&&c.indexOf(e)===-1){a.shift();c=a[0]}var d=a[1];if(typeof d==="undefined"||d===null)return;var b=d.match(/@(.*):(\d+)$/);if(typeof b==="undefined"||b===null)return;this.fileName=b[1];this.lineNumber=parseInt(b[2]);a.shift();this.stack=a.join("\n")};Object.__typeName="Object";Object.__class=true;Object.getType=function(b){var a=b.constructor;if(!a||typeof a!=="function"||!a.__typeName||a.__typeName==="Object")return Object;return a};Object.getTypeName=function(a){return Object.getType(a).getName()};String.__typeName="String";String.__class=true;String.prototype.endsWith=function(a){return this.substr(this.length-a.length)===a};String.prototype.startsWith=function(a){return this.substr(0,a.length)===a};String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")};String.prototype.trimEnd=function(){return this.replace(/\s+$/,"")};String.prototype.trimStart=function(){return this.replace(/^\s+/,"")};String.format=function(){return String._toFormattedString(false,arguments)};String.localeFormat=function(){return String._toFormattedString(true,arguments)};String._toFormattedString=function(l,j){var c="",e=j[0];for(var a=0;true;){var f=e.indexOf("{",a),d=e.indexOf("}",a);if(f<0&&d<0){c+=e.slice(a);break}if(d>0&&(d<f||f<0)){c+=e.slice(a,d+1);a=d+2;continue}c+=e.slice(a,f);a=f+1;if(e.charAt(a)==="{"){c+="{";a++;continue}if(d<0)break;var h=e.substring(a,d),g=h.indexOf(":"),k=parseInt(g<0?h:h.substring(0,g),10)+1,i=g<0?"":h.substring(g+1),b=j[k];if(typeof b==="undefined"||b===null)b="";if(b.toFormattedString)c+=b.toFormattedString(i);else if(l&&b.localeFormat)c+=b.localeFormat(i);else if(b.format)c+=b.format(i);else c+=b.toString();a=d+1}return c};Boolean.__typeName="Boolean";Boolean.__class=true;Boolean.parse=function(b){var a=b.trim().toLowerCase();if(a==="false")return false;if(a==="true")return true};Date.__typeName="Date";Date.__class=true;Date._appendPreOrPostMatch=function(e,b){var d=0,a=false;for(var c=0,g=e.length;c<g;c++){var f=e.charAt(c);switch(f){case "'":if(a)b.append("'");else d++;a=false;break;case "\\":if(a)b.append("\\");a=!a;break;default:b.append(f);a=false}}return d};Date._expandFormat=function(a,b){if(!b)b="F";if(b.length===1)switch(b){case "d":return a.ShortDatePattern;case "D":return a.LongDatePattern;case "t":return a.ShortTimePattern;case "T":return a.LongTimePattern;case "F":return a.FullDateTimePattern;case "M":case "m":return a.MonthDayPattern;case "s":return a.SortableDateTimePattern;case "Y":case "y":return a.YearMonthPattern;default:throw Error.format(Sys.Res.formatInvalidString)}return b};Date._expandYear=function(c,a){if(a<100){var b=(new Date).getFullYear();a+=b-b%100;if(a>c.Calendar.TwoDigitYearMax)return a-100}return a};Date._getParseRegExp=function(b,e){if(!b._parseRegExp)b._parseRegExp={};else if(b._parseRegExp[e])return b._parseRegExp[e];var c=Date._expandFormat(b,e);c=c.replace(/([\^\$\.\*\+\?\|\[\]\(\)\{\}])/g,"\\\\$1");var a=new Sys.StringBuilder("^"),j=[],f=0,i=0,h=Date._getTokenRegExp(),d;while((d=h.exec(c))!==null){var l=c.slice(f,d.index);f=h.lastIndex;i+=Date._appendPreOrPostMatch(l,a);if(i%2===1){a.append(d[0]);continue}switch(d[0]){case "dddd":case "ddd":case "MMMM":case "MMM":a.append("(\\D+)");break;case "tt":case "t":a.append("(\\D*)");break;case "yyyy":a.append("(\\d{4})");break;case "fff":a.append("(\\d{3})");break;case "ff":a.append("(\\d{2})");break;case "f":a.append("(\\d)");break;case "dd":case "d":case "MM":case "M":case "yy":case "y":case "HH":case "H":case "hh":case "h":case "mm":case "m":case "ss":case "s":a.append("(\\d\\d?)");break;case "zzz":a.append("([+-]?\\d\\d?:\\d{2})");break;case "zz":case "z":a.append("([+-]?\\d\\d?)")}Array.add(j,d[0])}Date._appendPreOrPostMatch(c.slice(f),a);a.append("$");var k=a.toString().replace(/\s+/g,"\\s+"),g={"regExp":k,"groups":j};b._parseRegExp[e]=g;return g};Date._getTokenRegExp=function(){return /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|hh|h|HH|H|mm|m|ss|s|tt|t|fff|ff|f|zzz|zz|z/g};Date.parseLocale=function(a){return Date._parse(a,Sys.CultureInfo.CurrentCulture,arguments)};Date.parseInvariant=function(a){return Date._parse(a,Sys.CultureInfo.InvariantCulture,arguments)};Date._parse=function(g,c,h){var e=false;for(var a=1,i=h.length;a<i;a++){var f=h[a];if(f){e=true;var b=Date._parseExact(g,f,c);if(b)return b}}if(!e){var d=c._getDateTimeFormats();for(var a=0,i=d.length;a<i;a++){var b=Date._parseExact(g,d[a],c);if(b)return b}}return null};Date._parseExact=function(s,y,j){s=s.trim();var m=j.dateTimeFormat,v=Date._getParseRegExp(m,y),x=(new RegExp(v.regExp)).exec(s);if(x===null)return null;var w=v.groups,f=null,c=null,h=null,g=null,d=0,n=0,o=0,e=0,k=null,r=false;for(var p=0,z=w.length;p<z;p++){var a=x[p+1];if(a)switch(w[p]){case "dd":case "d":h=parseInt(a,10);if(h<1||h>31)return null;break;case "MMMM":c=j._getMonthIndex(a);if(c<0||c>11)return null;break;case "MMM":c=j._getAbbrMonthIndex(a);if(c<0||c>11)return null;break;case "M":case "MM":var c=parseInt(a,10)-1;if(c<0||c>11)return null;break;case "y":case "yy":f=Date._expandYear(m,parseInt(a,10));if(f<0||f>9999)return null;break;case "yyyy":f=parseInt(a,10);if(f<0||f>9999)return null;break;case "h":case "hh":d=parseInt(a,10);if(d===12)d=0;if(d<0||d>11)return null;break;case "H":case "HH":d=parseInt(a,10);if(d<0||d>23)return null;break;case "m":case "mm":n=parseInt(a,10);if(n<0||n>59)return null;break;case "s":case "ss":o=parseInt(a,10);if(o<0||o>59)return null;break;case "tt":case "t":var u=a.toUpperCase();r=u===m.PMDesignator.toUpperCase();if(!r&&u!==m.AMDesignator.toUpperCase())return null;break;case "f":e=parseInt(a,10)*100;if(e<0||e>999)return null;break;case "ff":e=parseInt(a,10)*10;if(e<0||e>999)return null;break;case "fff":e=parseInt(a,10);if(e<0||e>999)return null;break;case "dddd":g=j._getDayIndex(a);if(g<0||g>6)return null;break;case "ddd":g=j._getAbbrDayIndex(a);if(g<0||g>6)return null;break;case "zzz":var q=a.split(/:/);if(q.length!==2)return null;var i=parseInt(q[0],10);if(i<-12||i>13)return null;var l=parseInt(q[1],10);if(l<0||l>59)return null;k=i*60+(a.startsWith("-")?-l:l);break;case "z":case "zz":var i=parseInt(a,10);if(i<-12||i>13)return null;k=i*60}}var b=new Date;if(f===null)f=b.getFullYear();if(c===null)c=b.getMonth();if(h===null)h=b.getDate();b.setFullYear(f,c,h);if(b.getDate()!==h)return null;if(g!==null&&b.getDay()!==g)return null;if(r&&d<12)d+=12;b.setHours(d,n,o,e);if(k!==null){var t=b.getMinutes()-(k+b.getTimezoneOffset());b.setHours(b.getHours()+parseInt(t/60,10),t%60)}return b};Date.prototype.format=function(a){return this._toFormattedString(a,Sys.CultureInfo.InvariantCulture)};Date.prototype.localeFormat=function(a){return this._toFormattedString(a,Sys.CultureInfo.CurrentCulture)};Date.prototype._toFormattedString=function(e,h){if(!e||e.length===0||e==="i")if(h&&h.name.length>0)return this.toLocaleString();else return this.toString();var d=h.dateTimeFormat;e=Date._expandFormat(d,e);var a=new Sys.StringBuilder,b;function c(a){if(a<10)return "0"+a;return a.toString()}function g(a){if(a<10)return "00"+a;if(a<100)return "0"+a;return a.toString()}var j=0,i=Date._getTokenRegExp();for(;true;){var l=i.lastIndex,f=i.exec(e),k=e.slice(l,f?f.index:e.length);j+=Date._appendPreOrPostMatch(k,a);if(!f)break;if(j%2===1){a.append(f[0]);continue}switch(f[0]){case "dddd":a.append(d.DayNames[this.getDay()]);break;case "ddd":a.append(d.AbbreviatedDayNames[this.getDay()]);break;case "dd":a.append(c(this.getDate()));break;case "d":a.append(this.getDate());break;case "MMMM":a.append(d.MonthNames[this.getMonth()]);break;case "MMM":a.append(d.AbbreviatedMonthNames[this.getMonth()]);break;case "MM":a.append(c(this.getMonth()+1));break;case "M":a.append(this.getMonth()+1);break;case "yyyy":a.append(this.getFullYear());break;case "yy":a.append(c(this.getFullYear()%100));break;case "y":a.append(this.getFullYear()%100);break;case "hh":b=this.getHours()%12;if(b===0)b=12;a.append(c(b));break;case "h":b=this.getHours()%12;if(b===0)b=12;a.append(b);break;case "HH":a.append(c(this.getHours()));break;case "H":a.append(this.getHours());break;case "mm":a.append(c(this.getMinutes()));break;case "m":a.append(this.getMinutes());break;case "ss":a.append(c(this.getSeconds()));break;case "s":a.append(this.getSeconds());break;case "tt":a.append(this.getHours()<12?d.AMDesignator:d.PMDesignator);break;case "t":a.append((this.getHours()<12?d.AMDesignator:d.PMDesignator).charAt(0));break;case "f":a.append(g(this.getMilliseconds()).charAt(0));break;case "ff":a.append(g(this.getMilliseconds()).substr(0,2));break;case "fff":a.append(g(this.getMilliseconds()));break;case "z":b=this.getTimezoneOffset()/60;a.append((b<=0?"+":"-")+Math.floor(Math.abs(b)));break;case "zz":b=this.getTimezoneOffset()/60;a.append((b<=0?"+":"-")+c(Math.floor(Math.abs(b))));break;case "zzz":b=this.getTimezoneOffset()/60;a.append((b<=0?"+":"-")+c(Math.floor(Math.abs(b)))+d.TimeSeparator+c(Math.abs(this.getTimezoneOffset()%60)))}}return a.toString()};Number.__typeName="Number";Number.__class=true;Number.parseLocale=function(a){return Number._parse(a,Sys.CultureInfo.CurrentCulture)};Number.parseInvariant=function(a){return Number._parse(a,Sys.CultureInfo.InvariantCulture)};Number._parse=function(b,o){b=b.trim();if(b.match(/^[+-]?infinity$/i))return parseFloat(b);if(b.match(/^0x[a-f0-9]+$/i))return parseInt(b);var a=o.numberFormat,g=Number._parseNumberNegativePattern(b,a,a.NumberNegativePattern),h=g[0],e=g[1];if(h===""&&a.NumberNegativePattern!==1){g=Number._parseNumberNegativePattern(b,a,1);h=g[0];e=g[1]}if(h==="")h="+";var j,d,f=e.indexOf("e");if(f<0)f=e.indexOf("E");if(f<0){d=e;j=null}else{d=e.substr(0,f);j=e.substr(f+1)}var c,k,m=d.indexOf(a.NumberDecimalSeparator);if(m<0){c=d;k=null}else{c=d.substr(0,m);k=d.substr(m+a.NumberDecimalSeparator.length)}c=c.split(a.NumberGroupSeparator).join("");var n=a.NumberGroupSeparator.replace(/\u00A0/g," ");if(a.NumberGroupSeparator!==n)c=c.split(n).join("");var l=h+c;if(k!==null)l+="."+k;if(j!==null){var i=Number._parseNumberNegativePattern(j,a,1);if(i[0]==="")i[0]="+";l+="e"+i[0]+i[1]}if(l.match(/^[+-]?\d*\.?\d*(e[+-]?\d+)?$/))return parseFloat(l);return Number.NaN};Number._parseNumberNegativePattern=function(a,d,e){var b=d.NegativeSign,c=d.PositiveSign;switch(e){case 4:b=" "+b;c=" "+c;case 3:if(a.endsWith(b))return ["-",a.substr(0,a.length-b.length)];else if(a.endsWith(c))return ["+",a.substr(0,a.length-c.length)];break;case 2:b+=" ";c+=" ";case 1:if(a.startsWith(b))return ["-",a.substr(b.length)];else if(a.startsWith(c))return ["+",a.substr(c.length)];break;case 0:if(a.startsWith("(")&&a.endsWith(")"))return ["-",a.substr(1,a.length-2)]}return ["",a]};Number.prototype.format=function(a){return this._toFormattedString(a,Sys.CultureInfo.InvariantCulture)};Number.prototype.localeFormat=function(a){return this._toFormattedString(a,Sys.CultureInfo.CurrentCulture)};Number.prototype._toFormattedString=function(d,j){if(!d||d.length===0||d==="i")if(j&&j.name.length>0)return this.toLocaleString();else return this.toString();var o=["n %","n%","%n"],n=["-n %","-n%","-%n"],p=["(n)","-n","- n","n-","n -"],m=["$n","n$","$ n","n $"],l=["($n)","-$n","$-n","$n-","(n$)","-n$","n-$","n$-","-n $","-$ n","n $-","$ n-","$ -n","n- $","($ n)","(n $)"];function g(a,c,d){for(var b=a.length;b<c;b++)a=d?"0"+a:a+"0";return a}function i(j,i,l,n,p){var h=l[0],k=1,o=Math.pow(10,i),m=Math.round(j*o)/o;if(!isFinite(m))m=j;j=m;var b=j.toString(),a="",c,e=b.split(/e/i);b=e[0];c=e.length>1?parseInt(e[1]):0;e=b.split(".");b=e[0];a=e.length>1?e[1]:"";var q;if(c>0){a=g(a,c,false);b+=a.slice(0,c);a=a.substr(c)}else if(c<0){c=-c;b=g(b,c+1,true);a=b.slice(-c,b.length)+a;b=b.slice(0,-c)}if(i>0){if(a.length>i)a=a.slice(0,i);else a=g(a,i,false);a=p+a}else a="";var d=b.length-1,f="";while(d>=0){if(h===0||h>d)if(f.length>0)return b.slice(0,d+1)+n+f+a;else return b.slice(0,d+1)+a;if(f.length>0)f=b.slice(d-h+1,d+1)+n+f;else f=b.slice(d-h+1,d+1);d-=h;if(k<l.length){h=l[k];k++}}return b.slice(0,d+1)+n+f+a}var a=j.numberFormat,e=Math.abs(this);if(!d)d="D";var b=-1;if(d.length>1)b=parseInt(d.slice(1),10);var c;switch(d.charAt(0)){case "d":case "D":c="n";if(b!==-1)e=g(""+e,b,true);if(this<0)e=-e;break;case "c":case "C":if(this<0)c=l[a.CurrencyNegativePattern];else c=m[a.CurrencyPositivePattern];if(b===-1)b=a.CurrencyDecimalDigits;e=i(Math.abs(this),b,a.CurrencyGroupSizes,a.CurrencyGroupSeparator,a.CurrencyDecimalSeparator);break;case "n":case "N":if(this<0)c=p[a.NumberNegativePattern];else c="n";if(b===-1)b=a.NumberDecimalDigits;e=i(Math.abs(this),b,a.NumberGroupSizes,a.NumberGroupSeparator,a.NumberDecimalSeparator);break;case "p":case "P":if(this<0)c=n[a.PercentNegativePattern];else c=o[a.PercentPositivePattern];if(b===-1)b=a.PercentDecimalDigits;e=i(Math.abs(this)*100,b,a.PercentGroupSizes,a.PercentGroupSeparator,a.PercentDecimalSeparator);break;default:throw Error.format(Sys.Res.formatBadFormatSpecifier)}var k=/n|\$|-|%/g,f="";for(;true;){var q=k.lastIndex,h=k.exec(c);f+=c.slice(q,h?h.index:c.length);if(!h)break;switch(h[0]){case "n":f+=e;break;case "$":f+=a.CurrencySymbol;break;case "-":f+=a.NegativeSign;break;case "%":f+=a.PercentSymbol}}return f};RegExp.__typeName="RegExp";RegExp.__class=true;Array.__typeName="Array";Array.__class=true;Array.add=Array.enqueue=function(a,b){a[a.length]=b};Array.addRange=function(a,b){a.push.apply(a,b)};Array.clear=function(a){a.length=0};Array.clone=function(a){if(a.length===1)return [a[0]];else return Array.apply(null,a)};Array.contains=function(a,b){return Array.indexOf(a,b)>=0};Array.dequeue=function(a){return a.shift()};Array.forEach=function(b,e,d){for(var a=0,f=b.length;a<f;a++){var c=b[a];if(typeof c!=="undefined")e.call(d,c,a,b)}};Array.indexOf=function(d,e,a){if(typeof e==="undefined")return -1;var c=d.length;if(c!==0){a=a-0;if(isNaN(a))a=0;else{if(isFinite(a))a=a-a%1;if(a<0)a=Math.max(0,c+a)}for(var b=a;b<c;b++)if(typeof d[b]!=="undefined"&&d[b]===e)return b}return -1};Array.insert=function(a,b,c){a.splice(b,0,c)};Array.parse=function(value){if(!value)return [];return eval(value)};Array.remove=function(b,c){var a=Array.indexOf(b,c);if(a>=0)b.splice(a,1);return a>=0};Array.removeAt=function(a,b){a.splice(b,1)};if(!window)this.window=this;window.Type=Function;Type.prototype.callBaseMethod=function(a,d,b){var c=this.getBaseMethod(a,d);if(!b)return c.apply(a);else return c.apply(a,b)};Type.prototype.getBaseMethod=function(d,c){var b=this.getBaseType();if(b){var a=b.prototype[c];return a instanceof Function?a:null}return null};Type.prototype.getBaseType=function(){return typeof this.__baseType==="undefined"?null:this.__baseType};Type.prototype.getInterfaces=function(){var a=[],b=this;while(b){var c=b.__interfaces;if(c)for(var d=0,f=c.length;d<f;d++){var e=c[d];if(!Array.contains(a,e))a[a.length]=e}b=b.__baseType}return a};Type.prototype.getName=function(){return typeof this.__typeName==="undefined"?"":this.__typeName};Type.prototype.implementsInterface=function(d){this.resolveInheritance();var c=d.getName(),a=this.__interfaceCache;if(a){var e=a[c];if(typeof e!=="undefined")return e}else a=this.__interfaceCache={};var b=this;while(b){var f=b.__interfaces;if(f)if(Array.indexOf(f,d)!==-1)return a[c]=true;b=b.__baseType}return a[c]=false};Type.prototype.inheritsFrom=function(b){this.resolveInheritance();var a=this.__baseType;while(a){if(a===b)return true;a=a.__baseType}return false};Type.prototype.initializeBase=function(a,b){this.resolveInheritance();if(this.__baseType)if(!b)this.__baseType.apply(a);else this.__baseType.apply(a,b);return a};Type.prototype.isImplementedBy=function(a){if(typeof a==="undefined"||a===null)return false;var b=Object.getType(a);return !!(b.implementsInterface&&b.implementsInterface(this))};Type.prototype.isInstanceOfType=function(b){if(typeof b==="undefined"||b===null)return false;if(b instanceof this)return true;var a=Object.getType(b);return !!(a===this)||a.inheritsFrom&&a.inheritsFrom(this)||a.implementsInterface&&a.implementsInterface(this)};Type.prototype.registerClass=function(c,b,d){this.prototype.constructor=this;this.__typeName=c;this.__class=true;if(b){this.__baseType=b;this.__basePrototypePending=true}Sys.__upperCaseTypes[c.toUpperCase()]=this;if(d){this.__interfaces=[];for(var a=2,f=arguments.length;a<f;a++){var e=arguments[a];this.__interfaces.push(e)}}return this};Type.prototype.registerInterface=function(a){Sys.__upperCaseTypes[a.toUpperCase()]=this;this.prototype.constructor=this;this.__typeName=a;this.__interface=true;return this};Type.prototype.resolveInheritance=function(){if(this.__basePrototypePending){var b=this.__baseType;b.resolveInheritance();for(var a in b.prototype){var c=b.prototype[a];if(!this.prototype[a])this.prototype[a]=c}delete this.__basePrototypePending}};Type.getRootNamespaces=function(){return Array.clone(Sys.__rootNamespaces)};Type.isClass=function(a){if(typeof a==="undefined"||a===null)return false;return !!a.__class};Type.isInterface=function(a){if(typeof a==="undefined"||a===null)return false;return !!a.__interface};Type.isNamespace=function(a){if(typeof a==="undefined"||a===null)return false;return !!a.__namespace};Type.parse=function(typeName,ns){var fn;if(ns){fn=Sys.__upperCaseTypes[ns.getName().toUpperCase()+"."+typeName.toUpperCase()];return fn||null}if(!typeName)return null;if(!Type.__htClasses)Type.__htClasses={};fn=Type.__htClasses[typeName];if(!fn){fn=eval(typeName);Type.__htClasses[typeName]=fn}return fn};Type.registerNamespace=function(f){var d=window,c=f.split(".");for(var b=0;b<c.length;b++){var e=c[b],a=d[e];if(!a){a=d[e]={__namespace:true,__typeName:c.slice(0,b+1).join(".")};if(b===0)Sys.__rootNamespaces[Sys.__rootNamespaces.length]=a;a.getName=function(){return this.__typeName}}d=a}};window.Sys={__namespace:true,__typeName:"Sys",getName:function(){return "Sys"},__upperCaseTypes:{}};Sys.__rootNamespaces=[Sys];Sys.IDisposable=function(){};Sys.IDisposable.prototype={};Sys.IDisposable.registerInterface("Sys.IDisposable");Sys.StringBuilder=function(a){this._parts=typeof a!=="undefined"&&a!==null&&a!==""?[a.toString()]:[];this._value={};this._len=0};Sys.StringBuilder.prototype={append:function(a){this._parts[this._parts.length]=a},appendLine:function(a){this._parts[this._parts.length]=typeof a==="undefined"||a===null||a===""?"\r\n":a+"\r\n"},clear:function(){this._parts=[];this._value={};this._len=0},isEmpty:function(){if(this._parts.length===0)return true;return this.toString()===""},toString:function(a){a=a||"";var b=this._parts;if(this._len!==b.length){this._value={};this._len=b.length}var d=this._value;if(typeof d[a]==="undefined"){if(a!=="")for(var c=0;c<b.length;)if(typeof b[c]==="undefined"||b[c]===""||b[c]===null)b.splice(c,1);else c++;d[a]=this._parts.join(a)}return d[a]}};Sys.StringBuilder.registerClass("Sys.StringBuilder");if(!window.XMLHttpRequest)window.XMLHttpRequest=function(){var b=["Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP"];for(var a=0,c=b.length;a<c;a++)try{return new ActiveXObject(b[a])}catch(d){}return null};Sys.Browser={};Sys.Browser.InternetExplorer={};Sys.Browser.Firefox={};Sys.Browser.Safari={};Sys.Browser.Opera={};Sys.Browser.agent=null;Sys.Browser.hasDebuggerStatement=false;Sys.Browser.name=navigator.appName;Sys.Browser.version=parseFloat(navigator.appVersion);Sys.Browser.documentMode=0;if(navigator.userAgent.indexOf(" MSIE ")>-1){Sys.Browser.agent=Sys.Browser.InternetExplorer;Sys.Browser.version=parseFloat(navigator.userAgent.match(/MSIE (\d+\.\d+)/)[1]);if(Sys.Browser.version>=8)if(document.documentMode>=7)Sys.Browser.documentMode=document.documentMode;Sys.Browser.hasDebuggerStatement=true}else if(navigator.userAgent.indexOf(" Firefox/")>-1){Sys.Browser.agent=Sys.Browser.Firefox;Sys.Browser.version=parseFloat(navigator.userAgent.match(/Firefox\/(\d+\.\d+)/)[1]);Sys.Browser.name="Firefox";Sys.Browser.hasDebuggerStatement=true}else if(navigator.userAgent.indexOf(" AppleWebKit/")>-1){Sys.Browser.agent=Sys.Browser.Safari;Sys.Browser.version=parseFloat(navigator.userAgent.match(/AppleWebKit\/(\d+(\.\d+)?)/)[1]);Sys.Browser.name="Safari"}else if(navigator.userAgent.indexOf("Opera/")>-1)Sys.Browser.agent=Sys.Browser.Opera;Type.registerNamespace("Sys.UI");Sys._Debug=function(){};Sys._Debug.prototype={_appendConsole:function(a){if(typeof Debug!=="undefined"&&Debug.writeln)Debug.writeln(a);if(window.console&&window.console.log)window.console.log(a);if(window.opera)window.opera.postError(a);if(window.debugService)window.debugService.trace(a)},_appendTrace:function(b){var a=document.getElementById("TraceConsole");if(a&&a.tagName.toUpperCase()==="TEXTAREA")a.value+=b+"\n"},assert:function(c,a,b){if(!c){a=b&&this.assert.caller?String.format(Sys.Res.assertFailedCaller,a,this.assert.caller):String.format(Sys.Res.assertFailed,a);if(confirm(String.format(Sys.Res.breakIntoDebugger,a)))this.fail(a)}},clearTrace:function(){var a=document.getElementById("TraceConsole");if(a&&a.tagName.toUpperCase()==="TEXTAREA")a.value=""},fail:function(message){this._appendConsole(message);if(Sys.Browser.hasDebuggerStatement)eval("debugger")},trace:function(a){this._appendConsole(a);this._appendTrace(a)},traceDump:function(a,b){var c=this._traceDump(a,b,true)},_traceDump:function(a,c,f,b,d){c=c?c:"traceDump";b=b?b:"";if(a===null){this.trace(b+c+": null");return}switch(typeof a){case "undefined":this.trace(b+c+": Undefined");break;case "number":case "string":case "boolean":this.trace(b+c+": "+a);break;default:if(Date.isInstanceOfType(a)||RegExp.isInstanceOfType(a)){this.trace(b+c+": "+a.toString());break}if(!d)d=[];else if(Array.contains(d,a)){this.trace(b+c+": ...");return}Array.add(d,a);if(a==window||a===document||window.HTMLElement&&a instanceof HTMLElement||typeof a.nodeName==="string"){var k=a.tagName?a.tagName:"DomElement";if(a.id)k+=" - "+a.id;this.trace(b+c+" {"+k+"}")}else{var i=Object.getTypeName(a);this.trace(b+c+(typeof i==="string"?" {"+i+"}":""));if(b===""||f){b+="    ";var e,j,l,g,h;if(Array.isInstanceOfType(a)){j=a.length;for(e=0;e<j;e++)this._traceDump(a[e],"["+e+"]",f,b,d)}else for(g in a){h=a[g];if(!Function.isInstanceOfType(h))this._traceDump(h,g,f,b,d)}}}Array.remove(d,a)}}};Sys._Debug.registerClass("Sys._Debug");Sys.Debug=new Sys._Debug;Sys.Debug.isDebug=false;function Sys$Enum$parse(c,e){var a,b,i;if(e){a=this.__lowerCaseValues;if(!a){this.__lowerCaseValues=a={};var g=this.prototype;for(var f in g)a[f.toLowerCase()]=g[f]}}else a=this.prototype;if(!this.__flags){i=e?c.toLowerCase():c;b=a[i.trim()];if(typeof b!=="number")throw Error.argument("value",String.format(Sys.Res.enumInvalidValue,c,this.__typeName));return b}else{var h=(e?c.toLowerCase():c).split(","),j=0;for(var d=h.length-1;d>=0;d--){var k=h[d].trim();b=a[k];if(typeof b!=="number")throw Error.argument("value",String.format(Sys.Res.enumInvalidValue,c.split(",")[d].trim(),this.__typeName));j|=b}return j}}function Sys$Enum$toString(c){if(typeof c==="undefined"||c===null)return this.__string;var d=this.prototype,a;if(!this.__flags||c===0){for(a in d)if(d[a]===c)return a}else{var b=this.__sortedValues;if(!b){b=[];for(a in d)b[b.length]={key:a,value:d[a]};b.sort(function(a,b){return a.value-b.value});this.__sortedValues=b}var e=[],g=c;for(a=b.length-1;a>=0;a--){var h=b[a],f=h.value;if(f===0)continue;if((f&c)===f){e[e.length]=h.key;g-=f;if(g===0)break}}if(e.length&&g===0)return e.reverse().join(", ")}return ""}Type.prototype.registerEnum=function(b,c){Sys.__upperCaseTypes[b.toUpperCase()]=this;for(var a in this.prototype)this[a]=this.prototype[a];this.__typeName=b;this.parse=Sys$Enum$parse;this.__string=this.toString();this.toString=Sys$Enum$toString;this.__flags=c;this.__enum=true};Type.isEnum=function(a){if(typeof a==="undefined"||a===null)return false;return !!a.__enum};Type.isFlags=function(a){if(typeof a==="undefined"||a===null)return false;return !!a.__flags};Sys.EventHandlerList=function(){this._list={}};Sys.EventHandlerList.prototype={addHandler:function(b,a){Array.add(this._getEvent(b,true),a)},removeHandler:function(c,b){var a=this._getEvent(c);if(!a)return;Array.remove(a,b)},getHandler:function(b){var a=this._getEvent(b);if(!a||a.length===0)return null;a=Array.clone(a);return function(c,d){for(var b=0,e=a.length;b<e;b++)a[b](c,d)}},_getEvent:function(a,b){if(!this._list[a]){if(!b)return null;this._list[a]=[]}return this._list[a]}};Sys.EventHandlerList.registerClass("Sys.EventHandlerList");Sys.EventArgs=function(){};Sys.EventArgs.registerClass("Sys.EventArgs");Sys.EventArgs.Empty=new Sys.EventArgs;Sys.CancelEventArgs=function(){Sys.CancelEventArgs.initializeBase(this);this._cancel=false};Sys.CancelEventArgs.prototype={get_cancel:function(){return this._cancel},set_cancel:function(a){this._cancel=a}};Sys.CancelEventArgs.registerClass("Sys.CancelEventArgs",Sys.EventArgs);Sys.INotifyPropertyChange=function(){};Sys.INotifyPropertyChange.prototype={};Sys.INotifyPropertyChange.registerInterface("Sys.INotifyPropertyChange");Sys.PropertyChangedEventArgs=function(a){Sys.PropertyChangedEventArgs.initializeBase(this);this._propertyName=a};Sys.PropertyChangedEventArgs.prototype={get_propertyName:function(){return this._propertyName}};Sys.PropertyChangedEventArgs.registerClass("Sys.PropertyChangedEventArgs",Sys.EventArgs);Sys.INotifyDisposing=function(){};Sys.INotifyDisposing.prototype={};Sys.INotifyDisposing.registerInterface("Sys.INotifyDisposing");Sys.Component=function(){if(Sys.Application)Sys.Application.registerDisposableObject(this)};Sys.Component.prototype={_id:null,_initialized:false,_updating:false,get_events:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_id:function(){return this._id},set_id:function(a){this._id=a},get_isInitialized:function(){return this._initialized},get_isUpdating:function(){return this._updating},add_disposing:function(a){this.get_events().addHandler("disposing",a)},remove_disposing:function(a){this.get_events().removeHandler("disposing",a)},add_propertyChanged:function(a){this.get_events().addHandler("propertyChanged",a)},remove_propertyChanged:function(a){this.get_events().removeHandler("propertyChanged",a)},beginUpdate:function(){this._updating=true},dispose:function(){if(this._events){var a=this._events.getHandler("disposing");if(a)a(this,Sys.EventArgs.Empty)}delete this._events;Sys.Application.unregisterDisposableObject(this);Sys.Application.removeComponent(this)},endUpdate:function(){this._updating=false;if(!this._initialized)this.initialize();this.updated()},initialize:function(){this._initialized=true},raisePropertyChanged:function(b){if(!this._events)return;var a=this._events.getHandler("propertyChanged");if(a)a(this,new Sys.PropertyChangedEventArgs(b))},updated:function(){}};Sys.Component.registerClass("Sys.Component",null,Sys.IDisposable,Sys.INotifyPropertyChange,Sys.INotifyDisposing);function Sys$Component$_setProperties(a,i){var d,j=Object.getType(a),e=j===Object||j===Sys.UI.DomElement,h=Sys.Component.isInstanceOfType(a)&&!a.get_isUpdating();if(h)a.beginUpdate();for(var c in i){var b=i[c],f=e?null:a["get_"+c];if(e||typeof f!=="function"){var k=a[c];if(!b||typeof b!=="object"||e&&!k)a[c]=b;else Sys$Component$_setProperties(k,b)}else{var l=a["set_"+c];if(typeof l==="function")l.apply(a,[b]);else if(b instanceof Array){d=f.apply(a);for(var g=0,m=d.length,n=b.length;g<n;g++,m++)d[m]=b[g]}else if(typeof b==="object"&&Object.getType(b)===Object){d=f.apply(a);Sys$Component$_setProperties(d,b)}}}if(h)a.endUpdate()}function Sys$Component$_setReferences(c,b){for(var a in b){var e=c["set_"+a],d=$find(b[a]);e.apply(c,[d])}}var $create=Sys.Component.create=function(h,f,d,c,g){var a=g?new h(g):new h,b=Sys.Application,i=b.get_isCreatingComponents();a.beginUpdate();if(f)Sys$Component$_setProperties(a,f);if(d)for(var e in d)a["add_"+e](d[e]);if(a.get_id())b.addComponent(a);if(i){b._createdComponents[b._createdComponents.length]=a;if(c)b._addComponentToSecondPass(a,c);else a.endUpdate()}else{if(c)Sys$Component$_setReferences(a,c);a.endUpdate()}return a};Sys.UI.MouseButton=function(){throw Error.notImplemented()};Sys.UI.MouseButton.prototype={leftButton:0,middleButton:1,rightButton:2};Sys.UI.MouseButton.registerEnum("Sys.UI.MouseButton");Sys.UI.Key=function(){throw Error.notImplemented()};Sys.UI.Key.prototype={backspace:8,tab:9,enter:13,esc:27,space:32,pageUp:33,pageDown:34,end:35,home:36,left:37,up:38,right:39,down:40,del:127};Sys.UI.Key.registerEnum("Sys.UI.Key");Sys.UI.Point=function(a,b){this.x=a;this.y=b};Sys.UI.Point.registerClass("Sys.UI.Point");Sys.UI.Bounds=function(c,d,b,a){this.x=c;this.y=d;this.height=a;this.width=b};Sys.UI.Bounds.registerClass("Sys.UI.Bounds");Sys.UI.DomEvent=function(e){var a=e,b=this.type=a.type.toLowerCase();this.rawEvent=a;this.altKey=a.altKey;if(typeof a.button!=="undefined")this.button=typeof a.which!=="undefined"?a.button:a.button===4?Sys.UI.MouseButton.middleButton:a.button===2?Sys.UI.MouseButton.rightButton:Sys.UI.MouseButton.leftButton;if(b==="keypress")this.charCode=a.charCode||a.keyCode;else if(a.keyCode&&a.keyCode===46)this.keyCode=127;else this.keyCode=a.keyCode;this.clientX=a.clientX;this.clientY=a.clientY;this.ctrlKey=a.ctrlKey;this.target=a.target?a.target:a.srcElement;if(!b.startsWith("key"))if(typeof a.offsetX!=="undefined"&&typeof a.offsetY!=="undefined"){this.offsetX=a.offsetX;this.offsetY=a.offsetY}else if(this.target&&this.target.nodeType!==3&&typeof a.clientX==="number"){var c=Sys.UI.DomElement.getLocation(this.target),d=Sys.UI.DomElement._getWindow(this.target);this.offsetX=(d.pageXOffset||0)+a.clientX-c.x;this.offsetY=(d.pageYOffset||0)+a.clientY-c.y}this.screenX=a.screenX;this.screenY=a.screenY;this.shiftKey=a.shiftKey};Sys.UI.DomEvent.prototype={preventDefault:function(){if(this.rawEvent.preventDefault)this.rawEvent.preventDefault();else if(window.event)this.rawEvent.returnValue=false},stopPropagation:function(){if(this.rawEvent.stopPropagation)this.rawEvent.stopPropagation();else if(window.event)this.rawEvent.cancelBubble=true}};Sys.UI.DomEvent.registerClass("Sys.UI.DomEvent");var $addHandler=Sys.UI.DomEvent.addHandler=function(a,d,e){if(!a._events)a._events={};var c=a._events[d];if(!c)a._events[d]=c=[];var b;if(a.addEventListener){b=function(b){return e.call(a,new Sys.UI.DomEvent(b))};a.addEventListener(d,b,false)}else if(a.attachEvent){b=function(){var b={};try{b=Sys.UI.DomElement._getWindow(a).event}catch(c){}return e.call(a,new Sys.UI.DomEvent(b))};a.attachEvent("on"+d,b)}c[c.length]={handler:e,browserHandler:b}},$addHandlers=Sys.UI.DomEvent.addHandlers=function(e,d,c){for(var b in d){var a=d[b];if(c)a=Function.createDelegate(c,a);$addHandler(e,b,a)}},$clearHandlers=Sys.UI.DomEvent.clearHandlers=function(a){if(a._events){var e=a._events;for(var b in e){var d=e[b];for(var c=d.length-1;c>=0;c--)$removeHandler(a,b,d[c].handler)}a._events=null}},$removeHandler=Sys.UI.DomEvent.removeHandler=function(a,e,f){var d=null,c=a._events[e];for(var b=0,g=c.length;b<g;b++)if(c[b].handler===f){d=c[b].browserHandler;break}if(a.removeEventListener)a.removeEventListener(e,d,false);else if(a.detachEvent)a.detachEvent("on"+e,d);c.splice(b,1)};Sys.UI.DomElement=function(){};Sys.UI.DomElement.registerClass("Sys.UI.DomElement");Sys.UI.DomElement.addCssClass=function(a,b){if(!Sys.UI.DomElement.containsCssClass(a,b))if(a.className==="")a.className=b;else a.className+=" "+b};Sys.UI.DomElement.containsCssClass=function(b,a){return Array.contains(b.className.split(" "),a)};Sys.UI.DomElement.getBounds=function(a){var b=Sys.UI.DomElement.getLocation(a);return new Sys.UI.Bounds(b.x,b.y,a.offsetWidth||0,a.offsetHeight||0)};var $get=Sys.UI.DomElement.getElementById=function(f,e){if(!e)return document.getElementById(f);if(e.getElementById)return e.getElementById(f);var c=[],d=e.childNodes;for(var b=0;b<d.length;b++){var a=d[b];if(a.nodeType==1)c[c.length]=a}while(c.length){a=c.shift();if(a.id==f)return a;d=a.childNodes;for(b=0;b<d.length;b++){a=d[b];if(a.nodeType==1)c[c.length]=a}}return null};switch(Sys.Browser.agent){case Sys.Browser.InternetExplorer:Sys.UI.DomElement.getLocation=function(a){if(a.self||a.nodeType===9)return new Sys.UI.Point(0,0);var b=a.getBoundingClientRect();if(!b)return new Sys.UI.Point(0,0);var d=a.ownerDocument.documentElement,e=b.left-2+d.scrollLeft,f=b.top-2+d.scrollTop;try{var c=a.ownerDocument.parentWindow.frameElement||null;if(c){var g=c.frameBorder==="0"||c.frameBorder==="no"?2:0;e+=g;f+=g}}catch(h){}return new Sys.UI.Point(e,f)};break;case Sys.Browser.Safari:Sys.UI.DomElement.getLocation=function(c){if(c.window&&c.window===c||c.nodeType===9)return new Sys.UI.Point(0,0);var f=0,g=0,j=null,e=null,b;for(var a=c;a;j=a,(e=b,a=a.offsetParent)){b=Sys.UI.DomElement._getCurrentStyle(a);var d=a.tagName?a.tagName.toUpperCase():null;if((a.offsetLeft||a.offsetTop)&&(d!=="BODY"||(!e||e.position!=="absolute"))){f+=a.offsetLeft;g+=a.offsetTop}}b=Sys.UI.DomElement._getCurrentStyle(c);var h=b?b.position:null;if(!h||h!=="absolute")for(var a=c.parentNode;a;a=a.parentNode){d=a.tagName?a.tagName.toUpperCase():null;if(d!=="BODY"&&d!=="HTML"&&(a.scrollLeft||a.scrollTop)){f-=a.scrollLeft||0;g-=a.scrollTop||0}b=Sys.UI.DomElement._getCurrentStyle(a);var i=b?b.position:null;if(i&&i==="absolute")break}return new Sys.UI.Point(f,g)};break;case Sys.Browser.Opera:Sys.UI.DomElement.getLocation=function(b){if(b.window&&b.window===b||b.nodeType===9)return new Sys.UI.Point(0,0);var d=0,e=0,i=null;for(var a=b;a;i=a,a=a.offsetParent){var f=a.tagName;d+=a.offsetLeft||0;e+=a.offsetTop||0}var g=b.style.position,c=g&&g!=="static";for(var a=b.parentNode;a;a=a.parentNode){f=a.tagName?a.tagName.toUpperCase():null;if(f!=="BODY"&&f!=="HTML"&&(a.scrollLeft||a.scrollTop)&&(c&&(a.style.overflow==="scroll"||a.style.overflow==="auto"))){d-=a.scrollLeft||0;e-=a.scrollTop||0}var h=a&&a.style?a.style.position:null;c=c||h&&h!=="static"}return new Sys.UI.Point(d,e)};break;default:Sys.UI.DomElement.getLocation=function(d){if(d.window&&d.window===d||d.nodeType===9)return new Sys.UI.Point(0,0);var e=0,f=0,i=null,g=null,b=null;for(var a=d;a;i=a,(g=b,a=a.offsetParent)){var c=a.tagName?a.tagName.toUpperCase():null;b=Sys.UI.DomElement._getCurrentStyle(a);if((a.offsetLeft||a.offsetTop)&&!(c==="BODY"&&(!g||g.position!=="absolute"))){e+=a.offsetLeft;f+=a.offsetTop}if(i!==null&&b){if(c!=="TABLE"&&c!=="TD"&&c!=="HTML"){e+=parseInt(b.borderLeftWidth)||0;f+=parseInt(b.borderTopWidth)||0}if(c==="TABLE"&&(b.position==="relative"||b.position==="absolute")){e+=parseInt(b.marginLeft)||0;f+=parseInt(b.marginTop)||0}}}b=Sys.UI.DomElement._getCurrentStyle(d);var h=b?b.position:null;if(!h||h!=="absolute")for(var a=d.parentNode;a;a=a.parentNode){c=a.tagName?a.tagName.toUpperCase():null;if(c!=="BODY"&&c!=="HTML"&&(a.scrollLeft||a.scrollTop)){e-=a.scrollLeft||0;f-=a.scrollTop||0;b=Sys.UI.DomElement._getCurrentStyle(a);if(b){e+=parseInt(b.borderLeftWidth)||0;f+=parseInt(b.borderTopWidth)||0}}}return new Sys.UI.Point(e,f)}}Sys.UI.DomElement.removeCssClass=function(d,c){var a=" "+d.className+" ",b=a.indexOf(" "+c+" ");if(b>=0)d.className=(a.substr(0,b)+" "+a.substring(b+c.length+1,a.length)).trim()};Sys.UI.DomElement.setLocation=function(b,c,d){var a=b.style;a.position="absolute";a.left=c+"px";a.top=d+"px"};Sys.UI.DomElement.toggleCssClass=function(b,a){if(Sys.UI.DomElement.containsCssClass(b,a))Sys.UI.DomElement.removeCssClass(b,a);else Sys.UI.DomElement.addCssClass(b,a)};Sys.UI.DomElement.getVisibilityMode=function(a){return a._visibilityMode===Sys.UI.VisibilityMode.hide?Sys.UI.VisibilityMode.hide:Sys.UI.VisibilityMode.collapse};Sys.UI.DomElement.setVisibilityMode=function(a,b){Sys.UI.DomElement._ensureOldDisplayMode(a);if(a._visibilityMode!==b){a._visibilityMode=b;if(Sys.UI.DomElement.getVisible(a)===false)if(a._visibilityMode===Sys.UI.VisibilityMode.hide)a.style.display=a._oldDisplayMode;else a.style.display="none";a._visibilityMode=b}};Sys.UI.DomElement.getVisible=function(b){var a=b.currentStyle||Sys.UI.DomElement._getCurrentStyle(b);if(!a)return true;return a.visibility!=="hidden"&&a.display!=="none"};Sys.UI.DomElement.setVisible=function(a,b){if(b!==Sys.UI.DomElement.getVisible(a)){Sys.UI.DomElement._ensureOldDisplayMode(a);a.style.visibility=b?"visible":"hidden";if(b||a._visibilityMode===Sys.UI.VisibilityMode.hide)a.style.display=a._oldDisplayMode;else a.style.display="none"}};Sys.UI.DomElement._ensureOldDisplayMode=function(a){if(!a._oldDisplayMode){var b=a.currentStyle||Sys.UI.DomElement._getCurrentStyle(a);a._oldDisplayMode=b?b.display:null;if(!a._oldDisplayMode||a._oldDisplayMode==="none")switch(a.tagName.toUpperCase()){case "DIV":case "P":case "ADDRESS":case "BLOCKQUOTE":case "BODY":case "COL":case "COLGROUP":case "DD":case "DL":case "DT":case "FIELDSET":case "FORM":case "H1":case "H2":case "H3":case "H4":case "H5":case "H6":case "HR":case "IFRAME":case "LEGEND":case "OL":case "PRE":case "TABLE":case "TD":case "TH":case "TR":case "UL":a._oldDisplayMode="block";break;case "LI":a._oldDisplayMode="list-item";break;default:a._oldDisplayMode="inline"}}};Sys.UI.DomElement._getWindow=function(a){var b=a.ownerDocument||a.document||a;return b.defaultView||b.parentWindow};Sys.UI.DomElement._getCurrentStyle=function(a){if(a.nodeType===3)return null;var c=Sys.UI.DomElement._getWindow(a);if(a.documentElement)a=a.documentElement;var b=c&&a!==c&&c.getComputedStyle?c.getComputedStyle(a,null):a.currentStyle||a.style;if(!b&&Sys.Browser.agent===Sys.Browser.Safari&&a.style){var g=a.style.display,f=a.style.position;a.style.position="absolute";a.style.display="block";var e=c.getComputedStyle(a,null);a.style.display=g;a.style.position=f;b={};for(var d in e)b[d]=e[d];b.display="none"}return b};Sys.IContainer=function(){};Sys.IContainer.prototype={};Sys.IContainer.registerInterface("Sys.IContainer");Sys._ScriptLoader=function(){this._scriptsToLoad=null;this._sessions=[];this._scriptLoadedDelegate=Function.createDelegate(this,this._scriptLoadedHandler)};Sys._ScriptLoader.prototype={dispose:function(){this._stopSession();this._loading=false;if(this._events)delete this._events;this._sessions=null;this._currentSession=null;this._scriptLoadedDelegate=null},loadScripts:function(d,b,c,a){var e={allScriptsLoadedCallback:b,scriptLoadFailedCallback:c,scriptLoadTimeoutCallback:a,scriptsToLoad:this._scriptsToLoad,scriptTimeout:d};this._scriptsToLoad=null;this._sessions[this._sessions.length]=e;if(!this._loading)this._nextSession()},notifyScriptLoaded:function(){if(!this._loading)return;this._currentTask._notified++;if(Sys.Browser.agent===Sys.Browser.Safari)if(this._currentTask._notified===1)window.setTimeout(Function.createDelegate(this,function(){this._scriptLoadedHandler(this._currentTask.get_scriptElement(),true)}),0)},queueCustomScriptTag:function(a){if(!this._scriptsToLoad)this._scriptsToLoad=[];Array.add(this._scriptsToLoad,a)},queueScriptBlock:function(a){if(!this._scriptsToLoad)this._scriptsToLoad=[];Array.add(this._scriptsToLoad,{text:a})},queueScriptReference:function(a){if(!this._scriptsToLoad)this._scriptsToLoad=[];Array.add(this._scriptsToLoad,{src:a})},_createScriptElement:function(c){var a=document.createElement("script");a.type="text/javascript";for(var b in c)a[b]=c[b];return a},_loadScriptsInternal:function(){var b=this._currentSession;if(b.scriptsToLoad&&b.scriptsToLoad.length>0){var c=Array.dequeue(b.scriptsToLoad),a=this._createScriptElement(c);if(a.text&&Sys.Browser.agent===Sys.Browser.Safari){a.innerHTML=a.text;delete a.text}if(typeof c.src==="string"){this._currentTask=new Sys._ScriptLoaderTask(a,this._scriptLoadedDelegate);this._currentTask.execute()}else{document.getElementsByTagName("head")[0].appendChild(a);Sys._ScriptLoader._clearScript(a);this._loadScriptsInternal()}}else{this._stopSession();var d=b.allScriptsLoadedCallback;if(d)d(this);this._nextSession()}},_nextSession:function(){if(this._sessions.length===0){this._loading=false;this._currentSession=null;return}this._loading=true;var a=Array.dequeue(this._sessions);this._currentSession=a;if(a.scriptTimeout>0)this._timeoutCookie=window.setTimeout(Function.createDelegate(this,this._scriptLoadTimeoutHandler),a.scriptTimeout*1000);this._loadScriptsInternal()},_raiseError:function(a){var c=this._currentSession.scriptLoadFailedCallback,b=this._currentTask.get_scriptElement();this._stopSession();if(c){c(this,b,a);this._nextSession()}else{this._loading=false;throw Sys._ScriptLoader._errorScriptLoadFailed(b.src,a)}},_scriptLoadedHandler:function(a,b){if(b&&this._currentTask._notified)if(this._currentTask._notified>1)this._raiseError(true);else{Array.add(Sys._ScriptLoader._getLoadedScripts(),a.src);this._currentTask.dispose();this._currentTask=null;this._loadScriptsInternal()}else this._raiseError(false)},_scriptLoadTimeoutHandler:function(){var a=this._currentSession.scriptLoadTimeoutCallback;this._stopSession();if(a)a(this);this._nextSession()},_stopSession:function(){if(this._timeoutCookie){window.clearTimeout(this._timeoutCookie);this._timeoutCookie=null}if(this._currentTask){this._currentTask.dispose();this._currentTask=null}}};Sys._ScriptLoader.registerClass("Sys._ScriptLoader",null,Sys.IDisposable);Sys._ScriptLoader.getInstance=function(){var a=Sys._ScriptLoader._activeInstance;if(!a)a=Sys._ScriptLoader._activeInstance=new Sys._ScriptLoader;return a};Sys._ScriptLoader.isScriptLoaded=function(b){var a=document.createElement("script");a.src=b;return Array.contains(Sys._ScriptLoader._getLoadedScripts(),a.src)};Sys._ScriptLoader.readLoadedScripts=function(){if(!Sys._ScriptLoader._referencedScripts){var b=Sys._ScriptLoader._referencedScripts=[],c=document.getElementsByTagName("script");for(i=c.length-1;i>=0;i--){var d=c[i],a=d.src;if(a.length)if(!Array.contains(b,a))Array.add(b,a)}}};Sys._ScriptLoader._clearScript=function(a){if(!Sys.Debug.isDebug)a.parentNode.removeChild(a)};Sys._ScriptLoader._errorScriptLoadFailed=function(b,d){var a;if(d)a=Sys.Res.scriptLoadMultipleCallbacks;else a=Sys.Res.scriptLoadFailed;var e="Sys.ScriptLoadFailedException: "+String.format(a,b),c=Error.create(e,{name:"Sys.ScriptLoadFailedException","scriptUrl":b});c.popStackFrame();return c};Sys._ScriptLoader._getLoadedScripts=function(){if(!Sys._ScriptLoader._referencedScripts){Sys._ScriptLoader._referencedScripts=[];Sys._ScriptLoader.readLoadedScripts()}return Sys._ScriptLoader._referencedScripts};Sys._ScriptLoaderTask=function(b,a){this._scriptElement=b;this._completedCallback=a;this._notified=0};Sys._ScriptLoaderTask.prototype={get_scriptElement:function(){return this._scriptElement},dispose:function(){if(this._disposed)return;this._disposed=true;this._removeScriptElementHandlers();Sys._ScriptLoader._clearScript(this._scriptElement);this._scriptElement=null},execute:function(){this._addScriptElementHandlers();document.getElementsByTagName("head")[0].appendChild(this._scriptElement)},_addScriptElementHandlers:function(){this._scriptLoadDelegate=Function.createDelegate(this,this._scriptLoadHandler);if(Sys.Browser.agent!==Sys.Browser.InternetExplorer){this._scriptElement.readyState="loaded";$addHandler(this._scriptElement,"load",this._scriptLoadDelegate)}else $addHandler(this._scriptElement,"readystatechange",this._scriptLoadDelegate);if(this._scriptElement.addEventListener){this._scriptErrorDelegate=Function.createDelegate(this,this._scriptErrorHandler);this._scriptElement.addEventListener("error",this._scriptErrorDelegate,false)}},_removeScriptElementHandlers:function(){if(this._scriptLoadDelegate){var a=this.get_scriptElement();if(Sys.Browser.agent!==Sys.Browser.InternetExplorer)$removeHandler(a,"load",this._scriptLoadDelegate);else $removeHandler(a,"readystatechange",this._scriptLoadDelegate);if(this._scriptErrorDelegate){this._scriptElement.removeEventListener("error",this._scriptErrorDelegate,false);this._scriptErrorDelegate=null}this._scriptLoadDelegate=null}},_scriptErrorHandler:function(){if(this._disposed)return;this._completedCallback(this.get_scriptElement(),false)},_scriptLoadHandler:function(){if(this._disposed)return;var a=this.get_scriptElement();if(a.readyState!=="loaded"&&a.readyState!=="complete")return;var b=this;window.setTimeout(function(){b._completedCallback(a,true)},0)}};Sys._ScriptLoaderTask.registerClass("Sys._ScriptLoaderTask",null,Sys.IDisposable);Sys.ApplicationLoadEventArgs=function(b,a){Sys.ApplicationLoadEventArgs.initializeBase(this);this._components=b;this._isPartialLoad=a};Sys.ApplicationLoadEventArgs.prototype={get_components:function(){return this._components},get_isPartialLoad:function(){return this._isPartialLoad}};Sys.ApplicationLoadEventArgs.registerClass("Sys.ApplicationLoadEventArgs",Sys.EventArgs);Sys.HistoryEventArgs=function(a){Sys.HistoryEventArgs.initializeBase(this);this._state=a};Sys.HistoryEventArgs.prototype={get_state:function(){return this._state}};Sys.HistoryEventArgs.registerClass("Sys.HistoryEventArgs",Sys.EventArgs);Sys._Application=function(){Sys._Application.initializeBase(this);this._disposableObjects=[];this._components={};this._createdComponents=[];this._secondPassComponents=[];this._appLoadHandler=null;this._beginRequestHandler=null;this._clientId=null;this._currentEntry="";this._endRequestHandler=null;this._history=null;this._enableHistory=false;this._historyFrame=null;this._historyInitialized=false;this._historyInitialLength=0;this._historyLength=0;this._historyPointIsNew=false;this._ignoreTimer=false;this._initialState=null;this._state={};this._timerCookie=0;this._timerHandler=null;this._uniqueId=null;this._unloadHandlerDelegate=Function.createDelegate(this,this._unloadHandler);this._loadHandlerDelegate=Function.createDelegate(this,this._loadHandler);Sys.UI.DomEvent.addHandler(window,"unload",this._unloadHandlerDelegate);Sys.UI.DomEvent.addHandler(window,"load",this._loadHandlerDelegate)};Sys._Application.prototype={_creatingComponents:false,_disposing:false,get_isCreatingComponents:function(){return this._creatingComponents},get_stateString:function(){var a=window.location.hash;if(this._isSafari2()){var b=this._getHistory();if(b)a=b[window.history.length-this._historyInitialLength]}if(a.length>0&&a.charAt(0)==="#")a=a.substring(1);if(Sys.Browser.agent===Sys.Browser.Firefox)a=this._serializeState(this._deserializeState(a,true));return a},get_enableHistory:function(){return this._enableHistory},set_enableHistory:function(a){this._enableHistory=a},add_init:function(a){if(this._initialized)a(this,Sys.EventArgs.Empty);else this.get_events().addHandler("init",a)},remove_init:function(a){this.get_events().removeHandler("init",a)},add_load:function(a){this.get_events().addHandler("load",a)},remove_load:function(a){this.get_events().removeHandler("load",a)},add_navigate:function(a){this.get_events().addHandler("navigate",a)},remove_navigate:function(a){this.get_events().removeHandler("navigate",a)},add_unload:function(a){this.get_events().addHandler("unload",a)},remove_unload:function(a){this.get_events().removeHandler("unload",a)},addComponent:function(a){this._components[a.get_id()]=a},addHistoryPoint:function(c,f){this._ensureHistory();var b=this._state;for(var a in c){var d=c[a];if(d===null){if(typeof b[a]!=="undefined")delete b[a]}else b[a]=d}var e=this._serializeState(b);this._historyPointIsNew=true;this._setState(e,f);this._raiseNavigate()},beginCreateComponents:function(){this._creatingComponents=true},dispose:function(){if(!this._disposing){this._disposing=true;if(this._timerCookie){window.clearTimeout(this._timerCookie);delete this._timerCookie}if(this._endRequestHandler){Sys.WebForms.PageRequestManager.getInstance().remove_endRequest(this._endRequestHandler);delete this._endRequestHandler}if(this._beginRequestHandler){Sys.WebForms.PageRequestManager.getInstance().remove_beginRequest(this._beginRequestHandler);delete this._beginRequestHandler}if(window.pageUnload)window.pageUnload(this,Sys.EventArgs.Empty);var c=this.get_events().getHandler("unload");if(c)c(this,Sys.EventArgs.Empty);var b=Array.clone(this._disposableObjects);for(var a=0,e=b.length;a<e;a++)b[a].dispose();Array.clear(this._disposableObjects);Sys.UI.DomEvent.removeHandler(window,"unload",this._unloadHandlerDelegate);if(this._loadHandlerDelegate){Sys.UI.DomEvent.removeHandler(window,"load",this._loadHandlerDelegate);this._loadHandlerDelegate=null}var d=Sys._ScriptLoader.getInstance();if(d)d.dispose();Sys._Application.callBaseMethod(this,"dispose")}},endCreateComponents:function(){var b=this._secondPassComponents;for(var a=0,d=b.length;a<d;a++){var c=b[a].component;Sys$Component$_setReferences(c,b[a].references);c.endUpdate()}this._secondPassComponents=[];this._creatingComponents=false},findComponent:function(b,a){return a?Sys.IContainer.isInstanceOfType(a)?a.findComponent(b):a[b]||null:Sys.Application._components[b]||null},getComponents:function(){var a=[],b=this._components;for(var c in b)a[a.length]=b[c];return a},initialize:function(){if(!this._initialized&&!this._initializing){this._initializing=true;window.setTimeout(Function.createDelegate(this,this._doInitialize),0)}},notifyScriptLoaded:function(){var a=Sys._ScriptLoader.getInstance();if(a)a.notifyScriptLoaded()},registerDisposableObject:function(a){if(!this._disposing)this._disposableObjects[this._disposableObjects.length]=a},raiseLoad:function(){var b=this.get_events().getHandler("load"),a=new Sys.ApplicationLoadEventArgs(Array.clone(this._createdComponents),!this._initializing);if(b)b(this,a);if(window.pageLoad)window.pageLoad(this,a);this._createdComponents=[]},removeComponent:function(b){var a=b.get_id();if(a)delete this._components[a]},setServerId:function(a,b){this._clientId=a;this._uniqueId=b},setServerState:function(a){this._ensureHistory();this._state.__s=a;this._updateHiddenField(a)},unregisterDisposableObject:function(a){if(!this._disposing)Array.remove(this._disposableObjects,a)},_addComponentToSecondPass:function(b,a){this._secondPassComponents[this._secondPassComponents.length]={component:b,references:a}},_deserializeState:function(a,i){var e={};a=a||"";var b=a.indexOf("&&");if(b!==-1&&b+2<a.length){e.__s=a.substr(b+2);a=a.substr(0,b)}var g=a.split("&");for(var f=0,k=g.length;f<k;f++){var d=g[f],c=d.indexOf("=");if(c!==-1&&c+1<d.length){var j=d.substr(0,c),h=d.substr(c+1);e[j]=i?h:decodeURIComponent(h)}}return e},_doInitialize:function(){Sys._Application.callBaseMethod(this,"initialize");var b=this.get_events().getHandler("init");if(b){this.beginCreateComponents();b(this,Sys.EventArgs.Empty);this.endCreateComponents()}if(Sys.WebForms){this._beginRequestHandler=Function.createDelegate(this,this._onPageRequestManagerBeginRequest);Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(this._beginRequestHandler);this._endRequestHandler=Function.createDelegate(this,this._onPageRequestManagerEndRequest);Sys.WebForms.PageRequestManager.getInstance().add_endRequest(this._endRequestHandler)}var a=this.get_stateString();if(a!==this._currentEntry)this._navigate(a);this.raiseLoad();this._initializing=false},_enableHistoryInScriptManager:function(){this._enableHistory=true},_ensureHistory:function(){if(!this._historyInitialized&&this._enableHistory){if(Sys.Browser.agent===Sys.Browser.InternetExplorer&&Sys.Browser.documentMode<8){this._historyFrame=document.getElementById("__historyFrame");this._ignoreIFrame=true}if(this._isSafari2()){var a=document.getElementById("__history");this._setHistory([window.location.hash]);this._historyInitialLength=window.history.length}this._timerHandler=Function.createDelegate(this,this._onIdle);this._timerCookie=window.setTimeout(this._timerHandler,100);try{this._initialState=this._deserializeState(this.get_stateString())}catch(b){}this._historyInitialized=true}},_getHistory:function(){var a=document.getElementById("__history");if(!a)return "";var b=a.value;return b?Sys.Serialization.JavaScriptSerializer.deserialize(b,true):""},_isSafari2:function(){return Sys.Browser.agent===Sys.Browser.Safari&&Sys.Browser.version<=419.3},_loadHandler:function(){if(this._loadHandlerDelegate){Sys.UI.DomEvent.removeHandler(window,"load",this._loadHandlerDelegate);this._loadHandlerDelegate=null}this.initialize()},_navigate:function(c){this._ensureHistory();var b=this._deserializeState(c);if(this._uniqueId){var d=this._state.__s||"",a=b.__s||"";if(a!==d){this._updateHiddenField(a);__doPostBack(this._uniqueId,a);this._state=b;return}}this._setState(c);this._state=b;this._raiseNavigate()},_onIdle:function(){delete this._timerCookie;var a=this.get_stateString();if(a!==this._currentEntry){if(!this._ignoreTimer){this._historyPointIsNew=false;this._navigate(a);this._historyLength=window.history.length}}else this._ignoreTimer=false;this._timerCookie=window.setTimeout(this._timerHandler,100)},_onIFrameLoad:function(a){this._ensureHistory();if(!this._ignoreIFrame){this._historyPointIsNew=false;this._navigate(a)}this._ignoreIFrame=false},_onPageRequestManagerBeginRequest:function(){this._ignoreTimer=true},_onPageRequestManagerEndRequest:function(e,d){var b=d.get_dataItems()[this._clientId],a=document.getElementById("__EVENTTARGET");if(a&&a.value===this._uniqueId)a.value="";if(typeof b!=="undefined"){this.setServerState(b);this._historyPointIsNew=true}else this._ignoreTimer=false;var c=this._serializeState(this._state);if(c!==this._currentEntry){this._ignoreTimer=true;this._setState(c);this._raiseNavigate()}},_raiseNavigate:function(){var c=this.get_events().getHandler("navigate"),b={};for(var a in this._state)if(a!=="__s")b[a]=this._state[a];var d=new Sys.HistoryEventArgs(b);if(c)c(this,d)},_serializeState:function(d){var b=[];for(var a in d){var e=d[a];if(a==="__s")var c=e;else b[b.length]=a+"="+encodeURIComponent(e)}return b.join("&")+(c?"&&"+c:"")},_setHistory:function(b){var a=document.getElementById("__history");if(a)a.value=Sys.Serialization.JavaScriptSerializer.serialize(b)},_setState:function(a,c){a=a||"";if(a!==this._currentEntry){if(window.theForm){var e=window.theForm.action,f=e.indexOf("#");window.theForm.action=(f!==-1?e.substring(0,f):e)+"#"+a}if(this._historyFrame&&this._historyPointIsNew){this._ignoreIFrame=true;this._historyPointIsNew=false;var d=this._historyFrame.contentWindow.document;d.open("javascript:'<html></html>'");d.write("<html><head><title>"+(c||document.title)+"</title><scri"+'pt type="text/javascript">parent.Sys.Application._onIFrameLoad(\''+a+"');</scri"+"pt></head><body></body></html>");d.close()}this._ignoreTimer=false;var h=this.get_stateString();this._currentEntry=a;if(a!==h){if(this._isSafari2()){var g=this._getHistory();g[window.history.length-this._historyInitialLength+1]=a;this._setHistory(g);this._historyLength=window.history.length+1;var b=document.createElement("form");b.method="get";b.action="#"+a;document.appendChild(b);b.submit();document.removeChild(b)}else window.location.hash=a;if(typeof c!=="undefined"&&c!==null)document.title=c}}},_unloadHandler:function(){this.dispose()},_updateHiddenField:function(b){if(this._clientId){var a=document.getElementById(this._clientId);if(a)a.value=b}}};Sys._Application.registerClass("Sys._Application",Sys.Component,Sys.IContainer);Sys.Application=new Sys._Application;var $find=Sys.Application.findComponent;Type.registerNamespace("Sys.Net");Sys.Net.WebRequestExecutor=function(){this._webRequest=null;this._resultObject=null};Sys.Net.WebRequestExecutor.prototype={get_webRequest:function(){return this._webRequest},_set_webRequest:function(a){this._webRequest=a},get_started:function(){throw Error.notImplemented()},get_responseAvailable:function(){throw Error.notImplemented()},get_timedOut:function(){throw Error.notImplemented()},get_aborted:function(){throw Error.notImplemented()},get_responseData:function(){throw Error.notImplemented()},get_statusCode:function(){throw Error.notImplemented()},get_statusText:function(){throw Error.notImplemented()},get_xml:function(){throw Error.notImplemented()},get_object:function(){if(!this._resultObject)this._resultObject=Sys.Serialization.JavaScriptSerializer.deserialize(this.get_responseData());return this._resultObject},executeRequest:function(){throw Error.notImplemented()},abort:function(){throw Error.notImplemented()},getResponseHeader:function(){throw Error.notImplemented()},getAllResponseHeaders:function(){throw Error.notImplemented()}};Sys.Net.WebRequestExecutor.registerClass("Sys.Net.WebRequestExecutor");Sys.Net.XMLDOM=function(d){if(!window.DOMParser){var c=["Msxml2.DOMDocument.3.0","Msxml2.DOMDocument"];for(var b=0,f=c.length;b<f;b++)try{var a=new ActiveXObject(c[b]);a.async=false;a.loadXML(d);a.setProperty("SelectionLanguage","XPath");return a}catch(g){}}else try{var e=new window.DOMParser;return e.parseFromString(d,"text/xml")}catch(g){}return null};Sys.Net.XMLHttpExecutor=function(){Sys.Net.XMLHttpExecutor.initializeBase(this);var a=this;this._xmlHttpRequest=null;this._webRequest=null;this._responseAvailable=false;this._timedOut=false;this._timer=null;this._aborted=false;this._started=false;this._onReadyStateChange=function(){if(a._xmlHttpRequest.readyState===4){try{if(typeof a._xmlHttpRequest.status==="undefined")return}catch(b){return}a._clearTimer();a._responseAvailable=true;try{a._webRequest.completed(Sys.EventArgs.Empty)}finally{if(a._xmlHttpRequest!=null){a._xmlHttpRequest.onreadystatechange=Function.emptyMethod;a._xmlHttpRequest=null}}}};this._clearTimer=function(){if(a._timer!=null){window.clearTimeout(a._timer);a._timer=null}};this._onTimeout=function(){if(!a._responseAvailable){a._clearTimer();a._timedOut=true;a._xmlHttpRequest.onreadystatechange=Function.emptyMethod;a._xmlHttpRequest.abort();a._webRequest.completed(Sys.EventArgs.Empty);a._xmlHttpRequest=null}}};Sys.Net.XMLHttpExecutor.prototype={get_timedOut:function(){return this._timedOut},get_started:function(){return this._started},get_responseAvailable:function(){return this._responseAvailable},get_aborted:function(){return this._aborted},executeRequest:function(){this._webRequest=this.get_webRequest();var c=this._webRequest.get_body(),a=this._webRequest.get_headers();this._xmlHttpRequest=new XMLHttpRequest;this._xmlHttpRequest.onreadystatechange=this._onReadyStateChange;var e=this._webRequest.get_httpVerb();this._xmlHttpRequest.open(e,this._webRequest.getResolvedUrl(),true);if(a)for(var b in a){var f=a[b];if(typeof f!=="function")this._xmlHttpRequest.setRequestHeader(b,f)}if(e.toLowerCase()==="post"){if(a===null||!a["Content-Type"])this._xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");if(!c)c=""}var d=this._webRequest.get_timeout();if(d>0)this._timer=window.setTimeout(Function.createDelegate(this,this._onTimeout),d);this._xmlHttpRequest.send(c);this._started=true},getResponseHeader:function(b){var a;try{a=this._xmlHttpRequest.getResponseHeader(b)}catch(c){}if(!a)a="";return a},getAllResponseHeaders:function(){return this._xmlHttpRequest.getAllResponseHeaders()},get_responseData:function(){return this._xmlHttpRequest.responseText},get_statusCode:function(){var a=0;try{a=this._xmlHttpRequest.status}catch(b){}return a},get_statusText:function(){return this._xmlHttpRequest.statusText},get_xml:function(){var a=this._xmlHttpRequest.responseXML;if(!a||!a.documentElement){a=Sys.Net.XMLDOM(this._xmlHttpRequest.responseText);if(!a||!a.documentElement)return null}else if(navigator.userAgent.indexOf("MSIE")!==-1)a.setProperty("SelectionLanguage","XPath");if(a.documentElement.namespaceURI==="http://www.mozilla.org/newlayout/xml/parsererror.xml"&&a.documentElement.tagName==="parsererror")return null;if(a.documentElement.firstChild&&a.documentElement.firstChild.tagName==="parsererror")return null;return a},abort:function(){if(this._aborted||this._responseAvailable||this._timedOut)return;this._aborted=true;this._clearTimer();if(this._xmlHttpRequest&&!this._responseAvailable){this._xmlHttpRequest.onreadystatechange=Function.emptyMethod;this._xmlHttpRequest.abort();this._xmlHttpRequest=null;this._webRequest.completed(Sys.EventArgs.Empty)}}};Sys.Net.XMLHttpExecutor.registerClass("Sys.Net.XMLHttpExecutor",Sys.Net.WebRequestExecutor);Sys.Net._WebRequestManager=function(){this._defaultTimeout=0;this._defaultExecutorType="Sys.Net.XMLHttpExecutor"};Sys.Net._WebRequestManager.prototype={add_invokingRequest:function(a){this._get_eventHandlerList().addHandler("invokingRequest",a)},remove_invokingRequest:function(a){this._get_eventHandlerList().removeHandler("invokingRequest",a)},add_completedRequest:function(a){this._get_eventHandlerList().addHandler("completedRequest",a)},remove_completedRequest:function(a){this._get_eventHandlerList().removeHandler("completedRequest",a)},_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_defaultTimeout:function(){return this._defaultTimeout},set_defaultTimeout:function(a){this._defaultTimeout=a},get_defaultExecutorType:function(){return this._defaultExecutorType},set_defaultExecutorType:function(a){this._defaultExecutorType=a},executeRequest:function(webRequest){var executor=webRequest.get_executor();if(!executor){var failed=false;try{var executorType=eval(this._defaultExecutorType);executor=new executorType}catch(a){failed=true}webRequest.set_executor(executor)}if(executor.get_aborted())return;var evArgs=new Sys.Net.NetworkRequestEventArgs(webRequest),handler=this._get_eventHandlerList().getHandler("invokingRequest");if(handler)handler(this,evArgs);if(!evArgs.get_cancel())executor.executeRequest()}};Sys.Net._WebRequestManager.registerClass("Sys.Net._WebRequestManager");Sys.Net.WebRequestManager=new Sys.Net._WebRequestManager;Sys.Net.NetworkRequestEventArgs=function(a){Sys.Net.NetworkRequestEventArgs.initializeBase(this);this._webRequest=a};Sys.Net.NetworkRequestEventArgs.prototype={get_webRequest:function(){return this._webRequest}};Sys.Net.NetworkRequestEventArgs.registerClass("Sys.Net.NetworkRequestEventArgs",Sys.CancelEventArgs);Sys.Net.WebRequest=function(){this._url="";this._headers={};this._body=null;this._userContext=null;this._httpVerb=null;this._executor=null;this._invokeCalled=false;this._timeout=0};Sys.Net.WebRequest.prototype={add_completed:function(a){this._get_eventHandlerList().addHandler("completed",a)},remove_completed:function(a){this._get_eventHandlerList().removeHandler("completed",a)},completed:function(b){var a=Sys.Net.WebRequestManager._get_eventHandlerList().getHandler("completedRequest");if(a)a(this._executor,b);a=this._get_eventHandlerList().getHandler("completed");if(a)a(this._executor,b)},_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_url:function(){return this._url},set_url:function(a){this._url=a},get_headers:function(){return this._headers},get_httpVerb:function(){if(this._httpVerb===null){if(this._body===null)return "GET";return "POST"}return this._httpVerb},set_httpVerb:function(a){this._httpVerb=a},get_body:function(){return this._body},set_body:function(a){this._body=a},get_userContext:function(){return this._userContext},set_userContext:function(a){this._userContext=a},get_executor:function(){return this._executor},set_executor:function(a){this._executor=a;this._executor._set_webRequest(this)},get_timeout:function(){if(this._timeout===0)return Sys.Net.WebRequestManager.get_defaultTimeout();return this._timeout},set_timeout:function(a){this._timeout=a},getResolvedUrl:function(){return Sys.Net.WebRequest._resolveUrl(this._url)},invoke:function(){Sys.Net.WebRequestManager.executeRequest(this);this._invokeCalled=true}};Sys.Net.WebRequest._resolveUrl=function(b,a){if(b&&b.indexOf("://")!==-1)return b;if(!a||a.length===0){var d=document.getElementsByTagName("base")[0];if(d&&d.href&&d.href.length>0)a=d.href;else a=document.URL}var c=a.indexOf("?");if(c!==-1)a=a.substr(0,c);c=a.indexOf("#");if(c!==-1)a=a.substr(0,c);a=a.substr(0,a.lastIndexOf("/")+1);if(!b||b.length===0)return a;if(b.charAt(0)==="/"){var e=a.indexOf("://"),g=a.indexOf("/",e+3);return a.substr(0,g)+b}else{var f=a.lastIndexOf("/");return a.substr(0,f+1)+b}};Sys.Net.WebRequest._createQueryString=function(d,b){if(!b)b=encodeURIComponent;var a=new Sys.StringBuilder,f=0;for(var c in d){var e=d[c];if(typeof e==="function")continue;var g=Sys.Serialization.JavaScriptSerializer.serialize(e);if(f!==0)a.append("&");a.append(c);a.append("=");a.append(b(g));f++}return a.toString()};Sys.Net.WebRequest._createUrl=function(a,b){if(!b)return a;var d=Sys.Net.WebRequest._createQueryString(b);if(d.length>0){var c="?";if(a&&a.indexOf("?")!==-1)c="&";return a+c+d}else return a};Sys.Net.WebRequest.registerClass("Sys.Net.WebRequest");Sys.Net.WebServiceProxy=function(){};Sys.Net.WebServiceProxy.prototype={get_timeout:function(){return this._timeout},set_timeout:function(a){if(a<0)throw Error.argumentOutOfRange("value",a,Sys.Res.invalidTimeout);this._timeout=a},get_defaultUserContext:function(){return this._userContext},set_defaultUserContext:function(a){this._userContext=a},get_defaultSucceededCallback:function(){return this._succeeded},set_defaultSucceededCallback:function(a){this._succeeded=a},get_defaultFailedCallback:function(){return this._failed},set_defaultFailedCallback:function(a){this._failed=a},get_path:function(){return this._path},set_path:function(a){this._path=a},_invoke:function(d,e,g,f,c,b,a){if(c===null||typeof c==="undefined")c=this.get_defaultSucceededCallback();if(b===null||typeof b==="undefined")b=this.get_defaultFailedCallback();if(a===null||typeof a==="undefined")a=this.get_defaultUserContext();return Sys.Net.WebServiceProxy.invoke(d,e,g,f,c,b,a,this.get_timeout())}};Sys.Net.WebServiceProxy.registerClass("Sys.Net.WebServiceProxy");Sys.Net.WebServiceProxy.invoke=function(k,a,j,d,i,c,f,h){var b=new Sys.Net.WebRequest;b.get_headers()["Content-Type"]="application/json; charset=utf-8";if(!d)d={};var g=d;if(!j||!g)g={};b.set_url(Sys.Net.WebRequest._createUrl(k+"/"+encodeURIComponent(a),g));var e=null;if(!j){e=Sys.Serialization.JavaScriptSerializer.serialize(d);if(e==="{}")e=""}b.set_body(e);b.add_completed(l);if(h&&h>0)b.set_timeout(h);b.invoke();function l(d){if(d.get_responseAvailable()){var g=d.get_statusCode(),b=null;try{var e=d.getResponseHeader("Content-Type");if(e.startsWith("application/json"))b=d.get_object();else if(e.startsWith("text/xml"))b=d.get_xml();else b=d.get_responseData()}catch(m){}var k=d.getResponseHeader("jsonerror"),h=k==="true";if(h){if(b)b=new Sys.Net.WebServiceError(false,b.Message,b.StackTrace,b.ExceptionType)}else if(e.startsWith("application/json"))b=b.d;if(g<200||g>=300||h){if(c){if(!b||!h)b=new Sys.Net.WebServiceError(false,String.format(Sys.Res.webServiceFailedNoMsg,a),"","");b._statusCode=g;c(b,f,a)}}else if(i)i(b,f,a)}else{var j;if(d.get_timedOut())j=String.format(Sys.Res.webServiceTimedOut,a);else j=String.format(Sys.Res.webServiceFailedNoMsg,a);if(c)c(new Sys.Net.WebServiceError(d.get_timedOut(),j,"",""),f,a)}}return b};Sys.Net.WebServiceProxy._generateTypedConstructor=function(a){return function(b){if(b)for(var c in b)this[c]=b[c];this.__type=a}};Sys.Net.WebServiceError=function(c,d,b,a){this._timedOut=c;this._message=d;this._stackTrace=b;this._exceptionType=a;this._statusCode=-1};Sys.Net.WebServiceError.prototype={get_timedOut:function(){return this._timedOut},get_statusCode:function(){return this._statusCode},get_message:function(){return this._message},get_stackTrace:function(){return this._stackTrace},get_exceptionType:function(){return this._exceptionType}};Sys.Net.WebServiceError.registerClass("Sys.Net.WebServiceError");Type.registerNamespace("Sys.Services");Sys.Services._ProfileService=function(){Sys.Services._ProfileService.initializeBase(this);this.properties={}};Sys.Services._ProfileService.DefaultWebServicePath="";Sys.Services._ProfileService.prototype={_defaultLoadCompletedCallback:null,_defaultSaveCompletedCallback:null,_path:"",_timeout:0,get_defaultLoadCompletedCallback:function(){return this._defaultLoadCompletedCallback},set_defaultLoadCompletedCallback:function(a){this._defaultLoadCompletedCallback=a},get_defaultSaveCompletedCallback:function(){return this._defaultSaveCompletedCallback},set_defaultSaveCompletedCallback:function(a){this._defaultSaveCompletedCallback=a},get_path:function(){return this._path||""},load:function(c,d,e,f){var b,a;if(!c){a="GetAllPropertiesForCurrentUser";b={authenticatedUserOnly:false}}else{a="GetPropertiesForCurrentUser";b={properties:this._clonePropertyNames(c),authenticatedUserOnly:false}}this._invoke(this._get_path(),a,false,b,Function.createDelegate(this,this._onLoadComplete),Function.createDelegate(this,this._onLoadFailed),[d,e,f])},save:function(d,b,c,e){var a=this._flattenProperties(d,this.properties);this._invoke(this._get_path(),"SetPropertiesForCurrentUser",false,{values:a.value,authenticatedUserOnly:false},Function.createDelegate(this,this._onSaveComplete),Function.createDelegate(this,this._onSaveFailed),[b,c,e,a.count])},_clonePropertyNames:function(e){var c=[],d={};for(var b=0;b<e.length;b++){var a=e[b];if(!d[a]){Array.add(c,a);d[a]=true}}return c},_flattenProperties:function(a,i,j){var b={},e,d,g=0;if(a&&a.length===0)return {value:b,count:0};for(var c in i){e=i[c];d=j?j+"."+c:c;if(Sys.Services.ProfileGroup.isInstanceOfType(e)){var k=this._flattenProperties(a,e,d),h=k.value;g+=k.count;for(var f in h){var l=h[f];b[f]=l}}else if(!a||Array.indexOf(a,d)!==-1){b[d]=e;g++}}return {value:b,count:g}},_get_path:function(){var a=this.get_path();if(!a.length)a=Sys.Services._ProfileService.DefaultWebServicePath;if(!a||!a.length)throw Error.invalidOperation(Sys.Res.servicePathNotSet);return a},_onLoadComplete:function(a,e,g){if(typeof a!=="object")throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,g,"Object"));var c=this._unflattenProperties(a);for(var b in c)this.properties[b]=c[b];var d=e[0]||this.get_defaultLoadCompletedCallback()||this.get_defaultSucceededCallback();if(d){var f=e[2]||this.get_defaultUserContext();d(a.length,f,"Sys.Services.ProfileService.load")}},_onLoadFailed:function(d,b){var a=b[1]||this.get_defaultFailedCallback();if(a){var c=b[2]||this.get_defaultUserContext();a(d,c,"Sys.Services.ProfileService.load")}},_onSaveComplete:function(a,b,f){var c=b[3];if(a!==null)if(a instanceof Array)c-=a.length;else if(typeof a==="number")c=a;else throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,f,"Array"));var d=b[0]||this.get_defaultSaveCompletedCallback()||this.get_defaultSucceededCallback();if(d){var e=b[2]||this.get_defaultUserContext();d(c,e,"Sys.Services.ProfileService.save")}},_onSaveFailed:function(d,b){var a=b[1]||this.get_defaultFailedCallback();if(a){var c=b[2]||this.get_defaultUserContext();a(d,c,"Sys.Services.ProfileService.save")}},_unflattenProperties:function(e){var c={},d,f,h=0;for(var a in e){h++;f=e[a];d=a.indexOf(".");if(d!==-1){var g=a.substr(0,d);a=a.substr(d+1);var b=c[g];if(!b||!Sys.Services.ProfileGroup.isInstanceOfType(b)){b=new Sys.Services.ProfileGroup;c[g]=b}b[a]=f}else c[a]=f}e.length=h;return c}};Sys.Services._ProfileService.registerClass("Sys.Services._ProfileService",Sys.Net.WebServiceProxy);Sys.Services.ProfileService=new Sys.Services._ProfileService;Sys.Services.ProfileGroup=function(a){if(a)for(var b in a)this[b]=a[b]};Sys.Services.ProfileGroup.registerClass("Sys.Services.ProfileGroup");Sys.Services._AuthenticationService=function(){Sys.Services._AuthenticationService.initializeBase(this)};Sys.Services._AuthenticationService.DefaultWebServicePath="";Sys.Services._AuthenticationService.prototype={_defaultLoginCompletedCallback:null,_defaultLogoutCompletedCallback:null,_path:"",_timeout:0,_authenticated:false,get_defaultLoginCompletedCallback:function(){return this._defaultLoginCompletedCallback},set_defaultLoginCompletedCallback:function(a){this._defaultLoginCompletedCallback=a},get_defaultLogoutCompletedCallback:function(){return this._defaultLogoutCompletedCallback},set_defaultLogoutCompletedCallback:function(a){this._defaultLogoutCompletedCallback=a},get_isLoggedIn:function(){return this._authenticated},get_path:function(){return this._path||""},login:function(c,b,a,h,f,d,e,g){this._invoke(this._get_path(),"Login",false,{userName:c,password:b,createPersistentCookie:a},Function.createDelegate(this,this._onLoginComplete),Function.createDelegate(this,this._onLoginFailed),[c,b,a,h,f,d,e,g])},logout:function(c,a,b,d){this._invoke(this._get_path(),"Logout",false,{},Function.createDelegate(this,this._onLogoutComplete),Function.createDelegate(this,this._onLogoutFailed),[c,a,b,d])},_get_path:function(){var a=this.get_path();if(!a.length)a=Sys.Services._AuthenticationService.DefaultWebServicePath;if(!a||!a.length)throw Error.invalidOperation(Sys.Res.servicePathNotSet);return a},_onLoginComplete:function(e,c,f){if(typeof e!=="boolean")throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,f,"Boolean"));var b=c[4],d=c[7]||this.get_defaultUserContext(),a=c[5]||this.get_defaultLoginCompletedCallback()||this.get_defaultSucceededCallback();if(e){this._authenticated=true;if(a)a(true,d,"Sys.Services.AuthenticationService.login");if(typeof b!=="undefined"&&b!==null)window.location.href=b}else if(a)a(false,d,"Sys.Services.AuthenticationService.login")},_onLoginFailed:function(d,b){var a=b[6]||this.get_defaultFailedCallback();if(a){var c=b[7]||this.get_defaultUserContext();a(d,c,"Sys.Services.AuthenticationService.login")}},_onLogoutComplete:function(f,a,e){if(f!==null)throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,e,"null"));var b=a[0],d=a[3]||this.get_defaultUserContext(),c=a[1]||this.get_defaultLogoutCompletedCallback()||this.get_defaultSucceededCallback();this._authenticated=false;if(c)c(null,d,"Sys.Services.AuthenticationService.logout");if(!b)window.location.reload();else window.location.href=b},_onLogoutFailed:function(c,b){var a=b[2]||this.get_defaultFailedCallback();if(a)a(c,b[3],"Sys.Services.AuthenticationService.logout")},_setAuthenticated:function(a){this._authenticated=a}};Sys.Services._AuthenticationService.registerClass("Sys.Services._AuthenticationService",Sys.Net.WebServiceProxy);Sys.Services.AuthenticationService=new Sys.Services._AuthenticationService;Sys.Services._RoleService=function(){Sys.Services._RoleService.initializeBase(this);this._roles=[]};Sys.Services._RoleService.DefaultWebServicePath="";Sys.Services._RoleService.prototype={_defaultLoadCompletedCallback:null,_rolesIndex:null,_timeout:0,_path:"",get_defaultLoadCompletedCallback:function(){return this._defaultLoadCompletedCallback},set_defaultLoadCompletedCallback:function(a){this._defaultLoadCompletedCallback=a},get_path:function(){return this._path||""},get_roles:function(){return Array.clone(this._roles)},isUserInRole:function(a){var b=this._get_rolesIndex()[a.trim().toLowerCase()];return !!b},load:function(a,b,c){Sys.Net.WebServiceProxy.invoke(this._get_path(),"GetRolesForCurrentUser",false,{},Function.createDelegate(this,this._onLoadComplete),Function.createDelegate(this,this._onLoadFailed),[a,b,c],this.get_timeout())},_get_path:function(){var a=this.get_path();if(!a||!a.length)a=Sys.Services._RoleService.DefaultWebServicePath;if(!a||!a.length)throw Error.invalidOperation(Sys.Res.servicePathNotSet);return a},_get_rolesIndex:function(){if(!this._rolesIndex){var b={};for(var a=0;a<this._roles.length;a++)b[this._roles[a].toLowerCase()]=true;this._rolesIndex=b}return this._rolesIndex},_onLoadComplete:function(a,c,f){if(a&&!(a instanceof Array))throw Error.invalidOperation(String.format(Sys.Res.webServiceInvalidReturnType,f,"Array"));this._roles=a;this._rolesIndex=null;var b=c[0]||this.get_defaultLoadCompletedCallback()||this.get_defaultSucceededCallback();if(b){var e=c[2]||this.get_defaultUserContext(),d=Array.clone(a);b(d,e,"Sys.Services.RoleService.load")}},_onLoadFailed:function(d,b){var a=b[1]||this.get_defaultFailedCallback();if(a){var c=b[2]||this.get_defaultUserContext();a(d,c,"Sys.Services.RoleService.load")}}};Sys.Services._RoleService.registerClass("Sys.Services._RoleService",Sys.Net.WebServiceProxy);Sys.Services.RoleService=new Sys.Services._RoleService;Type.registerNamespace("Sys.Serialization");Sys.Serialization.JavaScriptSerializer=function(){};Sys.Serialization.JavaScriptSerializer.registerClass("Sys.Serialization.JavaScriptSerializer");Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs=[];Sys.Serialization.JavaScriptSerializer._charsToEscape=[];Sys.Serialization.JavaScriptSerializer._dateRegEx=new RegExp('(^|[^\\\\])\\"\\\\/Date\\((-?[0-9]+)(?:[a-zA-Z]|(?:\\+|-)[0-9]{4})?\\)\\\\/\\"',"g");Sys.Serialization.JavaScriptSerializer._escapeChars={};Sys.Serialization.JavaScriptSerializer._escapeRegEx=new RegExp('["\\\\\\x00-\\x1F]',"i");Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal=new RegExp('["\\\\\\x00-\\x1F]',"g");Sys.Serialization.JavaScriptSerializer._jsonRegEx=new RegExp("[^,:{}\\[\\]0-9.\\-+Eaeflnr-u \\n\\r\\t]","g");Sys.Serialization.JavaScriptSerializer._jsonStringRegEx=new RegExp('"(\\\\.|[^"\\\\])*"',"g");Sys.Serialization.JavaScriptSerializer._serverTypeFieldName="__type";Sys.Serialization.JavaScriptSerializer._init=function(){var c=["\\u0000","\\u0001","\\u0002","\\u0003","\\u0004","\\u0005","\\u0006","\\u0007","\\b","\\t","\\n","\\u000b","\\f","\\r","\\u000e","\\u000f","\\u0010","\\u0011","\\u0012","\\u0013","\\u0014","\\u0015","\\u0016","\\u0017","\\u0018","\\u0019","\\u001a","\\u001b","\\u001c","\\u001d","\\u001e","\\u001f"];Sys.Serialization.JavaScriptSerializer._charsToEscape[0]="\\";Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs["\\"]=new RegExp("\\\\","g");Sys.Serialization.JavaScriptSerializer._escapeChars["\\"]="\\\\";Sys.Serialization.JavaScriptSerializer._charsToEscape[1]='"';Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs['"']=new RegExp('"',"g");Sys.Serialization.JavaScriptSerializer._escapeChars['"']='\\"';for(var a=0;a<32;a++){var b=String.fromCharCode(a);Sys.Serialization.JavaScriptSerializer._charsToEscape[a+2]=b;Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[b]=new RegExp(b,"g");Sys.Serialization.JavaScriptSerializer._escapeChars[b]=c[a]}};Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder=function(b,a){a.append(b.toString())};Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder=function(a,b){if(isFinite(a))b.append(String(a));else throw Error.invalidOperation(Sys.Res.cannotSerializeNonFiniteNumbers)};Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder=function(a,c){c.append('"');if(Sys.Serialization.JavaScriptSerializer._escapeRegEx.test(a)){if(Sys.Serialization.JavaScriptSerializer._charsToEscape.length===0)Sys.Serialization.JavaScriptSerializer._init();if(a.length<128)a=a.replace(Sys.Serialization.JavaScriptSerializer._escapeRegExGlobal,function(a){return Sys.Serialization.JavaScriptSerializer._escapeChars[a]});else for(var d=0;d<34;d++){var b=Sys.Serialization.JavaScriptSerializer._charsToEscape[d];if(a.indexOf(b)!==-1)if(Sys.Browser.agent===Sys.Browser.Opera||Sys.Browser.agent===Sys.Browser.FireFox)a=a.split(b).join(Sys.Serialization.JavaScriptSerializer._escapeChars[b]);else a=a.replace(Sys.Serialization.JavaScriptSerializer._charsToEscapeRegExs[b],Sys.Serialization.JavaScriptSerializer._escapeChars[b])}}c.append(a);c.append('"')};Sys.Serialization.JavaScriptSerializer._serializeWithBuilder=function(b,a,i,g){var c;switch(typeof b){case "object":if(b)if(Number.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(b,a);else if(Boolean.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(b,a);else if(String.isInstanceOfType(b))Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(b,a);else if(Array.isInstanceOfType(b)){a.append("[");for(c=0;c<b.length;++c){if(c>0)a.append(",");Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(b[c],a,false,g)}a.append("]")}else{if(Date.isInstanceOfType(b)){a.append('"\\/Date(');a.append(b.getTime());a.append(')\\/"');break}var d=[],f=0;for(var e in b){if(e.startsWith("$"))continue;if(e===Sys.Serialization.JavaScriptSerializer._serverTypeFieldName&&f!==0){d[f++]=d[0];d[0]=e}else d[f++]=e}if(i)d.sort();a.append("{");var j=false;for(c=0;c<f;c++){var h=b[d[c]];if(typeof h!=="undefined"&&typeof h!=="function"){if(j)a.append(",");else j=true;Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(d[c],a,i,g);a.append(":");Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(h,a,i,g)}}a.append("}")}else a.append("null");break;case "number":Sys.Serialization.JavaScriptSerializer._serializeNumberWithBuilder(b,a);break;case "string":Sys.Serialization.JavaScriptSerializer._serializeStringWithBuilder(b,a);break;case "boolean":Sys.Serialization.JavaScriptSerializer._serializeBooleanWithBuilder(b,a);break;default:a.append("null")}};Sys.Serialization.JavaScriptSerializer.serialize=function(b){var a=new Sys.StringBuilder;Sys.Serialization.JavaScriptSerializer._serializeWithBuilder(b,a,false);return a.toString()};Sys.Serialization.JavaScriptSerializer.deserialize=function(data,secure){if(data.length===0)throw Error.argument("data",Sys.Res.cannotDeserializeEmptyString);try{var exp=data.replace(Sys.Serialization.JavaScriptSerializer._dateRegEx,"$1new Date($2)");if(secure&&Sys.Serialization.JavaScriptSerializer._jsonRegEx.test(exp.replace(Sys.Serialization.JavaScriptSerializer._jsonStringRegEx,"")))throw null;return eval("("+exp+")")}catch(a){throw Error.argument("data",Sys.Res.cannotDeserializeInvalidJson)}};Sys.CultureInfo=function(c,b,a){this.name=c;this.numberFormat=b;this.dateTimeFormat=a};Sys.CultureInfo.prototype={_getDateTimeFormats:function(){if(!this._dateTimeFormats){var a=this.dateTimeFormat;this._dateTimeFormats=[a.MonthDayPattern,a.YearMonthPattern,a.ShortDatePattern,a.ShortTimePattern,a.LongDatePattern,a.LongTimePattern,a.FullDateTimePattern,a.RFC1123Pattern,a.SortableDateTimePattern,a.UniversalSortableDateTimePattern]}return this._dateTimeFormats},_getMonthIndex:function(a){if(!this._upperMonths)this._upperMonths=this._toUpperArray(this.dateTimeFormat.MonthNames);return Array.indexOf(this._upperMonths,this._toUpper(a))},_getAbbrMonthIndex:function(a){if(!this._upperAbbrMonths)this._upperAbbrMonths=this._toUpperArray(this.dateTimeFormat.AbbreviatedMonthNames);return Array.indexOf(this._upperAbbrMonths,this._toUpper(a))},_getDayIndex:function(a){if(!this._upperDays)this._upperDays=this._toUpperArray(this.dateTimeFormat.DayNames);return Array.indexOf(this._upperDays,this._toUpper(a))},_getAbbrDayIndex:function(a){if(!this._upperAbbrDays)this._upperAbbrDays=this._toUpperArray(this.dateTimeFormat.AbbreviatedDayNames);return Array.indexOf(this._upperAbbrDays,this._toUpper(a))},_toUpperArray:function(c){var b=[];for(var a=0,d=c.length;a<d;a++)b[a]=this._toUpper(c[a]);return b},_toUpper:function(a){return a.split("\u00a0").join(" ").toUpperCase()}};Sys.CultureInfo._parse=function(b){var a=Sys.Serialization.JavaScriptSerializer.deserialize(b);return new Sys.CultureInfo(a.name,a.numberFormat,a.dateTimeFormat)};Sys.CultureInfo.registerClass("Sys.CultureInfo");Sys.CultureInfo.InvariantCulture=Sys.CultureInfo._parse('{"name":"","numberFormat":{"CurrencyDecimalDigits":2,"CurrencyDecimalSeparator":".","IsReadOnly":true,"CurrencyGroupSizes":[3],"NumberGroupSizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparator":",","CurrencySymbol":"\u00a4","NaNSymbol":"NaN","CurrencyNegativePattern":0,"NumberNegativePattern":1,"PercentPositivePattern":0,"PercentNegativePattern":0,"NegativeInfinitySymbol":"-Infinity","NegativeSign":"-","NumberDecimalDigits":2,"NumberDecimalSeparator":".","NumberGroupSeparator":",","CurrencyPositivePattern":0,"PositiveInfinitySymbol":"Infinity","PositiveSign":"+","PercentDecimalDigits":2,"PercentDecimalSeparator":".","PercentGroupSeparator":",","PercentSymbol":"%","PerMilleSymbol":"\u2030","NativeDigits":["0","1","2","3","4","5","6","7","8","9"],"DigitSubstitution":1},"dateTimeFormat":{"AMDesignator":"AM","Calendar":{"MinSupportedDateTime":"@-62135568000000@","MaxSupportedDateTime":"@253402300799999@","AlgorithmType":1,"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnly":true},"DateSeparator":"/","FirstDayOfWeek":0,"CalendarWeekRule":0,"FullDateTimePattern":"dddd, dd MMMM yyyy HH:mm:ss","LongDatePattern":"dddd, dd MMMM yyyy","LongTimePattern":"HH:mm:ss","MonthDayPattern":"MMMM dd","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy HH\':\'mm\':\'ss \'GMT\'","ShortDatePattern":"MM/dd/yyyy","ShortTimePattern":"HH:mm","SortableDateTimePattern":"yyyy\'-\'MM\'-\'dd\'T\'HH\':\'mm\':\'ss","TimeSeparator":":","UniversalSortableDateTimePattern":"yyyy\'-\'MM\'-\'dd HH\':\'mm\':\'ss\'Z\'","YearMonthPattern":"yyyy MMMM","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"AbbreviatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","May","June","July","August","September","October","November","December",""],"IsReadOnly":true,"NativeCalendarName":"Gregorian Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["January","February","March","April","May","June","July","August","September","October","November","December",""]}}');if(typeof __cultureInfo==="undefined")var __cultureInfo='{"name":"en-US","numberFormat":{"CurrencyDecimalDigits":2,"CurrencyDecimalSeparator":".","IsReadOnly":false,"CurrencyGroupSizes":[3],"NumberGroupSizes":[3],"PercentGroupSizes":[3],"CurrencyGroupSeparator":",","CurrencySymbol":"$","NaNSymbol":"NaN","CurrencyNegativePattern":0,"NumberNegativePattern":1,"PercentPositivePattern":0,"PercentNegativePattern":0,"NegativeInfinitySymbol":"-Infinity","NegativeSign":"-","NumberDecimalDigits":2,"NumberDecimalSeparator":".","NumberGroupSeparator":",","CurrencyPositivePattern":0,"PositiveInfinitySymbol":"Infinity","PositiveSign":"+","PercentDecimalDigits":2,"PercentDecimalSeparator":".","PercentGroupSeparator":",","PercentSymbol":"%","PerMilleSymbol":"\u2030","NativeDigits":["0","1","2","3","4","5","6","7","8","9"],"DigitSubstitution":1},"dateTimeFormat":{"AMDesignator":"AM","Calendar":{"MinSupportedDateTime":"@-62135568000000@","MaxSupportedDateTime":"@253402300799999@","AlgorithmType":1,"CalendarType":1,"Eras":[1],"TwoDigitYearMax":2029,"IsReadOnly":false},"DateSeparator":"/","FirstDayOfWeek":0,"CalendarWeekRule":0,"FullDateTimePattern":"dddd, MMMM dd, yyyy h:mm:ss tt","LongDatePattern":"dddd, MMMM dd, yyyy","LongTimePattern":"h:mm:ss tt","MonthDayPattern":"MMMM dd","PMDesignator":"PM","RFC1123Pattern":"ddd, dd MMM yyyy HH\':\'mm\':\'ss \'GMT\'","ShortDatePattern":"M/d/yyyy","ShortTimePattern":"h:mm tt","SortableDateTimePattern":"yyyy\'-\'MM\'-\'dd\'T\'HH\':\'mm\':\'ss","TimeSeparator":":","UniversalSortableDateTimePattern":"yyyy\'-\'MM\'-\'dd HH\':\'mm\':\'ss\'Z\'","YearMonthPattern":"MMMM, yyyy","AbbreviatedDayNames":["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],"ShortestDayNames":["Su","Mo","Tu","We","Th","Fr","Sa"],"DayNames":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],"AbbreviatedMonthNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthNames":["January","February","March","April","May","June","July","August","September","October","November","December",""],"IsReadOnly":false,"NativeCalendarName":"Gregorian Calendar","AbbreviatedMonthGenitiveNames":["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec",""],"MonthGenitiveNames":["January","February","March","April","May","June","July","August","September","October","November","December",""]}}';Sys.CultureInfo.CurrentCulture=Sys.CultureInfo._parse(__cultureInfo);delete __cultureInfo;Sys.UI.Behavior=function(b){Sys.UI.Behavior.initializeBase(this);this._element=b;var a=b._behaviors;if(!a)b._behaviors=[this];else a[a.length]=this};Sys.UI.Behavior.prototype={_name:null,get_element:function(){return this._element},get_id:function(){var a=Sys.UI.Behavior.callBaseMethod(this,"get_id");if(a)return a;if(!this._element||!this._element.id)return "";return this._element.id+"$"+this.get_name()},get_name:function(){if(this._name)return this._name;var a=Object.getTypeName(this),b=a.lastIndexOf(".");if(b!=-1)a=a.substr(b+1);if(!this.get_isInitialized())this._name=a;return a},set_name:function(a){this._name=a},initialize:function(){Sys.UI.Behavior.callBaseMethod(this,"initialize");var a=this.get_name();if(a)this._element[a]=this},dispose:function(){Sys.UI.Behavior.callBaseMethod(this,"dispose");if(this._element){var a=this.get_name();if(a)this._element[a]=null;Array.remove(this._element._behaviors,this);delete this._element}}};Sys.UI.Behavior.registerClass("Sys.UI.Behavior",Sys.Component);Sys.UI.Behavior.getBehaviorByName=function(b,c){var a=b[c];return a&&Sys.UI.Behavior.isInstanceOfType(a)?a:null};Sys.UI.Behavior.getBehaviors=function(a){if(!a._behaviors)return [];return Array.clone(a._behaviors)};Sys.UI.Behavior.getBehaviorsByType=function(d,e){var a=d._behaviors,c=[];if(a)for(var b=0,f=a.length;b<f;b++)if(e.isInstanceOfType(a[b]))c[c.length]=a[b];return c};Sys.UI.VisibilityMode=function(){throw Error.notImplemented()};Sys.UI.VisibilityMode.prototype={hide:0,collapse:1};Sys.UI.VisibilityMode.registerEnum("Sys.UI.VisibilityMode");Sys.UI.Control=function(a){Sys.UI.Control.initializeBase(this);this._element=a;a.control=this};Sys.UI.Control.prototype={_parent:null,_visibilityMode:Sys.UI.VisibilityMode.hide,get_element:function(){return this._element},get_id:function(){if(!this._element)return "";return this._element.id},set_id:function(){throw Error.invalidOperation(Sys.Res.cantSetId)},get_parent:function(){if(this._parent)return this._parent;if(!this._element)return null;var a=this._element.parentNode;while(a){if(a.control)return a.control;a=a.parentNode}return null},set_parent:function(a){this._parent=a},get_visibilityMode:function(){return Sys.UI.DomElement.getVisibilityMode(this._element)},set_visibilityMode:function(a){Sys.UI.DomElement.setVisibilityMode(this._element,a)},get_visible:function(){return Sys.UI.DomElement.getVisible(this._element)},set_visible:function(a){Sys.UI.DomElement.setVisible(this._element,a)},addCssClass:function(a){Sys.UI.DomElement.addCssClass(this._element,a)},dispose:function(){Sys.UI.Control.callBaseMethod(this,"dispose");if(this._element){this._element.control=undefined;delete this._element}if(this._parent)delete this._parent},onBubbleEvent:function(){return false},raiseBubbleEvent:function(b,c){var a=this.get_parent();while(a){if(a.onBubbleEvent(b,c))return;a=a.get_parent()}},removeCssClass:function(a){Sys.UI.DomElement.removeCssClass(this._element,a)},toggleCssClass:function(a){Sys.UI.DomElement.toggleCssClass(this._element,a)}};Sys.UI.Control.registerClass("Sys.UI.Control",Sys.Component);
Type.registerNamespace('Sys');Sys.Res={"argumentInteger":"Value must be an integer.","scriptLoadMultipleCallbacks":"The script \u0027{0}\u0027 contains multiple calls to Sys.Application.notifyScriptLoaded(). Only one is allowed.","invokeCalledTwice":"Cannot call invoke more than once.","webServiceFailed":"The server method \u0027{0}\u0027 failed with the following error: {1}","webServiceInvalidJsonWrapper":"The server method \u0027{0}\u0027 returned invalid data. The \u0027d\u0027 property is missing from the JSON wrapper.","argumentType":"Object cannot be converted to the required type.","argumentNull":"Value cannot be null.","controlCantSetId":"The id property can\u0027t be set on a control.","formatBadFormatSpecifier":"Format specifier was invalid.","webServiceFailedNoMsg":"The server method \u0027{0}\u0027 failed.","argumentDomElement":"Value must be a DOM element.","invalidExecutorType":"Could not create a valid Sys.Net.WebRequestExecutor from: {0}.","cannotCallBeforeResponse":"Cannot call {0} when responseAvailable is false.","actualValue":"Actual value was {0}.","enumInvalidValue":"\u0027{0}\u0027 is not a valid value for enum {1}.","scriptLoadFailed":"The script \u0027{0}\u0027 could not be loaded.","parameterCount":"Parameter count mismatch.","cannotDeserializeEmptyString":"Cannot deserialize empty string.","formatInvalidString":"Input string was not in a correct format.","invalidTimeout":"Value must be greater than or equal to zero.","cannotAbortBeforeStart":"Cannot abort when executor has not started.","argument":"Value does not fall within the expected range.","cannotDeserializeInvalidJson":"Cannot deserialize. The data does not correspond to valid JSON.","invalidHttpVerb":"httpVerb cannot be set to an empty or null string.","nullWebRequest":"Cannot call executeRequest with a null webRequest.","eventHandlerInvalid":"Handler was not added through the Sys.UI.DomEvent.addHandler method.","cannotSerializeNonFiniteNumbers":"Cannot serialize non finite numbers.","argumentUndefined":"Value cannot be undefined.","webServiceInvalidReturnType":"The server method \u0027{0}\u0027 returned an invalid type. Expected type: {1}","servicePathNotSet":"The path to the web service has not been set.","argumentTypeWithTypes":"Object of type \u0027{0}\u0027 cannot be converted to type \u0027{1}\u0027.","cannotCallOnceStarted":"Cannot call {0} once started.","badBaseUrl1":"Base URL does not contain ://.","badBaseUrl2":"Base URL does not contain another /.","badBaseUrl3":"Cannot find last / in base URL.","setExecutorAfterActive":"Cannot set executor after it has become active.","paramName":"Parameter name: {0}","cannotCallOutsideHandler":"Cannot call {0} outside of a completed event handler.","cannotSerializeObjectWithCycle":"Cannot serialize object with cyclic reference within child properties.","format":"One of the identified items was in an invalid format.","assertFailedCaller":"Assertion Failed: {0}\r\nat {1}","argumentOutOfRange":"Specified argument was out of the range of valid values.","webServiceTimedOut":"The server method \u0027{0}\u0027 timed out.","notImplemented":"The method or operation is not implemented.","assertFailed":"Assertion Failed: {0}","invalidOperation":"Operation is not valid due to the current state of the object.","breakIntoDebugger":"{0}\r\n\r\nBreak into debugger?"};
//----------------------------------------------------------
// Copyright (C) Microsoft Corporation. All rights reserved.
//----------------------------------------------------------
// MicrosoftAjaxWebForms.js
Type.registerNamespace("Sys.WebForms");Sys.WebForms.BeginRequestEventArgs=function(b,a){Sys.WebForms.BeginRequestEventArgs.initializeBase(this);this._request=b;this._postBackElement=a};Sys.WebForms.BeginRequestEventArgs.prototype={get_postBackElement:function(){return this._postBackElement},get_request:function(){return this._request}};Sys.WebForms.BeginRequestEventArgs.registerClass("Sys.WebForms.BeginRequestEventArgs",Sys.EventArgs);Sys.WebForms.EndRequestEventArgs=function(c,a,b){Sys.WebForms.EndRequestEventArgs.initializeBase(this);this._errorHandled=false;this._error=c;this._dataItems=a||{};this._response=b};Sys.WebForms.EndRequestEventArgs.prototype={get_dataItems:function(){return this._dataItems},get_error:function(){return this._error},get_errorHandled:function(){return this._errorHandled},set_errorHandled:function(a){this._errorHandled=a},get_response:function(){return this._response}};Sys.WebForms.EndRequestEventArgs.registerClass("Sys.WebForms.EndRequestEventArgs",Sys.EventArgs);Sys.WebForms.InitializeRequestEventArgs=function(b,a){Sys.WebForms.InitializeRequestEventArgs.initializeBase(this);this._request=b;this._postBackElement=a};Sys.WebForms.InitializeRequestEventArgs.prototype={get_postBackElement:function(){return this._postBackElement},get_request:function(){return this._request}};Sys.WebForms.InitializeRequestEventArgs.registerClass("Sys.WebForms.InitializeRequestEventArgs",Sys.CancelEventArgs);Sys.WebForms.PageLoadedEventArgs=function(b,a,c){Sys.WebForms.PageLoadedEventArgs.initializeBase(this);this._panelsUpdated=b;this._panelsCreated=a;this._dataItems=c||{}};Sys.WebForms.PageLoadedEventArgs.prototype={get_dataItems:function(){return this._dataItems},get_panelsCreated:function(){return this._panelsCreated},get_panelsUpdated:function(){return this._panelsUpdated}};Sys.WebForms.PageLoadedEventArgs.registerClass("Sys.WebForms.PageLoadedEventArgs",Sys.EventArgs);Sys.WebForms.PageLoadingEventArgs=function(b,a,c){Sys.WebForms.PageLoadingEventArgs.initializeBase(this);this._panelsUpdating=b;this._panelsDeleting=a;this._dataItems=c||{}};Sys.WebForms.PageLoadingEventArgs.prototype={get_dataItems:function(){return this._dataItems},get_panelsDeleting:function(){return this._panelsDeleting},get_panelsUpdating:function(){return this._panelsUpdating}};Sys.WebForms.PageLoadingEventArgs.registerClass("Sys.WebForms.PageLoadingEventArgs",Sys.EventArgs);Sys.WebForms.PageRequestManager=function(){this._form=null;this._activeDefaultButton=null;this._activeDefaultButtonClicked=false;this._updatePanelIDs=null;this._updatePanelClientIDs=null;this._updatePanelHasChildrenAsTriggers=null;this._asyncPostBackControlIDs=null;this._asyncPostBackControlClientIDs=null;this._postBackControlIDs=null;this._postBackControlClientIDs=null;this._scriptManagerID=null;this._pageLoadedHandler=null;this._additionalInput=null;this._onsubmit=null;this._onSubmitStatements=[];this._originalDoPostBack=null;this._originalDoPostBackWithOptions=null;this._originalFireDefaultButton=null;this._originalDoCallback=null;this._isCrossPost=false;this._postBackSettings=null;this._request=null;this._onFormSubmitHandler=null;this._onFormElementClickHandler=null;this._onWindowUnloadHandler=null;this._asyncPostBackTimeout=null;this._controlIDToFocus=null;this._scrollPosition=null;this._processingRequest=false;this._scriptDisposes={};this._transientFields=["__VIEWSTATEENCRYPTED","__VIEWSTATEFIELDCOUNT"]};Sys.WebForms.PageRequestManager.prototype={_get_eventHandlerList:function(){if(!this._events)this._events=new Sys.EventHandlerList;return this._events},get_isInAsyncPostBack:function(){return this._request!==null},add_beginRequest:function(a){this._get_eventHandlerList().addHandler("beginRequest",a)},remove_beginRequest:function(a){this._get_eventHandlerList().removeHandler("beginRequest",a)},add_endRequest:function(a){this._get_eventHandlerList().addHandler("endRequest",a)},remove_endRequest:function(a){this._get_eventHandlerList().removeHandler("endRequest",a)},add_initializeRequest:function(a){this._get_eventHandlerList().addHandler("initializeRequest",a)},remove_initializeRequest:function(a){this._get_eventHandlerList().removeHandler("initializeRequest",a)},add_pageLoaded:function(a){this._get_eventHandlerList().addHandler("pageLoaded",a)},remove_pageLoaded:function(a){this._get_eventHandlerList().removeHandler("pageLoaded",a)},add_pageLoading:function(a){this._get_eventHandlerList().addHandler("pageLoading",a)},remove_pageLoading:function(a){this._get_eventHandlerList().removeHandler("pageLoading",a)},abortPostBack:function(){if(!this._processingRequest&&this._request){this._request.get_executor().abort();this._request=null}},_cancelPendingCallbacks:function(){for(var a=0,e=window.__pendingCallbacks.length;a<e;a++){var c=window.__pendingCallbacks[a];if(c){if(!c.async)window.__synchronousCallBackIndex=-1;window.__pendingCallbacks[a]=null;var d="__CALLBACKFRAME"+a,b=document.getElementById(d);if(b)b.parentNode.removeChild(b)}}},_commitControls:function(a,b){if(a){this._updatePanelIDs=a.updatePanelIDs;this._updatePanelClientIDs=a.updatePanelClientIDs;this._updatePanelHasChildrenAsTriggers=a.updatePanelHasChildrenAsTriggers;this._asyncPostBackControlIDs=a.asyncPostBackControlIDs;this._asyncPostBackControlClientIDs=a.asyncPostBackControlClientIDs;this._postBackControlIDs=a.postBackControlIDs;this._postBackControlClientIDs=a.postBackControlClientIDs}if(typeof b!=="undefined"&&b!==null)this._asyncPostBackTimeout=b*1000},_createHiddenField:function(c,d){var b,a=document.getElementById(c);if(a)if(!a._isContained)a.parentNode.removeChild(a);else b=a.parentNode;if(!b){b=document.createElement("span");b.style.cssText="display:none !important";this._form.appendChild(b)}b.innerHTML="<input type='hidden' />";a=b.childNodes[0];a._isContained=true;a.id=a.name=c;a.value=d},_createPageRequestManagerTimeoutError:function(){var b="Sys.WebForms.PageRequestManagerTimeoutException: "+Sys.WebForms.Res.PRM_TimeoutError,a=Error.create(b,{name:"Sys.WebForms.PageRequestManagerTimeoutException"});a.popStackFrame();return a},_createPageRequestManagerServerError:function(a,d){var c="Sys.WebForms.PageRequestManagerServerErrorException: "+(d||String.format(Sys.WebForms.Res.PRM_ServerError,a)),b=Error.create(c,{name:"Sys.WebForms.PageRequestManagerServerErrorException",httpStatusCode:a});b.popStackFrame();return b},_createPageRequestManagerParserError:function(b){var c="Sys.WebForms.PageRequestManagerParserErrorException: "+String.format(Sys.WebForms.Res.PRM_ParserError,b),a=Error.create(c,{name:"Sys.WebForms.PageRequestManagerParserErrorException"});a.popStackFrame();return a},_createPostBackSettings:function(c,b,a){return {async:c,panelID:b,sourceElement:a}},_convertToClientIDs:function(a,d,c){if(a)for(var b=0,e=a.length;b<e;b++){Array.add(d,a[b]);Array.add(c,this._uniqueIDToClientID(a[b]))}},_destroyTree:function(f){if(f.nodeType===1){var d=f.childNodes;for(var b=d.length-1;b>=0;b--){var a=d[b];if(a.nodeType===1){if(a.dispose&&typeof a.dispose==="function")a.dispose();else if(a.control&&typeof a.control.dispose==="function")a.control.dispose();var e=Sys.UI.Behavior.getBehaviors(a);for(var c=e.length-1;c>=0;c--)e[c].dispose();this._destroyTree(a)}}}},dispose:function(){if(this._form){Sys.UI.DomEvent.removeHandler(this._form,"submit",this._onFormSubmitHandler);Sys.UI.DomEvent.removeHandler(this._form,"click",this._onFormElementClickHandler);Sys.UI.DomEvent.removeHandler(window,"unload",this._onWindowUnloadHandler);Sys.UI.DomEvent.removeHandler(window,"load",this._pageLoadedHandler)}if(this._originalDoPostBack){window.__doPostBack=this._originalDoPostBack;this._originalDoPostBack=null}if(this._originalDoPostBackWithOptions){window.WebForm_DoPostBackWithOptions=this._originalDoPostBackWithOptions;this._originalDoPostBackWithOptions=null}if(this._originalFireDefaultButton){window.WebForm_FireDefaultButton=this._originalFireDefaultButton;this._originalFireDefaultButton=null}if(this._originalDoCallback){window.WebForm_DoCallback=this._originalDoCallback;this._originalDoCallback=null}this._form=null;this._updatePanelIDs=null;this._updatePanelClientIDs=null;this._asyncPostBackControlIDs=null;this._asyncPostBackControlClientIDs=null;this._postBackControlIDs=null;this._postBackControlClientIDs=null;this._asyncPostBackTimeout=null;this._scrollPosition=null},_doCallback:function(d,b,c,f,a,e){if(!this.get_isInAsyncPostBack())this._originalDoCallback(d,b,c,f,a,e)},_doPostBack:function(a,e){this._additionalInput=null;var b=this._form;if(a===null||typeof a==="undefined"||this._isCrossPost){this._postBackSettings=this._createPostBackSettings(false,null,null);this._isCrossPost=false}else{var f=this._uniqueIDToClientID(a),d=document.getElementById(f);if(!d)if(Array.contains(this._asyncPostBackControlIDs,a))this._postBackSettings=this._createPostBackSettings(true,this._scriptManagerID+"|"+a,null);else if(Array.contains(this._postBackControlIDs,a))this._postBackSettings=this._createPostBackSettings(false,null,null);else{var c=this._findNearestElement(a);if(c)this._postBackSettings=this._getPostBackSettings(c,a);else this._postBackSettings=this._createPostBackSettings(false,null,null)}else this._postBackSettings=this._getPostBackSettings(d,a)}if(!this._postBackSettings.async){b.onsubmit=this._onsubmit;this._originalDoPostBack(a,e);b.onsubmit=null;return}b.__EVENTTARGET.value=a;b.__EVENTARGUMENT.value=e;this._onFormSubmit()},_doPostBackWithOptions:function(a){this._isCrossPost=a&&a.actionUrl;this._originalDoPostBackWithOptions(a)},_elementContains:function(b,a){while(a){if(a===b)return true;a=a.parentNode}return false},_endPostBack:function(a,d,f){if(this._request===d.get_webRequest()){this._processingRequest=false;this._additionalInput=null;this._request=null}var e=this._get_eventHandlerList().getHandler("endRequest"),b=false;if(e){var c=new Sys.WebForms.EndRequestEventArgs(a,f?f.dataItems:{},d);e(this,c);b=c.get_errorHandled()}if(a&&!b)throw a},_findNearestElement:function(a){while(a.length>0){var d=this._uniqueIDToClientID(a),c=document.getElementById(d);if(c)return c;var b=a.lastIndexOf("$");if(b===-1)return null;a=a.substring(0,b)}return null},_findText:function(b,a){var c=Math.max(0,a-20),d=Math.min(b.length,a+20);return b.substring(c,d)},_fireDefaultButton:function(a,d){if(a.keyCode===13){var c=a.srcElement||a.target;if(!c||c.tagName.toLowerCase()!=="textarea"){var b=document.getElementById(d);if(b&&typeof b.click!=="undefined"){this._activeDefaultButton=b;this._activeDefaultButtonClicked=false;try{b.click()}finally{this._activeDefaultButton=null}a.cancelBubble=true;if(typeof a.stopPropagation==="function")a.stopPropagation();return false}}}return true},_getPageLoadedEventArgs:function(j,e){var i=[],h=[],d=e?e.updatePanelData:null,c,g,b;if(!d){c=this._updatePanelIDs;g=null;b=null}else{c=d.updatePanelIDs;g=d.childUpdatePanelIDs;b=d.panelsToRefreshIDs}var a,f;if(b)for(a=0,f=b.length;a<f;a++)Array.add(i,document.getElementById(this._uniqueIDToClientID(b[a])));for(a=0,f=c.length;a<f;a++)if(j||Array.indexOf(g,c[a])!==-1)Array.add(h,document.getElementById(this._uniqueIDToClientID(c[a])));return new Sys.WebForms.PageLoadedEventArgs(i,h,e?e.dataItems:{})},_getPageLoadingEventArgs:function(h){var g=[],f=[],c=h.updatePanelData,b=c.oldUpdatePanelIDs,j=c.updatePanelIDs,i=c.childUpdatePanelIDs,e=c.panelsToRefreshIDs,a,d;for(a=0,d=e.length;a<d;a++)Array.add(g,document.getElementById(this._uniqueIDToClientID(e[a])));for(a=0,d=b.length;a<d;a++)if(Array.indexOf(e,b[a])===-1&&(Array.indexOf(j,b[a])===-1||Array.indexOf(i,b[a])>-1))Array.add(f,document.getElementById(this._uniqueIDToClientID(b[a])));return new Sys.WebForms.PageLoadingEventArgs(g,f,h.dataItems)},_getPostBackSettings:function(a,c){var d=a,b=null;while(a){if(a.id){if(!b&&Array.contains(this._asyncPostBackControlClientIDs,a.id))b=this._createPostBackSettings(true,this._scriptManagerID+"|"+c,d);else if(!b&&Array.contains(this._postBackControlClientIDs,a.id))return this._createPostBackSettings(false,null,null);else{var e=Array.indexOf(this._updatePanelClientIDs,a.id);if(e!==-1)if(this._updatePanelHasChildrenAsTriggers[e])return this._createPostBackSettings(true,this._updatePanelIDs[e]+"|"+c,d);else return this._createPostBackSettings(true,this._scriptManagerID+"|"+c,d)}if(!b&&this._matchesParentIDInList(a.id,this._asyncPostBackControlClientIDs))b=this._createPostBackSettings(true,this._scriptManagerID+"|"+c,d);else if(!b&&this._matchesParentIDInList(a.id,this._postBackControlClientIDs))return this._createPostBackSettings(false,null,null)}a=a.parentNode}if(!b)return this._createPostBackSettings(false,null,null);else return b},_getScrollPosition:function(){var a=document.documentElement;if(a&&(this._validPosition(a.scrollLeft)||this._validPosition(a.scrollTop)))return {x:a.scrollLeft,y:a.scrollTop};else{a=document.body;if(a&&(this._validPosition(a.scrollLeft)||this._validPosition(a.scrollTop)))return {x:a.scrollLeft,y:a.scrollTop};else if(this._validPosition(window.pageXOffset)||this._validPosition(window.pageYOffset))return {x:window.pageXOffset,y:window.pageYOffset};else return {x:0,y:0}}},_initializeInternal:function(a,b){if(this._prmInitialized)throw Error.invalidOperation(Sys.WebForms.Res.PRM_CannotRegisterTwice);this._prmInitialized=true;this._scriptManagerID=a;this._form=b;this._onsubmit=this._form.onsubmit;this._form.onsubmit=null;this._onFormSubmitHandler=Function.createDelegate(this,this._onFormSubmit);this._onFormElementClickHandler=Function.createDelegate(this,this._onFormElementClick);this._onWindowUnloadHandler=Function.createDelegate(this,this._onWindowUnload);Sys.UI.DomEvent.addHandler(this._form,"submit",this._onFormSubmitHandler);Sys.UI.DomEvent.addHandler(this._form,"click",this._onFormElementClickHandler);Sys.UI.DomEvent.addHandler(window,"unload",this._onWindowUnloadHandler);this._originalDoPostBack=window.__doPostBack;if(this._originalDoPostBack)window.__doPostBack=Function.createDelegate(this,this._doPostBack);this._originalDoPostBackWithOptions=window.WebForm_DoPostBackWithOptions;if(this._originalDoPostBackWithOptions)window.WebForm_DoPostBackWithOptions=Function.createDelegate(this,this._doPostBackWithOptions);this._originalFireDefaultButton=window.WebForm_FireDefaultButton;if(this._originalFireDefaultButton)window.WebForm_FireDefaultButton=Function.createDelegate(this,this._fireDefaultButton);this._originalDoCallback=window.WebForm_DoCallback;if(this._originalDoCallback)window.WebForm_DoCallback=Function.createDelegate(this,this._doCallback);this._pageLoadedHandler=Function.createDelegate(this,this._pageLoadedInitialLoad);Sys.UI.DomEvent.addHandler(window,"load",this._pageLoadedHandler)},_matchesParentIDInList:function(c,b){for(var a=0,d=b.length;a<d;a++)if(c.startsWith(b[a]+"_"))return true;return false},_onFormElementActive:function(a,d,e){if(a.disabled)return;this._postBackSettings=this._getPostBackSettings(a,a.name);if(a.name){var b=a.tagName.toUpperCase();if(b==="INPUT"){var c=a.type;if(c==="submit")this._additionalInput=encodeURIComponent(a.name)+"="+encodeURIComponent(a.value);else if(c==="image")this._additionalInput=encodeURIComponent(a.name)+".x="+d+"&"+encodeURIComponent(a.name)+".y="+e}else if(b==="BUTTON"&&a.name.length!==0&&a.type==="submit")this._additionalInput=encodeURIComponent(a.name)+"="+encodeURIComponent(a.value)}},_onFormElementClick:function(a){this._activeDefaultButtonClicked=a.target===this._activeDefaultButton;this._onFormElementActive(a.target,a.offsetX,a.offsetY)},_onFormSubmit:function(h){var g=true,t=this._isCrossPost;this._isCrossPost=false;var e,s;if(this._onsubmit)g=this._onsubmit();if(g)for(e=0,s=this._onSubmitStatements.length;e<s;e++)if(!this._onSubmitStatements[e]()){g=false;break}if(!g){if(h)h.preventDefault();return}var n=this._form;if(t)return;if(this._activeDefaultButton&&!this._activeDefaultButtonClicked)this._onFormElementActive(this._activeDefaultButton,0,0);if(!this._postBackSettings.async)return;var a=new Sys.StringBuilder;a.append(encodeURIComponent(this._scriptManagerID)+"="+encodeURIComponent(this._postBackSettings.panelID)+"&");var v=n.elements.length;for(e=0;e<v;e++){var d=n.elements[e],f=d.name;if(typeof f==="undefined"||f===null||f.length===0||f===this._scriptManagerID)continue;var m=d.tagName.toUpperCase();if(m==="INPUT"){var k=d.type;if(k==="text"||k==="password"||k==="hidden"||(k==="checkbox"||k==="radio")&&d.checked){a.append(encodeURIComponent(f));a.append("=");a.append(encodeURIComponent(d.value));a.append("&")}}else if(m==="SELECT"){var u=d.options.length;for(var o=0;o<u;o++){var q=d.options[o];if(q.selected){a.append(encodeURIComponent(f));a.append("=");a.append(encodeURIComponent(q.value));a.append("&")}}}else if(m==="TEXTAREA"){a.append(encodeURIComponent(f));a.append("=");a.append(encodeURIComponent(d.value));a.append("&")}}a.append("__ASYNCPOST=true&");if(this._additionalInput){a.append(this._additionalInput);this._additionalInput=null}var c=new Sys.Net.WebRequest,b=n.action;if(Sys.Browser.agent===Sys.Browser.InternetExplorer){var p=b.indexOf("#");if(p!==-1)b=b.substr(0,p);var l=b.indexOf("?");if(l!==-1){var r=b.substr(0,l);if(r.indexOf("%")===-1)b=encodeURI(r)+b.substr(l)}else if(b.indexOf("%")===-1)b=encodeURI(b)}c.set_url(b);c.get_headers()["X-MicrosoftAjax"]="Delta=true";c.get_headers()["Cache-Control"]="no-cache";c.set_timeout(this._asyncPostBackTimeout);c.add_completed(Function.createDelegate(this,this._onFormSubmitCompleted));c.set_body(a.toString());var i,j=this._get_eventHandlerList().getHandler("initializeRequest");if(j){i=new Sys.WebForms.InitializeRequestEventArgs(c,this._postBackSettings.sourceElement);j(this,i);g=!i.get_cancel()}if(!g){if(h)h.preventDefault();return}this._scrollPosition=this._getScrollPosition();this.abortPostBack();j=this._get_eventHandlerList().getHandler("beginRequest");if(j){i=new Sys.WebForms.BeginRequestEventArgs(c,this._postBackSettings.sourceElement);j(this,i)}if(this._originalDoCallback)this._cancelPendingCallbacks();this._request=c;this._processingRequest=false;c.invoke();if(h)h.preventDefault()},_onFormSubmitCompleted:function(c){this._processingRequest=true;if(c.get_timedOut()){this._endPostBack(this._createPageRequestManagerTimeoutError(),c,null);return}if(c.get_aborted()){this._endPostBack(null,c,null);return}if(!this._request||c.get_webRequest()!==this._request)return;if(c.get_statusCode()!==200){this._endPostBack(this._createPageRequestManagerServerError(c.get_statusCode()),c,null);return}var a=this._parseDelta(c);if(!a)return;var b,e;if(a.asyncPostBackControlIDsNode&&a.postBackControlIDsNode&&a.updatePanelIDsNode&&a.panelsToRefreshNode&&a.childUpdatePanelIDsNode){var p=this._updatePanelIDs,h=a.childUpdatePanelIDsNode.content,n=h.length?h.split(","):[],l=this._splitNodeIntoArray(a.asyncPostBackControlIDsNode),m=this._splitNodeIntoArray(a.postBackControlIDsNode),o=this._splitNodeIntoArray(a.updatePanelIDsNode),g=this._splitNodeIntoArray(a.panelsToRefreshNode);for(b=0,e=g.length;b<e;b++){var i=this._uniqueIDToClientID(g[b]);if(!document.getElementById(i)){this._endPostBack(Error.invalidOperation(String.format(Sys.WebForms.Res.PRM_MissingPanel,i)),c,a);return}}var f=this._processUpdatePanelArrays(o,l,m);f.oldUpdatePanelIDs=p;f.childUpdatePanelIDs=n;f.panelsToRefreshIDs=g;a.updatePanelData=f}a.dataItems={};var d;for(b=0,e=a.dataItemNodes.length;b<e;b++){d=a.dataItemNodes[b];a.dataItems[d.id]=d.content}for(b=0,e=a.dataItemJsonNodes.length;b<e;b++){d=a.dataItemJsonNodes[b];a.dataItems[d.id]=Sys.Serialization.JavaScriptSerializer.deserialize(d.content)}var k=this._get_eventHandlerList().getHandler("pageLoading");if(k)k(this,this._getPageLoadingEventArgs(a));Sys._ScriptLoader.readLoadedScripts();Sys.Application.beginCreateComponents();var j=Sys._ScriptLoader.getInstance();this._queueScripts(j,a.scriptBlockNodes,true,false);this._processingRequest=true;j.loadScripts(0,Function.createDelegate(this,Function.createCallback(this._scriptIncludesLoadComplete,a)),Function.createDelegate(this,Function.createCallback(this._scriptIncludesLoadFailed,a)),null)},_onWindowUnload:function(){this.dispose()},_pageLoaded:function(a,c){var b=this._get_eventHandlerList().getHandler("pageLoaded");if(b)b(this,this._getPageLoadedEventArgs(a,c));if(!a)Sys.Application.raiseLoad()},_pageLoadedInitialLoad:function(){this._pageLoaded(true,null)},_parseDelta:function(g){var c=g.get_responseData(),d,h,D,E,C,b=0,e=null,i=[];while(b<c.length){d=c.indexOf("|",b);if(d===-1){e=this._findText(c,b);break}h=parseInt(c.substring(b,d),10);if(h%1!==0){e=this._findText(c,b);break}b=d+1;d=c.indexOf("|",b);if(d===-1){e=this._findText(c,b);break}D=c.substring(b,d);b=d+1;d=c.indexOf("|",b);if(d===-1){e=this._findText(c,b);break}E=c.substring(b,d);b=d+1;if(b+h>=c.length){e=this._findText(c,c.length);break}C=c.substr(b,h);b+=h;if(c.charAt(b)!=="|"){e=this._findText(c,b);break}b++;Array.add(i,{type:D,id:E,content:C})}if(e){this._endPostBack(this._createPageRequestManagerParserError(String.format(Sys.WebForms.Res.PRM_ParserErrorDetails,e)),g,null);return null}var w=[],u=[],o=[],v=[],r=[],B=[],z=[],y=[],t=[],q=[],k,n,s,l,m,p,x;for(var j=0,F=i.length;j<F;j++){var a=i[j];switch(a.type){case "updatePanel":Array.add(w,a);break;case "hiddenField":Array.add(u,a);break;case "arrayDeclaration":Array.add(o,a);break;case "scriptBlock":Array.add(v,a);break;case "scriptStartupBlock":Array.add(r,a);break;case "expando":Array.add(B,a);break;case "onSubmit":Array.add(z,a);break;case "asyncPostBackControlIDs":k=a;break;case "postBackControlIDs":n=a;break;case "updatePanelIDs":s=a;break;case "asyncPostBackTimeout":l=a;break;case "childUpdatePanelIDs":m=a;break;case "panelsToRefreshIDs":p=a;break;case "formAction":x=a;break;case "dataItem":Array.add(y,a);break;case "dataItemJson":Array.add(t,a);break;case "scriptDispose":Array.add(q,a);break;case "pageRedirect":if(Sys.Browser.agent===Sys.Browser.InternetExplorer){var f=document.createElement("a");f.style.display="none";f.attachEvent("onclick",A);f.href=a.content;document.body.appendChild(f);f.click();f.detachEvent("onclick",A);document.body.removeChild(f);function A(a){a.cancelBubble=true}}else window.location.href=a.content;return;case "error":this._endPostBack(this._createPageRequestManagerServerError(Number.parseInvariant(a.id),a.content),g,null);return null;case "pageTitle":document.title=a.content;break;case "focus":this._controlIDToFocus=a.content;break;default:this._endPostBack(this._createPageRequestManagerParserError(String.format(Sys.WebForms.Res.PRM_UnknownToken,a.type)),g,null);return null}}return {executor:g,updatePanelNodes:w,hiddenFieldNodes:u,arrayDeclarationNodes:o,scriptBlockNodes:v,scriptStartupNodes:r,expandoNodes:B,onSubmitNodes:z,dataItemNodes:y,dataItemJsonNodes:t,scriptDisposeNodes:q,asyncPostBackControlIDsNode:k,postBackControlIDsNode:n,updatePanelIDsNode:s,asyncPostBackTimeoutNode:l,childUpdatePanelIDsNode:m,panelsToRefreshNode:p,formActionNode:x}},_processUpdatePanelArrays:function(e,l,n){var d,c,b;if(e){var f=e.length;d=new Array(f);c=new Array(f);b=new Array(f);for(var a=0;a<f;a++){var k=e[a].substr(1),m=e[a].charAt(0)==="t";b[a]=m;d[a]=k;c[a]=this._uniqueIDToClientID(k)}}else{d=[];c=[];b=[]}var i=[],g=[];this._convertToClientIDs(l,i,g);var j=[],h=[];this._convertToClientIDs(n,j,h);return {updatePanelIDs:d,updatePanelClientIDs:c,updatePanelHasChildrenAsTriggers:b,asyncPostBackControlIDs:i,asyncPostBackControlClientIDs:g,postBackControlIDs:j,postBackControlClientIDs:h}},_queueScripts:function(scriptLoader,scriptBlockNodes,queueIncludes,queueBlocks){for(var i=0,l=scriptBlockNodes.length;i<l;i++){var scriptBlockType=scriptBlockNodes[i].id;switch(scriptBlockType){case "ScriptContentNoTags":if(!queueBlocks)continue;scriptLoader.queueScriptBlock(scriptBlockNodes[i].content);break;case "ScriptContentWithTags":var scriptTagAttributes;eval("scriptTagAttributes = "+scriptBlockNodes[i].content);if(scriptTagAttributes.src){if(!queueIncludes||Sys._ScriptLoader.isScriptLoaded(scriptTagAttributes.src))continue}else if(!queueBlocks)continue;scriptLoader.queueCustomScriptTag(scriptTagAttributes);break;case "ScriptPath":if(!queueIncludes||Sys._ScriptLoader.isScriptLoaded(scriptBlockNodes[i].content))continue;scriptLoader.queueScriptReference(scriptBlockNodes[i].content)}}},_registerDisposeScript:function(a,b){if(!this._scriptDisposes[a])this._scriptDisposes[a]=[b];else Array.add(this._scriptDisposes[a],b)},_scriptIncludesLoadComplete:function(e,b){if(b.executor.get_webRequest()!==this._request)return;this._commitControls(b.updatePanelData,b.asyncPostBackTimeoutNode?b.asyncPostBackTimeoutNode.content:null);if(b.formActionNode)this._form.action=b.formActionNode.content;var a,d,c;for(a=0,d=b.updatePanelNodes.length;a<d;a++){c=b.updatePanelNodes[a];var j=document.getElementById(c.id);if(!j){this._endPostBack(Error.invalidOperation(String.format(Sys.WebForms.Res.PRM_MissingPanel,c.id)),b.executor,b);return}this._updatePanel(j,c.content)}for(a=0,d=b.scriptDisposeNodes.length;a<d;a++){c=b.scriptDisposeNodes[a];this._registerDisposeScript(c.id,c.content)}for(a=0,d=this._transientFields.length;a<d;a++){var g=document.getElementById(this._transientFields[a]);if(g){var k=g._isContained?g.parentNode:g;k.parentNode.removeChild(k)}}for(a=0,d=b.hiddenFieldNodes.length;a<d;a++){c=b.hiddenFieldNodes[a];this._createHiddenField(c.id,c.content)}if(b.scriptsFailed)throw Sys._ScriptLoader._errorScriptLoadFailed(b.scriptsFailed.src,b.scriptsFailed.multipleCallbacks);this._queueScripts(e,b.scriptBlockNodes,false,true);var i="";for(a=0,d=b.arrayDeclarationNodes.length;a<d;a++){c=b.arrayDeclarationNodes[a];i+="Sys.WebForms.PageRequestManager._addArrayElement('"+c.id+"', "+c.content+");\r\n"}var h="";for(a=0,d=b.expandoNodes.length;a<d;a++){c=b.expandoNodes[a];h+=c.id+" = "+c.content+"\r\n"}if(i.length)e.queueScriptBlock(i);if(h.length)e.queueScriptBlock(h);this._queueScripts(e,b.scriptStartupNodes,true,true);var f="";for(a=0,d=b.onSubmitNodes.length;a<d;a++){if(a===0)f="Array.add(Sys.WebForms.PageRequestManager.getInstance()._onSubmitStatements, function() {\r\n";f+=b.onSubmitNodes[a].content+"\r\n"}if(f.length){f+="\r\nreturn true;\r\n});\r\n";e.queueScriptBlock(f)}e.loadScripts(0,Function.createDelegate(this,Function.createCallback(this._scriptsLoadComplete,b)),null,null)},_scriptIncludesLoadFailed:function(d,c,b,a){a.scriptsFailed={src:c.src,multipleCallbacks:b};this._scriptIncludesLoadComplete(d,a)},_scriptsLoadComplete:function(f,c){var e=c.executor;if(window.__theFormPostData)window.__theFormPostData="";if(window.__theFormPostCollection)window.__theFormPostCollection=[];if(window.WebForm_InitCallback)window.WebForm_InitCallback();if(this._scrollPosition){if(window.scrollTo)window.scrollTo(this._scrollPosition.x,this._scrollPosition.y);this._scrollPosition=null}Sys.Application.endCreateComponents();this._pageLoaded(false,c);this._endPostBack(null,e,c);if(this._controlIDToFocus){var a,d;if(Sys.Browser.agent===Sys.Browser.InternetExplorer){var b=$get(this._controlIDToFocus);a=b;if(b&&!WebForm_CanFocus(b))a=WebForm_FindFirstFocusableChild(b);if(a&&typeof a.contentEditable!=="undefined"){d=a.contentEditable;a.contentEditable=false}else a=null}WebForm_AutoFocus(this._controlIDToFocus);if(a)a.contentEditable=d;this._controlIDToFocus=null}},_splitNodeIntoArray:function(b){var a=b.content,c=a.length?a.split(","):[];return c},_uniqueIDToClientID:function(a){return a.replace(/\$/g,"_")},_updateControls:function(d,a,c,b){this._commitControls(this._processUpdatePanelArrays(d,a,c),b)},_updatePanel:function(updatePanelElement,rendering){for(var updatePanelID in this._scriptDisposes)if(this._elementContains(updatePanelElement,document.getElementById(updatePanelID))){var disposeScripts=this._scriptDisposes[updatePanelID];for(var i=0,l=disposeScripts.length;i<l;i++)eval(disposeScripts[i]);delete this._scriptDisposes[updatePanelID]}this._destroyTree(updatePanelElement);updatePanelElement.innerHTML=rendering},_validPosition:function(a){return typeof a!=="undefined"&&a!==null&&a!==0}};Sys.WebForms.PageRequestManager.getInstance=function(){var a=Sys.WebForms.PageRequestManager._instance;if(!a)a=Sys.WebForms.PageRequestManager._instance=new Sys.WebForms.PageRequestManager;return a};Sys.WebForms.PageRequestManager._addArrayElement=function(a){if(!window[a])window[a]=[];for(var b=1,c=arguments.length;b<c;b++)Array.add(window[a],arguments[b])};Sys.WebForms.PageRequestManager._initialize=function(a,b){Sys.WebForms.PageRequestManager.getInstance()._initializeInternal(a,b)};Sys.WebForms.PageRequestManager.registerClass("Sys.WebForms.PageRequestManager");Sys.UI._UpdateProgress=function(a){Sys.UI._UpdateProgress.initializeBase(this,[a]);this._displayAfter=500;this._dynamicLayout=true;this._associatedUpdatePanelId=null;this._beginRequestHandlerDelegate=null;this._startDelegate=null;this._endRequestHandlerDelegate=null;this._pageRequestManager=null;this._timerCookie=null};Sys.UI._UpdateProgress.prototype={get_displayAfter:function(){return this._displayAfter},set_displayAfter:function(a){this._displayAfter=a},get_dynamicLayout:function(){return this._dynamicLayout},set_dynamicLayout:function(a){this._dynamicLayout=a},get_associatedUpdatePanelId:function(){return this._associatedUpdatePanelId},set_associatedUpdatePanelId:function(a){this._associatedUpdatePanelId=a},_clearTimeout:function(){if(this._timerCookie){window.clearTimeout(this._timerCookie);this._timerCookie=null}},_handleBeginRequest:function(d,c){var a=c.get_postBackElement(),b=!this._associatedUpdatePanelId;while(!b&&a){if(a.id&&this._associatedUpdatePanelId===a.id)b=true;a=a.parentNode}if(b)this._timerCookie=window.setTimeout(this._startDelegate,this._displayAfter)},_startRequest:function(){if(this._pageRequestManager.get_isInAsyncPostBack())if(this._dynamicLayout)this.get_element().style.display="block";else this.get_element().style.visibility="visible";this._timerCookie=null},_handleEndRequest:function(){if(this._dynamicLayout)this.get_element().style.display="none";else this.get_element().style.visibility="hidden";this._clearTimeout()},dispose:function(){if(this._beginRequestHandlerDelegate!==null){this._pageRequestManager.remove_beginRequest(this._beginRequestHandlerDelegate);this._pageRequestManager.remove_endRequest(this._endRequestHandlerDelegate);this._beginRequestHandlerDelegate=null;this._endRequestHandlerDelegate=null}this._clearTimeout();Sys.UI._UpdateProgress.callBaseMethod(this,"dispose")},initialize:function(){Sys.UI._UpdateProgress.callBaseMethod(this,"initialize");this._beginRequestHandlerDelegate=Function.createDelegate(this,this._handleBeginRequest);this._endRequestHandlerDelegate=Function.createDelegate(this,this._handleEndRequest);this._startDelegate=Function.createDelegate(this,this._startRequest);if(Sys.WebForms&&Sys.WebForms.PageRequestManager)this._pageRequestManager=Sys.WebForms.PageRequestManager.getInstance();if(this._pageRequestManager!==null){this._pageRequestManager.add_beginRequest(this._beginRequestHandlerDelegate);this._pageRequestManager.add_endRequest(this._endRequestHandlerDelegate)}}};Sys.UI._UpdateProgress.registerClass("Sys.UI._UpdateProgress",Sys.UI.Control);
Type.registerNamespace('Sys.WebForms');Sys.WebForms.Res={"PRM_UnknownToken":"Unknown token: \u0027{0}\u0027.","PRM_MissingPanel":"Could not find UpdatePanel with ID \u0027{0}\u0027. If it is being updated dynamically then it must be inside another UpdatePanel.","PRM_ServerError":"An unknown error occurred while processing the request on the server. The status code returned from the server was: {0}","PRM_ParserError":"The message received from the server could not be parsed. Common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled.\r\nDetails: {0}","PRM_TimeoutError":"The server request timed out.","PRM_ParserErrorDetails":"Error parsing near \u0027{0}\u0027.","PRM_CannotRegisterTwice":"The PageRequestManager cannot be initialized more than once."};
Type.registerNamespace("CoStar.Web.Controls");

CoStar.Web.Controls.ControlBase = function(element)
{
    //init the event args object
    CoStar.Web.Controls.ControlBase.initializeBase(this,[element]);
    
    this._currentApplicationCultureCode = null;
    this._currentUserCultureCode = null;
    this._aryValues = null;
}

CoStar.Web.Controls.ControlBase.prototype = 
{
    get_CurrentUserCultureCode:function()
    {
        return this._currentUserCultureCode;
    },
    set_CurrentUserCultureCode:function(val)
    {
        this._currentUserCultureCode = val;
    },
    get_CurrentApplicationCultureCode:function()
    {
        return this._currentApplicationCultureCode;
    },
    set_CurrentApplicationCultureCode:function(val)
    {
        this._currentApplicationCultureCode = val;
    },
    
    get_aryValues:function()
    {
       return this._aryValues;
    },

    set_aryValues:function(val)
    {
       this._aryValues=val;
    }
}

CoStar.Web.Controls.ControlBase.registerClass("CoStar.Web.Controls.ControlBase", Sys.UI.Control);

CoStar.Web.Controls.ControlEventArgsBase = function()
{
    //init the event args object
    CoStar.Web.Controls.ControlEventArgsBase.initializeBase(this);
    
    this._isUserSelected = false;
    this._values         = null;
}

CoStar.Web.Controls.ControlEventArgsBase.prototype = 
{
    get_IsUserSelected:function()
    {
        return this._IsUserSelected;
    },
    set_IsUserSelected:function(val)
    {
        this._IsUserSelected = val;
    },
    get_Values:function()
    {
        return this._currentApplicationCultureCode;
    },
    set_Values:function(val)
    {
        this._currentApplicationCultureCode = val;
    }
}

CoStar.Web.Controls.ControlEventArgsBase.registerClass("CoStar.Web.Controls.ControlEventArgsBase", Sys.EventArgs);

var IE8 = Sys.Browser.agent === Sys.Browser.InternetExplorer && Sys.Browser.version === 8;
var SAFARI = (navigator.userAgent.indexOf('WebKit/') > -1);

// To trim a string
String.prototype.trim = function() {
    return this.replace(/^\s+|\s+$/g, "");
}
String.isNullOrEmpty = function(value) {
    if (value) {
        if (typeof (value) == 'string') {
            if (value.length > 0)
                return false;
        }
    }
    return true;
}

function getWindowWidth() {
    var windowWidth = 0;
    if (self.innerWidth)
        windowWidth = self.innerWidth;
    else if (document.documentElement && document.documentElement.clientWidth)
        windowWidth = document.documentElement.clientWidth;
    else if (document.body)
        windowWidth = document.body.clientWidth;
    return windowWidth;
}

function getWindowHeight() {
    var windowHeight = 0;
    if (self.innerHeight)
        windowHeight = self.innerHeight;
    else if (document.documentElement && document.documentElement.clientHeight)
        windowHeight = document.documentElement.clientHeight;
    else if (document.body)
        windowHeight = document.body.clientHeight;
    return windowHeight;
}

function scrollTop() {
    return filterResults(
        window.pageYOffset ? window.pageYOffset : 0,
        document.documentElement ? document.documentElement.scrollTop : 0,
        document.body ? document.body.scrollTop : 0
    );
}

function filterResults(currentWindow, currentDocumentElement, currentBody) {
    var result = currentWindow ? currentWindow : 0;
    if (currentDocumentElement && (!result || (result > currentDocumentElement)))
        result = currentDocumentElement;
    return currentBody && (!result || (result > currentBody)) ? currentBody : result;
}

function findPosX(obj) {
    var curleft = 0;
    if (obj.offsetParent)
        while (1) {
        curleft += obj.offsetLeft;
        if (obj.nodeName === "TABLE")
            break;
        obj = obj.offsetParent;
        if (!obj.offsetParent)
            break;
    }
    else if (obj.x)
        curleft += obj.x;
    return curleft;
}
function findPosY(obj) {
    var curtop = 0;
    if (obj.offsetParent)
        while (1) {
        curtop += obj.offsetTop;
        if (obj.nodeName === "TABLE")
            break;
        obj = obj.offsetParent;
        if (!obj.offsetParent)
            break;
    }
    else if (obj.y)
        curtop += obj.y;
    return curtop;
}


function ShowLoader() {
    var loaderCtl = document.getElementById('divShowCaseProgress');
    var ANIMATION_WIDTH = 128;
    var ANIMATION_HEIGHT = 16;
    if (loaderCtl != null) {
        loaderCtl.style.top = scrollTop() + (getWindowHeight() / 2) - (ANIMATION_HEIGHT / 2) + "px";
        loaderCtl.style.left = (getWindowWidth() / 2) - (ANIMATION_WIDTH / 2) + "px";
        loaderCtl.style.display = 'block';
        if (IE8) {
            loaderCtl.style.visibility = 'visible';
        }
    }
}

function HideLoader() {
    var loaderCtl = document.getElementById('divShowCaseProgress');
    if (loaderCtl != null) {
        loaderCtl.style.display = 'none';
        if (IE8) {
            loaderCtl.style.visibility = 'hidden';
        }
    }
}

/* Show the progress bar inline/generic based on the layout. Horizontal - inline, Verical - generic */
function ShowSearchControlLoader(isHorizontal) {
    
    // JMH: Originally this method compared a string to a boolean,
    // so the HideLoader() method was always called. You need to ensure
    // that strings are converted to booleans when comparing values.
    var flag = new Boolean(isHorizontal);
    
    //For vertical layout use the Generic loader
    if (flag == true) {
        var countrySelectorCtl = document.getElementById('countrySelection');
        if (countrySelectorCtl != null) {
            countrySelectorCtl.style.display = 'none';
        }

        var loaderCtl = document.getElementById('progress');
        if (loaderCtl != null) {
            loaderCtl.style.display = 'block';
            if (IE8) {
                loaderCtl.style.visibility = 'visible';
            }
        }
    }
    else {
        ShowLoader();
    }
}

/* Hide the progress bar inline/generic based on the layout. Horizontal - inline, Verical - generic */
function HideSearchControlLoader(isHorizontal) {

    // JMH: Originally this method compared a string to a boolean,
    // so the HideLoader() method was always called. You need to ensure
    // that strings are converted to booleans when comparing values.
    var flag = new Boolean(isHorizontal);
    
    //For vertical layout use the Generic loader
    if (flag == true) {
        var countrySelectorCtl = document.getElementById('countrySelection');
        if (countrySelectorCtl != null) {
            countrySelectorCtl.style.display = 'block';
        }

        var loaderCtl = document.getElementById('progress');
        if (loaderCtl != null) {
            loaderCtl.style.display = 'none';
            if (IE8) {
                loaderCtl.style.visibility = 'hidden';
            }
        }
    }
    else {
        HideLoader();
    }
}

function CheckBrowser(strmsg) {
    if (!(Sys.Browser.agent === Sys.Browser.InternetExplorer && Sys.Browser.version >= 6)) {
        alert(strmsg);
        return false;
    }
    else {
        return true;
    }
}
function RemoveBackground(elementId) {
    var element = $get(elementId);
    if (element !== null) {
        element.style.background = 'none';
    }
}


function toggleVisibility(element, isVisible) {
    if (element !== null) {
        var className = element.className;
        if (!String.isNullOrEmpty(className)) {
            // TODO: Add code to append or remove the correct css class name.
        }
        element.className = (isVisible) ? 'visible' : 'collapsed';
    }
}
window.onresize = function() { setPageHeight(null); }
var SAFARI = (navigator.userAgent.indexOf('WebKit/') > -1);

// To determine that browser is IE or not
var IE = document.all ? true : false;
var IE6 = IsIEVersion6();
var IE8 = Sys.Browser.agent === Sys.Browser.InternetExplorer && Sys.Browser.version === 8;
//If the firefox of version 3 then true else false.
var FF = Sys.Browser.agent === Sys.Browser.Firefox;
var FF3 = Sys.Browser.agent === Sys.Browser.Firefox && Sys.Browser.version === 3;
var FF2 = Sys.Browser.agent === Sys.Browser.Firefox && Sys.Browser.version === 2;
var SAFARI = (navigator.userAgent.indexOf('WebKit/') > -1);


function IsIEVersion6()
// Returns true if version of IE is 6.0 else false
{
    var versn = -1;
    if (navigator.appName == 'Microsoft Internet Explorer') {
        var uagent = navigator.userAgent;
        var regEx = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
        if (regEx.exec(uagent) != null)
            versn = parseFloat(RegExp.$1);
    }
    if (versn == 6.0)
        return true;
    else
        return false;
}

//Disable Broker stylesheet
//BrokerStyleSheet(false);  //Commented. Disable BrokerStyleSheet is applied in code behind (search & lister)

//Disable print styles by default
DisablePrintStyleSheet(true);

function validateRangeAvailable(minClientId, maxClientId, type) {
    var minBox = $get(minClientId);
    var maxBox = $get(maxClientId);

    if (minBox !== null && maxBox !== null) {
        // if either box is blank, there's no comparison to mkae.
        if (minBox.value === null || minBox.value == '') {
            return true;
        }

        if (maxBox.value === null || maxBox.value == '') {
            return true;
        }

        var minBoxValue = Number.parseInvariant(minBox.value);
        var maxBoxValue = Number.parseInvariant(maxBox.value);

        if (isNaN(minBoxValue)) {
            alert(minBox.value + " is not a valid number.");
            return false;
        }

        if (isNaN(maxBoxValue)) {
            alert(maxBox.value + " is not a valid number.");
            return false;
        }

        if (minBoxValue > maxBoxValue) {
            alert("Invalid " + type);
            // + "'s min value: " + minBoxValue + " is greater than your " + type + "'s max value: " + maxBoxValue
            return false;
        }
    }

    return true;
}

//Alerts if cookies are disabled
function checkIfCookieEnabled() {
    if (document.cookie === "") {
        alert("You must have cookie handling enabled on your browser in order to use CoStar's products. Your browser is currently set to disable cookie handling.\r\nPlease enable your cookies setting on your browser. For assistance, contact CoStar Support at 1-800-613-1303.");
    }
}

//Opens given URL in new browser window
function openNewWindow(url) {
    window.open(url);
}

function pageLoad() {
    if (IE8)
        setPageHeight(null);
}
var objdivSpaceListNode = null;
function FooterAlignmentIE8(divObj) {

    objdivSpaceListNode = divObj;
    if (divObj.parentNode.parentNode.AccordionBehavior._panes[divObj.parentNode._index].animation != null) {
        divObj.parentNode.parentNode.AccordionBehavior._panes[divObj.parentNode._index].animation.add_ended(function() { setPageHeight(null); });
    }
    else {
        setTimeout(function() { if (objdivSpaceListNode.parentNode.parentNode.AccordionBehavior._panes[objdivSpaceListNode.parentNode._index].animation != null) { objdivSpaceListNode.parentNode.parentNode.AccordionBehavior._panes[objdivSpaceListNode.parentNode._index].animation.add_ended(function() { setPageHeight(null); }) } }, 100);
    }
}

var ContentContainerDivObj = null;
/*////////////////////////////
Sets the Content div height based on the siteNavigation and footer height. 
The content height is set such that the footer is always displayed at the bottom 
of the browser or at the bottom of the content whichever is larger.
////////////////////////////*/
function setPageHeight(ContentContainerDivID) {
    var propertyMap = $get('divResultsMap');
    var objDivContent = $get('divContent');
    var objDivFooter = $get('divFooter');
    var objDivHeader = $get('divHeader');
    var objDivMaster = $get("divMaster");

    if (propertyMap === null) {
        // Moving DropDownNavigation control to the right to align with ImageNavigation control width while minimizing window in 1280 and in 1024 resolution.
        // Here, 995 is the window width in 1024 resolution & 550 is window width - width of DropDownNavigation control.
        //        var objDivDetailResultsHeader = $get('divDetailResultsHeader');
        //        if (objDivDetailResultsHeader !== null) {
        //            objDivDetailResultsHeader.style.left = 550 + parseInt((document.body.scrollWidth - 995) / 2) + "px";
        //        }
        if (objDivFooter !== null) {
            objDivFooter.style.display = 'block';
        }

        SafariFooterFix();

        if (IE) //If the browser is IE
        {
            if (objDivFooter !== null) {
                objDivFooter.style.position = 'absolute';
            }

            if (IE8) {

                if (objDivContent !== null && objDivFooter !== null) {
                    objDivContent.className = "floatLeft";
                    if (objDivContent.offsetHeight > document.body.clientHeight) {
                        objDivFooter.style.top = objDivContent.offsetHeight + "px";
                    }
                    else {
                        objDivFooter.style.top = document.body.clientHeight - objDivFooter.offsetHeight + "px";
                    }

                    //Apply 'float:left' only for Search Results pages - To fix the whitespace b/w content & footer.
                    if ($get("divSearchResults") !== null) {
                        objDivContent.className = "floatLeft";
                    }
                    else {
                        objDivContent.className = "floatNone";
                    }
                }
                var objDivContainerIE8Center = $get('divContainerIE8Center');
                if (objDivContainerIE8Center !== null) {
                    if (995 < document.body.clientWidth) {
                        objDivContainerIE8Center.style.marginLeft = (document.body.clientWidth - 995) / 2 + "px";
                    }
                }
                //To have a Gray background for Lister - Detail page, and to have default background for CoStar Employee - state.
                if (objDivMaster !== null) {
                    if ($get("divPropertyDetailOuterContainer") !== null) {
                        objDivMaster.className = "divMaster";
                    }
                    else if (($get("divListerGatherCriteria") !== null) || ($get("listerRoundcontentBlockRight") !== null)) {
                        objDivMaster.className = "divMasterRelative";
                    }
                }
            }
            if (objDivContent !== null && objDivFooter !== null && $get('divContentGatherCriteria') === null) {
                objDivContent.style.paddingBottom = objDivFooter.offsetHeight + 'px';
            }

            if (objDivFooter !== null) {
                if (!IE8) {
                    if (IE6) {
                        objDivFooter.style.top = document.body.clientHeight - objDivFooter.offsetHeight + 'px';
                    }
                    else {
                        objDivFooter.style.bottom = '0px';
                    }
                }
            }
        }
        else//If the browser is Mozilla
        {
            if (ContentContainerDivID !== null) {
                ContentContainerDivObj = $get(ContentContainerDivID);
            }

            if (objDivContent !== null && objDivHeader !== null && objDivFooter !== null) {
                var BodyHeight = document.body.scrollHeight - objDivHeader.offsetHeight - (objDivFooter.offsetHeight);
                if (objDivContent.offsetHeight < document.body.scrollHeight) {
                    //objDivContent.style.height = BodyHeight + "px";
                }
            }
            //var HeaderDivBG = $get('divSearchShowCaseHeaderBG');
            //var GatherCriteriaDiv = $get('divContentGatherCriteria');
            var ContentDivExclHeader = $get('divContentExclHeader');
            var HeaderContainer = $get('divShowcaseHeaderInnerContainer');
            //This script is to place the gather criteria content to center when viewed 
            //in FF for higher resolution.
            //            if (GatherCriteriaDiv !== null) {
            //                if (HeaderDivBG !== null) {
            //                    HeaderDivBG.style.position = "absolute";
            //                    HeaderDivBG.style.width = "100%";
            //                }
            //                GatherCriteriaDiv.className = "divContentExclHeader";
            //                GatherCriteriaDiv.style.marginTop = "80px";
            //                if (GatherCriteriaDiv.offsetWidth < document.body.scrollWidth) {
            //                    GatherCriteriaDiv.style.marginLeft = parseInt((document.body.scrollWidth - GatherCriteriaDiv.offsetWidth) / 2) + "px";
            //                }
            //            }

            if (ContentContainerDivObj !== null)
                ContentContainerDivObj.style.visibility = "visible";


            //This script is to place the pagenaigation and sort controls in correct position
            //in FF for higher resolution.
            //            if (Sys.Browser.agent === Sys.Browser.Firefox) {
            //                var divPGContainer = $get('divPageNaviContainer');
            //                if (divPGContainer !== null) {
            //                    divPGContainer.style.marginLeft = 261 + parseInt((document.body.scrollWidth - divPGContainer.offsetWidth) / 2) + "px";
            //                }
            //            }
        }
    }
    else {
        if (objDivFooter !== null) {
            objDivFooter.style.display = 'none';
        }
        if (objDivContent !== null) {
            objDivContent.style.paddingBottom = "0px";
        }
        //To position PropertyMap always at the left
        //        propertyMap.style.left = '5px';
        //        propertyMap.style.left = (5-findPosX(propertyMap)) + 'px';

    }

    //To position the interim page Content table in middle of the page
    var objTableInterim = $get('tableInterim');
    if (objTableInterim !== null && objDivHeader !== null && objDivFooter !== null) {
        var tablePadding = (document.body.offsetHeight - (objDivHeader.offsetHeight + objDivFooter.offsetHeight +
            objTableInterim.offsetHeight)) / 2;
        objTableInterim.style.marginTop = tablePadding + 'px';
    }

    //To position the Property No Longer available  Content in middle of the page
    var divPropNoLongerAvail = $get('DivPropNoLongerAvailContainerID');

    if (divPropNoLongerAvail !== null && objDivHeader !== null && objDivFooter !== null) {
        var pxltoPad = (document.body.offsetHeight -
        (objDivHeader.offsetHeight
        + objDivFooter.offsetHeight + divPropNoLongerAvail.offsetHeight + 80)) / 2;
        divPropNoLongerAvail.style.marginTop = pxltoPad + "px";
    }

    var emailPanel = $get('hdnEmailComponentPanel');
    if (emailPanel !== null) {
        if (emailPanel.value.trim().length > 0) {
            setEmailPanelPosition(emailPanel.value);
        }
    }
    var objDivEnlarge = $get('divEnlargedImageNavigation');
    var objTblEnlarge = $get('tableEnlargerdFloorPlan');
    if ((objDivEnlarge !== null && objDivEnlarge.style.display == 'block')
        || (objTblEnlarge !== null && objTblEnlarge.style.display == 'block')) {
        ShowEnlargedImagePanel('true');
    }

    var objhdnPrint = $get('hdnPrintControls');
    if (objhdnPrint !== null && objhdnPrint.value != "") {
        controlIds = objhdnPrint.value.split(';');
        ShowConfirmPrint(controlIds[0], controlIds[1]);
    }

    if (objDivFooter !== null) {
        objDivFooter.style.visibility = 'visible';
    }
}

function setErrorPageHeight() {
    window.onresize = function() { setErrorPageHeight(); }
    //To position the Error Content to the center of the page
    var divErrorContent = document.getElementById('divErrorContent');
    if (divErrorContent != null) {
        var offsetHeight = divErrorContent.offsetHeight;

        var divErrorHeader = document.getElementById('divErrorHeader');
        if (divErrorHeader != null) {
            offsetHeight = parseInt(offsetHeight, 10) + divErrorHeader.offsetHeight;
        }

        var divErrorFooter = document.getElementById('divErrorFooter');
        if (divErrorFooter != null) {
            offsetHeight = parseInt(offsetHeight, 10) + divErrorFooter.offsetHeight;
            if (document.body.offsetHeight > offsetHeight) {
                if (IE) //If the browser is IE
                {
                    divErrorFooter.style.position = 'absolute';
                    //divErrorContent.style.paddingBottom = divErrorFooter.offsetHeight + 'px';
                    if (!IE6) {
                        divErrorFooter.style.bottom = '0px';
                    }
                    else {
                        divErrorFooter.style.top = document.body.clientHeight - divErrorFooter.offsetHeight + 'px';
                    }
                }
            }
        }

        var pxltoPad = (document.body.offsetHeight - offsetHeight) / 2;
        if (pxltoPad > 0) {
            divErrorContent.style.marginTop = parseInt(pxltoPad) + "px";
            divErrorContent.style.marginBottom = parseInt(pxltoPad) + "px";
        }
        divErrorContent = null;
    }
}
function removeTabControlBorder(tabControlId) {
    var tabControl = document.getElementById(tabControlId);
    if (IE6 && tabControl != null) {
        tabControl.style.borderBottomColor = '#FFFFFF';
    }
}


function ButtonHoverStyles(ControlId, CSSClass) {
    if (document.getElementById(ControlId) != null) {
        document.getElementById(ControlId).className = CSSClass;
    }
}


/**************************** SearchCriteria.ascx **********************************/
//For SearchCriteria.ascx - To disable watermark when an user clicks on any textbox 
//other than location textbox
function boxFocus(divControlId) {
    document.getElementById(divControlId).style.display = 'none';
}
var FocusedElement;
function ValidateEventsPopup(CalloutpopupBehavior, FocusElement) {
    setTimeout(function() { if (FocusElement != FocusedElement) { ShowCallOutPopup_Override(CalloutpopupBehavior); } }, 100);
    FocusedElement = "";
}

function ShowCallOutPopup_Override(calloutPopupBehavior) {
    if (calloutPopupBehavior._visible) {
        return;
    }
    var eventArgs = new Sys.CancelEventArgs;
    calloutPopupBehavior.raiseShowing(eventArgs);
    if (eventArgs.get_cancel()) {
        return;
    }
    calloutPopupBehavior._visible = true;
    var element = calloutPopupBehavior.get_element();
    $common.setVisible(element, true);
    calloutPopupBehavior.setupPopup();
    if (calloutPopupBehavior._onShow) {
        $common.setVisible(element, false);
        calloutPopupBehavior.onShow();
    } else {
        calloutPopupBehavior.raiseShown(Sys.EventArgs.Empty);
    }
}
var CalloutPopupsRegisterArray = new Array();
function SubscribeShowEvent_CallOutPopup(popupTableobj, FocusElement) {
    if (popupTableobj != null) {
        var contains = false;
        for (var nCount = 0; nCount < CalloutPopupsRegisterArray.length; nCount++) {
            if (CalloutPopupsRegisterArray[nCount] === popupTableobj)
                contains = true;
        }
        if (!contains) {

            CalloutPopupsRegisterArray.push(popupTableobj);
            popupTableobj.PopupBehavior.show = function() { ValidateEventsPopup(popupTableobj.PopupBehavior, FocusElement) };
        }

    }
}

//Hide the validator callout when the focus comes onto the textboxes 
//so,that it doesnot restrict the user to type in the search criteria value.
function hideValidatorCallout_Focus(divParentId, FocusElement) {
    FocusedElement = FocusElement;
    //To Do:Finding the client id in the server and trying to not use 
    //this hardcoded string "_rvce_popupTable"
    var calloutId = divParentId + "_rvce_popupTable";
    var calloutPopup = $get(calloutId);
    var IsImageIconObjValid = false;
    if (calloutPopup != null) {

        SubscribeShowEvent_CallOutPopup(calloutPopup, FocusElement);

        //Get the handle of callout balloon's close icon: Table.TBODY.TR.TD(3rd col).div(close img)
        var popupCloseButtonObj = calloutPopup;

        if (popupCloseButtonObj.childNodes.length > 0) {
            popupCloseButtonObj = popupCloseButtonObj.childNodes[0]; //TBody
            if (popupCloseButtonObj.childNodes.length > 0) {
                popupCloseButtonObj = popupCloseButtonObj.childNodes[0]; //TR          
                if (popupCloseButtonObj.childNodes.length > 0) {
                    popupCloseButtonObj = popupCloseButtonObj.childNodes[3]; //TD

                    if (popupCloseButtonObj.childNodes.length > 0) {
                        popupCloseButtonObj = popupCloseButtonObj.childNodes[0]; //Div(Close Image)
                        IsImageIconObjValid = true;
                    }
                }
            }

        }
        if (popupCloseButtonObj != null && IsImageIconObjValid) {
            if (IE) {
                var e = window.event;
                popupCloseButtonObj._events.click[0].browserHandler(e);
            }
            else {
                popupCloseButtonObj.id = "popUpCloseButton";
                var domObject = Sys.UI.DomElement.getElementById("popUpCloseButton", calloutPopup);
                var domEvent = new Sys.UI.DomEvent(domObject);
                domEvent.button = Sys.UI.MouseButton.leftButton;
                popupCloseButtonObj._events.click[0].browserHandler(domEvent);
            }
        }
    }
}

//For SearchCriteria.ascx - To disable watermark when an user clicks on location textbox
function boxLocationFocus(divControlId, textBoxId) {
    document.getElementById(divControlId).style.display = 'none';
    document.getElementById(textBoxId).focus();
}
//For SearchCriteria.ascx - To handle the watermark display for search controls
//and to deselect the content when the control goes out of scope.
function boxLocationBlur(divControlId, textBoxId) {
    var txtControl = $get(textBoxId);
    if (txtControl != null) {
        txtControl.value = txtControl.value;
    }
    setTimeout("toggleWatermark('" + divControlId + "', '" + textBoxId + "')", 100);
}

//For Search Criteria.ascx -To handle the wtermark initially when the page loads
function initializeWatermark(divControlId, textBoxId) {
    toggleWatermark(divControlId, textBoxId);
    setTimeout("toggleWatermark('" + divControlId + "', '" + textBoxId + "')", 100);
}
//For SearchCriteria.ascx - To handle the watermark display for search controls
function boxBlur(divControlId, textBoxId) {
    setTimeout("toggleWatermark('" + divControlId + "', '" + textBoxId + "')", 100);
}
//For SearchCriteria.ascx - To show/hide watermark for a control on blur event
function toggleWatermark(divControlId, textBoxId) {
    var txtControl = document.getElementById(textBoxId);
    var divControl = document.getElementById(divControlId);
    if (divControl != null) {
        if (txtControl != null && txtControl.value == "") {
            divControl.style.display = 'block';
        }
        else {
            divControl.style.display = 'none';
        }
    }
    txtControl = null;
    divControl = null;
}

//For restricting special characters in Location text box
function restrictSpecialCharacters(e) {
    if (IE) {
        var charKeyPressed = event.keyCode;
        //(A to Z) or (a to z) or (0 to 9) or . or space or ( or ) or ,
        if (!((charKeyPressed >= 65 && charKeyPressed <= 90) || (charKeyPressed >= 97 && charKeyPressed <= 122) ||
            (charKeyPressed >= 48 && charKeyPressed <= 57) || charKeyPressed == 46 || charKeyPressed == 32 ||
             charKeyPressed == 40 || charKeyPressed == 41 || charKeyPressed == 44 || charKeyPressed == 45))
            return false;
    }
    else {
        var charKeyPressed = e.charCode;
        var splKeyPressed = e.keyCode;
        //(A to Z) or (a to z) or (0 to 9) or . or space or ( or ) or ,
        if (!((charKeyPressed >= 65 && charKeyPressed <= 90) || (charKeyPressed >= 97 && charKeyPressed <= 122) ||
            (charKeyPressed >= 48 && charKeyPressed <= 57) || charKeyPressed == 46 || charKeyPressed == 32 ||
             charKeyPressed == 40 || charKeyPressed == 41 || charKeyPressed == 44 || charKeyPressed == 45 || (splKeyPressed > 0 && splKeyPressed != 13)))
            return false;
    }
}

//Validate the Location text before submitting the search [to take care of pasted text also. (Cntrl - V)]
function submitSearch(clientId, searchBtnClientId) {
    var txtBox = $get(clientId);
    if (txtBox !== null) {
        if (txtBox.value != htmlEncode(txtBox.value)) {
            alert('Please enter a valid location.');
            return false;
        }
        else {
            if (searchBtnClientId !== null) {
                var SearchButtonClientObject = $get(searchBtnClientId);
                if (SearchButtonClientObject != null) {
                    DisableSearchButton(SearchButtonClientObject);
                    ClearSearchMessage();
                }
                return true;
            }
        }
    }
    return false;
}

function SubscribeKeyDownEvent(functionName) {
    //document.attachEvent("onkeydown",eval(functionName)); 
    if (document.addEventListener) {
        document.addEventListener('keydown', eval(functionName), false);
    }
    else if (document.attachEvent) {
        document.attachEvent('onkeydown', eval(functionName));
    }
}
function UnSubscribeKeyDownEvent(functionName) {
    //document.detachEvent("onkeydown",eval(functionName));
    if (document.removeEventListener) {
        document.removeEventListener('keydown', eval(functionName), false);
    }
    else if (document.detachEvent) {
        document.detachEvent('onkeydown', eval(functionName));
    }
}
var globalVarStoreSearchButtonClientId = "";
function SearchButtonEnterKeyPress(e) {
    var KeyID = (window.event) ? event.keyCode : e.keyCode;
    if (KeyID == 13)//If Enter Key is pressed
    {
        if (globalVarStoreSearchButtonClientId != null && globalVarStoreSearchButtonClientId != "") {
            var SearchButtonClientObject = document.getElementById(globalVarStoreSearchButtonClientId);
            if (SearchButtonClientObject != null)
                if (!SearchButtonClientObject.disabled)//Not focusig the search button when it is disabled.
                SearchButtonClientObject.focus();
        }
    }
}
// For SearchCriteria.ascx - To disable the 'search' button after clicking it once
function DisableSearchButton(searchButton) {
    setTimeout(function() { if (Page_IsValid) { ShowLoader(); searchButton.disabled = true; } }, 1);
}

function EnableSearchButton(searchButton) {
    var btnSearch = $get(searchButton);
    if (btnSearch !== null) {
        btnSearch.disabled = false;
        SetCSSForButton(btnSearch);
    }
    HideLoader();
}
function SetCSSForButton(btnSearch) {
    if (btnSearch !== null && btnSearch.parentNode !== null) {
        if (btnSearch.disabled && btnSearch.parentNode.className == "btnSearchDiv") {
            btnSearch.parentNode.className = "btnSearchDivDisabled";
        }
        else if (!btnSearch.disabled && btnSearch.parentNode.className == "btnSearchDivDisabled") {
            btnSearch.parentNode.className = "btnSearchDiv";
        }
    }
}
//##Part of Location service integration 
// To persist that user has modified the location text
//function LocationChanged(prevLocationCtrl)
//{
//    document.getElementById(prevLocationCtrl).value = "";
//}

//This will be called when 'Search Now' is clicked
//Clears the SearchMessage, if the flag [hdnShouldClearMessage] is set to True.
//hdnShouldClearMessage is set to True, if the Search message has 'No properties found' or 'Exceeded..' message
function ClearSearchMessage() {
    if (Page_IsValid) {
        var searchMessage = document.getElementById('divMessage');
        var hdnShouldClearMessage = document.getElementById('hdnShouldClearMessage');

        if (hdnShouldClearMessage != null && searchMessage != null) {
            if (hdnShouldClearMessage.value != null && hdnShouldClearMessage.value == 'True') {
                searchMessage.innerHTML = "";
            }
        }
        hdnShouldClearMessage = null;
        searchMessage = null;
    }
}

//Used to set the hdnShouldClearMessage flag - Used in SearchMessages.ascx.cs
function SetClearMessageOnSearchFlag(flag) {
    var hdnShouldClearMessage = $get('hdnShouldClearMessage');
    if (hdnShouldClearMessage != null) {
        hdnShouldClearMessage.value = flag;
    }
    hdnShouldClearMessage = null;
}

/**************************** End of  SearchCriteria.ascx **********************************/

//To check all items in the property list
function toggleCheckAll(checkAllCtrl) {
    propertiesGrid = document.getElementById('divMainResultsGrid');
    if (IE) {
        for (i = 0; i < propertiesGrid.childNodes.length; i++) {
            propertiesGrid.childNodes[i].childNodes[0].childNodes[0].checked = checkAllCtrl.checked;
        }
    }
    else {
        for (i = 1; i < propertiesGrid.childNodes.length; i = i + 2) {
            if (propertiesGrid.childNodes[i].childNodes[1].childNodes[1] != null) {
                propertiesGrid.childNodes[i].childNodes[1].childNodes[1].checked = checkAllCtrl.checked;
            }
        }
    }
}
//When all properties in the result grid are selected then selectall should get checked
//When atleast one property get unchecked then select all also should get unchecked.
//This function is triggered by all checkbox's click in the summaryResults Template.
function CheckAllStatusChange() {

    var SelectAllObj = document.getElementById(document.getElementById('hdnSelectAllClientId').value);
    var propertiesGridObj = document.getElementById('divMainResultsGrid');
    var ChkBoxSelectedFlag = true;
    if (SelectAllObj != null) {
        if (IE) {
            for (i = 0; i < propertiesGridObj.childNodes.length; i++) {
                if (!propertiesGridObj.childNodes[i].childNodes[0].childNodes[0].checked) {
                    ChkBoxSelectedFlag = false;
                    break;
                }
            }
        }
        else {
            for (i = 1; i < propertiesGridObj.childNodes.length; i = i + 2) {
                if (propertiesGridObj.childNodes[i].childNodes[1].childNodes[1] != null) {
                    if (!propertiesGridObj.childNodes[i].childNodes[1].childNodes[1].checked) {
                        ChkBoxSelectedFlag = false;
                        break;
                    }
                }
            }
        }
        SelectAllObj.checked = ChkBoxSelectedFlag;
    }

}

/******Search Result-Control Scripts*************/
function RemoveNode(nodeToRemove) {
    var hdnNodeToRemove = document.getElementById('hdnNodeToRemove');
    if (hdnNodeToRemove != null) {
        hdnNodeToRemove.value = nodeToRemove;
    }
}
/******End of Search Result-Control Scripts*************/

/******LabelDropDown control scripts*************/

var dropDownElements = null;
var diableDocumentClick = false;
function initializeDropDown(curElement) {
    if (dropDownElements == undefined) {
        dropDownElements = new Array();
        document.onclick = hideDropDown;
    }
    dropDownElements.push(curElement);
}

function hideDropDown(excludePanel) {
    if (!diableDocumentClick) {
        if (dropDownElements != undefined && dropDownElements != null) {
            for (count = 0; count < dropDownElements.length; count++) {
                if (document.getElementById(dropDownElements[count]) != null && dropDownElements[count] != excludePanel)
                    document.getElementById(dropDownElements[count]).style.display = 'none';
            }
        }
    }
    else
        diableDocumentClick = false;
}

function showDropDown(currentPanel) {
    if (document.getElementById(currentPanel).style.display == 'none' || document.getElementById(currentPanel).style.display.trim() == '') {
        document.getElementById(currentPanel).style.display = 'block';
        hideDropDown(currentPanel);
        diableDocumentClick = true;
    }
}
/******End of LabelDropDown control scripts*************/

/*********************Common Scripts*****************************/
function showEmailPanel(backgroundPanel, emailPanel) {
    if (IE) {
        if (!IE8)
            document.getElementById(backgroundPanel).style.height = (document.getElementById('divMaster').offsetHeight > document.body.offsetHeight ? document.getElementById('divMaster').offsetHeight : document.body.offsetHeight) - 2 + "px";
        else
            document.getElementById(backgroundPanel).style.height = (document.getElementById('divMaster').offsetHeight > document.body.scrollHeight ? document.getElementById('divMaster').offsetHeight : document.body.scrollHeight) - 2 + "px";
    }
    else
        document.getElementById(backgroundPanel).style.height = document.getElementById('divHeader').clientHeight + ContentContainerDivObj.clientHeight + document.getElementById('divFooter').clientHeight + "px";

    setEmailPanelPosition(emailPanel);
}
function setEmailPanelPosition(emailPanel) {
    var emailPanelControl = document.getElementById(emailPanel);
    emailPanelControl.style.top = scrollTop() + (getWindowHeight() / 2) - 160 + "px";
    emailPanelControl.style.paddingLeft = (getWindowWidth() / 2) - 330 + "px";
    emailPanelControl.style.display = 'block'
}



//function EnableIE6StyleSheet(flag)
//{
//    var count = document.styleSheets.length;
//    for(var i = 0; i < count; i++)
//    {        
//        var styleSheet = document.styleSheets[i];        
//        if(styleSheet.href != null && styleSheet.href.indexOf('_IE6') > 0)
//        {
//            styleSheet.disabled = !flag;
//        }        
//    }
//}

//function EnableFF3StyleSheet(flag)
//{
//    var count = document.styleSheets.length;
//    for(var i = 0; i < count; i++)
//    {        
//        var styleSheet = document.styleSheets[i];        
//        if(styleSheet.href != null && styleSheet.href.indexOf('_FF3') > 0)
//        {
//            styleSheet.disabled = flag;
//        }        
//    }
//}

//function to enable/disable stylesheet for the broker page
function BrokerStyleSheet(enable) {
    var count = document.styleSheets.length;
    for (var i = 0; i < count; i++) {
        var styleSheet = document.styleSheets[i];
        if (styleSheet.href != null && styleSheet.href.indexOf('_Broker') > 0) {
            styleSheet.disabled = !enable;
        }
    }
}
/*********************End of common scipts*****************************/

/*********************Scripts for HTML-print*****************************/
function DisablePrintStyleSheet(flag) {
    var count = document.styleSheets.length;
    for (var i = 0; i < count; i++) {
        var styleSheet = document.styleSheets[i];
        if (styleSheet.href != null && styleSheet.href.indexOf('_Print') > 0) {
            styleSheet.disabled = flag;
        }
    }
}

function PrintDocument() {
    var printDiv = $get("divMasterPrint");
    if (printDiv) {
        var printDivParent = printDiv.parentNode;
        if (printDivParent && printDivParent.id == "divMaster") {
            printDivParent.removeChild(printDiv);
            document.getElementsByTagName("body")[0].appendChild(printDiv);
        }
    }

    DisablePrintStyleSheet(false);
    HideLoader();
    window.print();
    if (IE) {
        /*DisablePrintStyleSheet(true);
        if($get('divSelectedPrintProperties') != null)
        $get('divSelectedPrintProperties').innerHTML = '';*/
        DisablePrintCSSinFF();
    }
    else {
        //changed the delay to 60000 to handle the blank page print issues.   
        setTimeout("DisablePrintCSSinFF()", 60000);
    }
}

function DisablePrintCSSinFF() {
    DisablePrintStyleSheet(true);
    if ($get('divSelectedPrintProperties') != null)
        $get('divSelectedPrintProperties').innerHTML = '';
}

function GetPrintHtml(controlId, hiddenControl) {
    var control = document.getElementById(controlId)
    if (control != null) {
        document.getElementById(hiddenControl).value = htmlEncode(control.innerHTML);
    }
}

function htmlEncode(source) {
    var result = source;
    // ampersands (&)
    result = result.replace(/\&/g, '&amp;');
    // less-thans (<)
    result = result.replace(/\</g, '&lt;');
    // greater-thans (>)
    result = result.replace(/\>/g, '&gt;');
    // Replace quotes if it isn't for display,
    result = result.replace(new RegExp('"', 'g'), '&quot;');
    return result;
}
/*********************End of scripts for HTML print*****************************/
var divDetailResultsHeaderClientID = "divDetailResultsHeader";
function showDDLNavigation() {
    if (IE) {
        if (IE6) {

            var ddlNavigationControl = document.getElementById('divDDLNavigation');
            if (ddlNavigationControl != null) {
                ddlNavigationControl.style.display = 'block';
            }
            ddlNavigationControl = null;
        }
        var divDetailResultsHeader = document.getElementById(divDetailResultsHeaderClientID);
        if (divDetailResultsHeader != null) {
            divDetailResultsHeader.style.zIndex = '2';
        }
        divDetailResultsHeader = null;
    }
}
function hideDDLNavigation() {
    if (IE) {
        if (IE6) {
            var ddlNavigationControl = document.getElementById('divDDLNavigation');
            if (ddlNavigationControl != null) {
                ddlNavigationControl.style.display = 'none';
            }
            ddlNavigationControl = null;
        }
        var divDetailResultsHeader = document.getElementById(divDetailResultsHeaderClientID);
        if (divDetailResultsHeader != null) {
            divDetailResultsHeader.style.zIndex = '-1';
        }
        divDetailResultsHeader = null;
    }
}

function enableDDLNavigation() {
    if (IE6) {
        var ddlNavigationCtrl = $find('dropDownNavigationObj');
        if (ddlNavigationCtrl != null) {
            ddlNavigationCtrl.enableDropDown();
        }
    }
}
function disableDDLNavigation() {
    if (IE6) {
        var ddlNavigationCtrl = $find('dropDownNavigationObj')
        if (ddlNavigationCtrl != null) {
            ddlNavigationCtrl.disableDropDown();
        }
    }
}


function PopupWindow(url, windowname) {
    window.open(url, windowname, "directories=0, location=0, menubar=0, status=1, toolbar=0, resizable=1");
    return false;
}

function SpaceList_SetEventArgs(eventSource, eventName, eventArgs) {
    ShowLoader();
    var ctlEventHolder = document.getElementById('divSpaceListEventHolder');
    var childNodesCount = ctlEventHolder.childNodes.length;
    for (var i = 0; i < childNodesCount; i++) {
        var child = ctlEventHolder.childNodes[i];
        if (child.nodeName.toUpperCase() == "INPUT") {
            if (child.id.indexOf("hdnEventSource") > 0) {
                child.value = eventSource;
            }
            else if (child.id.indexOf("hdnEventName") > 0) {
                child.value = eventName;
            }
            else if (child.id.indexOf("hdnEventArgs") > 0) {
                child.value = eventArgs;
            }
        }
        child = null;
    }
    ctlEventHolder = null;

    return true;
}


function SetImageUrl(imageId, url) {
    document.getElementById(imageId).src = url;
}



///************************************* Enlarged Popup (Image Navigation) *************************************///
//    function ShowEnlargedImagePanel(isWindowResized)
//    {
//        ShowEnlargedImagePanelCommon(isWindowResized, false);
//    }

//    function ListerShowEnlargedImagePanel(isWindowResized)
//    {
//        ShowEnlargedImagePanelCommon(isWindowResized, true);
//    }

function GetTotalDivOffsetTop(divObj, countAll) {
    if ((typeof (countAll) != "boolean") || (countAll == null)) {
        countAll = false;
    }

    if (IE) {
        if ((typeof (divObj.offsetParent) != "undefined") && (divObj.offsetParent != null) &&
                (countAll || ((CoStar.Controls.DomElement.getCurrentStyle(divObj.offsetParent, 'position') != "relative") && (CoStar.Controls.DomElement.getCurrentStyle(divObj.offsetParent, 'position') != "absolute")))) {
            return GetTotalDivOffsetTop(divObj.offsetParent, countAll) + divObj.offsetTop;
        }
        else {
            return divObj.offsetTop;
        }
    }
    else {
        if ((typeof (divObj.offsetParent) != "undefined") && (divObj.offsetParent != null) &&
                (countAll || (CoStar.Controls.DomElement.getCurrentStyle(divObj.offsetParent, 'position') != "relative"))) {
            return GetTotalDivOffsetTop(divObj.offsetParent, countAll) + divObj.offsetTop;
        }
        else {
            return divObj.offsetTop;
        }
    }

}

function GetTotalDivOffsetLeft(divObj, countAll) {
    if ((typeof (countAll) != "boolean") || (countAll == null)) {
        countAll = false;
    }

    if (IE) {
        if ((typeof (divObj.offsetParent) != "undefined") && (divObj.offsetParent != null) &&
                (countAll || ((CoStar.Controls.DomElement.getCurrentStyle(divObj.offsetParent, 'position') != "relative") && (CoStar.Controls.DomElement.getCurrentStyle(divObj.offsetParent, 'position') != "absolute")))) {
            return GetTotalDivOffsetLeft(divObj.offsetParent, countAll) + divObj.offsetLeft;
        }
        else {
            return divObj.offsetLeft;
        }
    }
    else {
        if ((typeof (divObj.offsetParent) != "undefined") && (divObj.offsetParent != null) &&
                (countAll || (CoStar.Controls.DomElement.getCurrentStyle(divObj.offsetParent, 'position') != "relative"))) {
            return GetTotalDivOffsetLeft(divObj.offsetParent, countAll) + divObj.offsetLeft;
        }
        else {
            return divObj.offsetLeft;
        }
    }

}

// To show the enlarged image navigation panel when 'click to enlarge' link is clicked
function ShowEnlargedImagePanel(isWindowResized) {
    if (typeof (isWindowResized) == "boolean") {
        isWindowResized = isWindowResized.toString();
    }

    var divDetailContainer = $get("divPropertyDetailOuterContainer");
    var detailOffsetTop = 0;
    var detailOffsetLeft = 0;
    if (divDetailContainer !== null) {
        detailOffsetTop = GetTotalDivOffsetTop(divDetailContainer, true);
        detailOffsetLeft = GetTotalDivOffsetLeft(divDetailContainer, true);
    }
    var backgroundPanel = $get('divImgNavBackgroundTransp');
    var enlargedImagePanel = $get('tableImgNavEnlargedImage');
    var divEnlImgNav = $get('divEnlargedImageNavigation');
    var divEnlImageNavigationContent = $get('divEnlargedImageNavigationContent');
    var divImageNavHeader = $get('divImageNavigationHeader');
    var tableEnlFloorPlan = $get('tableEnlargerdFloorPlan')
    var bodyClientWidth = document.body.clientWidth;
    var windowHeight = getWindowHeight();
    var minimumPopupWidth = 1000;
    var minimumPopupHeight = 725;
    var extremesMargin = 8;
    var enlargedPopupMargin = detailOffsetTop;
    if ($get('SiteNavigation') != null) {
        enlargedPopupMargin = Math.max(detailOffsetTop - parseInt($get('SiteNavigation').clientHeight), 0);
    }
    //        var enlargedPopupMargin = parseInt($get('SiteNavigation').clientHeight);
    //        var mainShowCaseHeader = $get('divMainShowCaseHeader')
    //        if (mainShowCaseHeader !== null)
    //        {
    //            enlargedPopupMargin += parseInt(mainShowCaseHeader.offsetHeight);
    //        }


    var isListerPage = false;
    var listerDetail = $get('hdnIsListerDetail');
    if (listerDetail !== null)
        isListerPage = (listerDetail.value === "1");

    if (isListerPage) {
        minimumPopupWidth = 800;
        minimumPopupHeight = 600;
        extremesMargin = 20;
    }

    /********* Set margin top for background transparent and enlarged popup *********/
    if (enlargedPopupMargin > 0) {
        backgroundPanel.style.marginTop = "-" + enlargedPopupMargin.toString() + "px";
    }
    else {
        backgroundPanel.style.marginTop = "0px";
    }
    if (detailOffsetLeft > 0) {
        backgroundPanel.style.marginLeft = "-" + detailOffsetLeft.toString() + "px";
    }
    else {
        backgroundPanel.style.marginLeft = "0px";
    }



    var topStr = (-enlargedPopupMargin + scrollTop() + 4).toString() + "px";
    var leftStr = "0px";
    if (detailOffsetLeft > 0) {
        leftStr = "-" + detailOffsetLeft.toString() + "px";
    }

    if (!IE) {
        var ffTopSpace = GetTotalDivOffsetTop(divDetailContainer, false) - detailOffsetTop + scrollTop();
        if (ffTopSpace >= 0) {
            ffTopSpace = Math.max(ffTopSpace - 12, 0);
        }
        enlargedImagePanel.style.top = ffTopSpace.toString() + "px";

        if (divEnlImgNav != null) {
            divEnlImgNav.style.top = ffTopSpace.toString() + "px";
        }
    }
    else {
        if (isListerPage && IE6) {
            enlargedImagePanel.style.top = -enlargedPopupMargin + 20 + scrollTop() + "px"; // Need to move window down 20px
        }
        else {
            enlargedImagePanel.style.top = topStr;
            enlargedImagePanel.style.left = leftStr;
        }
    }
    /********* Set margin top for background transparent and enlarged popup *********/


    /********* Display for background transparent and enlarged popup *********/
    backgroundPanel.style.display = 'block';
    enlargedImagePanel.style.display = 'block';
    if (divEnlImgNav != null)
        divEnlImgNav.style.display = 'block';
    /********* Display for background transparent and enlarged popup *********/


    /********* Set Height and Width for background transparent and enlarged popup *********/
    if (IE) {
        if (!IE8)
            backgroundPanel.style.height = ($get('divMaster').offsetHeight > document.body.offsetHeight ? ($get('divMaster').offsetHeight + $get('divFooter').clientHeight) : document.body.offsetHeight) - 2 + "px";
        else
            backgroundPanel.style.height = ($get('divMaster').offsetHeight > document.body.scrollHeight ? ($get('divMaster').offsetHeight + $get('divFooter').clientHeight) : document.body.scrollHeight) - 2 + "px";
    }
    else
        backgroundPanel.style.height = $get('divHeader').clientHeight + ContentContainerDivObj.clientHeight + $get('divFooter').clientHeight + "px";

    if (isWindowResized == 'true') {
        if (IE && divEnlImageNavigationContent.clientWidth + parseInt(extremesMargin) >= bodyClientWidth) {
            bodyClientWidth = divEnlImageNavigationContent.clientWidth + parseInt(extremesMargin);
            windowHeight = divEnlImageNavigationContent.clientHeight + parseInt(extremesMargin);
        }
    }

    if (isWindowResized == 'false') {
        if (bodyClientWidth < minimumPopupWidth) bodyClientWidth = minimumPopupWidth;
        if (windowHeight < minimumPopupHeight) windowHeight = minimumPopupHeight;
    }
    else {
        if (windowHeight < minimumPopupHeight)
            windowHeight = minimumPopupHeight;
    }

    backgroundPanel.style.width = parseInt(bodyClientWidth) + "px";
    enlargedImagePanel.style.width = parseInt(bodyClientWidth) + "px";
    enlargedImagePanel.style.height = parseInt(windowHeight) + "px";
    /********* Set Height and Width for background transparent and enlarged popup *********/


    /********* Set Height and Width for enlarged popup content *********/
    if (isWindowResized == 'true' && !IE) {
        divEnlImageNavigationContent.style.width = divEnlImageNavigationContent.clientWidth + "px";
        divEnlImageNavigationContent.style.height = divEnlImageNavigationContent.clientHeight + "px";
    }

    if (isWindowResized == 'false') {
        divEnlImageNavigationContent.style.width = parseInt(bodyClientWidth) - parseInt(extremesMargin) + "px";
        divImageNavHeader.style.width = parseInt(bodyClientWidth) - parseInt(extremesMargin) + "px";

        divImageNavHeader.style.width = divImageNavHeader.clientWidth - 2 + "px";
        divEnlImageNavigationContent.style.height = parseInt(windowHeight) - parseInt(extremesMargin) + "px";

        if (divEnlImgNav != null) {
            divEnlImgNav.style.width = parseInt(bodyClientWidth) - parseInt(extremesMargin) + "px";
            divEnlImgNav.style.height = parseInt(windowHeight) - parseInt(extremesMargin) - 23 + "px";
        }
        else {
            divEnlImageNavigationContent.style.width = divEnlImageNavigationContent.clientWidth - 2 + "px";
            if (IE)
                tableEnlFloorPlan.style.height = divEnlImageNavigationContent.clientHeight - 23 + "px";
            else
                tableEnlFloorPlan.style.height = divEnlImageNavigationContent.clientHeight - 3 + "px";
            tableEnlFloorPlan.style.display = 'block';
        }
    }
    /********* Set Height and Width for enlarged popup content *********/


    /********* Set margin top for enlarged popup *********/
    if (!IE) {
        var panelMarginTop = parseInt(document.body.scrollTop) + (parseInt(enlargedImagePanel.clientHeight) - parseInt(divEnlImageNavigationContent.clientHeight)) / 2;
        if (divEnlImgNav != null) {
            divEnlImageNavigationContent.style.position = "relative";
            enlargedImagePanel.style.paddingTop = panelMarginTop + "px";
            //Issue fix for the image navigation background scroll bar in safari
            if (SAFARI) {
                divEnlImageNavigationContent.style.paddingLeft = (parseInt(enlargedImagePanel.clientWidth) - parseInt(divEnlImgNav.clientWidth)) / 2 + 1 + 'px';
            }
            else {
                enlargedImagePanel.style.paddingLeft = (parseInt(enlargedImagePanel.clientWidth) - parseInt(divEnlImgNav.clientWidth)) / 2 + 1 + 'px';
            }
        }
        else {
            enlargedImagePanel.style.paddingTop = panelMarginTop + "px";
            enlargedImagePanel.style.paddingLeft = (parseInt(enlargedImagePanel.clientWidth) - parseInt(divEnlImageNavigationContent.clientWidth)) / 2 + 1 + 'px';
        }
    }
    else {
        enlargedImagePanel.style.paddingLeft = '2px';
    }

    //TFS 18615 Image window in chrome is off screen
    if (SAFARI) {
        EnlargeImgPosWebKitBrowsers(enlargedImagePanel, tableEnlFloorPlan)
    }

    /********* Set margin top for enlarged popup *********/


    //Nullify Objects
    divDetailContainer = null;
    backgroundPanel = null;
    enlargedImagePanel = null;
    EnlargedImageNavigationPanel = null;
    isWindowResized = null;
    divEnlImgNav = null;
    divEnlImageNavigationContent = null;
    divImageNavHeader = null;
    tableEnlFloorPlan = null;
    bodyClientWidth = null;
    windowHeight = null;
    minimumPopupWidth = null;
    minimumPopupHeight = null;
    extremesMargin = null;
    //Nullify Objects
}

function ImgEnlargeFloorPlan_Load(imgId) {
    var floorPlanImage = $get(imgId)
    var tEnlargerdFloorPlan = $get('tableEnlargerdFloorPlan');

    if (tEnlargerdFloorPlan.clientHeight < 658) {
        ShowEnlargedImagePanel('false');
    }
    var marginTop = 0;
    if (IE) {
        marginTop = (tEnlargerdFloorPlan.clientHeight - floorPlanImage.clientHeight) / 2;
    }
    else {
        marginTop = (tEnlargerdFloorPlan.clientHeight - floorPlanImage.clientHeight) / 2 - 10;
    }
    if (marginTop < 0) {
        var divEnlImageNavigationContent = $get('divEnlargedImageNavigationContent');
        var divImageNavHeader = $get('divImageNavigationHeader');
        var headerHeight = 0;

        if (divEnlImageNavigationContent !== null && divImageNavHeader !== null) {
            headerHeight = divImageNavHeader.clientHeight;
        }

        if (divEnlImageNavigationContent !== null) {
            if (IE) {
                if (IE8) {
                    tEnlargerdFloorPlan.style.height = (floorPlanImage.clientHeight + 25) + "px";
                }
                else {
                    tEnlargerdFloorPlan.style.height = (floorPlanImage.clientHeight) + "px";
                }
                divEnlImageNavigationContent.style.height = (floorPlanImage.clientHeight + headerHeight + 4) + "px";
                divEnlImageNavigationContent.style.marginTop = "15px";
            }
            else {
                tEnlargerdFloorPlan.style.height = (floorPlanImage.clientHeight + 25) + "px";
                divEnlImageNavigationContent.style.height = (floorPlanImage.clientHeight + headerHeight + 4) + "px";
            }
        }
        marginTop = "0px";
    }
    else {
        marginTop = marginTop + "px";
    }
    floorPlanImage.style.marginTop = marginTop;
    floorPlanImage.style.visibility = 'visible';
}


// To confirm on progress image position for enlarged image navigation.
function UpdatePopupProgressPosition(controlId) {
    hdnPopupProgressPositionId = controlId.replace("lnkClickToEnlarge", "hdnPopupProgressPosition");
    if (hdnPopupProgressPositionId == controlId)
        hdnPopupProgressPositionId = controlId.replace("divTopImgNavigation", "hdnPopupProgressPosition");

    var windowHeight = getWindowHeight();
    var popupHeight = getWindowHeight();
    if (windowHeight < 600) {
        if (IE) popupHeight = 620;
        else popupHeight = 604;
    }

    document.getElementById(hdnPopupProgressPositionId).value = parseInt((popupHeight - 20) / 2) + "px";
}

///************************************* Enlarged Popup (Image Navigation) *************************************///



///************************************* More Results Grid *************************************///

function FindMoreResultsPositionY() {
    headerHeight = 103;
    var MoreResultRepeaterContainer = document.getElementById('divMoreResultsRepeaterContainer');
    var YPositionHdn = document.getElementById('hdnYPositions');
    if (MoreResultRepeaterContainer != null) {
        var firstIndexY = parseInt(findPosY(MoreResultRepeaterContainer));
        var lastIndexY = firstIndexY + parseInt(MoreResultRepeaterContainer.clientHeight);
        if (YPositionHdn != null) {
            YPositionHdn.value = firstIndexY + ";" + lastIndexY;
        }
    }

}

function getMouseMoreResultsGrid() {
    if (IE) getMouseXY();
    if (!IE) {
        document.captureEvents(Event.MOUSEMOVE)
        document.onmouseover = getMouseXY;
    }
}

function getMouseXY(e) {
    tempY = 0; headerHeight = 103;
    var YPositionHdn = document.getElementById('hdnYPositions');
    var MoreResultsPopUpMenu = document.getElementById('divMoreResultsPopupMenu');
    var firstY;
    var lastY;
    if (MoreResultsPopUpMenu != null && YPositionHdn != null) {
        firstY = YPositionHdn.value.split(';')[0];
        lastY = YPositionHdn.value.split(';')[1];
        if (IE) {
            if (screen.width <= 1024) {
                MoreResultsPopUpMenu.style.left = 115 + "px";
            }
            else {
                MoreResultsPopUpMenu.style.left = 245 + "px";
            }
        }
        else {
            MoreResultsPopUpMenu.style.left = 250 + "px";
        }
        MoreResultsPopUpMenu.style.display = 'block';

        var gridTop = parseInt(firstY, 10);
        var gridBottom = parseInt(lastY, 10);
        var popupHeight = MoreResultsPopUpMenu.clientHeight;
        var popupTop = 0;
        var popupBottom = 0;

        if (IE) {
            tempY = window.event.y + document.body.scrollTop;
        }
        else {
            tempY = e.pageY;
        }

        popupTop = tempY - (popupHeight / 2);
        popupBottom = popupTop + popupHeight;

        if ((gridBottom - gridTop) < popupHeight) {
            popupTop = gridBottom - popupHeight;
        }
        else if (popupTop < gridTop) {
            popupTop = gridTop;
        }
        else if (popupBottom > gridBottom) {
            popupTop = gridBottom - popupHeight;
        }

        MoreResultsPopUpMenu.style.top = popupTop + "px";
    }
}

function DisplayMoreResultsGridPopupMenu() {
    var MoreResultsPopUpMenu = document.getElementById('divMoreResultsPopupMenu');
    if (MoreResultsPopUpMenu != null) {
        MoreResultsPopUpMenu.style.display = 'block';
    }
}
function HideMoreResultsGridPopupMenu() {
    var MoreResultsPopUpMenu = document.getElementById('divMoreResultsPopupMenu');
    if (MoreResultsPopUpMenu != null) {
        MoreResultsPopUpMenu.style.display = 'none';
    }
}
function DisableMoreResultsMouseOver() {
    var MoreResultsPopUpMenu = document.getElementById('divMoreResultsPopupMenu');
    if (MoreResultsPopUpMenu != null) {
        if (!IE && MoreResultsPopUpMenu.style.display == 'none') {
            document.onmouseover = null;
        }
    }
} ///************************************* More Results Grid *************************************///


///************************************* Confirm Print *************************************///

function PropertyDetailFlyerImage_OnLoad() {
    if (document.getElementById('hdnPrintControls').value != "") {
        backGroundControlId = document.getElementById('hdnPrintControls').value.split(';')[0];
        pnlPrintDialogId = document.getElementById('hdnPrintControls').value.split(';')[1];

        if (document.getElementById(backGroundControlId) != null && document.getElementById(pnlPrintDialogId) != null) {
            ShowConfirmPrint(backGroundControlId, pnlPrintDialogId);
            document.getElementById(pnlPrintDialogId).style.visibility = 'visible';
        }
    }

    // Nullify objects
    backGroundControlId = null;
    pnlPrintDialogId = null;
    // Nullify objects

}

function ShowConfirmPrint(backGroundControlId, pnlPrintDialogId) {
    document.getElementById('hdnPrintControls').value = backGroundControlId + ";" + pnlPrintDialogId;

    backgroundPanel = document.getElementById(backGroundControlId);
    pnlPrintDialog = document.getElementById(pnlPrintDialogId);

    if (!IE) {
        backgroundPanel.style.height = document.getElementById('divHeader').clientHeight + ContentContainerDivObj.clientHeight + document.getElementById('divFooter').clientHeight + "px";
        backgroundPanel.style.width = document.body.clientWidth + "px";
    }
    else
        backgroundPanel.style.height = (document.getElementById('divMaster').offsetHeight > document.body.offsetHeight ? document.getElementById('divMaster').offsetHeight : document.body.offsetHeight) - 2 + "px";

    document.getElementById('divConfirmPrint').style.marginTop = scrollTop() + (getWindowHeight() / 2 - (document.getElementById('divConfirmPrint').clientHeight / 2)) + "px";
    document.getElementById('divConfirmPrint').style.marginLeft = (backgroundPanel.clientWidth / 2 - (document.getElementById('divConfirmPrint').clientWidth / 2)) + "px";

    // Nullify objects
    backGroundControlId = null;
    pnlPrintDialogId = null;
    backgroundPanel = null;
    pnlPrintDialog = null;
    // Nullify objects

    return false;
}

function HidePrintConfirmDiv(backGroundControlId) {
    document.getElementById(backGroundControlId).style.display = 'none';
    document.getElementById('divConfirmPrint').style.display = 'none';
}

///************************************* Confirm Print *************************************///

function LinkBtnMouseOver(e) {
    //alert("Inside LinkBtnMouseOver: " + e);
    e.style.color = "#FFCC00";
}

function LinkBtnMouseOut(e) {
    //alert("Inside LinkBtnMouseOut: " + e);
    e.style.color = "#FFFFFF";
}

/****************************************** PropertyList Print ******************************************/

// Used for PrintConfirmation Dialog - As of now not used
function CheckForSelectedProperties(btnCreateReportPrintId) {
    document.getElementById('hdnSelectePropertiesIndices').value = "";
    propertiesGrid = document.getElementById('divMainResultsGrid');
    selectedPropertiesIndices = "";

    if (IE) {
        for (i = 0; i < propertiesGrid.childNodes.length; i++) {
            if (propertiesGrid.childNodes[i].childNodes[0].childNodes[0].checked == true)
                selectedPropertiesIndices += i + ";";
        }
    }
    else {
        for (i = 1; i < propertiesGrid.childNodes.length; i = i + 2)
            if (propertiesGrid.childNodes[i].childNodes[1].childNodes[1] != null && propertiesGrid.childNodes[i].childNodes[1].childNodes[1].checked == true)
            selectedPropertiesIndices += i + ";";
    }

    if (selectedPropertiesIndices == "") {
        selectedPropertiesIndices = null;
        btnCreateReportPrintId = null;
        propertiesGrid = null;
        alert('Please select at least one property before printing.');
        return false;
    }

    document.getElementById('hdnSelectePropertiesIndices').value = selectedPropertiesIndices;

    // Nullify objects
    btnCreateReportPrintId = null;
    hdnSelectePropertiesIndicesId = null;
    propertiesGrid = null;
    // Nullify objects

    return true;
}

function GetSelectedProperties(lnkPrintSelectedId) {
    hdnSelectePropertiesId = lnkPrintSelectedId.replace("lnkPrintSelected", "hdnSelectedProperties");
    selectedPropertiesIndices = document.getElementById('hdnSelectePropertiesIndices').value.split(';');

    document.getElementById(hdnSelectePropertiesId).value = "";
    propertiesGrid = document.getElementById('divMainResultsGrid');
    printRowIndex = 0;
    pageBreak = "";

    var appendedSelectedProperties = "";
    if (IE) {
        for (i = 0; i < propertiesGrid.childNodes.length; i++) {
            if (propertiesGrid.childNodes[i].childNodes[0].childNodes[0].checked == true) {
                ++printRowIndex;

                pageBreak = "<br style='position:relative;' />";

                if (IE6) {
                    if (printRowIndex == 8)
                        pageBreak = "<br /><div style='padding-top:5px;'>&nbsp;</div><br />";
                    if (printRowIndex > 8 && (printRowIndex - 8) % 8 == 0)
                        pageBreak = "<br /><div style='margin-top:10px;'>&nbsp;</div><br />";
                }
                else {
                    if (printRowIndex == 8)
                        pageBreak = "<br /><div style='padding-top:25px;'>&nbsp;</div><br/><br/>";
                    if (printRowIndex > 8 && (printRowIndex - 8) % 8 == 0)
                        pageBreak = "<br /><div style='margin-top:25px;'>&nbsp;</div><br/>";
                }

                manipulatedHtml = propertiesGrid.childNodes[i].outerHTML;
                manipulatedHtml = manipulatedHtml.replace("$hdnPropertyId", "hdnPropertyId1");
                appendedSelectedProperties = appendedSelectedProperties + pageBreak + manipulatedHtml;

                pageBreak = "";
                manipulatedHtml = null;
            }

        }
    }
    else {
        printRowIndex = 1;
        for (i = 1; i < propertiesGrid.childNodes.length; i = i + 2) {
            if (propertiesGrid.childNodes[i].childNodes[1].childNodes[1] != null && propertiesGrid.childNodes[i].childNodes[1].childNodes[1].checked == true) {
                ++printRowIndex;
                pageBreak = "<br/>";

                if (printRowIndex == 9)
                    pageBreak = "<br style='clear:both;'/><br style='clear:both;'/><br style='clear:both;'/><br style='clear:both;'/><br style='clear:both;'/>";
                if (printRowIndex > 8 && (printRowIndex - 9) % 8 == 0)
                    pageBreak = "<br style='clear:both;'/><br style='clear:both;'/><br style='clear:both;'/>";

                manipulatedHtml = propertiesGrid.childNodes[i].innerHTML;
                manipulatedHtml = manipulatedHtml.replace("$hdnPropertyId", "hdnPropertyId1");

                appendedSelectedProperties = appendedSelectedProperties + pageBreak + "<div class=ResultsGridRow>" + manipulatedHtml + "</div>";

                pageBreak = "";
                manipulatedHtml = null;
            }
        }
    }

    document.getElementById(hdnSelectePropertiesId).value = htmlEncode(appendedSelectedProperties);
    if (document.getElementById(hdnSelectePropertiesId).value == "") {
        alert('Please select at least one property before printing');
        return false;
    }
    return true;

    // Nullify objects
    btnCreateReportPrintId = null;
    hdnSelectePropertiesId = null;
    selectedPropertiesIndices = null;
    propertiesGrid = null;
    printRowIndex = null;
    pageBreak = null;
    appendedSelectedProperties = null;
    // Nullify objects
}

/****************************************** PropertyList Print ******************************************/

function ProcessOption(selectedOption, activeLink) {
    var selectedOptionCtrl = document.getElementById(selectedOption);
    var activeLinkCtrl = document.getElementById(activeLink);
    if (selectedOptionCtrl != null && activeLinkCtrl != null) {
        if (selectedOptionCtrl.innerText != activeLinkCtrl.innerText) {
            ShowLoader();
            RemoveNode('divMainResultsGrid');
            return true;
        }
        else {
            ShowLoader();
            return true;
        }
    }
    else {
        return false;
    }
    selectedOptionCtrl = null;
    activeLinkCtrl = null;
}

function showPopup() {
    var divBackgroundPanelCtrl = document.getElementById('divBackgroundPanel');
    var divContentPanelCtrl = document.getElementById('divContentPanel');

    if (divBackgroundPanelCtrl != null && divContentPanelCtrl != null) {
        divBackgroundPanelCtrl.style.display = 'block';
        divContentPanelCtrl.style.display = 'block';
    }
    divBackgroundPanelCtrl = null;
    divContentPanelCtrl = null;

    disableDDLNavigation()
}

function hidePopup() {
    var divBackgroundPanelCtrl = document.getElementById('divBackgroundPanel');
    var divContentPanelCtrl = document.getElementById('divContentPanel');
    var hdnDataControlIdsCtrl = document.getElementById('hdnEmailDataControlIds');

    if (divBackgroundPanelCtrl != null && divContentPanelCtrl != null) {
        divBackgroundPanelCtrl.style.display = 'none';
        divContentPanelCtrl.style.display = 'none';
    }
    divBackgroundPanelCtrl = null;
    divContentPanelCtrl = null;

    if (hdnDataControlIdsCtrl != null) {
        var controlsToClear = hdnDataControlIdsCtrl.value.split('|');
        for (count = 0; count < controlsToClear.length; count++) {
            ctrlToClearId = controlsToClear[count];
            txtCtrlToClear = document.getElementById(ctrlToClearId);
            if (txtCtrlToClear != null) {
                txtCtrlToClear.value = '';
            }
        }
    }
    enableDDLNavigation();
    document.getElementById('hdnEmailComponentPanel').value = ''
    return false;
}

function showViewedCompanyPopup(companyPanel, backgroundPanel) {
    var divBackgroundPanelCtrl = $get('divBackgroundPanel');
    var divContentPanelCtrl = $get('divViewedCompany');
    var divBGPanelCtrl = $get(backgroundPanel);
    var masterCtrl = $get('divMaster');
    if (divBackgroundPanelCtrl != null && divContentPanelCtrl != null) {
        if (IE) {
            if (IE6) {
                var divLPCSelectedListingsDdl = $get('divLPCSelectedListingsDdl')
                var divLPCTimeframeDdl = $get('divLPCTimeframeDdl');
                if (divLPCSelectedListingsDdl != null) {
                    divLPCSelectedListingsDdl.style.display = 'none';
                }
                if (divLPCTimeframeDdl != null) {
                    divLPCTimeframeDdl.style.display = 'none';
                }
            }
            if (!IE8) {
                divBGPanelCtrl.style.height = (masterCtrl.offsetHeight > document.body.offsetHeight ? masterCtrl.offsetHeight : document.body.offsetHeight) - 2 + "px";
            }
            else {
                divBGPanelCtrl.style.height = (masterCtrl.offsetHeight > document.body.scrollHeight ? masterCtrl.offsetHeight : document.body.scrollHeight) - 2 + "px";
            }
        }
        else
            divBGPanelCtrl.style.height = $get('divHeader').clientHeight + ContentContainerDivObj.clientHeight + $get('divFooter').clientHeight + "px";

        divBackgroundPanelCtrl.style.display = 'block';
        divContentPanelCtrl.style.display = 'block';
    }
    setViewedCompanyPopupPosition(companyPanel);
}

function hideViewedCompanyPopup() {
    var divBackgroundPanelCtrl = $get('divBackgroundPanel');
    var divContentPanelCtrl = $get('divViewedCompany');
    if (IE6) {
        var divLPCSelectedListingsDdl = $get('divLPCSelectedListingsDdl')
        var divLPCTimeframeDdl = $get('divLPCTimeframeDdl');
        if (divLPCSelectedListingsDdl != null) {
            divLPCSelectedListingsDdl.style.display = 'block';
        }
        if (divLPCTimeframeDdl != null) {
            divLPCTimeframeDdl.style.display = 'block';
        }
    }
    if (divBackgroundPanelCtrl != null && divContentPanelCtrl != null) {
        divBackgroundPanelCtrl.style.display = 'none';
        divContentPanelCtrl.style.display = 'none';
    }
}

function setViewedCompanyPopupPosition(companyPanel) {
    var viewCompanyControl = $get(companyPanel);
    var topPos = scrollTop() + (getWindowHeight() / 2) - 258;
    var paddingSize = (getWindowWidth() / 2) - 375;
    topPos = topPos > 0 ? topPos : 1;
    paddingSize = paddingSize > 0 ? paddingSize : 0;
    viewCompanyControl.style.top = topPos + "px";
    viewCompanyControl.style.paddingLeft = paddingSize + "px";
    viewCompanyControl.style.display = 'block'
}

function SetPopupPosition(divId) {
    tblPropertyDetailPopupID = divId;
    var left = Math.round((getWindowWidth() - $get(divId).clientWidth) / 2);
    var top = Math.round((getWindowHeight() - $get(divId).clientHeight) / 2);

    $get(divId).style.left = (left >= 0 ? left : 0).toString() + "px";
    $get(divId).style.top = (top >= 0 ? top : 0).toString() + "px";
}

function SetPopupHeight(divId, heightPct) {
    var heightPixels = Math.round(getWindowHeight() * heightPct);
    $get(divId).style.height = heightPixels.toString() + "px";
}

//TFS 18615 Image window in chrome is off screen
//The value is set from the SetPopupPosition function of the detail popout.
var tblPropertyDetailPopupID = null;

function EnlargeImgPosWebKitBrowsers(enlargePanelObj, FloorPlanEnlarge) {
    var tblPropertyDetailPopupObj = $get(tblPropertyDetailPopupID)
    if (tblPropertyDetailPopupObj != null && enlargePanelObj != null) {
        enlargePanelObj.style.left = "-" + tblPropertyDetailPopupObj.offsetLeft + "px";
        enlargePanelObj.style.top = "-" + (tblPropertyDetailPopupObj.offsetTop - enlargePanelObj.style.paddingLeft) + "px";
    }
    if (tblPropertyDetailPopupObj != null && FloorPlanEnlarge != null) {
        FloorPlanEnlarge.style.marginTop = "-" + (tblPropertyDetailPopupObj.offsetTop) + "px";
    }
}

function EnableDisableNav(btnPrevId, btnPrevEnabled, btnNextId, btnNextEnabled) {
    var btnPrevObj = $get(btnPrevId);
    var btnNextObj = $get(btnNextId);

    if (btnPrevEnabled == 'True') {
        btnPrevObj.disabled = false;
        btnPrevObj.className = "NavButtonPrev";
    }
    else {
        btnPrevObj.disabled = true;
        btnPrevObj.className = "NavButtonPrevDisabled";
    }

    if (btnNextEnabled == 'True') {
        btnNextObj.disabled = false;
        btnNextObj.className = "NavButtonNext";
    }
    else {
        btnNextObj.disabled = true;
        btnNextObj.className = "NavButtonNextDisabled";
    }
}

Type.registerNamespace("CoStar.ShowCase.Controls");
CoStar.ShowCase.Controls.DropDownNavigation = function(element) {
    CoStar.ShowCase.Controls.DropDownNavigation.initializeBase(this, [element]);
    this._disabledPrevCss = null;
    this._enabledPrevCss = null;
    this._disabledNextCss = null;
    this._enabledNextCss = null;
    this._prevButton = null;
    this._nextButton = null;
    this._dropDown = null;
    this._prevButtonClickDelegate = null;
    this._nextButtonClickDelegate = null;
    this._dropDownChangeDelegate = null;
}
CoStar.ShowCase.Controls.DropDownNavigation.prototype = {
    get_disabledPrevCss: function() { return this._disabledPrevCss; },
    set_disabledPrevCss: function(value) { this._disabledPrevCss = value; },
    get_disabledNextCss: function() { return this._disabledNextCss; },
    set_disabledNextCss: function(value) { this._disabledNextCss = value; },

    get_enabledPrevCss: function() { return this._enabledPrevCss; },
    set_enabledPrevCss: function(value) { this._enabledPrevCss = value; },
    get_enabledNextCss: function() { return this._enabledNextCss; },
    set_enabledNextCss: function(value) { this._enabledNextCss = value; },

    get_prevButton: function() { return this._prevButton; },
    set_prevButton: function(value) { this._prevButton = value; },
    get_nextButton: function() { return this._nextButton; },
    set_nextButton: function(value) { this._nextButton = value; },
    get_dropDown: function() { return this._dropDown; },
    set_dropDown: function(value) { this._dropDown = value; },

    initialize: function() {
        CoStar.ShowCase.Controls.DropDownNavigation.callBaseMethod(this, 'initialize');

        this._nextButtonClickDelegate = Function.createDelegate(this, this.nextButtonClick);
        this._prevButtonClickDelegate = Function.createDelegate(this, this.prevButtonClick);
        this._dropDownChangeDelegate = Function.createDelegate(this, this.dropDownChange);

        $addHandler(this._prevButton, "click", this._prevButtonClickDelegate);
        $addHandler(this._nextButton, "click", this._nextButtonClickDelegate);
        $addHandler(this._dropDown, "change", this._dropDownChangeDelegate);
    },

    dispose: function() {
        CoStar.ShowCase.Controls.DropDownNavigation.callBaseMethod(this, 'dispose');
        if (this._nextButtonClickDelegate !== null) {
            $removeHandler(this._nextButton, "click", this._nextButtonClickDelegate);
            this._nextButtonClickDelegate = null;
        }

        if (this._prevButtonClickDelegate !== null) {
            $removeHandler(this._prevButton, "click", this._prevButtonClickDelegate);
            this._prevButtonClickDelegate = null;
        }
    },

    prevButtonClick: function(e) {
        var newIndex = this.changeDropDown(-1);
        this.updatePrevNextButtons(newIndex);
        return false;
    },

    nextButtonClick: function(e) {
        var newIndex = this.changeDropDown(1);
        this.updatePrevNextButtons(newIndex);
        return false;
    },

    updatePrevNextButtons: function(newIndex) {
        if (Sys.Browser.agent != Sys.Browser.Firefox) {
            if (newIndex === 0) {
                this._prevButton.className = this._disabledPrevCss;
                this._prevButton.disabled = true;
            }
            else {
                this._prevButton.className = this._enabledPrevCss;
                this._prevButton.disabled = false;
            }

            var numberOfOptions = this._dropDown.options.length;
            if (newIndex === (numberOfOptions - 1)) {
                this._nextButton.className = this._disabledNextCss;
                this._nextButton.disabled = true;
            }
            else {
                this._nextButton.className = this._enabledNextCss;
                this._nextButton.disabled = false;
            }
        }
    },

    changeDropDown: function(value) {
        // FF doesn't fire the onchange event when using the arrow keys until you leave (blur)
        // the dropdown.
        ShowLoader();
        var currIndex = this._dropDown.selectedIndex;
        currIndex += value;
        this._dropDown.options[currIndex].selected = true;

        // IE & Safari doesn't fire the onchange event when you programatically set the 
        // selected index. FF does.
        if (Sys.Browser.agent == Sys.Browser.InternetExplorer || SAFARI) {
            this._dropDown.onchange();
        }
        return currIndex;
    },

    dropDownChange: function(e) {
        ShowLoader();
        // update prev and next buttons
        this.updatePrevNextButtons(this._dropDown.selectedIndex);
    },

    disableDropDown: function() {
        this._dropDown.disabled = true;
    },

    enableDropDown: function() {
        this._dropDown.disabled = false;
    }
}

CoStar.ShowCase.Controls.DropDownNavigation.registerClass("CoStar.ShowCase.Controls.DropDownNavigation", Sys.UI.Behavior);



//------------------------  for admin   -------------------------
/* att this function is nolonger need due to spec change
function CheckForSelectedAdminProperties(clickEventName)
{
      
if ( $get('hdnSelectePropertiesIndices') == null ) return;
   
document.getElementById('hdnSelectePropertiesIndices').value = "";
selectedPropertiesIndices = "";

var propertiesShowcaseOff = document.all.item("chkBoxDivOff");
var propertiesShowcaseOn = document.all.item("chkBoxDivOn");

if(IE)
{
if ( propertiesShowcaseOff != null ) {
//If there is only 1 item, it does not work the normal way
if ( propertiesShowcaseOff.length == undefined ||  propertiesShowcaseOff.length == 1 )
{
if (propertiesShowcaseOff.children.item(0).childNodes[0].checked  == true) { selectedPropertiesIndices += i + ";"; }
}            
else
{
for(i=0; i<propertiesShowcaseOff.length; i++)
{
if( propertiesShowcaseOff.item(i).childNodes[0].childNodes[0].checked == true)
{ 
selectedPropertiesIndices += i + ";";
break;
}
}
}
}
        
if ( propertiesShowcaseOn != null && selectedPropertiesIndices == "") {        
//If there is only 1 item, it does not work the normal way
if ( propertiesShowcaseOn.length == undefined ||  propertiesShowcaseOn.length == 1 )
{
if (propertiesShowcaseOn.children.item(0).childNodes[0].checked  == true) { selectedPropertiesIndices += i + ";"; }
}            
else
{
for(i=0; i<propertiesShowcaseOn.length; i++)
{
if( propertiesShowcaseOn.item(i).childNodes[0].childNodes[0].checked == true)
{ 
selectedPropertiesIndices += i + ";";
break;
}            
}
}
}
}
else
{
if ( propertiesShowcaseOff != null ) { 
for(i=1; i<propertiesShowcaseOff.length; i=i+2)
if(propertiesShowcaseOff.item(i).childNodes[1].childNodes[1] != null && propertiesShowcaseOff.item(i).childNodes[1].childNodes[1].checked == true)
{ 
selectedPropertiesIndices += i + ";";
break;
}            
}
        
if ( propertiesShowcaseOn != null  && selectedPropertiesIndices == "") {        
for(i=1; i<propertiesShowcaseOn.length; i=i+2)
if(propertiesShowcaseOn.item(i).childNodes[1].childNodes[1] != null && propertiesShowcaseOn.item(i).childNodes[1].childNodes[1].checked == true)
{ 
selectedPropertiesIndices += i + ";";
break;
}            
}
}
    
if(selectedPropertiesIndices != "")
{
selectedPropertiesIndices = null;
propertiesShowcaseOff = null;
propertiesShowcaseOn = null;
var bSubmitChange = confirm("You have made changes to your Showcase Properties. Would you like to submit these changes?");
		
if ( !bSubmitChange ) {
return !bSubmitChange;    //bail out
$get(hdnCurrentEventID).value = "";
}
}
    
   
//set hidden event so we can know where to go next
$get(hdnCurrentEventID).value = clickEventName;

// Nullify objects
propertiesShowcaseOff = null;
propertiesShowcaseOn = null;
    
//need to call submit btn
$get(submitID).click();
   
return !bSubmitChange;
}

function AdjustListerDivContentContainer()
{
if (IE)
return;

var siteNavigation = $get('SiteNavigation');
if (siteNavigation === null)
return;
        
var iSiteNavigationClientHeight = parseInt(siteNavigation.clientHeight);
var contentContainerDiv = $get('divContentContainer');
if (contentContainerDiv === null)
return;
contentContainerDiv.style.paddingTop = iSiteNavigationClientHeight + "px";

return;
}
*/


/* Dynamic spacecard - START */

/**************************************************/
/* Sliding effect for the content divs */
var step = 25;
var contentHeight = 410;
var slideDownDelay = 1;
var slideUpDelay = 1;
var hideAllDelay = 1;

function slideDown(div, maxH, delay) {
    maxH = parseFloat(maxH);
    el = $get(div);
    var currH = el.offsetHeight;
    el.style.opacity = currH / maxH;
    el.style.filter = 'alpha(opacity=' + (currH * 100 / maxH) + ')';
    if (maxH > (currH + step)) {
        el.style.height = (currH + step) + "px";
        el.style.overflow = 'hidden';
        t = setTimeout("slideDown('" + div + "','" + maxH + "','" + delay + "')", delay);
    }
    else {
        el.style.height = maxH + "px";
        el.style.overflow = 'auto';
    }
}

function slideUp(div, currH, delay) {
    currH = parseFloat(currH);
    el = $get(div);
    var ht = el.offsetHeight;
    el.style.opacity = ht / contentHeight;
    el.style.filter = 'alpha(opacity=' + (ht * 100 / contentHeight) + ')';
    if ((currH - step) >= 0) {
        currH = (currH - step) + "px";
        el.style.height = currH;
        el.style.overflow = 'hidden';
        t = setTimeout("slideUp('" + div + "','" + currH + "','" + delay + "')", delay);
    }
    else {
        el.style.display = 'none';
        el.style.height = "0px";
        el.style.overflow = 'auto';
    }
}

/* Methods for accordion effect in Repeater */
var current = "";
function hideSpaceContent(cntrlId) {
    var cntrl = $get(cntrlId);
    if (cntrl !== null) {
        if (cntrl.style.display == 'none') {
            //hideAll();
            if (current !== null && current !== "") {
                slideUp(current, contentHeight, slideUpDelay);
            }

            cntrl.style.display = 'block';
            var maxH = cntrl.offsetHeight;
            cntrl.style.height = "0px";
            slideDown(cntrlId, contentHeight, slideDownDelay);
            current = cntrlId;
        }
        else {
            slideUp(cntrlId, contentHeight, slideUpDelay);
            current = "";
        }
    }
}

/*    SpaceGrid Dynamic Load related methods     */

/* handler for HeaderClick:  calls the scriptservice and fetches data */
function paneOnClick(cntlId, spaceId, templateId) {
    var trigger = $get(cntlId);
    if (trigger.value != "#") {
        trigger.value = spaceId;
        var template = CoStar.Controls.ClientTemplateManager.getClientTemplateByTemplateId(templateId);
        if (template !== null) {
            //alert("Loading <" + templateId+">...");
            template.executeDataCall(spaceId, false, null); // key, showActionItem userContext
            trigger.value = "#";
        }
    }
}

/* sample event */
function enlargePopup(url) {
    alert("Enlarge popup window : " + url);
    return false;
}
/* Dynamic spacecard - END */

/* Listing Performance */
function createWinPos(piWindowWidth, piWindowHeight) {
    var iScreenWidth = screen.availWidth; 	// Client screen width (in pixels)
    var iScreenHeight = screen.availHeight; 	// Client screen height (in pixels, not including taskbar)
    var iWinXLoc = (iScreenWidth - piWindowWidth) / 2;
    var iWinYLoc = (iScreenHeight - piWindowHeight) / 2;
    return "width=" + piWindowWidth.toString() + ",height=" + piWindowHeight.toString() + ",top=" + iWinYLoc.toString() + ",left=" + iWinXLoc.toString();
}

function ClickForWindow(sURL, sWindowName, sOptionalStyle, piWindowWidth, piWindowHeight) {
    var oWindow = window.open(sURL, sWindowName, sOptionalStyle + createWinPos(piWindowWidth, piWindowHeight));
}

/*Bio Text Display*/
function ToggleBioText(HideDiv, DisplayDiv) {

    var divDisplay = $get(DisplayDiv);
    var divHide = $get(HideDiv);
    divHide.style.display = 'none';
    divDisplay.style.display = 'block';
    return false;
}
function ToggleElements(elementToHide, elementToShow) {
    if (IE6) {
        AlignVEMapForIE6();
    }
    var elementToShow = $get(elementToShow);
    var elementToHide = $get(elementToHide);
    elementToHide.style.display = 'none';
    elementToShow.style.display = 'block';
    if (IE8) {
        setPageHeight(null);
    }
    return false;
}

function AlignVEMapForIE6() {
    var objvemap = $get('divShowCaseResultVEMap');
    if (objvemap !== null && objvemap.childNodes[0] !== null) {
        objvemap.childNodes[0].style.position = 'relative';
    }
}

/* To set search count in Header */
function SetHeaderSearchCount(headerContentContainer, sender, args) {
    var headerFull = $get('divHeaderFull');
    var headerContainer = $get(headerContentContainer);
    var headerMessageComplete = args.get_headerMessageComplete();
    headerMessageComplete = headerMessageComplete.toString().toLowerCase();
    var headerText = args.get_newText();

    if (headerMessageComplete == "true") {
        if (headerFull !== null) {
            headerFull.innerHTML = headerText;
            headerFull.style.display = 'block';

            if (headerContainer !== null) {
                headerContainer.style.display = 'none';
            }
        }
    }
    else {
        if (headerContainer !== null) {
            var countContainer = $get('divHeaderSearchCount', headerContainer);
            if (countContainer !== null) {
                countContainer.innerHTML = headerText;
            }
            headerContainer.style.display = 'block';

            if (headerFull !== null) {
                headerFull.style.display = 'none';
            }
        }
    }
}
/*<--CoStarGridView related scripts  - used in SpaceGrid*/
function InitializeSpaceGrid(gridClientId) {
    $evp.addEvent("CoStarGridViewRowSelectedIndexChange", GridViewSelectedIndexChanged);
    $evp.addEvent("CoStarGridViewRowAnimationCompleted", GridViewAnimationCompleted);

    RemoveAdditionalBorderRight(gridClientId);
}

function GridViewAnimationCompleted(sender, args) {
    setPageHeight(null);
    SafariFooterFix();
    if (SAFARI || FF2) {
        window.clearInterval(footerCheckInterval);
    }
}

function RemoveAdditionalBorderRight(gridClientId) {
    if (!Sys.Browser.InternetExplorer) {
        return;
    }
    //<-- To remove right side thick border created by the scrollTable of CoStarGridView
    var grid = $get(gridClientId);
    if (grid === null) {
        return;
    }
    var grid_outerTable = $get("grid_outerTable", grid);
    if (grid_outerTable === null) {
        return;
    }
    var node = grid_outerTable.childNodes[0];
    if (node === null) {
        return;
    }
    if (node.nodeName !== "TBODY") {
        return;
    }
    node = node.childNodes[0];
    if (node !== null && node.nodeName === "TR") {
        node = node.childNodes[1];
        if (node !== null && node.nodeName === "TD") {
            node.style.visibility = 'hidden';
        }
    }
    //-->
}
var footerCheckInterval = null;
function GridViewSelectedIndexChanged(source, arg) {
    if (SAFARI || FF2) {
        footerCheckInterval = window.setInterval(function() { SafariFooterFix(); }, 5);
    }
    var objCoStarGridView = source; //$get(CoStarGridViewClientId);
    if (objCoStarGridView === null) {
        return;
    }

    if (objCoStarGridView.rows === null) {
        return;
    }

    var selectedIndex = -1;
    if (arg._NewSelectedIndex === null) {
        return;
    }
    else {
        selectedIndex = arg._NewSelectedIndex;
    }

    var rows = objCoStarGridView.rows;
    var length = rows.length;
    var summaryRowIndex = -1;
    for (var i = 0; i < length; i++) {
        var row = rows[i];
        var rowId = '';
        if (row.id !== null) {
            rowId = row.id;
        }
        //        if (rowId.indexOf('__detail_') < 0) {
        //            //to skip any detail row which is now closing
        //            summaryRowIndex++;
        //        }
        var divArrow = $get('divArrow', row);
        if (divArrow === null) {
            continue;
        }
        if (divArrow.className === null || divArrow.className === 'undefined') {
            continue;
        }
        if (selectedIndex === i) {
            divArrow.className = 'divArrowUp';
        }
        else {
            divArrow.className = 'divArrowDown';
        }
    }
}


var _isResizing = false;
function SpaceGrid_OnResize(div) {
    if (IE8 && !_isResizing) {

        _isResizing = true;

        var footer = $get('divFooter');
        footer.style.position = 'relative';

        var timeout = 100;
        setTimeout(function() { setPageHeight(null); _isResizing = false; }, timeout);
    }
}

/*
JMH: These functions do not work:  divPropretyDetailSpaceList_OnResizeEnd would never
fire since the <div> element it's associated with does not set the contentEditable
property to 'true' which in turn will prevent the 'onresizeend' event from firing.

function divPropretyDetailSpaceList_OnResize(div) {
if (IE8) {
var objFooter = $get('divFooter');
objFooter.style.position = 'relative'; 
objFooter.style.top = 'auto'; 
}
}

function divPropretyDetailSpaceList_OnResizeEnd() {
if (IE8) {
setPageHeight(null); 
}
}

*/

/*CoStarGridView related scripts  - used in SpaceGrid-->*/


function SafariFooterFix() {

    var objDivContentSF = $get('divContent');
    var objDivFooterSF = $get('divFooter');
    var objDivHeaderSF = $get('divHeader');
    if (SAFARI || FF2) {
        objDivContentSF.style.height = 'auto';
        if (objDivContentSF != null && objDivHeaderSF != null) {
            if ((objDivContentSF.offsetHeight + objDivHeaderSF.offsetHeight + objDivFooterSF.offsetHeight) > document.body.clientHeight) {
                objDivFooterSF.style.position = "relative";
            }
            else {
                objDivFooterSF.style.position = "absolute";
                objDivFooterSF.style.bottom = "0px";
            }
        }
    }
}


// JScript File

    // To trim a string
    String.prototype.trim = function()
    {
	    return this.replace(/^\s+|\s+$/g,"");
	}

    // To set font as Bold for mouseover on ImageBar 'PageButtons' and to display mouseover images
    function PopupOver(tableId)
    {
        if(isCompletedRegistration != 1)return;
        var buttonId =  tableId.replace("PopupTable", "PageButton");
        if($get(buttonId).value.trim() != '')
        {
            var cssClasses = $get(buttonId.split("ImageBarList")[0] + "HiddenMouseOverClass").value.split(';');                        
            var button = $get(buttonId);
            button.className = button.className.trim().replace(cssClasses[1], "");
            button.className = button.className + " " + cssClasses[1];
            
            var MouseOverImageId =  buttonId.replace("PageButton", "MouseOverImage");            
            var arrowDivId =  buttonId.replace("PageButton", "BottomArrowDiv");
            var arrowDiv = $get(arrowDivId);
            if(arrowDiv == null)
            {
                arrowDiv =  $get(arrowDivId.replace("BottomArrowDiv", "TopArrowDiv"));
            }
            
            arrowDiv.style.display = "block";
            $get(MouseOverImageId).style.display = "block";            
            arrowDiv.style.zIndex = "100";
            
            if(!IE)
            {
                arrowDiv.style.zIndex = "2";
            }
            arrowDiv.style.marginLeft = ((button.clientWidth / 2) - 6) + "px";
        }
    }
    
    //To reset the CssClass for the button and to hide the thumbnail image
    function PopupOut(tableId)
    {
        if(isCompletedRegistration != 1)return;
        var buttonId =  tableId.replace("PopupTable", "PageButton");
        var button = $get(buttonId);
        if(button.value.trim() != '')
        {
            var MouseOverImageId =  buttonId.replace("PageButton", "MouseOverImage");
            var ThumbNailImageId = buttonId.replace("PageButton", "ThumbNailImage");
            var ImageCellId = buttonId.replace("PageButton", "ImageCell");
            var buttonCellId = buttonId.replace("PageButton", "ButtonCell");
            
            var arrowDivId =  buttonId.replace("PageButton", "BottomArrowDiv");
            var arrowImageId = buttonId.replace("PageButton", "DownImage");
            var arrowDiv = $get(arrowDivId);
            if(arrowDiv == null)
            {
                arrowDiv = $get(arrowDivId.replace("BottomArrowDiv", "TopArrowDiv"));
                arrowImageId = buttonId.replace("PageButton", "UpImage");
            }
            
            var divImgNavImageCellId = buttonId.replace("PageButton", "divImgNavImageCell");
            var mouseOverImageId = $get(MouseOverImageId);
            if(IE && event.toElement != null && (event.toElement.id == divImgNavImageCellId || event.toElement.id == arrowDivId || event.toElement.id == arrowImageId || event.toElement.id == ThumbNailImageId || event.toElement.id == ImageCellId || event.toElement.id == buttonId || event.toElement.id == buttonCellId) && event.toElement.id != "" && event.toElement.id != ThumbNailImageId)
            {
                mouseOverImageId.style.display = "block";
                arrowDiv.style.display = "block";
                return;
            }
            
            var cssClasses = $get(buttonId.split("ImageBarList")[0] + "HiddenMouseOverClass").value.split(';');
            button.className = button.className.trim().replace(cssClasses[1], "");
            
            mouseOverImageId.style.display = "none";
            arrowDiv.style.display = "none";
        }
    }
    
    function GetArrowDiv(buttonId)
    {
        var arrowDivId =  buttonId.replace("PageButton", "BottomArrowDiv");
        var arrowDiv = $get(arrowDivId);
        if(arrowDiv == null)
        {
            arrowDiv = $get(arrowDivId.replace("BottomArrowDiv", "TopArrowDiv"));
        }
        return arrowDiv;
    }
    
    // MouseOut of toparrow/bottomarrow image for deciding on displaying or hiding the thumbnail image
    function ImageOut(imgId)
    {
        var mouseOverImageId =  imgId.replace("UpImage", "MouseOverImage");
        mouseOverImageId =  mouseOverImageId.replace("DownImage", "MouseOverImage");        
        var buttonId =  mouseOverImageId.replace("MouseOverImage", "PageButton");
        var arrowDiv = GetArrowDiv(buttonId);
        
        // Hide the thumbnail image if mouse is over another button and not on toparrow/bottomarrow image.
        if(IE && event.toElement != null && event.toElement.id != buttonId && event.toElement.id != arrowDiv.id)
        {
            $get(mouseOverImageId).style.display = "none";
            arrowDiv.style.display = "none";
        }
    }
    
    // To Set CssClass for each button in the ImageBarList
    function SetCssClassForButtons(pageButtonId, buttonValue)
    {
        var tableElement = $get(pageButtonId.split("ImageBarList")[0] + "ImageBarList");
        var oCssClasses = $get(pageButtonId.split("ImageBarList")[0] + "HiddenMouseOverClass");
        if (oCssClasses == null)
            return;
        var cssClasses = oCssClasses.value.split(';');
        var childNodeIndex = 0;
        var rowIndex = 0;        
        var arrowDivId = pageButtonId.replace("PageButton", "TopArrowDiv");
        
        if($get(arrowDivId) == null)
        {
            rowIndex = 1;
        }        
        if(!IE)
        {
            childNodeIndex = 1;
            
            if($get(arrowDivId) == null)
                rowIndex += 2;
            else
                rowIndex += 1;
        }

        if (tableElement != null) { //tableElement could be null if there is no navigator, ie zero or one pictures
            for (var i = 0; i < tableElement.rows[0].cells.length; i++) {
                var buttonId = tableElement.rows[0].cells[i].childNodes[childNodeIndex].childNodes[rowIndex].rows[0].cells[0].childNodes[1];
                if (IE) {
                    buttonId = tableElement.rows[0].cells[i].childNodes[childNodeIndex].childNodes[rowIndex].rows[0].cells[0].childNodes[0];
                }
                var currentButtonValue = buttonId.value.trim();

                if (currentButtonValue != "") {
                    if (currentButtonValue == buttonValue)
                        buttonId.className = "NormalButtonCell" + " " + cssClasses[2];
                    else {
                        defaultClass = "NormalButtonCell";

                        // True - FirstIndex of the the page        
                        var buttonIdSplit = buttonId.id.split("ctl00");
                        if (buttonIdSplit.length == 3) {
                            defaultClass = "StartButtonCell";
                        }
                        buttonId.className = defaultClass + " " + cssClasses[0];
                        buttonIdSplit; defaultClass = null;
                    }
                }
            }
        }
    }
    var selectedImageButtonValue = null;

     function setSelectedButtonIndex(pageButtonValue) {
         selectedImageButtonValue = pageButtonValue;
    }
       
    // To determine the Control Ids and navigate to the appropriate image.
    function PageButtonClick(pageButtonId, newURL, toolTip)
    {
        var pageButtonValue = $get(pageButtonId).value.trim();
        if ((selectedImageButtonValue == pageButtonValue) && (pageButtonValue != '') && (pageButtonValue != '>') && (pageButtonValue != '<'))
            return false;
        selectedImageButtonValue = pageButtonValue;
        var selectedButton = pageButtonId.replace("PageButton", "ButtonCell");

        // Determine the Control Ids
        var pageButtonIdSplit = pageButtonId.split("ImageBarList");

        var selectedHiddenId = pageButtonIdSplit[0] + "SelectedIndexAndIdHidden";
        var mouseOverImageId = pageButtonId.replace("PageButton", "MouseOverImage");
        var hiddenClientId = selectedHiddenId.replace("SelectedIndexAndIdHidden", "LabelClientIDToUpdateHidden");
        var mainImageId = selectedHiddenId.replace("SelectedIndexAndIdHidden", "MainImageTop");
        var tdMainImage = selectedHiddenId.replace("SelectedIndexAndIdHidden", "tdMainImageTop");
        var divTdMainImage = selectedHiddenId.replace("SelectedIndexAndIdHidden", "divTdMainImageTop");
        var divProgress = selectedHiddenId.replace("SelectedIndexAndIdHidden", "divProgress");
        if ($get(mainImageId) == null) {
            mainImageId = selectedHiddenId.replace("SelectedIndexAndIdHidden", "MainImageBottom");
            tdMainImage = selectedHiddenId.replace("SelectedIndexAndIdHidden", "tdMainImageBottom");
            divTdMainImage = selectedHiddenId.replace("SelectedIndexAndIdHidden", "divTdMainImageBottom");
        }
        // Determine the Control Ids


        // Clear and change Source
        var mainImage = $get(mainImageId);
        
        if (pageButtonValue != '')
        {
            mainImage.style.width = "";
            mainImage.style.height = "";
            
            var dummyDivId = pageButtonIdSplit[0]+"ImageNavigationDummyDiv";
            var mainImageSizeSplit = $get(pageButtonIdSplit[0]+"MainImageSizeHidden").value.split(";");
            
            SetTdMainImageSize(tdMainImage, divTdMainImage, dummyDivId, divProgress);
            
            mainImage.style.display = 'none';
            mainImage.style.visibility = 'hidden';
            
            var divProgress = $get(divProgress);
            if(divProgress != null)
            {
                divProgress.style.display = 'block';
            }   
            
            mainImage.src = newURL;
            mainImage.title = toolTip;

            // Navigation
            $get(mouseOverImageId).style.display = "none";            
            var arrowDivId =  mouseOverImageId.replace("MouseOverImage", "BottomArrowDiv");  
            var arrowDiv = $get(arrowDivId);     
            if(arrowDiv == null)
            {
                arrowDiv = $get(arrowDivId.replace("BottomArrowDiv", "TopArrowDiv"));
            }
            arrowDiv.style.display = "none";
            // Navigation
            
            // Set CssClass for all buttons
            SetCssClassForButtons(pageButtonId, pageButtonValue);
            // Set CssClass for all buttons
            
            
            if($get(hiddenClientId).value != null && $get(hiddenClientId).value != "")
            {
                SetImageNavigationTitle(toolTip, hiddenClientId);
            }
            
            $get(selectedHiddenId).value = pageButtonValue + ";" + pageButtonId;
            $get(pageButtonIdSplit[0] + "MainImageUrlHidden").value = newURL;
                        
            return false;
        }
        else
        {
            divProgressId = pageButtonId.split("ImageBarList")[0] + "divProgress";
            var divProgress = $get(divProgressId);
            if(divProgress != null) 
            {
                divProgress.style.display = 'block';
                divProgress.style.left = (GetTotalDivOffsetLeft(mainImage, false) + Math.round((mainImage.clientWidth - divProgress.clientWidth) / 2)).toString() + "px";
                divProgress.style.top = (GetTotalDivOffsetTop(mainImage, false) + Math.round((mainImage.clientHeight - divProgress.clientHeight) / 2)).toString() + "px";
            }

            divProgressId = null;
            return true;
        }
    }
    
    // To set image title for the enlarged image navigation
    function SetImageNavigationTitle(title, hiddenClientId)
    {
        ShowImageTitle($get(hiddenClientId).value, title);
    }
    
    // To show image title value in the control for the enlarged image navigation 
    function ShowImageTitle(labelClientIDToUpdate, imageTitle)
    {
        var labelToUpdate = $get(labelClientIDToUpdate);
        if(labelToUpdate != null)
        {
           labelToUpdate.innerHTML = imageTitle;
        }
    }
    
    // To calculate the OffsetX value for the AjaxToolKitWrapper - Hover control to the position the thumbnail images.
    var offsetArrayIndex = 0;
    var isCompletedRegistration = 0;
    function CalculateOffsetX(tableId, itemIndex, thumbWidth, currentPageCount, mouseOverCount, thumbNailImageBorderWidth, popupMarginWidth, popupShadowWidth, firstItemId, extremesWidthDiffer, isFixedSinglePage, isTopView, imageBarListId, currentItemId)
    {
        ////////////// Declarations //////////////
        var isCompletedRegistration = 0;
        var imageBarList = $get(imageBarListId);            
        var extremesWidth = 0;
        var lastItemBorderWidth = 1;
        var buttonTableDivIndex = 0; buttonTableIndex = 0;
        if(isTopView != 'True')++buttonTableIndex;
        if(!IE)
        {
            buttonTableDivIndex = 1; ++buttonTableIndex;
            if(isTopView != 'True')++buttonTableIndex;
        }
        var currentItemIndex = itemIndex;
        var offSetX = 0;
        var oTableId = $get(tableId);
        if (oTableId == null)
            return;
        var itemWidth = parseInt(oTableId.clientWidth / (parseFloat(currentPageCount)));
        var totalThumbWidth = parseFloat(thumbWidth) + parseFloat(2 * popupShadowWidth);
        ////////////// Declarations //////////////
        
        
        ////////////// Determine width of the extreme button if it differs from the normal button //////////////
        if(isFixedSinglePage == 'True' || extremesWidthDiffer == 'True')--itemIndex;
        
        if(extremesWidthDiffer == 'True'){extremesWidth = parseFloat($get(firstItemId).clientWidth)}
        ////////////// Determine width of the extreme button if it differs from the normal button //////////////


        ////////////// First half of the buttons in the ImageBarList //////////////
        if (parseFloat(currentItemIndex) <= parseFloat(mouseOverCount / 2))
        {
            var widthFromMargin = parseFloat(itemWidth * itemIndex) + parseFloat(extremesWidth) + parseFloat(itemWidth / 2);
            if(extremesWidthDiffer == 'True')++itemIndex;
            if (totalThumbWidth / 2 >= widthFromMargin)
                for(i=0;i<itemIndex;i++)
                    offSetX -= parseFloat(imageBarList.rows[0].cells[i].childNodes[buttonTableDivIndex].childNodes[buttonTableIndex].clientWidth);
            else
                offSetX = (itemWidth / 2) - (totalThumbWidth)/2;
        }
        ////////////// First half of the buttons in the ImageBarList //////////////
        
        
        ////////////// Second half of the buttons in the ImageBarList //////////////
        else if (parseFloat(currentItemIndex) > parseFloat(mouseOverCount / 2))
        {
            var offSetIndex = mouseOverCount - itemIndex + 1;var startIndex = itemIndex-1;var endIndex = mouseOverCount;
            
            if(isFixedSinglePage == 'True'){offSetIndex = offSetIndex - 2;startIndex = itemIndex;endIndex = mouseOverCount-1;}

            if(extremesWidthDiffer == 'True'){offSetIndex = offSetIndex - 2;startIndex = itemIndex+1;endIndex = ++mouseOverCount;}
            
            var widthFromRightMargin = parseFloat((itemWidth * offSetIndex) + parseFloat(extremesWidth) + parseFloat(itemWidth / 2));
            if (totalThumbWidth / 2 >= widthFromRightMargin)
                offSetX = -(thumbWidth - parseFloat(GetLastExtremeWidth(imageBarList, startIndex, endIndex, buttonTableDivIndex, buttonTableIndex)) + parseFloat(popupMarginWidth) + parseFloat(popupShadowWidth) + parseFloat(2 * thumbNailImageBorderWidth)) + lastItemBorderWidth;
            else
                offSetX = (itemWidth / 2) - (totalThumbWidth/2);
                
            offSetIndex =null;startIndex = null;endIndex = null;
        }
        offsetArray[offsetArrayIndex++] = parseInt(offSetX);
        ////////////// Second half of the buttons in the ImageBarList //////////////
    }    
    
    // Loop through the second half of the buttons to determine the offset from extreme buttons width
    GetLastExtremeWidth = function(imageBarList, startIndex, endIndex, buttonTableDivIndex, buttonTableIndex)
    {
        var tillExtremeWidth = 0;            
        for(i=startIndex;i<=endIndex;i++)
        {
            tillExtremeWidth += parseFloat(imageBarList.rows[0].cells[i].childNodes[buttonTableDivIndex].childNodes[buttonTableIndex].clientWidth);
        }
        return tillExtremeWidth;
    }
 
    // To set height for top image cell
    function SetHeightForTopImageCell(navigationDivId, tdTopImageId)
    {
        $get(tdTopImageId).style.height = (parseInt($get(navigationDivId).clientHeight) - 23) + "px";
    }
    
    // To assign source for thumbnail images after page renders
    function AssignSourceForThumbNail(thumbNailImage, thumbNailImageURL) 
    {
        var oThumbNailImage = $get(thumbNailImage);
        if (oThumbNailImage == null)
            return;
        oThumbNailImage.src = thumbNailImageURL;
    }
    
     // To decide on the size of thumbnail images after image gets loaded in the image control
    function DecideOnThumbNailImageHeightAndWidth(mouseOverPanelId, thumbNailImageId, thumbNailImageHeight, thumbNailImageWidth, popupMargin)
    {
        var mouseOverPanel = $get(mouseOverPanelId);
        if (mouseOverPanel != null) {
            mouseOverPanel.style.visibility = 'hidden';
            mouseOverPanel.style.display = 'block';
        }

        var thumbNailImage = $get(thumbNailImageId);
        if (thumbNailImage != null) {
            var thumbNailClientHeight = thumbNailImage.clientHeight;
            var thumbNailClientWidth = thumbNailImage.clientWidth;

            var thumbNailDivId = mouseOverPanelId.replace("MouseOverImage", "ThumbNailDiv");
            var thumbNailDiv = $get(thumbNailDivId);
            thumbNailDiv.style.height = thumbNailImageHeight + "px";
            thumbNailDiv.style.width = thumbNailImageWidth + "px";

            if ((parseInt(thumbNailImageHeight) - (2 * popupMargin)) <= thumbNailClientHeight) {
                thumbNailImage.style.height = thumbNailImageHeight - parseInt(2 * popupMargin) + "px";
            }
            else {
                thumbNailImage.style.height = thumbNailClientHeight;
            }

            if ((parseInt(thumbNailImageWidth) - (2 * popupMargin)) <= thumbNailClientWidth) {
                thumbNailImage.style.width = thumbNailImageWidth - parseInt(2 * popupMargin) + "px";
            }
            else {
                thumbNailImage.style.width = thumbNailClientWidth;
            }

        }
        
        if (mouseOverPanel != null) {
            mouseOverPanel.style.visibility = 'visible';
            mouseOverPanel.style.display = 'none';
        }
        
    }
    
    // To decide on size of mouseover panel in which thumbnail image is located
    function DecideOnMouseOverPanelHeightAndWidth(mouseOverPanelId, thumbNailDivId, thumbNailImageHeight, thumbNailImageWidth) {
        var mouseOverPanel = $get(mouseOverPanelId);
        if (mouseOverPanel != null) {
            mouseOverPanel.style.height = thumbNailImageHeight + "px";
            mouseOverPanel.style.width = thumbNailImageWidth + "px";
        }

        var thumbNailDiv = $get(thumbNailDivId);
        if (thumbNailDiv != null) {
            thumbNailDiv.style.height = thumbNailImageHeight + "px";
            thumbNailDiv.style.width = thumbNailImageWidth + "px";
        }

        if (mouseOverPanel != null) {
            mouseOverPanel.style.display = 'none';
        }
        
    }
    
    // To decide on the size of main image after image gets loaded in the image control
    function DecideOnMainImageHeightAndWidth(navigationDiv, dummyDivId, mainImageId, imageDivId, tdMainImage, divTdMainImage, divProgress, mainImageHeight, mainImageWidth, thumbNailImageHeight, thumbNailImageWidth, isSingleSource, dynamicSizeSetFunc)
    {
        var mainImage = $get(mainImageId);
        mainImage.style.display = 'block';
        var dummyDiv = $get(dummyDivId);
        var clientHeightOfDummyDiv = dummyDiv.clientHeight;
        var clientWidthOfDummyDiv = dummyDiv.clientWidth;
        
        var buttonOffset = 26;
        var borderOffset = 3;
        
        if(isSingleSource == 'True')
        {
            buttonOffset = 0;
        }
        
        if(clientHeightOfDummyDiv - parseInt(buttonOffset) < 0)
        {
            if(dynamicSizeSetFunc == null || dynamicSizeSetFunc == "")
            {
                ThrowImageNavigationException("Height of Container holding ImageNavigation control should be mentioned in pixels");
                $get(navigationDiv).style.display = "none";
                return;
            }
            
            var dynamicSizeSetFuncSplit = dynamicSizeSetFunc.split(';');
            for(i=0;i<dynamicSizeSetFuncSplit.length;i++)                
                if(dynamicSizeSetFuncSplit[i] != "")
                    eval(dynamicSizeSetFuncSplit[i]);
            
            clientHeightOfDummyDiv = dummyDiv.clientHeight;
            clientWidthOfDummyDiv = dummyDiv.clientWidth;              
        }
        
        var clientHeightOfMainImage = mainImage.clientHeight;
        var clientWidthOfMainImage = mainImage.clientWidth;
        
        
        if((clientHeightOfDummyDiv - parseInt(32)) < thumbNailImageHeight || clientWidthOfDummyDiv < thumbNailImageWidth)
        {
            ThrowImageNavigationException("ThumbNailImage size should be lesser than ImageNavigation control's size.");
            document.getElementById(navigationDiv).style.display = "none";
            return;
        }
        
        if(IE) {
            if (IE8)
                dummyDiv.style.visibility = 'hidden';
            else
                dummyDiv.style.display = 'none';
            
        }
            
        // Finalize On MainImageSize
        buttonOffset = 23;
        borderOffset = 2;
        var topBottomMargins = 7;
        var leftRightMargins = 8;
    
        if(isSingleSource == 'True')
        {
            buttonOffset = 1;
            topBottomMargins = 8;
        }
        
        var imageDiv = $get(imageDivId);
        imageDiv.style.width = clientWidthOfDummyDiv - 1 + "px";
        imageDiv.style.height = clientHeightOfDummyDiv - parseInt(buttonOffset) + "px";
        
        if(mainImageHeight != '0px' && parseInt(mainImageHeight) < clientHeightOfDummyDiv)
        {
            mainImage.style.height = mainImageHeight + "px";
        }
        else if((clientHeightOfDummyDiv - parseInt(topBottomMargins) - parseInt(buttonOffset)) <= clientHeightOfMainImage)
        {
            mainImage.style.height = clientHeightOfDummyDiv - parseInt(buttonOffset) - parseInt(topBottomMargins) + "px";
        }
        else
        {
            mainImage.style.height = clientHeightOfMainImage + "px";
        }
        
        if(mainImageWidth != '0px' && parseInt(mainImageWidth) < clientWidthOfDummyDiv)
        {
            mainImage.style.width = mainImageWidth + "px";
        }
        else if((clientWidthOfDummyDiv - parseInt(leftRightMargins) - parseInt(borderOffset)) <= clientWidthOfMainImage)
        {
            mainImage.style.width = clientWidthOfDummyDiv - parseInt(borderOffset) - parseInt(leftRightMargins) + "px";
        }
        else
        {
            mainImage.style.width = clientWidthOfMainImage + "px";
        }
        
        var divTdMainImg = $get(divTdMainImage);
        divTdMainImg.style.height = mainImage.style.height;
        divTdMainImg.style.width = mainImage.style.width;
        
        // Finalize On MainImageSize        
        
        //Hide Progress Div
        var progress = $get(divProgress);
        if(progress != null)
        {
            progress.style.display = 'block';
//            progress.style.left = ((progress.offsetParent.offsetWidth - progress.clientWidth)/2).toString() + "px";
//            progress.style.top = ((progress.offsetParent.offsetHeight - progress.clientHeight)/2).toString() + "px";

            progress.style.left =  (GetTotalDivOffsetLeft(mainImage,false) + Math.round((mainImage.clientWidth - progress.clientWidth)/2)).toString() + "px";
            progress.style.top = (GetTotalDivOffsetTop(mainImage,false) + Math.round((mainImage.clientHeight - progress.clientHeight)/2)).toString() + "px";

//            progress.style.left =  GetTotalDivOffsetLeft(progress.parentElement).toString() + "px";
//            progress.style.top = GetTotalDivOffsetTop(progress.parentElement).toString() + "px";
            progress.style.display = 'none';
        }
        
        mainImage.style.visibility = 'visible';
    }
    
    // To set Tooltip for the main image control
    function SetMainImageToolTip(mainImage, imageToolTip)
    {
        var oMainImage = $get(mainImage);
        if (oMainImage == null)
            return;
        else
            oMainImage.title = imageToolTip;
        
        mainImage = null;
        imageToolTip = null;
    }
    
    // To set size of 'td' that holds  main image.
    function SetTdMainImageSize(tdMainImageClientId, divTdMainImageClientId, dummyDivId, divProgressId)
    {
        var dummyDiv = $get(dummyDivId);
        if (dummyDiv == null)
            return;
        var clientHeightOfDummyDiv = dummyDiv.clientHeight;
        var clientWidthOfDummyDiv = dummyDiv.clientWidth;

        var tdMainImage = $get(tdMainImageClientId);
        if (tdMainImage == null)
            return;
        if (IE)
        {
            tdMainImage.style.height = clientHeightOfDummyDiv - parseInt(24) + "px";
        }
        else
        {
            tdMainImage.style.height = clientHeightOfDummyDiv - parseInt(23) + "px";
        }

        tdMainImage.style.width = clientWidthOfDummyDiv - parseInt(4) + "px";

       
        //To Position the loader image
        var divProgress = $get(divProgressId);
        if (divProgress != null) {
            divProgress.style.display = 'block';
            divProgress.style.left = (GetTotalDivOffsetLeft(tdMainImage, false) + Math.round((tdMainImage.clientWidth - divProgress.clientWidth) / 2)).toString() + "px";
            divProgress.style.top = (GetTotalDivOffsetTop(tdMainImage, false) + Math.round((tdMainImage.clientHeight - divProgress.clientHeight) / 2)).toString() + "px";
        }
    }
    
    function HideProgressImage(divProgress) {
        var progressDiv = $get(divProgress);
        if (progressDiv !== null) {
            $get(divProgress).style.display = 'none';
        }    
    }
    
    // To throw the appropriate exception message.
    function ThrowImageNavigationException(exceptionMesssage)
    {
        alert(exceptionMesssage);
        
        //Nullify Objects
        exceptionMesssage = null;
        //Nullify Objects
    }
    
    // Workaround - To hide the thumbnail image when window gets focus.
    function RegisterWindowEvents(hiddenImageId)
    {
        window.onfocus = function()
        {
            if(hiddenImageId == null)return;
            var hiddenImage = $get(hiddenImageId);
            if(hiddenImage != null)
            {
                var selectedButton = hiddenImage.value.split(';');
                if($get(selectedButton[1]) != null)
                {
                    selectedImage = selectedButton[1].replace("PageButton", "MouseOverImage");
                    if($get(selectedImage) != null)
                    {   
                        $get(selectedImage).style.display = 'none';
                    }
                    selectedImage = null;
                }
                selectedButton = null;
            }
        }
        hiddenImageId = null;
    }



/******ShowCaseEmail control scripts*************/

function validateMaxLength(ctrlToValidate, maxLength) {
    if (maxLength != 0 && ctrlToValidate.value.length >= maxLength)
        return false;
    else
        return true;
}

function diableInvalidCharForName(e) {
    if (IE) {
        var charKeyPressed = event.keyCode;
        //(A to Z) or (a to z) or ' or , or space or .
        if (!((charKeyPressed >= 65 && charKeyPressed <= 90) || (charKeyPressed >= 97 && charKeyPressed <= 122) ||
                charKeyPressed == 39 || charKeyPressed == 44 || charKeyPressed == 32 || charKeyPressed == 46))
            return false;
    }
    else {
        var charKeyPressed = e.charCode;
        var splKeyPressed = e.keyCode;
        //(A to Z) or (a to z) or ' or , or space or .
        if (!((charKeyPressed >= 65 && charKeyPressed <= 90) || (charKeyPressed >= 97 && charKeyPressed <= 122) ||
               charKeyPressed == 39 || charKeyPressed == 44 || charKeyPressed == 32 || charKeyPressed == 46 || (splKeyPressed > 0 && splKeyPressed != 13)))
            return false;
    }
}
function diableInvalidCharForEmail(e) {
    if (IE) {
        var charKeyPressed = event.keyCode;
        //@ or (A to Z) or (a to z) or (0 to 9) or . or _ or -
        if (!((charKeyPressed >= 64 && charKeyPressed <= 90) || (charKeyPressed >= 97 && charKeyPressed <= 122) ||
            (charKeyPressed >= 48 && charKeyPressed <= 57) || charKeyPressed == 46 || charKeyPressed == 95 || charKeyPressed == 45))
            return false;
    }
    else {
        var charKeyPressed = e.charCode;
        var splKeyPressed = e.keyCode;
        //@ or (A to Z) or (a to z) or (0 to 9) or . or _ or -
        if (!((charKeyPressed >= 64 && charKeyPressed <= 90) || (charKeyPressed >= 97 && charKeyPressed <= 122) ||
            (charKeyPressed >= 48 && charKeyPressed <= 57) || charKeyPressed == 46 || charKeyPressed == 95 || charKeyPressed == 45 ||
            (splKeyPressed > 0 && splKeyPressed != 13)))
            return false;
    }
}


function textBoxFocus(controlId, waterMarkText, waterMarkCSS, normalCSS, hiddenConrolId) {
    var objControl = $get(controlId);
    if (objControl != null) {
        if (objControl.className == waterMarkCSS) {
            objControl.value = "";
        }
        objControl.className = normalCSS;
        objControl.select();
    }
}

function textBoxBlur(controlId, waterMarkText, waterMarkCSS, normalCSS, hiddenConrolId) {
    var objControl = $get(controlId);
    var objhiddenControl = $get(hiddenConrolId);
    if (objControl != null && objhiddenControl != null) {
        if (objControl.value == "") {
            objControl.value = waterMarkText;
            objControl.className = waterMarkCSS;
            objhiddenControl.value = "true";
        }
        else {
            objControl.className = normalCSS;
            objhiddenControl.value = "false";
        }
    }
}
function validateSenderDetails(nameControlId, emailControlId, errorMessageControlId, nameControlWatermarkCSS, emailControlWatermarkCSS, reqNameErrMsg, reqEmailErrMsg, invalidNameErrMsg, invalidEmailErrMsg) {
    var nameControl = document.getElementById(nameControlId);
    var emailControl = document.getElementById(emailControlId);
    var errorControl = document.getElementById(errorMessageControlId);
    if (errorControl != null) {
        if (nameControl.className == nameControlWatermarkCSS || nameControl.value.trim() == '') {
            errorControl.style.color = '#DE3431';
            errorControl.style.fontWeight = 'bold';
            alert(reqNameErrMsg);
            HideLoader();
            enableEmailButtons();
            nameControl.focus();            
            return false;
        }
        if (!isValidName(nameControl.value)) {
            errorControl.style.color = '#DE3431';
            errorControl.style.fontWeight = 'bold';
            alert(invalidNameErrMsg);
            HideLoader();
            enableEmailButtons();
            nameControl.focus();
            return false;
        }
        if (emailControl.className == emailControlWatermarkCSS) {
            errorControl.style.color = '#DE3431';
            errorControl.style.fontWeight = 'bold';
            alert(reqEmailErrMsg);
            HideLoader();
            enableEmailButtons();
            emailControl.focus();
            return false;
        }
        if (!isValidEmail(emailControl.value)) {
            errorControl.style.color = '#DE3431';
            errorControl.style.fontWeight = 'bold';
            alert(invalidEmailErrMsg);
            HideLoader();
            enableEmailButtons();
            emailControl.focus();
            return false;
        }
        errorControl.style.color = 'Black';
        errorControl.style.fontWeight = 'normal';
        return true;
    }
    nameControl = null;
    emailControl = null;
    errorControl = null;
    return false;
}
function showErrorMessage(controlToFocus, errorMsg) {
    var ctrl = document.getElementById(controlToFocus);
    alert(errorMsg);
    HideLoader();
    ctrl.focus();
    ctrl = null;
}
function validateEmailAddress(controlToValidateId, errorMessageControlId, watermarkCSS, errorMsg) {
    var controlToValidate = document.getElementById(controlToValidateId);
    var errorControl = document.getElementById(errorMessageControlId);
    if (errorControl != null) {
        if (controlToValidate.className != watermarkCSS && !isValidEmail(controlToValidate.value)) {
            errorControl.style.color = '#DE3431';
            errorControl.style.fontWeight = 'bold';
            alert(errorMsg);
            HideLoader();
            enableEmailButtons();
            controlToValidate.focus();
            controlToValidate = null;
            errorControl = null;
            return false;
        }
        errorControl.style.color = 'Black';
        errorControl.style.fontWeight = 'normal';
        controlToValidate = null;
        errorControl = null;
        return true;
    }
    controlToValidate = null;
    errorControl = null;
    enableEmailButtons();
    return false;
}

function isValidEmail(psEmailAddress) {
    var oRegExp = /^([a-zA-Z0-9_\-])([a-zA-Z0-9_\-\.\']*)@(\[((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}|((([a-zA-Z0-9\-]+)\.)+))([a-zA-Z]{2,}|(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\])$/;
    var aAddresses = psEmailAddress.split(';');

    for (count = 0; count < aAddresses.length; count++) {
        if (!oRegExp.test(aAddresses[count].trim())) {
            oRegExp = null;
            aAddresses = null;
            return false;
        }
    }
    oRegExp = null;
    aAddresses = null;
    return true;
}

function validateName(controlToValidateId, errorMessageControlId, watermarkCSS, errorMsg) {
    var controlToValidate = document.getElementById(controlToValidateId);
    var errorControl = document.getElementById(errorMessageControlId);
    if (errorControl != null) {
        if (controlToValidate.className != watermarkCSS && !isValidName(controlToValidate.value)) {
            errorControl.style.color = '#DE3431';
            errorControl.style.fontWeight = 'bold';
            alert(errorMsg);
            HideLoader();
            enableEmailButtons();
            controlToValidate.focus();
            controlToValidate = null;
            errorControl = null;
            return false;
        }
        errorControl.style.color = 'Black';
        errorControl.style.fontWeight = 'normal';
        controlToValidate = null;
        errorControl = null;
        return true;
    }
    controlToValidate = null;
    errorControl = null;
    enableEmailButtons();
    return false;
}
function isValidName(psName) {
    var oRegExp = /[^a-zA-Z. ,']+/;

    if (oRegExp.test(psName.trim())) {
        oRegExp = null;
        return false;
    }
    oRegExp = null;
    return true;
}

function initializeEmail(controlId, waterMarkText, waterMarkCSS, normalCSS, hiddenConrolId) {
    var control = document.getElementById(controlId);
    if (control != null)
        textBoxBlur(controlId, waterMarkText, waterMarkCSS, normalCSS, hiddenConrolId)
    control = null;
}

function SuppressBackspaceDeleteKeys() {
    var isThisKeyCode = false;

    // Check to see if backspace = 8 and the delete = 46 is pressed
    // If it is then don't allow it to go back in History
    isThisKeyCode = (event.keyCode == 8 || event.keyCode == 46) ? false : true;
    event.returnValue = isThisKeyCode;
}
var isEnterPressedOnEmailPopup;
function EmailCloseButtonClick() {
    if (isEnterPressedOnEmailPopup) {
        isEnterPressedOnEmailPopup = false;
        return false;
    }
    return true;
}

//<-- To disable SendEmail, Cancel and Close button onclick of SendEmail Button in EmailPopup
var btnSendEmail_EmailPopup = null;
var btnCancel_EmailPopup = null;
var btnClose_EmailPopup = null;
//This method is called in SendEmail button's click event
function disableEmailButtonsOnSendEmail(btnSendEmail, btnCancelId, btnCloseId, lnkAddMoreId) {
    ShowLoader();
    
    if (btnSendEmail !== null) {
        btnSendEmail_EmailPopup = btnSendEmail;
        window.setTimeout(function() { btnSendEmail_EmailPopup.disabled = true; }, 100);
    }
    
    btnCancel_EmailPopup = $get(btnCancelId);
    if (btnCancel_EmailPopup !== null) {
        btnCancel_EmailPopup.disabled = true;
    }
    
    btnClose_EmailPopup = $get(btnCloseId);
    if (btnClose_EmailPopup !== null) {
        btnClose_EmailPopup.disabled = true;
    }
}
//This method is called in Cancel and Close buttons click event
function disableEmailButtonsOnClose(btnSendEmailId) {
    ShowLoader();

    btnSendEmail_EmailPopup = $get(btnSendEmailId);
    if (btnSendEmail_EmailPopup !== null) {
        btnSendEmail_EmailPopup.disabled = true;
    }
}

//This method is called in all email popup fields validation methods
function enableEmailButtons() {
    if (btnSendEmail_EmailPopup !== null) {
        window.setTimeout(function() { btnSendEmail_EmailPopup.disabled = false; }, 100);
    }
    
    if (btnCancel_EmailPopup !== null) {
        btnCancel_EmailPopup.disabled = false;
    }
    
    if (btnClose_EmailPopup !== null) {
        btnClose_EmailPopup.disabled = false;
    }
}
//-->
Sys.Browser.WebKit = {}; //Safari is considered WebKit
if (navigator.userAgent.indexOf('WebKit/') > -1) {
    Sys.Browser.agent = Sys.Browser.WebKit;
    Sys.Browser.version = parseFloat(navigator.userAgent.match(/WebKit\/(\d+(\.\d+)?)/)[1]);
    Sys.Browser.name = 'WebKit';
}
/// <reference name="MicrosoftAjax.js" />
/// <reference name="MicrosoftAjaxWebForms.js" />

// Copyright (C) 2007-2008 CoStar Realty Information, Inc.  All Rights Reserved.  CoStar - Confidential/Trade Secret.  
// ClientRuntime.js. The CoStar version of the ASP.NET AJAX Runtime.

Type.registerNamespace("CoStar.Components");
Type.registerNamespace("CoStar.Controls");
Type.registerNamespace("CoStar.Core");
Type.registerNamespace("CoStar.Net");
Type.registerNamespace("CoStar.Runtime");
Type.registerNamespace("CoStar.Web.Controls");
Type.registerNamespace("CoStar.Util");
Type.registerNamespace("PublicAJAXDataServices");
Type.registerNamespace("AJAXDataServices");
Type.registerNamespace("CGPublicAJAXDataServices");


Number.parseLocaleFixed = function(value) {
    /// <summary> 
    /// there's a bug in ASP.NET AJAX 3.5 where the blank space is the wrong ascii code for
    /// languages that use the blank space as a number separator.
    /// </summary>
    return Number.parseLocale(value.replace(String.fromCharCode(32), String.fromCharCode(160)));
}

Object.equals = function(obj1, obj2) {
    /// <summary>
    /// Determines whether two objects have the same value.
    /// </summary>
    /// <param name="obj1" DomElement="false" mayBeNull="true" />
    /// <param name="obj2" DomElement="false" mayBeNull="true" />

    function typeHelper(obj) {
        if (obj == undefined)
            return false;
        if (obj.constructor == 'Number' && !isFinite(obj))
            return false;
        if (typeof obj.length == 'number') {
            if (obj.callee)
                return 'arguments';
        }
        return typeof obj;
    }

    var type1 = typeHelper(obj1);
    var type2 = typeHelper(obj2);
    var collection = ['arguments', 'array'];

    if (type1 == "object" && type2 == "object") {
        for (var z in obj1) {
            if (!Object.equals(obj1[z], obj2[z]))
                return false;
        }
        for (var z in obj2) {
            if (!Object.equals(obj2[z], obj1[z]))
                return false;
        }
        return true;
    }
    else if (Array.contains(collection, type1) && Array.contains(collection, type2)) {
        var len = obj1.length;
        if (len != obj2.length)
            return false;
        for (var i = 0; i < len; i++) {
            if (!Object.equals(obj1[i], obj2[i]))
                return false;
        }
        return true;
    }

    return obj1 === obj2;
}

/*
The browsers don't like this for some reason. It doesn't
seem to be related to a naming conflict, instead a matter
of extending the base 'Object' type which causes problems...

Object.prototype.equals = function(value) {
return Object.equals(this, value);
}

Seems like some folks in the community don't like the idea
of extending the base Object prototype as a general rule:
http://erik.eae.net/archives/2005/06/06/22.13.54/
*/

String.prototype.equals = function(value) {
    return Object.equals(this, value);
}


CoStar.Components._ClientRuntime = function CoStar$Components$_ClientRuntime() {
    CoStar.Components._ClientRuntime.initializeBase(this);
    this._uiCultureCode = null;
    this._debugWindowEnabled = false;
};
CoStar.Components._ClientRuntime.prototype =
{
    get_uiCultureCode: function CoStar$Components$_ClientRuntime$get_uiCultureCode() { return this._uiCultureCode; },
    set_uiCultureCode: function CoStar$Components$_ClientRuntime$set_uiCultureCode(value) { this._uiCultureCode = value; },
    get_debugWindowEnabled: function CoStar$Components$_ClientRuntime$get_debugWindowEnabled() { return this._debugWindowEnabled; },
    set_debugWindowEnabled: function CoStar$Components$_ClientRuntime$set_debugWindowEnabled(value) { this._debugWindowEnabled = value; },

    trace: function(message) {
        if (this._debugWindowEnabled) {
            Sys.Debug.trace(message);
        }
    }
};
CoStar.Components._ClientRuntime.registerClass("CoStar.Components._ClientRuntime", Sys.Component);


// Dictionary

CoStar.Util.Dictionary = function() {
    CoStar.Util.Dictionary.initializeBase(this, null);
    this.count = 0;
    this.items = {};
};

CoStar.Util.Dictionary.prototype = {
    add: function(key, value) {
        key = String(key);
        if (!this.exists(key)) {
            this.count++;
        }
        this.items[key] = value;
    },
    remove: function(key) {
        key = String(key);
        if (this.exists(key)) {
            delete this.items[key];
            this.count--;
            return true;
        }
        return false;
    },
    clear: function() {
        for (var key in this.items) {
            delete this.items[key];
        }
        this.count = 0;
    },
    exists: function(key) {
        key = String(key);
        return ((this.items[key]) ? true : false);
    },
    item: function(key) {
        key = String(key);
        if (this.exists(key)) {
            return this.items[key];
        }
        return null;
    },
    keys: function() {
        var list = [];
        for (var key in this.items) {
            list[list.length] = key;
        }

        return list;
    },
    values: function() {
        var list = [];
        for (var key in this.items) {
            list[list.length] = this.items[key];
        }

        return list;
    }
};

CoStar.Util.Dictionary.registerClass('CoStar.Util.Dictionary');


// Dependency Property

CoStar.Core.DependencyProperty = function CoStar$Core$DependencyProperty(name) {
    CoStar.Core.DependencyProperty.initializeBase(this);
    this._name = name;
    this._value = null;
};

CoStar.Core.DependencyProperty.prototype = {

    add_changed: function(handler) {
        /// <summary>
        /// Adds or removes the specified event handler to the 'changed' event.
        /// </summary>
        this.get_events().addHandler('changed', handler);
    },
    remove_changed: function(handler) {
        this.get_events().removeHandler('changed', handler);
    },

    raiseEvent: function(name, args) {
        /// <summary>
        /// Raises an event with the specified name and event data.
        /// </summary>
        var handler = this.get_events().getHandler(name);
        if (handler) {
            if (args == null) {
                args = Sys.EventArgs.Empty;
            }
            handler(this, args);
        }
    },

    get_name: function() {
        /// <summary>
        /// Gets the name of the dependency property.
        /// </summary>
        return this._name;
    },

    get_value: function() {
        /// <summary>
        /// Gets or sets the value of the dependency property.
        /// </summary>
        return this._value;
    },
    set_value: function(value) {
        if (!Object.equals(this._value, value)) {
            this._value = value;
            this.raiseEvent('changed', null);
        }
    }
};

CoStar.Core.DependencyProperty.registerClass("CoStar.Core.DependencyProperty", Sys.Component);


// Dependency Property Manager

CoStar.Core._DependencyPropertyManager = function CoStar$Core$_DependencyPropertyManager() {
    CoStar.Core._DependencyPropertyManager.initializeBase(this);
    this._items = new CoStar.Util.Dictionary();
};

CoStar.Core._DependencyPropertyManager.prototype = {
    register: function(name, value) {
        /// <summary>
        /// Registers a dependency property with the specified name
        /// and value with the component. If the property was previously 
        /// registered and the value passed to this method is different 
        /// than the current value for the property, then the 'changed' 
        /// event for the property will be raised as a result.
        /// </summary>
        /// <param name="name" type="String" mayBeNull="false" />
        /// <param name="value" mayBeNull="true" />
        this.get_item(name).set_value(value);
    },
    get_item: function(name) {
        /// <summary>
        /// Gets the dependency property with the specified name.
        /// </summary>
        /// <param name="name" type="String" mayBeNull="false" />
        if (this._items.exists(name) == false) {
            this._items.add(name, new CoStar.Core.DependencyProperty(name));
        }
        return this._items.item(name);
    }
};

CoStar.Core._DependencyPropertyManager.registerClass("CoStar.Core._DependencyPropertyManager", Sys.Component);
CoStar.Core.DependencyPropertyManager = $create(CoStar.Core._DependencyPropertyManager, { "id": "dpm" }, null, null, null);
var $dpm = CoStar.Core.DependencyPropertyManager;


// Event Pool

CoStar.Web.Controls._EventPool = function CoStar$Web$Controls$_EventPool() {
    CoStar.Web.Controls._EventPool.initializeBase(this);
};

CoStar.Web.Controls._EventPool.prototype =
{
    //add a listener to the event
    addEvent: function CoStar$Web$Controls$_EventPool$addEvent(name, handler) {
        this.get_events().addHandler(name, handler);
    },

    //remove a listener from the event    
    removeEvent: function CoStar$Web$Controls$_EventPool$removeEvent(name, handler) {
        this.get_events().removeHandler(name, handler);
    },

    //call the event   
    raiseEvent: function CoStar$Web$Controls$_EventPool$raiseEvent(name, source, args) {
        var handler = this.get_events().getHandler(name);
        if (handler) {
            handler(source, args);
        }
    }
};

CoStar.Web.Controls._EventPool.registerClass("CoStar.Web.Controls._EventPool", Sys.Component);
CoStar.Web.Controls.EventPool = $create(CoStar.Web.Controls._EventPool, { "id": "EventPool" }, null, null, null);

window["CoStarEventPool"] = CoStar.Web.Controls.EventPool;
var $evp = CoStar.Web.Controls.EventPool;



//Singleton instance of calendar manager
var _calendarManager;
Type.registerNamespace("CoStar.Web.Controls");

CoStar.Web.Controls.CalendarManager = function() {

    //init the event args object
    CoStar.Web.Controls.CalendarManager.initializeBase(this);
    this._dateCurrentInputCtls = null;
}
CoStar.Web.Controls.CalendarManager.getDateInputCtl = function() {
    return _calendarManager.get_currentDateInputCtl();
}

CoStar.Web.Controls.CalendarManager.setDateInputCtl = function(dateInputCtl) {
    return _calendarManager.set_currentDateInputCtl(dateInputCtl);
}
CoStar.Web.Controls.CalendarManager.prototype = {

    get_currentDateInputCtl: function() {
        return this._dateCurrentInputCtls;
    },
    set_currentDateInputCtl: function(dateInputCtl) {
        this._dateCurrentInputCtls = dateInputCtl;
    }
}
CoStar.Web.Controls.CalendarManager.registerClass("CoStar.Web.Controls.CalendarManager", Sys.Component);

if (_calendarManager == null) {
    _calendarManager = $create(CoStar.Web.Controls.CalendarManager, { id: "calendarManager" });
}



CoStar.Util.NameValuePair = function CoStar$Util$NameValuePair(name, value) {
    this._name = name;
    this._value = value;
};

CoStar.Util.NameValuePair.prototype =
{
    get_name: function CoStar$Util$NameValuePair$get_name() { return this._name; },
    set_name: function CoStar$Util$NameValuePair$set_name(value) { this._name = value; },
    get_value: function CoStar$Util$NameValuePair$get_value() { return this._value; },
    set_value: function CoStar$Util$NameValuePair$set_value(value) { this._value = value; }
};
CoStar.Util.NameValuePair.registerClass('CoStar.Util.NameValuePair');

CoStar.Util.NameValueExpressionPair = function CoStar$Util$NameValueExpressionPair(name, valueExpression) {
    CoStar.Util.NameValueExpressionPair.initializeBase(this, [name, null]);
    this._valueExpression = valueExpression;
};

CoStar.Util.NameValueExpressionPair.prototype =
{
    get_value: function CoStar$Util$NameValueExpressionPair$get_value() { return eval(this._valueExpression); }
};
CoStar.Util.NameValueExpressionPair.registerClass('CoStar.Util.NameValueExpressionPair', CoStar.Util.NameValuePair);

CoStar.Util.CreateDelegateCallback = function(instance, method, context) {
    return function() {
        if (arguments.length > 3) {
            var args = [];

            for (var i = 2; i < arguments.length; i++) {
                args[i - 2] = arguments[i];
            }

            return method.apply(instance, args);
        }

        return method.call(instance, context);
    };
};

CoStar.Util.MethodExecutor = function CoStar$Util$MethodExecutor(method, context) {
    CoStar.Util.MethodExecutor.initializeBase(this);

    this._newArgs = null;
    this._context = context;
    this._method = method;

    if (arguments.length > 2) {
        this._newArgs = [];
        for (var i = 2; i < arguments.length; i++) {
            this._newArgs[i - 2] = arguments[i];
        }
    }
};

CoStar.Util.MethodExecutor.prototype =
{
    execute: function CoStar$Util$MethodExecutor$execute() {
        if (this._newArgs !== null) {
            this._method.apply(this._context, this._newArgs);
        }
        else {
            this._method.call(this._context);
        }
    }
};
CoStar.Util.MethodExecutor.registerClass('CoStar.Util.MethodExecutor');

CoStar.Net._RequestExecutor = function CoStar$Net$_RequestExecutor() {
    CoStar.Net._RequestExecutor.initializeBase(this);

    this._numberOfCurrentRequests = 0;
    this._maxNumberOfCurrentRequestAllowed = 1;
    this._pendingRequest = null;
    this._timeoutId = null;
    this._clearCounterTimeoutId = null;
    this._pollInterval = 100; // in ms.
    this._counterResetInterval = 20000;
    this._lastExecutedRequestTicks = -1;
    this._requestHelperDelegate = null;
    this._resetCurrentRequestCounterDelegate = null;

    // metrics
    this._totalRequests = 0;
    this._totalRequestsQueued = 0;
    this._totalRequestsAborted = 0;
};

CoStar.Net._RequestExecutor.prototype =
{
    initialize: function CoStar$Net$_RequestExecutor$initialize() {
        this._requestHelperDelegate = Function.createDelegate(this, this._requestHelper);
        this._resetCurrentRequestCounterDelegate = Function.createDelegate(this, this._resetCurrentRequestCounter);

        CoStar.Net._RequestExecutor.callBaseMethod(this, 'initialize');
    },

    dispose: function CoStar$Net$_RequestExecutor$dispose() {
        if (this._clearCounterTimeoutId !== null) {
            window.clearTimeout(this._clearCounterTimeoutId);
            this._clearCounterTimeoutId = null;
        }

        if (this._timeoutId !== null) {
            window.clearTimeout(this._timeoutId);
            this._timeoutId = null;
        }
        CoStar.Net._RequestExecutor.callBaseMethod(this, 'dispose');
    },

    set_maxNumberOfCurrentRequestAllowed: function CoStar$Net$_RequestExecutor$set_maxNumberOfCurrentRequestAllowed(value) { this._maxNumberOfCurrentRequestAllowed = value; },
    get_maxNumberOfCurrentRequestAllowed: function CoStar$Net$_RequestExecutor$get_maxNumberOfCurrentRequestAllowed(value) { return this._maxNumberOfCurrentRequestAllowed; },

    getCurrentTicks: function CoStar$Net$_RequestExecutor$getCurrentTicks() {
        var date = new Date();
        return date.getTime();
    },

    get_lastExecutedRequestTicks: function CoStar$Net$_RequestExecutor$get_lastExecutedRequestTicks() { return this._lastExecutedRequestTicks; },

    incrementCurrentRequests: function CoStar$Net$_RequestExecutor$incrementCurrentRequests() {
        // metric
        this._totalRequests += 1;
        this._numberOfCurrentRequests += 1;
    },
    decrementCurrentRequests: function CoStar$Net$_RequestExecutor$decrementCurrentRequests() {
        if (this._numberOfCurrentRequests > 0) {
            this._numberOfCurrentRequests -= 1;
        }
    },
    _resetCurrentRequestCounter: function CoStar$Net$_RequestExecutor$_resetCurrentRequestCounter() {
        if (this._numberOfCurrentRequests > 0) {
            this._numberOfCurrentRequests = 0;
        }
    },
    _setupRequest: function CoStar$Net$_RequestExecutor$_setupRequest(request, requestTicks) {
        // immediately update the last executed request ticks
        // so that if a response is received, it will be ignored as often as possible
        // if another request is pending.
        this._lastExecutedRequestTicks = requestTicks;

        // kill any other timeout that is waiting to execute.
        if (this._timeoutId !== null) {
            clearTimeout(this._timeoutId);
            this._timeoutId = null;

            // metric
            this._totalRequestsAborted += 1;
        }

        this._pendingRequest = request;
    },

    executeRequest: function CoStar$Net$_RequestExecutor$executeRequest(request, requestTicks) {
        this._setupRequest(request, requestTicks);
        this._requestHelper();
    },

    executeDelayedRequest: function CoStar$Net$_RequestExecutor$executeDelayedRequest(request, requestTicks, delayInterval) {
        this._setupRequest(request, requestTicks);

        // wait the specified delay before attempting to execute the request.
        // if another request comes in before the delay interval is up, this timeout will be killed.
        this._timeoutId = window.setTimeout(this._requestHelperDelegate, delayInterval);
    },

    _queueRequest: function CoStar$Net$_RequestExecutor$_queueRequest() {
        this._totalRequestsQueued += 1;

        // metric
        this._timeoutId = window.setTimeout(this._requestHelperDelegate, this._pollInterval);
    },

    _requestHelper: function CoStar$Net$_RequestExecutor$_requestHelper() {
        if (this._numberOfCurrentRequests < this._maxNumberOfCurrentRequestAllowed) {
            this._timeoutId = null;
            this.incrementCurrentRequests();

            // clear any previous timeout that was set to reset the counter
            if (this._clearCounterTimeoutId !== null) {
                window.clearTimeout(this._clearCounterTimeoutId);
            }

            // restart the timer to clear out the counter.
            this._clearCounterTimeoutId = window.setTimeout(this._resetCurrentRequestCounterDelegate, this._counterResetInterval);
            this._pendingRequest();
        }
        else {
            this._queueRequest();
        }
    }
};
CoStar.Net._RequestExecutor.registerClass("CoStar.Net._RequestExecutor", Sys.Component);

// DOM Element is a bug fix for ASP.NET AJAX getLocation method... we should use it instead.
CoStar.Controls.DomElement = function CoStar$Controls$DomElement() {
    if (arguments.length !== 0) { throw Error.parameterCount(); }
    throw Error.notImplemented();
};
CoStar.Controls.DomElement.registerClass('CoStar.Controls.DomElement');

CoStar.Controls.DomElement.getCurrentStyle = function CoStar$Controls$DomElement$getCurrentStyle(elm, attribute) {
    if (elm) {
        if (elm.currentStyle) {
            var style = elm.currentStyle;
        }
        else {
            var style = document.defaultView.getComputedStyle(elm, null);
        }

        if (style) {
            if (attribute) {
                return style[attribute];
            }
            return style;
        }
        return null;
    }
    return null;
};

CoStar.Controls.DomElement.getBounds = function CoStar$Controls$DomElement$getBounds(element) {
    /// <param name="element" domElement="true"></param>
    /// <returns type="Sys.UI.Bounds"></returns>
    var e = Function._validateParams(arguments, [
        { name: "element", domElement: true }
    ]);
    if (e) { throw e; }

    //var offset = CoStar.Controls.DomElement.getLocation(element);
    var offset = Sys.UI.DomElement.getLocation(element);

    return new Sys.UI.Bounds(offset.x, offset.y, element.offsetWidth || 0, element.offsetHeight || 0);
};

CoStar.Controls.DomElement.setSafeLocation = function CoStar$Controls$DomElement$setSafeLocation(element, preferedX, preferedY, topMarginHeight, container) {
    // sets an element safely within a container.
    if (typeof (topMarginHeight) === 'undefined') {
        topMarginHeight = 24;
    }

    var bounds = CoStar.Controls.DomElement.getBounds(element);
    var elmWidth = bounds.width;
    var elmHeight = bounds.height;

    switch (Sys.Browser.agent) {
        case Sys.Browser.InternetExplorer:
        case Sys.Browser.Firefox:
        case Sys.Browser.WebKit:        
            if (typeof (container) === 'undefined') {
                container = document.documentElement;
            }

            var containerBounds = CoStar.Controls.DomElement.getBounds(container);
            var containerWidth = containerBounds.width;
            var containerHeight = containerBounds.height;
            
            if (((preferedX + 10) + (elmWidth - container.scrollLeft)) > (containerWidth - elmWidth)) {
                if ((preferedX - elmWidth) < 0) {
                    preferedX = 10;
                }
                else {
                    preferedX -= (elmWidth + 10);
                }
            }
            else {
                preferedX -= 5;
            }

            if (((preferedY + topMarginHeight) + (elmHeight - container.scrollTop)) > (containerHeight - elmHeight)) {
                if (preferedY - (elmHeight + topMarginHeight) < 0) {
                    preferedY = topMarginHeight;
                }
                else {
                    preferedY -= (elmHeight + 10);
                }
            }
            else {
                preferedY -= 10;
            }
            break;

        case Sys.Browser.Netscape:
            if (typeof (container) === 'undefined') {
                container = window;
            }

            if (((preferedX + 10) + elmHeight) > (container.innerWidth - elmHeight)) {
                preferedX -= elmHeight;
            }
            if (((preferedY + 10) + elmHeight) > (container.innerHeight - elmHeight)) {
                preferedY -= (elmHeight + 20);
            }
            break;
    }

    Sys.UI.DomElement.setLocation(element, preferedX, preferedY);
};

if (Sys.Browser.agent == Sys.Browser.InternetExplorer) {
    CoStar.Controls.DomElement.getLocation = function CoStar$Controls$DomElement$getLocation(element) {
        if (element.self || element.nodeType === 9) {
            return new Sys.UI.Point(0, 0);
        }
        var clientRect = element.getBoundingClientRect();
        if (!clientRect) {
            return new Sys.UI.Point(0, 0);
        }
        var ownerDocument = element.document.documentElement;
        var offsetX = clientRect.left - 2 + ownerDocument.scrollLeft,
            offsetY = clientRect.top - 2 + ownerDocument.scrollTop;

        try {
            var f = element.ownerDocument.parentWindow.frameElement || null;
            if (f) {
                var offset = 2 - (f.frameBorder || 1) * 2;
                offsetX += offset;
                offsetY += offset;
            }
        }
        catch (ex) {
        }

        return new Sys.UI.Point(offsetX, offsetY);
    };
}
else {
    CoStar.Controls.DomElement.getLocation = function CoStar$Controls$DomElement$getLocation(element) {
        return Sys.UI.DomElement.getLocation(element);
    };
}

CoStar.Net.ServiceExecutor = function CoStar$Net$ServiceExecutor(dataMethod, businessObject, dataType, userContext) {
    CoStar.Net.ServiceExecutor.initializeBase(this);
    this._dataMethod = dataMethod;
    this._businessObject = businessObject;
    this._dataType = dataType;
    this._userContext = userContext;
    this._dataMethodObject = null;
};

CoStar.Net.ServiceExecutor.prototype = {
    set_dataType: function CoStar$Net$ServiceExecutor$set_dataType(value) { this._dataType = value; },
    get_dataType: function CoStar$Net$ServiceExecutor$get_dataType() { return this._dataType; },
    set_businessObject: function CoStar$Net$ServiceExecutor$set_businessObject(value) { this._businessObject = value; },
    get_businessObject: function CoStar$Net$ServiceExecutor$get_businessObject() { return this._businessObject; },
    get_dataMethod: function CoStar$Net$ServiceExecutor$get_dataMethod() { return this._dataMethod; },
    set_dataMethod: function CoStar$Net$ServiceExecutor$set_dataMethod(value) { this._dataMethod = value; },
    get_dataMethodObject: function CoStar$Net$ServiceExecutor$get_dataMethodObject() {
        if (this._dataMethodObject === null) {
            this._dataMethodObject = eval(this._dataMethod);
        }
        return this._dataMethodObject;
    },

    executeDataCall: function CoStar$Net$ServiceExecutor$executeDataCall(successCallBack, failureCallBack) {
        // TODO: make sure callBacks are methods

        // TODO: make sure all properties are set.
        var dataMethod = this.get_dataMethodObject();
        var jsonBusinessObject = Sys.Serialization.JavaScriptSerializer.serialize(this._businessObject);
        dataMethod(jsonBusinessObject, this._dataType, Sys.CultureInfo.CurrentCulture.name, CoStar.Components.ClientRuntime.get_uiCultureCode(), successCallBack, failureCallBack, this._userContext);
    }
};
CoStar.Net.ServiceExecutor.registerClass("CoStar.Net.ServiceExecutor");

CoStar.Util._ErrorHandler = function CoStar$Util$_ErrorHandler() {
    CoStar.Util._ErrorHandler.initializeBase(this);

    this._errorHandlerDelegate = null;
    this._lastError = null;
    this._errorHandlingServiceMethod = null;
    this._serverDataObjectType = null;

    this._serviceExecutor = null;
    this._successCallBackDelegate = null;
    this._failureCallBackDelegate = null;
    this._errorObject = null;
    this._logging = false;

    this._disableErrorPublishing = false;
    this._numberOfStackRecursions = 0;
    this._maxNumberOfStackRecursions = 25;

    this._numberOfErrorsSentToServer = 0;

    // the maximum number of errors to send to the server for a given page
    // with update panels, this value will need to be reset some other way
    this._maxNumberOfErrorsToSendToServer = 25;

    // monitor the number of failures. If it gets too high, stop trying to send
    // error messages to the server.
    this._numberOfFailures = 0;

    // if there are more than this number of failures, stop trying to send errors
    // to the server.
    this._maxNumberOfAcceptableFailures = 5;
};

CoStar.Util._ErrorHandler.prototype =
{
    set_disableErrorPublishing: function CoStar$Util$_ErrorHandler$set_disableErrorPublishing(value) { this._disableErrorPublishing = value; },
    get_disableErrorPublishing: function CoStar$Util$_ErrorHandler$get_disableErrorPublishing() { return this._disableErrorPublishing; },
    set_errorObject: function CoStar$Util$_ErrorHandler$set_errorObject(value) { this._errorObject = value; },
    get_errorObject: function CoStar$Util$_ErrorHandler$get_errorObject() { return this._errorObject; },
    set_errorHandlingServiceMethod: function CoStar$Util$_ErrorHandler$set_errorHandlingServiceMethod(value) { this._errorHandlingServiceMethod = value; },
    get_errorHandlingServiceMethod: function CoStar$Util$_ErrorHandler$get_errorHandlingServiceMethod() { return this._errorHandlingServiceMethod; },
    set_serverDataObjectType: function CoStar$Util$_ErrorHandler$set_serverDataObjectType(value) { this._serverDataObjectType = value; },
    get_serverDataObjectType: function CoStar$Util$_ErrorHandler$get_serverDataObjectType() { return this._serverDataObjectType; },

    initialize: function CoStar$Util$_ErrorHandler$initialize() {
        CoStar.Util._ErrorHandler.callBaseMethod(this, 'initialize');

        this._serviceExecutor = new CoStar.Net.ServiceExecutor(null, null, null, null);
        this._serviceExecutor.set_dataMethod(this._errorHandlingServiceMethod);
        this._serviceExecutor.set_dataType(this._serverDataObjectType);

        this._successCallBackDelegate = Function.createDelegate(this, this.successCallBack);
        this._failureCallBackDelegate = Function.createDelegate(this, this.failedCallBack);
        this._errorHandlerDelegate = Function.createDelegate(this, this._unHandledErrorOccurred);

        // cannot register error handlers with $addHandler
        // register for unhandled errors
        window.onerror = this._errorHandlerDelegate;
    },

    dispose: function CoStar$Util$_ErrorHandler$dispose() {
        CoStar.Util._ErrorHandler.callBaseMethod(this, 'dispose');
        if (this._errorHandlerDelegate !== null) {
            window.onerror = null;
            this._errorHandlerDelegate = null;
        }
    },

    successCallBack: function CoStar$Util$_ErrorHandler$successCallBack(result, userContext, methodName) {
        this._logging = false;
    },

    failedCallBack: function CoStar$Util$_ErrorHandler$failedCallBack(result, userContext, methodName) {
        this._logging = false;
        this._numberOfFailures++;
    },

    _failure: function CoStar$Util_ErrorHandler$failure(exception) {
        this._logging = false;
        this._numberOfFailures++;
    },

    buildStackTrace: function CoStar$Util$_ErrorHandler$buildStackTrace(startingPoint) {
        var stackTraceMessage = new Sys.StringBuilder("Stack trace: \n");
        var nextCaller = startingPoint;
        while (nextCaller) {
            this._numberOfStackRecursions++;
            if (this._numberOfStackRecursions < this._maxNumberOfStackRecursions) {
                stackTraceMessage.appendLine(this.getSignature(nextCaller));
            }
            else {
                // we've reached the maximum number of recursions for this stack trace.
                // break out of the loop.
                break;
            }
            nextCaller = nextCaller.caller;
        }
        stackTraceMessage.appendLine();
        return stackTraceMessage
    },

    getSignature: function CoStar$Util$_ErrorHandler$getSignature(theFunction) {
        var signature = new Sys.StringBuilder(this.getFunctionName(theFunction));
        signature.append("(");
        for (var x = 0; x < theFunction.arguments.length; x++) {
            // trim long arguments 
            var nextArgument = theFunction.arguments[x];

            // if the argument is a function, then calling toString on it will return the method body.
            if (nextArgument != null && nextArgument.toString().length > 50) {
                nextArgument = nextArgument.toString().substring(0, 50) + "...";
            }

            // apend the next argument to the signature 
            signature.append(String.format("'{0}'", nextArgument));
            // comma separator 
            if (x < theFunction.arguments.length - 1) {
                signature.append(", ");
            }
        }
        signature.append(")");
        return signature.toString();
    },

    getFunctionName: function CoStar$Util$_ErrorHandler$getFunctionName(theFunction) {
        // mozilla makes it easy. I love mozilla. 
        if (theFunction.name) {
            return theFunction.name;
        }
        // try to parse the function name from the defintion 
        var definition = theFunction.toString();
        var name = definition.substring(definition.indexOf('function') + 8, definition.indexOf('('));
        if (name) {
            return name;
        }
        // sometimes there won't be a function name 
        // like for dynamic functions 
        return "anonymous";
    },

    _canSendErrorToServer: function CoStar$Util$_ErrorHandler$_canSendErrorToServer() {
        // if we've reached our failure limit or number of errors limit or if logging is turned off, abort.
        return ((this._numberOfFailures < this._maxNumberOfAcceptableFailures) && (!this._disableErrorPublishing) && (!this._logging) && (this._numberOfErrorsSentToServer < this._maxNumberOfErrorsToSendToServer));
    },

    publishException: function CoStar$Util$_ErrorHandler$publishException(e) {
        // e is a normally an Error object, but can be a string
        if (typeof (e) == "string") {
            e = new Error.create(e);
        }

        if (e.name == 'NS_ERROR_NOT_AVAILABLE') {
            return;
        }

        try {
            this._numberOfStackRecursions = 0;
            var stackTrace = (typeof (e.stack) != 'undefined' ? e.stack : this.buildStackTrace(arguments.callee).toString());
            var message = e.message;
            var description = e.description;
            var name = (typeof (e.name) != 'undefined' ? e.name : null);
            var number = e.number;
            var lineNumber = e.lineNumber;
            var fileName = e.fileName;
            var browser = String.format("{0} {1}", Sys.Browser.name, Sys.Browser.version);

            this._errorObject.StackTrace = stackTrace;
            this._errorObject.Message = encodeURIComponent(message);
            this._errorObject.Description = encodeURIComponent(description);
            this._errorObject.Name = encodeURIComponent(name);
            this._errorObject.Number = encodeURIComponent(number);
            this._errorObject.LineNumber = encodeURIComponent(lineNumber);
            this._errorObject.URL = encodeURIComponent(fileName);
            this._errorObject.Browser = encodeURIComponent(browser);

            this._publishError();
        }
        catch (e) {
            // catch, but don't throw any errors that might occur during the error processing.
            this._failure(e);
        }

        // raise event if needed.
        var handler = this.get_events().getHandler("errorOccurred");
        if (handler) {
            handler(this, this._errorObject);
        }
    },

    _publishError: function CoStar$Util$_ErrorHandler$_publishError() {
        if (this._canSendErrorToServer()) {
            this._numberOfErrorsSentToServer++;
            this._logging = true;
            this._serviceExecutor.set_businessObject(this._errorObject);
            this._serviceExecutor.executeDataCall(this._successCallBackDelegate, this._failureCallBackDelegate);
        }
    },

    _unHandledErrorOccurred: function CoStar$Util$_ErrorHandler$_unHandledErrorOccurred(msg, url, lno) {
        try {
            this._numberOfStackRecursions = 0;
            var stackTrace = "Unhandled Exception. ";
            if (arguments !== null && arguments.callee != null) {
                stackTrace += this.buildStackTrace(arguments.callee).toString();
            }

            this._errorObject.StackTrace = stackTrace;
            this._errorObject.Message = encodeURIComponent(msg);
            this._errorObject.Description = encodeURIComponent(msg);
            this._errorObject.Name = "";
            this._errorObject.Number = "";
            this._errorObject.LineNumber = encodeURIComponent(lno);
            this._errorObject.URL = encodeURIComponent(url);
            this._errorObject.Browser = encodeURIComponent(String.format("{0} {1}", Sys.Browser.name, Sys.Browser.version));

            this._publishError();
        }
        catch (e) {
            // don't let errors that occurred during the error handling propogate.
            this._failure(e);
        }

        // raise event if needed.
        var handler = this.get_events().getHandler("unHandledErrorOccurred");
        if (handler) {
            handler(this, this._errorObject);
        }
    },

    add_errorOccurred: function CoStar$Util$_ErrorHandler$add_errorOccurred(handler) {
        this.get_events().addHandler("errorOccurred", handler);
    },

    remove_errorOccurred: function CoStar$Util$_ErrorHandler$remove_errorOccurred(handler) {
        this.get_events().removeHandler("errorOccurred", handler);
    },

    add_unHandledErrorOccurred: function CoStar$Util$_ErrorHandler$add_unHandledErrorOccurred(handler) {
        this.get_events().addHandler("unHandledErrorOccurred", handler);
    },

    remove_unHandledErrorOccurred: function CoStar$Util$_ErrorHandler$remove_unHandledErrorOccurred(handler) {
        this.get_events().removeHandler("unHandledErrorOccurred", handler);
    }
};
CoStar.Util._ErrorHandler.registerClass("CoStar.Util._ErrorHandler", Sys.Component);

// obsolete use AjaxDataService instead
PublicAJAXDataServices.DataService = function() {
    PublicAJAXDataServices.DataService.initializeBase(this);
    this._timeout = 0;
    this._userContext = null;
    this._succeeded = null;
    this._failed = null;
};
PublicAJAXDataServices.DataService.prototype = {
    ProcessDataObject: function(dataObject, typeName, cultureCode, uiCultureCode, succeededCallback, failedCallback, userContext) {
        return this._invoke(PublicAJAXDataServices.DataService.get_path(), 'ProcessDataObject', false, { dataObject: dataObject, typeName: typeName, cultureCode: cultureCode, uiCultureCode: uiCultureCode }, succeededCallback, failedCallback, userContext);
    }
}
PublicAJAXDataServices.DataService.registerClass('PublicAJAXDataServices.DataService', Sys.Net.WebServiceProxy);
PublicAJAXDataServices.DataService._staticInstance = new PublicAJAXDataServices.DataService();
PublicAJAXDataServices.DataService.set_path = function(value) { PublicAJAXDataServices.DataService._staticInstance._path = value; }
PublicAJAXDataServices.DataService.get_path = function() { return PublicAJAXDataServices.DataService._staticInstance._path; }
PublicAJAXDataServices.DataService.set_timeout = function(value) { PublicAJAXDataServices.DataService._staticInstance._timeout = value; }
PublicAJAXDataServices.DataService.get_timeout = function() { return PublicAJAXDataServices.DataService._staticInstance._timeout; }
PublicAJAXDataServices.DataService.set_defaultUserContext = function(value) { PublicAJAXDataServices.DataService._staticInstance._userContext = value; }
PublicAJAXDataServices.DataService.get_defaultUserContext = function() { return PublicAJAXDataServices.DataService._staticInstance._userContext; }
PublicAJAXDataServices.DataService.set_defaultSucceededCallback = function(value) { PublicAJAXDataServices.DataService._staticInstance._succeeded = value; }
PublicAJAXDataServices.DataService.get_defaultSucceededCallback = function() { return PublicAJAXDataServices.DataService._staticInstance._succeeded; }
PublicAJAXDataServices.DataService.set_defaultFailedCallback = function(value) { PublicAJAXDataServices.DataService._staticInstance._failed = value; }
PublicAJAXDataServices.DataService.get_defaultFailedCallback = function() { return PublicAJAXDataServices.DataService._staticInstance._failed; }
PublicAJAXDataServices.DataService.set_path("/publicajaxdataservices/dataservice.asmx");
PublicAJAXDataServices.DataService.ProcessDataObject = function(dataObject, typeName, cultureCode, uiCultureCode, onSuccess, onFailed, userContext) {
    PublicAJAXDataServices.DataService._staticInstance.ProcessDataObject(dataObject, typeName, cultureCode, uiCultureCode, onSuccess, onFailed, userContext);
};

// obsolete use AjaxDataService instead
AJAXDataServices.DataService = function() {
    AJAXDataServices.DataService.initializeBase(this);
    this._timeout = 0;
    this._userContext = null;
    this._succeeded = null;
    this._failed = null;
};
AJAXDataServices.DataService.prototype = {
    ProcessDataObject: function(dataObject, typeName, cultureCode, uiCultureCode, succeededCallback, failedCallback, userContext) {
        return this._invoke(AJAXDataServices.DataService.get_path(), 'ProcessDataObject', false, { dataObject: dataObject, typeName: typeName, cultureCode: cultureCode, uiCultureCode: uiCultureCode }, succeededCallback, failedCallback, userContext);
    }
}
AJAXDataServices.DataService.registerClass('AJAXDataServices.DataService', Sys.Net.WebServiceProxy);
AJAXDataServices.DataService._staticInstance = new AJAXDataServices.DataService();
AJAXDataServices.DataService.set_path = function(value) { AJAXDataServices.DataService._staticInstance._path = value; }
AJAXDataServices.DataService.get_path = function() { return AJAXDataServices.DataService._staticInstance._path; }
AJAXDataServices.DataService.set_timeout = function(value) { AJAXDataServices.DataService._staticInstance._timeout = value; }
AJAXDataServices.DataService.get_timeout = function() { return AJAXDataServices.DataService._staticInstance._timeout; }
AJAXDataServices.DataService.set_defaultUserContext = function(value) { AJAXDataServices.DataService._staticInstance._userContext = value; }
AJAXDataServices.DataService.get_defaultUserContext = function() { return AJAXDataServices.DataService._staticInstance._userContext; }
AJAXDataServices.DataService.set_defaultSucceededCallback = function(value) { AJAXDataServices.DataService._staticInstance._succeeded = value; }
AJAXDataServices.DataService.get_defaultSucceededCallback = function() { return AJAXDataServices.DataService._staticInstance._succeeded; }
AJAXDataServices.DataService.set_defaultFailedCallback = function(value) { AJAXDataServices.DataService._staticInstance._failed = value; }
AJAXDataServices.DataService.get_defaultFailedCallback = function() { return AJAXDataServices.DataService._staticInstance._failed; }
AJAXDataServices.DataService.set_path("/ajaxdataservices/dataservice.asmx");
AJAXDataServices.DataService.ProcessDataObject = function(dataObject, typeName, cultureCode, uiCultureCode, onSuccess, onFailed, userContext) {
    AJAXDataServices.DataService._staticInstance.ProcessDataObject(dataObject, typeName, cultureCode, uiCultureCode, onSuccess, onFailed, userContext);
};

// obsolete use AjaxDataService instead
CGPublicAJAXDataServices.DataService = function() {
    CGPublicAJAXDataServices.DataService.initializeBase(this);
    this._timeout = 0;
    this._userContext = null;
    this._succeeded = null;
    this._failed = null;
};
CGPublicAJAXDataServices.DataService.prototype = {
    ProcessDataObject: function(dataObject, typeName, cultureCode, uiCultureCode, succeededCallback, failedCallback, userContext) {
        return this._invoke(CGPublicAJAXDataServices.DataService.get_path(), 'ProcessDataObject', false, { dataObject: dataObject, typeName: typeName, cultureCode: cultureCode, uiCultureCode: uiCultureCode }, succeededCallback, failedCallback, userContext);
    }
}
CGPublicAJAXDataServices.DataService.registerClass('CGPublicAJAXDataServices.DataService', Sys.Net.WebServiceProxy);
CGPublicAJAXDataServices.DataService._staticInstance = new CGPublicAJAXDataServices.DataService();
CGPublicAJAXDataServices.DataService.set_path = function(value) { CGPublicAJAXDataServices.DataService._staticInstance._path = value; }
CGPublicAJAXDataServices.DataService.get_path = function() { return CGPublicAJAXDataServices.DataService._staticInstance._path; }
CGPublicAJAXDataServices.DataService.set_timeout = function(value) { CGPublicAJAXDataServices.DataService._staticInstance._timeout = value; }
CGPublicAJAXDataServices.DataService.get_timeout = function() { return CGPublicAJAXDataServices.DataService._staticInstance._timeout; }
CGPublicAJAXDataServices.DataService.set_defaultUserContext = function(value) { CGPublicAJAXDataServices.DataService._staticInstance._userContext = value; }
CGPublicAJAXDataServices.DataService.get_defaultUserContext = function() { return CGPublicAJAXDataServices.DataService._staticInstance._userContext; }
CGPublicAJAXDataServices.DataService.set_defaultSucceededCallback = function(value) { CGPublicAJAXDataServices.DataService._staticInstance._succeeded = value; }
CGPublicAJAXDataServices.DataService.get_defaultSucceededCallback = function() { return CGPublicAJAXDataServices.DataService._staticInstance._succeeded; }
CGPublicAJAXDataServices.DataService.set_defaultFailedCallback = function(value) { CGPublicAJAXDataServices.DataService._staticInstance._failed = value; }
CGPublicAJAXDataServices.DataService.get_defaultFailedCallback = function() { return CGPublicAJAXDataServices.DataService._staticInstance._failed; }
CGPublicAJAXDataServices.DataService.set_path("/CGPublicAjaxDataServices/DataService.asmx");
CGPublicAJAXDataServices.DataService.ProcessDataObject = function(dataObject, typeName, cultureCode, uiCultureCode, onSuccess, onFailed, userContext) {
    CGPublicAJAXDataServices.DataService._staticInstance.ProcessDataObject(dataObject, typeName, cultureCode, uiCultureCode, onSuccess, onFailed, userContext);
};

AjaxDataService = function() {
    AjaxDataService.initializeBase(this);
    this._timeout = 0;
    this._userContext = null;
    this._succeeded = null;
    this._failed = null;
};
AjaxDataService.prototype = {
    ProcessDataObject: function(dataObject, typeName, cultureCode, uiCultureCode, succeededCallback, failedCallback, userContext) {
        return this._invoke(AjaxDataService.get_path(), 'ProcessDataObject', false, { dataObject: dataObject, typeName: typeName, cultureCode: cultureCode, uiCultureCode: uiCultureCode }, succeededCallback, failedCallback, userContext);
    }
};
AjaxDataService.registerClass('AjaxDataService', Sys.Net.WebServiceProxy);
AjaxDataService._staticInstance = new AjaxDataService();
AjaxDataService.set_path = function(value) { AjaxDataService._staticInstance._path = value; }
AjaxDataService.get_path = function() { return AjaxDataService._staticInstance._path; }
AjaxDataService.set_timeout = function(value) { AjaxDataService._staticInstance._timeout = value; }
AjaxDataService.get_timeout = function() { return AjaxDataService._staticInstance._timeout; }
AjaxDataService.set_defaultUserContext = function(value) { AjaxDataService._staticInstance._userContext = value; }
AjaxDataService.get_defaultUserContext = function() { return AjaxDataService._staticInstance._userContext; }
AjaxDataService.set_defaultSucceededCallback = function(value) { AjaxDataService._staticInstance._succeeded = value; }
AjaxDataService.get_defaultSucceededCallback = function() { return AjaxDataService._staticInstance._succeeded; }
AjaxDataService.set_defaultFailedCallback = function(value) { AjaxDataService._staticInstance._failed = value; }
AjaxDataService.get_defaultFailedCallback = function() { return AjaxDataService._staticInstance._failed; }
AjaxDataService.ProcessDataObject = function(dataObject, typeName, cultureCode, uiCultureCode, onSuccess, onFailed, userContext) { AjaxDataService._staticInstance.ProcessDataObject(dataObject, typeName, cultureCode, uiCultureCode, onSuccess, onFailed, userContext); };
AjaxDataService.Execute = function(dataObject, typeName, onSuccess, onFailed, userContext) { AjaxDataService.ProcessDataObject(Sys.Serialization.JavaScriptSerializer.serialize(dataObject), typeName, Sys.CultureInfo.CurrentCulture.name, CoStar.Components.ClientRuntime.get_uiCultureCode(), onSuccess, onFailed, userContext); };

CoStar.Controls._ClientTemplateManager = function CoStar$Controls$_ClientTemplateManager() {
    CoStar.Controls._ClientTemplateManager.initializeBase(this);

    this._activeTemplates = [];

    // use an object to hold the client templates.
    this._clientTemplates = {};

    // most cases this is the mapControlId.
    this._containerControlId = null;
    this._isTemplateLoading = false;
    this._shouldRespondToOpenCommand = true;
    this._templateTimeoutId = null;
    this._delayedOpeningClientTemplateDelegate = null;
    this._closingDelegate = null;
    this._removeTemplateDelegate = null;
    this._templateLoadedDelegate = null;
    this._failedDataCallDelegate = null;
    
    this._openClientTemplateDelegate = null;
    this._clearDelayCallDelegate = null;
};

CoStar.Controls._ClientTemplateManager.prototype =
{
    set_shouldResponseToOpenCommand: function CoStar$Controls$_ClientTemplateManager$set_shouldResponseToOpenCommand(value) { this._shouldRespondToOpenCommand = value; },
    get_isTemplateLoading: function CoStar$Controls$_ClientTemplateManager$get_isTemplateLoading() { return this._isTemplateLoading; },
    get_clientTemplates: function CoStar$Controls$_ClientTemplateManager$get_clientTemplates() { return this._clientTemplates; },
    set_containerControlId: function CoStar$Controls$_ClientTemplateManager$set_containerControlId(value) { this._containerControlId = value; },
    get_containerControlId: function CoStar$Controls$_ClientTemplateManager$get_containerControlId() { return this._containerControlId; },

    initialize: function CoStar$Controls$_ClientTemplateManager$initialize() {
        CoStar.Controls._ClientTemplateManager.callBaseMethod(this, 'initialize');
        this._delayedOpeningClientTemplateDelegate = Function.createDelegate(this, this.openClientTemplate);
        this._closingDelegate = Function.createDelegate(this, this._templateClosing);
        this._removeTemplateDelegate = Function.createDelegate(this, this._removeClientTemplate);
        this._templateLoadedDelegate = Function.createDelegate(this, this._templateLoaded);
        this._failedDataCallDelegate = Function.createDelegate(this, this._failedDataCall);

        this._openClientTemplateDelegate = Function.createDelegate(this, this._openClientTemplate);
        this._clearDelayCallDelegate = Function.createDelegate(this, this._clearDelayCall);
        
        $evp.addEvent("openClientTemplate", this._openClientTemplateDelegate);
        $evp.addEvent("clearDelayCall", this._clearDelayCallDelegate);
    },

    dispose: function CoStar$Controls$_ClientTemplateManager$dispose() {
        this.clear();
        this.removeTemplatesFromContainer();
        this._activeTemplates = null;
        this._clientTemplates = null;
        
        if (this._openClientTemplateDelegate !== null)
        {
            $evp.removeEvent("openClientTemplate", this._openClientTemplateDelegate);
            this._openClientTemplateDelegate = null;
        }
        
        if (this._clearDelayCallDelegate !== null)
        {
            $evp.removeEvent("clearDelayCall", this._clearDelayCallDelegate);
            this._clearDelayCallDelegate = null;
        }

        CoStar.Controls._ClientTemplateManager.callBaseMethod(this, 'dispose');
    },

    _openClientTemplate: function(sender, args)
    {
        this.openClientTemplateWithDelay(args.get_data(), args.get_openingElement(), args.get_position().x, args.get_position().y, args.get_data().delay);
    },
    
    _clearDelayCall: function(sender, args)
    {
        this.clearDelayCall();
    },

    getClientTemplateById: function CoStar$Controls$_ClientTemplateManager$getClientTemplateById(clientTemplateId) {
        var hcTemplates = this.get_clientTemplates();
        if (hcTemplates !== null) {
            for (var name in hcTemplates) {
                if (hcTemplates[name].get_id() === clientTemplateId) {
                    return hcTemplates[name];
                }
            }
        }
        return null;
    },

    getClientTemplateByTemplateId: function CoStar$Controls$_ClientTemplateManager$getClientTemplateByTemplateId(templateId) {
        var hcTemplates = this.get_clientTemplates();
        var template = hcTemplates[templateId];
        if (typeof (template) === "undefined") {
            return null;
        }

        //        return this.clone(template);

        return template;
    },

    addClientTemplate: function CoStar$Controls$_ClientTemplateManager$addClientTemplate(template) {
        template.add_disposing(this._removeTemplateDelegate);
        template.add_closing(this._closingDelegate);
        template.add_loaded(this._templateLoadedDelegate);
        template.add_failed(this._failedDataCallDelegate);

        var templateId = template.get_templateId();
        if (templateId === null || templateId === "") {
            throw Error.create("templateId was not set.");
        }
        if (typeof (this._clientTemplates[templateId]) == "undefined") {
            this._clientTemplates[templateId] = template;
        }
        else {
            CoStar.Components.ClientRuntime.trace(String.format("Warning! Template Id: '{0}' already in use.", templateId));
        }
    },

    _templateClosing: function CoStar$Controls$_ClientTemplateManager$_templateClosing(sender, args) {
        var currentlyDisplayedObject = args.get_displayObject();
        if (currentlyDisplayedObject !== null) {
            CoStar.Components.ClientRuntime.trace("Remove--" + currentlyDisplayedObject.key);
            Array.remove(this._activeTemplates, currentlyDisplayedObject);
            CoStar.Components.ClientRuntime.trace(this._activeTemplates.length);
        }
    },

    _removeClientTemplate: function CoStar$Controls$_ClientTemplateManager$_removeClientTemplate(sender, args) {
        if (this._clientTemplates !== null) {
            var templateId = sender.get_templateId();
            var template = this._clientTemplates[templateId];
            if (typeof (template) != "undefined" && template !== null) {
                template = null;
                this._clientTemplates[templateId] = null;
                delete this._clientTemplates[templateId];
            }
        }
    },

    _failedDataCall: function CoStar$Controls$_ClientTemplateManager$_failedDataCall(sender, args) {
        this.clientTemplateFailedToLoad(args);
    },


    clientTemplateFailedToLoad: function CoStar$Controls$_ClientTemplateManager$clientTemplateFailedToLoad(args) {
        var handler = this.get_events().getHandler("clientTemplateFailedToLoad");
        if (handler) {
            handler(this, args);
        }
    },

    add_clientTemplateFailedToLoad: function CoStar$Controls$_ClientTemplateManager$add_clientTemplateFailedToLoad(handler) {
        this.get_events().addHandler("clientTemplateFailedToLoad", handler);
    },

    remove_clientTemplateFailedToLoad: function CoStar$Controls$_ClientTemplateManager$remove_clientTemplateFailedToLoad(handler) {
        this.get_events().removeHandler("clientTemplateFailedToLoad", handler);
    },

    _templateLoaded: function CoStar$Controls$_ClientTemplateManager$_templateLoaded(sender, args) {
        this._isTemplateLoading = false;
    },

    closeAll: function CoStar$Controls$_ClientTemplateManager$closeAll() {
        if (this._clientTemplates !== null) {
            for (var name in this._clientTemplates) {
                var template = this._clientTemplates[name];
                //                if (template !== null && template.get_isOpen())
                if (template !== null) {
                    template.closeAjaxControl();
                }
            }
        }

        if (this._activeTemplates !== null) {
            Array.clear(this._activeTemplates);
        }

        if ((typeof sMousePopupDivId === "undefined") || (sMousePopupDivId === "")) {
            sMousePopupDivId = "oDetailPopup";
        }

        var popUp = $get(sMousePopupDivId);
        if (popUp !== null) {
            popUp.style.visibility = "hidden";
        }
    },

    canOpenClientTemplate: function CoStar$Controls$_ClientTemplateManager$canOpenClientTemplate() {
        return (!this._isTemplateLoading && this._shouldRespondToOpenCommand);
    },

    openClientTemplateByTemplateType: function CoStar$Controls$_ClientTemplateManager$openClientTemplateByTemplateType(template, dataObject, x, y) {
        if (this.canOpenClientTemplate() && template !== null) {
            this._isTemplateLoading = true;
            this.closeAll();
            template.display(dataObject, null, x, y);
            Array.add(this._activeTemplates, dataObject);
        }
        this._shouldRespondToOpenCommand = true;
    },

    openClientTemplateWithDelay: function CoStar$Controls$_ClientTemplateManager$openClientTemplateWithDelay(clientTemplateInfo, openingElement, x, y, delay) {
        if (this.canOpenClientTemplate()) {
            if (this._templateTimeoutId !== null) {
                window.clearTimeout(this._templateTimeoutId);
                this._templateTimeoutId = null;
            }

            var method = new CoStar.Util.MethodExecutor(this._delayedOpeningClientTemplateDelegate, this, clientTemplateInfo, openingElement, x, y);
            var fn = function CoStar$Controls$_ClientTemplateManager$openClientTemplateWithDelayExecutor() {
                method.execute();
            };

            this._templateTimeoutId = window.setTimeout(fn, delay);
        }
    },

    clearDelayCall: function CoStar$Controls$_ClientTemplateManager$clearDelayCall() {
        if (this._templateTimeoutId !== null) {
            window.clearTimeout(this._templateTimeoutId);
            this._templateTimeoutId = null;
        }
    },

    // performs a one-level deep property by property comparison on two objects.
    _objectsAreEqual: function CoStar$Controls$_ClientTemplateManager$_objectsAreEqual(objectA, objectB) {
        if (objectA === null && objectB === null) {
            return true;
        }
        else {
            if (objectA === null || objectB === null) {
                return false;
            }
        }

        for (var propertyName1 in objectA) {
            if (objectA[propertyName1] !== objectB[propertyName1]) {
                return false;
            }
        }
        for (var propertyName2 in objectB) {
            if (objectB[propertyName2] !== objectA[propertyName2]) {
                return false;
            }
        }

        return true;
    },

    _activeTemplatesContainsTemplateInfo: function CoStar$Controls$_ClientTemplateManager$_activeTemplatesContainsTemplateInfo(templateInfo) {
        for (var i = 0, il = this._activeTemplates.length; i < il; i++) {
            if (this._objectsAreEqual(this._activeTemplates[i], templateInfo)) {
                return true;
            }
        }

        return false;
    },

    openClientTemplate: function CoStar$Controls$_ClientTemplateManager$openClientTemplate(clientTemplateInfo, openingElement, x, y) {
        if (this.canOpenClientTemplate()) {
            // can't use array.contains b/c the objects are constructed on the fly from the mouseenter event.
            if ((clientTemplateInfo !== null) && (!(this._activeTemplatesContainsTemplateInfo(clientTemplateInfo)))) {
                this.closeAll();
                var hcTemplate = this.getClientTemplateByTemplateId(clientTemplateInfo.templateid);
                if (hcTemplate !== null) {
                    this._isTemplateLoading = true;

                    // responsible for executing the web service and then displaying the hovercard's info.
                    hcTemplate.display(clientTemplateInfo, openingElement, x, y);
                }
                Array.add(this._activeTemplates, clientTemplateInfo);

                CoStar.Components.ClientRuntime.trace("Add--" + clientTemplateInfo.key);
                CoStar.Components.ClientRuntime.trace(this._activeTemplates.length);
            }
        }
        this._shouldRespondToOpenCommand = true;
    },

    clearTemplates: function CoStar$Controls$_ClientTemplateManager$clearTemplates() {
        this.removeTemplatesFromContainer();
        this._clientTemplates = {};
    },

    removeTemplatesFromContainer: function CoStar$Controls$_ClientTemplateManager$removeTemplatesFromContainer() {
        var templates = this._clientTemplates;
        if (templates !== null) {
            for (var name in this._clientTemplates) {
                var template = this._clientTemplates[name];
                if (typeof (template) != "undefined" && template !== null) {
                    template.dispose();
                    template = null;
                    this._clientTemplates[name] = null;
                    delete this._clientTemplates[name];
                }
            }
        }
    },

    clear: function CoStar$Controls$_ClientTemplateManager$clear() {
        this._isTemplateLoading = false;
        this.closeAll();

        this._activeTemplates = [];
    }
};
CoStar.Controls._ClientTemplateManager.registerClass('CoStar.Controls._ClientTemplateManager', Sys.Component);

CoStar.Web.Controls.AjaxSyncInfoEventArgs = function(ajaxSyncInfo) {
    CoStar.Web.Controls.AjaxSyncInfoEventArgs.initializeBase(this, null);
    this._ajaxSyncInfo = ajaxSyncInfo;
};
CoStar.Web.Controls.AjaxSyncInfoEventArgs.prototype = {
    get_ajaxSyncInfo: function() { return this._ajaxSyncInfo; },
    set_ajaxSyncInfo: function(value) { this._ajaxSyncInfo = value; },

    getValue: function(key) {
        if (this._ajaxSyncInfo !== null) {
            var value = this._ajaxSyncInfo[key];
            if (typeof (value) !== 'undefined') {
                return value;
            }
        }
        return null;
    }
};
CoStar.Web.Controls.AjaxSyncInfoEventArgs.registerClass("CoStar.Web.Controls.AjaxSyncInfoEventArgs", Sys.EventArgs);

CoStar.Web.Controls.AjaxSyncField = function(element) {
    CoStar.Web.Controls.AjaxSyncField.initializeBase(this, [element]);
    this._addInfoDelegate = null;
};
CoStar.Web.Controls.AjaxSyncField.prototype = {
    initialize: function() {
        CoStar.Web.Controls.AjaxSyncField.callBaseMethod(this, 'initialize');
        this._addInfoDelegate = Function.createDelegate(this, this._addInfo);
        CoStar.Web.Controls.EventPool.addEvent("AddPageAjaxSyncInfo", this._addInfoDelegate);
    },

    dispose: function() {
        if (this._addInfoDelegate !== null) {
            CoStar.Web.Controls.EventPool.removeEvent("AddPageAjaxSyncInfo", this._addInfoDelegate);
            this._addInfoDelegate = null;
        }
        CoStar.Web.Controls.AjaxSyncField.callBaseMethod(this, 'dispose');
    },

    _addInfo: function(sender, args) {
        var newInfo = args.get_ajaxSyncInfo();
        var elm = this.get_element();
        var currentValue = elm.value;
        if (currentValue !== null && currentValue !== '') {
            var oldInfo = Sys.Serialization.JavaScriptSerializer.deserialize(currentValue);
            // add the newInfo to the oldInfo object.
            for (var prop in newInfo) {
                oldInfo[prop] = newInfo[prop];
            }
            elm.value = Sys.Serialization.JavaScriptSerializer.serialize(oldInfo);
        }
        else {
            elm.value = Sys.Serialization.JavaScriptSerializer.serialize(newInfo);
        }
    }
};
CoStar.Web.Controls.AjaxSyncField.registerClass("CoStar.Web.Controls.AjaxSyncField", Sys.UI.Control);

CoStar.Util.RevalidateSessionArgs = function(ticks) {
    CoStar.Util.RevalidateSessionArgs.initializeBase(this);
    this._ticks = ticks;
};
CoStar.Util.RevalidateSessionArgs.prototype = {
    get_ticks: function() { return this._ticks; }
};
CoStar.Util.RevalidateSessionArgs.registerClass("CoStar.Util.RevalidateSessionArgs", Sys.EventArgs);

CoStar.Util._OutOfBandSessionValidator = function() {
    CoStar.Util._OutOfBandSessionValidator.initializeBase(this);
    this._revalidateSessionDelegate = null;
    this._lastTimeSessionWasValidated = null;
    this._delay = 30000; // default to 30 seconds.
};
CoStar.Util._OutOfBandSessionValidator.prototype = {
    set_delay: function(value) { this._delay = value; },
    get_delay: function() { return this._delay; },

    initialize: function() {
        CoStar.Util._OutOfBandSessionValidator.callBaseMethod(this, 'initialize');
        this._revalidateSessionDelegate = Function.createDelegate(this, this._revalidateSession);
        $evp.addEvent("RevalidateSession", this._revalidateSessionDelegate);
    },

    dispose: function() {
        if (this._revalidateSessionDelegate !== null) {
            $evp.removeEvent("RevalidateSession", this._revalidateSessionDelegate);
            this._revalidateSessionDelegate = null;
        }
        CoStar.Util._OutOfBandSessionValidator.callBaseMethod(this, 'dispose');
    },

    _revalidateSession: function(sender, args) {
        var revalidate = false;
        if (this._lastTimeSessionWasValidated === null) {
            revalidate = true;
        }
        else if ((args.get_ticks() - this._lastTimeSessionWasValidated) > this._delay) {
            revalidate = true;
        }

        if (revalidate) {
            this._lastTimeSessionWasValidated = args.get_ticks();
            var wRequest = new Sys.Net.WebRequest();
            wRequest.set_httpVerb("GET");
            wRequest.set_url("OutOfBandSessionValidator.ashx?d=" + args.get_ticks());

            var executor = new Sys.Net.XMLHttpExecutor();
            wRequest.set_executor(executor);
            executor.executeRequest();
        }
    }
};
CoStar.Util._OutOfBandSessionValidator.registerClass("CoStar.Util._OutOfBandSessionValidator", Sys.Component);

CoStar.Util._ClientResourceManager = function() {
    CoStar.Util._ClientResourceManager.initializeBase(this, null);
    this._loadedResourceTypes = {};
    this._resourcesToLoad = null;
    this._loadedResources = {};
};
CoStar.Util._ClientResourceManager.prototype = {
    set_resourcesToLoad: function(value) {
        this._resourcesToLoad = value;
        this._loadResources();
    },
    get_resourecsToLoad: function() {
        return this._resourecsToLoad;
    },

    _resourceLoaded: function(resource) {
        return (typeof (this._loadedResourceTypes[resource.ScriptResourceName]) !== 'undefined');
    },

    _createResourceStringBuilder: function() {
        return new Sys.StringBuilder(String.format("{0}?culture={1}&resxs=", this._loadResourcesURL, CoStar.Components.ClientRuntime.get_uiCultureCode()));
    },

    _loadResources: function() {
        if (this._resourcesToLoad && this._resourcesToLoad.constructor.getName() === "Array") {
            for (var i = 0, il = this._resourcesToLoad.length; i < il; i++) {
                var resx = this._resourcesToLoad[i];
                var clientType = resx.ClientType;
                var loadedResources = this._loadedResources[clientType];
                if (!loadedResources) { // replace
                    this._loadedResources[clientType] = resx.Resources;
                }
                else { // merge
                    var resources = resx.Resources;
                    for (var name in resources) {
                        loadedResources[name] = resources[name];
                    }
                }
            }
        }
        $evp.raiseEvent("ResourcesLoaded", this, Sys.EventArgs.Empty);
    },

    getString: function(type, name) {
        var resources = this._loadedResources[type];
        if (resources) {
            var resource = resources[name];
            if (resource) {
                return resource.Resource;
            }
        }
        return null;
    }
};
CoStar.Util._ClientResourceManager.registerClass("CoStar.Util._ClientResourceManager", Sys.Component);

// cookie helper functions.
function getCookie(name) {
    var curCookie = document.cookie.split("; ");
    for (var i = 0; i < curCookie.length; i++) {
        var crumb = curCookie[i].split("=");
        if (name == crumb[0])
            return unescape(crumb.splice(1, crumb.length).join('='));
    }

    return null;
}

function setCookie(name, value, expires, path, domain, secure) {
    document.cookie = name + "=" + (value) +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=.costar.com" : "") +
    ((secure) ? "; secure" : "");
}

// now that this file is being consumed by the ASP.NET AJAX 3.5 CompositeScript block,
// it no longer needs a manual notifyScriptLoaded command
// Sys.Application.notifyScriptLoaded();

/// <reference name="MicrosoftAjax.js" />
/// <reference name="MicrosoftAjaxWebForms.js" />
/// <reference name="CoStar.Web.Controls.Resources.ClientScript.ClientRuntime.js" assembly="CoStar.Web.Controls" />

var modalPopupManager;

Type.registerNamespace("CoStar.Web.Controls");
//Constructor
CoStar.Web.Controls.ModalPopupManager = function(){
   CoStar.Web.Controls.ModalPopupManager.initializeBase(this);
    // Properties
    this._PopupControlID = null;
    this._PopupDragHandleControlID = null;
    this._BackgroundCssClass = null;
    this._DropShadow = false;
    this._Drag = false;    
    this._OkControlID = null;
    this._CancelControlID = null;
    this._OnOkScript = null;
    this._OnCancelScript = null;
    this._xCoordinate = -1;
    this._yCoordinate = -1;
    this._EnableCoStarEvents = false;

    // Variables
    this._backgroundElement = null;
    this._foregroundElement = null;
    this._relativeOrAbsoluteParentElement = null;
    this._popupElement = null;
    this._dragHandleElement = null;
    this._showHandler = null;
    this._okHandler = null;
    this._cancelHandler = null;
    this._scrollHandler = null;
    this._resizeHandler = null;
    this._windowHandlersAttached = false;

    this._dropShadowBehavior = null;
    this._dragBehavior = null;
    this._isIE6 = false;

    this._saveTabIndexes = new Array();
    this._saveDesableSelect = new Array();
    this._tagWithTabIndex = new Array('A','AREA','BUTTON','INPUT','OBJECT','SELECT','TEXTAREA','IFRAME');
    this._RegisteredModalWindows = new Array();
}

CoStar.Web.Controls.ModalPopupManager.prototype = {
	//get_backgroundElement:function(){return this._backgroundElement;},
	//set_backgroundElement:function(val){this._backgroundElement=$get(val);},
	//get_foregroundElement:function(){return this._foregroundElement;},
	//set_foregroundElement:function(val){this._foregroundElement=$get(val);},
	//get_popupElement:function(){return this._popupElement;},
	//set_popupElement:function(val){this._popupElement=$get(val);},
    
    initialize : function() {
        
        CoStar.Web.Controls.ModalPopupManager.callBaseMethod(this, 'initialize');
        this._isIE6 = (Sys.Browser.agent == Sys.Browser.InternetExplorer && Sys.Browser.version < 7);
        //if(this._PopupDragHandleControlID)
            //this._dragHandleElement = $get(this._PopupDragHandleControlID);
        
        if (Sys && Sys.WebForms && Sys.WebForms.PageRequestManager){
            this._pageRequestManager = Sys.WebForms.PageRequestManager.getInstance();
            if (this._pageRequestManager){
                this._pageBeginRequestHandler = Function.createDelegate(this, this._onBeginRequest);
                this._pageEndRequestHandler = Function.createDelegate(this, this._onEndRequest);
                this._pageRequestManager.add_beginRequest(this._pageBeginRequestHandler);
                this._pageRequestManager.add_endRequest(this._pageEndRequestHandler);
            }
        }        
        this._scrollHandler = Function.createDelegate(this, this._onLayout);
        this._resizeHandler = Function.createDelegate(this, this._onLayout);
       
    
         this._RegisterHandler = Function.createDelegate(this, this._onControlRegister);
         CoStar.Web.Controls.EventPool.addEvent("RegisterModalWindow",this._RegisterHandler);
         
         this._ShowModalHandler = Function.createDelegate(this, this.show);
         CoStar.Web.Controls.EventPool.addEvent("ShowModalWindow",this._ShowModalHandler);
         
         this._cancelHandler = Function.createDelegate(this, this._onCancel);
         CoStar.Web.Controls.EventPool.addEvent("CancelModalWindow",this._cancelHandler);
         
         this._unRegisterHandler = Function.createDelegate(this, this._onControlUnRegister);
         CoStar.Web.Controls.EventPool.addEvent("UnRegisterModalWindow",this._unRegisterHandler);
        //}
        // Need to know when partial updates complete
        this.registerPartialUpdateEvents();
     
    },
    dispose : function() {
        /// <summary>
        /// Dispose the behavior
        /// </summary>
        
        if (this._pageRequestManager) {
            if (this._pageBeginRequestHandler) {
                this._pageRequestManager.remove_beginRequest(this._onBeginRequest);
                this._pageEndRequestHandler = null;
            }
            if (this._pageEndRequestHandler) {
                this._pageRequestManager.remove_endRequest(this._onEndRequest);
                this._pageEndRequestHandler = null;
            }
            this._pageRequestManager = null;
        }
        
        this._detachPopup();

        if(this._DropShadow)
        {
            // Remove DIV wrapper added in initialize
            this._foregroundElement.parentNode.appendChild(this._popupElement);
            this._foregroundElement.parentNode.removeChild(this._foregroundElement);
        }

        this._scrollHandler = null;
        this._resizeHandler = null;
       
        CoStar.Web.Controls.EventPool.removeEvent("ShowModalWindow",this._ShowModalHandler);
        CoStar.Web.Controls.EventPool.removeEvent("UnRegisterModalWindow",this._unRegisterHandler);
        CoStar.Web.Controls.EventPool.removeEvent("CancelModalWindow",this._cancelHandler);
        CoStar.Web.Controls.EventPool.removeEvent("RegisterModalWindow",this._RegisterHandler);
               
        CoStar.Web.Controls.ModalPopupManager.callBaseMethod(this, 'dispose');
    },
    
    _ModalInit: function(args) {
       
        if(this._DropShadow)
            {
                this._foregroundElement = document.createElement('div');
                this._popupElement.parentNode.appendChild(this._foregroundElement);
                this._foregroundElement.appendChild(this._popupElement);
            }
            else
            {
                this._foregroundElement = args.ModalPopup;
            }
            
            this._backgroundElement = document.createElement('div');
            this._backgroundElement.className = args.BackgroundCssClass;
            this._backgroundElement.style.display = 'none';
            this._backgroundElement.id = 'ModalBackGround';
            this._backgroundElement.style.position = 'absolute';
            this._backgroundElement.style.left = '0px';
            this._backgroundElement.style.top = '0px';
            
            // Want zIndex to big enough that the background sits above everything else
            // CSS 2.1 defines no bounds for the <integer> type, so pick arbitrarily
            this._backgroundElement.style.zIndex = 90000; //2147483645;

           
            this._foregroundElement.parentNode.appendChild(this._backgroundElement);
            this._foregroundElement.style.display = 'none';
            this._foregroundElement.style.position = 'absolute';
            //this.getCurrentStyle(this._backgroundElement, 'zIndex', this._backgroundElement.style.zIndex)
            this._foregroundElement.style.zIndex = 90001; //2147483646; //this._backgroundElement.style.zIndex + 1;
            
            
    },
//
    // Handlers
    //
    _onBeginRequest : function(sender, arg) {
       
    },
    _onEndRequest : function(sender, arg) {
        
    },
    _attachPopup : function() {
        /// <summary>
        /// Attach the event handlers for the popup
        /// </summary>

        if (this._DropShadow && !this._dropShadowBehavior) {
            this._dropShadowBehavior = $create(AjaxControlToolkit.DropShadowBehavior, {}, null, null, this._popupElement);
        }
        if (this._dragHandleElement && !this._dragBehavior) {
            this._dragBehavior = $create(AjaxControlToolkit.FloatingBehavior, {"handle" : this._dragHandleElement}, null, null, this._foregroundElement);
        }        
        $addHandler(window, 'resize', this._resizeHandler);
        $addHandler(window, 'scroll', this._scrollHandler);
        this._windowHandlersAttached = true;        
    },

    _detachPopup : function() {
        /// <summary>
        /// Detach the event handlers for the popup
        /// </summary>

        if (this._windowHandlersAttached) {
            if (this._scrollHandler) {
                $removeHandler(window, 'scroll', this._scrollHandler);
            }

            if (this._resizeHandler) {
                $removeHandler(window, 'resize', this._resizeHandler);
            }
            this._windowHandlersAttached = false;
        }
        
        if (this._dragBehavior) {
            this._dragBehavior.dispose();
            this._dragBehavior = null;
        }       
        
        if (this._dropShadowBehavior) {
            this._dropShadowBehavior.dispose();
            this._dropShadowBehavior = null;
        }

    },

    _onShow : function(e) {
        /// <summary>
        /// Handler for the target's click event
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>

        if (!this.get_element().disabled) {
            this.show();
            //e.preventDefault();
            return false;
        }
    },

    _onOk : function(e) {
        /// <summary>
        /// Handler for the modal dialog's OK button click
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>

        var element = $get(this._OkControlID);
        if (element && !element.disabled) {
            if (this.hide() && this._OnOkScript) {
                window.setTimeout(this._OnOkScript, 0);                
            }
            e.preventDefault();
            return false;
        }
    },

    _onCancel : function(source,args) {
        /// <summary>
        /// Handler for the modal dialog's Cancel button click
        /// </summary>
        /// <param name="e" type="Sys.UI.DomEvent">
        /// Event info
        /// </param>

        var element = args.CancelControlID;

        if ((element && !element.disabled)) {
            if (this.hide() && this._OnCancelScript) {
                window.setTimeout(this._OnCancelScript, 0);
            }
            //e.preventDefault();
            return false;
        }
    },
     _onControlRegister : function(source,args) {
           if(!Array.contains(this._RegisteredModalWindows, args.UniqueControlName))
           {
                Array.add(this._RegisteredModalWindows,args);
           }
        },
     _onControlUnRegister : function(source,args) {
      var ModalWindow;
        for(ModalWindow=0;ModalWindow <  this._RegisteredModalWindows.length;ModalWindow++)
        {
            if( this._RegisteredModalWindows[ModalWindow].UniqueControlName === args.UniqueControlName)
            {
                Array.removeAt(this._RegisteredModalWindows,ModalWindow);
                break;
            }
        }
      },
    _onLayout : function() {
        /// <summary>
        /// Handler for scrolling and resizing events that would require a repositioning of the modal dialog
        /// </summary>
        this._layout();
    },

    show : function(source,args) {
        /// <summary>
        /// Display the element referenced by PopupControlID as a modal dialog
        /// </summary>
        var ModalWindow;
        var FocusControl;

        for(ModalWindow=0;ModalWindow <  this._RegisteredModalWindows.length;ModalWindow++)
        {
            if( this._RegisteredModalWindows[ModalWindow].UniqueControlName === args.UniqueControlName)
            {
                this._popupElement = this._RegisteredModalWindows[ModalWindow].ModalPopup;
                this._ModalInit( this._RegisteredModalWindows[ModalWindow]);
                if(this._RegisteredModalWindows[ModalWindow].FocusControlID)
                {
                   FocusControl = $get(this._RegisteredModalWindows[ModalWindow].FocusControlID);
                }
                break;
            }
        }
        
//        if(this._EnableCoStarEvents)
//        {
//           this._popupElement = args.ModalPopup;
//           //var val = args[0];
//           this._ModalInit(args);
//        }
//        else
//        {
//           this._popupElement = this._element;
//           this._ModalInit(this._popupElement);
//        }
        
        var eventArgs = new Sys.CancelEventArgs();
        this.raiseShowing(eventArgs);
        if (eventArgs.get_cancel()) {
            return;
        }
        
        this._attachPopup();

        this._backgroundElement.style.display = 'block';
        this._foregroundElement.style.display = 'block';
        this._foregroundElement.style.visibility = 'visible';
        this._popupElement.style.display = 'block';
        this._popupElement.style.zIndex = 90002; //2147483647; //this._foregroundElement.style.zIndex + 1;
        if (this._isIE6) {
            this._foregroundElement.style.position = 'absolute';
            this._backgroundElement.style.position = 'absolute'; 
            // find the relative or absolute parent
            var tempRelativeOrAbsoluteParent = this._foregroundElement.parentNode;
            while (tempRelativeOrAbsoluteParent && (tempRelativeOrAbsoluteParent != document.documentElement)) {
                if((tempRelativeOrAbsoluteParent.style.position != 'relative') && (tempRelativeOrAbsoluteParent.style.position != 'absolute')) {
                    tempRelativeOrAbsoluteParent = tempRelativeOrAbsoluteParent.parentNode;
                } else {
                    this._relativeOrAbsoluteParentElement = tempRelativeOrAbsoluteParent;
                    break;
                }
            }                       
        }        


        // Disable TAB
        this.disableTab();

        this._layout();
        // On pages that don't need scrollbars, Firefox and Safari act like
        // one or both are present the first time the layout code runs which
        // obviously leads to display issues - run the layout code a second
        // time to work around this problem
        this._layout();
        if(FocusControl){
            FocusControl.focus();
        }
        this.raiseShown(Sys.EventArgs.Empty);
    },

    disableTab : function() {
        /// <summary>
        /// Change the tab indices so we only tab through the modal popup
        /// (and hide SELECT tags in IE6)
        /// </summary>

        var i = 0;
        var tagElements;
        var tagElementsInPopUp = new Array();
        Array.clear(this._saveTabIndexes);

        //Save all popup's tag in tagElementsInPopUp
        for (var j = 0, il=this._tagWithTabIndex.length; j < il; j++) {
            tagElements = this._foregroundElement.getElementsByTagName(this._tagWithTabIndex[j]);
            for (var k = 0, il2=tagElements.length; k < il2; k++) {
                tagElementsInPopUp[i] = tagElements[k];
                i++;
            }
        }

        i = 0;
        for (var j = 0, il3 = this._tagWithTabIndex.length; j < il3; j++) {
            tagElements = document.getElementsByTagName(this._tagWithTabIndex[j]);
            for (var k = 0, il4=tagElements.length; k < il4; k++) {
                if (Array.indexOf(tagElementsInPopUp, tagElements[k]) == -1)  {
                    this._saveTabIndexes[i] = {tag: tagElements[k], index: tagElements[k].tabIndex};
                    tagElements[k].tabIndex="-1";
                    i++;
                }
            }
        }

        //IE6 Bug with SELECT element always showing up on top
        i = 0;
        if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)) {
            //Save SELECT in PopUp
            var tagSelectInPopUp = new Array();
            for (var j = 0, il5=this._tagWithTabIndex.length; j < il5; j++) {
                tagElements = this._foregroundElement.getElementsByTagName('SELECT');
                for (var k = 0, il6=tagElements.length; k < il6; k++) {
                    tagSelectInPopUp[i] = tagElements[k];
                    i++;
                }
            }

            i = 0;
            Array.clear(this._saveDesableSelect);
            tagElements = document.getElementsByTagName('SELECT');
            for (var k = 0, il7=tagElements.length; k < il7; k++) {
                if (Array.indexOf(tagSelectInPopUp, tagElements[k]) == -1)  {
                    this._saveDesableSelect[i] = {tag: tagElements[k], visib: getCurrentStyle(tagElements[k], 'visibility')} ;
                    tagElements[k].style.visibility = 'hidden';
                    i++;
                }
            }
        }
    },

    restoreTab : function() {
        /// <summary>
        /// Restore the tab indices so we tab through the page like normal
        /// (and restore SELECT tags in IE6)
        /// </summary>

        for (var i = 0, il=this._saveTabIndexes.length; i < il; i++) {
            this._saveTabIndexes[i].tag.tabIndex = this._saveTabIndexes[i].index;
        }

        //IE6 Bug with SELECT element always showing up on top
        if ((Sys.Browser.agent === Sys.Browser.InternetExplorer) && (Sys.Browser.version < 7)) {
            for (var k = 0, il2=this._saveDesableSelect.length; k < il2; k++) {
                this._saveDesableSelect[k].tag.style.visibility = this._saveDesableSelect[k].visib;
            }
        }
    },

    hide : function() {
        /// <summary>
        /// Hide the modal dialog
        /// </summary>
        /// <returns type="Boolean" mayBeNull="false">
        /// Whether or not the dialog was hidden
        /// </returns>

        var eventArgs = new Sys.CancelEventArgs();
        this.raiseHiding(eventArgs);
        if (eventArgs.get_cancel()) {
            return false;
        }
        
        this._backgroundElement.style.display = 'none';
        this._foregroundElement.style.display = 'none';

        this.restoreTab();

        this._detachPopup();
        
        this.raiseHidden(Sys.EventArgs.Empty);
        return true;
    },

    _layout : function() {
        /// <summary>
        /// Position the modal dialog
        /// </summary>

        var scrollLeft = (document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft);
        var scrollTop = (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
               
        var clientBounds = this.getClientBounds();
        var clientWidth = clientBounds.width;
        var clientHeight = clientBounds.height;
        
        // Setup the location of the background element
        this._layoutBackgroundElement();

        var xCoord = 0;
        var yCoord = 0;
        if(this._xCoordinate < 0) {
            var foregroundelementwidth = this._foregroundElement.offsetWidth? this._foregroundElement.offsetWidth: this._foregroundElement.scrollWidth;
            xCoord = ((clientWidth-foregroundelementwidth)/2);
            // workaround for drag behavior which calls setlocation which in turn
            // changes the position of the panel to be absolute and requiring us
            // to add the scrollLeft so that it is positioned correctly.
            if (this._foregroundElement.style.position == 'absolute') {
                xCoord += scrollLeft;
            }
            this._foregroundElement.style.left = xCoord + 'px';
            
        } else {
            if(this._isIE6) {
                this._foregroundElement.style.left = (this._xCoordinate + scrollLeft) + 'px';
                xCoord = this._xCoordinate + scrollLeft;
            }
            else {
                this._foregroundElement.style.left = this._xCoordinate + 'px';
                xCoord = this._xCoordinate;
            }
        }
        if(this._yCoordinate < 0) {
            var foregroundelementheight = this._foregroundElement.offsetHeight? this._foregroundElement.offsetHeight: this._foregroundElement.scrollHeight;
            yCoord = ((clientHeight-foregroundelementheight)/2);           
            // workaround for drag behavior which calls setlocation which in turn
            // changes the position of the panel to be absolute and requiring us
            // to add the scrollLeft so that it is positioned correctly.
            if (this._foregroundElement.style.position == 'absolute') {
                yCoord += scrollTop;
            }
            this._foregroundElement.style.top = yCoord + 'px';
          
        } else {
            if(this._isIE6) {
                this._foregroundElement.style.top = (this._yCoordinate + scrollTop) + 'px';
                yCoord = this._yCoordinate + scrollTop;
            }
            else {
                this._foregroundElement.style.top = this._yCoordinate + 'px';
                yCoord = this._yCoordinate;
            }
        }

        // make sure get location agrees with the location of the foreground element
        this._layoutForegroundElement(xCoord, yCoord);
        
        if (this._dropShadowBehavior) {
            this._dropShadowBehavior.setShadow();
            window.setTimeout(Function.createDelegate(this, this._fixupDropShadowBehavior), 0);
        }
        
        // layout background element again to make sure it covers the whole background 
        // in case things moved around when laying out the foreground element
        this._layoutBackgroundElement();
    },
    
    _layoutForegroundElement : function(xCoord, yCoord) {
        /// <summary>
        /// Set the correct location of the foreground element to ensure that it is absolutely 
        /// positioned with respect to the browser. This is just a workaround for IE 6 since
        /// elements nested in relative parents cause modal popup positioning issues and 'fixed'
        /// is not supported by IE 6. Hence we manually compute the right location of the popup.
        /// </summary>
        /// <param name="xCoord" type="Number" integer="true" maybenull="false">
        /// <param name="yCoord" type="Number" integer="true" maybenull="false">        
        /// </params>
        
        if (this._isIE6 && this._relativeOrAbsoluteParentElement) {
            var foregroundLocation = this.getLocation(this._foregroundElement);  
            var relativeParentLocation = this.getLocation(this._relativeOrAbsoluteParentElement);
            var getLocationXCoord = foregroundLocation.x;
            if (getLocationXCoord != xCoord) {
                // offset it by that amount
                this._foregroundElement.style.left = (xCoord - relativeParentLocation.x) + 'px';
            } 
                        
            var getLocationYCoord = foregroundLocation.y;
            if (getLocationYCoord != yCoord) {
                // offset it by that amount
                this._foregroundElement.style.top = (yCoord - relativeParentLocation.y) + 'px';
            } 
        }
    },
    
    _layoutBackgroundElement : function() {
        /// <summary>
        /// Set the correct location of the background element to ensure that it is absolutely 
        /// positioned with respect to the browser.
        /// </summary>

        // Background element needs to cover the visible client area completely hence its
        // top and left coordinates need to be 0, and if relatively positioned its getlocation
        // value needs to be 0.
        if(this._isIE6) { 
            var backgroundLocation = this.getLocation(this._backgroundElement);
            var backgroundXCoord = backgroundLocation.x;
            if (backgroundXCoord != 0) {
                // offset it by that amount. This is assuming only one level of nesting. If
                // multiple parents with absolute/relative positioning are setup this may not 
                // cover the whole background.
                this._backgroundElement.style.left = (-backgroundXCoord) + 'px';
            } 
            
            var backgroundYCoord = backgroundLocation.y;
            if (backgroundYCoord != 0) {
                // offset it by that amount. This is assuming only one level of nesting. If
                // multiple parents with absolute/relative positioning are setup this may not 
                // cover the whole background.
                this._backgroundElement.style.top = (-backgroundYCoord) + 'px';
            }         
        }
        var clientBounds = this.getClientBounds();
        var clientWidth = clientBounds.width;
        var clientHeight = clientBounds.height;
        this._backgroundElement.style.width = Math.max(Math.max(document.documentElement.scrollWidth, document.body.scrollWidth), clientWidth)+'px';
        this._backgroundElement.style.height = Math.max(Math.max(document.documentElement.scrollHeight, document.body.scrollHeight), clientHeight)+'px';
    },

    _fixupDropShadowBehavior : function() {
        /// <summary>
        /// Some browsers don't update the location values immediately, so
        /// the location of the drop shadow would always be a step behind
        /// without this method
        /// </summary>

        if (this._dropShadowBehavior) {
            this._dropShadowBehavior.setShadow();
        }
    },

    _partialUpdateEndRequest : function(sender, endRequestEventArgs) {
        /// <summary>
        /// Show the popup if requested during a partial postback
        /// </summary>
        /// <param name="sender" type="Object">
        /// Sender
        /// </param>
        /// <param name="endRequestEventArgs" type="Sys.WebForms.EndRequestEventArgs">
        /// Event arguments
        /// </param>
        /// <returns />    
        CoStar.Web.Controls.ModalPopupManager.callBaseMethod(this, '_partialUpdateEndRequest', [sender, endRequestEventArgs]);

        if (this.get_element()) {
            // Look up result by element's ID
            var action = endRequestEventArgs.get_dataItems()[this.get_element().id];
            if ("show" == action) {
                this.show();
            } else if ("hide" == action) {
                this.hide();
            }
        }

        // Async postback may have added content; re-layout to accomodate it
        this._layout();
    },

    _onPopulated : function(sender, eventArgs) {
        /// <summary>
        /// Re-layout the popup after we've dynamically populated
        /// </summary>
        /// <param name="sender" type="Object">
        /// Sender
        /// </param>
        /// <param name="eventArgs" type="Sys.EventArgs">
        /// Event arguments
        /// </param>
        /// <returns />
        CoStar.Web.Controls.ModalPopupManager.callBaseMethod(this, '_onPopulated', [sender, eventArgs]);

        // Dynamic populate may have added content; re-layout to accomodate it
        this._layout();
    },
    
    get_PopupControlID : function() {
        /// <value type="String">
        /// The ID of the element to display as a modal popup
        /// </value>
        return this._PopupControlID;
    },
    set_PopupControlID : function(value) {
        if (this._PopupControlID != value) {
            this._PopupControlID = value;
            this.raisePropertyChanged('PopupControlID');
        }
    },

    get_X: function() {
        /// <value type="Number" integer="true">
        /// The number of pixels from the left of the browser to position the modal popup.
        /// </value>
        return this._xCoordinate;
    },
    set_X: function(value) {
        if (this._xCoordinate != value) {
            this._xCoordinate = value;
            this.raisePropertyChanged('X');
        }
    },

    get_Y: function() {
        /// <value type="Number" integer="true">
        /// The number of pixels from the top of the browser to position the modal popup.
        /// </value>
        return this._yCoordinate;
    },
    set_Y: function(value) {
        if (this._yCoordinate != value) {
            this._yCoordinate = value;
            this.raisePropertyChanged('Y');
        }
    },
       
    get_PopupDragHandleControlID : function() {
        /// <value type="String">
        /// The ID of the element to display as the drag handle for the modal popup
        /// </value>
        return this._PopupDragHandleControlID;
    },
    set_PopupDragHandleControlID : function(value) {
        if (this._PopupDragHandleControlID != value) {
            this._PopupDragHandleControlID = value;
            this.raisePropertyChanged('PopupDragHandleControlID');
        }
    },

    get_BackgroundCssClass : function() {
        /// <value type="String">
        /// The CSS class to apply to the background when the modal popup is displayed
        /// </value>
        return this._BackgroundCssClass;
    },
    set_BackgroundCssClass : function(value) {
        if (this._BackgroundCssClass != value) {
            this._BackgroundCssClass = value;
            this.raisePropertyChanged('BackgroundCssClass');
        }
    },

    get_DropShadow : function() {
        /// <value type="Boolean">
        /// Whether or not a drop-shadow should be added to the modal popup
        /// </value>
        return this._DropShadow;
    },
    set_DropShadow : function(value) {
        if (this._DropShadow != value) {
            this._DropShadow = value;
            this.raisePropertyChanged('DropShadow');
        }
    },

    get_Drag : function() {
        /// <value type="Boolean">
        /// Obsolete: Setting the _Drag property is a noop
        /// </value>
        return this._Drag;
    },
    set_Drag : function(value) {
        if (this._Drag != value) {
            this._Drag = value;
            this.raisePropertyChanged('Drag');
        }
    },

    get_OkControlID : function() {
        /// <value type="String">
        /// The ID of the element that dismisses the modal popup
        /// </value>
        return this._OkControlID;
    },
    set_OkControlID : function(value) {
        if (this._OkControlID != value) {
            this._OkControlID = value;
            this.raisePropertyChanged('OkControlID');
        }
    },

    get_CancelControlID : function() {
        /// <value type="String">
        /// The ID of the element that cancels the modal popup
        /// </value>
        return this._CancelControlID;
    },
    set_CancelControlID : function(value) {
        if (this._CancelControlID != value) {
            this._CancelControlID = value;
            this.raisePropertyChanged('CancelControlID');
        }
    },

    get_OnOkScript : function() {
        /// <value type="String">
        /// Script to run when the modal popup is dismissed with the OkControlID
        /// </value>
        return this._OnOkScript;
    },
    set_OnOkScript : function(value) {
        if (this._OnOkScript != value) {
            this._OnOkScript = value;
            this.raisePropertyChanged('OnOkScript');
        }
    },
    get_EnableCoStarEvents : function() {
     
       return this._EnableCoStarEvents;
    },
    set_EnableCoStarEvents : function(value) {
         if(this._EnableCoStarEvents != value)
         {
            this._EnableCoStarEvents = value;
             this.raisePropertyChanged('EnableCoStarEvents');
         }
    },
    get_OnCancelScript : function() {
        /// <value type="String">
        /// Script to run when the modal popup is dismissed with the CancelControlID
        /// </value>
        return this._OnCancelScript;
    },
    set_OnCancelScript : function(value) {
        if (this._OnCancelScript != value) {
            this._OnCancelScript = value;
            this.raisePropertyChanged('OnCancelScript');
        }
    },
    
    add_showing : function(handler) {
        /// <summary>
        /// Add an event handler for the showing event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('showing', handler);
    },
    remove_showing : function(handler) {
        /// <summary>
        /// Remove an event handler from the showing event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('showing', handler);
    },
    raiseShowing : function(eventArgs) {
        /// <summary>
        /// Raise the showing event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the showing event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('showing');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    
    add_shown : function(handler) {
        /// <summary>
        /// Add an event handler for the shown event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('shown', handler);
    },
    remove_shown : function(handler) {
        /// <summary>
        /// Remove an event handler from the shown event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('shown', handler);
    },
    raiseShown : function(eventArgs) {
        /// <summary>
        /// Raise the shown event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the shown event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('shown');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    
    add_hiding : function(handler) {
        /// <summary>
        /// Add an event handler for the hiding event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('hiding', handler);
    },
    remove_hiding : function(handler) {
        /// <summary>
        /// Remove an event handler from the hiding event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('hiding', handler);
    },
    raiseHiding : function(eventArgs) {
        /// <summary>
        /// Raise the hiding event
        /// </summary>
        /// <param name="eventArgs" type="Sys.CancelEventArgs" mayBeNull="false">
        /// Event arguments for the hiding event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('hiding');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    
    add_hidden : function(handler) {
        /// <summary>
        /// Add an event handler for the hidden event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().addHandler('hidden', handler);
    },
    remove_hidden : function(handler) {
        /// <summary>
        /// Remove an event handler from the hidden event
        /// </summary>
        /// <param name="handler" type="Function" mayBeNull="false">
        /// Event handler
        /// </param>
        /// <returns />
        this.get_events().removeHandler('hidden', handler);
    },
    raiseHidden : function(eventArgs) {
        /// <summary>
        /// Raise the hidden event
        /// </summary>
        /// <param name="eventArgs" type="Sys.EventArgs" mayBeNull="false">
        /// Event arguments for the hidden event
        /// </param>
        /// <returns />
        
        var handler = this.get_events().getHandler('hidden');
        if (handler) {
            handler(this, eventArgs);
        }
    },
    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);
            }       
		}
	},
    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, il2=screenRects.length; i < il2; 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);
    },
    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.offsetWidth;
                clientHeight = document.documentElement.offsetHeight;
                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);
    },
        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
    }
   
   
   }
   
   CoStar.Web.Controls.ModalPopupManager.registerClass('CoStar.Web.Controls.ModalPopupManager',  Sys.Component);

if(modalPopupManager == null)
{
    modalPopupManager = $create(CoStar.Web.Controls.ModalPopupManager,{id:"modalPopupManager"});

}

// now that this file is being consumed by the ASP.NET AJAX 3.5 CompositeScript block,
// it no longer needs a manual notifyScriptLoaded command
// Sys.Application.notifyScriptLoaded();

/// <reference name="MicrosoftAjax.js" />
/// <reference name="MicrosoftAjaxWebForms.js" />
/// <reference name="CoStar.Web.Controls.Resources.ClientScript.ClientRuntime.js" assembly="CoStar.Web.Controls" />

Type.registerNamespace('CoStar.Web');

CoStar.Web._ScrollbarManager = function() {
    this._items = new Array();
    this._onAppLoadHandler = null;
    this._onPageBeginRequestHandler = null;
    this._onPageEndRequestHandler = null;
    CoStar.Web._ScrollbarManager.initializeBase(this);
}


CoStar.Web._ScrollbarManager.prototype = {
    
    dispose: function() {
        
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        if (this._onPageEndRequestHandler) {
            prm.remove_endRequest(this._onPageEndRequestHandler);
            this._onPageEndRequestHandler = null;
        }
        if (this._onPageBeginRequestHandler) {
            prm.remove_beginRequest(this._onPageBeginRequestHandler);
            this._onPageBeginRequestHandler = null;
        }
        
        CoStar.Web._ScrollbarManager.callBaseMethod(this, 'dispose');
    },
    
    initialize: function() {
        CoStar.Web._ScrollbarManager.callBaseMethod(this, 'initialize');
        this._onAppLoadHandler = Function.createDelegate(this, this._onAppLoad);
        Sys.Application.add_load(this._onAppLoadHandler);
    },
    
    _onAppLoad: function(sender, e) {
        
        Sys.Application.remove_load(this._onAppLoadHandler);
        this._onAppLoadHandler = null;
        
        this._onPageBeginRequestHandler = Function.createDelegate(this, this._onPageBeginRequest);
        this._onPageEndRequestHandler = Function.createDelegate(this, this._onPageEndRequest);
        
        var prm = Sys.WebForms.PageRequestManager.getInstance();
        prm.add_beginRequest(this._onPageBeginRequestHandler);
        prm.add_endRequest(this._onPageEndRequestHandler);
    },
    
    _onPageBeginRequest: function(sender, e) {
        for (var index = 0; index < this._items.length; index++) {
            var obj = $get(this._items[index].key);
            if (obj != null) {
                this._items[index].value = new Sys.UI.Point(obj.scrollLeft, obj.scrollTop);
            }
        }
    },
    _onPageEndRequest: function(sender, e) {
        for (var index = 0; index < this._items.length; index++) {
            var itm = this._items[index];
            var obj = $get(itm.key);
            if (obj != null) {
                var pos = itm.value;
                obj.scrollLeft = pos.x;
                obj.scrollTop = pos.y;
            }
            else if (!itm.persist) {
                this.unregister(itm.key);
            }
        }
    }
}

CoStar.Web._ScrollbarManager.prototype.register = function(id, persist) {
    var obj = $get(id);
    if (obj !== null) {
        for (var i = 0; i < this._items.length; i++) {
            if (this._items[i].key == id) {
                return;
            }
        }
        this._items.push({ key: id, value: new Sys.UI.Point(0,0), persist: persist });
    }
}

CoStar.Web._ScrollbarManager.prototype.unregister = function(id) {
    for (var i = 0; i < this._items.length; i++) {
        if (this._items[i].key == id) {
            Array.removeAt(this._items, i);
            return;
        }
    }
}


CoStar.Web._ScrollbarManager.registerClass('CoStar.Web._ScrollbarManager', Sys.Component);
CoStar.Web.ScrollbarManager = $create(CoStar.Web._ScrollbarManager, { 'id': 'ScrollbarManager' });

// now that this file is being consumed by the ASP.NET AJAX 3.5 CompositeScript block,
// it no longer needs a manual notifyScriptLoaded command
// Sys.Application.notifyScriptLoaded();

if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();