﻿// Copyright (c) 2010 Graphic Vision NeuroInformatics, Inc.
// Version 3.00

Masada_300.Grid = function(config)
{
    var This = this;
    var Container = $$('div');
    Container.style.display = 'block';

    var RecordKey = "Id";
    var WhereRow = null;
    var EventHandler = null;
    var Columns = [];
    var PanelDiv = null;
    var GridBody = null;
    var WaitImage = null;
    this.Height = null;
    var GridWidth = 0;
    var XsltDoc = null;
    var HeadingText = "helo";
    this.Grid = $$('div');
    this.Grid.rules = 'all';
    this.Grid.style.overflow = 'auto';

    var Column = function()
    {
        this.ControlType = null;
        this.DataType = null;
        this.Title = null;
        this.Width = 0;
        this.TextAlign = null;
        this.FieldName = null;
        this.OnClick = null;
        this.OnMouseOver = null;
        this.OnMouseOut = null;
        this.BackgroundColor = null;
    }

    var AddColumn = function(controlType, dataType, title, width, textAlign, fieldName)
    {
        var Col = new Column();
        Col.ControlType = controlType;
        Col.DataType = dataType;
        Col.Title = title;
        Col.Width = width;
        Col.TextAlign = textAlign;
        Col.FieldName = fieldName;
        Columns.push(Col);
        return Col;
    }

    //var GridWidth = config.getAttribute('Width');
    var GridHeight = config.getAttribute('Height');
    var GridStyle = config.getAttribute('Style');

    var Styles = config.selectSingleNode('Styles');



    //    var HeaderyStyle = new Masada_300.Style(Styles.selectSingleNode("Style[@Class='Header']"));
    //    var MouseOverCellStyle = new Masada_300.Style(Styles.selectSingleNode("Style[@Class='MouseOverCell']"));
    //    var MouseOutCellStyle = new Masada_300.Style(Styles.selectSingleNode("Style[@Class='MouseOutCell']"));
    //    var TableStyle = new Masada_300.Style(Styles.selectSingleNode("Style[@Class='Table']"));
    //    var SelectedDayStyle = new Masada_300.Style(Styles.selectSingleNode("Style[@Class='SelectedDay']"));

    var ColumnsNode = config.selectSingleNode("Columns");
    var ColumnNodes = ColumnsNode.selectNodes("Column");
    for (var i = 0; i < ColumnNodes.length; i++)
    {

        var Id = ColumnNodes[i].attributes.getNamedItem('Id').value;
        var CellType = ColumnNodes[i].attributes.getNamedItem('CellType').value;
        var Width = parseInt(ColumnNodes[i].attributes.getNamedItem('Width').value);
        var Height = ColumnNodes[i].attributes.getNamedItem('Height').value;
        var DataType = ColumnNodes[i].attributes.getNamedItem('DataType').value;
        var Title = ColumnNodes[i].attributes.getNamedItem('Title').value;
        var BindTo = ColumnNodes[i].attributes.getNamedItem('BindTo').value;
        var Style = ColumnNodes[i].attributes.getNamedItem('Style').value;
        AddColumn(CellType, DataType, Title, Width, 'center', BindTo);
    }

    //varguments s = "<Coloumn Id='' Type='Button' Width='120' Height='120' Title='Something' BindTo='' Style='' />" +



    var AddHeader = function(headingText)
    {
        HeadingText = headingText;
    }

    this.Init = function()
    {
        GridWidth = 0;
        for (var i = 0; i < Columns.length; i++)
        {
            GridWidth += (Columns[i].Width + 6);
        }
        WaitImage = $$('img');
        WaitImage.style.visibility = 'hidden';
        Container.appendChild(WaitImage);
        WaitImage.src = "/Images/wait.gif";
        WaitImage.style.position = 'absolute';
        if (This.Height) WaitImage.style.top = This.Height / 2 + 'px';
        WaitImage.style.left = GridWidth / 2 + 'px';

        if (HeadingText)
        {
            var TitleBlock = $$('h1');
            TitleBlock.style.backgroundColor = '#604000';
            Container.appendChild(TitleBlock);
            TitleBlock.style.color = 'white';
            TitleBlock.style.fontSize = '12pt';
            TitleBlock.style.fontWeight = 'bold';
            TitleBlock.innerHTML = '&nbsp;' + HeadingText;
        }

        var HeaderDiv = $$('div');
        Container.appendChild(HeaderDiv);
        var HdrTbl = Container.appendChild($$('table'));
        HeaderDiv.appendChild(HdrTbl);
        HdrTbl.rules = 'all';
        HdrTbl.style.width = GridWidth + 'px';
        var HdrBody = HdrTbl.appendChild($$('tbody'));
        var row = HdrBody.appendChild($$('tr'));
        for (var i = 0; i < Columns.length; i++)
        {
            var Col = Columns[i];
            cell = row.appendChild($$('td'));
            cell.style.textAlign = Col.TextAlign;
            if (i == 0) cell.width = Col.Width + 2 + 'px';
            else
                cell.width = Col.Width - 3 + 'px';
            cell.innerHTML = Columns[i].Title;
        }
        cell = row.appendChild($$('td'));
        cell.width = '8px';

        if (This.Height) This.Grid.style.height = This.Height + 'px';
        This.Grid.style.width = GridWidth + 'px';
        Container.appendChild(This.Grid);

        var GridTbl = $$('table');
        GridTbl.rules = 'all';
        GridTbl.style.borderCollapse = 'collapse';
        This.Grid.appendChild(GridTbl);
        GridBody = GridTbl.appendChild($$('tbody'));
        GridBody.This = This;
    }

    this.Load = function(xmlDoc)
    {
        var rtn = new XmlSet(xmlDoc);
        for (var rowNbr = 0; rowNbr < rtn.RowCount; rowNbr++)
        {
            var row = GridBody.appendChild($$('tr'));
            row.Nbr = rowNbr;
            for (var colNbr = 0; colNbr < Columns.length; colNbr++)
            {
                var Col = Columns[colNbr];
                var cell = row.appendChild($$('td'));
                if (Col.ControlType == 'Btn')
                {
                    var btn = document.createElement("input");
                    btn.type = "button";
                    btn.name = 'SelectBtn';
                    btn.style.width = Col.Width + 'px';
                    btn.style.height = '18px';
                    btn.style.font = 'bold 8pt Arial';
                    btn.style.verticalAlign = 'top';
                    btn.value = rtn.GetValue(rowNbr, RecordKey);
                    if (Col.OnClick != null) btn.onclick = Col.OnClick;
                    cell.appendChild(btn);
                }
                if (Col.ControlType == 'Tbx')
                {
                    var div = document.createElement("div");
                    div.style.whiteSpace = "nowrap";
                    div.style.overflow = 'hidden';
                    div.style.width = Col.Width + 'px';
                    div.style.padding = '0px';
                    div.style.textAlign = Col.TextAlign;
                    cell.appendChild(div);
                    div.innerHTML = rtn.GetValue(rowNbr, Col.FieldName);
                }
                if (Col.ControlType == 'Txt')
                {
                    var div = document.createElement("div");
                    div.style.whiteSpace = "nowrap";
                    div.style.overflow = 'hidden';
                    div.style.width = Col.Width + 'px';
                    div.style.padding = '0px';
                    div.style.textAlign = Col.TextAlign;
                    cell.appendChild(div);
                    var Value = rtn.GetValue(rowNbr, Col.FieldName);
                    if (Col.DataType == 'Date') div.innerHTML = ExtractDate(Value);
                    else div.innerHTML = Value;
                    if (Col.OnClick) div.onclick = Col.OnClick;
                    if (Col.OnMouseOver) div.onmouseover = Col.OnMouseOver;
                    if (Col.OnMouseOut) div.onmouseout = Col.OnMouseOut;
                    if (Col.BackgroundColor) div.style.backgroundColor = Col.BackgroundColor;
                }
            }
        }
        WaitImage.style.visibility = 'hidden';
    }

    var XmlSet = function(doc)
    {
        var This = this;
        var d = document;
        var EventHandler = null;
        if (XsltDoc)
        {
            this.Root = new Masada_300.XmlDom(Transform(doc)).Document.documentElement;
        }
        else this.Root = doc.documentElement;

        var Rows = this.Root.selectSingleNode("Rows");
        this.RowCount = 1;  //Rows.attributes.getNamedItem('Count').value;
        var Fields = Rows.selectSingleNode("Row[@RowNbr='" + '0' + "']/Fields");

        var SetValue = function(Name, Value)
        {
            var FieldNode = Fields.selectSingleNode("Field[@Id='" + Name + "']");
            if (FieldNode.text != Value)
            {
                FieldNode.text = Value;
                FieldNode.attributes.getNamedItem('IsDirty').value = "True";
            }
        }

        var GetValue = function(arg1, arg2)
        {
            var RowNbr = '0';
            var Name = null;
            if (arguments.length == 1)
            {
                Name = arg1;
            }
            else
            {
                RowNbr = arg1;
                Name = arg2;
            }
            if (this.RowCount < parseInt(RowNbr)) alert("rowcount error");
            Fields = Rows.selectSingleNode("Row[@RowNbr='" + RowNbr + "']/Fields");
            alert(Name);
            return Fields.selectSingleNode("Field[@Id='" + Name + "']").text;
        }


        this.SetValue = SetValue;
        this.GetValue = GetValue;
    }

    this.SetTransform = function(xsltDoc)
    {
        XsltDoc = xsltDoc
    }

    var Transform = function(xmlDoc)
    {
        if (window.ActiveXObject)
        {
            var x = xmlDoc.transformNode(XsltDoc);
            return x;
        }
        else if (document.implementation && document.implementation.createDocument)
        {
            try
            {
            var xsltProcessor = new XSLTProcessor();
            alert('yes' +xsltProcessor);
            xsltProcessor.importStylesheet(XsltDoc);
            alert(xsltProcessor.transformToDocument(xmlDoc))
            return xsltProcessor.transformToDocument(xmlDoc).text;
            }
            catch(e)
            {
            alert("there's a problem houstin");
            }
        }
    }

    this.BindTo = function(parent)
    {
        parent.appendChild(Container);
        Container.style.display = 'block';
        return This;
    }

    this.AddColumn = AddColumn;
}

