/*
productC.prototype.showRouteSelection = function()
{
        var wndRouteSelection = product.getWindowByName('routeselection');

        if (!wndRouteSelection)
        {
                wndRouteSelection = product.openWindow(
                                                                        { name:                 'routeselection'
                                                                        , title:                'Schoolroutes'
                                                                        , className:    'vizWindowSmall vizDebug'
                                                                        , canclose:             true
                                                                        , content:              ''
                                                                        });
        }

        var container = this.getRouteSelector();
        wndRouteSelection.body.appendChild(container);
}
*/

window.trackhoverid = 0;


function getTrackDirectionName(typeid)
{
        var types = ['','school','huis','?'];
        return types[typeid];
}

//http://www.satyam.com.ar/yui/

productC.prototype.insertRouteSelector = function(pcontainer)
{
        var container = document.createElement('div');
        container.id = 'complex';
        container.className = 'yui-skin-sam yui-dt';
        pcontainer.appendChild(container);

        // todo: check http://www.yuiblog.com/blog/2008/10/27/datatable-260-part-two/
		
        YAHOO.widget.DataTable.prototype.requery = function(newRequest)
        {
                //http://old.nabble.com/reload-a-DataSource-%28DataTable%29-td18314764.html
                //this.getDataSource().sendRequest((newRequest === undefined?this.get('initialRequest'):newRequest), this.onDataReturnInitializeTable, this);

                //http://www.cthrall.com/blog/?p=55
                this.getDataSource().sendRequest('', { success: this.onDataReturnInitializeTable, scope: this });
        };


        var formatTrackDirection = function (elCell, oRecord, oColumn, oData)
        {
                elCell.innerHTML = getTrackDirectionName(oRecord.getData('type')); // FIXME: is this correct? and is there a better/faster way? //oData.type;
        };

        this.trackslist = function()
    {
        var myColumnDefs =
                        [   { key:                      "show"
                            , label:            "toon"
                            , width:            20
                            , resizeable:       false
                            , sortable:         true
                                        , formatter:    "checkbox"
                            }
                        /*
                        ,       { key:                  "id"
                            , label:            "ID"
                            , width:            15
                            , resizeable:       true
                            , sortable:         true
                                        , className:    'col_alignright'
                            }
                            */
						,   { key:                      "type"
                            , label:            "richting"
                            , width:            40
                            , resizeable:       true
                            , sortable:         true
                                        , formatter:    formatTrackDirection
                            }
                                ,
                                        { key:                  "distance"
                                        , label:        "afstand"
                                        , width:            30
                                        , resizeable:   true
                                        , sortable:     true
                                        , children: [
                                                                        { key: "dist_starttoend", label: "hemelsbreed", abbr: "Hemelsbreed", align: "right", className: 'col_alignright' } //Afstand hemelsbreed
                                                                ,       { key: "dist_travelled",  label: "afgelegd",   abbr: "Afgelegd",    align: "right", className:  'col_alignright' } //Afgelegde afstand
                                                                ]
                                        }
                                ,
                                        { key:                  "speed"
                                        , label:        "snelheid"
                                        , width:            30
                                        , resizeable:   true
                                        , sortable:     true
                                        , children: [
                                                                        { key: "speed_max",        label: "max", abbr: "Hemelsbreed", align: "right", className: 'col_alignright' } //Afstand hemelsbreed
                                                                ,       { key: "speed_avg",        label: "avg(geheel)",   abbr: "Afgelegd",    align: "right", className: 'col_alignright' } //Afgelegde afstand
                                                                ,       { key: "speed_moved_avg",  label: "avg",   abbr: "Afgelegd",    align: "right", className: 'col_alignright' } //Afgelegde afstand
                                                                ]
                                        }
                                ,
                                        { key:                  "date"
                            , label:            "Datum"
                            , width:            40
                            , resizeable:       true
                            , sortable:         true
                            //, formatter:      formatPointType
                            }
                                        /*                              ,
                            { key:                      "persoon"
                            , label:            "Leerling"
                            , width:            30
                            , resizeable:       true
                            , sortable:         true
                            }
                                ,
                            { key:                      "stop"
                            , label:            "Aantal stops"
                            , width:            30
                            , resizeable:       true
                            , sortable:         true
                                        , className: 'col_alignright'
                            }*/
                                ];

                // mapmeta.track = cache with all tracks ever loaded
                // mapmeta.tracks_current = last loaded tracklist
        var myDataSource = new YAHOO.util.DataSource(mapmeta.tracks_current);
                global_routedatasource = myDataSource;
        myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSARRAY;
        myDataSource.responseSchema = {
                resultsList:    "items",
                fields:
                        [ { key:        "id"
                          , parser:     "number"
                          }
                        , { key:        "date"
                          }
                        , { key:        "type"
                                  , parser: "integer"
                          }
                                , { key:        "dist_starttoend"
                                  , parser: "float"
                                  }
                                , { key:    "dist_travelled"
                                  , parser: "float"
                                  }
                                , { key:    "speed_max"
                                  , parser: "float"
                                  }
                                , { key:    "speed_avg"
                                  , parser: "float"
                                  }
                                , { key:    "speed_moved_avg"
                                  , parser: "float"
                                  }
                                  /*                    , { key:        "person"
                          , parser: "number"
                          }
                        , { key:        "stops"
                          , parser: "number"
                                  }*/
                        ]
        };

        var myConfigs = {
//            sortedBy:{key:"id",dir:"asc"}
            /*,paginator: new YAHOO.widget.Paginator({
                rowsPerPage: 15,
                template: YAHOO.widget.Paginator.TEMPLATE_ROWS_PER_PAGE,
                rowsPerPageOptions: [10,25,50,100],
                pageLinks: 5
            })*/
            /*,*/draggableColumns:true
        }

        var myDataTable = new YAHOO.widget.DataTable("complex", myColumnDefs, myDataSource, myConfigs);

                global_routetable = myDataTable;

/*
        myDataTable.subscribe("rowClickEvent",
                                                function(oArgs)
                                                {
                                                                var elTarget = oArgs.target;
                                                                var oRecord = this.getRecord(elTarget);
                                                                var trackid = oRecord.getData('id');

                                                                mapmeta.loadTrackWithCallback(trackid, function(track) { mygmap.drawTrack(track); });

                                                                / *
                                                                var elTarget = oArgs.target;
                                                                var oRecord = this.getRecord(elTarget);
                                                                var itemid = oRecord.getData('id');
                                                                //alert("id is:" + oRecord.getData("ID"));

                                                        mygmap.panToItemById(itemid);
                                                        myDataTable.onEventSelectRow(oArgs);

                                                                mapmeta.editItem(itemid);
                                                        * /
                                                });
*/
			myDataTable.subscribe("checkboxClickEvent",
				function(oArgs)
				{
					var elCheckbox = oArgs.target;
					var oRecord = this.getRecord(elCheckbox);
					oRecord.setData("show", elCheckbox.checked);

					var trackid = oRecord.getData('id');

					// force into our data
					//oRecord.setData("show", elCheckbox.checked);

					if (elCheckbox.checked)
					{
						mapmeta.loadTrackWithCallback(trackid
										, function(trackdata)
										{
												mygmap.drawTrack(trackdata);
										});
					}
					else
					{
							//console.log('DISABLE TRACK '+trackid);
							mygmap.disableTrack(trackid);
					}
				});

/*
        myDataTable.subscribe("rowClickEvent",
				function(oArgs)
				{
						var elTarget = oArgs.target;
						var oRecord = this.getRecord(elTarget);
						var trackid = oRecord.getData('id');

						console.log('Clicked on track row for track #'+trackid);

						//mygmap.centerOnTrack(trackid);

						var item = mapmeta.getItemByTypeAndInstance(3, trackid);

						if (item)
						{
								if (!product.trackdialog)
										product.trackdialog = new trackdialog();

								console.log(product.trackdialog);

								product.trackdialog.bindtoitem(item);
						}
						else
								console.warn('Track item not found');
                });
*/

                myDataTable.subscribe("rowMouseoverEvent",
                        function(oArgs)
                        {
                                var elRow = oArgs.target;
                                var trackid = this.getRecord(elRow).getData().id;

                                //alert(GetPropList(oArgs));
                                myDataTable.onEventHighlightRow(oArgs);

                                //product.showTrackSpecs(trackid);
								var item = mygmap.getItemByTrackId(trackid);
								item.instance.setHover(true);

                                // position/center the popup to the left of the active row
                                var rowpos = getOffsetToViewport(oArgs.target); //getBoundingClientRect(oArgs.target);
                                var posx = rowpos.left;// - 25; // + oArgs.target.clientWidth/2;
                                var posy = rowpos.top + oArgs.target.clientHeight/2 - product.sidebar.popup.wnd.getOuterSize().height/2;
                                product.sidebar.popup.setAnchor("topright");
                                product.sidebar.popup.position(posx, posy);
                        });
                myDataTable.subscribe("rowMouseoutEvent",
                        function(oArgs)
                        {
                                myDataTable.onEventUnhighlightRow(oArgs);
                                product.sidebar.popup.hide();

                                var elRow = oArgs.target;
                                var trackid = this.getRecord(elRow).getData().id;
								var item = mygmap.getItemByTrackId(trackid);
								item.instance.setHover(false);
						});

//        myDataTable.subscribe("rowDblClickEvent",function() { alert(1); });
//        myDataTable.subscribe("cellDblclickEvent",myDataTable.onEventShowCellEditor);
//        myDataTable.subscribe("editorBlurEvent", myDataTable.onEventSaveCellEditor);

        return {
            oDS: myDataSource,
            oDT: myDataTable
        };
    }();
//});

        return container;
}



sidebar.prototype.fillroutepanel = function()
{
        if (product.state.loadedroutes)
                return;

        this.loadRouteTable();

        //      if (product.sidebar.loadRouteTable)
//              product.sidebar.loadRouteTable();
        var self = this;
        product.events.mapswitch.subscribe(function(){ self.loadRouteTable(); }, this);
}
sidebar.prototype.loadRouteTable = function()
{
        var self = this;

        if (!mapmeta.mapdataraw.iscityselect)
        {
                var bounds = mapmeta.mapdataraw.bounds;
                //mapmeta.getRoutesList(mapmeta.mapid, function() { self.renderRouteTable(); });
                mapmeta.getRoutesListByBounds(bounds.south, bounds.north, bounds.west, bounds.east, function() { self.renderRouteTable(); });
        }
}
sidebar.prototype.renderRouteTable = function()
{
        //console.log(mapmeta.tracks_current);

        if (typeof global_routetable == 'undefined')
        {
                product.insertRouteSelector(product.panels.routesraw);
        }
        else
        {
                //global_routetable.render();
                var myDataTable = global_routetable;

                console.log('new');

                myDataTable.showTableMessage("Loading...");
        //global_routedatasource = new YAHOO.util.DataSource(mapmeta.tracks_current);

                myDataTable.requery();

                //myDataTable.render();

//              myDataTable.getRecordSet().replace(mapmeta.tracks);  // replaces the data with the newest set
//              myDataTable.paginateRows();  // re-paginates the table
//              myDataTable.showPage(0);  // shows first page
        }
        product.state.loadedroutes = true;
}


function RouteSelection()
{
}
/*
var test = new RouteSelection();
test.selectids([285,287]);
*/
RouteSelection.prototype.selectids = function(ids, newstate)
{
        if (!window.global_routetable)
                return;

        var myDataTable = global_routetable;
        var records = myDataTable.getRecordSet().getRecords();

   for (i=0; i < records.length; i++)
   {
                //var id = myDataTable.getId(i);
                var id = myDataTable.getRecord(i).getData().id;

                for(var tel=0; tel<ids.length; tel++)
                {
                        if (id == ids[tel])
                        {
                                var oRecord = myDataTable.getRecord(i);
                                oRecord.setData("show", newstate?"true":"false");
                        }
                }
        }
        myDataTable.render();
}

RouteSelection.prototype.deselectAll = function()
{
        if (!window.global_routetable)
                return;

        var myDataTable = global_routetable;
        var records = myDataTable.getRecordSet().getRecords();
        for (i=0; i < records.length; i++)
        {
                myDataTable.getRecordSet().updateKey(records[i], "show", "");
        }
        myDataTable.refreshView();
        return false;
}





RouteSelection.prototype.getselectedids = function(ids)
{
        if (!window.global_routetable)
                return [];

        var myDataTable = global_routetable;
        var records = myDataTable.getRecordSet().getRecords();

        var idlist = [];
        for (i=0; i < records.length; i++)
        {
                //var id = myDataTable.getId(i);
                var data = myDataTable.getRecord(i).getData();
                if (data.show)
                        idlist.push(data.id);
        }

        return idlist;
}

/*
function selectAll()  {
        records = dataTable.getRecordSet().getRecords();
   for (i=0; i < records.length; i++) {
        dataTable.getRecordSet().updateKey(records[i], "checked", "true");
    }
   dataTable.refreshView();
   return false;
}

function unselectAll() {
        records = dataTable.getRecordSet().getRecords();
   for (i=0; i < records.length; i++) {
        dataTable.getRecordSet().updateKey(records[i], "checked", "");
   }
   dataTable.refreshView();
   return false;
}
*/



