/*
	Copyright (C) 2008 - Juan Ferrer Toribio

	This program is free software; you can redistribute it and/or
	modify it under the terms of the GNU Lesser General Public
	License as published by the Free Software Foundation; either
	version 2.1 of the License, or (at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
	Lesser General Public License for more details.

	You should have received a copy of the GNU Lesser General Public
	License along with this program; if not, write to the Free
	Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
	02111-1307 USA.
*/

var VnPanel = new Class
({
	Extends: VnModule,

	activate: function ()
	{
		var n;
		var h;
		var div;
		var entry;
		var renderer;
		var rendSpin;
		var rendDate;
		var rendDateAbr;
		var tv;
		var stmt;
		var model;
		var db = this.db;
		var table;
		var tbody;
		var foot;
		var tr;
		var td;
		var vbox;
		var frame;
		var box;
		var label;
		var fromDate;
		var toDate;
		
		vbox = new HtkVBox ();
		this.setChild (vbox);

		box = new HtkScroll ();
		box.setSize (200, -1);
		vbox.add (box, false);
		
		renderer = new HtkCellRendererText ();
		rendSpin = new HtkCellRendererSpin ();
		rendDate = new HtkCellRendererDate ();
		rendDate.format = DATE_FORMAT_FULL_TIME;

		n = -1;
		tv = new HtkTreeView ();
		tv.appendColumn (++n, rendSpin, TEXT_Id);
		tv.appendColumn (++n, renderer, TEXT_User);
		tv.appendColumn (++n, renderer, TEXT_Name);
		tv.appendColumn (++n, rendDate, TEXT_Login);
		tv.appendColumn (++n, rendDate, TEXT_LastAct);
		tv.appendColumn (++n, renderer, TEXT_SO);
		tv.appendColumn (++n, renderer, TEXT_Browser);
		tv.appendColumn (++n, renderer, TEXT_Version);
		box.setChild (tv);
		
		stmt = new SqlString (
			'SELECT s.id, u.name, c.Cliente, v.date_time, s.date_time, v.platform, v.browser, v.version ' +
				'FROM user_session s ' + 
				'LEFT JOIN user u ON s.user_id = u.id ' +
				'LEFT JOIN visit v ON s.visit_id = v.id ' +
				'LEFT JOIN vn2008.Clientes c ON s.user_id = c.Id_cliente ' +
					'ORDER BY s.date_time DESC'
		);

		model = new DbModel (db);
		model.setFlag (DB_MODEL_FLAG_AI, 'id');	// Trash
		model.setView ('s', 'user_session');	// End
		model.setStmt (stmt);
		model.setUpdatable ('user_session');
		tv.setModel (model);
		
		frame = new HtkFrame (TEXT_Visits);
		frame.setSize (80, -1);
		vbox.add (frame, false);

		table = document.createElement ('table');
		table.cellSpacing = 8;
		frame.setChild (table);

		tbody = document.createElement ('tbody');
		table.appendChild (tbody);

		tr = document.createElement ('tr');
		tbody.appendChild (tr);
		
		td = document.createElement ('td');
		td.style.textAlign = 'right';
		td.style.width = '200px';
		tr.appendChild (td);

		label = document.createElement ('label');
		label.appendChild (document.createTextNode (TEXT_SelectDate + ':'));
		td.appendChild (label);

		td = document.createElement ('td');
		td.style.width = '160px';
		tr.appendChild (td);

		fromDate = new HtkDate ();
		fromDate.format = DATE_FORMAT_ABR_DATE;
		fromDate.setEditable (true);
		td.appendChild (fromDate.getNode ());

		td = document.createElement ('td');
		td.style.textAlign = 'right';
		tr.appendChild (td);

		label = document.createElement ('label');
		label.appendChild (document.createTextNode (TEXT_Until + ':'));
		td.appendChild (label);

		td = document.createElement ('td');
		tr.appendChild (td);

		toDate = new HtkDate ();
		toDate.format = DATE_FORMAT_ABR_DATE;
		toDate.setEditable (true);
		toDate.setValue (new Date ());
		td.appendChild (toDate.getNode ());
		
		rendDateAbr = new HtkCellRendererDate ();
		rendDateAbr.format = DATE_FORMAT_ABR_DATE_TIME;

		box = new HtkScroll ();
		vbox.add (box, true);

		n = -1;
		tv = new HtkTreeView ();
		tv.appendColumn (++n, renderer, TEXT_Platform);
		tv.appendColumn (++n, renderer, TEXT_Browser);
		tv.appendColumn (++n, renderer, TEXT_Version);
		tv.appendColumn (++n, rendDateAbr, TEXT_LastVisit);
		tv.appendColumn (++n, rendSpin, TEXT_Visits);
		box.setChild (tv);
		
		stmt = new SqlString (
			'SELECT platform, browser, version, MAX(date_time), COUNT(*) FROM visit ' + 
				"WHERE date_time BETWEEN %s AND TIMESTAMP(%s,'23:59:59') " +
				'GROUP BY platform, browser, version'
		);
		stmt.addParam (fromDate);
		stmt.addParam (toDate);
		
		model = new DbModel (db);
		model.setStmt (stmt);
		tv.setModel (model);	

		foot = document.createElement ('tr');
		tv.setFoot (foot);

		td = document.createElement ('td');
		td.colSpan = n;
		td.style.textAlign = 'right';
		td.appendChild (document.createTextNode (TEXT_VisitsTotal + ':'));
		foot.appendChild (td);

		td = document.createElement ('td');
		td.style.textAlign = 'right';
		td.style.paddingRight = '8px';
		foot.appendChild (td);

		entry = new VnPanelTotal ();
		model.addForeach (entry);
		td.appendChild (entry.getNode ());
	}
});

var VnPanelTotal = new Class
({
	Extends: HtkSpin,
	Implements: DbModelForeach,
	
	initialize: function ()
	{
		return obj = this.parent ();
	},

	post: function (row)
	{
		this.subtotal += row[4];
	},
	
	init: function ()
	{
		this.subtotal = 0;
	},
	
	done: function ()
	{
		this.setValue (this.subtotal);
	}
});


