var tvwGenerated = false;
var selectedTreeNode = null;
YAHOO.namespace("example.container");

var dlgCat = function() {
    var dialog, showLogItems;
    var sList = "";
    var rootid = cats.RootID;
    return {
        init: function() {
        },
        hide: function() {
            //document.getElementById("divCatPop").style.display = "none";
            dialog.hide();
        },
        buildTree: function(key, parent) {
            var node = this.getCatNode(key);
            var o = { label: node.c, id: key };
            var n = new YAHOO.widget.TextNode(o, parent, false);

            n.onLabelClick = function(node) {
                sList = "";
                dlgCat.nodeClick(node);
            }

            if (node.ch != null) {
                for (var x = 0; x < node.ch.length; x++) {
                    this.buildTree(node.ch[x], n);
                }
            }
        },
        BuildTreeView: function() {
            var tree = new YAHOO.widget.TreeView("divCatTree");
            var root = tree.getRoot();
            this.buildTree(rootid, root);
            tree.draw();

            root.children[0].getLabelEl().className = "selectedNode";
            selectedTreeNode = root.children[0];
            root.children[0].expand();
            this.nodeClick(root.children[0]);

            tree.subscribe("clickEvent", function(node) {
                sList = "";
                dlgCat.nodeClick(node.node);
            })

        },
        getCatList: function(id) {
            var sList = "";
            var n = this.getCatNode(id);
            if (n.ch != null) {
                for (var x = 0; x < n.ch.length; x++) {
                    sList += "," + n.ch[x] + this.getCatList(n.ch[x]);
                }
            }
            return sList;
        },
        getCatNode: function(catID) {
            for (var x = 0; x < cats.cats.length; x++) {
                if (cats.cats[x].cid == catID) {
                    return cats.cats[x];
                }
            }
        },
        nodeClick: function(node) {
            var lst = document.getElementById("lstLogItems");

            for (var x = lst.options.length - 1; x >= 0; x--) {
                lst.remove(x);
            }
            if (showLogItems) {
                var sCatList = "," + node.data.id + "," + this.getCatList(node.data.id);
                for (var x = 0; x < loggableItems.LogItems.length; x++) {
                    for (var y = 0; y < loggableItems.LogItems[x].c.length; y++) {
                        if (sCatList.indexOf(',' + loggableItems.LogItems[x].c[y] + ',', 0) > -1) {
                            if (sList.indexOf("," + loggableItems.LogItems[x].i + ",", 0) == -1) {
                                sList += "," + loggableItems.LogItems[x].i + ",";
                                var opt = document.createElement('option');
                                opt.text = loggableItems.LogItems[x].n;
                                opt.value = loggableItems.LogItems[x].i;
                                try {
                                    lst.add(opt, null);
                                }
                                catch (ex) {
                                    lst.add(opt);
                                }
                            }
                        }
                    }
                }
            }
            if (selectedTreeNode != null) selectedTreeNode.getLabelEl().className = "ygtvlabel";
            node.getLabelEl().className = "ygtvlabelSelected";
            selectedTreeNode = node;
        },
        showDialog: function(showfav, showli, evnt, startingrootid) {
            if (startingrootid != null) rootid = startingrootid;
            var selectItem = function() {
                if (showLogItems) {
                    var lst = document.getElementById("lstLogItems");
                    if (lst.selectedIndex > -1) {
                        dialog.hide();
                        evnt(lst.options[lst.selectedIndex].value, lst.options[lst.selectedIndex].text);
                    }
                    else {
                        alert("You must select an log item from the list on the right.");
                    }
                }
                else {
                    dialog.hide();
                    evnt(selectedTreeNode.data.id, selectedTreeNode.data.label);
                }
            }
            showLogItems = showli;
            if (!dialog) { // lazy initialize the dialog and only create it once
                this.BuildTreeView();
                document.getElementById("divCatPop").style.display = "";
                dialog = new YAHOO.widget.Dialog("divCatPop",
													{ width: "550px",
													    fixedcenter: true,
													    draggable: true,
													    visible: false,
													    modal: true,
													    constraintoviewport: true,
													    buttons: [{ text: "Select", handler: selectItem, isDefault: true}]
													});
                dialog.render(document.body);
            }
            document.getElementById('lstLogItems').style.display = "";
            document.getElementById('lblLogItems').style.display = "";
            dialog.show();
            if (!showli) {
                document.getElementById('lstLogItems').style.display = "none";
                document.getElementById('lblLogItems').style.display = "none";
            }
        }
    };
} ();

var dlgLogItem = function(){
    var dialog, gridContext, ln;
    return {
        init : function(){
        },
        hide : function(){
            dialog.hide();
        },
        showDialog : function(line, grid){
            ln = line;
            var selectOk = function(){
                var sError = "";
                //need validation
                ln.LineDescription = document.getElementById("txtNotes").value;
                ln.IsPrivate = document.getElementById("chkPrivate").checked;
                var drp = document.getElementById("drpTDHour");
                var time = drp.options[drp.selectedIndex].text;

                if (time != "") time = time * 60; 

                drp = document.getElementById("drpTDMin");
                if (drp.selectedIndex > 0) time = time + parseInt(drp.options[drp.selectedIndex].text);
                if (time != "") ln.DayTime = time;
                if (time == "") ln.DayTime = -1;
                
                ln.LogLineDetails = [];   //reset
                var curRowDef = getMeasForLogItem(ln.EntryItemID);
                for (var y=0;y<measurements.length;y++){
                    for (var z=0;z<curRowDef.length;z++){
                        if (measurements[y].mid == curRowDef[z]){
                            if (measurements[y].mid == 1){
                                document.getElementById("txtHH").value = trim(document.getElementById("txtHH").value);
                                document.getElementById("txtMM").value = trim(document.getElementById("txtMM").value);
                                document.getElementById("txtSS").value = trim(document.getElementById("txtSS").value);

                                var sValidTime = validDec("txtHH", "hours", true);
                                sValidTime += validDec("txtMM", "minute", true);
                                sValidTime += validDec("txtSS", "seconds", true);
                                if (sValidTime == ""){
                                    var h = document.getElementById("txtHH").value;
                                    var m = document.getElementById("txtMM").value;
                                    var s = document.getElementById("txtSS").value;
                                    if (h!="" || m != "" || s != ""){
                                        if (h=="") h=0;
                                        if (m=="") m=0;
                                        if (s=="") s=0;
                                        var tm = parseInt(h*3600) + parseInt(m*60) + parseInt(s);
                                        var detail = {};
                                        detail.UnitID = 6;
                                        detail.MeasurementID = 1;
                                        detail.EntryValue = tm;
                                        ln.LogLineDetails.push(detail);
                                    }
                                }
                                else{
                                    sError += "The duration you entered is invalid.";
                                }                                    

                            }
                            else{
                                var mid = measurements[y].mid;
                                document.getElementById("t" + mid).value = trim(document.getElementById("t" + mid).value);
                                if (document.getElementById("t" + mid).value != ""){
                                    if (validDec("t" + mid, "", true) == ""){
                                        var detail = {};
                                        detail.MeasurementID = mid;
                                        detail.EntryValue = document.getElementById("t" + mid).value;
                                        var drp = document.getElementById("cbU" + mid);
                                        if (drp != null){
                                            detail.UnitID = drp.options[drp.selectedIndex].value;
                                        }
                                        else{
                                            detail.UnitID = 1;
                                        }
                                        ln.LogLineDetails.push(detail);
                                    }
                                    else{
                                        sError += "The value you entered for " + measurements[y].m + " is invalid.";
                                    }
                                }                            
                            }              
                        }
                    }
                }


                if (sError == ""){
                    grid.saveChanges();
                    dialog.hide();
                }
                else{
                    alert(sError);
                }               
            }
            /*duplicated logic from loggrid.js*/
            var getMeasForLogItem = function(id) {
                for (var x=0;x<loggableItems.LogItems.length;x++){
                    if (loggableItems.LogItems[x].i == id){
                        return loggableItems.LogItems[x].m;
                    }
                }
            }
            function getLogItemName(id){
                for (var x=0;x<loggableItems.LogItems.length;x++){
                    if (loggableItems.LogItems[x].i == id){
                        return loggableItems.LogItems[x].n;
                    }
                }
            }
            function createLabel(t){
                var lbl = document.createElement("label");
                lbl.innerHTML = t;
                return lbl;
            }
            function createTextCell(id, v){
                var txt = document.createElement("input");
                txt.id = id;
                txt.value = v;
                txt.className = "cv";
                return txt;
            }                        

            document.getElementById("txtNotes").value = ln.LineDescription;
            document.getElementById("tdTitle").innerHTML = getLogItemName(ln.EntryItemID);
            document.getElementById("chkPrivate").checked = ln.IsPrivate;
            var tbl = document.createElement("table");
            tbl.setAttribute("cellPadding", "3");
            tbl.setAttribute("cellSpacing", "0");
            var tb = document.createElement("tbody");

            var h, m;
            if (ln.DayTime != "" && ln.DayTime != -1){
                h = parseInt(ln.DayTime/60);
                m = ln.DayTime - (h*60);
            }
            var drp = document.getElementById("drpTDHour");
            if (drp.childNodes.length == 1){
                for (var x=0;x<24;x++){
                    var opt = document.createElement("option");
                    opt.innerHTML = x;
                    drp.appendChild(opt);
                }
                drp = document.getElementById("drpTDMin");
                for (var x=0;x<60;x++){
                    var opt = document.createElement("option");
                    opt.innerHTML = x;
                    drp.appendChild(opt);
                }
            }
            if (h != null){
                drp = document.getElementById("drpTDHour");
                drp.options[h+1].selected = true;
            }
            if (m != null){
                drp = document.getElementById("drpTDMin");
                drp.options[m+1].selected = true;
            }
            
            
            var curRowDef = getMeasForLogItem(ln.EntryItemID);
            for (var y=0;y<measurements.length;y++){
                for (var z=0;z<curRowDef.length;z++){
                    if (measurements[y].mid == curRowDef[z]){
                        var tr = document.createElement("tr");
                        var td = document.createElement("td");
                        td.innerHTML = measurements[y].m;
                        td.className = "FieldLabel";
                        tr.appendChild(td);

                        td  = document.createElement("td");
                        td.className = "nowrap";
                        var detail = null;
                        var sValue = "";
                        for (var i=0;i<ln.LogLineDetails.length;i++){
                            if (ln.LogLineDetails[i].MeasurementID == measurements[y].mid){
                                detail = ln.LogLineDetails[i];
                                sValue = detail.EntryValue;
                                break;
                            }
                        }                        

                        if (measurements[y].mid == 1){
                            var h = "";
                            var m = "";
                            var s = "";

                            if (sValue != ""){
                                h = parseInt(sValue/3600);
                                m = parseInt((sValue - (h * 3600)) / 60);
                                s = sValue-(h*3600)-(m*60);
                            }
                            td.appendChild(createTextCell("txtHH", h));
                            td.appendChild(createLabel("&nbsp;hh&nbsp;"));
                            td.appendChild(createTextCell("txtMM", m));
                            td.appendChild(createLabel("&nbsp;mm&nbsp;"));
                            td.appendChild(createTextCell("txtSS", s));
                            td.appendChild(createLabel("&nbsp;ss"));
                        }
                        else{
                            td.appendChild(createTextCell("t" + measurements[y].mid, sValue));

                            //var unit = "";
                            var uid = 0;
                            var units = measurements[y].units;
                            if (units.length > 0){
                                td.appendChild(createLabel("&nbsp;"));
                                var drp = document.createElement("select");
                                drp.className = "drp";
                                drp.id = "cbU" + measurements[y].mid;
                                for (var j=0;j<units.length;j++){
                                    var opt = document.createElement("option");
                                    opt.value = units[j].uid;
                                    opt.innerHTML = units[j].u;
                                    if (detail != null) if (units[j].uid == detail.UnitID) opt.selected = true;
                                    drp.appendChild(opt);
                                }
                                td.appendChild(drp);
                            }
                        }              
                        tr.appendChild(td);
                        tb.appendChild(tr);
                    }
                }
            }
            tbl.appendChild(tb);

            var div = document.getElementById("divMeasurements")
            if (div.childNodes.length > 0) div.removeChild(div.childNodes[0]);
            div.appendChild(tbl);

            if(!dialog){ // lazy initialize the dialog and only create it once
                document.getElementById("divLogItemPop").style.display = "";
                var w = 650;
                var h = 460;
				dialog = new YAHOO.widget.Dialog("divLogItemPop", 
													{ width : w,
													  fixedcenter : true,
                                                      draggable: true, 
													  visible : false, 
                                                      modal:true,
													  constraintoviewport : true, 
													  buttons : [ { text:"OK", handler:selectOk, isDefault:true } ]
													 } );
				dialog.render(document.body);
            }
            dialog.show();
        }
    };
}();

var calpop = function(){
/*
    var dialog;
    var clickEvent;
    var cal;
    return {
        init : function(){
			var selectDateHandler = function(type,args,obj) {
				var dates = args[0];    
                var date = dates[0];   
                var year = date[0], month = date[1], day = date[2];   
                calpop.setDateField(month + "/" + day + "/" + year);
                calpop.hide();						
			};
		    //YAHOO.namespace("example.calendar");
			cal = new YAHOO.widget.Calendar("cal","cal1Container", {iframe:false}  );
            cal.selectEvent.subscribe(selectDateHandler, cal, true);  
            cal.width = "200";
			cal.render();

			dialog = new YAHOO.widget.Dialog("calpop", 
								{ width : 200,
								  height : 240,
								  fixedcenter : true,
                                  draggable: true, 
								  visible : false, 
                                  modal:true,
								  constraintoviewport : true,
								  zindex:9000
								 } );
			dialog.render(document.body);
            dialog.hide();
            //cal.hide();
            cal.renderEvent.subscribe(function() {
                // Tell Dialog it's contents have changed, Currently used by container for IE6/Safari2 to sync underlay size
                dialog.fireEvent("changeContent");
            });            
        },
        setDateField:function(newDate){
            clickEvent(newDate);
        },
        hide : function(){
            dialog.hide();
        },
        showDialog : function(evnt, dt){
            if (dt != null){
                cal.select(dt);
                var selectedDates = cal.getSelectedDates();   
                if (selectedDates.length > 0) {   
                    var firstDate = selectedDates[0];   
                    cal.cfg.setProperty("pagedate", (firstDate.getMonth()+1) + "/" + firstDate.getFullYear());   
                    cal.render();   
                } 
            }
            clickEvent = evnt;
            //cal.show();
            dialog.show();
        }
    };*/
    var dialog, calendar;
    var clickEvent;

    return {
        init : function(){
			var selectDateHandler = function(type,args,obj) {
				var dates = args[0];    
                var date = dates[0];   
                var year = date[0], month = date[1], day = date[2];   
                calpop.setDateField(month + "/" + day + "/" + year);
                calpop.hide();						
			};
            calendar = new YAHOO.widget.Calendar("cal1Container", {iframe:false});
            calendar.selectEvent.subscribe(selectDateHandler, calendar, true);
            dialog = new YAHOO.widget.Dialog("calpop", {
                fixedcenter:true,
                draggable: true,
                modal:true,
                constraintoviewport:true,            
                width:"250px",  // Sam Skin dialog needs to have a width defined (7*2em + 2*1em = 16em).
                close:true
            });

            calendar.render();
            dialog.render();

            // Using dialog.hide() instead of visible:false is a workaround for an IE6/7 container known issue with border-collapse:collapse.
            dialog.hide();

            calendar.renderEvent.subscribe(function() {
                // Tell Dialog it's contents have changed, Currently used by container for IE6/Safari2 to sync underlay size
                dialog.fireEvent("changeContent");
            });
        },
        setDateField:function(newDate){
            clickEvent(newDate);
        },
        hide : function(){
            dialog.hide();
        },
        showDialog : function(evnt, dt){
            clickEvent = evnt;
            if (dt != null && dt != ''){
                calendar.select(dt);
                var selectedDates = calendar.getSelectedDates();   
                if (selectedDates.length > 0) {   
                    var firstDate = selectedDates[0];   
                    calendar.cfg.setProperty("pagedate", (firstDate.getMonth()+1) + "/" + firstDate.getFullYear());   
                    calendar.render();   
                } 
            }
            dialog.show();
        }
    };        



}();


