﻿Type.registerNamespace('MattBerseth.WebControls.AJAX.GridViewControl');

MattBerseth.WebControls.AJAX.GridViewControl.GridViewControlBehavior = function(element) {
    MattBerseth.WebControls.AJAX.GridViewControl.GridViewControlBehavior.initializeBase(this, [element]);

    //  Properties
    this._rowHoverCssClass = null;
    this._rowSelectCssClass = null;
    
    //  Class names for the datarows
    this._dataRowCssClass;
    this._alternateDataRowCssClass;

    //  Variables
    this._rows = null;
}

MattBerseth.WebControls.AJAX.GridViewControl.GridViewControlBehavior.prototype = {

    initialize : function() {
        MattBerseth.WebControls.AJAX.GridViewControl.GridViewControlBehavior.callBaseMethod(this, 'initialize');
        
        // get the elements
        this._rows = this.get_element().getElementsByTagName("tr");
        //  add the css class to the row
        var rowHoverCssClass = this.get_RowHoverCssClass();
        var rowSelectCssClass = this.get_RowSelectCssClass();

        // attach our event handlers to all non pager cells
        for(var i = 0; i < this._rows.length; i++) {
            //  get the row
            var row = this._rows[i];
            if(this._isDataRow(row)) {
                
                if(rowHoverCssClass) {
                    //  create the callbacks
                    var rowOver = Function.createCallback(this._onRowOver, {row: row, behavior: this});
                    var rowOut = Function.createCallback(this._onRowOut, {row: row, behavior: this});
                    //  attach to the mouseover and mouseout events
                    $addHandler(row, 'mouseover', rowOver);
                    $addHandler(row, 'mouseout', rowOut);
                }
                
                if(rowSelectCssClass) {
                    //  create the callback
                    var rowClick = Function.createCallback(this._onRowClick, {row: row, behavior: this});
                    //  attach to the click events
                    $addHandler(row, 'click', rowClick);
                }                
            }
        }
    },

    dispose : function() {
        // remove our event handlers from all data rows
        for(var i = 0; i < this._rows.length; i++) {
            //  get the row
            var row = this._rows[i];
            if(this._isDataRow(row)) {
                //  remove our handler
                $clearHandlers(row);
            }
        }

        MattBerseth.WebControls.AJAX.GridViewControl.GridViewControlBehavior.callBaseMethod(this, 'dispose');
    },

    _isDataRow : function(tr) {
        var dataRowClass = this.get_DataRowCssClass();
        var altDataRowClass = this.get_AlternateDataRowCssClass();
    
        return (dataRowClass && Sys.UI.DomElement.containsCssClass(tr, dataRowClass)) || (altDataRowClass && Sys.UI.DomElement.containsCssClass(tr, altDataRowClass));
    },
    
    _onRowOver : function(e, args) {
        Sys.UI.DomElement.addCssClass(args.row, args.behavior.get_RowHoverCssClass());
    },
    
    _onRowOut : function(e, args) {
        Sys.UI.DomElement.removeCssClass(args.row, args.behavior.get_RowHoverCssClass());
    }, 
    
    _onRowClick : function(e, args) {
        //  unselect the cells
        for(var i = 0; i < args.behavior._rows.length; i++) {
            if(args.behavior._isDataRow(args.behavior._rows[i])) {
                Sys.UI.DomElement.removeCssClass(args.behavior._rows[i], args.behavior.get_RowSelectCssClass());
            }
        }    
        
        Sys.UI.DomElement.addCssClass(args.row, args.behavior.get_RowSelectCssClass());
    },        

    get_RowHoverCssClass : function() {
        return this._rowHoverCssClass;
    },

    set_RowHoverCssClass : function(value) {
        this._rowHoverCssClass = value;
    },
    
    get_RowSelectCssClass : function() {
        return this._rowSelectCssClass;
    },

    set_RowSelectCssClass : function(value) {
        this._rowSelectCssClass = value;
    },    
    
    get_DataRowCssClass : function() {
        return this._dataRowCssClass;
    },

    set_DataRowCssClass : function(value) {
        this._dataRowCssClass = value;
    },
    
    get_AlternateDataRowCssClass : function() {
        return this._alternateDataRowCssClass;
    },

    set_AlternateDataRowCssClass : function(value) {
        this._alternateDataRowCssClass = value;
    }
}

MattBerseth.WebControls.AJAX.GridViewControl.GridViewControlBehavior.registerClass('MattBerseth.WebControls.AJAX.GridViewControl.GridViewControlBehavior', AjaxControlToolkit.BehaviorBase);
if(typeof(Sys)!=='undefined')Sys.Application.notifyScriptLoaded();