/*
	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.
*/

n = 8;
var VN_CATALOG_COL_PRICE	= ++n;
var VN_CATALOG_COL_FIXED	= ++n;
var VN_CATALOG_COL_AMOUNT	= n += 2;
var VN_CATALOG_COL_ITEM		= ++n;

var VnCatalog = new Class
({
	Extends: VnModule

	,activate: function (data)
	{
		var n;
		var table;
		var treeview;
		var tr;
		var maintd;
		var renderer;
		var rendImage;
		var rendPrice;
		var rendSpin;
		var entry;
		var modelArt;
		var order;
		var model;
		var date;
		var wh;
		var tbody;
		var td;
		var button;
		var img;
		var title;
		var text;
		var bbox;
		var label;
		var sql;
		var stmt;
		var stmtType;
		var stmtItem;
		var gui = this.gui;
		var db = this.db;
		var hbox;
		var vbox;
		var box;
		var frame;
		var div;
		var foot;
		var op = new SqlGroup (SQL_OPERATION_AND);

		order = gui.getData (VnOrders);

		hbox = new HtkHBox ();
		this.setChild (hbox);

		renderer = new HtkCellRendererText ();
		rendImage = new HtkCellRendererImage ();
		rendImage.editable = true;
		rendImage.showFull = true;
		rendImage.url = 'catalog';
		rendSpin = new HtkCellRendererSpin ();
		rendPrice= new HtkCellRendererSpin ();
		rendPrice.unit = '€';
		rendPrice.digits = 2;

		n = -1;
		treeview = new HtkTreeView ();
		treeview.emptyMsg = TEXT_SelectFamily;
		treeview.tr.style.height = '37px';
		treeview.appendColumn (++n, rendImage, '');
		treeview.appendColumn (++n, rendSpin, TEXT_Aval);
		treeview.appendColumn (++n, renderer, TEXT_Name);
		treeview.appendColumn (++n, renderer, TEXT_Siz);
		treeview.appendColumn (++n, rendSpin, TEXT_Stems);
		treeview.appendColumn (++n, renderer, TEXT_Color);
		treeview.appendColumn (++n, renderer, TEXT_Cat);
		treeview.appendColumn (++n, renderer, TEXT_Pack);
		treeview.appendColumn (++n, renderer, TEXT_Origin);
		treeview.appendColumnWithFunc (this.priceRenderer, rendPrice, TEXT_Price);
		hbox.add (treeview, true);

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

		td = document.createElement ('td');
		td.colSpan = n + 4;
		td.appendChild (document.createTextNode ('* ' + TEXT_FixedPrices));
		foot.appendChild (td);

		modelArt = new DbModel (db);
		modelArt.setFlag (DB_MODEL_FLAG_AI, 'id');			// Trash
		modelArt.setFlag (DB_MODEL_FLAG_AI, 'Id_Article');	
		modelArt.setView ('m', 'order_row_view');
		modelArt.setView ('a', 'Articles', 'vn2008');		// End
		modelArt.setUpdatable ('order_row_view');

		stmt = new SqlString (
			'SELECT Foto, available, Article, Medida, Tallos, Color, ' +
			'Categoria, Grouping, o.Abreviatura, price, fixed, m.id, ' +
			'm.amount, Id_Article ' +
				'FROM vn2008.Articles a ' +
				'INNER JOIN vn_cache i ON i.item_id = a.Id_Article ' +
				'LEFT JOIN vn2008.Origen o ON a.id_origen = o.id ' +
				'LEFT JOIN order_row_view m ' + 
					'ON m.item_id = a.Id_Article AND m.order_id = %s ' +
					'WHERE %s AND available > 0 AND cache_id = @cid ' +
					'ORDER BY Article, Medida'
		);
		modelArt.setStmt (stmt);
		stmt.addValue ((order != null) ? order : 0);
		stmt.addExpr (op);

		stmtItem = new SqlString ("CALL vn2008.item_cache (@cid, 'a', %s, %s)");
		modelArt.addPreStmt (stmtItem);

// Right

		vbox = new HtkVBox ();
		hbox.add (vbox, false);
		
		model = new DbModel (db);
		model.setSql ('SELECT * FROM vn2008.reinos WHERE orden < 4 ORDER BY Reino');
		
		entry = new HtkFamily (model);
		vbox.add (entry, false);

		frame = new HtkFrame ();
		vbox.add (frame, true);
		
		stmtType = new SqlString (
			'SELECT Id_Tipo, Tipo FROM vn2008.Tipos ' +
				'WHERE reino_id = %s AND Orden > 0 ORDER BY Tipo'
		);
		stmtType.addParam (entry);
		
		model = new DbModel (db);
		model.setStmt (stmtType);

		entry = new HtkSelect (model);
		entry.node.size = 2;
		entry.setBorder	(6);
		entry.setSize (-1, 200);
		frame.setChild (entry);
		op.addEqual (entry, 'Tipo');

		frame = new HtkFrame ();
		frame.setSize (102, -1);
		vbox.add (frame, false);

		table = document.createElement ('table');
		table.cellSpacing = '6px';
		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';
		tr.appendChild (td);
		
		label = document.createElement ('label');
		label.appendChild (document.createTextNode (TEXT_Search + ':'));
		td.appendChild (label);

		td = document.createElement ('td');
		tr.appendChild (td);
		
		entry = new HtkText ();
		entry.style.width = '90px';
		td.appendChild (entry.getNode ());
		op.addLike (entry, 'Article');

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

		td = document.createElement ('td');
		td.style.textAlign = 'right';
		tr.appendChild (td);
		
		label = document.createElement ('label');
		label.appendChild (document.createTextNode (TEXT_Warehouse + ':'));
		td.appendChild (label);

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

		model = new DbModel (db);
		model.setSql ('SELECT id, name FROM vn2008.warehouse WHERE fuente = FALSE ORDER BY name');

		wh = new HtkSelect (model);
		wh.style.maxWidth = '100px';
		td.appendChild (wh.getNode ());

/*		tr = document.createElement ('tr');
		tbody.appendChild (tr);

		td = document.createElement ('td');
		td.style.textAlign = 'right';
		tr.appendChild (td);
	
		label = document.createElement ('label');
		label.appendChild (document.createTextNode (TEXT_Date + ':'));
		td.appendChild (label);

		td = document.createElement ('td');
		tr.appendChild (td);
*/
		date = new HtkDate ();
		date.format = DATE_FORMAT_ABR_DATE;
//		td.appendChild (date.getNode ());

		tr = document.createElement ('tr');
		tbody.appendChild (tr);
		
		bbox = document.createElement ('td');
		bbox.style.textAlign = 'center';
		bbox.colSpan = 2;
		tr.appendChild (bbox);

		entry = new HtkCalendar ();
		vbox.add (entry);

// Logic

		if (order != null)
		{	
			var sql;
			var model;
			var form;
			var param;

			renderer = new HtkCellRendererSpin ();
			renderer.style.width = '35px';
			renderer.editable = true;
			treeview.insertColumn (1, VN_CATALOG_COL_AMOUNT, renderer, TEXT_Amount);

			modelArt.addLeft ('item_id', VN_CATALOG_COL_ITEM);
			modelArt.linkParam ('order_id', order);

			button = new VnOrdersButtonEdit (gui);
			button.style.marginRight = '6px';
			bbox.appendChild (button.getNode ());

			button = new VnOrdersButtonConfirm (gui, order);
			button.getNode ().appendChild (document.createTextNode (TEXT_Confirm));
			bbox.appendChild (button.getNode ());
		
			sql = new SqlString ('SELECT date_send, id, wh_id FROM order_view WHERE id = %s');
			sql.addValue (order);

			model = new DbModel (this.db);
			model.setStmt (sql);
			model.setUpdatable ('order_view');

			form = new DbForm (model);
			form.setRow (0);

			param = form.getParam (2);
			param.bindParam (wh);
			stmtItem.addParam (param);

			param = form.getParam (0);
			param.bindParam (entry);
			param.bindParam (date);
			stmtItem.addParam (param);
		}
		else
		{
			button = new VnOrdersButtonInit (gui);
			bbox.appendChild (button.getNode ());
		
			wh.setValue (1);
			stmtItem.addParam (wh);

			entry.setValue (new Date ());
			entry.bindParam (date);
			stmtItem.addParam (entry);
		}

		treeview.setModel (modelArt);
	}

	,priceRenderer: function (renderer, row)
	{
		renderer.style.color = (row[VN_CATALOG_COL_FIXED]) ? 'green' : 'red';
		renderer.value = row[VN_CATALOG_COL_PRICE];
	}
});

var HtkFamily = new Class
({
	Extends: HtkFrame,
	Implements: SqlParam

	,initialize: function (model)
	{
		var div;
		var legend;
		
		this.parent (TEXT_Family);
		this.setSize (80, -1);
		
		div = document.createElement ('div');
		div.style.height = '45px';
		div.style.textAlign = 'center';
		div.style.marginTop = '6px';
		this.setChild (div);

		this.div = div;
		this.model = model;
		this.heig = '32px';

		model.addSignal ('status-changed', this.modelRefresh, this);	
		this.modelRefresh (model, model.status);
	}

	,modelRefresh: function (model, status)
	{
		var div = this.div;
	
		removeChilds (div);

		if (status == DB_MODEL_STATUS_READY)
		{
			var img;
			var row;
			var data = model.data;
			
			for (var n = 0; n < data.length; n++)
			{
				row = data[n];
			
				img = document.createElement ('img');
				img.src = 'image/family/' + row[0] + '.png';
				img.title = row[1];
				img.alt = row[1];
				img.style.padding = '1px';
				img.style.height = this.heig;
				img.style.cursor = 'pointer';
				img.realValue = row[0];
				img.obj = this;
				img.addEventListener ('mouseover', this.mouseOver, false);
				img.addEventListener ('mouseout', this.mouseOut, false);
				img.addEventListener ('click', this.clicked, false);
				div.appendChild (img);
			}
		}
	}

	,clicked: function (event)
	{
		if (this.obj.realValue != this.realValue)
		{
			this.obj.setValue (this.realValue);
			this.obj.signalEmit ('changed');
		}
	}

	,mouseOver: function (event)
	{
		this.style.height = '37px';
	}

	,mouseOut: function (event)
	{
		if (this.obj.realValue != this.realValue)
			this.style.height = this.obj.heig;
	}

	,setRealValue: function ()
	{
		var img = this.div.childNodes;

		for (var n = 0; n < img.length; n++)
		{
			if (img[n].realValue != this.realValue)
				img[n].style.height = this.heig;
		}
	}

	,setEditable: function () {}
});


