

// define namespace
Ext.namespace("Etech.CLB");

/**
 * @class Etech.CLB
 * clipboard stuff for eurotech website (catalogue - list)
 * @singleton
 */
Etech.CLB=function()
{
	
	// private
	
	var wrap=null; // Element - wrapper
	var tpl=null; // DOM TEMPLATE
	var empty_tpl=null; // DOM TEMPLATE
	
	var dataStore=null; // storage of data from PHP template to use in this class to fill templates
	
	var settings=null; // settings from html (PHP tpl) compare_url, max_items, empty_string || default values
	
	var register={};
	var cookie=null;
	
	var init = function(){
		
		
	}
	
	var getItemTpl = function(){
        
		if(!tpl)
		{
			// create required templates
			tpl = new Ext.Template(
				'<div class="" id="clbitem_{id}">' +
				'<a href="#" onclick="Etech.CLB.remove(\'{ind}\'); Etech.CLB.cookie(\'{cookie}\'); return false;" class="clb_item"><span>odober</span>&nbsp;</a>' +
				'<strong>{name}</strong>' +
				'</div>'
			);
			// tpl.compile(); // ak sa skompiluje robi tam problem ten JS v onclicku a prvy click na vygenerovanie nejde
		}
		
        return tpl;
    };
	
	var getWrap = function(){
		
		if(!wrap)
		{
			wrap=Ext.get("clipboard_wrap");			
		}
		
		return wrap;
			
	};
	
	
	var addToRegister = function(ind,o)
	{
		register[ind]=o;		
	};
	
	
	var removeFromRegister = function(ind)
	{
		register[ind]=null;		
		delete register[ind];
	};
	
	
	var isRegistered = function(ind)
	{
		if(typeof register[ind] != "undefined")
			return true;
		else
			return false;
			
	};
	
	var getRegisteredElement = function(ind)
	{
		if(typeof register[ind] != "undefined")
			return register[ind]["element"];
		else
			return null;
			
	};
	
	
	var getStorage = function()
	{		
		if(!dataStore)
		{
			if(typeof CLBDATA != "undefined")
			{
				dataStore=CLBDATA;
				
			}else
			{
				alert("treba zadefinovat globalnu premennu CLBDATA s datami pre clipboard ||| {indexfromhref:{id:i,name:s}} ");	
				
				return false;
			}
		}
		
		return dataStore;			
	};
	
	
	var getData = function(ind)
	{
		var s=getStorage();
		
		if(!s) return false;
		
		var d;
		
		if(typeof s[ind] != "undefined")
			d=s[ind];
		else
			d=false;
					
		return d;
		
	};
	
	
	var getURL = function()
	{
		return getSettings()["compare_url"];		
	};
	
	
	
	var getMinItems = function()
	{		
		return 2;		
	};
	
	
	var getMaxItems = function()
	{
		return getSettings()["max_items"];	
	};
	
	var getPutMinText = function()
	{
		return getSettings()["act_lower_than_min"];	
	};
	
	
	var getEmptyTpl = function()
	{
		if(!empty_tpl)
		{
			empty_tpl=new Ext.Template(getSettings()["empty_string"]);
			empty_tpl.compile();
		}
		
		return empty_tpl;
	};	
	
	
	var getItemsAsPost = function()
	{
		var a=[];
		
		for(var n in register)
			a.push(register[n]["id"]);
			
		var s=a.join("|");
		
		return s;
		
	};
	
	
	var getSettings = function()
	{
		if(!settings)
		{
			if(typeof CLBSETTINGS != "undefined")
			{
				settings=CLBSETTINGS;
				
			}else
			{
				// or default
				settings={
					max_items : 4,
					empty_string : '<span class="lighter">[prázdna]</span>',
					compare_url : '',
					act_lower_than_min : "V schránke musia byť aspoň 2 výrobky!"
				}
			}
		}
		
		return settings;		
	};
	
	
	var removeAll = function()
	{
		var keys=[];
		
		for(var n in register)
			keys.push(n);
		
		for(var i=0; i<keys.length; i++)
			p_remove(keys[i]);
			
	};
	
	// private remove method
	var p_remove = function(ind)
	{
		if(isRegistered(ind))
		{
			var e=getRegisteredElement(ind);
			e.remove();
			removeFromRegister(ind);
			
			checkEmptyness();
		}	
	};
	
	
	var getFirstRegInd = function()
	{
		for(var n in register)
		{	
			return n;
		}
	};
	
	
	var getRegLength = function()
	{
		var i=0;
		
		for(var n in register)
			i++;
			
		return i;
	};
	
	
	var checkEmptyness = function()
	{
		if(getRegLength()===0)
		{
			var et=getEmptyTpl();
			var w=getWrap();
			et.overwrite(w, {});	
		}
	}
	
	
	
	// public
	return {
			
		init : function(name){
			var data = fetch_cookie(name);
			
			if(data!=null){
				var dataStr = new String(data);
				var dataArr = dataStr.split("|");
			
				for(var i=0;i<dataArr.length;i++){
					this.add('item-' + dataArr[i]);
				}
			}
		},
		
		clear : function()
		{
       		removeAll();       		
		},
		
		addMore : function(ids_ar)
		{
       		
		},
		
		add : function(ind)
		{
			
			// ak uz existuje tak nie
			if(isRegistered(ind))
			{
				// mohol by zablikat	
				var e=getRegisteredElement(ind);
				e.fadeIn({duration:0.2});
				
				return;
			}
       		
			var w=getWrap();
						
			if(!w) return;
			
			
			var t=getItemTpl();
						
			var d=getData(ind);
			
			if(d)
			{
				
				var reg_length=getRegLength();
				// clear if first
				if(reg_length===0)
				{
					//alert("clear");
					w.dom.innerHTML="";	
				}
				
				// clear naviac
				if(reg_length>=getMaxItems())
				{
					p_remove(getFirstRegInd());
				}
				
				
				
				var e=t.append(w, d, true);
							
				// prepare object for register
				var ro={};
				ro["element"]=e;
				ro["id"]=d["id"];
				
				addToRegister(ind,ro);
			}
			else
			{
				alert("store je ale data ne");
			}
			
		},
		
				
		remove : function(ind)
		{
			p_remove(ind);
		},
		
		
		isComparable : function()
		{
			var rl=getRegLength();
			var min_=getMinItems();
			var max_=getMaxItems();
			
			if(rl>=min_ && rl<=max_)
				return true;
			else
			{
				if(rl<min_)
				{
					alert(getPutMinText());						
				}					
					
				return false;
			}
		},
		
		
		compare : function()
		{
			if(this.isComparable())
			{
				var url=getURL()+getItemsAsPost();
				window.location.href=url;
				//alert(url);
			}
		},
		
		cookie : function (name){
								
			var str = getItemsAsPost();
			
			if(str==''){
				delete_cookie(name);
			}else{			
				set_cookie(name,str);	
			}
		}		
	
    };
	
}();

// add


// remove one


// remove more


// clear

