﻿//----------------------------------------------------------
// 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, "");
}

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(horzlayout) {
    //For vertical layout use the Generic loader
    if (horzlayout.toLowerCase() == "true") {
        var loaderCtl = document.getElementById('divSearchControlProgress');
        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(horzlayout) {
    //For vertical layout use the Generic loader
    if (horzlayout.toLowerCase() == "true") {
        var loaderCtl = document.getElementById('divSearchControlProgress');
        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';
    }
} 

window.onresize = function() { SetECommercePageFooter(); }

//Global Variables - CMS
var FirstName = "";
var LastName = "";
var ListingsCount = "";
var PremiumListingsCount = "";
var OrderNumber = "";
var LoopnetSavings = "";

var imgArray = null;
var winInterval = null;

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 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);

var isErrorMsgHeightAdded = false;

function pageLoad() {
    SetECommercePageFooter();
    if (!IE6) {
        imgArray = new Array();
        if (document.images.length > 0) {
            imgArray = document.images;
            var isLoaded = CheckAllImagesLoaded();
            if (isLoaded != true) {
                /*Trigger the method to check & recall the SetECommercePageFooter when images are loaded */
                winInterval = window.setInterval(function() { SetECommercePageFooterFF(); }, 500);
            }
        }
    }
}
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;
}
/* Returns 'true' when all the images in the document are loaded. 'false' otherwise. */
function CheckAllImagesLoaded() {
    var Count = 0;
    var imgArrayTemp = new Array();
    var isCompleted = false;
    if (imgArray !== null && imgArray.length !== 0) {
        for (var nCount = 0; nCount < imgArray.length; nCount++) {
            if (imgArray[nCount].complete != true) {
                imgArrayTemp[Count] = imgArray[nCount];
                Count++;
            }
        }
        imgArray = imgArrayTemp;

        if (imgArray == null) {
            isCompleted = true;
        }
    }
    else {
        isCompleted = true;
    }
    //alert(imgArray+' ' + imgArray.length + ' ' + isCompleted);
    return isCompleted;
}

/* Check & recall the SetECommercePageFooter when images are loaded*/
function SetECommercePageFooterFF() {
    var isLoaded = CheckAllImagesLoaded();
    if (isLoaded == true) {
        window.clearInterval(winInterval);
        SetECommercePageFooter();
        imgArray = null;
    }
}
//Positions the Footer based on the content height & browser height/resolution
function SetECommercePageFooter() {


    var divHeader = $get('divHeader');
    var divFooter = $get('divFooter');
    var divContent = $get('divContent');
    var divErrorMsgs = $get('divErrorMsgs');
    var divContactValMain = $get('divContactValMain');
    var divReviewRight = $get('divReviewPageRight');

    if (divContactValMain !== null) {
        divContactValMain.style.height = "auto";
    }
    if (divReviewRight !== null) {
        divReviewRight.style.height = "auto";
    }
    var objInnerContent = $get('divInnerContent');
    var bodyHeight;
    var emailPanel = $get('hdnEmailComponentPanel');
    
    //Apply bgnd style only on Offer page
    if (divReviewRight !== null && objInnerContent != null) {
        if (objInnerContent.className.indexOf('CMSBG') == -1) {
            objInnerContent.className = objInnerContent.className + ' CMSBG';
        }
    }
    if (divFooter != null && divContent != null) {
        divFooter.style.display = 'block';
        if (IE || SAFARI) //If the browser is IE or Safari
        {
            if (IE8 || SAFARI) {
                divFooter.style.position = 'relative';
            }
            else {
                divFooter.style.position = 'absolute';
            }

            var tempHeight = null;
            if (divHeader !== null && divContent !== null) {

                if (objInnerContent != null) {
                    if (IE6 || SAFARI) {
                        if (divReviewRight !== null) {
                            divReviewRight.style.height = "auto";
                        }
                        if (divContactValMain !== null) {
                            divContactValMain.style.height = "auto";
                        }
                        objInnerContent.style.height = "auto";
                        divContent.style.height = "auto";
                        document.body.style.height = "auto";
                    }
                    else {
                        objInnerContent.style.height = "auto";
                    }

                    tempHeight = document.body.clientHeight;
                    if (IE6) {
                        document.body.style.height = "100%";
                    }

                    if (objInnerContent.offsetHeight + divHeader.offsetHeight + divFooter.offsetHeight >= document.body.clientHeight) {
                        tempHeight = objInnerContent.offsetHeight + divHeader.offsetHeight + divFooter.offsetHeight;
                    }
                }
                bodyHeight = tempHeight - divHeader.offsetHeight - divFooter.offsetHeight;

            }

            if (divErrorMsgs != null && isErrorMsgHeightAdded === false) {
                bodyHeight += divErrorMsgs.offsetHeight;
                isErrorMsgHeightAdded = true;
            }

            divContent.style.height = bodyHeight + "px";
            if (!IE8 && !SAFARI) {
                divContent.style.paddingBottom = divFooter.offsetHeight + 'px';
            }
            if (objInnerContent != null) {
                objInnerContent.style.height = bodyHeight + "px";
                //To adjust the height of ContactValidtion & ReviewListings Right section
                if (divContactValMain !== null) {
                    divContactValMain.style.height = objInnerContent.offsetHeight + "px";
                }
                if (divReviewRight !== null) {
                    divReviewRight.style.height = objInnerContent.offsetHeight + "px";
                }
            }

            if (!IE6) {
                divFooter.style.bottom = '0px';
            }
            else {

                divFooter.style.top = document.body.clientHeight - divFooter.offsetHeight + 'px';
                tempHeight = document.body.clientHeight;
                if (objInnerContent.offsetHeight + divHeader.offsetHeight + divFooter.offsetHeight >= document.body.clientHeight) {
                    tempHeight = objInnerContent.offsetHeight + divHeader.offsetHeight + divFooter.offsetHeight;
                }

                bodyHeight = tempHeight - divHeader.offsetHeight - divFooter.offsetHeight;


                divContent.style.height = bodyHeight + "px";
                divContent.style.paddingBottom = divFooter.offsetHeight + 'px';
                if (objInnerContent != null) {
                    objInnerContent.style.height = bodyHeight + "px";
                    //To adjust the height of ContactValidtion & ReviewListings Right section
                    if (divContactValMain !== null) {
                        divContactValMain.style.height = objInnerContent.offsetHeight + "px";
                    }
                    if (divReviewRight !== null) {
                        divReviewRight.style.height = objInnerContent.offsetHeight + "px";
                    }
                }
            }
        }
        else {
            var objInnerContent = $get('divInnerContent');
            var tempHeight = document.body.scrollHeight;
            var bodyHeight;
            if (divHeader !== null && divContent !== null) {
                if (objInnerContent != null) {
                    if (!FF2) {
                        objInnerContent.style.height = "auto";
                    }
                    if (objInnerContent.offsetHeight + divHeader.offsetHeight + divFooter.offsetHeight >= document.body.scrollHeight) {
                        tempHeight = objInnerContent.offsetHeight + divHeader.offsetHeight + divFooter.offsetHeight;
                    }
                }
                bodyHeight = tempHeight - divHeader.offsetHeight - divFooter.offsetHeight;
                divContent.style.height = bodyHeight + "px";
                if (objInnerContent != null) {
                    objInnerContent.style.height = bodyHeight + "px";
                    //To adjust the height of ContactValidtion section & ReviewListings Right section
                    if (divContactValMain !== null) {
                        divContactValMain.style.height = objInnerContent.offsetHeight + "px";
                    }
                    if (divReviewRight !== null) {
                        divReviewRight.style.height = objInnerContent.offsetHeight + "px";
                    }
                }
            }
        }
        divFooter.style.visibility = 'visible';
    }

    if (emailPanel != null && emailPanel.value.trim().length > 0) {
        setEmailPanelPosition(emailPanel.value);

        if (!IE6) {
            var actualBodyHeight = $get(emailPanel.PnlBkgrndId).clientHeight - divHeader.offsetHeight - divFooter.offsetHeight;
            if (bodyHeight < actualBodyHeight) {
                divContent.style.height = actualBodyHeight + 'px';
                objInnerContent.style.height = actualBodyHeight + 'px';
                divFooter.style.bottom = '0px';
            }
        }

        if (IE6 && emailPanel.PnlBkgrndId != '')
            SetBkgPanelWidthForIE6($get(emailPanel.PnlBkgrndId));
    }
    HideLoader();
}



var divPopUp = null;

function HandleClickEvent(e) {
    var objdivPopup = $get(divPopUp);
    if (objdivPopup != null) {
        objdivPopup.style.visibility = "hidden";
        document.onclick = null;
    }
}
function disableInvalidCharForEmail(sender, e) {
    if (IE) {
        var charKeyPressed = event.keyCode;

        if (charKeyPressed === 13) {
            ClickSubmitButton(sender);
            return false;
        } //@ or (A to Z) or (a to z) or (0 to 9) or . or _ or -
        else 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;

        if (splKeyPressed === 13) {
            ClickSubmitButton(sender);
            return false;
        } //@ or (A to Z) or (a to z) or (0 to 9) or . or _ or -
        else 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;
        }
    }
    return true;
}

function ClickSubmitButton(sender) {
    var submitButton = $get(sender.attributes.getNamedItem('submitButton').nodeValue);
    if (submitButton !== null) {
        if (!submitButton.disabled) {
            /* Fix for 14400 - enter does not trigger "Submit" in FF 2 */
            if (FF2) {
                ShowLoader();
                __doPostBack(submitButton.name, '');
            }
            else {
                submitButton.click();
            }
        }
    }
}

//This method is used to simulate the Purchase button click in the OfferPage
function TriggerPurchase() {
    var hdnControl = $get('hdnButtonHolder');
    if (hdnControl !== null) {
        hdnControl = $get(hdnControl.attributes.getNamedItem('purchaseButton').nodeValue);
        if (hdnControl !== null) {
            ShowLoader();
            hdnControl.click();
        }
    }
}

//This method is used to simulate the CMSTrigger button click and pass the argument (ContentID)
function TriggerCMSButton(args) {
    var hdnControl = $get('hdnButtonHolder');
    var hdnCMS = null;
    var hdnArgs = null;
    if (hdnControl !== null) {
        hdnCMS = $get(hdnControl.attributes.getNamedItem('cmsTriggerButton').nodeValue);
        hdnArgs = $get(hdnControl.attributes.getNamedItem('cmsTriggerEventArgs').nodeValue);
        if (hdnCMS !== null && hdnArgs !== null) {
            hdnArgs.value = args.toString();
            hdnCMS.click();
        }
    }
}

//This method is used to simulate the ReviewListings button click in the Account Info step of Purchase Listings
function NavigateToOfferPage() {
    /* Only for FF2, use history.go to navigate to ReviewListings. */
    if (FF2) {
        history.go(-1);
    }
    else {
        var hdnControl = $get('hdnAccountInfoTrigger');
        if (hdnControl !== null) {
            hdnControl = $get(hdnControl.attributes.getNamedItem('reviewListingsButton').nodeValue);
            if (hdnControl !== null) {
                ShowLoader();
                hdnControl.click();
            }
        }
    }
}
//SiteNavigation (Admin/Auth users) requires this method
//Opens given URL in new browser window
function openNewWindow(url) {
    window.open(url);
}


/******ShowCaseEmail control scripts*************/
function showPopup() {
    var divBackgroundPanelCtrl = $get('divBackgroundPanel');
    var divContentPanelCtrl = $get('divContentPanel');
    if (divBackgroundPanelCtrl != null && divContentPanelCtrl != null) {
        divContentPanelCtrl.style.display = 'block';
        divBackgroundPanelCtrl.style.display = 'block';

    }
    divBackgroundPanelCtrl = null;
    divContentPanelCtrl = null;
}

function hidePopup() {
    var divBackgroundPanelCtrl = $get('divBackgroundPanel');
    var divContentPanelCtrl = $get('divContentPanel');
    var hdnDataControlIdsCtrl = $get('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 = $get(ctrlToClearId);
            if (txtCtrlToClear != null) {
                txtCtrlToClear.value = '';
            }
        }
    }

    var objhdnEmailCompPnl = $get('hdnEmailComponentPanel')
    if (objhdnEmailCompPnl !== null) {
        objhdnEmailCompPnl.value = '';
    }
    return false;
}

function SetPopupPosition(divId) {
    var objdiv = $get(divId);
    if (objdiv !== null) {
        objdiv.style.left = Math.round((getWindowWidth() - objdiv.clientWidth) / 2).toString() + "px";
        objdiv.style.top = Math.round((getWindowHeight() - objdiv.clientHeight) / 2).toString() + "px";
    }
}

function SetPopupHeight(divId, heightPct) {
    var objdiv = $get(divId);
    if (objdiv !== null) {
        var heightPixels = Math.round(getWindowHeight() * heightPct);
        objdiv.style.height = heightPixels.toString() + "px";
    }
}

function showEmailPanel(backgroundPanel, emailPanel) {
    var objBkgPnl = $get(backgroundPanel);
    if (objBkgPnl !== null) {
        objBkgPnl.style.height = document.body.offsetHeight + "px";
        if (IE6)
            SetBkgPanelWidthForIE6(objBkgPnl);
        setEmailPanelPosition(emailPanel);
    }
}

function setEmailPanelPosition(emailPanel) {
    var emailPanelControl = $get(emailPanel);
    var emailPanelWidth = 330;
    var emailPanelHeight = 149;
    if (emailPanelControl !== null) {
        emailPanelControl.style.top = scrollTop() + (getWindowHeight() / 2) - emailPanelHeight + "px";
        emailPanelControl.style.paddingLeft = (getWindowWidth() / 2) - emailPanelWidth + "px";
        emailPanelControl.style.display = 'block';
    }
}

function SetBkgPanelWidthForIE6(objBkgPnl) {

    if (objBkgPnl != null)
        objBkgPnl.style.width = document.body.offsetWidth + "px";
}

/******ShowCaseEmail control scripts*************/

//To be converted to structured js
//Method to auto populate the billing address(from mailing address) in PaymentInfo step
function populateBillingAddr(chkBox) {
    if (chkBox === null) {
        return;
    }
    if (!chkBox.checked) {
        return;
    }
    var chkBoxCntrl = chkBox.parentNode;
    if (chkBoxCntrl === null) {
        return;
    }
    var txtStreetAddress = $get(chkBoxCntrl.attributes.getNamedItem('txtStreetAddress').nodeValue);
    var txtCity = $get(chkBoxCntrl.attributes.getNamedItem('txtCity').nodeValue);
    var ddlState = $get(chkBoxCntrl.attributes.getNamedItem('ddlState').nodeValue);
    var txtZip = $get(chkBoxCntrl.attributes.getNamedItem('txtZip').nodeValue);
    if (txtStreetAddress !== null && txtCity !== null && ddlState !== null && txtZip !== null) {
        var streetAddr = "";
        var city = "";
        var stateCd = "";
        var zip = "";
        if (chkBox.checked) {
            streetAddr = chkBoxCntrl.attributes.getNamedItem('StreetAddress').nodeValue;
            city = chkBoxCntrl.attributes.getNamedItem('City').nodeValue;
            stateCd = chkBoxCntrl.attributes.getNamedItem('StateCd').nodeValue;
            zip = chkBoxCntrl.attributes.getNamedItem('Zip').nodeValue;
        }
        txtStreetAddress.value = streetAddr;
        txtCity.value = city;
        ddlState.value = stateCd;
        txtZip.control.setValue(zip);
    }
}


/**********************************/

function DisplayEComError(shouldDisplay) {
    var divErrorInfo = $get('divErrorInfo');
    if (divErrorInfo === null) {
        return;
    }
    var objdivErrorSubInfo = $get('divErrorSubInfo');
    if (objdivErrorSubInfo !== null) {
        if (shouldDisplay == 'true') {
            divErrorInfo.style.display = 'block';
            objdivErrorSubInfo.style.display = 'block';
        }
        else {
            divErrorInfo.style.display = 'none';
            objdivErrorSubInfo.style.display = 'none';
        }
    }
    SetECommercePageFooter();
}

function SetAndDisplayErrorMsg(message) {
    var divErrorInfo = $get('divErrorInfo');
    if (divErrorInfo === null) {
        return;
    }

    divErrorInfo.style.display = 'block';
    var objdivUserNameError = $get('divUsernameError');
    if (objdivUserNameError !== null) {
        objdivUserNameError.style.display = 'block';
        objdivUserNameError.innerHTML = message;
    }
}

function SetAndDisplayPymtErrorMsg(message) {
    var divErrorInfo = $get('divErrorInfo');
    if (divErrorInfo === null) {
        return;
    }

    divErrorInfo.style.display = 'block';
    var objdivCreditCardError = $get('divCreditCardError');
    if (objdivCreditCardError !== null) {
        objdivCreditCardError.style.display = 'block';
        objdivCreditCardError.innerHTML = message;
    }
}

var usernameTextBoxId;

function ValidateUsername(txtUsernameID) {


    usernameTextBoxId = txtUsernameID;
    var usernameText;
    if ($get(txtUsernameID) !== null) {
        usernameText = $get(txtUsernameID).value.trim();
    }
    if (usernameText == "") {
        return true;
    }
    //ShowLoader();
    PageMethods.CheckUsernameAvailability(usernameText, OnValidationResponse);

}

function OnValidationResponse(response) {

    HideLoader();
    var txtBoxObj;
    if (usernameTextBoxId != "") {
        txtBoxObj = $get(usernameTextBoxId);
    }
    if (response != "") {
        SetAndDisplayErrorMsg(response);
        if (txtBoxObj != null)
            txtBoxObj.className = 'ltxtPrimText ecpHighlight';
        SetECommercePageFooter();
        return false;
    }
    else {
        if ($get('divUsernameError') != null)
            $get('divUsernameError').style.display = 'none';
        if ($get('divErrorSubInfo') !== null && $get('divErrorInfo') !== null) {
            if ($get('divErrorSubInfo').style.display != 'block') {
                $get('divErrorInfo').style.display = 'none';
            }
        }
        if (txtBoxObj != null)
            txtBoxObj.className = 'ltxtPrimText';
    }
    return true;
}
/*****Sold Out State ************/

function TriggerNotify(chkNotify) {
    var objhdnButtonHolder = $get("hdnButtonHolder");

    if (objhdnButtonHolder != null) {
        var objbtnNavigate = $get(objhdnButtonHolder.attributes.getNamedItem('notifyButton').nodeValue);
        if (objbtnNavigate != null) {
            objbtnNavigate.click();

        }
    }
    var chkbox = $get(chkNotify);
    if (chkbox !== null) {
        chkbox.disabled = true;
    }
}

/***** Check Email Popup ************/
function SetCheckEmailPopupPosition() {
    var divChkEmailTransBkgrnd = $get('divChkEmailTransBkgrnd');
    var chkEmailPopup = $get('divCheckYourEmail');
    var popupWidth = 290, popupHeight = 185;
    if (chkEmailPopup !== null && divChkEmailTransBkgrnd !== null) {
        chkEmailPopup.style.top = scrollTop() + (getWindowHeight() / 2) - (popupHeight / 2) + "px";
        chkEmailPopup.style.marginLeft = (getWindowWidth() / 2) - (popupWidth / 2) + "px";
        chkEmailPopup.style.display = 'block'
        divChkEmailTransBkgrnd.style.display = 'block';
    }
}

function HideChkEmailPopup() {
    var chkEmailPopup = $get('divCheckYourEmail');
    if (chkEmailPopup != null)
        chkEmailPopup.style.display = 'none';

    var divChkEmailTransBkgrnd = $get('divChkEmailTransBkgrnd');
    if (divChkEmailTransBkgrnd != null)
        divChkEmailTransBkgrnd.style.display = 'none';
}

// Flag used to identify 'Promote to Checkout' click in PaymentInfo for CreditCard validation (set in ValidateCreditCard.js)
var is_PI_CreditCard_Not_Valid = false;
function WizardButtonClicked(wizardButton) {

    if (is_PI_CreditCard_Not_Valid) {
        is_PI_CreditCard_Not_Valid = false;
        return false;
    }

    ShowLoader();
    if (wizardButton.disabled) {
        return false;
    }
    else {
        wizardButton.disabled = true;
        return true;
    }
}
/***** Check Email Popup ************/

/*** Terms of Use - popup***/
var iScreenWidth = screen.availWidth;
var iScreenHeight = screen.availHeight;
function createWinPos(piWindowWidth, piWindowHeight) {
    var iWinXLoc = (iScreenWidth - piWindowWidth - 10) / 2;

    var iWinYLoc = (iScreenHeight - piWindowHeight) / 2;
    if (iWinYLoc < 15) iWinYLoc = 0;

    return "width=" + piWindowWidth.toString() + ",height=" + piWindowHeight.toString() + ",top=" + iWinYLoc.toString() + ",left=" + iWinXLoc.toString();
}
function discWin(psURL) {
    var oDisclaimerWin;
    oDisclaimerWin = window.open(psURL, "popWindow", "toolbar=1,scrollbars=1,resizable=1," + createWinPos(500, 350));
}

//Sets the Span's InnerText with the Global parameter value.
function setGlobalParamSpan(spanId, paramName) {
    var field = $get(spanId);
    if (field !== null && field.innerText !== null) {
        var hdnGlobal = $get('hdnGlobalParams');
        if (hdnGlobal !== null) {
            var paramAttribute = hdnGlobal.attributes.getNamedItem(paramName);
            if (paramAttribute !== null) {
                field.innerText = paramAttribute.nodeValue;
            }
        }
    }
}
//Returns the value of the Global parameter's value
function getGlobalParam(paramName) {

    var hdnGlobal = $get('hdnGlobalParams');
    if (hdnGlobal !== null) {
        var paramAttribute = hdnGlobal.attributes.getNamedItem(paramName);
        if (paramAttribute !== null) {
            return paramAttribute.nodeValue;
        }
    }
}

/* Implement Default button behavior for Wizard buttons */
var purchaseContinueButtonID = "";

function SetPurchaseStepsDefaultButton(_defaultButton) {
    purchaseContinueButtonID = _defaultButton;
}

function IsEmailPopupOpened() {
    var emailPanel = $get('hdnEmailComponentPanel');
    if (emailPanel != null && emailPanel.value != '')
        return true;

    return false;
}

function handleDefaultButtonEnter(e) {
    var KeyID = (window.event) ? event.keyCode : e.keyCode;

    isEnterPressedOnEmailPopup = false;
    if (IsEmailPopupOpened()) {
        if (KeyID == 13) {
            if (IE && !(e.srcElement.type == 'textarea'))
                isEnterPressedOnEmailPopup = true;
        }
        if ((FF2 || FF3) && e.target.type == 'text')
            isEnterPressedOnEmailPopup = true;

        return;
    }

    if (KeyID == 13)//If Enter Key is pressed
    {
        if (purchaseContinueButtonID !== null && purchaseContinueButtonID != "") {
            var defaultButton = $get(purchaseContinueButtonID);
            if (defaultButton !== null && !defaultButton.disabled) {
                try {
                    defaultButton.focus();
                }
                catch (e) {
                    return false;
                }
            }
        }
    }
}

function subscribePurchaseKeyDownEvent(functionName) {
    if (document.addEventListener) {
        unSubscribePurchaseKeyDownEvent(functionName);
        document.addEventListener('keydown', eval(functionName), false);
    }
    else if (document.attachEvent) {
        unSubscribePurchaseKeyDownEvent(functionName);
        document.attachEvent('onkeydown', eval(functionName));
    }
}
function unSubscribePurchaseKeyDownEvent(functionName) {
    if (document.removeEventListener) {
        document.removeEventListener('keydown', eval(functionName), false);
    }
    else if (document.detachEvent) {
        document.detachEvent('onkeydown', eval(functionName));
    }
}

/* TFS 14363 - Credit card holder name & Customer name comparision */
/* Compares the Creditcard holder's name with Customer name & displays Warning message when mismatch. */
function ValidateCCName(lnameObjID) {
    var txtLName = $get(lnameObjID);
    var mismatch = false;
    if (txtLName !== null) {
        var LNameAttrib = txtLName.attributes.getNamedItem('LastName');
        var enteredLName = txtLName.value.trim().toLowerCase();
        if (LNameAttrib !== null) {
            var msg = "";
            var LName = LNameAttrib.nodeValue.toLowerCase();
            if (enteredLName != "" && enteredLName != LName) {
                mismatch = true;

                var msgAttrib = txtLName.attributes.getNamedItem('WarningMsg');
                if (msgAttrib != null) {
                    msg = msgAttrib.nodeValue;
                }
            }
            showCCNameMismatch(mismatch, msg);
        }
    }
    return true;
}

/* Display/hide the Credit Card Name mismatch message based on Show flag */
function showCCNameMismatch(show, msg) {
    var divParent = $get('divErrorInfo');
    var divCCNameError = $get('divCCNameError');
    if (divParent !== null && divCCNameError != null) {
        if (show) {
            divParent.style.display = 'block';
            divCCNameError.style.display = 'block';
            divCCNameError.innerHTML = msg;
        }
        else {
            divCCNameError.style.display = 'none';
            displayPaymentInfoErrors();
        }
    }
}

/* Function displays/hides the Parent Error div based on the child visibilities */
function displayPaymentInfoErrors() {
    var divP = $get('divErrorInfo');
    var divOthers = $get('divErrorSubInfo');
    var divName = $get('divCCNameError');
    var divNumber = $get('divCreditCardError');
    if (divP !== null) {
        if ((divName != null && (divName.style.display == 'block')) ||
            (divNumber != null && (divNumber.style.display == 'block')) ||
            (divOthers != null && (divOthers.style.display == 'block'))) {
            divP.style.display = "block";
        }
        else {
            divP.style.display = "none";
        }
    }
}



/******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();
            nameControl.focus();
            return false;
        }
        if (!isValidName(nameControl.value)) {
            errorControl.style.color = '#DE3431';
            errorControl.style.fontWeight = 'bold';
            alert(invalidNameErrMsg);
            HideLoader();
            nameControl.focus();
            return false;
        }
        if (emailControl.className == emailControlWatermarkCSS) {
            errorControl.style.color = '#DE3431';
            errorControl.style.fontWeight = 'bold';
            alert(reqEmailErrMsg);
            HideLoader();
            emailControl.focus();
            return false;
        }
        if (!isValidEmail(emailControl.value)) {
            errorControl.style.color = '#DE3431';
            errorControl.style.fontWeight = 'bold';
            alert(invalidEmailErrMsg);
            HideLoader();
            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();
            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;
    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();
            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;
    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;
}
/*============================================================================*/

/*

This routine checks the credit card number. The following checks are made:

1. A number has been provided
2. The number is a right length for the card
3. The number has an appropriate prefix for the card
4. The number has a valid modulus 10 number check digit if required

If the validation fails an error is reported.


Parameters:
            cardnumber           number on the card
            cardname             name of card as defined in the card list below


*/

/*
   If a credit card number is invalid, an error reason is loaded into the 
   global ccErrorNo variable. This can be be used to index into the global error  
   string array to report the reason to the user if required:
   
   e.g. if (!checkCreditCard (number, name) alert (ccErrors(ccErrorNo);
*/

var ccErrorNo = 0;
var ccErrors = new Array ()

ccErrors [0] = "Unknown card type";
ccErrors [1] = "No card number provided";
ccErrors [2] = "Credit card number is in invalid format";
ccErrors [3] = "Credit card number is invalid";
ccErrors [4] = "Credit card number has an inappropriate number of digits";

function ValidateCreditCardNoForType(cardnumberObjID, cardnameObjID) {
    if ($get(cardnumberObjID).value.trim() != "")
        return ValidateCreditCardNo(cardnumberObjID, cardnameObjID);
}
function ValidateCreditCardNo(cardnumberObjID, cardnameObjID) {
    var cardName = $get(cardnameObjID).value.trim();
    var cardNumber = $get(cardnumberObjID).value.trim();
    var invalidCardNoMsg = $get(cardnumberObjID).getAttribute('InvalidCardNo');
    var typeNumberMismatchMsg = $get(cardnumberObjID).getAttribute('TypeNumberMismatch');
    var selectCardTypeMsg = $get(cardnumberObjID).getAttribute('SelectCardType');

    var divErrorControl = $get('divErrorInfo');
    var divCreditCardErrorControl = $get('divCreditCardError');

    if (cardNumber == "") {
        divCreditCardErrorControl.style.display = 'none';
        displayPaymentInfoErrors();
        return true;
    }
    
    if (cardName == "") {
        if (divErrorControl != null) {
            //divErrorControl.style.display = 'block';            
            //divCreditCardErrorControl.innerHTML = selectCardTypeMsg;
            return false;
        }
    }
    ShowLoader();
    var retValidation = checkCreditCard(cardNumber, cardName);
    HideLoader();
    if (!retValidation) {
        divErrorControl.style.display = 'block';
        divCreditCardErrorControl.style.display = 'block';
        if (ccErrorNo == 3)
            divCreditCardErrorControl.innerHTML = invalidCardNoMsg;
        else
            divCreditCardErrorControl.innerHTML = typeNumberMismatchMsg;
    }
    else {
        divCreditCardErrorControl.style.display = 'none';
        displayPaymentInfoErrors();
    }

    // Flag used to identify 'Promote to Checkout' click in PaymentInfo for CreditCard validation.
    is_PI_CreditCard_Not_Valid = !retValidation;
    return retValidation;
}

function checkCreditCard (cardnumber, cardname) {
     
  // Array to hold the permitted card characteristics
  var cards = new Array();

  // Define the cards we support. You may add addtional card types.
  
  //  Name:      As in the selection box of the form - must be same as user's
  //  Length:    List of possible valid lengths of the card number for the card
  //  prefixes:  List of possible prefixes for the card
  //  checkdigit Boolean to say whether there is a check digit
  
  cards [0] = {name: "Visa", 
               length: "13,16", 
               prefixes: "4",
               checkdigit: true};
  cards [1] = {name: "MC",  //MasterCard
               length: "16", 
               prefixes: "51,52,53,54,55",
               checkdigit: true};
  cards [2] = {name: "DinersClub", 
               length: "14,16", 
               prefixes: "36,54,55",
               checkdigit: true};
  cards [3] = {name: "CarteBlanche", 
               length: "14", 
               prefixes: "300,301,302,303,304,305",
               checkdigit: true};
  cards [4] = {name: "Amex", 
               length: "15", 
               prefixes: "34,37",
               checkdigit: true};
  cards [5] = {name: "Discover", 
               length: "16", 
               prefixes: "6011,622,64,65",
               checkdigit: true};
  cards [6] = {name: "JCB", 
               length: "16", 
               prefixes: "35",
               checkdigit: true};
  cards [7] = {name: "enRoute", 
               length: "15", 
               prefixes: "2014,2149",
               checkdigit: true};
  cards [8] = {name: "Solo", 
               length: "16,18,19", 
               prefixes: "6334, 6767",
               checkdigit: true};
  cards [9] = {name: "Switch", 
               length: "16,18,19", 
               prefixes: "4903,4905,4911,4936,564182,633110,6333,6759",
               checkdigit: true};
  cards [10] = {name: "Maestro", 
               length: "12,13,14,15,16,18,19", 
               prefixes: "5018,5020,5038,6304,6759,6761",
               checkdigit: true};
  cards [11] = {name: "VisaElectron", 
               length: "16", 
               prefixes: "417500,4917,4913,4508,4844",
               checkdigit: true};
               
  // Establish card type
  var cardType = -1;
  for (var i = 0; i < cards.length; i++) {      
    // See if it is this card (ignoring the case of the string)
    if (cardname.toLowerCase () == cards[i].name.toLowerCase()) {
      cardType = i;
      break;
    }
  }
  
  // If card type not found, report an error
  if (cardType == -1) {
     ccErrorNo = 0;
     return false; 
  }
  
  // Ensure that the user has provided a credit card number
  if (cardnumber.length == 0)  {
     ccErrorNo = 1;
     return false; 
  }
  
  // Now remove any spaces from the credit card number
  cardnumber = cardnumber.replace (/\s/g, "");
  
  // Check that the number is numeric
  var cardNo = cardnumber
  var cardexp = /^[0-9]{13,19}$/;
  if (!cardexp.exec(cardNo))  {
     ccErrorNo = 2;
     return false; 
  }

  // Now check the modulus 10 check digit - if required
  if (cards[cardType].checkdigit) {
    var checksum = 0;                                  // running checksum total
    var mychar = "";                                   // next char to process
    var j = 1;                                         // takes value of 1 or 2
  
    // Process each digit one by one starting at the right
    var calc;
    for (i = cardNo.length - 1; i >= 0; i--) {
    
      // Extract the next digit and multiply by 1 or 2 on alternative digits.
      calc = Number(cardNo.charAt(i)) * j;
    
      // If the result is in two digits add 1 to the checksum total
      if (calc > 9) {
        checksum = checksum + 1;
        calc = calc - 10;
      }
    
      // Add the units element to the checksum total
      checksum = checksum + calc;
    
      // Switch the value of j
      if (j ==1) {j = 2} else {j = 1};
    } 
  
    // All done - if checksum is divisible by 10, it is a valid modulus 10.
    // If not, report an error.
    if (checksum % 10 != 0)  {
     ccErrorNo = 3;
     return false; 
    }
  }  

  // The following are the card-specific checks we undertake.
  var LengthValid = false;
  var PrefixValid = false; 
  var undefined; 

  // We use these for holding the valid lengths and prefixes of a card type
  var prefix = new Array ();
  var lengths = new Array ();
    
  // Load an array with the valid prefixes for this card
  prefix = cards[cardType].prefixes.split(",");
      
  // Now see if any of them match what we have in the card number
  for (i=0; i<prefix.length; i++) {
    var exp = new RegExp ("^" + prefix[i]);
    if (exp.test (cardNo)) PrefixValid = true;
  }
      
  // If it isn't a valid prefix there's no point at looking at the length
  if (!PrefixValid) {
     ccErrorNo = 3;
     return false; 
  }
    
  // See if the length is valid for this card
  lengths = cards[cardType].length.split(",");
  for (j=0; j<lengths.length; j++) {
    if (cardNo.length == lengths[j]) LengthValid = true;
  }
  
  // See if all is OK by seeing if the length was valid. We only check the 
  // length if all else was hunky dory.
  if (!LengthValid) {
     ccErrorNo = 4;
     return false; 
  };   
  
  // The credit card is in the required format.
  return true;
}

/*============================================================================*/
/* SiteCatalyst code version: H.15.1.
Copyright 1997-2007 Omniture, Inc. More info available at
http://www.omniture.com */
/* Specify the Report Suite ID(s) to track here */
// overrode the account variable b/c it conflicts with MSFT s_account variable.
var cg_account = "cgproduction"   //Changed from "cgdevelopment" 2/21/2009 (Mike's conversation with Phil/Chris)
var s=s_gi(cg_account)
/************************** CONFIG SECTION **************************/
/* You may add or alter any code config here. */
/* E-commerce Config */
s.currencyCode="USD"
/* Link Tracking Config */
s.trackDownloadLinks=true
s.trackExternalLinks=true
s.trackInlineStats=true
s.linkDownloadFileTypes="exe,zip,wav,mp3,mov,mpg,avi,wmv,doc,pdf,xls,xml"
s.linkInternalFilters="javascript:,." //s.linkInternalFilters="javascript:,costar.com"
s.linkLeaveQueryString=false
s.linkTrackVars="None"
s.linkTrackEvents="None"

/* WARNING: Changing any of the below variables will cause drastic
changes to how your visitor data is collected.  Changes should only be
made when instructed to do so by your account manager.*/
s.visitorNamespace="costargroup"
s.dc=112

/* Form Analysis Config */
s.formList=""
s.trackFormList=false
s.trackPageName=true
s.useCommerce=true
s.varUsed="eVar4"
// Abandon, Success, Error
s.eventList=""

/* Plugin Config */
s.usePlugins=true
function s_doPlugins(s) {
	/* Add calls to plugins here */
	
	/* Plugin Example: getQueryParam v2.0*/
	s.campaign=s.getQueryParam('src,ref',':')
	
	/* Day Parting */
	s.prop13=s.getTimeParting('h','-5','2008');
	s.eVar13=s.getValOnce(s.prop13,'s_evar13',0);

	/* Plugin Example: apl v1.1 (Append List)*/
	s.events=s.apl(s.events,"event11",",",2)

	/*Get New/Repeat setting*/
	s.prop23=s.getNewRepeat();
	s.eVar24=s.getNewRepeat();
}
s.doPlugins=s_doPlugins


/************************** PLUGINS SECTION *************************/
/*
 * Plugin: clearPageVars 1.0 - clear (reset) page-level variables
 */
s.clearPageVars=new Function(""
+"s.pageName='',s.channel='',s.server='',s.pageType='',s.prop1='',s.pr"
+"op2='',s.prop3='',s.prop4='',s.prop5='',s.prop6='',s.prop7='',s.prop"
+"8='',s.prop9='',s.prop10='',s.prop11='',s.prop12='',s.prop13='',s.pr"
+"op14='',s.prop15='',s.prop16='',s.prop17='',s.prop18='',s.prop19='',"
+"s.prop20='',s.prop21='',s.prop22='',s.prop23='',s.prop24='',s.prop25"
+"='',s.prop26='',s.prop27='',s.prop28='',s.prop29='',s.prop30='',s.pr"
+"op31='',s.prop32='',s.prop33='',s.prop34='',s.prop35='',s.prop36='',"
+"s.prop37='',s.prop38='',s.prop39='',s.prop40='',s.prop41='',s.prop42"
+"='',s.prop43='',s.prop44='',s.prop45='',s.prop46='',s.prop47='',s.pr"
+"op48='',s.prop49='',s.prop50='',s.campaign='',s.eVar1='',s.eVar2='',"
+"s.eVar3='',s.eVar4='',s.eVar5='',s.eVar6='',s.eVar7='',s.eVar8='',s."
+"eVar9='',s.eVar10='',s.eVar11='',s.eVar12='',s.eVar13='',s.eVar14=''"
+",s.eVar15='',s.eVar16='',s.eVar17='',s.eVar18='',s.eVar19='',s.eVar2"
+"0='',s.eVar21='',s.eVar22='',s.eVar23='',s.eVar24='',s.eVar25='',s.e"
+"Var26='',s.eVar27='',s.eVar28='',s.eVar29='',s.eVar30='',s.eVar31=''"
+",s.eVar32='',s.eVar33='',s.eVar34='',s.eVar35='',s.eVar36='',s.eVar3"
+"7='',s.eVar38='',s.eVar39='',s.eVar40='',s.eVar41='',s.eVar42='',s.e"
+"Var43='',s.eVar44='',s.eVar45='',s.eVar46='',s.eVar47='',s.eVar48=''"
+",s.eVar49='',s.eVar50='',s.events='',s.products='',s.purchaseID='',s"
+".state='',s.zip=''");
/*
 * Plugin: getQueryParam 2.1 - return query string parameter(s)
 */
s.getQueryParam=new Function("p","d","u",""
+"var s=this,v='',i,t;d=d?d:'';u=u?u:(s.pageURL?s.pageURL:s.wd.locati"
+"on);if(u=='f')u=s.gtfs().location;while(p){i=p.indexOf(',');i=i<0?p"
+".length:i;t=s.p_gpv(p.substring(0,i),u+'');if(t)v+=v?d+t:t;p=p.subs"
+"tring(i==p.length?i:i+1)}return v");
s.p_gpv=new Function("k","u",""
+"var s=this,v='',i=u.indexOf('?'),q;if(k&&i>-1){q=u.substring(i+1);v"
+"=s.pt(q,'&','p_gvf',k)}return v");
s.p_gvf=new Function("t","k",""
+"if(t){var s=this,i=t.indexOf('='),p=i<0?t:t.substring(0,i),v=i<0?'T"
+"rue':t.substring(i+1);if(p.toLowerCase()==k.toLowerCase())return s."
+"epa(v)}return ''");
/*
 * Plugin: getTimeParting 1.3 - Set timeparting values based on time zone
 */
s.getTimeParting=new Function("t","z","y",""
+"dc=new Date('1/1/2000');f=15;ne=8;if(dc.getDay()!=6||"
+"dc.getMonth()!=0){return'Data Not Available'}else{;z=parseInt(z);"
+"if(y=='2009'){f=8;ne=1};gmar=new Date('3/1/'+y);dsts=f-gmar.getDay("
+");gnov=new Date('11/1/'+y);dste=ne-gnov.getDay();spr=new Date('3/'"
+"+dsts+'/'+y);fl=new Date('11/'+dste+'/'+y);cd=new Date();"
+"if(cd>spr&&cd<fl){z=z+1}else{z=z};utc=cd.getTime()+(cd.getTimezoneO"
+"ffset()*60000);tz=new Date(utc + (3600000*z));thisy=tz.getFullYear("
+");var days=['Sunday','Monday','Tuesday','Wednesday','Thursday','Fr"
+"iday','Saturday'];if(thisy!=y){return'Data Not Available'}else{;thi"
+"sh=tz.getHours();thismin=tz.getMinutes();thisd=tz.getDay();var dow="
+"days[thisd];var ap='AM';var dt='Weekday';var mint='00';if(thismin>3"
+"0){mint='30'}if(thish>=12){ap='PM';thish=thish-12};if (thish==0){th"
+"ish=12};if(thisd==6||thisd==0){dt='Weekend'};var timestring=thish+'"
+":'+mint+ap;var daystring=dow;var endstring=dt;if(t=='h'){return tim"
+"estring}if(t=='d'){return daystring};if(t=='w'){return en"
+"dstring}}};"
);
/*
 * Plugin: getValOnce 0.2 - get a value once per session or number of days
 */
s.getValOnce=new Function("v","c","e",""
+"var s=this,k=s.c_r(c),a=new Date;e=e?e:0;if(v){a.setTime(a.getTime("
+")+e*86400000);s.c_w(c,v,e?a:0);}return v==k?'':v");
/*
 * Plugin: getNewRepeat 1.0 - Return whether user is new or repeat
 */
s.getNewRepeat=new Function(""
+"var s=this,e=new Date(),cval,ct=e.getTime(),y=e.getYear();e.setTime"
+"(ct+30*24*60*60*1000);cval=s.c_r('s_nr');if(cval.length==0){s.c_w("
+"'s_nr',ct,e);return 'New';}if(cval.length!=0&&ct-cval<30*60*1000){s"
+".c_w('s_nr',ct,e);return 'New';}if(cval<1123916400001){e.setTime(cv"
+"al+30*24*60*60*1000);s.c_w('s_nr',ct,e);return 'Repeat';}else retur"
+"n 'Repeat';");
/*
 * Plugin: getAndPersistValue 0.3 - get a value on every page
 */
s.getAndPersistValue=new Function("v","c","e",""
+"var s=this,a=new Date;e=e?e:0;a.setTime(a.getTime()+e*86400000);if("
+"v)s.c_w(c,v,e?a:0);return s.c_r(c);");
/*
 * Utility Function: split v1.5 - split a string (JS 1.0 compatible)
 */
s.split=new Function("l","d",""
+"var i,x=0,a=new Array;while(l){i=l.indexOf(d);i=i>-1?i:l.length;a[x"
+"++]=l.substring(0,i);l=l.substring(i+d.length);}return a");
/*
 * Plugin Utility: apl v1.1
 */
s.apl=new Function("L","v","d","u",""
+"var s=this,m=0;if(!L)L='';if(u){var i,n,a=s.split(L,d);for(i=0;i<a."
+"length;i++){n=a[i];m=m||(u==1?(n==v):(n.toLowerCase()==v.toLowerCas"
+"e()));}}if(!m)L=L?L+d+v:v;return L");
/*
 * Plugin: Form Analysis 2.0 (Success, Error, Abandonment)
 */
s.setupFormAnalysis=new Function(""
+"var s=this;if(!s.fa){s.fa=new Object;var f=s.fa;f.ol=s.wd.onload;s."
+"wd.onload=s.faol;f.uc=s.useCommerce;f.vu=s.varUsed;f.vl=f.uc?s.even"
+"tList:'';f.tfl=s.trackFormList;f.fl=s.formList;f.va=new Array('',''"
+",'','')}");
s.sendFormEvent=new Function("t","pn","fn","en",""
+"var s=this,f=s.fa;t=t=='s'?t:'e';f.va[0]=pn;f.va[1]=fn;f.va[3]=t=='"
+"s'?'Success':en;s.fasl(t);f.va[1]='';f.va[3]='';");
s.faol=new Function("e",""
+"var s=s_c_il["+s._in+"],f=s.fa,r=true,fo,fn,i,en,t,tf;if(!e)e=s.wd."
+"event;f.os=new Array;if(f.ol)r=f.ol(e);if(s.d.forms&&s.d.forms.leng"
+"th>0){for(i=s.d.forms.length-1;i>=0;i--){fo=s.d.forms[i];fn=fo.name"
+";tf=f.tfl&&s.pt(f.fl,',','ee',fn)||!f.tfl&&!s.pt(f.fl,',','ee',fn);"
+"if(tf){f.os[fn]=fo.onsubmit;fo.onsubmit=s.faos;f.va[1]=fn;f.va[3]='"
+"No Data Entered';for(en=0;en<fo.elements.length;en++){el=fo.element"
+"s[en];t=el.type;if(t&&t.toUpperCase){t=t.toUpperCase();var md=el.on"
+"mousedown,kd=el.onkeydown,omd=md?md.toString():'',okd=kd?kd.toStrin"
+"g():'';if(omd.indexOf('.fam(')<0&&okd.indexOf('.fam(')<0){el.s_famd"
+"=md;el.s_fakd=kd;el.onmousedown=s.fam;el.onkeydown=s.fam}}}}}f.ul=s"
+".wd.onunload;s.wd.onunload=s.fasl;}return r;");
s.faos=new Function("e",""
+"var s=s_c_il["+s._in+"],f=s.fa,su;if(!e)e=s.wd.event;if(f.vu){s[f.v"
+"u]='';f.va[1]='';f.va[3]='';}su=f.os[this.name];return su?su(e):tru"
+"e;");
s.fasl=new Function("e",""
+"var s=s_c_il["+s._in+"],f=s.fa,a=f.va,l=s.wd.location,ip=s.trackPag"
+"eName,p=s.pageName;if(a[1]!=''&&a[3]!=''){a[0]=!p&&ip?l.host+l.path"
+"name:a[0]?a[0]:p;if(!f.uc&&a[3]!='No Data Entered'){if(e=='e')a[2]="
+"'Error';else if(e=='s')a[2]='Success';else a[2]='Abandon'}else a[2]"
+"='';var tp=ip?a[0]+':':'',t3=e!='s'?':('+a[3]+')':'',ym=!f.uc&&a[3]"
+"!='No Data Entered'?tp+a[1]+':'+a[2]+t3:tp+a[1]+t3,ltv=s.linkTrackV"
+"ars,lte=s.linkTrackEvents,up=s.usePlugins;if(f.uc){s.linkTrackVars="
+"ltv=='None'?f.vu+',events':ltv+',events,'+f.vu;s.linkTrackEvents=lt"
+"e=='None'?f.vl:lte+','+f.vl;f.cnt=-1;if(e=='e')s.events=s.pt(f.vl,'"
+",','fage',2);else if(e=='s')s.events=s.pt(f.vl,',','fage',1);else s"
+".events=s.pt(f.vl,',','fage',0)}else{s.linkTrackVars=ltv=='None'?f."
+"vu:ltv+','+f.vu}s[f.vu]=ym;s.usePlugins=false;s.tl(true,'o','Form A"
+"nalysis');s[f.vu]='';s.usePlugins=up}return f.ul&&e!='e'&&e!='s'?f."
+"ul(e):true;");
s.fam=new Function("e",""
+"var s=s_c_il["+s._in+"],f=s.fa;if(!e) e=s.wd.event;var o=s.trackLas"
+"tChanged,et=e.type.toUpperCase(),t=this.type.toUpperCase(),fn=this."
+"form.name,en=this.name,sc=false;if(document.layers){kp=e.which;b=e."
+"which}else{kp=e.keyCode;b=e.button}et=et=='MOUSEDOWN'?1:et=='KEYDOW"
+"N'?2:et;if(f.ce!=en||f.cf!=fn){if(et==1&&b!=2&&'BUTTONSUBMITRESETIM"
+"AGERADIOCHECKBOXSELECT-ONEFILE'.indexOf(t)>-1){f.va[1]=fn;f.va[3]=e"
+"n;sc=true}else if(et==1&&b==2&&'TEXTAREAPASSWORDFILE'.indexOf(t)>-1"
+"){f.va[1]=fn;f.va[3]=en;sc=true}else if(et==2&&kp!=9&&kp!=13){f.va["
+"1]=fn;f.va[3]=en;sc=true}if(sc){nface=en;nfacf=fn}}if(et==1&&this.s"
+"_famd)return this.s_famd(e);if(et==2&&this.s_fakd)return this.s_fak"
+"d(e);");
s.ee=new Function("e","n",""
+"return n&&n.toLowerCase?e.toLowerCase()==n.toLowerCase():false;");
s.fage=new Function("e","a",""
+"var s=this,f=s.fa,x=f.cnt;x=x?x+1:1;f.cnt=x;return x==a?e:'';");

/************* DO NOT ALTER ANYTHING BELOW THIS LINE ! **************/
var s_code='',s_objectID;function s_gi(un,pg,ss){var c="=fun@5(~){`Ks=^Q~$d ~.substring(~.indexOf(~;@r~`l@r~=new Fun@5(~.toLowerCase()~s_c_il['+s^qn+']~};s.~.length~.toUpperCase~=new Object~s.wd~','~"
+"){@r~t^s~.location~')q='~var ~s.pt(~dynamicAccount~link~s.apv~='+@w(~)@rx^l!Object$aObject.prototype$aObject.prototype[x])~);s.~Element~.getTime()~=new Array~ookieDomainPeriods~s.m_~.protocol~=new "
+"Date~BufferedRequests~}c$o(e){~visitor~;@V^is[k],255)}~javaEnabled~conne@5^K~^zc_i~Name~=''~:'')~onclick~}@r~else ~ternalFilters~javascript~s.dl~@Ms.b.addBehavior(\"# default# ~=parseFloat(~'+tm.ge"
+"t~cookie~parseInt(~s.rep(~s.^R~track~o^zoid~browser~.parent~window~referrer~colorDepth~String~while(~.host~.lastIndexOf('~s.sq~s.maxDelay~s.vl_g~r=s.m(f)?s[f](~for(~s.un~s.eo~&&s.~t=s.ot(o)~j='1.~#"
+"1URL~lugins~document~Type~Sampling~s.rc[un]~Download~Event~');~this~tfs~resolution~s.c_r(~s.c_w(~s.eh~s.isie~s.vl_l~s.vl_t~Height~t,h){t=t?t~tcf~isopera~ismac~escape(~'s_~.href~screen.~s.fl(~Versio"
+"n~harCode~&&(~variableProvider~s.pe~)?'Y':'N'~:'';h=h?h~._i~e&&l$ZSESSION'~=='~f',~onload~name~home#1~objectID~}else{~.s_~s.rl[u~Width~s.ssl~o.type~Timeout(~ction~Lifetime~.mrq(\"'+un+'\")~sEnabled"
+"~;i++)~'){q='~&&l$ZNONE'){~ExternalLinks~_'+~charSet~onerror~lnk~currencyCode~.src~s=s_gi(~etYear(~Opera~;try{~Math.~s.fsg~s.ns6~s.oun~InlineStats~Track~'0123456789~&&!~s[k]=~s.epa(~m._d~n=s.oid(o)"
+"~,'sqs',q);~LeaveQuery~')>=~'=')~&&t~){n=~\",''),~vo)~s.sampled~=s.oh(o);~+(y<1900?~s.disable~ingServer~n]=~true~sess~campaign~lif~if(~'http~,100)~s.co(~x in ~s.ape~ffset~s.c_d~s.br~'&pe~s.gg(~s.gv"
+"(~s[mn]~s.qav~,'vo~s.pl~=(apn~Listener~\"s_gs(\")~vo._t~b.attach~d.create~=s.n.app~(''+~'+n~)+'/~s()+'~){p=~():''~a):f(~+1))~a['!'+t]~){v=s.n.~channel~un)~.target~o.value~g+\"_c\"]~\".tl(\")~etscap"
+"e~(ns?ns:~omePage~s.d.get~')<~!='~||!~[b](e);~m[t+1](~return~height~events~random~code~'MSIE ~rs,~un,~,pev~INPUT'~floor(~atch~s.num(~[\"s_\"+~s.c_gd~s.dc~s.pg~,'lt~.inner~transa~;s.gl(~\"m_\"+n~idt"
+"='+~',s.bc~page~Group,~.fromC~sByTag~?'&~+';'~t&&~1);~[t]=~'+v]~>=5)~[t](~=l[n];~!a[t])~~s._c=^fc';`E=^0`5!`E`fn){`E`fl`U;`E`fn=0;}s^ql=`E`fl;s^qn=`E`fn;s^ql[s^q@ms;`E`fn++;s.m`0m){`2$Em)`4'{$Y0`Af"
+"l`0x,l){`2x?$Ex)`30,l):x`Aco`0o`G!o)`2o;`Kn`D,x;^B@vo)@rx`4'select$Y0&&x`4'filter$Y0)n[x]=o[x];`2n`Anum`0x){x`h+x;^B`Kp=0;p<x`B;p++)@r(@T')`4x`3p,p$L<0)`20;`21`Arep=s_r;@w`0x`1,h=@TABCDEF',i,c=s.@E"
+",n,l,e,y`h;c=c?c`C$J`5x){x`h+x`5c^sAUTO'^l'').c^kAt){^Bi=0;i<x`B@9{c=x`3i,i+#8n=x.c^kAt(i)`5n>127){l=0;e`h;^4n||l<4){e=h`3n%16,n%16+1)+e;n=`tn/16);l++}y+='%u'+e}`6c^s+')y+='%2B';`ly+=^ec)}x=y^yx=x?"
+"`u^e''+x),'+`F%2B'):x`5x&&c^Eem==1&&x`4'%u$Y0&&x`4'%U$Y0){i=x`4'%^P^4i>=0){i++`5h`38)`4x`3i,i+1)`C())>=0)`2x`30,i)+'u00'+x`3i);i=x`4'%',i)}}}}`2x`Aepa`0x`1;`2x?un^e`u''+x,'+`F ')):x`Apt`0x,d,f,a`1,"
+"t=x,z=0,y,r;^4t){y=t`4d);y=y<0?t`B:y;t=t`30,y);^At,$Kt,a)`5r)`2r;z+=y+d`B;t=x`3z,x`B);t=z<x`B?t:''}`2''`Aisf`0t,a){`Kc=a`4':')`5c>=0)a=a`30,c)`5t`30,2)==^f')t=t`32);`2(t!`h@d==a)`Afsf`0t,a`1`5`La,`"
+"F,'is^tt))@O+=(@O!`h?`F`i+t;`20`Afs`0x,f`1;@O`h;`Lx,`F,'fs^tf);`2@O`Ac_d`h;$rf`0t,a`1`5!$pt))`21;`20`Ac_gd`0`1,d=`E`I^5^v,n=s.fpC`V,p`5!n)n=s.c`V`5d@U@y@en?`tn):2;n=n>2?n:2;p=d^6.')`5p>=0){^4p>=0&&"
+"n>1$Id^6.',p-#8n--}@y=p>0&&`Ld,'.`Fc_gd^t0)?d`3p):d}}`2@y`Ac_r`0k`1;k=@w(k);`Kc=' '+s.d.`s,i=c`4' '+k+@c,e=i<0?i:c`4';',i),v=i<0?'':@Wc`3i+2+k`B,e<0?c`B:e));`2v$Z[[B]]'?v:''`Ac_w`0k,v,e`1,d=$r(),l="
+"s.`s@6,t;v`h+v;l=l?$El)`C$J`5^r@Bt=(v!`h?`tl?l:0):-60)`5t){e`Y;e.setTime(e`T+(t*1000))}`kk@Bs.d.`s=k+'`Pv!`h?v:'[[B]]')+'; path=/;'+(^r?' expires='+e.toGMT^3()#6`i+(d?' domain='+d#6`i;`2^Tk)==v}`20"
+"`Aeh`0o,e,r,f`1,b=^f'+e+'@Ds^qn,n=-1,l,i,x`5!^Vl)^Vl`U;l=^Vl;^Bi=0;i<l`B&&n<0;i++`Gl[i].o==o&&l[i].e==e)n=i`kn<0@ei;l[n]`D}x#Dx.o=o;x.e=e;f=r?x.b:f`5r||f){x.b=r?0:o[e];x.o[e]=f`kx.b){x.o[b]=x.b;`2b"
+"}`20`Acet`0f,a,t,o,b`1,r,^b`5`O>=5^l!s.^c||`O>=7)){^b`7's`Ff`Fa`Ft`F`Ke,r@M^A$Ka)`ar=s.m(t)?s#Ce):t(e)}`2r^Pr=^b(s,f,a,t)^y@rs.^d^Eu`4$i4@b0)r=s.m(b)?s[b](a):b(a);else{^V(`E,'@F',0,o);^A$Ka`Reh(`E,"
+"'@F',1)}}`2r`Ag^Ret`0e`1;`2`v`Ag^Roe`7'e`F`Ks=`9,c;^V(^0,\"@F\",1`Re^R=1;c=s.t()`5c)s.d.write(c`Re^R=0;`2@n'`Rg^Rfb`0a){`2^0`Ag^Rf`0w`1,p=w`z,l=w`I;`v=w`5p&&p`I!=l&&p`I^5==l^5){`v=p;`2s.g^Rf(`v)}`2"
+"`v`Ag^R`0`1`5!`v){`v=`E`5!s.e^R)`v=s.cet('g^R^t`v,'g^Ret',s.g^Roe,'g^Rfb')}`2`v`Amrq`0u`1,l=@0],n,r;@0]=0`5l)^Bn=0;n<l`B;n++){r#Ds.mr(0,0,r.r,0,r.t,r.u)}`Abr`0id,rs`1`5@k`Z$a^U^fbr',rs))@zl=rs`Aflu"
+"sh`Z`0`1;s.fbr(0)`Afbr`0id`1,br=^T^fbr')`5!br)br=@zl`5br`G!@k`Z)^U^fbr`F'`Rmr(0,0,br)}@zl=0`Amr`0@o,q,$jid,ta,u`1,dc=$s,t1=s.`w@l,t2=s.`w@lSecure,ns=s.`b`gspace,un=u?u:$Vs.f$P,unc=`u$k'_`F-'),r`D,l"
+",imn=^fi@D($P,im,b,e`5!rs){rs=@s'+(@2?'s'`i+'://'+(t1?(@2@d2?t2:t1):($V(@2?'102':unc))+'.'+($s?$s:112)+'.2o7.net')$Gb/ss/'+^C+'/1/H.15.1/'+@o+'?[AQB]&ndh=1'+(q?q`i+'&[AQE]'`5^W@Us.^d`G`O>5.5)rs=^i$"
+"j4095);`lrs=^i$j2047)`kid){@z(id,rs);$d}`ks.d.images&&`O>=3^l!s.^c||`O>=7)^l@P<0||`O>=6.1)`G!s.rc)s.rc`D`5!^M){^M=1`5!s.rl)s.rl`D;@0n]`U;set@4'@r^0`fl)^0.`9@7',750)^yl=@0n]`5l){r.t=ta;r.u=un;r.r=rs"
+";l[l`B]=r;`2''}imn+='@D^M;^M++}im=`E[imn]`5!im)im=`E[im@mnew Image;im^zl=0;im.^u`7'e`F^Q^zl=1`5^0`fl)^0.`9@7^Pim@I=rs`5rs`4$0=@b0^l!ta||ta^s_self'||ta^s_top'||(`E.^v@da==`E.^v))){b=e`Y;^4!im^zl&&e`"
+"T-b`T<500)e`Y}`2''}`2'<im'+'g sr'+'c=\"'+rs+'\" width=1 $e=1 border=0 alt=\"\">'`Agg`0v`1`5!`E[^f#A)`E[^f#A`h;`2`E[^f#A`Aglf`0t,a`Gt`30,2)==^f')t=t`32);`Ks=^Q,v=$1t)`5v)s#9v`Agl`0v`1`5$t)`Lv,`F,'gl"
+"^t0)`Agv`0v`1;`2s['vpm@Dv]?s['vpv@Dv]:(s[v]?s[v]`i`Ahavf`0t,a`1,b=t`30,4),x=t`34),n=`tx),k='g@Dt,m='vpm@Dt,q=t,v=s.`N@SVa$je=s.`N@S^Os,mn;@V$2t)`5s.@G||^D||^n`G^n^Epe`30,4)$Z@G_'){mn=^n`30,1)`C()+^"
+"n`31)`5$3){v=$3.`wVars;e=$3.`w^Os}}v=v?v+`F+^X+`F+^X2:''`5v@U`Lv,`F,'is^tt))s[k]`h`5`H$f'&&e)@Vs.fs(s[k],e)}s[m]=0`5`H`bID`Jvid';`6`H^H@Ag'`c`6`H^1@Ar'`c`6`Hvmk`Jvmt';`6`H@E@Ace'`5s[k]&&s[k]`C()^sA"
+"UTO')@V'ISO8859-1';`6s[k]^Eem==2)@V'UTF-8'}`6`H`b`gspace`Jns';`6`Hc`V`Jcdp';`6`H`s@6`Jcl';`6`H^m`Jvvp';`6`H@H`Jcc';`6`H$O`Jch';`6`H$w@5ID`Jxact';`6`H@p`Jv0';`6`H^S`Js';`6`H^2`Jc';`6`H`n^j`Jj';`6`H`"
+"d`Jv';`6`H`s@8`Jk';`6`H`y@1`Jbw';`6`H`y^Z`Jbh';`6`H`e`Jct';`6`H^w`Jhp';`6`Hp^I`Jp';`6$px)`Gb^sprop`Jc$F;`6b^seVar`Jv$F;`6b^shier@Ah$F`c`ks[k]@d$Z`N`g'@d$Z`N^K')$4+='&'+q+'`Ps[k]);`2''`Ahav`0`1;$4`h"
+";`L^Y,`F,'hav^t0);`2$4`Alnf`0^a`8^p`8:'';`Kte=t`4@c`5t@de>0&&h`4t`3te$L>=0)`2t`30,te);`2''`Aln`0h`1,n=s.`N`gs`5n)`2`Ln,`F,'ln^th);`2''`Altdf`0^a`8^p`8:'';`Kqi=h`4'?^Ph=qi>=0?h`30,qi):h`5#7h`3h`B-(t"
+"`B$L^s.'+t)`21;`20`Altef`0^a`8^p`8:''`5#7h`4t)>=0)`21;`20`Alt`0h`1,lft=s.`N^NFile^Ks,lef=s.`NEx`m,@q=s.`NIn`m;@q=@q?@q:`E`I^5^v;h=h`8`5s.`w^NLinks&&lf#7`Llft,`F$ud^th))`2'd'`5s.`w@C^llef||@q)^l!lef"
+"||`Llef,`F$ue^th))^l!@q$a`L@q,`F$ue^th)))`2'e';`2''`Alc`7'e`F`Ks=`9,b=^V(^Q,\"`j\"`R@G=@u^Q`Rt(`R@G=0`5b)`2^Q$b`2@n'`Rbc`7'e`F`Ks=`9,f,^b`5s.d^Ed.all^Ed.all.cppXYctnr)$d;^D=e@I`S?e@I`S:e$Q;^b`7\"s"
+"\",\"`Ke@M@r^D^l^D.tag`g||^D`z`S||^D`zNode))s.t()`a}\");^b(s`Reo=0'`Roh`0o`1,l=`E`I,h=o^g?o^g:'',i,j,k,p;i=h`4':^Pj=h`4'?^Pk=h`4'/')`5h^li<0||(j>=0&&i>j)||(k>=0&&i>k))$Io`X&&o`X`B>1?o`X:(l`X?l`X`i;"
+"i=l.path^v^6/^Ph=(p?p+'//'`i+(o^5?o^5:(l^5?l^5`i)+(h`30,1)$Z/'?l.path^v`30,i<0?0:i$G'`i+h}`2h`Aot`0o){`Kt=o.tag`g;t=t@d`C?t`C$J`5`HSHAPE')t`h`5t`G`H$m&&@3&&@3`C)t=@3`C();`6!#7o^g)t='A';}`2t`Aoid`0o"
+"`1,^F,p,c,n`h,x=0`5t@U`x$Io`X;c=o.`j`5o^g^l`HA'||`HAREA')^l!c$ap||p`8`4'`n$Y0))n@i`6c@e`us.rep(`us.rep$Ec,\"\\r@f\"\\n@f\"\\t@f' `F^Px=2}`6$R^l`H$m||`HSUBMIT')@e$R;x=3}`6o@I&&`HIMAGE')n=o@I`5n){`x="
+"^in@t;`xt=x}}`2`x`Arqf`0t,un`1,e=t`4@c,u=e>=0?`F+t`30,e)+`F:'';`2u&&u`4`F+un+`F)>=0?@Wt`3e$L:''`Arq`0un`1,c=un`4`F),v=^T^fsq'),q`h`5c<0)`2`Lv,'&`Frq^t$P;`2`L$k`F,'rq',0)`Asqp`0t,a`1,e=t`4@c,q=e<0?'"
+"':@Wt`3e+1)`Rsqq[q]`h`5e>=0)`Lt`30,e),`F@Z`20`Asqs`0$kq`1;^7u[u@mq;`20`Asq`0q`1,k=^fsq',v=^Tk),x,c=0;^7q`D;^7u`D;^7q[q]`h;`Lv,'&`Fsqp',0);`L^C,`F@Zv`h;^B@v^7u`Q)^7q[^7u[x]]+=(^7q[^7u[x]]?`F`i+x;^B@"
+"v^7q`Q&&^7q[x]^lx==q||c<2)){v+=(v#5'`i+^7q[x]+'`Px);c++}`2^Uk,v,0)`Awdl`7'e`F`Ks=`9,r=@n,b=^V(`E,\"^u\"),i,o,oc`5b)r=^Q$b^Bi=0;i<s.d.`Ns`B@9{o=s.d.`Ns[i];oc=o.`j?\"\"+o.`j:\"\"`5(oc`4$9<0||oc`4\"^z"
+"oc(\")>=0)&&oc`4$T<0)^V(o,\"`j\",0,s.lc);}`2r^P`Es`0`1`5`O>3^l!^W$as.^d||`O#B`Gs.b^E$B^O)s.$B^O('`j#0);`6s.b^Eb.add^O$8)s.b.add^O$8('click#0,false);`l^V(`E,'^u',0,`El)}`Avs`0x`1,v=s.`b^L,g=s.`b^L#2"
+"k=^fvsn@D^C+(g?'@Dg`i,n=^Tk),e`Y,y=e.g@K);e.s@Ky+10@j1900:0))`5v){v*=100`5!n`G!^Uk,x,e))`20;n=x`kn%10000>v)`20}`21`Adyasmf`0t,m`G#7m&&m`4t)>=0)`21;`20`Adyasf`0t,m`1,i=t?t`4@c:-1,n,x`5i>=0&&m){`Kn=t"
+"`30,i),x=t`3i+1)`5`Lx,`F,'dyasm^tm))`2n}`20`Auns`0`1,x=s.`MSele@5,l=s.`MList,m=s.`MM$o,n,i;^C=^C`8`5x&&l`G!m)m=`E`I^5`5!m.toLowerCase)m`h+m;l=l`8;m=m`8;n=`Ll,';`Fdyas^tm)`5n)^C=n}i=^C`4`F`Rfun=i<0?"
+"^C:^C`30,i)`Asa`0un`1;^C=un`5!@Q)@Q=un;`6(`F+@Q+`F)`4$P<0)@Q+=`F+un;^Cs()`Am_i`0n,a`1,m,f=n`30,1),r,l,i`5!`Wl)`Wl`D`5!`Wnl)`Wnl`U;m=`Wl[n]`5!a&&m&&m._e@Um^q)`Wa(n)`5!m){m`D,m._c=^fm';m^qn=`E`fn;m^q"
+"l=s^ql;m^ql[m^q@mm;`E`fn++;m.s=s;m._n=n;m._l`U('_c`F_in`F_il`F_i`F_e`F_d`F_dl`Fs`Fn`F_r`F_g`F_g1`F_t`F_t1`F_x`F_x1`F_l'`Rm_l[@mm;`Wnl[`Wnl`B]=n}`6m._r@Um._m){r=m._r;r._m=m;l=m._l;^Bi=0;i<l`B@9@rm[l"
+"[i]])r[l[i]]=m[l[i]];r^ql[r^q@mr;m=`Wl[@mr`kf==f`C())s[@mm;`2m`Am_a`7'n`Fg`F@r!g)g=$y;`Ks=`9,c=s[$S,m,x,f=0`5!c)c=`E$q$S`5c&&s_d)s[g]`7\"s\",s_ft(s_d(c)));x=s[g]`5!x)x=`E$qg];m=`Wi(n,1)`5x){m^q=f=1"
+"`5(\"\"+x)`4\"fun@5\")>=0)x(s);`l`Wm(\"x\",n,x)}m=`Wi(n,1)`5@Xl)@Xl=@X=0;`ot();`2f'`Rm_m`0t,n,d){t='@Dt;`Ks=^Q,i,x,m,f='@Dt`5`Wl&&`Wnl)^Bi=0;i<`Wnl`B@9{x=`Wnl[i]`5!n||x==n){m=`Wi(x)`5m[t]`G`H_d')`2"
+"1`5d)m#Cd);`lm#C)`km[t+1]@Um[f]`Gd)$cd);`l$c)}m[f]=1}}`20`AloadModule`0n,u,d,l`1,m,i=n`4':'),g=i<0?$y:n`3i+1),o=0,f,c=s.h?s.h:s.b,^b`5i>=0)n=n`30,i);m=`Wi(n)`5(l$a`Wa(n,g))&&u^Ed&&c^E$C`S`Gd){@X=1;"
+"@Xl=1`k@2)u=`uu,@s:`Fhttps:^Pf`7'e`F`9.m_a(\"$F+'\",\"'+g+'\")^P^b`7's`Ff`Fu`Fc`F`Ke,o=0@Mo=s.$C`S(\"script\")`5o){@3=\"text/`n\"`5f)o.^u=f;o@I=u;c.appendChild(o)}`ao=0}`2o^Po=^b(s,f,u,c)}`lm=`Wi(n"
+");m._e=1;`2m`Avo1`0t,a`Ga[t]||$M)^Q#9a[t]`Avo2`0t,a`G#E{a#9^Q[t]`5#E$M=1}`Adlt`7'`Ks=`9,d`Y,i,vo,f=0`5`ol)^Bi=0;i<`ol`B@9{vo=`ol[i]`5vo`G!`Wm(\"d\")||d`T-$A>=^8){`ol[i]=0;s.t(@g}`lf=1}`k`oi)clear@4"
+"`oi`Rdli=0`5f`G!`oi)`oi=set@4`ot,^8)}`l`ol=0'`Rdl`0vo`1,d`Y`5!@gvo`D;`L^9,`F$52',@g;$A=d`T`5!`ol)`ol`U;`ol[`ol`B]=vo`5!^8)^8=250;`ot()`At`0vo,id`1,trk=1,tm`Y,sed=Math&&@N$g?@N$n@N$g()*1000000000000"
+"0):tm`T,@o='s'+@N$ntm`T/10800000)%10+sed,y=tm.g@K),vt=tm.getDate($G`rMonth($G'@jy+1900:y)+' `rHour$H:`rMinute$H:`rSecond$H `rDay()+' `rTimezoneO@x(),^b,^R=s.g^R(),ta`h,q`h,qs`h,$h`h,vb`D$x^9`Runs()"
+"`5!s.td){`Ktl=^R`I,a,o,i,x`h,c`h,v`h,p`h,bw`h,bh`h,^G0',k=^U^fcc`F@n',0^o,hp`h,ct`h,pn=0,ps`5^3&&^3.prototype){^G1'`5j.m$o){^G2'`5tm.setUTCDate){^G3'`5^W^E^d&&`O#B^G4'`5pn.toPrecision){^G5';a`U`5a."
+"forEach){^G6';i=0;o`D;^b`7'o`F`Ke,i=0@Mi=new Iterator(o)`a}`2i^Pi=^b(o)`5i&&i.next)^G7'}}}}`k`O>=4)x=^hwidth+'x'+^h$e`5s.isns||s.^c`G`O>=3$N`d(^o`5`O>=4){c=^hpixelDepth;bw=`E$v@1;bh=`E$v^Z}}$6=s.n."
+"p^I}`6^W`G`O>=4$N`d(^o;c=^h^2`5`O#B{bw=s.d.^J`S.o@x@1;bh=s.d.^J`S.o@x^Z`5!s.^d^Eb){^b`7's`Ftl`F`Ke,hp=0`ph$W\");hp=s.b.isH$W(tl)?\"Y\":\"N\"`a}`2hp^Php=^b(s,tl);^b`7's`F`Ke,ct=0`pclientCaps\");ct=s"
+".b.`e`a}`2ct^Pct=^b(s)}}}`lr`h`k$6)^4pn<$6`B&&pn<30){ps=^i$6[pn].^v@t#6`5p`4ps)<0)p+=ps;pn++}s.^S=x;s.^2=c;s.`n^j=j;s.`d=v;s.`s@8=k;s.`y@1=bw;s.`y^Z=bh;s.`e=ct;s.^w=hp;s.p^I=p;s.td=1`k@g{`L^9,`F$52"
+"',vb);`L^9,`F$51',@g`ks.useP^I)s.doP^I(s);`Kl=`E`I,r=^R.^J.^1`5!s.^H)s.^H=l^g?l^g:l`5!s.^1)s.^1=r;`Wm('g')`5(vo&&$A)$a`Wm('d')`Gs.@G||^D){`Ko=^D?^D:s.@G`5!o)`2'';`Kp=$2'#1`g'),w=1,^F,@Y,x=`xt,h,l,i"
+",oc`5^D&&o==^D){^4o@Un@d$ZBODY'){o=o`z`S?o`z`S:o`zNode`5!o)`2'';^F;@Y;x=`xt}oc=o.`j?''+o.`j:''`5(oc`4$9>=0&&oc`4\"^zoc(\")<0)||oc`4$T>=0)`2''}ta=n?o$Q:1;h@ii=h`4'?^Ph=s.`N@a^3||i<0?h:h`30,i);l=s.`N"
+"`g?s.`N`g:s.ln(h);t=s.`N^K?s.`N^K`8:s.lt(h)`5t^lh||l))q+=$0=@G@D(`Hd'||`He'?@w(t):'o')+(h?$0v1`Ph)`i+(l?$0v2`Pl)`i;`ltrk=0`5s.`w@R`G!p$I$2'^H^Pw=0}^F;i=o.sourceIndex`5$1'^x')@e$1'^x^Px=1;i=1`kp&&n@"
+"d)qs='&pid`P^ip,255))+(w#5p$zw`i+'&oid`P^in@t)+(x#5o$zx`i+'&ot`Pt)+(i#5oi='+i`i}`k!trk@Uqs)`2'';@h=s.vs(sed)`5trk`G@h)$h=s.mr(@o,(vt#5t`Pvt)`i+s.hav()+q+(qs?qs:s.rq(^C)),0,id,ta);qs`h;`Wm('t')`5s.p"
+"_r)s.p_r()}^7(qs);^y`o(@g;`k@g`L^9,`F$51',vb`R@G=^D=s.`N`g=s.`N^K=`E^z^x=s.ppu=^n=^nv1=^nv2=^nv3`h`5$t)`E^z@G=`E^zeo=`E^z`N`g=`E^z`N^K`h`5!id@Us.tc){s.tc=1;s.flush`Z()}`2$h`Atl`0o,t,n,vo`1;s.@G=@uo"
+"`R`N^K=t;s.`N`g=n;s.t(@g}`5pg){`E^zco`0o){`K@J\"_\",1,#8`2@uo)`Awd^zgs`0$P{`K@J$k1,#8`2s.t()`Awd^zdc`0$P{`K@J$k#8`2s.t()}}@2=(`E`I`X`8`4@ss@b0`Rd=^J;s.b=s.d.body`5$X`S#4`g){s.h=$X`S#4`g('HEAD')`5s."
+"h)s.h=s.h[0]}s.n=navigator;s.u=s.n.userAgent;@P=s.u`4'N$U6/^P`Kapn$D`g,v$D^j,ie=v`4$i'),o=s.u`4'@L '),i`5v`4'@L@b0||o>0)apn='@L';^W$7^sMicrosoft Internet Explorer'`Risns$7^sN$U'`R^c$7^s@L'`R^d=(s.u"
+"`4'Mac@b0)`5o>0)`O`qs.u`3o+6));`6ie>0){`O=`ti=v`3ie+5))`5`O>3)`O`qi)}`6@P>0)`O`qs.u`3@P+10));`l`O`qv`Rem=0`5^3#3^k){i=^e^3#3^k(256))`C(`Rem=(i^s%C4%80'?2:(i^s%U0100'?1:0))}s.sa(un`Rvl_l='`bID,vmk,p"
+"pu,@E,`b`gspace,c`V,`s@6,#1`g,^H,^1,@H';^Y=^X+',^m,$O,server,#1^K,$w@5ID,purchaseID,@p,state,zip,$f,products,`N`g,`N^K';^B`Kn=1;n<51;n++)^Y+=',prop$F+',eVar$F+',hier$F;^X2=',^S,^2,`n^j,`d,`s@8,`y@1"
+",`y^Z,`e,^w,pe$l1$l2$l3,p^I';^Y+=^X2;^9=^Y+',`b^L,`b^L#2`MSele@5,`MList,`MM$o,`w^NLinks,`w@C,`w@R,`N@a^3,`N^NFile^Ks,`NEx`m,`NIn`m,`N@SVa$j`N@S^Os,`N`gs,@G,eo';$t=pg$x^9)`5!ss)`Es()",
w=window,l=w.s_c_il,n=navigator,u=n.userAgent,v=n.appVersion,e=v.indexOf('MSIE '),m=u.indexOf('Netscape6/'),a,i,s;if(un){un=un.toLowerCase();if(l)for(i=0;i<l.length;i++){s=l[i];if(s._c=='s_c'){if(s.oun==un)return s;else if(s.fs(s.oun,un)){s.sa(un);return s}}}}
w.s_r=new Function("x","o","n","var i=x.indexOf(o);if(i>=0&&x.split)x=(x.split(o)).join(n);else while(i>=0){x=x.substring(0,i)+n+x.substring(i+o.length);i=x.indexOf(o)}return x");
w.s_d=new Function("x","var t='`^@$#',l='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz',d,n=0,b,k,w,i=x.lastIndexOf('~~');if(i>0){d=x.substring(0,i);x=x.substring(i+2);while(d){w=d;i"
+"=d.indexOf('~');if(i>0){w=d.substring(0,i);d=d.substring(i+1)}else d='';b=parseInt(n/62);k=n-b*62;k=t.substring(b,b+1)+l.substring(k,k+1);x=s_r(x,k,w);n++}for(i=0;i<5;i++){w=t.substring(i,i+1);x=s_"
+"r(x,w+' ',w)}}return x");
w.s_fe=new Function("c","return s_r(s_r(s_r(c,'\\\\','\\\\\\\\'),'\"','\\\\\"'),\"\\n\",\"\\\\n\")");
w.s_fa=new Function("f","var s=f.indexOf('(')+1,e=f.indexOf(')'),a='',c;while(s>=0&&s<e){c=f.substring(s,s+1);if(c==',')a+='\",\"';else if((\"\\n\\r\\t \").indexOf(c)<0)a+=c;s++}return a?'\"'+a+'\"':"
+"a");
w.s_ft=new Function("c","c+='';var s,e,o,a,d,q,f,h,x;s=c.indexOf('=function(');while(s>=0){s++;d=1;q='';x=0;f=c.substring(s);a=s_fa(f);e=o=c.indexOf('{',s);e++;while(d>0){h=c.substring(e,e+1);if(q){i"
+"f(h==q&&!x)q='';if(h=='\\\\')x=x?0:1;else x=0}else{if(h=='\"'||h==\"'\")q=h;if(h=='{')d++;if(h=='}')d--}if(d>0)e++}c=c.substring(0,s)+'new Function('+(a?a+',':'')+'\"'+s_fe(c.substring(o+1,e))+'\")"
+"'+c.substring(e+1);s=c.indexOf('=function(')}return c;");
c=s_d(c);if(e>0){a=parseInt(i=v.substring(e+5));if(a>3)a=parseFloat(i)}else if(m>0)a=parseFloat(u.substring(m+10));else a=parseFloat(v);if(a>=5&&v.indexOf('Opera')<0&&u.indexOf('Opera')<0){w.s_c=new Function("un","pg","ss","var s=this;"+c);return new s_c(un,pg,ss)}else s=new Function("un","pg","ss","var s=new Object;"+s_ft(c)+";return s");return s(un,pg,ss)}


function webAnalyticsSetDidItImgPixel(imgId, imgSrc) {
    var img1 = $get(imgId);
    if (img1 == null) {
        img1 = document.createElement('img');
        img1.className = 'displayNone';
        document.body.appendChild(img1);
    }
    img1.src = imgSrc;
}

function webAnalyticsPropertyDetail(propertyId) {
    //alert('Property Detail Page Viewed');
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'Property Detail',
        s.channel = 'Showcase',
        s.events = 'event8',
        s.eVar14 = propertyId,
        s.t();
}

function webAnalyticsMapPage() {
    //alert('Map Page Viewed');
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'Map Page',
        s.channel = 'Showcase',
        s.events = 'event10',
        s.t();
}

function webAnalyticsResultPage() {
    //alert('Results Page Viewed');
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'Search Results',
        s.channel = 'Showcase',
        s.events = 'event7',
        s.t();
}
function webAnalyticsWantMorePage() {
    //alert('WantMore Page Viewed');
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'Want More',
        s.channel = 'Showcase',
        s.events = 'event16',
        s.t();
}
function webAnalyticsSearchRequested(propertyTypes, locationID, buildingSizeRange, sfAvailableRange, rentRange, salePriceRange, pageName) {
    //alert('Search Requested');
    //alert(propertyTypes + ", " + locationID + ", " + buildingSizeRange + ", " + sfAvailableRange + ", " + rentRange + ", " + salePriceRange);
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'Showcase Search',
        s.channel = 'Showcase',
        s.events = 'event6',
        s.prop15 = s.eVar15 = propertyTypes,
        s.prop16 = s.eVar16 = locationID,
        s.prop17 = s.eVar17 = buildingSizeRange,
        s.prop18 = s.eVar18 = sfAvailableRange,
        s.prop19 = s.eVar19 = rentRange,
        s.prop20 = s.eVar20 = salePriceRange,
        s.prop21 = s.eVar21 = pageName,
        s.t();
}

function webAnalyticsBrokerPage(brokerID) {
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'Showcase Search',
        s.channel = 'Showcase',
        s.events = 'event6',
        s.prop7 = s.eVar7 = brokerID,
        s.prop21 = s.eVar21 = 'Showcase Broker Searches',
        s.t();
}

function webAnalyticsCompanyPage(companyID) {
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'Showcase Search',
        s.channel = 'Showcase',
        s.events = 'event6',
        s.prop6 = s.eVar6 = companyID,
        s.prop21 = s.eVar21 = 'Showcase Company Searches',
        s.t();
}

//Showcase Search Page - when Search control is shown
function webAnalyticsSearchPage(sourceName) {
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'Showcase Search Page',
        s.channel = 'Showcase',
        s.events = 'event17',
        s.eVar8 = sourceName,
        s.t();
}

function webAnalyticsEmailSentToColleague() {
    //alert('webAnalyticsEmailSentToColleague');
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'Forward to Colleague',
        s.channel = 'Showcase',
        s.events = 'event14',
        s.t();
}

function webAnalyticsEmailSentToBroker() {
    //alert('webAnalyticsEmailSentToBroker');
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'Broker Inquiry',
        s.channel = 'Showcase',
        s.events = 'event15',
        s.t();
}
function webAnalyticsPagePrinted() {
    //alert('Page Printed');
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'Page Printed',
        s.channel = 'Showcase',
        s.events = 'event23',
        s.t();
}

//E-Commerce specific events starts here
//EC - Abbreviation for E-Commerce

//Track E-Commerce Landing Page
function webAnalyticsECLandingPage() {
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'SC Home Page',
    s.channel = 'Showcase',
    s.events = 'event24',
    s.t();
}

//Track E-Commerce Offer Page
function webAnalyticsECProductDetailPage(prodPrice, contactID) {
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'SC Product Detail Page',
    s.channel = 'Showcase E-Commerce',
    s.events = 'prodView',
    s.products = ';Showcase E-Commerce;1;' + prodPrice ,
    s.eVar12 = contactID,
    s.t();
}

//Track Sold Out 
function webAnalyticsECSoldOut() {
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'SC Sold Out',
    s.channel = 'Showcase E-Commerce',
    s.events = 'event25',
    s.products = ';Showcase E-Commerce',
    s.t();
}

//Track No Listings 
function webAnalyticsECNoListings() {
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'SC No Listings',
    s.channel = 'Showcase E-Commerce',
    s.events = 'event25',
    s.products = ';Showcase E-Commerce',
    s.t();
}

//Track step 1 of purchase wizard - Account Info
function webAnalyticsECAccountInfo() {
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'SC Account Info - Step 1',
    s.channel = 'Showcase E-Commerce',
    s.events = 'event26',
    s.products = ';Showcase E-Commerce',
    s.t();
}

//Track step 2 of purchase wizard - Payment Info
function webAnalyticsECPaymentInfo() {
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'SC Payment Info - Step 2',
    s.channel = 'Showcase E-Commerce',
    s.events = 'event27',
    s.products = ';Showcase E-Commerce',
    s.t();
}

//Track step 3 of purchase wizard - Summary
function webAnalyticsECSummary() {
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'SC Summary - Step 3',
    s.channel = 'Showcase E-Commerce',
    s.events = 'event28',
    s.products = ';Showcase E-Commerce',
    s.t();
}

//Track E-Commerce Confirmation
//Product price here is the discoutned value if any promotional code is applied.
function webAnalyticsECOrderConfirmation(prodPrice) {
    var s = s_gi(cg_account);
    s.clearPageVars();
    s.pageName = 'SC Confirmation - Step 4',
    s.channel = 'Showcase E-Commerce',
    s.events = 'purchase',
    s.products = ';Showcase E-Commerce;1;' + prodPrice,
    s.t();
}

/// <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);

    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:
            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();