

if(typeof BasketViewerObjects == 'undefined'){
	var BasketViewerObjects = new Array;
}


function UpdateBVInfo() // {{{
{
	if((BasketViewerObjects.length) && (typeof AjaxController == 'function')){
		var ac = new AjaxController; // return singleton
		ac.AddTask('/mod/api/basket/basketviewer_update/index.htm', 'UpdateBVInfo_result');
	}
} // }}}

function UpdateBVInfo_result(result)//{{{
{
//	alert(result);
	var cart_info = new Array();
	eval('cart_info = '+result);
	for(var i = 0; i < BasketViewerObjects.length; i++){
		BasketViewerObjects[i].UpdateInfo(cart_info);
	}


}// }}}



function BasketViewer(key){ // {{{

	this.FindElementContainer = function(name, gid, ckey) // {{{
	{
		var obj_id = 'BasketViewer'+ (this.key == '' ? '' : ('_'+this.key) );
		if(gid) obj_id += '_'+gid;
		if(ckey) obj_id += '_'+ckey;
		if(name) obj_id += '_'+name;


//alert(obj_id);

		var obj = document.getElementById(obj_id) || false;
		return obj;
	} // }}}

	this.key = key || '';
	BasketViewerObjects[BasketViewerObjects.length] = this;
	this.container = {
			'main'			: this.FindElementContainer(),
			'cnt_names'		: this.FindElementContainer('cnt_names'),
			'cnt_positions'	: this.FindElementContainer('cnt_positions'),
			'cnt_goods'		: this.FindElementContainer('cnt_goods'),
			'sum_total'		: this.FindElementContainer('sum_total'),
			'data_base'		: this.FindElementContainer('data_base'),
			'data_empty'	: this.FindElementContainer('data_empty'),
			'data_rows'		: new Array
			};

	var trs = this.container['main'].getElementsByTagName('TR');
	var reg = new RegExp("BasketViewer"+(this.key == '' ? '' : ('_'+this.key) )+"_data_([^_]+)_([^_]+)");
	for(var i = 0; i < trs.length; i++){
		var match = reg.exec(trs[i].id);
		if(match){
			var gkey = match[1]+'_'+match[2];
//alert(trs[i].id+'  : '+gkey);
			this.container.data_rows[gkey] = trs[i];
		}
	}




	this.UpdateInfo = function(cart_info) // {{{
	{
		var cnt_names = 0;
		var cnt_positions = 0;
		var cnt_goods = 0;
		var sum_total = 0;

		var cart_gkeys = new Array();
		var is_empty = true;

		for(var gid in cart_info){

			cnt_names++;

			var ginfo = cart_info[gid]['good_info'];
			for(var ckey in cart_info[gid]){
				if(ckey == 'good_info') continue;

				cnt_positions++;
				var gkey = gid+'_'+ckey;
				cart_gkeys[gkey] = true;
				cart_item = cart_info[gid][ckey];
				var quant = parseInt(cart_item['quant']);
				cnt_goods += quant;
				var price = parseFloat(ginfo['gprice']);
				cart_item['summ'] = this.ToPrice(quant * price);
				sum_total += (quant * price);
				if(this.container.data_rows[gkey]){
					this.UpdateItemRow(this.container.data_rows[gkey], cart_item);
				}else{
					this.container.data_rows[gkey] = this.AddItemRow(gid, ckey, cart_item, ginfo);
				}
			}
			is_empty = false;
		}
		for(var k in this.container.data_rows){
			if(this.container.data_rows[k] && !cart_gkeys[k]){
				var r = this.container.data_rows[k];
				r.parentNode.removeChild(r);
				this.container.data_rows[k] = false;
			}
				
		}
		sum_total = this.ToPrice(sum_total);

		if(this.container['cnt_names']) this.container['cnt_names'].innerHTML = cnt_names;
		if(this.container['cnt_positions']) this.container['cnt_positions'].innerHTML = cnt_positions;
		if(this.container['cnt_goods']) this.container['cnt_goods'].innerHTML = cnt_goods;
		if(this.container['sum_total']) this.container['sum_total'].innerHTML = sum_total;

		if(is_empty){
			this.OnEmpty();
		}else{
			this.OnFull();
		}

	} // }}}

	this.UpdateItemRow = function(row, params) // {{{
	{

//for(var k in params) alert(k);
		var cols = row.getElementsByTagName('TD');
		for(var i = 0; i < cols.length; i++){
//alert(cols[i].name);
//			var reg = 
			var fname = cols[i].id.replace(row.id+'_', '');
//alert(fname+' = '+params[fname]+' : '+(params[fname] != null ? '1' : '0'));
			if(params[fname] != null) cols[i].innerHTML = params[fname];
		}

	} // }}}

	this.AddItemRow = function(gid, ckey, cart_item, ginfo) // {{{
	{
		if(!this.container.data_base) return false;

		var gkey = gid+'_'+ckey;

		var id_prefix = "BasketViewer"+(this.key == '' ? '' : ('_'+this.key) )+'_data_'+gkey;
		var new_row = this.container.data_base.cloneNode(true);
		new_row.id = id_prefix;
		new_row.style.display = '';
		var tds = new_row.getElementsByTagName('TD');
		for(var i = 0; i < tds.length; i++){
			tds[i].id = tds[i].id.replace('base', gkey);
		}
		this.UpdateItemRow(new_row, ginfo);
		this.UpdateItemRow(new_row, cart_item);
		
		
//alert(last_row);
		if(this.container.data_empty){
			var last_row = this.container.data_empty;
			last_row.parentNode.insertBefore(new_row, last_row);
		}else{
			this.container.main.getElementsByTagName('TR')[0].parentNode.appendChild(new_row);
		}
		return new_row;

	} // }}}

	this.OnEmpty = function() // {{{
	{
		if(!this.container.data_empty) return;
		this.container.data_empty.style.display = '';
	} // }}}

	this.OnFull = function() // {{{
	{
		if(!this.container.data_empty) return;
		this.container.data_empty.style.display = 'none';
	} // }}}

	this.ToPrice = function(val) // {{{
	{
		val = parseFloat(val);
		if(isNaN(val)) return 0;
		val = ''+val;
		var ind = val.indexOf('.');
		if(ind != -1){
			val += '000';
			val = val.substring(0, (ind + 3));
		}
		return val;
	} // }}}

} // ~ BasketViewer // }}}

/* vim: set sw=2 ts=4 foldmethod=marker: */


