﻿var minWidth = 1000;
var minHeight = 400;

function getWindowHeight() {
    var windowHeight = 0;
    
    if (typeof(window.innerHeight) == "number") {
        windowHeight = window.innerHeight;
    } else {
        if (document.documentElement && document.documentElement.clientHeight) {
            windowHeight = document.documentElement.clientHeight;
        } else {
            if (document.body && document.body.clientHeight) { windowHeight = document.body.clientHeight; }
        }
    }
    
    return (windowHeight);
}

function getWindowWidth() {
    var windowWidth = 0;
    
    if (typeof(window.innerWidth) == "number") {
        windowWidth = window.innerWidth;
    } else {
        if (document.documentElement && document.documentElement.clientWidth) {
            windowWidth = document.documentElement.clientWidth;
        } else {
            if (document.body && document.body.clientWidth) { windowWidth = document.body.clientWidth; }
        }
    }
    return (windowWidth);
}

function setEditTextBoxStyle(txtBox) {
    $get(txtBox).readOnly = false; 
    $get(txtBox).style.borderWidth = "1px";
}

function setReadOnlyTextBoxStyle(txtBox) {
    $get(txtBox).readOnly = true; 
    $get(txtBox).style.borderWidth = "0px";
}

function setEditIGTextBoxStyle(txtBox) {
    var elem = igedit_getById(txtBox);
    elem.elem.style.borderWidth = "1px";
    elem.setReadOnly(false); 
}

function setReadOnlyIGTextBoxStyle(txtBox) {
    var elem = igedit_getById(txtBox);
    elem.elem.style.borderWidth = "0px";
    elem.setReadOnly(true);
}

function clickIE4() {
    if (event.button == 2) {
        alert(message);
        return false;
    }
}

function clickNS4(e) {
    if (document.layers || document.getElementById && !document.all) {
        if (e.which == 2 || e.which == 3) {
            alert(message);
            return false;
        }
    }
}
function getVersion() {
    var arVersion = navigator.appVersion.split("MSIE")
    var version = parseFloat(arVersion[1])

    return (version);
}

function getBrowserType() {
    var browser;

    if (navigator.appName.indexOf('Microsoft') != -1) {
        browser = 'IE'
    } else if (navigator.appName.indexOf('Netscape') != -1) {
        browser = 'Netscape'
    } else {
        browser = 'IE';
    }

    return (browser);
}

function correctPNG() {
    var arVersion = navigator.appVersion.split("MSIE");
    var version = parseFloat(arVersion[1]);

    if (((version >= 5.5) && (version < 7)) && (document.body.filters)) {
        for (var i = 0; i < document.images.length; i++) {
            var img = document.images[i];
            var imgName = img.src.toUpperCase();
            if (imgName.substring(imgName.length - 3, imgName.length) == "PNG") {
                var imgID = (img.id) ? "id='" + img.id + "' " : "";
                var imgClass = (img.className) ? "class='" + img.className + "' " : "";
                var imgTitle = (img.title) ? "title='" + img.title + "' " : "title='" + img.alt + "' ";
                var imgStyle = "display:inline-block;" + img.style.cssText;

                if (img.align == "left") { imgStyle = "float:left;" + imgStyle; }
                if (img.align == "right") { imgStyle = "float:right;" + imgStyle; }
                if (img.parentElement.href) { imgStyle = "cursor:hand;" + imgStyle; }
                
                var strNewHTML = "<span " + imgID + imgClass + imgTitle
                                                + " style=\"" + "width:" + img.width + "px; height:" + img.height + "px;" + imgStyle + ";"
                                                + "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
                                                + "(src=\'" + img.src + "\', sizingMethod='scale');\"></span>";
                img.outerHTML = strNewHTML;
                i = i - 1;
            }
        }
    }
}
//----------------------------------------------------------
// 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."};
/////////////////////////////////////////////////////////////////////////////
Sys.Timer = function() {
Sys.Timer.initializeBase(this);this._interval = 1000;this._enabled = false;this._timer = null;}
Sys.Timer.prototype = {
get_interval: function() {
return this._interval;},
set_interval: function(value) {
if (this._interval !== value) {
this._interval = value;this.raisePropertyChanged('interval');if (!this.get_isUpdating() && (this._timer !== null)) {
this._stopTimer();this._startTimer();}
}
},
get_enabled: function() {
return this._enabled;},
set_enabled: function(value) {
if (value !== this.get_enabled()) {
this._enabled = value;this.raisePropertyChanged('enabled');if (!this.get_isUpdating()) {
if (value) {
this._startTimer();}
else {
this._stopTimer();}
}
}
},
add_tick: function(handler) {
this.get_events().addHandler("tick", handler);},
remove_tick: function(handler) {
this.get_events().removeHandler("tick", handler);},
dispose: function() {
this.set_enabled(false);this._stopTimer();Sys.Timer.callBaseMethod(this, 'dispose');},
updated: function() {
Sys.Timer.callBaseMethod(this, 'updated');if (this._enabled) {
this._stopTimer();this._startTimer();}
},
_timerCallback: function() {
var handler = this.get_events().getHandler("tick");if (handler) {
handler(this, Sys.EventArgs.Empty);}
},
_startTimer: function() {
this._timer = window.setInterval(Function.createDelegate(this, this._timerCallback), this._interval);},
_stopTimer: function() {
window.clearInterval(this._timer);this._timer = null;}
}
Sys.Timer.descriptor = {
properties: [ {name: 'interval', type: Number},
{name: 'enabled', type: Boolean} ],
events: [ {name: 'tick'} ]
}
Sys.Timer.registerClass('Sys.Timer', Sys.Component);

//vs 061308
function ig_WebControl(id)
{
	if(arguments.length > 0){
		this.init(id);
	}
}
ig_WebControl.prototype.init=function(id)
{
	this._id=id;
	var o=ig_all[id];
	if(o && o._deleteMe)
		o._deleteMe();
	ig_all[id]=this;
	this._posted=this._postRequest=0;
	ig_shared._isPosted=false;
	// clientViewState
	this.postField = ig_csom.getElementById(this.getClientID() + "_Data");	
	this.clientState = ig_ClientState.createRootNode();	
	this.rootNode = ig_ClientState.addNode(this.clientState, "XMLRootNode");
}

ig_WebControl.prototype.constructor=ig_WebControl;
ig_WebControl.prototype.getElement=function(){return this._element;}
ig_WebControl.prototype.getID=function(){return this._id;}
ig_WebControl.prototype.getUniqueID=function(){return this._uniqueID;}
ig_WebControl.prototype.getClientID=function(){return this._clientID;}


ig_WebControl.prototype.updateControlState = function(propName, propValue) {
	if(this.controlState == null)
		this.controlState = ig_ClientState.addNode(this.rootNode, "ControlState");
		
	ig_ClientState.setPropertyValue(this.controlState, propName, propValue);
	if(this.postField != null)
		this.postField.value = ig_ClientState.getText(this.clientState);	
}

ig_WebControl.prototype.addStateItem  = function(name, value) {
	if(this.stateItems == null)
		this.stateItems = ig_ClientState.addNode(this.rootNode, "StateItems");
	var stateItem = ig_ClientState.addNode(this.stateItems, "StateItem");
	this.updateStateItem(stateItem, name, value);
	return stateItem;
}

ig_WebControl.prototype.updateStateItem = function(stateItem, propName, propValue) {
	ig_ClientState.setPropertyValue(stateItem, propName, propValue);
	if(this.postField != null)
		this.postField.value = ig_ClientState.getText(this.clientState);	
}

ig_WebControl.prototype.fireServerEvent = function(eventName, data)
{
	if(ig_shared._isPosted)
		return;
	if(this._postRequest == -1)
	{
		this._postRequest = 0;
		return;
	}
	this._postRequest = 0;
	try
	{
		ig_shared._isPosted = true;
		__doPostBack(this._uniqueID, eventName + ":" + data);
	}
	catch(e){}
}

ig_WebControl.prototype.removeEventListener = function(name, handler)
{
	var i, evts = this._clientEvents ? this._clientEvents[name] : null;
	if(evts != null) for(i = 0; i < evts.length; i++)
		if(evts[i] != null && evts[i]._handler == handler)
	{
		delete evts[i];
		evts[i] = null;
		return;
	}
}

ig_WebControl.prototype.addEventListener = function(name, handler, obj, post)
{
	if(typeof handler != "function")
		return;
	if(!this._clientEvents) this._clientEvents = new Object();
	var i, evts = this._clientEvents[name];
	if(evts == null)
		evts = this._clientEvents[name] = new Array();
	var i0 = evts.length;
	for(i = 0; i < evts.length; i++)
	{
		if(evts[i] == null)
			i0 = i;
		else if(evts[i]._handler == handler)
			return;
	}
	var evt = new ig_EventObject();
	evt._object = obj;
	evts[i0] = {_webcontrol:this, _eventName:name, _handler:handler, _autoPostBack:(post==true), _event:evt};
}

ig_WebControl.prototype.fireEvent = function(name, evnt)
{
	if(!name || this._isInitializing || !this._clientEvents)
		return false;
	this._postRequest = this._postAsync = 0;
	var evt, evts = this._clientEvents[name];
	var cancel = false, postAsync = 0, post = 0, i = (evts == null) ? 0 : evts.length;
	if(i == 0)
		return false;
	if(evnt == "check")
		return true;
	var args = this.fireEvent.arguments;
	while(i-- > 0)
	{
		if(evts[i] == null)
			continue;
		evt = evts[i]._event;
		evt.reset();
		evt.event=evnt;
		evt.needPostBack=evts[i]._autoPostBack;
		try
		{
			evts[i]._handler(this, evt, args[2], args[3], args[4], args[5], args[6], args[7]);
		}catch(ex){continue;}
		if(evt.cancelPostBack)
			post = -1;
		else if(post == 0)
		{
			if(evt.needPostBack)
				post = 1;
			else if(evt.needAsyncPostBack)
				postAsync = 1;
		}
		if(evt.cancel)
			cancel = true;
		evt.event = null;
	}
	if(!cancel || post < 0)
		this._postRequest = post;
	if(!cancel && post == 0)
		this._postAsync = postAsync;
	return cancel;
}
ig_WebControl.prototype._decodeProps	= function(props)
{
	for(var i = 0; i < props.length; i++)
	{
		if(props[i] != null)
		{
			if(props[i].push != null)
				this._decodeProps(props[i]);
			if(typeof props[i]=="string")
			{
					
					props[i] = decodeURI(props[i]);
					
					props[i] = unescape(props[i].replace(/\+/g," "));
					props[i] = unescape(props[i]);
			} 
		}
	}
}
ig_WebControl.prototype._initControlProps	= function(props)
{	
	this._decodeProps(props);
	this._props = props[0];
	this._uniqueID	= this._props[0];
	this._clientID = this._props[1];
	var i = props[1] ? props[1].length : 0;
	while(i-- > 0) try
	{
		this.addEventListener(props[1][i][0], eval(props[1][i][1]), null, props[1][i][2]);
	}catch(e)
	{window.status = "Can't find " + props[1][i][1];}
	this._objects = props[2];
	this._collections = props[3];
}	

//ig_initShared implements browser independent functionality
function ig_initShared()
{
	// Public Properties
	this.ScriptVersion="5.3.20053.14";
	try{this.AgentName=navigator.userAgent.toLowerCase();}catch(e){this.AgentName="";}
	this.MajorVersionNumber =parseInt(navigator.appVersion);
	//this.AgentName=navigator.userAgent.toLowerCase();
	//this.MajorVersionNumber=parseInt(navigator.appVersion);
	this.IsDom=document.getElementById?true:false;
	this.IsNetscape62=this.AgentName.indexOf("netscape6")>=0;
	var i=this.AgentName.indexOf("netscape/7.");
	this.Netscape7=(i>0)?this.AgentName.charCodeAt(i+11)-48:-1;
	this.IsNetscape=document.layers!=null;
	this.IsNetscape6=(this.IsDom&&navigator.appName=="Netscape");
	this.IsSafari=this.AgentName.indexOf("safari")>=0;
	this.IsFireFox=this.AgentName.indexOf("firefox")>=0;
	this.IsFireFox10=this.AgentName.indexOf("firefox/1.0")>=0;
	this.IsFireFox20=this.AgentName.indexOf("firefox/2.0")>=0;
	this.IsFireFox15=this.IsFireFox20||this.AgentName.indexOf("firefox/1.5")>=0;
	this.IsOpera=this.AgentName.indexOf("opera")>=0;
	this.IsMac=this.AgentName.indexOf("mac")>=0;
	this.IsIE=document.all!=null&&!this.IsOpera&&!this.IsSafari;
	this.IsIE4=this.IsIE&&!this.IsDom;
	this.IsIE4Plus=this.IsIE&&this.MajorVersionNumber>=4;
	this.IsIE5=this.IsIE&&this.IsDom;
	this.IsIE50=this.IsIE5&&this.AgentName.indexOf("msie 5.0")>0;
	this.IsWin=this.AgentName.indexOf("win")>=0;
	this.IsIEWin=this.IsIE&&this.IsWin;
	this.IsIE55=this.IsIEWin&&this.AgentName.indexOf("msie 5.5")>0;
	this.IsIE6=this.IsIEWin&&this.AgentName.indexOf("msie 6.0")>0;
	this.IsIE7=this.IsIEWin&&this.AgentName.indexOf("msie 7.0")>0;
	this.IsIE55Plus = this.IsIE55 || this.IsIE6 || this.IsIE7;
	this.IsStandardsMode=(document.compatMode=="CSS1Compat");
	this.attrID = "ig_mark";
	this._isPosted = false;
	this.isFormPosted = function(){return this._isPosted;}
	// Obtains an element object based on its Id
	this.getElementById = function (tagName)
	{
		if(this.IsIE)
			return document.all[tagName];
		else
			return document.getElementById(tagName);
	}

	this.isArray = function(a) {
		return a!=null && a.length!=null;
	}
	
	this.isEmpty = function(o) {
		return !(this.isArray(o) && o.length>0);
	}
	
	this.notEmpty = function(o) {
		return (this.isArray(o) && o.length>0);
	}
    //D.M. 8/15/2007
    //Return an elements current styles.
    this.getRuntimeStyle = function(elem)
    {
        if(!elem)
			return null;
		var s = elem.currentStyle;
		if(s)
			return s;
		var win = document.defaultView;
		if(!win)
			win = window;
		if(win.getComputedStyle)
			s = win.getComputedStyle(elem, '');
		return s ? s : elem.style;
    }
	this.getStyleValue = function(style, prop, elem)
	{
		if(!style)
			style = this.getRuntimeStyle(elem);
		if(!style)
			return null;
		var val = style[prop];
		if(!this.isEmpty(val) || !style.getPropertyValue)
			return val;
		return style.getPropertyValue(prop);
	}
	// Adds an event listener to an html element.
	this.addEventListener=function(elem,evtName,fn,flag)
	{ 
		
		try{if(elem.addEventListener){elem.addEventListener(evtName,fn,flag==true); return;}}catch(ex){}
		try{if(elem.attachEvent){elem.attachEvent("on"+evtName,fn); return;}}catch(ex){}
		eval("var old=elem.on"+evtName);
		var sF=fn.toString();
		var i=sF.indexOf("(")+1;
		try
		{
		if((typeof old =="function") && i>10)
		{
			old=old.toString();
			
			var args=old.substring(old.indexOf("(")+1,old.indexOf(")"));
			args=ig_shared.replace(args," ","");
			if(args.length>0) args=args.split(",");
			
			old=old.substring(old.indexOf("{")+1,old.lastIndexOf("}"));
			
			sF=sF.substring(9,i);
			if(old.indexOf(sF)>=0)return;
			var s="fn=new Function(";
			for(i=0;i<args.length;i++)
			{
				if(i>0)sF+=",";
				s+="\""+args[i]+"\",";
				sF+=args[i];
			}
			sF+=");"+old;
			eval(s+"sF)");
		}
		eval("elem.on"+evtName+"=fn");
		}catch(ex){}
	}

	
	this.removeEventListener = function(elem, evt, fn)
	{ 
		try
		{
			if(elem && elem.removeEventListener)
			{
				elem.removeEventListener(evt, fn);
				return;
			}
		}catch(ex){}
		try
		{
			if(elem && elem.detachEvent)
				elem.detachEvent('on' + evt, fn);
		}catch(ex){}
	}
	// Obtains the proper source element in relation to an event
	this.getSourceElement = function (evnt, o)
	{
		if(evnt.target) // This does not appear to be working for Netscape
			return evnt.target;
		else 
		if(evnt.srcElement)
			return evnt.srcElement;
		else
			return o;
	}
	
	this.getText = function (e){
		if(e==null)return "";
		var i,v=null,ii=(e.childNodes==null)?0:e.childNodes.length;
		for(i=-1;i<ii;i++)
		{
			var ei=(i<0)?e:e.childNodes[i];
			if(ei.nodeName=="#text")v=(v==null)?ei.nodeValue:v+" "+ei.nodeValue;
		}
		if(v!=null)return v;
		if((v=e.text)!=null)return v;
		try{return e.innerText;}catch(ex){}
		try{return e.innerHTML;}catch(ex){}
		return "";
	}
	
	this.setText = function (e, text)
	{
		if(e==null)return false;
		if(text==null)text="";
		var i,ii=(e.childNodes==null)?0:e.childNodes.length;
		for(i=-1;i<ii;i++)
		{
			var ei=(i<0)?e:e.childNodes[i];
			if(ei.nodeName=="#text")
			{
				if(text!=null){ei.nodeValue=text; text=null;}
				else ei.nodeValue="";
			}
		}
		if(text!=null)try
		{
			if(e.text!=null)e.text=text;
			else if(e.innerText!=null)e.innerText=text;
			else e.innerHTML=text;
			text=null;
		}catch(ex){}
		return text==null;
	}
	this.setEnabled = function (e, bEnabled)
	{
		if(this.IsIE)
			e.disabled = !bEnabled;
	}
	this.getEnabled = function (e){
		if(this.IsIE)
			return !e.disabled;
	}

	this.navigateUrl =	function (targetUrl, targetFrame)
	{
		if(targetUrl == null || targetUrl.length == 0)
			return;
		var newUrl=targetUrl.toLowerCase();
		if(newUrl.indexOf("javascript:") == 0)
			eval(targetUrl);
		else 
		if(targetFrame != null && targetFrame!="")	{
			if(ig_shared.getElementById(targetFrame) != null) 
				ig_shared.getElementById(targetFrame).src = targetUrl;
			else {
				var oFrame = ig_searchFrames(top, targetFrame);
				if(oFrame != null)
					oFrame.location=targetUrl;
				else 
				if(targetFrame == "_self" 
					|| targetFrame == "_parent"
					|| targetFrame == "_media"
					|| targetFrame == "_top"
					|| targetFrame == "_blank"
					|| targetFrame == "_search")
					window.open(targetUrl, targetFrame);
				else
					window.open(targetUrl);
			}
		}
		else {
			try {
				location.href = targetUrl;
			}
			catch (x) {
			}
		}
	}
	
	function ig_searchFrames(frame, targetFrame) {
		if(frame.frames[targetFrame] != null)
			return frame.frames[targetFrame];
		var i;
		for(i=0; i<frame.frames.length; i++) {
			var subFrame = ig_searchFrames(frame.frames[i], targetFrame);
			if(subFrame != null)
				return subFrame; 
		}
		return null;
	}
	
	this.findControl=function(startElement,idList,closestMatch){
		var item;
		var searchString="";
		var i=0;
		var partialId=idList.split(":");
		while(partialId[i+1]!=null&&partialId[i+1].length>0){
			searchString+=partialId[i]+".*";
			i++;
		}
		searchString+=partialId[i]+"$";
		var searchExp=new RegExp(searchString);
		var curElement;
		if(startElement != null)
			curElement=startElement.firstChild;
		else
			curElement = window.document.firstChild;
		while(curElement!=null){
			if(curElement.id!=null&&(curElement.id.search(searchExp))!=-1){
				ig_dispose(searchExp);
				return curElement;
			}
			item=this.findControl(curElement,idList);
			if(item!=null){
				ig_dispose(searchExp);
				return item;
			}
			curElement=curElement.nextSibling;		
		}
		ig_dispose(searchExp);
		if(closestMatch)
			return findClosestMatch(startElement,partialId);
		else return null;
	}
	this.createTransparentPanel=function (){
		if(!this.IsIE)return null;
		var transLayer=document.createElement("IFRAME");
		transLayer.style.zIndex=1000;
		transLayer.frameBorder="no";
		transLayer.scrolling="no";
		transLayer.style.filter="progid:DXImageTransform.Microsoft.Alpha(Opacity=0);";
		transLayer.style.visibility='hidden';
		transLayer.style.display='none';
		transLayer.style.position="absolute";
		transLayer.src='javascript:new String("<html></html>")';
		var e = document.body.firstChild;
		document.body.insertBefore(transLayer, e);
		return new ig_TransparentPanel(transLayer);
	}
	
	
	
	
	
	this.isInside=function(evt,container,elem,shift)
	{
		var to=evt.toElement;
		if(to==null)to=evt.relatedTarget;
		if(to!=null && shift!=-1)
		{
			while(to!=null)
			{
				if(to==container)return true;
				to=to.parentNode;
			}
			return false;
		}
		if(elem==null)elem=container; if(shift==null)shift=0;
		var z,x=-evt.clientX,y=-evt.clientY;
		var w=elem.offsetWidth,h=elem.offsetHeight;
		while(elem!=null)
		{
			if((z=elem.offsetLeft)!=null){x+=z; y+=elem.offsetTop;}
			elem=elem.offsetParent;
		}
		return x<-1 && y<-1 && 1<x+w && 2+shift<y+h;
	}
	this.createHoverBehavior= function(objectToCallBackWith,element,mouseOverHandler,mouseOutHandler){
		element.__callBackObject=objectToCallBackWith;
		element.__isEventReady=true;
		objectToCallBackWith.__onFilteredMouseOver=mouseOverHandler;
		objectToCallBackWith.__onFilteredMouseOut=mouseOutHandler;
		this.addEventListener(element,"mouseover",ig_filterMouseOverEvents,false);
		this.addEventListener(element,"mouseout",ig_filterMouseOutEvents,false);
	}
	
	
	this.getCBManager = function(form)
	{
		if(!ig_all._ig_cbManager)
			ig_all._ig_cbManager = new ig_callBackManager(form);
		return ig_all._ig_cbManager;
	}
	
	
	
	
	
	
	
	
	
	
	
	
	this.addCBEventListener = function(evalCtl, elemID)
	{
		if(!this._cbListeners)
			this._cbListeners = new Array();
		var i = -1;
		while(++i < this._cbListeners.length)
			if(this._cbListeners[i].evalCtl == evalCtl)
				return;
		this._cbListeners[i] = {evalCtl:evalCtl, elemID:elemID};
	}
	
	
	
	
	this.addCBSubmitListener = function(fn)
	{
		this.addCBEventListener(fn);
	}
	
	
	this.addCBErrorListener = function(fn)
	{
		var el = this._cbError;
		if(!el)
			el = this._cbError = new Array();
		el[el.length] = fn;
	}
	
	
	this.getForm = function()
	{
		var form = document.forms[0];
		if(!form && (form = document.form1) == null)
		{
			var i = -1, eds = document.getElementsByTagName('INPUT');
			while(!form && ++i < eds.length)
				form = eds[i].form;
		}
		return form;
	}
	
	
	
	
	this.getElement = function(id, form)
	{
		var e = document.getElementById(id);
		if(e)
			return e;
		if(!form)
			form = this.getForm();
		return form ? form[id] : null;
	}
	
	
	
	
	
	
	
	this.absPosition = function(elem, pan, pos, ie, ed)
	{
		var z, htm = null, e = elem, body = document.body;
		var i = 1, ok = 0, y = 0, x = 0, pe = e;
		var elemH = e ? e.offsetHeight : -1, elemW = e ? e.offsetWidth : 0;
		while(e != null)
		{
			if(ok < 1 || e == body)
			{
				if((z = e.offsetLeft) != null)
					x += z;
				if((z = e.offsetTop) != null)
					y += z;
			}
			if(e.nodeName == "HTML")
				htm = body = e;
			if(e == body)
				break;
			z = e.scrollLeft;
			if(z == null || z == 0)
				z = pe.scrollLeft;
			if(z != null && z > 0)
				x -= z;
			z = e.scrollTop;
			if(z == null || z == 0)
				z = pe.scrollTop;
			if(z != null && z > 0)
				y -= z;
			pe = e.parentNode;
			e = e.offsetParent;
			if(pe.tagName == "TR")
				pe = e;
			if(e == body && pe.tagName == "DIV")
			{
				e = pe;
				ok++;
			}
		}
		if(elem && document.elementFromPoint)
		{
			var xOld = x, yOld = y;
			ok = true;
			var x0 = body.scrollLeft, y0 = body.scrollTop;
			while(++i < 16)
			{
				z = (i > 2) ? ((i & 2) - 1) * (i & 14) / 2 * 5 : 2;
				e = document.elementFromPoint(x + z - x0, y + z - y0);
				if(!e || e == ed || e == elem)
					break;
			}
			if(i > 15 || !e)
				ok = false;
			x += z;
			y += z;
			i = z = 0;
			while(ok && ++i < 22)
			{
				if(z == 0) x--;
				else y--;
				e = document.elementFromPoint(x - x0, y - y0);
				if(!e || i > 20)
					ok = false;
				if(e != ed && e != elem)
					if(z > 0)
						break;
					else
					{
						i = z = 1;
						x++;
					}
			}
			if(ok)
			{
				x--;
				y--;
			}
			else
			{
				x = xOld;
				y = yOld;
			}
		}
		if(!pan)
			return {x:x, y:y};
		var zIndex = 9999;
		while(elem)
		{
			if(elem.nodeName == 'BODY' || elem.nodeName == 'FORM')
				break;
			z = this.getStyleValue(null, 'zIndex', elem);
			if(z && z.substring) z = (z.length > 4 && z.charCodeAt(0) < 58) ? parseInt(z) : 0;
			if(z && z >= zIndex) zIndex = z + 1;
			elem = elem.parentNode;
		}
		ok = pan.style;
		ok.position = 'absolute';
		ok.visibility = 'visible';
		ok.display = '';
		ok.zIndex = zIndex + 1;
		ed = ed ? 0 : 20;
		var panH = pan.offsetHeight, panW = pan.offsetWidth;
		var iH = body.clientHeight, iW = body.clientWidth, iL = body.scrollLeft, iT = body.scrollTop;
		if(!iH || iH < 50)
		{
			iH = body.offsetHeight - ed;
			iW = body.offsetWidth - ed;
		}
		z = body;
		while(!htm && (z = z.parentNode) != null)
			if(z.nodeName == 'HTML')
				htm = z;
		if(htm)
		{
			z = htm.clientHeight;
			i = htm.offsetHeight;
			if(z && z > 20 && !ig_shared.IsOpera)
			{
				iH = z;
				iW = htm.clientWidth;
				iL = htm.scrollLeft;
				iT = htm.scrollTop;
			}
		}
		if(elemH < 0)
		{
			x = ++iL;
			y = ++iT;
			elemH = --iH;
			elemW = --iW;
		}
		if(iH < 20)
			iH = 20;
		if(iW < 90)
			iW = 90;
		if(!pos)
			pos = 0;
		if(typeof pos == 'object')
		{
			if((z = pos.x) != null)
				x += z;
			if((z = pos.y) != null)
				y += z;
			pos = 0;
		}
		
		if((pos & 4) != 0)
			x += elemW;
		
		else if((pos & 3) == 3)
			x -= panW;
		
		else if((pos & 1) != 0)
			x += (elemW >> 1) - (panW >> 1);
		
		else if((pos & 2) != 0)
			x += elemW - panW;
		
		if((pos & 8) != 0)
			y += (elemH >> 1) - (panH >> 1);
		
		else if((pos & 16) != 0)
			y += elemH - panH;
		
		else if((pos & 32) != 0)
			y -= panH;
		
		else if((pos & 64) != 0)
			y += elemH;
		if(y + panH > iH + iT)
		{
			
			if((pos & 64) != 0 && y - iT - 3 > panH + elemH)
				y -= panH + elemH;
			else
				y = iH + iT - panH;
		}
		if(y < iT)
			y = iT;
		if(x + panW > iW + iL)
		{
			
			if((pos & 4) != 0 && x - iL - 3 > panW + elemW)
				x -= panW + elemW;
			else
				x = iW + iL - panW;
		}
		if(x < iL)
			x = iL;
		if(ig_csom.IsMac && (ig_csom.IsIE || ig_csom.IsSafari))
		{
			x += ig_csom.IsIE ? 5 : -5;
			y += ig_csom.IsIE ? 11 : -7;
		}
		ok.left = x + 'px';
		ok.top = y + 'px';
		if(ie && (z = ie.Element) != null)
			ie = z;
		if(!ie || (z = ie.style) == null)
			return;
		z.position = 'absolute';
		z.left = --x + 'px';
		z.top = --y + 'px';
		z.width = (panW + 2) + 'px';
		z.height = (panH + 2) + 'px';
		z.visibility = 'visible';
		z.display = '';
		z.zIndex = zIndex;
	}
	
	this.isName = function(n)
	{
		return n && n.indexOf('=') < 0 && n.indexOf(':') < 0 && n.indexOf('(') < 0 && n.indexOf(';') < 0 && n.indexOf(',') < 0 && n.indexOf('[') < 0 && n.indexOf('{') < 0 && n.indexOf('\"') < 0 && n.indexOf("'") < 0;
	}
	
	this.replace = function(txt, s0, s1)
	{
		while(txt.indexOf(s0) >= 0)
			txt = txt.replace(s0, s1);
		return txt;
	}
	
	
	this.addTabListener = function(fn)
	{
		var i, i1, tabs = this._tabListeners;
		if(!tabs)
			tabs = this._tabListeners = new Array();
		i = i1 = tabs.length;
		while(i-- > 0)
		{
			if(!tabs[i]) i1 = i;
			if(tabs[i] == fn) return;
		}
		tabs[i1] = fn;
	}
	
	this.removeTabListener = function(fn)
	{
		var t, ok = false, tabs = this._tabListeners;
		var i = tabs ? tabs.length : 0;
		while(i-- > 0)if(tabs[i])
		{
			if(tabs[i] == fn) tabs[i] = null;
			else ok = true;
		}
		if(!ok)
			this._tabListeners = null;
	}
	
	this.fireTabChange = function()
	{
		var tabs = this._tabListeners;
		var i = tabs ? tabs.length : 0;
		while(i-- > 0)if(tabs[i])
			try{eval(tabs[i]);}catch(ex){}
	}
}
function ig_delete(o){ig_dispose(o);}

function ig_filterMouseOverEvents(evt){
	var element=ig_shared.getSourceElement(evt);
	if(!element.__isEventReady){
		while(element!=null && !element.__isEventReady && element.tagName!="BODY")element=element.parentNode;
	}
	if(element && element.__isEventReady && (element._hasMouse||!ig_isMouseOverSourceAChild(evt,element))) 
	{
		element._hasMouse=true;
		element.__callBackObject.__onFilteredMouseOver(evt);
	}	
}
function ig_filterMouseOutEvents(evt){
	var element=ig_shared.getSourceElement(evt);
	if(!element.__isEventReady){
		while(element!=null && !element.__isEventReady && element.tagName!="BODY")element=element.parentNode;
	}
	if(element&&element.__isEventReady&&!ig_isMouseOutSourceAChild(evt,element)) 
	{
		element._hasMouse=false;
		element.__callBackObject.__onFilteredMouseOut(evt);
	}	
}

function ig_isMouseOverSourceAChild(evt,element){
	var evnt=evt?evt:window.event;
	if(evnt==null)return false;
	var from=evnt.fromElement&&typeof evnt.fromElement!="undefined"?evnt.fromElement:evnt.relatedTarget;
	if(from==element)return true;
	if(from==null)return false;
	return ig_isAChildOfB(from,element);
}
function ig_isMouseOutSourceAChild(evt,element){
	var evnt=window.event?window.event:evt;
	if(!evnt)return false;
	var to=evnt.toElement&&typeof evnt.toElement!="undefined"?evnt.toElement:evnt.relatedTarget;
	if(to==element)return true;
	if(to==null)return false;
	return ig_isAChildOfB(to,element);	
}
function ig_isAChildOfB(a,b){
	if(a==null||b==null)return false;
	while(a!=null){
		a=a.parentNode;
		if(a==b)return true;
	}
	return false;
}
function ig_getWebControlById(id)
{
	var i,o=null;
	if(!ig_shared.isEmpty(id))if((o=ig_all[id])==null)for(i in ig_all)
	{
		if((o=ig_all[i])!=null)if(o._id==id || o._clientID==id || o._uniqueID==id)
			return o;
		o=null;
	}
	return o;
}
if(typeof ig_all !="object")
	var ig_all=new Object();
// cancel response of browser on event
function ig_cancelEvent(e, type)
{
	if(e == null) if((e = window.event) == null) return;
	if(type && e.type != type) return;
	if(e.stopPropagation != null) e.stopPropagation();
	if(e.preventDefault != null) e.preventDefault();
	e.cancelBubble = true;
	e.returnValue = false;
}
function ig_TransparentPanel(transLayer){
	this.Element=transLayer;
	this.show=function(){
		this.Element.style.visibility="visible";
		this.Element.style.display="";
	}
	this.hide=function(){
		this.Element.style.visibility="hidden";
		this.Element.style.display="none";
	}
	this.setPosition=function(top,left,width,height){
		this.Element.style.top=top;
		this.Element.style.left=left;
		this.Element.style.width=width;
		this.Element.style.height=height;
	}
}
if(typeof ig_shared !="object")
	var ig_shared=new ig_initShared();
var ig_csom=ig_shared,ig=ig_shared;

//Emulate 'apply' if it doesn't exist.
if ((typeof Function != 'undefined')&&
    (typeof Function.prototype != 'undefined')&&
    (typeof Function.apply != 'function')) {
    Function.prototype.apply = function(obj, args){
        var result, fn = 'ig_apply'
        while(typeof obj[fn] != 'undefined') fn += fn;
        obj[fn] = this;
        var length=(((ig_shared.isArray(args))&&(typeof args == 'object'))?args.length:0);
		switch(length){
		case 0:
			result = obj[fn]();
			break;
		default:
			for(var item=0, params=''; item<args.length;item++){
			if(item!=0) params += ',';
			params += 'args[' + item +']';
			}
			result = eval('obj.'+fn+'('+params+');');
			break;
		}
        ig_dispose(obj[fn]);
        return result;
    };
}

function findClosestMatch(startElement,partialId){
	var item;
	var searchString="";
	var i=0;
	while(partialId[i+1]!=null&&partialId[i+1].length>0){
		searchString+="("+partialId[i]+")?";
		i++;
	}
	searchString+=partialId[i]+"$";
	var searchExp=new RegExp(searchString);
	var curElement=startElement.firstChild;
	while(curElement!=null){
		if(curElement.id!=null&&(curElement.id.search(searchExp))!=-1){
			return curElement;
		}
		item=findClosestMatch(curElement,partialId);
		if(item!=null)return item;
		curElement=curElement.nextSibling;		
	}
	return null;
}

function ig_EventObject(){
	this.event=null;
	this.cancel=false;
	this.cancelPostBack=false;
	this.needPostBack=false;
	this.reset=function()
	{
		this.event=null;
		this.needPostBack=false;
		this.cancel=false;
		this.cancelPostBack=false;
		this.needAsyncPostBack=false;
	}
}

function ig_fireEvent(oControl,eventName)
{
	var i, fn = eventName;
	if(!fn || !oControl) return false;
	if(ig_shared.isName(fn))
	{
		fn += "(oControl";
		for(i = 2; i < ig_fireEvent.arguments.length; i++)
			fn += ", ig_fireEvent.arguments[" + i + "]";
		fn += ");";
	}
	try{eval(fn);}
	catch(i){window.status = "Can't eval " + fn; return false;}
	return true;
}

function ig_dispose(obj)
{
	if(ig_shared.IsIE&&ig_shared.IsWin)	
		for(var item in obj)
		{
			var t = typeof obj[item];
			if(obj[item] && t != 'undefined' && !obj[item].tagName && !obj[item].disposing && t != 'boolean' && t != 'number' && t != 'string' && t != 'function')
			{
				try {
					obj[item].disposing=true;
					ig_dispose(obj[item]);
				} catch(e1) {;}
			}
			try{delete obj[item];}catch(e2){;}
		}
}

function ig_initClientState(){
	this.XmlDoc=document;
	this.createRootNode=function(){
		if(!ig_shared.IsIE){
			var str ='<?xml version="1.0"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><ClientState id="vs"></ClientState></html>';
			var p = new DOMParser();
			var doc = p.parseFromString(str,"text/xml");
			this.XmlDoc=doc;
			return doc.getElementById("vs");
		}
		if(ig_shared.IsIE50)this.XmlDoc=ig_createActiveXFromProgIDs(["MSXML2.DOMDocument","Microsoft.XMLDOM"]);//~ AK 5/12/2006 new ActiveXObject("Microsoft.XMLDOM");
		return this.createNode("ClientState");
	}
	this.setPropertyValue=function(element,name,value){
		if(element!=null)element.setAttribute(name,escape(value));
	}
	this.getPropertyValue=function(element,name){
		if(element==null)return "";
		return unescape(element.getAttribute(name));
	}
	this.addNode=function(element,nodeName){
		var newNode=this.createNode(nodeName);
		if(element!=null)element.appendChild(newNode);
		return newNode;
	}
	this.removeNode=function(element,nodeName){
		var nodeToRemove=this.findNode(element,nodeName);
		if(element!=null)
			return element.removeChild(nodeToRemove);
		return null;
	}
	this.createNode=function(nodeName){
		return this.XmlDoc.createElement(nodeName);
	}
	this.findNode=function(element,node){
		if(element==null)return null;
		var curElement=element.firstChild;
		while(curElement!=null){
			if(curElement.nodeName==node || curElement==node){
				return curElement;
			}
			var item=this.findNode(curElement,node);
			if(item!=null)return item;
			curElement=curElement.nextSibling;		
		}
		return null;
	}
	this.getText=function(element){
		if(element==null)return "";
		if(ig_shared.IsIE55Plus)return escape(element.innerHTML);
		return escape(this.XmlToString(element));
	}
	this.XmlToString=function(startElem){
		var str="";
		if(!startElem)return "";
		var curElement=startElem.firstChild;
		while(curElement!=null){
			str+="<"+curElement.tagName+" ";

			for(var i=0; i<curElement.attributes.length;i++)
			{
				var attrib=curElement.attributes[i];
				str+=attrib.nodeName+"=\""+attrib.nodeValue+"\" ";
			}

			str+=">";
			str+=this.XmlToString(curElement);
			str+="</"+curElement.tagName+">";
			curElement=curElement.nextSibling;		
		}
		return str;
	}
}
//
function ig_xmlNode(name)
{
	this.lastChild = null;
	this.name = name;	
	this.getText = function(){return escape(this.toString());}
	this.childNodes = new Array();
	this.toString = function()
	{
		var i, s = (this.name == null) ? "" : "<" + this.name;
		if(this.props != null) for(i = 0; i < this.props.length; i++)
			s += " " + this.props[i].name + "=\"" + this.props[i].value + "\"";
		if(this.name != null) s += ">";
		for(i = 0; i < this.childNodes.length; i++)
			s += this.childNodes[i].toString();
		if(this.name != null) s += "</" + this.name + ">";
		return s;
	}
	this.addNode = function(node, unique)
	{
		if(node == null) return null;
		if(unique == true) if((unique = this.findNode(node)) != null) return unique;		
		if(node.name == null) node = new ig_xmlNode(node);
		node.parentNode = this;
		this.lastChild = node;
		return this.childNodes[this.childNodes.length] = node;
	}
	this.appendChild = this.addNode;
	this.setAttribute = function(name, value)
	{
		if(name == null) return;
		if(this.props == null) this.props = new Array();
		var prop, i = this.props.length;
		value = (value == null) ? "" : value;
		while(i-- > 0)
		{
			prop = this.props[i];
			if(prop.name == name){prop.value = value; return;}
		}
		prop = new Object();
		prop.name = name;
		prop.value = value;
		this.props[this.props.length] = prop;
	}
	this.setPropertyValue = function(name, value){this.setAttribute(name, (value == null) ? value : escape(value));}
	this.findNode = function(node, descendants)
	{
		if(node != null) for(var i = 0; i < this.childNodes.length; i++)
		{
			var n = this.childNodes[i];
			if(n != null)
			{
				if(n.name == node || n == node)
				{
					n.index = i;
					return n;
				}
				if(descendants == true && (n = n.findNode(node)) != null) return n;
			}
		}
		return null;
	}
	this.removeNode=function(n)
	{
		if((n=this.findNode(n))==null)return n;
		var i=-1,j=0,a=new Array(),a0=n.parentNode.childNodes;
		while(++i<a0.length)if(i!=n.index)a[j++]=a0[i];
		n.parentNode.childNodes=a;
		this.lastChild = a.length <= 0 ? null : a[a.length-1] ;
		return n;
	}
	this.getPropertyValue = function(name)
	{
		var i = (this.props == null) ? 0 : this.props.length;
		while(i-- > 0)
			if(this.props[i].name == name)
				return unescape(this.props[i].value);
		return null;
	}
}
function ig_xmlNodeStatic()
{
	this.createRootNode = function(){return new ig_xmlNode("Temp");}
	this.addNode = function(e, n){return (e == null) ? (new ig_xmlNode(n)) : e.addNode(n);}
	this.removeNode = function(e, n){return (e == null) ? e : e.removeNode(n);}
	this.findNode = function(e, n){return (e == null) ? e : e.findNode(n);}
	this.setPropertyValue = function(e, n, v){if(e != null)e.setPropertyValue(n, v);}
	this.getPropertyValue = function(e, n){return (e == null) ? "" : e.getPropertyValue(n);}
	this.getText = function(e)
	{
		var s = "", i = (e == null) ? 0 : e.childNodes.length;
		for(var j = 0; j < i; j++) s += e.childNodes[j].getText();
		return s;
	}
}

try{ig_shared.addEventListener(window, "load", ig_handleEvent);}catch(ex){}
try{ig_shared.addEventListener(window, "unload", ig_handleEvent);}catch(ex){}
try{ig_shared.addEventListener(window, "resize", ig_handleEvent);}catch(ex){}
function ig_findElemWithAttr(elem, attr)
{
	while(elem != null)
	{
		try
		{
			if(elem.getAttribute != null && !ig_shared.isEmpty(elem.getAttribute(attr)))
				return elem;
		}catch(ex){}
		elem = elem.parentNode;
	}
	return null;
}
function ig_handleEvent(evt)
{
	if(evt == null) if((evt = window.event) == null) return;
	var obj, attr = ig_shared.attrID, src = evt.target, type = evt.type;
	if(ig_shared.isEmpty(type)) return;
	var fn = "obj._on" + type.substring(0, 1).toUpperCase() + type.substring(1);
	if(!src)
		src = evt.srcElement;
	if(type == "load" || type == "unload" || type == "resize" || !src)
	{
		for(obj in ig_all)
		{
			if((obj = ig_all[obj]) == null)
				continue;
			eval("if(" + fn + "!=null){" + fn + "(src,evt); obj=null;}");
			if(obj && obj._onHandleEvent)
				obj._onHandleEvent(src, evt);
		}
		if(type == "unload")
		{
			ig_dispose(ig_all);
			for(var id in ig_all) if(ig_all[id])
				ig_all[id].base = null;
		}
		return;
	}
	var elem = ig_findElemWithAttr(src, attr);
	if(elem == null)
		elem = ig_findElemWithAttr(this, attr);
	if(elem != null && (obj = ig_getWebControlById(elem.getAttribute(attr))) != null)
	{
		eval("if(" + fn + "!=null){" + fn + "(src,evt); obj=null;}");
		if(obj != null && obj._onHandleEvent != null)
			obj._onHandleEvent(src, evt);
	}
}
function ig_handleTimer(obj)
{
	var i, all = ig_shared._timers, fn = ig_shared._timerFn;
	if(obj)
	{
		if(!obj._onTimer) return;
		if(!all) ig_shared._timers = all = new Array();
		i = all.length;
		while(i-- > 0) if(all[i] == obj) break;
		if(i < 0) all[all.length] = obj;
		if(!fn) ig_shared._timerFn = fn = window.setInterval(ig_handleTimer, 200);
		return;
	}
	if(!fn) return;
	for(i = 0; i < all.length; i++) if(all[i] && all[i]._onTimer) if(!all[i]._onTimer())
		obj = true;
	if(obj) return;
	window.clearInterval(fn);
	delete ig_shared._timerFn;
}

var ig_ClientState=null;
if(!ig_shared.IsIE55Plus||!ig_shared.IsWin) ig_ClientState = new ig_xmlNodeStatic();
else ig_ClientState=new ig_initClientState();

var _asyncSmartCallbacks = new Array();
var _inCallback = false;
        
function ig_SmartCallback(clientContext, serverContext, callbackFunction, uniqueId, control, waitResponse)
{
    var _callbackFunction;
    var _url = null;
    var _postdata = "";
    var _async = true;
    this._registeredControls = new Array();
    this._control = control;
    this._waitResponse=(waitResponse===true);
    this._progressIndicator = null;
    
    this._registeredControls[0] = {clientContext:clientContext, serverContext:serverContext, callbackFunction:callbackFunction, uniqueId:uniqueId, control:control};
    
	if(typeof XMLHttpRequest != "undefined") {
	   __xmlHttpRequest = new XMLHttpRequest();
	}
	else if(typeof ActiveXObject != "undefined")
	{
	   try{
		    __xmlHttpRequest = ig_createActiveXFromProgIDs(["MSXML2.XMLHTTP","Microsoft.XMLHTTP"]);//~ AK 5/12/2006 new ActiveXObject("Microsoft.XMLHTTP");
	   }
	   catch(e)
	   {
	   }
	}
	
	this.registerControl = function(clientContext, serverContext, callbackFunction, uniqueId, control)
	{
		this._registeredControls.push({clientContext:clientContext, serverContext:serverContext, callbackFunction:callbackFunction, uniqueId:uniqueId, control:control});
	}

	this._xmlHttpRequest = __xmlHttpRequest;
	    
    this.execute = function () 
    {
		var exec = true;
		if(this.beforeCallback != null)
				exec = this.beforeCallback();
		if(exec)try
		{
			if(this._progressIndicator != null)
				this._progressIndicator.display();
			this.formatCallbackArguments();
		    this.registerSmartCallback();
		    this._xmlHttpRequest.open("POST", this.getUrl(), !this._waitResponse);
		    this._xmlHttpRequest.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		    this._xmlHttpRequest.onreadystatechange = this._responseComplete;
		    this._xmlHttpRequest.send(this.getCallbackArguments());
		 }catch(exec){}
    }
   
    this.getCallbackArguments = function () {
        return this._callbackArguments;
    }
    this.setCallbackArguments = function (callbackArguments) {
        this._callbackArguments = callbackArguments;
    }

    this.getUrl = function () {
        if(this._url == null) {
            return this.getForm().action;
        }
        return this._url;
    }

    this.setUrl = function (url) {
        this._url = url;
    }

    this.getForm = function () 
    {
        var form;
        
        if(document.forms.length > 1)
        {
			for(var i = 0; i < document.forms.length; i++)
			{
				if(document.forms[i].method == "post" && document.forms[i].action != "")
				{
					form = document.forms[i];
					break;
				}
			}   
			if(form == null)
				 form = document.forms[0]; 
        }
		else
			form = document.forms[0];
        if (!form) 
            form = document.form1;
        return form;
    }
    
    this.setProgressIndicator = function(value)
    {
		this._progressIndicator = value; 
    }
    
    this._responseComplete = function () 
    {
		var proccessComplete = null;
        for (var i = 0; i < _asyncSmartCallbacks.length; i++) {
            smartCallback = _asyncSmartCallbacks[i];
            if (smartCallback && smartCallback._xmlHttpRequest && (smartCallback._xmlHttpRequest.readyState == 4)) 
            {
				//if(smartCallback && smartCallback._xmlHttpRequest.status == "500")
				//	alert(smartCallback && smartCallback._xmlHttpRequest.responseText);
				_asyncSmartCallbacks[i] = null;
                smartCallback.processSmartCallback();
                proccessComplete = smartCallback;
            }
        }
        if(proccessComplete != null)
        {
            if(proccessComplete.callbackFinished != null)
				proccessComplete.callbackFinished();
			proccessComplete._control = null;
			proccessComplete._registeredControls = null;
			proccessComplete._progressIndicator = null; 
			ig_dispose(proccessComplete);
			proccessComplete = null;
        }
    }

    this.processSmartCallback = function () {
       var responseString = this._xmlHttpRequest.responseText;
       var startIndex = responseString.indexOf("_ig_start");
       var endIndex = responseString.indexOf("_ig_end");
       var length = endIndex;
       if(startIndex > -1 && endIndex > -1) {
            responseString = responseString.substring(startIndex + 9, length); 
            var response = eval(responseString);
            var index;
            for(index = 0; index < response.length; index++) 
            {
                controlResponse = response[index];
                var header = controlResponse[0];
                var payload = controlResponse[1].replace(/\ig_NL/g, "\n");
			
                for(var i = 0; i < this._registeredControls.length; i++)
                {
					if(this._registeredControls[i] != null && header == this._registeredControls[i].uniqueId)
					{
						if(payload.length > 0)
						{
							if(this._registeredControls[i].clientContext.requestType != null && this._registeredControls[i].clientContext.requestType == "styles")
								this._resolveStyles(payload);
							else if(this._registeredControls[i].callbackFunction != null)
								this._registeredControls[i].callbackFunction(payload, this._registeredControls[i].clientContext);
							else if(this._registeredControls[i].control.callbackRender != null)
								this._registeredControls[i].control.callbackRender(payload, this._registeredControls[i].clientContext);
						}
						this._registeredControls[i] = null;
						break;
					}
                }
            }
       }
       if(this._progressIndicator != null)
		this._progressIndicator.hide();
    }
    
    this._resolveStyles = function(response)
    {
		var json = eval(response.replace(/\^/g, "\""));
		var key = json[0];
		var styleBlock = eval(json[1]);
		if(styleBlock != null && styleBlock.length > 0)
		{
			var styles = document.getElementsByTagName("style");	
			for(var i = 0; i < styles.length; i++)
			{
				var rules;
				
				if(ig_shared.IsIE)
					rules = styles[i].styleSheet.rules
				else
					rules = styles[i].sheet.cssRules
					
				for(var j  = 0; j < rules.length; j++)
				{
					
					var text = null;
					try{text = rules[j].selectorText;}catch(e){}
					if(text && text.indexOf && text.indexOf(key) > -1)
					{
						try
					    {
						    if(ig_shared.IsIE)
							    styles[i].styleSheet.removeRule(0);
						    else
							    styles[i].sheet.deleteRule(0);
						}catch(e){};
					}	
				}
				for(var j = 0; j < styleBlock.length; j++)
				{
					if(styleBlock[j] != null)
					{
						if(ig_shared.IsIE)
							styles[i].styleSheet.addRule(styleBlock[j][0], styleBlock[j][1], 0);
						else
							styles[i].sheet.insertRule(styleBlock[j][0] + "{" +  styleBlock[j][1] + "}", 0);
					}
				}
			}
		}
		return;	
    }
    
    this.registerSmartCallback = function () {
        var index;
        for(index = 0; index < _asyncSmartCallbacks.length; index++)
            if(!_asyncSmartCallbacks[index])
                break;
        _asyncSmartCallbacks[index] = this;
        return index;
    }
    
    this.formatCallbackArguments = function () {
        
        
        
        
        if(typeof __igSubmit == 'function')
				__igSubmit();
        var form = this.getForm();
        if(!form) return;
        var count = form.elements.length;
        var element;
        for (var i = 0; i < count; i++) {
            element = form.elements[i];
            if (element.tagName.toLowerCase() == "input" && (element.type == "hidden" || element.type == 'password' || element.type == 'text' || ((element.type == "checkbox"|| element.type =='radio')&& element.checked))) 
               this.addCallbackField(element.name, element.value);
            else if(element.tagName.toLowerCase() == "textarea")
				this.addCallbackField(element.name, element.value);
			else if(element.tagName.toLowerCase() == "select")
			{
				var o = element.options.length;
				while(o-- > 0)
				{
					if(element.options[o].selected)
						this.addCallbackField(element.name, element.options[o].value);
				}
			}
            
        }   
         
        var args =  _postdata + "__EVENTTARGET=&__EVENTARGUMENT=&" + 
                            "__CALLBACKID=" + 
                           this._registeredControls[0].uniqueId +
                            //this.getServerId() +
                            "&__CALLBACKPARAM=";
        var xml = '&lt;SmartCallback&gt;';
        if(this._registeredControls!= null) {
			for(var i = 0; i < this._registeredControls.length; i++)
			{
				xml += "&lt;Control";
				var control = this._registeredControls[i];
				
				xml += " id='" + control.uniqueId + "'";
				for(property in control.serverContext)
				{
					if(control.serverContext[property] != null) {
						var value = control.serverContext[property].toString();
						while(value.indexOf("'") != -1) {
							value = value.replace("'", "^^");
						}
						
						
						xml += " " + property + "='" + escape(escape(value)) + "'";
					}
				}
				xml += "/&gt;"
			}
        }
        xml += "&lt;/SmartCallback&gt;";
        xml = escape(xml); 
        args += xml; 
        this.setCallbackArguments(args);
    }
    
    this.addCallbackField = function(name, value) {
        _postdata += name + "=" + this.encodeValue(value) + "&";
    }
    
    this.isAsynchronous = function () {
            return _async;
    }
    this.setAsynchronous = function (async) {
        _async = async;
    }
   
    this.encodeValue = function(uri) {
        if(encodeURIComponent != null) 
            return encodeURIComponent(uri);
        else
            return escape(parameter);
    }
}

ig_createCallback = function(method, context ) {
	
	return function() {
		method.apply(context, [null]);
	}
}

var ViewportOrientationEnum = new function() {
   this.Horizontal = 0;
   this.Vertical  = 1;
} 

var AnimationDirectionEnum = new function() {
   this.Up  = 1;
   this.Down  = 2; 
   this.Left = 3;
   this.Right = 4;
} 

var AnimationRateEnum = new function() {
   this.Static = 0;
   this.Accelerate  = 1;
   this.Decelerate  = 2; 
   this.AccelDecel = 3;
   this.Linear = 4;
}  

ig_viewport = function() {
	
	this.createViewport  = function(elem, orientation) {
		if(this.elem) 
			return;

		this.elem = elem;
		this.orientation = orientation;
		
		this.div = document.createElement("div");
		this.div.style.position = "relative";
		this.table = document.createElement("table");		
		var tr = document.createElement("tr");
		var tbody = document.createElement("tbody");
		this.td1 = document.createElement("td");		
		this.td2 = document.createElement("td");
		this.div.style.overflow = "hidden";
		this.div.style.width = elem.offsetWidth + "px"; 
		this.div.style.height = elem.offsetHeight + "px"; 
		this.table.cellSpacing = "0px"; 
		this.table.cellPadding = "0px";
		this.div.appendChild(this.table);								
		this.table.appendChild(tbody);
		tbody.appendChild(tr);
		tr.appendChild(this.td1);
		
		this.td1.style.verticalAlign = "top";
		this.td2.style.verticalAlign = "top";
		
		
		this.table.style.height = "100%";
		this.td1.style.height = "100%";
		this.td2.style.height = "100%";
		
		if(this.orientation == ViewportOrientationEnum.Horizontal) {
			tr.appendChild(this.td2);
		}
		else {
			tr = document.createElement("tr");
			tbody.appendChild(tr);
			tr.appendChild(this.td2);
		}
		elem.parentNode.insertBefore(this.div, elem);
		this.td1.appendChild(elem);

		this.animate = new ig_SlideAnimation();
	}
	this.transferPositionToDiv = function(elem, oldElem)
	{
		if(elem.style.position != "" && elem.style.position != "static")
		{
			this.div.style.position = elem.style.position;
			elem.style.position = "static";
			if(oldElem)
			    oldElem.style.position = "static";
		}
		this.div.style.top = elem.style.top;
		this.div.style.left = elem.style.left;
		elem.style.top = "";
		elem.style.left = "";
		if(oldElem) {
		    oldElem.style.top = "";
		    oldElem.style.left = "";
		}
	}
	this.scroll = function(eCurrent, eNew, direction, rate) {
		this.direction = direction;
		this.animate.setElement(this.table);
		this.animate.setContainer(this.div);
		this.animate.setDirection(direction);
		this.animate.setRate(rate);

		switch (this.direction) {
			case AnimationDirectionEnum.Down :
			case AnimationDirectionEnum.Right :
				if(this.td1.firstChild != null)
					this.td1.removeChild(this.td1.firstChild);
				this.td1.appendChild(eCurrent);
				if(this.td2.firstChild != null)
					this.td2.removeChild(this.td2.firstChild);
				this.td2.appendChild(eNew);
				this.animate.startPos = 0;
				this.animate.finishPos = this.td1.offsetWidth;
				break;
	
			case AnimationDirectionEnum.Up :
			case AnimationDirectionEnum.Left :
				if(this.td1.firstChild != null)
					this.td1.removeChild(this.td1.firstChild);
				this.td1.appendChild(eNew);
				if(this.td2.firstChild != null)
					this.td2.removeChild(this.td2.firstChild);
				this.td2.appendChild(eCurrent);
				this.div.scrollLeft = this.td1.offsetWidth;
				this.animate.startPos = this.div.scrollLeft;
				this.animate.finishPos = 0;
				break;
		}
		
		this.animate.play();		
	}
}


ig_WebAnimation = function() {
    
    this.timerInterval = 30;
    this.startPos = 0;
	var _inProgress;
	this.eContainer = null;
	this.duration = null; 
	this.cancel = false;
}   
 
ig_WebAnimation.prototype.getElement = function() {
        return this.element;
}
ig_WebAnimation.prototype.setElement = function(value) {
	this.element = value;
}
 ig_WebAnimation.prototype.getTimerInterval = function() {
	return timerInterval;
}
ig_WebAnimation.prototype.setTimerInterval = function(value) {
	timerInterval = value;
}
ig_WebAnimation.prototype.isInProgress = function() {
	return _inProgress;
}

ig_WebAnimation.prototype.cancelAnimation = function() {
    clearTimeout(this.timerId);
	this.cancel = true;
}

ig_WebAnimation.prototype.setContainer = function(container) {
	this.eContainer = container;
}
ig_WebAnimation.prototype.getContainer = function() {
	return this.eContainer;
}

ig_WebAnimation.prototype.onBegin = function() {
}
ig_WebAnimation.prototype.onNext = function() {
}
ig_WebAnimation.prototype.onEnd = function() {
}

ig_WebAnimation.prototype.play = function() {
	this.currentPos = this.startPos;
	this.cancel = false;
	this.begin();
	if(!this.cancel)
		this.timerId = setInterval(ig_createCallback(this.tickHandler, this, null), this.timerInterval);
}

ig_WebAnimation.prototype.tickHandler = function() {
   if(this.cancel || !this.next())
   {
      clearTimeout(this.timerId);
	  this.end();
   }
}
ig_WebAnimation.prototype.getDuration = function() {
	return this.duration; 
}
ig_WebAnimation.prototype.setDuration = function(value) {
	this.duration = value; 
}

ig_WebAnimation.prototype.calcDurationIncrement = function()
{
	return this.distance /(this.duration / this.timerInterval);
}

ig_WebAnimation.prototype.ensureContainer = function(e) {
	var parent = e.parentNode;
	if(parent.getAttribute("container") == '1')
		return;
	if(e.getAttribute("container") == '1')
		return;
	var eDiv = window.document.createElement("DIV");
	eDiv.setAttribute("container", '1');
	eDiv.cssText = 'overflow:hidden; position:absolute;z-index:12000;';

	parent.insertBefore(eDiv, e);
	parent.removeChild(e);
	eDiv.appendChild(e);

}

ig_WebAnimation.prototype.removeContainer = function() {
	var container = this._element;
	var child = container.firstChild;
	if(container.getAttribute("container") != '1'){
		container = container.parentNode;
		if(container.getAttribute("container") != '1')
			return;
	}
	var parent = container.parentNode;
	container.removeChild(child);
	parent.removeChild(container);
	delete container;
	parent.appendChild(child);

}

ig_SlideAnimation.prototype = new ig_WebAnimation();


function ig_SlideAnimation(direction, rate)
{
	this.init(direction, rate);
	return this;
}

ig_SlideAnimation.prototype.init = function(direction, rate) {
	if(direction)
		this.direction = direction;
	else
		this.direction = AnimationDirectionEnum.Right;
	if(rate)
		this.rate = rate;
	else	
		this.rate = AnimationRateEnum.Linear;
}

ig_SlideAnimation.prototype.getDirection = function() {
	return this.direction;
}
ig_SlideAnimation.prototype.setDirection = function(value) {
	this.direction = value;
}
ig_SlideAnimation.prototype.getRate = function() {
	return this.rate;
}
ig_SlideAnimation.prototype.setRate = function(value) {
	this.rate = value;
}

ig_SlideAnimation.prototype.begin = function() {
	switch (this.direction) {
		case AnimationDirectionEnum.Up :
		case AnimationDirectionEnum.Down :
			this.distance = Math.abs(this.finishPos - this.startPos);
			break;
		case AnimationDirectionEnum.Right :
		case AnimationDirectionEnum.Left :
			this.distance = Math.abs(this.finishPos - this.startPos);
			break;
	}
	switch(this.rate) {
		case AnimationRateEnum.Accelerate :
			this.increment = 1;
			break;
		case AnimationRateEnum.Decelerate :
			this.increment = .5 * Math.abs(this.distance);;
			break;
		case AnimationRateEnum.AccelDecel :
			this.midPoint = this.distance / 2;
			this.accel = true;
			this.increment = 1;
			break;
		case AnimationRateEnum.Linear :
			
			if(this.duration != null)
				this.increment = this.calcDurationIncrement();
			else
			{
				if(this.increment == null)
					this.increment = 30; 
				this._originalIncrement = this.increment; 
				this.increment = 1; 
				var totalCount = 0; 
				var temp = 1; 
				var distance = this.distance; 
				while(temp * 2 < this._originalIncrement)
				{
					temp *=2; 
					distance -= temp*2; 
					totalCount++;
				}
				this._acelCount = totalCount; 
				temp = this._originalIncrement; 
				totalCount *= 2; 
				totalCount += parseInt(distance / this._originalIncrement); 
				this._decelCount = totalCount - this._acelCount; 
				this._currentCount = 1; 
			}
				
			break;
	}
	this.onBegin();
}

ig_SlideAnimation.prototype.next = function() {
	switch (this.direction) {
		case AnimationDirectionEnum.Down :
		case AnimationDirectionEnum.Right :
			this.currentPos += this.increment;
			if(this.currentPos > this.finishPos)
				return false;
			if(this.direction == AnimationDirectionEnum.Right)
				this.getContainer().scrollLeft = this.currentPos;
			else
				this.getContainer().scrollTop = this.currentPos;
			break;
		case AnimationDirectionEnum.Up :
		case AnimationDirectionEnum.Left :
			this.currentPos -= this.increment;
			if(this.currentPos < this.finishPos)
				return false;
			if(this.direction == AnimationDirectionEnum.Left)
				this.getContainer().scrollLeft = this.currentPos;
			else
				this.getContainer().scrollTop = this.currentPos;
			break;
	}
	
	switch(this.rate) {
		case AnimationRateEnum.Accelerate :
			this.increment *= 2;
			break;
		case AnimationRateEnum.Decelerate :
			this.increment = Math.max(2, this.increment / 2);
			break;
		case AnimationRateEnum.AccelDecel :
			if(this.accel) {
				if(this.direction == AnimationDirectionEnum.Right || this.direction == AnimationDirectionEnum.Down) {
					if(this.currentPos + this.increment >= this.midPoint) {
						this.accel = false;
						this.increment = this.midPoint / 2;
					}
					else
						this.increment *= 2;
				}
				else {
					if(this.currentPos - this.increment <= this.midPoint) {
						this.accel = false;
						this.increment = this.midPoint / 2;
					}
					else
						this.increment *= 2;
				}
			}
			else {
				this.increment = Math.max(2, this.increment / 2);
			}
			break;			
		case AnimationRateEnum.Linear :
		
			if(this.duration == null)
			{
				if(this._currentCount <= this._acelCount)
					this.increment *=2; 
				else if(this._currentCount > this._decelCount)
				{
					this.increment = Math.pow(2,this._acelCount);
					if(this._acelCount > 3)
						this._acelCount--; 
				}
				else
					this.increment = this._originalIncrement; 
				
				this._currentCount++; 
			}
		
		break;
	}
	
	this.onNext();
	return true;
}

ig_SlideAnimation.prototype.end = function() {
	this.getContainer().scrollLeft = this.finishPos;
	if(this.rate == AnimationRateEnum.Linear && this.duration == null)
	{
		this._currentCount = 0; 
		this.increment = this._originalIncrement; 
	}
	this.onEnd();
}

ig_SlideRevealAnimation.prototype = new ig_SlideAnimation();


function ig_SlideRevealAnimation(direction, rate)
{
	this.init(direction, rate);
	return this;
}

ig_SlideRevealAnimation.prototype.begin = function() {
	this.eContainer.style.overflow = "hidden";
	this.element.style.position = "relative";
	
	this.distance = Math.abs(this.finishPos - this.startPos);
	this.currentPos = this.startPos; 

	switch (this.direction) {
		case AnimationDirectionEnum.Up :
			this.element.style.top  = this.currentPos.toString();
			break;
		case AnimationDirectionEnum.Down :
			this.element.style.display = "";
			this.element.style.top  = this.currentPos.toString();
			break;
		case AnimationDirectionEnum.Right :
			this.element.style.display = "";
			this.element.style.left = this.currentPos.toString();
			break;
		case AnimationDirectionEnum.Left :
			this.element.style.left = this.currentPos.toString();
			break;
	}
	switch(this.rate) {
		case AnimationRateEnum.Accelerate :
			this.increment = 1;
			break;
		case AnimationRateEnum.Decelerate :
			this.increment = .5 * Math.abs(this.distance);;
			break;
		case AnimationRateEnum.AccelDecel :
			this.midPoint = this.distance / 2;
			this.accel = true;
			this.increment = 1;
			break;
		case AnimationRateEnum.Linear :
			if(!this.increment)
				this.increment = 20;
			break;
	}
	this.onBegin();
}

ig_SlideRevealAnimation.prototype.next = function() {
	switch (this.direction) {
		case AnimationDirectionEnum.Down :
		case AnimationDirectionEnum.Right :
			this.currentPos += this.increment;
			if(this.currentPos > this.finishPos)
				return false;
			if(this.direction == AnimationDirectionEnum.Right)
				this.element.style.left = this.currentPos.toString();
			else
				this.element.style.top = this.currentPos.toString();
			break;
		case AnimationDirectionEnum.Up :
		case AnimationDirectionEnum.Left :
			this.currentPos -= this.increment;
			if(this.currentPos < this.finishPos)
				return false;
			if(this.direction == AnimationDirectionEnum.Left)
				this.element.style.left = this.currentPos.toString();
			else
				this.element.style.top = this.currentPos.toString();
			break;
	}
	switch(this.rate) {
		case AnimationRateEnum.Accelerate :
			this.increment *= 2;
			break;
		case AnimationRateEnum.Decelerate :
			this.increment = Math.max(2, this.increment / 2);
			break;
		case AnimationRateEnum.AccelDecel :
			if(this.accel) {
				if(this.direction == AnimationDirectionEnum.Right || this.direction == AnimationDirectionEnum.Down) {
					if(this.currentPos + this.increment >= this.midPoint) {
						this.accel = false;
						this.increment = this.midPoint / 2;
					}
					else
						this.increment *= 2;
				}
				else {
					if(this.currentPos - this.increment <= this.midPoint) {
						this.accel = false;
						this.increment = this.midPoint / 2;
					}
					else
						this.increment *= 2;
				}
			}
			else {
				this.increment = Math.max(2, this.increment / 2);
			}
			break;		
	
	}
	this.onNext();
	return true;
}

ig_SlideRevealAnimation.prototype.end = function() {
	if(this.cancel)
		return;
	if(this.direction == AnimationDirectionEnum.Left ||this.direction == AnimationDirectionEnum.Right)
		this.element.style.left = this.finishPos;
	else
		this.element.style.top = this.finishPos;
	this.onEnd();
}

// Reveal Animation 
ig_RevealAnimation.prototype = new ig_WebAnimation();
function ig_RevealAnimation(direction, rate)
{
	this.init(direction, rate);
	return this;
}

ig_RevealAnimation.prototype.init = function(direction, rate) {
	if(direction)
		this.direction = direction;
	else
		this.direction = AnimationDirectionEnum.Right;
	if(rate)
		this.rate = rate;
	else	
		this.rate = AnimationRateEnum.Linear;
}

ig_RevealAnimation.prototype.getDirection = function() {
	return this.direction;
}
ig_RevealAnimation.prototype.setDirection = function(value) {
	this.direction = value;
}
ig_RevealAnimation.prototype.getRate = function() {
	return this.rate;
}
ig_RevealAnimation.prototype.setRate = function(value) {
	this.rate = value;
}

ig_RevealAnimation.prototype.begin = function() {
    this.element.style.overflow = "hidden";
	this.distance = Math.abs(this.finishPos - this.startPos);
	switch (this.direction) {
		case AnimationDirectionEnum.Up :
			if(!this.startPos)
				this.startPos = this.element.scrollHeight;
			break;
		case AnimationDirectionEnum.Down :
			if(!this.startPos)
				this.startPos = 1;
			break;
	}
	switch(this.rate) {
		case AnimationRateEnum.Accelerate :
			this.increment = 1;
			break;
		case AnimationRateEnum.Decelerate :
			this.increment = .5 * Math.abs(this.distance);;
			break;
		case AnimationRateEnum.AccelDecel :
			this.midPoint = this.distance / 2;
			this.accel = true;
			this.increment = 1;
			break;
		case AnimationRateEnum.Linear :
			if(!this.increment)
				this.increment = 20;
			break;
	}
	this.onBegin();
	this.currentPos = this.startPos;
}

ig_RevealAnimation.prototype.next = function() {
	switch (this.direction) {
		case AnimationDirectionEnum.Down :
			this.currentPos += this.increment;
			if(this.currentPos > this.finishPos)
				return false;
			break;
		case AnimationDirectionEnum.Up :
			this.currentPos -= this.increment;
			if(this.currentPos < this.finishPos)
				return false;
			break;
	}
	this.element.style.height = this.currentPos;
	switch(this.rate) {
		case AnimationRateEnum.Accelerate :
			this.increment *= 2;
			break;
		case AnimationRateEnum.Decelerate :
			this.increment = Math.max(2, this.increment / 2);
			break;
		case AnimationRateEnum.AccelDecel :
			if(this.accel) {
				if(this.direction == AnimationDirectionEnum.Right || this.direction == AnimationDirectionEnum.Down) {
					if(this.currentPos + this.increment >= this.midPoint) {
						this.accel = false;
						this.increment = this.midPoint / 2;
					}
					else
						this.increment *= 2;
				}
				else {
					if(this.currentPos - this.increment <= this.midPoint) {
						this.accel = false;
						this.increment = this.midPoint / 2;
					}
					else
						this.increment *= 2;
				}
			}
			else {
				this.increment = Math.max(2, this.increment / 2);
			}
			break;		
	
	}
	this.onNext();
	return true;
}

ig_RevealAnimation.prototype.end = function() {
	switch (this.direction) {
		case AnimationDirectionEnum.Down :
			this.element.style.height = "";
			break;
		case AnimationDirectionEnum.Up :
			this.element.style.display = "none";
			break;
	}
    this.element.style.overflow = "";
	this.element.style.width = "";
	this.onEnd();
}

var ig_Location = {TopLeft:0, TopCenter:1, TopRight:2, TopInfront:3, TopBehind:4,
	MiddleLeft:8, MiddleCenter:9, MiddleRight:10, MiddleInfront:11, MiddleBehind:12,
	BottomLeft:16, BottomCenter:17, BottomRight:18, BottomInfront:19, BottomBehind:20,
	AboveLeft:32, AboveCenter:33, AboveRight:34, AboveInfront:35, AboveBehind:36,
	BelowLeft:64, BelowCenter:65, BelowRight:66, BelowInfront:67, BelowBehind:68};

function ig_progressIndicator(imageUrl, relativeContainer)
{
	this._img = imageUrl;
	this._rc = relativeContainer;
	this.setImageUrl = function(url)
	{
		
		if(this._elem)
			this._elem.parentNode.removeChild(this._elem);
		this._elem = null;
		this._img = url;
	}
	this.getImageUrl = function()
	{
		return this._img; 
	}
	this.setTemplate = function(html)
	{
		var elem = this._elem;
		this._html = html;
		if(elem)
		{
			if(elem.tagName == 'DIV' && html)
			{
				elem.innerHTML = html;
				return;
			}
			elem.parentNode.removeChild(elem);
			this._elem = null;
		}
	}
	this.getTemplate = function()
	{
		return this._html; 
	}
	this.setLocation = function(location)
	{
		this._location = location;
	}
	this.setCssStyle = function(css)
	{
		this._css = css;
	}
	this.setRelativeContainer = function(elem)
	{
		this._rc = elem;
	}
	this.display = function(rc, loc)
	{
		this.visible = true;
		var elem = this._elem;
		if(!rc)
			rc = this._rc;
		if(!elem)
		{
			var body = document.body, append = !ig_shared.IsIE || document.readyState == 'complete';
			if(this._html)
			{
				elem = document.createElement('DIV');
				if(append)
					body.appendChild(elem);
				else
				
					body.insertBefore(elem,body.firstChild);
				elem.innerHTML = this._html;
			}
			else
			{
				elem = document.createElement('IMG');
				if(append)
					body.appendChild(elem);
				else
				
					body.insertBefore(elem,body.firstChild);
				var img = this._img;
				if(!img)
					img = (typeof ig_pi_imageUrl == 'string') ? ig_pi_imageUrl : '/ig_common/images/ig_progressIndicator.gif';
				elem.src = img;
			}
			elem.unselectable = 'on';
			this._elem = elem;
		}
		if(this._css)
			elem.className = this._css;
		if(loc == null)
			if((loc = this._location) == null)
				loc = ig_Location.BottomRight;
		ig_shared.absPosition(rc, elem, loc);
	}
	this.hide = function()
	{
		this.visible = false;
		if(this._elem)
			this._elem.style.display = 'none';
	}
}

function ig_callBackManager(form)
{
	if(!form) if((form = ig_shared.getForm()) == null)
		return;
	this._onUnload = function()
	{
		var f = this._form;
		if(!f)
			return;
		this._form = this._submit = this._style = null;
		ig_shared.removeEventListener(f, 'submit', this._onFormSubmit);
		ig_shared.removeEventListener(f, 'click', this._onFormEvt);
		ig_shared.removeEventListener(f, 'mousedown', this._onFormEvt);
		ig_shared.removeEventListener(f, 'mouseup', this._onFormEvt);
		if(f._ig_cb_submit)
		{
			f.submit = f._ig_cb_submit;
			f._ig_cb_submit = null;
		}
		if(this._onsubmit)
			f.onsubmit = this._onsubmit;
	}
	
	
	
	
	
	
	
	
	
	this.addPanel = function(control, id, elemID, rc, link, ids, post, noResp)
	{
		if(!this._form || !control)
			return;
		var i = -1;
		while(++i < this._panels.length)
			if(this._panels[i].elemID == elemID)
				break;
		this._panels[i] = {control:control, id:id, elemID:elemID, rc:rc, link:link, ids:ids, post:post, noResp:noResp};
	}
	
	
	
	
	
	
	
	this.addCallBack = function(control, id, rc, flag)
	{
		var e, ee, j, form = this._form;
		if(!control || !form)
			return;
		if(!this._ok)
		{
			form.submit();
			return;
		}
		if(!id)
		{
			id = control.id;
			rc = control.rc;
			control = control.control;
		}
		var i = null, args = this._submitElem;
		if(args)
		{
			args += '&';
			this._submitElem = null;
		}
		else args = '';
		if(this._wait)
			return true;
		if(this._jsSrcs.length > 0)
		{
			if(flag == -1)
				return true;
			this._killJsSrc();
		}
		var id1 = this._elemID, id2 = this._evtElem;
		if(id2)
			id2 = id2.id;
		var triggers = [id2,this._subID,id1];
		if(!id1)
			id1 = id2;
		
		if(control.beforeCBSubmit)
			i = control.beforeCBSubmit(id1);
		var lsnrs = ig_shared._cbListeners;
		var elem, count = lsnrs ? lsnrs.length : 0;
		
		while(count-- > 0)
		{
			var fn = lsnrs[count];
			if(fn) if((fn = fn.evalCtl) != null)try
			{
				if(typeof fn == 'function')
					fn = fn(id1);
				else if(fn)
					fn = eval(fn).onCBSubmit(id1);
				if(!i)
					i = fn;
			}catch(e){}
		}
		if(i == 'fullPostBack')
		{
			form.submit();
			return;
		}
		if(i == 'cancelSubmit' || i === true)
			return;
		var resp = (i != 'cancelResponse'), request = null;
		try
		{
			if(this._ie)
				request = ig_createActiveXFromProgIDs(["MSXML2.XMLHTTP","Microsoft.XMLHTTP"]);
			else
				request = new XMLHttpRequest();
		}catch(e){}
		if(!request)
			return;
		if(resp)
		{
			id1 = this.__id(id1);
			id2 = this.__id(id2);
			ee = this._panels;
			i = ee.length;
			while(i-- > 0 && resp)
			{
				e = ee[i].noResp;
				j = e ? e.length : e;
				while(j-- > 0) if(e[j] == id1 || e[j] == id2)
					resp = false;
			}
		}
		this._wait = true;
		
		var tags = ['INPUT', 'TEXTAREA', 'SELECT'], evs = ['__EVENTTARGET', '__EVENTARGUMENT'];
		
		
		
		
		var vs = control.getCBSubmitElems ? control.getCBSubmitElems(flag) : null;
		var elems = vs ? vs : form.elements;
		var count = j = elems.length;
		if(vs)
		{
			elems = new Array();
			count = 0;
			while(j-- > 0)
			{
				e = vs[j];
				for(var t = 0; t < 3; t++) try
				{
					if(e.tagName == tags[0])
					{
						elems[count++] = e;
						break;
					}
					ee = e.getElementsByTagName(tags[t]);
					for(i = 0; i < ee.length; i++)
						elems[count++] = ee[i];
				}catch(ex){}
			}
			vs = this._vs;
			for(i = 0; i < vs.length; i += 2)
				elems[count++] = form[vs[i]];
		}
		while(count-- > 0)
		{
			if((elem = elems[count]) == null)
				continue;
			var val = null, name = elem.name;
			var tag = ig_csom.isEmpty(name) ? null : elem.tagName;
			i = 2;
			if(tag == tags[0])
			{
				var type = elem.type;
				if(type == 'text' || type == 'password' || type == 'hidden' || ((type == 'checkbox' || type == 'radio') && elem.checked))
					val = elem.value;
			}
			else if(tag == tags[1])
				val = elem.value;
			else if(tag == tags[2])
			{
				var o = elem.options;
				i = o ? o.length : 0;
				while(i-- > 0) if(o[i].selected)
					args += name + '=' + this._encode(o[i].value) + '&';
			}
			if(val != null)
			{
				args += name + '=' + this._encode(val) + '&';
				while(i-- > 0) if(name == evs[i])
				{
					elem.value = '';
					evs[i] = null;
				}
			}
		}
		i = 2;
		while(i-- > 0) if(evs[i])
			args += evs[i] + '=&';
		var postKey = '_' + Math.random(), cb = -1;
		while(++cb < this._callBacks.length)
			if(!this._callBacks[cb])
				break;
		args += '__IG_CALLBACK=' + this._encode(id + '#' + postKey);
		try
		{
			request.open('POST', form.action, true);
			try
			{
				if(this._ie || request.setRequestHeader)
					request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			}catch(e){}
			if(resp)
			{
				if(!(i = this._ie)) try
				{
					i = !request.addEventListener;
				}
				catch(e)
				{
					i = true;
				}
				if(i)
					request.onreadystatechange = this._responseEvt;
				else
					request.addEventListener('load', this._responseEvt, false);
			}
			request.send(args);
			ig_shared._isPosted = false;
			if(resp)
			{
				window.setTimeout("try{ig_all._ig_cbManager._timeOut('" + postKey + "');}catch(i){}", this._timeLimit + 1000);
				cb = this._callBacks[cb] = {request:request, id:id, postKey:postKey, control:control, timer:control._timer, time:(new Date()).getTime(), triggers:triggers};
				if(rc !== false)
				{
					cb.pis = new Array();
					if(!rc || rc.nodeName)
						cb.pis[0] = this._showPI(rc, control);
					else for(i = 0; i < rc.length; i++)
						cb.pis[i] = this._showPI(rc[i], control);
				}
			}
		}
		catch(e){}
		this._wait = false;
	}
	
	this._timeOut = function(key)
	{
		var cb, i = this._callBacks.length;
		while(i-- > 0) if((cb = this._callBacks[i]) != null)
			if(cb.postKey == key)
				break;
		if(i < 0)
			return;
		var j = cb.control;
		if(j && j.onError)
			j.onError(6);
		j = cb.pis ? cb.pis.length : 0;
		while(j-- > 0)
			cb.pis[j].hide();
		delete this._callBacks[i];
	}
	
	this._showPI = function(rc, ctl)
	{
		var pis = this._indicators;
		if(!pis)
			pis = this._indicators = new Array();
		var pi = null, j = pis.length, i = -1;
		while(++i < j)
		{
			pi = pis[i];
			if(!pi.visible)
				break;
		}
		if(i == j)
			pi = pis[j] = new ig_progressIndicator();
		if(ctl.fixPI)
			ctl.fixPI(pi);
		if(pi._rc)
			rc = null;
		pi.display(rc);
		return pi;
	}
	
	
	
	
	
	this.setHtml = function(txt, elem)
	{
		if(!txt || !elem)
			return null;
		var i = 0, css = '';
		while(ig_shared.IsOpera)
		{
			var i0 = txt.indexOf('<style ', i), i1 = txt.indexOf('<style>', i), i2 = txt.indexOf('<STYLE ', i), i3 = txt.indexOf('<STYLE>', i);
			if(i > i0 || (i1 >= i && i0 > i1))
				i0 = i1;
			if(i > i0 || (i2 >= i && i0 > i2))
				i0 = i2;
			if(i > i0 || (i3 >= i && i0 > i3))
				i0 = i3;
			i1 = txt.indexOf('>', i0);
			if(i > i0 || i0 > i1)
				break;
			i2 = txt.indexOf('</style>', i0);
			i3 = txt.indexOf('</STYLE>', i0);
			if(i1 > i2 || (i3 > i1 && i2 > i3))
				i2 = i3;
			if(i1 > i2)
				break;
			css += txt.substring(i1 + 1, i2);
			txt = txt.substring(0, i0) + txt.substring(i2 + 8);
			i = i0;
		}
		if(css.length > 5)
			this._setCss(null, css, elem.id + '_ig_css');
		i = -3;
		while((i = txt.indexOf('<&>3', i += 3)) >= 0)
			txt = txt.replace('<&>3', '<&>');
		i = 0;
		while(true)
		{
			var iLen = txt.length;
			var i1 = txt.indexOf('<script', i), i2 = txt.indexOf('<SCRIPT', i);
			if(i1 > i2 && i2 >= i)
				i1 = i2;
			if(i1 < i)
				break;
			var t = this._fixScript(txt, i1);
			if(t == null)
				i = i1 + 7;
			else
				txt = t;
		}
		this._fireBeforeResponse(elem);
		elem.innerHTML = txt;
		return txt;
	}
	
	
	
	
	
	this._fixScript = function(txt, i)
	{
		var i2 = txt.indexOf('>', i);
		if(i2 < i)
			return null;
		var i3 = txt.indexOf('</script>', i2), i4 = txt.indexOf('</SCRIPT>', i2);
		if(i3 > i4 && i4 > i)
			i3 = i4;
		var js = txt.substring(i, i2);
		if(js.toLowerCase().indexOf('javascript') < 0)
			return null;
		var first = js.indexOf('IG_FIRST') > 0;
		js = txt.substring(i2 + 1, i3);
		txt = txt.substring(0, i) + txt.substring(i3 + 9);
		if(js.length < 2)
			return txt;
		if(!this._scripts)
			this._scripts = new Array();
		i = this._scripts.length;
		this._scripts[i] = js;
		if(first)
		{
			while(i-- > 0)
				this._scripts[i + 1] = this._scripts[i];
			this._scripts[0] = js;
		}
		return txt;
	}
	
	
	
	this._fireBeforeResponse = function(elem)
	{
		var el, ec, control, i = -1, lsnrs = ig_shared._cbListeners;
		if(lsnrs) while(++i < lsnrs.length)
		{
			if((el = lsnrs[i].elemID) == null)
				continue;
			if((el = ig_shared.getElement(el, this._form)) == null)
				continue;
			try
			{
				control = eval(ec = lsnrs[i].evalCtl);
			}
			catch(ex)
			{
				continue;
			}
			while((el = el.parentNode) != null)
				if(el == elem)
			{
				if(control.onCBBeforeResponse)
					control.onCBBeforeResponse();
				var cb = this._cb;
				if(!cb || !control.onCBAfterResponse)
					continue;
				if(!cb.lsnrs)
					cb.lsnrs = new Array();
				cb.lsnrs[cb.lsnrs.length] = ec;
			}
		}
	}
	this._form = form;
	
	this._timeLimit = 20000;
	
	this._vs = ['__VIEWSTATE', null, '__EVENTVALIDATION', null];
	
	this._sep = '<&>0';
	
	this._sepLen = this._sep.length;
	this._setPan = function(p, se)
	{
		this._panelToSubmit = p;
		this._submitElem = se;
		if(p) this._panTime = (new Date()).getTime();
		else this._evtElem = null;
	}
	this._getPan = function()
	{
		var t = this._panTime;
		if(!t || t + 500 < (new Date()).getTime())
			this._submitElem = this._panelToSubmit = this._panTime = null;
		return this._panelToSubmit;
	}
	
	this._doPostBack = function(target, arg)
	{
		var me = ig_all._ig_cbManager, evt = window.event;
		if(!me || me._wait)
			return ig_cancelEvent(evt, 'submit');
		var pan = me._findPanel(target), form = me._form;
		if(!pan)
		{
			me._evtElem = null;
			me._oldPostBack(target, arg);
			return;
		}
		me._setPan(pan);
		var e = form ? form.__EVENTTARGET : null;
		if(e)
			e.value = target;
		e = form ? form.__EVENTARGUMENT : null;
		if(e)
			e.value = arg;
		me._elemID = target;
		me._onFormSubmit();
		me._elemID = null;
		ig_cancelEvent(evt, 'submit');
	}
	
	this._isMatch = function(x, v)
	{
		if(x == v)
			return true;
		var len = x ? x.length : 0;
		if(len-- < 2)
			return false;
		var wc0 = x.charCodeAt(0) == 42, wc1 = x.charCodeAt(len) == 42;
		if(wc1) x = x.substring(0, len);
		if(wc0) x = x.substring(1);
		var i = v.indexOf(x);
		if(wc0)
		{
			if(wc1) return i >= 0;
			i = v.lastIndexOf(x);
			return i >= 0 && i + len == v.length;
		}
		return wc1 && i == 0;
	}
	this.__id = function(id){return id ? id.replace(/\:/g, '_').replace(/\$/g, '_') : id;}
	
	this._findPanel = function(id, e)
	{
		var j, i, pans = this._panels.length, form = this._form;
		if(this._wait || pans < 1)
			return null;
		if(e)
			id = e.id;
		else if(!id)
			return null;
		var id0 = id;
		id = this.__id(id);
		if(!e && id)
			if((e = ig_shared.getElement(id, form)) == null)
				if((e = ig_shared.getElement(id + "_Data", form)) == null)
					if((e = ig_shared.getElement(id + "_hidden", form)) == null)
						if((e = ig_shared.getElement(id.replace(/\_/g, 'x'), form)) != null)
							if(id0 != id) if((e = ig_shared.getElement(id0, form)) == null)
								e = ig_shared.getElement(id0 + "_Data", form);
		id0 = id;
		while(e || id)
		{
			if(id || (e && e.id)) for(i = 0; i < pans; i++)
			{
				var p = this._panels[i];
				if(e && p.elemID == e.id)
				{
					if(p.post) for(j = 0; j < p.post.length; j++)
						if(this._isMatch(p.post[j], id0))
							return null;
					return p;
				}
				if(p.ids && id) for(j = 0; j < p.ids.length; j++)
					if(this._isMatch(p.ids[j], id0))
						return p;
				if(p.noResp && id) for(j = 0; j < p.noResp.length; j++)
					if(this._isMatch(p.noResp[j], id0))
						return p;
			}
			id = null;
			if(e)
				e = e.parentNode;
		}
		return null;
	}
	
	this._onFormEvt = function(evt)
	{
		if(!evt)
			if((evt = window.event) == null)
				return;
		var elem = evt.target;
		if(!elem)
			if((elem = evt.srcElement) == null)
				elem = this;
		var me = ig_all._ig_cbManager, type = elem.type, tag = elem.tagName, name = elem.name;
		if(!me)
			return;
		me._evtElem = elem;
		me._evtTime = (new Date()).getTime();
		if(evt.type != 'click' || elem.disabled)
			return;
		me._subID = me._submitElem = null;
		var pan = me._findPanel(null, elem);
		if(!pan)
			return;
		var val = null, x = evt.offsetX;
		if(type == 'image' && tag == 'INPUT')
			val = name + '.x=' + (x ? x : 1) + '&' + name + '.y=' + (x ? evt.offsetY : 1);
		else if(type == 'submit' && (tag == 'BUTTON' || tag == 'INPUT'))
			val = name + '=' + me._encode(elem.value);
		else
			return;
		me._setPan(pan, ig_csom.isEmpty(me._subID = name) ? null : val);
	}
	
	this._encode = function(val)
	{
		return (typeof encodeURIComponent == 'function') ? encodeURIComponent(val) : escape(val);
	}
	
	this._restore = function()
	{
		for(var i = 0; i < 3; i += 2)
		{
			var val = this._vs[i + 1], e = ig_shared.getElement(this._vs[i], this._form);
			if(e && val)
				e.value = val;
		}
	}
	
	
	this._onFormSubmit = function(evt, me)
	{
		var my = me && me._vs;
		if(!my)
		{
			me = ig_all._ig_cbManager;
			if(!evt)
				evt = window.event;
		}
		if(me && me._wait)
			me = null;
		if(me && me._onsubmit && !my)
		{
			try
			{
				me._onsubTime = (new Date()).getTime();
				if(me._onsubmit() === false)
					me = null;
			}catch(ex)
			{
				me = null;
			}
			if(evt && evt.returnValue == false && evt.type == 'submit')
				me = null;
		}
		if(!me)
			return ig_cancelEvent(evt, 'submit');
		var form = me._form, pan = me._getPan(), pp = me._panels;
		if(!pan || !form || form.action != form._ig_cb_act)
			return true;
		ig_cancelEvent(evt, 'submit');
		
		var p, rc = pan.rc, i = pp.length, id = pan.link;
		if(id) while(i-- > 0)
			if((p = pp[i]) != null)
				if(p.elemID == id || p.id == id)
					pan = p;
		if(pan)
			me.addCallBack(pan.control, pan.id, rc ? rc : pan.rc);
		me._setPan(null);
		return false;
	}
	
	this._responseEvt = function()
	{
		var me = ig_all._ig_cbManager;
		if(!me || me._wait)
			return;
		for(var i = 0; i < me._callBacks.length; i++)
		{
			var j = -1, cb = me._callBacks[i];
			if(cb && me._doResponse(cb))
			{
				if(cb.pis)
					j = cb.pis.length;
				while(j-- > 0)
					cb.pis[j].hide();
				me._cb = me._scripts = null;
				delete me._callBacks[i];
				if(!me._jsWait && cb.timer)
					me._timer(cb.id, true);
			}
		}
	}
	
	this._doCss = function(e, v)
	{
		e.cssText = v;
		var e1, ss = document.styleSheets;
		var i = ss.length;
		while(i-- > 0)
		{
			e1 = ss[i];
			if(e1 == e)
				return;
			if(!e1.readOnly && !e1.disabled && e1.type == 'text/css')
				break;
		}
		if(i < 0)
			return;
		
	}
	
	this._doResponse = function(cb)
	{
		var request = cb.request;
		if(!request || request.readyState != 4)
			return false;
		var txt = request.responseText, sep = this._sep, sepLen = this._sepLen;
		if(!txt)
			return (new Date()).getTime() - cb.time > this._timeLimit;
		this.serverError = null;
		var e, i, i0 = txt.indexOf(sep);
		var iID = txt.indexOf(sep, i0 + sepLen);
		var iKey = txt.indexOf(sep, iID + sepLen);
		if(i0 < 0 || iID < 0 || iKey < 0)
			return false;
		this.triggers = cb.triggers;
		this._jsWait = false;
		var id = txt.substring(i0 + sepLen, iID), postKey = txt.substring(iID + sepLen, iKey);
		this._error = 0;
		if(postKey.indexOf('<error>') == 0)
		{
			i = this._panels.length;
			this.serverError = txt.split(this._sep)[3];
			while(i-- > 0)
			{
				e = this._panels[i].control;
				if(e && e.onError)
					e.onError(1);
			}
			var lsnrs = ig_shared._cbError;
			i = lsnrs ? lsnrs.length : 0;
			
			while(i-- > 0)try
			{
				lsnrs[i](cb.control,cb.triggers,this.serverError);
			}catch(e){}
			this._restore();
			try
			{
				this._submit(9);
			}catch(e){}
			return true;
		}
		if(id == cb.id && postKey == cb.postKey)
		{
			if(this._cb)
			{
				window.setTimeout("try{ig_all._ig_cbManager._responseEvt();}catch(i){}", 1);
				return this._killCB++ > 20;
			}
			this._cb = cb;
			this._killCB = 0;
			txt = txt.substring(iKey + sepLen);
			var vals = txt.split(sep), old = this._vs;
			for(i = 2; i < vals.length - 1; i += 2)
			{
				var index = -1, v0 = vals[i], v1 = vals[i + 1];
				if(v0 == old[2])
					index = 2;
				else if(v0 == old[0])
					index = 0;
				else if(v0 && v0.indexOf('<') != 0)
					continue;
				vals[i] = vals[i + 1] = null;
				if(index > -1)
				{
					e = ig_shared.getElement(v0, this._form);
					if(e)
					{
						old[index + 1] = e.value;
						e.value = v1;
					}
				}
				else if(v0 == '<script>')
					this._scripts = new Array(v1);
				else if(v0 == '<jssrc>')
				{
					e = document.scripts;
					if(!e || e.length < 2)
						e = document.getElementsByTagName('SCRIPT');
					if(!e)
						continue;
					var s, x = -1, src = '';
					while(++x < e.length) if(e[x]) if((s = e[x].src) != null)
						src += s;
					v1 = v1.split('|');
					this._scriptCount = 0; x = -1;
					while(++x < v1.length)
					{
						s = v1[x].replace('&amp;','&');
						if(src.indexOf((s.charCodeAt(0) < 47) ? s.substring(1) : s) < 0)
							this._addJS(this._runScript(s, true), s, cb);
					}
				}
				else if(v0 == '<style>')
					this._setCss(this._style, v1);
			}
			var ctl = cb.control;
			
			if(vals[0] == '<error>')
			{
				this.serverError = vals[1];
				this._error = 2;
			}
			else if(ctl && ctl.doResponse) try
			{
				ctl.doResponse(vals, this);
			}catch(e){this._error |= 4;}
			cb._js = this._scripts;
			if(this._jsWait)
				window.setTimeout("try{ig_all._ig_cbManager._killJsSrc('" + id + "');}catch(i){}", 3000);
			else
				this._jsDelay(cb);
			if(this._error > 0 && ctl.onError)
				ctl.onError(this._error);
			return true;
		}

		return false;
	}
	
	
	
	
	this._setCss = function(e, v, id, bad)
	{
		try
		{
			if((!id || bad) && document.createStyleSheet)
			{
				var e0 = e ? e.owningElement : null;
				e = e0 ? e0.parentElement : null;
				if(e && e.parentNode)
					e.removeChild(e0);
				e0 = document.createStyleSheet();
				if(!bad) this._style = e0;
				this._doCss(e0, v);
				return e0;
			}
			if(id)
				e = document.getElementById(id);
			if(!e)
			{
				e = document.createElement('STYLE');
				e.type = 'text/css';
				var h = document.getElementsByTagName('HEAD');
				h = (h && h.length > 0) ? h[0] : document.body;
				h.appendChild(e);
				if(id)
					e.id = id;
				else if(!bad)
					this._style = e;
			}
			e.innerHTML = v;
			return e;
		}catch(e)
		{
			this._error |= 32;
		}
	}
	
	this._jsDelay = function(cb)
	{
		if(!cb)
			return;
		var i, ctl = cb.control, js = cb._js;
		cb.control = cb._js = null;
		if(js) for(i = 0; i < js.length; i++)
			this._runScript(js[i]);
		
		
		if(cb.lsnrs) for(i = 0; i < cb.lsnrs.length; i++) try
		{
			eval(cb.lsnrs[i]).onCBAfterResponse();
		}catch(ex){}
		cb.lsnrs = null;
		
		if(ctl && ctl.afterCBResponse)
			ctl.afterCBResponse();
	}
	
	
	
	
	this._addJS = function(se, src, cb)
	{
		if(!se)
			return;
		this._jsWait = true;
		var js = this._jsSrcs;
		var j = -1, jL = js.length;
		while(++j < jL) if(js[j].src == src)
		{
			js[j].cb[js[j].cb.length] = cb;
			return;
		}
		js[jL] = {se:se,src:src,cb:[cb]};
		ig_shared.addEventListener(se, 'readystatechange', this._removeJS);
	}
	
	
	
	this._removeJS = function(se)
	{
		var me = ig_all._ig_cbManager;
		if(!me || !se)
			return;
		var e = se.srcElement;
		if(e)
		{
			if(e.readyState != 'loaded')
				return;
			se = e;
		}
		ig_shared.removeEventListener(se, 'readystatechange', me._removeJS);
		var js = me._jsSrcs;
		var x, i, cbx, cb = null, j = -1, jL = js ? js.length : 0;
		while(++j < jL) if(js[j].se == se)
		{
			cb = js[j].cb;
			js[j].se = null;
		}
		i = cb ? cb.length : 0;
		while(i-- > 0)
		{
			var cbi = cb[i];
			j = jL;
			while(j-- > 0 && cbi) if(js[j].se)
			{
				cbx = js[j].cb;
				x = cbx.length;
				while(x-- > 0) if(cbx[x] == cbi)
				{
					cbi = null;
					break;
				}
			}
			if(!cbi)
				continue;
			j = jL;
			while(j-- > 0)
			{
				if(js[j].se)
					se = null;
				cbx = js[j].cb;
				x = cbx.length;
				while(x-- > 0) if(cbx[x] == cbi)
					delete cbx[x];
			}
			if(se)
			{
				while(++j < jL)
					delete js[j];
				me._jsSrcs = new Array();
			}
			me._jsDelay(cbi);
			if(cbi.timer)
				me._timer(cbi.id, true);
		}
	}
	
	this._killJsSrc = function(id)
	{
		var me = ig_all._ig_cbManager;
		var js = me ? me._jsSrcs : null;
		var j = js ? js.length : 0;
		while(j-- > 0)
		{
			var x = -1, cbx = js[j].cb;
			while(++x < cbx.length)
				if(cbx[x] && (cbx[x].id == id || !id))
					me._removeJS(js[j].se);
		}
		if(!id && this._jsSrcs.length > 0)
			this._jsSrcs = new Array();
	}
	
	
	
	this._timer = function(id, wait)
	{
		var me = ig_all._ig_cbManager;
		var pan, cb = me ? me._callBacks : null;
		var i = cb ? cb.length : 0;
		while(i-- > 0) if(cb[i] && cb[i].id == id)
			return;
		i = me._panels.length;
		while(i-- > 0)
		{
			pan = me._panels[i];
			if(pan.id == id)
				break;
		}
		if(i >= 0)
			i = pan.control._timer;
		if(!i || i < 1)
			return;
		if(!wait)
		{
			pan.wait = false;
			if(!me.addCallBack(pan, null, null, -1))
				return;
		}
		if(!pan.wait)
			window.setTimeout("try{ig_all._ig_cbManager._timer('" + id + "');}catch(i){}", i);
		pan.wait = true;
	}
	
	this._runScript = function(js, src)
	{
		var e = document.getElementsByTagName('HEAD');
		e = (e && e.length > 0) ? e[0] : document.body;
		if(js && js.length > 1) try
		{
			if(!src && ig_shared.IsIE && js.indexOf('var Page_Validators') < 0)
			{
				
				try
				{
					eval(js);
					return;
				} 
				catch(ex){}
			}
			var se = document.createElement('SCRIPT');
			se.type = 'text/javascript';
			if(src)
				se.src = js;
			else
				se.text = js;
			e.appendChild(se);
			if(src && document.all)
				return se;
		}
		catch(ex)
		{
			this._error |= 16;
		}
	}
	
	this.newPanel = function(id, uid, ids, prop, post, noResp)
	{
		var elem = document.getElementById(id);
		if(!elem)
			return;
		var o = ig_all[id];
		if(o)
			ig_dispose(o);
		var pi = {loc:ig_Location.MiddleCenter};
		pi.setImageUrl = function(v){this.url = v;}
		pi.getImageUrl = function(){return this.url;}
		pi.setTemplate = function(v){this.html = v;}
		pi.getTemplate = function(){return this.html;}
		pi.setLocation = function(v){this.loc = v;}
		pi.getLocation = function(){return this.loc;}
		pi.setRelativeContainer = function(v){this.rc = v;}
		pi.getRelativeContainer = function(){return this.rc;}
		o = ig_all[id] = {_id:id, _uniqueID:uid, _element:elem, _pi:pi, _evts:prop};
		var t = o._timer = prop[5] ? prop[5] : 0;
		o.getTimer = function(){return this._timer;}
		o.setTimer = function(v){this._timer = v;}
		o.getID = function(){return this._id;}
		o.getUniqueID = function(){return this._uniqueID;}
		o.getElement = function(){return this._element;}
		o.getProgressIndicator = function(){return this._pi;}
		o.findControl = function(id){return ig_shared.findControl(this._element, id);}
		o._fire = function(evt, p3)
		{
			evt = this._evts ? this._evts[evt] : null;
			if(!evt)
				return false;
			var evtO = new ig_EventObject();
			ig_fireEvent(this, ig_shared.replace(evt, "&quot;", "'"), evtO, p3);
			if(evtO.cancelResponse)
				return 'cancelResponse';
			if(evtO.fullPostBack)
				return 'fullPostBack';
			return evtO.cancel;
		}
		o.beforeCBSubmit = function(src){return this._fire(1, src);}
		o.afterCBResponse = function(){this._fire(3);}
		o.onError = function(flags){this._fire(4, flags);}
		o.doResponse = function(vals, man)
		{
			if(!this._fire(2)) for(var i = 0; i + 1 < vals.length; i += 2)
			{
				var e, v, v0 = vals[i], v1 = vals[i + 1];
				if(!v0)
					continue;
				if(v0.indexOf('-') == 0)
				{
					e = ig_shared.getElement(v = v0.substring(2), man._form);
					if(!e)
						e = ig_shared.getElement(man.__id(v), man._form);
					if(e)
						v0 = v0.charCodeAt(1);
					if(v0 == 51)
						e.innerHTML = v1;
					else if(v1 == '&nbsp;')
						v1 = '';
					if(v0 == 48)
						e.value = v1;
					if(v0 == 49)
						e.checked = v1.toLowerCase() == 'true';
					if(v0 == 50)
						e.selectedIndex = parseInt(v1);
					if(v0 == 52)
						e.src = v1;
					continue;
				}
				e = ig_getWebControlById(v0);
				if(e)
				{
					man.setHtml(v1, e._element);
					continue;
				}
				try
				{
					var multi = v0.indexOf('+') == 0;
					e = eval(multi ? v0.substring(1) : v0);
					if(e && e.doResponse)
					{
						if(multi)
						{
							v1 = parseInt(v1);
							v0 = new Array();
							while(v1-- > 0)
							{
								v0[v0.length] = vals[i += 2];
								v0[v0.length] = vals[i + 1];
							}
						}
						else
							v0 = [v0,v1];
						e.doResponse(v0, man);
					}
				}catch(e){man._error |= 8;}
			}
		}
		o.fixPI = function(pi)
		{
			var p = this._pi;
			pi.setLocation(p.loc);
			if(pi._html != p.html)
				pi.setTemplate(p.html);
			if(pi._img != p.url)
				pi.setImageUrl(p.url);
			pi._rc = p.rc;
		}
		o.refresh = function()
		{
			try
			{
				ig_all._ig_cbManager.addCallBack(this, this._uniqueID, this._element, -1);
			}catch(e){}
		}
		this.addPanel(o, uid, id, elem, null, ids, post, noResp);
		o._fire(0);
		if(t > 0)
			window.setTimeout("try{ig_all._ig_cbManager._timer('" + uid + "');}catch(i){}", t);
	}
	
	
	this._submit = function(flag)
	{
		var me = ig_all._ig_cbManager;
		if(!me)
			return;
		var pan = me._getPan(), elem = me._evtElem, f = me._form;
		if(!pan && elem && flag != 9)
		{
			if((new Date()).getTime() < me._evtTime + ((elem.nodeName == 'A') ? 200 : 30))
				me._setPan(pan = me._findPanel(null, elem));
			if(pan)
				if(!me._onFormSubmit(null, me))
					return;
			me._setPan(null);
		}
		if(f && f._ig_cb_submit)try
		{
			pan = me._onsubTime;
			if(pan && (new Date()).getTime() - pan > 100)
				pan = null;
			if(me._onsubmit && !flag && !pan)try
			{
				if(me._onsubmit() === false)
					return;
			}catch(ex){}
			f._ig_cb_submit();
		}catch(me){}
	}
	
	this._callBacks = new Array();
	
	
	this._panels = new Array();
	
	this._jsSrcs = new Array();
	this._ie = typeof ActiveXObject != 'undefined';
	this._ok = this._ie || typeof XMLHttpRequest != 'undefined';
	if(!this._ok)
		return;
	form._ig_cb_act = form.action;
	this._onsubmit = form.onsubmit;
	form.onsubmit = null;
	form._ig_cb_submit = form.submit;
	form.submit = this._submit;
	ig_shared.addEventListener(form, 'submit', this._onFormSubmit, true);
	ig_shared.addEventListener(form, 'click', this._onFormEvt, true);
	ig_shared.addEventListener(form, 'mousedown', this._onFormEvt, true);
	ig_shared.addEventListener(form, 'mouseup', this._onFormEvt, true);
	this._oldPostBack = window.__doPostBack;
	if(this._oldPostBack)
		window.__doPostBack = this._doPostBack;
}

function ig_createActiveXFromProgIDs(progIDs)
{
	var e;
	for(var i=0;i<progIDs.length;i++)
	{
		try
		{
			var activeX=new ActiveXObject(progIDs[i]);
			return activeX;
		}
		catch (e){;}
	}
	return null;
}

function ig$(id)
{
	var o = null;
	if(typeof ig_getWebControlById == "function")
		o = ig_getWebControlById(id);
	if(o)
		return o;
	if(typeof igedit_getById == "function")
		o = igedit_getById(id);
	if(o)
		return o;
	if(typeof igtab_getTabById == "function")
		o = igtab_getTabById(id);
	if(o)
		return o;
	if(typeof igcal_getCalendarById == "function")
		o = igcal_getCalendarById(id);
	if(o)
		return o;
	if(typeof igdrp_getComboById == "function")
		o = igdrp_getComboById(id);
	if(o)
		return o;
	if(typeof iged_getById == "function")
		o = iged_getById(id);
	if(o)
		return o;
	if(typeof iglbar_getListbarById == "function")
		o = iglbar_getListbarById(id);
	if(o)
		return o;
	if(typeof igcmbo_getComboById == "function")
		o = igcmbo_getComboById(id);
	if(o)
		return o;
	if(typeof igtbl_getGridById == "function")
		o = igtbl_getGridById(id);
	if(o)
		return o;
	if(typeof igtbar_getToolbarById == "function")
		o = igtbar_getToolbarById(id);
	if(o)
		return o;
	if(typeof igmenu_getMenuById == "function")
		o = igmenu_getMenuById(id);
	if(o)
		return o;
	if(typeof igtree_getTreeById == "function")
		o = igtree_getTreeById(id);
	return o;
}

// General object. Where it all starts.
function igtbl_Object(type)
{
	if(arguments.length>0)
		this.init(type);
}
igtbl_Object.prototype.init=function(type)
{
	this.Type=type;
}

// Web object. The one with an HTML element attached.
igtbl_WebObject.prototype=new igtbl_Object();
igtbl_WebObject.prototype.constructor=igtbl_WebObject;
igtbl_WebObject.base=igtbl_Object.prototype;
function igtbl_WebObject(type,element,node)
{
	if(arguments.length>0)
		this.init(type,element,node);
}
igtbl_WebObject.prototype.init=function(type,element,node,viewState)
{
	igtbl_WebObject.base.init.apply(this,[type]);
	if(element)
	{
		this.Id=element.id;
		this.Element=element;
	}
	if(node)
		this.Node=node;
	if(viewState)
		this.ViewState=viewState;
}
igtbl_WebObject.prototype.get=function(name)
{
	if(this.Node)
		return this.Node.getAttribute(name);
	if(this.Element)
		return this.Element.getAttribute(name);
	return null;
}
igtbl_WebObject.prototype.set=function(name,value)
{
	if(this.Node)
		this.Node.setAttribute(name,value);
	else if(this.Element)
		this.Element.setAttribute(name,value);
	if(this.ViewState)
		ig_ClientState.setPropertyValue(this.ViewState,name,value);
}

// Band object
igtbl_Band.prototype=new igtbl_WebObject();
igtbl_Band.prototype.constructor=igtbl_Band;
igtbl_Band.base=igtbl_WebObject.prototype;
function igtbl_Band(grid,node,index
	,bandsInitArray,colsInitArray
)
{
	if(arguments.length>0)
		this.init(grid,node,index
			,bandsInitArray,colsInitArray
		);
}
var igtbl_ptsBand=[
"init",
function(grid,node,index
	,bandsInitArray,colsInitArray
)
{
	igtbl_Band.base.init.apply(this,["band",null,node]);

	this.Grid=grid;
	this.Index=index;
	var defaultProps=new Array("Key","AllowAddNew","AllowColSizing","AllowDelete","AllowSort","ItemClass","AltClass","AllowUpdate",
		"CellClickAction","ColHeadersVisible","ColFootersVisible","CollapseImage","CurrentRowImage",
		"CurrentEditRowImage","DefaultRowHeight","EditCellClass","Expandable","ExpandImage",
		"FooterClass","GroupByRowClass","GroupCount","HeaderClass","HeaderClickAction","Visible",
		"IsGrouped","ExpAreaClass","NonSelHeaderClass","RowLabelClass","SelGroupByRowClass","SelHeadClass",
		"SelCellClass","RowSizing","SelectTypeCell","SelectTypeColumn","SelectTypeRow","RowSelectors",
		"NullText","RowTemplate","ExpandEffects","AllowColumnMoving","ClientSortEnabled","Indentation",
		"RowLabelWidth","DataKeyField","HeaderHTML","FooterHTML","FixedHeaderIndicator","AllowRowNumbering",
		"IndentationType"
		,"HasHeaderLayout","HasFooterLayout","GroupByColumnsHidden","AddNewRowVisible","AddNewRowView",
		"AddNewRowStyle"
		,"_optSelectRow"
		
		,"ShowAllCondition","ShowEmptyCondition","ShowNonEmptyCondition",
		"Filter_AllString","Filter_EmptyString","Filter_NonEmptyString","ServerPassedFilters","ApplyOnAdd","FilterDropDownRowCount","RowFilterMode","FilterDropDownStyle","FilterHighlightRowStyle"
        ,"CellTitleMode", "HeaderTitleMode"
        ,"FilterUIType","AllowRowFiltering","FilterRowView","FilterEvaluationTrigger","FilterRowStyle","FilterOperandDropDownStyle","FilterOperandItemStyle","FilterOperandItemHoverStyle","FilterOperandButtonStyle"
        ,"FilterOperandStrings"
		,"SortingAlgorithm"
		);
	this.VisibleColumnsCount=0;
	this.Columns = new Array();
	var bandArray;
	bandArray=bandsInitArray[index];
	var bandCount=0;
	if(bandArray)
	{
		bandCount=bandsInitArray.length;
		for(var i=0;i<bandArray.length;i++)
			this[defaultProps[i]]=bandArray[i];
		if(this.RowTemplate!="")
			this.ExpandEffects=new igtbl_expandEffects(this.ExpandEffects);
		if(this.HeaderHTML!="")
			this.HeaderHTML=unescape(this.HeaderHTML);
		if(this.FooterHTML!="")
			this.FooterHTML=unescape(this.FooterHTML);
	}	
	else
		bandCount=this.Node.parentNode.selectNodes("Band").length;
	var colsArray=colsInitArray[index];
	if(!node)
	{
		for(var i=0;i<colsArray.length;i++)
		{
			this.Columns[i]=new igtbl_Column(null,this,i
				,-1,colsArray[i]
			);
			if(!this.Columns[i].Hidden)
				this.VisibleColumnsCount++;
			if(this.Columns[i].getSelClass()!=this.getSelClass())
				this._selClassDiffer=true;
		}
	}
	else
	{
		this.Columns.Node=this.Node.selectSingleNode("Columns");
		var columNodes=this.Columns.Node.selectNodes("Column");
		var nodeIndex=0;		
		for(var i=0;i<columNodes.length;i++)
		{
			this.Columns[i]=new igtbl_Column(columNodes[i],this,i,nodeIndex
				,colsArray[i]
			);
			if(!this.Columns[i].Hidden && this.Columns[i].hasCells())
				this.VisibleColumnsCount++;
			if(!colsArray[i][33])
				nodeIndex++;
			if(this.Columns[i].getSelClass()!=this.getSelClass())
				this._selClassDiffer=true;
		}
	}
	igtbl_dispose(defaultProps);

	if(node)
	{
		this.ColumnsOrder="";
		for(var i=0;i<this.Columns.length;i++)
			this.ColumnsOrder+=this.Columns[i].Key+(i<this.Columns.length-1?";":"");
	}
	this._filterPanels=new Object();
		
	if (this.ServerPassedFilters[0])
	{
		for (var itr = 0 ; itr < this.ServerPassedFilters.length   ; itr+=2)
		{
			var	filterPanel = this._filterPanels[this.ServerPassedFilters[itr]];
			var filterSettingsOpCode = this.ServerPassedFilters[itr+1][0];
			var filterSettingsValue = this.ServerPassedFilters[itr+1][1];
			var colIndex = this.ServerPassedFilters[itr].split("_");
			colIndex = colIndex[colIndex.length-1];
			if (!filterPanel)			
			{
				var filteredColumn = this.Columns[colIndex];
				filterPanel = this._filterPanels[this.ServerPassedFilters[itr]] = new igtbl_FilterDropDown(filteredColumn);
			}
			filterPanel.setFilter(filterSettingsOpCode,filterSettingsValue,true);
		}
	}
    
    if(this.AllowAddNew == 1) 
    {
        if(this.Index==0)
	        this.curTable=grid.Element;
			    
	    if(grid.AddNewBoxVisible)
	    {
		    var addNew=igtbl_getElementById(grid.Id+"_addBox");
		    if(grid.AddNewBoxView==0)
			    this.addNewElem = addNew.childNodes[0].rows[0].cells[1].childNodes[0].rows[this.Index].cells[this.Index];
		    else
			    this.addNewElem = addNew.childNodes[0].rows[0].cells[1].childNodes[0].rows[0].cells[this.Index*2];
	    }
	}
	this.SortedColumns=new Array();

	var rs=this.getRowSelectors();
	if(bandCount==1)
	{
		if(rs==2)
			this.firstActiveCell=0;
		else
			this.firstActiveCell=1;
	}
	else
	{
		if(rs==2)
			this.firstActiveCell=1;
		else
			this.firstActiveCell=2;
	}
	this._sqlWhere="";
	this.SortImplementation=null;
},
"_alignColumns",
function()
{
    
    if (this.HasHeaderLayout)
    {
        var drsEls = igtbl_getDocumentElement(this.Grid.Id + "_drs");
        if (drsEls)
        { 
			var master = drsEls[0].firstChild.firstChild;
			if (master.tagName != "COLGROUP")
			{
				return;
			}
			for (var d = 1; d < drsEls.length; d++)
			{
				var colGroup = drsEls[d].firstChild.firstChild;
				if (colGroup.tagName != "COLGROUP")
				{
					continue;
				}
				for (var c = 0; c < colGroup.childNodes.length; c++)
				{
					colGroup.childNodes[c].width = master.childNodes[c].width;
				}
			}
        }
    }
},
"getSelectTypeRow",
function()
{
	var res=this.Grid.SelectTypeRow;
	if(this.SelectTypeRow!=0)
		res=this.SelectTypeRow;
	return res;
},
"getSelectTypeCell",
function()
{
	var res=this.Grid.SelectTypeCell;
	if(this.SelectTypeCell!=0)
		res=this.SelectTypeCell;
	return res;
},
"getSelectTypeColumn",
function()
{
	var res=this.Grid.SelectTypeColumn;
	if(this.SelectTypeColumn!=0)
		res=this.SelectTypeColumn;
	return res;
},
"getColumnFromKey",
function(key)
{
	var column=null;
	for(var i=0;i<this.Columns.length;i++)
		if(	this.Columns[i].Key==key )
		{
			column=this.Columns[i];
			break;
		}
	
	if(!column)
	{
		for(var i=0;i<this.Columns.length;i++)
		{
			var colKey = this.Columns[i].Key;
			if(colKey!=null && key!=null && colKey.toLowerCase()==key.toLowerCase())
			{
				column=this.Columns[i];
				break;
			}
		}
	}	return column;
},
"getExpandImage",
function()
{
	var ei=this.Grid.ExpandImage;
	if(this.ExpandImage!="")
		ei=this.ExpandImage;
	return ei;
},
"getCollapseImage",
function()
{
	var ci=this.Grid.CollapseImage;
	if(this.CollapseImage!="")
		ci=this.CollapseImage;
	return ci;
},
"getRowStyleClassName",
function()
{
	if(this.ItemClass!="")
		return this.ItemClass;
	return this.Grid.ItemClass;
},
"getRowAltClassName",
function()
{
	if(this.AltClass!="")
		return this.AltClass;
	return this.Grid.AltClass;
},
"getExpandable",
function()
{
	if(this.Expandable!=0)
		return this.Expandable;
	else return this.Grid.Expandable;
},
"getCellClickAction",
function()
{
	var res=this.Grid.CellClickAction;
	if(this.CellClickAction!=0)
		res=this.CellClickAction;
	return res;
},
"getExpAreaClass",
function()
{
	if(this.ExpAreaClass!="")
		return this.ExpAreaClass;
	return this.Grid.ExpAreaClass;
},
"getRowLabelClass",
function()
{
	if(this.RowLabelClass!="")
		return this.RowLabelClass;
	return this.Grid.RowLabelClass;
},
"getItemClass",
function()
{
	if(this.ItemClass!="")
		return this.ItemClass;
	return this.Grid.ItemClass;
},
"getAltClass",
function()
{
	if(this.AltClass!="")
		return this.AltClass;
	else if(this.Grid.AltClass!="")
		return this.Grid.AltClass;
	else if(this.ItemClass!="")
		return this.ItemClass;
	return this.Grid.ItemClass;
},
"getSelClass",
function()
{
	if(this.SelCellClass!="")
		return this.SelCellClass;
	return this.Grid.SelCellClass;
},
"getFooterClass",
function()
{
	if(this.FooterClass!="")
		return this.FooterClass;
	return this.Grid.FooterClass;
},
"getGroupByRowClass",
function()
{
	if(this.GroupByRowClass!="")
		return this.GroupByRowClass;
	return this.Grid.GroupByRowClass;
},
"addNew",
function()
{
	if(typeof(igtbl_addNew)=="undefined")
		return null;
	if(this.AddNewRowVisible==1)
	{
		igtbl_activateAddNewRow(this.Grid,this.Index,igtbl_getClickRow(this.Grid,this.Index));
		return;
	}
	return igtbl_addNew(this.Grid.Id,this.Index);
},
"getHeadClass",
function()
{
	if(this.HeaderClass!="")
		return this.HeaderClass;
	return this.Grid.HeaderClass;
},
"getRowSelectors",
function()
{
	var res=this.Grid.RowSelectors;
	if(this.RowSelectors!=0)
		res=this.RowSelectors;
	return res;
},
"removeColumn",
function(index)
{
	if(!this.Node) return;
	var column=this.Columns[index];
	if(!column)
		return;
	var elem=column._getHeadTags(true);
	var fElem=column._getFootTags(true);
	var cols=column._getColTags(true);
	for(var i=0;elem && i<elem.length;i++)
	{
		if(elem[i])
		{
			elem[i].parentNode.removeChild(elem[i]);
			elem[i].id="";
		}
	}
	for(var i=0;fElem && i<fElem.length;i++)
	{
		if(fElem[i])
		{
			fElem[i].parentNode.removeChild(fElem[i]);
			fElem[i].id="";
		}
	}
	for(var i=0;cols && i<cols.length;i++)
		if(cols[i])
			cols[i].parentNode.removeChild(cols[i]);
	column.colElem=elem;
	column.colFElem=fElem;
	if(column.Node)
		column.Node.parentNode.removeChild(column.Node);
	if(this.Columns.splice)
		this.Columns.splice(index,1);
	else
		this.Columns=this.Columns.slice(0,index).concat(this.Columns.slice(index+1));
	column.Id="";
	column.fId="";
	this.reIdColumns();
	return column;
},
"insertColumn",
function(column,index)
{
	if(!this.Node || !column || !column.Node || index<0 || index>this.Columns.length)
		return;
	var column1=this.Columns[index];
	var hAr;
	var hAr1;
	var fAr;
	var fAr1;
	var insIndex;
	if(column1)
	{
		this.Columns.Node.insertBefore(column.Node,this.Columns[index].Node);
		if(this.Columns.splice)
			this.Columns.splice(index,0,column);
		else
			this.Columns=this.Columns.slice(0,index).concat(column,this.Columns.slice(index));
		insIndex=index;
		while(column1 && !column1.hasCells())
			column1=this.Columns[++index];
	}
	else
	{
		this.Columns.Node.appendChild(column.Node);
		this.Columns[this.Columns.length]=column;
		insIndex=this.Columns.length-1;
	}
	if(column1)
	{
		hAr=column.colElem;
		fAr=column.colFElem;
		if(column.getFixed()===column1.getFixed())
		{
			hAr1=column1._getHeadTags(true);
			for(var i=0;hAr && i<hAr.length;i++)
			{
				var tr=hAr1[i].parentNode;
				tr.insertBefore(hAr[i],hAr1[i])
			}
			if(fAr)
			{
				fAr1=column1._getFootTags(true);
				for(var i=0;i<fAr.length;i++)
				{
					var tr=fAr1[i].parentNode;
					tr.insertBefore(fAr[i],fAr1[i])
				}
			}
		}
		else
		{
			column1=this.Columns[index-1];
			hAr1=this.Columns[index-1]._getHeadTags(true);
			for(var i=0;hAr && i<hAr.length;i++)
			{
				var tr=hAr1[i].parentNode;
				tr.insertBefore(hAr[i],hAr1[i].nextSibling)
			}
			if(fAr)
			{
				fAr1=this.Columns[index-1]._getFootTags(true);
				for(var i=0;i<fAr.length;i++)
				{
					var tr=fAr1[i].parentNode;
					tr.insertBefore(fAr[i],fAr1[i].nextSibling)
				}
			}
		}
		if(column.getVisible() && column1.getVisible())
		{
			if(column.getFixed()===column1.getFixed())
				column1._insertCols(true,column.Width);
			else
				this.Columns[index-1]._insertCols(false,column.Width);
		}
		else if(column.getVisible())
		{
			column2=column1;
			if(!column1.hasCells()) 
			{
				while(column2 && !column2.hasCells())
					column2=this.Columns[column2.Index+1];
			}
			if(column2 && column2.getVisible())
				column2._insertCols(true,column.Width);
			else 
			{
				column2=column1;
				while(column2 && !column2.getVisible())
					column2=this.Columns[column2.Index-1];
				if(!column2) return;
				column2._insertCols(false,column.Width);
			}
		}
	}
	else
	{
		column1=this.Columns[insIndex-1];
		while(column1 && !column1.hasCells())
			column1=this.Columns[--insIndex];
		if(!column1) return;
		hAr=column.colElem;
		fAr=column.colFElem;
		hAr1=column1._getHeadTags(true);
		for(var i=0;hAr && i<hAr.length;i++)
		{
			var tr=hAr1[i].parentNode;
			tr.appendChild(hAr[i])
		}
		if(fAr)
		{
			fAr1=column1._getFootTags(true);
			for(var i=0;i<fAr.length;i++)
			{
				var tr=fAr1[i].parentNode;
				tr.appendChild(fAr[i])
			}
		}
		if(column.getVisible() && column1.getVisible())
			column1._insertCols(false,column.Width);
		else if(column.getVisible())
		{
			while(column1 && !column1.getVisible())
				column1=this.Columns[column1.Index-1];
			if(!column1) return;
			column1._insertCols(false,column.Width);
		}
	}
	this.reIdColumns();
	igtbl_dispose(hAr);
	igtbl_dispose(fAr);
	igtbl_dispose(hAr1);
	igtbl_dispose(fAr1);
	return column;
},
"reIdColumns",
function()
{
	if(!this.Node) return;
	for(var i=0;i<this.Columns.length;i++)
		if(!this.Columns[i]._reIded)
			this.Columns[i]._reId(i);
	for(var i=this.Columns.length-1;i>=0;i--)
		delete this.Columns[i]._reIded;
},
"getSelGroupByRowClass",
function()
{
	if(this.SelGroupByRowClass!="")
		return this.SelGroupByRowClass;
	return this.Grid.SelGroupByRowClass;
},
"getBorderCollapse",
function()
{
	if(this.get("BorderCollapse")=="Separate")
		return "";
	if(this.Grid.get("BorderCollapseDefault")=="Separate")
		return "";
	if(this.curTable)
		return this.curTable.style.borderCollapse;
	return this.Grid.Element.style.borderCollapse;
},
"getIndentation",
function()
{
	
	var result=this.Indentation;
	if(result==22)
		result=this.Grid.Indentation;
	return result;
}
,"getSortingAlgorithm",
function()
{
	if(this.SortingAlgorithm==0)
		return this.Grid.SortingAlgorithm;
	return this.SortingAlgorithm;
}
,"getSortImplementation",
function()
{
	if(this.SortImplementation==null)
		return this.Grid.SortImplementation;
	return this.SortImplementation;
}
];
for(var i=0;i<igtbl_ptsBand.length;i+=2)
	igtbl_Band.prototype[igtbl_ptsBand[i]]=igtbl_ptsBand[i+1];

function igtbl_expandEffects(values)
{
	this.Delay=values[0];
	this.Duration=values[1];
	this.Opacity=values[2];
	this.ShadowColor=values[3];
	this.ShadowWidth=values[4];
	this.EffectType=values[5];
}
// Cell object
igtbl_Cell.prototype=new igtbl_WebObject();
igtbl_Cell.prototype.constructor=igtbl_Cell;
igtbl_Cell.base=igtbl_WebObject.prototype;
function igtbl_Cell(element,node,row,index)
{
	if(arguments.length>0)
		this.init(element,node,row,index);
}
var igtbl_ptsCell=[
"init",
function(element,node,row,index)
{
	igtbl_Cell.base.init.apply(this,["cell",element,node]);

	var gs=row.OwnerCollection.Band.Grid;
	this.Row=row;
	this.Band=row.Band;
	if(typeof(index)!="number")
		try{index=parseInt(index.toString(),10);}catch(e){}
	this.Column=this.Band.Columns[index];
	this.Index=index;
	var cell=this.Element;
	if(cell)
	{
		cell.Object=this;
		this.NextSibling=cell.nextSibling;
		if(cell.cellIndex==this.Band.firstaActiveCell)
			this.PrevSibling=null;
		else
			this.PrevSibling=cell.previousSibling;
		if(this.Column.MaskDisplay)
			this.MaskedValue=igtbl_getInnerText(cell);
	}
	
	
	if (this.Column.ColumnType==3 && element)
	{
	    var childNodes = null;
	    if(element.childNodes.length>0)
			childNodes = element.childNodes[0].childNodes;
	    for (var chkBoxCount = 0; childNodes && chkBoxCount < childNodes.length ;  chkBoxCount++)
	    {
	        var chkBox = childNodes[chkBoxCount];
	        if(chkBox.tagName=="INPUT" && chkBox.type=="checkbox")
	        {
	            chkBox.unselectable="on";
	            break;
	        }
	    }
	}	
	this._Changes=new Object();
},
"getElement",
function()
{
	if(this._scrElem)
		return this._scrElem;
	return this.Element;
},
"getNodeValue",
function()
{
	if(!this.Node)
		return;
	return igtbl_getNodeValue(this.Node);
},
"setNodeValue",
function(value,displayValue)
{
	if(!this.Node)
		return;
	igtbl_setNodeValue(this.Node,value,displayValue);
},
"getValue",
function(textValue,force)
{
	if(typeof(this.Value)!="undefined" && !textValue && !force)
		return this.Value;
	var value;
	if(this.Node)
		value=this.getNodeValue();
	if(this.Element)
	{
		if(!this.Node)
			value=this.Element.getAttribute(igtbl_sigCellText);
		if(typeof(value)!="string" || textValue)
		{
			value=this.Element.getAttribute(igtbl_sUnmaskedValue);
			if (value) value = unescape(value);			
			if(typeof(value)=="undefined" || value==null)
			{
				var elem=this.Element;				
				if(elem.childNodes.length>0 && elem.childNodes[0].tagName=="NOBR")
					elem=elem.childNodes[0];
				if(this.Column.ColumnType==9 && elem.childNodes.length>0 && elem.childNodes[0].tagName=="A")
					elem=elem.childNodes[0];

                if(this.Row.IsFilterRow)
                {
                    var tempE=null;
                    var chldNodes=elem.childNodes;
                    
                    for (var itr=0;itr<chldNodes.length;itr++)
                    {
                        if (chldNodes[itr].tagName=="SPAN")
                        {
                            tempE=chldNodes[itr];
                            break;
                        }
                    }
                    elem=tempE;
                }
				value=igtbl_getInnerText(elem);
				if(value==" ") value="";
			}
			else if(textValue)
			{
				if(this.MaskedValue)
					value=this.MaskedValue;
				else
					value=value.toString();
			}
			var oCombo=null;
			this.Column.ensureWebCombo();
			if(this.Column.WebComboId)
				oCombo=igcmbo_getComboById(this.Column.WebComboId);
			if(oCombo)
			{
				if(!textValue && !this.Element.getAttribute(igtbl_sUnmaskedValue))
				{
					var oCombo=igcmbo_getComboById(this.Column.WebComboId);
					if(oCombo && oCombo.DataTextField)
					{
						var re=new RegExp("^"+igtbl_getRegExpSafe(value)+"$","gi");
						var column=oCombo.grid.Bands[0].getColumnFromKey(oCombo.DataTextField);
						if(column)
						{
							var cell=column.find(re);
							if(cell && oCombo.DataValueField)
								value=cell.Row.getCellByColumn(oCombo.grid.Bands[0].getColumnFromKey(oCombo.DataValueField)).getValue(true);
						}
						delete re;
					}
				}
			}
			else if(this.Column.ColumnType==3 && this.Element.childNodes.length>0)
			{
				if(!this.Element.getAttribute(igtbl_sUnmaskedValue))
				{
					var chBox=this.Element.childNodes[0];
					while(chBox && chBox.tagName!="INPUT")
						chBox=chBox.childNodes[0];
					value=false;
					if(chBox)
						value=chBox.checked;
					if(textValue)
						value=value.toString();
				}
			}
			else if(this.Column.ColumnType==5 && this.Column.ValueList.length>0)
			{
				
				if(!textValue)
				{
					
					var tempValue = this.Element.getAttribute(igtbl_sigDataValue);
					if ( tempValue != null)
					{
						value = tempValue;
						
						
						for(var i=0;i<this.Column.ValueList.length;i++)
							
							if(this.Column.ValueList[i] && this.Column.ValueList[i][1]==value)
							{
								value=this.Column.ValueList[i][0];
								break;
							}
					}		
				}		
			}
			else if(this.Column.ColumnType==7 && this.Element.childNodes.length>0)
			{
				var button=this.Element.childNodes[0];
				while(button && button.tagName!="INPUT")
					button=button.childNodes[0];
				if(button)
					value=button.value;
			}
			if(typeof(value)=="string" && this.Column.AllowNull && value==this.Column.getNullText())
			{
				if(textValue)
					value=this.Column.getNullText();
				else
					value=null;
			}
		}
	}
	
	else
	{
		if(this.Column.MergeCells)
		{
			
			var upRow=this.Row.getPrevRow();
			if (upRow)
				value=upRow.getCellByColumn(this.Column).getValue();
		}
	}
	if(typeof(value)!="undefined")
	{
		if(!textValue)
		{
		    
			
			value = this.Column.getValueFromString(value);
		}
	}
	else if(textValue)
		value="";
	if(!textValue)
		this.Value=value;
	return value;
},
"setValue",
function(value,fireEvents)
{
	if(typeof(fireEvents)=="undefined")
		fireEvents=true;
	var gn=this.Row.gridId;
	var gs=igtbl_getGridById(gn);
	if(this.Column.DataType!=8 && typeof(value)=="string")
		value=igtbl_string.trim(value);
	if(!gs.insideBeforeUpdate)
	{
		gs.insideBeforeUpdate=true;
		var ev=value;
		if((ev==null || ev==this.Column.getNullText() || typeof(ev)=='undefined') && typeof(ev)!='number' && typeof(ev)!='boolean')
		{
			ev=this.Column.getNullText();
			value=null;
		} 
		else
		{
			ev=ev.toString().replace(/\r\n/g,"\\r\\n");
			
			ev=ev.toString().replace(/\\/g,"\\\\");
			ev=ev.replace(/\"/g,"\\\"");
		}
		var res=fireEvents && this.Element && igtbl_fireEvent(gn,gs.Events.BeforeCellUpdate,"(\""+gn+"\",\""+this.Element.id+"\",\""+ev+"\")");
		gs.insideBeforeUpdate=false;
		if(res==true)
			return;
	}
	var v=value;
	var oldValue=this.getValue();
	if(typeof(value)!="undefined" && value!=null)
	{
		if((oldValue && oldValue.getMonth || this.Column.DataType==7) && typeof(value)=="string")
		{
			if(this.Column.MaskDisplay.substr(0,1).toLowerCase()=="h")
				value="01/01/01 "+value;
			else
			{
				var year="";
				for(var i=value.length-1;i>=0;i--)
				{
					var y=parseInt(value.charAt(i),10);
					if(isNaN(y))
						break;
					else
						year=y.toString()+year;
				}
				if(year && year.length<3)
					value=value.substr(0,i+1)+(parseInt(year,10)+gs.DefaultCentury).toString();
			}
			value=new Date(value);
		}
		if(value.getMonth)
		{
			if(isNaN(value)) value=oldValue;
			v=value;
			if(value)
				value=igtbl_dateToString(value);
		}
	}
	var displayValue=null;
	if(this.Element)
	{
		if(this.Element.getAttribute(igtbl_sigCellText)!=null)
		{
			
			this.Element.setAttribute(igtbl_sigCellText,typeof(value) == "undefined" || value==null?"":value.toString());
			if(this.Node)
				this.Node.setAttribute(igtbl_sigCellText,value==null?"":value);
		}
		else 
		{
			var rendVal=null;
			
			var colEditor = this.Column.getEditorControl();
			if(colEditor && colEditor.getRenderedValue && (rendVal=colEditor.getRenderedValue(v))!=null)
			{
				v=rendVal;
				if(value!=null)
				{	
					colEditor.setValue(v);
					value = colEditor.getValue();
					if(value!=null)
					{
						
						if(typeof(value.getMonth)!="undefined")
							value = igtbl_dateToString(value);
						this.Element.setAttribute(igtbl_sUnmaskedValue,value.toString());
					}
					else
						this.Element.removeAttribute(igtbl_sUnmaskedValue);
				}
				else
					this.Element.removeAttribute(igtbl_sUnmaskedValue);
				this.MaskedValue=v;
			}
			else 
			{
				if(this.Column.AllowNull && (typeof(v)=="undefined" || v==null || typeof(v)=="string" && (v=="" || v==this.Column.getNullText())))
				{
					v=this.Column.getNullText();
					value="";
				}
				else
					v=typeof(value)!="undefined" && value!=null?value.toString():"";
				if(this.Column.MaskDisplay!="")
				{
					if(this.Column.AllowNull && v==this.Column.getNullText())
					{						
						this.Element.setAttribute(igtbl_sUnmaskedValue,null);
						this.MaskedValue=(v==""?" ":v);
					}
					else
					{
						v=igtbl_Mask(gn,v,this.Column.DataType,this.Column.MaskDisplay);
						if(v=="")
						{
							var umv=this.Element.getAttribute(igtbl_sUnmaskedValue);
							if(ig_csom.notEmpty(umv))
								v=igtbl_Mask(gn,umv,this.Column.DataType,this.Column.MaskDisplay);
							else
							{
								v=this.Column.getNullText();
								value="";
							}
						}
						else
						{
							if(this.Column.MaskDisplay=="MM/dd/yyyy" || this.Column.MaskDisplay=="MM/dd/yy" || this.Column.MaskDisplay=="hh:mm" || this.Column.MaskDisplay=="HH:mm" || this.Column.MaskDisplay=="hh:mm tt")
								value=v;
							this.Element.setAttribute(igtbl_sUnmaskedValue,value);
							this.MaskedValue=v;							
						}
					}
				}
				else if(ig_csom.notEmpty(this.Element.getAttribute(igtbl_sUnmaskedValue)))
					
					this.Element.setAttribute(igtbl_sUnmaskedValue,igtbl_string.toString(value));
				if(!(this.Column.AllowNull && v==this.Column.getNullText()))
				{
					if(this.Column.MaskDisplay=="")
					{
						if(typeof(value)!="undefined" && value!=null && this.Column.DataType!=7)
						{
							v=this.Column.getValueFromString(value);
							if(v!=null)
							{
								v=v.toString();
								value=v;
							}
						}							
						if(this.Column.FieldLength>0)
						{
							v=v.substr(0,this.Column.FieldLength);
							value=v;
						}
						if(this.Column.Case==1)
							v=v.toLowerCase();
						else if(this.Column.Case==2)
							v=v.toUpperCase();
					}
				}
			}
			var setInner=true;
			this.Column.ensureWebCombo();
			if(this.Column.WebComboId && typeof(igcmbo_getComboById)!="undefined")
			{
				var oCombo=igcmbo_getComboById(this.Column.WebComboId);
				if(oCombo && oCombo.DataValueField)
				{
					var re=new RegExp("^"+igtbl_getRegExpSafe(value)+"$","gi");
					var column=oCombo.grid.Bands[0].getColumnFromKey(oCombo.DataValueField);
					if(column)
					{
						var cell=column.find(re);
						if(cell && oCombo.Prompt && cell.Row.getIndex()==0)
							cell=column.findNext();
					}
					if(cell && oCombo.DataTextField)
						v=cell.Row.getCellByColumn(oCombo.grid.Bands[0].getColumnFromKey(oCombo.DataTextField)).getValue(true);
					this.Element.setAttribute(igtbl_sigDataValue,value);
					this.Element.setAttribute(igtbl_sUnmaskedValue,value.toString());
					delete re;
				}
			}
			else if(this.Column.ColumnType==3 && this.Element.childNodes.length>0)
			{
				igtbl_dontHandleChkBoxChange=true;
				var chBox=this.Element.childNodes[0];
				while(chBox && chBox.tagName!="INPUT")
					chBox=chBox.childNodes[0];
				if(chBox)
				{
					if(!value || value.toString().toLowerCase()=="false" || v=="0")
						chBox.checked=false;
					else
						chBox.checked=true;
					this.Element.setAttribute("chkBoxState",v);
					
						this.Element.setAttribute(igtbl_sUnmaskedValue,v);
				}
				igtbl_dontHandleChkBoxChange=false;
				setInner=false;
			}
			else if(this.Column.ColumnType==5 && this.Column.ValueList.length>0)
			{
				
				var v2 = value;
				if(this.Column.DataType==11) 
				{
					v2 = this._getBoolFromStringIfPossible(value);
				}
				for(var i=0;i<this.Column.ValueList.length;i++)
				{	
					var valueListValue;
					
					if(this.Column.ValueList[i])
						valueListValue = this.Column.ValueList[i][0];
					if(this.Column.DataType==11) 
					{
						valueListValue = this._getBoolFromStringIfPossible(valueListValue);
					}
					if(valueListValue===v2)					
					
					{
						v=this.Column.ValueList[i][1];
						displayValue=v;
						this.Element.setAttribute(igtbl_sigDataValue,value);
						if(this.Node)
							this.Node.setAttribute(igtbl_sigDataValue,value);
						break;
					}
				}
				if(i==this.Column.ValueList.length)
					this.Element.removeAttribute(igtbl_sigDataValue);
			}
			else if(this.Column.ColumnType==7 && this.Element.childNodes.length>0)
			{
				var button=this.Element.childNodes[0];
				while(button && button.tagName!="INPUT")
					button=button.childNodes[0];
				if(button)
				{
					button.value=v;
					setInner=false;
				}
				else
				{
					button=igtbl_getElementById(gn+"_bt");
					if(button)
						button.value=v;
				}
			}
			if(setInner)
			{
			    
			    var vs =(this.Column.ColumnType==8||this.Column.ColumnType==10)?v:igtbl_string.trim(v);
				var e=this.Element;
				if(vs=="")
				{
					vs=" ";
					e.setAttribute(igtbl_sUnmaskedValue,v);
				}
				
				else if(vs!=v)
					e.setAttribute(igtbl_sUnmaskedValue,v);
				else if(e.getAttribute(igtbl_sUnmaskedValue,"")=="")
					e.removeAttribute(igtbl_sUnmaskedValue);
				e=this.getElement();
				el=e;
				if(el.firstChild && el.firstChild.tagName=="NOBR")
					el=el.firstChild;
				if((this.Column.ColumnType==9 || this.getTargetURL()) && el.firstChild && el.firstChild.tagName=="A")
					el=el.firstChild;

                if(this.Row.IsFilterRow)
                {
                    var tempE=null;
                    var chldNodes=el.childNodes;
                    
                    for (var itr=0;itr<chldNodes.length;itr++)
                    {
                        if (chldNodes[itr].tagName=="SPAN")
                        {
                            tempE=chldNodes[itr];
                            break;
                        }
                    }
                    el=tempE;               
                }
				if((this.Column.ColumnType==9 || this.getTargetURL()) && el.tagName=="A")
				{
					if((value!=" " && vs==" ")||vs=="")
					{
						igtbl_setInnerText(el,"");
						if (	el.parentNode.innerHTML.indexOf(" ")>0 
							&&	el.parentNode.innerHTML.lastIndexOf(" ") < (el.parentNode.innerHTML.length-1)
							&&	el.parentNode.innerHTML.indexOf("&nbsp;")>0 
							&&	el.parentNode.innerHTML.lastIndexOf("&nbsp;") < (el.parentNode.innerHTML.length-1-5)
							) 
						el.parentNode.innerHTML += "&nbsp;";
					}
					else
					{						
						igtbl_setInnerText(el,vs);
					}
				}
				else
					igtbl_setInnerText(el,vs,this.Column.Wrap);
				if(e.getAttribute(igtbl_sigDataValue) && this.Column.ColumnType!=5 && (!this.Column.WebComboId || typeof(igcmbo_getComboById)=="undefined"))
					e.setAttribute(igtbl_sigDataValue,vs);
				
				if(el.tagName=="A" && this.Column.ColumnType==9 && !this.getTargetURL())
					el.href=(v.indexOf('@')>=0?"mailto:":"")+v;
				if(this.Node)
				{
					this.Node.firstChild.text=(e.getAttribute(igtbl_sUnmaskedValue,"")=="")?"&nbsp;":vs;
				}		
			}
		}
	}
	if (this.Node) 
	{
		
		
		var nodeValue=(value==null||value==='')?this.Column.getNullText():value;
		if(this.Column.ColumnType == 7)
			this.setNodeValue("<input type=\"button\" style=\"width:100%;height:100%;\" value=\"" + nodeValue + "\" onclick=\"igtbl_colButtonClick(event,'" + this.Band.Grid.Id + "',null, igtbl_srcElement(event));\" class=\"\" tabindex=\"-1\" />");
		else
			this.setNodeValue(nodeValue,displayValue);
	}
	var newValue=this.getValue(false,true);
	if(!((typeof(newValue)=="undefined" || newValue==null) && (typeof(oldValue)=="undefined" || oldValue==null) || newValue!=null && oldValue!=null && newValue.valueOf()==oldValue.valueOf()))
	{
		this.Row._dataChanged|=2;
		if(typeof(this._oldValue)=="undefined")
		{
			if (oldValue&&oldValue.getMonth)
				oldValue=igtbl_dateToString(oldValue);
			this._oldValue=oldValue;
		}
		if(!this.Row.IsAddNewRow)
			igtbl_saveChangedCell(gs,this,value);
		
		

        
       if (this.Row.IsFilterRow)
       {
            
            var columnFilter = this.Column._getFilterPanel(this.Row.Element);
            var filterOp=parseInt(this._getFilterTypeImage().getAttribute("operator"));
            
            
            
            if(this.Column.DataType==7&&value!=null && value!="")
            {   
                var re = new RegExp("^\\s+");
                value = value.replace(re,"");
            }
            
            
            if (value==null || value=="") filterOp=igtbl_filterComparisionOperator.All;
            
                                   
            columnFilter.setFilter(filterOp , value);
            
            
            if (this.Row.Band.FilterEvaluationTrigger==1)
            {
                
                if (this.Row.Band.Index>0)
                {
                    columnFilter.RowIsland=this.Row.OwnerCollection;
                }
                										
                if (! gs.fireEvent(gs.Events.BeforeRowFilterApplied,[gs.Id,this.Column]) )
                {
                    columnFilter.applyFilter();
                    gs.fireEvent(gs.Events.AfterRowFilterApplied,[gs.Id,this.Column]);
                }
            }
       }
       else
       {
		    
		    gs.invokeXmlHttpRequest(gs.eReqType.UpdateCell,this,value?value.toString():value);
		    if(fireEvents && this.Element)
		    {
			    igtbl_fireEvent(gn,gs.Events.AfterCellUpdate,"(\""+gn+"\",\""+this.Element.id+"\")");
			    if(gs.LoadOnDemand==3 || this.Row.IsAddNewRow)
				    gs.NeedPostBack=false;
		    }
       } 
	}
},
"_getBoolFromStringIfPossible",
function(str)
{
	
	
	if(str==null || str.length==0 || typeof(str)!="string") return str;
	if(str.toLowerCase()=="true") return true;
	if(str.toLowerCase()=="false") return false;
	return str;
}
,
"getRow",
function()
{
	return this.Row;
},
"getNextTabCell",
function(shift,addRow
,filterRow
)
{
	var g=this.Row.Band.Grid;
	var cell=null;
	switch(g.TabDirection)
	{
		case 0:
		case 1:
			if(shift && g.TabDirection==0 || !shift && g.TabDirection==1)
			{			
				
				cell=this;
				do
				{	
					cell=cell.getPrevCell();
					if (!cell) break;
				} while(!cell.Element);				
				if(!cell)
				{
					var row=this.Row.getNextTabRow(true,false,addRow
                        ,filterRow
					);
					if(row && !row.GroupByRow)
					{
						cell=row.getCell(row.cells.length-1);
						do
						{ 
							if(!cell.Column.getVisible() || !cell.Element)
								cell=cell.getPrevCell();
							if (!cell) break;
						} while(!cell.Element);				
					}
				}
			}
			else
			{
				
				cell=this;
				do
				{ 
					cell=cell.getNextCell();
					if (!cell) break;
				} while(!cell.Element);
				if(!cell)
				{
					var row=this.Row.getNextTabRow(false,false,addRow);
					if(row && !row.GroupByRow)
					{
						cell=row.getCell(0);
						do
						{ 
							if(!cell.Column.getVisible() || !cell.Element)
								cell=cell.getNextCell();
							if (!cell) break;
						} while(!cell.Element);				
					}
				}
			}
			break;
		case 2:
		case 3:
			if(shift && g.TabDirection==2 || !shift && g.TabDirection==3)
			{
				var row=this.Row.getPrevRow();
				if(row && row.getExpanded())
				{
					row=this.Row.getNextTabRow(true,false,addRow);
					cell=row.getCell(row.cells.length-1);
					do
					{ 
						if(!cell.Column.getVisible() || !cell.Element)
							cell=cell.getPrevCell();
						if (!cell) break;
					} while(!cell.Element);				
				}
				else if(row)
					cell=row.getCell(this.Index);
				else
				{
					if(this.Index==0)
					{
						row=this.Row.getNextTabRow(true,false,addRow);
						if(row && !row.GroupByRow)
						{
							cell=row.getCell(row.cells.length-1);
							do
							{ 
								if(!cell.Column.getVisible() || !cell.Element)
									cell=cell.getPrevCell();
								if (!cell) break;
							} while(!cell.Element);				
						}
					}
					else
					{
						cell=this.Row.OwnerCollection.getRow(this.Row.OwnerCollection.length-1).getCell(this.Index-1);
						do
						{ 
							if(!cell.Column.getVisible() || !cell.Element)
								cell=cell.getPrevCell();
							if (!cell) break;
						} while(!cell.Element);				
					}
				}
			}
			else
			{
				if(this.Row.getExpanded())
				{
					cell=this.Row.Rows.getRow(0).getCell(0);
					do
					{ 
						if(!cell.Column.getVisible() || !cell.Element)
							cell=cell.getNextCell();
						if (!cell) break;
					} while(!cell.Element);				
				}
				else
				{
					var row=this.Row.getNextRow();
					if(row)
						cell=row.getCell(this.Index);
					else if(this.Index<this.Row.cells.length-1)
					{
						cell=this.Row.OwnerCollection.getRow(0).getCell(this.Index+1);
						do
						{ 
							if(!cell.Column.getVisible() || !cell.Element)
								cell=cell.getNextCell();
							if (!cell) break;
						} while(!cell.Element);				
					}
					else
					{
						row=this.Row.getNextTabRow(false,false,addRow
                        ,filterRow
						);
						if(row && !row.GroupByRow)
						{
							cell=row.getCell(0);
							do
							{ 
								if(!cell.Column.getVisible() || !cell.Element)
									cell=cell.getNextCell();
								if (!cell) break;
							} while(!cell.Element);				
						}
					}
				}
			}
			break;
	}
	return cell;
},
"beginEdit",
function(keyCode)
{
	if(this.isEditable())
	{	
		igtbl_editCell((typeof(event)!="undefined"?event:null),this.Row.gridId,this.Element,keyCode);
		var ec=this.Band.Grid._editorCurrent;
		if(ec)
		{
			ec.setAttribute("noOnBlur",true);
			if(igtbl_isVisible(ec))
				window.setTimeout("igtbl_cancelNoOnBlurTB('"+this.Band.Grid.Id+"','"+ec.id+"')",100);
			else
				ec.removeAttribute("noOnBlur");
		}
	}
},
"endEdit",

function(force)
{
	var ec=this.Column.getEditorControl();
	if(!ec)
		ec=this.Column.Band.Grid._editorCurrent;
	
	
	if(ec && ec.Element)
		ec=ec.Element;
	if(force)
		if(ec && ec.removeAttribute)
			 ec.removeAttribute("noOnBlur");
	if(ec && ec.getAttribute && ec.getAttribute("noOnBlur"))
		return;
	igtbl_hideEdit(this.Row.gridId);
},
"getSelected",
function()
{
	if(this._Changes["SelectedCells"])
		return true;
	return false;
},
"setSelected",
function(select)
{
	var stc=this.Band.getSelectTypeCell();
	if(stc>1)
	{
		if(stc==2)
			this.Band.Grid.clearSelectionAll();
		igtbl_selectCell(this.Row.gridId,this,select);
	}
},
"getNextCell",
function(includeHiddenColumns)
{
	var nc=this.Index+1;
	while(
	    includeHiddenColumns != true && 
	    nc < this.Row.cells.length && !this.Row.getCell(nc).Column.getVisible())
    {
        nc++;
    }
	if(nc<this.Row.cells.length)
		return this.Row.getCell(nc);
	return null;
},
"getPrevCell",
function(includeHiddenColumns)
{
	var pc=this.Index-1;
	while(
	    includeHiddenColumns != true && 
	    pc >= 0 && !this.Row.getCell(pc).Column.getVisible())
	{
        pc--;
    }
	if(pc>=0)
		return this.Row.getCell(pc);
	return null;
},
"activate",
function()
{
	this.Row.Band.Grid.setActiveCell(this);
},
"scrollToView",
function()
{
	var g=this.Row.Band.Grid;
	if(g.UseFixedHeaders)
	{
		var c=this.Column;
		
		
		
		var w=0,i=0,c1=null;
		while(i<c.Index)
		{
			c1=c.Band.Columns[i++];
			if(c1.getVisible())
			{
				if  (!c1.getFixed())
					w+=c1.getWidth();
				
			}
		}
		if(!c.getFixed() && w+c.getWidth()<g._scrElem.scrollLeft)
		{
			igtbl_scrollLeft(g._scrElem,w)
		}
		
		
		igtbl_scrollToView(g.Id,this.Element,c.getWidth(),w,( 
            
            this.Row.IsFilterRow ||
			this.Row.IsAddNewRow) && this.Row.isFixed()?1:0);
		return;
	}
	igtbl_scrollToView(g.Id,this.Element
		,null,null,(
			
			this.Row.IsFilterRow ||   
		this.Row.IsAddNewRow) && this.Row.isFixed()?1:0
	);
},
"isEditable",
function()
{
	var attr="";
	if(this.Node)
		attr=this.Node.getAttribute(igtbl_litPrefix+"allowedit");
	else if(this.Element)
		attr=this.Element.getAttribute("allowedit");
	if(attr=="yes")
		return true;
	if(attr=="no")
		return false;
	if (this.Row.IsFilterRow)
	{
	    
	    return this.Column.AllowRowFiltering != 1;
	}
	return igtbl_getAllowUpdate(this.Row.gridId,this.Column.Band.Index,this.Column.Index)==1;
},


"getEditable",
function()
{
	if(this.Node)
		return this.Node.getAttribute(igtbl_litPrefix+"allowedit");
	else if(this.Element)
		return this.Element.getAttribute("allowedit");
},
"setEditable",
function(bEdit)
{
	if (bEdit==null || typeof(bEdit)=="undefined")
		bEdit=false;
	var attr = 	bEdit?"yes":"no";
	if(this.Node)
		this.Node.setAttribute(igtbl_litPrefix+"allowedit",attr)
	if(this.Element)
		this.Element.setAttribute("allowedit",attr);
	
		
	if(this.Column.ColumnType == 3)
	{
	    var checkboxes = this.Element.getElementsByTagName("input");
	    if(checkboxes.length == 1)
	    {
	        checkboxes[0].disabled = !bEdit;
	    }
	}
},


"hasButtonEditor",
function(cellButtonDisplay)
{
	return this.Column.ColumnType==7
		&& !this.Row.GroupByRow 
		
		&& !this.Row.IsFilterRow
		&& (typeof(cellButtonDisplay) == "undefined" || this.Column.CellButtonDisplay==cellButtonDisplay);
},
"renderActive",
function(render)
{
	var g=this.Row.Band.Grid;
	if(!g.Activation.AllowActivation || !this.Element)
		return;
	var e=this.getElement();
	if(typeof(render)=="undefined") render=true;
	var ao=g.Activation;
	if(render)
	{
		igtbl_setClassName(e,ao._cssClass);
		igtbl_setClassName(e,ao._cssClassL);
		igtbl_setClassName(e,ao._cssClassR);
	}
	else
	{
		igtbl_removeClassName(e,ao._cssClassR);
		igtbl_removeClassName(e,ao._cssClassL);
		igtbl_removeClassName(e,ao._cssClass);
	}
},
"getLevel",
function(s)
{
	var l=this.Row.getLevel();
	l[l.length]=this.Column.Index;
	if(s)
	{
		s=l.join("_");
		igtbl_dispose(l);
		delete l;
		return s;
	}
	return l;
},
"selectCell",
function(selFlag)
{
	var e=this.getElement();
	if(!e)
		return;
	var className=null;
	if(selFlag!=false)
		className=this.Column.getSelClass();
	igtbl_changeStyle(this.Row.gridId,e,className);
},
"select",
function(selFlag,fireEvent)
{
	var gs=this.Column.Band.Grid;
	var gn=gs.Id;
	var cellID=this.Element.id;
	if(gs._exitEditCancel || gs._noCellChange)
		return;
	if(this.Band.getSelectTypeCell()<2)
		return;
	if(igtbl_fireEvent(gn,gs.Events.BeforeSelectChange,"(\""+gn+"\",\""+cellID+"\")")==true)
		return;
	if(selFlag!=false)
	{
		this.selectCell();
		
		gs._recordChange("SelectedCells",this,gs.GridIsLoaded);
		if(!gs.SelectedCellsRows[this.Element.parentNode.id])
			gs.SelectedCellsRows[this.Element.parentNode.id]=new Object();
		gs.SelectedCellsRows[this.Element.parentNode.id][cellID]=true;
	}
	else
	{
		
		if(gs.SelectedCells[cellID] || gs._containsChange("SelectedCells",this))
		{
			gs._removeChange("SelectedCells",this);
			var scr=gs.SelectedCellsRows[this.Element.parentNode.id];
			if(scr && scr[cellID])
				delete scr[cellID];
		}
		if(igtbl_getLength(gs.SelectedCellsRows[this.Element.parentNode.id])==0)
			delete gs.SelectedCellsRows[this.Element.parentNode.id];
		if(!this.Column.Selected && !this.Row.getSelected())
			this.selectCell(false);
	}
	if(fireEvent!=false)
	{
		var gsNPB = gs.NeedPostBack;
		igtbl_fireEvent(gn,gs.Events.AfterSelectChange,"(\""+gn+"\",\""+cellID+"\");");
		if(!gsNPB && !(gs.Events.AfterSelectChange[1]&1))
			gs.NeedPostBack=false;
		if(gs.NeedPostBack)
			igtbl_moveBackPostField(gn,"SelectedCells");
	}	
},
"getOldValue",
function()
{
	return this._oldValue;
},
"getTargetURL",
function()
{
	var url=null;
	if(this.Node && (url=this.Node.getAttribute("targetURL")))
		return url;
	if(this.Element && (url=this.Element.getAttribute("targetURL")))
		return url;
	if(this.Column.ColumnType==9)
		return this.getValue();
	return url;
},
"getTitleModeResolved",
function()
{
    var result;
    if (this.Element)
    {
        result = this.Element.getAttribute("iTM");
    }
    if (!result && this.Band)
    {
        result = this.Band.CellTitleMode;
    }
    if (!result && this.Band && this.Band.Grid)
    {
        result = this.Band.Grid.CellTitleMode;
    }
    return result;
},
"setTargetURL",
function(url)
{
	if(this.Node && this.Node.getAttribute("targetURL"))
		this.Node.setAttribute("targetURL",url);
	if(this.Element && this.Element.getAttribute("targetURL"))
		this.Element.setAttribute("targetURL",url);
	var urls=igtbl_splitUrl(url);
	var el=this.Element;
	if(el)
	{
		if(el.firstChild && el.firstChild.tagName=="NOBR")
			el=el.firstChild;
		if(el.firstChild && el.firstChild.tagName=="A")
			el=el.firstChild;
	}
	if(this.Column.ColumnType==9)
		this.setValue(urls[0]);
	if(el && el.tagName=="A")
	{
		if(this.Column.ColumnType!=9)
			el.href=urls[0];
		if(urls[1])
			el.target=urls[1];
		else
			el.target="_self";
	}
	igtbl_dispose(urls);
}
,"_getFilterTypeImage",
function()
{
    if (!this.Row.IsFilterRow)return null;
    return this._getFilterTypeImageRecus(this.Element.childNodes);
},
"_getFilterTypeImageRecus",
function(elements)
{
    if (elements!=null)
    {
        for(var itr = 0; itr < elements.length ; itr++)
        {
            if (elements[itr].tagName=="IMG")
                return elements[itr];
            else
                return  this._getFilterTypeImageRecus(elements[itr].childNodes);
        }
    }
    return null;
},
"_setFilterTypeImage",
function(filterType)
{
    
    var g=this.Row.Band.Grid;
    for (var itr=0;itr<g.FilterButtonImages.length;itr++)
    {
        var fbi=g.FilterButtonImages[itr];
        if(filterType==fbi[0])
        {
            var img = this._getFilterTypeImage();
            if(img)
            {
                img.src=fbi[1];
                img.alt=img.title=fbi[2];
                img.setAttribute("operator",filterType);
            }
        }
    }
}
];
for(var i=0;i<igtbl_ptsCell.length;i+=2)
	igtbl_Cell.prototype[igtbl_ptsCell[i]]=igtbl_ptsCell[i+1];

// Column object
igtbl_Column.prototype=new igtbl_WebObject();
igtbl_Column.prototype.constructor=igtbl_Column;
igtbl_Column.base=igtbl_WebObject.prototype;
function igtbl_Column(node,band,index,nodeIndex,colInitArray)
{
	if(arguments.length>0)
		this.init(node,band,index,nodeIndex
			,colInitArray
		);
}
var igtbl_ptsColumn=[
"init",
function(node,band,index,nodeIndex
	,colInitArray
)
{
	igtbl_Column.base.init.apply(this,["column",null,node]);

	this.Band=band;
	this.Index=index;
	this.Id=(band.Grid.Id
		+"_"
		+"c_"+band.Index.toString()+"_"+index.toString());
	if(band.ColFootersVisible==1)
		this.fId=(band.Grid.Id
			+"_"
			+"f_"+band.Index.toString()+"_"+index.toString());
	var defaultProps=new Array("Key","HeaderText","DataType","CellMultiline","Hidden","AllowGroupBy","AllowColResizing","AllowUpdate",
		"Case","FieldLength","CellButtonDisplay","HeaderClickAction","IsGroupBy","MaskDisplay","Selected",
		"SortIndicator","NullText","ButtonClass","SelCellClass","SelHeadClass","ColumnType","ValueListPrompt",
		"ValueList","ValueListClass","EditorControlID","DefaultValue","TemplatedColumn","Validators",
		"CssClass","Style","Width","AllowNull","Wrap","ServerOnly","HeaderClass","ButtonStyle","Fixed","FooterClass",
		"FixedHeaderIndicator","FooterText","HeaderStyle","FooterStyle","HeaderWrap"
		,"HeaderImageUrl","HeaderImageAltText","HeaderImageHeight","HeaderImageWidth"
		,"MergeCells"
		,"DefaultFilterList","RowFilterMode","AllowRowFiltering","GatherFilterData"
		,"FilterIcon"
        ,"HeaderTitleMode"
        
        ,"FilterOperatorDefaultValue"
        
        ,"FilterComparisonType"
		,"SortingAlgorithm"
        ,"SortCaseSensitive"
								);
	var columnArray;
	columnArray=colInitArray;
	if(columnArray)
	{
		for(var i=0;i<columnArray.length;i++)
			this[defaultProps[i]]=columnArray[i];
		if(this.Key && this.Key.length>0)
		this.Key = unescape(this.Key);
		if(this.HeaderText&&this.HeaderText.length>0)
			this.HeaderText = unescape(this.HeaderText);
		if(this.HeaderImageUrl&&this.HeaderImageUrl.length>0)
			this.HeaderImageUrl = unescape(this.HeaderImageUrl);
		if(this.HeaderImageAltText&&this.HeaderImageAltText.length>0)
			this.HeaderImageAltText = unescape(this.HeaderImageAltText);
		
		this._AltCssClass=this.Band.getRowAltClassName()+(this.CssClass?" ":"")+this.CssClass;
		this.CssClass=this.Band.getRowStyleClassName()+(this.CssClass?" ":"")+this.CssClass;		
	}
	this.ensureWebCombo();
	if(node)
	{
		this.Node.setAttribute("index",index+1);
		this.Node.setAttribute("cellIndex",nodeIndex+1);
	}
	igtbl_dispose(defaultProps);
	if(this.EditorControlID)
		this.editorControl=igtbl_getElementById(this.EditorControlID);

	if(this.Validators && this.Validators.length>0 && typeof(Page_Validators)!="undefined")
	{
		for(var i=0;i<this.Validators.length;i++)
		{
			var val=igtbl_getElementById(this.Validators[i]);
			if(val)
				val.enabled=false;
		}
	}
	this._Changes=new Object();
	this.SortImplementation=null;
},

"getEditorControl",
function()
{
	if(!this.editorControl)
		return null;
	if(this.editorControl.Object)
		this.editorControl=this.editorControl.Object;
	return this.editorControl;
},
"getAllowUpdate",
function()
{
	var g=this.Band.Grid;
	var res=g.AllowUpdate;
	if(this.Band.AllowUpdate!=0)
		res=this.Band.AllowUpdate;
	if(this.AllowUpdate!=0)
		res=this.AllowUpdate;
	if(this.TemplatedColumn&2)
		res=2;
	return res;
},
"setAllowUpdate",
function (value)
{	
	this.AllowUpdate=value;
	switch (this.DataType)
	{
		case 11:  
			igtbl_AdjustCheckboxDisabledState(this, this.Band.Index,this.Band.Grid.Rows,this.getAllowUpdate());
			break;			
	}
},
"getHidden",
function()
{
	return this.Hidden;
},
"setHidden",
function(h)
{
	if(this.Node)
	{
		if(h===false)
			this.Node.removeAttribute("hidden");
		else
			this.Node.setAttribute("hidden",true);
	}
	igtbl_hideColumn(this.Band.Grid.Rows,this,h);
	this.Hidden=h;
	if(this.Band.Index==0)
		this.Band.Grid.alignStatMargins();
	var ac=this.Band.Grid.getActiveCell();
	if(ac && ac.Column==this && h)
		this.Band.Grid.setActiveCell(null);
	else
		this.Band.Grid.alignGrid();
},
"getVisible",
function()
{
	return !this.getHidden() && this.hasCells();
},
"hasCells",
function()
{
	return !this.ServerOnly && (!this.IsGroupBy || this.Band.GroupByColumnsHidden==2);
},
"getNullText",
function()
{
	return igtbl_getNullText(this.Band.Grid.Id,this.Band.Index,this.Index);
},
"find",
function(re,back)
{
	var g=this.Band.Grid;
	if(re)
		g.regExp=re;
	if(!g.regExp || !this.hasCells())
		return null;
	g.lastSearchedCell=null;
	if(back==true || back==false)
		g.backwardSearch=back;
	var row=null;
	if(!g.backwardSearch)
	{
		row=g.Rows.getRow(0);
		if(row && row.getHidden())
			row=row.getNextRow();
		while(row && (row.Band!=this.Band || row.getCellByColumn(this).getValue(true).search(g.regExp)==-1))
			row=row.getNextTabRow(false,true);
	}
	else
	{
		var rows=g.Rows;
		while(rows)
		{
			row=rows.getRow(rows.length-1);
			if(row && row.getHidden())
				row=row.getPrevRow();
			if(row && row.Expandable)
				rows=row.Rows;
			else
			{
				if(!row)
					row=rows.ParentRow;
				rows=null;
			}
		}
		while(row && (row.Band!=this.Band || row.getCellByColumn(this).getValue(true).search(g.regExp)==-1))
			row=row.getNextTabRow(true,true);
	}
	g.lastSearchedCell=(row?row.getCellByColumn(this):null);
	return g.lastSearchedCell;
},
"hideValidators",
function()
{
	
	if(!this.Validators)
		return;
	for(var v = 0; v < this.Validators.length; v++)
	{
		var validator = document.getElementById(this.Validators[v]);
		validator.isvalid = true;
		ValidatorUpdateDisplay(validator);
	}
},
"findNext",
function(re,back)
{
	var g=this.Band.Grid;
	if(!g.lastSearchedCell || g.lastSearchedCell.Column!=this)
		return this.find(re,back);
	if(re)
		g.regExp=re;
	if(!g.regExp)
		return null;
	if(back==true || back==false)
		g.backwardSearch=back;
	var row=g.lastSearchedCell.Row.getNextTabRow(g.backwardSearch,true);
	while(row && (row.Band!=this.Band || row.getCellByColumn(this).getValue(true).search(g.regExp)==-1))
		row=row.getNextTabRow(g.backwardSearch,true);
	g.lastSearchedCell=(row?row.getCellByColumn(this):null);
	return g.lastSearchedCell;
},
"getFooterText",
function()
{
	var fId=this.Band.Grid.Id
		+"_"
		+"f_"+this.Band.Index+"_"+this.Index;
	var foot=igtbl_getElementById(fId);
	if(foot)
		return igtbl_getInnerText(foot);
	return "";
},
"setFooterText",
function(value,useMask)
{
	var fId=this.Band.Grid.Id
		+"_"
		+"f_"+this.Band.Index+"_"+this.Index;
	var foot=igtbl_getDocumentElement(fId);
	if(foot)
	{
		if(useMask && this.MaskDisplay)
			value=igtbl_Mask(this.Band.Grid.Id,value.toString(),this.DataType,this.MaskDisplay);
		else if(useMask && this.getEditorControl() && this.editorControl.getRenderedValue)
			value=this.getEditorControl().getRenderedValue(value);
		if(igtbl_string.trim(value)=="")
			value="&nbsp;";
		if(!foot.length)
			foot=[foot];
		var fElem=foot[0];
		if(fElem.childNodes.length>0 && fElem.childNodes[0].tagName=="NOBR")
			value="<nobr>"+value+"</nobr>";
		for(var i=0;i<foot.length;i++)
		{
			fElem=foot[i];
			fElem.innerHTML=value;
		}
	}
},
"getSelClass",
function()
{
	if(this.SelCellClass!="")
		return this.SelCellClass;
	return this.Band.getSelClass();
},
"getHeadClass",
function()
{
	if(this.HeaderClass!="")
		return this.HeaderClass;
	return this.Band.getHeadClass();
},
"getFooterClass",
function()
{
	if(this.FooterClass!="")
		return this.FooterClass;
	return this.Band.getFooterClass();
},
"compareRows",
function(row1,row2)
{
	if(igtbl_columnCompareRows)
		return igtbl_columnCompareRows.apply(this,[row1,row2]);
	return 0;
},
"compareCells",
function(cell1,cell2)
{
	if(igtbl_columnCompareCells)
		return igtbl_columnCompareCells.apply(this,[cell1,cell2]);
	return 0;
},
"move",
function(toIndex)
{
	if(!this.Node) return;

	var band=this.Band;
	var bandNo=band.Index;
	var gs=band.Grid;
	if(bandNo==0 && !band.IsGrouped)
	{
		var arIndex=-1,acColumn=null,acrIndex=-1;
		if(gs.oActiveRow && gs.oActiveRow.OwnerCollection==gs.Rows)
			arIndex=gs.oActiveRow.getIndex();
		if(gs.oActiveCell && gs.oActiveCell.Row.OwnerCollection==gs.Rows)
		{
			acColumn=gs.oActiveCell.Column;
			acrIndex=gs.oActiveCell.Row.getIndex();
		}
		gs.setActiveRow(null);
		gs.setActiveCell(null);
		
		if((gs.StatHeader || gs.StatFooter) && gs.Rows.FilterRow)
        {
			var parent = gs.Rows.FilterRow.Element;
            var cell=parent.cells[this.Index];
            var insertCell=parent.cells[toIndex];
            parent.removeChild(cell);
            if(toIndex>this.Index)
            {
				var shouldAppend = (insertCell.nextSibling == null);
				if(shouldAppend) parent.appendChild(cell);
				else parent.insertBefore(cell, insertCell.nextSibling);
            }
            else
				parent.insertBefore(cell, insertCell);
			var cellObj = gs.Rows.FilterRow.cells[this.Index];
			gs.Rows.FilterRow.cells[this.Index] = gs.Rows.FilterRow.cells[toIndex];
			gs.Rows.FilterRow.cells[toIndex] = cellObj;
            cell=parent.cells[band.firstActiveCell];
            for(var i=0;i<band.Columns.length && cell;i++)
				if(band.Columns[i].hasCells())
				{
					var splitId=cell.id.split("_");
					splitId[splitId.length-1]=i.toString();
					cell.id=splitId.join("_");
					cellObj = gs.Rows.FilterRow.cells[i];
					if(cellObj)
					{
						cellObj.index = i;
						cellObj.Id = cell.id;
					}
					cell=cell.nextSibling;
				}
        }
		this._move(toIndex);
		gs.Rows.repaint();
		if(arIndex!=-1)
			gs.Rows.getRow(arIndex).activate();
		
		if(acColumn && acrIndex>=0)
			gs.Rows.getRow(acrIndex).getCellByColumn(acColumn).activate();
	}
	else
	{
		var elem=igtbl_getDocumentElement(this.Id);
		var rAr=new Array();
		if(typeof(elem)!="undefined")
		{
			if(!elem.length)
				elem=[elem];
			for(var i=0;i<elem.length;i++)
			{
				var pe=elem[i].parentNode.parentNode.parentNode.parentNode;
				if(pe.tagName=="DIV" && pe.id.substr(pe.id.length-4)=="_drs")
					pe=pe.parentNode.parentNode.parentNode.parentNode.parentNode;
				var ps=pe.parentNode.previousSibling;
				if(ps)
					rAr[i]=igtbl_getRowById(ps.id);
			}
		}
		var arIndex=-1,acColumn=null,acrIndex=-1,aRows=null;
		if(gs.oActiveRow)
		{
			arIndex=gs.oActiveRow.getIndex();
			aRows=gs.oActiveRow.OwnerCollection;
			if(aRows.Band.Index>=bandNo)
				gs.setActiveRow(null);
		}
		if(gs.oActiveCell)
		{
			acColumn=gs.oActiveCell.Column;
			acrIndex=gs.oActiveCell.Row.getIndex();
			aRows=gs.oActiveCell.Row.OwnerCollection;
			if(aRows.Band.Index>=bandNo)
				gs.setActiveCell(null);
		}
		this._move(toIndex);
		for(var i=0;i<rAr.length;i++)
		{
			if(rAr[i])
			{
				rAr[i].Rows.repaint();
				if(aRows==rAr[i].Rows)
				{
					if(arIndex!=-1)
						aRows.getRow(arIndex).activate();
					if(acColumn)
						aRows.getRow(acrIndex).getCellByColumn(acColumn).activate();
					aRows=null;
				}
				rAr[i]=null;
			}
		}
		igtbl_dispose(rAr);
		delete rAr;
	}
},
"_move",
function(toIndex)
{
	
	oldIndex=this.Index;
	this.Band.Grid._recordChange("ColumnMove",this,toIndex);
	var b=this.Band,oldSortedColumn=null;
	if (b.SortedColumns&&b.SortedColumns.length>0)
	{
		oldSortedColumn=new Array();
		for(var i=0;i<b.SortedColumns.length;i++)
			for (var j=0;j<b.Columns.length;j++)
				if(b.Columns[j].Id==b.SortedColumns[i])
				{
					oldSortedColumn[i]=b.Columns[j];
					break;
				}
	}
	this.Band.insertColumn(this.Band.removeColumn(this.Index),toIndex);
	if (oldSortedColumn)
		for(var i=0;i<oldSortedColumn.length;i++)
		{
			b.SortedColumns[i]=oldSortedColumn[i].Id;
			oldSortedColumn[i]=null;
		}
	igtbl_dispose(oldSortedColumn);
	igtbl_swapCells(this.Band.Grid.Rows,this.Band.Index,oldIndex,toIndex);
},
"_filterOnBand",
function(bandIndex,recordSet)
{
	var band = this.Band;
	if (!recordSet || band.Index > bandIndex) return;	
	if(bandIndex==recordSet.Band.Index)
	{
		this._filterOnRowIsland(recordSet);
	}
	else
	{
		var recordsetLength = recordSet.length;
		for (var itr = 0 ; itr < recordsetLength ; itr++)
		{
			this._filterOnBand(bandIndex,recordSet.getRow(itr).Rows);
		}		
	}
},
"_filterOnRowIsland",
function(rowCollection)
{
	
	var siblingRows = null;
	if (rowCollection)
	{
		siblingRows = rowCollection;
	}
	else
	{
		
		
		if ( (this.Band.Index==0 && this.Band.GroupCount == 0)
		)
		{
			siblingRows = this.Band.Grid.Rows;
		}
		else
		{
			
			
			var colE = this.Band.Grid.event.srcElement;
			if(!colE)
				this.Band.Grid.event.target;			
			
			var parentTable = colE;
			do
			{
				parentTable = parentTable.parentNode;
			}while (parentTable && !(parentTable.tagName=="DIV" && parentTable.id.length>0)  )
			
			if (!parentTable)return;
			
			var parentRow = igtbl_getRowById(parentTable.id.slice(0,parentTable.id.length-7) );
			
			if (parentRow)			
				siblingRows=parentRow.Rows;
			else
				siblingRows=this.Band.Grid.Rows;
		}
	}
	var srCount = siblingRows.length;
	var cellIndex = this.Index;
	var oFilterConditions = null;
	if(this.Band.Index==0 && this.Band.GroupCount == 0)
	{
		oFilterConditions = this.Band._filterPanels;
	}
		
	else if( (this.Band.Columns[0].RowFilterMode==1 && this.Band.GroupCount == 0) 
	)
	{
		
		oFilterConditions = this.Band._filterPanels;
	}
	else 
	{
		
		oFilterConditions = this.Band._filterPanels[siblingRows.Element.parentNode.id];
	}
	
	var myFilterCondition = oFilterConditions[this.Id];
	if (myFilterCondition && myFilterCondition.IsActive())
	{
		var myDirectColumnHeader = igtbl_getChildElementById(siblingRows.Element.parentNode,myFilterCondition.Column.Id);
		
		if  (this.Band.Index==0&&this.Band.Grid.StatHeader)
		{
			myDirectColumnHeader=this.Band.Grid.StatHeader.getElementByColumn(this)
		}
		else
		{
			myDirectColumnHeader=igtbl_getChildElementById(siblingRows.Element.parentNode,myFilterCondition.Column.Id);
		}
		if(myDirectColumnHeader)
		{
			
			var filterImg = this._findFilterImage(myDirectColumnHeader);
			if(filterImg)
			{
				
				var alt = filterImg.getAttribute("alt");
				if (myFilterCondition.getOperator()==igtbl_filterComparisionOperator.All)
				{
					filterImg.src = this.Band.Grid.FilterDefaultImage;
					if(alt != null)
					{
						var clpsAlt = filterImg.getAttribute("igAltF0");
						if(clpsAlt != null){
							filterImg.setAttribute("igAltF1",alt);						
							filterImg.setAttribute("alt",clpsAlt);
							filterImg.removeAttribute("igAltF0");
						}
					}
				}
				else
				{
					filterImg.src = this.Band.Grid.FilterAppliedImage;
					if(alt != null)
					{
						var clpsAlt = filterImg.getAttribute("igAltF1");
						if(clpsAlt != null){
							filterImg.setAttribute("igAltF0",alt);						
							filterImg.setAttribute("alt",clpsAlt);
							filterImg.removeAttribute("igAltF1");
						}
					}
				}
			}
		}
	}
	for (var srCounter = 0 ; srCounter < srCount ; srCounter++)
	{
		
		this._evaluateFilters(siblingRows.getRow(srCounter),oFilterConditions, this.Band);
	}
},
"_findFilterImage",
function(elem)
{
	if (elem.tagName=="IMG" && elem.getAttribute("imgType")=="filter")
		return elem;
	for(var itr = 0; itr < elem.childNodes.length ; itr++)
	{
		var e = this._findFilterImage(elem.childNodes[itr]);
		if (e) return e;
	}
	return null;
},
"_evaluateFilters",
function(oRow,oFilterCollection,oBand)
{
		
		if (oRow.GroupByRow)
		{
			var srCount=oRow.Rows.length;
			for (var srCounter = 0 ; srCounter<srCount;srCounter++)
			{
				
				this._evaluateFilters(oRow.Rows.getRow(srCounter),oFilterCollection,oBand);
			}
			return;
		}
		
		
		
		var showRow = true;
		for (var filter in oFilterCollection)
		{
			filter = oFilterCollection[filter];
			if (filter.IsActive())
			{
                var filterCol=filter.Column;
                
                var evalValue=filter.getEvaluationValue();
                var cellValue=oRow.getCell(filterCol.Index).getValue();
                
                switch(filterCol.DataType)
                {
					case 7:
					{
						if(evalValue)
							evalValue= new Date(evalValue).valueOf();
						if(cellValue)
							cellValue= new Date(cellValue).valueOf();
						break;
					}
					case 11:
					{
						if(evalValue)
							evalValue= igtbl_string.stringToBool(evalValue);
						if(cellValue)
							cellValue= igtbl_string.stringToBool(cellValue);
					}
                }
				if(! this._evaluateExpression(filter.getOperator(),cellValue,evalValue
                    , filterCol.FilterComparisonType,filterCol.DataType
				 ))
				{
					showRow = false;
					break;
				}
			}	
		}
		// throw row filtering event passing in row and the value of the hidden field, if cancelled then dont change value of hidden		
		if (oRow.getHidden() != !showRow)
			oRow.setHidden(!showRow);
},
"_evaluateExpression",
function(operator, operand1, operand2
    , caseSensitive, columnDataType
)
{

    operator = parseInt(operator);
	switch(operator)
	{
		case(igtbl_filterComparisionOperator.NotEmpty):
		{
			return operand1 && (typeof(operand1)=="string" ? operand1.length > 0 : true);
			break;		
		}
		case(igtbl_filterComparisionOperator.Empty):
		{
			if (operand1===null) return true;
			if (typeof(operand1)=="string")
				return operand1.length == 0 ;
			return false;	
			break;		
		}
		case(igtbl_filterComparisionOperator.All):
		{
			return true;
			break;		
		}		
		case(igtbl_filterComparisionOperator.Equals):
		{
            
            if (caseSensitive==igtbl_filterComparisonType.CaseInsensitive && columnDataType==8 && operand1 && operand2)
            {
                operand2=operand2.replace("?",".");
                operand2=operand2.replace("*",".*");
                operand2=igtbl_regExp.escape(operand2, [".", "*"]);
                var re = new RegExp("^"+operand2+"$","i");
                return operand1.match(re) != null;   
            }
            else
			    return operand1 == operand2;
			break;
		}
		case(igtbl_filterComparisionOperator.NotEquals):
		{
            
            if (caseSensitive==igtbl_filterComparisonType.CaseInsensitive && columnDataType==8 && operand1 && operand2)
            {
                operand2=operand2.replace("?",".");
                operand2=operand2.replace("*",".*");
                operand2=igtbl_regExp.escape(operand2, [".", "*"]);
                var re = new RegExp("^"+operand2+"$","i");
                return operand1.match(re) == null;   
            }
            else
			    return operand1 != operand2;
			break;
		}
		case(igtbl_filterComparisionOperator.Like):
		{
		    if(columnDataType==8)
		    {		        
                operand2=operand2.replace("?",".");
                operand2=operand2.replace("*",".*");
                operand2=igtbl_regExp.escape(operand2, [".", "*"]);
		        var re = new RegExp("^"+operand2, caseSensitive==1?"i":"");
		        return operand1 && operand1.match(re);
		        
		    }
		    return false;
		    break;
		}		
		case(igtbl_filterComparisionOperator.NotLike):
		{
		    if(columnDataType==8)
		    {	
		        
		        var likeMatches = this._evaluateExpression(igtbl_filterComparisionOperator.Like,operand1,operand2, caseSensitive, columnDataType) || this._evaluateExpression(igtbl_filterComparisionOperator.Equals,operand1,operand2, caseSensitive, columnDataType);
                return !likeMatches;	    
                //return ! this._evaluateExpression(igtbl_filterComparisionOperator.Like,operand1,operand2, caseSensitive, columnDataType) || this._evaluateExpression(igtbl_filterComparisionOperator.Equals,operand1,operand2, caseSensitive, columnDataType);
		    }
		    return false;
		    break;
		}
		case(igtbl_filterComparisionOperator.GreaterThan):
		{
		     if(columnDataType==8)
		     {
                if(operand1==null) return false;
                if(operand1 && operand2==null)return true;
		        if (caseSensitive==igtbl_filterComparisonType.CaseInsensitive)
		        {
                    return operand1.toLowerCase() > operand2.toLowerCase();
		        }
		        else
		        {
		            return operand1>operand2;
		        }
		     }
		     else
		     {
		        return operand1 > operand2;
		     }
		     break;
		}
		case(igtbl_filterComparisionOperator.GreaterThanOrEqualTo):
		{
		    return this._evaluateExpression(igtbl_filterComparisionOperator.GreaterThan,operand1,operand2, caseSensitive, columnDataType) || this._evaluateExpression(igtbl_filterComparisionOperator.Equals,operand1,operand2, caseSensitive, columnDataType);
		    break;
		}
		case(igtbl_filterComparisionOperator.LessThanOrEqualTo):
		{
		    return (! this._evaluateExpression(igtbl_filterComparisionOperator.GreaterThan,operand1,operand2, caseSensitive, columnDataType)) || this._evaluateExpression(igtbl_filterComparisionOperator.Equals,operand1,operand2, caseSensitive, columnDataType);
		    break;
		}		
		case(igtbl_filterComparisionOperator.LessThan):
		{
		    return (! this._evaluateExpression(igtbl_filterComparisionOperator.GreaterThanOrEqualTo,operand1,operand2, caseSensitive, columnDataType));
		    break;
		}
		case(igtbl_filterComparisionOperator.StartsWith):
		{
            if(columnDataType==8)
            {
                if(operand1==null) return false;
                if(operand1 && operand2==null)return true;
                
                operand2=operand2.replace("?","\\?");
                operand2=operand2.replace("*","\\*");
                operand2=igtbl_regExp.escape(operand2, [".", "*"]);
                var re = new RegExp("^"+operand2, caseSensitive==1?"i":"");
		        return operand1 && operand1.match(re);
            }
            break;
		}
		case(igtbl_filterComparisionOperator.DoesNotStartWith):
		{
             return (! this._evaluateExpression(igtbl_filterComparisionOperator.StartsWith,operand1,operand2, caseSensitive, columnDataType));
            break;
        }			
		case(igtbl_filterComparisionOperator.EndsWith):
		{
            if(columnDataType==8)
            {
                if(operand1==null) return false;
                if(operand1 && operand2==null)return true;
                
                operand2=operand2.replace("?","\\?");
                operand2=operand2.replace("*","\\*");
                operand2=igtbl_regExp.escape(operand2, [".", "*"]);
                var re = new RegExp(operand2+"$", caseSensitive==1?"i":"");
		        return operand1 && operand1.match(re);
            }
            break;
		}
		case(igtbl_filterComparisionOperator.DoesNotEndWith):
		{
            return (! this._evaluateExpression(igtbl_filterComparisionOperator.EndsWith,operand1,operand2, caseSensitive, columnDataType));
            break;
		}			
		case(igtbl_filterComparisionOperator.Contains):
		{
            if(columnDataType==8)
            {
                if(operand1==null) return false;
                if(operand1 && operand2==null)return true;
                var re = new RegExp(igtbl_regExp.escape(operand2), caseSensitive==1?"i":"");
		        return operand1 && operand1.match(re);
            }
            break;
		}
		case(igtbl_filterComparisionOperator.DoesNotContain):
		{
            return (! this._evaluateExpression(igtbl_filterComparisionOperator.Contains,operand1,operand2, caseSensitive, columnDataType));
            break;
		}
	}
},
"_fillFilterList",
function(vc, sr)
{
	
	
	var srCount=sr.length;
	var cellIndex=this.Index;
	var oCell=null;
	var oRow=null;
	
	for (var srCounter=0;srCounter<srCount;srCounter++)
	{
		oRow = sr.getRow(srCounter);
		var cellValue;
		var cellText;
		if (!oRow.GroupByRow)
		{
			oCell = oRow.getCell(cellIndex);
			
            
            
			cellValue=oCell.getValue();
			cellText=oCell.getValue(true);
			
			if (cellValue!=null && typeof(cellValue.getFullYear)=="function" )
			{
				cellValue=igtbl_dateToString(cellValue);
			}
			
			if( cellText )
			{
				if( (typeof(cellValue)=="string" && cellValue.length==0)  || (typeof(cellText)=="string" && cellText.length==0))
					continue;
				
				if(ig_shared.IsFireFox)
				{
					cellText = cellText.replace(/\r\n/g," ");
					cellText = cellText.replace(/\n/g," ");
					if(typeof(cellValue)=="string")
						cellValue=cellText;
				}
				vc.push( [cellValue,cellText] );
			}	
		}
		else
		{
			this._fillFilterList(vc,oRow.Rows);
		}
	}
},
"_getSiblingRowIsland",
function()
{
	var siblingRows = null;
	
	
	if (this.Band.Index==0 && this.Band.GroupCount==0)
	{
		siblingRows = this.Band.Grid.Rows;
	}
	else
	{
		
				
		var colE=null;
		try{
			
			colE=this.Band.Grid.event.srcElement;
			if(!colE)colE=this.Band.Grid.event.target;		
		}
		catch(e)
		{
			
			colE=this._filterSrcElement;
			delete this._filterSrcElement;
		}
		if(!colE) return null;
		
		var parentTable=colE;
		do
		{
			parentTable = parentTable.parentNode;
		}while (parentTable && !(parentTable.tagName=="TABLE" && parentTable.id.length>0))
		if (!parentTable)return;		
		var parentRow=igtbl_getRowById(parentTable.id);
		
		if (!parentRow)
			siblingRows=this.Band.Grid.Rows;
		else
			siblingRows=parentRow.Rows;
	}
	return siblingRows;
},
"_getFilterValuesFromSiblings",
function(rowCollection)
{
	
	var siblingRows = null;
	if (rowCollection)
	{
		siblingRows = rowCollection;
	}
	else
	{
		siblingRows = this._getSiblingRowIsland();
	}	
	
	var workingList = new Array();
	
	if(!siblingRows || siblingRows.length==0)
	{}
	else
	{
		this._fillFilterList(workingList , siblingRows);
			
		if(this.DataType==2 || this.DataType==3  || this.DataType==16 || this.DataType==17 || this.DataType==18 || this.DataType==19 || this.DataType==20 || this.DataType==21)
			workingList.sort(_igtbl_sortNumber);
		else
			workingList.sort();	
	}
	return workingList;
},

"_getFilterPanel",
function(sourceElement)
{


    var filterPanel = null;
	var band = this.Band;	    
	var g = band.Grid;		
	
	if (this.RowFilterMode == 2) 
	{		
		if (band.Index == 0 && band.GroupCount == 0)
		{
			if (!band._filterPanels[this.Id])
			{
				band._filterPanels[this.Id] = new igtbl_FilterDropDown(this);
			}
			filterPanel = band._filterPanels[this.Id];
			filterPanel.RowIsland = g.Rows;
		}
		else
		{
		    			
		    var colE = sourceElement;
		   		    
		    if(!colE)			
			    colE=g.event.srcElement;
			
			
			if(!colE)
				colE=g.event.target;
			
			var parentTable = colE;			
			
			
			if(band.Index==0&&band.IsGrouped&&(g.StationaryMargins==1||g.StationaryMargins==3)&&g.get("StationaryMarginsOutlookGroupBy")=="True")
			{
				parentTable=g.Rows.Element;
			}
			do
			{
				parentTable = parentTable.parentNode;
			}while (parentTable && !(parentTable.tagName=="TABLE" && parentTable.id.length>0))
			if (!parentTable)return;
			
			
			filterPanel = band._filterPanels[parentTable.id];
			if(filterPanel)
				filterPanel = filterPanel[this.Id];
			else
			{
				band._filterPanels[parentTable.id] = new Object();
			}
			if (!filterPanel)
			{
				filterPanel = band._filterPanels[parentTable.id][this.Id] = new igtbl_FilterDropDown(this);
			}
			if(filterPanel.RowIsland==null || filterPanel.RowIsland.Type!="rows")
			{
		        var row = igtbl_getRowById(parentTable.id);
		        if (row)
			        filterPanel.RowIsland = row.Rows;
		        else
		        {
			        
		            			        
			        if(band.Index==0&&band.IsGrouped&&(g.StationaryMargins==1||g.StationaryMargins==3)&&g.get("StationaryMarginsOutlookGroupBy")=="True")
			        {
				        filterPanel.RowIsland = g.Rows;
			        }
		        }
			}
		}
	}
	else if (this.RowFilterMode == 1)
	{
		
		filterPanel = band._filterPanels[this.Id];
		if (!filterPanel)
		{
			filterPanel = band._filterPanels[this.Id] = new igtbl_FilterDropDown(this);
		}
		
		if(band.Index==0&&band.IsGrouped)
		{
			filterPanel.RowIsland = g.Rows;
		}		
	}
	else
	{
		return null;
	}
	return filterPanel;
},
"_getFilterValuesFromBand",
function()
{	
	var resultSet ;	
	
	if (this.Band.Index==0 && !this.Band.IsGrouped)
	{
		
		resultSet = this._getFilterValuesFromSiblings();
	}
	else
	{
		
		resultSet = this._fillFilterListFromBand(this.Band.Index, this.Band.Grid.Rows);
	}
	
	if(this.DataType==2 || this.DataType==3  || this.DataType==16 || this.DataType==17 || this.DataType==18 || this.DataType==19 || this.DataType==20 || this.DataType==21)
		resultSet.sort(_igtbl_sortNumber);
	else
		resultSet.sort();
	
	return resultSet;
},
"_fillFilterListFromBand",
function(bandIndex, recordSet)
{
	var resultSet = new Array();
	
	if (!recordSet ||  bandIndex < recordSet.Band.Index)
		return resultSet;
		
	if (bandIndex==recordSet.Band.Index)
	{
		resultSet = this._getFilterValuesFromSiblings(recordSet);
	}
	else
	{
		var recordsetLength = recordSet.length;
		for (var itr = 0 ; itr < recordsetLength ; itr++)
		{
			var tempSet = this._fillFilterListFromBand(bandIndex,recordSet.getRow(itr).Rows);
			if (tempSet && tempSet.length > 0)
				resultSet =	resultSet.concat(tempSet);
		}	
	}
	return resultSet;
},
"showFilterDropDown",
function(drop)
{
	var autoDropCheck = (typeof(drop)==='undefined')
	if(autoDropCheck)
		drop=true;
		
	
	if (this.AllowRowFiltering<2) return; 
	
		
	var filterPanel = this._getFilterPanel();
	
	if (filterPanel == null) return;
	
	if (!drop)
	{
		if (filterPanel.IsDropped)
		{
			filterPanel.show(false);
		}
		return;
	}
	else
	{	
		
		if(autoDropCheck)
			drop = !filterPanel.IsDropped;
		filterPanel.show(drop);
	}
},

"getFilterIcon",
function()
{
	return this.FilterIcon; 
},

"setFilterIcon",
function(show)
{
    
    
    
    
    if(show != this.getFilterIcon()) 
    {
		this.FilterIcon = show;
		
        var headerTags = this._getHeadTags();
	    if(headerTags)
	    {
	        
		    for(var x = 0; x<headerTags.length;x++)
		    {
		        var filterIcon = this._findFilterImage(headerTags[x]);
		        
		        if(filterIcon)
		        {
		            if(show)
		                filterIcon.style.display = "";
		            else
		                filterIcon.style.display = "none";
		        }
		    }
		    
		     
		     this.Band.Grid._removeChange("ColumnFilterIconChanged", this);
		     this.Band.Grid._recordChange("ColumnFilterIconChanged", this, show);
	    }
	}
},
"getLevel",
function(s)
{
	var l=new Array();
	l[0]=this.Band.Index;
	l[1]=this.Index;
	if(s)
	{
		s=l.join("_");
		igtbl_dispose(l);
		delete l;
		return s;
	}
	return l;
},
"getFixed",
function()
{
	if(this.Band.Grid.UseFixedHeaders)
		 return this.Fixed;
},
"setFixed",
function(fixed)
{
	this.Fixed=fixed;
},
"getWidth",
function()
{
	if(typeof(this.Width)!="string")
		return this.Width;
	var e=igtbl_getElementById(this.Id);
	if(!e || !e.offsetWidth || typeof(this.Width)=="string" && this.Width.substr(this.Width.length-2,2)=="px")
		this.Width=igtbl_parseInt(this.Width);
	if(typeof(this.Width)=="string")
	{
		this.Width=e.offsetWidth;
	}
	return this.Width;
},
"setWidth",
function(width)
{
	var gs=this.Band.Grid,gn=gs.Id;
	var colObj=igtbl_getElementById(this.Id);
	
	if (!colObj) return;
	var fac=this.Band.firstActiveCell;
	var c1w=width;
	if(c1w>0 && !igtbl_fireEvent(gn,gs.Events.BeforeColumnSizeChange,"(\""+gn+"\",\""+colObj.id+"\","+c1w+")"))
	{
		if(gs.UseFixedHeaders && this.Band.Index==0)
		{
			var scrw=gs._scrElem.firstChild.offsetWidth+c1w-this.getWidth();
			if(scrw>=0)
			{
				var corr=0;
				
				var colEl=this.Element;
				if(colEl && gs.IsXHTML && !this._xhtmlCorrected && ig_csom.IsIE && this.Band.Index==0)
				{					
					corr=colEl.offsetWidth-colEl.clientWidth;
					corr+=igtbl_parseInt(colEl.currentStyle.paddingLeft);
					corr+=igtbl_parseInt(colEl.currentStyle.paddingRight);
					this._xhtmlCorrected=true;
				}
				gs._scrElem.firstChild.style.width=scrw+corr+"px";
			}
		}
		var fixed=(gs.UseFixedHeaders && !this.getFixed());
		var columns=igtbl_getDocumentElement(this.Id);
		if(!columns.length)
			columns=[columns];
		if(fixed)
		{
			for(var i=0;i<columns.length;i++)
			{
				var cells=igtbl_enumColumnCells(gn,columns[i]);
				for(var j=0;j<cells.length;j++)
				{
					var cg=cells[j].parentNode.parentNode.previousSibling;
					if(cg)
					{
						var colIndex=cells[j].cellIndex;
						if(ig_shared.IsNetscape6)
						{
							var curIndex=this.Index;
							while(colIndex>0 && --curIndex>=0)
								if(!this.Band.Columns[curIndex].getVisible())
									colIndex--;
						}
						var c=cg.childNodes[colIndex];
						if(c)
						{
							
							c.style.width=c1w+"px";
						}
					}
					
					cells[j].style.width=c1w+"px";
				}
			}
			var colFoots=igtbl_getDocumentElement(this.fId);
			if(colFoots)
			{
				if(!colFoots.length)
					colFoots=[colFoots];
				for(var i=0;i<colFoots.length;i++)
				{
					var cg=colFoots[i].parentNode.parentNode.previousSibling;
					if(cg && cg.tagName=="COLGROUP")
					{
						var c=cg.childNodes[colFoots[i].cellIndex];
						if(c)
						{
							
							c.style.width=c1w+"px";
						}
					}
					var nfth=colFoots[i].parentNode;
					while(nfth && nfth.tagName!="TH")
						nfth=nfth.parentNode;
					if(nfth && this.Band.Index==0 && this.Band.Index==0 && gs.StatFooter)
					{
						cg=nfth.parentNode.parentNode.previousSibling;
						if(this.Band.AddNewRowView==2 && gs.Rows.AddNewRow)
						{
							cg=cg.previousSibling;
							var addRow=gs.Rows.AddNewRow;
							var c=addRow.getCell(this.Index).Element.parentNode.parentNode.previousSibling.childNodes[colFoots[i].cellIndex];
							if(c)
							{
								
								c.style.width=c1w+"px";
							}
						}
						if(cg)
						{
							var c=cg.childNodes[nfth.cellIndex+colFoots[i].cellIndex];
							if(c)
							{
								
								c.style.width=c1w+"px";
							}
						}
					}
					
					colFoots[i].style.width=c1w+"px";
				}
			}
		}
		for(var i=0;i<columns.length;i++)
		{
			var cg=columns[i].parentNode.parentNode.previousSibling;
			var colIndex=columns[i].cellIndex;
			
			
			if (columns[i].style.display=="none" || ig_csom.IsFireFox)
			{
				var itr = 0;
				var parentCollection = columns[i].parentNode.childNodes;
				for (;itr<parentCollection.length;itr++)
				{
					if (parentCollection[itr]==columns[i])break;					
				}
				colIndex=itr;
			}
			
			
			
			
			if(ig_csom.IsNetscape6)
			{
				var pn=columns[i].parentNode;
				for(var j=0;j<=columns[i].cellIndex;j++)
					if(pn.childNodes[j].style.display=="none")
						colIndex--;
			}
			
			if(this.Band.HasHeaderLayout && cg)
			{
				var colOffs=parseInt(columns[i].getAttribute("coloffs"),10);
				if(this.getFixed()!==false)
					colOffs+=this.Band.firstActiveCell;
				var c=cg.childNodes[colOffs];
				
				var widthChange = c1w - c.width;
				
				c.style.width=c1w+"px";
				
				if(ig_csom.IsFireFox)
				{
					c.width = c1w;
					c.offsetParent.style.width = (c.offsetParent.clientWidth + widthChange) + "px";
				}
				if(fixed)
				{
					var nfth=columns[i].parentNode;
					while(nfth && nfth.tagName!="TH")
						nfth=nfth.parentNode;
					if(nfth)
					{
						cg=nfth.parentNode.parentNode.previousSibling;
						if(cg)
						{
							var c=cg.childNodes[nfth.cellIndex+colIndex];
							
							
							var widthChange = c1w - c.width;
							c.style.width=c1w+"px";
							
							if(ig_csom.IsFireFox)
							{
								c.width = c1w;
								c.offsetParent.style.width = (c.offsetParent.clientWidth + widthChange) + "px";
							}						
						}
						
					}
				}
			}
			else
			{
				var c;
				if(cg)
					c=cg.childNodes[colIndex];
				else
					c=columns[i];
				
				
				c.style.width=c1w+"px";
				c.width = c1w; 
				columns[i].style.width=c1w+"px";
				if(fixed)
				{
					var nfth=columns[i].parentNode;
					while(nfth && nfth.tagName!="TH")
						nfth=nfth.parentNode;
					if(nfth)
					{
						cg=nfth.parentNode.parentNode.previousSibling;
						if(cg)
						{
							var c=cg.childNodes[nfth.cellIndex+colIndex];
							
							c.style.width=c1w+"px";
						}
						
						if(this.Band.Index==0 && this.Band.AddNewRowView==1 && !this.Band.IsGrouped &&gs.StatHeader)
						{
							cg=cg.previousSibling;
							var addRow=gs.Rows.AddNewRow;
							var c=addRow.getCell(this.Index).Element.parentNode.parentNode.previousSibling.childNodes[columns[i].cellIndex];
							
							c.style.width=c1w+"px";
						}
					}
				}
				else
				{
					var table=columns[i];
					while(table && table.tagName!="TABLE")
						table=table.parentNode;
					if(table && table.style.width.length>0)
					{
						var oldWidth=table.style.width;
						if(oldWidth.length>2 && oldWidth.substr(oldWidth.length-2,2)=="px")
						{
							var tbw=igtbl_parseInt(oldWidth)+c1w-this.getWidth();
							if(tbw>0)
								table.style.width=tbw.toString()+"px";
						}
					}
					if(gs.get("StationaryMarginsOutlookGroupBy")=="True" && this.Band.Index==0 && this.Band.IsGrouped && i==0)
					{
						table=gs.getDivElement().firstChild;
						
						
						var currentTableWidth = (table.style.width && table.style.width.indexOf("%")!=-1 )?  table.offsetWidth : igtbl_parseInt(table.style.width);
						var tbw=currentTableWidth+c1w-this.getWidth();
						//var tbw=igtbl_parseInt(table.style.width)+c1w-this.getWidth();/*AK 5/8/2007 BR22598 Use the style.width setting, not offsetWidth for correct IE results*/
						if(tbw>0)
							table.style.width=tbw.toString()+"px";
							
						
						for (var gri = 0; gri < gs.Rows.rows.length; gri++)
						{     
							var grId = gn + "_gr_" + gri.toString();
							var grTbl, grWidth;
							
							if(document.getElementById(grId) && document.getElementById(grId).childNodes[0] 
							    && document.getElementById(grId).childNodes[0].childNodes[0])
							{
						        grTbl = document.getElementById(grId).childNodes[0].childNodes[0];
						        
						        
						var currentgrTblWidth = (grTbl.width && grTbl.width.indexOf("%")!=-1 )?  grTbl.offsetWidth : igtbl_parseInt(grTbl.width);
						        
						        grWidth = currentgrTblWidth+c1w-this.getWidth();
						        //grWidth = igtbl_parseInt(grTbl.width)+c1w-this.getWidth();
						        grTbl.width = grWidth.toString() +"px";
						    }

							for (var j=1; j<gs.GroupCount; j++)
							{
								grId = grId + "_0";   
								
								if(document.getElementById(grId) && document.getElementById(grId).childNodes[0] 
							    && document.getElementById(grId).childNodes[0].childNodes[0])
							    {
								    grTbl = document.getElementById(grId).childNodes[0].childNodes[0];
								    grWidth = igtbl_parseInt(grTbl.width)+c1w-this.getWidth();
								    grTbl.width = grWidth.toString() +"px";
								}
							}
						}
					}
				}
			}
		}
		this.Width=c1w;
		if(this.Node) this.Node.setAttribute(igtbl_litPrefix+"width",c1w);
		if(this.Band.Index==0)
		{
			if(gs.StatHeader)
				gs.StatHeader.ScrollTo(gs.Element.parentNode.scrollLeft);
			if(gs.StatFooter)
			{
				if(!fixed)
					gs.StatFooter.Resize(this.Index,c1w);
				gs.StatFooter.ScrollTo(gs.Element.parentNode.scrollLeft);
			}
		}
		gs.alignStatMargins();
		gs.alignDivs(0,true);
		this.Band._alignColumns();
		gs._removeChange("ResizedColumns",this);
		gs._recordChange("ResizedColumns",this,c1w);
		igtbl_fireEvent(gn,gs.Events.AfterColumnSizeChange,"(\""+gn+"\",\""+colObj.id+"\","+c1w+")");
		if(gs.NeedPostBack)
			igtbl_doPostBack(gn);
		
		var de=gs.getDivElement();
		if(!gs.MainGrid.style.height && de.clientHeight!=de.scrollHeight && !de.getAttribute("scdAdded"))
		{
			var scDiv=document.createElement("DIV");
			scDiv.id=gs.Element.id+"_scd";
			scDiv.innerHTML="&nbsp;";
			
			var divsHeight=de.scrollHeight-de.clientHeight;
			if(divsHeight<0) divsHeight=-divsHeight;
			scDiv.style.height=divsHeight+1;
			de.appendChild(scDiv);
			de.style.overflowY="hidden";
			de.setAttribute("scdAdded","true");
		}
		return true;
	}
	return false;
},
"ensureWebCombo",
function()
{
	if(typeof(igcmbo_getComboById)!="undefined" && igcmbo_getComboById(this.EditorControlID) && !this.WebComboId)
		this.WebComboId=this.EditorControlID;
},
"getRealIndex",
function(row)
{
	if(!this.hasCells())
		return -1;
	var ri=-1;
	var colspan=1;
	var cell=null;
	if(row)
		cell=row.Element.cells[row.Band.firstActiveCell];
	var i=0;
	while(i<this.Index+1 && !this.Band.Columns[i].hasCells())
		i++;
	if(i>this.Index)
		return ri;
	ri=0;
	for(;i<this.Index;i++)
	{
		if(!this.Band.Columns[i].hasCells())
			continue;
		if(row)
		{
			if(colspan>1)
			{
				colspan--;
				continue;
			}
			var cellSplit;
			if(cell)
			{
				cellSplit=cell.id.split("_");
				if(parseInt(cellSplit[cellSplit.length-1],10)>i)
					ri--;
				else
				{
					cell=cell.nextSibling;
					if(cell)
						colspan=cell.colSpan;
				}
			}
		}
		ri++;
	}
	return ri;
},
"getFixedHeaderIndicator",
function()
{
	if(this.FixedHeaderIndicator!=0)
		return this.FixedHeaderIndicator;
	if(this.Band.FixedHeaderIndicator!=0)
		return this.Band.FixedHeaderIndicator;
	return this.Band.Grid.FixedHeaderIndicator;
},
"getValueFromString",
function(value)
{
	if(value==null || typeof(value)=="undefined")
		return null;
	value=value.toString();
	if(this.AllowNull && value==this.getNullText())
		return null;
	return igtbl_valueFromString(value,this.DataType);
}
,"_getHeadTags",
function(withAddRow)
{
	var elem=null;
	if(this.Id)
		elem=igtbl_getDocumentElement(this.Id);
	elem=igtbl_getArray(elem);
	if(withAddRow)
	{
		var addRow=this.Band.Grid.Rows.AddNewRow;
		var addNewPresent=(addRow && addRow.isFixedTop());
		if(!addNewPresent)
			return elem;

		var ri=this.Band.firstActiveCell;
		var columns=this.Band.Columns;
		for(var i=0;i<this.Index;i++)
			if(columns[i].hasCells())
				ri++;
		if(this.getFixed()===false)
		{
			var fnfRi=this.Band.firstActiveCell;
			for(var i=0;i<columns.length && columns[i].getFixed();i++)
				if(columns[i].hasCells())
					fnfRi++;
			ri=ri-fnfRi;
			var tbl=addRow.Element.cells[fnfRi].firstChild.firstChild;
			elem[elem.length]=tbl.rows[0].cells[ri];
		}
		else
			elem[elem.length]=addRow.Element.cells[ri];
	}
	return elem;
},
"_getFootTags",
function(withAddRow)
{
	var elem=null;
	if(this.fId)
		elem=igtbl_getDocumentElement(this.fId);
	elem=igtbl_getArray(elem);
	if(withAddRow)
	{
		var addRow=this.Band.Grid.Rows.AddNewRow;
		var addNewPresent=(addRow && addRow.isFixedBottom());
		if(!addNewPresent)
			return elem;

		var ri=this.Band.firstActiveCell;
		var columns=this.Band.Columns;
		for(var i=0;i<this.Index;i++)
			if(columns[i].hasCells())
				ri++;
		if(this.getFixed()===false)
		{
			var fnfRi=this.Band.firstActiveCell;
			for(var i=0;i<columns.length && columns[i].getFixed();i++)
				if(columns[i].hasCells())
					fnfRi++;
			ri=ri-fnfRi;
			var tbl=addRow.Element.cells[fnfRi].firstChild.firstChild;
			elem[elem.length]=tbl.rows[0].cells[ri];
		}
		else
			elem[elem.length]=addRow.Element.cells[ri];
	}
	return elem;
},
"_getColTags",
function(withAddRow)
{
	if(!this.hasCells())
		return null;
	var band=this.Band;
	var fac=band.firstActiveCell;
	var g=band.Grid;
	var columns=band.Columns;
	var res=new Array();
	var gColOffs=fac;
	if(!this.getHidden())
	{
		for(var i=0;i<this.Index;i++)
			if(columns[i].getVisible())
				gColOffs++;
	}
	else
	{
		for(var i=0;i<columns.length;i++)
			if(columns[i].hasCells())
				gColOffs++;
		for(var i=columns.length-1;i>=this.Index;i--)
			if(columns[i].getHidden())
				gColOffs--;
	}
	var fnfColumn=null; 
	var lColOffs=0;
	var fnfRi=fac;
	if(this.getFixed()===false)
	{
		fnfColumn=this;
		while(fnfColumn.Index>0 && !this.Band.Columns[fnfColumn.Index-1].getFixed())
			fnfColumn=this.Band.Columns[fnfColumn.Index-1];
		for(var i=0;i<fnfColumn.Index;i++)
		{
			if(columns[i].getVisible())
				lColOffs++;
			if(columns[i].hasCells())
				fnfRi++;
		}
		lColOffs=gColOffs-lColOffs-fac;
	}
	else
		lColOffs=gColOffs;
	var addRow=g.Rows.AddNewRow;
	
	var addNewHead=(addRow && !addRow.isFixedTop());
	var addNewFoot=(addRow && !addRow.isFixedBottom());
	var hAr=this._getHeadTags();
	if(hAr)
	{
		var cg;
		for(var i=0;i<hAr.length;i++)
		{
			if(this.getFixed()===false)
			{
				var nfth=hAr[i].parentNode;
				while(nfth && nfth.tagName!="TH")
					nfth=nfth.parentNode;
				if(nfth)
				{
					cg=nfth.parentNode.parentNode.previousSibling;
					if(cg)
						res[res.length]=cg.childNodes[gColOffs];
				}
			}
			cg=hAr[i].parentNode.parentNode.previousSibling;
			if(cg)
				res[res.length]=cg.childNodes[lColOffs];
		}
	}
	var fAr=this._getFootTags();
	if(fAr)
	{
		var cg;
		for(var i=0;i<fAr.length;i++)
		{
			if(this.getFixed()===false)
			{
				var nfth=fAr[i].parentNode;
				while(nfth && nfth.tagName!="TH")
					nfth=nfth.parentNode;
				if(nfth)
				{
					cg=nfth.parentNode.parentNode.previousSibling;
					if(addNewFoot)
						cg=cg.previousSibling;
					if(cg)
						res[res.length]=cg.childNodes[gColOffs];
				}
			}
			if(this.Band.Index==0 && this.Band.Grid.StatFooter)
			{
				cg=fAr[i].parentNode.parentNode.previousSibling;
				if(this.getFixed()!==false && addNewFoot)
					cg=cg.previousSibling;
				if(cg)
					res[res.length]=cg.childNodes[lColOffs];
			}
		}
	}
	if(withAddRow && (addNewHead || addNewFoot) && this.getFixed()===false)
	{
		cg=addRow.Element.cells[fnfRi].firstChild.firstChild.firstChild;
		res[res.length]=cg.childNodes[lColOffs];
	}
	if(res.length>0)
		return res;
	return null;
},
"_insertCols",
function(front,width)
{
	var cols=this._getColTags(true);
	for(var i=0;cols && i<cols.length;i++)
	{
		if(cols[i])
		{
			var col=document.createElement("COL");
			col.width=width;
			var cg=cols[i].parentNode;
			if(front)
				cg.insertBefore(col,cols[i]);
			else
			{
				if(cols[i].nextSibling)
					cg.insertBefore(col,cols[i].nextSibling);
				else
					cg.appendChild(col);
			}
		}
	}
},
"_reId",
function(i)
{
	if(i==this.Index) return;
	this._rec=true;
	for(var j=0;j<this.Band.Columns.length;j++)
	{
		var col=this.Band.Columns[j];
		if(!col._rec && col.Index==i)
		{
			col._rec=true;
			this.Band.Columns[j]._reId(j);
			delete col._rec;
		}
	}
	delete this._rec;
	var elem=null;
	var fElem=null;
	column=this;
	if(column.hasCells())
	{
		if(this.Id)
			elem=this._getHeadTags(true);
		else
			elem=this.colElem;
		if(this.fId)
			fElem=this._getFootTags(true);
		else
			fElem=this.colFElem;
	}
	column.Id=this.Band.Grid.Id
		+"_"
		+"c_"+this.Band.Index.toString()+"_"+i.toString();
	column.Index=i;
	if(this.Band.ColFootersVisible==1)
		column.fId=this.Band.Grid.Id
			+"_"
			+"f_"+this.Band.Index.toString()+"_"+i.toString();
	if(elem)
		for(var j=0;j<elem.length;j++)
		{
			c=elem[j];
			if(c && c.tagName=="TH")
			{
				c.id=column.Id;
				c.setAttribute("columnNo",i.toString());
			}
			else if(c)
			{
				var r=c.parentNode;
				while(r && (r.tagName!="TR" || !r.getAttribute("level")))
					r=r.parentNode;
				if(r)
				{
					cid=r.id.split("_");
					cid[0]=cid[0].substr(0,cid[0].length-1)+"c";
					cid[cid.length]=i.toString();
					c.id=cid.join("_")
				}
			}
		}
	if(fElem)
		for(var j=0;j<fElem.length;j++)
		{
			c=fElem[j];
			if(c && c.tagName=="TH")
				c.id=column.fId;
			else if(c)
			{
				var r=c.parentNode;
				while(r && (r.tagName!="TR" || !r.getAttribute("level")))
					r=r.parentNode;
				if(r)
				{
					cid=r.id.split("_");
					cid[0]=cid[0].substr(0,cid[0].length-1)+"c";
					cid[cid.length]=i.toString();
					c.id=cid.join("_")
				}
			}
		}
	igtbl_dispose(elem);
	igtbl_dispose(fElem);
	this._reIded=true;
}
,"setHeaderText",
function(value)
{
    
    var headerElements;
    if (this.Element)
    {
		headerElements = new Array(this.Element);
    }
    else
    {
		
		headerElements = igtbl_getDocumentElement(this.Id);
		if (!headerElements)
		{
			return;
		}
		if (!headerElements.length) 
		{
			headerElements = new Array(headerElements);
		}
    }
    for (hE = 0; hE < headerElements.length; hE++)
    {
		var el = headerElements[hE];
		for (n = 0; n < el.childNodes.length; n++)
		{
			if (el.childNodes[n].nodeType == 1)
			{
				el = el.childNodes[n];
			}
		}
		if (el.tagName == "IMG")
		{
			if(el.imgType)
			{
				
				el.parentElement.innerHTML = value + el.outerHTML;
			}
			else
			{
				
				var caption;
				if(el.nextSibling && el.nextSibling.tagName == "NOBR")
				{
					caption = el.nextSibling;
				}
				else
				{
					caption = document.createElement("NOBR");
					if(el.nextSibling)
						el.parentElement.insertBefore(caption, el.nextSibling);
					else
						el.parentElement.appendChild(caption);
				}
					
				if(caption)
				{
					caption.innerHTML = value;
				}
			}
		}
		else
		{
			el.innerHTML = value;
		}
    }
}
,"getTitleModeResolved",
function()
{
    var result = this.HeaderTitleMode;
    if (!result && this.Band)
    {
        result = this.Band.HeaderTitleMode;
    }
    if (!result && this.Band && this.Band.Grid)
    {
        result = this.Band.Grid.HeaderTitleMode;
    }
    return result;
}
,"getSortingAlgorithm",
function()
{
	if(this.SortingAlgorithm==0)
		return this.Band.getSortingAlgorithm();
	return this.SortingAlgorithm;
}
,"getSortImplementation",
function()
{
	if(this.SortImplementation==null)
		return this.Band.getSortImplementation();
	return this.SortImplementation;
}
];
for(var i=0;i<igtbl_ptsColumn.length;i+=2)
	igtbl_Column.prototype[igtbl_ptsColumn[i]]=igtbl_ptsColumn[i+1];


var igtbl_reqType=new Object();
igtbl_reqType.None=0;
igtbl_reqType.ChildRows=1;
igtbl_reqType.MoreRows=2;
igtbl_reqType.Sort=3;
igtbl_reqType.UpdateCell=4;
igtbl_reqType.AddNewRow=5;
igtbl_reqType.DeleteRow=6;
igtbl_reqType.UpdateRow=7;
igtbl_reqType.Custom=8;
igtbl_reqType.Page=9;
igtbl_reqType.Scroll=10;
igtbl_reqType.FilterDropDownFill=11;
igtbl_reqType.Filter=12;
igtbl_reqType.Refresh=13;
var igtbl_readyState=new Object();
igtbl_readyState.Ready=0;
igtbl_readyState.Loading=1;

var igtbl_error=new Object();
igtbl_error.Ok=0;
igtbl_error.LoadFailed=1;
var igtbl_featureRowView={
"Top":1,
"Bottom":2
};
var igtbl_featureRowView={
"Top":1,
"Bottom":2
};
var igtbl_filterComparisonType={
"CaseInsensitive":1,
"CaseSensitive":2 
};
var igtbl_RowFilterMode={
"AllRowsInBand":1,
"SiblingRowsOnly":2
};

var igtbl_filterComparisionOperator={
	"All":0,
	"Empty":1,
	"NotEmpty":2,
	"Equals":3
	,"NotEquals":4,
	"Like":5,
	"NotLike":6,
	"LessThan":7,
	"LessThanOrEqualTo":8,
	"GreaterThan":9,
	"GreaterThanOrEqualTo":10
	,"StartsWith":11,
	"DoesNotStartWith":12,
	"EndsWith":13,
	"DoesNotEndWith":14,
	"Contains":15,
	"DoesNotContain":16
};


var igtbl_dataType={
	"Int16":2,
	"Int32":3,
	"Single":4,
	"Double":5,
	"DateTime": 7,
	"String": 8,
	"Boolean": 11,
	"Object": 12,
	"Decimal": 14,
	"Byte": 16,
	"SByte": 17,
	"UInt16": 18,
	"UInt32": 19,
	"Int64": 20,
	"UInt64": 21,
	
	"Char": 22
};

var igtbl_CellTitleMode = new Object();
igtbl_CellTitleMode.NotSet = 0;
igtbl_CellTitleMode.Always = 1;
igtbl_CellTitleMode.OnOverflow = 2;
igtbl_CellTitleMode.Never = 3;
var igtbl_ClipboardError={
"Failure":-1,
"Ok":0,
"NotSupported":1,
"NoActiveObject":2,
"NothingToPaste":3,
"NothingToCopy":4};

var igtbl_ClipboardOperation={
"Copy":0,
"Cut":1,
"Paste":2};
var igtbl_cellButtonDisplay={
"OnMouseEnter":0,
"Always":1
};

// Client events object
igtbl_Events.prototype=new igtbl_WebObject();
igtbl_Events.prototype.constructor=igtbl_Events;
igtbl_Events.base=igtbl_WebObject.prototype;
function igtbl_Events(grid,eventsInitArray)
{
	if(arguments.length>0)
		this.init(grid,eventsInitArray);
}
var igtbl_ptsEvents=[
"init",
function(grid,eventsInitArray)
{
	igtbl_Events.base.init.apply(this,["events",null,null]);

	this._defaultProps=new Array("AfterCellUpdate","AfterColumnMove","AfterColumnSizeChange","AfterEnterEditMode","AfterExitEditMode",
								"AfterRowActivate","AfterRowCollapsed","AfterRowDeleted","AfterRowTemplateClose","AfterRowTemplateOpen",
								"AfterRowExpanded","AfterRowInsert","AfterRowSizeChange","AfterSelectChange","AfterSortColumn",
								"BeforeCellChange","BeforeCellUpdate","BeforeColumnMove","BeforeColumnSizeChange","BeforeEnterEditMode",
								"BeforeExitEditMode","BeforeRowActivate","BeforeRowCollapsed","BeforeRowDeleted","BeforeRowTemplateClose",
								"BeforeRowTemplateOpen","BeforeRowExpanded","BeforeRowInsert","BeforeRowSizeChange","BeforeSelectChange",
								"BeforeSortColumn","ClickCellButton","CellChange","CellClick","ColumnDrag","ColumnHeaderClick","DblClick",
								"EditKeyDown","EditKeyUp","InitializeLayout","InitializeRow","KeyDown","KeyUp","MouseDown","MouseOver",
								"MouseOut","MouseUp","RowSelectorClick","TemplateUpdateCells","TemplateUpdateControls","ValueListSelChange",
								
								"BeforeRowUpdate","AfterRowUpdate",
								"BeforeXmlHttpRequest","AfterXmlHttpResponseProcessed",
								"XmlHTTPResponse"
								,"XmlVirtualScroll"
								,"BeforeFilterDroppedDown","BeforeFilterPopulated","BeforeFilterClosed"
								,"AfterFilterDroppedDown","AfterFilterPopulated","AfterFilterClosed",
								"BeforeRowFilterApplied","AfterRowFilterApplied"
								,"BeforeRowDeactivate"
								,"BeforeClipboardOperation","AfterClipboardOperation","ClipboardError"
								,"GridCornerImageClick"
								);
	var eventsArray;
	eventsArray=eventsInitArray;
	if(eventsArray)
		for(var i=0;i<eventsArray.length;i++)
			this[this._defaultProps[i]]=eventsArray[i];
},
"unload",
function()
{
	for(var i=0;i<this._defaultProps.length;i++)
		this[this._defaultProps[i]]=null;
	igtbl_dispose(this._defaultProps);
}
];
for(var i=0;i<igtbl_ptsEvents.length;i+=2)
	igtbl_Events.prototype[igtbl_ptsEvents[i]]=igtbl_ptsEvents[i+1];


function igtbl_fireEvent(gn,eventObj,eventString)
{
	var gs=igtbl_getGridById(gn);
	if(!gs || !gs.isLoaded()) return;
	var result=false;
	if(eventObj[0]!="")
	{
		
		try
		{
			if(typeof(eval(eventObj[0]))!="function")
				throw "Event handler does not exist.";
		}
		catch(ex)
		{
			alert("There is a problem with the event handler method: '"+eventObj[0]+"'. Please check the method name's spelling.")
			return false;
		}
		
		result=eval(eventObj[0]+eventString);
	}
	if(gs.GridIsLoaded && result!=true && eventObj[1]>=1 && !gs.CancelPostBack)
		igtbl_needPostBack(gn);
	gs.CancelPostBack=false;
	return result;
}

// obsolete
// use igcsom.cancelEvent instead 
function igtbl_cancelEvent(evnt)
{
	ig_cancelEvent(evnt);
	return false;
}

igtbl_FilterDropDown.prototype=new igtbl_WebObject();
igtbl_FilterDropDown.prototype.constructor=igtbl_FilterDropDown;
igtbl_FilterDropDown.base=igtbl_WebObject.prototype;
function igtbl_FilterDropDown(column)
{
	if (column!=null)
	{
		var divElem;
		divElem = document.createElement("DIV");
		divElem.style.zIndex = 10000;
		divElem.style.position = "absolute";
		divElem.setAttribute("filter",1);
		divElem.setAttribute("bandNo",column.Band.Index);
		
		divElem.className = column.Band.FilterDropDownStyle;
		if(divElem.className.length==0)
		    divElem.className = column.Band.Grid.FilterDropDownStyle;
		divElem.id = column.Id+"_Filter";
		var mainGrid = column.Band.Grid.MainGrid;
		
		document.body.insertBefore(divElem,document.body.firstChild);
					
		this.init(divElem,column);
		divElem.style.display = "none";
	}
}
var igtbl_ptsFilterDropDown=
[
"init",
function(element,column)
{
	
	igtbl_FilterDropDown.base.init.apply(this,["filterDropDown",element,null]);
	this.Column = column;
	this.RowIsland = null;
	this.Element.object = this;
	this._evaluationValue = null;
	this._operator = igtbl_filterComparisionOperator.Equals;
	this._activeFilter = false; 
},
"getHighlightStyle",
function()
{
	
	var b = this.Column.Band;
	if (b.FilterHighlightRowStyle && b.FilterHighlightRowStyle.length>0)
		return b.FilterHighlightRowStyle;
	return b.Grid.FilterHighlightRowStyle;
},
"IsActive",
function()
{
	
	return this._activeFilter;
},
"setFilter",
function(operand, value, serverSet)
{
	this._operator=operand;
	this._evaluationValue=value;
	this._activeFilter=true;
	var rowIsland=this.RowIsland;
	var parentRowId;
	if (rowIsland && rowIsland.ParentRow)
	{
		parentRowId = rowIsland.ParentRow.getLevel(true)+ "\x01" + rowIsland.ParentRow.DataKey;
	}
	else
	{
		parentRowId = "\x01";
	}	
	var col = this.Column;
	var g = col.Band.Grid;
	g._removeChange("FilterColumn",col);
	g._recordChange("FilterColumn",col,operand +"\x01" + value +"\x01"+ parentRowId +"\x01" + (serverSet ?  "server":"client") );
},
"setOperator",
function(op)
{
	
	this._operator = op;
},
"getOperator",
function()
{
	
	return this._operator;
},
"setEvaluationValue",
function(op)
{
	this._evaluationValue = op;
},
"getEvaluationValue",
function()
{
	return this._evaluationValue ;
},
"getWorkingFilterList",
function(){return this._currentWorkingList;},
"setWorkingFilterList",
function(oList){this._currentWorkingList=oList;},
"_setFilter",
function(value)
{
    var band = this.Column.Band;
    switch(value)
	{
		case(band.Filter_AllString):
		{
			this.setFilter(igtbl_filterComparisionOperator.All,value);
			break;
		}
		case(band.Filter_EmptyString):
		{
			this.setFilter(igtbl_filterComparisionOperator.Empty,value);
			break;
		}
		case(band.Filter_NonEmptyString):
		{
			this.setFilter(igtbl_filterComparisionOperator.NotEmpty,value);
			break;
		}
		default:
		{
			
			this.setFilter(igtbl_filterComparisionOperator.Equals,value);
			break;
		}
	}
	var grid = band.Grid;
	return grid.fireEvent(grid.Events.BeforeRowFilterApplied,[grid.Id,this.Column]);
},
"applyFilter",
function()
{
	
	var col = this.Column;
	var g = col.Band.Grid;
	if (g.LoadOnDemand==3 &&  !col.Band.IsGrouped)
	{
		g.invokeXmlHttpRequest(g.eReqType.Filter, col, (col.RowFilterMode==1&&col.Band.FilterUIType!=1 ? null : this.RowIsland ) );
		return;
	}
	
	if (this.Column.AllowRowFiltering==3)
	{
		igtbl_doPostBack(g.Id);
		return;
	}	
	if (col.RowFilterMode==1)
	{
		col._filterOnBand(col.Band.Index,col.Band.Grid.Rows);
	}
	else 
	{
		col._filterOnRowIsland(this.RowIsland);
	}
},
"_showFillingList",
function(col,workingList)
{
	
	if(typeof(workingList)=="undefined")
		workingList=this._currentWorkingList;
	
	var resultList;		
	if(col.RowFilterMode==1)
	{	
		resultList = col._getFilterValuesFromBand();
	}
	else 
	{
		resultList = col._getFilterValuesFromSiblings();
	}
	
	resultList = this._cleanList(resultList);
	workingList = workingList.concat(resultList);
	col.Band.Grid._hidePI();
	
	this._afterFilterFilled(col.Band.Grid,col,workingList);
	return workingList;
},
"_afterFilterFilled",
function(grid,col,workingList)
{
	this._currentWorkingList = workingList;
	
	
	grid.fireEvent(grid.Events.AfterFilterPopulated,[grid.Id,this,workingList]);
	
	var filterTableElem =  this._buildFilterTable(workingList,this);		
	
	this._lastWorkingList = workingList;
	this._filterTable = filterTableElem;
	this._showFilter(filterTableElem);
	
	col.Band.Grid._currentFilterShowing = filterTableElem;
		
	grid.fireEvent(grid.Events.AfterFilterDroppedDown,[grid.Id,this]);

	this.IsDropped = true;	
	this.Element.style.display="";
	this.Column.Band.Grid._currentFilterDropped = this;
},
"show",
function(show)
{
	var col = this.Column;
	var grid = col.Band.Grid;
	if (show)
	{		
		if(this.IsDropped) return;
		for(var gridId in igtbl_gridState)
		{
			var g = igtbl_getGridById(gridId);
			if (g._currentFilterDropped)
				g._currentFilterDropped.show(false);
		}
		
		if (grid.fireEvent(grid.Events.BeforeFilterDroppedDown,[grid.Id,this])==true)
		{
			return true;
		}
		
		
		var workingList = new Array();
		
		for (var iList = 0 ; iList < col.DefaultFilterList.length ; iList++)
		{	
			workingList.push(col.DefaultFilterList[iList]);
		}
		
		this._currentWorkingList = workingList;
		
		
		if (this.Column.GatherFilterData==2 || grid.fireEvent(grid.Events.BeforeFilterPopulated,[grid.Id,this,this.Column,this._currentWorkingList, this._lastWorkingList])==true)
		{
			
			workingList = this._currentWorkingList;		
			
			this._afterFilterFilled(grid,col,workingList);
		}
		else
		{
				
			
			if(grid.LoadOnDemand==3  )
			{
				grid.invokeXmlHttpRequest(grid.eReqType.FilterDropDownFill,col, (col.RowFilterMode==1 ? null : col._getSiblingRowIsland()) );
				return;
			}
			if(grid.EnableProgressIndicator)
			{
				
				grid._displayPI();
				
				
				if( (col.Band.Index>0 && this.RowIsland) || (col.Band.IsGrouped && col.Band.RowFilterMode==2))
				{
					
					col._filterSrcElement=grid.event.srcElement;
					
					if (!col._filterSrcElement)
						col._filterSrcElement=grid.event.target;
						
					setTimeout("igtbl_getGridById('"+grid.Id+"').Bands["+col.Band.Index+"]._filterPanels['"+this.RowIsland.Element.parentNode.id+"']['"+col.Id+"']._showFillingList(igtbl_getColumnById('"+col.Id+"'));");
				}
				else
					setTimeout("igtbl_getGridById('"+grid.Id+"').Bands["+col.Band.Index+"]._filterPanels['"+col.Id+"']._showFillingList(igtbl_getColumnById('"+col.Id+"'));");
			}
			else
				this._showFillingList(col);
		}
	}
	else
	{
		if (grid.fireEvent(grid.Events.BeforeFilterClosed,[grid.Id,this])==true)
		{return true;}
		this.IsDropped=false;
		if (col.Band.transPanel)col.Band.transPanel.hide();
		this.Element.style.display="none";
		grid._currentFilterDropped=null;
		grid.fireEvent(grid.Events.AfterFilterClosed,[grid.Id,this]);
	}
},
"_cleanList",
function(workingList)
{
	if (workingList == null || workingList.length<2) return workingList;
	var currentValue = workingList[workingList.length-1];
	for(var itr = workingList.length-2 ; itr > -1 ; itr--)
	{
        if (currentValue[1] === workingList[itr][1])
		{
			workingList.splice(itr,1);
		}
		else
		{
			currentValue = workingList[itr];
		}
	}
	return workingList;
},
"_buildFilterTable",
function(workingList,filterObject)
{
	var divElem ;
	if (workingList === this._lastWorkingList && this._filterTable)
	{
		divElem = this._filterTable;
	}
	else	
	{
		divElem = this.Element;
		
		divElem.style.overflow="auto";
		if (divElem.childNodes.length > 0)
		{
			for(var itr = divElem.childNodes.length-1 ; itr >= 0 ; itr--)
				divElem.removeChild(divElem.childNodes[itr]);
		}
		var elem=document.createElement("TABLE");
		elem.cellSpacing = 0;
		elem.className = divElem.className;
		elem.style.borderStyle="none";
		elem.style.borderWidth="0px";
		ig_csom.addEventListener(elem,"mouseup",igtbl_filterMouseUp);
		ig_csom.addEventListener(elem,"mouseover",igtbl_filterMouseOver);
		ig_csom.addEventListener(elem,"mouseout",igtbl_filterMouseOut);
		ig_csom.addEventListener(elem,"selectstart",ig_cancelEvent );
		ig_csom.addEventListener(document,"mouseup",igtbl_filterMouseUpDocument);
		
		var gridDiv = this.Column.Band.Grid.getDivElement()
		ig_csom.addEventListener(gridDiv,"scroll",igtbl_filterGridScroll);
		elem._filterObject = filterObject;
		var colGroup = document.createElement("COLGROUP");
		var tbody = document.createElement("TBODY");
		elem.appendChild(colGroup);
		elem.appendChild(tbody);
		divElem.appendChild(elem);
		var column = document.createElement("COL");
		column.style.width = "100%";
		colGroup.appendChild(column);
		for (var itr = 0 ; itr < workingList.length ; itr++)
		{
			var row = document.createElement("TR");
			ig_csom.addEventListener(row,"mouseup",igtbl_filterOptionMouseUp);
			
			row.setAttribute("fo",1);
			row.style.height = this.Column.Band.DefaultRowHeight;

			row.setAttribute("value",workingList[itr][0]);
			var cell = document.createElement("TD");
			var cellText = document.createTextNode(workingList[itr][1]);
			cell.appendChild(cellText);
			row.appendChild(cell);
			tbody.appendChild(row);
		}
	}
	return divElem;
},
"_showFilter",
function(filterDivElem)
{
	var band = this.Column.Band;
	var gridObj=band.Grid;
	
	var tPan=band.transPanel;
	if(tPan==null && ig_csom.IsIEWin)
	{	
		band.transPanel=tPan=ig_csom.createTransparentPanel();
		if(tPan)
		{
			filterDivElem.parentNode.insertBefore(tPan.Element,filterDivElem);
			tPan.Element.style.zIndex=igtbl_parseInt(filterDivElem.style.zIndex)-1;
		}
	}
	
	var fc = this.Column.Element;
	if(!fc || !fc.offsetHeight)
	{
		try
		{
			fc = gridObj.event.srcElement;
			if(!fc)
			{
				fc=gridObj.event.target;
			}
		}
		catch(excep)
		{
		}	
		if(!fc)
		{
			
			var colHeaderIndex  = 0;
			var headerTags = this.Column._getHeadTags();
			
			
			
			if(this.RowIsland && this.RowIsland.Element	&& !(band.Index==0 && gridObj.StatHeader) )
			{
				var parentTable = this.RowIsland.Element;
				do
				{
					parentTable = parentTable.parentNode;
				}while (parentTable && !(parentTable.tagName=="TABLE" && parentTable.id.length>0))
				if (parentTable)
				{
					for (var itr = 0 ; itr < headerTags.length ; itr++)
					{
						var parTable = headerTags[itr];
						do
						{
							parTable = parTable.parentNode;		
						}
						while(parTable && !(parTable.tagName=="TABLE" && parTable.id.length>0))
						if (parTable.id==parentTable.id)
						{
							colHeaderIndex = itr;
						}
					}
				}
			}
			fc = headerTags[colHeaderIndex];	
		}	
		while(fc.tagName!="TH")
		{
			fc = fc.parentNode;
		}
	}
	
	filterDivElem.style.display="";
	
	if(band.FilterDropDownRowCount>0)
	{
		var rows = filterDivElem.childNodes[0].childNodes[1].childNodes;
		if(rows.length>0)
		{
			var calcValue=(rows.length<band.FilterDropDownRowCount)?rows.length:band.FilterDropDownRowCount;
			var calcHeight=(rows[0].clientHeight * calcValue);
			var scrollBarHeight = filterDivElem.offsetHeight-filterDivElem.clientHeight;
			
			filterDivElem.style.height = (calcHeight+scrollBarHeight) + "px";
		}
	}
	
	if(!filterDivElem.getAttribute("adjusted") && filterDivElem.offsetWidth-filterDivElem.clientWidth>10 && filterDivElem.offsetWidth-filterDivElem.clientWidth<30)
	{
		filterDivElem.style.width=(filterDivElem.offsetWidth+(filterDivElem.offsetWidth-filterDivElem.clientWidth)).toString()+"px";
		filterDivElem.setAttribute("adjusted","true");
	}
	ig_csom.absPosition(fc,filterDivElem,ig_Location.BelowLeft,tPan);

	
	if (gridObj.Rows.length < 1 && this.Column.Element !=null && this.Column.Element.parentElement !=null )
		filterDivElem.style.top = (filterDivElem.style.posTop + this.Column.Element.parentElement.clientHeight)+"px";

    this._filterPanel = filterDivElem;
}
]

for(var i=0;i<igtbl_ptsFilterDropDown.length;i+=2)
	igtbl_FilterDropDown.prototype[igtbl_ptsFilterDropDown[i]]=igtbl_ptsFilterDropDown[i+1];



igtbl_FilterIconsList.prototype=new igtbl_WebObject();
igtbl_FilterIconsList.prototype.constructor=igtbl_FilterIconsList;
igtbl_FilterIconsList.base=igtbl_WebObject.prototype;
function igtbl_FilterIconsList(column)
{
    if (column!=null)
    {
        var divElem;
        divElem = document.createElement("DIV");
		divElem.style.zIndex = 10000;
		divElem.style.position = "absolute";
		divElem.setAttribute("filterIconList",1);
		divElem.setAttribute("bandNo",column.Band.Index);
		divElem.id = column.Id+"_FilterIconList";
		var mainGrid = column.Band.Grid.MainGrid;
		document.body.insertBefore(divElem,document.body.firstChild);
		this.init(divElem,column);
		divElem.style.display = "none";		
    }
}
var igtbl_ptsFilterIconDropDown=
[
"init",
function(element,column)
{
	
	igtbl_FilterDropDown.base.init.apply(this,["filterIconDropDown",element,null]);
	this.Column = column;	
	this.Element.object = this;
	
	var gridDiv = this.Column.Band.Grid.getDivElement()
	ig_csom.addEventListener(gridDiv,"scroll",igtbl_filterGridScroll);
	var divElem=element;
	var g = column.Band.Grid;
	var elem=document.createElement("TABLE");
	elem.cellSpacing = 0;
	elem.className = g.FilterOperandDropDownStyle + " "+ column.Band.FilterOperandDropDownStyle;
	ig_csom.addEventListener(elem,"selectstart",ig_cancelEvent);
	ig_csom.addEventListener(elem,"mouseup",igtbl_filterIconsMouseUp);
	ig_csom.addEventListener(elem,"mouseover",igtbl_filterMouseOver);
	ig_csom.addEventListener(elem,"mouseout",igtbl_filterMouseOut);
	ig_csom.addEventListener(document,"mouseup",igtbl_filterMouseUpDocument);
	var colGroup = document.createElement("COLGROUP");
	var tbody = document.createElement("TBODY");
	elem.appendChild(colGroup);
	elem.appendChild(tbody);
	divElem.appendChild(elem);
	var column = document.createElement("COL");
	column.style.width = "100%";
	colGroup.appendChild(column);
	
	for (var itr = 0 ; itr < g.FilterButtonImages.length ; itr++)
	{
	        var filterImageObj=g.FilterButtonImages[itr];
			var row = document.createElement("TR");
			var cell = document.createElement("TD");
			var div = document.createElement("DIV");
			cell.appendChild(div);
			var img = document.createElement("IMG");
			img.src=filterImageObj[1];
			img.title=filterImageObj[2];
			img.style.verticalAlign="middle";
			img.setAttribute("operator",filterImageObj[0]);
			div.appendChild(img);
            
			cell.className=g.FilterOperandItemStyle+" "+this.Column.Band.FilterOperandItemStyle;			
			row.appendChild(cell);
			var cellText = document.createTextNode(this.Column.Band.FilterOperandStrings[itr]);
			div.appendChild(cellText);
			tbody.appendChild(row);
			row.setAttribute("filterListOption","true");
			
			row.setAttribute("operator",filterImageObj[0]);
	}	
},
"show",

function(cell,force)
{
        
    if (force && this.IsDropped) return;
    
    var col=this.Column;     
    var band=col.Band;
    var grid=band.Grid;
    
    if (cell)
    {
        if (grid.fireEvent(grid.Events.BeforeFilterDroppedDown,[grid.Id,this])==true)
	    {
		    return true;
	    }
        for(var gridId in igtbl_gridState)
	    {
		    var g = igtbl_getGridById(gridId);
		    if (g._currentFilterDropped)
			    g._currentFilterDropped.show(false);
	    }
	    this._showListOption( igtbl_filterComparisionOperator.Like ,col.DataType==8);
	    this._showListOption( igtbl_filterComparisionOperator.NotLike ,col.DataType==8);
	    this._showListOption( igtbl_filterComparisionOperator.Contains ,col.DataType==8);
	    this._showListOption( igtbl_filterComparisionOperator.DoesNotContain ,col.DataType==8);
	    this._showListOption( igtbl_filterComparisionOperator.StartsWith ,col.DataType==8);
	    this._showListOption( igtbl_filterComparisionOperator.DoesNotStartWith ,col.DataType==8);
	    this._showListOption( igtbl_filterComparisionOperator.EndsWith ,col.DataType==8);
	    this._showListOption( igtbl_filterComparisionOperator.DoesNotEndWith ,col.DataType==8);
	    this._showDropDown(this.Element);
        this.IsDropped=true;
	    	
	    grid.fireEvent(grid.Events.AfterFilterDroppedDown,[grid.Id,this]);        
        
        this._currentCell = cell;
        grid._currentFilterDropped=this;
	}
	else
	{
        this.Element.style.display="none";
        this.IsDropped=false;
        if(band.transPanel)
            band.transPanel.hide();
        grid._currentFilterDropped=null;
        this._currentCell=null;
	}
},
"_showDropDown",
function(filterDivElem)
{
	var band = this.Column.Band;
	var gridObj=band.Grid;
	
	var tPan=band.transPanel;
	if(tPan==null && ig_csom.IsIEWin)
	{	
		band.transPanel=tPan=ig_csom.createTransparentPanel();
		if(tPan)
		{
			filterDivElem.parentNode.insertBefore(tPan.Element,filterDivElem);
			tPan.Element.style.zIndex=igtbl_parseInt(filterDivElem.style.zIndex)-1;
		}
	}
	
	var fc ;
	try
	{
		fc = gridObj.event.srcElement;
		if(!fc)
		{
			fc=gridObj.event.target;
		}
	}
	catch(excep)
	{
	}	
	
	filterDivElem.style.display="";
	
	if(!filterDivElem.getAttribute("adjusted") && filterDivElem.offsetWidth-filterDivElem.clientWidth>10 && filterDivElem.offsetWidth-filterDivElem.clientWidth<30)
	{
		filterDivElem.style.width=(filterDivElem.offsetWidth+(filterDivElem.offsetWidth-filterDivElem.clientWidth)).toString()+"px";
		filterDivElem.setAttribute("adjusted","true");
	}

	ig_csom.absPosition(fc,filterDivElem,ig_Location.BelowLeft,tPan);
	
	filterDivElem.CurrentDropSource = this;
}
,
"getHighlightStyle",
function()
{
	
	var b = this.Column.Band;
		
	return  b.Grid.FilterOperandItemHoverStyle + " "+b.FilterOperandItemHoverStyle;
},
"_showListOption",
function(option,show)
{


    var e = this.Element.childNodes[0].childNodes[1].childNodes;     
    for(var itr = 0 ; itr < e.length ; itr++) 
    {
        var node=e[itr];
        if(node.getAttribute("operator")==option)
        {
           node.style.display = (show ? "" : "none");
        }
    }    
}
]
for(var i=0;i<igtbl_ptsFilterIconDropDown.length;i+=2)
	igtbl_FilterIconsList.prototype[igtbl_ptsFilterIconDropDown[i]]=igtbl_ptsFilterIconDropDown[i+1];

var igtbl_waitDiv=null;
var igtbl_wndOldCursor=null;
var igtbl_oldMouseDown=null;
var igtbl_currentEditTempl=null;
var igtbl_focusedElement=null;

// Grid object
igtbl_Grid.prototype=new igtbl_WebObject();
igtbl_Grid.prototype.constructor=igtbl_Grid;
igtbl_Grid.base=igtbl_WebObject.prototype;
function igtbl_Grid(element,node
	,gridInitArray,bandsInitArray,colsInitArray,eventsInitArray,xmlInitProps
)
{
	if(arguments.length>0)
		this.init(element,node
		,gridInitArray,bandsInitArray,colsInitArray,eventsInitArray,xmlInitProps
		);
}


var igtbl_ptsGrid=[
"init",
function(element,node
	,gridInitArray,bandsInitArray,colsInitArray,eventsInitArray,xmlInitProps
)
{
	igtbl_Grid.base.init.apply(this,["grid",element,node]);
	this.IsXHTML=igtbl_isXHTML;
	if(node)
	{
		this.XmlNS="";
		this.Xml=node;
		
		this.Node=this.Xml.selectSingleNode("UltraWebGrid/UltraGridLayout");
	}
	this.ViewState=ig_ClientState.addNode(ig_ClientState.createRootNode(),"UltraWebGrid");
	this.ViewState=ig_ClientState.addNode(this.ViewState,"DisplayLayout");
	this.StateChanges=ig_ClientState.addNode(this.ViewState,"StateChanges");

	this.Id=this.Id.substr(2);

// Initialize properties

	this._Changes=new Array();
	
	this.SelectedRows=new Object();
	this.SelectedColumns=new Object();
	this.SelectedCells=new Object();
	this.SelectedCellsRows=new Object();
	this.ExpandedRows=new Object();
	this.CollapsedRows=new Object();
	this.ResizedColumns=new Object();
	this.ResizedRows=new Object();
	this.ChangedRows=new Object();
	this.ChangedCells=new Object();
	this.AddedRows=new Object();
	this.DeletedRows=new Object();
//** OBSOLETE ***
	this.ActiveCell="";
	this.ActiveRow="";
	this.grid=this;
	this.activeRect=null;
	this.SuspendUpdates=false;
//** END OBSOLETE ***
	
	this._lastSelectedRow="";
	this.ScrollPos=0;
	this.currentTriImg=null;
	this.newImg=null;
	
	this.NeedPostBack=false;
	this.CancelPostBack=false;
	this.GridIsLoaded=false;
	
	this._exitEditCancel=false;
	this._noCellChange=false;
	this._insideSetActive=false;
	this.MainGrid=igtbl_getElementById(this.Id+"_main");
	this.DivElement=igtbl_getElementById(this.Id+"_div");
	var defaultProps=new Array("AddNewBoxVisible","AddNewBoxView","AllowAddNew","AllowColSizing","AllowDelete","AllowSort",
					"ItemClass","AltClass","AllowUpdate","CellClickAction","EditCellClass","Expandable","FooterClass",
					"GroupByRowClass","GroupCount","HeaderClass","HeaderClickAction","Indentation","NullText",
					"ExpAreaClass","RowLabelClass","SelGroupByRowClass","SelHeadClass","SelCellClass","RowSizing",
					"SelectTypeCell","SelectTypeColumn","SelectTypeRow","ShowBandLabels","ViewType","AllowPaging",
					"PageCount","CurrentPageIndex","PageSize","CollapseImage","ExpandImage","CurrentRowImage",
					"CurrentEditRowImage","NewRowImage","BlankImage","SortAscImg","SortDscImg","Activation",
					"cultureInfo","RowSelectors","UniqueID","StationaryMargins","LoadOnDemand","RowLabelBlankImage",
					"EIRM","TabDirection","ClientID","DefaultCentury","UseFixedHeaders","FixedHeaderIndicator",
					"FixedHeaderOnImage","FixedHeaderOffImage",
					
					"StopperStyle",
					"FixedColumnScrollType","TableLayout","AllowRowNumbering",
					"ClientSideRenumbering"
					,"XmlLoadOnDemandType", "Section508Compliant", "_rowToolTipFormatStr", "_childRowToolTipFormatStr"
					,"FilterDropDownStyle","FilterHighlightRowStyle","FilterDefaultImage","FilterAppliedImage","ImageDirectory","_progressIndicatorImage","EnableProgressIndicator"
					,"CellTitleMode", "HeaderTitleMode","SortAscAltText", "SortDescAltText", "ExpandAltText", "CollapseAltText", "_currentRowAltText", "_currentEditRowAltText", "_fixedHeaderOnAltText", "_fixedHeaderOffAltText", "_newRowAltText"
					,"GridCornerImage","UrlExecutionPath"
					,"ActivationObjectClassTB","ActivationObjectClassL","ActivationObjectClassR"
                    ,"FilterButtonImages","FilterRowStyle","FilterOperandDropDownStyle","FilterOperandItemStyle","FilterOperandItemHoverStyle","FilterOperandButtonStyle"
					,"SortingAlgorithm"
					);
	this.Bands=new Array();
	var props;
	props=gridInitArray;
	if(props)
	{
		for(var i=0;i<defaultProps.length;i++)
			this[defaultProps[i]]=props[i];
		this.Activation=new igtbl_initActivation(this.Activation);
		this.Activation._cssClass=this.ActivationObjectClassTB;
		this.Activation._cssClassL=this.ActivationObjectClassL;
		this.Activation._cssClassR=this.ActivationObjectClassR;
		this.cultureInfo=this.cultureInfo.split("|");
	}
	if(this.UseFixedHeaders
	|| this.XmlLoadOnDemandType!=0
	&& this.XmlLoadOnDemandType!=4
	)
	{
		this._scrElem=this.Element.parentNode.previousSibling;
		this._tdContainer=this._scrElem.parentNode.parentNode;
	}
	else
		this._tdContainer=this.Element.parentNode.parentNode;
	var xmlProps=xmlInitProps;
	this._AddnlProps=xmlProps;
	this.RowsServerLength=xmlProps[0];
	this.RowsRange=xmlProps[1];
	this.RowsRetrieved=xmlProps[2];
	
    if (this.XmlLoadOnDemandType==2 && this.RowsRetrieved>this.RowsRange)
        this._recordChange("RowToStart",this,this.RowsRetrieved-this.RowsRange);
	if(!node)
	{
		var bandsArray=bandsInitArray;
		var bandCount=bandsArray.length;
		for(var i=0;i<bandCount;i++) 
			this.Bands[i]=new igtbl_Band(this,null,i
				,bandsInitArray,colsInitArray
			);
	}
	else
	{
		this.Bands.Node=this.Xml.selectSingleNode("UltraWebGrid/Bands");
		var bandNodes=this.Bands.Node.selectNodes("Band");
		for(var i=0;i<bandNodes.length;i++)
			this.Bands[i]=new igtbl_Band(this,bandNodes[i],i
				,bandsInitArray,colsInitArray
			);
	}
	igtbl_dispose(defaultProps);

	igtbl_gridState[this.Id]=this;
	
	this.Events=new igtbl_Events(this
		,eventsInitArray
	);
	this.Rows=new igtbl_Rows((this.Node?this.Xml.selectSingleNode("UltraWebGrid/Rs"):null),this.Bands[0],null);
	
	this.Rows._getRowToStart=function()
	{
		if(this.Grid.XmlLoadOnDemandType==2)
		{
			var topRowNo=Math.floor(this.Grid.getDivElement().scrollTop/this.Grid.getDefaultRowHeight());
			return topRowNo;
		}
		return 0;
	};
	
	
	
	if (this.Bands && !this.Bands[0].IsGrouped && this.StationaryMargins!=1 && this.StationaryMargins!=3)
	{
		igtbl_assignColumnElements(this.Rows.Element.previousSibling,this.Bands[0]);
	}
	this.regExp=null;
	this.backwardSearch=false;
	this.lastSearchedCell=null;
    this.lastSortedColumn="";
    if(this.AllowRowNumbering==2)this.CurrentRowNumber=0;
	this.GroupByBox=new igtbl_initGroupByBox(this);
	this.eReqType=igtbl_reqType;
	this.eReadyState=igtbl_readyState;
	this.eError=igtbl_error;
	
	
	
	this.eFilterComparisionOperator=igtbl_filterComparisionOperator;
    this.eRowFilterMode=igtbl_RowFilterMode;
    this.eFeatureRowView=igtbl_featureRowView;
    this.eFilterComparisonType=igtbl_filterComparisonType;
	this.eClipboardOperation=igtbl_ClipboardOperation;
	this.eClipboardError=igtbl_ClipboardError;
	if(this.Node || !ig_csom.IsIE && this.LoadOnDemand==3)
	{		
		this.ReqType=this.eReqType.None;
		this.ReadyState=this.eReadyState.Ready;
		this.Error=this.eError.Ok;

		this._innerObj=document.createElement("div");

		
    	

		this.QueryString="";
		this.XslProcessor=new igtbl_XSLTProcessor(this._AddnlProps[11]);
		if(ig_csom.IsIE)
			this.XmlResp=ig_createActiveXFromProgIDs(["MSXML2.DOMDocument","Microsoft.XMLDOM"]);
		else
			this.DOMParser=new DOMParser();
		if(node)
			this.Rows.render();
	}
	
	if (xmlProps[14])
	{
		_igtbl_processServerPassedColumnFilters(xmlProps[14],this)		
	}
	this._progressIndicator=new ig_progressIndicator(this.ImageDirectory+this._progressIndicatorImage, this.MainGrid);
	this._progressIndicator.setLocation(ig_Location.MiddleCenter);
	if(this.Bands[0].ColHeadersVisible!=2 && (this.StationaryMargins==1 || this.StationaryMargins==3)
		&& igtbl_getElementById(this.Id+"_hdiv")
	)
		this.StatHeader=new igtbl_initStatHeader(this);
	if(this.Bands[0].ColFootersVisible==1 && (this.StationaryMargins==2 || this.StationaryMargins==3)
		&& igtbl_getElementById(this.Id+"_fdiv")
	)
		this.StatFooter=new igtbl_initStatFooter(this);
	this._calculateStationaryHeader();
	this.VirtualScrollDelay=500;
	if(this.XmlLoadOnDemandType==3)
		window.setTimeout("_igtbl_getMoreRows('"+this.Id+"');",100);
		
		
	igtbl_addEventListener(document.body,"mousemove",igtbl_globalMouseMove);
	var thisForm=igtbl_getThisForm(this.Element);
	if(thisForm)
	{
		this._thisForm=thisForm;
		
		if(thisForm.igtblGrid && thisForm.igtblGrid.Id!=this.Id)
			this.oldIgtblGrid=thisForm.igtblGrid;
		else
		{
			if(thisForm.addEventListener 
				
				&& !igtbl_isAtlas
			)
			{
				thisForm.addEventListener('submit',igtbl_submit,false);				
			}	
			else if(typeof(thisForm.igtbl_oldOnSubmit)=="undefined" || thisForm.igtbl_oldOnSubmit==null)
			{
				thisForm.igtbl_oldOnSubmit=thisForm.onsubmit;
				thisForm.onsubmit=igtbl_submit;
			}
			
			if(typeof(MSOLayout_RemoveWebPart)=="undefined" && (typeof(thisForm.igtbl_oldSubmit)=="undefined" || thisForm.igtbl_oldSubmit==null))
			{
			    thisForm.igtbl_oldSubmit=thisForm.submit;
			    
				
				thisForm.submit=igtbl_formSubmit;
			}
			if(typeof(window._igtbl_doPostBackOld)=="undefined" || window._igtbl_doPostBackOld==null)
			{
				window._igtbl_doPostBackOld=window.__doPostBack;
				window.__doPostBack=igtbl_submit;
			}
			window._igtbl_thisForm=thisForm;
		}
		thisForm.igtblGrid=this;
	}
	this.SortImplementation=null;
},
"sortColumn",
function(colId,shiftKey)
{
	var bandNo=igtbl_bandNoFromColId(colId);
	var band=this.Bands[bandNo];
	var colNo=igtbl_colNoFromColId(colId);
	if(band.Columns[colNo].SortIndicator==3)
		return;
	var headClk=igtbl_getHeaderClickAction(this.Id,bandNo,colNo);
	if(headClk==2 || headClk==3)
	{
		var gs=igtbl_getGridById(this.Id);
		if(!band.ClientSortEnabled)
			gs.NeedPostBack=true;
		var eventCanceled=igtbl_fireEvent(this.Id,this.Events.BeforeSortColumn,"(\""+this.Id+"\",\""+colId+"\")");
		if(eventCanceled && band.ClientSortEnabled)
			return;
		if(!eventCanceled)
			this.addSortColumn(colId,(headClk==2 || !shiftKey));
		else
			gs.NeedPostBack=false;
		if(!eventCanceled && band.ClientSortEnabled)
		{
			var el=igtbl_getDocumentElement(colId);
            
            if(!el.length && el.tagName=="TH" && el.getAttribute("groupInfo") )
				igtbl_sortGroupedRows(this.Rows,bandNo,colId);
			else
			{
				if(!el.length)
				{
					el=new Array();
					el[0]=igtbl_getElementById(colId);
				}
				for(var i=0;i<el.length;i++)
				{
					var rows=el[i].parentNode;
					
					while(rows && (rows.tagName!="TABLE" || (rows.tagName=="TABLE" && rows.id=="") ) ) rows=rows.parentNode;
					
					if(rows && rows.tBodies[0]) rows=rows.tBodies[0];
					if(!rows || !rows.Object) continue;
					rows.Object.sort();
				}
			}
			gs._recalcRowNumbers();
			igtbl_hideEdit(this.Id);
			igtbl_fireEvent(this.Id,this.Events.AfterSortColumn,"(\""+this.Id+"\",\""+colId+"\")");
		}
	}
},
"addSortColumn",
function(colId,clear)
{
	var colAr=colId.split(";");
	if(colAr.length>1)
	{
		for(var i=0;i<colAr.length;i++)
			if(colAr[i]!="")
			{
				var band=this.Bands[igtbl_bandNoFromColId(colAr[i])];
				band.SortedColumns[band.SortedColumns.length]=colAr[i];
				
				var colObj = igtbl_getColumnById(colAr[i]);				
				var colNo=igtbl_colNoFromColId(colAr[i]);				
				var bandNo=band.Index;
				if (colObj.IsGroupBy)
				{
					var postString="group:"+bandNo+":"+colNo+":false:band:"+bandNo;			
					this._recordChange("ColumnGroup",band.Columns[colNo],postString);
					colObj._Changes["ColumnGroup"].setFireEvent(false);
				}
				else			
					this._recordChange("SortedColumns",band.Columns[colNo],"false"+":"+band.Columns[colNo].SortIndicator);
			}
	}
	else
	{
		var band=this.Bands[igtbl_bandNoFromColId(colId)];
		var colNo=igtbl_colNoFromColId(colId);
		if(band.Columns[colNo].SortIndicator==3)
			return;
		if(clear)
		{
			var scLen=band.SortedColumns.length;
			for(var i=scLen-1;i>=0;i--)
			{
				var cn=igtbl_colNoFromColId(band.SortedColumns[i]);
				if(cn!=colNo && band.Columns[cn].SortIndicator!=3 && !band.Columns[cn].IsGroupBy)
				{
					band.Columns[cn].SortIndicator=0;
					if(band.ClientSortEnabled)
					{
						var colEl=igtbl_getDocumentElement(band.SortedColumns[i]);
						
						if(colEl)
						{
							if(!colEl.length)
								colEl=[colEl];
							for(var j=0;j<colEl.length;j++)
							{
								var img=null;
								var el=colEl[j];
								
								for(var x=0; x<el.childNodes.length; x++)
								{
									if(el.childNodes[x].tagName=="NOBR")
									{
										el=el.childNodes[x];
										break;
									}
								}
									
																
											
									
								if (el.childNodes.length)
								{
								    
								    img = _igtbl_findSortImage(el.childNodes);

								}								
								if(img)
									el.removeChild(img);
							}
						}
					}
				}
				if(band.Columns[cn].IsGroupBy)
					break;
				band.SortedColumns=band.SortedColumns.slice(0,-1);
				
			}
		}
		if(band.Columns[colNo].SortIndicator==1)
			band.Columns[colNo].SortIndicator=2;
		else
			band.Columns[colNo].SortIndicator=1;
			
		if(this.LoadOnDemand==3 && this._containsChange("SortedColumns",band.Columns[colNo]))
		{
		    this._removeChange("SortedColumns",band.Columns[colNo]);   
		}		
		this._recordChange("SortedColumns",band.Columns[colNo],clear.toString()+":"+band.Columns[colNo].SortIndicator);
		band.Grid.lastSortedColumn=colId;
		if(band.ClientSortEnabled)
		{
			var colEl=igtbl_getDocumentElement(colId);
			
			if (colEl)
			{
				if(!colEl.length)
					colEl=[colEl];
				for(var i=0;i<colEl.length;i++)
				{
					var img=null;
					var el=colEl[i];
					if(el.firstChild && el.firstChild.tagName=="NOBR")
						el=el.firstChild;				
					
					
					if (el.childNodes.length)
					{
					
					
									
								    img = _igtbl_findSortImage(el.childNodes);

					}
					
					if (img===null)
					{
						img=document.createElement("img");
						img.border="0";
						img.height="12";
						img.width="12";
						img.setAttribute("imgType","sort");
						if(!el.getAttribute("charApnd"))
						{
							el.innerHTML+="&nbsp;";
							el.setAttribute("charApnd",1);
						}
						img.alt = this.SortDescAltText;
						img.setAttribute("igAltS", this.SortAscAltText);
						el.appendChild(img);
					}
					
					var alt = img.getAttribute("alt");
					if(band.Columns[colNo].SortIndicator==1)
					{
						img.src=this.SortAscImg;				
						if(alt != null)
						{
							var clpsAlt = img.getAttribute("igAltS");
							var clpsAlt2 = img.getAttribute("igAltUp")
							if(clpsAlt != null){
								img.setAttribute("igAltD",alt);
								img.setAttribute("alt",clpsAlt);
								img.removeAttribute("igAltS");
							}
							else if(clpsAlt2 != null){
								img.setAttribute("igAltDn",alt);
								img.setAttribute("alt",clpsAlt2);
								img.removeAttribute("igAltUp");
							}
							
						}
					}
					else
					{
						img.src=this.SortDscImg;
						if(alt != null)
						{
							var clpsAlt = img.getAttribute("igAltD");
							var clpsAlt2 = img.getAttribute("igAltDn")
							if(clpsAlt != null){
								img.setAttribute("igAltS",alt);
								img.setAttribute("alt",clpsAlt);
								img.removeAttribute("igAltD");
							}
							else if(clpsAlt2 != null){
								img.setAttribute("igAltUp",alt);
								img.setAttribute("alt",clpsAlt2);
								img.removeAttribute("igAltDn");
							}
						}
					}
				}
			}
		}
		if(!band.Columns[colNo].IsGroupBy)
		{
			for(var i=0;i<band.SortedColumns.length;i++)
				if(band.SortedColumns[i]==colId)
					break;
			if(i==band.SortedColumns.length)
			{
				band.Columns[colNo].ensureWebCombo();
				band.SortedColumns[band.SortedColumns.length]=colId;
			}
		}
	}
},
"getActiveCell",
function()
{
	return this.oActiveCell;
},
"setActiveCell",
function(cell,force)
{
	if(!this.Activation.AllowActivation || this._insideSetActive)
		return;
	if(!cell || !cell.Element || cell.Element.tagName!="TD")
		cell=null;
	if(!force && (cell && this.oActiveCell==cell || this._exitEditCancel))
	{
		this._noCellChange=true;
		return;
	}
	if(!cell)
	{
		this.ActiveCell="";
		this.ActiveRow="";
		var row=this.oActiveRow;
		cell=this.oActiveCell;
		if(cell)
			row=cell.Row;
		if(row)
			row.setSelectedRowImg(true);
		if(cell)
			cell.renderActive(false);
		if(this.oActiveRow)
			this.oActiveRow.renderActive(false);
		this.oActiveCell=null;
		this.oActiveRow=null;
		if(cell)
			this._removeChange("ActiveCell",cell);
		if(row)
			this._removeChange("ActiveRow",row);
		if(this.AddNewBoxVisible)
			this.updateAddNewBox();
		return;
	}
	var change=true;
	var oldACell=this.oActiveCell;
	var oldARow=this.oActiveRow;
	if(!oldARow && oldACell)
		oldARow=oldACell.Row;
	this.endEdit();
	
	if(this._exitEditCancel || this.fireEvent(this.Events.BeforeCellChange,[this.Id,cell.Element.id])==true)
		change=false;
	if(change && cell.Row!=oldARow)
	{
		if(oldARow)
		{
			change &= this.fireEvent(this.Events.BeforeRowDeactivate, [this.Id, oldARow.Element.id]) != true;
			if(oldARow.IsAddNewRow)
				oldARow.commit();
			else
				oldARow.processUpdateRow();
		}
		if(this._exitEditCancel || this.fireEvent(this.Events.BeforeRowActivate,[this.Id,cell.Row.Element.id])==true)
			change=false;
	}
	if(!change)
	{
		this._noCellChange=true;
		return;
	}
	this._noCellChange=false;
	if(this.oActiveCell)
		this.oActiveCell.renderActive(false);
	if(this.oActiveRow)
		this.oActiveRow.renderActive(false);
	this.oActiveCell=cell;
	this.ActiveCell=cell.Element.id;
	if(this.oActiveRow)
		this._removeChange("ActiveRow",this.oActiveRow);
	this.oActiveRow=null;
	this.ActiveRow="";
	this.oActiveCell.renderActive();
	if(this.oActiveCell.Row!=oldARow)
		this.setNewRowImg(null);
	this.oActiveCell.Row.setSelectedRowImg();
	this.colButtonMouseOut();
	if(this.AddNewBoxVisible)
		this.updateAddNewBox();
	
	
	igtbl_activate(this.Id);
	this._removeChange("ActiveCell",oldACell);
	this._recordChange("ActiveCell",this.oActiveCell);	
	
	this.fireEvent(this.Events.CellChange,[this.Id,this.oActiveCell.Element.id]);
	
	if(this.oActiveCell && this.oActiveCell.Row!=oldARow)
		this.fireEvent(this.Events.AfterRowActivate,[this.Id,this.oActiveCell.Row.Element.id]);
		
	
	if(cell.Row.IsFilterRow)
		this.NeedPostBack = false;
},
"getActiveRow",
function()
{
	if(this.oActiveRow!=null)
		return this.oActiveRow;
	if(this.oActiveCell!=null)
		return this.oActiveCell.Row;
	return null;
},
"setActiveRow",
function(row,force,fireEvents)
{
	if(!this.Activation.AllowActivation || this._insideSetActive)
		return;
	if(typeof(fireEvents)=="undefined")
		fireEvents=true;
	if(!row || !row.Element || row.Element.tagName!="TR")
		row=null;
	if(!force && (row && this.oActiveRow==row || this._exitEditCancel))
	{
		this._noCellChange=true;
		return;
	}
	if(!row)
	{
		this.ActiveCell="";
		this.ActiveRow="";
		row=this.oActiveRow;
		var cell=this.oActiveCell;
		if(cell)
			row=cell.Row;
		if(row)
			row.setSelectedRowImg(true);
		if(cell)
			cell.renderActive(false);
		if(this.oActiveRow)
			this.oActiveRow.renderActive(false);
		this.oActiveCell=null;
		this.oActiveRow=null;

		if(cell)
			this._removeChange("ActiveCell",cell);
		this._removeChange("ActiveRow",row);

		
		if(this._fromServerActiveRow)
			this._recordChange("ActiveRow",this,-1);

		if(this.AddNewBoxVisible)
			this.updateAddNewBox();
		return;
	}
	var change=true;
	var oldACell=this.oActiveCell;
	var oldARow=this.oActiveRow;
	if(!oldARow && oldACell)
		oldARow=oldACell.Row;
	this.endEdit();

	if(fireEvents && row!=oldARow && oldARow)
	{
		change &= this.fireEvent(this.Events.BeforeRowDeactivate, [this.Id, oldARow.Element.id]) != true;
		if(oldARow.IsAddNewRow)
			oldARow.commit();
		else
			oldARow.processUpdateRow();
	}

	if(this._exitEditCancel || fireEvents && this.fireEvent(this.Events.BeforeRowActivate,[this.Id,row.Element.id])==true)
		change=false;
	var cellChanged=this.oActiveCell!=null;
	if(change && cellChanged)
		change=!this.fireEvent(this.Events.BeforeCellChange,[this.Id,this.oActiveCell.Element.id]);
	if(!change)
	{
		this._noCellChange=true;
		return;
	}
	this._noCellChange=false;
	if(this.oActiveCell)
		this.oActiveCell.renderActive(false);
	if(this.oActiveRow)
		this.oActiveRow.renderActive(false);
	this.oActiveRow=row;
	this.ActiveRow=row.Element.id;
	if(cellChanged)
		this._removeChange("ActiveCell",this.oActiveCell);
	this.oActiveCell=null;
	this.ActiveCell="";
	this.oActiveRow.renderActive();
	this.oActiveRow.setSelectedRowImg();
	this.colButtonMouseOut();
	if(this.AddNewBoxVisible)
		this.updateAddNewBox();
	
	
	igtbl_activate(this.Id);
	igtbl_activate(this.Id);
	this._removeChange("ActiveRow",oldARow);
	this._recordChange("ActiveRow",this.oActiveRow);	
	if(fireEvents)
	{
		if(cellChanged)
			this.fireEvent(this.Events.CellChange,[this.Id,""]);
		var oldNPB=this.NeedPostBack;
		this.fireEvent(this.Events.AfterRowActivate,[this.Id,row.Element.id]);
		if(!oldNPB && this.NeedPostBack && oldARow==row)
			this.NeedPostBack=false;
			
		
		if(row.IsFilterRow)
			this.NeedPostBack = false;
	}
	
	
},
"deleteSelectedRows",
function()
{
	igtbl_deleteSelRows(this.Id);
	igtbl_activate(this.Id);
	this._recalcRowNumbers();	
},
"unloadGrid",
function()
{
	if(this.Id)
		igtbl_unloadGrid(this.Id);
},
"dispose",
function()
{
	igtbl_unloadGrid(this.Id,true);
},
"beginEditTemplate",
function()
{
	var row=this.getActiveRow();
	if(row)
		row.editRow();
},
"endEditTemplate",
function(saveChanges)
{
	var row=this.getActiveRow();
	if(row)
		row.endEditRow(saveChanges);
},
"find",
function(re, back
, searchHiddenColumns
)
{
	var g=this;
	if(re)
		g.regExp=re;
	if(!g.regExp)
		return null;
	g.lastSearchedCell=null;
	if(back==true || back==false)
		g.backwardSearch=back;
	var row=null;
	if(!g.backwardSearch)
	{
		row=g.Rows.getRow(0);
		if(row && row.getHidden())
			row=row.getNextRow();
		while(row && 
		    row.find(re, back, searchHiddenColumns)
            == null)
        {
			row=row.getNextTabRow(false,true);
		}
	}
	else
	{
		var rows=g.Rows;
		while(rows)
		{
			row=rows.getRow(rows.length-1);
			if(row && row.getHidden())
				row=row.getPrevRow();
			if(row && row.Expandable)
				rows=row.Rows;
			else
			{
				if(!row)
					row=rows.ParentRow;
				rows=null;
			}
		}
		while(row && 
		    row.find(re, back, searchHiddenColumns)
            == null)
			row=row.getNextTabRow(true,true);
	}
	return g.lastSearchedCell;
},
"findNext",
function(re,back
, searchHiddenColumns
)
{
	var g=this;
	if(!g.lastSearchedCell)
	{
        return this.find(re, back, searchHiddenColumns);
	}
	if(re)
		g.regExp=re;
	if(!g.regExp)
		return null;
	if(back==true || back==false)
		g.backwardSearch=back;
	var row=g.lastSearchedCell.Row;
	while(row && 
    row.findNext(re, back, searchHiddenColumns)==null
	)
		row=row.getNextTabRow(g.backwardSearch,true);
	return g.lastSearchedCell;
},
"alignStatMargins",
function()
{
	
	if(this.MainGrid.offsetHeight == 0) return;
	
	if(this.UseFixedHeaders)
	{
	    var hDiv = igtbl_getElementById(this.Id+"_hdiv");
	    if (this.Bands.length == 1 && this.StatHeader && hDiv && hDiv.firstChild  && hDiv.firstChild.tHead && hDiv.firstChild.tHead.rows && hDiv.firstChild.tHead.rows.length > 0)
	    {
            
            var lastHead = hDiv.firstChild.tHead.rows[hDiv.firstChild.tHead.rows.length - 1];
            if (lastHead.lastChild && lastHead.lastChild.firstChild && lastHead.lastChild.firstChild.id == this.Id + "_drs")
            {
                var hDivScr = lastHead.lastChild.firstChild;
                var divEl = this.getDivElement();
                hDivScr.firstChild.style.left = -divEl.scrollLeft + "px";
            }
	    }
	    else
	    {
			if(this.StatHeader)
				this.StatHeader.ScrollTo(this.getDivElement().scrollLeft);
			if(this.StatFooter)
				this.StatFooter.ScrollTo(this.getDivElement().scrollLeft);
	    }
	}
	else
	{
	    
	    var scrollLeft = this.getDivElement().scrollLeft; 
	    if(this.StatHeader)
	    {
	        
	        
	        var divContent = this.DivElement.firstChild;
	        var percentageWidth = this.Element.style.width.indexOf("%") != -1;
	        if (!percentageWidth)
	        {
                if(!this.DivElement.getAttribute("scrollDivWidth"))
				{
					var comWidth=this.DivElement.firstChild.offsetWidth;
					
					if(this.get("StationaryMarginsOutlookGroupBy")=="True" && this.StatHeader.Element.parentNode.style.width != "")
						comWidth+=_igtbl_headerRowIndentation(this, this.Bands[0].SortedColumns);
					this.DivElement.firstChild.style.width = comWidth + "px";
				}
            }
            else
            {
				
				
				if(!igtbl_dom.table.allPercentageColumns(this.Element, this.Bands[0].firstActiveCell))
				{
					var comWidth=this.Element.offsetWidth;
					if(this.get("StationaryMarginsOutlookGroupBy")=="True")
						comWidth+=_igtbl_headerRowIndentation(this, this.Bands[0].SortedColumns);
					this.DivElement.firstChild.style.width = comWidth + "px";
	            }
            }
		    this.StatHeader.ScrollTo(scrollLeft);
	    }
	    if(this.StatFooter)
	    {
		    this.StatFooter.ScrollTo(scrollLeft);
	    }
	    
		var mtb = igtbl_getElementById(this.Id + "_mtb");
		if (mtb && mtb.rows && mtb.rows.length == 2 && mtb.parentNode && !ig_shared.IsNetscape6)
		{
		    var r1H=igtbl_getAbsBounds(mtb.rows[1]).h;
	        
	        var r2H=0;
		    var re = new RegExp("_gbr$", "");
		    if ( this.StatHeader||!mtb.rows[0].id.match(re))
		    {		    
		        r2H=igtbl_getAbsBounds(mtb.rows[0]).h;
		    }
		    igtbl_getElementById(this.Id + "_mc").style.height=(r1H-r2H)+"px";
		}
	}
},

"selectCellRegion",
function(startCell,endCell)
{
	var sCol=startCell.Column,eCol=endCell.Column;
	if(sCol.Index>eCol.Index)
	{
		var c=sCol;
		sCol=eCol;
		eCol=c;
	}
	var sRow=startCell.Row,sRowIndex=sRow.getIndex(),eRow=endCell.Row,eRowIndex=eRow.getIndex();
	if(sRowIndex>eRowIndex)
	{
		var c=sRow;
		sRow=eRow;
		eRow=c;
		var i=sRowIndex;
		sRowIndex=eRowIndex;
		eRowIndex=i;
	}
	var pc=sRow.OwnerCollection;
	var band=sCol.Band;
	
	
	var selArray=new Array();
	
	if (sRowIndex>-1)
	for(var i=sRowIndex;i<=eRowIndex;i++)
	{
		var row=pc.getRow(i);
		if(!row.getHidden())
			for(var j=sCol.Index;j<=eCol.Index;j++)
			{
				var col=band.Columns[j];
				if(col.getVisible())
				{
					var cell=row.getCellByColumn(col);
					if(cell && cell.Element)
						selArray[selArray.length]=cell.Element.id;
				}
			}
	}
	if(selArray.length>0)
		igtbl_gSelectArray(this.Id,0,selArray);
	delete selArray;
},
"selectRowRegion",
function(startRow,endRow)
{
	var sRowIndex=startRow.getIndex(),eRowIndex=endRow.getIndex();
	if(sRowIndex>eRowIndex)
	{
		var r=startRow;
		startRow=endRow;
		endRow=r;
		var i=sRowIndex;
		sRowIndex=eRowIndex;
		eRowIndex=i;
	}
	
	
	if( (startRow.isFixedTop && startRow.isFixedTop()) || 
		(startRow.isFixedBottom && startRow.isFixedBottom()) || 
		(endRow.isFixedTop && endRow.isFixedTop()) || 
		(endRow.isFixedBottom && endRow.isFixedBottom())
		)return;
	var pc=startRow.OwnerCollection;
	var selArray=new Array();
	for(var i=sRowIndex;i<=eRowIndex;i++)
	{
		var row=pc.getRow(i);
		if(row && !row.getHidden())
			selArray[selArray.length]=row.Element.id;
	}
	if(selArray.length>0)
		igtbl_gSelectArray(this.Id,1,selArray);
	delete selArray;
},
"selectColRegion",
function(startCol,endCol)
{
	if(startCol.Index>endCol.Index)
	{
		var c=startCol;
		startCol=endCol;
		endCol=c;
	}
	var band=startCol.Band;
	var selArray=new Array();
	for(var i=startCol.Index;i<=endCol.Index;i++)
	{
		var col=band.Columns[i];
		if(col.getVisible())
			selArray[selArray.length]=col.Id;
	}
	if(selArray.length>0)
		igtbl_gSelectArray(this.Id,2,selArray);
	delete selArray;
},
"startHourGlass",
function()
{
	if(!igtbl_waitDiv)
	{
		igtbl_waitDiv=document.createElement("div");
		document.body.insertBefore(igtbl_waitDiv,document.body.firstChild);
		igtbl_waitDiv.style.zIndex=10000;
		igtbl_waitDiv.style.position="absolute";
		igtbl_waitDiv.style.left=0;
		igtbl_waitDiv.style.top=0;
		igtbl_waitDiv.style.backgroundColor="transparent";
	}
	igtbl_waitDiv.style.display="";
	igtbl_waitDiv.style.width=document.body.clientWidth;
	igtbl_waitDiv.style.height=document.body.clientHeight;
	igtbl_waitDiv.style.cursor="wait";
	
	if(igtbl_wndOldCursor===null)
		igtbl_wndOldCursor=document.body.style.cursor;
		
	document.body.style.cursor="wait";
},
"stopHourGlass",
function()
{
	if(igtbl_waitDiv)
	{
		igtbl_waitDiv.style.cursor="";
		igtbl_waitDiv.style.display="none";
		document.body.style.cursor=igtbl_wndOldCursor;
		igtbl_wndOldCursor = null;
	}
},
"clearSelectionAll",
function()
{
	igtbl_clearSelectionAll(this.Id);
},
//*** OBSOLETE ***
"alignGrid",
function(){},
"suspendUpdates",
function(suspend)
{
	if(suspend==false)
	{
		this.SuspendUpdates=false;
	}
	else
		this.SuspendUpdates=true;
},
//*** END OBSOLETE ***
"beginEdit",
function()
{
	if(this.oActiveCell)
		this.oActiveCell.beginEdit();
},
"endEdit",

function(force)
{
	var ec=this._editorCurrent;
	if(!ec && this.oActiveCell)
	{
		ec=this.oActiveCell.Column.getEditorControl();
		if(ec && ec.Element)
			ec=ec.Element;
	}
	if(force)
		if(ec && ec.removeAttribute)
			 ec.removeAttribute("noOnBlur");
	if(ec && ec.getAttribute && ec.getAttribute("noOnBlur"))
		return;
	igtbl_hideEdit(this.Id);
},
"fireEvent",
function(eventObj,args)
{
	if(!this.isLoaded()) return;
	var result=false;
	if(eventObj[0]!="")
	{
		
		try
		{
			if(typeof(eval(eventObj[0]))!="function")
				throw "Event handler does not exist.";
		}
		catch(ex)
		{
			alert("There is a problem with the event handler method: '"+eventObj[0]+"'. Please check the method name's spelling.")
			return false;
		}
		
		result=eval(eventObj[0]).apply(this,args);
	}
	if(this.GridIsLoaded && result!=true && eventObj[1]>0 && !this.CancelPostBack)
		this.NeedPostBack=true;
	this.CancelPostBack=false;
	return result;
},
"setNewRowImg",
function(row)
{
	var gs=this;
	if(row)
		row.setSelectedRowImg(true);
	if(gs.newImg!=null)
	{
		gs._lastSelectedRow=null;
		var imgObj;
		imgObj=document.createElement("img");
		imgObj.src=gs.BlankImage;
		imgObj.border="0";
		imgObj.setAttribute("imgType","blank");
		gs.newImg.parentNode.appendChild(imgObj);
		gs.newImg.parentNode.removeChild(gs.newImg);
		var oRow=igtbl_getRowById(imgObj.parentNode.parentNode.id);
		if(oRow)
			gs._recalcRowNumbers(oRow);
		gs.newImg=null;
	}
	if(!row || row.Band.getRowSelectors()==2 || row.Band.AllowRowNumbering>1)
		return;
	var imgObj;
	imgObj=document.createElement("img");
	imgObj.src=gs.NewRowImage;
	imgObj.border="0";
	imgObj.setAttribute("imgType","newRow");
	if(gs.Section508Compliant)
	    imgObj.setAttribute("alt",gs._newRowAltText);
	var cell=row.Element.cells[row.Band.firstActiveCell-1];
	cell.innerHTML="";
	cell.appendChild(imgObj);
	gs.newImg=imgObj;
},
"colButtonMouseOut",
function()
{
	igtbl_colButtonMouseOut(null,this.Id);
},
"sort",
function()
{
	if(igtbl_sortGrid)
	{
		igtbl_sortGrid.apply(this);
		this._recordChange("Sort",this)
		this._recalcRowNumbers();
	}
},
"updateAddNewBox",
function()
{
	igtbl_updateAddNewBox(this.Id);
},
"update",
function()
{
	if(typeof(igtbl_hideEdit)!="undefined")
	{
		if(this._editorCurrent)
			this._editorCurrent.removeAttribute("noOnBlur");
		igtbl_hideEdit(this.Id);
	}
	
	var p=igtbl_getElementById(this.ClientID);
	if(!p) return;
	if(this.Element.parentNode)
	{
		if(this.Element.parentNode.scrollLeft)
			ig_ClientState.setPropertyValue(this.ViewState,"ScrollLeft",this.Element.parentNode.scrollLeft.toString());
		if(this.Element.parentNode.scrollTop)
			ig_ClientState.setPropertyValue(this.ViewState,"ScrollTop",this.Element.parentNode.scrollTop.toString());
	}
	p.value=ig_ClientState.getText(this.ViewState.parentNode);
},
"goToPage",
function(page)
{
    
    page=igtbl_parseInt(page);
	if(!this.isLoaded() || !this.AllowPaging || this.CurrentPageIndex==page || page<1 || page>this.PageCount)
		return;
	if(!this.Node && !ig_csom.IsNetscape6 || this.LoadOnDemand!=3)
	{
		this._recordChange("PageChanged",this,page);
		igtbl_doPostBack(this.Id);
	}	
	else
	{
	    
		
		this.invokeXmlHttpRequest(this.eReqType.Page,this,page);
	}
},
"getRowByLevel",
function(level)
{
	if(typeof(level)=="string")
		level=level.split("_");
	var rows=this.Rows;
	
	var adj=0;
	if(typeof(rows._getRowToStart)!="undefined")
		adj=rows._getRowToStart();
	for(var i=0;i<level.length-1;i++)
	{
		rows=rows.getRow(level[i]-adj).Rows;
		if(typeof(rows._getRowToStart)!="undefined")
			adj=rows._getRowToStart();
	}
	return rows.getRow(level[level.length-1]-adj);
},
"xmlHttpRequest",
function(type,waitResponse)
{
	if(this.fireEvent(this.Events.BeforeXmlHttpRequest,[this.Id,type])==true)
		return;
	var smartCallback = null;
	
    
	var serverContext = {QueryString:igtbl_escape(this.QueryString), requestType:"xml"};
	var clientContext = {requestType:"json"};
	
	
	

	smartCallback = new ig_SmartCallback(clientContext, serverContext, null, this.UniqueID, this, waitResponse)
	smartCallback.callbackFinished = igtbl_onReadyStateChange;
	smartCallback.Type=type;
	smartCallback.QueryString=this.QueryString;
	smartCallback.RowToQuery=this.RowToQuery;
	smartCallback.ReqType=type;
	this._displayPI();
	smartCallback.execute();
	
    	
},
"_containsChange",
function(type,obj)
{	
	return obj&&(obj._Changes[type]!=null);
},
"_recordChange",
function(type,obj,value,inId)
{
	var stateChange=new igtbl_StateChange(type,this,obj,value);
	if(typeof(this[type])!="undefined")
	{
		var id=obj?(obj.Element?obj.Element.id:obj.Id):inId;
		if(typeof(value)!="undefined" && value!=null)
			this[type][id]=value;
		else
			this[type][id]=inId?stateChange:true;
	}
	return stateChange;
},
"_removeChange",
function(type,obj,lastOnly)
{
	var ch;
	if(obj&&(ch=obj._Changes[type]))
	{
		if(ch.length)
		{
			if(lastOnly)
				ch[ch.length-1].remove(lastOnly);
			else
			{
				for(var i=ch.length-1;i>=1;i--)
					ch[i].remove();
				obj._Changes[type].remove();
			}
		}
		else
			ch.remove(lastOnly);
		if(typeof(this[type])!="undefined")
		{
			var id=obj.Element?obj.Element.id:obj.Id;
			delete this[type][id];
		}
	}
},
"alignDivs",
function(scrollLeft,force)
{
	
	if(this.MainGrid.offsetHeight == 0) return;
	
	if(!this.UseFixedHeaders
		
		&& (this.XmlLoadOnDemandType==0
		|| this.XmlLoadOnDemandType==4
		)
	) return;
	var mainGrid=this.MainGrid;
	if(!mainGrid) return;
	var divs=this._scrElem;
	var divf=this.Element.parentNode;
	var isInit=false;
	this.Element.setAttribute("noOnResize",true);
	
	if(ig_csom.IsFireFox)
	{
		if(divs.style.height!=divs.parentNode.style.height)
			divs.style.height = divs.parentNode.style.height;
	}		
	if(!divs.firstChild.style.width && this.Element.offsetWidth)
	{
		
		var expandAreaWidth = (this.Bands.length>1) ? this.Element.firstChild.firstChild.offsetWidth : 0;
		divs.firstChild.style.width=(this.Element.offsetWidth + expandAreaWidth + (this.GroupCount==1?this.Bands[0].getIndentation():0)).toString()+"px";
		if(!mainGrid.style.height)
			divs.style.overflowY="hidden";
		isInit=true;
	}
    
    var calculatedScrollWidth=divs.getAttribute("scrollDivWidth");
    if (calculatedScrollWidth)
    {
        if (calculatedScrollWidth > divs.firstChild.offsetWidth)
        {
            divs.firstChild.style.width=calculatedScrollWidth+"px";
        }
    }
	
	if(!mainGrid.style.width)
		divs.style.width=mainGrid.clientWidth.toString()+"px";
	
	
	
	if (this.XmlLoadOnDemandType==0 || this.XmlLoadOnDemandType==4)	
		divs.firstChild.style.height=this.Element.offsetHeight.toString()+"px";
	else	
		this._setScrollDivHeight();
		
	if(!mainGrid.style.height)
	{		
		divs.style.height=this.Element.offsetHeight.toString()+"px";
		if(divs.scrollHeight!=divs.clientHeight)
		{
			
			var divsHeight=this.Element.offsetHeight+divs.scrollHeight-divs.clientHeight;
			if(divsHeight<0) divsHeight=-divsHeight;
			divs.style.height=divsHeight.toString()+"px";
		}
		divs.parentNode.style.height=divs.offsetHeight.toString()+"px";
	}
	if(isInit)
	{
		if(!divs.style.width || divs.style.width.charAt(divs.style.width.length-1)!="%")
			divs.setAttribute("oldW",divs.offsetWidth);
		if(!divs.style.height || divs.style.height.charAt(divs.style.height.length-1)!="%")
			divs.setAttribute("oldH",divs.offsetHeight);
	}
	var relOffs=false;
	if(ig_csom.IsIE)
	{
		while(mainGrid && mainGrid.tagName!=(igtbl_isXHTML?"HTML":"BODY") && !relOffs)
		{
			relOffs=mainGrid.style.position!="" && mainGrid.style.position!="static";
			if(!relOffs) mainGrid=mainGrid.parentNode;
		}
	}
	
	divf.style.left=(parseInt(divf.style.left,10) + igtbl_getAbsolutePos2("Left", divs) - igtbl_getAbsolutePos2("Left", divf)).toString() + "px";
	divf.style.top=(parseInt(divf.style.top,10) + igtbl_getAbsolutePos2("Top", divs) - igtbl_getAbsolutePos2("Top", divf)).toString() + "px";
	
	
	
	{
		divf.style.width=igtbl_clientWidth(divs).toString()+"px";
		divf.style.height=igtbl_clientHeight(divs).toString()+"px";
	}
	
	
	if (this.XmlLoadOnDemandType==0	|| this.XmlLoadOnDemandType==4)	
		divs.firstChild.style.height=this.Element.offsetHeight.toString()+"px";
	else	
		this._setScrollDivHeight();
	
	if(divf.firstChild.style.left=="")
		divf.firstChild.style.left="0px";
	if(divf.firstChild.style.top=="")
		divf.firstChild.style.top="0px";
	if(!scrollLeft)
		scrollLeft=divs.scrollLeft;
	else
	{
	    
	    
		igtbl_scrollLeft(divs,scrollLeft);
		
	}
	var doHoriz=false;
	if(!this._oldScrollLeftAlign)
		this._oldScrollLeftAlign=0;
	if(this._oldScrollLeftAlign!=scrollLeft)
	{
		this._oldScrollLeftAlign=scrollLeft;
		doHoriz=true;
	}
	if(parseInt(divf.firstChild.style.top,10)!=-divs.scrollTop)
	{
		if(this.XmlLoadOnDemandType!=2)
			divf.firstChild.style.top=(-divs.scrollTop).toString()+"px";
		if(this.StatHeader || this.StateFooter)
			doHoriz=true;
	}
	if(doHoriz || force)
	{
		if (this.UseFixedHeaders)
		{
			
			var rowDivs=igtbl_getDocumentElement(this.Id+"_drs");
			if(rowDivs)
			{
				
				if(!rowDivs.length)
					rowDivs=[rowDivs];
				
				for(var i=0;i<rowDivs.length;i++)
					rowDivs[i].firstChild.style.left=(-scrollLeft).toString()+"px";
			}
		}
		else 
		{
			if(this.XmlLoadOnDemandType!=2)
				divf.firstChild.style.top=(-divs.scrollTop).toString()+"px";
			divf.firstChild.style.left=(-divs.scrollLeft).toString()+"px";
		}
	}
	if(isInit)
	{
		divf.style.left=(parseInt(divf.style.left,10)+ igtbl_getAbsolutePos2("Left", divs)-igtbl_getAbsolutePos2("Left", divf)).toString()+"px";
		divf.style.top=(parseInt(divf.style.top,10)+igtbl_getAbsolutePos2("Top", divs)-igtbl_getAbsolutePos2("Top", divf)).toString()+"px";
		divf.style.width=igtbl_clientWidth(divs).toString()+"px";
		divf.style.height=igtbl_clientHeight(divs).toString()+"px";
	}
	this.Element.removeAttribute("noOnResize");
},
"_setScrollDivHeight",
function()
{
		var divs=this._scrElem;
		
		var estRowsHeight=(this.RowsServerLength+1)*(this.getDefaultRowHeight()); 
		if(!this.StatHeader && this.Bands[0].ColHeadersVisible==1)
			estRowsHeight+=this.getDefaultRowHeight();
		if(!this.StatFooter && this.Bands[0].ColFootersVisible==1)
			estRowsHeight+=this.getDefaultRowHeight();
		
		
		var height = (this.Rows.Element.parentNode.offsetHeight>estRowsHeight)?this.Rows.Element.parentNode.offsetHeight:estRowsHeight;
		divs.firstChild.style.height=height+"px";
},
"_recalcRowNumbers",
function(row)
{
	if(this.ClientSideRenumbering!=1) return;
	if(row && row.Band.AllowRowNumbering<2 || !row && this.AllowRowNumbering<2) return;
	
	for(var i=0; i<this.Bands.length;i++)
		this.Bands[i]._currentRowNumber=0;
	
	if (!row) 
		igtbl_RecalculateRowNumbers(this.Rows,1,this.Bands[0],this.Rows.Node);
	else
		switch(row.Band.AllowRowNumbering)
		{
			case(2):
			case(4):
				igtbl_RecalculateRowNumbers(this.Rows,1,this.Bands[0],this.Rows.Node);
				break;
			case(3):
				var rc = row.ParentRow?row.ParentRow.Rows:this.Rows;					
				igtbl_RecalculateRowNumbers(rc,1,rc.Band,rc.Node);
				break;
		}
},
"_calculateStationaryHeader",
function()
{
    
    var band=this.Bands[0];
	if(!band.IsGrouped && this.StatHeader && (this.StationaryMargins==1 || this.StationaryMargins==3))
	{
		var tr=this.StatHeader.Element.parentNode.parentNode.parentNode.parentNode;
		var oldTRDisplay=tr.style.display;
		var th=this.Element.childNodes[1];
		var i=0;
		var drs=null;
		var row=th.firstChild;
		while(i<row.cells.length && (!row.cells[i].firstChild || row.cells[i].firstChild.id!=this.Id+"_drs")) i++;
		if(i<row.cells.length)
		{
			var td=row.cells[i];
			drs=td.firstChild;
		}
        
		if (this.Rows && (this.Rows.length>0
         || (this.Rows.AddNewRow && !this.Rows.AddNewRow.isFixedBottom()
		
         || this.Rows.FilterRow &&  !this.Rows.FilterRow.isFixedBottom()
		)))
		{
			
			if (this.Rows.length == 1)
			{
				var mrElem = document.getElementById(this.Id + "_mr");
				var mcElem = document.getElementById(this.Id + "_mc");
				if (mrElem && mcElem && igtbl_parseInt(mrElem.style.height) && igtbl_parseInt(mcElem.style.height))
				{
					if (mrElem.style.height.substr(mrElem.style.height.length - 2) == "px" && mcElem.style.height.substr(mcElem.style.height.length - 2) == "px")
					{
						mrElem.style.height = (igtbl_parseInt(mrElem.style.height) - igtbl_parseInt(th.clientHeight)).toString() + "px";
						mcElem.style.height = (igtbl_parseInt(mcElem.style.height) - igtbl_parseInt(th.clientHeight)).toString() + "px";
					}
					else
					{
						mrElem.style.height = (mrElem.offsetHeight - igtbl_parseInt(th.offsetHeight)).toString() + "px";
						mcElem.style.height = (mcElem.offsetHeight - igtbl_parseInt(th.offsetHeight)).toString() + "px";
					}

				}
			}
			tr.style.display="";
			
			var hdiv = tr.childNodes[0].childNodes[0];
			if (hdiv.style.height=="0pt")hdiv.style.height="";
			
			
			
			
			
			if(!this._fixHeightOnce && igtbl_isXHTML && this.MainGrid && this.MainGrid.style.height)
			{
				
				this._fixHeightOnce = true;
				var height=this.MainGrid.style.height;
				if(height.substr(height.length-2)=="px")
					this.MainGrid.style.height=(igtbl_parseInt(height)-th.offsetHeight).toString()+"px";
			}
			

			
				th.style.display="none";
				
			if(drs)
				drs.style.display="none";
		}
		else
		{
			tr.style.display="none";
			
				th.style.display="";
				
			
			
			
			
			
			if(!this._fixHeightOnce && igtbl_isXHTML && this.MainGrid && this.MainGrid.style.height)
			{
				
				this._fixHeightOnce = true;
				var height=this.MainGrid.style.height;
				if(height.substr(height.length-2)=="px")
					this.MainGrid.style.height=(igtbl_parseInt(height)+th.offsetHeight).toString()+"px";
			}
			if(drs)
				drs.style.display="";
		}
		
		if(oldTRDisplay!=tr.style.display)
		{
			for(var i=0;i<band.Columns.length;i++)
			{
				var cols=igtbl_getDocumentElement(band.Columns[i].Id);
				if(cols && cols.length==2)
				{
					if(oldTRDisplay=="")
					{
						cols[1].innerHTML=cols[0].innerHTML;
						cols[0].innerHTML="&nbsp;";
					}
					else
					{
						cols[0].innerHTML=cols[1].innerHTML;
						cols[1].innerHTML="&nbsp;";
					}
				}
			}
		}
	}
},

"_getCurrentFiltersString",
function(col,band,parentRowId)
{
	if(!band)
	{
	    if(col)band=col.Band;
	    else band=this.Bands[0];
	}
	var currentFilters;
	if( ( (col && col.RowFilterMode==igtbl_RowFilterMode.AllRowsInBand)||band.Index==0)&&!band.IsGrouped )
	{
		currentFilters = band._filterPanels;
	}
	else
	{
	    
	    if(parentRowId && parentRowId.length>0)
	    {
		    var tempId = "";
		    if (band.IsGrouped)
		    {
			    tempId = parentRowId.replace("_gr","_t");
		    }
		    else
		    {
			    tempId = parentRowId.replace("_r","_t")
		    }
		    currentFilters = band._filterPanels[tempId];
		}
	}
	var currentFilterString="";
	if(currentFilters)
	{
	    var seperator = "\x05";
		for (var cf in currentFilters)
		{
			
			if (currentFilters[cf] && currentFilters[cf].getOperator && currentFilters[cf].IsActive())
			{
				
				var newfilter=false ;
				if(col)newfilter=(cf==col.Id);
				var foundColumn=igtbl_getColumnById(cf);
				currentFilterString+=foundColumn.getLevel(true)+seperator+currentFilters[cf].getOperator()+seperator+currentFilters[cf].getEvaluationValue()+seperator+newfilter+"\x03";
			}
		}
	}
	return currentFilterString;
},
	
"invokeXmlHttpRequest",
function(type,object,data,waitResponse)
{
	var g=this;
	if(!g.Node && !ig_csom.IsNetscape6 || g.LoadOnDemand!=3)
		return;
	
	switch(type)
	{
		case g.eReqType.FilterDropDownFill:
		{
			var rows=data;
			var col=object;
			
			var parentRowDataKey="";
			var parentRowId="";
			var oSqlWhere=null;
			if (rows)
			{
				if (rows.ParentRow && (rows.Band.Index > 0 || rows.Band.IsGrouped) )
				{
					parentRowId = rows.ParentRow.Id;
					parentRowDataKey = rows.ParentRow.DataKey;
				}
				
				if (rows.ParentRow)
					oSqlWhere=rows.ParentRow._generateBandsSqlWhere(rows.ParentRow.Band);
			}
			var sqlWhere="";
			var newLevel="";
			if(oSqlWhere)
			{
				sqlWhere=oSqlWhere.sqlWhere?oSqlWhere.sqlWhere:"";
				newLevel=oSqlWhere.newLevel?oSqlWhere.newLevel:"";
			}   	
			g.QueryString="FilterDropFill\x01"+col.getLevel(true)+"\x01"+parentRowDataKey+"\x01"+parentRowId+"\x01"+sqlWhere+"\x01"+newLevel;
			g.xmlHttpRequest(type);
			break;
		}
		case g.eReqType.Filter:
		{
			var rows=data;
			var col=object;
			var parentRowDataKey="";
			var parentRowId="";
			if (rows)
			{
				if (rows.Band.Index>0||rows.Band.IsGrouped)
				{
					parentRowId = rows.ParentRow.Id;
					parentRowDataKey = rows.ParentRow.DataKey;
				}
			}
			
			var currentFilterString=this._getCurrentFiltersString(col,col.Band,parentRowId);
    						
			g.QueryString="Filter\x01"+col.getLevel(true)+"\x01"+parentRowDataKey+"\x01"+parentRowId+"\x01"+currentFilterString+"\x01"+g._buildSortOrder(g);
			igtbl_scrollTop(g.getDivElement(), 0);
			g.xmlHttpRequest(type);			
			
			break;
		}
		case g.eReqType.UpdateCell:
		{
			var cell=object;
			var row=cell.Row;			
			if(g.LoadOnDemand==3 && (typeof(g.Events.AfterRowUpdate)=="undefined" || g.Events.AfterRowUpdate[1]==0 && (g.Events.XmlHTTPResponse[1]==1 || g.Events.AfterCellUpdate[1]==1)))
			{
			    var cellInfo=row._generateUpdateRowSemaphore();
				g.QueryString="UpdateCell\x01"+cell.Band.Index+"\x02"+cell.Column.Index+"\x02"+cell.Row.getIndex(true)+"\x02"+cell.Row.DataKey+"\x02"+data+"\x02"+cell.getLevel(true)+"\x02"+cell.getOldValue()+"\x02"+(cellInfo.length>0?"CellValues\x06"+cellInfo:"");
				g.xmlHttpRequest(type);
			}
			break;
		}
		case g.eReqType.AddNewRow:
		{
			var rows=object;
			if((typeof(g.Events.AfterRowUpdate)=="undefined" || g.Events.AfterRowUpdate[1]==0 && g.Events.XmlHTTPResponse[1]==1))
			{
				g.QueryString="AddNewRow\x01"+rows.Band.Index+"\x02"+(rows.ParentRow?rows.ParentRow.getIndex(true)+"\x02"+rows.ParentRow.DataKey:"\x02");
				g.xmlHttpRequest(type);
			}
			break;
		}
		case g.eReqType.Sort:
		{
			var rows=object;
			rows.sortXml();
			break;
		}
		case g.eReqType.ChildRows:
		{
			var row=object;
			row.requestChildRows();
			break;
		}
		case g.eReqType.DeleteRow:
		{
			if(g.LoadOnDemand==3 && (!g.Events.XmlHTTPResponse || g.Events.XmlHTTPResponse[1] || g.Events.AfterRowDeleted[1]))
			{
				var row = object;
				var cellInfo = row._generateUpdateRowSemaphore(true);
				
				var dataKey = row._generateHierarchicalDataKey();
				
				g.QueryString="DeleteRow\x01"+row.Band.Index+"\x02"+row.getIndex(true)+"\x02"+dataKey+"\x02"+row.getLevel(true)+"\x02"+row.DataKey+"\x02"+g.RowsRetrieved+"\x04"+(cellInfo.length>0?"CellValues\x06"+cellInfo+"\x04":"")+"Page"+"\x03"+(g.AllowPaging===true?g.CurrentPageIndex:-1);
				
				g.QueryString+="\x04"+g._buildSortOrder();
				
				g.RowToQuery=row;
				g.xmlHttpRequest(type,waitResponse);
			}
			break;
		}
		case g.eReqType.UpdateRow:
		{
			var row=object;
			var cellInfo="";
			if(row._dataChanged&1)
			{
				g.QueryString="AddNewRow\x06"+(row.ParentRow?row.ParentRow.getLevel(true)+"\x02"+row.ParentRow.DataKey:"\x02")+(g.QueryString.length>0?"\x04":"")+g.QueryString;
				
				this.setNewRowImg(null);
			}
			else
				cellInfo=row._generateUpdateRowSemaphore();
			
			var dataKey = row._generateHierarchicalDataKey(); 
						
			g.QueryString="UpdateRow\x01"+row._dataChanged+"\x02"+row.Band.Index+"\x02"+row.getLevel(true)+"\x02"+dataKey+"\x02"+g.RowsRetrieved+"\x02"+g.CurrentPageIndex+"\x04"+(cellInfo.length>0?"CellValues\x06"+cellInfo+"\x04":"")+g.QueryString;
			g.RowToQuery=row;
			g.xmlHttpRequest(type);
			break;
		}
		case g.eReqType.MoreRows:
		{
			
			if (this.AllowPaging || this.GroupCount > 0 || g.requestingMoreRows)return;
			g.requestingMoreRows = true;
			var de=g.getDivElement();
			de.setAttribute("oldST",de.scrollTop.toString());
			if(g.RowsServerLength>g.Rows.length)
			{
				g.QueryString="NeedMoreRows\x01"+g.RowsRetrieved+"\x02"+g.Rows.length.toString();
				var sortOrder="";
				sortOrder = g._buildSortOrder();
				
				g.QueryString+="\x02"+g.Bands[0].ColumnsOrder;
				g.QueryString+="\x02"+sortOrder;
				g.QueryString+="\x02"+this.Bands[0]._sqlWhere;
				
				var currentFilters="";
				var bandFilters=g.Bands[0]._filterPanels;
				if (bandFilters)
				{
					for (var colId in bandFilters)
					{
						var filter=bandFilters[colId];
						
						if (filter.IsActive())
						{
							var col=igtbl_getColumnById(colId);
							currentFilters+=col.getLevel(true)+"\x05"+filter.getOperator()+"\x05"+filter.getEvaluationValue()+"\x03";
							
							
						}
					}
				}
				g.QueryString+="\x02"+currentFilters;
				de.setAttribute("noOnScroll","true");
				g.xmlHttpRequest(g.eReqType.MoreRows);
			}
			break;
		}
		case g.eReqType.Custom:
		{
			g.QueryString="Custom\x01"+data;
			g.xmlHttpRequest(g.eReqType.Custom);
			break;
		}
		case g.eReqType.Page:
		{			
			g.QueryString="Page\x01"+data+"\x01"+g.CurrentPageIndex+"\x01"+g._buildSortOrder(g)
                +"\x01"+g._getCurrentFiltersString();
			;
			
			g._pageToGo=data;
			g.xmlHttpRequest(g.eReqType.Page);
			break;
		}
		case g.eReqType.Scroll:
		{
			if(this.AllowPaging) return;
			var de=g.getDivElement();
			de.setAttribute("oldST",de.scrollTop.toString());

			var topRowNo=Math.floor(de.scrollTop/g.getDefaultRowHeight());
            
            if (g.XmlLoadOnDemandType==2)
            {
                g._recordChange("RowToStart",g,topRowNo);
            }
			g.QueryString="NeedMoreRows\x01"+topRowNo.toString()+"\x02"+topRowNo.toString();
			var sortOrder="";
			sortOrder = g._buildSortOrder();
			g.QueryString+="\x02"+g.Bands[0].ColumnsOrder;
			g.QueryString+="\x02"+sortOrder;
			g.QueryString+="\x02"+this.Bands[0]._sqlWhere;

            g.QueryString+="\x02"+g._getCurrentFiltersString();
			g.xmlHttpRequest(g.eReqType.Scroll);
			break;
		}
		case g.eReqType.Refresh:
		{
			var rows=g.Rows;
			if(object && object.Type)
			{
				if(object.Type=="rows")
					rows=object;
				else if(object.Type=="row")
					rows=object.Rows;
			}
			if(rows)
				rows.refresh();
			break;
		}
	}
},
"getDefaultRowHeight",
function()
{
	var rh=igtbl_parseInt(this.Bands[0].DefaultRowHeight);
	if(!rh)
		rh=22;
	if(igtbl_isXHTML)
		rh+=2;
	return rh;
},
"_buildSortOrder",
function()
{
	var sortOrder="";
	for(var i=0;i<this.Bands[0].SortedColumns.length;i++)
	{
		var col=igtbl_getColumnById(this.Bands[0].SortedColumns[i]);
		sortOrder+=col.Key+(col.SortIndicator==2?" DESC":"")+(i<this.Bands[0].SortedColumns.length-1?",":"");
	}
	return sortOrder;
},
"_ensureValidParent",
function(obj)
{
	e=obj.Element;
	var pe=e?e.parentNode:null;
	if(pe&&pe.tagName!="FORM"&&pe.tagName!=(igtbl_isXHTML?"HTML":"BODY"))
		try
		{
			ig_csom._skipNew=true;
			npe=igtbl_getElementById(this.Id);
			if(npe)
				npe=npe.form;
			if(obj._relocate)
				obj._relocate(npe,window.document.body);
			else
			{
				pe.removeChild(e);
				if(npe)
					try
					{
						npe.appendChild(e);
					}
					catch(ex)
					{
						npe=null;
					}
				if(!npe)
					document.body.insertBefore(e,document.body.firstChild);
				e.style.zIndex=9999;
			}
			ig_csom._skipNew=false;
		}
		catch(ex){}
},
"getDivElement",
function()
{
	var de=this.DivElement;
	if(this._scrElem)
		de=this._scrElem;
	return de;
},
"isDisabled",
function()
{
	var result=false;
	if(this._thisForm && igtbl_isDisabled(this._thisForm) || igtbl_isDisabled(this.MainGrid))
		result=true;
	return result;
},
"isLoaded",
function()
{
	if(!this.GridIsLoaded)
		return false;
	return !this.isDisabled();
},

"resize",
function(width, height) 
{
	
	width = (width<0)?0:width
	height = (height<0)?0:height
	
	
	if(!ig_csom.IsIE || ((ig_csom.IsIE6 || ig_csom.IsIE7) && igtbl_isXHTML)) 
	{
		// need to set the width first so we can see whether anything (groupby box) is going to 
		// get taller or shorter because of changes to text wrapping
		
		var marginWidth = igtbl_dom.dimensions.bordersWidth(this.MainGrid);
		this.MainGrid.style.width = width + "px";
		document.getElementById(this.Id + "_mc").style.width = (width - marginWidth) >= 0 ? width - marginWidth : 0 + "px";
		
		
		this.MainGrid.style.height = 0 + "px";
		
		this._fixHeightOnce = false;
		
		// measure how much space all the fixed elements are going to need 
		
		var marginHeight =  igtbl_dom.dimensions.bordersHeight(this.MainGrid);
		for(var x=0; x<this.MainGrid.rows.length; x++) 
		{
			if(this.MainGrid.rows[x].id != this.Id + "_mr") 
			{
				marginHeight += this.MainGrid.rows[x].offsetHeight;
			}
		}
		
		
		if(height < marginHeight) {
			height = marginHeight; 
		}
		
		// set the new widths and heights of the outer table and rows area 
		this.MainGrid.style.height = height + "px";
		document.getElementById(this.Id + "_mr").style.height = (height - marginHeight) + "px";
		document.getElementById(this.Id + "_mc").style.height = (height - marginHeight) + "px";
	} else {
		this.MainGrid.style.width = width + "px";
		this.MainGrid.style.height = height + "px";
	}
		
	
},

"hide",
function()
{
	this.getDivElement().style.display="none";
	this.MainGrid.style.display="none";
},

"show",
function()
{
	this.MainGrid.style.display="";
	this.getDivElement().style.display="none";
	this.getDivElement().style.display="";
	if(this.alignDivs)
		this.alignDivs();
	if(this.alignStatMargins)
		this.alignStatMargins();
	if (this.StatHeader) 
	{
	    _igtbl_headerOrFooterHeight(this.StatHeader.Element)
	}
	
	igtbl_browserWorkarounds.ieTabScrollBarAdjustment(this.Bands[0]);
}
,"onCBSubmit",
function()
{
	this.update();
},
"getProgressIndicator",
function()
{
	return this._progressIndicator;
},
"_displayPI",
function()
{
	if(!this.EnableProgressIndicator)
		return;
	if(!this._piIndex)
		this._piIndex=0;
	this._piIndex++;
	document.body.setAttribute("noOnBodyResize","true");
	window.setTimeout("document.body.removeAttribute(\"noOnBodyResize\")",100);
	
	this._progressIndicator.display();
},
"_hidePI",
function()
{
	if(!this.EnableProgressIndicator)
		return;
	if(this._piIndex)
		this._piIndex--;
	if(this._piIndex)
		return;
	document.body.setAttribute("noOnBodyResize","true");
	window.setTimeout("document.body.removeAttribute(\"noOnBodyResize\")",100);
	this._progressIndicator.hide();
}
,"_generateSelArray",
function()
{
	var activeRow=null;
	var activeCell=this.getActiveCell();
	if(!activeCell)
	{
		activeRow=this.getActiveRow();
		if(activeRow)
			activeCell=activeRow.getCell(0);
	}
	if(!activeCell)
		return null;
	var rowColl=activeCell.Row.OwnerCollection;
	var clipArray=new Array();
	var assignCell=function(cell,rowColl,clipObject)
	{
		if(!cell) return clipObject;
		var colIndex=cell.Column.Index;
		var rowIndex=cell.Row.getIndex();
		if(rowColl!=cell.Row.OwnerCollection)
			return clipObject;
		var clipArray=clipObject.clipArray;
		var l=clipObject.leftIndex,t=clipObject.topIndex,r=clipObject.rightIndex,b=clipObject.bottomIndex;
		if(clipArray.length==0)
		{
			clipArray[0]=new Array();
			clipArray[0][0]=cell;
			l=r=colIndex;
			t=b=rowIndex;
		}
		else
		{
			if(t>rowIndex)
			{
				for(var i=0;i<t-rowIndex;i++)
				{
					var insElem=new Array();
					for(var j=0;j<=r-l;j++)
						insElem.push(null);
					clipArray.unshift(insElem);
				}
				t=rowIndex;
			}
			if(b<rowIndex)
			{
				for(var i=0;i<rowIndex-b;i++)
				{
					var insElem=new Array();
					for(var j=0;j<=r-l;j++)
						insElem.push(null);
					clipArray.push(insElem);
				}
				b=rowIndex;
			}
			if(l>colIndex)
			{
				for(var i=0;i<clipArray.length;i++)
					for(var j=0;j<l-colIndex;j++)
						clipArray[i].unshift(null);
				l=colIndex;
			}
			if(r<colIndex)
			{
				for(var i=0;i<clipArray.length;i++)
					for(var j=0;j<colIndex-r;j++)
						clipArray[i].push(null);
				r=colIndex;
			}
			clipArray[rowIndex-t][colIndex-l]=cell;
		}
		clipObject.leftIndex=l;
		clipObject.topIndex=t;
		clipObject.rightIndex=r;
		clipObject.bottomIndex=b;
		return clipObject;
	};
	var clipObject={"clipArray":clipArray,"leftIndex":-1,"rightIndex":-1,"topIndex":-1,"bottomIndex":-1};
	for(var cellID in this.SelectedCells)
	{
		var cell=igtbl_getCellById(cellID);
		clipObject=assignCell(cell,rowColl,clipObject);
	}
	for(var rowID in this.SelectedRows)
	{
		var row=igtbl_getRowById(rowID);
		if(row.OwnerCollection!=rowColl)
			continue;
		for(var i=0;i<row.cells.length;i++)
			clipObject=assignCell(row.getCell(i),rowColl,clipObject);
	}
	for(var colID in this.SelectedColumns)
	{
		var col=igtbl_getColumnById(colID);
		if(col.Band.Index!=rowColl.Band.Index)
			continue;
		var cols=igtbl_getDocumentElement(colID);
		if(!cols.length) cols=[cols];
		for(var i=0;i<cols.length;i++)
		{
			var cells=igtbl_enumColumnCells(this.Id,cols[i]);
			if(cells && cells.length)
			{
				for(var j=0;j<cells.length;j++)
					clipObject=assignCell(igtbl_getCellByElement(cells[j]),rowColl,clipObject);
			}
		}
	}
	if(clipArray.length==0 && (activeRow || activeCell))
	{
		clipArray[0]=new Array();
		if(activeCell)
			clipArray[0][0]=activeCell;
		else
			for(var i=0;i<activeRow.cells.length;i++)
				clipArray[0][i]=activeRow.getCell(i);
	}
	return clipArray;
},
"_getSelectedCells",
function()
{
	var selArray=new Array();
	for(var cellID in this.SelectedCells)
	{
		var cell=igtbl_getCellById(cellID);
		selArray.push(cell);
	}
	for(var rowID in this.SelectedRows)
	{
		var row=igtbl_getRowById(rowID);
		for(var i=0;i<row.cells.length;i++)
			selArray.push(row.getCell(i));
	}
	for(var colID in this.SelectedColumns)
	{
		var col=igtbl_getColumnById(colID);
		var cols=igtbl_getDocumentElement(colID);
		if(!cols.length) cols=[cols];
		for(var i=0;i<cols.length;i++)
		{
			var cells=igtbl_enumColumnCells(this.Id,cols[i]);
			if(cells && cells.length)
			{
				for(var j=0;j<cells.length;j++)
					selArray.push(igtbl_getCellByElement(cells[j]));
			}
		}
	}
	if(selArray.length==0)
	{
		var activeCell=this.getActiveCell();
		var activeRow=this.getActiveRow();
		if(activeCell)
			selArray.push(activeCell);
		else if(activeRow)
			for(var i=0;i<activeRow.cells.length;i++)
				selArray.push(activeRow.getCell(i));
	}
	return selArray;
},
"copy",
function(copytext,cutting)
{
	if(typeof(cutting)=="undefined") cutting=false;
	var clipArray=true;
	var options={"copyFormatted":false};
	if(!copytext)
	{
		if(this.fireEvent(this.Events.BeforeClipboardOperation,[this.Id,(!cutting?this.eClipboardOperation.Copy:this.eClipboardOperation.Cut),options])===true)
			return false;
		copytext="";
		clipArray=this._generateSelArray();
		for(var i=0;clipArray && i<clipArray.length;i++)
		{
			var cLine=clipArray[i];
			for(var j=0;j<cLine.length;j++)
			{
				if(cLine[j]!=null)
				{
					var v=cLine[j].getValue(options.copyFormatted);
					
					if(v!==null && v!==undefined)
						copytext+=v.toString();
				}
				if(j<cLine.length-1)
					copytext+='\t';
			}
			copytext+="\r\n";
		}
	}
	if(!copytext)
	{
	    
	    var oError=new Object();
	    oError.OperationType=cutting?this.eClipboardOperation.Cut:this.eClipboardOperation.Copy;
	    oError.Data=null;
	    oError.Options=options;
		this.fireEvent(this.Events.ClipboardError,[this.Id,this.eClipboardError.NothingToCopy,oError]);
		return false;
	}
	var copyFailed=false;
	var excMessage;
	try
	{
		if(!igtbl_setClipboardData(copytext))
		{
		    	    
	        var oError=new Object();
	        oError.OperationType=cutting?this.eClipboardOperation.Cut:this.eClipboardOperation.Copy;
	        oError.Data=copytext;
	        oError.Options=options;
			this.fireEvent(this.Events.ClipboardError,[this.Id,this.eClipboardError.NotSupported,"",oError]);
			return false;
		}
	}
	catch(exc)
	{
		copyFailed=true;
		excMessage=exc;
	}
	if(copyFailed)
	{
	
		    
        var oError=new Object();
        oError.Options=options;
        oError.OperationType=cutting?this.eClipboardOperation.Cut:this.eClipboardOperation.Copy;
        oError.Data=copytext;
		this.fireEvent(this.Events.ClipboardError,[this.Id,this.eClipboardError.Failure,excMessage,oError]);
		return false;
		
	}
	if(!cutting)
		this.fireEvent(this.Events.AfterClipboardOperation,[this.Id,this.eClipboardOperation.Copy,clipArray]);
	return clipArray;
},
"cut",
function()
{
	var clipArray=this.copy(null,true);
	if(clipArray && clipArray!==true && clipArray.length)
	{
		for(var i=0;i<clipArray.length;i++)
		{
			var cLine=clipArray[i];
			for(var j=0;j<cLine.length;j++)
			{
				var cell=cLine[j];
				if(cell!=null && cell.isEditable())
				{
					if(cell.Column.AllowNull)
						cell.setValue(null);
					else if(typeof(cell.Column.DefaultValue)!="undefined" && cell.Column.DefaultValue!==null)
						cell.setValue(cell.Column.DefaultValue);
				}
			}
		}
		this.fireEvent(this.Events.AfterClipboardOperation,[this.Id,this.eClipboardOperation.Cut,clipArray]);
		return clipArray;
	}
	return false;
},
"paste",
function()
{
	var options={"strictPaste":false,"selectPastedCells":true,"ignoreHiddenColumns":false,"ignoreServerOnlyCells":true};
	if(this.fireEvent(this.Events.BeforeClipboardOperation,[this.Id,this.eClipboardOperation.Paste,options])===true)
		return false;
	var pasteFailed=false;
	var pasteText=null;
	try
	{
		pasteText=igtbl_getClipboardData();
		if(pasteText==undefined)
		{
				    
        var oError=new Object();
        oError.Options=options;
        oError.OperationType=this.eClipboardOperation.Paste;
        oError.Data=null;
			this.fireEvent(this.Events.ClipboardError,[this.Id,this.eClipboardError.NotSupported,"",oError]);
			return false;
		}
	}
	catch(exc)
	{
					    
        var oError=new Object();
        oError.Options=options;
        oError.OperationType=this.eClipboardOperation.Paste;
        oError.Data=null;
		this.fireEvent(this.Events.ClipboardError,[this.Id,this.eClipboardError.Failure,exc,oError]);
		return false;
	}
	if(!pasteText)
	{
		
        var oError=new Object();
        oError.Options=options;
        oError.OperationType=this.eClipboardOperation.Paste;
        oError.Data=null;
		this.fireEvent(this.Events.ClipboardError,[this.Id,this.eClipboardError.NothingToPaste,"",oError]);
		return false;
	}
    var clipArray=this.processPastedText(pasteText,options);
	this.fireEvent(this.Events.AfterClipboardOperation,[this.Id,this.eClipboardOperation.Paste,clipArray]);
	return clipArray;
},
"processPastedText",
function(pasteText,options,newLineDelimiter)
{
    
    if (!options) options={"strictPaste":false,"selectPastedCells":true,"ignoreHiddenColumns":false,"ignoreServerOnlyCells":true};
    if (!newLineDelimiter) newLineDelimiter="\n";
	var clipArray=pasteText.split(newLineDelimiter);
	for(var i=clipArray.length-1;i>=0;i--)
		if(clipArray[i])
		{
			var lineStr = clipArray[i];
			if(lineStr.substr(lineStr.length-1,1)=="\r")
				lineStr = lineStr.substr(0,lineStr.length-1);
			clipArray[i]=lineStr.split("\t");
		}
	if(clipArray.length>1 && !clipArray[clipArray.length-1])
		clipArray.pop();
	var cell;	
	if(clipArray.length==1 && clipArray[0].length==1)
	{
		var v=clipArray[0][0];
		var clipArray=this._getSelectedCells();
		for(var i=0;i<clipArray.length;i++)
		{
			cell=clipArray[i];
			if(!cell) continue;
			if(v)
			{
				if(cell.isEditable())
					cell.setValue(v);
			}
			else
			{
				if(cell.isEditable())
				{
					if(cell.Column.AllowNull)
						cell.setValue(null);
					else if(typeof(cell.Column.DefaultValue)!="undefined" && cell.Column.DefaultValue!==null)
						cell.setValue(cell.Column.DefaultValue);
				}
			}
		}
	}
	else
	{
		var activeRow=null;
		var activeCell=this.getActiveCell();
		if(!activeCell)
		{
			activeRow=this.getActiveRow();
			if(activeRow)
				activeCell=activeRow.getCell(0);
		}
		if(!activeCell)
		{
								    
        var oError=new Object();
        oError.OperationType=this.eClipboardOperation.Paste;
        oError.Data=pasteText;
			this.fireEvent(this.Events.ClipboardError,[this.Id,this.eClipboardError.NoActiveObject,"",oError]);
			return false;
		}
		if(clipArray.length && (clipArray.length>1 || clipArray[0].length>1))
		{
			var curSelArray=this._generateSelArray();
			if(curSelArray && curSelArray.length && (curSelArray.length>1 || curSelArray[0].length>1)
					&& curSelArray.length==clipArray.length && curSelArray[0].length==clipArray[0].length)
				activeCell=curSelArray[0][0];
		}
		var sct=activeCell.Band.getSelectTypeCell();
		if(options.selectPastedCells && sct==3)
			this.clearSelectionAll();
		var row=activeCell.Row;
		var cellIndex=activeCell.Index;
		for(var i=0;row && i<clipArray.length;i++)
		{
			var cell=row.getCell(cellIndex);
			if(clipArray[i])
				for(var j=0;cell && j<clipArray[i].length;j++)
				{
					if(!cell.Element)
					{
						cell=cell.getNextCell();
						if(options.ignoreServerOnlyCells)
							j--;
						continue;
					}
					if(clipArray[i][j])
					{
						if(cell.isEditable() && (!options.ignoreHiddenColumns || !cell.Column.getHidden()))
						{
							cell.setValue(clipArray[i][j]);
							if(options.selectPastedCells && sct==3)
								igtbl_selectCell(this.Id,cell,true);
						}
						clipArray[i][j]=cell;
					}
					else
					{
						clipArray[i][j]=null;
						if(options.strictPaste && cell.isEditable() && (!options.ignoreHiddenColumns || !cell.Column.getHidden()))
						{
							if(cell.Column.AllowNull)
								cell.setValue(null);
							else if(typeof(cell.Column.DefaultValue)!="undefined" && cell.Column.DefaultValue!==null)
								cell.setValue(cell.Column.DefaultValue);
							if(options.selectPastedCells && sct==3)
								igtbl_selectCell(this.Id,cell,true);
						}
					}
					cell=cell.getNextCell();
				}
			row=row.getNextRow();
		}
	}
	return clipArray;
}
];
for(var i=0;i<igtbl_ptsGrid.length;i+=2)
	igtbl_Grid.prototype[igtbl_ptsGrid[i]]=igtbl_ptsGrid[i+1];


function _igtbl_findSortImage(nodes)
{    
    if (nodes==null) return null; 
	for (var imgNodeIndex=0;imgNodeIndex<nodes.length;imgNodeIndex++)
	{
	    var currentNode = nodes[imgNodeIndex];
		if (currentNode.tagName=="IMG" && currentNode.getAttribute("imgType")=="sort")
			return currentNode;
		else 
		{   
		    var lowerNode = _igtbl_findSortImage(currentNode.childNodes);
		    
		    if (lowerNode) return lowerNode;		    
		}	
	}
	return null;
}

// Row object
igtbl_Row.prototype=new igtbl_WebObject();
igtbl_Row.prototype.constructor=igtbl_Row;
igtbl_Row.base=igtbl_WebObject.prototype;
function igtbl_Row(element,node,rows,index)
{
	if(arguments.length>0)
		this.init(element,node,rows,index);
}
var igtbl_ptsRow=[
"init",
function(element,node,rows,index)
{
	igtbl_Row.base.init.apply(this,["row",element,node]);

	var gs=rows.Band.Grid;
	var gn=gs.Id;
	this.gridId=gs.Id;
	var row=this.Element;
	row.Object=this;
	this.OwnerCollection=rows;
	if(this.OwnerCollection)
		this.ParentRow=this.OwnerCollection.ParentRow;
	else
		this.ParentRow=null;
	this.Band=this.OwnerCollection.Band;
	this.GroupByRow=false;
	this.GroupColId=null;
	if(row.getAttribute("groupRow"))
	{
		this.GroupByRow=true;
		this.GroupColId=row.getAttribute("groupRow");
		var sTd=row.childNodes[0].childNodes[0].tBodies[0].childNodes[0].childNodes[0];
		this.MaskedValue=sTd.getAttribute("cellValue");
		this.Value=this.MaskedValue;
		if(sTd.getAttribute(igtbl_sUnmaskedValue))
			this.Value=sTd.getAttribute(igtbl_sUnmaskedValue);
		this.Value=igtbl_getColumnById(this.GroupColId).getValueFromString(this.Value);
	}
	var fr=igtbl_getFirstRow(row);
	this.Expandable=((fr.nextSibling && fr.nextSibling.getAttribute("hiddenRow") || this.Element.getAttribute("showExpand")));
	this.ChildRowsCount=0;
	this.VisChildRowsCount=0;
	if(this.Expandable)
	{
		if(fr.nextSibling && fr.nextSibling.getAttribute("hiddenRow"))
		{
			this.HiddenElement=fr.nextSibling;
			if(this.getExpanded() && !gs.ExpandedRows[this.Element.id])
				gs.ExpandedRows[this.Element.id]=this;
			this.ChildRowsCount=igtbl_rowsCount(igtbl_getChildRows(gn,row));
			this.VisChildRowsCount=igtbl_visRowsCount(igtbl_getChildRows(gn,row));
			var rowsNode=(this.Node?this.Node.selectSingleNode("Rs"):null);
			this.Rows=new igtbl_Rows(rowsNode,gs.Bands[rows.Band.Index+(this.GroupByRow?0:1)],this);
			
			var rowIslandFilters=null;
			if (rowsNode)
				rowIslandFilters=eval(rowsNode.getAttribute("columnFilters"));
			if (rowIslandFilters)
				_igtbl_processServerPassedColumnFilters(rowIslandFilters,gs);
			
//* OBSOLETE*
			this.FirstChildRow=this.Rows.getRow(0);
//***********
		}
	}
	this.FirstRow=fr;

	if(!this.GroupByRow)
	{
		this.cells=new Array(this.Band.Columns.length);
		if(gs.UseFixedHeaders)
		{
			for(var i=0;i<this.Element.cells.length;i++)
			{
				if(this.Element.cells[i].childNodes.length>0 && this.Element.cells[i].firstChild.tagName=="DIV" && this.Element.cells[i].firstChild.id.substr(this.Element.cells[i].firstChild.id.length-4)=="_drs")
				{
					this.nfElement=this.Element.cells[i].firstChild.firstChild.childNodes[1].rows[0];
					this.nfElement.Object=this;
					break;
				}
			}
		}
		if(!this.IsAddNewRow && !this.IsFilterRow)
		{
			var tr=this.Element;
			var cellId=this.Id.split("_");
			var lastIndex=cellId.length;
			cellId[1]="rc";
			var j=0;
			if(this.Band.Grid.Bands.length>1) j++;
			if(this.Band.getRowSelectors()<2) j++;
			var cols=this.Band.Columns;
			var nonFixed=false,colSpan=1;
			for(var i=0;i<cols.length;i++)
			{
				if(colSpan>1)
				{
					colSpan--;
					continue;
				}
				if(cols[i].getFixed()===false && !nonFixed)
				{
					tr=this.nfElement;
					j=0;
					nonFixed=true;
				}
				if(cols[i].hasCells())
				{
				
					if(tr && tr.cells[j] && !tr.cells[j].id)
					{	
						cellId[lastIndex]=cols[i].Index.toString();
						tr.cells[j].id=cellId.join("_");
						colSpan=tr.cells[j].colSpan;
					}	
					j++;
					
				}
			}
		}
	}
	if(this.Node)
	{
		if(!this.Expandable)
		this.Expandable=this.Node.selectSingleNode("Rs")!=null || this.Node.getAttribute("showExpand")=="true";
			
	}
	if(this.Node)
	{
		
		this.DataKey="";
		if(this.get(igtbl_litPrefix+"DataKey"))
			this.DataKey=unescape(this.get(igtbl_litPrefix+"DataKey"));
	}
	else
	{
		if(this.Element.getAttribute(igtbl_litPrefix+"DataKey"))
			
			this.DataKey=unescape(this.Element.getAttribute(igtbl_litPrefix+"DataKey"));
	}
	this.Expanded=this.getExpanded();
	this._Changes=new Object();
	this._dataChanged=0;
	if(gs.ExpandedRows[this.Id])
	{
		var stateChange=gs.ExpandedRows[this.Id];
		stateChange.Object=this;
		gs.ExpandedRows[this.Id]=this;
		if(this.DataKey)
		{
			var value=this.DataKey;
			if(value=="" && typeof(value)=="string") value="\x01";
			ig_ClientState.setPropertyValue(stateChange.Node,"Value",value);
		}
		this._Changes[stateChange.Type]=stateChange;
	}
},
"getDataKey",
function()
{
	 
	
	if (typeof(this.DataKey)=="undefined" || this.DataKey===null) return null;
	var dKey = this.DataKey.split('\x07');
	return dKey;
},
"getIndex",
function(
virtual
)
{
	if(this.Node)
	{
		var index=igtbl_parseInt(this.Node.getAttribute("i"));
		var g=this.Band.Grid;
		if(this.Band.Index==0 && !virtual && g.XmlLoadOnDemandType==2)
		{
			var de=g.getDivElement();
			var topRow=Math.floor(de.scrollTop/g.getDefaultRowHeight());
			index-=topRow;
		}
		return index;
	}
	else if(this.OwnerCollection)
		return this.OwnerCollection.indexOf(this);
	return -1;
},
"toggleRow",
function()
{
	this.setExpanded(!this.getExpanded());
},
"getExpanded",
function(expand)
{
	return (this.Expandable && this.HiddenElement && this.HiddenElement.style.display=="");
},
"setExpanded",
function(expand)
{
	if(this.Band.getExpandable()!=1 || !this.Expandable)
		return;
	if(expand!=false)
		expand=true;
	var gn=this.gridId;
	if(expand==this.getExpanded())
	{
		if(expand && !this._Changes["ExpandedRows"])
			igtbl_stateExpandRow(gn,this,expand);
		return;
	}
	var gs=igtbl_getGridById(gn);
	if(gs.isDisabled()) return;
	
	
	if(igtbl_inEditMode(gn))
	{
		var elem = gs._editorCurrent;
		if (elem && elem.getAttribute("noOnBlur"))
			elem.removeAttribute("noOnBlur");
		igtbl_hideEdit(gn);
	}
	if(gs._scrElem && gs.IsXHTML && this.GroupByRow && expand && !this.HiddenElement)
		gs._scrElem.scrollLeft=0;
	var rcrRes=true;
	if(gs.LoadOnDemand==3 && !this.HiddenElement)
		rcrRes=this.requestChildRows();
	if(rcrRes)
		this._setExpandedComplete(expand);
		
	
    if (this.Node && ig_csom.IsIE) 
    {
        var row = this;
		var rowElement = this.Element;
		
		while (rowElement = rowElement.nextSibling)
        {
			
			if (!igtbl_string.isNullOrEmpty(rowElement, "hiddenRow") ||  !igtbl_string.isNullOrEmpty(rowElement, "groupRow"))
            {
                
				rowElement.style.position = "";
				rowElement.style.position = "relative";
            }
        }
    }
		
    
	if(gs._editorButton && gs.oActiveCell && gs.oActiveCell.Row.ParentRow && gs.oActiveCell.hasButtonEditor(igtbl_cellButtonDisplay.OnMouseEnter)) 
	{
		if(expand==false && gs._editorButton.style.display!="none" && gs.oActiveCell.Row.ParentRow==this) 
			igtbl_showColButton(gn,"hide");
		else if(gs.oActiveCell.Row.ParentRow!=this && gs._editorButton.style.display!="none" || gs.oActiveCell.Row.ParentRow==this && gs._editorButton.style.display=="none")
			igtbl_showColButton(gn,gs.oActiveCell.Element);
	}
},
"_setExpandedComplete",
function(expand)
{
	var gn=this.gridId;
	var gs=igtbl_getGridById(gn);
	if(this.Node)
	{
		var rsn=this.Node.selectSingleNode("Rs");
		
		
			if(!this.Rows)
			{
				if(this.GroupByRow || gs.Bands.length>this.Band.Index+1)
					this.Rows=new igtbl_Rows(rsn,gs.Bands[this.Band.Index+(this.GroupByRow?0:1)],this);
				
				var rowIslandFilters=null;
				if (rsn)
					rowIslandFilters=eval(rsn.getAttribute("columnFilters"));
				if (rowIslandFilters)
					_igtbl_processServerPassedColumnFilters(rowIslandFilters,gs);
			}
			if(!this.HiddenElement && this.Rows)
			{
				this.prerenderChildRows();
				if(rsn)
					this.Rows.render();
			}
			
			if(this.Rows && typeof(this.Rows.Band.SortedColumns)!="undefined" && igtbl_getLength(this.Rows.Band.SortedColumns)>0)
			{
			    
			    if ( !(this.GroupByRow && igtbl_getColumnById(this.GroupColId).Id == this.Band.SortedColumns[this.Band.SortedColumns.length-1]))
				    this.Rows.sort();
			}	
	}
	else if(!this.Rows)
	{
		if(this.GroupByRow || gs.Bands.length>this.Band.Index+1)
			this.Rows=new igtbl_Rows(null,gs.Bands[this.Band.Index+(this.GroupByRow?0:1)],this);
		
		if ((gs.LoadOnDemand==0 || gs.LoadOnDemand==3) && this.Rows)
			this.prerenderChildRows();
	}
	var srcRow=this.getFirstRow().id;
	var sr=igtbl_getElementById(srcRow);
	var hr=this.HiddenElement;
	var cancel=false;
	if(expand!=false) 
	{
		
		if(igtbl_fireEvent(gn,gs.Events.BeforeRowExpanded,"(\""+gn+"\",\""+srcRow+"\");")==true)
			cancel=true;
		if(!cancel)
		{
			if(ig_csom.IsNetscape6 && this.GroupByRow)
			{
				var cr=this;
				while(cr && cr.GroupByRow)
				{
					if(!cr._origHeight)
						cr._origHeight=cr.Element.offsetHeight;
					cr=cr.ParentRow;
				}
			}
			if(!gs.NeedPostBack || gs.LoadOnDemand!=0 && this.Rows && (this.Rows.length>0
				|| this.Rows.AddNewRow
				
				|| this.Rows.hasRowFilters()
				))
			{
				gs.NeedPostBack=false;
				if(hr)
				{
					hr.style.display="";
					hr.style.visibility="";
					
					
					if(ig_csom.IsIE6)
					{
						var selectElements = hr.getElementsByTagName("select");
						for(var x=0; x<selectElements.length; x++) 
						{
							if(selectElements[x].getAttribute("beforeExpandDisplay") != null)
							{
								selectElements[x].style.display = selectElements[x].getAttribute("beforeExpandDisplay");
								selectElements[x].setAttribute("beforeExpandDisplay", null);
							}
						}
					}
				}
				var eImg = sr.childNodes[0].childNodes[0];
				eImg.src=this.Band.getCollapseImage();
                var alt = eImg.getAttribute("alt");
                if(alt != null){
                    var clpsAlt = eImg.getAttribute("igAltC");
	                if(clpsAlt != null){
	                    eImg.setAttribute("igAltX",alt);
	                    eImg.setAttribute("alt",clpsAlt);
	                    eImg.removeAttribute("igAltC");
	                }
                }
			}
			igtbl_stateExpandRow(gn,this,true);
			if(!gs.NeedPostBack)
				igtbl_fireEvent(gn,gs.Events.AfterRowExpanded,"(\""+gn+"\",\""+srcRow+"\");");
			if(gs.AddNewBoxVisible)
				gs.updateAddNewBox();
		}
	}
	else
	{
		if(igtbl_fireEvent(gn,gs.Events.BeforeRowCollapsed,"(\""+gn+"\",\""+srcRow+"\")")==true)
			cancel=true;
		if(!cancel)
		{
			if(!gs.NeedPostBack)
			{
				if(hr)
				{
					hr.style.display="none";
					hr.style.visibility="hidden";
					
					
					if(ig_csom.IsIE6)
					{
						var selectElements = hr.getElementsByTagName("select");
						for(var x=0; x<selectElements.length; x++) 
						{
							if(selectElements[x].style.display != "none")
							{
								selectElements[x].setAttribute("beforeExpandDisplay", selectElements[x].style.display);
								selectElements[x].style.display = "none";
							} 
							else
								selectElements[x].setAttribute("beforeExpandDisplay", null);
						}
					}
				}
				var eImg = sr.childNodes[0].childNodes[0];
				eImg.src = this.Band.getExpandImage();
                var alt = eImg.getAttribute("alt");
                if(alt != null){
                    var xpAlt = eImg.getAttribute("igAltX");
	                if(xpAlt != null){
	                    eImg.setAttribute("igAltC",alt);
	                    eImg.setAttribute("alt",xpAlt);
	                    eImg.removeAttribute("igAltX");
	                }
                }
			}
			igtbl_stateExpandRow(gn,this,false);
			
			
				var cr=this;
				while(cr)
				{
				    if(cr.GroupByRow && cr._origHeight)
				    {
					    cr.Element.firstChild.firstChild.style.height=cr._origHeight + "px"; 
					   
					}
					cr=cr.ParentRow;
				}
			
			if(!gs.NeedPostBack)
				igtbl_fireEvent(gn,gs.Events.AfterRowCollapsed,"(\""+gn+"\",\""+srcRow+"\");");
		}
	}
	if(!cancel)
	{
		if(gs.NeedPostBack)
		{
			if(expand!=false) 
				igtbl_moveBackPostField(gn,"ExpandedRows");
			else
				igtbl_moveBackPostField(gn,"CollapsedRows");
		}
	}
	if(gs.XmlLoadOnDemandType!=2)	
	{
	    
        if(gs.UseFixedHeaders || gs.XmlLoadOnDemandType!=0)
        {
            
            var tableWidth = (hr?hr.lastChild.firstChild.offsetWidth:this.Element.offsetWidth);
            for (var iCells = 0; hr && iCells < hr.childNodes.length - 1 ; iCells++)
            {   
                tableWidth += hr.childNodes[iCells].offsetWidth
            }
            if(this.Band.Index>0)
            {   
                for(var iBandsIndex = this.Band.Index;  iBandsIndex >= 0 ; iBandsIndex--)
                {
                    tableWidth+=gs.Bands[iBandsIndex].getIndentation();
                }
            }       
            
            if(gs.GroupCount==1)
				tableWidth+=gs.Bands[0].getIndentation();
            
            
            var divs = gs._scrElem;
           if (this.OwnerCollection.Grid.Element.offsetHeight > 0  &&
				divs && divs.firstChild.offsetWidth < tableWidth)
            {   
                divs.setAttribute("scrollDivWidth",tableWidth);
            }
        }
		gs.alignDivs();
	}	
	if(!gs.UseFixedHeaders && (gs.StatHeader || gs.StatFooter))
		gs.alignStatMargins();
	if(gs.NeedPostBack)
		igtbl_doPostBack(gn);
},
"getFirstRow",
function()
{
	return igtbl_getFirstRow(this.Element);
},
"requestChildRows",
function()
{
	if(this.Rows)
		if(this.Node)
		{
			if(this.Rows.Node)
				return true;
		}
		else
			return true;
	var g=this.Band.Grid;
	if(this.Node && this.Node.selectSingleNode("Rs"))
		return true;
	g.QueryString="LODXml\x01"+this._buildChildRowsQuery();
	g.RowToQuery=this;
	g.xmlHttpRequest(g.eReqType.ChildRows
		,!g.GridIsLoaded
	);
	return false;
},
"_buildChildRowsQuery",
function()
{
	var g=this.Band.Grid;
	var sqlWhere="";
	var sortOrder="";
	var newLevel="";		
	for(var i=0;i<=this.Band.Index;i++)
	{
		var cr=this;
		while(cr && cr.Band!=g.Bands[i])
			cr=cr.ParentRow;
		if(g.Bands[i].DataKeyField && cr.get(igtbl_litPrefix+"DataKey"))
		{
			
			sqlWhere+=cr._generateSqlWhere(g.Bands[i].DataKeyField,unescape(cr.get(igtbl_litPrefix+"DataKey")));
			if(newLevel!=null)
				newLevel+=(i>0?"_":"")+cr.getIndex().toString();
		}
		else
			newLevel=null;
		sqlWhere+=(i==this.Band.Index?"":";");
	}
	var queryString=(newLevel==null?this.getLevel(true):newLevel);
	for(var i=0;i<g.Bands.length;i++)
	{
		var so="";
		for(var j=0;j<g.Bands[i].SortedColumns.length;j++)
		{
			var col=igtbl_getColumnById(g.Bands[i].SortedColumns[j]);
			so+=col.Key+(col.SortIndicator==2?" DESC":"")+(j<g.Bands[i].SortedColumns.length-1?",":"");
		}
		sortOrder+=so+(i==g.Bands.length-1?"":";");
	}
	var band=g.Bands[this.Band.Index+1],sCols;
	if(band)
	{
		sCols=band.Index;
		for(var i=0;i<band.SortedColumns.length;i++)
		{
			var col=igtbl_getColumnById(band.SortedColumns[i]);
			sCols+="|"+col.Index;
			sCols+=":"+col.IsGroupBy.toString();
			sCols+=":"+col.SortIndicator;
		}
	}
	
	var bandFilter="";
	if (this.Band.RowFilterMode==1)
	{
		bandFilter=g._getCurrentFiltersString(band.Columns[0],band);
	}
	queryString+="\x02"+sqlWhere;
	queryString+="\x02"+sortOrder;
	
	queryString+="\x02";
	if(band && band.ColumnsOrder)
		queryString+=band.ColumnsOrder;
	queryString+="\x02"+sCols;
	queryString+="\x02"+bandFilter;
	
	var filterString="";
	for(var x=0; x<=this.Band.Index; x++)
	{
		var b = this.Band.Grid.Bands[x];
		filterString += g._getCurrentFiltersString(b.Columns[0],b, this.Id);
	}
	
	queryString+="\x02"+filterString;
	
	this.Band.Grid.NeedPostBack=false;
	return queryString;
},
"_generateBandsSqlWhere",
function(band)
{
	var oSqlWhere=new Object();
	var g=band.Grid;
	oSqlWhere.sqlWhere="";
	oSqlWhere.newLevel="";
	for(var i=0;i<=band.Index;i++)
	{
		var cr=this;
		while(cr && cr.Band!=g.Bands[i])
			cr=cr.ParentRow;
		if(g.Bands[i].DataKeyField && cr.get(igtbl_litPrefix+"DataKey"))
		{
			oSqlWhere.sqlWhere+=cr._generateSqlWhere(g.Bands[i].DataKeyField,unescape(cr.get(igtbl_litPrefix+"DataKey")));
			if(oSqlWhere.newLevel!=null)
				oSqlWhere.newLevel+=(i>0?"_":"")+cr.getIndex().toString();
		}
		else
		{
		    
		    if(this.Band.IsGrouped)
		    {
		    	if(oSqlWhere.newLevel!=null)
				    oSqlWhere.newLevel+=(i>0?"_":"")+cr.getIndex().toString();
		    }
		    else
		    {		    
			    oSqlWhere.newLevel=null;
			}
		}	
		oSqlWhere.sqlWhere+=(i==this.Band.Index?"":";");
	}
	return oSqlWhere;
},
"prerenderChildRows",
function()
{
	if(!this.HiddenElement)
	{
		var g=this.Band.Grid;
		
		var band=this.Rows.Band;
		if(!band.Visible)return;
		
		var hidRow=document.createElement("tr");
		this.HiddenElement=hidRow;
		if(!this.GroupByRow)
		{
			if(this.Element.nextSibling)
				this.Element.parentNode.insertBefore(this.HiddenElement,this.Element.nextSibling);
			else
				this.Element.parentNode.appendChild(this.HiddenElement);
		}
		else
			this.getFirstRow().parentNode.appendChild(this.HiddenElement);
		var rn=this.Element.id.split("_");
		rn[0]=this.gridId+"rh";
		hidRow.id=rn.join("_");
		hidRow.setAttribute("hiddenRow",true);
		hidRow.setAttribute("groupRow",this.GroupColId);
			hidRow.style.position="relative";
		var majCell;
		var img;		
		var tBody;		
		var childGroupRows=(this.Rows.Node && this.Rows.SelectedNodes[0] && this.Rows.SelectedNodes[0].nodeName=="Group");

		if(this.GroupByRow)
		{
			var majCell=document.createElement("td");
			hidRow.appendChild(majCell);
			majCell.style.paddingLeft=this.Band.getIndentation()+"px";
		}
		else
		{
			if(band.IndentationType!=2)
			{
				var ec=document.createElement(
					"th"
					);
				hidRow.appendChild(ec);
				if(!band._optSelectRow)
					ec.className=this.Band.getExpAreaClass();
				ec.style.borderWidth=0;
				ec.style.textAlign="center";
				ec.style.padding=0;
				ec.style.cursor="default";
				ec.style.height="auto";
				ec.innerHTML="&nbsp;";
				if(this.Band.getRowSelectors()==1)
				{
					var rsc=document.createElement(
						"th"
					);
					hidRow.appendChild(rsc);
					rsc.className=this.Band.getRowLabelClass();
					rsc.style.height="auto";
					img=document.createElement("img");
					img.src=g.BlankImage;
					img.border=0;
					img.style.visibility="hidden";
					rsc.appendChild(img);
				}
			}
			majCell=document.createElement("td");
			hidRow.appendChild(majCell);
			majCell.style.overflow="auto";
			majCell.style.width="100%";
			majCell.style.border=0;
			majCell.colSpan=this.Band.VisibleColumnsCount+1+(this.Band.getRowSelectors()==1?1:0);
			if(g.UseFixedHeaders && band._optSelectRow)
				majCell.className = g.StopperStyle;
		}
		
		if(!childGroupRows && (band.HeaderHTML || band.FooterHTML))
		{
			var str="<table>";
			if(band.HeaderHTML)
				str+=band.HeaderHTML;
			str+="<tbody></tbody>";
			if(band.FooterHTML)
				str+=band.FooterHTML;
			str+="</table>";
			majCell.innerHTML=str;
			table=majCell.firstChild;
			tBody=table.tBodies[0];
		}
		else
			table=document.createElement("table");
		
		rn[0]=this.gridId;
		rn[1]="t";
		table.id=rn.join("_");
		
		if(!ig_csom.IsIE)
			table.width = "1";
		table.border=0;
		table.cellPadding=g.Element.cellPadding;
		table.cellSpacing=g.Element.cellSpacing;
		table.setAttribute("bandNo",band.Index);
		table.style.position="relative";
		table.style.borderCollapse=this.Band.getBorderCollapse();
		
            	
             
//		if (ig_csom.IsIE7)
//		{
//		   table.width="100%";
//		}
		 if(band._wdth=="100%")
		{
		   table.width="100%";
		}
			
			
		
		
		table.style.tableLayout="fixed";
		if(this.Rows && this.Rows.Node && this.Rows.Node.selectSingleNode("Group"))
			table.style.tableLayout="auto";
		if(g.TableLayout!=1)
			table.style.tableLayout="auto";

		if(childGroupRows)
		{
			majCell.appendChild(table);
			table.width="100%";
			var tHead=document.createElement("thead");
			var tr=document.createElement("tr");
			var th=document.createElement("th");
			th.innerHTML="&nbsp;";
			tr.appendChild(th);
			tHead.appendChild(tr);
			tHead.style.display="none";
			table.appendChild(tHead);
			tBody=document.createElement("tbody");
			table.appendChild(tBody);
		}
		else
		{
			if(!band.HeaderHTML)
			{
				majCell.appendChild(table);
				var colGr=document.createElement("colgroup");
				var col;
				var tableWidth=0;
				if(g.Bands.length>1)
				{
					col=document.createElement("col");
					if(band.getIndentation()>0)
						col.width=band.getIndentation();
					else
						col.style.display="none";
					colGr.appendChild(col);
					if(col.width)
						tableWidth+=parseInt(col.width,10);
				}

				if(band.getRowSelectors()==1)
				{
					col=document.createElement("col");
					col.width=(band.RowLabelWidth?band.RowLabelWidth:"22px");
					colGr.appendChild(col);
					if(col.width)
						tableWidth+=parseInt(col.width,10);
				}
				var tablePercWidth="";
				for(var i=0;i<band.Columns.length;i++)
				{
					var co=band.Columns[i];
					if(co.getVisible())
					{
						col=document.createElement("col");
						if(co.Node && co.Node.getAttribute(igtbl_litPrefix+"width"))
							try
							{
								col.width=co.Node.getAttribute(igtbl_litPrefix+"width");
								
								if(col.width.length>1 && col.width.substr(col.width.length-1)=="%")
									tablePercWidth="100%";
							}catch(e){;}
						else
							try{col.width=co.getWidth();}catch(e){;}
						colGr.appendChild(col);
					}
				}
				for(var i=0;i<band.Columns.length;i++)
					if(band.Columns[i].getHidden())
					{
						col=document.createElement("col");
						col.width="1px";
						col.style.display="none";
						colGr.appendChild(col);
					}
				if(table.childNodes.length>0)
					table.insertBefore(colGr,table.childNodes[0]);
				else
					table.appendChild(colGr);
				var tHead=document.createElement("thead");
				if(this.Band.Index==0 && this.Band.Grid.StatHeader && this.GroupByRow && g.get("StationaryMarginsOutlookGroupBy")=="True")
					tHead.style.display="none";
				if(table.childNodes.length>1)
					table.insertBefore(tHead,table.childNodes[1]);
				else
					table.appendChild(tHead);
				igtbl_addEventListener(tHead,"mousedown",igtbl_headerClickDown);
				igtbl_addEventListener(tHead,"mouseup",igtbl_headerClickUp);
				igtbl_addEventListener(tHead,"mouseout",igtbl_headerMouseOut);
				igtbl_addEventListener(tHead,"mousemove",igtbl_headerMouseMove);
				igtbl_addEventListener(tHead,"mouseover",igtbl_headerMouseOver);
				igtbl_addEventListener(tHead,"contextmenu",igtbl_headerContextMenu);
				if(band._optSelectRow)
				{
					tHead.className = band.getItemClass();
					tHead.className += " ";
					tHead.className += band.getHeadClass();
				}
				var tr=document.createElement("tr");
				tHead.appendChild(tr);
				var th;

				if(g.Bands.length>1)
				{
					th=document.createElement("th");
					if(!band._optSelectRow)
						th.className=band.NonSelHeaderClass;
					th.height=band.DefaultRowHeight;
					img=document.createElement("img");
					img.src=g.BlankImage;
					img.border=0;
					th.appendChild(img);
					tr.appendChild(th);
				}

				if(band.getRowSelectors()==1)
				{
					th=document.createElement("th");
					if(!band._optSelectRow)
						th.className=band.NonSelHeaderClass;
					th.height=band.DefaultRowHeight;
					img=document.createElement("img");

					
					img.src=g.GridCornerImage?g.GridCornerImage:g.BlankImage;
					igtbl_addEventListener(img,"click",igtbl_GridCornerClick);
					img.setAttribute("gridName",g.UniqueID);
					img.border=0;
					th.appendChild(img);
					tr.appendChild(th);
				}
				var nfrow=null;
				var setHeight=false;
				for(var i=0;i<band.Columns.length;i++)
				{
					var column=band.Columns[i];
					if(column.hasCells())
					{
						th=document.createElement("th");
						th.id=this.gridId+"_c"+"_"+band.Index+"_"+i.toString();
						th.setAttribute("columnNo",i);
						if(column.getHidden())
							th.style.display="none";
						var headerNode=null;
						if(column.Node)
						{
							headerNode=column.Node.selectSingleNode("Header");
							var titleAttrib;
							if (headerNode && (titleAttrib=headerNode.getAttribute(igtbl_litPrefix+"title")))					
								th.setAttribute("title",unescape(titleAttrib))					
						}				
						
						
						var colHeadImg = "";
						var colHeadImgUrl;
						var colHeadImgAltText;
						var colHeadImgHeight;
						var colHeadImgWidth;
						if(headerNode)
						{
							colHeadImgUrl = headerNode.getAttribute("ImageUrl");
							colHeadImgAltText = headerNode.getAttribute("ImageAltText");
							colHeadImgHeight = headerNode.getAttribute("ImageHeight");
							colHeadImgWidth = headerNode.getAttribute("ImageWidth");
						}
						else
						{
							colHeadImgUrl = column.HeaderImageUrl;
							colHeadImgAltText = column.HeaderImageAltText;
							colHeadImgHeight = column.HeaderImageHeight;
							colHeadImgWidth = column.HeaderImageWidth;
						}
						if (colHeadImgUrl || colHeadImgAltText)
						{
							colHeadImg = "<img";
							if (colHeadImgUrl)
								colHeadImg += " src="+unescape(colHeadImgUrl);
							if (colHeadImgAltText)
								colHeadImg += " alt="+unescape(colHeadImgAltText);
							if (colHeadImgHeight)
								colHeadImg += " Height="+colHeadImgHeight;
							if (colHeadImgWidth)
								colHeadImg += " Width="+colHeadImgWidth;								
							colHeadImg += ">";
						}
						
						var filterImage="";
						if (column.AllowRowFiltering>=2
                                && column.Band.FilterUIType==2 
						) 
					    {
							var useAppliedImage=false;
							
							if (column.RowFilterMode==1 || column.Band.Index==0)
							{
								var filterPanel=g.Bands[column.Band.Index]._filterPanels[column.Id];
								useAppliedImage =   (filterPanel && filterPanel.getOperator()>0);
							}
							else
							{
								var innerTableId = this.Id.replace("_r_","_t_");
								var filterPanel = band._filterPanels[innerTableId];
								useAppliedImage = filterPanel && filterPanel[column.Id] && filterPanel[column.Id].getOperator()>0;
							}																					
							filterImage="<img src='";
							filterImage += (useAppliedImage ? g.FilterAppliedImage : g.FilterDefaultImage);
							filterImage += "' border='0px' imgType='filter'" ;
							filterImage += " onmousedown='javascript:ig_cancelEvent(event);'";
							filterImage += " onmouseup='javascript:igtbl_showFilterOptions(\""+column.Id+"\",event);'" ;
							if(!column.getFilterIcon())
							{
								filterImage += "style=\"display:none\"";
							}
							filterImage += " imgType=\"filter\">";
						}
						var ht = "";
						if(colHeadImg.length>0)
							ht+=colHeadImg;
						
						var headerText=column.HeaderText;
						if (!column.HeaderWrap)
							ht+="<nobr>"+(headerText?headerText:"&nbsp;");
						else
							ht+=column.HeaderText;
						ht+=filterImage;
						var sortIndImg = "";
						switch(column.SortIndicator)
						{
							case 1:
								
								sortIndImg="&nbsp;<img src='"+g.SortAscImg+"' alt='"+g.SortAscAltText+"' border='0' height='12' width='12' imgType='sort'>";
								break;
							case 2:
								
								sortIndImg="&nbsp;<img src='"+g.SortDscImg+"' alt='"+g.SortDescAltText+"' border='0' height='12' width='12' imgType='sort'>";
								break;
						}
						ht+=sortIndImg;																		
						if(g.UseFixedHeaders && column.getFixedHeaderIndicator()==2)
						{
							if(column.Fixed)
								ht+="&nbsp;<img src='"+g.FixedHeaderOnImage+"' alt='"+g._fixedHeaderOnAltText+"' border='0' width='12' height='12' imgType='fixed' onclick='igtbl_fixedClick(event)'>";
							else
								ht+="&nbsp;<img src='"+g.FixedHeaderOffImage+"' alt='"+g._fixedHeaderOffAltText+"' border='0' width='12' height='12' imgType='fixed' onclick='igtbl_fixedClick(event)'>";
						}
							
						if (!column.HeaderWrap)
							ht+="</nobr>";
						if(g.UseFixedHeaders && !column.Fixed && !nfrow)
						{
							var nftd=document.createElement("th");
							nftd.colSpan=band.Columns.length-column.Index;
							if(!g.IsXHTML)
								nftd.width="100%";
							else
							{
								nftd.style.verticalAlign="top";
								setHeight=true;
							}
							nftd.style.textAlign="left";
							if(band._optSelectRow)
								nftd.className=g.StopperStyle;
							tr.appendChild(nftd);
							var nfd=document.createElement("div");
							nftd.appendChild(nfd);
							nfd.id=g.Id+"_drs";
							nfd.style.overflow="hidden";
							if(!g.IsXHTML)
								nfd.style.width="100%";
							nfd.style.height="100%";
							if(g.IsXHTML)
								nfd.style.position="relative";
							var nftable=document.createElement("table");
							nfd.appendChild(nftable);
							
							if(!ig_csom.IsIE)
								nftable.width="1";
							nftable.border="0";
							nftable.cellPadding=g.Element.cellPadding;
							nftable.cellSpacing=g.Element.cellSpacing;
							nftable.style.position="relative";
							nftable.style.tableLayout="fixed";
							nftable.style.height="100%";
							var nfcgs=document.createElement("colgroup");
							nftable.appendChild(nfcgs);
							for(var j=column.Index;j<band.Columns.length;j++)
							{
								if(band.Columns[j].getVisible())
								{
									var nfcg=document.createElement("col");
									nfcg.width=band.Columns[j].Width;
									nfcgs.appendChild(nfcg);
								}
							}
							for(var j=column.Index;j<band.Columns.length;j++)
							{
								if(band.Columns[j].getHidden())
								{
									var nfcg=document.createElement("col");
									nfcg.width="1px";
									nfcg.style.display="none";
									nfcgs.appendChild(nfcg);
								}
							}
							if(
								!g.IsXHTML &&
								g._scrElem.scrollLeft)
								nftable.style.left=(-g._scrElem.scrollLeft).toString()+"px";
							var nftb=document.createElement("tbody");
							nftable.appendChild(nftb);
							nfrow=document.createElement("tr");
							nftb.appendChild(nfrow);
						}
						{
							if(!band._optSelectRow)
								th.className=column.getHeadClass();
							else if(this.HeaderClass)
								th.className=this.HeaderClass;
							if(column.HeaderStyle)
								th.style.cssText=column.HeaderStyle;
							th.innerHTML=ht;
						}
						if(nfrow)
						{
							nfrow.appendChild(th);
							if(setHeight)
							{
								var nftd=nfrow.parentNode.parentNode.parentNode.parentNode;
								
								nftd.style.height=nftd.parentNode.offsetHeight+"px";
								setHeight=false;
							}
						}
						else
							tr.appendChild(th);
						tableWidth+=column.getWidth();
					}
				}
				if(band.ColHeadersVisible!=1)
					tHead.style.display="none";
				if(tablePercWidth)
					table.style.width=tablePercWidth;
				if(table.tBodies.length==0)
				{
					tBody=document.createElement("tbody");
					table.appendChild(tBody);
					if(band._optSelectRow)
					{
						tBody.className = band.getItemClass();
						tBody.className += " ";
						tBody.className += band.getHeadClass();
					}
				}
			}
            if( this.Rows.Band.FilterUIType==1 && this.Rows.Band.FilterRowView==1)
            {
                
                var tr=document.createElement("tr");
                tBody.appendChild(tr);
                tr.id=this.gridId+"_flr_"+this.getLevel(true);
                tr.setAttribute("filterRow","true");
                if(band._optSelectRow) tr.className=band.getItemClass();
				var td;
				
				if(g.Bands.length>1)
				{
					td=document.createElement(
						"th"
					);
					tr.appendChild(td);
					td.className=igtbl_getExpAreaClass(this.gridId,band.Index);
					td.style.height=band.DefaultRowHeight;
					img=document.createElement("img");
					td.appendChild(img);
					img.src=g.BlankImage;
					img.border=0;
				}
				
				if(band.getRowSelectors()==1)
				{
					td=document.createElement(
						"th"
					);
					tr.appendChild(td);
					td.className=igtbl_getRowLabelClass(this.gridId,band.Index);
					td.id=this.gridId+"_fll_"+this.getLevel(true);
					td.style.height=band.DefaultRowHeight;
					img=document.createElement("img");
					td.appendChild(img);
					img.src=g.BlankImage;
					img.border=0;
				}
				var nfrow=null;
				setHeight=false;
						
				var filterTypeImage=null;
				var filterButtonImgString="";
				for(var i=0;i<band.Columns.length;i++)
				{
					var column=band.Columns[i];
					if(column.hasCells())
					{
					    
					    if(filterTypeImage==null||filterTypeImage[0]!=column.FilterOperatorDefaultValue)
					    {
					        filterTypeImage=null;
					        var filImgs=g.FilterButtonImages;
					        for(var itr = 0; itr < filImgs.length ; itr++)
					        {
					            if(column.FilterOperatorDefaultValue==filImgs[itr][0])
					            {
					                filterTypeImage=filImgs[itr];
					                break;
					            }
					        }
					                    
					        filterButtonImgString="<button onclick=\"igtbl_filterTypeSelect(event);\" class=\""+band.FilterOperandButtonStyle+" "+band.Grid.FilterOperandButtonStyle +"\" style=\"height:100%;padding:0px;\"><img src=\""+filterTypeImage[1]+"\" alt=\""+filterTypeImage[2]+"\" operator="+filterTypeImage[0]+" /></button><span></span>";
					    }
						td=document.createElement("td");
						td.id=this.gridId+"_flc_"+this.getLevel(true)+"_"+i.toString();
						var ct=filterButtonImgString;
						
						td.className=band.FilterRowStyle+" "+band.Grid.FilterRowStyle;
						if(column.getHidden())
							td.style.display="none";
						
						if(g.UseFixedHeaders && !column.Fixed && !nfrow)
						{
							var nftd=document.createElement("td");
							nftd.colSpan=band.Columns.length-column.Index;
							if(band._optSelectRow)
							{
								nftd.className=g.StopperStyle;
								if(g.IsXHTML)
									setHeight=true;
							}
							else
							{
								if(!g.IsXHTML)
									nftd.width="100%";
								else
								{
									nftd.style.verticalAlign="top";
									setHeight=true;
								}
							}
							tr.appendChild(nftd);
							var nfd=document.createElement("div");
							nftd.appendChild(nfd);
							nfd.id=g.Id+"_drs";
							nfd.style.overflow="hidden";
							if(!g.IsXHTML)
								nfd.style.width="100%";
							nfd.style.height="100%";
							if(g.IsXHTML)
								nfd.style.position="relative";
							var nftable=document.createElement("table");
							nfd.appendChild(nftable);
							nftable.border="0";
							nftable.cellPadding=g.Element.cellPadding;
							nftable.cellSpacing=g.Element.cellSpacing;
							nftable.style.position="relative";
							nftable.style.tableLayout="fixed";
							nftable.style.height="100%";
							var nfcgs=document.createElement("colgroup");
							nftable.appendChild(nfcgs);
							for(var j=column.Index;j<band.Columns.length;j++)
							{
								if(band.Columns[j].getVisible())
								{
									var nfcg=document.createElement("col");
									nfcg.width=band.Columns[j].Width;
									nfcgs.appendChild(nfcg);
								}
							}
							for(var j=column.Index;j<band.Columns.length;j++)
							{
								if(band.Columns[j].getHidden())
								{
									var nfcg=document.createElement("col");
									nfcg.width="1px";
									nfcg.style.display="none";
									nfcgs.appendChild(nfcg);
								}
							}
							if(!g.IsXHTML&&g._scrElem.scrollLeft)
								nftable.style.left=(-g._scrElem.scrollLeft).toString()+"px";
							var nftb=document.createElement("tbody");
							nftable.appendChild(nftb);
							nfrow=document.createElement("tr");
							nfrow.id=this.gridId+"_flfr_"+this.getLevel(true);
							nftb.appendChild(nfrow);
						}
						
						if(column.CssClass && !band._optSelectRow)
							td.className+=(td.className.length>0?" ":"")+column.CssClass;
						td.innerHTML=ct;
						
						if(nfrow)
						{
							nfrow.appendChild(td);
							if(setHeight)
							{
								var nftd=nfrow.parentNode.parentNode.parentNode.parentNode;
								nftd.style.height=nftd.parentNode.offsetHeight+"px";
								setHeight=false;
							}
						}
						else
							tr.appendChild(td);
					}
				}
				this.Rows.FilterRow=new igtbl_FilterRow(tr,this.Rows);
			}
			if(!this.GroupByRow && this.Rows.Band.AddNewRowVisible==1 && this.Rows.Band.AllowAddNew==1)
			{
				var tr=document.createElement("tr");
				tBody.appendChild(tr);
				tr.id=this.gridId+
					"_anr_"
					+this.getLevel(true);
				tr.setAttribute("addNewRow","true");
				if(band._optSelectRow)
					tr.className=band.getItemClass();
				var td;

				if(g.Bands.length>1)
				{
					td=document.createElement(
						"th"
					);
					tr.appendChild(td);
					td.className=igtbl_getExpAreaClass(this.gridId,band.Index);
					td.style.height=band.DefaultRowHeight;
					img=document.createElement("img");
					td.appendChild(img);
					img.src=g.BlankImage;
					img.border=0;
				}
				if(band.getRowSelectors()==1)
				{
					td=document.createElement(
						"th"
					);
					tr.appendChild(td);
					td.className=igtbl_getRowLabelClass(this.gridId,band.Index);
					td.id=this.gridId+
						"_anl_"
						+this.getLevel(true);
					td.style.height=band.DefaultRowHeight;
					img=document.createElement("img");
					td.appendChild(img);
					img.src=g.BlankImage;
					img.border=0;
				}
				var nfrow=null;
				setHeight=false;
				for(var i=0;i<band.Columns.length;i++)
				{
					var column=band.Columns[i];
					if(column.hasCells())
					{
						td=document.createElement("td");
						td.id=this.gridId+
							"_anc_"
							+this.getLevel(true)+"_"+i.toString();
						var ct=column.DefaultValue;
						if(band.AddNewRowStyle)
							td.style.cssText=band.AddNewRowStyle;
						if(column.getHidden())
							td.style.display="none";
						if(!column.Wrap)
						{
						    
                            switch(column.ColumnType)
						    {
						        case 3:
                                    if(!ct || ct.toString().toLowerCase()=="false" || ct=="0")
                                        ct=false;
                                    else
                                        ct=true;
                                    ct="<nobr><input type='checkbox' tabIndex='-1' "+ (ct? 'CHECKED':'') +" on"+(ig_csom.IsIE?"property":"")+"change='igtbl_chkBoxChange(event,\""+g.Id+"\");'>";                
                                    break;
                                default:
                                    ct="<nobr>"+(ct?ct:"&nbsp;")+"</nobr>";
                                    break;
                            }
						}
						if(g.UseFixedHeaders && !column.Fixed && !nfrow)
						{
							var nftd=document.createElement("td");
							nftd.colSpan=band.Columns.length-column.Index;
							if(band._optSelectRow)
							{
								nftd.className=g.StopperStyle;
								if(g.IsXHTML)
									setHeight=true;
							}
							else
							{
								if(!g.IsXHTML)
									nftd.width="100%";
								else
								{
									nftd.style.verticalAlign="top";
									setHeight=true;
								}
							}
							tr.appendChild(nftd);
							var nfd=document.createElement("div");
							nftd.appendChild(nfd);
							nfd.id=g.Id+"_drs";
							nfd.style.overflow="hidden";
							if(!g.IsXHTML)
								nfd.style.width="100%";
							nfd.style.height="100%";
							if(g.IsXHTML)
								nfd.style.position="relative";
							var nftable=document.createElement("table");
							nfd.appendChild(nftable);
							nftable.border="0";
							nftable.cellPadding=g.Element.cellPadding;
							nftable.cellSpacing=g.Element.cellSpacing;
							nftable.style.position="relative";
							nftable.style.tableLayout="fixed";
							nftable.style.height="100%";
							var nfcgs=document.createElement("colgroup");
							nftable.appendChild(nfcgs);
							for(var j=column.Index;j<band.Columns.length;j++)
							{
								if(band.Columns[j].getVisible())
								{
									var nfcg=document.createElement("col");
									nfcg.width=band.Columns[j].Width;
									nfcgs.appendChild(nfcg);
								}
							}
							for(var j=column.Index;j<band.Columns.length;j++)
							{
								if(band.Columns[j].getHidden())
								{
									var nfcg=document.createElement("col");
									nfcg.width="1px";
									nfcg.style.display="none";
									nfcgs.appendChild(nfcg);
								}
							}
							if(!g.IsXHTML && g._scrElem.scrollLeft)
								nftable.style.left=(-g._scrElem.scrollLeft).toString()+"px";
							var nftb=document.createElement("tbody");
							nftable.appendChild(nftb);
							nfrow=document.createElement("tr");
		
							nfrow.id=this.gridId+"_anfr_"+this.getLevel(true);
							nftb.appendChild(nfrow);
						}
						
						if(column.CssClass
							&& !band._optSelectRow
						)
							td.className=(td.className.length>0?" ":"")+column.CssClass;
						td.innerHTML=ct;
						if(nfrow)
						{
							nfrow.appendChild(td);
							if(setHeight)
							{
								var nftd=nfrow.parentNode.parentNode.parentNode.parentNode;
								
								nftd.style.height=nftd.parentNode.offsetHeight+"px";
								setHeight=false;
								
								
								nfrow.style.height=nftd.style.height;
							}
						}
						else
							tr.appendChild(td);
					}
				}
				this.Rows.AddNewRow=new igtbl_AddNewRow(tr,this.Rows);
				igtbl_setNewRowImg(this.gridId,tr);
				g.newImg=null;
			}
			var footersNode=null;
			if(this.Rows.Node)
				footersNode=this.Rows.Node.selectSingleNode("Footers");
			if(band.ColFootersVisible==1 && !band.FooterHTML)
			{
				var tFoot=document.createElement("tfoot");
				table.appendChild(tFoot);
				if(this.Band.Index==0 && this.Band.Grid.StatFooter && this.GroupByRow && g.get("StationaryMarginsOutlookGroupBy")=="True")
					tFoot.style.display="none";
				if(band._optSelectRow)
				{
					tFoot.className = band.getItemClass();
					tFoot.className += " ";
					tFoot.className += band.getHeadClass();
					tFoot.className += " ";
					tFoot.className += band.getFooterClass();
				}
				var tr=document.createElement("tr");
				tFoot.appendChild(tr);
				var th;

				if(g.Bands.length>1)
				{
					th=document.createElement("th");
					tr.appendChild(th);
					if(!band._optSelectRow)
						th.className=band.getExpAreaClass();
					th.height=band.DefaultRowHeight;
					img=document.createElement("img");
					th.appendChild(img);
					img.src=band.Grid.BlankImage;
					img.border=0;
					img.style.visibility="hidden";
				}

				if(band.getRowSelectors()==1)
				{
					th=document.createElement("th");
					tr.appendChild(th);
					if(!band._optSelectRow)
						th.className=band.getRowLabelClass();
					th.height=band.DefaultRowHeight;
					img=document.createElement("img");
					th.appendChild(img);
					img.src=band.Grid.BlankImage;
					img.border=0;
					img.style.visibility="hidden";
				}
				var footers=null;
				if(footersNode)
					footers=footersNode.selectNodes("Footer");
				var nfrow=null;
				setHeight=false;
				for(var i=0;i<band.Columns.length;i++)
				{
					var column=band.Columns[i];
					if(column.hasCells())
					{
						th=document.createElement("th");
						th.id=this.gridId+
						"_"+
						"f"+"_"+band.Index+"_"+i.toString();
						if(column.getHidden())
							th.style.display="none";
						var ht="&nbsp;";
						if(footers && i<footers.length && footers[i].getAttribute("caption"))
							ht=unescape(footers[i].getAttribute("caption"));
						else if(column.Node)
						{
							var fn=column.Node.selectSingleNode("Footer");
							if(fn && fn.getAttribute("caption"))
								ht=unescape(fn.getAttribute("caption"));
						}
						if(g.UseFixedHeaders && !column.Fixed && !nfrow)
						{
							var nftd=document.createElement("th");
							nftd.colSpan=band.Columns.length-column.Index;
							nftd.style.textAlign="left";
							if(band._optSelectRow)
								nftd.className=g.StopperStyle;
							if(!g.IsXHTML)
								nftd.width="100%";
							else
							{
								nftd.style.verticalAlign="top";
								setHeight=true;
							}
							tr.appendChild(nftd);
							var nfd=document.createElement("div");
							nftd.appendChild(nfd);
							nfd.id=g.Id+"_drs";
							nfd.style.overflow="hidden";
							if(!g.IsXHTML)
								nfd.style.width="100%";
							nfd.style.height="100%";
							if(g.IsXHTML)
								nfd.style.position="relative";
							var nftable=document.createElement("table");
							nfd.appendChild(nftable);
							nftable.border="0";
							nftable.cellPadding=g.Element.cellPadding;
							nftable.cellSpacing=g.Element.cellSpacing;
							nftable.style.position="relative";
							nftable.style.tableLayout="fixed";
							nftable.style.height="100%";
							var nfcgs=document.createElement("colgroup");
							nftable.appendChild(nfcgs);
							for(var j=column.Index;j<band.Columns.length;j++)
							{
								if(band.Columns[j].getVisible())
								{
									var nfcg=document.createElement("col");
									nfcg.width=band.Columns[j].Width;
									nfcgs.appendChild(nfcg);
								}
							}
							for(var j=column.Index;j<band.Columns.length;j++)
							{
								if(band.Columns[j].getHidden())
								{
									var nfcg=document.createElement("col");
									nfcg.width="1px";
									nfcg.style.display="none";
									nfcgs.appendChild(nfcg);
								}
							}
							if(
								!g.IsXHTML &&
								g._scrElem.scrollLeft)
								nftable.style.left=(-g._scrElem.scrollLeft).toString()+"px";
							var nftb=document.createElement("tbody");
							nftable.appendChild(nftb);
							nfrow=document.createElement("tr");
							nftb.appendChild(nfrow);
						}
						{
							if(!band._optSelectRow)
								th.className=column.getFooterClass();
							else if(column.FooterClass)
								th.className=column.FooterClass;
							if(column.FooterStyle)
								th.style.cssText=column.FooterStyle;
							th.innerHTML=ht;
						}
						if(nfrow)
						{
							nfrow.appendChild(th);
							if(setHeight)
							{
								var nftd=nfrow.parentNode.parentNode.parentNode.parentNode;
								nftd.style.height=nftd.parentNode.offsetHeight+"px";
								setHeight=false;
							}
						}
						else
							tr.appendChild(th);
					}
				}
			}
		}

		this.Rows.Element=tBody;
		tBody.Object=this.Rows;
	}
},
"getLevel",
function(s)
{
	var l=new Array();
	l[0]=this.getIndex(true);
	var pr=this.ParentRow;
	while(pr)
	{
		l[l.length]=pr.getIndex(true);
		pr=pr.ParentRow;
	}
	
	if(l.length > 1)
	    l=l.reverse();
	if(s)
	{
		s=l.join("_");
		igtbl_dispose(l);
		delete l;
		return s;
	}
	return l;
},
"getCell",
function(index)
{
	if(index<0 || !this.cells || index>=this.cells.length)
		return null;
	if(!this.cells[index])
	{
		var cell=null;
		var col=this.Band.Columns[index];
		if(col.hasCells())
		{
			if(this.Band.Grid.UseFixedHeaders && !col.getFixed())
			{
				var i=0,ci=this.Band.firstActiveCell,colspan=1;
				var cells=this.Element.cells;
				while(i<=index)
				{
					if(!this.Band.Columns[i].getFixed() && (i==0 || this.Band.Columns[i-1].getFixed()))
					{
						
						
						var tempCells = cells[cells.length-1].firstChild.firstChild.rows
						if(tempCells && tempCells.length>0)
						{
						    cells=tempCells[0].cells;
						    ci=0;
						    colspan=1;
						}    
					}
					if(this.Band.Columns[i].hasCells())
					{
						if(i==index && colspan==1)
							cell=cells[ci];
						if(colspan==1)
						{
							if(cells[ci])
								colspan=cells[ci].colSpan;
							ci++;
						}
						else
							colspan--;
					}
					i++;
				}
			}
			else
			{
				var ri=col.getRealIndex(this);
				if(ri>=0)
				{
					cell=this.Element.cells[this.Band.firstActiveCell+ri];
					if(cell)
					{
						var column=igtbl_getColumnById(cell.id);
						if(!column || !igtbl_isColEqual(column,col))
							cell=null;
					}
				}
			}
		}
		var node=null;
		if(this.Node)
		{
			var cni=-1,colNo=0;
			while(colNo<col.Node.parentNode.childNodes.length)
			{
				if(!col.Node.parentNode.childNodes[colNo].getAttribute("serverOnly"))
					cni++;
				if(colNo==col.Node.getAttribute("columnNo"))
					break;
				colNo++;
			}
			if(cni>=0 && cni<col.Node.parentNode.childNodes.length)
				node=this.Node.selectSingleNode("Cs").childNodes[cni];
		}
		this.cells[index]=new igtbl_Cell(cell,node,this,index);
	}
	return this.cells[index];
},
"getCellByColumn",
function(col)
{
	return this.getCell(col.Index);
},
"getCellFromKey",
function(key)
{
	var cell=null;
	var col=this.Band.getColumnFromKey(key);
	if(col)
		cell=this.getCellByColumn(col);
	return cell;
},
"getChildRow",
function(index)
{
	if(!this.Expandable)
		return null;
	
	if(!this.FirstChildRow && this.Rows)
		this.FirstChildRow = this.Rows.getRow(0);
	if(index<0 || index>=this.ChildRowsCount || !this.FirstChildRow)
		return null;
	var i=0;
	var r=this.FirstChildRow.Element;
	while(i<index && r)
	{
		r=igtbl_getNextSibRow(this.gridId,r);
		i++;
	}
	if(!r)
		return null;
	return igtbl_getRowById(r.id);
},
"compare",
function(row)
{
	if(this.OwnerCollection!=row.OwnerCollection)
		return 0;
	if(this.GroupByRow)
		return igtbl_getColumnById(this.GroupColId).compareRows(this,row);
	else
	{
		var sc=this.OwnerCollection.Band.SortedColumns;
		for(var i=0;i<sc.length;i++)
		{
			var col=igtbl_getColumnById(sc[i]);
			if(col.hasCells())
			{
				var cell1=this.getCellByColumn(col);
				var cell2=row.getCellByColumn(col);
				var res=col.compareCells(cell1,cell2);
				if(res!=0)
				{
					return res;
				}
			}
		}
	}
	return 0;
},
"remove",
function(fireEvents)
{
	return this.OwnerCollection.remove(this.OwnerCollection.indexOf(this),fireEvents);
},
"getNextTabRow",
function(shift,ignoreCollapse,addRow
,filterRow
)
{
	var row=null;
	if(shift)
	{
		row=this.getPrevRow(addRow
    ,   filterRow 
		);
		if(row)
		{
			while(row.Rows && (row.getExpanded() || ignoreCollapse && row.Expandable))
			{
				if(addRow && row.Rows.AddNewRow && (row.Band.AddNewRowView==2 || this.Rows.length==0 && this.Band.AddNewRowView==1))
					row=row.Rows.AddNewRow;
				else
					row=row.Rows.getRow(row.Rows.length-1);
			}
		}
		else if(this.ParentRow)
			row=this.ParentRow;
	}
	else
	{
		if(this.Rows && (this.getExpanded() || ignoreCollapse && this.Expandable))
		{
			if(addRow && this.Rows.AddNewRow && (this.Band.AddNewRowView==1 || this.Rows.length==0 && this.Band.AddNewRowView==2))
				row=this.Rows.AddNewRow;
			else
				row=this.Rows.getRow(0);
		}
		else
		{
			row=this.getNextRow(addRow
            ,filterRow
			);
			if(!row && this.ParentRow)
			{
				var pr=this.ParentRow;
				while(!row && pr)
				{
					row=pr.getNextRow(addRow);
					pr=pr.ParentRow;
				}
			}
		}
	}
	return row;
},
"getSelected",
function()
{
	if(this._Changes["SelectedRows"])
		return true;
	return false;
},
"setSelected",
function(select)
{
	var str=this.Band.getSelectTypeRow();
	if(str>1)
	{
		if(str==2)
			this.Band.Grid.clearSelectionAll();
		igtbl_selectRow(this.gridId,this,select);
	}
},
"getNextRow",
function(addRow
    , filterRow
)
{
	var nr;
	if(this.IsAddNewRow)
	{
		if(this.Band.AddNewRowView==1)
		{
			if(this.Band.Index==0 && this.Band.Grid.StatHeader || this._dataChanged)
				return null;
			nr=0;
		}
		else
			if(this.Band.Index==0 && this.Band.Grid.StatFooter)
				return null;
	}
	else
    if(this.IsFilterRow)
    {
        if(this.Band.FilterRowView==igtbl_featureRowView.Top)
        {
        	if(this.Band.Index==0 && this.Band.Grid.StatHeader )
				return null;
			nr=0;
        }
        else
		    if(this.Band.Index==0 && this.Band.Grid.StatFooter)
				return null;        
    }
    else
		nr=this.getIndex()+1;
	var nextRow = this.OwnerCollection.getRow(nr);
	while(nr<this.OwnerCollection.length && nextRow && nextRow.getHidden())
	{
		nr++;
		nextRow = this.OwnerCollection.getRow(nr);
	}
	if(nr<this.OwnerCollection.length && nextRow)
		return nextRow;
	if(addRow && this.Band.AddNewRowVisible==1 && this.Band.AddNewRowView==2 && nr==this.OwnerCollection.length)
		return this.OwnerCollection.AddNewRow;
    if(filterRow && this.Band.FilterUIType==1 && this.Band.FilterRowView==igtbl_featureRowView.Bottom && nr==this.OwnerCollection.length)
        return this.OwnerCollection.FilterRow;
	return null;
},
"getPrevRow",
function(addRow
    , filterRow
)
{
	var pr;
	if(this.IsAddNewRow)
	{
		if(this.Band.AddNewRowView==2)
		{
			if(this.Band.Index==0 && this.Band.Grid.StatFooter || this._dataChanged)
				return null;
			pr=this.OwnerCollection.length-1;
		}
		else
			if(this.Band.Index==0 && this.Band.Grid.StatHeader)
				return null;
	}
	else
    if(this.IsFilterRow)
    {
        if(this.Band.FilterRowView==igtbl_featureRowView.Bottom)
        {
        	if(this.Band.Index==0 && this.Band.Grid.StatFooter )
				return null;
			pr=this.OwnerCollection.length-1;
        }
        else
		    if(this.Band.Index==0 && this.Band.Grid.StatHeader)
				return null;        
    }
    else
		pr=this.getIndex()-1;
	while(pr>=0 && this.OwnerCollection.getRow(pr).getHidden())
		pr--;
	if(pr>=0)
		return this.OwnerCollection.getRow(pr);
	if(addRow && this.Band.AddNewRowVisible==1 && this.Band.AddNewRowView==1 && pr==-1)
		return this.OwnerCollection.AddNewRow;
    if(filterRow && this.Band.FilterUIType==1 && this.Band.FilterRowView==igtbl_featureRowView.Top && pr==-1)
        return this.OwnerCollection.FilterRow;
	return null;
},
"activate",
function(fireEvents)
{
	this.Band.Grid.setActiveRow(this,false,fireEvents);
},
"isActive",
function()
{
	return this.Band.Grid.getActiveRow()==this;
},
"scrollToView",
function()
{
	igtbl_scrollToView(this.gridId,this.Element);
},
"deleteRow",
function(skipRowRecalc)
{
	var gs=igtbl_getGridById(this.gridId);
	var del=false;
	var rowId=this.Element.id;
	if(this.Band.AllowDelete==1 || this.Band.AllowDelete==0 && gs.AllowDelete==1)
	{
		var rows=this.OwnerCollection;
		if(igtbl_inEditMode(this.gridId))
		{
			igtbl_hideEdit(this.gridId);
			if(igtbl_inEditMode(this.gridId))
				return false;
		}
		if(igtbl_fireEvent(this.gridId,gs.Events.BeforeRowDeleted,"(\""+this.gridId+"\",\""+rowId+"\")")==true)
			return false;
		var btn=igtbl_getElementById(this.gridId+"_bt");

		del=true;
		var prevAdded=typeof(gs.AddedRows[rowId])!="undefined";
		if(!prevAdded)
			gs.invokeXmlHttpRequest(gs.eReqType.DeleteRow,this,null,true);
		if (gs.XmlResponseObject && gs.XmlResponseObject.Cancel) return;
		if(btn && btn.style.display=="")
			btn.style.display="none";
		igtbl_scrollLeft(gs.Element.parentNode,0);		
		this.OwnerCollection.setLastRowId();
		if(this.getExpanded())
			this.toggleRow();
		
		if(this.Band.SortedColumns.length==0)
		{
			igtbl_clearRowChanges(gs,this);
			for(var rid in gs.AddedRows)
				if(rid==rowId || rid.substr(0,rowId.length+1)==rowId+"_")
					igtbl_clearRowChanges(gs,igtbl_getRowById(rid));
		}
		if(!rows.deletedRows)
			rows.deletedRows=new Array();
		var ar=this.Band.Grid.getActiveRow();
		var needPB=false;
		this.Element.setAttribute("deleted",true);
		if(typeof(this.Node)=="undefined")
		{
			var overlappingColSpan = -1;
			for(var i=0;i<this.Band.Columns.length;i++)
			{
				var cell=this.getCellByColumn(this.Band.Columns[i]);
				if(!cell && this.Band.Columns[i].hasCells())
				{
					var row=this;
					while(row.getPrevRow() && !cell)
					{
						row=row.getPrevRow();
						cell=row.getCellByColumn(this.Band.Columns[i]);
					}
					if(row==this || !cell || cell.Column.hasCells() && cell.Element!=null && cell.Element.rowSpan==1)
					{
						needPB=true;
						break;
					}
				}
				else if(cell && cell.Column.hasCells() && (!cell.Element || cell.Element.rowSpan>1))
				{
					if (overlappingColSpan>1 )
						overlappingColSpan--;
					if(cell.Element && cell.Element.rowSpan>1)
					{
						needPB=true;
						break;
					}	
				}
				if(cell && cell.Element )
				{
					if (cell.Element.rowSpan>1)
						cell.Element.rowSpan--;
					if (cell.Element.colSpan>1)
						overlappingColSpan = cell.Element.colSpan;
				}	
			}
		}
		if(!needPB)
		{
			rows.deletedRows[rows.deletedRows.length]=this.remove(false);
			
			if(gs.LoadOnDemand==3 && (!gs.Events.XmlHTTPResponse || gs.Events.XmlHTTPResponse[1] || gs.Events.AfterRowDeleted[1]))
				gs._removeChange("DeletedRows",this);
			var pr=this.ParentRow;
			if(pr)
			{
				pr.VisChildRowsCount--;
				pr.ChildRowsCount--;
			}
			while(pr)
			{
				if(pr.Expandable && pr.Rows.length==0)
				{
					if (pr.Rows.Band.AddNewRowVisible!=1)
					pr.setExpanded(false);
					if(pr.GroupByRow)
					{
						gs._removeChange("CollapsedRows",pr);
						gs.DeletedRows[pr.Element.id]=true;
						pr.Element.setAttribute("deleted",true);
						rows.deletedRows[rows.deletedRows.length]=pr.remove(false);
						gs._removeChange("DeletedRows",pr);
						delete gs.SelectedRows[pr.Element.id];
					}
					else
					{
						if (pr.Rows.Band.AddNewRowVisible!=1)
							pr.Element.childNodes[0].childNodes[0].style.display="none";
					}
					pr.Expandable=false;
				}
				pr=pr.ParentRow;
			}
			if(this.Node && !gs.isDeletingSelected)
				rows.reIndex(this.getIndex(true));
			if(ar==this)
				this.Band.Grid.setActiveRow(null);
			else
			{
				var ac=this.Band.Grid.getActiveCell();
				if(ac && ac.Row==this)
					this.Band.Grid.setActiveCell(null);
			}
		}
		else
		{
			gs._recordChange("DeletedRows",this);
			igtbl_needPostBack(this.gridId);
		}
		if(prevAdded)
			this._Changes["DeletedRows"].setFireEvent(false);		
		gs._calculateStationaryHeader();
		
		if(!skipRowRecalc) gs._recalcRowNumbers();
		igtbl_fireEvent(this.gridId,gs.Events.AfterRowDeleted,"(\""+this.gridId+"\",\""+rowId+"\");");
		if(gs.LoadOnDemand==3)
			gs.NeedPostBack=false;
	}
	return del;
},
"getLeft",
function(offsetElement)
{
	return igtbl_getLeftPos(igtbl_getElemVis(this.Element.cells,igtbl_getBandFAC(this.gridId,this.Element)),true,offsetElement);
},
"getTop",
function(offsetElement)
{
	var t=igtbl_getTopPos(this.Element,true,offsetElement);
	return t;
},
"editRow",
function(force)
{    
    
	var au=igtbl_getAllowUpdate(this.gridId,this.Band.Index);
	if(igtbl_currentEditTempl!=null || !force && au!=1 && au!=3	|| this.IsAddNewRow || this.IsFilterRow)
		return;
	var editTempl=igtbl_getElementById(this.Band.RowTemplate);
	if(!editTempl)
		return;
	
	var tPan=this.Band.transPanel;
	if(tPan==null && ig_csom.IsIEWin)
	{	
		this.Band.transPanel=tPan=ig_csom.createTransparentPanel();
		if(tPan)
		{
			editTempl.parentNode.insertBefore(tPan.Element,editTempl);
			tPan.Element.style.zIndex=igtbl_parseInt(editTempl.style.zIndex)-1;
		}
	}		
	var gridObj=igtbl_getGridById(this.gridId);
	
	gridObj.Element.setAttribute("noOnResize",true);
	window.setTimeout("igtbl_clearNoOnResize('"+this.gridId+"')",100);
	if(igtbl_fireEvent(this.gridId,gridObj.Events.BeforeRowTemplateOpen,"(\""+this.gridId+"\",\""+this.Element.id+"\",\""+this.Band.RowTemplate+"\")"))
		return;
	try
	{
		if(editTempl.style.filter!=null && this.Band.ExpandEffects)
		{
			var ee=this.Band.ExpandEffects;
			if(ee.EffectType!='NotSet')
			{
				editTempl.style.filter="progid:DXImageTransform.Microsoft."+ee.EffectType+"(duration="+ee.Duration/1000+");"
				if(ee.ShadowWidth>0)
					editTempl.style.filter+=" progid:DXImageTransform.Microsoft.Shadow(Direction=135, Strength="+ee.ShadowWidth+",color="+ee.ShadowColor+");"
				if(ee.Opacity<100)
					editTempl.style.filter+=" progid:DXImageTransform.Microsoft.Alpha(Opacity="+ee.Opacity+");"
				if(editTempl.filters[0]!=null)
					editTempl.filters[0].apply();
				if(editTempl.filters[0]!=null)
					editTempl.filters[0].play();
			}
			else
			{
				if(ee.ShadowWidth>0)
					editTempl.runtimeStyle.filter="progid:DXImageTransform.Microsoft.Shadow(Direction=135, Strength="+ee.ShadowWidth+",ee.Color="+ee.ShadowColor+");"
				if(ee.Opacity<100)
					editTempl.runtimeStyle.filter+=" progid:DXImageTransform.Microsoft.Alpha(Opacity="+ee.Opacity+");"
			}
		}
	}
	catch(ex){}
	editTempl.style.display="";
	
	editTempl.style.visibility="hidden"; 
	if(!editTempl.style.width)
		editTempl.style.width=editTempl.offsetWidth;
	if(!editTempl.style.height)
		editTempl.style.height=editTempl.offsetHeight;
	editTempl.setAttribute("noHide",true);
	var fc=igtbl_getElemVis(this.Element.cells,igtbl_getBandFAC(this.gridId,this.Element));
	editTempl.style.left=igtbl_getRelativePos(this.gridId,fc,"Left");
	var tw=igtbl_clientWidth(editTempl);
	var bw=gridObj.IsXHTML?document.documentElement.clientWidth:document.body.clientWidth;
	var gdw = gridObj.Element.parentNode.scrollLeft;
	
	if (gridObj.IsXHTML)
	{
	    var leftVal=gridObj.MainGrid.offsetLeft+fc.offsetLeft-gridObj.DivElement.scrollLeft;
	    if (leftVal<0) leftVal=gridObj.MainGrid.offsetLeft;
	    editTempl.style.left=leftVal+(ig_csom.IsIE ? "" :"px");
	}    
	else
	    editTempl.style.left=editTempl.offsetLeft+gdw;	
    if(editTempl.offsetLeft+tw-igtbl_getBodyScrollLeft()>bw)
	    if(bw-tw+igtbl_getBodyScrollLeft()-gdw>0)
		    editTempl.style.left=bw-tw+igtbl_getBodyScrollLeft()-gdw;
	    else
		    editTempl.style.left=0;
	var th=igtbl_clientHeight(editTempl);
	var bh=gridObj.IsXHTML?document.documentElement.clientHeight:document.body.clientHeight;
	
	if (gridObj.IsXHTML)
	{
	    var elemAbsBounds = igtbl_getAbsBounds(this.Element, gridObj, true);
	    
	    var topVal=elemAbsBounds.y;	    	    
	        
            topVal+=elemAbsBounds.h;   	   	    
	    editTempl.style.top=topVal+(ig_csom.IsIE ? "" :"px");
	}
	else
	    editTempl.style.top=igtbl_getRelativePos(this.gridId,fc,"Top")+this.Element.offsetHeight+"px";
    if(editTempl.offsetTop+th-igtbl_getBodyScrollTop()>bh)
	    if(bh-th+igtbl_getBodyScrollTop()>0)
		    editTempl.style.top=bh-th+igtbl_getBodyScrollTop()+"px";
	    else
		    editTempl.style.top="0px";
	
    if(tPan)
    {
        
		
		
		tPan.setPosition(editTempl.style.top,editTempl.style.left,editTempl.style.width,editTempl.style.height);
		tPan.show();
		
		editTempl.style.zIndex = "10000";
		tPan.Element.style.zIndex = "10000";
    }
	editTempl.setAttribute("editRow",this.Element.id);
	igtbl_fillEditTemplate(this,editTempl.childNodes);
	
	editTempl.style.visibility="visible";
	if(igtbl_focusedElement && igtbl_isVisible(igtbl_focusedElement))
	{
		igtbl_focusedElement.focus();
		if(igtbl_focusedElement.select)
			igtbl_focusedElement.select();
		igtbl_focusedElement=null;
	}
	igtbl_currentEditTempl=this.Band.RowTemplate;
	igtbl_oldMouseDown=igtbl_addEventListener(document,"mousedown",igtbl_gRowEditMouseDown,false);
	igtbl_justAssigned=true;
	window.setTimeout(igtbl_resetJustAssigned,100);
	editTempl.removeAttribute("noHide");
	igtbl_fireEvent(this.gridId,gridObj.Events.AfterRowTemplateOpen,"(\""+this.gridId+"\",\""+this.Element.id+"\")");
},
"endEditRow",
function(saveChanges)
{
	if(arguments.length==0 || typeof(saveChanges)=="undefined")
		saveChanges=false;
	var gs=igtbl_getGridById(this.gridId);
	var editTempl=igtbl_getElementById(this.Band.RowTemplate);
	if(!editTempl || editTempl.style.display!="")
		return;
	if(editTempl.getAttribute("noHide"))
		return;
	if(igtbl_fireEvent(this.gridId,gs.Events.BeforeRowTemplateClose,"(\""+this.gridId+"\",\""+this.Element.id+"\","+saveChanges.toString()+")"))
		return;
	editTempl.style.display="none";
	
	if(this.Band.transPanel)
		this.Band.transPanel.hide();
	igtbl_currentEditTempl=null;
	igtbl_removeEventListener(document,"mousedown",igtbl_gRowEditMouseDown,igtbl_oldMouseDown,false);
	igtbl_oldMouseDown=null;
	if(saveChanges)
		igtbl_unloadEditTemplate(this,editTempl.childNodes);
	igtbl_fireEvent(this.gridId,gs.Events.AfterRowTemplateClose,"(\""+this.gridId+"\",\""+this.Element.id+"\","+saveChanges.toString()+")");
	if(gs.NeedPostBack)
		igtbl_doPostBack(gs.Id);
		
	
	var rowTemplate = igtbl_srcElement(igtbl_getGridById(this.gridId).event)
	while(rowTemplate != null && rowTemplate.id != this.Band.RowTemplate) 
		rowTemplate=rowTemplate.parentNode;
	if(rowTemplate)
		igtbl_activate(this.gridId);

},
"getHidden",
function()
{
	return (this.Element.style.display=="none");
},
"setHidden",
function(h)
{
	this.Element.style.display=(h?"none":"");
	igtbl_browserWorkarounds.ieBorderCollapseArtifacts(this, h);
	
	if (this.getExpanded())
		this.setExpanded(false);
	var g=this.Band.Grid;
	if(g.UseFixedHeaders)
	{
		var drs=null;
		var row=this.Element;
		var i=0;
		while(i<row.cells.length && (!row.cells[i].firstChild || row.cells[i].firstChild.id!=g.Id+"_drs")) i++;
		if(i<row.cells.length)
		{
			var td=row.cells[i];
			drs=td.firstChild;
		}
		if(drs)
			drs.style.display=(h?"none":"");
	}
	if(this.ParentRow)
		this.ParentRow.VisChildRowsCount+=(h?-1:1);
	var ac=this.Band.Grid.getActiveCell();
	if(ac && ac.Row==this && h)
		this.Band.Grid.setActiveCell(null);
	else
	{
		var ar=this.Band.Grid.getActiveRow();
		if(ar && ar==this && h)
			this.Band.Grid.setActiveRow(null);
		else
			this.Band.Grid.alignGrid();
	}
	
	for (var i=0;i<this.Band.Columns.length;i++)
	{
		if (this.Band.Columns[i].ColumnType==7) 
		{
			var cellElement = this.getCell(i).getElement();
			cellElement.style.display=(h?"none":"");
		}
	}
},
"find",
function(re, back
, searchHiddenColumns
)
{
	var g=this.Band.Grid;
	if(re)
		g.regExp=re;
	if(!g.regExp)
		return null;
	g.lastSearchedCell=null;
	if(back==true || back==false)
		g.backwardSearch=back;
	var cell=null;
	if(!g.backwardSearch)
	{
		cell=this.getCell(0);
		if(cell && !cell.Column.getVisible() 
		    && searchHiddenColumns != true
		)
		{
			cell=cell.getNextCell();
		}
		while(cell && cell.getValue(true).search(g.regExp)==-1)
		{
			cell =
			    cell.getNextCell(searchHiddenColumns);
		}
	}
	else
	{
		cell=this.getCell(this.cells.length-1);
		if(cell && !cell.Column.getVisible()
		    && searchHiddenColumns != true
        )
        {
			cell = cell.getPrevCell();
        }
		while(cell && cell.getValue(true).search(g.regExp)==-1)
		{
			cell = 
			    cell.getPrevCell(searchHiddenColumns);
		}
	}
	if(cell)
		g.lastSearchedCell=cell;
	return g.lastSearchedCell;
},
"findNext",
function(re,back
, searchHiddenColumns
)
{
	var g=this.Band.Grid;
	if(!g.lastSearchedCell || g.lastSearchedCell.Row!=this)
	{
        return this.find(re, back, searchHiddenColumns);
	}
	if(re)
		g.regExp=re;
	if(!g.regExp)
		return null;
	if(back==true || back==false)
		g.backwardSearch=back;
	var cell=null;
	if(!g.backwardSearch)
	{
        cell=g.lastSearchedCell.getNextCell(searchHiddenColumns);
		while(cell && cell.getValue(true).search(g.regExp)==-1)
		{
            cell=cell.getNextCell(searchHiddenColumns);
		}
	}
	else
	{
		cell=g.lastSearchedCell.getPrevCell(searchHiddenColumns);
		while(cell && cell.getValue(true).search(g.regExp)==-1)
		{
            cell=cell.getPrevCell(searchHiddenColumns);
		}
	}
	if(cell)
		g.lastSearchedCell=cell;
	else
		g.lastSearchedCell=null;
	return g.lastSearchedCell;
},
"setSelectedRowImg",
function(hide)
{
	var gs=this.Band.Grid;
	if(this.Band.AllowRowNumbering>=2 || this.IsAddNewRow)
		return;
	var row=this.Element;
	if(gs.currentTriImg!=null)
	{
		gs._lastSelectedRow=null;
		var imgObj;
		imgObj=document.createElement("img");
		imgObj.setAttribute("imgType","blank");
		imgObj.border="0";
		if(gs.RowLabelBlankImage)
			imgObj.src=gs.RowLabelBlankImage;
		else
		{
			imgObj.src=gs.BlankImage;
			imgObj.style.visibility="hidden";
		}
		gs.currentTriImg.parentNode.appendChild(imgObj);
		gs.currentTriImg.parentNode.removeChild(gs.currentTriImg);
		gs.currentTriImg=null;
	}
	if(!hide && row && !row.getAttribute("deleted") && !row.getAttribute("groupRow") && this.Band.getRowSelectors()!=2)
	{
		var rl=row.cells[this.Band.firstActiveCell-1];
		if(rl.childNodes.length==0 || !(rl.childNodes[0].tagName=="IMG" && rl.childNodes[0].getAttribute("imgType")=="newRow"))
		{
			var imgObj;
			var bIndex=this.Band.Index;
			imgObj=document.createElement("img");
			imgObj.src=igtbl_getCurrentRowImage(this.gridId,bIndex);
			imgObj.border="0";
			imgObj.setAttribute("imgType","tri");
			if(gs.Section508Compliant){
				var altT=igtbl_getCurrentRowAltText(this.gridId,bIndex);
				if(altT)imgObj.setAttribute("alt",altT);
			}
			var cell=row.cells[this.Band.firstActiveCell-1];
			cell.innerHTML="";
			cell.appendChild(imgObj);
			gs.currentTriImg=imgObj;
		}
		gs._lastSelectedRow=row.id;
	}
},
"renderActive",
function(render)
{
	var g=this.Band.Grid;
	var ao=g.Activation;
	if(!ao.AllowActivation)
		return;
	if(typeof(render)=="undefined") render=true;
	if(this.GroupByRow)
	{
		var fr=this.getFirstRow();
		fr=fr.firstChild;
		if(render)
		{
			igtbl_setClassName(fr,ao._cssClass);
			igtbl_setClassName(fr,ao._cssClassL);
			igtbl_setClassName(fr,ao._cssClassR);
		}
		else
		{
			igtbl_removeClassName(fr,ao._cssClassR);
			igtbl_removeClassName(fr,ao._cssClassL);
			igtbl_removeClassName(fr,ao._cssClass);
		}
	}
	else
	{
		{
			var i=0;
			var els=this.getCellElements();
			if(!els || els.length==0) return;
			var cell=els[i];
			while(cell && cell.offsetHeight==0 && i<this.cells.length)
				cell=els[++i];
			if(i<els.length)
			{
				if(render)
					igtbl_setClassName(cell,ao._cssClassL);
				else
					igtbl_removeClassName(cell,ao._cssClassL);
			}
			for(i=0;i<els.length;i++)
			{
				cell=els[i];
				if(render)
					igtbl_setClassName(cell,ao._cssClass);
				else
					igtbl_removeClassName(cell,ao._cssClass);
			}
			i=els.length-1;
			cell=els[i];
			while(cell && cell.offsetHeight==0 && i>=0)
				cell=els[--i];
			if(i>=0)
			{
				if(render)
					igtbl_setClassName(cell,ao._cssClassR);
				else
					igtbl_removeClassName(cell,ao._cssClassR);
			}
			igtbl_dispose(els);
		}
	}
},
"select",
function(selFlag,fireEvent)
{
	var gs=this.Band.Grid;
	if(this.Band.getSelectTypeRow()<2 || this.getSelected()==selFlag)
		return false;
	if(gs._exitEditCancel || gs._noCellChange)
		return false;
	if(fireEvent!=false)
		if(igtbl_fireEvent(gs.Id,gs.Events.BeforeSelectChange,"(\""+gs.Id+"\",\""+this.Element.id+"\")")==true)
			return false;
	if(!this.GroupByRow)
	{
		var style=null;
		if(selFlag!=false)
			style=this.Band.getSelClass();
		if(this.Band._optSelectRow)
		{
			if(style)
			{
				var aoStyle="";
				if(gs.oActiveRow==this)
				{
					var styles=this.Element.className.split(" ");
					aoStyle=" "+styles[styles.length-1];
					styles=styles.slice(0,styles.length-1);
					this.Element.className=styles.join(" ");
					if(this.nfElement)
						this.nfElement.className=this.Element.className;
				}
				this.Element.className+=" "+style+aoStyle;
				if(this.nfElement)
					this.nfElement.className+=" "+style+aoStyle;
			}
			else
			{
			    
                
                var styles=this.Element.className;
                style=this.Band.getSelClass();
                if(style && styles.indexOf(style)>-1)
                    this.Element.className=styles.replace(style,"");
				
				if(this.nfElement)
					this.nfElement.className=this.Element.className;
			}
		}
		else if(!this.Band._selClassDiffer)
		{
			var els=this.getCellElements();
			for(var i=0;i<els.length;i++)
				igtbl_changeStyle(gs.Id,els[i],style);
		}
		if(this.Band._selClassDiffer)
			for(var i=0;i<this.cells.length;i++)
				this.getCell(i).selectCell(selFlag);
	}
	else if(selFlag!=false)
		igtbl_changeStyle(gs.Id,this.FirstRow.cells[0],this.Band.getSelGroupByRowClass());
	else
		igtbl_changeStyle(gs.Id,this.FirstRow.cells[0],null);
	if(selFlag!=false)
		gs._recordChange("SelectedRows",this,gs.GridIsLoaded.toString());
	
	else if(gs.SelectedRows[this.Element.id] || gs._containsChange("SelectedRows",this))
			gs._removeChange("SelectedRows",this);
	if(fireEvent!=false)
	{
		var gsNPB = gs.NeedPostBack;
		igtbl_fireEvent(gs.Id,gs.Events.AfterSelectChange,"(\""+gs.Id+"\",\""+this.Element.id+"\");");
		if(!gsNPB && !(gs.Events.AfterSelectChange[1]&2))
			gs.NeedPostBack=false;
		if(gs.NeedPostBack)
			igtbl_moveBackPostField(gs.Id,"SelectedRows");
	}
	return true;
},
"processUpdateRow",
function()
{
	return this._processUpdateRow();
},
"_processUpdateRow",
function()
{
	var result=false;
	var g=this.Band.Grid;
	if(!this._dataChanged || typeof(g.Events.BeforeRowUpdate)=="undefined")
		return result;
	for(var i=0;(this._dataChanged&2) && i<this.cells.length;i++)
		if(typeof(this.getCell(i)._oldValue)!="undefined")
			break;
	if(i<this.cells.length)
	{
		g.QueryString="";
		result=g.fireEvent(g.Events.BeforeRowUpdate,[g.Id,this.Element.id]);
		if((this._dataChanged&2))
			for(;i<this.cells.length;i++)
			{
				var cell=this.getCell(i);
				if(typeof(cell._oldValue)!="undefined")
				{
					if(result)
						cell.setValue(cell._oldValue,false);
					else if(g.LoadOnDemand==3)
						g.QueryString+=(g.QueryString&&g.QueryString.length>0?"\x04":"")+"UpdateCell\x06"+cell.Column.Key+"\x02"+igtbl_escape(cell.getValue()==null?cell.Column.getNullText():igtbl_dateToString(cell.getValue()));
				}
			}
		if(!result)
		{
			if(g.LoadOnDemand==3 && (g.Events.AfterRowUpdate[1] || g.Events.XmlHTTPResponse[1]))
				g.invokeXmlHttpRequest(g.eReqType.UpdateRow,this);
			else
			{
				g.fireEvent(g.Events.AfterRowUpdate,[g.Id,this.Element.id]);
				if(g.NeedPostBack)
					igtbl_doPostBack(g.Id);
			}
		}
		this._dataChanged=0;	
	}
	return result;
},
"_getRowNumber",
function()
{
	var index = null;
	var band = this.Band;
	var oLbl;
	if (this.Id && this.Id.indexOf(this.gridId + "_r_") == 0)
	{
		var oLbl = igtbl_getElementById(this.Id.replace("_r_", "_l_"));
	}
	if (!oLbl) 
	{
		
		var oLbl= igtbl_getElementById(this.gridId+"_l_"+this.getLevel(true));
	}
	if (band.getRowSelectors() < 2 && band.AllowRowNumbering > 1 && oLbl)
	{
	    index = igtbl_getInnerText(oLbl);
    }
	return index;
},
"_setRowNumber",
function(value)
{	
	var band = this.Band;
	var oRS = band.firstActiveCell-1;	
	var oLbl=-1;
	if (this.Element)
		oLbl=this.Element.childNodes[oRS];
	if (band.getRowSelectors()<2 && band.AllowRowNumbering>1)
	{
		if (this.Node)this.Node.setAttribute(igtbl_litPrefix+"rowNumber",value);		
		if (oLbl)oLbl.innerHTML=value;
		return value;
	}
	else
		return -1;	
},

"_generateHierarchicalDataKey",
function()
{
    var currentRow = this;
    var dataKey = "";
    while(currentRow) 
    {
        if(currentRow.DataKey) 
            dataKey = currentRow.DataKey + dataKey;
        
        if(currentRow.ParentRow)
            dataKey = '\x08' + dataKey;
            
        currentRow = currentRow.ParentRow;
    }
    return dataKey;
},
"_generateUpdateRowSemaphore",
function(clear)
{
	var cellInfo="";
	for(var j=0;j<this.cells.length;j++)
	{
		var cell=this.getCell(j);
		if(cell)
		{
			if(typeof(cell.getOldValue())!="undefined")
			{
				var oldValue=cell.getOldValue();
				oldValue=igtbl_dateToString(oldValue);
				cellInfo+=(cellInfo.length>0?"\x03":"")+igtbl_escape(cell.Column.Key+"\x05"+cell.Column.Index+"\x05"+oldValue);
				if(clear)
					delete cell._oldValue;
			}
			else
				cellInfo+=(cellInfo.length>0?"\x03":"")+igtbl_escape(cell.Column.Key+"\x05"+cell.Column.Index+"\x05"+(cell.getValue()==null?cell.Column.getNullText():igtbl_dateToString(cell.getValue())));
		}
	}
	return cellInfo;
},
"_generateSqlWhere",
function(dataKeyField,value)
{
	if (!dataKeyField)return;
	var sqlWhere = "";
	var dkfArray = dataKeyField.split(",");
	var valArray = value.split('\x07');
	for(var i = 0 ; i < dkfArray.length ; i++)
	{
		var dk=igtbl_string.trim(dkfArray[i]);
		if (i > 0)
			sqlWhere+=" AND ";
		if (this.Band.getColumnFromKey(dk).DataType==8)
			sqlWhere+=dk+"='"+valArray[i]+"'";
		else
			sqlWhere+=dk+"="+valArray[i];
	}		
	if(this.Band._sqlWhere)
	{
		if(sqlWhere)
			sqlWhere+=" AND ";
		sqlWhere+=this.Band._sqlWhere;
	}
	return sqlWhere;	
},
"getChildRows",
function()
{
	var rows=null;
	row=this.Element;
	if(row.getAttribute("groupRow"))
		rows=row.childNodes[0].childNodes[0].childNodes[0].rows[1].childNodes[0].childNodes[0].tBodies[0].rows;
	else
	{
		if(row.nextSibling && row.nextSibling.getAttribute("hiddenRow"))
		{
			if(this.Band.IndentationType==2)
				rows=row.nextSibling.firstChild.firstChild.tBodies[0].rows;
			else
				rows=row.nextSibling.childNodes[this.Band.firstActiveCell].firstChild.tBodies[0].rows;
		}
		else
			rows=null;
	}
	return rows;
}
,
"getCellElements",
function(flCells)
{
	var re=this.Element,nfr=false;
	
	if(!re || !re.cells.length || this.GroupByRow) return;
	var result=new Array();
	var start=0;
	if(this.Band.Grid.Bands.length>1) start++;
	if(this.Band.getRowSelectors()<2) start++;
	for(var i=start;i<re.cells.length;i++)
	{
		if(this.Band.Grid.UseFixedHeaders && !nfr)
		{
			if(re.cells[i].childNodes.length>0 && re.cells[i].firstChild.tagName=="DIV" && re.cells[i].firstChild.id.substr(re.cells[i].firstChild.id.length-4)=="_drs")
			{
				re=re.cells[i].firstChild.firstChild.childNodes[1].rows[0];
				i=0;
				nfr=true;
			}
		}
		if(flCells)
		{
			if(re.cells[i].offsetHeight>0)
			{
				result[result.length]=re.cells[i];
				break;
			}
		}
		else
			result[result.length]=re.cells[i];
	}
	if(flCells)
	{
		if(this.Band.Grid.UseFixedHeaders && !nfr)
		{
			re=re.cells[re.cells.length-1].firstChild.firstChild.childNodes[1].rows[0];
			i=0;
		}
		for(var j=re.cells.length-1;j>=i;j--)
			if(re.cells[j].offsetHeight>0)
			{
				result[result.length]=re.cells[j];
				break;
			}
	}
	return result;
},
"getRowSelectorElement",
function()
{
	if(!this.GroupByRow && this.Band.getRowSelectors()!=2)
		return this.Element.cells[this.Band.firstActiveCell-1];
	return null;
},
"getExpansionElement",
function()
{
	if(this.GroupByRow) return null;
	if(this.Band.getRowSelectors()!=2)
	{
		if(this.Band.firstActiveCell > 1)
			return this.Element.cells[0];
	}
	else if(this.Band.firstActiveCell > 0)
		return this.Element.cells[0];
	return null;
},
"_evaluateFilters",
function()
{	
	
	if (this.Band.ApplyOnAdd==0)return;
	
	
	var oFilterConditions;
	
	if(this.Band.Index==0 && this.Band.GroupCount == 0)
	{
		oFilterConditions = this.Band._filterPanels;
	}	
	else if( (this.Band.Columns[0].RowFilterMode==1 && this.Band.GroupCount == 0) ||
			 (this.Band.Index==0 && this.Band.GroupCount > 0 && this.Band.Grid.StatHeader))
	{
		
		oFilterConditions = this.Band._filterPanels;
	}
	else 
	{
		
		var siblingRows = this.OwnerCollection;
		oFilterConditions = this.Band._filterPanels[siblingRows.Element.parentNode.id];
	}
	if(oFilterConditions)
	{
		this.getCell(0).Column._evaluateFilters(this,oFilterConditions,this.Band);
	}
}
,"dispose",
function()
{
	igtbl_cleanRow(this);
	igtbl_dispose(this);
}
];
for(var i=0;i<igtbl_ptsRow.length;i+=2)
	igtbl_Row.prototype[igtbl_ptsRow[i]]=igtbl_ptsRow[i+1];
igtbl_Row.prototype["getRowNumber"] = igtbl_Row.prototype["_getRowNumber"];

// Add new row object. Inherited from the row object.
igtbl_AddNewRow.prototype=new igtbl_Row();
igtbl_AddNewRow.prototype.constructor=igtbl_AddNewRow;
igtbl_AddNewRow.base=igtbl_Row.prototype;
function igtbl_AddNewRow(element,rows)
{
	if(arguments.length>0)
		this.init(element,rows);
}
var igtbl_ptsAddNewRow=[
"init",
function(element,rows)
{
	this.IsAddNewRow=true;
	igtbl_AddNewRow.base.init.apply(this,[element,null,rows,-1]);
	this.Type="addNewRow";
},
"commit",
function()
{
	if(this._dataChanged)
	{
		this._dataChanged=0;
		var ac=this.Band.Grid.oActiveCell,ar=this.Band.Grid.oActiveRow;
		var newRow=igtbl_rowsAddNew(this.gridId,this.ParentRow,this);
		if(newRow)
		{
			for(var i=0;i<this.Band.Columns.length;i++)
			{
				var cellObj=this.getCell(i);
				cellObj.setValue(cellObj.Column.getValueFromString(cellObj.Column.DefaultValue));
			}
			this._dataChanged=0;
			if(ac && ac.Row.IsAddNewRow)
			{
				var acSel=ac.getSelected();
				if(acSel)
					ac.setSelected(false);
				var nac=newRow.getCell(ac.Column.Index);
				nac.activate();
				if(acSel)
					nac.setSelected();
			}
			else if(ar.IsAddNewRow)
			{
				var arSel=ar.getSelected();
				if(arSel)
					ar.setSelected(false);
				newRow.activate();
				if(arSel)
					newRow.setSelected();
			}
			newRow.processUpdateRow();
		}
		return newRow;
	}
	return null;
},
"isFixed",
function()
{
	return this.isFixedTop() || this.isFixedBottom();
},
"isFixedTop",
function()
{
	return this.Band.Index==0 && this.Band.Grid.StatHeader!=null && this.Band.AddNewRowView==1;
},
"isFixedBottom",
function()
{
	return this.Band.Index==0 && this.Band.Grid.StatFooter!=null && this.Band.AddNewRowView==2;
}
];
for(var i=0;i<igtbl_ptsAddNewRow.length;i+=2)
	igtbl_AddNewRow.prototype[igtbl_ptsAddNewRow[i]]=igtbl_ptsAddNewRow[i+1];


igtbl_FilterRow.prototype=new igtbl_Row();
igtbl_FilterRow.prototype.constructor=igtbl_FilterRow;
igtbl_FilterRow.base=igtbl_Row.prototype;
function igtbl_FilterRow(element,rows)
{
	if(arguments.length>0)
		this.init(element,rows);
}
var igtbl_ptsFilterRow=[
"init",
function(element,rows)
{
	this.IsFilterRow=true;
	igtbl_FilterRow.base.init.apply(this,[element,null,rows,-1]);
	this.Type="filterRow";
},
"isFixed",
function()
{
	return this.isFixedTop() || this.isFixedBottom();
},
"isFixedTop",
function()
{
	return this.Band.Index==0 && this.Band.Grid.StatHeader!=null && this.Band.FilterRowView==1;
},
"isFixedBottom",
function()
{
	return this.Band.Index==0 && this.Band.Grid.StatFooter!=null && this.Band.FilterRowView==2;
}
];
for(var i=0;i<igtbl_ptsFilterRow.length;i+=2)
	igtbl_FilterRow.prototype[igtbl_ptsFilterRow[i]]=igtbl_ptsFilterRow[i+1];

// Rows collection object
igtbl_Rows.prototype=new igtbl_WebObject();
igtbl_Rows.prototype.constructor=igtbl_Rows;
igtbl_Rows.base=igtbl_WebObject.prototype;
function igtbl_Rows(node,band,parentRow)
{
	if(arguments.length>0)
	{
		var element=null;
		if(band.Index==0 && !parentRow)
			element=band.Grid.Element.tBodies[0];
		else if(parentRow && parentRow.Element)
		{
			if(parentRow.GroupByRow)
			{
				var tb=parentRow.Element.childNodes[0].childNodes[0].tBodies[0];
				if(tb.childNodes.length>1)
					this.Element=tb.childNodes[1].childNodes[0].childNodes[0].tBodies[0];
			}
			else if(parentRow.Element.nextSibling && parentRow.Element.nextSibling.getAttribute("hiddenRow"))
				this.Element=parentRow.Element.nextSibling.childNodes[parentRow.Band.IndentationType==2?0:parentRow.Band.firstActiveCell].childNodes[0].tBodies[0];
		}
		this.init(element,node,band,parentRow);
	}
}
var igtbl_ptsRows=[
"init",
function(element,node,band,parentRow)
{
	igtbl_Rows.base.init.apply(this,["rows",element,node]);
	
	this.Grid=band.Grid;
	this.Band=band;
	this.ParentRow=parentRow;
	this.rows=new Array();
	this.length=0;
	if(node)
	{
		this.SelectedNodes=node.selectNodes("R");
		if(!this.SelectedNodes.length)
		{
			this.SelectedNodes=node.selectNodes("Group");
			if(this.SelectedNodes.length)
				this.GroupColId=this.SelectedNodes[0].getAttribute(igtbl_litPrefix+"groupRow");
		}
		this.length=this.SelectedNodes.length;
	}
	else
	{
		if(parentRow)
			this.length=parentRow.ChildRowsCount;
		else
		{
			this.length=this.Element.childNodes.length;
			for(var i=0;i<this.Element.childNodes.length;i++)
			{
				var r=this.Element.childNodes[i];
				if(r.getAttribute("hiddenRow")
				|| r.getAttribute("addNewRow")
                || r.getAttribute("filterRow")
				)
					this.length--;
			}
		}
	}
	if(this.Element)
		this.Element.Object=this;
	this.lastRowId="";
	if(!this.ParentRow || !this.ParentRow.GroupByRow)
	{
		
		var anr=igtbl_getElementById(this.Grid.Id+"_anr"+(this.ParentRow?"_"+this.ParentRow.getLevel(true):""));
		if(anr)
			this.AddNewRow=new igtbl_AddNewRow(anr,this);
	}
   
   var filterRow=igtbl_getElementById(this.Grid.Id+"_flr"+(this.ParentRow?"_"+this.ParentRow.getLevel(true):""));
   if(filterRow)
   {
        this.FilterRow=new igtbl_FilterRow(filterRow,this);
   }
},
"reapplyRowStyles",
function()
{
	
	var alternateStyle = this.Band.getRowAltClassName();
	var rowStyle = this.Band.getRowStyleClassName();
	
	var useAlternateRowStyle = (alternateStyle!="") && (alternateStyle != rowStyle);
	
	if(!useAlternateRowStyle) return;
	
	var altRow = true;
	for(var i=0;i<this.length;i++)
	{		
		var curRow=this.getRow(i);
		
		if (curRow.getHidden())
			continue;
		var className="";
		
		if (useAlternateRowStyle)
		{
			
			className = altRow?alternateStyle:rowStyle;
			altRow=!altRow;
		}			
		if(className && !curRow.GroupByRow)
		{		
			var rowE = curRow.Element;
			
			if(curRow.Band._optSelectRow)
			{
				
				if(altRow)
					igtbl_dom.css.replaceClass(rowE, rowStyle, alternateStyle);
				else
					igtbl_dom.css.removeClass(rowE, alternateStyle);
			}
			else
			{
				
				
				var j=curRow.Band.firstActiveCell;
				var colNo=0;
				var rowElem=curRow.Element;
				var nonFixed=false;
				while(j<rowElem.cells.length)
				{
					var col=curRow.Band.Columns[colNo];
					if(col.getFixed()===false && !nonFixed)
					{
						j=0;
						rowElem=curRow.nfElement;
						nonFixed=true;
					}
					var e = rowElem.cells[j];
					if(e)
					{
						
						if (useAlternateRowStyle)
						{
							var colCssClass= (altRow)?col.CssClass:col._AltCssClass;
							colCssClass = colCssClass && className!=colCssClass?" "+colCssClass:"";
							if(e.className!=className+colCssClass)
								e.className=className+colCssClass;						
						}		
						else
							e.className=className+(col.CssClass?" "+col.CssClass:"");
					}
					j++;
					colNo++;
				}
			}
		}
	}
},
"getRow",
function(rowNo,rowElement)
{
	if(typeof(rowNo)!="number")
	{
		rowNo=parseInt(rowNo);
		if(isNaN(rowNo))
			return null;
	}
	if(rowNo<0 || !this.Element || !this.Element.childNodes)
		return null;
	if(rowNo>=this.length)
	{
		if(this.length>this.rows.length)
			this.rows[this.length-1]=null;
		return null;
	}
	if(rowNo>=this.rows.length)
		this.rows[this.length-1]=null;
	if(!this.rows[rowNo])
	{
		var row=rowElement;
		if(!row)
		{
			var cr=0;
			if(this.Grid.Bands.length==1 && !this.Grid.Bands[0].IsGrouped)
			{
				var adj=0;
				if(!igtbl_getElementById(this.Grid.Id+"_hdiv") && this.Grid.Bands[0].AddNewRowVisible==1 && this.Grid.Bands[0].AddNewRowView==1)
					adj++;
                
				if(!igtbl_getElementById(this.Grid.Id+"_hdiv") && this.Grid.Bands[0].AllowRowFiltering >= 2 && this.Grid.Bands[0].FilterUIType==1)
					adj++;
				row=this.Element.childNodes[rowNo+adj];
			}
			else
				for(var i=0;i<this.Element.childNodes.length;i++)
				{
					var r=this.Element.childNodes[i];
					if(!r.getAttribute("hiddenRow")
						&& !r.getAttribute("addNewRow")
                        && !r.getAttribute("filterRow")
					)
					{
						if(rowNo==cr)
						{
							row=this.Element.childNodes[i];
							break;
						}
						cr++;
					}
				}
		}
		if(!row)
			return null;
		this.rows[rowNo]=new igtbl_Row(row,(this.Node?this.SelectedNodes[rowNo]:null),this,rowNo);
	}
	return this.rows[rowNo];
},

"getRowById",
function(rowId)
{
	for(var i=0;i<this.length;i++)
	{
		var row=this.getRow(i);
		if(row.Element.id==rowId)
			return row;
	}
	return null;
},
"getColumn",
function(colNo)
{
	var thead=this.Element.previousSibling;
	if(!thead || thead.tagName!="THEAD")
		return;
	var j=-1;
	var metFixed=false;
	for(var i=0;i<this.Band.Columns.length;i++)
	{
		var column=this.Band.Columns[i];
		if(column.hasCells())
			j++;
		if(column.getFixed()===false && !metFixed)
		{
			metFixed=true;
			j=0;
		}
		if(i==colNo)
			break;
	}
	if(j<0 || j>=this.Band.Columns.length)
		return null;
	if(this.Band.Columns[i].getFixed()===false)
	{
		thead=thead.firstChild.cells[thead.firstChild.cells.length-1];
		return thead.firstChild.firstChild.rows[0].cells[j];
	}
	return thead.firstChild.cells[j+this.Band.firstActiveCell];
},
"indexOf",
function(row)
{
	if(row.IsAddNewRow)
			return -1;
    if(row.IsFilterRow)
        return -1;
	if(row.Node)
	{
		
		var index=parseInt(row.Node.getAttribute("i"),10);
		if(typeof(this._getRowToStart)!="undefined")
			index-=this._getRowToStart();
		return index;
	}
	if(this.Grid.Bands.length==1 && !this.Grid.Bands[0].IsGrouped)
	{
		var index=row.Element.sectionRowIndex;
		if(this.Band.AddNewRowVisible==1 && this.Band.AddNewRowView==1 && !this.Grid.StatHeader)
			index--;
		if(this.Band.FilterUIType==1 && this.Band.FilterRowView==igtbl_featureRowView.Top && !this.Grid.StatHeader)
			index--;
		return index;
	}
	var level=-1;
	var rId=row.Element.id,rows=this.Element.rows;
	for(var i=0;i<rows.length;i++)
	{
		var r=rows[i];
		if(!r.getAttribute("hiddenRow")
			&& !r.getAttribute("addNewRow")
            && !r.getAttribute("filterRow")
		)
			level++;
		else
			continue;
		if(r.id==rId)
			return level;
	}
	return -1;
},
"insert",
function(row,rowNo)
{
	var g=this.Grid;
	if(!row || row.OwnerCollection && row.OwnerCollection!=this)
	{
		if(g.getActiveRow()==row)
			g.setActiveRow(null);
		return false;
	}
	if(!g._isSorting)
	{
		if(g.fireEvent(g.Events.BeforeRowInsert,[g.Id,(this.ParentRow?this.ParentRow.Element.id:""),row.Element.id,rowNo])==true)
		{
			if(g.getActiveRow()==row)
				g.setActiveRow(null);
			return false;
		}
	}
	var row1=this.getRow(rowNo);
	if(row1)
	{
		if(this.rows.splice)
			this.rows.splice(rowNo,0,row);
		else
			this.rows=this.rows.slice(0,rowNo).concat(row,this.rows.slice(rowNo));
		this.Element.insertBefore(row.Element,row1.Element);
		if(row.Expandable && row.HiddenElement && !row.GroupByRow)
			this.Element.insertBefore(row.HiddenElement,row1.Element);
		if(this.Node)
		{
			
			var curNode=row.Node;
			var curIndex=igtbl_parseInt(row1.Node.getAttribute("i"));
			this.Node.insertBefore(row.Node,row1.Node);
			while(curNode && curNode.nodeName==
			"R"
			)
			{
				curNode.setAttribute("i",curIndex++);
				curNode=curNode.nextSibling;
			}

			this.SelectedNodes=this.Node.selectNodes("R");
			if(!this.SelectedNodes.length)
				this.SelectedNodes=this.Node.selectNodes("Group");
		}
	}
	else
	{
		this.rows[this.rows.length]=row;
		this.Element.appendChild(row.Element);
		if(row.Expandable && row.HiddenElement && !row.GroupByRow)
			this.Element.appendChild(row.HiddenElement);
		if(this.Node)
			this.Node.appendChild(row.Node);
		row.Node.setAttribute("i",this.rows.length-1);
	}
	this.length++;
	if(typeof(row._removedFrom)!="undefined")
	{
		g._removeChange("DeletedRows",row);
		g._recordChange("MoveRow",row,row._removedFrom+":"+row.getLevel(true));		
		
		if (row._Changes.MoveRow.length)
			row._Changes.MoveRow[row._Changes.MoveRow.length-1].Node.setAttribute("Level",row._removedFrom);
		else
			row._Changes.MoveRow.Node.setAttribute("Level",row._removedFrom);
		
		delete row._removedFrom;
	}
	if(!g._isSorting)
	{
		var oldNPB=g.NeedPostBack;
		g.fireEvent(g.Events.AfterRowInsert,[g.Id,row.Element.id,rowNo]);
		if(!oldNPB && g.NeedPostBack && !g.Events.AfterRowInsert[1]&2)
			g.NeedPostBack=false;
		if(g.NeedPostBack)
			igtbl_doPostBack(g.Id,"");
	}
	return true;
},
"remove",
function(rowNo,fireEvents)
{
	var row=this.getRow(rowNo);
	if(!row)
		return;
	if(typeof(fireEvents)=="undefined") fireEvents=true;
	if(!this.Grid._isSorting)
	{
		this.setLastRowId();
		if(fireEvents && this.Grid.fireEvent(this.Grid.Events.BeforeRowDeleted,[this.Grid.Id,row.Element.id])==true)
			return null;
		this.Grid._recordChange("DeletedRows",row);
		row._removedFrom=row.getLevel(true);
	}
	this.Element.removeChild(row.Element);
	if(row.Expandable && row.HiddenElement && !row.GroupByRow)
		this.Element.removeChild(row.HiddenElement);
	if(row.Node)
	{
		
		var curNode=row.Node.nextSibling;
		row.Node.parentNode.removeChild(row.Node);
		while(curNode && curNode.nodeName==
			"R"
		)
		{
			curNode.setAttribute("i",igtbl_parseInt(curNode.getAttribute("i"))-1);
			curNode=curNode.nextSibling;
		}
		var rows=row.OwnerCollection;
		rows.SelectedNodes=rows.Node.selectNodes("R");
		if(!rows.SelectedNodes.length)
			rows.SelectedNodes=rows.Node.selectNodes("Group");
	}
	if(this.rows.splice)
		this.rows.splice(rowNo,1);
	else
		this.rows=this.rows.slice(0,rowNo).concat(this.rows.slice(rowNo+1));
	this.length--;
	if(fireEvents && !this.Grid._isSorting)
		this.Grid.fireEvent(this.Grid.Events.AfterRowDeleted,[this.Grid.Id,row.Element.id]);
	
	if (ig_csom.IsFireFox)
	{     
		if (this.Grid.getActiveRow()===row || this.Grid.getActiveRow()==null)
		{
			this.Grid.setActiveRow(null);
			var tmp = this.Grid.Rows.getRow(0);
			if(tmp)
			{
				this.Grid.setActiveRow(tmp);
				this.Grid.setActiveRow(null);     
			}
		}
		else
		{
			var tmp = this.Grid.getActiveRow();
			this.Grid.setActiveRow(null);
			this.Grid.setActiveRow(tmp);
		}
	}
	return row;
},
"sort",
function(sortedCols)
{
	var issortch=false;
	if(!this.Grid._isSorting)
		this.Grid._isSorting=issortch=true;
	if(typeof(igtbl_clctnSort)!="undefined")
		igtbl_clctnSort.apply(this,[sortedCols]);
	if(issortch)
		delete this.Grid._isSorting;
},
"getFooterText",
function(columnKey)
{
	var tFoot;
	if(this.Band.Index==0 && this.Grid.StatFooter)
		tFoot=this.Grid.StatFooter.Element;
	else
		tFoot=this.Element.nextSibling;
	var col=this.Band.getColumnFromKey(columnKey);
	if(tFoot && tFoot.tagName=="TFOOT" && col)
	{
		var fId=this.Grid.Id
			+"_"
			+"f_"+this.Band.Index+"_"+col.Index;
		for(var i=0;i<tFoot.rows[0].childNodes.length;i++)
			if(tFoot.rows[0].childNodes[i].id==fId)
				return igtbl_getInnerText(tFoot.rows[0].childNodes[i]);
	}
	return "";
},
"setFooterText",
function(columnKey,value,useMask)
{
	var tFoot;
	if(this.Band.Index==0 && this.Grid.StatFooter)
		tFoot=this.Grid.StatFooter.Element;
	else
		tFoot=this.Element.nextSibling;
	var col=this.Band.getColumnFromKey(columnKey);
	if(tFoot && tFoot.tagName=="TFOOT" && col)
	{
		var fId=this.Grid.Id
			+"_"
			+"f_"+this.Band.Index+"_"+col.Index;
		if(useMask && col.MaskDisplay)
			value=igtbl_Mask(this.Grid.Id,value.toString(),col.DataType,col.MaskDisplay);
		var foot=igtbl_getChildElementById(tFoot,fId);
		if(foot)
		{
			if(igtbl_string.trim(value)=="")
				value="&nbsp;";
			if(foot.childNodes.length>0 && foot.childNodes[0].tagName=="NOBR")
				value="<nobr>"+value+"</nobr>";
			foot.innerHTML=value;
		}
	}
},
"render",
function()
{
	var strTransform=this.applyXslToNode(this.Node);
	if(strTransform)
	{
		var anId=(this.AddNewRow?this.AddNewRow.Id:null);
		this.Grid._innerObj.innerHTML="<table style=\"table-layout:fixed;\">"+strTransform+"</table>";
		var tbl=this.Element.parentNode;
		igtbl_replaceChild(tbl,this.Grid._innerObj.firstChild.firstChild,this.Element);
		igtbl_fixDOEXml();
        var _b = this.Band;
        var headerDiv=igtbl_getElementById(this.Grid.Id+"_hdiv");
        var footerDiv=igtbl_getElementById(this.Grid.Id+"_fdiv");
		if(this.AddNewRow)
		{
			if(_b.Index>0 || _b.AddNewRowView==1 && !headerDiv || _b.AddNewRowView==2 && !footerDiv)
			{
				var anr=this.AddNewRow.Element;
				anr.parentNode.removeChild(anr);
				if(_b.AddNewRowView==1 && tbl.tBodies[0].rows.length>0)
					tbl.tBodies[0].insertBefore(anr,tbl.tBodies[0].rows[0]);
				else
					tbl.tBodies[0].appendChild(anr);
			}
			this.AddNewRow.Element=igtbl_getElementById(anId);
			this.AddNewRow.Element.Object=this.AddNewRow;
		}
		this.Element=tbl.tBodies[0];
		this.Element.Object=this;
        this._setupFilterRow();
		for(var i=0;i<this.Band.Columns.length;i++)
		{
			var column=this.Band.Columns[i];
			if(column.Selected && column.hasCells())
			{
				var col=this.getColumn(i);
				if(col)
					igtbl_selColRI(this.Grid.Id,col,this.Band.Index,i);
			}
		}
		if(this.ParentRow)
		{
			this.ParentRow.ChildRowsCount=this.length;
			this.ParentRow.VisChildRowsCount=this.length;
		}
	}
},
"applyXslToNode",
function(node
)
{
	if(!node) return "";
	if(typeof(rowToStart)=="undefined")
		rowToStart=0;
	var xslProc=this.Grid.XslProcessor;
	xslProc.input=node;
	var hasGrouped=false;
	
	if(this.SelectedNodes && this.SelectedNodes.length && this.SelectedNodes[0].nodeName=="Group")
		hasGrouped=true;
	var prL="";
	if(this.ParentRow)
	{
		prL=this.ParentRow.Element.id.split("_");
		prL=prL.slice(1);
		prL=prL.slice(1);
		prL=prL.join("_")+"_";
	}
	if(hasGrouped)
	{
		
		if(!this.Band._wdth)
		{
			var pdng=0;
			if(this.Grid.get("StationaryMarginsOutlookGroupBy")!="True")
				pdng=5;
			var wdth=0;
			if(this.Grid.Bands.length>0)
				wdth+=22;
			if(this.Band.getRowSelectors()==1)
				wdth+=22;
			for(var i=0;i<this.Band.Columns.length;i++)
				if(this.Band.Columns[i].getVisible())
				{
					var colWidth=this.Band.Columns[i].Width;
					
					if( (colWidth||colWidth==="") && typeof(colWidth)=="string" && (colWidth.length<=2 || colWidth.substr(colWidth.length-2)!="px"))
					{
						wdth=0;
						break;
					}
					wdth+=this.Band.Columns[i].getWidth()+pdng;
				}
			if(wdth>0)
			{
				var j=this.Band.getIndentation();
				for(var i=this.Band.SortedColumns.length-1;i>=0;i--)
				{
					var col=igtbl_getColumnById(this.Band.SortedColumns[i]);
					if(!col.IsGroupBy)
						continue;
					if(this.GroupColId==this.Band.SortedColumns[i])
						break;
					j+=this.Band.getIndentation();
				}
				wdth+=j;
				this.Band._wdth=wdth;
			}
			else
				this.Band._wdth="100%";
		}
		node.setAttribute("grpWidth",this.Band._wdth);
	}
	node.setAttribute("parentRowLevel",prL)
	if(this.Grid.UseFixedHeaders  && this.Grid._scrElem.scrollLeft)
		this.Grid.Node.setAttribute("fixedScrollLeft","left:"+(-this.Grid._scrElem.scrollLeft).toString()+"px;");
	else
	    this.Grid.Node.removeAttribute("fixedScrollLeft");
	xslProc.transform();
	return xslProc.output;
},

"_setupFilterRow",
function()
{
	if(!this.FilterRow) return; 
	var _b = this.Band;
	var headerDiv=igtbl_getElementById(this.Grid.Id+"_hdiv");
	var footerDiv=igtbl_getElementById(this.Grid.Id+"_fdiv");
	var tbl=this.Element.parentNode;
    var flr=this.FilterRow.Element;

	
	if(_b.Index>0 || 
		_b.FilterRowView==igtbl_featureRowView.Top && (!headerDiv || this.length == 0) || 
		_b.FilterRowView==2 && !footerDiv)
	{
        flr.parentNode.removeChild(flr);
		if(_b.FilterRowView==igtbl_featureRowView.Top && tbl.tBodies[0].rows.length>0)
			tbl.tBodies[0].insertBefore(flr,tbl.tBodies[0].rows[0]);
		else
		{
			
			if(headerDiv)
				headerDiv.style.height="";
			tbl.tBodies[0].appendChild(flr);
		}
    }
    
    else if(!this.Band.IsGrouped && this.length > 0 && headerDiv && _b.FilterRowView==igtbl_featureRowView.Top
			&& !igtbl_dom.isParent(this.FilterRow.Element, headerDiv))
    {	
		flr.parentNode.removeChild(flr);
		headerDiv.firstChild.tBodies[0].appendChild(flr);
    }
    
    
    var filterRowElement = igtbl_getElementById(this.FilterRow.Id);
    if(filterRowElement)
    {
        this.FilterRow.Element=filterRowElement;
        this.FilterRow.Element.Object=this.FilterRow;
    }
},
"getHeaderRow",
function()
{
	if(this.Band.Index == 0 && this.Grid.StatHeader && this.length > 0)
	{
		return this.Grid.StatHeader.Element;
	}
	//return this.Element.t;
	return null;
},
"addNew",
function()
{
	var g=this.Grid;
	if(this.AddNewRow)
		return igtbl_activateAddNewRow(this.Grid,this.Band.Index,this.ParentRow);
	return igtbl_rowsAddNew(g.Id,this.ParentRow);
},
"dispose",
function(self)
{
	for(var i=0;i<this.rows.length;i++)
	{
		if(this.rows[i])
		{
			if(this.rows[i].Rows)
				this.rows[i].Rows.dispose(true);
			igtbl_cleanRow(this.rows[i]);
		}
	}
	igtbl_dispose(this.rows);
	delete this.rows;
	if(self)
	{
		this.Grid=null;
		this.Band=null;
		this.ParentRow=null;
		this.deletedRows=null;
		this.Element.Object=null;
		if(this.AddNewRow)
			igtbl_cleanRow(this.AddNewRow);
        if(this.FilterRow)
            igtbl_cleanRow(this.FilterRow);
		igtbl_dispose(this);
	}
	else
		this.rows=new Array();
},
"reIndex",
function(sRow)
{
	for(var i=sRow;i<this.length;i++)
		this.getRow(i).Node.setAttribute("i",i.toString());
},
"repaint",
function()
{
	var strTransform=this.applyXslToNode(this.Node);
	if(strTransform)
	{
		var anId=(this.AddNewRow?this.AddNewRow.Id:null);
		this.Grid._innerObj.innerHTML="<table>"+strTransform+"</table>";
		var tbl=this.Element.parentNode;
		var newEl=this.Grid._innerObj.firstChild.firstChild;
		for(var i=this.rows.length-1;i>=0;i--)
			if(this.rows[i])
			{
				if(this.rows[i].HiddenElement)
				{
					if(i==newEl.rows.length-1)
						newEl.appendChild(this.rows[i].HiddenElement);
					else
						newEl.insertBefore(this.rows[i].HiddenElement,newEl.rows[i+1]);
					var img=newEl.rows[i].firstChild;
					if(this.rows[i].getExpanded() && img)
					{
						img=newEl.rows[i].firstChild.firstChild;
						if(img && img.tagName=="IMG")
						{
							img.src=this.Band.getCollapseImage();
							
							var alt = img.getAttribute("alt");
							if(alt != null){
								var clpsAlt = img.getAttribute("igAltC");
								if(clpsAlt != null){
									img.setAttribute("igAltX",alt);
									img.setAttribute("alt",clpsAlt);
									img.removeAttribute("igAltC");
								}
							}
						}
					}
				}
				var row=this.rows[i];
				row.Element=newEl.rows[i];
				row.Element.Object=row;
				var metFixed=false;
				var ri=0;
				for(var j=0;row.cells && j<row.cells.length;j++)
				{
					var cell=row.cells[j];
					var column=this.Band.Columns[j];
					if(column.getFixed()===false && !metFixed)
					{
						metFixed=true;
						ri=0;
					}
					if(cell)
					{
						cell.Column=column;
						cell.Index = j;
						if(cell.Column.hasCells())
						{
							if(cell.Column.getFixed()===false)
							{
								rowEl=row.Element.cells[row.Element.cells.length-1];
								cell.Element=rowEl.firstChild.firstChild.rows[0].cells[ri];
							}
							else
								cell.Element=row.Element.cells[cell.Column.getRealIndex()+this.Band.firstActiveCell];

							
							var nodePosition = parseInt(cell.Column.Node.getAttribute("cellIndex")) - 1;
							if(nodePosition < row.Node.selectSingleNode("Cs").childNodes.length)
								cell.Node=row.Node.selectSingleNode("Cs").childNodes[nodePosition];

							cell.Element.Object=cell;
							cell.Id=cell.Element.id;
							if(cell.getSelected() || row.getSelected())
								cell.selectCell();
							ri++;
						}
						else
							cell.Element=null;
					}
					else if(column.hasCells())
						ri++;
				}
			}
		var anr;
		if(this.AddNewRow)
		{
			if(this.Band.AddNewRowView==1 && (this.Band.Index>0 || !igtbl_getElementById(this.Grid.Id+"_hdiv")))
				anr=this.AddNewRow.Element;
		}
		if(anr)
		{
			while(anr.nextSibling)
				anr.parentNode.removeChild(anr.nextSibling)
			while(newEl.rows.length)
				anr.parentNode.appendChild(newEl.rows[0]);
		}
		else
			igtbl_replaceChild(tbl,newEl,this.Element);
		
		igtbl_fixDOEXml();
		this.Element=tbl.tBodies[0];
		this.Element.Object=this;
		if(this.AddNewRow)
		{
			if(this.Band.AddNewRowView==2 && (this.Band.Index>0 || !igtbl_getElementById(this.Grid.Id+"_fdiv")))
			{
				anr=this.AddNewRow.Element;
				tbl.tBodies[0].appendChild(anr);
			}
			this.AddNewRow.Element=igtbl_getElementById(anId);
			this.AddNewRow.Element.Object=this.AddNewRow;
		}
	}
},
"_buildSortXmlQueryString",
function(op)
{
    

	var g=this.Grid;
	var row=this.ParentRow;
	g.QueryString=op+"\x01";
	if(row)
		g.QueryString+=row.getLevel(true);
	var sqlWhere="";
	var sortOrder="";
	for(var i=0;i<=this.Band.Index;i++)
	{
		var cr=row;
		var sqlW="";
		while(cr && cr.Band!=g.Bands[i])
			cr=cr.ParentRow;
		if(g.Bands[i].DataKeyField&&cr&&cr.get(igtbl_litPrefix+"DataKey"))
		
			
			sqlW+=cr._generateSqlWhere(g.Bands[i].DataKeyField,unescape(cr.get(igtbl_litPrefix+"DataKey")));
		else if(g.Bands[i]._sqlWhere)
		{
			if(sqlW)
				sqlW+=" AND ";
			sqlW+=g.Bands[i]._sqlWhere;
		}
		sqlWhere=sqlW+(i==this.Band.Index?"":";");
	}
	for(var i=0;i<g.Bands.length;i++)
	{
		var so="";
		for(var j=0;j<g.Bands[i].SortedColumns.length;j++)
		{
			var col=igtbl_getColumnById(g.Bands[i].SortedColumns[j]);
			so+=col.Key+(col.SortIndicator==2?" DESC":"")+(j<g.Bands[i].SortedColumns.length-1?",":"");
		}
		sortOrder+=so+(i==g.Bands.length-1?"":";");
	}
	
	
	var band=this.Band,sCols;
	if(band)
	{
		sCols=band.Index;
		for(var i=0;i<band.SortedColumns.length;i++)
		{
			var col=igtbl_getColumnById(band.SortedColumns[i]);
			sCols+="|"+col.Index;
			sCols+=":"+col.IsGroupBy.toString();
			sCols+=":"+col.SortIndicator;
		}
	}
	
	g.QueryString+="\x02"+sqlWhere;
	g.QueryString+="\x02"+sortOrder;	
	if(this.Band.ColumnsOrder)	
		g.QueryString+="\x02"+this.Band.ColumnsOrder;
		
    g.QueryString+="\x02"+sCols;
    		
	var currentFilters="";
	if(this.hasRowFilters())
	{
	    var bandFilters=this.CurrentFilterScope();
	    if (bandFilters)
	    {
		    for (var colId in bandFilters)
		    {
			    var filter=bandFilters[colId];
			    			    
			    if (filter.IsActive())
			    {			        			    
				    var col=igtbl_getColumnById(colId);
				    
				    currentFilters+=col.getLevel(true)+"\x05"+filter.getOperator()+"\x05"+filter.getEvaluationValue()+"\x03";
			    }
		    }
	    }
	}
	g.QueryString+="\x02"+currentFilters;
},
"sortXml",
function(sortedCols)
{
	if(this.Band.SortedColumns.length==0)
		return;
	var g=this.Grid;
	this._buildSortXmlQueryString("Sort");
	g.RowToQuery=this.ParentRow;
	g.xmlHttpRequest(g.eReqType.Sort);
},
"getLastRowId",
function()
{
	if(!this.lastRowId)
		this.setLastRowId();
	return this.lastRowId;
},
"setLastRowId",
function(lrId)
{
	if(arguments.length==0 && !this.lastRowId)
	{
		if(this.length>0)
			this.lastRowId=this.getRow(this.length-1).Element.id;
	}
	else if(lrId)
		this.lastRowId=lrId;
}
,"CurrentFilterScope",
function()
{   
    if (this.Band.RowFilterMode==1||(this.Band.Index==0&&!this.Band.IsGrouped) )
    {
        return this.Band._filterPanels;
    }
    if (this.Band.RowFilterMode==2)
    {
            var filterPanels=this.Band._filterPanels;
			var myTable = this.Element;
			while(myTable!=null && myTable.tagName!="TABLE")
			{
				myTable=myTable.parentNode;
			}
			if(!filterPanels||!myTable)return null;
			for(var fp in filterPanels)
			{
				if(myTable.id==fp)
				return filterPanels[fp];
			}
    }
    return null;
}
,"hasRowFilters",
function()
{	

	switch(this.Band.RowFilterMode)
	{
		case "1":
		case 1: 
		{
			
			var filterPanels=this.Band._filterPanels;
			
			if(!filterPanels || igtbl_getLength(filterPanels)==0)return false;
			return true;
			break;
		}
		case "2":
		case 2:
		{
						
			var filterPanels=this.Band._filterPanels;
			if (filterPanels&&this.Band.Index==0&&!this.Band.IsGrouped&&igtbl_getLength(filterPanels)>0)return true;
			var myTable = this.Element;
			while(myTable!=null && myTable.tagName!="TABLE")
			{
				myTable=myTable.parentNode;
			}
			if(!filterPanels||!myTable)return false;
			for(var fp in filterPanels)
			{
				if(myTable.id==fp)
				    return true;
			}
			break;
		}
		default:
			return false;
	}
	return false;
}
,"refresh",
function()
{
	var g=this.Grid;
	g.setActiveCell(null);
	g.setActiveRow(null);
	g.clearSelectionAll();
	this._buildSortXmlQueryString("Refresh");
	g.RowToQuery=this.ParentRow;
	g.xmlHttpRequest(g.eReqType.Refresh);
}
,"getFilterRow",
function()
{
        
    
    if (this.Band.RowFilterMode == 1 ) return null;
    
    
    if (this.Band.FilterUIType != 1) return null;
    
    
    return this.FilterRow;
}
];
for(var i=0;i<igtbl_ptsRows.length;i+=2)
	igtbl_Rows.prototype[igtbl_ptsRows[i]]=igtbl_ptsRows[i+1];

// State change object
igtbl_StateChange.prototype=new igtbl_WebObject();
igtbl_StateChange.prototype.constructor=igtbl_StateChange;
igtbl_StateChange.base=igtbl_WebObject.prototype;
function igtbl_StateChange(type,grid,obj,value)
{
	if(arguments.length>0)
		this.init(type,grid,obj,value);
}
igtbl_StateChange.prototype.init=function(type,grid,obj,value)
{
	igtbl_StateChange.base.init.apply(this,[type]);
	this.Node=ig_ClientState.addNode(grid.StateChanges,"StateChange");
	
	this.Grid=grid;
	this.Object=obj;
	ig_ClientState.setPropertyValue(this.Node,"Type",this.Type);
	if(typeof(value)!="undefined" && value!=null)
	{
		if(value=="" && typeof(value)=="string") value="\x01";
		ig_ClientState.setPropertyValue(this.Node,"Value",value);
	}
	if(obj)
	{
		if(obj.getLevel)
			ig_ClientState.setPropertyValue(this.Node,"Level",obj.getLevel(true));
		var dataKey=null;
		if(obj.Type=="row" || obj.Type=="cell" || obj.Type=="rows")
		{
			var row=obj;
			if(obj.Type=="cell")
				row=obj.Row;
			else if(obj.Type=="rows")
				row=obj.ParentRow;
			if(row)
			{
				dataKey=(row.DataKey?row.DataKey:"");
				while(row.ParentRow)
				{
					row=row.ParentRow;
					dataKey=(row.DataKey?row.DataKey:"")+"\x04"+dataKey;
				}
			}
		}
		if(dataKey)
			ig_ClientState.setPropertyValue(this.Node,"DataKey",dataKey);
		if(this.Object._Changes[this.Type])
		{
			var ch=this.Object._Changes[this.Type];
			if(!ch.length)
				ch=new Array(ch);
			this.Object._Changes[this.Type]=ch.concat(this);
		}
		else
			this.Object._Changes[this.Type]=this;
	}
}
igtbl_StateChange.prototype.remove=function(lastOnly)
{
	if(lastOnly && this.Grid.StateChanges.lastChild!=this.Node)
		return;
	ig_ClientState.removeNode(this.Grid.StateChanges,this.Node);
	var ch=this.Object._Changes[this.Type];
	if(ch.length)
	{
		for(var i=0;i<ch.length;i++)
			if(ch[i]==this)
			{
				ch=this.Object._Changes[this.Type]=ch.slice(0,i).concat(ch.slice(i+1));
				break;
			}
		if(ch.length==1)
		{
			this.Object._Changes[this.Type]=ch[0];
			ch[0]=null;
			igtbl_dispose(ch);
		}
	}
	else
		delete this.Object._Changes[this.Type];
	this.Grid=null;
	this.Object=null;
	this.Node=null;
	igtbl_dispose(this);
}
igtbl_StateChange.prototype.setFireEvent=function(value)
{
	ig_ClientState.setPropertyValue(this.Node,"FireEvent",value.toString());
}

function igtbl_XSLTProcessor(xsltURL)
{
	if(!xsltURL)
		return null;
	if(ig_csom.IsIE)
	{
		var xslt=ig_createActiveXFromProgIDs(["MSXML2.FreeThreadedDOMDocument","Microsoft.FreeThreadedXMLDOM"]);
		xslt.async=false;
		xslt.load(xsltURL);

		var xslTemplate=new ActiveXObject("MSXML2.XSLTemplate");
		xslTemplate.stylesheet=xslt;
		this.Processor=xslTemplate.createProcessor();
	}
	else
	{
		var xmlResp=new DOMParser();
		var xmlHttp=new XMLHttpRequest();
		xmlHttp.open("GET",xsltURL,false);
		xmlHttp.send(null);
		this.Processor=new XSLTProcessor();
		this.Processor.importStylesheet(xmlResp.parseFromString(xmlHttp.responseText,"text/xml"));
	}
}
igtbl_XSLTProcessor.prototype.addParameter=function(name,value)
{
	if(!this.Processor) return null;
	if(ig_csom.IsIE)
		return this.Processor.addParameter(name,value);
	else
		return this.Processor.setParameter(null,name,value);
};
igtbl_XSLTProcessor.prototype.transform=function()
{
	if(!this.input)
		return false;
	if(ig_csom.IsIE)
	{
		this.Processor.input=this.input;
		this.Processor.transform();
		this.output=this.Processor.output;
	}
	else
		return this.outputDocument=this.Processor.transformToDocument(this.input);
	return true;
};

if(document.implementation && document.implementation.createDocument)
{
	igtbl_XSLTProcessor.prototype.__defineGetter__("output",function _igtbl_XSLTProcOutput()
	{
		if(ig_csom.IsIE)
			return this.Processor.output;
		else
		{
			if(!this.outputDocument || !this.outputDocument.firstChild)
				return null;
			var output = this.outputDocument.firstChild.innerHTML;
			if(!output)
				output="<tbody></tbody>";
			return output;
		}
	});
	
	XMLDocument.prototype.selectNodes=
	Element.prototype.selectNodes=function(sExpr)
	{
		try
		{
			var xpe = new XPathEvaluator();
			var nsResolver = xpe.createNSResolver(this.ownerDocument == null?	this.documentElement: this.ownerDocument.documentElement);
			var result = xpe.evaluate(sExpr, this, nsResolver, 0, null);
			var found = [];
			var res;
			while (res = result.iterateNext())
				found.push(res);
			return found;
		}
		catch(exc){;}
		return null;
	};
	XMLDocument.prototype.selectSingleNode=
	Element.prototype.selectSingleNode=function(sExpr)
	{
		try
		{
			var xpe = new XPathEvaluator();
			var nsResolver = xpe.createNSResolver(this.ownerDocument == null?	this.documentElement: this.ownerDocument.documentElement);
			var result = xpe.evaluate(sExpr, this, nsResolver, 0, null);
			var res = result.iterateNext();
			return res;
		}
		catch(exc){;}
		return null;
	};
	Element.prototype.__defineGetter__("text",function(){return this.textContent;});
	Element.prototype.__defineSetter__("text",function(sText){this.textContent=sText;});
	CDATASection.prototype.__defineGetter__("text",function(){return this.textContent;});
	CDATASection.prototype.__defineSetter__("text",function(sText){this.textContent=sText;});
}

function igtbl_getNodeValue(node)
{
	
	var value=node.getAttribute("uV");
	if(value!==null)
		return unescape(value);
	value=node.getAttribute("iDV");
	if(value!==null)
		return unescape(value);
	value=node.getAttribute("iCT");
	if(value!==null)
		return unescape(value);
	value=node.firstChild.text;
	if(value=="&nbsp;")
		value="";
	value=value.replace(/<br\/>/g,"\r\n");
	return value;
}
function igtbl_setNodeValue(node,value,displayValue)
{
	var valueSet=false;
	if(node.getAttribute("uV")!=null)
	{
		node.setAttribute("uV",igtbl_escape(value));
		valueSet=true;
	}
	if(node.getAttribute("iDV")!=null)
	{
		node.setAttribute("iDV",igtbl_escape(value));
		valueSet=true;
	}
	if(node.getAttribute("iCT")!=null)
	{
		node.setAttribute("iCT",igtbl_escape(value));
		valueSet=true;
	}
	if(displayValue)
		node.firstChild.text=displayValue;
	else if(!valueSet)
		
		
		node.firstChild.text=(value===""?"&nbsp;":value.toString());
}

// ig_WebGrid_cb.js
// Infragistics UltraWebGrid Script 
// Copyright (c) 2001-2007 Infragistics, Inc. All Rights Reserved.
function _igtbl_determineEditorPosition(g,gn,cellObj,cElem,cell)
{
	var r=igtbl_getAbsBounds(cElem, g, true);
	
	
	if(g.IsXHTML && !cellObj.Column.EditorControlID)
	{
		r.x--;
		r.y--;
	}
	
	
	var z = 999, elem = igtbl_getElementById(gn+"_main");
	while(elem)
	{
		if(elem.nodeName == 'BODY' || elem.nodeName == 'FORM')
			break;
		var zi = ig_shared.getStyleValue(null, 'zIndex', elem);
		if(zi && zi.substring) zi = (zi.length > 3 && zi.charCodeAt(0) < 58) ? parseInt(zi) : 0;
		if(zi && zi >= z) z = zi + 1;
		elem = elem.parentNode;
	}
	if(z == 999)
		z = 99999;
	var offsWidth=cElem.offsetWidth;
	var offsHeight=cElem.offsetHeight;
	
	
	
	var w=(g.DivElement.clientWidth&&g.DivElement.clientWidth<offsWidth?g.DivElement.clientWidth:offsWidth)-2,
		h=(g.DivElement.clientHeight&&g.DivElement.clientHeight<offsHeight?g.DivElement.clientHeight:offsHeight)-2,
		ch=cElem.clientHeight;
	if(ch==null||ch==0)
	{
		w--;
		h--;
	}
	if(w<5)
		w=5;
	if(h<5)
		h=18;
	r.w=w;
	r.h=h;
	r.z=z;
	if((z=ig_csom.AgentName.indexOf("netscape/7.0"))>0)
	{
		r.x++;
		r.y++;
	}
	
	
	
	        
	        
	        
	        
	    

	if(cellObj.Row.IsFilterRow)
	{
	    
	    var buttonShift = cell.childNodes[0];
	    buttonShift = buttonShift.offsetLeft + buttonShift.offsetWidth;
	    if (buttonShift < r.w)
	    {
	        r.w -= buttonShift;
	        r.x += buttonShift;
	    }
	}	
	return r;
}

function igtbl_editCell(evnt,gn,cell,key)
{
	var g=igtbl_getGridById(gn);
	if(g==null || !g.isLoaded())
		return;
	g.event=evnt;
	if(g._editorCurrent!=null)
	{
		
		if(g._editorCurrent.getAttribute("currentCell") == cell.id) return;
		igtbl_hideEdit(null,null,g);
	}
	var cellObj=igtbl_getCellById(cell.id);
	var cElem=cellObj.getElement();
	if(cellObj==null)
		return;
	
	if((g._exitEditCancel && !g._returnToEditModeFromScroll) || !cellObj.isEditable())
	{
		return;
	}
	
	if(cellObj.Row.Band.getCellClickAction()==1 || cellObj.Row.Band.getCellClickAction()==3)
	{
		if(cellObj!=g.oActiveCell)
			g.setActiveCell(cellObj);
	}
	else if(cellObj.Row.Band.getCellClickAction()==2)
	{
		if(cellObj.Row!=g.oActiveRow)
			g.setActiveRow(cellObj.Row);
	}
	var col=cellObj.Column;
	if(col.ColumnType==3)
	{
	
	
		
		var chBx=cell.firstChild;
		if(chBx.tagName!="INPUT")
			chBx=chBx.firstChild;
		if(chBx.tagName=="INPUT")
			try
			{
				
				if(!chBx.getAttribute("gn"))
				{
					ig_csom.addEventListener(chBx,"keydown",igtbl_inputEvt);
					chBx.setAttribute("gn",gn);
					chBx.setAttribute("cellId",cell.id);
				}
			}
			catch(exception){;}
		return;
	}
	
	if(cellObj.hasButtonEditor())
		return;
	if(igtbl_fireEvent(gn,g.Events.BeforeEnterEditMode,"(\""+gn+"\",\""+cell.id+"\")")==true)
		return;
	cellObj.scrollToView();
	var r=_igtbl_determineEditorPosition(g,gn,cellObj,cElem,cell);
	var css=null,e=cell,i=0;
	while(++i<10&&(css==null||css==""))
		if((e=e.parentNode)!=null)
			css=e.getAttribute("bandNo");
	if(css!=null&&css!="")
		css=igtbl_getEditCellClass(gn,css);
	if(!css)css="";
	
	var v=(key!=null&&key>0&&key!=113)?"":cellObj.getValue();
	if(v==null)
		if((v=cell.getAttribute(igtbl_sUnmaskedValue))==null)
			v="";
	var href=-1,nn=cElem.childNodes;
	for(z=0;z<nn.length;z++)
		if(nn[z].tagName=="A")
			href=z;
	g._editorCustom=null;
	var elem=igtbl_editCust(g,(key!=null&&key>0&&key!=113)?"":v,r,col,cElem);
	
	v=cellObj.Node?igtbl_getNodeValue(cellObj.Node):(cell.getAttribute(igtbl_sigDataValue)?unescape(cell.getAttribute(igtbl_sigDataValue)):v.toString());
	if(!elem)
		elem=igtbl_editList(g,v,r,col,cElem);
	if(!elem)
	{
		elem=igtbl_editDef(g,v,r,col,css,cell,cElem);
		if(elem)
		{
			
			var keyupHandled=elem.getAttribute("_igkeyupevent");
			if(cellObj.Row.IsFilterRow)
			{
				if(!keyupHandled)
				{
					ig_csom.addEventListener(elem,"keyup",igtbl_stringEditorKeyPress);
					elem.setAttribute("_igkeyupevent","true");
				}	
			}
			else
			{
				if(keyupHandled)
				{
					ig_csom.removeEventListener(elem,"keyup",igtbl_stringEditorKeyPress);
					elem.removeAttribute("_igkeyupevent");
				}
			}
		}
		else
		{
			return;
		}    
    }

	cellObj._oldValue=v;
	if(href>=0)
		elem.setAttribute("hasHref",href);
	g._editorCurrent=elem;
	elem.setAttribute("gn",gn);
	elem.setAttribute("currentCell",cell.id);
	igtbl_fireEvent(gn,g.Events.AfterEnterEditMode,"(\""+gn+"\",\""+cell.id+"\");");
	
	if(typeof(Page_Validators)!="object" || cellObj.Row.IsFilterRow)
		return;
	var i,j,id=null,colV=col.Validators,pgV=Page_Validators;
	if((e=col.getEditorControl())!=null)
		if((id=e.ID)==null)
			if((id=e.id)==null)
				id=e.Id;
	if(id==null)
		id=elem.id;
	else
		for(i=0;i<pgV.length;i++)
		{
			if(pgV[i]&&pgV[i].controltovalidate==id)
			{
				if(!colV)colV=col.Validators=new Array();
				for(j=colV.length-1;j>=0;j--)if(colV[j]==pgV[i].id)break;
				if(j<0)colV[colV.length]=pgV[i].id;
			}
		}
	for(i=0;i<colV.length;i++)
	{
		if((v=igtbl_getElementById(colV[i]))==null)
			continue;
		
		if(v.parentNode!=document.body)
			document.body.insertBefore(v,document.body.firstChild);
		s=v.style;
		s.zIndex=99999;
		s.position="absolute";
		v.style.left=r.x+"px";
		v.style.top=(r.y+r.h+2)+"px";
		try
		{
			v.unselectable="on";
		}catch(ex){;}
		if(e!=null)
			continue;
		
		if(ig_csom.IsNetscape6)
			v.controltovalidate=id;
		else
			v.setAttribute("controltovalidate",id);
		ValidatorHookupControlID(id,v);
	}
	for(i=0;i<pgV.length;i++)
		if(pgV[i].controltovalidate==id)
			for(j=0;j<colV.length;j++)
				if(pgV[i].id==colV[j])
					pgV[i].enabled=pgV[i].isvalid=true;
}

function igtbl_editCust(g,v,r,col,cElem)
{
	var id=col.EditorControlID,editor=col.getEditorControl();
	if(editor==null && id!=null)
	{
		if((editor=igtbl_getElementById(id))!=null)
			editor=editor.Object;
	}
	if(editor==null)
		return null;
	col.editorControl=editor;
	var elem=editor.Element;
	
	if(!editor._old_parent)
		editor._old_parent=elem.parentNode;
	g._ensureValidParent(editor);
	editor.setValue(v,false);
	elem.style.zIndex=r.z;
	if (elem.tagName=="INPUT")
	{
		
		if(g.IsXHTML)
		{
			
			if (ig_csom.IsIE)
			{			
			    r.x-=2;
			    r.y-=2;
			}    
			
			var cStyle,eStyle;
			var wd=0,hd=0;
			if(ig_csom.IsIE)
			{
				cStyle=cElem.currentStyle;
				eStyle=elem.currentStyle;
				wd=igtbl_parseInt(cStyle.borderLeftWidth)+igtbl_parseInt(cStyle.borderRightWidth)-igtbl_parseInt(eStyle.borderLeftWidth)-igtbl_parseInt(eStyle.borderRightWidth);
				hd=igtbl_parseInt(cStyle.borderTopWidth)+igtbl_parseInt(cStyle.borderBottomWidth)-igtbl_parseInt(eStyle.borderTopWidth)-igtbl_parseInt(eStyle.borderBottomWidth);
			}
			else
			{
				cStyle=cElem.style;
				eStyle=elem.style;
				wd=igtbl_parseInt(cStyle.borderLeftWidth)+igtbl_parseInt(cStyle.borderRightWidth)-igtbl_parseInt(eStyle.borderLeftWidth)-igtbl_parseInt(eStyle.borderRightWidth);
				hd=igtbl_parseInt(cStyle.borderTopWidth)+igtbl_parseInt(cStyle.borderBottomWidth)-igtbl_parseInt(eStyle.borderTopWidth)-igtbl_parseInt(eStyle.borderBottomWidth);
			}
			
			
			if(r.w<0)r.w=1;
			if(r.h<0)r.h=1;
		}
		else
		{
			
			var frameBorderZero = (window.frameElement && window.frameElement.frameBorder == "0");
			if(ig_csom.IsIE && frameBorderZero) 
			{
				r.x+=2;
				r.y+=2;
			} 
			
			else if(ig_csom.IsFireFox)
			{
				r.x+=1;
				r.y+=1;
			}
		}
		
	}
	else if(ig_csom.IsIE && g.IsXHTML)
	{
		r.x--;
		r.y--;
	}
	
	
	if(ig_csom.IsFireFox && g.IsXHTML)
	{
		r.y -= g.DivElement.scrollTop;
		r.x -= g.DivElement.scrollLeft;
	}
	
	editor.setVisible(true,r.x,r.y,r.w,r.h);
	editor.webGrid=g;
	editor.addEventListener("blur",igtbl_hideEdit,g);
	editor.addEventListener("keydown",igtbl_hideEdit,g);
	elem.setAttribute("editType",4);
	g._editorCustom=editor;
	return elem;
}

function igtbl_editDef(g,v,r,col,css,cell,cElem)
{
	var elem=g._editorInput,nn=cElem.childNodes;
	var area=(col.CellMultiline==1)?1:0;
	if(area==1)
		elem=g._editorArea;
	var w=cElem.offsetWidth,h=cElem.offsetHeight,ie=ig_csom.IsIE;
	var s,i=ie?0:nn.length;
	while(i-->0)
	{	
	    var curElem=nn[i];
        if (!cell.Object.Row.IsFilterRow || curElem.tagName!="BUTTON")
        {
		    if(curElem.style)
			    curElem.style.display="none";
	        else
	        {
		        if(g._oldElems==null)
			        g._oldElems=new Array();
		        g._oldElems[g._oldElems.length]=curElem;
		        cElem.removeChild(curElem);
	        }
        }
	}
	var justCreated=false;
	if(!elem)
	{
		if(area==1) {
			g._editorArea=elem=document.createElement("TEXTAREA");
			
			ig_csom.addEventListener(g._editorArea,"keypress",_igtbl_textareaEditorKeyPress);
			ig_csom.addEventListener(g._editorArea,"paste",_igtbl_textareaEditorPaste);
			ig_csom.addEventListener(g._editorArea,"input",_igtbl_textareaEditorInput);
		}
		else
		{
			g._editorInput=elem=document.createElement("INPUT");
			elem.type="text";
		}
		if(ie)
			document.body.insertBefore(elem,document.body.firstChild);
		else
			cElem.appendChild(elem);
		ig_csom.addEventListener(elem,"keydown",igtbl_editEvt);
		ig_csom.addEventListener(elem,"keyup",igtbl_editEvt);
		ig_csom.addEventListener(elem,"blur",igtbl_editEvt);
		elem.setAttribute("editType",area);
		i=g.Id+((area==1)?"_ta":"_tb");
		elem.id=i;
		justCreated=true;
	}
	else if(!ie)
		cElem.appendChild(elem);
	elem.value="";
	if(css.length>0)
		elem.className=css;
	s=elem.style;
	var eStyle=igtbl_getComputedStyle(elem);
	if(eStyle==null)eStyle=elem.style;
	s.zIndex=r.z;
	
	if(ig_csom.IsIE && g.IsXHTML)
	{
		r.x--;
		r.y--;
		var edLeftWidth=igtbl_parseInt(eStyle.borderLeftWidth);
		var edRightWidth=igtbl_parseInt(eStyle.borderRightWidth);
		var edTopWidth=igtbl_parseInt(eStyle.borderTopWidth);
		var edBottomWidth=igtbl_parseInt(eStyle.borderBottomWidth);
		if(edLeftWidth || edRightWidth)
		{
			var wd=igtbl_parseInt(cElem.currentStyle.borderLeftWidth)+igtbl_parseInt(cElem.currentStyle.borderRightWidth)-edLeftWidth-edRightWidth;
			if(wd)
				r.w+=wd;
		}
		else
		{
			var wd=igtbl_parseInt(cElem.currentStyle.borderLeftWidth);
			if(wd)
				r.x+=wd;
		}
		if(edTopWidth || edBottomWidth)
		{
			var hd=igtbl_parseInt(cElem.currentStyle.borderTopWidth)+igtbl_parseInt(cElem.currentStyle.borderBottomWidth)-edTopWidth-edBottomWidth;
			if(hd)
				r.h+=hd;
		}
		else
		{
			var hd=igtbl_parseInt(cElem.currentStyle.borderTopWidth);
			if(hd)
				r.y+=hd;
		}
	}
	if(g.IsXHTML)
	{
		var wd=0;
		var hd=0;
		var pd=eStyle.paddingLeft;
		if(pd && pd.length>2 && pd.substr(pd.length-2,2)=="px")
			wd-=igtbl_parseInt(pd);
		pd=eStyle.paddingRight;
		if(pd && pd.length>2 && pd.substr(pd.length-2,2)=="px")
			wd-=igtbl_parseInt(pd);
		pd=eStyle.paddingTop;
		if(pd && pd.length>2 && pd.substr(pd.length-2,2)=="px")
			hd-=igtbl_parseInt(pd);
		pd=eStyle.paddingBottom;
		if(pd && pd.length>2 && pd.substr(pd.length-2,2)=="px")
			hd-=igtbl_parseInt(pd);
		if(wd)
			r.w+=wd;
		if(hd)
			r.h+=hd;
		if(r.w<0)r.w=1;
		if(r.h<0)r.h=1;
	}
	if(ie)
	{
		
		s.position="absolute";
		s.left=r.x+"px";
		s.top=r.y+"px";
		s.height=r.h+"px";
	}
	else
	{
		
		if(r.w>10)
		{
			if(g.IsXHTML)
				r.w-=igtbl_parseInt(igtbl_dom.css.getComputedStyle(cElem,"paddingLeft"))+igtbl_parseInt(igtbl_dom.css.getComputedStyle(cElem,"paddingRight"))+3;
			else
				r.w-=6;
		}
		s.height="";
	}
	s.width=r.w+"px";
	if(area==0)
	{
		i=col.FieldLength;
		elem.maxLength=(i!=null&&i>0)?i:2147483647;
	}
	if(area==1)
		s.overflow="auto";
	s.borderWidth=ig_csom.isEmpty(elem.className)?"0":"";
	s.display="";
	if(!ie)
	{
		cell.style.height=h+"px";
		for(i=1;i<8;i++)
			if(cElem.offsetWidth>w)
				cell.style.width=(w-i)+"px";
		s.height=(r.h-1)+"px";
		if(cElem.offsetHeight>h)
			s.height=(r.h-2)+"px";
	}
	elem.value=v;
	try
	{
		elem.select();
		elem.focus();
	}catch(e){;}
	return elem;
}

function _igtbl_textareaEditorKeyPress(evnt) {
	
    var textbox = igtbl_srcElement(evnt);
    var grid = igtbl_getGridById(textbox.id.substring(0, textbox.id.length - 3));
    
    
    var column = igtbl_getCellById(textbox.getAttribute("currentCell")).Column; 
    
    if(column.FieldLength > 0) 
    {
        
        if(textbox.selectionStart != undefined) 
        {
           textbox.oldValue = textbox.value;
           textbox.oldSelectionStart = textbox.selectionStart;
           textbox.oldSelectionEnd = textbox.selectionEnd;
        }
        
        
        if(textbox.value.length >= column.FieldLength && !_igtbl_textareaHasSelection(textbox))
        {
            if(evnt && evnt.preventDefault) 
            {
                if(evnt.charCode != 0) 
                {
                    evnt.preventDefault();
                }
            }
            return false;
        }
    }
}

function _igtbl_textareaEditorPaste(evnt) {
	
	var textbox = igtbl_srcElement(evnt);
	var grid = igtbl_getGridById(textbox.id.substring(0, textbox.id.length - 3));
	
    
    var column = igtbl_getCellById(textbox.getAttribute("currentCell")).Column; 
	
	if(column.FieldLength > 0) 
	{
		var text = window.clipboardData.getData("Text");
		var range = document.selection.createRange(); 
		var currentLength = textbox.value.length - range.text.length;

		if((currentLength + text.length)  > column.FieldLength) 
		{
			if((column.FieldLength - currentLength) > 0) 
			{
				range.text = text.substring(0, column.FieldLength - currentLength);
			}
			evnt.returnValue = false;
		}
	}
}

function _igtbl_textareaEditorInput(evnt) {
	
	var textbox = igtbl_srcElement(evnt);
	var grid = igtbl_getGridById(textbox.id.substring(0, textbox.id.length - 3));
	
    
    var column = igtbl_getCellById(textbox.getAttribute("currentCell")).Column; 
	
	if(column.FieldLength > 0) 
	{
		if(textbox.value.length > column.FieldLength && textbox.value != textbox.oldValue
			 && textbox.value.length > textbox.oldValue.length) 
		{
			var beginning = textbox.oldValue.substring(0, textbox.oldSelectionStart);
			var end = textbox.oldValue.substring(textbox.oldSelectionEnd);
			var middle = textbox.value.substring(beginning.length, textbox.value.length - end.length);
		    
			
			var newLength = column.FieldLength - (beginning.length + end.length);
			middle = middle.substring(0, newLength);
			textbox.value = beginning + middle + end;
		    
			
			textbox.selectionBegin = beginning.length + middle.length;
			textbox.selectionEnd = textbox.selectionBegin;
		}

		textbox.removeAttributeNode("oldValue");
		textbox.removeAttributeNode("selectionStart");
		textbox.removeAttributeNode("SelectionEnd");
	}
}

function _igtbl_textareaHasSelection(textbox) {
	if(textbox.selectionStart != undefined) 
	{
		if(textbox.selectionEnd > textbox.selectionStart) 
		{
			return true;
		}
	} 
	else if(document.selection) {
		var selection = document.selection.createRange();
		if(selection && selection.text.length > 0) 
		{
			return true;
		}
	}
}

function igtbl_editEvt(evt,gn,id)
{
	if(evt==null)
		if((evt=window.event)==null)
			return;
	var src=evt.srcElement;
	if(src==null)
		if((src=evt.target)==null)
			return;
	if(!gn||!gn.substring)
		gn=src.getAttribute("gn");
	var g=igtbl_getGridById(gn);
	if(g==null)
		return;
	g.event=evt;
	var b=g._editorButton;
	switch(evt.type)
	{
		case "focus":return;
		case "blur":
			if(!src.getAttribute("noOnBlur"))
			{
				igtbl_hideEdit(null,evt,g);
			}
			else
				ig_cancelEvent(evt);
			return;
		case "keydown":
			src.setAttribute("noOnBlur",true);
			window.setTimeout("igtbl_cancelNoOnBlurTB('"+gn+"','"+src.id+"')",100);
			if(b!=src && igtbl_fireEvent(gn,g.Events.EditKeyDown,"(\""+gn+"\",\""+src.getAttribute("currentCell")+"\","+evt.keyCode+")")==true)
			{
				ig_cancelEvent(evt);
				return;
			}
			g._mouseDown=0;
			var key=evt.keyCode;
			var et=src.getAttribute("editType");
			if(key==9 || key==27 || key==13 && et!=1 && et!=3 || key==113)
			{
			
				src.removeAttribute("noOnBlur");
				if(!igtbl_hideEdit(null,evt,g) && key!=27)
					ig_cancelEvent(evt);
				igtbl_activate(gn);
			}
			if(evt.ctrlKey && key==86 || evt.shiftKey && key==45)
			{
				var cbStr=igtbl_getClipboardData();
				if(cbStr && cbStr.indexOf("\t")>=0)
				{
					if(!g.fireEvent(g.Events.ClipboardError,[g.Id,g.eClipboardError.Failure]))
						ig_cancelEvent(evt);
				}
			}
			return;
		case "keyup":
			igtbl_fireEvent(gn,g.Events.EditKeyUp,"(\""+gn+"\",\""+src.getAttribute("currentCell")+"\","+evt.keyCode+")");
			return;
	}
	if(b && g.ActiveCell && !igtbl_isFocus(gn,b))
		igtbl_showColButton(gn,"hide",true);
}

function igtbl_editList(g,v,r,col,cElem)
{
	var list=col.ValueList;
	if(list==null||list.length<1)return null;
	var s,elem=g._editorList;
	
	
	var h=cElem.offsetHeight;
	if(!ig_csom.IsIE)
	{
	    var i=cElem.childNodes.length;
        while(i-->0)
        {	
            var curElem=cElem.childNodes[i];
            if (!g.getActiveCell().Element.Object.Row.IsFilterRow || curElem.tagName!="BUTTON")          
            {
	            if(curElem.style)
		            curElem.style.display="none";
                else
                {
	                if(g._oldElems==null)
		                g._oldElems=new Array();
	                g._oldElems[g._oldElems.length]=curElem;
	                cElem.removeChild(curElem);
                }
            }
        }
	    
	}
	
	if(elem==null)
	{
		g._editorList=elem=document.createElement("SELECT");
		
		if(!ig_csom.IsIE)
		    cElem.appendChild(elem);
		else
		{
		    document.body.insertBefore(elem,document.body.firstChild);
		    elem.style.position="absolute";
		}
		
		ig_csom.addEventListener(elem,"keydown",igtbl_editEvt);
		ig_csom.addEventListener(elem,"keyup",igtbl_editEvt);
		ig_csom.addEventListener(elem,"blur",igtbl_editEvt);
		ig_csom.addEventListener(elem,"mousedown",igtbl_listMouseDown);
		elem.style.zIndex=r.z;
		elem.setAttribute("editType",3);
		elem.id=g.Id+"_vl";		
		ig_csom.addEventListener(elem,"change",igtbl_dropDownChange);
	}
	
	else if(!ig_csom.IsIE)
	    cElem.appendChild(elem);
	    
	s=elem.style;
	var opt,css=col.ValueListClass;
	if(ig_csom.notEmpty(css))
		elem.className=css;
	else
		elem.style.fontSize=((r.h-=4)<15)?(((r.h<9)?9:r.h)+"px"):"";
	elem.value=v;
	var i=elem.options.length, prompt=col.ValueListPrompt;
	while(i-->0)
		elem.removeChild(elem.options[i]);
	if(ig_csom.notEmpty(prompt))
	{
		elem.appendChild(opt=document.createElement("OPTION"));
		opt.text=opt.value=prompt;
	}
	while(++i<list.length)if(list[i]!=null)
	{
		elem.appendChild(opt=document.createElement("OPTION"));
		opt.value=list[i][0];
		opt.text=list[i][1];
		

		if(v!=null&&(v==list[i][0])){opt.selected=true;v=null;}
	}
	
	s.display="";
	s.visibility="hidden";
	
	if(g.IsXHTML)
	{
		var xd,yd,wd,hd;
		var cStyle,eStyle;
		if(ig_csom.IsIE)
		{
			eStyle=elem.currentStyle;
			cStyle=cElem.currentStyle;
			yd=Math.floor((igtbl_parseInt(cStyle.borderTopWidth)+igtbl_parseInt(cStyle.borderBottomWidth)+igtbl_parseInt(eStyle.borderTopWidth)+igtbl_parseInt(eStyle.borderBottomWidth))/2);
		}
		else
		{
			r.x--;
			r.y--;
			
			
			if(ig_csom.IsFireFox)
			{
				r.y -= g.DivElement.scrollTop;
				r.x -= g.DivElement.scrollLeft;
			}	
			
			eStyle=igtbl_getComputedStyle(elem);
		    cStyle=igtbl_getComputedStyle(cElem);
		    
			
			var pd = igtbl_parseInt(eStyle.paddingLeft);
			if(pd)
			    r.w -= pd;
			pd = igtbl_parseInt(eStyle.paddingRight);
			if(pd)
			    r.w -= pd;
			pd = igtbl_parseInt(eStyle.paddingTop);
			if(pd)
			    r.h -= pd;
			pd = igtbl_parseInt(eStyle.paddingBottom);
			if(pd)
			    r.h -= pd;
			pd = igtbl_parseInt(cStyle.paddingLeft);
			if(pd)
			    r.w -= pd;
			pd = igtbl_parseInt(cStyle.paddingRight);
			if(pd)
			    r.w -= pd;
			pd = igtbl_parseInt(cStyle.paddingTop);
			if(pd)
			    r.h -= pd;
			pd = igtbl_parseInt(cStyle.paddingBottom);
			if(pd)
			    r.h -= pd;			
			r.h += 3;    
			if(cElem.offsetHeight>h)
		        r.h-=2;
			
		}
		xd=igtbl_parseInt(eStyle.borderLeftWidth);
		if(xd)
			r.x-=Math.floor(xd/2);
		if(yd)
			r.y+=yd;
		wd=igtbl_parseInt(cStyle.borderLeftWidth)+igtbl_parseInt(cStyle.borderRightWidth);
		
		if(wd && ig_csom.IsIE)
			r.w+=wd;
		wd=igtbl_parseInt(eStyle.borderLeftWidth);
		
		if(wd && ig_csom.IsIE)
			r.w+=wd; 
		if(hd)
			r.h+=hd;
	}
	if(ig_csom.IsIE)
	{
		s.left="0px";
		s.top="0px";
	}	
	s.left=r.x+"px";
	s.width=r.w+"px";
    
    if(! (g.IsXHTML && ig_csom.IsIE7))
    {
	    s.height=r.h+"px";
	}
	var so=igtbl_getStyleSheet(elem.className);
	if(so && so.verticalAlign=="top")
		s.top=r.y+"px";
	else if(so && so.verticalAlign=="bottom")
		s.top=r.y+r.h-elem.offsetHeight+"px";
	else
		s.top=r.y+r.h/2-elem.offsetHeight/2+"px";
	
	s.visibility="visible";
	elem.focus();
	return elem;
}


function igtbl_listMouseDown(evnt)
{
	if(!evnt && event) evnt=event;
	if(!evnt) return;
	var list=igtbl_srcElement(evnt);
	list.setAttribute("noOnBlur","true");
	window.setTimeout("igtbl_clearNoOnBlurElem('"+list.id+"')",100);
}

function igtbl_activate(gn)
{
	var x=0;
	var g=igtbl_getGridById(gn);
	if(g==null) 
		return;
	
	if(g._editorCurrent!=null)
	{
		try
		{
			if (g._editorCurrent.select)
			{
				g._editorCurrent.select();
			}
			g._editorCurrent.focus();
			return;
		}
		catch(e){;}
	}
	var b=igtbl_initButton(g),elem=g._focusElem;
	
	if (ig_csom.IsFireFox && elem)
	{     
	    
	    var elem1=document.createElement("INPUT");
	    document.body.insertBefore(elem1,document.body.firstChild);
	    document.body.removeChild(elem1); 		
	}
	if(elem==null)
		try
		{	
			elem=document.createElement("INPUT");
			document.body.insertBefore(elem,document.body.firstChild);
			elem.setAttribute("gn",gn);
			ig_csom.addEventListener(elem,"keydown",igtbl_inputEvt);
			ig_csom.addEventListener(elem,"keyup",igtbl_inputEvt);
			ig_csom.addEventListener(elem,"focus",igtbl_inputEvt);
			ig_csom.addEventListener(elem,"blur",igtbl_inputEvt);
			
			ig_csom.addEventListener(document.body,"mouseup",igtbl_globalMouseUp);
			g._focusElem=elem;
			var s=elem.style;
			s.zIndex=-1;
			s.position="absolute";
			s.fontSize="2px";
			s.padding=s.width=s.height=s.border="0px";
			if(elem.offsetWidth>2)
				s.width="1px";
			if(elem.offsetHeight>2)
				s.height="1px";
			elem.tabIndex=g.DivElement.getAttribute("tabIndexPage");
		}
		catch(ex){;}
	if(elem==null)
		return;
	g._lastKey=0;
	if(!igtbl_isOk(g))
		return;
	igtbl_showColButton(gn,"hide",true);
	var cell=g.oActiveCell;
	if(cell!=null)
		cell=cell.Element;
	if(cell==null)
		cell=g.Element;
	var r=igtbl_getAbsBounds(cell, g, true);
	elem.style.left=(r.x-3)+"px";
	elem.style.top=(r.y-3)+"px";
	if(g._focus0)
		return;
	if(g._mouseDown==1)
	{
		g._mouseDown=0;
		try
		{
			window.setTimeout("try{igtbl_isFocus('"+gn+"');}catch(ex){;}",0);
		}catch(ex){;}
	}
	else
		igtbl_isFocus(gn);
}

function _igtbl_processUpdates(g,se)
{
    var ar=g.getActiveRow();
	if(ar && !igtbl_inEditMode(g.Id) && !igtbl_isAChildOfB(se,g.MainGrid))
	{
		var retmpl=igtbl_getElementById(ar.Band.RowTemplate);
		if(!retmpl || !igtbl_isAChildOfB(se,retmpl))
		{
			
			var combo;
			if(typeof(igcmbo_getComboByElement)!="undefined") combo = igcmbo_getComboByElement(se);
			if(!combo || !igtbl_isAChildOfB(combo.Element,retmpl))
            {
				if(ar.IsAddNewRow)
					ar.commit();
				else if(ar.processUpdateRow)
					ar.processUpdateRow();
			}
		}
	}
}
function igtbl_globalMouseUp(evt,gn)
{
	var g=igtbl_getGridById(gn?gn:igtbl_lastActiveGrid);
	
	if(!g || typeof(document) == "undefined" || (ig_csom.IsIE && typeof(document.body) == "undefined")) return;
	var se=igtbl_srcElement(evt);
    _igtbl_processUpdates(g,se);
	
	var resizeDiv=document.body.igtbl_resizeDiv;
	if(resizeDiv)resizeDiv.style.display="none";
	g.Element.removeAttribute("mouseDown");
}

function igtbl_isOk(g)
{
	var vis=true,e=g.Element;
	while((e=e.parentNode)!=null)
		
		if(e.tagName!=(igtbl_isXHTML?"HTML":"BODY")&&e.style!=null&&e.style.display=="none")
			vis=false;
	if((e=g._focusElem)!=null)if((e.style.display=="none")==vis)e.style.display=vis?"":"none";
	return vis;
}
function igtbl_isFocus(gn,b)
{
	var g=igtbl_getGridById(gn);
	if(g==null)
		return false;
	if(b)
		return g.oActiveCell!=null&&g.oActiveCell.Element.id==b.getAttribute("srcElement");
	
	var ae=g.oActiveCell;
	if(!ae)
		ae=g.oActiveRow;
	var nn=null;
	var activeElement=null;
	try{
		activeElement=document.activeElement;
		
		if(!activeElement && igtbl_browserWorkarounds.activeElement)
		    activeElement = igtbl_browserWorkarounds.activeElement;
		if(!activeElement && g.event)
			activeElement = igtbl_srcElement(g.event);
		if (activeElement)
		    nn=activeElement.nodeName;
	}catch(e){;}
	
	
	
	var inputSelectButton=(nn=="INPUT" || nn=="TEXTAREA" || nn=="SELECT" || nn=="BUTTON");
	var internalObj=(activeElement!=null && inputSelectButton 
	 && (!ae || !ae.Column || (ae.Column.TemplatedColumn&2))
	 && ( ig_isAChildOfB(activeElement,g.Element) || ig_isAChildOfB(activeElement,g.MainGrid) )
	);
	
	var insideEl=(ae && activeElement && ig_isAChildOfB(activeElement,ae.Element)) 
				&& inputSelectButton 
				 && (!ae.Column || (ae.Column.TemplatedColumn&2))
				|| inputSelectButton && activeElement && activeElement.parentNode && 
				
				     ig_isAChildOfB(activeElement,igtbl_getElementById(g.UniqueID+"_pager"));
				    
	
	var templOpen=ae && ae.Band.RowTemplate && igtbl_getElementById(ae.Band.RowTemplate).style.display=="";
	
	
	
	
	
	if(g._editorCurrent==null && !insideEl && !templOpen && !internalObj && !(ig_csom.IsFireFox && ae && ae.Column && (ae.Column.TemplatedColumn&2) && ae.Element.childNodes.length>0))
		try
		{
			g._focusElem.focus();
		}
		catch(ex){;}
	return false;
}
function igtbl_initButton(g)
{
	var b=g._editorButton;
	if(!b)
		if((g._editorButton=b=igtbl_getElementById(g.Id+"_bt"))!=null)
		{
		    
		    if (b.parentNode!=document.body )
		    {
		        var parentNode = b.parentNode;
		        parentNode.removeChild(b);
		        document.body.insertBefore(b,document.body.firstChild);
		    }
		    
			b.unselectable="on";
			b.tabIndex=-1;
			b.hideFocus=true;
			b.style.zIndex=99999;
			b.setAttribute("gn",g.Id);
			g._mouseWait=0;
			ig_csom.addEventListener(b,"mouseout",igtbl_editEvt);
		}
	return b;
}
function igtbl_inputEvt(evt,gn)
{
	if(gn!=null)
	{
		var g=igtbl_getGridById(gn);
		if(g==null)
			return;
		if(evt==null)
		{
			g._focus=g._focus0;
			return;
		}
		if(!g._focus)
			return;
		var e=new Object();
		e.shiftKey=evt==1;
		e.ctrlKey=evt==2;
		e.keyCode=9;
		if(g.getActiveCell()==null && g.getActiveRow()==null)
		{
			if(g.Rows!=null)
				if((e=g.Rows.getRow(0))!=null)
					if((e=e.getCell(0))!=null)
						e.activate();
			return;
		}
		igtbl_onKeyDown(e,gn,true);
		return;
	}
	if(evt==null)
		if((evt=window.event)==null)
			return;
	var src=evt.srcElement;
	if(src==null)
		if((src=evt.target)==null)
			return;
	if(typeof(src.getAttribute)=="undefined")
		return;
	var g=igtbl_getGridById(gn=src.getAttribute("gn")),key=evt.keyCode;
	if(g==null)
		return;
	switch(evt.type)
	{
		case "focus":
			if(!igtbl_isOk(g))
			{
				ig_cancelEvent(evt);
				return;
			}
			g._focus0=g._focus=true;
			break;
		case "blur":
			g._focus0=false;
			try
			{
				window.setTimeout("try{igtbl_inputEvt(null,'"+gn+"');}catch(ex){;}",0);
			}
			catch(ex)
			{
				g._focus=false;
			}
			
			break;
		case "keydown":
			var click=false,ac=g.oActiveCell,b=g._editorButton;
			if(ac&&(key==32||key==13))
				click=b?igtbl_isFocus(gn,b):(ac.Column.ColumnType==7&&ac.Column.CellButtonDisplay==1);
			g._mouseDown=0;
			if(click)
				igtbl_colButtonClick(evt,gn,b,ac.Element);
			if(key==9)
				try
				{
					
					if(src.tagName=="INPUT" && src.type=="checkbox")
					{
						igtbl_processTab(gn,evt,key,igtbl_getCellById(src.getAttribute("cellId")));
						ig_cancelEvent(evt);
						break;
					}
					src.removeAttribute("noOnBlur");
					if(g.oActiveCell && g.oActiveCell.getNextTabCell(evt.shiftKey,true) || g.oActiveRow && g.oActiveRow.getNextTabRow(evt.shiftKey))
					{
						ig_cancelEvent(evt);
						window.setTimeout("try{igtbl_inputEvt("+(evt.shiftKey?"1":(evt.ctrlKey?"2":"0"))+",'"+gn+"');}catch(ex){;}",10);
						break;
					}
				}
				catch(ex){;}
			else if(key==13||key==27)
			{
				src.removeAttribute("noOnBlur");
				if(igtbl_inEditMode(g.Id) && !igtbl_hideEdit(null,evt,g))
				{
					if(key!=27)
						ig_cancelEvent(evt);
					return;
				}
			}
			
			if(typeof(igtbl_onKeyDown)!="undefined")
				igtbl_onKeyDown(evt,gn,true);
			break;
		case "keyup":
			if(typeof(igtbl_onKeyUp)!="undefined")
				igtbl_onKeyUp(evt,gn);
			break;
	}
}

function igtbl_hideEdit()
{
	var oEvent=null,g=null,i=arguments.length,gn=arguments[0];
	if(i==1 && (gn!=null&&gn.substring))
		g=igtbl_getGridById(gn);
	if(i>2)
	{
		oEvent=arguments[i-2];
		g=arguments[i-1];
	}
	if(g==null)
		return false;
	var evt=oEvent,elem=g._editorCurrent,key=g._lastKey;
	if(i==1)
	{
		
		if (key==114) return false;
		if(key==9)
			try
			{
				window.setTimeout("try{igtbl_activate('"+gn+"');}catch(ex){;}",10);
				return false;
			}
			catch(ex){;}
		if(key==9||key==13||key==27)
		{
			igtbl_activate(gn);
			return false;
		}
		evt=null;
	}
	if(elem==null || elem.getAttribute("noOnBlur")) 
		return false;
	var oEditor=(i==1||gn==null)?g._editorCustom:gn;
	gn=g.Id;
	if(oEditor!=null&&evt!=null)
		evt=evt.event;
	key=-3;
	if(evt!=null && evt.type=="keydown")
		g._lastKey=key=evt.keyCode;
	if(evt!=null)
		if((key==13 && (evt.shiftKey || evt.ctrlKey)) || (key!=-3 && key!=9 && key!=13 && key!=27 && key!=113))
			return false;
	var cell=igtbl_getElementById(elem.getAttribute("currentCell"));
	if(cell==null)
		return false;
	var cellObj=igtbl_getCellById(cell.id);
	if(cellObj==null)
		return false;
	var type=elem.getAttribute("editType"),v=(oEditor!=null)?oEditor.getValue():elem.value;
	
	var j,colV,pgV=null,valid=(typeof(Page_Validators)!="object"||cellObj.Row.IsFilterRow);
	if(!valid)
	{
		valid=true;colV=cellObj.Column.Validators;pgV=Page_Validators;
		for(j=0;j<colV.length;j++)for(i=0;i<pgV.length;i++)if(pgV[i].id==colV[j])
		{
			ValidatorValidate(pgV[i]);
			if(!pgV[i].isvalid)valid=false;
		}
		if(!valid)
		{
			var de=g.getDivElement();
			de.setAttribute("noOnScroll","true");
			de.setAttribute("oldSL",de.scrollLeft.toString());
			de.setAttribute("oldST",de.scrollTop.toString());
		}
		else
			igtbl_cancelNoOnScroll(gn);
	}
		
	

	if (!valid && typeof(Page_Validators)!="undefined")
	{
		ValidatorUpdateIsValid();
			
	}

	
	elem.setAttribute("noOnBlur",true);
	if(!valid || g.fireEvent(g.Events.BeforeExitEditMode,[gn,cell.id,v])==true)
	{
		
		window.setTimeout("igtbl_clearNoOnBlurElem('"+elem.id+"')",100);
		if(!g._exitEditCancel&&!g._insideSetActive)
		{
			g._insideSetActive=true;
			igtbl_setActiveCell(gn,cell);
			g._insideSetActive=false;
		}
		g._exitEditCancel=true;
		return false;
	}
	elem.removeAttribute("noOnBlur");
	if(pgV!=null)for(i=0;i<pgV.length;i++)for(j=0;j<colV.length;j++)
		if(pgV[i].id==colV[j]&&pgV[i].enabled)
			ValidatorEnable(pgV[i],false);
	elem.removeAttribute("currentCell");
	g._editorCustom=g._editorCurrent=null;
	var equalsPrompt=false;
	if(oEditor!=null)
	{
		oEditor.setVisible(false);
		v=oEditor.getValue();
		oEditor.removeEventListener("blur",igtbl_hideEdit);
		oEditor.removeEventListener("keydown",igtbl_hideEdit);
		if(key==27)
			window.setTimeout("try{igtbl_activate('"+gn+"');}catch(ex){;}",1);
	}
	else
	{
		elem.style.display="none";
		
		if(type==0||type==1 || type==3)
		{
			if(elem.style.position!="absolute")
			{
				var p=elem.parentNode;
				p.removeChild(elem);
				var i,nn=p.childNodes;
				if(nn!=null)for(i=0;i<nn.length;i++)
					if(nn[i].style!=null)nn[i].style.display="";
				i=((nn=g._oldElems)==null)?0:nn.length;
				while(i-->0)cell.appendChild(nn[i]);
				cell.style.width=cell.style.height="";
			}
		
		    if(type==3)
		    {
			    
			    if(!(cellObj.Column.AllowNull && cellObj.Column.ValueListPrompt==cellObj.Column.getNullText() && cellObj.Column.ValueListPrompt==elem.options[elem.selectedIndex].value ||
					    elem.options[elem.selectedIndex].value!=cellObj.Column.ValueListPrompt))
				    equalsPrompt=true;
		    }
		}
	}
	g._oldElems=null;
	g._exitEditCancel=false;
	if(key!=27 && cellObj._oldValue!==v && !equalsPrompt)
		cellObj.setValue(v);
	igtbl_fireEvent(gn,g.Events.AfterExitEditMode,"(\""+gn+"\",\""+cell.id+"\");");
	if(g.NeedPostBack)
	{
		igtbl_doPostBack(gn);
		return true;
	}
	if(key==9||key==13)
		igtbl_processTab(gn,evt,key,cellObj);
	return true;
}

function igtbl_processTab(gn,evt,key,cellObj)
{
	var g=igtbl_getGridById(gn);
	var start=null;
	if(typeof igtbl_ActivateNextCell=="function")
	{
		var oldAc=g.oActiveCell;
		if(key==9 && evt.shiftKey)
			start=igtbl_ActivatePrevCell(gn);
		else
			start=igtbl_ActivateNextCell(gn);
		if(!start && cellObj.Row.Band.getCellClickAction()==2)
		{
			start=cellObj.getNextTabCell(evt.shiftKey);
		}
		else if(!start)
		{
			
			//igtbl_blurTimeout(gn);
			
			if (oldAc)
			{
				if(oldAc.Row.IsAddNewRow)
				{
					
					oldAc.Row.commit();
	        	    
					var nac=oldAc.Row.getCell(0);
					while(nac && !nac.Column.getVisible())
						nac=oldAc.Row.getCell(nac.Column.Index+1);
					if(nac)
					{
						nac.activate();
						nac.scrollToView();
					}
				}
				else
				{
					
					if(oldAc.Row.processUpdateRow)
						oldAc.Row.processUpdateRow()
	                
					if(key==9 && evt.shiftKey)
						start=igtbl_ActivatePrevCell(gn);
					else
						start=igtbl_ActivateNextCell(gn);
				}
			}			
		}
		else if(oldAc && oldAc.Row!=g.oActiveCell.Row && oldAc.Row.IsAddNewRow && (oldAc.Row.Band.Index>0 && oldAc.Row.Band.AddNewRowView==2 || oldAc.Row.Band.AddNewRowView==1))
		{
			var nac=oldAc.Row.getCell(0);
			while(nac && !nac.Column.getVisible())
				nac=oldAc.Row.getCell(nac.Column.Index+1);
			if(nac)
			{
				nac.activate();
				nac.scrollToView();
			}
		}
		if(!start)
			delete g._lastKey;
		
		else if(evt!=null)
			ig_cancelEvent(evt);
	}
	if(start && key==9 && igtbl_getCellClickAction(gn,cellObj.Column.Band.Index)==2)
	{
		
		if(g.oActiveRow!=start.Row)
		{
			start.Row.activate();
			if(start.Row.Band.getSelectTypeRow()==2)
				start.Row.setSelected(true);
		}
		start.beginEdit()
	}
	else if(start && key==9 && igtbl_getCellClickAction(gn,cellObj.Column.Band.Index)==1)
		try
		{
			window.setTimeout("try{igtbl_EnterEditMode('"+gn+"');}catch(ex){;}",100);
		}
		catch(ex)
		{
			igtbl_EnterEditMode(gn);
		}
	else
		igtbl_activate(gn);
}


function igtbl_getOffsetX(evnt,e)
{
	if(ig_csom.IsIE)
		return evnt.offsetX;
	
	else if(ig_csom.IsFireFox)
		return (evnt.clientX+window.scrollX)-igtbl_getLeftPos(e);
	else
		return evnt.clientX-igtbl_getLeftPos(e);
}
function igtbl_getOffsetY(evnt,e)
{
	if(ig_csom.IsIE)
		return evnt.offsetY;
	else
		return evnt.clientY-igtbl_getTopPos(e);
}
function igtbl_onResize(gn)
{
	if(typeof(igtbl_getGridById)=="undefined" || !ig_csom.IsIE55Plus)return;
	var gs=igtbl_getGridById(gn);
	if(!gs || !gs.isLoaded())return;
	var div=gs.Element.parentNode;
	if(!div || div.nodeName=="#document-fragment") return;
	var adjHeight=0;
	if(gs._scrElem)
	{
		div=gs._scrElem;
		if(gs.MainGrid&&!gs.MainGrid.style.height)
			adjHeight=div.scrollHeight-div.clientHeight;
	}
	var oldX=div.getAttribute("oldXSize");
	var oldY=div.getAttribute("oldYSize");
	var oldTop=div.getAttribute("oldTop");
	var oldLeft=div.getAttribute("oldLeft");
	var elTop=igtbl_getTopPos(gs.Element);
	var elLeft=igtbl_getLeftPos(gs.Element);
	if(oldX==null)
	{
		div.setAttribute("oldXSize",div.offsetWidth);
		div.setAttribute("oldYSize",div.offsetHeight);
		div.setAttribute("oldTop",elTop);
		div.setAttribute("oldLeft",elLeft);
		
		
		gs.alignStatMargins();
		
		gs.alignDivs(0,true);
		
		if(gs.StatHeader && (gs.UseFixedHeaders
		|| gs.XmlLoadOnDemandType!=0
		&& gs.XmlLoadOnDemandType!=4
		))
			gs.StatHeader.ScrollTo(div.scrollLeft);
		return;
	}
	if(oldX==div.offsetWidth && oldY==div.offsetHeight+adjHeight && oldTop==elTop && oldLeft==elLeft)
		return;
	div.setAttribute("oldXSize",div.offsetWidth);
	div.setAttribute("oldYSize",div.offsetHeight);
	div.setAttribute("oldTop",elTop);
	div.setAttribute("oldLeft",elLeft);
	if(gs.Element.getAttribute("noOnResize"))return;
	igtbl_hideEdit(gn);
	gs.alignStatMargins();
	gs.alignDivs(0,true);
	
	
	if(gs.StatHeader && (gs.UseFixedHeaders
	|| gs.XmlLoadOnDemandType!=0
	&& gs.XmlLoadOnDemandType!=4
	))
		gs.StatHeader.ScrollTo(div.scrollLeft);
	gs.endEditTemplate();
}
function igtbl_isDisabled(elem)
{
	
	if(!elem) return false;
	if(ig_csom.IsIE55Plus)
		return elem.disabled;
	return elem.getAttribute("disabled") && elem.getAttribute("disabled").toString()=="true";
}
function igtbl_setDisabled(elem,b)
{
	if(!elem)
		return;
	if(ig_csom.IsIE55Plus)
		elem.disabled=b;
	else
	{
		elem.setAttribute("disabled",b);
		if(b)
		{
			
			if(typeof(elem.getAttribute("oldColor"))!="string" && elem.style.color!="graytext")
				elem.setAttribute("oldColor",elem.style.color);
			elem.style.color="graytext";
		}
		else
		{
			if(typeof(elem.getAttribute("oldColor"))=="string")
			{
				elem.style.color=elem.getAttribute("oldColor");
				elem.removeAttribute("oldColor");
			}
			else
				elem.style.color="";
		}
	}
}

function igtbl_button(gn,evnt)
{
	if(document.all)
	{
		if(evnt.button==1)return 0;
		else if(evnt.button==4)return 1;
		else if(evnt.button==2)return 2;
		return -1;
	}
	if(evnt.button==0 && gn)
	{
		if(evnt.detail!=0)return 0;
		var gs=igtbl_getGridById(gn);
		if(gs.Element.getAttribute("mouseDown"))return 0;
		else return -1;
	}
	else if(evnt.button==1)return 1;
	else if(evnt.button==2)return 2;
	return -1;
}

function igtbl_srcElement(evt)
{
	var e=evt.srcElement;
	if(!e)e=evt.target;
	while(e&&!e.tagName)e=e.parentNode;
	return e;
}

function igtbl_styleName(sn)
{
	var r=sn.toLowerCase();
	var sa=r.split("-");
	for(var i=1;i<sa.length;i++)
		sa[i]=sa[i].charAt(0).toUpperCase()+sa[i].substr(1);
	r=sa.join("");
	return r;
}

function igtbl_hasClassName(e,cn)
{
	return e.className.indexOf(cn)!=-1;
}

function igtbl_setClassName(e,cn)
{
	var i=e.className.indexOf(cn);
	if(i==-1)
		e.className+=(e.className.length==0?"":" ")+cn;
}

function igtbl_removeClassName(e,cn)
{
	var i=e.className.indexOf(cn);
	if(i>=0)
	{
		var leftPart="";
		var rightPart="";
		if(i>0)
		{
			leftPart=e.className.substr(0,i);
			if(leftPart.substr(leftPart.length-1)==" ")
				leftPart=leftPart.substr(0,leftPart.length-1);
		}
		if(i+cn.length<e.className.length)
			rightPart=e.className.substr(i+cn.length);
		e.className=leftPart+rightPart;
	}
}

function igtbl_changeStyle(gn,se,style)
{
	var appldStyle=se.getAttribute("newClass");
	if(!style)
	{
		if(appldStyle)
			igtbl_removeClassName(se,appldStyle);
		se.removeAttribute("newClass");
		return;
	}
	else
	{
		var styleToApply=style;
		if(styleToApply==appldStyle)
			return;
		if(appldStyle)
			igtbl_changeStyle(gn,se,null);
		igtbl_setClassName(se,styleToApply);
		se.setAttribute("newClass",styleToApply);
	}
}
function igtbl_initEvent(se){this.srcElement=this.target=se;}
function igtbl_adjustLeft(e){return document.all?igtbl_getLeftPos(e):0;}
function igtbl_adjustTop(e){return document.all?igtbl_getTopPos(e):0;}
function igtbl_clientWidth(e)
{
	var cw=e.clientWidth;
	if(!cw)
	{
		cw=e.offsetWidth;
		if(e.scrollWidth)if(e.scrollWidth>cw)cw-=13;
	}
	return (cw>0)?cw:0;
}
function igtbl_clientHeight(e)
{
	var ch=e.clientHeight;
	if(!ch)
	{
		ch=e.offsetHeight;
		if(e.scrollHeight)if(e.scrollHeight>ch)ch-=13;
	}
	return (ch>0)?ch:0;
}

function igtbl_getInnerText(elem)
{
	if(!elem)return "";
	
	if (elem.nodeName=="#text"){return elem.nodeValue;}		
	var txt="",nn=elem.childNodes;
	if(ig_csom.IsIEWin)try{return elem.innerText;}catch(ex){;}
	if(elem.nodeName=="#text")txt=elem.nodeValue;
	else if(elem.nodeName=="BR")txt="\r\n";
	else if(nn)for(var i=0;i<nn.length;i++)txt+=igtbl_getInnerText(nn[i]);
	var sp=String.fromCharCode(160);
	while(txt.indexOf(sp)>=0)txt=txt.replace(sp," ");
	return txt;
}

function igtbl_setInnerText(elem,txt,wrap)
{
	if(!elem)return;
	
	if (elem.nodeName=="#text")
	{
	     elem.nodeValue=txt;
	     return;
	}	
	txt=(txt&&txt!="")?txt.toString():" ";
	if(ig_csom.IsIEWin)try{elem.innerText=txt;return;}catch(ex){;}
	while(txt.indexOf("\r")>=0)txt=txt.replace("\r","");
	
	while(!wrap && txt.indexOf(" ")>=0)txt=txt.replace(" ",String.fromCharCode(160));
	var te=null,ss=txt.split("\n"),nn=elem.childNodes;
	var j=-1,i=nn.length;
	while(i-->0)
	{
		if(!te&&nn[i]&&nn[i].nodeName=="#text"){te=nn[i];te.nodeValue=te.data=ss[++j];}
		if(nn[i]!=te)elem.removeChild(nn[i]);
	}
	while(++j<ss.length)
	{
		if(j>0)elem.appendChild(document.createElement("BR"));
		try{elem.appendChild(document.createTextNode(ss[j]));}catch(ex){;}
	}
}

function igtbl_showColButton(gn,se,active)
{
	var gs=igtbl_getGridById(gn);
	if(!gs||se==null)return;
	var b=igtbl_initButton(gs),cell=gs.oActiveCell;
	if(!b)return;
	if(se=="hide")
	{
		gs._mouseWait=0;
		gs._mouseIn=null;
		
		if(active&&cell&&cell.hasButtonEditor(igtbl_cellButtonDisplay.OnMouseEnter))
		{
			if(b.getAttribute("srcElement")==cell.Element.id)return;
			try{window.setTimeout("try{igtbl_showColButton('"+gn+"','act');}catch(e){}",20);}catch(e){;}
		}
		if(b.style.display=="")b.style.display="none";
		return;
	}
	if(se=="act")
	{
		if(!cell||(cell.Row.ParentRow&&!cell.Row.ParentRow.getExpanded())||b.style.display=="")return;
		se=cell.Element;
	}
	igtbl_scrollToView(gn,se);
	
		
	var bandNo=null;
	var pNode=se;
	while(bandNo===null && (pNode=pNode.parentNode)!=null)
	{
		bandNo = pNode.getAttribute("bandNo");
	}
	var columnNo=igtbl_getColumnNo(gn,se);
	var column=gs.Bands[bandNo].Columns[columnNo];
    
	b.style.width=igtbl_clientWidth(se)+"px";
	b.style.height=igtbl_clientHeight(se)+"px";
	if(ig_shared.IsIE)
	{


		{
		
			var testValue = igtbl_getAbsBounds(se,gs, true);
			
			b.style.left=testValue.x+"px";
			b.style.top=testValue.y+"px";
		}
	}
	else
	{
	
	
		
		
		
		
		ig_csom.absPosition(se,b,ig_Location.MiddleCenter,null);
	}
	b.className=column.ButtonClass;
	if(se.innerHTML==igtbl_getNullText(gn,bandNo,columnNo))
		b.value=" ";
	else if(se.firstChild.tagName=="NOBR")
		b.value=igtbl_getInnerText(se.firstChild);
	else
		b.value=igtbl_getInnerText(se);
	b.setAttribute("srcElement",se.id);
	b.style.display="";
}

function igtbl_getDocumentElement(elemID)
{
	if(ig_shared.IsIE)
	{
		var obj;
		if(document.all)
			obj=document.all[elemID];
		else
			obj=document.getElementById(elemID);
		return obj;
	}
	else
	{
		var elem=document.getElementById(elemID);
		if(elem)
		{
			var elems=document.getElementsByTagName(elem.tagName);
			var els=[];
			for(var i=0;i<elems.length;i++)
			{
				if(elems[i].id==elemID)
					els[els.length]=elems[i];
			}
			return (els && els.length == 1) ? els[0] : els;
		}
		return null;
	}
}

function igtbl_onScroll(evnt, gn)
{
	var gs=igtbl_getGridById(gn);
	if(!gs) return;
	var de=gs.getDivElement();
	if(de.getAttribute("noOnScroll"))
	{
		if(de.getAttribute("oldSL"))
			igtbl_scrollLeft(de,parseInt(de.getAttribute("oldSL")));
		if(de.getAttribute("oldST"))
			igtbl_scrollTop(de,parseInt(de.getAttribute("oldST")));
		return igtbl_cancelEvent(evnt);
	}
	if (!igtbl_hideEdit(gn) && gs._exitEditCancel)
	{
		
		var activeCell = gs.getActiveCell();	
		if (activeCell)
		{
			gs._returnToEditModeFromScroll = true;
			igtbl_editCell(evnt, gn, activeCell.Element);
			gs._returnToEditModeFromScroll = null;
			return;
		}
	}
	igtbl_showColButton(gn,"hide");
	
	if(gs.FixedColumnScrollType!=2)
		gs.alignStatMargins();
	gs.endEditTemplate();
	var isVertScroll=(typeof(gs._oldScrollTop)!="undefined" && gs._oldScrollTop!=de.scrollTop || typeof(gs._oldScrollTop)=="undefined" && de.scrollTop>0);
	
	
	if(gs.Node && !gs.AllowPaging && (gs.RowsServerLength>gs.Rows.length && gs.XmlLoadOnDemandType!=2 || gs.XmlLoadOnDemandType==2) && isVertScroll)
		igtbl_onScrollXml(evnt,gn);
	if(gs.UseFixedHeaders)
	{
		if(typeof(gs.fhOldScrollLeft)=="undefined" && typeof(gs.fhOldScrollTop)=="undefined" || gs.fhOldScrollLeft!=gs._scrElem.scrollLeft || gs.fhOldScrollTop!=gs._scrElem.scrollTop)
		{

			gs.fhOldScrollLeft=gs._scrElem.scrollLeft;
			gs.fhOldScrollTop=gs._scrElem.scrollTop;

			
			if(gs.FixedColumnScrollType==2)
			{
				if(gs.alignDivsTimeoutID)
					window.clearTimeout(gs.alignDivsTimeoutID);
				gs.alignDivsTimeoutID=window.setTimeout("igtbl_doAlignDivs('"+gn+"')",250);
			}
			else
				gs.alignDivs();
		}
	}
	else if(gs.XmlLoadOnDemandType==1 || gs.XmlLoadOnDemandType>2 || !isVertScroll)
	{
		gs.alignDivs();
	}
	gs._oldScrollLeft=de.scrollLeft;
	gs._oldScrollTop=de.scrollTop;
	gs._removeChange("ScrollLeft",gs);
	gs._recordChange("ScrollLeft",gs,de.scrollLeft);
	gs._removeChange("ScrollTop",gs);
	gs._recordChange("ScrollTop",gs,de.scrollTop);
}


function igtbl_doAlignDivs(gn,force)
{
	
	var gs=igtbl_getGridById(gn);
	gs.alignDivsTimeoutID=null;
	
	gs.alignStatMargins();
	gs.alignDivs(0,force);
}


function igtbl_filterMouseUp(evt)
{
	var src = ig_csom.IsIE ? evt.srcElement : evt.target;
	while(src && !src.getAttribute("filter"))
	{
		src = src.parentNode;
	}
	var filterDropObject = src.object;
	if (filterDropObject)
		filterDropObject.show(false);
	return ig_cancelEvent(evt);
}

function igtbl_filterMouseOver(evt)
{
	
	var src = ig_csom.IsIE?evt.srcElement:evt.target;
	
	while(src && src.tagName!="TR")
	{
		
		
        
        		
		if(src.tagName=="DIV" && (src.getAttribute("filter")
            || src.getAttribute("filterIconList")
		))
			return;
		src=src.parentNode;
	}
	
	if(src)
	{
		var srcDiv = src;
		
		while(srcDiv && !(srcDiv.getAttribute("filter")
            || srcDiv.getAttribute("filterIconList")
		))
		{
			srcDiv = srcDiv.parentNode;
		}
		if(srcDiv)
		{
			
			var filterDropObject = srcDiv.object;
			if (filterDropObject)
			{
				
			    if (src.tagName=="TR")
			        src=src.childNodes[0];
			    
			    src.setAttribute("oldStyle",src.className);
			    
				src.className =  filterDropObject.getHighlightStyle()+ " " + src.className;
			}	
		}
	}
}

function igtbl_filterMouseOut(evt)
{
	var src = ig_csom.IsIE ? evt.srcElement : evt.target;
	
	while(src && src.tagName!="TD")
	{
		src = src.parentNode;
	}
	if(src)
	{
	    var oldStyle = src.getAttribute("oldStyle");
		src.className = oldStyle?oldStyle:"";
	}
}

function igtbl_filterMouseUpDocument(evt)
{
	for(var gridId in igtbl_gridState)
	{
		var g = igtbl_getGridById(gridId);
		if (g._currentFilterDropped)
			g._currentFilterDropped.show(false);
	}
}

var igtbl_filterRequester;
function igtbl_stringEditorKeyPress(evt)
{
    if (igtbl_filterRequester)
    {
        window.clearTimeout(igtbl_filterRequester);
        igtbl_filterRequester=null;
    }
    
    
    var src=evt.srcElement?evt.srcElement:evt.target;
    if (src)
    {
		var cell= igtbl_getCellById(src.getAttribute("currentCell")); 
		if(cell.Column.AllowRowFiltering==3 && cell.Column.Band.Grid.LoadOnDemand!=3)
		{
			return;
		}
		
		if (cell.Column.DataType==8)
			igtbl_filterRequester=window.setTimeout("igtbl_filterRequest(\""+src.getAttribute("currentCell")+"\",\""+ src.value + "\",\"" + src.id + "\")",1000);
    }
}
function igtbl_filterRequest(cellId,editorValue,srcId)
{
    igtbl_filterRequester=null;
    var oCell = igtbl_getCellById(cellId);
    if (oCell.Row.IsFilterRow)
    {
        
        var columnFilter = oCell.Column._getFilterPanel(oCell.Row.Element);
        var filterOp=parseInt(oCell._getFilterTypeImage().getAttribute("operator"));
        
        if(editorValue!=null && editorValue!="" && oCell.Column.DataType==8)
        {   
            var re = new RegExp("^\\s+");
            editorValue = editorValue.replace(re,"");
        }
        
        if (editorValue==null || editorValue=="") filterOp=igtbl_filterComparisionOperator.All;
        
        var g=oCell.Row.Band.Grid;
        var curEditor=g._editorCurrent;
        if(curEditor)
        {
        	curEditor.setAttribute("noOnBlur",true);
            window.setTimeout("igtbl_clearNoOnBlurElem('"+curEditor.id+"')",100);
        }        
        
        columnFilter.setFilter(filterOp,editorValue);
        columnFilter.applyFilter();
        
        
        window.setTimeout("_realignFilterRowEditor(\""+g.UniqueID+"\",\""+ oCell.Id + "\")",250);        
    }
}
function _realignFilterRowEditor(gn,cellId)
{
    var g = igtbl_getGridById(gn);
    var oCell = igtbl_getCellById(cellId);
    var curEditor=g._editorCurrent;
    if (curEditor&&curEditor.getAttribute("currentCell")==oCell.Id)
    {
        var cell=oCell.getElement();
	    var r=_igtbl_determineEditorPosition(g,g.UniqueID,oCell,cell,cell);
	    curEditor.style.left=r.x+"px";
	    curEditor.style.top=r.y+"px";
	    
	    
	}
}


function igtbl_replaceChild(parent, newChild, oldChild)
{
	try
	{
		parent.replaceChild(newChild, oldChild);
	}
	catch(exc)
	{
		var sibling=oldChild.nextSibling;
		parent.removeChild(oldChild);
		if(sibling)
			parent.insertBefore(newChild, sibling);
		else
			parent.appendChild(newChild);
	}
}

function igtbl_getComputedStyle(elem)
{
	if (elem.currentStyle)
	{
		return elem.currentStyle;
	}
	else if (document.defaultView && document.defaultView.getComputedStyle)
	{
		return document.defaultView.getComputedStyle(elem, "");
	}
	return null;
}

// ig_WebGrid_an.js
// Infragistics UltraWebGrid Script 
// Copyright (c) 2001-2007 Infragistics, Inc. All Rights Reserved.
function igtbl_addNewClickDown(evnt,gn) 
{
	if(igtbl_button(gn,evnt)!=0)
		return;
	var se=igtbl_srcElement(evnt);
	var tn="TH";
	
	if(se.tagName==tn && se.getAttribute("addNew") && !igtbl_isDisabled(se))
	{
		se.setAttribute("addNewButtonClicked",1);
		igtbl_changeStyle(gn,se,gn+'_SelHeadClass');
	}	
	igtbl_activate(gn);
}

function igtbl_addNewClickUp(evnt,gn) 
{
	if(igtbl_button(gn,evnt)!=0)
		return;
	var se=igtbl_srcElement(evnt);
	var tn="TH";
		
	if(se.tagName==tn && se.getAttribute("addNew") && !igtbl_isDisabled(se) && se.getAttribute("addNewButtonClicked"))
	{
		se.removeAttribute("addNewButtonClicked");
		var bandNo=parseInt(se.getAttribute("bandNo"),10);
		var g=igtbl_getGridById(gn);
		var band=g.Bands[bandNo];
		if(band.AddNewRowVisible==1)
			igtbl_activateAddNewRow(g,bandNo,igtbl_getClickRow(g,bandNo));
		else
		{
			igtbl_changeStyle(gn,se,null);
			igtbl_addNew(gn,bandNo);
		}
	}
	igtbl_activate(gn);
}
function igtbl_activateAddNewRow(g,bandNo,clickRow)
{
	var band=g.Bands[bandNo];
	var addNewRow=null;
	if(clickRow)
	{
		if(!clickRow.getExpanded())
			clickRow.setExpanded();
		if(clickRow.Rows)
			addNewRow=clickRow.Rows.AddNewRow;
	}
	else
		addNewRow=g.Rows.AddNewRow;
	if(addNewRow)
	{
		var cell=null;
		if(band.getCellClickAction()!=2)
		{
			cell=addNewRow.getCell(0);
			while(cell && (!cell.Column.hasCells() || !cell.Column.getVisible()))
				cell=addNewRow.getCell(cell.Column.Index+1);
			if(cell)
			{
				cell.scrollToView();
				cell.setSelected();
				cell.activate();
			}
		}
		if(!cell)
		{
			addNewRow.scrollToView();
			addNewRow.setSelected();
			addNewRow.activate();
		}
	}
}
function igtbl_getClickRow(g,bandNo)
{
	var clickRow=null;
	if(g.ActiveCell!="")
		clickRow=igtbl_getRowById(g.ActiveCell);
	else if(g.ActiveRow!="")
		clickRow=igtbl_getRowById(g.ActiveRow);
	if(!clickRow && bandNo==0)
		clickRow=g.Rows.getRow(0);
	if(clickRow && bandNo<clickRow.Band.Index)
	{
		var pr=clickRow;
		while(pr && pr.Band.Index!=bandNo)
			pr=pr.ParentRow;
		if(!pr)
			return null;
		clickRow=pr;
	}
	if(clickRow && bandNo==clickRow.Band.Index)
		clickRow=clickRow.ParentRow;
	return clickRow;
}

function igtbl_addNew(gn,bandNo
    , scrollToView, setActive
)
{
    if (typeof(scrollToView) == "undefined")
    {
        scrollToView = true;
    }
    if (typeof(setActive) == "undefined")
    {
        setActive = true;
    }
	var g=igtbl_getGridById(gn);
	if(!g) return null;
	gn=g.Id;
	var band=g.Bands[bandNo];
	if(band.AllowAddNew==2 || band.AllowAddNew==0 && g.AllowAddNew!=1 || band.IsGrouped)
		return null;
	var clickRow=igtbl_getClickRow(g,bandNo);
	if(!clickRow && bandNo!=0 || clickRow && clickRow.Band.Index+1!=bandNo)
		return null;
	return igtbl_rowsAddNew(gn,clickRow
    ,null, scrollToView, setActive
	);
}


function igtbl_rowsAddNew(gn,clickRow
	,newRow
    , scrollToView, setActive
)
{
	var valueLabel="V";
	var cellLabel="C";
	var rowLabel="R";
	var cellsLabel="Cs";
	var rowsLabel="Rs"; 
	var g=igtbl_getGridById(gn);
	var band=g.Bands[(clickRow?clickRow.Band.Index+1:0)];
	var rows=(clickRow?clickRow.Rows:g.Rows);
	var fac=band.firstActiveCell;
	var table=band.curTable;
	var row=null,rowObj=null;
	if(g.Rows.Node)
	{
		g.noMoreRows=true;
		window.setTimeout("igtbl_cancelNoMoreRows('"+g.Id+"')",500);
		if(clickRow)
		{
			if(!clickRow.Expandable && !clickRow.Rows)
			{
				clickRow.Rows=new igtbl_Rows(null,g.Bands[clickRow.Band.Index+1],clickRow);
			}
			else if(!clickRow.Rows)
			{
				if(g.LoadOnDemand==3 && !clickRow.HiddenElement)
					clickRow.requestChildRows();
				else
					clickRow.Rows=new igtbl_Rows(clickRow.Node.selectSingleNode(rowsLabel),g.Bands[clickRow.Band.Index+1],clickRow);					
			}
			rows=clickRow.Rows;
		}
		var doc=g.Xml.XMLDocument;
        
        if(!doc) 
            doc = g.Xml.ownerDocument;
           		
		var xmlns=g.XmlNS;
		if(igtbl_fireEvent(g.Id,g.Events.BeforeRowInsert,"(\""+g.Id+"\",\""+(rows.ParentRow?rows.ParentRow.Element.id:"")+"\")")==true)
			return null;
		var pr=rows.ParentRow;
		if(pr && !pr.getExpanded())
			pr.setExpanded(true);
		var toExisting=(typeof(rows.Node)!="undefined");
		if(!toExisting || pr && !pr.Expandable)
		{
            
            rows.Node=_igtbl_createXmlElement(doc,rowsLabel,xmlns);
			rows.SelectedNodes=rows.Node.selectNodes(rowLabel);	
			pr.Node.appendChild(rows.Node);
			if(!pr.Expandable)
			{
				pr.Expandable=true;
				pr.Element.childNodes[0].innerHTML="<img src='"+pr.Band.getExpandImage()+"' alt=\""+g.ExpandAltText+"\" igAltC=\""+g.CollapseAltText+"\" border=0 onclick=\"igtbl_toggleRow(event);\">";
			}
			rows.Node.setAttribute("bandNo",(band.Index+1).toString());
		}
        
        var rowsNode=_igtbl_createXmlElement(doc,rowsLabel,xmlns);
		rows.Node.parentNode.appendChild(rowsNode);
		rowsNode.setAttribute("bandNo",rows.Node.getAttribute("bandNo"));
        
        var rowNode=_igtbl_createXmlElement(doc,rowLabel,xmlns);
		var lrId=rows.getLastRowId();
		if(!lrId)
			rowNode.setAttribute("i",rows.length);
		else
		{
			var lr=lrId.split("_");
			rowNode.setAttribute("i",parseInt(lr[lr.length-1],10)+1);
		}
		if(rows.AddNewRow && rows.Band.Index<g.Bands.length-1 && g.Bands[rows.Band.Index+1].AllowAddNew==1)
			rowNode.setAttribute("showExpand","true");
		if(g.IsXHTML)
			rowNode.setAttribute(igtbl_litPrefix+"dtdh","0");
		rowsNode.appendChild(rowNode);
        
        var cells=_igtbl_createXmlElement(doc,cellsLabel,xmlns);
		
		rowNode.appendChild(cells);
		for(var i=0;i<rows.Band.Columns.length;i++)
		{
			if(rows.Band.Columns[i].ServerOnly) continue;
            
            var cell=_igtbl_createXmlElement(doc,cellLabel,xmlns);
            if(ig_shared.IsNetscape6)
				cell.setAttribute("doe","1");
			cells.appendChild(cell);
            
            var cdata=_igtbl_createXmlTextNode(doc,"",xmlns);
			cell.appendChild(cdata);
		}
		var offsetSO=0;
		for(var i=0;i<rows.Band.Columns.length;i++)
		{
			if(rows.Band.Columns[i].ServerOnly)
			{
				++offsetSO;
				continue;
			}
			var selCells=cells.selectNodes(cellLabel);
			var column=rows.Band.Columns[i];
			var cellNode=selCells[column.get("index")-1-offsetSO];
			var st=column.Style;
			if(column.CssClass)
				cellNode.setAttribute("class",column.CssClass);
			if(column.Hidden)
				st+="display:none;";
			if(st)
				cellNode.setAttribute("style",st);
			var it_str="";
			if(column.Wrap)
				cellNode.setAttribute("br","1");
			switch(column.ColumnType)
			{
				case 3:
					it_str+="<input type='checkbox'"+(column.getAllowUpdate()==1?"":" disabled")+" on"+(ig_csom.IsIE?"property":"")+"change='igtbl_chkBoxChange(event,\""+g.Id+"\");'>";
					
					cellNode.setAttribute("iDV","False");
					break;
				case 7:
					var bc=column.ButtonClass;
					var bs=column.ButtonStyle;
					if(column.CellButtonDisplay==1)
						it_str+="<input type='button' style='"+bs+"' onclick=\"igtbl_colButtonClick(event,'"+g.Id+"');\""+(bc==""?"":" class='"+bc+"'")+">";
					else
						it_str+="&nbsp;";
					break;
				case 9:
					it_str+="<a href=''>&nbsp;</a>";
					break;
				default:
					it_str+="&nbsp;";
					break;
			}
			cellNode.firstChild.text=it_str;
		}
		if(toExisting
			|| newRow
			)
		{
			var strTransform="";
			strTransform=rows.applyXslToNode(rowsNode,rows.length);
			rowsNode.parentNode.removeChild(rowsNode);
			if(strTransform)
			{
				rows.Node.appendChild(rowNode);
				rows.length++;
				rows.SelectedNodes=rows.Node.selectNodes(rowLabel);
				g._innerObj.innerHTML="<table>"+strTransform+"</table>";
				var addedRow=g._innerObj.firstChild.rows[0];
				if(g.UseFixedHeaders)
				{
					 var drs=addedRow.cells[addedRow.cells.length-1].firstChild;
					 if(drs.tagName=="DIV" && drs.id && drs.id.length>4 && drs.id.substr(drs.id.length-4)=="_drs")
						drs.firstChild.style.left=-g._scrElem.scrollLeft;
				}
				
				if(rows.Band.AddNewRowVisible==1 && rows.Band.AddNewRowView==2 && rows.Element.childNodes.length>0 && rows.AddNewRow.Element.parentNode==rows.Element)
					rows.Element.insertBefore(addedRow,rows.AddNewRow.Element);
				else
				
					rows.Element.appendChild(addedRow);
				igtbl_fixDOEXml();
				if(g.UseFixedHeaders && g.IsXHTML)
				{
					 var drs=addedRow.cells[addedRow.cells.length-1].firstChild;
					 if(drs.tagName=="DIV" && drs.id && drs.id.length>4 && drs.id.substr(drs.id.length-4)=="_drs")
						drs.parentNode.style.height=drs.firstChild.offsetHeight+"px";
				}
			}
		}
		else
		{
			rows.length++;
			rows.Node.appendChild(rowNode);
			rows.SelectedNodes=rows.Node.selectNodes(rowLabel);
			rows.ParentRow.setExpanded(true);
		}
		var rowObj=rows.getRow(rows.length-1);
		rows.setLastRowId(rowObj.Id);
		rowObj.Node.setAttribute("i",rows.length-1);	
		if(g.LoadOnDemand==3)
		{
			rowObj._dataChanged|=1;
			g.invokeXmlHttpRequest(g.eReqType.AddNewRow,rows);
		}
		else
			g._recordChange("AddedRows",rowObj);
		for(var i=0;i<rowObj.Band.Columns.length;i++)
		{
			var cellObj=rowObj.getCell(i);
			if(newRow)
				cellObj.setValue(newRow.getCell(i).getValue());
			else
			{
				cellObj.setValue(cellObj.Column.getValueFromString(cellObj.Column.DefaultValue));
				
				rowObj._dataChanged=1;
			}	
		}
		if(!newRow)
		{
			if (setActive)
			{
				rowObj.activate();
			}
			g.setNewRowImg(rowObj);
		}
		igtbl_fireEvent(g.Id,g.Events.InitializeRow,"(\""+g.Id+"\",\""+rowObj.Element.id+"\");");
		var oldNPB=g.NeedPostBack;
		igtbl_fireEvent(g.Id,g.Events.AfterRowInsert,"(\""+g.Id+"\",\""+rowObj.Element.id+"\");");
		if(!oldNPB && g.NeedPostBack && !g.Events.AfterRowInsert[1]&1 || g.LoadOnDemand==3)
			g.NeedPostBack=false;
		g.alignDivs();
		if (scrollToView)
		{
		    rowObj.scrollToView();
		}
		row=rowObj.Element;
	}
	else
	{
		var nfrow=null;
		var setHeight=false;
		if(!table)
		{
			var hidRow=document.createElement("tr");
			var rn=clickRow.Element.id.split("_");
	        
		    rn[0]=gn+"_rh";
			hidRow.id=rn.join("_");
			hidRow.setAttribute("hiddenRow",true);
            
            hidRow.style.position="relative";
			if(g.Bands[band.Index-1].IndentationType!=2)
			{
				var ec=document.createElement(
					"th"
					);
				ec.className=igtbl_getExpAreaClass(gn,band.Index-1);
				ec.style.borderWidth=0;
				ec.style.textAlign="center";
				ec.style.padding=0;
				
				
				ec.innerHTML="&nbsp;";
				hidRow.appendChild(ec);
				if(igtbl_getRowSelectors(gn,band.Index-1)==1)
				{
					var rsc=document.createElement(
						"th"
						);
					rsc.className=igtbl_getRowLabelClass(gn,band.Index-1);
					rsc.innerHTML="&nbsp;";
					hidRow.appendChild(rsc);
				}
			}
			var majCell=document.createElement("td");
			var tBody;
			majCell.style.overflow="auto";
			majCell.style.border=0;
			majCell.style.width="100%";
			majCell.colSpan=g.Bands[band.Index-1].VisibleColumnsCount+(g.Bands[band.Index-1].IndentationType==2?2:0);
			hidRow.appendChild(majCell);
			if(band.HeaderHTML)
			{
				var str="<table>"+band.HeaderHTML+"<tbody></tbody>";
				if(band.ColFootersVisible==1 && band.FooterHTML)
					str+=band.FooterHTML;
				str+="</table>";
				majCell.innerHTML=str;
				table=majCell.firstChild;
				tBody=table.tBodies[0];
			}
			else
				table=document.createElement("table");
			rn[0]=gn+"t";
			table.id=rn.join("_");
			table.border=0;
			table.cellPadding=g.Element.cellPadding;
			table.cellSpacing=g.Element.cellSpacing;
			table.setAttribute("bandNo",band.Index);
			table.style.cssText=g.Element.style.cssText;
			table.style.position="relative";
			table.style.width="";
			if(!band.HeaderHTML)
			{
				majCell.appendChild(table);
				var colGr=document.createElement("colgroup");
				var col;

				col=document.createElement("col");
				if(band.getIndentation()>0)
					col.width=band.getIndentation();
				else
					col.style.display="none";
				colGr.appendChild(col);

				if(igtbl_getRowSelectors(gn,band.Index)==1)
				{
					col=document.createElement("col");
					col.width=(band.RowLabelWidth?band.RowLabelWidth:"22px");
					colGr.appendChild(col);
				}
				for(var i=0;i<band.Columns.length;i++)
				{
					var clmn=band.Columns[i];
					if(!clmn.getHidden() && clmn.hasCells())
					{
						col=document.createElement("col");
						col.width=clmn.Width;
						colGr.appendChild(col);
					}
				}
				for(var i=0;i<band.Columns.length;i++)
					if(band.Columns[i].getHidden())
					{
						col=document.createElement("col");
						col.width="";
						colGr.appendChild(col);
					}
				table.appendChild(colGr);
				var tHead=document.createElement("thead");
				igtbl_addEventListener(tHead,"mousedown",igtbl_headerClickDown);
				igtbl_addEventListener(tHead,"mouseup",igtbl_headerClickUp);
				igtbl_addEventListener(tHead,"mouseout",igtbl_headerMouseOut);
				igtbl_addEventListener(tHead,"mousemove",igtbl_headerMouseMove);
				igtbl_addEventListener(tHead,"mouseover",igtbl_headerMouseOver);
				igtbl_addEventListener(tHead,"contextmenu",igtbl_headerContextMenu);
				var tr=document.createElement("tr");
				var th;
				var img;

				th=document.createElement("th");
				if(g.Bands[band.Index-1].IndentationType==2)
					th.className=igtbl_getExpAreaClass(gn,band.Index);
				else
					th.className=band.NonSelHeaderClass;
				th.height=band.DefaultRowHeight;
				img=document.createElement("img");
				img.src=g.BlankImage;
				img.border=0;
				th.appendChild(img);
				tr.appendChild(th);

				if(igtbl_getRowSelectors(gn,band.Index)==1)
				{
					th=document.createElement("th");
					th.className=band.NonSelHeaderClass;
					th.height=band.DefaultRowHeight;
					img=document.createElement("img");
					img.src=g.BlankImage;
					img.border=0;
					th.appendChild(img);
					tr.appendChild(th);
				}
				for(var i=0;i<band.Columns.length;i++)
				{
					var column=band.Columns[i];
					if(g.UseFixedHeaders && !column.Fixed && !nfrow)
					{
						var nftd=document.createElement("th");
						nftd.colSpan=band.Columns.length-column.Index;
						if(!g.IsXHTML)
							nftd.width="100%";
						else
						{
							nftd.style.verticalAlign="top";
							setHeight=true;
						}
						tr.appendChild(nftd);
						var nfd=document.createElement("div");
						nftd.appendChild(nfd);
						nfd.id=g.Id+"_drs";
						nfd.style.overflow="hidden";
						if(!g.IsXHTML)
							nfd.style.width="100%";
						nfd.style.height="100%";
						if(g.IsXHTML)
							nfd.style.position="relative";
						var nftable=document.createElement("table");
						nfd.appendChild(nftable);
						nftable.border="0";
						nftable.cellPadding=g.Element.cellPadding;
						nftable.cellSpacing=g.Element.cellSpacing;
						nftable.style.position="relative";
						nftable.style.tableLayout="fixed";
						nftable.height="100%";
						var nfcgs=document.createElement("colgroup");
						nftable.appendChild(nfcgs);
						for(var j=column.Index;j<band.Columns.length;j++)
						{
							if(band.Columns[j].hasCells() && !band.Columns[j].getHidden())
							{
								var nfcg=document.createElement("col");
								nfcg.width=band.Columns[j].Width;
								nfcgs.appendChild(nfcg);
							}
						}
						for(var j=column.Index;j<band.Columns.length;j++)
						{
							if(band.Columns[j].hasCells() && band.Columns[j].getHidden())
							{
								var nfcg=document.createElement("col");
								nfcg.width="1px";
								nfcg.style.display="none";
								nfcgs.appendChild(nfcg);
							}
						}
						var nftb=document.createElement("tbody");
						nftable.appendChild(nftb);
						nfrow=document.createElement("tr");
						nftb.appendChild(nfrow);
					}
					if(!column.Hidden && column.hasCells())
					{
						th=document.createElement("th");
						th.id=gn+"_c"+"_"+band.Index+"_"+i.toString();
						th.className=column.getHeadClass();
						th.setAttribute("columnNo",i);
						th.innerHTML=column.HeaderText;
						if (th.innerText)
							th.innerHTML=th.innerText;
						else if (th.lastChild && th.lastChild.data && th.lastChild.nodeName=="#text")
							th.innerHTML=th.lastChild.data;
						if(nfrow)
						{
							nfrow.appendChild(th);
							if(setHeight)
							{
								var nftd=nfrow.parentNode.parentNode.parentNode.parentNode;
								nftd.style.height=th.offsetHeight+"px";
								setHeight=false;
							}
						}
						else
							tr.appendChild(th);
					}
				}
				tHead.appendChild(tr);
				if(band.ColHeadersVisible!=1)
					tHead.style.display="none";
				table.appendChild(tHead);
				tBody=document.createElement("tbody");
				table.appendChild(tBody);
				if(clickRow.Rows && clickRow.Rows.Element)
					clickRow.Rows.Element=tBody;
			}
			if(band.ColFootersVisible==1 && !band.FooterHTML)
			{
				var tFoot=document.createElement("tfoot");
				var tr=document.createElement("tr");
				var th;

				th=document.createElement("th");
				th.className=igtbl_getExpAreaClass(gn,band.Index);
				th.height=band.DefaultRowHeight;
				th.innerHTML="&nbsp;";
				tr.appendChild(th);

				if(igtbl_getRowSelectors(gn,band.Index)==1)
				{
					th=document.createElement("th");
					th.className=igtbl_getRowLabelClass(gn,band.Index);
					th.height=band.DefaultRowHeight;
					th.innerHTML="&nbsp;";
					tr.appendChild(th);
				}
				nfrow=null;
				setHeight=false;
				for(var i=0;i<band.Columns.length;i++)
				{
					var column=band.Columns[i];
					if(g.UseFixedHeaders && !column.Fixed && !nfrow)
					{
						var nftd=document.createElement("th");
						nftd.colSpan=band.Columns.length-column.Index;
						if(!g.IsXHTML)
							nftd.width="100%";
						else
						{
							nftd.style.verticalAlign="top";
							setHeight=true;
						}
						tr.appendChild(nftd);
						var nfd=document.createElement("div");
						nftd.appendChild(nfd);
						nfd.id=g.Id+"_drs";
						nfd.style.overflow="hidden";
						if(!g.IsXHTML)
							nfd.style.width="100%";
						nfd.style.height="100%";
						if(g.IsXHTML)
							nfd.style.position="relative";
						var nftable=document.createElement("table");
						nfd.appendChild(nftable);
						nftable.border="0";
						nftable.cellPadding=g.Element.cellPadding;
						nftable.cellSpacing=g.Element.cellSpacing;
						nftable.style.position="relative";
						nftable.style.tableLayout="fixed";
						nftable.height="100%";
						var nfcgs=document.createElement("colgroup");
						nftable.appendChild(nfcgs);
						for(var j=column.Index;j<band.Columns.length;j++)
						{
							if(band.Columns[j].hasCells() && !band.Columns[j].getHidden())
							{
								var nfcg=document.createElement("col");
								nfcg.width=band.Columns[j].Width;
								nfcgs.appendChild(nfcg);
							}
						}
						for(var j=column.Index;j<band.Columns.length;j++)
						{
							if(band.Columns[j].hasCells() && band.Columns[j].getHidden())
							{
								var nfcg=document.createElement("col");
								nfcg.width="1px";
								nfcg.style.display="none";
								nfcgs.appendChild(nfcg);
							}
						}
						var nftb=document.createElement("tbody");
						nftable.appendChild(nftb);
						nfrow=document.createElement("tr");
						nftb.appendChild(nfrow);
					}
					if(!column.Hidden && column.hasCells())
					{
						th=document.createElement("th");
						th.id=gn+
						"_"+
						"f"+"_"+band.Index+"_"+i.toString();
						th.className=igtbl_getFooterClass(gn,band.Index,i);
						th.innerHTML="&nbsp;";
						if(nfrow)
						{
							nfrow.appendChild(th);
							if(setHeight)
							{
								var nftd=nfrow.parentNode.parentNode.parentNode.parentNode;
								nftd.style.height=th.offsetHeight+"px";
								setHeight=false;
							}
						}
						else
							tr.appendChild(th);
					}
				}
				tFoot.appendChild(tr);
				table.appendChild(tFoot);
			}
			clickRow.Element.childNodes[0].oldInnerHTML=clickRow.Element.childNodes[0].innerHTML;
			clickRow.Element.childNodes[0].innerHTML="<img src="+igtbl_getCollapseImage(gn,band.Index-1)+" border=0 onclick=\"igtbl_toggleRow('"+gn+"','"+clickRow.Element.id+"');\"" + 
			" alt=" + g.CollapseAltText + " igAltX=" + g.ExpandAltText + " " +
			">";
			igtbl_stateExpandRow(gn,clickRow,true);
			clickRow.Element.parentNode.insertBefore(hidRow,clickRow.Element.nextSibling);
			g.ExpandedRows[clickRow.Element.id]=true;
			clickRow.HiddenElement=hidRow;
		}
		row=document.createElement("tr");
		var rowsEl=table.tBodies[0].rows;
		var lastRow,lrObj,altRow;
		if(rowsEl.length>0)
			lastRow=rowsEl[rowsEl.length-1];
		if(lastRow)
		{
			if(lastRow.parentNode.tagName=="TFOOT")
				lastRow=lastRow.previousSibling;
			if(lastRow && lastRow.getAttribute("addNewRow"))
				lastRow=lastRow.previousSibling;
			if(lastRow && lastRow.getAttribute("filterRow"))
				lastRow=lastRow.previousSibling;
			if(lastRow && lastRow.getAttribute("hiddenRow"))
				lastRow=lastRow.previousSibling;
		}
		if(lastRow)
		{
			lrObj=igtbl_getRowById(lastRow.id);
			altRow=lastRow.getAttribute("alt")!="true" && (band.AltClass!="" || g.AltClass!="");
			var rLastRowId=lrObj.OwnerCollection.getLastRowId();
			if(lastRow.id!=rLastRowId)
			{
				var l1=igtbl_getRowById(rLastRowId);
				if(l1)
				{
					lrObj=l1;
					lastRow=l1.Element;
				}
			}
			var rn=rLastRowId.split("_");
			rn[rn.length-1]=parseInt(rn[rn.length-1],10)+1;
			row.id=rn.join("_");
			lrObj.OwnerCollection.setLastRowId(row.id);
		}
		else
		{
			if(!clickRow)
				row.id=gn+"_r_"+(g.AllowPaging && g.EIRM?(g.CurrentPageIndex-1)*g.PageSize:0)
			else
				row.id=clickRow.Element.id+"_0";
		}
		if(band.DefaultRowHeight!="")
			row.style.height=band.DefaultRowHeight;
		if(igtbl_fireEvent(gn,g.Events.BeforeRowInsert,"(\""+gn+"\",\""+(clickRow?clickRow.Element.id:"")+"\",\""+row.id+"\")")==true)
		{
			if(!band.curTable && typeof(clickRow)!="undefined" && clickRow!=null)
			{
				clickRow.Element.childNodes[0].innerHTML=clickRow.Element.childNodes[0].oldInnerHTML;
				clickRow.Element.parentNode.removeChild(table.parentNode.parentNode);
			}
			if(g.NeedPostBack)
				igtbl_doPostBack(gn,"");
			return null;
		}
		if(lastRow)
		{
			lrObj.OwnerCollection.rows[lrObj.OwnerCollection.length]=null;
			lrObj.OwnerCollection.length++;
			if(lrObj.ParentRow)
			{
				lrObj.ParentRow.ChildRowsCount++;
				lrObj.ParentRow.VisChildRowsCount++;
			}
		}
		if(altRow)
			row.setAttribute("alt","true");

		if((band.Index!=0 || !g.StatFooter) && newRow && band.AddNewRowView!=1)
			table.tBodies[0].insertBefore(row,newRow.Element);
		
		
		
		else if(rows && (lastRow || rows.length == 0) && (band.Index!=0 || !g.StatFooter) && !newRow && rows.AddNewRow && band.AddNewRowView!=1)
		    table.tBodies[0].insertBefore(row,rows.AddNewRow.Element);
		else
		if(lastRow && rowsEl[rowsEl.length-1].parentNode.tagName=="TFOOT")
			table.tBodies[0].insertBefore(row,rowsEl[rowsEl.length-1]);
		else
			table.tBodies[0].appendChild(row);
		if(!clickRow && !rows)
		{
			delete g.Rows;
			g.Rows=new igtbl_Rows(null,g.Bands[0],null);
			g.Rows.length=1;
			g.Rows.rows[0]=null;
		}
		else if(!lastRow && clickRow)
		{
			clickRow.ChildRowsCount=1;
			clickRow.VisChildRowsCount=1;
			if(!clickRow.Rows)
				clickRow.Rows=new igtbl_Rows(null,g.Bands[clickRow.Band.Index+1],clickRow);
			else if(!clickRow.Rows.Element && !clickRow.GroupByRow)
				clickRow.Rows.Element=clickRow.Element.nextSibling.childNodes[clickRow.Band.IndentationType==2?0:clickRow.Band.firstActiveCell].childNodes[0].tBodies[0];
			clickRow.Rows.length=1;
			clickRow.Rows.rows[0]=null;
			clickRow.Expandable=true;
		}
		else if(!clickRow && rows && !lastRow)
		{
			rows.length++;
			rows.rows[rows.length-1]=null;
		}
		var phCellNo=0;
		nfrow=null;
		setHeight=false;
		var className;
		if(altRow)
			className=band.getAltClass();
		else
			className=band.getItemClass();
		if(band._optSelectRow && !ig_csom.IsIE55 && className)
			row.className=className;
		for(var i=0;i<band.Columns.length+fac;i++)
		{
			if(i>=fac && !band.Columns[i-fac].hasCells())
				continue;
			var cell=document.createElement(i>=fac?"td":"th");
			var cn;
			if(lastRow)
			{
				cn=row.id.split("_");
				if(i>=fac)
				{
					cn[0]=gn;
					cn[1]="rc";
					cn[cn.length-1]--;
					cn[cn.length]=i-fac;
				}
				else if(lastRow.cells[phCellNo].id)
				{
					cn[1]="l";
					cn[cn.length-1]--;
				}
			}
			else
			{
				if(clickRow)
				{
					cn=clickRow.Element.id.split("_");
					cn[1]="rc";
					cn[cn.length]=-1;
					cn[cn.length]=i-fac;
				}
				else
				{
					cn=new Array();

					cn[0]=gn;
					cn[1]="rc";
					cn[cn.length]=(g.AllowPaging && g.EIRM?(g.CurrentPageIndex-1)*g.PageSize:0)-1;
					cn[cn.length]=i-fac;
				}
			}
			if(band.DefaultRowHeight!="")
			{
				cell.height=band.DefaultRowHeight;
				
				cell.style.height=band.DefaultRowHeight;
			}
			if(g.Bands.length>1 && phCellNo==0)
			{
				cell.className=igtbl_getExpAreaClass(gn,band.Index);
				
				if(band.Index<g.Bands.length-1 && g.Bands[band.Index+1].AllowAddNew==1 && g.Bands[band.Index+1].AddNewRowVisible==1)
				{
					row.setAttribute("showExpand",true);
					
					cell.innerHTML="<img src=\""+band.getExpandImage()+"\" alt=\""+g.ExpandAltText+"\" igAltC=\""+g.CollapseAltText+"\" border=\"0\" onclick=\"igtbl_toggleRow(event);\">";
				}
				else
					cell.innerHTML="<img src='"+g.BlankImage+"' border=0 imgType='blank' alt='' style='visibility:hidden;'>";
			}
			else if(igtbl_getRowSelectors(gn,band.Index)==1 && (g.Bands.length>1 && phCellNo==1 || phCellNo==0))
			{
				cell.className=igtbl_getRowLabelClass(gn,band.Index);
				if(lastRow)
				{
					cn[cn.length-1]++;
					cell.id=cn.join("_");
				}
				else
				{
					if(clickRow)
					{
						cn=clickRow.Element.id.split("_");
						cn[1]="l";
						cn[cn.length]=0;
						cell.id=cn.join("_");
					}
					else
						cell.id=gn+"_l_"+(g.AllowPaging && g.EIRM?(g.CurrentPageIndex-1)*g.PageSize:0);
				}
				cell.innerHTML="<img src='"+g.BlankImage+"' border=0 imgType='blank' alt='' style='visibility:hidden;'>";
				
			}
			else
			{
				var columnNo=i-fac;
				var column=band.Columns[columnNo];
				if(column.ServerOnly)
				{
					phCellNo++;
					delete cn;
					continue;
				}
				cn[cn.length-2]++;
				cell.id=cn.join("_");
				if(lastRow && lastRow.getAttribute("level"))
				{
					var cl=lastRow.getAttribute("level").split("_");
					cl[cl.length]=i-fac;
					cl[cl.length-2]=parseInt(cl[cl.length-2],10)+1;
					cell.setAttribute("level",cl.join("_"));
				}
				var cwk=cell;
				if(g.UseFixedHeaders && !column.Fixed && !nfrow)
				{
					var nftd=document.createElement("td");
					nftd.colSpan=band.Columns.length-column.Index;
					if(band._optSelectRow)
					{
						
						nftd.className=g.StopperStyle;
						if(g.IsXHTML)
							setHeight=true;
					}
					else
					{
						if(!g.IsXHTML)
							nftd.width="100%";
						else
						{
							nftd.style.verticalAlign="top";
							setHeight=true;
						}
					}
					row.appendChild(nftd);
					var nfd=document.createElement("div");
					nftd.appendChild(nfd);
					nfd.id=g.Id+"_drs";
					nfd.style.overflow="hidden";
					if(!g.IsXHTML)
						nfd.style.width="100%";
					nfd.style.height="100%";
					if(g.IsXHTML)
						nfd.style.position="relative";
					var nftable=document.createElement("table");
					nfd.appendChild(nftable);
					nftable.border="0";
					nftable.cellPadding=g.Element.cellPadding;
					nftable.cellSpacing=g.Element.cellSpacing;
					nftable.style.position="relative";
					nftable.style.tableLayout="fixed";
					nftable.height="100%";
					var nfcgs=document.createElement("colgroup");
					nftable.appendChild(nfcgs);
					for(var j=column.Index;j<band.Columns.length;j++)
					{
						if(band.Columns[j].hasCells() && !band.Columns[j].getHidden())
						{
							var nfcg=document.createElement("col");
							nfcg.width=band.Columns[j].Width;
							nfcgs.appendChild(nfcg);
						}
					}
					for(var j=column.Index;j<band.Columns.length;j++)
					{
						if(band.Columns[j].hasCells() && band.Columns[j].getHidden())
						{
							var nfcg=document.createElement("col");
							nfcg.width="1px";
							nfcg.style.display="none";
							nfcgs.appendChild(nfcg);
						}
					}
					nftable.style.left=-g._scrElem.scrollLeft;
					var nftb=document.createElement("tbody");
					nftable.appendChild(nftb);
					nfrow=document.createElement("tr");
					var nfrn=row.id.split("_");
					nfrn[1]="nfr";
					nfrow.id=nfrn.join("_");
					nftb.appendChild(nfrow);
				}
				
				if(!band._optSelectRow || ig_csom.IsIE55)
					cwk.className=className;
				if(column.CssClass && className!=column.CssClass)
					cwk.className+=(cwk.className.length>0?" ":"")+column.CssClass;
				if(column.Style)
					cwk.style.cssText=column.Style;
				if(band.Columns[i-fac].Hidden)
					cell.style.display='none';					
				var it_str="";
				if(!column.Wrap)
					it_str+="<nobr>";
				switch(column.ColumnType)
				{
					case 3:
						it_str+="<input type='checkbox'"+(igtbl_getAllowUpdate(gn,band.Index,columnNo)==1?"":" disabled")+" on"+(ig_csom.IsIE?"property":"")+"change='igtbl_chkBoxChange(event,\""+gn+"\");'>";
						break;
					case 7:
						var bc=band.Columns[columnNo].ButtonClass;
						var bs=band.Columns[columnNo].ButtonStyle;
						if(column.CellButtonDisplay==1)
							it_str+="<input type='button' style='"+bs+"' onclick=\"igtbl_colButtonClick(event,'"+gn+"');\""+(bc==""?"":" class='"+bc+"'")+">";
						else
							it_str+="&nbsp;";
						break;
					case 9:
						it_str+="<a href=''>&nbsp;</a>";
						break;
					default:
						it_str+="&nbsp;";
						break;
				}
				if(!column.Wrap)
					it_str+="</nobr>";
				cwk.innerHTML=it_str;
			}
			if(nfrow)
			{
				nfrow.appendChild(cell);
				
				if(setHeight && cell.offsetHeight > 0)
				{
					var nftd=nfrow.parentNode.parentNode.parentNode.parentNode;
					nftd.style.height=cell.offsetHeight+"px";
					setHeight=false;
				}
			}
			else
				row.appendChild(cell);
			phCellNo++;
			delete cn;
		}
		rowObj=igtbl_getRowById(row.id);
		if(lastRow && lastRow.getAttribute("level"))
		{
			var rl=lastRow.getAttribute("level").split("_");
			rl[rl.length-1]=parseInt(rl[rl.length-1],10)+1;
			row.setAttribute("level",rl.join("_"));
		}
		else if(clickRow && clickRow.Element.getAttribute("level"))
		{
			var rl=clickRow.Element.getAttribute("level").split("_");
			rl[rl.length]=0;
			row.setAttribute("level",rl.join("_"));
		}
		var parRow=table.parentNode.parentNode.previousSibling;
		if(parRow && parRow.childNodes[0].childNodes.length>0 && parRow.childNodes[0].childNodes[0].tagName=="IMG" && parRow.childNodes[0].childNodes[0].style.display=="none")
			parRow.childNodes[0].childNodes[0].style.display="";
		g._recordChange("AddedRows",rowObj);
		for(var i=0;i<rowObj.Band.Columns.length;i++)
		{
			var cellObj=rowObj.getCell(i);
			if(newRow)
				cellObj.setValue(newRow.getCell(i).getValue());
			else
			{
				cellObj.setValue(cellObj.Column.getValueFromString(cellObj.Column.DefaultValue));
				
				rowObj._dataChanged=1;				
			}
		}
		if(band.Index>0 && table.parentNode.parentNode.style.display=="none")
			igtbl_toggleRow(gn,table.parentNode.parentNode.previousSibling.id,table.parentNode.parentNode.id);
		if(!newRow)
		{
		    if (setActive)
		    {
			    igtbl_setActiveRow(gn,row);
			}
			igtbl_setNewRowImg(gn,row);
		}
		g._calculateStationaryHeader();
		if(g.UseFixedHeaders)
			g.alignDivs();
		if (scrollToView)
		{
		    igtbl_scrollToView(gn,row);
		}
		igtbl_fireEvent(gn,g.Events.InitializeRow,"(\""+gn+"\",\""+row.id+"\");");
		var oldNPB=g.NeedPostBack;
		igtbl_fireEvent(gn,g.Events.AfterRowInsert,"(\""+gn+"\",\""+row.id+"\");");
		if(!oldNPB && g.NeedPostBack && !g.Events.AfterRowInsert[1]&1)
			g.NeedPostBack=false;
	}
	if(g.NeedPostBack)
		igtbl_doPostBack(gn,"");
	
	rowObj._evaluateFilters();
	if(g._recalcRowNumbers)g._recalcRowNumbers(rowObj);	
	if (ig_csom.IsFireFox10) 
	{
		rowObj.Element.style.position = "relative";
	}
	return rowObj;
}

function igtbl_addNewMouseOut(evnt,gn) 
{
	var se=igtbl_srcElement(evnt);
	if(se.tagName == "TD" && se.getAttribute("addNew"))
		igtbl_changeStyle(gn,se,null);
}

function igtbl_updateAddNewStatus()
{
}

function igtbl_updateAddNewBox(gn)
{
	var grid=igtbl_getGridById(gn);
	if(!grid.AddNewBoxVisible)
		return;
	var curBandNo=-1;
	var expandable=false;
	var curRow=null;
	var curRowObj=null;
	if(grid.ActiveCell!="")
	{
		var cell=grid.getActiveCell();
		curRowObj=cell.Row;
		curRow=curRowObj.Element;
		curBandNo=curRowObj.Band.Index;
		if(curRowObj.Expandable && curRowObj.HiddenElement)
			expandable=true;
	}
	else if(grid.ActiveRow!="")
	{
		curRowObj=grid.getActiveRow();
		curRow=curRowObj.Element;
		curBandNo=curRowObj.Band.Index;
		if(curRowObj.Expandable && curRowObj.HiddenElement)
			expandable=true;
	}
	else
	{
		curRowObj=grid.Rows.getRow(0);
		if(curRowObj)
			curRow=curRowObj.Element;
	}
	
	for(var i=0;i<grid.Bands.length;i++)
	{
		
		if(grid.Bands[i].AllowAddNew==2 || grid.Bands[i].AllowAddNew==0 && grid.AllowAddNew!=1 || grid.Bands[i].IsGrouped)
		{
			igtbl_setDisabled(grid.Bands[i].addNewElem,true);
			grid.Bands[i].curTable=null;
		}
		
		else if(curBandNo==-1 && i==0 || 
				i<=curBandNo || 
					i==curBandNo+1 && 
					!grid.Bands[i].IsGrouped && 
					!(grid.Bands[curBandNo].IsGrouped && curRowObj.GroupByRow) && 
					(grid.Bands[curBandNo].getExpandable()==1 || curRowObj.getExpanded() ) && 
					(!curRow.getAttribute("showExpand") || curRowObj.HiddenElement || (curRowObj.getChildRows()==null && grid.Bands[i].AddNewRowVisible==1) ) 
					
				)
		{	
			if(i==curBandNo+1)
			{
				
				if((curRowObj && curRowObj.IsAddNewRow) || 
					grid.LoadOnDemand==3 && (curRowObj && !curRowObj.HiddenElement) &&
					curBandNo!=-1 &&

					
					   
					curRowObj.Expandable 
					)
				{
					igtbl_setDisabled(grid.Bands[i].addNewElem,true);
					grid.Bands[i].curTable=null;
					continue;
				}
				if(expandable)
 					grid.Bands[i].curTable=curRow.nextSibling.childNodes[grid.Bands[i-1].IndentationType==2?0:grid.Bands[i-1].firstActiveCell].childNodes[0];
 				else if(i==0)
 					grid.Bands[i].curTable=grid.Element;
 				else
 					grid.Bands[i].curTable=null;
			}
			
			else
			{
				var cr=curRowObj;
				for(var j=curBandNo;j>=i;j--)
				{
					if(j>0)
						grid.Bands[j].curTable=cr?cr.Element.parentNode.parentNode:null;					
					if(cr)
					do
					{						
						cr=cr.ParentRow;
					}while(cr && cr.GroupByRow)
				}
			}
			igtbl_setDisabled(grid.Bands[i].addNewElem,false);
		}
		else 
		{
			igtbl_setDisabled(grid.Bands[i].addNewElem,true);
			grid.Bands[i].curTable=null;
		}
	}
}

function igtbl_cancelNoMoreRows(gn)
{
	var g=igtbl_getGridById(gn);
	if(!g) return;
	g.noMoreRows=false;
}

// ig_WebGrid_kb.js
// Infragistics UltraWebGrid Script 
// Copyright (c) 2001-2007 Infragistics, Inc. All Rights Reserved.
function igtbl_onKeyDown(evnt,gn,my)
{
	var gs=igtbl_getGridById(gn);
	if(!evnt)evnt=window.event;
	if(!gs||!evnt||!gs.isLoaded())
		return;
	gs.event=evnt;
	var processed=false;
	var canceled=false;
	if(!gs.Activation.AllowActivation)
		return;
	var se=igtbl_srcElement(evnt);
	if(gs._focus==null&&se&&!igtbl_contains(gs.Element.parentNode.parentNode,se))
		return;
	if(gs._focus===false||igtbl_inEditMode(gn))return;
	var te=gs.Element;
	var cell=gs.getActiveCell();
	var row=gs.getActiveRow();
	if(!my&&se&&se.tagName&&se.tagName.length>4&&(!cell||cell.Column.ColumnType!=7))
		return;
	var elId,nextCell=null,nextRow=null,key=evnt.keyCode;
	if(cell)
		elId=cell.Element.id;
	else if(row)
		elId=row.Element.id;
	else 
		return;
	if(igtbl_fireEvent(gn,gs.Events.KeyDown,"(\""+gn+"\",\""+elId+"\","+key+")")==true)
		return;
	switch(key)
	{
		case 9: 
			if(cell)
			{
				if(evnt.ctrlKey)
					nextRow=cell.Row;
				else
					nextCell=cell.getNextTabCell(evnt.shiftKey,true
                            ,true
					);
			}
			else
			{
				if(evnt.ctrlKey)
					nextCell=row.getCell(0);
				else
					nextRow=row.getNextTabRow(evnt.shiftKey,false,true);
			}
			if(evnt.shiftKey)
			{
				if(nextCell)
				{
					te.setAttribute("startPointCell",nextCell.Element.id);
					te.setAttribute("selectMethod","cell");
					te.setAttribute("selectTable",nextCell.Row.Element.parentNode.parentNode.id);
					te.setAttribute("startPointRow",nextCell.Row.Element.id);
				}
				else if(nextRow)
				{
					te.setAttribute("selectMethod","row");
					te.setAttribute("selectTable",nextRow.Element.parentNode.parentNode.id);
					te.setAttribute("startPointRow",nextRow.Element.id);
				}
			}
			if(row && (row.IsAddNewRow && (!nextCell || nextCell.Row!=row)))
			{
				if(row.commit())
				{
					var nac=null;
					if(cell)
					{
						nac=row.getCell(0);
						while(nac && !nac.Column.getVisible())
							nac=row.getCell(nac.Column.Index+1);
						if(nac)
							nextCell=nac;
					}
					if(!nac)
						nextRow=row;
					processed=true;
				}
				else if(row.OwnerCollection.length>0)
				{
					if(row.Band.AddNewRowView==2 && evnt.shiftKey)
					{
						var nac=null;
						var nar=row.OwnerCollection.getRow(row.OwnerCollection.length-1);
						while(nar.Rows && nar.getExpanded())
						{
							if(nar.Rows.AddNewRow && nar.Band.AddNewRowView==2)
								nar=nar.Rows.AddNewRow;
							else
								nar=nar.Rows.getRow(nar.Rows.length-1);
						}
						if(cell && nar)
						{
							nac=nar.getCell(nar.cells.length-1);
							while(nac && !nac.Column.getVisible())
								nac=nar.getCell(nac.Column.Index-1);
							if(nac)
								nextCell=nac;
						}
						if(!nac)
							nextRow=nar;
						processed=true;
					}
					else if(row.Band.AddNewRowView==1 && !evnt.shiftKey)
					{
						var nac=null;
						var nar=row.OwnerCollection.getRow(0);
						if(cell)
						{
							nac=nar.getCell(0);
							while(nac && !nac.Column.getVisible())
								nac=nar.getCell(nac.Column.Index+1);
							if(nac)
								nextCell=nac;
						}
						if(!nac)
							nextRow=nar;
						processed=true;
					}
				}
			}
			if(nextCell || nextRow)
				processed=true;
			else
			{
				if(row)
				{
					if(row.processUpdateRow)
						row.processUpdateRow();
				}
			}
			break;
		case 13: 
			var b=igtbl_getElementById(gn+"_bt");
			if(b && b.style.display!="none")
			{
				processed=true;
				igtbl_colButtonClick(evnt,gn);
			}
			else if(cell)
			{
				processed=true;
				if(cell.Column.ColumnType==3)
				{
					if(cell.isEditable())
						cell.setValue(!cell.getValue());
				}
				else if(cell.Column.ColumnType==7)
				{
					if(cell.Column.CellButtonDisplay==0)
						b.fireEvent("onclick");
					else
					{
						var bi=cell.Element.childNodes[0];
						if(bi.tagName=="NOBR")
							bi=bi.childNodes[0];
						if(typeof(bi.fireEvent)!="undefined")
							bi.fireEvent("onclick");
					}
				}
				else if(cell.getTargetURL())
					igtbl_navigateUrl(cell.getTargetURL());
				else
					cell.beginEdit();
			}
			else if(row && row.GroupByRow)
			{
				processed=true;
				row.toggleRow();
			}
			break;
		case 16: 
			processed=true;
			if(cell)
			{
				if(!te.getAttribute("startPointCell"))
					te.setAttribute("startPointCell",cell.Element.id);
				te.setAttribute("selectMethod","cell");
				row=cell.Row;
				if(igtbl_getSelectTypeCell(gn,row.Band.Index)==3)
				{
					te.setAttribute("shiftSelect",true);
					te.setAttribute("startPointCell",cell.Element.id);
				}
			}
			else
			{
				te.setAttribute("selectMethod","row");
				if(igtbl_getSelectTypeRow(gn,row.Band.Index)==3)
				{
					te.setAttribute("shiftSelect",true);
					if(!te.getAttribute("startPointRow"))
						te.setAttribute("startPointRow",row.Element.id);
				}
			}
			te.setAttribute("selectTable",row.Element.parentNode.parentNode.id);
			break;
		case 32: 
			if(cell)
			{
				if(igtbl_getSelectTypeCell(gn,cell.Column.Band.Index)==3)
				{
					processed=true;
					cell.setSelected(!cell.getSelected());
				}
				else if(cell.Column.ColumnType==3)
				{
					processed=true;
					if(cell.isEditable())
					{
						var val=cell.getValue();
						if(val==="false") val=false;
						cell.setValue(!val);
					}
				}
			}
			else if(row)
			{
				processed=true;
				if(igtbl_getSelectTypeRow(gn,row.Band.Index)==3)
					row.setSelected(!row.getSelected());
			}
			break;
		case 35: 
			if(cell)
			{
				nextCell=cell.Row.getCell(cell.Row.cells.length-1);
				if(!nextCell.Column.getVisible())
					nextCell=nextCell.getPrevCell();
				if(nextCell==cell)
					nextCell=null;
			}
			else
			{
				nextRow=row.OwnerCollection.getRow(row.OwnerCollection.length-1);
				if(nextRow.getHidden())
					nextRow=nextRow.getPrevRow(true,true);
				if(nextRow==row)
					nextRow=null;
			}
			if(nextCell || nextRow)
				processed=true;
			break;
		case 36: 
			if(cell)
			{
				nextCell=cell.Row.getCell(0);
				while (nextCell && !nextCell.Element)
				{
				    
				    nextCell = nextCell.getNextCell();
				}
				if(nextCell && !nextCell.Column.getVisible())
				{
					nextCell=nextCell.getNextCell();
				}
				if(nextCell==cell)
				{
					nextCell=null;
				}
			}
			else
			{
				nextRow=row.OwnerCollection.getRow(0);
				if(nextRow.getHidden())
					nextRow=nextRow.getNextRow(true,true);
				if(nextRow==row)
					nextRow=null;
			}
			if(nextCell || nextRow)
				processed=true;
			break;
		case 37: 
			if(cell)
			{
				var possibleNextCell=cell;
				do
				{
					nextCell=possibleNextCell.getPrevCell();
					if(!nextCell)
					{
						var prevRow = possibleNextCell.Row.getPrevRow(true,true);
						if(prevRow)
						{
							nextCell=prevRow.getCell(prevRow.cells.length-1);
							if(!nextCell.Column.getVisible() || !nextCell.getElement())
								nextCell=nextCell.getPrevCell();
						}
					}
					possibleNextCell=nextCell;	
				}while(nextCell&&!nextCell.Element)			
				if(nextCell)
					processed=true;
				else
					gs.getDivElement().scrollLeft=0;
			}
			else if(row.Band.getExpandable()==1)
			{
				processed=true;
				row.setExpanded(false);
			}
			break;
		case 39: 
			if(cell)
			{
				var possibleNextCell=cell;
				do
				{	
					nextCell=possibleNextCell.getNextCell();							
					if(!nextCell)
					{	
						var nextRow = possibleNextCell.Row.getNextRow(true,true);		
						if(nextRow)
						{
							nextCell=nextRow.getCell(0);
							if(!nextCell.Column.getVisible() || !nextCell.getElement())
								nextCell=nextCell.getNextCell();
						}
					}	
					possibleNextCell=nextCell;	
				}while(nextCell&&!nextCell.getElement())
				if(nextCell)
					processed=true;
			}
			else if(row.Band.getExpandable()==1)
			{
				processed=true;
				row.setExpanded(true);
			}
			break;
		case 38: 
			if(cell && cell.Row.getPrevRow(true,true))
			{
				var nr=cell.Row.getPrevRow(true,true);
				while(!nextCell && nr)
				{
					nextCell=nr.getCellByColumn(cell.Column);
					nr=nr.getPrevRow(true,true);
                    
					if (nextCell && nextCell.Element==null)nextCell=null;
				}				
			}
			else if(row)
				nextRow=row.getPrevRow(true,true);
			if(nextCell || nextRow)
				processed=true;
			else if(row && row.Band.Index==0)
				gs.getDivElement().scrollTop=0;
			break;
		case 40: 
			if(cell && cell.Row.getNextRow(true,true))
			{
				var nr=cell.Row.getNextRow(true,true);
				while(!nextCell && nr)
				{
					nextCell=nr.getCellByColumn(cell.Column);
					nr=nr.getNextRow(true,true);
					
					if (nextCell && nextCell.Element==null)nextCell=null;
				}
			}
			else if(row)
				nextRow=row.getNextRow(true,true);
			if(!nextCell && !nextRow && gs.Node && gs.RowsRange>0 && gs.RowsServerLength>gs.Rows.length
				&& gs.XmlLoadOnDemandType!=2

			)
			
			if(gs.ReadyState==0)
				gs.invokeXmlHttpRequest(gs.eReqType.MoreRows);
			if(nextCell || nextRow)
				processed=true;
			break;
		default:
			if(evnt.ctrlKey && (key==67 || key==45 || key==88 || key==46 || key==86))
			{
				switch(key)
				{
					case 67: 
					case 45: 
						gs.copy();
						break;
					case 88: 
					case 46: 
						gs.cut();
						break;
					case 86: 
						gs.paste();
						break;
				}
				canceled=true;
			}
			else if(evnt.shiftKey && key==45)
			{
				gs.paste();
				canceled=true;
			}
			else
			if(key==46) 
			{
				processed=true;
				gs.deleteSelectedRows();
			}
			else if(key>=48 && key<=57 || key>=54 && key<=90 || key>=96 && key<=111 || key>=186 && key<=192 || key>=219 && key<=222 || key==113 || key==107 || key==109)
			{
				if((key==107 || key==109) && (!cell || !cell.isEditable())) 
				{
					if(cell && cell.Row.Band.getExpandable()==1)
					{
						processed=true;
						cell.Row.setExpanded(key==107);
					}
					else if(row && row.Band.getExpandable()==1)
					{
						processed=true;
						row.setExpanded(key==107);
					}
					break;
				}
				else if(cell)
				{
				    
					if(cell.isEditable() && cell.Column.ColumnType!=3 )
						cell.beginEdit(key);
					else if(cell.Column.getAllowUpdate()==3)
						cell.Row.editRow();
				}
				else if(row && key==113)
					row.editRow();
			}
			break;
	}
	if(
		!canceled &&
		(nextCell || nextRow))
	{
		if(nextCell)
		{
			var stc=nextCell.Row.Band.getSelectTypeCell();
			if((!evnt.shiftKey || key==9) && (!evnt.ctrlKey || stc!=3))
				igtbl_clearSelectionAll(gn);
			if(evnt.shiftKey && key!=9)
				igtbl_selectRegion(gn,nextCell.Element);
			else if(!evnt.ctrlKey && stc==3 || stc==2)
				nextCell.setSelected();
			nextCell.activate();
			nextCell.scrollToView();
			
			if(nextCell.hasButtonEditor(igtbl_cellButtonDisplay.OnMouseEnter))
				igtbl_showColButton(gn,nextCell.Element);
			else if(key==9 && nextCell.Row.Band.getCellClickAction()==1)
				igtbl_EnterEditMode(gn);
		}
		else
		{
			var str=nextRow.Band.getSelectTypeRow();
			if((!evnt.shiftKey || key==9) && (!evnt.ctrlKey || str!=3))
				igtbl_clearSelectionAll(gn);
			igtbl_setActiveRow(gn,nextRow.getFirstRow());
			if(evnt.shiftKey && key!=9)
			{
			    
			    var firstElem = igtbl_getFirstCell(gn,nextRow.Element);
			    if(firstElem.previousSibling)firstElem=firstElem.previousSibling;
			    igtbl_selectRegion(gn,firstElem);
				
			}
			else if(!evnt.ctrlKey && str==3 || str==2)
				nextRow.setSelected();
			nextRow.scrollToView();
		}
		if(gs.NeedPostBack)
			igtbl_doPostBack(gn);
	}
	if(canceled)
		return ig_cancelEvent(evnt);
	else
	if(processed)
	{
		if(key!=16 && !evnt.shiftKey)
		{
			te.removeAttribute("selectMethod");
			te.removeAttribute("selectTable");
			te.removeAttribute("startPointRow");
			te.removeAttribute("startPointCell");
		}
		ig_cancelEvent(evnt);
	}
}

function igtbl_onKeyUp(evnt,gn)
{
	var gs=igtbl_getGridById(gn);
	if(!evnt)evnt=window.event;
	if(!gs||!evnt||!gs.Activation.AllowActivation)
		return;
	gs.event=evnt;
	var se=igtbl_srcElement(evnt);
	if(gs._focus==null&&!igtbl_contains(gs.Element.parentNode.parentNode,se))
		return;
	if(gs._focus===false||igtbl_inEditMode(gn))return;
	var te=gs.Element,cell=gs.oActiveCell;
	if(!cell)
		cell=gs.oActiveRow;
	if(cell)
		gs.fireEvent(gs.Events.KeyUp,[gs.Id,cell.Element.id,evnt.keyCode]);
}

function igtbl_rowFromRows(rows,n)
{
	if(n<0 || !rows)
		return null;
	var i=0,j=0;
	var row=rows[0];
	
	while(row && (row.getAttribute("filterRow") || row.getAttribute("addNewRow")))
		row=rows[++j];
	while(row && i<n)
	{
		if(i>=rows.length-1)
			return null;
		row=rows[++j];
		if(row && (row.getAttribute("hiddenRow") || row.parentNode.tagName=="TFOOT"))
			row=rows[++j];
		i++;
	}
	return row;
}

function igtbl_getFirstCell(gn,row)
{
	if(row.getAttribute("groupRow"))
		return row.childNodes[0].childNodes[0].childNodes[0].rows[0].cells[0];
	else
		return row.cells[igtbl_getBandFAC(gn,row)];
}

function igtbl_getParentRow(gn,row)
{
	var l=igtbl_getRowLevel(row.id);
	if(l.length==1)
	{
		delete l;
		return null;
	}
	var pl=igtbl_copyArray(l,l.length-1);
	var pr=igtbl_getRow(gn,pl);
	delete pl;
	delete l;
	return pr;
}

function igtbl_getCurRow(c)
{
	var r=null;
	while(c && !r)
		if(c.tagName=="TR" && !c.getAttribute("hiddenRow"))
			r=c;
		else
			c=c.parentNode;
	if(r && r.getAttribute("groupRow"))
		r=r.parentNode.parentNode.parentNode.parentNode;
	return r;
}

function igtbl_getFirstSibRow(gn,row)
{
	var rl=igtbl_getRowLevel(row.id);
	var rlns=igtbl_copyArray(rl);
	rlns[rlns.length-1]=0;
	var ns=igtbl_getRow(gn,rlns);
	while(ns && (ns.getAttribute("deleted") || ns.style.display=="none"))
	{
		rlns[rlns.length-1]++;
		ns=igtbl_getRow(gn,rlns);
	}
	delete rlns;
	delete rl;
	return ns;
}

function igtbl_getLastSibRow(gn,row)
{
	var lastRow=row;
	var ns=igtbl_getNextSibRow(gn,lastRow);
	while(ns)
	{
		lastRow=ns;
		ns=igtbl_getNextSibRow(gn,lastRow);
	}
	return lastRow;
}

function igtbl_getFirstChildRow(gn,row)
{
	var rl=igtbl_getRowLevel(row.id);
	var rlc=igtbl_copyArray(rl);
	rlc[rlc.length]=0;
	var ns=igtbl_getRow(gn,rlc);
	if(ns && (ns.getAttribute("deleted") || ns.style.display=="none"))
		ns=igtbl_getNextSibRow(gn,ns);
	delete rlc;
	delete rl;
	return ns;
}

function igtbl_getLastChildRow(gn,row)
{
	var ns=igtbl_getFirstChildRow(gn,row);
	if(ns)
	{
		var r=igtbl_getNextSibRow(gn,ns);
		while(r)
		{
			ns=r;
			r=igtbl_getNextSibRow(gn,ns);
		}
	}
	return ns;
}

function igtbl_ActivateNextCell(gn)
{
	var gs=igtbl_getGridById(gn);
	if(!gs || !gs.Activation.AllowActivation)
		return null;
	var cell=gs.oActiveCell;
	if(!cell)
		return null;
	var nextCell=cell.getNextTabCell(false,true);
	if(nextCell)
	{
		igtbl_setActiveCell(gn,nextCell.Element);
		if(gs.getActiveCell()==nextCell)
		{
			igtbl_clearSelectionAll(gn);
			igtbl_selectCell(gn,nextCell);
			nextCell.scrollToView();
			if(gs.NeedPostBack)
				igtbl_doPostBack(gn);
			return nextCell.Element;
		}
		else
			return cell.Element;
	}
	return null;
}

function igtbl_ActivatePrevCell(gn)
{
	var gs=igtbl_getGridById(gn);
	if(!gs || !gs.Activation.AllowActivation)
		return null;
	var cell=gs.oActiveCell;
	if(!cell)
		return null;
	var prevCell=cell.getNextTabCell(true,true);
	if(prevCell)
	{
		igtbl_setActiveCell(gn,prevCell.Element);
		if(gs.getActiveCell()==prevCell)
		{
			igtbl_clearSelectionAll(gn);
			igtbl_selectCell(gn,prevCell);
			prevCell.scrollToView();
			if(gs.NeedPostBack)
				igtbl_doPostBack(gn);
			return prevCell.Element;
		}
		else
			return cell.Element;
	}
	return null;
}

function igtbl_EnterEditMode(gn)
{
	var gs=igtbl_getGridById(gn);
	if(!gs || !gs.Activation.AllowActivation)
		return;
	var cell=gs.oActiveCell;
	if(!cell)
		return;
	cell.beginEdit();
	gs._exitEditCancel=false;
}

function igtbl_EndEditMode(gn)
{
	igtbl_hideEdit(gn);
}

function igtbl_getActiveCell(gn)
{
	var gs=igtbl_getGridById(gn);
	if(!gs || !gs.Activation.AllowActivation)
		return null;
	return gs.getActiveCell();
}

function igtbl_getActiveRow(gn)
{
	var gs=igtbl_getGridById(gn);
	if(!gs || !gs.Activation.AllowActivation)
		return null;
	return gs.getActiveRow();
}

function igtbl_getRowLevel(rowId)
{
	var rowObj=igtbl_getElementById(rowId);
	if(rowObj.getAttribute("level"))
		rowId=rowObj.getAttribute("level");
	var rn=rowId.split("_");
	var fn=rn.length-1;
	while(fn>=0)
	{
		if(!parseInt(rn[fn],10) && rn[fn]!="0")
			break;
		fn--;
	}
	fn++;
	var res=new Array();
	for(var i=fn;i<rn.length;i++)
		res[i-fn]=parseInt(rn[i],10);
	return res;
}

function igtbl_getNextSibRow(gn,row)
{
	var rl=igtbl_getRowLevel(row.id);
	var rlns=igtbl_copyArray(rl);
	rlns[rlns.length-1]++;
	var ns=igtbl_getRow(gn,rlns);
	while(ns && (ns.getAttribute("deleted") || ns.style.display=="none"))
	{
		rlns[rlns.length-1]++;
		ns=igtbl_getRow(gn,rlns);
	}
	delete rlns;
	delete rl;
	return ns;
}

function igtbl_getPrevSibRow(gn,row)
{
	var rl=igtbl_getRowLevel(row.id);
	var rlps=igtbl_copyArray(rl);
	rlps[rlps.length-1]--;
	var ps=igtbl_getRow(gn,rlps);
	while(ps && (ps.getAttribute("deleted") || ps.style.display=="none"))
	{
		rlps[rlps.length-1]--;
		ps=igtbl_getRow(gn,rlps);
	}
	delete rlps;
	delete rl;
	return ps;
}

function igtbl_copyArray(src,count)
{
	if(!count)
		count=src.length;
	var dest=new Array();
	for(var i=0;i<count;i++)
		dest[i]=src[i];
	return dest;
}

function igtbl_getRow(gn,l)
{
	if(!l.length || !l[0] && l[0]!=0)
		return null;
	var te=igtbl_getGridById(gn).Element;
	var clr=te.tBodies[0].rows;
	var row=igtbl_rowFromRows(clr,l[0]);
	if(row && row.parentNode.tagName=="TFOOT")
		return;
	for(var i=1;i<l.length;i++)
		if(!row || !l[i] && l[i]!=0)
			break;
		else
		{
			clr=igtbl_getChildRows(gn,row);
			row=igtbl_rowFromRows(clr,l[i]);
		}
	return row;
}

// ig_WebGrid_xml.js
// Infragistics UltraWebGrid Script 
// Copyright (c) 2001-2007 Infragistics, Inc. All Rights Reserved.
function igtbl_onReadyStateChange(gridName)
{
	var gn;
	var g=this._control;
	
	if (!g && gridName)
	{
	    g=igtbl_getGridById(gridName);
	}
	gn=g.Id;
	var xmlHttp=this._xmlHttpRequest;
	if (!xmlHttp)
	{
        
	    xmlHttp=this.__xmlHttpRequest;
	}
	if(xmlHttp.readyState==4)
	{
		g.responseText=xmlHttp.responseText;
		g.ReqType=this.ReqType;
		var r=this.RowToQuery;
		g.RowToQuery=r;
		if (g.XmlResponseObject)
		{
			var a = g.XmlResponseObject;
			g.XmlResponseObject = null;
			a.Grid = null;
			igtbl_dispose(a);
		}
		var xmlRespObj = new Object();
		g.XmlResponseObject=xmlRespObj;
		xmlRespObj.ResponseStatus=g.eError.Ok;
		xmlRespObj.ReqType=g.ReqType;
		xmlRespObj.Tag=null;
		xmlRespObj.XmlResp=null;
		xmlRespObj.Cancel=false;
		if(g.responseText=="")
			xmlRespObj.ResponseStatus=g.eError.LoadFailed;
		else
		{
			var start=g.responseText.indexOf("<xml");
			var end=g.responseText.indexOf("</xml>")+6;
			if(!ig_csom.IsIE)
				g.XmlResp=g.DOMParser.parseFromString(g.responseText.substr(start,end-start),"text/xml");
			else
				g.XmlResp.loadXML(g.responseText.substr(start,end-start));
			var node=g.XmlResp.selectSingleNode("xml/UltraWebGrid/XmlHTTPResponse");
			if(node)
			{
				xmlRespObj.Grid = g;
				xmlRespObj.Node = node;
				xmlRespObj.StatusMessage = unescape(node.selectSingleNode("StatusMessage").text);
				xmlRespObj.Tag = unescape(node.selectSingleNode("Tag").text);
				xmlRespObj.XmlResp=g.XmlResp;
				if(node.getAttribute("ResponseStatus")!=0)
					xmlRespObj.ResponseStatus=g.eError.LoadFailed;
				xmlRespObj.Cancel=(node.selectSingleNode("Cancel").text=="true");	
				var srlNode=node.selectSingleNode("ServerRowsLength");
				if(srlNode)
				{
					xmlRespObj.ServerRowsLength=igtbl_parseInt(srlNode.text);
					
					
						
					
					
					if(g.ReqType!=g.eReqType.ChildRows)
						g.RowsServerLength=xmlRespObj.ServerRowsLength;
				}
				
				xmlRespObj.applyCssClasses = function()
				{
					var cssNode=this.Node.selectSingleNode("Css");
					if(cssNode)
					{
						var ssIndex=document.styleSheets.length-1;
						var styleSheet=null;
						if(ssIndex>=0)
							styleSheet=document.styleSheets[ssIndex];
						while(styleSheet && styleSheet.href)
						{
							if(--ssIndex>=0)
								styleSheet=document.styleSheets[ssIndex];
							else
								styleSheet=null;
						}
						
						
						if(styleSheet)
							this.Grid._asyncCssClasses=ig_shared.getCBManager()._setCss(this.Grid._asyncCssClasses, styleSheet.cssText+cssNode.text, null, true);
					}
				}
			}
			else
			{
				xmlRespObj.StatusMessage=g.responseText;
				xmlRespObj.ResponseStatus=g.eError.LoadFailed;
				var de=g.getDivElement();
				de.removeAttribute("oldST");
				de.removeAttribute("noOnScroll");
			}
		}
		if(g.fireEvent(g.Events.XmlHTTPResponse,[g.Id,r&&r.Element?r.Element.id:"",g.XmlResponseObject]) || xmlRespObj.ResponseStatus==g.eError.LoadFailed)
		{
			if(g.Events.XmlHTTPResponse[1]==1)
				g.NeedPostBack=false;
			g.ReadyState=g.eReadyState.Ready;
			g.Error=g.eError.LoadFailed;
			if(g.ReqType==g.eReqType.UpdateRow)
				g.RowToQuery._generateUpdateRowSemaphore(true);
			if(g._servingXmlHttp)
				igtbl_dispose(g._servingXmlHttp);
			g._hidePI();
			this.RowToQuery=null;
			return;
		}
		if(g.Events.XmlHTTPResponse[1]==1)
			g.NeedPostBack=false;
		switch(g.ReqType)
		{
			case g.eReqType.ChildRows:
				igtbl_requestChildRowsComplete(gn);
				break;
			case g.eReqType.MoreRows:
				
				g.requestingMoreRows = false;
				igtbl_requestMoreRowsComplete(gn);
				igtbl_updateFooters(gn);
				break;
			case g.eReqType.Refresh:
			case g.eReqType.Sort:
				igtbl_requestSortComplete(gn);
				igtbl_updateFooters(gn);
                
                g._calculateStationaryHeader();
				
				g._removeChange("PageChanged",g);
				break;
			case g.eReqType.UpdateRow:
				igtbl_requestUpdateRowComplete(gn);
				break;
			case g.eReqType.Page:
				igtbl_requestPageComplete(gn);
				igtbl_updateFooters(gn);
				break;
			case g.eReqType.Scroll:
				igtbl_requestScrollComplete(gn);
				break;
			case g.eReqType.FilterDropDownFill:				
				igtbl_requestFilterDropDownFillComplete(gn);
				break;
			case g.eReqType.Filter:
				igtbl_requestFilterComplete(gn);
				igtbl_updateFooters(gn);
				
				g._calculateStationaryHeader();
				break;
            case g.eReqType.UpdateCell:
                igtbl_requestUpdateCellComplete(gn);
                break;
			default:
				igtbl_requestComplete(gn
					,xmlHttp
				);
				break;
		}
		g.ReadyState=g.eReadyState.Ready;
		g.fireEvent(g.Events.AfterXmlHttpResponseProcessed,[g.Id]);
		if(g.ReqType!=g.eReqType.None)
		{
			g.RowToQuery=null;
			this.RowToQuery=null;
		}
		g.ReqType=g.eReqType.None;
		g.Error=g.eError.Ok;
		if(g._servingXmlHttp)
			igtbl_dispose(g._servingXmlHttp);
		g._hidePI();
		this.RowToQuery=null;
	}
}

function igtbl_requestUpdateCellComplete(gn)
{
    var gs=igtbl_getGridById(gn);
	for(var cell in gs.ChangedCells)
	{
	    gs._removeChange("ChangedCells",igtbl_getCellById(cell));
	}
}

function igtbl_requestChildRowsComplete(gn)
{
	var g=igtbl_getGridById(gn);
	var r=g.RowToQuery;
	{
		var rowsNode=g.XmlResp.selectSingleNode("form");
		if(!rowsNode)
			rowsNode=g.XmlResp;
		
		var selStr="xml/UltraWebGrid/Rs";
		for(var i=0;i<=r.Band.Index;i++)
		{
			var cband=g.Bands[i];
			if(cband.SortedColumns && cband.SortedColumns.length>0)
				for(var j=0;j<cband.SortedColumns.length;j++)
				{
					var col=igtbl_getColumnById(cband.SortedColumns[j]);
					if(col.IsGroupBy)
						selStr+="/Group/Rs"
					else
						break;
				}
			selStr+="/R/Rs"
		}
		rowsNode=rowsNode.selectSingleNode(selStr);
			
		if(rowsNode!=null)
		{
			r.Node.appendChild(rowsNode);			
			if(!r.Rows)
				r.Rows=new igtbl_Rows(r.Node.selectSingleNode("Rs"), r.Band.Grid.Bands[r.Band.Index+1], r);
			else
			{
				
				r.Rows.Node=rowsNode;
				r.Rows.SelectedNodes=rowsNode.selectNodes("R");
				if(r.Rows.SelectedNodes.length==0)
					r.Rows.SelectedNodes=rowsNode.selectNodes("Group");
				r.Rows.length=r.Rows.SelectedNodes.length;
			}
			
			var rowIslandFilters=null;
			if (rowsNode)rowIslandFilters=eval(rowsNode.getAttribute("columnFilters"));
			if (rowIslandFilters)
			{	
				_igtbl_processServerPassedColumnFilters(rowIslandFilters,g);
			}
			r.prerenderChildRows();
			r.Rows.render();
		}
	}
	r._setExpandedComplete(true);
}

function igtbl_onScrollXml(evnt,gn)
{
	var g=igtbl_getGridById(gn);
	g.event=evnt;
	var de=g.getDivElement();
	if(g.noMoreRows)
		return;
	if(de && de.scrollHeight==de.scrollTop+de.clientHeight && g.RowsRange>0
		&& (g.XmlLoadOnDemandType==0
		|| g.XmlLoadOnDemandType==4
		)
		|| (g.XmlLoadOnDemandType==1 && de.parentNode.childNodes[1].scrollHeight<=de.scrollTop+de.clientHeight + 50)
	)
	{
		if(g.RowsServerLength>g.Rows.length)
		{
			
			if(g.ReadyState==0)
			g.invokeXmlHttpRequest(g.eReqType.MoreRows);
			return igtbl_cancelEvent(evnt);
		}
	}
	if(g.XmlLoadOnDemandType==2)
	{
		if(g._vScrTimer)
			window.clearTimeout(g._vScrTimer);
		
		if(!g.fireEvent(g.Events.XmlVirtualScroll,[g.Id,Math.floor(de.scrollTop/g.getDefaultRowHeight())]))
			g._vScrTimer=window.setTimeout("igbtl_vScrollGrid('"+gn+"')",g.VirtualScrollDelay);
	}
}

function igbtl_vScrollGrid(gn)
{
	var g=igtbl_getGridById(gn);
	delete g._vScrTimer;
	g.invokeXmlHttpRequest(g.eReqType.Scroll);
}

function igtbl_requestMoreRowsComplete(gn)
{
	var g=igtbl_getGridById(gn);
	{
		var node=g.XmlResp.selectSingleNode("form");
		if(!node)
			node=g.XmlResp;
		node=node.selectSingleNode("xml/UltraWebGrid/Rs");
		if(!node)
		{
			igtbl_cancelNoOnScroll(gn);
			return;
		}
		g.Node.appendChild(node);
		var strTransform=g.Rows.applyXslToNode(node,g.Rows.SelectedNodes.length);
		if(strTransform)
		{
			g._innerObj.innerHTML="<table>"+strTransform+"</table>";
    		g.Node.removeChild(node);
			var nodes=node.selectNodes("R");
			if(nodes.length==0)
				nodes=node.selectNodes("Group");
			g.Rows.length+=nodes.length;
			g.RowsRetrieved+=nodes.length;
			
			var beforeWidth = g.Rows.Element.parentNode.offsetWidth;
			for(var i=0;i<nodes.length;i++)
			{
				g.Rows.Node.appendChild(nodes[i]);
				g.Rows.Element.appendChild(g._innerObj.firstChild.rows[0]);
			}
			igtbl_fixDOEXml();
			g.Rows.SelectedNodes=g.Rows.Node.selectNodes("R");
			if(g.Rows.SelectedNodes.length==0)
				g.Rows.SelectedNodes=g.Rows.Node.selectNodes("Group");
			if(g._scrElem && beforeWidth < g.Rows.Element.parentNode.offsetWidth)
			{
				
				g._scrElem.firstChild.style.width="";
			}
			g.alignDivs(0,true);
		}
	}
	
	g.Rows.setLastRowId(g.Rows.length?g.Rows.getRow(g.Rows.length-1).Id:null);
	
	
	var de=g.getDivElement();
	if ((g.XmlLoadOnDemandType==3 && g.Rows.length<g.RowsServerLength) || 
		(g.XmlLoadOnDemandType==1 && de.parentNode.childNodes[1].scrollHeight<=de.scrollTop+de.clientHeight + 50))
		window.setTimeout("_igtbl_getMoreRows('"+g.Id+"');",100);
	if(g.XmlLoadOnDemandType==4)
	{
		g._removeChange("RowsRetrieved",g);
		g._recordChange("RowsRetrieved",g,g.RowsRetrieved);
	}

	g.cancelNoOnScrollTimeout=window.setTimeout("igtbl_cancelNoOnScroll('"+g.Id+"')",100);
}

function igtbl_isArLess(a1,a2)
{
	if(a1.length<a2.length)
		return true;
	if(a1.length>a2.length)
		return false;
	for(var i=0;i<a1.length;i++)
	{
		if(a1[i]<a2[i])
			return true;
		if(a1[i]>a2[i])
			return false;
	}
	return false;
}

function igtbl_sortRowIdsByClctn(rc)
{
	var ar=new Array(),i=0;
	for(var rowId in rc)
	{
		var row=igtbl_getRowById(rowId);
		if(row)
			ar[i++]=row.getLevel();
		else
			ar[i++]=rowId.split('_').slice(1);
	}
	for(var i=0;i<ar.length;i++)
		for(var j=0;j<ar[i].length;j++)
			ar[i][j]=parseInt(ar[i][j],10);
	var sorted=false;
	while(!sorted)
	{
		sorted=true;
		for(var i=0;i<ar.length-1;i++)
			if(igtbl_isArLess(ar[i],ar[i+1]))
			{
				var a=ar[i];
				ar[i]=ar[i+1];
				ar[i+1]=a;
				sorted=false;
			}
	}
	return ar;
}

function _igtbl_PagerRedraw(g)
{
	var node=g.XmlResp.selectSingleNode("form");
	if(!node)
		node=g.XmlResp;
    node=node.selectSingleNode("xml/UltraWebGrid/Pager");
	
    var pager = igtbl_getDocumentElement(g.UniqueID+"_pager");
    if(pager)
    {
	    if(!pager.length)
	    {
		    var oldElem = pager;
		    pager = new Array(1);
		    pager[0] = oldElem;
	    }
	    for (var i=0;i<pager.length;i++)
		    pager[i].innerHTML = unescape(node.getAttribute("Labels"));
	    
	    g.CurrentPageIndex=igtbl_parseInt(node.getAttribute("CurrentPageIndex"));
	    
	    
	    g.PageCount=igtbl_parseInt(node.getAttribute("PageCount"));
	 }
}

function igtbl_requestPageComplete(gn)
{
	var g=igtbl_getGridById(gn);
	{
		var node=g.XmlResp.selectSingleNode("form");
		if(!node)
			node=g.XmlResp;		
		if (node)
		{
			g.clearSelectionAll();
			g.setActiveCell(null);
			g.setActiveRow(null);
			igtbl_requestSortComplete(gn);
			
			
			g._removeChange("PageChanged",g);
			g._recordChange("PageChanged",g,g._pageToGo);
		}
	}
}


function igtbl_refillXmlGrid(gn)
{
	var g=igtbl_getGridById(gn);
	{
		var node=g.XmlResp.selectSingleNode("form");
		if(!node)
			node=g.XmlResp;
		if (node)
		{
			g.clearSelectionAll();
			g.setActiveCell(null);
			g.setActiveRow(null);
			igtbl_requestSortComplete(gn);
		}
	}
	g._calculateStationaryHeader();
}

function igtbl_requestScrollComplete(gn)
{
	var g=igtbl_getGridById(gn);
	igtbl_refillXmlGrid(gn);
	var de=g.getDivElement();
	de.removeAttribute("oldST");
	de.removeAttribute("noOnScroll");
}




function _igtbl_replaceRowIsland(g,node,rows)
{
	igtbl_replaceChild(rows.Node.parentNode,node,rows.Node);
	rows.Node=node;
	rows.SelectedNodes=node.selectNodes("R");
	// AK 3/9/2006 BR10794: Cannot click on Expansion indicator when XML Paging and GroupingBy a column initially on server side. 
	if(rows.SelectedNodes.length==0)
		rows.SelectedNodes=node.selectNodes("Group");
	var arIndex=-1,acColumn=null,acrIndex=-1,aRows=null;
	if(g.oActiveRow && g.oActiveRow.OwnerCollection==rows)
		arIndex=g.oActiveRow.getIndex();
	if(g.oActiveRow && g.oActiveRow.Band.Index>=rows.Band.Index)
		g.setActiveRow(null);
	if(g.oActiveCell && g.oActiveCell.Row.OwnerCollection==rows)
	{
		acColumn=g.oActiveCell.Column;
		acrIndex=g.oActiveCell.Row.getIndex();
	}
	if(g.oActiveCell && g.oActiveCell.Band.Index>=rows.Band.Index)
		g.setActiveCell(null);
	rows.dispose();
	rows.length=rows.SelectedNodes.length;
	rows.render();
	if(arIndex!=-1)
	{
		
		var r = rows.getRow(arIndex);
		if(r)r.activate();
	}	
	if(acColumn)
	{
		if(acrIndex==-1)
		{
			if(rows.AddNewRow)
				rows.AddNewRow.getCellByColumn(acColumn).activate();
		}
		else if(acrIndex<rows.length)
			rows.getRow(acrIndex).getCellByColumn(acColumn).activate();
	}
	g.RowsRetrieved=rows.length;
	if(rows.Band.Index==0&& g.ReqType!=g.eReqType.Scroll)
	{
		if(g._scrElem)
		{
			igtbl_scrollTop(g._scrElem,0);
			g.alignDivs();
		}
		else
			igtbl_scrollTop(g.DivElement,0);
	}
}

function igtbl_requestSortComplete(gn)
{
	var g=igtbl_getGridById(gn);	
	{	
		var node=g.XmlResp.selectSingleNode("form");
		if(!node)
			node=g.XmlResp;

        _igtbl_PagerRedraw(g);
		node=node.selectSingleNode("xml/UltraWebGrid/Rs");
		if(!node) return;
		var rows=g.Rows;
		if(g.RowToQuery && g.RowToQuery.Rows)
		{
			rows=g.RowToQuery.Rows;
			for(var i=0;i<rows.Band.Index;i++)
				node=node.selectSingleNode("R/Rs")
		}
		if(!node) return;
		_igtbl_replaceRowIsland(g,node,rows);
		
		g.alignDivs(0,true);
	}
	if(g.XmlLoadOnDemandType==4)
		g._removeChange("RowsRetrieved",g);
}

function igtbl_requestUpdateRowComplete(gn)
{
	var g=igtbl_getGridById(gn);
	var r=g.RowToQuery;
	
	
	if(!r || !r.cells || !r.Band)
		return;
	{
		var node=g.XmlResp.selectSingleNode("form");
		if(!node)node=g.XmlResp;
		node=node.selectSingleNode("xml/UltraWebGrid/XmlHTTPResponse");
		if (node)
		{
			var cellsNode=node.selectSingleNode("R/Cs");
			if(cellsNode)
			{
				
			    var rowNode = node.selectSingleNode("R");
				r.DataKey = rowNode.getAttribute("DataKey");
				
				for(var i=0;i<cellsNode.childNodes.length;i++)
				{
					var cell=r.getCellFromKey(unescape(cellsNode.childNodes[i].getAttribute(igtbl_litPrefix+"key")));
					
					
					if(cell && cell.Column && (cell.Column.TemplatedColumn&2)==0)
					{
						var value=igtbl_getNodeValue(cellsNode.childNodes[i]);
						var oldValue=cell.getNodeValue();
						if(typeof(cell._oldValue)!="undefined")
						{
							delete cell._oldValue;
							g._removeChange("ChangedCells",cell);
						}
						if(value!=oldValue)
						{
							cell.setValue(cell.Column.getValueFromString(value),false);
							g._removeChange("ChangedCells",cell);
							
				            delete cell._oldValue;
						}
					}
				}
			}
		}
	}
	g.fireEvent(g.Events.AfterRowUpdate,[g.Id,r.Element.id]);
	if(g.Events.AfterRowUpdate[1]==1)
		g.NeedPostBack=false;
}
function igtbl_requestFilterDropDownFillComplete(gn)
{
	var g = igtbl_getGridById(gn);
	{
		var node=g.XmlResp.selectSingleNode("form");
		if(!node)node=g.XmlResp;
		node=node.selectSingleNode("xml/UltraWebGrid/FilterCollection");
		if (node)
		{
			var colId = node.getAttribute("ColumnId");
			var parentRowId = node.getAttribute("ParentRowId");
			var column = igtbl_getColumnById(colId);
			var workingList = new Array();
			var childNodeCount = node.childNodes.length;			
            if (ig_csom.IsIE)
            {
                var currentChildNode;
			    for(var i = 0; i < childNodeCount ; i++)
			    {			
			        currentChildNode=node.childNodes[i];
				    workingList.push([unescape(currentChildNode.getAttribute("cond")),unescape(currentChildNode.getAttribute("text"))]);
			    }
			}
			else
			{
			    var currentChildNode;
			    for(var i = 0; i < childNodeCount ; i++)
			    {
			        currentChildNode=node.childNodes[i];
			        if (currentChildNode.nodeName!="#text")
			        {
			            workingList.push([unescape(currentChildNode.getAttribute("cond")),unescape(currentChildNode.getAttribute("text"))]);
			        }
			    }
			}
			
			var filterPanel=null;
			if ((column.Band.Index==0 || column.RowFilterMode==1) && !column.Band.IsGrouped)
			{
				filterPanel=g.Bands[column.Band.Index]._filterPanels[colId];
			}
			else 
			{
				var row = igtbl_getRowById(parentRowId);
				if(row.GroupByRow)
				{
					parentRowId=parentRowId.replace( "_gr","_t");
				}
				else
				{
					parentRowId=parentRowId.replace( "_r","_t");
				}
				filterPanel=g.Bands[column.Band.Index]._filterPanels[parentRowId][colId];
			}
			filterPanel._afterFilterFilled(g,column,workingList);
		}
	}
}
function igtbl_requestComplete(gn
	,xmlHttp
)
{
	var g=igtbl_getGridById(gn);
	g.ReqType=g.eReqType.None;
	if(xmlHttp.readyState==4)
		g.ReadyState=g.eReadyState.Ready;
}
function igtbl_requestFilterComplete(gn)
{
	var g=igtbl_getGridById(gn);
	{
		var node=g.XmlResp.selectSingleNode("form");
		if(!node)
			node=g.XmlResp;
        _igtbl_PagerRedraw(g);
        var filterRowIslandInfo=node.selectSingleNode("xml/UltraWebGrid/FilterRowIsland");
        node=node.selectSingleNode("xml/UltraWebGrid/Rs");
		if(!node) return;
		
		var rows=null;
		if (filterRowIslandInfo)
		{
			var row=igtbl_getRowById(filterRowIslandInfo.getAttribute("ParentRowId"));
			var bandIndex=row.Band.Index;
			
			if(!row.GroupByRow)
			{
				while (node && (node.getAttribute("bandNo")-1<=bandIndex))
				{
					node=node.selectSingleNode("R/Rs");
				}
			}
			
			else
			{
				while (node && (node.getAttribute("bandNo")-1<=bandIndex))
				{
					node=node.selectSingleNode("Group/Rs");
				}
			}
				
			if(!node)return;
			rows = row.Rows;
		}
		else
		{
			rows=g.Rows;
		}
		
		_igtbl_replaceRowIsland(g,node,rows);
		var colFilters = node.getAttribute("columnFilters");
		if (colFilters)
		{
			colFilters = eval(colFilters);
			if (colFilters)
			{	
				_igtbl_processServerPassedColumnFilters(colFilters,g);
				_igtbl_setFilterIndicators(colFilters,rows);
			}
		}
	}
	
	g.alignStatMargins();
}
function igtbl_updateFooters(gn)
{
	var g=igtbl_getGridById(gn);
	var rows=g.Rows;
	if(g.RowToQuery && g.RowToQuery.Rows) rows=g.RowToQuery.Rows;
	{
		var node=rows.Node.lastChild;
		if(!node || node.nodeName!="Footers") return;
		var band=rows.Band;
		for(var i=0;i<band.Columns.length;i++)
		{
			var footerNode=node.childNodes[i];
			if(footerNode)
			{
				var caption=footerNode.getAttribute("caption");
				if(caption)	
				{
					
					rows.setFooterText(band.Columns[i].Key,unescape(caption));
				}
			}
			else
				break;
		}
	}
}

function igtbl_getCollapseImage(gn,bandNo)
{
	var g=igtbl_getGridById(gn);
	return g.Bands[bandNo].getCollapseImage();
}

function igtbl_getExpandImage(gn,bandNo)
{
	var g=igtbl_getGridById(gn);
	return g.Bands[bandNo].getExpandImage();
}

function igtbl_getCellClickAction(gn,bandNo)
{
	var g=igtbl_getGridById(gn);
	return g.Bands[bandNo].getCellClickAction();
}

function igtbl_getSelectTypeCell(gn,bandNo)
{
	var g=igtbl_getGridById(gn);
	var res=g.SelectTypeCell;
	if(g.Bands[bandNo].SelectTypeCell!=0)
		res=g.Bands[bandNo].SelectTypeCell;
	return res;
}

function igtbl_getSelectTypeColumn(gn,bandNo)
{
	var g=igtbl_getGridById(gn);
	var res=g.SelectTypeColumn;
	if(g.Bands[bandNo].SelectTypeColumn!=0)
		res=g.Bands[bandNo].SelectTypeColumn;
	return res;
}

function igtbl_getSelectTypeRow(gn,bandNo)
{
	var g=igtbl_getGridById(gn);
	var res=g.SelectTypeRow;
	if(g.Bands[bandNo].SelectTypeRow!=0)
		res=g.Bands[bandNo].SelectTypeRow;
	return res;
}

function igtbl_getHeaderClickAction(gn,bandNo,columnNo)
{
	var g=igtbl_getGridById(gn);
	var res=g.HeaderClickAction;
	var band=g.Bands[bandNo];
	var column=band.Columns[columnNo];
	if(column.HeaderClickAction!=0)
		res=column.HeaderClickAction;
	else if(band.HeaderClickAction!=0)
		res=band.HeaderClickAction;
	if(res>1)
	{
		if(band.AllowSort!=0)
		{
			if(band.AllowSort==2)
				res=0;
		}
		else if(g.AllowSort==0 || g.AllowSort==2)
			res=0;
	}	
	return res;
}

function igtbl_getAllowUpdate(gn,bandNo,columnNo)
{
	var g=igtbl_getGridById(gn);
	if(typeof(columnNo)!="undefined")
		return g.Bands[bandNo].Columns[columnNo].getAllowUpdate();
	var res=g.AllowUpdate;
	if(g.Bands[bandNo].AllowUpdate!=0)
		res=g.Bands[bandNo].AllowUpdate;
	return res;
}

function igtbl_getAllowColSizing(gn,bandNo,columnNo)
{
	var g=igtbl_getGridById(gn);
	var res=g.AllowColSizing;
	if(g.Bands[bandNo].AllowColSizing!=0)
		res=g.Bands[bandNo].AllowColSizing;
	if(g.Bands[bandNo].Columns[columnNo].AllowColResizing!=0)
		res=g.Bands[bandNo].Columns[columnNo].AllowColResizing;
	return res;
}

function igtbl_getRowSizing(gn,bandNo,row)
{
	var g=igtbl_getGridById(gn);
	var res=g.RowSizing;
	if(g.Bands[bandNo].RowSizing!=0)
		res=g.Bands[bandNo].RowSizing;
	if(row.getAttribute("sizing"))
		res=parseInt(row.getAttribute("sizing"),10);
	return res;
}

function igtbl_getRowSelectors(gn,bandNo)
{
	var g=igtbl_getGridById(gn);
	return g.Bands[bandNo].getRowSelectors();
}

function igtbl_getNullText(gn,bandNo,columnNo)
{
	var g=igtbl_getGridById(gn);
	if(g.Bands[bandNo].Columns[columnNo].NullText!="")
		return g.Bands[bandNo].Columns[columnNo].NullText;
	if(g.Bands[bandNo].NullText!="")
		return g.Bands[bandNo].NullText;
	return g.NullText;
}

function igtbl_getEditCellClass(gn,bandNo)
{
	var g=igtbl_getGridById(gn);
	if(g.Bands[bandNo].EditCellClass!="")
		return g.Bands[bandNo].EditCellClass;
	return g.EditCellClass;
}

function igtbl_getFooterClass(gn,bandNo)
{
	var g=igtbl_getGridById(gn);
	return g.Bands[bandNo].getFooterClass();
}

function igtbl_getGroupByRowClass(gn,bandNo)
{
	return g.Bands[bandNo].getGroupByRowClass();
}

function igtbl_getHeadClass(gn,bandNo,columnNo)
{
	var g=igtbl_getGridById(gn);
	return g.Bands[bandNo].Columns[columnNo].getHeadClass();
}

function igtbl_getRowLabelClass(gn,bandNo)
{
	var g=igtbl_getGridById(gn);
	return g.Bands[bandNo].getRowLabelClass();
}

function igtbl_getSelGroupByRowClass(gn,bandNo)
{
	var g=igtbl_getGridById(gn);
	return g.Bands[bandNo].getSelGroupByRowClass();
}

function igtbl_getSelHeadClass(gn,bandNo,columnNo)
{
	var g=igtbl_getGridById(gn);
	if(g.Bands[bandNo].Columns[columnNo].SelHeadClass!="")
		return g.Bands[bandNo].Columns[columnNo].SelHeadClass;
	if(g.Bands[bandNo].SelHeadClass!="")
		return g.Bands[bandNo].SelHeadClass;
	return g.SelHeadClass;
}

function igtbl_getSelCellClass(gn,bandNo,columnNo)
{
	var g=igtbl_getGridById(gn);
	return g.Bands[bandNo].Columns[columnNo].getSelClass();
}

function igtbl_getExpAreaClass(gn,bandNo)
{
	var g=igtbl_getGridById(gn);
	return g.Bands[bandNo].getExpAreaClass();
}

function igtbl_getCurrentRowImage(gn,bandNo)
{
	var g=igtbl_getGridById(gn);
	var res=g.CurrentRowImage;
	var band=g.Bands[bandNo];
	if(band.CurrentRowImage!="")
		res=band.CurrentRowImage;
	var au=igtbl_getAllowUpdate(gn,band.Index);
	if(band.RowTemplate!="" && (au==1 || au==3))
	{
		res=g.CurrentEditRowImage;
		if(band.CurrentEditRowImage!="")
			res=band.CurrentEditRowImage;
	}
	return res;
}

function igtbl_getCurrentRowAltText(gn,bandNo)
{
	var g=igtbl_getGridById(gn);
	var band=g.Bands[bandNo];
	var au=igtbl_getAllowUpdate(gn,bandNo);
	var alt=g._currentRowAltText;
	if(band.RowTemplate!="" && (au==1 || au==3))
	    alt=g._currentEditRowAltText;
    return alt;
}

function igtbl_getBandFAC(gn,elem)
{
	var gs=igtbl_getGridById(gn);
	var bandNo=null;
	
	if(elem.tagName=="TD" || elem.tagName=="TH")
	{
		if(elem.id!="")
		{return igtbl_getBandById(elem.id).firstActiveCell;}
		else{elem=elem.parentNode;}
	}
	if(elem.tagName=="TR")
		bandNo=elem.parentNode.parentNode.getAttribute("bandNo");
	if(elem.tagName=="TABLE")
		bandNo=elem.getAttribute("bandNo");
	if(bandNo)
		return gs.Bands[bandNo].firstActiveCell;
	return null;
}
function igtbl_enumColumnCells(gn,column)
{
	var cellIndex=null;
	var i=0;
	while(i<column.parentNode.childNodes.length && cellIndex===null)
	{
		if(column.parentNode.childNodes[i]==column)
			cellIndex=i;
		i++;
	}
	var nonFixed=false;
	i=0;
	var pn=column.parentNode;
	while(i<5 && pn && !(pn.tagName=="DIV" && pn.id==gn+"_drs"))
	{
		pn=pn.parentNode;
		nonFixed=pn && pn.tagName=="DIV" && pn.id==gn+"_drs";
		i++;
	}
	var ar=new Array();
	var colIdA=column.id.split("_");
	var fac=igtbl_getBandFAC(gn,column);
	var thead=column.parentNode;
	while(thead && thead.tagName!="THEAD")
		thead=thead.parentNode;
	if(thead)
		for(var i=1;i<thead.parentNode.rows.length;i++)
		{
			var row=thead.parentNode.rows[i];
			if(!row.getAttribute("hiddenRow") && row.parentNode.tagName!="TFOOT")
			{
				var visElem=null;
				if(!nonFixed)
					visElem=row.cells[cellIndex];
				else
					for(var j=fac;j<row.cells.length && !visElem;j++)
					{
						var cell=row.cells[j];
						if(cell.firstChild && cell.firstChild.id==gn+"_drs")
						{

							row=cell.firstChild.firstChild.rows[0];
							visElem=row.cells[cellIndex];
						}
					}
				
				
				if(visElem && visElem.id || !visElem)
				{
					var visCol=null;
					if(visElem)
						visCol=igtbl_getColumnById(visElem.id);
					if(visElem && (!visCol || visCol.Id!=column.id) || !visElem)
					{
						
						visElem=row.cells[0];
						visCol=null;
						if(visElem)
							visCol=igtbl_getColumnById(visElem.id);
						while(visElem && (!visCol || visCol.Id != column.id))
						{
							visElem=visElem.nextSibling;
							if(visElem)
								visCol=igtbl_getColumnById(visElem.id);
						}
					}
				}
				
				if(visElem)
				{
					ar[ar.length]=visElem;
				}
			}
		}
	return ar;
}


function igtbl_getElemVis(cols,index)
{
	var i=0,j=-1;
	while(cols && cols[i] && j!=index)
	{
		
		if(!ig_csom.IsIE || cols[i].style.display!="none")
			j++;
		i++;
	}
	return cols[i-1];
}


function igtbl_hideColHeader(tBody,col,hide,fixedHeaders)
{
	var realIndex=-1;
	var tr=tBody.childNodes[0];
	for(var i=0;i<tr.cells.length;i++)
	{
		var c=tr.cells[i];
		if(c.colSpan>1 && c.firstChild.tagName=="DIV" && c.firstChild.id.substr(c.firstChild.id.length-4)=="_drs")
		{
			tr=c.firstChild.firstChild.childNodes[1].rows[0];
			i=0;
			c=tr.cells[i];
		}
		if(c.style.display=="")
			realIndex++;
		if(col.Id && c.id==col.Id || col.fId && c.id==col.fId)
		{
			var h=(hide?"none":"");
			if(c.style.display==h)
				return;
			c.style.display=h;
			
            
			var headerColGroup=null;
			if(tBody.nextSibling && tBody.nextSibling.nextSibling)
			{
			    if (fixedHeaders)
			    {
			        
			        if (col.getFixed())
			        {
    			       
    			       headerColGroup=tBody.previousSibling.childNodes;
    			    }
    			    else
    			    {
    					
			            
						var childNodes=tBody.nextSibling.nextSibling.childNodes[0].childNodes;
						var i=0;
						while(i<childNodes.length)
						{
							var col=childNodes[i];
							i++;
							if(col.colSpan>1 && col.firstChild.tagName=="DIV" && col.firstChild.id.substr(col.firstChild.id.length-4)=="_drs")
							{
								headerColGroup=col.childNodes[0].childNodes[0].childNodes[0].childNodes;
								break;
							}
						}
			        }
			    }
			    else
			    {
			        headerColGroup=tBody.nextSibling.nextSibling.childNodes[0].childNodes;
			    }
			}
			if(headerColGroup)
			{
			    headerColGroup[i].style.display=h;
			}
			
			var chn=tBody.previousSibling.childNodes;
			if(hide)
			{
				var ch=chn[realIndex];
				col.Width=ch.width;
				ch.parentNode.appendChild(ch);
				ch.width="1px";
				ch.style.display="none";
            
			
			    if(headerColGroup)
			    { 
			        headerColGroup[headerColGroup.length-1].width=col.Width;
			    }
			}
			else
			{
				var ch=chn[chn.length-1];
				if(chn[realIndex+1])
					ch.parentNode.insertBefore(ch,chn[realIndex+1])
				if(ch.style.display=="none")
					ch.style.display="";
				ch.style.cssText=col.Style;
				ch.width=col.Width;
				
				if(headerColGroup)
			    { headerColGroup[i].width=col.Width; }
                
			    		
			}
			break;
		}
	}
}

function igtbl_hideColumn(rows,col,hide)
{
	var g=col.Band.Grid;
	var ao=g.Activation;
	igtbl_lineupHeaders(col.Id,col.Band);
	if(col.Band.Index==rows.Band.Index)
	{
		if(col.Band.Index==0)
		{
			if(g.StatHeader)
			{
				var el=g.StatHeader.getElementByColumn(col);
				igtbl_hideColHeader(g.StatHeader.Element,col,hide,g.UseFixedHeaders);
			}
			if(g.StatFooter)
			{
				var el=g.StatFooter.getElementByColumn(col);
				igtbl_hideColHeader(g.StatFooter.Element,col,hide,g.UseFixedHeaders);
			}
			
			if(g.StatHeader || g.StatFooter)
			{
				var filterRow = rows.getFilterRow();
				if(filterRow)
				{
					var filterCell = filterRow.getCellByColumn(col);
					filterCell.Element.style.display = (hide?"none":"");
				}
			}
		}
		
		var tBody=rows.Element.previousSibling;
		if(tBody)
		{
            
			igtbl_hideColHeader(tBody,col,hide,g.UseFixedHeaders);
		}
	}
	for(var i=0;i<rows.length;i++)
	{
		var row=rows.getRow(i);
		if(col.Band.Index==rows.Band.Index && !row.GroupByRow)
		{
			var cell=row.getCellByColumn(col);
			if(hide)
			{
				
								
				if(cell.Element==null){}
				else{cell.Element.style.display="none";}
				if(col.Band.Grid.getActiveRow()==row)
				{
					if(igtbl_hasClassName(cell.Element,ao._cssClassL))
					{
						igtbl_removeClassName(cell.Element,ao._cssClassL);
						for(var j=col.Index+1;j<col.Band.Columns.length;j++)
							if(col.Band.Columns[j].getVisible() && col.Band.Columns[j].hasCells())
							{
								igtbl_setClassName(row.getCellByColumn(col.Band.Columns[j]).Element,ao._cssClassL);
								break;
							}
					}
					if(igtbl_hasClassName(cell.Element,ao._cssClassR))
					{
						igtbl_removeClassName(cell.Element,ao._cssClassR);
						for(var j=col.Index-1;j>=0;j--)
							if(col.Band.Columns[j].getVisible() && col.Band.Columns[j].hasCells())
							{
								igtbl_setClassName(row.getCellByColumn(col.Band.Columns[j]).Element,ao._cssClassR);
								break;
							}
					}
				}
			}
			else
			{
				
									
				if(cell.Element==null){}
				else{cell.Element.style.display="";}
				if(col.Band.Grid.getActiveRow()==row)
				{
					var j=0;
					for(j=0;j<col.Band.Columns.length;j++)
						if(col.Band.Columns[j].getVisible() && col.Band.Columns[j].hasCells())
							break;
					if(j>col.Index)
					{
						igtbl_removeClassName(row.getCellByColumn(col.Band.Columns[j]).Element,ao._cssClassL);
						igtbl_setClassName(cell.Element,ao._cssClassL);
					}
					for(j=col.Band.Columns.length-1;j>=0;j--)
						if(col.Band.Columns[j].getVisible() && col.Band.Columns[j].hasCells())
							break;
					if(j<col.Index)
					{
						igtbl_removeClassName(row.getCellByColumn(col.Band.Columns[j]).Element,ao._cssClassR);
						igtbl_setClassName(cell.Element,ao._cssClassR);
					}
				}
			}
		}
		else if(col.Band.Index>=rows.Band.Index && row.Expandable)
		{
			if((row.GroupByRow || col.Band.Index>rows.Band.Index) && row.Rows)
				igtbl_hideColumn(row.Rows,col,hide);
		}
	}
	if(ig_shared.IsFireFox)
		igtbl_lineupHeaders(col.Id,col.Band);
}

function igtbl_isColEqual(col1,col2)
{
	if(col1==null && col2==null)
		return true;
	if(col1==null || col2==null)
		return false;
	if(col1.Band.Index==col2.Band.Index && col1.Key==col1.Key && col1.Index==col2.Index)
		return true;
	return false;
}


function igtbl_assignColumnElements(ce,band)
{
	if(ce)
	{
		if(typeof(ce.getAttribute)!="undefined" && ce.getAttribute("columnNo"))
		{
			var colNo=igtbl_parseInt(ce.getAttribute("columnNo"));
			band.Columns[colNo].Element=ce;
		}
		if(ce.childNodes)
			for(var i=0;i<ce.childNodes.length;i++)
				igtbl_assignColumnElements(ce.childNodes[i],band);
	}
}


function _igtbl_sortNumber(a,b)
{
	return a[0] - b[0];
}



function _igtbl_createXmlElement(doc, tagName, ns) 
{
	return igtbl_xml.createXmlElement(doc, tagName, ns);
}

function _igtbl_createXmlTextNode(doc, ns) 
{
	return igtbl_xml.createXmlTextNode(doc, ns);
}

function igtbl_rowGetValue(colId)
{
		
}
function igtbl_headerClickDown(evnt,gn) 
{
	if(!evnt && event)
		evnt=event;
	if(!gn && igtbl_lastActiveGrid)
		gn=igtbl_lastActiveGrid;
	if(!gn || !evnt)
		return false;
	var gs=igtbl_getGridById(gn);
	if(!gs || gs.isDisabled())
		return;
	gs.event=evnt;
	igtbl_lastActiveGrid=gn;
	var te=gs.Element;
	
	te.setAttribute("mouseDown",evnt.button);
	var se=igtbl_srcElement(evnt);
	if(se && se.tagName=="IMG" && (se.getAttribute("imgType")=="group" || se.getAttribute("imgType")=="fixed"))
		return;
	while(se && (se.tagName!="TH" || se.id.length<gn.length || se.id.substr(0,gn.length)!=gn) && (se.tagName!="DIV" || !se.getAttribute("groupInfo")))
		se=se.parentNode;
	if(!se)
		return;
	if(se.tagName=="TH" && se.parentNode.parentNode.tagName!="TFOOT")
	{
		var colObj=igtbl_getColumnById(se.id);
		if(!colObj) return;
		if(igtbl_fireEvent(gn,gs.Events.MouseDown,"(\""+gn+"\",\""+se.id+"\","+igtbl_button(gn,evnt)+")")==true)
			return true;
		if(igtbl_button(gn,evnt)!=0)
			return;
		var bandNo=colObj.Band.Index;
		var band=colObj.Band;
		if(igtbl_getOffsetX(evnt,se)>igtbl_clientWidth(se)-4 && igtbl_getAllowColSizing(gn,bandNo,colObj.Index)==2)
		{
			te.setAttribute("elementMode", "resize");
			te.setAttribute("resizeColumn", se.id);
			igtbl_lineupHeaders(se.id,band);
			var div,divr;
			if(!document.body.igtbl_resizeDiv)
			{
				div=document.createElement("DIV");
				div.style.zIndex=10000;
				div.style.position="absolute";
				div.style.left="0px";
				div.style.top="0px";
				div.style.width="0px";
				div.style.height="0px";
				document.body.insertBefore(div,document.body.firstChild);
				igtbl_addEventListener(div,"mouseup",igtbl_resizeDivMouseUp,false);
				igtbl_addEventListener(div,"mousemove",igtbl_resizeDivMouseMove,false);
				igtbl_addEventListener(div,"selectstart",igtbl_resizeDivSelectStart,false);
				document.body.igtbl_resizeDiv=div;
				divr=document.createElement("DIV");
				div.appendChild(divr);
				divr.style.position="absolute";
				if(igtbl_isXHTML || ig_csom.IsNetscape6)
				{
					divr.style.borderLeftWidth="1px";
					divr.style.borderLeftColor="black";
					divr.style.borderLeftStyle="solid";
					divr.style.width="1px";
				}
				else
				{
					divr.style.borderWidth="1px";
					divr.style.borderColor="black";
					divr.style.borderStyle="solid";
					divr.style.width="2px";
				}
			}
			else
			{
				div=document.body.igtbl_resizeDiv;
				divr=div.firstChild;
			}
			div.setAttribute("gn",gn);
			div.style.display="";
			div.style.cursor="w-resize";
			var divw=document.body.clientWidth,divh=document.body.clientHeight
			div.style.width=divw+"px";
			div.style.height=divh+"px";
			div.style.backgroundColor="transparent";
			divr.style.top=igtbl_getTopPos(te.parentNode,false)+"px";
			divr.style.left=evnt.clientX
				+igtbl_getBodyScrollLeft()
			+"px";
			divr.style.height=te.parentNode.offsetHeight+"px";
			div.column=colObj;
			div.srcElement=se;
			div.initX=evnt.clientX;
			return true;
		}
		se.setAttribute("justClicked",true);
		if(igtbl_getHeaderClickAction(gn,bandNo,colObj.Index)==1 && (gs.SelectedColumns[se.id]!=true || gs.ViewType!=2 || igtbl_getSelectTypeColumn(gn,bandNo)==3))
		{
			if(igtbl_getSelectTypeColumn(gn,bandNo)<2)
				return true;
			te.setAttribute("elementMode", "select");
			te.setAttribute("selectMethod", "column");
			if(!(igtbl_getSelectTypeColumn(gn,bandNo)==3 && evnt.ctrlKey))
				igtbl_clearSelectionAll(gn);
			if(te.getAttribute("shiftSelect") && evnt.shiftKey)
			{
				te.setAttribute("lastSelectedColumn","");
				igtbl_selectColumnRegion(gn,se);
				te.removeAttribute("shiftSelect");
			}
			else
			{
				te.setAttribute("startColumn", se.id);
				if(gs.SelectedColumns[se.id] && evnt.ctrlKey)
					igtbl_selectColumn(gn,se.id,false);
				else
					igtbl_selectColumn(gn,se.id);
				te.removeAttribute("shiftSelect");
				if(!evnt.ctrlKey)
					te.setAttribute("shiftSelect",true);
			}
		}
		
		ig_cancelEvent(evnt);
		return true;
	}
	else if(se.tagName=="DIV" && se.getAttribute("groupInfo"))
	{
		if(igtbl_button(gn,evnt)!=0)
			return;
		if(igtbl_fireEvent(gn,gs.Events.MouseDown,"(\""+gn+"\",\""+se.id+"\","+igtbl_button(gn,evnt)+")")==true)
			return;
		var groupInfo=se.getAttribute("groupInfo").split(":");
		if(groupInfo[0]!="band")
			igtbl_changeStyle(gn,se,igtbl_getSelHeadClass(gn,groupInfo[1],groupInfo[2]));
		se.setAttribute("justClicked",true);
		return true;
	}
}

function igtbl_resizeDivMouseUp(evnt)
{
	if(!evnt) evnt=event;
	if(!evnt) return;
	var se=document.body.igtbl_resizeDiv;
	
	if (!se) return;
	var gn=se.getAttribute("gn");
	var g=igtbl_getGridById(gn);
	
	if(g && g.Element.getAttribute("mouseDown"))
		g.Element.removeAttribute("mouseDown");
	se.style.display="none";
	if(se.initX!=evnt.clientX)
	{
		var col=se.column;
		
		if(!col || !col.Width)
			return;
		var oldWidth = -1;
		if(col.Width.length && col.Width.charAt(col.Width.length - 1) == "%")
		{
			oldWidth = se.srcElement.offsetWidth;
		}
		else if (col.Element && col.Element.colSpan > 1)
		{
		    
		    var colTags = col._getColTags();
		    if (colTags.length == 4)
		    {
		        oldWidth = igtbl_getAbsBounds(col.Element).w - colTags[1].width;
		    }
		}
		if (oldWidth == -1)
		{
			oldWidth = parseInt(col.Width,10);
		}
		var newWidth=oldWidth+evnt.clientX-se.initX;
		if(newWidth<=0)
			newWidth=1;
		if(oldWidth!=newWidth)
			col.setWidth(newWidth);
	}
}

function igtbl_resizeDivMouseMove(evnt)
{
	if(!evnt)
		evnt=event;
	if(!evnt)
		return;
	var se=document.body.igtbl_resizeDiv;
	if(!se)
		return;
	var gn=se.getAttribute("gn");
	var g=igtbl_getGridById(gn);
	var te=null;
	if(g) te=g.Element;
	
	
	if(igtbl_button(null,evnt)>0 || !te || !te.getAttribute("mouseDown"))
		return igtbl_resizeDivMouseUp(evnt);
	se.style.cursor="w-resize";
	if(!se.firstChild)
		se=se.parentNode;
	if(se.initX!=evnt.clientX)
	{
		var col=se.column;
		if(parseInt(col.Width,10)+evnt.clientX-se.initX>0)
			se.firstChild.style.left=evnt.clientX+igtbl_getBodyScrollLeft()+"px";
	}
}

function igtbl_resizeDivSelectStart(evnt)
{
	if(!evnt) evnt=event;
	if(!evnt) return;
	return igtbl_cancelEvent(evnt);
}

function igtbl_headerClickUp(evnt,gn) 
{
	if(!evnt && event)
		evnt=event;
	if(!gn && igtbl_lastActiveGrid)
		gn=igtbl_lastActiveGrid;
	if(!gn || !evnt)
		return false;
	var gs=igtbl_getGridById(gn);
	if(!gs || gs.isDisabled())
		return;
	gs.event=evnt;
	if(igtbl_button(gn,evnt)==2)
		return;
	var te=gs.Element;
	
	if (te.getAttribute("mouseDown"))
		te.removeAttribute("mouseDown");
	else
		return;
	var se=igtbl_srcElement(evnt);
	
	if(igtbl_isTemplatedElement(se))
		return;
	if(se && se.tagName=="IMG")
	{
		var imgType=se.getAttribute("imgType");
		if(imgType=="group" || imgType=="fixed" || imgType=="filter")
			return;
	}
	while(se && (se.tagName!="TH" || se.id.length<gn.length || se.id.substr(0,gn.length)!=gn) && (se.tagName!="DIV" || !se.getAttribute("groupInfo")))
		se=se.parentNode;
	if(!se)
		return;
		
	var seTemp = se;
	while(seTemp!=null)
	{
		if (seTemp.tagName=="TFOOT")
		{	
			return;
		}		
		seTemp = seTemp.parentNode
	}
	seTemp = null;		
	if(se.tagName == "TH")
	{
		var column=igtbl_getColumnById(se.id);
		if(!column) return;
		var bandNo=column.Band.Index;
		var columnNo=column.Index;
		var mode=te.getAttribute("elementMode");
				
		var headerClickNeedPost = false;
		if(mode!="resize")
		{
			var oldNP = gs.NeedPostBack;
			igtbl_fireEvent(gn,gs.Events.ColumnHeaderClick,"(\""+gn+"\",\""+se.id+"\","+igtbl_button(gn,evnt)+")");
			if (gs.NeedPostBack && gs.NeedPostBack!= oldNP)
				headerClickNeedPost = true;
		}	
		if(igtbl_fireEvent(gn,gs.Events.MouseUp,"(\""+gn+"\",\""+se.id+"\","+igtbl_button(gn,evnt)+")")==true)
			return true;
		
		var headerClickAction=igtbl_getHeaderClickAction(gn,bandNo,columnNo);
		if(headerClickAction!=1)
		
			igtbl_changeStyle(gn,se,null);
		te.removeAttribute("elementMode");
		te.removeAttribute("resizeColumn");
		te.removeAttribute("selectMethod");
		if(!te.getAttribute("shiftSelect"))
			te.removeAttribute("startColumn");
					
		
		if(mode!="resize" && (headerClickAction==2 || headerClickAction==3) && column.SortIndicator!=3)
		{
			if(gs.Bands[bandNo].ClientSortEnabled)
			{
				gs._displayPI();
				gs.startHourGlass();
				gs.sortingColumn=se;
				gs.oldColCursor=se.style.cursor;
				
				window.setTimeout("igtbl_gridSortColumn('"+gn+"','"+se.id+"',"+evnt.shiftKey+")",1);
			}
			else
				gs.sortColumn(se.id,evnt.shiftKey);
			if(gs.NeedPostBack && !headerClickNeedPost)
				igtbl_doPostBack(gn,evnt.shiftKey?"shiftKey:true":"");
		}
		else
		{
			if(mode=="resize")
				igtbl_resizeDivMouseUp(evnt);
			if((mode=="resize" || mode=="select") && gs.NeedPostBack)
			{
				
				igtbl_doPostBack(gn,'HeaderClick:'+se.id);
				
			}				
			te.removeAttribute("elementMode");
		}
	}
	else if(se.tagName=="DIV" && se.getAttribute("groupInfo"))
	{
		igtbl_fireEvent(gn,gs.Events.ColumnHeaderClick,"(\""+gn+"\",\""+se.id+"\","+igtbl_button(gn,evnt)+")");
		if(igtbl_fireEvent(gn,gs.Events.MouseUp,"(\""+gn+"\",\""+se.id+"\","+igtbl_button(gn,evnt)+")")==true)
			return;
		var groupInfo=se.getAttribute("groupInfo").split(":");
		if(groupInfo[0]!="band")
		{
			igtbl_changeStyle(gn,se,null);
			var bandNo=igtbl_bandNoFromColId(se.id);
			var columnNo=igtbl_colNoFromColId(se.id);
			var column=gs.Bands[bandNo].Columns[columnNo];
            	
			var headerClickAction=igtbl_getHeaderClickAction(gn,bandNo,columnNo);
			if((headerClickAction==2 || headerClickAction==3) && column.SortIndicator!=3)
			
			{
				if(gs.Bands[bandNo].ClientSortEnabled)
				{
					gs._displayPI();
					gs.startHourGlass();
					gs.sortingColumn=se;
					gs.oldColCursor=se.style.cursor;
					
					window.setTimeout("igtbl_gridSortColumn('"+gn+"','"+se.id+"',true)",1);
				}
				else
					gs.sortColumn(se.id,evnt.shiftKey);
				if(gs.NeedPostBack)
					igtbl_doPostBack(gn,evnt.shiftKey?"shiftKey:true":"");
			}
		}
	}
	if(gs.NeedPostBack)
		igtbl_doPostBack(gn,'HeaderClick:'+se.id);
	return true;
}

function igtbl_headerContextMenu(evnt,gn) 
{
	if(!evnt && event)
		evnt=event;
	if(!gn && igtbl_lastActiveGrid)
		gn=igtbl_lastActiveGrid;
	if(!gn || !evnt)
		return false;
	var gs=igtbl_getGridById(gn);
	if(!gs || gs.isDisabled())
		return;
	gs.event=evnt;
	
	if(igtbl_button(gn,evnt)==2 && !ig_csom.IsFireFox)
		return;
	var te=gs.Element;
	te.removeAttribute("mouseDown");
	var se=igtbl_srcElement(evnt);
	while(se && (se.tagName!="TH" || se.id.length<gn.length || se.id.substr(0,gn.length)!=gn) && (se.tagName!="DIV" || !se.getAttribute("groupInfo")))
		se=se.parentNode;
	if(!se)
		return;
	if(se.tagName == "TH" || se.tagName == "DIV")
	{
		var column=igtbl_getColumnById(se.id);
		if(se.tagName=="TH" && !column) return;
		igtbl_fireEvent(gn,gs.Events.ColumnHeaderClick,"(\""+gn+"\",\""+se.id+"\",2)");
		if(igtbl_fireEvent(gn,gs.Events.MouseUp,"(\""+gn+"\",\""+se.id+"\",2)")==true)
			return igtbl_cancelEvent(evnt);
	}
}

function igtbl_headerMouseOut(evnt,gn) 
{
	if(!evnt && event)
		evnt=event;
	if(!gn && igtbl_lastActiveGrid)
		gn=igtbl_lastActiveGrid;
	if(!gn || !evnt)
		return false;
	var gs=igtbl_getGridById(gn);
	var se=igtbl_srcElement(evnt);
	if(!gs || !se || gs.isDisabled())
		return;
	gs.event=evnt;
	if(se.tagName=="NOBR" && se.title)
	{
		se.title="";
		
		if (se.removeAttribute)
		{
		    se.removeAttribute("title");
		}
	}
	while(se && (se.tagName!="TH" || se.id.length<gn.length || se.id.substr(0,gn.length)!=gn) && (se.tagName!="DIV" || !se.getAttribute("groupInfo")))
		se=se.parentNode;
	if(!se)
		return;
	if(se.tagName == "TH")
	{
		var column=igtbl_getColumnById(se.id);
		if(!column) return;
		var sep=se.parentNode;
		if(gs.Element.getAttribute("elementMode")=="select")
			return true;
		if(!igtbl_isMouseOut(se,evnt))return true;
		if(igtbl_fireEvent(gn,gs.Events.MouseOut,"(\""+gn+"\",\""+se.id+"\",1)")==true)
			return true;
		if(igtbl_getHeaderClickAction(gn,column.Band.Index,column.Index)!=1)
			igtbl_changeStyle(gn,se,null);
		return true;
	}
	else if(se.tagName == "DIV" && se.getAttribute("groupInfo"))
	{
		if(!igtbl_isMouseOut(se,evnt))return true;
		if(igtbl_fireEvent(gn,gs.Events.MouseOut,"(\""+gn+"\",\""+se.id+"\",1)")==true)
			return true;
		var groupInfo=se.getAttribute("groupInfo").split(":");
		if(groupInfo[0]!="band")
			igtbl_changeStyle(gn,se,null);
		return true;
	}
}

function igtbl_isMouseOut(se,evnt)
{
	var te=evnt.toElement;
	if(te==null)
		te=evnt.relatedTarget;
	while(te!=null)
	{
		if(te==se)
			return false;
		try
		{
			te=te.parentNode;
		}
		catch(exc)
		{
			break;
		}
	}
	se._hasMouse=false;
	return true;
}

function igtbl_headerMouseOver(evnt,gn)
{
	if(!evnt && event)
		evnt=event;
	if(!evnt)
		return false;
	var se=igtbl_srcElement(evnt);
	if(!se)
		return;
	var column;
	if(se.tagName=="NOBR")
	{
		column=igtbl_getColumnById(se.parentNode.id);
		if(column)
		{
			var nobr=se;
			var showTitle = nobr.offsetWidth>se.parentNode.offsetWidth || nobr.offsetHeight>se.parentNode.offsetHeight;
            var titleMode = column.getTitleModeResolved();
            showTitle |= titleMode == igtbl_CellTitleMode.Always;
            showTitle &= titleMode != igtbl_CellTitleMode.Never;
			if(showTitle)
			{
				nobr.title=column.HeaderText;
			}
		}
	}
	else
		column=igtbl_getColumnById(se.id);
	if(!column) return;
	var gs=column.Band.Grid;
	if(!gn)
		gn=gs.Id;
	gs.event=evnt;

	
	
	if (!igtbl_lastActiveGrid || igtbl_lastActiveGrid.length < 0 || !igtbl_getGridById(igtbl_lastActiveGrid) || !igtbl_inEditMode(igtbl_lastActiveGrid))
	    igtbl_lastActiveGrid=gn;
	while(se && (se.tagName!="TH" || se.id.length<gn.length || se.id.substr(0,gn.length)!=gn) && (se.tagName!="DIV" || !se.getAttribute("groupInfo")))
		se=se.parentNode;
	if(!se)
		return;
	if(se.tagName!="DIV")
	{
		while(se && (se.tagName!="TH" || se.id.length<gn.length || se.id.substr(0,gn.length)!=gn))
			se=se.parentNode;
		if(!se)
			return;
	}
	if(se._hasMouse)return;
	if(se.tagName == "TH")
	{
		var column=igtbl_getColumnById(se.id);
		if(!column) return;
		se._hasMouse=true;
		igtbl_fireEvent(gn,gs.Events.MouseOver,"(\""+gn+"\",\""+se.id+"\",1)");
	}
	else if(se.tagName == "DIV" && se.getAttribute("groupInfo"))
	{
		se._hasMouse=true;
		igtbl_fireEvent(gn,gs.Events.MouseOver,"(\""+gn+"\",\""+se.id+"\",1)");
	}
}

function igtbl_headerMouseMove(evnt,gn)
{
	if(!evnt && event)
		evnt=event;
	if(!gn && igtbl_lastActiveGrid)
		gn=igtbl_lastActiveGrid;
	if(!gn || !evnt)
		return false;
	var gs=igtbl_getGridById(gn);
	var se=igtbl_srcElement(evnt);
	if(!gs || !se || gs.isDisabled())
		return false;
	gs.event=evnt;
	while(se && (se.tagName!="TH" || se.id.length<gn.length || se.id.substr(0,gn.length)!=gn) && (se.tagName!="DIV" || !se.getAttribute("groupInfo")))
		se=se.parentNode;
	if(!se)
		return;
	if(se.tagName == "TH")
	{
		var column=igtbl_getColumnById(se.id);
		if(!column) return;
		var bandNo=column.Band.Index;
		var columnNo=column.Index;
		
		if(igtbl_button(gn,evnt)==0 || gs.Element.getAttribute("mouseDown") )
		{
			var mode = gs.Element.getAttribute("elementMode");
			if(mode!=null && mode=="resize") 
				igtbl_resizeDivMouseMove(evnt);
			else if(mode=="select" && igtbl_getHeaderClickAction(gn,bandNo,columnNo)==1 && !evnt.ctrlKey) 
				igtbl_selectColumnRegion(gn,se);
			else
			{
				var cursorName = se.getAttribute("oldCursor");
				if(cursorName != null)
				{
					se.style.cursor=cursorName;
					se.removeAttribute("oldCursor");
				}
				if(igtbl_getHeaderClickAction(gn,bandNo,columnNo)!=1 || gs.SelectedColumns[se.id] || igtbl_getSelectTypeColumn(gn,bandNo)<2)
					if(column.AllowGroupBy==1 && gs.ViewType==2 && gs.GroupByBox.Element || column.Band.AllowColumnMoving>1)
					{
						if(se.getAttribute("justClicked"))
						{
							if(typeof(igtbl_headerDragStart)!="undefined")
								igtbl_headerDragStart(gn,se,evnt);
						}
						else
							igtbl_changeStyle(gn,se,null);
					}
			}
			if(se.getAttribute("justClicked"))
				se.removeAttribute("justClicked");
			if((column.TemplatedColumn&1) && se!=igtbl_srcElement(evnt))
				return;
			igtbl_cancelEvent(evnt);
			return true;
		}
		else 
		{
			var c,te=gs.Element;
			te.removeAttribute("elementMode");
			te.removeAttribute("resizeColumn");
			te.removeAttribute("selectMethod");
			if(!te.getAttribute("shiftSelect"))
				te.removeAttribute("startColumn");
			if(igtbl_getOffsetX(evnt,se)>igtbl_clientWidth(se)-4 && igtbl_getAllowColSizing(gn,bandNo,columnNo)==2)
			{
				if(se.getAttribute("oldCursor")==null)
					se.setAttribute("oldCursor", se.style.cursor);
				se.style.cursor="w-resize";
				if((c=se.firstChild)!=null)if((c=c.firstChild)!=null)if((c=c.style)!=null)c.cursor="w-resize";
			}
			else
			{
				var cursorName = se.getAttribute("oldCursor");
				if(cursorName != null)
				{
					se.style.cursor=cursorName;
					se.removeAttribute("oldCursor");
					if((c=se.firstChild)!=null)if((c=c.firstChild)!=null)if((c=c.style)!=null)c.cursor=cursorName;
				}
			}
		}
		if(se.getAttribute("justClicked"))
			se.removeAttribute("justClicked");
		if((column.TemplatedColumn&1) && se!=igtbl_srcElement(evnt))
			return;
	}
	else if(se.tagName == "DIV" && se.getAttribute("groupInfo"))
	{
		var groupInfo=se.getAttribute("groupInfo").split(":");
		if(groupInfo[0]!="band")
		{
			
			if(igtbl_button(gn,evnt)==0 || gs.Element.getAttribute("mouseDown"))
			{
				var cursorName = se.getAttribute("oldCursor");
				if(cursorName != null)
				{
					se.style.cursor=cursorName;
					se.removeAttribute("oldCursor");
				}
				igtbl_changeStyle(gn,se,null);
				if(gs.ViewType==2 && se.getAttribute("justClicked") && typeof(igtbl_headerDragStart)!="undefined")
					igtbl_headerDragStart(gn,se,evnt);
			}
		}
		if(se.getAttribute("justClicked"))
			se.removeAttribute("justClicked");
		return true;
	}
	return false;
}

function igtbl_tableMouseMove(evnt,gn)
{
	var gs=igtbl_getGridById(gn);
	var se=igtbl_srcElement(evnt);
	if(!gs || !se || gs.isDisabled())
		return false;
	gs.event=evnt;
	var te=gs.Element;
	if(igtbl_button(gn,evnt)==0 && te.getAttribute("elementMode")=="resize")
	{
		if((se.id==gn+"_div" || se.id==gn+"_hdiv" || se.tagName=="TABLE" && se.parentNode.parentNode.getAttribute("hiddenRow")))
		{
			igtbl_resizeDivMouseMove(evnt);
			
			return igtbl_cancelEvent(evnt);
		}
		
		else if(se.tagName=="TR" && se.getAttribute("hiddenRow") || se.id==gn+"_drs")
		{
			igtbl_resizeDivMouseMove(evnt);
			return igtbl_cancelEvent(evnt);
		}
	}
	else if(te.parentNode && typeof(te.parentNode.oldCursor)=="string")
	{
		te.parentNode.style.cursor=te.parentNode.oldCursor;
		if(gs.StatHeader)
			gs.StatHeader.Element.parentNode.parentNode.style.cursor=te.parentNode.oldCursor;
		te.parentNode.oldCursor=null;
	}
	if(se==te || se==gs.DivElement || se.tagName=="TH")
		igtbl_colButtonMouseOut(evnt,gn);
}


function igtbl_resizeRowMouseMove(e)
{
    
    var evnt = igtbl_event.getEvent(e);
    var se = igtbl_srcElement(evnt);
    var gn = igtbl_lastActiveGrid;
    if(!gn) return;
    var gs = igtbl_getGridById(gn);
    var te = gs.Element;
    if(te.getAttribute("resizeRow"))
    {
	    if(typeof(te.parentNode.oldCursor)!="string")
	    {
		    te.parentNode.oldCursor=te.parentNode.style.cursor;
		    te.parentNode.style.cursor="n-resize";
	    }
	    var rowId=te.getAttribute("resizeRow");
	    var row=igtbl_getElementById(rowId);
	    if(!row || row.getAttribute("hiddenRow"))
		    return;
		
		
		var scrollTop = (ig_csom.IsIE6 || ig_csom.IsIE7) && igtbl_isXHTML ? gs.DivElement.scrollTop : 0;
	    var r1h=row.offsetHeight+(evnt.clientY-((igtbl_getTopPos(row) - scrollTop) +row.offsetHeight));
	    igtbl_resizeRow(gn,rowId,r1h);
	    return igtbl_cancelEvent(evnt);
    }
}

function igtbl_resizeRowMouseUp(e)
{
    // need to unhook the event when the mouse is released
    if(!igtbl_lastActiveGrid) return;
    var gs = igtbl_getGridById(igtbl_lastActiveGrid);
    ig_csom.removeEventListener(gs.getDivElement(), "mousemove", igtbl_resizeRowMouseMove);
	ig_csom.removeEventListener(document, "mouseup", igtbl_resizeRowMouseUp);
}


function igtbl_clearResizeDiv(gs,evnt,noForce)
{
	gs.Element.removeAttribute("elementMode");
	gs.Element.removeAttribute("resizeColumn");
	
	var resizeDiv=document.body.igtbl_resizeDiv;
	if(resizeDiv)
	{
		resizeDiv.style.display="none";
		if(!noForce)
			igtbl_resizeDivMouseUp(evnt);
	}
	gs.Element.removeAttribute("mouseDown");
}

function igtbl_tableMouseUp(evnt,gn)
{
	var gs=igtbl_getGridById(gn);
	if(!gs || gs.isDisabled())
		return false;
		
	if (ig_csom.IsFireFox && gs.Element.getAttribute("elementMode")=="resize")
	{
		igtbl_resizeDivMouseUp(evnt)
		return true;
	}	
	gs.event=evnt;	
	var se=igtbl_srcElement(evnt);
	if(!se) return;
	if(se==gs._editorCurrent)return;
	if(gs.Element.getAttribute("elementMode")=="resize")
	{
		if(se.id==gn+"_div")
		{
						
			igtbl_clearResizeDiv(gs,evnt);			
			
			
			
		}
		else if(se.tagName=="TR" && se.getAttribute("hiddenRow") || se.id==gn+"_drs")
			igtbl_resizeDivMouseUp(evnt);
	}
	var ar=gs.getActiveRow();
	if(ar && !igtbl_isAChildOfB(se,ar.Element))
	{
		gs.endEdit();
		if(ar.IsAddNewRow)
			ar.commit();
		else
		if(ar._dataChanged && ar._dataChanged>1)
			ar.processUpdateRow();
	}
	igtbl_activate(gn);
}

function igtbl_cellClickDown(evnt,gn) 
{
	var gs=igtbl_getGridById(gn);
	if(!gs || gs.isDisabled())
		return;
	gs.event=evnt;
	igtbl_lastActiveGrid=gn;
	gs._mouseDown=1;
	gs.Element.setAttribute("mouseDown","1");
	var se=igtbl_srcElement(evnt);
	
	if(!se || se.tagName=="IMG" && se.getAttribute("imgType")=="expand")
		return;
	
	igtbl_filterMouseUpDocument();
	if(!se||se==gs._editorCurrent)return;
	if(se.id==gn+"_vl"){if(gs._focusElem)ig_cancelEvent(evnt);return;}
	if(se.id==gn+"_tb" || se.id==gn+"_ta")
		return;
	var sel=igtbl_getElementById(gn+"_vl");
	if(sel && sel.style.display=="" && sel.getAttribute("noOnBlur"))
		return igtbl_cancelEvent(evnt);
	
	var parentCell=igtbl_getParentCell(se);
	if(!ig_csom.IsNetscape6 || !((se.tagName=="INPUT" && se.type=="text" || se.tagName=="TEXTAREA") && parentCell && (parentCell.Column.TemplatedColumn&2)))
		ig_cancelEvent(evnt);
	var se = igtbl_dom.find.parentByTag(se, ["TD", "TH"]);
	if(!se)
		return;
		
	
	var row;
	var cell=igtbl_getCellByElement(se);
	var id=gs._mouseID=se.id;
	if(cell)
	{
		row=cell.Row;
		id=cell.Element.id;
	}
	else row=igtbl_getRowById(id);
	if(!row && !cell) return;
	var fac=row.Band.firstActiveCell;
	if(igtbl_fireEvent(gn,gs.Events.MouseDown,"(\""+gn+"\",\""+id+"\","+igtbl_button(gn,evnt)+")")==true)
	{
		igtbl_cancelEvent(evnt);
		return true;
	}
	var band=row.Band;
	var bandNo=band.Index;
	if (igtbl_hideEdit(gn)) return;
	if(igtbl_button(gn,evnt)==0 && !cell && igtbl_getOffsetY(evnt,se)>igtbl_clientHeight(se)-4 && igtbl_getRowSizing(gn,bandNo,row.Element)==2 && !se.getAttribute("groupRow"))
	{
		gs.Element.setAttribute("elementMode", "resize");
		gs.Element.setAttribute("resizeRow", row.Element.id);
		row.Element.style.height=row.Element.offsetHeight;
		
		
		ig_csom.addEventListener(gs.getDivElement(), "mousemove", igtbl_resizeRowMouseMove);
		ig_csom.addEventListener(document, "mouseup", igtbl_resizeRowMouseUp);
	}
	else
	{
		var te=gs.Element;
		var workTableId;
		if( 
		   (row.IsAddNewRow 

			|| row.IsFilterRow
		    )&& row.Band.Index==0)
			workTableId=gs.Element.id;
		else
		if(se.getAttribute("groupRow"))
			workTableId=se.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id;
		else
			workTableId=row.Element.parentNode.parentNode.id;
		if(igtbl_button(gn,evnt)!=0)
			return;
		if(workTableId=="")
			return;
		
		te.removeAttribute("lastSelectedCell");
		var prevSelRow=gs.SelectedRows[igtbl_getWorkRow(row.Element,gn).id];
		if(prevSelRow && igtbl_getLength(gs.SelectedRows)>1)
			prevSelRow=false;
		var selPresent=(igtbl_getLength(gs.SelectedCells)>0?1:0) | (igtbl_getLength(gs.SelectedRows)>0?2:0) | (igtbl_getLength(gs.SelectedCols)>0?4:0);
		if(se.getAttribute("groupRow") || !cell || igtbl_getCellClickAction(gn,bandNo)==2)
		{
			if(!(igtbl_getSelectTypeRow(gn,bandNo)==3 && evnt.ctrlKey) && !(row.getSelected() && igtbl_getLength(gs.SelectedRows)==1))
				igtbl_clearSelectionAll(gn);
		}
		else
		{
			if(!(igtbl_getSelectTypeCell(gn,bandNo)==3 && evnt.ctrlKey) && !(cell.getSelected() && igtbl_getLength(gs.SelectedCells)==1))
				igtbl_clearSelectionAll(gn);
		}
		gs.Element.setAttribute("elementMode", "select");
		if(se.getAttribute("groupRow"))
		{
			te.setAttribute("selectTable", se.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id);
			te.setAttribute("selectMethod", "row");
		}
		else
		{
			te.setAttribute("selectTable", workTableId);
			if(!cell || igtbl_getCellClickAction(gn,bandNo)==2)
				te.setAttribute("selectMethod", "row");
			else
				te.setAttribute("selectMethod", "cell");
		}
		if(te.getAttribute("shiftSelect") && evnt.shiftKey)
			igtbl_selectRegion(gn,se);
		else
		{
			if(!cell || igtbl_getCellClickAction(gn,bandNo)==2 || se.getAttribute("groupRow"))
			{
				var seRow=igtbl_getRowById(row.Element.id);
				if(gs.SelectedRows[row.Element.id] && evnt.ctrlKey)
				{
					igtbl_selectRow(gn,seRow,false);
					gs.setActiveRow(seRow);
				}
				else
				{
					var showEdit=true;
					if(!gs._exitEditCancel)
					{
						if(gs.Activation.AllowActivation)
						{
							var ar=gs.oActiveRow;
							if(ar!=seRow)
							{
								gs.setActiveRow(seRow);
								showEdit=false;
							}
							else
								showEdit=true;
						}
						if(igtbl_getSelectTypeRow(gn,bandNo)>1)
							igtbl_selectRow(gn,seRow,true,!prevSelRow);
						if(showEdit && !se.getAttribute("groupRow") && row)
							row.editRow();
					}
				}
			}
			else
			{
				if(cell.getSelected() && evnt.ctrlKey)
				{
					cell.select(false);
					cell.activate();
				}
				else
				{
					if(band.getSelectTypeCell()>1 && band.getCellClickAction()>=1 && !gs._exitEditCancel)
						cell.select();
					else if(selPresent)
					{
						var gsNPB = gs.NeedPostBack;
						igtbl_fireEvent(gn,gs.Events.AfterSelectChange,"(\""+gn+"\",\""+id+"\");");
						if(!gsNPB && !(gs.Events.AfterSelectChange[1]&selPresent))
							gs.NeedPostBack=false;
					}
					cell.activate();
				}
			}
			if(se.getAttribute("groupRow"))
				te.setAttribute("startPointRow", se.parentNode.parentNode.parentNode.parentNode.parentNode.id);
			else
				te.setAttribute("startPointRow", row.Element.id);
			te.setAttribute("startPointCell", id);
			te.removeAttribute("shiftSelect");
			if(!evnt.ctrlKey)
				te.setAttribute("shiftSelect", true);
		}
	}
	if(typeof(igtbl_currentEditTempl)!="undefined" && igtbl_currentEditTempl!=null)
		igtbl_gRowEditMouseDown(evnt);
	if(typeof(igcmbo_currentDropped)!="undefined" && igcmbo_currentDropped!=null)
		igcmbo_mouseDown(evnt);
}

function igtbl_cellClickUp(evnt,gn)
{
	var gs=igtbl_getGridById(gn);
	if(!gs || gs.isDisabled())
		return;
	gs.event=evnt;
	gs._mouseDown=0;
	if(igtbl_button(gn,evnt)==2)
		return;
	
	
	if (gs.Element.getAttribute("mouseDown"))
		gs.Element.removeAttribute("mouseDown");
	else
		return;
	var se=igtbl_srcElement(evnt);
	if(!se || se==gs._editorCurrent || (se.tagName && se.tagName.length>4))
	{
		
		if (se && se!=gs._editorCurrent)
		{
			while(se && (!(se.tagName=="TD"
				|| se.parentNode && se.parentNode.tagName=="TR" && se.tagName=="TH"
				) || se.id.length<gn.length || se.id.substr(0,gn.length)!=gn))
				se=se.parentNode;
			if (se)
			{
				if(igtbl_fireEvent(gn,gs.Events.MouseUp,"(\""+gn+"\",\""+se.id+"\","+igtbl_button(gn,evnt)+")")==true)
				{	
					igtbl_cancelEvent(evnt);
					return true;
				}		
			}
		}	
		return;
	}		
	if(!gs._editorCurrent && gs._focusElem && !gs._focus0)
		igtbl_activate(gn);
	if(se.id==gn+"_vl" || se.id==gn+"_tb" || se.id==gn+"_ta")
		return;
	var sel=igtbl_getElementById(gn+"_vl");
	if(sel && sel.style.display=="" && sel.getAttribute("noOnBlur"))
		return igtbl_cancelEvent(evnt);
	if(se.tagName=="IMG" && se.getAttribute("imgType")=="expand")
	{
		igtbl_toggleRow(evnt);
		return;
	}
	while(se && (!(se.tagName=="TD"
				|| se.parentNode && se.parentNode.tagName=="TR" && se.tagName=="TH"
				) || se.id.length<gn.length || se.id.substr(0,gn.length)!=gn))
		se=se.parentNode;
	if(!se)
		return;
	
	if(se.tagName != "TD" 
	    && !(se.parentNode && se.parentNode.tagName=="TR" && se.tagName=="TH")
	)
		return;
	if(se.id == "")
		return;
	var row;
	var id=se.id;
	var cell=igtbl_getCellById(id);
	if(cell)
	{
		row=cell.Row;
		id=cell.Element.id;
	}
	else row=igtbl_getRowById(id);
	if(!row && !cell) return;
	var te=gs.Element;
	var mode=gs.Element.getAttribute("elementMode");
	gs.Element.removeAttribute("elementMode");
	te.removeAttribute("selectTable");
	te.removeAttribute("selectMethod");
	te.removeAttribute("resizeRow");
	
	var resizeDiv=document.body.igtbl_resizeDiv;
	if(resizeDiv)resizeDiv.style.display="none";	
	if(!te.getAttribute("shiftSelect"))
	{
		te.removeAttribute("startPointRow");
		te.removeAttribute("startPointCell");
	}
	var bandNo=row.Band.Index;
	var fac=row.Band.firstActiveCell;
	if(cell && igtbl_getCellClickAction(gn,bandNo)==1 && gs._mouseID==id)
	{
		
		if(igtbl_getAllowUpdate(gn,bandNo,cell.Column.Index)==3 && cell.getEditable() != "no")
			row.editRow(true);
		else
			cell.beginEdit();
	}
	var oldNPB=gs.NeedPostBack;
	if(!se.getAttribute("groupRow") && mode!="resize")
	{
		if(!cell)
			igtbl_fireEvent(gn,gs.Events.RowSelectorClick,"(\""+gn+"\",\""+row.Element.id+"\","+igtbl_button(gn,evnt)+")");
		else
			igtbl_fireEvent(gn,gs.Events.CellClick,"(\""+gn+"\",\""+id+"\","+igtbl_button(gn,evnt)+")");
	}
	gs._noCellChange=false;
	if(igtbl_fireEvent(gn,gs.Events.MouseUp,"(\""+gn+"\",\""+id+"\","+igtbl_button(gn,evnt)+")")==true)
	{
		igtbl_cancelEvent(evnt);
		return true;
	}
	
	if((mode=="resize" || mode=="select") && oldNPB)
	{
		se=igtbl_srcElement(evnt);
		if(!(se&&se.tagName=="INPUT"&&se.type=="checkbox"))
			igtbl_doPostBack(gn);
		return;
	}
	if(gs.NeedPostBack && (!cell || igtbl_getCellClickAction(gn,bandNo)==2))
		igtbl_doPostBack(gn,'RowClick:'+row.Element.id+(row.Element.getAttribute("level")?"\x05"+row.Element.getAttribute("level"):""));
	else if(gs.NeedPostBack)
		igtbl_doPostBack(gn,'CellClick:'+id+(cell.Element.getAttribute("level")?"\x05"+cell.Element.getAttribute("level"):""));
	
	var ctd=false;
	for(var gId in igtbl_gridState)
		if(gId!=gn)
		{
			igtbl_globalMouseUp(evnt,gId);
			ctd=true;
		}
	if(ctd && !igtbl_inEditMode(gn))
		window.setTimeout("igtbl_activate('"+gn+"');",0);
	return igtbl_cancelEvent(evnt);
}

function igtbl_cellContextMenu(evnt,gn)
{
	var gs=igtbl_getGridById(gn);
	if(!gs || gs.isDisabled())
		return;
	gs.event=evnt;
	var te=gs.Element;
	te.removeAttribute("mouseDown");
	te.removeAttribute("elementMode");
	te.removeAttribute("resizeColumn");
	te.removeAttribute("selectMethod");
	if(!te.getAttribute("shiftSelect"))
		te.removeAttribute("startColumn");
	var se=igtbl_srcElement(evnt);
	if(!se||se.id==gn+"_vl"||se.id==gn+"_tb"||se.id==gn+"_ta")
		return;
	while(se && !(se.tagName=="TD"
				|| se.parentNode && se.parentNode.tagName=="TR" && se.tagName=="TH"
				))
		se=se.parentNode;
	
	if(!se || (se.tagName != "TD" &&  se.tagName != "TH"))
		return;
	var row;
		var cell=igtbl_getCellByElement(se);
		var id=se.id;
	if(cell)
	{
		row=cell.Row;
		id=cell.Element.id;
	}
	else row=igtbl_getRowById(id);
	if(!row && !cell) return;
	if(!se.getAttribute("groupRow"))
	{
		if(!cell)
			igtbl_fireEvent(gn,gs.Events.RowSelectorClick,"(\""+gn+"\",\""+row.Element.id+"\",2)");
		else
			igtbl_fireEvent(gn,gs.Events.CellClick,"(\""+gn+"\",\""+id+"\",2)");
	}
	if(igtbl_fireEvent(gn,gs.Events.MouseUp,"(\""+gn+"\",\""+id+"\",2)")==true)
		return igtbl_cancelEvent(evnt);
	if(gs.NeedPostBack && (!cell || igtbl_getCellClickAction(gn,row.Band.Index)==2))
		igtbl_doPostBack(gn,'RowClick:'+row.Element.id+(row.Element.getAttribute("level")?"\x05"+row.Element.getAttribute("level"):""));
	else if(gs.NeedPostBack)
		igtbl_doPostBack(gn,'CellClick:'+id+(cell.Element.getAttribute("level")?"\x05"+cell.Element.getAttribute("level"):""));
}

function igtbl_cellMouseOver(evnt,gn)
{
	var gs=igtbl_getGridById(gn);
	var se=igtbl_srcElement(evnt);
	if(!gs || !se || gs.isDisabled())
		return;
	gs.event=evnt;
	
	try{if(se.nodeName=="TD"||se.nodeName=="DIV")se.unselectable="on";}catch(ex){;}
	if(se.tagName=="NOBR")
	{
		var cell=igtbl_getCellByElement(se.parentNode);
		if(cell)
		{
			var nobr=cell.Element.childNodes[0];
           
			if(cell.Element.title)
			{
				nobr.title=cell.Element.title;
			}
			else 
            {
                var showTitle = nobr.offsetWidth>cell.Element.offsetWidth 
                    || nobr.offsetHeight>cell.Element.offsetHeight
                    || (cell.Element.style.textOverflow=="ellipsis" && nobr.offsetWidth + 6 > cell.Element.offsetWidth)
                    
			    	|| (cell.Element.currentStyle && cell.Element.currentStyle.textOverflow == "ellipsis" && nobr.offsetWidth + 6 > cell.Element.offsetWidth);

                    var titleMode = cell.getTitleModeResolved();
                    showTitle |= titleMode == igtbl_CellTitleMode.Always;
                    showTitle &= titleMode != igtbl_CellTitleMode.Never;
                if (showTitle)	   
			    {
					
                    if(gs.Section508Compliant && titleMode!=igtbl_CellTitleMode.OnOverflow)
                    {
                        var row = cell.Row;
                        if(row)
                        {
                            var fmtStr = (row.ParentRow) ? gs._childRowToolTipFormatStr : gs._rowToolTipFormatStr;
                            
                            fmtStr = fmtStr.replace("{0}",(1 + row.getIndex()).toString());
                            
                            
                            fmtStr = fmtStr.replace("{1}",(cell.Column.HeaderText));
                            
                            
                            if(igtbl_string.trim(cell.MaskedValue))
                            {
                                nobr.title = fmtStr.replace("{2}", cell.MaskedValue);
                            }
                            else
                            {                            
                                nobr.title = fmtStr.replace("{2}", cell.getValue(true));
                            }
                        }
                    } 
                    else
				    if(igtbl_string.trim(cell.MaskedValue))
				    {
					    nobr.title=cell.MaskedValue;
					}
				    else
				    {
					    nobr.title=cell.getValue(true);
					}
			    }
            }
		}
		se=se.parentNode;
	}
	while(se && !(se.tagName=="TD"
				|| se.parentNode && se.parentNode.tagName=="TR" && se.tagName=="TH"
				))
		se=se.parentNode;
	if(!se || se.tagName!="TD"
		&& se.tagName!="TH"
	)
		return;
	var row;
		var cell=igtbl_getCellByElement(se);
		var id=se.id;
	if(cell)
	{
		if(!cell.Element) return;
		row=cell.Row;
		id=cell.Element.id;
	}
	else row=igtbl_getRowById(se.id);
	if(!row && !cell) return;
	if(se._hasMouse)return;
	se._hasMouse=true;
	var te=gs.Element;
	if(evnt.shiftKey && row.Band.getSelectTypeRow()==3 && !te.getAttribute("shiftSelect"))
		te.setAttribute("shiftSelect",true);
	if(igtbl_fireEvent(gn,gs.Events.MouseOver,"(\""+gn+"\",\""+id+"\",0)")==true)
		return;
}

function igtbl_cellMouseMove(evnt,gn)
{
	var se=igtbl_srcElement(evnt);
	var gs=igtbl_getGridById(gn);
	if(!gs || !se || gs.isDisabled())
		return;
	gs.event=evnt;
	var te=gs.Element;
	if(se.id==gn+"_vl" || se.id==gn+"_tb" || se.id==gn+"_ta")
		return;
	if(te.getAttribute("resizeRow") && (se.tagName=="TH" && se.parentNode.parentNode.tagName=="TFOOT" || se.tagName=="TD" && se.parentNode.getAttribute("hiddenRow")))
		return igtbl_tableMouseMove(evnt,gn);
	while(se && !(se.tagName=="TD"
				|| se.parentNode && se.parentNode.tagName=="TR" && se.tagName=="TH"
				))
		se=se.parentNode;
	if(!se || se.tagName!="TD"
		&& se.tagName!="TH"
	)
		return;
	var row;
	var cell=igtbl_getCellByElement(se);
	var id=se.id;
	if(cell)
	{
		row=cell.Row;
		if(!cell || !cell.Element) return;
		id=cell.Element.id;
	}
	else row=igtbl_getRowById(se.id);
	if(!row && !cell)
		return;
	
	if (cell&&cell.Row.IsFilterRow)return;
	var bandNo=row.Band.Index;
	var fac=row.Band.firstActiveCell;
	if(igtbl_button(gn,evnt)==0)
	{
		var mode = te.getAttribute("elementMode");
		
		if(!cell)
		{
			var cursorName = se.getAttribute("oldCursor");
			if(cursorName!=null)
			{
				se.style.cursor=cursorName;
				se.removeAttribute("oldCursor");
			}
		}
		if(mode && mode=="select" && !evnt.ctrlKey) 
		{
			var lsc=te.getAttribute("lastSelectedCell");
			if(!lsc || lsc!=se.id)
				igtbl_selectRegion(gn,se);
			te.setAttribute("lastSelectedCell",id);
		}
	}
	else if(igtbl_getOffsetY(evnt,se)>igtbl_clientHeight(se)-4 && !cell && igtbl_getRowSizing(gn,bandNo,row.Element)==2)
	{
		var cursorName = se.getAttribute("oldCursor");
		if(cursorName==null)
			se.setAttribute("oldCursor", se.style.cursor);
		se.style.cursor="n-resize";
		igtbl_colButtonMouseOut(null,gn);
	}
	else
	{
		te.removeAttribute("elementMode");
		te.removeAttribute("resizeRow");
		var cursorName = se.getAttribute("oldCursor");
		if(cursorName!=null)
		{
			se.style.cursor=cursorName;
			se.removeAttribute("oldCursor");
		}
		if(!cell)
			igtbl_colButtonMouseOut(null,gn);
		else 
		{
			var column=(cell?cell.Column:null);
			
			if(cell && cell.hasButtonEditor(igtbl_cellButtonDisplay.OnMouseEnter))
			{
				if(gs._editorButton&&gs._editorButton.style.display!="")
					if(gs._mouseWait++>5)
						gs._mouseWait=0;
				if(gs._mouseIn!=id)
					igtbl_showColButton(gn,cell.Element);
			}
			else
				igtbl_colButtonMouseOut(null,gn);
		}
	}
	gs._mouseIn=id;
	return false;
}

// Event handler for mouse out from cell
function igtbl_cellMouseOut(evnt,gn)
{
	var gs=igtbl_getGridById(gn);
	var se=igtbl_srcElement(evnt);
	if(!gs || !se || gs.isDisabled())
		return;
	gs.event=evnt;
	if(se.tagName=="NOBR")
	{
		var cell=igtbl_getCellByElement(se.parentNode);
		if(cell)
			cell.Element.childNodes[0].title="";
		se=se.parentNode;
	}
	while(se && !(se.tagName=="TD"
				|| se.parentNode && se.parentNode.tagName=="TR" && se.tagName=="TH"
				))
		se=se.parentNode;
	if(!se || se.tagName!="TD"
		&& se.tagName!="TH"
	)
		return;
	var row;
		var cell=igtbl_getCellByElement(se);
		var id=se.id;
	if(cell)
	{
		if(!cell.Element) return;
		row=cell.Row;
		id=cell.Element.id;
		var btn=igtbl_getElementById(gn+"_bt")
		if(btn && btn.style.display=="" && btn.getAttribute("srcElement")==id && evnt.toElement && evnt.toElement.id!=id && evnt.toElement.id!=gn+"_bt")
			igtbl_colButtonMouseOut(null,gn);
	}
	else row=igtbl_getRowById(id);
	if(!row && !cell) return;
	if(igtbl_isMouseOut(se,evnt))
		igtbl_fireEvent(gn,gs.Events.MouseOut,"(\""+gn+"\",\""+id+"\",0)");
}

function igtbl_cellDblClick(evnt,gn)
{
	var gs=igtbl_getGridById(gn);
	if(!gs || gs.isDisabled())
		return;
	gs.event=evnt;
	var se=igtbl_srcElement(evnt);
	if(!se||se.id==gn+"_vl"||se.id==gn+"_tb"||se.id==gn+"_ta")
		return;
	while(se && (se.tagName!="TD" && se.tagName!="TH" || se.id.length<gn.length || se.id.substr(0,gn.length)!=gn))
		se=se.parentNode;
	if(!se)
		return;
	if(se.tagName!="TD" && se.tagName!="TH")
		return;
	var row;
	var id=se.id;
	var cell=igtbl_getCellById(id);
	if(cell)
	{
		row=cell.Row;
		id=cell.Element.id;
	}
	else row=igtbl_getRowById(se.id);
	var column=igtbl_getColumnById(se.id);
	if(!row && !cell && !column) return;
	if(se.tagName=="TD"
		|| se.tagName=="TH" && row 
	)
	{
		if(se.getAttribute("groupRow"))
		{
			igtbl_toggleRow(gn,row.Element.id);
			return;
		}
		
		if(igtbl_fireEvent(gn,gs.Events.DblClick,"(\""+gn+"\",\""+id+"\")")==true)
			return;
		if(row && !cell)
		{
			if(gs.NeedPostBack)
				
				igtbl_doPostBack(gn,'RowDblClick:'+row.Element.id+(row.getLevel(true)?"\x05"+row.getLevel(true):""));
			return;
		}
		var bandNo=row.Band.Index;
		if(gs.NeedPostBack)
		{
			if(igtbl_getCellClickAction(gn,bandNo)==2)
				
				igtbl_doPostBack(gn,'RowDblClick:'+row.Element.id+(row.getLevel(true)?"\x05"+row.getLevel(true):""));
			else
				igtbl_doPostBack(gn,'CellDblClick:'+id+(cell.getLevel(true)?"\x05"+cell.getLevel(true):""));
			return;
		}
		if(igtbl_getCellClickAction(gn,bandNo)==0)
			return;
		
		var cancelEdit = gs._exitEditCancel;
		var activeRow = gs.getActiveRow();
		if (activeRow && activeRow != row)
		{
			cancelEdit |= gs.fireEvent(gs.Events.BeforeRowDeactivate, [gs.Id, activeRow.Element.id]) == true;
			cancelEdit |= gs.fireEvent(gs.Events.BeforeRowActivate, [gs.Id, row.Element.id]) == true;
		}
		if(!cancelEdit)
		{
			
			if(cell.Column.getAllowUpdate()==3 && cell.getEditable() != "no" && !cell.Row.IsFilterRow)
				row.editRow(true);
			else
				cell.beginEdit();
		}
	}
	else
	{
		
		if(igtbl_fireEvent(gn,gs.Events.DblClick,"(\""+gn+"\",\""+se.id+"\")")==true)
			return;
		if(gs.NeedPostBack)
			igtbl_doPostBack(gn,'HeaderDblClick:'+se.id);
	}
}

var igtbl_dontHandleChkBoxChange=false;
function igtbl_chkBoxChange(evnt,gn)
{
	if(igtbl_dontHandleChkBoxChange||
	 (ig_csom.IsIE && evnt.propertyName!="checked")||
	 (!ig_csom.IsIE && evnt.type!="change")
	 )
		return false;
	var se=igtbl_srcElement(evnt);
	if(!se)return false;
	var c=se.parentNode;
	while(c && !(c.tagName=="TD" && c.id!=""))
		c=c.parentNode;
	if(!c) return;
	var s=se;
	var cell=igtbl_getCellById(c.id);
	if(!cell) return;
	if(!evnt && event) evnt=event;
	if(!gn) gn=cell.Band.Grid.Id;
	var column=cell.Column;
	var gs=igtbl_getGridById(gn);
	gs.event=evnt;
	var oldValue=!s.checked;
	if(gs._exitEditCancel || !cell.isEditable() || igtbl_fireEvent(gn,gs.Events.BeforeCellUpdate,"(\""+gn+"\",\""+c.id+"\",\""+s.checked+"\")"))
	{
		igtbl_dontHandleChkBoxChange=true;
		s.checked=oldValue;
		igtbl_dontHandleChkBoxChange=false;
		return true;
	}
	cell.Row._dataChanged|=2;
	if(typeof(cell._oldValue)=="undefined")
		cell._oldValue=oldValue;
	igtbl_saveChangedCell(gs,cell,s.checked.toString());
	cell.Value=cell.Column.getValueFromString(s.checked);
	if(!c.getAttribute("oldValue"))
		c.setAttribute("oldValue",s.checked);
	
	if(c.getAttribute(igtbl_sUnmaskedValue))
		c.setAttribute(igtbl_sUnmaskedValue, s.checked.toString());
	c.setAttribute("chkBoxState",s.checked.toString());
	var cca=igtbl_getCellClickAction(gn,column.Band.Index);
	if(cca==1 || cca==3)
		igtbl_setActiveCell(gn,c);
	else if(cca==2)
		igtbl_setActiveRow(gn,c.parentNode);
		
	if(cell.Node)
	{
		cell.setNodeValue(!s.checked?"False":"True");
		var cdata=cell.Node.firstChild;
		if(s.checked)
			cdata.text=cdata.text.replace("type='checkbox'","type='checkbox' checked");
		else
			cdata.text=cdata.text.replace(" checked","");
		gs.invokeXmlHttpRequest(gs.eReqType.UpdateCell,cell,s.checked);
	}
	else if(ig_csom.IsNetscape6)
		gs.invokeXmlHttpRequest(gs.eReqType.UpdateCell,cell,s.checked);
	igtbl_fireEvent(gn,gs.Events.AfterCellUpdate,"(\""+gn+"\",\""+c.id+"\",\""+s.checked+"\")");
	if(gs.LoadOnDemand==3)
		gs.NeedPostBack=false;
	if(gs.NeedPostBack)
		igtbl_doPostBack(gn);
	return false;
}

function igtbl_colButtonClick(evnt,gn,b,se)
{
	if(!b)b=igtbl_getElementById(gn+"_bt");
	if(b&&se==null)
		se=igtbl_getElementById(b.getAttribute("srcElement"));
	if(se==null || !se.id)
	{
		if(!se)
			se=igtbl_srcElement(evnt).parentNode;
		else
			se=se.parentNode;
		if(se && se.tagName=="NOBR")
			do
			{
				se=se.parentNode;
			}while(se && se.tagName!="TD");
	}
	var gs=igtbl_getGridById(gn);
	if(gs==null||gs._exitEditCancel||se==null||se.id=="" || gs.isDisabled())
		return;
	gs.event=evnt;
	var cell=igtbl_getCellById(se.id);
	if(!cell)return;
	var sel=cell!=gs.oActiveCell;
	try{
		if(sel && igtbl_isChild(gn,cell.Element))cell.activate();
	}catch(e){}
	igtbl_fireEvent(gn,gs.Events.ClickCellButton,"(\""+gn+"\",\""+se.id+"\")");
	if(gs.NeedPostBack)
	{
				
		var cellInfo = cell.Row._generateUpdateRowSemaphore(false);
		if(igtbl_doPostBack(gn,'CellButtonClick:'+se.id+"\x05"+cell.getLevel(true)+(gs.LoadOnDemand==3?"\x02"+cellInfo+"\x02"+cell.Row.Band.Index+"\x02"+cell.Row.DataKey:"")))
			return;
	}	
}

function igtbl_colButtonMouseOut(evnt,gn)
{
	var gs=igtbl_getGridById(gn);
	if(gs==null || gs.isDisabled())return;
	var b=igtbl_getElementById(gn+"_bt");
	if(!b||b.getAttribute("noOnBlur"))
		return;
	if(evnt && evnt.toElement && evnt.toElement.id==b.getAttribute("srcElement"))
		return;
	if(b.style.display=="")
	{
		b.setAttribute("noOnBlur",true);
		b.style.display="none";
		b.removeAttribute("srcElement");
		if(!gs.Activation.AllowActivation)
			return;
		if(gs.oActiveCell)
		{
			
			if(gs.oActiveCell.hasButtonEditor(igtbl_cellButtonDisplay.OnMouseEnter))
				igtbl_showColButton(gn,gs.oActiveCell.Element);
		}
		window.setTimeout("igtbl_clearNoOnBlurBtn('"+gn+"')",100);
		gs._mouseIn=null;
	}
}

function igtbl_colButtonEvent(evnt,gn)
{
}


function igtbl_dropDownChange(evnt,gn)
{
	var sel = null;
	if (!gn)
	{
		sel = igtbl_srcElement(evnt);
		gn = sel.id.substring(0,sel.id.length-3);
	}
	else
	{
		sel = igtbl_getElementById(gn+"_vl");
	}
	igtbl_getGridById(gn).event=evnt;
	if(sel && sel.style.display=="")
		igtbl_fireEvent(gn,igtbl_getGridById(gn).Events.ValueListSelChange,"(\""+gn+"\",\""+gn+"_vl\",\""+sel.getAttribute("currentCell")+"\");");
}

function igtbl_fixedClick(evnt)
{
	var se=igtbl_srcElement(evnt);
	if(!se)return;
	var pn=se.parentNode;
	while(pn && pn.tagName!="TH") pn=pn.parentNode;
	if(!pn || !pn.id) return;
	var column=igtbl_getColumnById(pn.id);
	if(column.Band.Grid.UseFixedHeaders)
	{
		if(column.getFixed())
			igtbl_doPostBack(column.Band.Grid.Id,"Unfix:"+column.Band.Index+":"+column.Index);
		else
			igtbl_doPostBack(column.Band.Grid.Id,"Fix:"+column.Band.Index+":"+column.Index);
		return igtbl_cancelEvent(evnt);
	}
}

function igtbl_mouseWheel(evnt,gn)
{
	var gs=igtbl_getGridById(gn);
	if(!gs || !gs._scrElem || gs.isDisabled()) return;
	if(evnt.wheelDelta)
	{
		igtbl_hideEdit(gn);
		gs._scrElem.scrollTop-=evnt.wheelDelta/3;
	}
}

if(typeof(ig_csom)!="undefined")
	ig_csom.addEventListener(document.documentElement,"mousewheel",igtbl_globalMouseWheel);
	
function igtbl_globalMouseWheel(evnt)
{

    var scrElem = evnt.srcElement?evnt.srcElement:evnt.target;
    var hideEdit=true;
	for(var gn in igtbl_gridState)
	{
	    if (scrElem==null || scrElem.id != gn+"_vl")
	    {
	        
	        
		    if (typeof(igcmbo_getComboById)=="function")
		    {
		        var g = igtbl_getGridById(gn);
		        
		        if(igtbl_getElementById(g.Id) != null)
		        {
					
					var comboId=igtbl_getElementById(g.Id).getAttribute("igComboId");
					var src = igcmbo_srcElement(evnt);
					if (comboId)
					{	         
						if( igtbl_isAChildOfB(src,g.Element.parentNode))
						{
							hideEdit=false;
						}
					}
					else 
					{
						
						if(g._editorCurrent && igcmbo_displaying && igcmbo_displaying.Element.id==g._editorCurrent.id)
						{
							
							if( igtbl_isAChildOfB(src,igcmbo_displaying.getGrid().Element.parentNode))
							{
								hideEdit=false;
							}
						}
					}
				}
		    }
		    
			if(hideEdit)
			{				    			     		    
				igtbl_hideEdit(gn);
				
				
				var grid = igtbl_getGridById(gn);
				for(var b=0; b<grid.Bands.length; b++)
	            {
		            for(var c=0; c<grid.Bands[b].Columns.length; c++)
		                for(var v=0; v<grid.Bands[b].Columns[c].Validators.length; v++)
		                {
			                if(document.getElementById(grid.Bands[b].Columns[c].Validators[v])
			                    && !document.getElementById(grid.Bands[b].Columns[c].Validators[v]).isvalid)
			                {			                    			                    
			                    return false;
			                }
			            }
	            }
			}
			hideEdit=true;
		}
	}	
}

function igtbl_onScrollFixed(evnt,gn)
{
	var g=igtbl_getGridById(gn)
	if(!g || !g._scrElem) return;
	var s=g.Element.parentNode.scrollTop;
	igtbl_scrollTop(g.Element.parentNode,0);
	igtbl_scrollTop(g.Element.parentNode.parentNode,0);
	igtbl_scrollTop(g._scrElem,s);
}

function igtbl_onResizeFixed(evnt,gn)
{
	var g=igtbl_getGridById(gn)
	if(!g || !g._scrElem) return;
	if(g.Element.getAttribute("noOnResize"))
	{
		if(g._scrElem.getAttribute("oldW"))
			g._scrElem.style.width=g._scrElem.getAttribute("oldW");
		if(g._scrElem.getAttribute("oldH"))
			g._scrElem.style.height=g._scrElem.getAttribute("oldH");
		return igtbl_cancelEvent(evnt);
	}
	if(!g._scrElem.style.width || g._scrElem.style.width.charAt(g._scrElem.style.width.length-1)!="%")
		g._scrElem.setAttribute("oldW",g._scrElem.offsetWidth);
	if(!g._scrElem.style.height || g._scrElem.style.height.charAt(g._scrElem.style.height.length-1)!="%")
		g._scrElem.setAttribute("oldH",g._scrElem.offsetHeight);
}     



function igtbl_onStationaryMarginScroll(evnt, gn, marginId) 
{
	var gs = igtbl_getGridById(gn);
	var marginElement = document.getElementById(marginId);
	if(marginElement && marginElement.scrollLeft != 0 && !gs.UseFixedHeaders) 
	{
		
		var scrollLeft=marginElement.scrollLeft+-marginElement.childNodes[0].offsetLeft;
		marginElement.scrollLeft=0;
		gs.DivElement.scrollLeft=scrollLeft;
	}
	else if(marginElement && marginElement.scrollLeft != 0 && gs.UseFixedHeaders)
	{
		
		var offsetDiv =	marginElement.childNodes[0].childNodes[1].childNodes[0].childNodes[0].childNodes[0];
		if(offsetDiv.id != gn + "_drs") {
			offsetDiv = marginElement.childNodes[0].childNodes[1].childNodes[0].childNodes[2].childNodes[0];
		}
		var scrollLeft=marginElement.scrollLeft+-offsetDiv.childNodes[0].offsetLeft;
		marginElement.scrollLeft=0;
		document.getElementById(gn+"_divscr").scrollLeft=scrollLeft;
	}
}


var igtbl_oldOnBodyResize;
function igtbl_onBodyResize()
{
	var result;
	if(igtbl_oldOnBodyResize)
	{
		result=igtbl_oldOnBodyResize();
	}
	if(!document.body.getAttribute("noOnBodyResize"))
		for(var gridId in igtbl_gridState)
		{
			var grid=igtbl_getGridById(gridId);
			
			if(!grid || !grid.MainGrid || !grid.MainGrid.parentNode)
				continue;
			if (igtbl_inEditMode(gridId)) 
			{
				igtbl_hideEdit(gridId);
			}
			
			grid.alignStatMargins();
		}
	return result;
}




igtbl_oldSelectTab=null;
function igtbl_tabChanges(tab,index)
{
	var selectedTab=tab.getSelectedTab();
	if(selectedTab && selectedTab.index!=index)
	{
		for(var gId in igtbl_gridState)
		{
			var g=igtbl_getGridById(gId);
			if(igtbl_isAChildOfB(g.MainGrid,selectedTab.elemDiv))
			{
				var pn=g.MainGrid.parentNode;
				if(!pn.id || pn.id.length<=10 || pn.id.substr(pn.id.length-10,10)!="_container")
					g.hide();
				
				
				igtbl_showColButton(gId,"hide");
			}
		}
	}
	igtbl_oldSelectTab(tab,index,arguments[2]);
	selectedTab=tab.getSelectedTab();	
	if(selectedTab)
	{
		for(var gId in igtbl_gridState)
		{
			var g=igtbl_getGridById(gId);
			if(igtbl_isAChildOfB(g.MainGrid,selectedTab.elemDiv))
			{
				g.show();
			}
		}
	}
}

function igtbl_onPagerClick(gn,evnt)
{
	var g=igtbl_getGridById(gn);
	if(!g || !evnt) return;
	if(!g.isLoaded())
		return ig_cancelEvent(evnt);
}


function igtbl_showFilterOptions(columnId,evnt)
{	
	
	var col = igtbl_getColumnById(columnId);
	
	if (col.Band.Grid.Element.getAttribute("elementMode")== "resize") return;
	
	var x = igtbl_button(null,evnt);
	
	var parentEl = evnt.srcElement;
	
	if (!parentEl) parentEl=evnt.target;
	do
	{
		if (parentEl.getAttribute("GroupByHeaderFloatingDiv"))
			return;
		parentEl=parentEl.parentNode;
	}while(parentEl && parentEl.tagName!="BODY")
	if(!col || !evnt ||  !(ig_csom.IsNetscape6 && evnt.button==0 || ig_csom.IsIE && evnt.button==1 )) return;
	
	var gs = col.Band.Grid;
	var ar=gs.getActiveRow();
	if(ar)
	{
		gs.endEdit();
		if(ar.IsAddNewRow)
			ar.commit();
		else
		if(ar._dataChanged && ar._dataChanged>1)
			ar.processUpdateRow();
	}
	
	col.showFilterDropDown();
	return ig_cancelEvent(evnt);
}
function igtbl_filterOptionMouseUp(evnt)
{
	
	if (!evnt ||  (ig_csom.IsIE && !evnt.srcElement) || (ig_csom.IsFireFox && !evnt.target) ) return;
	var src = ig_csom.IsIE ? evnt.srcElement : evnt.target ;
	
	while(src && !src.getAttribute("fo"))
		src = src.parentNode;
	if (!src)return;
	
	var value = src.getAttribute("value");	
	var filterObject = src.parentNode.parentNode._filterObject;
	var band = filterObject.Column.Band;
	var grid = band.Grid;
	
	
	if(filterObject._setFilter(value))return;
	filterObject.applyFilter();
	
	grid.alignStatMargins();
	grid.alignDivs();
	grid.fireEvent(grid.Events.AfterRowFilterApplied,[grid.Id,filterObject.Column]);
}


function igtbl_GridCornerClick()
{
	if(ig_csom.IsIE)
	{
		var elem = event.srcElement;
		var gridName = elem.getAttribute("gridName");
		var g = igtbl_getGridById(gridName);
		if(g)
		{
			igtbl_fireEvent(g.Id,g.Events.GridCornerImageClick,'("'+g.Id+'");');
		}
	}
}

function igtbl_globalMouseMove(evnt)
{		
	if(!evnt)
		evnt=event;
		
	if(typeof(igtbl_gridState)!="undefined" && igtbl_gridState)
	{
		for(var gId in igtbl_gridState)
		{	
			var gs = igtbl_gridState[gId];
			
			if(gs && gs.Element)
			{
				var scrElem = evnt.srcElement?evnt.srcElement:evnt.target;
				if(!ig_isAChildOfB(evnt.srcElement,gs.Element))
				{									
					if (gs.Element.getAttribute("elementMode")=="resize")
					{						
						if(igtbl_button(gId, evnt)==-1)
						{
							igtbl_clearResizeDiv(gs ,evnt, true);						
						}
					}
				}
			}				
		}
	}
}
function _igtbl_processServerPassedColumnFilters(serverFilterInfo,g)
{
	
	var itrCount = serverFilterInfo.length;
	for (var itr = 0; itr < itrCount ; itr++)
	{
		var filterInfo = serverFilterInfo[itr];
		
		if(!filterInfo)break;
		
		
		if (filterInfo[0])
		{
			var row = igtbl_getRowById(filterInfo[0]);
			if(row)
			{	var parentTableId="";
				var workingBand;
				if (row.Rows && row.Rows.Element)
				{
					var parentTable = row.Rows.Element;
					do
					{
						parentTable = parentTable.parentNode;
					}while (parentTable && !(parentTable.tagName=="TABLE" && parentTable.id.length>0))
					if (!parentTable)continue;
					parentTableId=parentTable.id;
					workingBand=row.Rows.Band;
				}
				else
				{
					parentTableId=filterInfo[0].replace("_r","_t");
					
					workingBand=g.Bands[row.Band.Index+1];
				}
				
				filterPanel = workingBand._filterPanels[parentTableId];
				if(filterPanel)
					filterPanel = filterPanel[filterInfo[1]];
				else
				{
					workingBand._filterPanels[parentTableId] = new Object();
				}
				if (!filterPanel)
				{
					filterPanel = workingBand._filterPanels[parentTableId][filterInfo[1]] = new igtbl_FilterDropDown(igtbl_getColumnById(filterInfo[1]));
					if (row)
						filterPanel.RowIsland = row.Rows;
				}
				filterPanel.setFilter(filterInfo[2],filterInfo[3],true);
			}
		}
		else
		{
			var band = g.Bands[0];
			var filteredColumn = igtbl_getColumnById(filterInfo[1]);
			if (!band._filterPanels[filteredColumn.Id])
			{
				band._filterPanels[filteredColumn.Id] = new igtbl_FilterDropDown(filteredColumn);
			}
			filterPanel = band._filterPanels[filteredColumn.Id];
			filterPanel.RowIsland = filteredColumn.Band.Grid.Rows;
			filterPanel.setFilter(filterInfo[2],filterInfo[3],true);
		}
	}
}
function _igtbl_setFilterIndicators(colFilters,rows)
{

    if (colFilters && colFilters.length>0)
	{
	    
	    _igtbl_setFilterIndicators(undefined,rows);
	    
	    var itrCount = colFilters.length;
	    for (var itr = 0; itr < itrCount ; itr++)
		{
		    var column = igtbl_getColumnById(colFilters[itr][1]);
		    _igtbl_setColumnFilterIndicator(column, true, rows);
        }
    }
    else if(rows)
	{
		
		var band = rows.Band;
		for(var itr = 0; itr < band.Columns.length ; itr++)
		{
			_igtbl_setColumnFilterIndicator(band.Columns[itr], false, rows);
		}
	} 
}

function _igtbl_setColumnFilterIndicator(column, isFiltered, rows)
{
    var filterImageSrc = column.Band.Grid.FilterDefaultImage;
    if(isFiltered)
        filterImageSrc = column.Band.Grid.FilterAppliedImage;
    
    var band = column.Band;    
    if (band.RowFilterMode==1 || band.Index==0 )
	{
		for(var itr = 0; itr < band.Columns.length ; itr++)
		{
			var headerTags = column._getHeadTags();
			if(headerTags)
			{
				for(var cnt = 0; cnt<headerTags.length;cnt++)				    
				    _igtbl_changeFilterImage(column, headerTags[cnt], filterImageSrc);
			}	
		}
	}
	else
	{
		for(var itr = 0; itr < band.Columns.length ; itr++)
		{
			var myDirectColumnHeader = igtbl_getChildElementById(rows.Element.parentNode,column.Id);
			if(myDirectColumnHeader)
		        _igtbl_changeFilterImage(column, myDirectColumnHeader, filterImageSrc);
    	}
	}
}

function _igtbl_changeFilterImage(column, header, newImageSrc)
{
    var filterImg = column._findFilterImage(header);
	if(filterImg)
	{
		filterImg.src = newImageSrc;
        
		var alt = filterImg.getAttribute("alt");
		if(alt != null)
		{
			var clpsAlt = filterImg.getAttribute("igAltF1");
			if(clpsAlt != null){
				filterImg.setAttribute("igAltF0",alt);						
				filterImg.setAttribute("alt",clpsAlt);
				filterImg.removeAttribute("igAltF1");
			}
		}
	}		
}

function _igtbl_containsColumnFilter(column_Id, colFilters) 
{
    if(!colFilters || colFilters.length == 0)
        return false;
    
    for(var x=0; x<colFilters.length; x++) 
    {
        if(column_Id == colFilters[x][1])
            return true;
    }
    
    return false;
}

function igtbl_filterGridScroll()
{
	for(var gridId in igtbl_gridState)
	{
		var g = igtbl_getGridById(gridId);
		if (g._currentFilterDropped)
			g._currentFilterDropped.show(false);
	}
}



function igtbl_filterTypeKeyDown(evnt)
{
    var src = evnt.srcElement?evnt.srcElement:evnt.target; 
    while(src && src.tagName!="TD")
    {
        src=src.parentNode;
    }
    var cell=src.Object;
    if(!cell)cell=igtbl_getCellById(src.id);
    switch(evnt.keyCode)
    {
        case(27): 
        {
            var col=cell.Column;
            if (col.FilterIconsList!=null)
            {
            col.FilterIconsList.show();
            }
            
            igtbl_cancelEvent(evnt);
        }
        case(9): 
        {
            var col=cell.Column;
            if (col.FilterIconsList!=null)
            {
                col.FilterIconsList.show();
            }
            
            cell.getNextTabCell(evnt.shiftKey,true)
            igtbl_cancelEvent(evnt);
        }
    }
}


function igtbl_filterTypeSelect(evnt)
{
    var src = evnt.srcElement?evnt.srcElement:evnt.target;
    while(src && src.tagName!="TD")
    {
        src=src.parentNode;
    }
    var cell=src.Object;
    if(!cell)cell=igtbl_getCellById(src.id);
    
    var col=cell.Column;
    if (col.FilterIconsList==null)
    {
        col.FilterIconsList=new igtbl_FilterIconsList(col);
    }
    col.FilterIconsList.show(cell);
    igtbl_cancelEvent(evnt);
}
function igtbl_filterIconsMouseUp(evnt)
{
	
	if (!evnt ||  (ig_csom.IsIE && !evnt.srcElement) || (ig_csom.IsFireFox && !evnt.target) ) return;
	var src = ig_csom.IsIE ? evnt.srcElement : evnt.target ;
	
	while(src&&!src.getAttribute("filterListOption"))
		src=src.parentNode;
	if (!src)return;
	var value=src.getAttribute("operator");
	var filterIconSource=src;
	while(filterIconSource&&!filterIconSource.getAttribute("filterIconList"))
	    filterIconSource=filterIconSource.parentNode;
	filterIconSource=filterIconSource.object;
	var filterCell=filterIconSource._currentCell;
	
	filterCell._setFilterTypeImage(value);
	
	
    var columnFilter = filterCell.Column._getFilterPanel(filterCell.Row.Element);
                        
    if(columnFilter.IsActive())
    {
		
		// If the operand is changed while the compare value is cleared, the filter operand should be all
		// rather than whatever was choosen.
		var compareValue = columnFilter.getEvaluationValue();
        if (compareValue==null || compareValue=="") value=igtbl_filterComparisionOperator.All;
		
        
        columnFilter.setFilter(value, compareValue);
            
        columnFilter.applyFilter();
    }
    else
    {   
        columnFilter.setOperator(value);
    }
}

function igtbl_clearNoOnBlurBtn(gn)
{
	var b=igtbl_getElementById(gn+"_bt");
	b.removeAttribute("noOnBlur");
}

function igtbl_clearNoOnBlurElem(id)
{
	var e=igtbl_getElementById(id);
	
	if(e) e.removeAttribute("noOnBlur");
}


function igtbl_cancelNoOnBlurTB(gn,id)
{
	if(id)
	{
		var src=igtbl_getElementById(id);
		if(src)
		{
			src.removeAttribute("noOnBlur");
			return;
		}
	}
	var textBox=igtbl_getElementById(gn+"_tb");
	if(textBox && textBox.style.display=="")
		textBox.removeAttribute("noOnBlur");
	var sel=igtbl_getElementById(gn+"_vl");
	if(sel && sel.style.display=="")
		sel.removeAttribute("noOnBlur");
}

function igtbl_cancelNoOnBlurDD(gn)
{
	if(arguments.length==0)
		gn=igtbl_lastActiveGrid;
	var gs=igtbl_getGridById(gn);
	
	if(gs && (gs.editorControl || gs._editorCustom) )
	{
		if(gs.editorControl)
			gs.editorControl.Element.removeAttribute("noOnBlur");
		else
			gs._editorCustom.Element.removeAttribute("noOnBlur");
	}
}

function igtbl_blur(gn)
{
	window.setTimeout("igtbl_blurTimeout('"+gn+"')",100);
}

function igtbl_blurTimeout(gn)
{
	var g=igtbl_getGridById(gn);
	if(!g) return;
	var ar=g.getActiveRow();
	var activeElement=null;
	try{
	activeElement=document.activeElement;
	}catch(e){;}
	if(ar && !igtbl_inEditMode(gn) && activeElement && !igtbl_isAChildOfB(activeElement,g.DivElement))
	{
		if(ar.IsAddNewRow)
			ar.commit();
		else
		if(ar.processUpdateRow)
			ar.processUpdateRow();
	}
	if(g._focusElem)
		if(g._lastKey==9||g._lastKey==13||g._lastKey==27)
			igtbl_activate(gn);
}

function igtbl_getGridById(gridId) 
{
	if(typeof(igtbl_gridState)=="undefined")
		return null;
	var grid=igtbl_gridState[gridId];
	if(!grid)
		for(var gId in igtbl_gridState)
			if(igtbl_gridState[gId].UniqueID==gridId || igtbl_gridState[gId].ClientID==gridId)
			{
				grid=igtbl_gridState[gId];
				break;
			}
	return grid;
}

function igtbl_getBandById(tagId) 
{
	if(!tagId)
		return null;
	var parts = tagId.split("_");
	var gridId = parts[0];
	var el=igtbl_getElementById(tagId);
	var bandIndex=igtbl_getBandNo(el);
	var objTypeId = parts[1];

	if(objTypeId=="c" && el && el.tagName=="TH")
	{
		bandIndex=parts[2];
	}
	if(!igtbl_getGridById(gridId))
		return null;
	var grid = igtbl_getGridById(gridId);
	return grid.Bands[bandIndex];
}

function igtbl_getColumnById(tagId) 
{
	if(!tagId)
		return null;
	var parts = tagId.split("_");
	var bandIndex = parts.length - 2;
	var gridId = parts[0];
	var objTypeId = parts[1];
	var el=igtbl_getElementById(tagId);
	
	if(objTypeId=="anc" && el && el.tagName=="TD")
	{
		bandIndex=igtbl_getBandById(tagId).Index;
	}
	else
    if(objTypeId=="flc" && el.tagName=="TD") 
    {
        bandIndex=igtbl_getBandById(tagId).Index;
    }
    else
	if(objTypeId=="rc" && el && el.tagName=="TD")
	{
		bandIndex=igtbl_getBandById(tagId).Index;
	}
	else if(objTypeId=="cf")
	{
		if(el && el.tagName!="TH")
			return null;
		bandIndex=parts[2];
	}
	else if(objTypeId=="cg")
	{
		if(el && el.tagName!=
			"TH"
		)
			return null;
		bandIndex=parts[2];
	}
	else if (objTypeId=="c")
	{
		if (el && el.tagName!="TH")
			return;
		bandIndex=parts[2];			
	}
	else
		return null;

	if(!igtbl_getGridById(gridId))
		return null;
	var grid = igtbl_getGridById(gridId);
	var band = grid.Bands[bandIndex];
	var colIndex = parts[parts.length - 1];
	return band.Columns[colIndex];
}

function igtbl_getRowById(tagId) 
{
	if(!tagId)
		return null;
	var parts = tagId.split("_");

	var rowTypeId = parts[1];
	var gridId = parts[0];
	var row=null;
	var isGrouped=false;
		
	var gridIdStore = gridId;
	if(rowTypeId == "anfr")
	{
		row=igtbl_getWorkRow(igtbl_getElementById(tagId).parentNode.parentNode.parentNode.parentNode.parentNode);
		if(!row || row.tagName!="TR")
			row=null;
			
		if (row && !_validateGrid(gridId))
		{
			row=null
			gridId=gridIdStore;
		}
	}

	if(row==null && rowTypeId=="grc")
	{
		row=igtbl_getElementById(tagId);
		if(typeof(row)!="undefined" && row)
			row=row.parentNode;
		if(!row || !row.getAttribute("groupRow"))
			row=null;
		isGrouped=true;
			
		if (row && !_validateGrid(gridId))
		{
			row=null
			gridId=gridIdStore;
			isGrouped=false;
		}
	}
	if(row==null && rowTypeId=="sgr")
	{
		row=igtbl_getWorkRow(igtbl_getElementById(tagId));
		if(!row || !row.getAttribute("groupRow"))
			row=null;
		isGrouped=true;
			
		if (row && !_validateGrid(gridId))
		{
			row=null
			gridId=gridIdStore;
			isGrouped=false;
		}		
	}

	if(row==null && rowTypeId=="nfr")
	{
		row=igtbl_getWorkRow(igtbl_getElementById(tagId).parentNode.parentNode.parentNode.parentNode.parentNode);
		if(!row || row.tagName!="TR")
			row=null;
			
		if (row && !_validateGrid(gridId))
		{
			row=null
			gridId=gridIdStore;
			isGrouped=false;
		}			
	}
	if(row==null && rowTypeId=="anr")
	{
		row=igtbl_getElementById(tagId);
		if(!row || row.tagName!="TR")
			row=null;
			
		if (row && !_validateGrid(gridId))
		{
			row=null
			gridId=gridIdStore;
			isGrouped=false;
		}			
	}
	if(row==null && rowTypeId=="anl")
	{
		row=igtbl_getElementById(tagId);
		if(typeof(row)!="undefined" && row)
			row=row.parentNode;
		if(!row || row.tagName!="TR")
			row=null;
			
		if (row && !_validateGrid(gridId))
		{
			row=null
			gridId=gridIdStore;
			isGrouped=false;
		}			
	}
	if(row==null && rowTypeId=="anc")
	{
		row=igtbl_getElementById(tagId);
		if(typeof(row)!="undefined" && row)
			row=row.parentNode;

		if(row && row.id.substr(0,gridId.length+5)==gridId+"_anfr")
			do{
				row=row.parentNode
			}while(row && row.tagName!="TR");
		if(!row || row.tagName!="TR")
			row=null;
			
		if (row && !_validateGrid(gridId))
		{
			row=null
			gridId=gridIdStore;
			isGrouped=false;
		}			
	}
	if(row==null && rowTypeId=="gr")
	{
		row=igtbl_getElementById(tagId);
		if(!row || !row.getAttribute("groupRow"))
			row=null;
		isGrouped=true;
			
		if (row && !_validateGrid(gridId))
		{
			row=null
			gridId=gridIdStore;
			isGrouped=false;
		}		
	}
	if(row==null && rowTypeId=="rh")
	{
		row=igtbl_getElementById(tagId);
		if(typeof(row)!="undefined" && row)
			row=row.previousSibling;
		if(!row || !row.getAttribute("hiddenRow"))
			row=null;
			
		if (row && !_validateGrid(gridId))
		{
			row=null
			gridId=gridIdStore;
			isGrouped=false;
		}			
	}
	if(row==null && rowTypeId=="rc")
	{
		row=igtbl_getElementById(tagId);
		if(typeof(row)!="undefined" && row)
			row=row.parentNode;


		if(row && row.id.substr(0,gridId.length+1)==gridId.substr(0,gridId.length-2)+"_nfr")
			do{
				row=row.parentNode
			}while(row && row.tagName!="TR");
		if(!row || row.tagName!="TR")
			row=null;
			
		if (row && !_validateGrid(gridId))
		{
			row=null
			gridId=gridIdStore;
			isGrouped=false;
		}			
	}
	if(row==null && rowTypeId=="r")
	{
		row=igtbl_getElementById(tagId);
		if(!row || row.tagName!="TR")
			row=null;
			
		if (row && !_validateGrid(gridId))
		{
			row=null
			gridId=gridIdStore;
			isGrouped=false;
		}			
	}
	if(row==null && rowTypeId=="l")
	{
		row=igtbl_getElementById(tagId);
		if(typeof(row)!="undefined" && row)
			row=row.parentNode;
		if(!row || row.tagName!="TR")
			row=null;
			
		if (row && !_validateGrid(gridId))
		{
			row=null
			gridId=gridIdStore;
			isGrouped=false;
		}			
	}
	if (row==null && rowTypeId=="t")
	{
		row=igtbl_getElementById(tagId);
		if(typeof(row)!="undefined" && row)
			row=row.parentNode.parentNode.previousSibling;
		if (row && !_validateGrid(gridId))
		{
			row=null
			gridId=gridIdStore;
			isGrouped=false;
		}			
	
	}
    
    if (row==null && rowTypeId=="flc")
    {
    	row=igtbl_getElementById(tagId);
		if(typeof(row)!="undefined" && row)
			row=row.parentNode;

		if(row && row.id.substr(0,gridId.length+5)==gridId+"_flfr")
			do{
				row=row.parentNode
			}while(row && row.tagName!="TR");
		if(!row || row.tagName!="TR")
			row=null;
		
        if (row && !_validateGrid(gridId))
        {
            row=null
            gridId=gridIdStore;
            isGrouped=false;
        }	
    }
    
    if (row==null && rowTypeId=="flfr")
    {
		row=igtbl_getWorkRow(igtbl_getElementById(tagId).parentNode.parentNode.parentNode.parentNode.parentNode);
		if(!row || row.tagName!="TR")
			row=null;
			    
        if (row && !_validateGrid(gridId))
        {
            row=null
            gridId=gridIdStore;
            isGrouped=false;
        }	
    }
    
    if (row==null && rowTypeId=="fll")
    {
		row=igtbl_getElementById(tagId);
		if(typeof(row)!="undefined" && row)
			row=row.parentNode;
		if(!row || row.tagName!="TR")
			row=null;
			    
        if (row && !_validateGrid(gridId))
        {
            row=null
            gridId=gridIdStore;
            isGrouped=false;
        }	
    }
    
    if (row==null && rowTypeId=="flr")
    {
    	row=igtbl_getElementById(tagId);
		if(!row || row.tagName!="TR")
			row=null;
        if (row && !_validateGrid(gridId))
        {
            row=null
            gridId=gridIdStore;
            isGrouped=false;
        }	
    }
	if(row==null)
		return null;
	var gs=igtbl_getGridById(gridId);
	if(!gs)
		return null;
	
	if(typeof(row.Object)!="undefined" && row.Object.Band)
		return row.Object;
	else
	{
		parts=new Array();
		while(true)
		{
			row=igtbl_getWorkRow(row,gridId);
			var level=-1;
			
			var bandZero=gs.Bands[0];
			if(gs.Bands.length==1 && !bandZero.IsGrouped)
			{
				level=row.sectionRowIndex;
				if(!gs.StatHeader && (bandZero.AddNewRowVisible==1 && bandZero.AddNewRowView==1

					|| bandZero.FilterRowView==1 && bandZero.FilterUIType==1
				  ))
					level--;
			}
			else
				for(var i=0;i<row.parentNode.childNodes.length;i++)
				{
					var r=row.parentNode.childNodes[i];
					if(!r.getAttribute("hiddenRow")
						&& !r.getAttribute("addNewRow")
                        && !r.getAttribute("filterRow")
					)
						level++;
					if(r==row)
						break;
				}
			parts[parts.length]=level;
			if(row.parentNode.parentNode.id==gs.Element.id)
				break;
			row=row.parentNode.parentNode.parentNode.parentNode.previousSibling;
		}
		
		if(parts.length > 1)
		    parts=parts.reverse();
		var rows=gs.Rows;
		for(var i=0;i<parts.length;i++)
		{
			row=rows.getRow(parseInt(parts[i],10),row.Element?null:row);
			if(row && row.Expandable && i<parts.length-1)
				rows=row.Rows;
			else if(i<parts.length-1)
			{
				row=null;
				break;
			}
		}
		if(!row)
			return null;
		delete parts;
		row.Element.Object=row;
		return row;
	}
}

function igtbl_getCellById(tagId) 
{
	if(!tagId)
		return null;
	var parts = tagId.split("_");
	var gridId = parts[0];
	var cellTypeId = parts[1];	

	if( cellTypeId!="rc" )
	{
	if( cellTypeId!="anc")	
         
        if(cellTypeId!="flc")

			return null;
	}
	var gs=igtbl_getGridById(gridId);
	if(!gs)
		return null;
	
	var row = igtbl_getRowById(igtbl_getRowIdFromCellId(tagId));
	if(!row)
		return null;
	var column=row.Band.Columns[parseInt(parts[parts.length-1],10)];
	return row.getCellByColumn(column);
}
function igtbl_getRowIdFromCellId(id)
{
	if(id==null || id.length==0) return;
	var rowIdAr = id.split("_");
	switch(rowIdAr[1])
	{
		case("rc"):
			rowIdAr[1]="r";
			break;
		case("anc"):
			rowIdAr[1]="anr";
			break;
        
        case("flc"):
            rowIdAr[1]="flr";
            break;
	}
	
	return rowIdAr.slice(0,rowIdAr.length-1).join("_");
}
function igtbl_getCellByElement(td)
{
	td = igtbl_dom.find.parentByTag(td, "TD");
	if(!td) return null;
	if(td.id)
		return igtbl_getCellById(td.id);
	var tr=td.parentNode;
	var row=null;
	while(!row && tr)
	{
		if(tr.tagName=="TR" && tr.id)
			row=igtbl_getRowById(tr.id);
		tr=tr.parentNode;
	}
	if(row)
	{
		if(td.id)
			return igtbl_getCellById(td.id);
		while(td.parentNode && (td.parentNode!=row.Element && td.parentNode!=row.nfElement))
			td=td.parentNode;
		if(td.parentNode && td.tagName=="TD" && td.id)
			return igtbl_getCellById(td.id);
	}
	return null;
}

function igtbl_getColumnNo(gn,cell)
{
	if(cell)
	{
		var column=igtbl_getColumnById(cell.id);
		if(column)
			return column.Index;
		else
			return -1;
	}
}

function igtbl_getBandNo(cell)
{
	if(!cell)
		return -1;
	var tbl=cell;
	while(tbl && !tbl.getAttribute("bandNo"))
		tbl=tbl.parentNode;
	if(tbl)
		return parseInt(tbl.getAttribute("bandNo"));
	return -1;
}

function igtbl_getFirstRow(row)
{
	if(row.getAttribute("groupRow"))
		return row.childNodes[0].childNodes[0].childNodes[0].rows[0];
	else
		return row;
}

function igtbl_getWorkRow(row,gridId)
{
	if(!row) return;
	if(row.getAttribute("groupRow"))
	{
		var id=row.id.split("_");
		if(!gridId)
		{			
			if(id[1]=="sgr")
				return row.parentNode.parentNode.parentNode.parentNode;
			else
				return row;
		}
		else
		{
			var rowId = id[1];
			if (rowId=="sgr")
				return row.parentNode.parentNode.parentNode.parentNode;
			else
				return row;
		}

	}
	else
		return row;
}

function igtbl_getColumnByCellId(cellID)
{
	var cell=igtbl_getCellById(cellID);
	if(!cell)
		return null;
	if(cell.Band.Grid.UseFixedHeaders && !cell.Column.getFixed())
	{
		var tbl;
		if(cell.Band.Index==0 && !cell.Band.IsGrouped && cell.Band.ColHeadersVisible==1 && (cell.Band.Grid.StationaryMargins==1 || cell.Band.Grid.StationaryMargins==3))
			tbl=cell.Band.Grid.StatHeader.Element.parentNode;
		else
		{
			tbl=cell.Element;
			while(tbl!=null && (tbl.tagName!="TABLE" || !tbl.id))
				tbl=tbl.parentNode;
		}
		if(tbl)
		{
			thCells=tbl.childNodes[1].rows[0].cells[cell.Element.parentNode.parentNode.parentNode.parentNode.parentNode.cellIndex].firstChild.firstChild.rows[0].cells;
			var i=0;
			while(i<thCells.length && thCells[i].cellIndex!=cell.Element.cellIndex)
				i++;
			if(i<thCells.length)
				return thCells[i];
		}
		return null;
	}
	if(cell.Band.Index==0 && !cell.Band.IsGrouped && cell.Band.ColHeadersVisible==1 && (cell.Band.Grid.StationaryMargins==1 || cell.Band.Grid.StationaryMargins==3))
		return igtbl_getElemVis(cell.Band.Grid.StatHeader.Element.rows[0].cells,cell.Element.cellIndex);
	if(cell.Element.parentNode.parentNode.parentNode.childNodes[1].tagName=="THEAD")
		return igtbl_getElemVis(cell.Element.parentNode.parentNode.parentNode.childNodes[1].rows[0].cells,cell.Element.cellIndex);
	return null;
}

function igtbl_bandNoFromColId(colId)
{
	var s=colId.split("_");
	if(s.length<3)
		return null;
	return parseInt(s[s.length-2]);
}

function igtbl_colNoFromColId(colId)
{
	var s=colId.split("_");
	if(s.length<3)
		return null;
	return parseInt(s[s.length-1]);
}

function igtbl_colNoFromId(id)
{
	if(!id)
		return null;
	var s=id.split("_");
	if(s.length==0)
		return null;
	return parseInt(s[s.length-1]);
}

function igtbl_isCell(itemName)
{
	var parts = itemName.split("_");
	
    return (parts[1]=="rc" || parts[1]=="anc");
}

function igtbl_isColumnHeader(itemName)
{
	var parts = itemName.split("_");
	
    return parts[1]=="c";
}


function igtbl_isColumnFooter(itemName)
{
	var parts = itemName.split("_");
    return parts[1]=="f";
}

function igtbl_isRowLabel(itemName)
{
	var parts = itemName.split("_");
	
    return parts[1]=="l";
}


function igtbl_isTemplatedElement(element)
{
	if(element.imgType) return false;
		
	// is the element inside a column?
	var column, columnElement = element;
	while(columnElement && !column)
	{
		column = igtbl_getColumnById(columnElement.id);
		if(!column)
			columnElement = columnElement.parentNode;
	}
	if(!column || column.TemplatedColumn == 0 || !columnElement.id || columnElement == element) return false;
	
	if(igtbl_isColumnHeader(columnElement.id))
	{
		return (column.TemplatedColumn&1) == 1;
	}
	if(igtbl_isCell(columnElement.id))
	{
		return (column.TemplatedColumn&2) == 2;
	}
	if(igtbl_isColumnFooter(columnElement.id))
	{
		return column.TemplatedColumn&4;
	}
	return false;	
}

function igtbl_isChild(gn,e)
{
	if(!e) return false;
	var ge=igtbl_getElementById(gn+"_main");
	var p=e.parentNode;
	while(p && p!=ge)
		p=p.parentNode;
	return p!=null;
}


function igtbl_getParentCell(element) 
{
	if(element && element.parentNode)
	{
		var parentElement = element.parentNode;
		while(parentElement!=null) {
			if(parentElement.id) 
			{
				var parentCell=igtbl_getCellById(parentElement.id);
				if(parentCell) 
					return parentCell
			}
			parentElement=parentElement.parentNode;
		}
	}
	return null;
}

function igtbl_getCurCell(se)
{
	var c=null;
	while(se && !c) 
		if(se.tagName=="TD")
			c=se;
		else
			se=se.parentNode;
	return c;
}

function igtbl_shGetElemByCol(col)
{
	if(!col.hasCells())
		return null;
	var j=0;
	var cols = col.Band.Columns;
	for(var i=0;i<col.Index;i++)
	{
		if(cols[i].hasCells())
			j++;
	}
	
	var headerElem=null;
	if(col.Band.Grid.UseFixedHeaders)
	{
		var childNodes=this.Element.childNodes[0].childNodes;
		childNodes=childNodes[childNodes.length-1].childNodes[0].childNodes[0].childNodes[1].childNodes[0].childNodes;
		
		for (var nodesLen = 0; nodesLen<childNodes.length ; nodesLen++)				
		{
			if (childNodes[nodesLen].id==col.Id)
			{
				headerElem=childNodes[nodesLen];
				break;
			}
		}
	}
	if(!headerElem)
		headerElem=this.Element.childNodes[0].childNodes[j+col.Band.firstActiveCell];
	return headerElem;
}

function igtbl_sfGetElemByCol(col)
{
	if(!col.hasCells())
		return null;
	var j=0;
	for(var i=0;i<col.Index;i++)
	{
		if(col.Band.Columns[i].hasCells())
			j++;
	}
	return this.Element.childNodes[0].childNodes[j+col.Band.firstActiveCell];
}

function igtbl_getCellsByColumn(columnId)
{
	var c=igtbl_getDocumentElement(columnId);
	if(!c) return;
	if(!c.length) c=[c];
	var cells=[];
	var colSplit=columnId.split("_");
	var colIndex=parseInt(colSplit[colSplit.length-1],10);
	for(var k=0;k<c.length;k++)
	{
		var tbody=c[k].parentNode;
		while(tbody && tbody.tagName!="THEAD" && tbody.tagName!="TABLE")
			tbody=tbody.parentNode;
		if(!tbody || tbody.tagName=="TABLE")
			continue;
		tbody=tbody.nextSibling;
		if(!tbody)
			continue;
		for(var i=0;i<tbody.rows.length;i++)
		{
			if(tbody.rows[i].getAttribute("hiddenRow"))
				continue;
			var cell=tbody.rows[i].cells[c[k].cellIndex];
			while(cell)
			{
				var cellSplit=cell.id.split("_");
				var cellIndex=parseInt(cellSplit[cellSplit.length-1],10);
				if(cellIndex==colIndex)
					break;
				cell=cell.nextSibling;
			}
			if(cell)
				cells[cells.length]=cell;
		}
	}
	return cells;
}
function igtbl_gridSortColumn(gn,colId,shiftKey)
{
	var gs=igtbl_getGridById(gn);
	gs._isSorting = true;
	gs.sortColumn(colId,shiftKey);
	if(gs.sortingColumn && gs.oldColCursor)
		gs.sortingColumn.style.cursor=gs.oldColCursor;
	gs.stopHourGlass();
	gs._hidePI();
	delete gs._isSorting;
	if(gs.NeedPostBack)
		igtbl_doPostBack(gn,"shiftKey:"+shiftKey.toString());
}



function igtbl_resizeColumn(gn,colId,width)
{
	var gs=igtbl_getGridById(gn);
	if(!gs)
		return false;
	var col=igtbl_getColumnById(colId);
	if(!col)
		return false;
	return col.setWidth(width);
}

function igtbl_setActiveCell(gn,cell,force)
{
	var g=igtbl_getGridById(gn);
	if(g)
		g.setActiveCell(cell?igtbl_getCellById(cell.id):null,force);
	return;
}

function igtbl_setActiveRow(gn,row,force)
{
	var g=igtbl_getGridById(gn);
	if(g)
		g.setActiveRow(row?igtbl_getRowById(row.id):null,force);
	return;
}

function igtbl_pageGrid(evnt,gn,pageNo)
{
	var g=igtbl_getGridById(gn);
	if(!g || !g.goToPage) return;
	g.goToPage(pageNo);
         
	igtbl_cancelEvent(evnt);
}

function igtbl_inEditMode(gn)
{
	var g = igtbl_getGridById(gn);
	if(g&&g._cb)return g._editorCurrent!=null;
	if(g.editorControl && g.editorControl.getVisible())
		return true;
	var sel=igtbl_getElementById(gn+"_vl");
	if(sel && sel.style.display=="")
		return true;
	var tb=igtbl_getElementById(gn+"_tb");
	if(tb && tb.style.display=="")
		return true;
	var ta=igtbl_getElementById(gn+"_ta");
	if(ta && ta.style.display=="")
		return true;
	return false;
}

function igtbl_saveChangedCell(gs,cell,value)
{
	if(typeof(gs.ChangedRows[cell.Row.Element.id])=="undefined")
		gs.ChangedRows[cell.Row.Element.id]=new Object();
	if(cell.Element)
		gs.ChangedRows[cell.Row.Element.id][cell.Element.id]=true;
	gs._recordChange("ChangedCells",cell,value);
}

function igtbl_endCustomEdit()
{
	if(arguments.length<3)
		return;
	var oEditor=arguments[0];
	var oEvent=arguments[arguments.length-2];
	var oThis=arguments[arguments.length-1];
	var key=(oEvent&&oEvent.event)?oEvent.event.keyCode:0;
	if(oThis)oThis._lastKey=key;
	if(oEvent && typeof(oEvent.event)!="undefined"&&key!=9&&key!=13&&key!=27&&key!=0)
		return;
	var se=null;
	if(oEditor.Element)
		se=oEditor.Element;
	if(se!=null)
	{
		if(se.getAttribute("noOnBlur"))
			return igtbl_cancelEvent(oEvent.event);
		if(se.getAttribute("editorControl"))
		{
			if(!oEditor.getVisible())
				return;
			var cell=igtbl_getElementById(se.getAttribute("currentCell"));
			if(!cell)
				return;
			var gs=oThis;
			var cellObj=igtbl_getCellById(cell.id);
			if(key==27)
				oEditor.setValue(cellObj.getValue(),false);
			if(typeof(oEditor.getValue())!="undefined")
				cellObj.setValue(oEditor.getValue());
			if(igtbl_fireEvent(gs.Id,gs.Events.BeforeExitEditMode,"(\""+gs.Id+"\",\""+cell.id+"\")")==true)
			{
				if(!gs._exitEditCancel && !gs._insideSetActive)
				{
					gs._insideSetActive=true;
					igtbl_setActiveCell(gs.Id,cell);
					gs._insideSetActive=false;
				}
				gs._exitEditCancel=true;				
				return true;
			}
			oEditor.setVisible(false);
			oEditor.removeEventListener("blur",igtbl_endCustomEdit);
			oEditor.removeEventListener("keydown",igtbl_endCustomEdit);
			gs._exitEditCancel=false;
			se.removeAttribute("currentCell");
			se.removeAttribute("oldInnerText");
			gs.editorControl = null;
			se.removeAttribute("editorControl");
			igtbl_fireEvent(gs.Id,gs.Events.AfterExitEditMode,"(\""+gs.Id+"\",\""+cell.id+"\");");
			if(key==9||key==13)
			{
				var res=null;
				if(typeof(igtbl_ActivateNextCell)!="undefined")
				{
					if(oEvent.event.shiftKey&&key==9)
						res=igtbl_ActivatePrevCell(gs.Id);
					else
						res=igtbl_ActivateNextCell(gs.Id);
				}
				if(res && igtbl_getCellClickAction(gs.Id,cellObj.Column.Band.Index)==1)
					igtbl_EnterEditMode(gs.Id);
				if(!res)
				{
					igtbl_blur(gs.Id);
					return;
				}
				igtbl_activate(gs.Id);
				oEvent.cancel=true;
			}
			else
				gs.alignGrid();
			igtbl_blur(gs.Id);
			if(gs.NeedPostBack)
				igtbl_doPostBack(gs.Id);
		}
	}
}

// ig_WebGrid.js
// Infragistics UltraWebGrid Script 
// Copyright (c) 2001-2007 Infragistics, Inc. All Rights Reserved.
var igtbl_lastActiveGrid="";
var igtbl_isXHTML=document.compatMode=="CSS1Compat";
var testVariable = null;
var igtbl_sUnmaskedValue="uV";
var igtbl_sigCellText="iCT";
var igtbl_sigDataValue="iDV";
var igtbl_isAtlas=false;
var igtbl_litPrefix="";
function igtbl_initGrid(gridId
	,gridInitArray,bandsInitArray,colsInitArray,eventsInitArray,xmlInitProps, isInsideUpdatePanel, isInsideWARP
	,firefoxXml
) 
{
	var grid=null;
	var gridElement=igtbl_getElementById("G_"+gridId);
	igtbl_isAtlas=typeof(Sys)!="undefined" && typeof(Sys.Application)!="undefined";
	
	var rm = null;
	if(igtbl_isAtlas && typeof Sys.WebForms == 'object' && typeof Sys.WebForms.PageRequestManager == 'function') try
	{
		rm = Sys.WebForms.PageRequestManager.getInstance();
	}catch(e){}
	
	if(rm && !rm._ig_grid_onsubmit)
	{
		rm._ig_grid_onsubmit = rm._onsubmit;
		if(!rm._ig_grid_onsubmit)
			rm._ig_grid_onsubmit = 2;
		rm._onsubmit = function()
		{
			
			
			
			if(typeof igtbl_gridState == 'object') for(var id in igtbl_gridState) try
			{
				var o = igtbl_gridState[id];
				if(o && o.update)
					o.update();
			}catch(id){}
			
			if(typeof this._ig_grid_onsubmit == 'function')try
			{
				if(this._ig_grid_onsubmit() === false)
					return false;
			}catch(i){}
			
			return true;
		}
	}
	if (isInsideUpdatePanel) 
	{
		
		var metCur=false;
		for(var gi in igtbl_gridState)
		{
			var g=igtbl_getGridById(gi);
			if(g && metCur)
				g.GridIsLoaded=false;
			if(gridId==gi)
				metCur=true;
		}
	}
	grid=igtbl_getGridById(gridId);
	if(grid)
	{
		
		if(isInsideUpdatePanel && gridElement==grid.Element)
		{
			grid.GridIsLoaded=true;
			return;
		}
		
		
		igtbl_unloadGrid(gridId,true);
		
		
		igtbl_clearGridsPost(grid);
	}
	var xml;
	if(firefoxXml)
	{
		var xmlDoc = igtbl_xml.createDocumentFromString(firefoxXml);
		if(xmlDoc) xml=xmlDoc.firstChild;
	}
	grid=new igtbl_Grid(gridElement,xml
		,gridInitArray,bandsInitArray,colsInitArray,eventsInitArray,xmlInitProps
		);
	
	if(typeof(igtab_selectTab)!="undefined" && igtab_selectTab && igtab_selectTab!=igtbl_tabChanges)
	{
		igtbl_oldSelectTab=igtab_selectTab;
		igtab_selectTab=igtbl_tabChanges;
	}
	var scrollLeft=grid._AddnlProps[9];
	var scrollTop=grid._AddnlProps[10];
	if(grid.LoadOnDemand!=3 || grid.XmlLoadOnDemandType==2
		|| grid.XmlLoadOnDemandType==4
	 )
	{
		if(scrollLeft>0)
			grid._recordChange("ScrollLeft",grid,scrollLeft);
		if(scrollTop>0)
			grid._recordChange("ScrollTop",grid,scrollTop);
	}
	
	var sortedColsIds=grid._AddnlProps[8];
	if(sortedColsIds)
		grid.addSortColumn(sortedColsIds);
	
	if(grid.Rows.hasRowFilters())
		grid.Rows.reapplyRowStyles();
	var expRowsIds=grid._AddnlProps[3];
	for(var i=0;i<expRowsIds.length;i++)
	{
		var id;
		if(!xml)
		{
			var splitId=expRowsIds[i].split(";");
			igtbl_stateExpandRow(grid.Id,null,true,splitId[0],splitId[1]);
			id = splitId[0];
		}
		else
		{
			id=expRowsIds[i];
			id=id.split(";")[0];
			igtbl_toggleRow(grid.Id,id,true);
		}
		
		var row = igtbl_getRowById(id);
		if(row && row.Rows && row.Rows.hasRowFilters())
			row.Rows.reapplyRowStyles();
	}
	var selRowsIds=grid._AddnlProps[4];
	for(i=0;i<selRowsIds.length;i++)
		igtbl_selectRow(grid.Id,selRowsIds[i]);
	var selCellsIds=grid._AddnlProps[5];
	for(i=0;i<selCellsIds.length;i++)
		igtbl_selectCell(grid.Id,selCellsIds[i]);
	var selColsIds=grid._AddnlProps[13];
	for(i=0;selColsIds && i<selColsIds.length;i++)
		igtbl_selectColumn(grid.Id,selColsIds[i]);
	var activeCellId=grid._AddnlProps[6];
	var activeRowId=grid._AddnlProps[7];
	var de=grid.getDivElement();
	var mainGrid=grid.MainGrid;

    var percentageHeight = mainGrid.style.height.indexOf("%") != -1;
    
    if(typeof(igtbl_oldOnBodyResize)=="undefined")
    {
        igtbl_oldOnBodyResize = igtbl_addEventListener(window, "resize", igtbl_onBodyResize, false);
    }
	
	if(!grid.UseFixedHeaders)
	{
	    
	    if(scrollLeft) 
		    igtbl_scrollLeft(de,scrollLeft);
		grid.alignStatMargins();
	}
	if(!mainGrid.style.height && de.clientHeight!=de.scrollHeight)
	{
		var scDiv=document.createElement("DIV");
		scDiv.id=grid.Element.id+"_scd";
		scDiv.innerHTML="&nbsp;";
		scDiv.style.height=de.scrollHeight-de.clientHeight+1;
		de.appendChild(scDiv);
		de.style.overflowY="hidden";
		de.setAttribute("scdAdded","true");
	}
	grid.alignDivs(scrollLeft);
	if(grid.UseFixedHeaders
	|| grid.XmlLoadOnDemandType!=0
	&& grid.XmlLoadOnDemandType!=4
	)
	{
		if(grid.StatHeader)
			grid.StatHeader.ScrollTo(scrollLeft);
		if(grid.StatFooter)
			grid.StatFooter.ScrollTo(scrollLeft);
		grid.alignStatMargins();
	}
	if(grid.XmlLoadOnDemandType==2)
		de.setAttribute("noOnScroll",true);
	if(scrollTop)
		igtbl_scrollTop(de,scrollTop);
	if(scrollTop || scrollLeft)
	{
		var st=de.scrollTop.toString();
		de.setAttribute("noOnScroll","true");
		de.setAttribute("oldSL",de.scrollLeft.toString());
		de.setAttribute("oldST",st);
		grid.cancelNoOnScrollTimeout=window.setTimeout("igtbl_cancelNoOnScroll('"+grid.Id+"')",100);
	}
	if(grid.XmlLoadOnDemandType==2)
		de.removeAttribute("noOnScroll");
	if(activeCellId)
	{
		grid.setActiveCell(igtbl_getCellById(activeCellId));
		var cell=grid.oActiveCell;
		if(cell)
		{
			cell.scrollToView();
			if(cell.Band.getSelectTypeCell()==3)
				grid.Element.setAttribute("startPointCell",cell.Element.id);
		}
	}
	else if(activeRowId)
	{
		grid.setActiveRow(igtbl_getRowById(activeRowId));
		var row=grid.oActiveRow;
		if(row)
		{
			row.scrollToView();
			if(row.Band.getSelectTypeRow()==3)
				grid.Element.setAttribute("startPointRow",row.Element.id);
		}
	}
	grid._cb=typeof igtbl_editEvt=="function";
	
	
	
	grid._fromServerActiveRow=grid.oActiveRow;

	
	ig_csom.addCBEventListener("igtbl_getGridById('"+gridId+"')");

	var rowsRetrieved=grid._AddnlProps[15];
	if(rowsRetrieved>=0)
	{
		grid.RowsRetrieved=rowsRetrieved;
		grid._recordChange("RowsRetrieved",grid,rowsRetrieved);
	}
    
    if (grid.UseFixedHeaders && grid.Bands[0] && grid.Bands[0].HasHeaderLayout)
    {
        
        var tHead;
        if (grid.StatHeader)
        {
            tHead = grid.StatHeader.Element;
        }
        else
        {
            tHead = grid.Element.tHead;
        }    
        var tBodyBounds = igtbl_getAbsBounds(grid.Element.tBodies[0]);
        var tHeadBounds = igtbl_getAbsBounds(tHead);
        
        var nfhHeight = tBodyBounds.y + grid.getDivElement().scrollTop - tHeadBounds.y;
        if (nfhHeight >= 0) 
        {
			tHead.rows[0].lastChild.style.height = nfhHeight + "px";
        }
        var c = 0, someFixed = false;
        for (c = 0; c < grid.Bands[0].Columns.length; c++)
        {
            someFixed |= grid.Bands[0].Columns[c].getFixed();
            if (someFixed)
            {
                break;
            }
        }
        
        if (igtbl_isXHTML && ig_csom.IsIE && !someFixed) 
        {
            
            var divContent = grid.getDivElement().firstChild;
            var percentageWidth = divContent.style.width.indexOf("%") != -1;
            var drs = igtbl_getElementById(gridId + "_drs");
            if (!percentageWidth && drs)
            {
                divContent.style.width = drs.scrollWidth + "px";
            }
        }
    }
    
	grid.GridIsLoaded=true;
	igtbl_fireEvent(grid.Id,grid.Events.InitializeLayout,'("'+grid.Id+'");');
	
	
	igtbl_browserWorkarounds.addActiveElementTracking();
	try
	{
		
		if(!document.activeElement && (activeCellId || activeRowId))
			igtbl_activate(gridId);
	}
	catch(e){;}
	
	if(typeof igtbl_currentEditTempl == 'string')
		igtbl_currentEditTempl = null;
	
	
	igtbl_getElementById(grid.ClientID).control=grid;
	return grid;
}

function igtbl_initActivation(aa)
{
	this.AllowActivation=aa[0];
	this.BorderColor=aa[1];
	this.BorderStyle=aa[2];
	this.BorderWidth=aa[3];
	this.BorderDetails=new Object();
	var bd=this.BorderDetails;
	bd.ColorLeft=aa[4][0];
	bd.ColorTop=aa[4][1];
	bd.ColorRight=aa[4][2];
	bd.ColorBottom=aa[4][3];
	bd.StyleLeft=aa[4][4];
	bd.StyleTop=aa[4][5];
	bd.StyleRight=aa[4][6];
	bd.StyleBottom=aa[4][7];
	bd.WidthLeft=aa[4][8];
	bd.WidthTop=aa[4][9];
	bd.WidthRight=aa[4][10];
	bd.WidthBottom=aa[4][11];
	this.getValue=function(where,what)
	{
		var res="";
		if(where)
			res=this.BorderDetails[what+where];
		if(res=="" || res=="NotSet")
			res=this["Border"+what];
		return res;
	}
	this.hasBorderDetails=function()
	{
		var bd=this.BorderDetails;
		if(bd.ColorLeft || bd.ColorTop || bd.ColorRight || bd.ColorBottom ||
			bd.StyleLeft || bd.StyleTop || bd.StyleRight || bd.StyleBottom ||
			bd.WidthLeft || bd.WidthTop || bd.WidthRight || bd.WidthBottom)
			return true;
		return false;
	}
}

function igtbl_initGroupByBox(grid)
{
	this.Element=igtbl_getElementById(grid.Id+"_groupBox");
	this.pimgUp=igtbl_getElementById(grid.Id+"_pimgUp");
	if(this.pimgUp)
		this.pimgUp.style.zIndex=100000;
	this.pimgDn=igtbl_getElementById(grid.Id+"_pimgDn");
	if(this.pimgDn)
		this.pimgDn.style.zIndex=100000;
	this.postString="";
	this.moveString="";
	if(this.Element)
	{
		this.groups=new Array();
		var gt=this.Element.childNodes[0];
		if(gt.tagName=="TABLE")
			for(var i=0;i<gt.rows.length;i++)
				this.groups[i]=new igtbl_initGroupMember(gt.rows[i].cells[i]);
	}
}

function igtbl_initGroupMember(e)
{
	var d=e;
	if(!d.getAttribute("groupInfo"))
		return null;
	this.Element=d;
	this.groupInfo=d.getAttribute("groupInfo").split(":");
	this.groupInfo[1]=parseInt(this.groupInfo[1],10);
	if(this.groupInfo[0]=="col")
		this.groupInfo[2]=parseInt(this.groupInfo[2],10);
}

function igtbl_lineupHeaders(colId,band)
{
	var gs=band.Grid;
	var te=gs.Element;
	var cg=new Array();
	var stat=false;
	if(band.Index==0 && !band.IsGrouped && gs.StationaryMargins>0)
	{
		cg[0]=te.childNodes[0];
		if(gs.StatHeader)
			cg[1]=gs.StatHeader.Element.previousSibling;
		if(gs.StatFooter)
		{
			if((gs.Rows.AddNewRow && band.AddNewRowView==2)  
				|| (gs.Rows.FilterRow && gs.Rows.FilterRow.isFixedBottom()))
				cg[cg.length]=gs.StatFooter.Element.previousSibling.previousSibling;
			else
				cg[cg.length]=gs.StatFooter.Element.previousSibling;
		}
		stat=true;
	}
	else
	{
		var e=igtbl_getDocumentElement(colId);
		if(e && e.length)
			for(var i=0;i<e.length;i++)
				cg[i]=e[i].parentNode.parentNode.previousSibling;
		else if(e && e.parentNode.parentNode.previousSibling)
			cg[0]=e.parentNode.parentNode.previousSibling;
	}
	if(cg.length>0)
	{
		for(var j=0;j<cg.length;j++)
		{
			var hasPercW=false;
			for(var i=0;cg[j] && i<cg[j].childNodes.length && !hasPercW;i++)
			{
				var w=cg[j].childNodes[i].width.toString();
				if(!w || w.substr(w.length-1)=="%")
					hasPercW=true;
			}
			if(hasPercW)
				for(var i=0;i<cg[j].childNodes.length;i++)
					cg[j].childNodes[i].oldWidth=cg[j].childNodes[i].offsetWidth;
			if(j>0 && stat || gs.TableLayout)
			{
				var pn=cg[j].parentNode;
				if(ig_shared.IsFireFox)
				{
					if(!pn.oldWidth)
						pn.oldWidth=pn.style.width;
					if(pn.oldWidth)
					{
						var colGWidth = 0;
						for(var cs=0;cs<cg[j].childNodes.length;cs++)
							if(!cg[j].childNodes[cs].style.display)
								colGWidth+=igtbl_parseInt(cg[j].childNodes[cs].width);
						if(colGWidth)
							pn.style.width=colGWidth+"px";
						else
							pn.style.width="";
					}
				}
				else
					pn.style.width="";
			}
			for(var i=0;i<cg[j].childNodes.length;i++)
			{
				if(cg[j].childNodes[i].oldWidth)
				{
					if(cg[j].nextSibling)
					{
						var co=igtbl_getElemVis(cg[j].nextSibling.firstChild.childNodes,i);
						var column=igtbl_getColumnById(co.id);
						if(column)
						{
							co.style.width="";
							co.width=cg[j].childNodes[i].oldWidth;
							column.Width=co.width;
							if(column.Node) column.Node.setAttribute(igtbl_litPrefix+"width",co.width);
						}
					}
					cg[j].childNodes[i].style.width="";
					cg[j].childNodes[i].width=cg[j].childNodes[i].oldWidth;
					cg[j].childNodes[i].oldWidth=null;
				}
			}
		}
	}
	igtbl_dispose(cg);
	delete cg;
}


function igtbl_scrollToView(gn, child, childWidth, nfWidth, scrollDirection)
{
	if(!child)
		return;
	var gs=igtbl_getGridById(gn);
	var parent=gs.Element.parentNode;
	
	var drsParent=null;
	var scrParent=parent;
	if(gs.UseFixedHeaders
		|| gs.XmlLoadOnDemandType!=0
	&& gs.XmlLoadOnDemandType!=4
	)
	{ 
		scrParent=gs._scrElem;
		
		
		if(child.tagName=="TD" || child.tagName=="TH")
		{
			var prnt=child;
			var i=0;
			while(i<6 && prnt && (prnt.tagName!="DIV" || !prnt.id || prnt.id.substr(prnt.id.length-4,4)!="_drs"))
			{
				i++;
				prnt=prnt.parentNode;
			}
			if(i<6 && prnt)
				drsParent=prnt;
		}
	}
	if(scrParent.scrollWidth<=scrParent.offsetWidth && scrParent.scrollHeight<=scrParent.offsetHeight)
		return;
	var childLeft=igtbl_getLeftPos(child);
	var parentLeft=igtbl_getLeftPos(drsParent?drsParent:parent);
	
	var childTop=igtbl_getTopPos(child);
	var parentTop=igtbl_getTopPos(parent);
	
	
	
	
	
	
	var childRight=childLeft+child.offsetWidth;
	var childBottom=childTop+child.offsetHeight;	
	
	
	var parentRight=scrParent?(igtbl_getLeftPos(scrParent)+scrParent.clientWidth):(parentLeft+parent.clientWidth);
	
	if(ig_csom.IsIE && igtbl_isXHTML && scrParent) 
	    parentRight-=scrParent.scrollLeft;
	var parentBottom=parentTop+parent.clientHeight;	
	var hsw=parent.offsetHeight-parent.clientHeight;
	var vsw=parent.offsetWidth-parent.clientWidth;
	if(!scrollDirection || scrollDirection==2)
	{
		if(childBottom>parentBottom)
		{
			
			if(childTop-(parentTop-childTop)>parentTop && childBottom-childTop<parentBottom-parentTop)
				igtbl_scrollTop(scrParent,scrParent.scrollTop+childBottom-parentBottom+hsw-1);
			else
				igtbl_scrollTop(scrParent,scrParent.scrollTop+childTop-parentTop-1);
		}
		if(childTop<parentTop)
			igtbl_scrollTop(scrParent,scrParent.scrollTop-(parentTop-childTop)-1);
	}
	
	if(!scrollDirection || scrollDirection==1)
	{
		
		if(typeof(nfWidth)!="undefined" && nfWidth!==null && (childLeft==childRight || childRight-childLeft<childWidth))
		{
			igtbl_scrollLeft(scrParent,nfWidth);
			return;
		}
		if(childRight>parentRight)
		{
			
			if(childLeft-(childRight-parentRight)>parentLeft && childRight-childLeft<parentRight-parentLeft)
				igtbl_scrollLeft(scrParent,scrParent.scrollLeft+childRight-parentRight+vsw);
			else
				igtbl_scrollLeft(scrParent,scrParent.scrollLeft+childLeft-parentLeft);
		}
		if(childLeft<parentLeft)
			igtbl_scrollLeft(scrParent, scrParent.scrollLeft-parentLeft+childLeft-vsw-1);
		
		else if(gs.UseFixedHeaders && childLeft==parentLeft)
			igtbl_scrollLeft(scrParent, 0);
	}
}


function _validateGrid(gridId)
{
	return (igtbl_getGridById(gridId)!=null) ;
}

function igtbl_needPostBack(gn)
{
	igtbl_getGridById(gn).NeedPostBack=true;
}

function igtbl_cancelPostBack(gn)
{
	igtbl_getGridById(gn).CancelPostBack=true;
}

function igtbl_moveBackPostField(gn,param)
{
	var gs=igtbl_getGridById(gn);
	gs.moveBackPostField=param;
}

function igtbl_updatePostField(gn,param)
{
} 

function igtbl_doPostBack(gn,args)
{
	var gs=igtbl_getGridById(gn);
	if(gs.isLoaded() && !gs.CancelPostBack)
	{
		gs.GridIsLoaded=false;
		if(!args)
			args="";
		window.setTimeout("var g=igtbl_getGridById('"+gn+"');if(g){g.GridIsLoaded=true;g.NeedPostBack=false;}",1000);
		if(ig_shared.IsSafari)
			__doPostBack(gs.UniqueID,args);
		else
			
			window.setTimeout("window.__doPostBack('"+gs.UniqueID+"','"+args+"');");
		return true;
	}
	return false;
}

function igtbl_unloadGrid(gn,self)
{
	if(typeof(self)=="undefined")
		self=false;

	var grid=igtbl_gridState[gn];
	
	if(!grid || !grid.Events) return;
		
	grid.Events.unload();
	grid.editorControl=null;
	
	grid.eReqType=null;
	grid.eReadyState=null;
	grid.eError=null;
	
	grid.eFeatureRowView=null;	
	grid.eFilterRowType=null;
	grid.eRowFilterMode=null;
	grid.eClipboardError=null;
	grid.eClipboardOperation=null;
	grid.eFilterComparisonType=null;
	grid.eFilterComparisionOperator=null;
	
	
	if(grid.dragDropDiv)
	{
	    var dragDropDiv = grid.dragDropDiv;
	    dragDropDiv.parentNode.removeChild(dragDropDiv);
	    grid.dragDropDiv = null;
	    
	    grid.GroupByBox.pimgUp.style.display = "none";
	    grid.GroupByBox.pimgDn.style.display = "none";
	}
	
	
	for(var b=0; b<grid.Bands.length; b++)
	{
		for(var c=0; c<grid.Bands[b].Columns.length; c++)
			grid.Bands[b].Columns[c].hideValidators();
	}
	
	for(var i=0;i<grid.Bands.length;i++)
		for(var j=0;j<grid.Bands[i].Columns.length;j++)
		{
			
			var editor = grid.Bands[i].Columns[j].editorControl;
			if(editor)
			{
				var elem = editor.Element, old = editor._old_parent;
				if(elem && old && (old != elem.parentNode))
				{
					elem.parentNode.removeChild(elem);
					old.appendChild(elem);
				}
				grid.Bands[i].Columns[j].editorControl=null;
			}
		}
	
	if(grid._editorArea)
	{
		if(grid._editorArea.parentNode)
			grid._editorArea.parentNode.removeChild(grid._editorArea);
		grid._editorArea = null;
	}
	if(grid._editorInput)
	{
		if(grid._editorInput.parentNode)
			grid._editorInput.parentNode.removeChild(grid._editorInput);
		grid._editorInput = null;
	}
	if(grid._editorList)
	{
		if(grid._editorList.parentNode)
			grid._editorList.parentNode.removeChild(grid._editorList);
		grid._editorList = null;
	}
	var f = grid._thisForm;
	if(!f)
		f=igtbl_getThisForm(grid.Element);
	if(f && self && !(typeof(f.igtblGrid)=="undefined" || f.igtblGrid==null))
	{
		var g=f.igtblGrid,tg=null;
		while(g && g!=grid)
		{
			tg=g;
			g=g.oldIgtblGrid;
		}
		if(tg==null)
			f.igtblGrid=grid.oldIgtblGrid;
		else
			tg.oldIgtblGrid=grid.oldIgtblGrid;
		grid.oldIgtblGrid=null;
	}
	if(f && (!self || (typeof(f.igtblGrid)=="undefined" || f.igtblGrid==null)))
	{
		var old=grid.oldIgtblGrid;
		if(old)
		{
			
			grid.oldIgtblGrid=null;
			igtbl_unloadGrid(old.Id);
		}
		try
		{
			f.igtblGrid = null;
			if(grid._thisForm && grid._thisForm.removeEventListener)
				grid._thisForm.removeEventListener('submit',igtbl_submit,false);
			
			
				
				if(f.onsubmit==igtbl_submit)
				{
					f.onsubmit=f.igtbl_oldOnSubmit;
					f.igtbl_oldOnSubmit = null;
				}
				
				
				
				if(typeof(f.igtbl_oldSubmit)!="undefined" && f.igtbl_oldSubmit!=null && f.submit==igtbl_formSubmit)
				{
					f.submit=f.igtbl_oldSubmit;
					f.igtbl_oldSubmit=null;
				}
				
				
				if(typeof(window._igtbl_doPostBackOld)!="undefined" && window._igtbl_doPostBackOld!=null && window.__doPostBack==igtbl_submit)
				{
					window.__doPostBack=window._igtbl_doPostBackOld;
					window._igtbl_doPostBackOld = null;
				}
			
			window._igtbl_thisForm = null;
		}
		catch(ex)
		{
		}
	}
	
	grid.disposing=true;
	
	var state = igtbl_dom.find.rootNode(grid.StateChanges);
	var node = grid.Node;
	igtbl_dispose(grid);
	igtbl_removeState(state);
	if(node) igtbl_xml.disposeDocument(node);
	delete node;
	delete igtbl_gridState[gn];
	delete state;
}


function igtbl_removeState(stateNode)
{
    while(stateNode.childNodes.length > 0)
        igtbl_removeState(stateNode.childNodes[0]);
   
    if(stateNode.parentNode)
    {
		if(typeof(stateNode.parentNode.removeChild) != "undefined") 
			stateNode.parentNode.removeChild(stateNode); // IE
		else 
			stateNode.parentNode.removeNode(stateNode); // Firefox
    }
    
    // removeNode isn't enough to make the node deallocate in IE
    if(typeof(stateNode.outerHTML) != "undefined")
        stateNode.outerHTML = "";
}  

function igtbl_dispose(obj)
{
	if(ig_csom.IsNetscape || ig_csom.IsNetscape6)
		return;
	for(var item in obj)
	{
		if(typeof(obj[item])!="undefined" && obj[item]!=null && !obj[item].tagName && !obj[item].disposing && typeof(obj[item])!="string")
		{
			try {
				
				obj[item].disposing=true;
				igtbl_dispose(obj[item]);				
			} catch(exc1) {;}
		}
		try {
			delete obj[item];
		} catch(exc2) {
			return;
		}
	}
}


var igtbl_oldOnUnload;
var igtbl_bInsideOldOnUnload=false;
function igtbl_unload()
{
    
	igtbl_browserWorkarounds.removeActiveElementTracking();
	
	if(igtbl_oldOnUnload && !igtbl_bInsideOldOnUnload)
	{
		igtbl_bInsideOldOnUnload=true;
		igtbl_oldOnUnload();
		igtbl_bInsideOldOnUnload=false;
	}
	for(var gridId in igtbl_gridState)
	{
		try
		{
			if(typeof(document)!=='unknown')
			{
				var p=igtbl_getElementById(gridId);
				p.value=ig_ClientState.getText(igtbl_gridState[gridId].ViewState);
			}
		}
		catch(e)	
		{		
		}
		if(igtbl_gridState[gridId].unloadGrid)
			igtbl_gridState[gridId].unloadGrid();
		else
			delete igtbl_gridState[gridId];
	}
}


if(typeof igtbl_gridState!="object")
var igtbl_gridState=new Object();

var igtbl_bInsideigtbl_oldOnSubmit=false;
var igtbl_bInsideigtbl_oldDoPostBack=false;
function igtbl_submit()
{
    var retVal=true;
	if(arguments.length==0 || (ig_csom.IsNetscape ||  ig_csom.IsNetscape6) && arguments.length==1)
	{
		var form=this;
	    if(form.tagName!="FORM")
			form=window._igtbl_thisForm;
		if(form)
		{
			if(form.igtbl_oldOnSubmit && !igtbl_bInsideigtbl_oldOnSubmit)
			{
				igtbl_bInsideigtbl_oldOnSubmit=true;
				if(arguments.length==0)
					retVal=form.igtbl_oldOnSubmit();
				else
					retVal=form.igtbl_oldOnSubmit(arguments[0]);
				igtbl_bInsideigtbl_oldOnSubmit=false;
				
				if(retVal===false)
				{
					
					if(typeof(igtbl_gridState)!="undefined" && igtbl_gridState!=null)
						for(var gId in igtbl_gridState)
						{
							var g=igtbl_getGridById(gId);
							if(g) g.GridIsLoaded=true;
						}
					return retVal;
				}
			}
			igtbl_updateGridsPost(form.igtblGrid);
			
			if((window.__smartNav
				
				
			) && form.igtblGrid)
				igtbl_unloadGrid(form.igtblGrid.Id);
		}
	}
	else if(typeof(window._igtbl_doPostBackOld)!="undefined" && !igtbl_bInsideigtbl_oldDoPostBack && window._igtbl_thisForm)
	{
		igtbl_updateGridsPost(window._igtbl_thisForm.igtblGrid);
		
		
		
		igtbl_bInsideigtbl_oldDoPostBack=true;
		retVal=window._igtbl_doPostBackOld(arguments[0],arguments[1]);
		
		igtbl_bInsideigtbl_oldDoPostBack=false;
		
	}
	
	
	return retVal;
}

function igtbl_formSubmit()
{
	igtbl_updateGridsPost(this.igtblGrid);
	var val;
	
	try
	{
		
		val = this.igtbl_oldSubmit();
	}
	catch(e){};
	return val;
}

function igtbl_updateGridsPost(grid)
{
	if(!grid) return;
	igtbl_updateGridsPost(grid.oldIgtblGrid);
	grid.update();
}

function igtbl_clearGridsPost(grid)
{
	
	if(!grid || !grid.ViewState || !grid.ViewState.parentNode) return;
	
	if(typeof(grid.ViewState.parentNode.removeChild) != "undefined")
		grid.ViewState.parentNode.removeChild(grid.ViewState);
	else
		grid.ViewState.parentNode.removeNode(grid.ViewState);
}

if(window.addEventListener)
	window.addEventListener('unload',igtbl_unload,false);
else if(window.onunload!=igtbl_unload)
{
	igtbl_oldOnUnload=window.onunload;
	window.onunload=igtbl_unload;
}
function igtbl_toggleRow() 
{
	var srcRow,expand;
	if(arguments.length==1)
	{
		var evnt=arguments[0];
		var se=igtbl_srcElement(evnt);
		if(!se || se.tagName!="IMG")
			return;
		srcRow=se.parentNode.parentNode.id;
	}
	else
	{
		srcRow=arguments[1];
		expand=arguments[2];
	}
	var sr = igtbl_getRowById(srcRow);
	if(!sr) return;
	igtbl_lastActiveGrid=sr.gridId;
	if(typeof(expand)=="undefined")
		expand=!sr.getExpanded();
	if(expand!=false) 
		sr.setExpanded(true);
	else
		sr.setExpanded(false);
}

function igtbl_resizeRow(gn,rowId,height)
{
	var gs=igtbl_getGridById(gn);
	if(!gs)
		return;
	var row=igtbl_getRowById(rowId);
	if(!row)
		return;
	if(height>0)
	{
		var cancel=false;
		if(igtbl_fireEvent(gn,gs.Events.BeforeRowSizeChange,"(\""+gn+"\",\""+row.Element.id+"\","+height+")")==true)
			cancel=true;
		if(!cancel)
		{
			var origOffsetHeight=row.Element.offsetHeight;
			if(!row._origHeight)
				row._origHeight=row.Element.offsetHeight;
	        				
			row.Element.style.height=height+"px";
			gs._removeChange("ResizedRows",row);
			gs._recordChange("ResizedRows",row,height);
            
            var rowLabel=row.getRowSelectorElement();
			if(rowLabel)
				rowLabel.style.height=height+"px";
			var expansionArea = row.getExpansionElement();
			if(expansionArea)
				expansionArea.style.height=height+"px";
			
			if(gs.UseFixedHeaders)
			{
				var i=0;
				var rowElCells=row.Element.cells;
				while(i<rowElCells.length && (!rowElCells[i].firstChild || rowElCells[i].firstChild.id!=gn+"_drs")) i++;
				if(i<rowElCells.length)
				{
					var td=rowElCells[i];
					td.firstChild.firstChild.rows[0].style.height=height;
					if(gs.IsXHTML && height>row._origHeight)
					{
	                    					
						if(rowLabel)
							td.style.height=(height+rowLabel.offsetHeight-rowLabel.clientHeight)+"px";
						else
							td.style.height=height+"px";
					}
				}
			}
			
			if (gs.StatHeader&&(row.IsFilterRow||row.IsAddNewRow)&&row.Band.Index==0)
			{
				var headerDiv = gs.StatHeader.Element.parentNode.parentNode;
				headerDiv.height = "";
				headerDiv.style.height = "";
			}
			gs.alignGrid();
			igtbl_fireEvent(gn,gs.Events.AfterRowSizeChange,"(\""+gn+"\",\""+row.Element.id+"\","+height+")");
		}
	}
}

function igtbl_setSelectedRowImg(gn,row,hide)
{
	var gs=igtbl_getGridById(gn);
	if(!gs) return;
	if(row)
		igtbl_getRowById(row.id).setSelectedRowImg(hide);
}

function igtbl_setNewRowImg(gn,row)
{
	var gs=igtbl_getGridById(gn);
	if(!gs) return;
	gs.setNewRowImg(row?igtbl_getRowById(row.id):null);
}

// Expands/collapses row in internal row structure
function igtbl_stateExpandRow(gn,row,expandFlag,id,level)
{
	var gs=igtbl_getGridById(gn);
	if(!gs)
		return;
	if(expandFlag)
	{
		var dk=(row?row.DataKey:null)
		var stateChange=gs._recordChange("ExpandedRows",row,dk,id);
		if(!row)
			ig_ClientState.setPropertyValue(stateChange.Node,"Level",level);
		else if(gs.CollapsedRows[row.Element.id])
			gs._removeChange("CollapsedRows",row);
	}
	else
	{
		if(!row) return;
		gs._recordChange("CollapsedRows",row,row.DataKey);
		gs._removeChange("ExpandedRows",row);
	}
}

function igtbl_getChildRows(gn,row)
{
	var rows=null;
	if(!row || !row.id)
		return rows;
	var rObj=igtbl_getRowById(row.id);
	if(!rObj)
		return rows;
	return rObj.getChildRows();
}

function igtbl_rowsCount(rows)
{
	var i=0,j=0;
	
	if(!rows)return i;
	while(j<rows.length)
	{
	var r = rows[j];
		if(!r.getAttribute("hiddenRow")
			&& !r.getAttribute("addNewRow")
            && !r.getAttribute("filterRow")
		)
			i++;
		j++;
	}
	return i;
}

function igtbl_visRowsCount(rows)
{
	var i=0,j=0;
	
	if(!rows)return i;
	while(j<rows.length)
	{
	    var r = rows[j];
		if(!r.getAttribute("hiddenRow") && r.style.display==""
			&& !r.getAttribute("addNewRow")
            && !r.getAttribute("FilterRow")
		)
			i++;
		j++;
	}
	return i;
}

function igtbl_sortGroupedRows(rows,bandNo,colId)
{
	
	if (rows.length<=0)
		return;
	if(rows.Band.Index==bandNo && rows.getRow(0).Element.getAttribute("groupRow")==colId)
	{
		rows.sort();
		return;
	}
	for(var i=0;i<rows.length;i++)
	{
		var row=rows.getRow(i);
		if(row.Rows && row.Rows.length>0)
			igtbl_sortGroupedRows(row.Rows,bandNo,colId);
	}
}

function _igtbl_getMoreRows(gn)
{
	var g = igtbl_getGridById(gn);
	if (g)
	{
		
		if(g.ReadyState==0)
			g.invokeXmlHttpRequest(g.eReqType.MoreRows);
	}
}

function igtbl_deleteSelRows(gn)
{
	var gs=igtbl_getGridById(gn);
	var ar=gs.getActiveRow();
	
	if (ar && ar.IsAddNewRow) return;
	var del=false;
	if(igtbl_inEditMode(gn))
	{
		igtbl_hideEdit(gn);
		if(igtbl_inEditMode(gn))
			return;
	}
	if(gs.Node)
	{
		var arOffs=ar?ar.getIndex():0;
		gs.isDeletingSelected=true;
		var arr=igtbl_sortRowIdsByClctn(gs.SelectedRows);
		for(var i=0;i<arr.length;i++)
		{
			var row=gs.getRowByLevel(arr[i]);
			if(row.deleteRow())
			{
				if(i==arr.length-1 || arr[i].length!=arr[i+1].length || arr[i].length>1 && arr[i][arr[i].length-2]!=arr[i+1][arr[i+1].length-2])
				{
					var rows=row.OwnerCollection;
					rows.SelectedNodes=rows.Node.selectNodes("R");
					if(!rows.SelectedNodes.length)
						rows.SelectedNodes=rows.Node.selectNodes("Group");
					rows.reIndex(row.getIndex(true));
					rows.repaint();
				}
			}
		}
		if(!arr.length && ar)
		{
			var rows=ar.OwnerCollection;
			if(ar.deleteRow())
			{
				rows.SelectedNodes=rows.Node.selectNodes("R");
				if(!rows.SelectedNodes.length)
					rows.SelectedNodes=rows.Node.selectNodes("Group");
				while(rows.length==0 && rows.ParentRow && rows.ParentRow.GroupByRow)
					rows=rows.ParentRow.OwnerCollection;
				rows.reIndex(arOffs);
				rows.repaint();
			}
		}
		if(ar && !gs.getActiveRow())
		{
			var rows=ar.OwnerCollection;
			if(arOffs<rows.length)
				rows.getRow(arOffs).activate();
			else if(rows.length>0)
				rows.getRow(rows.length-1).activate();
			else if(rows.ParentRow)
				rows.ParentRow.activate();
			ar=gs.getActiveRow();
			if(ar && ar.Band.getSelectTypeRow()==2)
				ar.setSelected();
		}
		gs.isDeletingSelected=false;
		ig_dispose(arr);
		delete arr;
	}
	else
	{
		var r=null;
		if(ar && !gs.getActiveCell())
		{
			r=ar.getNextRow();
			while(r && r.getSelected())
				r=r.getNextRow();
			if(!r)
			{
				r=ar.getPrevRow();
				while(r && r.getSelected())
					r=r.getPrevRow();
			}
			if(!r)
				r=ar.ParentRow;
		}
		for(var rowId in gs.SelectedRows)
		{
			if(gs.SelectedRows[rowId])
			{
				var row=igtbl_getRowById(rowId);
				if(row && row.deleteRow(true))
					del=true;
			}
		}
		ar=gs.getActiveRow();
		if(!del && ar && !gs.SelectedRows[ar.Element.id])
		{
			del=ar.deleteRow(true);
			if(del) ar=null;
		}
		if(del)
		{
			if(r && igtbl_getElementById(r.Element.id))
			{
				if(r.Band.getSelectTypeRow()==2)
					r.setSelected();
				r.activate();
				ar=r;
			}
			else
				ar=null;
		}
		if(!ar)
			gs.setActiveRow(null);
	}
	gs.alignStatMargins();
	if(gs.NeedPostBack)
		igtbl_doPostBack(gn);
}

function igtbl_deleteRow(gn,rowId)
{
	var row=igtbl_getRowById(rowId);
	if(!row)
		return false;
	return row.deleteRow();
}

function igtbl_clearRowChanges(gs,row)
{
	if(!row)return;
	if(gs.SelectedRows[row.Element.id])
		gs._removeChange("SelectedRows",row);
	if(gs.SelectedCellsRows[row.Element.id])
	{
		for(var cell in gs.SelectedCellsRows[row.Element.id])
		{
			gs._removeChange("SelectedCells",igtbl_getCellById(cell));
			delete gs.SelectedCellsRows[row.Element.id][cell];
		}
		delete gs.SelectedCellsRows[row.Element.id];
	}
	if(gs.ChangedRows[row.Element.id])
	{
		for(var cell in gs.ChangedRows[row.Element.id])
		{
			gs._removeChange("ChangedCells",igtbl_getCellById(cell));
			delete gs.ChangedRows[row.Element.id][cell];
		}
		delete gs.ChangedRows[row.Element.id];
	}
	if(gs.ResizedRows[row.Element.id])
		gs._removeChange("ResizedRows",row);
	if(gs.ExpandedRows[row.Element.id])
		gs._removeChange("ExpandedRows",row);
	if(gs.CollapsedRows[row.Element.id])
		gs._removeChange("CollapsedRows",row);
	if(typeof(gs.AddedRows[row.Element.id])!="undefined")
		row._Changes["AddedRows"].setFireEvent(false);
}

function igtbl_cleanRow(row)
{
	if(row.cells)
		for(var j=0;j<row.cells.length;j++)
		{
			var cell=row.cells[j];
			if(cell)
			{
				cell.Column=null;
				cell.Band=null;
				cell.Row=null;
				for(var change in cell._Changes)
				{
					var ch=cell._Changes[change];
					try{
					if(ch.length)
						ch=ch[0];
					if(ch.Grid)
						ch.Grid._removeChange(change,cell);
					}catch(e){;}
				}
				if(cell.Element)
					cell.Element.Object=null;
			}
		}
	if(row._Changes)
		for(var change in row._Changes)
		{
			var ch=row._Changes[change];
			try{
			if(ch.length)
				ch=ch[0];
			if(ch.Grid)
				ch.Grid._removeChange(change,row);
			}catch(e){;}
		}
	row.OwnerCollection=null;
	row.Band=null;
	row.ParentRow=null;
	row.Element.Object=null;
}

var igtbl_justAssigned=false;
function igtbl_resetJustAssigned()
{
	igtbl_justAssigned=false;
}

function igtbl_clearNoOnResize(gn)
{
	var g=igtbl_getGridById(gn);
	g.Element.removeAttribute("noOnResize");
}
function igtbl_fillEditTemplate(row,childNodes)
{
	for(var i=childNodes.length-1;i>=0;i--)
	{
		var el=childNodes[i];
		if(typeof(el.getAttribute)=="undefined")
			continue;
		var colKey=el.getAttribute("columnKey");
		var column=row.Band.getColumnFromKey(colKey);
		if(column)
		{
			var cell=row.getCellByColumn(column);
			if(!cell)
			{
				if(!el.isDisabled)
				{
					el.setAttribute("disabledBefore",true);
					el.disabled=true;
				}
				el.value="";
				continue;
			}
			else if(el.isDisabled && el.getAttribute("disabledBefore"))
			{
				el.disabled=false;
				el.removeAttribute("disabledBefore");
			}
			var cellValue=cell.getValue();
			var cellText="";
			var nullText="";
			if(cellValue==null)
			{
				nullText=cell.Column.getNullText();
				cellText=nullText;
			}
			else
				cellText=cellValue.toString();
			var ect=cellText.replace(/\r\n/g,"\\r\\n");
			ect=ect.replace(/\"/g,"\\\"");
			var s="(\""+row.gridId+"\",\""+el.id+"\",\""+(cell.Element?cell.Element.id:"")+"\",\""+ect+"\")";
			if(!igtbl_fireEvent(row.gridId,igtbl_getGridById(row.gridId).Events.TemplateUpdateControls,s))
			{
				if(el.tagName=="SELECT")
				{
					for(var j=0;j<el.childNodes.length;j++)
						if(el.childNodes[j].tagName=="OPTION")
							if(el.childNodes[j].value==cellText)
							{
								el.childNodes[j].selected=true;
								break;
							}
				}
				else if(el.tagName=="INPUT" && el.type=="checkbox")
				{
					if(!cellValue || cellText.toLowerCase()=="false")
						el.checked=false;
					else
						el.checked=true;
				}
				else if(el.tagName=="DIV" || el.tagName=="SPAN")
				{
					for(var j=0;j<el.childNodes.length;j++)
					{
						if(el.childNodes[j].tagName=="INPUT" && el.childNodes[j].type=="radio")
							if(el.childNodes[j].value==cellText)
							{
								el.childNodes[j].checked=true;
								break;
							}
					}
				}
				else
					el.value=cellText;
				if(!el.isDisabled)
					igtbl_focusedElement=el;
			}
		}
		else if(el.childNodes && el.childNodes.length>0)
			igtbl_fillEditTemplate(row,el.childNodes);
	}
}

function igtbl_unloadEditTemplate(row,childNodes)
{
	for(var i=0;i<childNodes.length;i++)
	{
		var el=childNodes[i];
		
		if(typeof(el.getAttribute) == "unknown" || !el.getAttribute)
			continue;
		var colKey=el.getAttribute("columnKey");
		var column=row.Band.getColumnFromKey(colKey);
		if(column)
		{
			var cell=row.getCellByColumn(column);
			if(cell && !igtbl_fireEvent(row.gridId,igtbl_getGridById(row.gridId).Events.TemplateUpdateCells,"(\""+row.gridId+"\",\""+el.id+"\",\""+(cell.Element?cell.Element.id:"")+"\")"))
			{
				if(cell.isEditable() || cell.Column.getAllowUpdate()==3)
				{
					if(el.tagName=="SELECT")
						cell.setValue(el.options[el.selectedIndex].value);
					else if(el.tagName=="INPUT" && el.type=="checkbox")
						cell.setValue(el.checked);
					else if(el.tagName=="DIV" || el.tagName=="SPAN")
					{
						for(var j=0;j<el.childNodes.length;j++)
						{
							if(el.childNodes[j].tagName=="INPUT" && el.childNodes[j].type=="radio")
								if(el.childNodes[j].checked)
								{
									cell.setValue(el.childNodes[j].value);
									break;
								}
						}
					}
					else if(typeof(el.value)!="undefined")
						cell.setValue(el.value);
				}
			}
		}
		else if(el.childNodes && el.childNodes.length>0)
			igtbl_unloadEditTemplate(row,el.childNodes);
	}
}

function igtbl_gRowEditMouseDown(evnt)
{
	if(igtbl_justAssigned)
	{
		igtbl_justAssigned=false;
		return;
	}
	if(!evnt)
		evnt=event;
	var src=igtbl_srcElement(evnt);
	var editTempl=igtbl_getElementById(igtbl_currentEditTempl);
	if(editTempl && src && !igtbl_contains(editTempl,src))
	{
		var rId=editTempl.getAttribute("editRow");
		if(rId)
		{
			var row=igtbl_getRowById(rId);
			row.Band.Grid.event=evnt;
			row.endEditRow();
		}
	}
}

function igtbl_gRowEditButtonClick(evnt,saveChanges)
{
	if(!evnt)
		evnt=event;
	var src=igtbl_srcElement(evnt);
	var editTempl=igtbl_getElementById(igtbl_currentEditTempl);
	if(editTempl)
	{
		if(typeof(saveChanges)=="undefined")
			saveChanges=(src.id.substring(src.id.length-13)=="igtbl_reOkBtn") || src.value.toUpperCase()=="OK";
		var rId=editTempl.getAttribute("editRow");
		if(rId)
		{
			var row=igtbl_getRowById(rId);
			row.Band.Grid.event=evnt;
			row.endEditRow(saveChanges);
		}
	}
}

function igtbl_RecalculateRowNumbers(rc,startingIndex,band,xmlNode)
{
	if(rc==null&&band==null) return startingIndex;
	
	var oRow;
	var iRowLbl=-1;
	var oFAC;		
	var returnedIndex = -1;
	var workingIndex;
	var oBand = band ? band : rc.Band;

	switch(oBand.AllowRowNumbering)
	{
		case(2):
			workingIndex=startingIndex;
			break;
		case(3):
			workingIndex=1;
			break;		
		case(4):
			workingIndex=oBand._currentRowNumber+1;
			break;		
	}	

	if(null!=rc) 
	{
		for(var i=0;i<rc.length;i++)
		{
			iRowLbl = -1;
			oRow = rc.getRow(i);
						
			if (oRow.Band.AllowRowNumbering>=2)
				iRowLbl=oRow._setRowNumber(workingIndex);
				
			if (iRowLbl>-1)
			{
				var childRows = oRow.Rows;
				var childBand = childRows ? childRows.Band : oRow.Band.Grid.Bands[oRow.Band.Index+1];
				var childXmlNode = childRows ? childRows.Node : (oRow.Node ? oRow.Node.selectSingleNode("Rs") : null);
				returnedIndex=igtbl_RecalculateRowNumbers(childRows,workingIndex+1,childBand,childXmlNode);
			}	
		
			switch(rc.Band.AllowRowNumbering)
			{
				case(2):
					workingIndex=returnedIndex;
					break;
				case(3):
					workingIndex=++workingIndex;
					break;		
				case(4):
					oRow.Band._currentRowNumber=workingIndex;
					workingIndex=++workingIndex;
					break;		
			}									
		}
	}
	else if (band!=null&&xmlNode!=null)
	{
		var oXmlRows = xmlNode.selectNodes("R");
		for(var i=0;i<oXmlRows.length;i++)
		{
			iRowLbl = -1;
			oRow = oXmlRows[i];
						
			if (band.AllowRowNumbering>=2)			
				oRow.setAttribute(igtbl_litPrefix+"rowNumber",workingIndex);
				
			var childRows = null;
			var childBand = band.Grid.Bands[band.Index+1];
			var childXmlNode = oRow.selectSingleNode("Rs");
			
			returnedIndex=igtbl_RecalculateRowNumbers(childRows,workingIndex+1,childBand,childXmlNode);
			
			switch(band.AllowRowNumbering)
			{
				case(2):
					workingIndex=returnedIndex;
					break;
				case(3):
					workingIndex=++workingIndex;
					break;		
				case(4):
					band._currentRowNumber=workingIndex;
					workingIndex=++workingIndex;
					break;		
			}											
		}		
	}
	return workingIndex;
}

function igtbl_swapCells(rows,bandNo,index,toIndex)
{
	if(!rows || rows.Band.Index>bandNo)
		return;
	for(var i=0;i<rows.rows.length;i++)
	{
		var row=rows.rows[i];
		if(row)
		{
			if(!row.GroupByRow && row.Band.Index==bandNo && row.cells)
			{
				var cell=row.cells[index];
				row.cells[index]=row.cells[toIndex];
				row.cells[toIndex]=cell;
			}
			igtbl_swapCells(row.Rows,bandNo,index,toIndex);
		}
	}
}

function igtbl_AdjustCheckboxDisabledState(column,bandIndex,rows,value)
{
	if(!rows)return;
	if (rows.Band.Index==bandIndex)
		for (var i=0;i<rows.length;i++)
		{
			var oC=rows.getRow(i).getCellByColumn(column);
			oC=igtbl_getCheckboxFromElement(oC.Element);
			if(oC)oC.disabled=!(1==value);
		}
	else if (rows.Band.Index < bandIndex) 
		for (var i=0;i<rows.length;i++) igtbl_AdjustCheckboxDisabledState(column, bandIndex,rows.getRow(i).Rows,value);
}


function igtbl_cancelNoOnScroll(gn)
{
	var g=igtbl_getGridById(gn);
	if(!g)return;
	var de=g.getDivElement();
	de.removeAttribute("noOnScroll");
	de.removeAttribute("oldST");
	de.removeAttribute("oldSL");
	g.cancelNoOnScrollTimeout=0;
}

function igtbl_scrollLeft(e,left)
{
	e.scrollLeft=left;
	if((ig_csom.IsNetscape || ig_csom.IsNetscape6) && e.onscroll && !e._insideFFOnScroll)
	{
		e._insideFFOnScroll=true;
		e.onscroll();
		e._insideFFOnScroll=false;
	}
}

function igtbl_scrollTop(e,top)
{
	if(e.scrollTop==top)
		return;
	e.scrollTop=top;
	if((ig_csom.IsNetscape || ig_csom.IsNetscape6) && e.onscroll && !e._insideFFOnScroll)
	{
		e._insideFFOnScroll=true;
		e.onscroll();
		e._insideFFOnScroll=false;
	}
}

function igtbl_getBodyScrollLeft()
{
	var isXHTML=document.compatMode=="CSS1Compat";
	if(isXHTML)
		return document.body.parentNode.scrollLeft;
	else
		return document.body.scrollLeft;
}

function igtbl_getBodyScrollTop()
{
	if(igtbl_isXHTML)
		return document.body.parentNode.scrollTop;
	else
		return document.body.scrollTop;
}
function igtbl_selectStart(evnt,gn)
{
	var se=igtbl_srcElement(evnt);
	if(se)
	{
		var over=false,cell=null,column=null;		
		while(se && !over)
		{
			
			if(se && (se.tagName=="TABLE" && se.id=="G_"+gn ||
					  se.tagName=="TH" && (column=igtbl_getColumnById(se.id))!=null ||
					  se.tagName=="TD" && (cell=igtbl_getCellById(se.id))!=null)
					)
				over=true;
			se=se.parentNode;
		}
		if(cell)
		{
			if(!(cell.Column.TemplatedColumn&2))
				igtbl_cancelEvent(evnt);
		}
		
		else if(column)
		{
			if( (!(column.TemplatedColumn&1) && se.parentNode.parentNode.tagName=="THEAD") ||
				(!(column.TemplatedColumn&4) && se.parentNode.parentNode.tagName=="TFOOT")
			  )
				igtbl_cancelEvent(evnt);
		}
		else
			igtbl_cancelEvent(evnt);
	}
}

function igtbl_selectColumnRegion(gn,se)
{
	var gs=igtbl_getGridById(gn);
	if(!gs)
		return;
	var te=gs.Element;
	var lastSelectedColumn=te.getAttribute("lastSelectedColumn");
	var selMethod=te.getAttribute("selectMethod");
	if(selMethod=="column" && se.id!=lastSelectedColumn)
	{
		var startColumn=igtbl_getColumnById(te.getAttribute("startColumn"));
		if(startColumn==null)
			startColumn=igtbl_getColumnById(se.id);
		var endColumn=igtbl_getColumnById(se.id);
		if(endColumn.Band.getSelectTypeColumn()==3)
			gs.selectColRegion(startColumn,endColumn);
		else
		{
			igtbl_clearSelectionAll(gn);
			igtbl_selectColumn(gn,se.id);
		}
		gs.Element.setAttribute("lastSelectedColumn",se.id);
	}
}

function igtbl_selectRegion(gn,se)
{
	var gs=igtbl_getGridById(gn);
	if(!gs || !se)
		return;
	var rowContainer;
	var cell=igtbl_getCellById(se.id),row=null;
	if(!cell)
		row=igtbl_getRowById(se.id);
	else
		row=cell.Row;
	if(!row)
		return;
	if(se.getAttribute("groupRow"))
		rowContainer=se.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;
	else
		rowContainer=row.Element.parentNode;
	var te=gs.Element;
	var selTableId = te.getAttribute("selectTable");
	var workTableId;
	if(row.IsAddNewRow && row.Band.Index==0)
		workTableId=gs.Element.id;
	else
	if(se.getAttribute("groupRow"))
		workTableId=se.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.id;
	else
		workTableId=row.Element.parentNode.parentNode.id;
	if(workTableId=="")
		return;
	var bandNo=igtbl_getElementById(workTableId).getAttribute("bandNo");
	if(selTableId==workTableId)
	{
		var selMethod = te.getAttribute("selectMethod");
		if(selMethod=="row" && (!cell || igtbl_getCellClickAction(gn,bandNo)==2 && cell || se.getAttribute("groupRow")))
		{
			var selRow=igtbl_getRowById(te.getAttribute("startPointRow"));
			var rowId;
			if(se.getAttribute("groupRow"))
				rowId=se.parentNode.parentNode.parentNode.parentNode.parentNode.id;
			else
				rowId=row.Element.id;
			var curRow=igtbl_getRowById(rowId);
			if(selRow && igtbl_getSelectTypeRow(gn,bandNo)==3 && igtbl_getCellClickAction(gn,bandNo)>0)
			{
				igtbl_setActiveRow(gn,curRow.getFirstRow());
				gs.selectRowRegion(selRow,curRow);
			}
			else
			{
				igtbl_setActiveRow(gn,igtbl_getFirstRow(igtbl_getElementById(rowId)));
				if(!(curRow.getSelected() && igtbl_getLength(gs.SelectedRows)==1))
				{
					igtbl_clearSelectionAll(gn);
					if(se.getAttribute("groupRow"))
						rowId=igtbl_getWorkRow(row.Element,gn).id;
					if(igtbl_getSelectTypeRow(gn,bandNo)>1 && igtbl_getCellClickAction(gn,bandNo)>0)
						igtbl_selectRow(gn,curRow);
				}
			}
		}
		else if(selMethod=="cell" && cell)
		{
			var selCell=igtbl_getCellById(te.getAttribute("startPointCell"));
			var curCell=igtbl_getCellById(se.id);
			if(igtbl_getSelectTypeCell(gn,bandNo)==3 && igtbl_getCellClickAction(gn,bandNo)>0 && selCell)
			{
				gs.selectCellRegion(selCell,curCell);
				curCell.activate();
			}
			else
			{
				if(!(curCell.getSelected() && igtbl_getLength(gs.SelectedRows)==1))
				{
					igtbl_clearSelectionAll(gn);
					if(igtbl_getSelectTypeCell(gn,bandNo)>1 && igtbl_getCellClickAction(gn,bandNo)>0)
						igtbl_selectCell(gn,curCell);
				}
				igtbl_setActiveCell(gn,se);
			}
		}
	}
}

function igtbl_clearSelectionAll(gn)
{
	var gs=igtbl_getGridById(gn);
	if(igtbl_fireEvent(gn,gs.Events.BeforeSelectChange,"(\""+gn+"\",\"\")")==true)
		return;
	var row,column,cell;
	gs._noCellChange=false;
	for(var row in gs.SelectedRows)
		igtbl_selectRow(gn,row,false,false);
	for(var column in gs.SelectedColumns)
		igtbl_selectColumn(gn,column,false,false);
	for(var row in gs.SelectedCellsRows)
	{
		for(var cell in gs.SelectedCellsRows[row])
			delete gs.SelectedCellsRows[row][cell];
		delete gs.SelectedCellsRows[row];
	}
	for(var cell in gs.SelectedCells)
		igtbl_selectCell(gn,cell,false,false);
}

function igtbl_selectCell(gn,cellID,selFlag,fireEvent)
{
	var cell=cellID;
	if(typeof(cell)=="string")
		cell=igtbl_getCellById(cellID);
	
		
	if(!cell)
		return;
	cell.select(selFlag,fireEvent);
}

function igtbl_selectRow(gn,rowID,selFlag,fireEvent)
{
	var rowObj=rowID;
	if(typeof(rowObj)=="string")
		rowObj=igtbl_getRowById(rowID);
	else
		rowID=rowObj.Element.id;
	if(!rowObj)
		return false;
	return rowObj.select(selFlag,fireEvent);
}

function igtbl_selColRI(gn,column,bandNo,colNo,nonFixed)
{
	var cellElems=igtbl_enumColumnCells(gn,column);
	for(var i=0;i<cellElems.length;i++)
	{
		var visElem=cellElems[i];
		igtbl_changeStyle(gn,visElem,igtbl_getSelCellClass(gn,bandNo,colNo));
	}
	igtbl_changeStyle(gn,column,igtbl_getSelHeadClass(gn,bandNo,colNo));
	igtbl_dispose(cellElems);
}

function igtbl_selectColumn(gn,columnID,selFlag,fireEvent)
{
	var column=igtbl_getElementById(columnID);
	var colObj=igtbl_getColumnById(columnID);
	
	if (!colObj)return;
	var bandNo=colObj.Band.Index;
	if(igtbl_getSelectTypeColumn(gn,bandNo)<2)
		return;
	var colNo=colObj.Index;
	var gs=igtbl_getGridById(gn);
	if(gs._exitEditCancel || gs._noCellChange)
		return;
	if(fireEvent!=false)
		if(igtbl_fireEvent(gn,gs.Events.BeforeSelectChange,"(\""+gn+"\",\""+columnID+"\")")==true)
			return;
	var nonFixed=gs.UseFixedHeaders && !colObj.getFixed();
	var aRow=null;
	var aCell=gs.getActiveCell();
	if(aCell && aCell.Column!=colObj)
		aCell=null;
	else if(!aCell)
		aRow=gs.getActiveRow();
	if(selFlag!=false)
	{
		var cols=igtbl_getDocumentElement(columnID);
		if (cols){
			if(cols.length)
				for(var j=0;j<cols.length;j++)
					igtbl_selColRI(gn,cols[j],bandNo,colNo,nonFixed);
			else
				igtbl_selColRI(gn,column,bandNo,colNo,nonFixed);
			gs._recordChange("SelectedColumns",colObj,gs.GridIsLoaded.toString());
			colObj.Selected=true;
			gs.Element.setAttribute("lastSelectedColumn",columnID);
		}
	}
	else
	{
		var cols=igtbl_getDocumentElement(columnID);
		if(!cols.length)
			cols=[cols];
		for(var j=0;j<cols.length;j++)
		{
			var colsj=cols[j];
			igtbl_changeStyle(gn,colsj,null);
			var cellElems=igtbl_enumColumnCells(gn,cols[j]);
			for(var i=0;i<cellElems.length;i++)
			{
				var cell=cellElems[i];
				var row=cell.parentNode;
				if(!row.getAttribute("hiddenRow") && !gs.SelectedRows[row.id] && !gs.SelectedCells[cell.id])
					igtbl_changeStyle(gn,cell,null);
			}
			igtbl_dispose(cellElems);
		}
		gs._removeChange("SelectedColumns",colObj);
		colObj.Selected=false;
	}
	if(aRow)
		aRow.renderActive();
	if(aCell)
		aCell.renderActive();
	if(fireEvent!=false)
	{
		var gsNPB = gs.NeedPostBack;
		igtbl_fireEvent(gn,gs.Events.AfterSelectChange,"(\""+gn+"\",\""+columnID+"\");");
		if(!gsNPB && !(gs.Events.AfterSelectChange[1]&4))
			gs.NeedPostBack=false;
		if(gs.NeedPostBack)
			igtbl_moveBackPostField(gn,"SelectedColumns");
	}
}

function igtbl_gSelectArray(gn,elem,array)
{
	var gs=igtbl_getGridById(gn);
	gs._noCellChange=false;
	if(elem==0)
	{
		var oldSelCells=gs.SelectedCells;
		gs.SelectedCells=new Object();
		
		for(var i=0;i<array.length;i++)
			if(oldSelCells[array[i]])
				gs.SelectedCells[array[i]]=true;
		var fireOnUnsel=true;
		for(var i=0;i<array.length;i++)
			if(!oldSelCells[array[i]])
			{
				igtbl_selectCell(gn,array[i]);
				fireOnUnsel=false;
			}
		for(var cell in oldSelCells)
			if(!gs.SelectedCells[cell])
				igtbl_selectCell(gn,cell,false,fireOnUnsel);
		for(var cell in oldSelCells)
			delete oldSelCells[cell];
	}
	else if(elem==1)
	{
		var oldSelRows=gs.SelectedRows;
		gs.SelectedRows=new Object();
		
		for(var i=0;i<array.length;i++)
			if(oldSelRows[array[i]])
				gs.SelectedRows[array[i]]=true;
		var fireOnUnsel=true;
		for(var i=0;i<array.length;i++)
			if(!oldSelRows[array[i]])
			{
				igtbl_selectRow(gn,array[i]);
				fireOnUnsel=false;
			}
		for(var row in oldSelRows)
			if(!gs.SelectedRows[row])
				igtbl_selectRow(gn,row,false,fireOnUnsel);
		for(var row in oldSelRows)
			delete oldSelRows[row];
	}
	else
	{
		var oldSelCols=gs.SelectedColumns;
		gs.SelectedColumns=new Object();
		
		for(var i=0;i<array.length;i++)
			if(oldSelCols[array[i]])
				gs.SelectedColumns[array[i]]=true;
		var fireOnUnsel=true;
		for(var i=0;i<array.length;i++)
			if(!oldSelCols[array[i]])
			{
				igtbl_selectColumn(gn,array[i]);
				fireOnUnsel=false;
			}
		for(var col in oldSelCols)
			if(!gs.SelectedColumns[col])
				igtbl_selectColumn(gn,col,false,fireOnUnsel);
		for(var col in oldSelCols)
			delete oldSelCols[col];
	}
}
function igtbl_initStatHeader(gs)
{
	this.Type="statHeader";

	this.gridId=gs.Id;
	this.Element=gs._tdContainer.parentNode.previousSibling.childNodes[0].childNodes[0].childNodes[0].childNodes[1];
	this.ScrollTo=igtbl_scrollStatHeader;
	this.getElementByColumn=igtbl_shGetElemByCol;
	
	if(!gs.Bands[0].HasHeaderLayout)
		_igtbl_headerOrFooterHeight(this.Element);  
	var outlGB=false;
	if(gs.Rows && gs.Rows.length>0 && (row=gs.Rows.getRow(0)).GroupByRow)
		outlGB=true;
	if(!gs.UseFixedHeaders)
	{
		var row;
		if(outlGB)
		{
			while(row.GroupByRow && row.Rows && row.Rows.length>0)
				row=row.Rows.getRow(0);
			if(row.GroupByRow)
			{
				for(var i=0;i<this.Element.childNodes[0].childNodes.length;i++)
				{
					var col=this.Element.childNodes[0].childNodes[i];
					if(col.getAttribute("columnNo"))
					{
						var colNo=parseInt(col.getAttribute("columnNo"));
						gs.Bands[0].Columns[colNo].Element=col;
					}
				}
				return;
			}
		}
		for(var i=0;i<this.Element.childNodes[0].childNodes.length;i++)
		{
			var col=this.Element.childNodes[0].childNodes[i];
			if(col.getAttribute("columnNo"))
			{
				var colNo=parseInt(col.getAttribute("columnNo"));
				gs.Bands[0].Columns[colNo].Element=col;
			}
		}
	}
	else
	{
		var childNodes=this.Element.childNodes[0].childNodes;
		var i=0;
		while(i<childNodes.length)
		{
			var col=childNodes[i];
			i++;
			if(col.getAttribute("columnNo"))
			{
				var colNo=parseInt(col.getAttribute("columnNo"));
				gs.Bands[0].Columns[colNo].Element=col;
			}
			else if(col.colSpan>1 && col.firstChild.tagName=="DIV" && col.firstChild.id.substr(col.firstChild.id.length-4)=="_drs")
			{
				childNodes=col.firstChild.firstChild.childNodes[1].rows[0].childNodes;
				i=0;
			}
		}
	}
	
	var comWidth=gs.Element.offsetWidth==0?gs.Element.style.width:gs.Element.offsetWidth;
	var hasPercWidth=gs.Element.style.width.indexOf("%")>0;
	if(	typeof(comWidth)=="number" || (typeof(comWidth)=="string" && comWidth.indexOf("%")==-1) )
	{	
		if((gs.AllowUpdate==1 || gs.Bands[0].AllowUpdate==1) && !hasPercWidth)
			comWidth--;
		if(outlGB)
		{
			comWidth -= _igtbl_headerRowIndentation(gs, gs._AddnlProps[8].split(";"));
		}
		
		
		if(hasPercWidth && igtbl_dom.table.allPercentageColumns(gs.Element, gs.Bands[0].firstActiveCell))
			this.Element.parentNode.style.width="100%"
		else if (comWidth>0)
		{
			comWidth=comWidth+"px";
			this.Element.parentNode.style.width=comWidth;
			if(!hasPercWidth && gs.Element.style.width!=comWidth)
				gs.Element.style.width=comWidth;
		}
	}
	else if(comWidth>0)
	{
		this.Element.parentNode.style.width=comWidth+"px";
	}
}

function igtbl_scrollStatHeader(scrollLeft)
{
	var gs=igtbl_getGridById(this.gridId);
	
	var parentNodeStyle = this.Element.parentNode.style;
    
    if(!gs.UseFixedHeaders)
		parentNodeStyle.left=-scrollLeft+"px";
	
	var hasPercWidth=gs.Element.style.width.indexOf("%")>0;
	var comWidth=gs.getDivElement().firstChild.offsetWidth;
	var hdrTblWidth = comWidth;
	if(gs.Rows && gs.Rows.length>0 && (row=gs.Rows.getRow(0)).GroupByRow)
	{
	    var hdrRowInd = _igtbl_headerRowIndentation(gs, gs.Bands[0].SortedColumns);
		comWidth -= hdrRowInd;
		
		hdrTblWidth -= 2 * hdrRowInd;
	}

	
	if(parentNodeStyle.width && comWidth>0 && gs.Element.offsetWidth > comWidth)
	{
		
		comWidth=comWidth+"px";
		hdrTblWidth=hdrTblWidth+"px";
	
		
		parentNodeStyle.width=hdrTblWidth;
		
		
		if(!hasPercWidth && gs.Element.style.width && gs.Element.style.width!=comWidth)
			gs.Element.style.width=comWidth;
	}
}



function igtbl_initStatFooter(gs)
{
	this.Type="statFooter";
	this.ScrollTo=igtbl_scrollStatFooter;
	this.Resize=igtbl_resizeStatFooter;
	this.getElementByColumn=igtbl_sfGetElemByCol;

	this.gridId=gs.Id;
	var tbl=gs._tdContainer.parentNode.nextSibling.firstChild.firstChild.firstChild;
	this.Element=tbl.rows[tbl.rows.length-1].parentNode;	
	_igtbl_headerOrFooterHeight(this.Element); 
	var comWidth=gs.Element.offsetWidth;
	var hasPercWidth=gs.Element.style.width.indexOf("%")>0;
	if((gs.AllowUpdate==1 || gs.Bands[0].AllowUpdate==1) && !hasPercWidth)
		comWidth--;
	if(gs.Rows && gs.Rows.length>0 && (row=gs.Rows.getRow(0)).GroupByRow)
	{
		comWidth -= _igtbl_headerRowIndentation(gs, gs._AddnlProps[8].split(";"));
	}
	if(comWidth>0)
	{
		comWidth=comWidth+"px";
		this.Element.parentNode.style.width=comWidth;
	}
}

function igtbl_scrollStatFooter(scrollLeft)
{
	var gs=igtbl_getGridById(this.gridId);
    if(!gs.UseFixedHeaders)
		this.Element.parentNode.style.left = -scrollLeft + "px";
	
	var comWidth=gs.Element.offsetWidth;
	
	
	if(gs.Rows && gs.Rows.length>0 && (row=gs.Rows.getRow(0)).GroupByRow)
	{
		comWidth -= _igtbl_headerRowIndentation(gs, gs.Bands[0].SortedColumns);
	}
	
	if(this.Element.parentNode.style.width && comWidth>0)
	{
		comWidth=comWidth+"px";
		this.Element.parentNode.style.width=comWidth;
	}
}

function igtbl_resizeStatFooter(index,width)
{
	var c1w=width;
	var gs=igtbl_getGridById(this.gridId);
	
	var column=gs.Bands[0].Columns[index];
	
	
	var el = igtbl_getDocumentElement(column.fId);
	if(el && el.length && el.length > 0)
	{
		el=el[el.length-1];
	}	
	
	var spannedFooter=false;
	if(!el)
	{
		el=igtbl_getElemVis(gs.StatFooter.Element.childNodes[0].childNodes,index);
		spannedFooter=true;
	}
	if(el)
	{
		
		var cg=el.parentNode.parentNode.previousSibling;					
		var anCell=null;
		if(gs.Rows.AddNewRow && gs.Bands[0].AddNewRowView==2)
		{
			cg=cg.previousSibling;
			anCell=gs.Rows.AddNewRow.getCellByColumn(column);
		}
		
		while(cg && cg.tagName!='COLGROUP')
		{
			cg=cg.previousSibling;
		}
		var c;
		if(cg)
			{			
			c=cg.childNodes[anCell?anCell.getElement().cellIndex:el.cellIndex];
			}
		else
			c=el;
		
		
		c.style.width=c1w+"px";
		el.style.width=c1w+"px";
		if(gs.UseFixedHeaders && column && !column.getFixed())
		{
			var d=c.style.display;
			c.style.display="none";
			c.style.display=d;
		}
	}
	
}

function _igtbl_headerOrFooterHeight(el)
{
		
	
	 
	if (el.parentNode.offsetHeight == 0)
	 return;
	 
    if (el.parentNode.offsetHeight == 0)
	{
		var chn = el.firstChild.firstChild;
		while(chn && !chn.height)
		{
			chn = chn.nextSibling;
		}
		if(chn && chn.height)
		{
		    
		    var chnH;
		    if (chn.currentStyle)
		    {
		        chnH = parseInt(chn.currentStyle.height) + parseInt(chn.currentStyle.borderBottomWidth) + parseInt(chn.currentStyle.borderTopWidth)
		        if (isNaN(chnH))
		        {
		            chnH = chn.height;
		        }  
		        else
		        {
		            chnH += "px";
		        }		          
		    }
		    else
		    {
			    chnH = chn.height;
			}
			el.parentNode.parentNode.style.height = chnH;
		}
		else
		{
			el.parentNode.parentNode.style.height = "20px";
		}
	}	
	else
	{
		el.parentNode.parentNode.style.height = el.parentNode.offsetHeight+"px";
	}
}

function _igtbl_headerRowIndentation(gs, sc)
{
	var indentation0 = gs.Bands[0].getIndentation();
	var result = 0;
	for(var i = 0; i < sc.length; i++)
	{
		var col = igtbl_getColumnById(sc[i]);
		if(!col || col.Band.Index > 0 || !col.IsGroupBy)
		{
			break;
		}
		result += indentation0;
	}
	return result;
}
igtbl_browserWorkarounds = {
   
    
    
    
    
    ieBorderCollapseArtifacts : function(row, h)
    {
		
		var table = row.Element.parentNode.parentNode;
		if(!ig_csom.IsIE ||
			table.currentStyle.borderCollapse != "collapse" ||
			table.currentStyle.tableLayout == "fixed")
		{
			return;
		}
			
		
		for(var x=row.cells.length-1;x>=0;x--)
		{
			var cell = row.getCell(x);
		    var col = cell.Column;
		    cell.Element.style.display=( col.Hidden || h?"none":"");
		}	
	},
	
	ieTabScrollBarAdjustment : function (firstBand)
	{
		if(!ig_csom.IsIE) return;
		
		if (firstBand)
		{
			var firstColumn = firstBand.Columns[0];
			
			while(firstColumn && firstColumn.getHidden())
				firstColumn = firstBand.Columns[firstColumn.Index + 1]
			if (firstColumn) firstColumn.setWidth(firstColumn.getWidth());
		}
	},
    
    
    
    
    
    
    
    
    addActiveElementTracking : function()
    {
        if(typeof(document.activeElement) == "undefined" && !this.isTrackingActiveElement)
	    {
	        ig_csom.addEventListener(document, "focus", this.trackActiveElement);
	        this.isTrackingActiveElement = true;
	    }
    },
    removeActiveElementTracking : function()
    {
        if(this.isTrackingActiveElement)
	    {
	        ig_csom.removeEventListener(document, "focus", this.trackActiveElement);
	        igtbl_browserWorkarounds.activeElement = null;
	    }	        
    },
	trackActiveElement : function(e)
    {
        var evnt = igtbl_event.getEvent(e);
        igtbl_browserWorkarounds.activeElement = igtbl_srcElement(evnt);
    }
};

function igtbl_fixDOEXml()
{
	if(ig_csom.IsNetscape6)
	{
		var doeElems=document.getElementsByName("_igdoe");
		for(var i=doeElems.length-1;i>=0;i--)
		{
			var doe=doeElems[i];
			doe.innerHTML=doe.textContent;
			doe.removeAttribute("name");
		}
	}
}
igtbl_string =
{
	
	stringToBool : function(value)
	{
		if(value === "true" || value === true) 
			return true;
		return false;
	}, 
	
	
	trim : function (s)
	{
		if(!s)
			return s;
		s=s.toString();
		var result=s;
		for(var i=0;i<s.length;i++)
			if(s.charAt(i)!=' ')
				break;
		result=s.substr(i,s.length-i);
		for(var i=result.length-1;i>=0;i--)
			if(result.charAt(i)!=' ')
				break;
		result=result.substr(0,i+1);
		return result;
	},
	
	
	isNullOrEmpty : function(object, property)
	{
		if(typeof(object[property]) == "undefined") return true;
		if(object[property] === "") return true;
		if(object[property] === null) return true;
		return false;
	},
	
	toString : function(object)
	{
		if(typeof(object) != undefined && object != null && typeof(object.toString) == "function")
			return object.toString();
		return "";
	}
};

igtbl_number = 
{
	
	fromString : function(number)
	{
		
		if(number)
		{
			var outValue=parseInt(number,10);
			if(!isNaN(outValue))
				return outValue;
		}
		return 0;
	},
	
	sortNumber : function(a,b)
	{
		return a[0] - b[0];
	}
};

function igtbl_valueFromString(value,dataType)
{
	if(typeof(value)=="undefined" || value==null)
		return value;
	switch(dataType)
	{
		case igtbl_dataType.Int16:
		case igtbl_dataType.Int32:
		case igtbl_dataType.Byte:
		case igtbl_dataType.SByte: 
		case igtbl_dataType.UInt16:
		case igtbl_dataType.UInt32:
		case igtbl_dataType.Int64:
		case igtbl_dataType.UInt64:
			if(typeof(value)=="number")
				return value;
			if(typeof(value)=="boolean")
				return (value?1:0);
			if(value.toString().toLowerCase()=="true")
				return 1;
			value=parseInt(value.toString(),10);
			if(value.toString()=="NaN")
				value=0;
			break;
		case igtbl_dataType.Single:
		case igtbl_dataType.Double:
		case igtbl_dataType.Decimal:
			if(typeof(value)=="float")
				return value;
			value=parseFloat(value.toString());
			if(value.toString()=="NaN")
				value=0.0;
			break;
		case igtbl_dataType.Boolean:
			if(!value || value.toString()=="0" || value.toString().toLowerCase()=="false")
				value=false;
			else
				value=true;
			break;
		case igtbl_dataType.DateTime:
			
			var d;
			if(typeof(value)=="string")
			{
				var dtV=value.split(".");
				var ms=0,lastPart=dtV.length>1?dtV[1].substr(dtV[1].length-3).toUpperCase():"";
				if(dtV.length>1 && (lastPart==" AM" || lastPart==" PM"))
				{
					ms=igtbl_parseInt(dtV[1]);
					dtV[0]+=lastPart;
				}
				else
					dtV[0]=value;
				d=new Date(dtV[0]);
				if(!isNaN(d))
					d.setMilliseconds(ms);
			}
			else
				d=new Date(value);
			if(d.toString()!="NaN" && d.toString()!="Invalid Date")
				value=d;
			else
				value=igtbl_string.trim(value.toString());
			delete d;
			break;
		case igtbl_dataType.String: 
			break;
		default:
			value=igtbl_string.trim(value.toString());
	}
	return value;
}

function igtbl_dateToString(date)
{
	if(date==null)
		return "";
	if(typeof(date.getFullYear)!="function")
		return date.toString();
	var month=date.getMonth();
	var day=date.getDate();
	var year=date.getFullYear();
	var hour=date.getHours();
	var min=date.getMinutes();
	var sec=date.getSeconds();
	var ms=date.getMilliseconds();
	
	
	return (month+1).toString()+"/"+day.toString()+"/"+
		(year.toString().length>4?year.toString().substr(0,4):year)+" "+
		(hour==0?"12":(hour%12).toString())+":"+(min<10?"0":"")+
		min+":"+(sec<10?"0":"")+sec+
		igtbl_dateMsToString(date) +" "+(hour<12?"AM":"PM");
}

function igtbl_dateMsToString(date)
{
	var ms=date.getMilliseconds();
	if(ms == 0)
		return "";
	if(ms < 10)
		return ".00" + ms.toString();
	if(ms < 100)
		return ".0" + ms.toString();
	return "." + ms.toString();
}

function igtbl_parseInt(inValue)
{
	var outValue=parseInt(inValue,10);
	if(isNaN(outValue))
		outValue=0;
	return outValue;
}

function igtbl_trim(s)
{
	if(!s)
		return s;
	s=s.toString();
	var result=s;
	for(var i=0;i<s.length;i++)
		if(s.charAt(i)!=' ')
			break;
	result=s.substr(i,s.length-i);
	for(var i=result.length-1;i>=0;i--)
		if(result.charAt(i)!=' ')
			break;
	result=result.substr(0,i+1);
	return result;
}


igtbl_debug =
{
	
	writeLine : function(message)
	{
	},
	
	writeStackTrace : function(startingPoint)
	{
	} 
	
}
function igtbl_contains(e1,e2)
{
	if(e1.contains)
		return e1.contains(e2);
	var contains=false;
	var p=e2;
	while(p && p!=e1)
		p=p.parentNode;
	return p==e1;
}

function igtbl_getStyleSheet(name)
{
	var nameAr=name.split(".");
	if(nameAr.length>2)
		return null;
	else if(nameAr.length==2)
	{
		if(ig_csom.IsIE)
			nameAr[0]=nameAr[0].toUpperCase();
		else
			nameAr[0]=nameAr[0].toLowerCase();
		name=nameAr.join(".");
	}
	else
		name="."+name;
	for(var i=0;i<document.styleSheets.length;i++)
	{
		
		var ssrules=null;
		try{
			if(ig_csom.IsIE)
				ssrules=document.styleSheets[i].rules;
			else
				ssrules=document.styleSheets[i].cssRules;
		}catch(e){;}
		if(ssrules)
			for(var j=0;j<ssrules.length;j++)
				if(ssrules[j].selectorText==name)
					return ssrules[j].style;
	}
	return null;
}

function igtbl_getCurrentStyleProperty(e,propName,forceCalc)
{
	if(e && e.tagName && ig_csom.IsIE && !forceCalc)
		return e.currentStyle[propName];
	else
	{
		if(e && e.tagName && e.style[propName])
			return e.style[propName];
		var className=e;
		if(e && e.tagName)
			className=e.className;
		if(className)
		{
			var clsNames=className.split(" ");
			clsNames=clsNames.reverse();
			for(var i=0;i<clsNames.length;i++)
			{
				var style=igtbl_getStyleSheet(clsNames[i]);
				if(style && style[propName])
					return style[propName];
			}
		}
	}
	return "";
}

function igtbl_getArray(elem)
{
	if(!elem) return null;
	var a=new Array();
	if(!elem.length)
		a[0]=elem;
	else
		for(var i=0;i<elem.length;i++)
			a[i]=elem[i];
	return a;
}

function igtbl_getCheckboxFromElement(oCellE)
{
	var oChk=null;
	for(var i=0;i<oCellE.childNodes.length;i++)
	{
		if (oCellE.childNodes[i].tagName=="INPUT"&&oCellE.childNodes[i].type=="checkbox")
			oChk=oCellE.childNodes[i];
		else
			oChk=igtbl_getCheckboxFromElement(oCellE.childNodes[i])		
		if(oChk)break;
	}
	return oChk;
}

igtbl_dom = 
{
	
	isParent : function(child, parent)
	{
		if(child==null||parent==null)return false;
		
		var possibleParent = child.parentNode;
		while(possibleParent != null)
		{
			if(possibleParent == parent)
				return true;
			
			possibleParent = possibleParent.parentNode;
		}
		return false;
		
	},

	
	isTag : function(element, type)
	{
		if(!element)
			return false;
			
		if(!igtbl_array.isList(type))
			type = [type];
			
		for(var x=0; x<type.length; x++)
		{
			if(element.tagName === type[x])
				return true;
			else if(typeof(type[x].toUpperCase) != "undefined" &&
				element.tagName.toUpperCase() === type[x].toUpperCase())
				return true;
		}
		
		return false;
	},
	
	hasVisibleStyle : function(elem)
	{
		if(igtbl_dom.css.getComputedStyle(elem, "display") != "none" &&
			igtbl_dom.css.getComputedStyle(elem, "visibility") != "hidden")
		{
			return true;
		}

		return false;
	},
	
	isVisible : function(elem)
	{
		while(elem && elem.tagName!=(igtbl_isXHTML?"HTML":"BODY"))
		{
		  
			if(elem.style && elem.style.display=="none" || 
				elem.tagName!="FORM" && elem.tagName != "BODY" && !elem.offsetHeight)
				return false;
			elem=elem.parentNode;
		}
		return true;
	},
	
	find :
	{
		// use igcsom.getElementById wherever is possible 
		elementById : function(tagId)
		{
			
			if(!document) return;
	
			var obj=ig_csom.getElementById(tagId);
			if(obj && obj.length && typeof(obj.tagName)=="undefined")
			{
				var i=0;
				while(i<obj.length && (obj[i].id!=tagId || !igtbl_isVisible(obj[i]))) i++;
				if(i<obj.length) obj=obj[i];
				else obj=obj[0];
			}
			return obj;
		},
	
		
		parentByTag : function(element, parentType)
		{
			var parent = element;
			while(parent && !igtbl_dom.isTag(parent, parentType))
				parent=parent.parentNode;
			return parent;
		},
		
		parentForm : function(elem)
		{
			if(!elem) return null;
			var thisForm=igtbl_dom.find.parentByTag(elem, "FORM");
			
			if(!thisForm && document.forms && document.forms.length==1)
				thisForm=document.forms[0];
			return thisForm;
		},
		
		
		childByTag : function(element, childType)
		{
			if(element)
			{
				for(var x=0; x<element.childNodes.length; x++)
				{
					var child = element.childNodes[x];
					if(igtbl_dom.isTag(child, childType))
						return child;
					var foundChild = igtbl_dom.find.childByTag(child, childType);
					if(foundChild)
						return foundChild;
				}
			}
			return null;
		},
		
		childrenByPath : function(element, path)
		{
			var pathElements = path.split("/");
			var matches = [];
			if(pathElements.length > 0)
			{
				var elementToFind = pathElements[0];
				for(var x=0; x<element.childNodes.length; x++)
				{
					var childNode = element.childNodes[x];
					if(igtbl_dom.isTag(childNode, elementToFind))
					{
						if(elementToFind == path)
							matches.push(childNode);
						else
							return igtbl_dom.find.childrenByPath(childNode, path.substring(elementToFind.length + 1));
					}
				}
			}
			return matches;
		},
		
		childById : function(parent,id)
		{
			if(!id || !parent.childNodes || !parent.childNodes.length)
				return null;
			for(var i=0;i<parent.childNodes.length;i++)
				try{
					if(parent.childNodes[i].id && parent.childNodes[i].id==id)
						return parent.childNodes[i];
					var che=igtbl_dom.find.childById(parent.childNodes[i],id);
					if(che)
						return che;
				}catch(ex){;}
			return null;
		},
		
		childrenById : function(parent,id)
		{
			if(!id || !parent.childNodes || !parent.childNodes.length)
				return null;
			var array=[];
			for(var i=0;i<parent.childNodes.length;i++)
			{
				try
				{
					if(parent.childNodes[i].id && parent.childNodes[i].id==id)
						array[array.length]=parent.childNodes[i];
					var ches=igtbl_dom.find.childrenById(parent.childNodes[i],id);
					if(ches)
						array=array.concat(ches);
				}
				catch(ex){;}
			}
			if(array.length)
				return array;
			return null;
		},
		
		rootNode : function(element)
		{
			if(!element) return;
			while(element.parentNode)
				element = element.parentNode;
			return element;
		}
	},
	
	css :
	{
		getComputedStyle : function(element, property)
		{
			if(typeof(window.getComputedStyle) != "undefined")
				return window.getComputedStyle(element, "")[property];
				
			if(typeof(element.currentStyle) != "undefined")
				return element.currentStyle[property];
				
			return element.style[property];
		},
		
		removeClass : function(element, className)
		{
			element.className = element.className.replace(className, "");
		},
		
		replaceClass : function(element, oldClassName, newClassName)
		{
			igtbl_dom.css.removeClass(element, oldClassName);
			if(element.className.indexOf(newClassName) == -1)
				element.className += " " + newClassName;
		}
	},
	
	dimensions :
	{
		
		bordersWidth : function(element, includePadding)
		{
			var width = 0;
			if(element.offsetWidth && element.clientHeight)
				width += element.offsetWidth - element.clientWidth;
			if(includePadding && (!ig_csom.IsIE || igtbl_isXHTML))
			{
				width += igtbl_number.fromString(igtbl_dom.css.getComputedStyle(element, "paddingLeft"));
				width += igtbl_number.fromString(igtbl_dom.css.getComputedStyle(element, "paddingRight"));
			}
			return width;
		},
		
		
		bordersHeight : function(element, includePadding)
		{
			var height = 0;
			if(element.offsetHeight && element.clientHeight)
				height += element.offsetHeight - element.clientHeight;
			if(includePadding && (!ig_csom.IsIE || igtbl_isXHTML))
			{
				height += igtbl_number.fromString(igtbl_dom.css.getComputedStyle(element, "paddingTop"));
				height += igtbl_number.fromString(igtbl_dom.css.getComputedStyle(element, "paddingBottom"));
			}
			return height;
		}, 
		
		hasPercentageWidth : function(elem)
		{
			var width = igtbl_dom.css.getComputedStyle(elem, "width");
			if(width && width.indexOf("%") > 0) 
				return true;
			
			if(elem.width && elem.width.indexOf("%") > 0) 
				return true;
		},
		
		hasEmptyWidth : function(elem)
		{
			var width = igtbl_dom.css.getComputedStyle(elem, "width");
			if(width == "auto") 
				return true;
			
			return false;
		}
	},
	
	table :
	{
		
		allPercentageColumns : function(elem, startIndex)
		{
			if(!igtbl_dom.isTag(elem, "TABLE"))	return false;
			
			if(startIndex == undefined) startIndex = 0;
			var cols = igtbl_dom.find.childrenByPath(elem, "colgroup/col");
			for(var x=startIndex; x<cols.length; x++)
			{
				var col = cols[x];
				if(igtbl_dom.hasVisibleStyle(col))
				{ 
					
					if(igtbl_dom.dimensions.hasEmptyWidth(col))
						return true;
					if(!igtbl_dom.dimensions.hasPercentageWidth(col))
						return false;
				}
			}
			
			return true;
		}
	}
};

igtbl_stylesheet = 
{
	addRule : function(rule)
	{
		if(typeof(document.styleSheets) != "undefined" && document.styleSheets.length > 0)
		{
			document.styleSheets[0].insertRule(rule, 0);
		}
	}
};

igtbl_event =
{
	getEvent : function(evnt)
	{
	    if(typeof(evnt) != "undefined")
	        return evnt;
	    return event;
	},
	
	addEventListener : function(obj,eventName,fRef,dispatch)
	{
		if(typeof(dispatch)=="undefined")
			dispatch=true;
		if(obj.addEventListener)
			return obj.addEventListener(eventName,fRef,dispatch);
		else
		{
			var oldHandler=obj["on"+eventName];
			eval("obj.on"+eventName+"=fRef;");
			return oldHandler;
		}
	},
	
	removeEventListener : function(obj,eventName,fRef,oldfRef,dispatch)
	{
		if(typeof(dispatch)=="undefined")
			dispatch=true;
		if(obj.removeEventListener)
			return obj.removeEventListener(eventName,fRef,dispatch);
		else
			eval("obj.on"+eventName+"=oldfRef;");
	}
};

igtbl_browser =
{
}

function igtbl_getClipboardData()
{
	if (window.clipboardData) 
	{
		return window.clipboardData.getData("Text");
	}
	else if(ig_shared.IsFireFox || ig_shared.IsNetscape)
	{ 
		netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
		var clip=Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard);
		var trans=Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
		trans.addDataFlavor("text/unicode");
		clip.getData(trans,clip.kGlobalClipboard);
		var str=new Object();
		var len=new Object();
		trans.getTransferData("text/unicode", str, len);
		if(str)
			return str.value.QueryInterface(Components.interfaces.nsISupportsString).toString();
	}
}

function igtbl_setClipboardData(copytext)
{
	if (window.clipboardData) 
	{
		window.clipboardData.setData("Text", copytext);
	}
	else if(ig_shared.IsFireFox || ig_shared.IsNetscape)
	{ 
		netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
		var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
		var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
		trans.addDataFlavor('text/unicode');
		var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
		str.data=copytext;
		trans.setTransferData("text/unicode",str,copytext.length*2);
		var clipid=Components.interfaces.nsIClipboard;
		clip.setData(trans,null,clipid.kGlobalClipboard);
	}
	else
		return false;
	return true;
}

function igtbl_isAChildOfB(a,b){
	if(a==null||b==null)return false;
	while(a!=null){
		if(a==b)return true;
		a=a.parentNode;
	}
	return false;
}

function igtbl_getThisForm(elem)
{
	if(!elem)
		return null;
	var thisForm=elem.parentNode;
	while(thisForm && thisForm.tagName!="FORM")
		thisForm=thisForm.parentNode;
	
	if(!thisForm && document.forms && document.forms.length==1)
		thisForm=document.forms[0];
	return thisForm;
}

function igtbl_addEventListener(obj,eventName,fRef,dispatch)
{
	if(typeof(dispatch)=="undefined")
		dispatch=true;
	if(obj.addEventListener)
		return obj.addEventListener(eventName,fRef,dispatch);
	else
	{
		var oldHandler=obj["on"+eventName];
		eval("obj.on"+eventName+"=fRef;");
		return oldHandler;
	}
}
function igtbl_removeEventListener(obj,eventName,fRef,oldfRef,dispatch)
{
	if(typeof(dispatch)=="undefined")
		dispatch=true;
	if(obj.removeEventListener)
		return obj.removeEventListener(eventName,fRef,dispatch);
	else
		eval("obj.on"+eventName+"=oldfRef;");
}

function igtbl_isVisible(elem)
{
	while(elem && elem.tagName!=(igtbl_isXHTML?"HTML":"BODY"))
	{
		if(elem.style && elem.style.display=="none" || 
			elem.tagName!="FORM" && elem.tagName != "BODY" && !elem.offsetHeight)
			return false;
		elem=elem.parentNode;
	}
	return true;
}

// use igcsom.getElementById wherever is possible 
function igtbl_getElementById(tagId) 
{
	
	if(!document) return;
	
	var obj=ig_csom.getElementById(tagId);
	if(obj && obj.length && typeof(obj.tagName)=="undefined")
	{
		var i=0;
		while(i<obj.length && (obj[i].id!=tagId || !igtbl_isVisible(obj[i]))) i++;
		if(i<obj.length) obj=obj[i];
		else obj=obj[0];
	}
	return obj;
}

function igtbl_getChildElementsById(parent,id)
{
	if(!id || !parent.childNodes || !parent.childNodes.length)
		return null;
	var array=[];
	for(var i=0;i<parent.childNodes.length;i++)
		try
		{
			if(parent.childNodes[i].id && parent.childNodes[i].id==id)
				array[array.length]=parent.childNodes[i];
			var ches=igtbl_getChildElementsById(parent.childNodes[i],id);
			if(ches)
				array=array.concat(ches);
		}
		catch(ex){;}
	if(array.length)
		return array;
	return null;
}

function igtbl_getChildElementById(parent,id)
{
	if(!id || !parent.childNodes || !parent.childNodes.length)
		return null;
	for(var i=0;i<parent.childNodes.length;i++)
		try{
			if(parent.childNodes[i].id && parent.childNodes[i].id==id)
				return parent.childNodes[i];
			var che=igtbl_getChildElementById(parent.childNodes[i],id);
			if(che)
				return che;
		}catch(ex){;}
	return null;
}
igtbl_array = 
{
	
	contains : function(array, element)
	{
		for(var x in array)
		{
			if(array[x] === element)
				return true;
		}
		return false;
	},
	
	
	exclude : function(array, exclude)
	{
		var newArray = [];
		for(var x in array)
		{
			if(!igtbl_array.contains(exclude, array[x]))
				newArray.push(array[x]);
		}
		return newArray;
	},
	
	isList : function(value)
	{
		return value != null &&
			typeof(value) == "object" &&
			typeof(value.length) == "number" &&
			(value.length == 0 || typeof(value[0]) != "undefined");
	},
	
	hasElements : function(array)
	{
		if(!array)
			return false;
		for(element in array)
			if(array[element]!=null)
				return true;
		return false;
	},
	
	getLength : function(obj)
	{
		var count=0;
		for(var item in obj)
			count++;
		return count;
	}
};

function igtbl_arrayHasElements(array)
{
	if(!array)
		return false;
	for(element in array)
		if(array[element]!=null)
			return true;
	return false;
}

function igtbl_getLength(obj)
{
	var count=0;
	for(var item in obj)
		count++;
	return count;
}
igtbl_nav = 
{
	splitUrl : function(url)
	{
		var targetFrame=null;
		if(url.substr(0,1)=="@")
		{
			targetFrame="_blank";
			url=url.substr(1);
			var cb=-1;
			if(url.substr(0,1)=="[" && (cb=url.indexOf("]"))>1)
			{
				targetFrame=url.substr(1,cb-1);
				url=url.substr(cb+1);
			}
		}
		return [url,targetFrame];
	},
	
	navigateUrl : function(url)
	{
		var urls=igtbl_splitUrl(url);
		ig_csom.navigateUrl(urls[0],urls[1]);
		igtbl_dispose(urls);
	}
}

function igtbl_escape(text)
{
	text=escape(text);
	return text.replace(/\+/g,"%2b");
}


function igtbl_splitUrl(url)
{
	var targetFrame=null;
	if(url.substr(0,1)=="@")
	{
		targetFrame="_blank";
		url=url.substr(1);
		var cb=-1;
		if(url.substr(0,1)=="[" && (cb=url.indexOf("]"))>1)
		{
			targetFrame=url.substr(1,cb-1);
			url=url.substr(cb+1);
		}
	}
	return [url,targetFrame];
}

function igtbl_navigateUrl(url)
{
	var urls=igtbl_splitUrl(url);
	ig_csom.navigateUrl(urls[0],urls[1]);
	igtbl_dispose(urls);
}
function igtbl_getLeftPos(e,cc,oe)
{
	return igtbl_getAbsolutePos("Left",e,cc,oe);
}

function igtbl_getTopPos(e,cc,oe) 
{
	return igtbl_getAbsolutePos("Top",e,cc,oe);
}
function igtbl_getAbsolutePos(where,e,cc,oe)
{
    if (ig_csom.IsIE && igtbl_isXHTML && e.getBoundingClientRect)
    {
        switch (where)
        {
            case "Left":
                return igtbl_getAbsBounds(e).x;
            case "Top":
                return igtbl_getAbsBounds(e).y;
        }       
    }
    return igtbl_getAbsolutePos2(where,e,cc,oe);
}
function igtbl_getAbsolutePos2(where,e,cc,oe)
{

	var offs="offset"+where,cl="client"+where,bw="border"+where+"Width",sl="scroll"+where;
    var crd=e[offs];
    if(e[cl] && cc!=false)
		crd+=e[cl];
	if(typeof(oe)=="undefined")
		oe=null;
    var tmpE=e.offsetParent, cSb=true;
    while(tmpE!=null && tmpE!=oe)
    {
		crd+=tmpE[offs];
		if((tmpE.tagName=="DIV" || tmpE.tagName=="TD") && tmpE.style[bw])
		{
			var bwv=parseInt(tmpE.style[bw],10);
			if(!isNaN(bwv))
				crd+=bwv;
		}
		if(cSb && typeof(tmpE[sl])!="undefined")
		{
			var op=tmpE.offsetParent,t=tmpE;
			while(t && t!=op && t.tagName!=(igtbl_isXHTML?"HTML":"BODY"))
			{
				if(t[sl])
					crd-=t[sl];
				t=t.parentNode;
			}
			
		}
		if(tmpE[cl] && cc!=false)
			crd+=tmpE[cl];
        tmpE=tmpE.offsetParent;

		
    }
	if(tmpE && tmpE[cl] && cc!=false)
		crd+=tmpE[cl];
    return crd;
}

function igtbl_getAbsBounds(elem, g, forAbsPos)
{
	var r = new Object();
    if (ig_csom.IsIE && elem.getBoundingClientRect)
    {
        var rect = elem.getBoundingClientRect();
        r.x = rect.left;
        r.y = rect.top;
        r.w = rect.right - rect.left;
        r.h = rect.bottom - rect.top;
    }
    else if (ig_csom.IsFireFox && document.getBoxObjectFor(elem))
    {
        var rect = document.getBoxObjectFor(elem);
        r.x = rect.x;
        r.y = rect.y;
        r.w = rect.width;
        r.h = rect.height;                
	}
	else
	{
		return igtbl_getAbsBounds2(elem,g);
	}
    var tmpE = elem;
    var passedMain = false;
    while (tmpE && tmpE != document.documentElement)
	{
		passedMain |= g != null && tmpE == g.MainGrid;
		if (forAbsPos)
		{
		    
		}
		else
		{
			if (tmpE.scrollLeft)
			{
				r.x += tmpE.scrollLeft;
			}
			if (tmpE.scrollTop)
			{
				r.y += tmpE.scrollTop;
			}
	        
	        
	        if(!igtbl_isXHTML)
			{
			    var left = parseInt(tmpE.style.left);
			    if ( ! isNaN(left) )
			    {
			        if (left < 0)
			            r.x -= left;
			    }
			}
		}
		if (tmpE == elem)
		{
			
			if(typeof(tmpE.currentStyle)!="undefined")
			{
				if(!igtbl_isXHTML)
				{
					var cs=tmpE.currentStyle;
					var bw=0;
					var b=cs.borderLeftWidth.toLowerCase();
					if(b=="thin")
						bw++;
					else if(b=="medium")
						bw+=3;
					else if(b=="thick")
						bw+=5;
					else
						bw+=igtbl_parseInt(b);
					
					
					b=cs.borderRightWidth.toLowerCase();
					if(b=="thin")
						bw++;
					else if(b=="medium")
						bw+=3;
					else if(b=="thick")
						bw+=5;
					else
						bw+=igtbl_parseInt(b);
					r.w-=bw;
					
					bw=0;
					b=cs.borderTopWidth.toLowerCase();
					if(b=="thin")
						bw++;
					else if(b=="medium")
						bw+=3;
					else if(b=="thick")
						bw+=5;
					else
						bw+=igtbl_parseInt(b);
					
					
					b=cs.borderBottomWidth.toLowerCase();
					if(b=="thin")
						bw++;
					else if(b=="medium")
						bw+=3;
					else if(b=="thick")
						bw+=5;
					else
						bw+=igtbl_parseInt(b);
					r.h-=bw;
				}
			}
			else
			{
				if (tmpE.offsetWidth && tmpE.clientWidth)
				{
					var xDiff = tmpE.offsetWidth  - tmpE.clientWidth;
					r.x -= xDiff/2;
					r.w -= xDiff;
				}
				if (tmpE.offsetHeight && tmpE.clientHeight)
				{
					var yDiff = tmpE.offsetHeight - tmpE.clientHeight;
					r.y -= yDiff/2;
					r.h -= yDiff;
				}
			}
		}
		tmpE = tmpE.offsetParent;
    }
    
	if (!igtbl_isXHTML && ig_csom.IsFireFox && forAbsPos && passedMain && g != null) 
	{
		var divElement = g.getDivElement();
		r.x -= divElement.scrollLeft;
		r.y -= divElement.scrollTop;	
	}
    if((tmpE = document.documentElement) && !ig_csom.IsFireFox)    
    {
        
        
        try
        {
			var frameEl=tmpE.document.parentWindow.frameElement;
			
			if (frameEl && (frameEl.tagName=="IFRAME" || frameEl.tagName=="FRAME"))
			{
				var fb=frameEl.getAttribute("frameBorder");
				
				if(   (fb && (fb==="0" || fb.toLowerCase()==="no" ) ) || (fb==="" && frameEl.tagName=="FRAME")  ) 
				{
					r.x+=2;
					r.y+=2;
				}
			}
		}
		catch(exc){;}
        if (tmpE.scrollLeft)
		{
			r.x += tmpE.scrollLeft;
		}
		if (tmpE.scrollTop)
		{
			r.y += tmpE.scrollTop;
		}
		if (!igtbl_isXHTML && (tmpE = document.body))
		{
		    if (tmpE.scrollLeft)
		    {
			    r.x += tmpE.scrollLeft;
		    }
		    if (tmpE.scrollTop)
		    {
			    r.y += tmpE.scrollTop;
		    }
		}
    }
    return r;
}
function igtbl_getAbsBounds2(elem,g)
{
	var ok=0,r=new Object(),body=window.document.body,e=elem;
	var z=e.offsetWidth,pe=e;
	if(z==null||z<2)
		z=70;
	r.w=z;
	z=e.offsetHeight;
	if(z==null||z<2)
		z=18;
	r.h=z;
	r.x=1;
	r.y=1;
	while(e!=null)
	{
		if(ok<1||e==body)
		{
			z=e.offsetLeft;
			if(z)
			{
				r.x+=z;
                
                if(ig_csom.IsIE && !igtbl_isXHTML)
                {
                    var borderWidthX = parseInt(e.currentStyle.borderLeftWidth);
                    if (!isNaN(borderWidthX)&&e.tagName!="TD")
                        r.x+=borderWidthX;
                }
			}	
			z=e.offsetTop;
			if(z)
			{
				r.y+=z;
                
                if(ig_csom.IsIE && !igtbl_isXHTML)
                {
                    var borderWidthY = parseInt(e.currentStyle.borderTopWidth);
                    if (!isNaN(borderWidthY)&&e.tagName!="TD")
                        r.y+=borderWidthY;
                }
            }
		}
		if(e.nodeName=="HTML")
			body=e;
		if(e==body)
			break;
		z=e.scrollLeft;
		if(z==null||z==0)
			z=pe.scrollLeft;
		if(z!=null&&z>0)
			r.x-=z;
		z=e.scrollTop;
		if(z==null||z==0)
			z=pe.scrollTop;
		if(z!=null&&z>0)
			r.y-=z;
		pe=e.parentNode;
		e=e.offsetParent;
		if(pe.tagName=="TR")
			pe=e;
		if(e==body && pe.tagName=="DIV")
		{
			e=pe;
			ok++;
		}
	}
	try
	{
		
		if(!document.elementFromPoint || window.frameElement || body.currentStyle && (body.currentStyle.borderWidth=="0px" || body.currentStyle.borderStyle=="none"))
			return r;
	}
	catch(e)
	{
		return r;
	}			
	var i=1,x=r.x,y=r.y,x0=igtbl_getBodyScrollLeft(),y0=igtbl_getBodyScrollTop();
	while(++i<16)
	{
		z=(i>2)?((i&2)-1)*(i&14)/2*5:2;
		e=document.elementFromPoint(x+z-x0,y+z-y0);
		if(!e || e==elem || e.parentNode==elem || e.parentNode.parentNode==elem)
			break;
	}
	if(i>15||!e)
		return r;
	x+=z;
	y+=z;
	i=0;
	z=0;
	while(++i<22)
	{
		if(z==0)
			x--;
		else
			y--;
		e=document.elementFromPoint(x-x0,y-y0);
		if(!e || i>20)
			return r;
		if(e!=elem && e.parentNode!=elem && e.parentNode.parentNode!=elem)
			if(z>0)
				break;
			else
			{
				i=z=1;
				x++;
			}
	}
	r.x=x-1;
	r.y=y;
	return r;
}

function igtbl_getRelativePos(gn,e,where,ignoreTableBorder)
{
	var g=igtbl_getGridById(gn);
	var mainGrid=igtbl_getElementById(gn+"_main");
	var passedMainGrid=false;
	var offs="offset"+where,bw="border"+where+"Width";
	var ovfl="overflow",ovflC=ovfl+(where=="Left"?"X":"Y");
	var crd=e[offs];
	var parent=e.offsetParent;
	
	if (!parent)
	{
		if(e.tagName=="TD"||e.tagName=="TH")
		{
			parent=e.parentNode;
			while(parent && parent.tagName!="TABLE")
			{
				parent=parent.parentNode;
			}
		}
	}

	while((parent!=null && parent.tagName!=(igtbl_isXHTML?"HTML":"BODY") && (
		
		!passedMainGrid || 
		parent.style.position!="relative" || (parent.style.position=="relative" && parent.id=="G_"+gn))))
	{
		passedMainGrid=passedMainGrid||igtbl_isAChildOfB(mainGrid.parentNode,parent);
		if(passedMainGrid && (parent.style.position=="absolute" || parent.style[ovflC] && parent.style[ovflC]!="visible" || parent.style[ovfl] && parent.style[ovfl]!="visible"))
			break;
		crd+=parent[offs];
		if(	ig_csom.IsIE && 
			(parent.tagName=="DIV" || parent.tagName=="TD" || parent.tagName=="FIELDSET"
			) && 
			parent.style[bw])
		{
			var bwv=parseInt(parent.style[bw],10);
			if(!isNaN(bwv))
				crd+=bwv;
		}
		if(parent==mainGrid)
			passedMainGrid=true;
		parent=parent.offsetParent;
	}
	
	
	
	var deductScroll = true;
	if(where=="Top" && g.StatHeader)
	{
		while (e)
		{
			if(e == g.StatHeader.Element)
			{	
				deductScroll=false;
				break;
			}
			e=e.parentNode;
		}
	}
	if(deductScroll)
	
	crd -= g.Element.offsetParent["scroll"+where]
	return crd;
}

igtbl_regExp = 
{
	
	escape : function(text, exclusions)
	{
		
		if(typeof(text)=="undefined" || text==null) return "";
		
		var characters = ["\\", "^", "$", "*", "+", "?", "!", "-", "=", ":", ",", ".", "|", "(", ")", "{", "}", "[", "]"];
		var includedCharacters = characters;
		if(exclusions)
			includedCharacters = igtbl_array.exclude(characters, exclusions);
			
		for(var x in includedCharacters)
			includedCharacters[x] = "\\" + includedCharacters[x];
		
		return text.replace(new RegExp("(" + includedCharacters.join("|") + ")", "g"), '\\$1');
	}
};

function igtbl_getRegExpSafe(val)
{
	
	if(typeof(val)=="undefined" || val==null)
		return "";
	
	var res=val.toString();
	res=res.replace(/\\/g, "\\\\");
	
	res=res.replace(/\*/g,"\\*");
	res=res.replace(/\$/g,"\\$");
	res=res.replace(/\+/g,"\\+");
	res=res.replace(/\?/g,"\\?");
	res=res.replace(/\,/g,"\\,");
	res=res.replace(/\./g,"\\.");
	res=res.replace(/\:/g,"\\:");
	res=res.replace(/\=/g,"\\=");
	res=res.replace(/\-/g,"\\-");
	res=res.replace(/\!/g,"\\!");
	res=res.replace(/\|/g,"\\|");
	res=res.replace(/\(/g,"\\(");
	res=res.replace(/\)/g,"\\)");
	res=res.replace(/\[/g,"\\[");
	res=res.replace(/\]/g,"\\]");
	res=res.replace(/\{/g,"\\{");
	res=res.replace(/\}/g,"\\}");
	return res;
}
igtbl_xml = 
{
	
	createXmlElement : function(doc, tagName, ns)
	{
		if(typeof(doc.createNode) != "undefined") // IE
			return doc.createNode(1,tagName,ns);
		else if(doc.createElement) // Firefox
			return doc.createElement(tagName);
	},
	
	
	createXmlTextNode : function(doc, ns)
	{
		
		if(typeof(doc.createNode) != "undefined") // IE
			return doc.createNode(4,"",ns);
		else if(doc.createCDATASection)// Firefox 
			return doc.createCDATASection("");
	},
	
	createDocumentFromString : function(xml)
	{
		if(!ig_csom.IsIE)
		{
			var objDOMParser=new DOMParser();
			return objDOMParser.parseFromString(xml,"text/xml");
		}
		else
		{
			var doc = new ActiveXObject("Microsoft.XMLDOM") 
			doc.async="false"; 
			doc.loadXML(xml);
			return doc;
		}
	},
	
		disposeDocument : function(node)
	{
		if(node.parentNode)
			node = igtbl_dom.find.rootNode(node);
		igtbl_xml.disposeNode(node);
	},
	
	disposeNode : function(node)
	{
		while(node.childNodes.length > 0)
			igtbl_xml.disposeNode(node.childNodes[0]);
	   
		if(node.parentNode)
		{
			if(typeof(node.parentNode.removeChild) != "undefined")
				node.parentNode.removeChild(node);
		}
	}
};

if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();