//Favorites Object
	IMF.namespace("imfPrd.favorites");
	IMF.imfPrd.favorites = {
		TARGET_ID:'dd-target-fav',
		TARGET_BASKET_COUNT_CLASS:'total',
		ADD_URL:ILANG.FAV_ADD_URL,
		REFRESH_URL:ILANG.FAV_REFRESH_URL,
		BASKET_URL:ILANG.FAV_URL,
		PROCESS_ADD:false,
		PROCESS_REFRESH:false,
		init:function(){
		var Event = IMF.util.Event;
		var Dom = IMF.util.Dom;
		var ob = this;
			Event.on( this.TARGET_ID, 'mouseover', function(){
				Dom.setStyle( this, "cursor", "pointer" );
				this.className = "selected";
				Event.on( this, "click", function(){
					window.location = ob.BASKET_URL;
				});
			});
			
			Event.on( this.TARGET_ID, 'mouseout', function(){
				Dom.setStyle( this, "cursor", "default" );
				this.className = "normal";
				Event.on( this, "click", function(){} );
			});
			this.refresh();
		},
		add:function( el ){
			var Dom = IMF.util.Dom;				
			var ob = this;
			
			this.handleSuccess = function(o){
				if(o.responseText !== undefined){
					ob.stopProcess();
					ob.PROCESS_ADD = false;		
					var data;
		            try {
		                data = IMF.lang.JSON.parse(o.responseText);
		            }catch (x) { return; }
		            
		            if( typeof data.messages != 'boolean' ){
		            	for( var i in data.messages ){
		            		var msg = data.messages[i];
		            		switch( msg.type ){
			            		case 'dialog':
		            				if( msg.dialog == true && typeof data.dialog == 'object' ){
		            					IMF.imfPrd.DDTarget.dialog( data.dialog.title, data.dialog.content, { ok:function(){ this.submit() }, callback:{ success:ob.handleSuccess, failure:ob.handleFailure } } );
		            				}
		            				break;
		            			case 'alert':
		            				var att = {};
		            				if( msg.dialog == true && typeof data.dialog == 'object' ){
		            					att.ok = function(){
		            						this.hide();
		            						IMF.imfPrd.DDTarget.dialog( data.dialog.title, data.dialog.content, { ok:function(){ this.submit() }, callback:{ success:ob.handleSuccess, failure:ob.handleFailure } } );
		            					}
		            				}
		            				IMF.imfPrd.DDTarget.alert( msg.title, msg.message, att );
		            				break;
		            			case 'inner':
		            				ob.setTotalProduct( msg.message, true );
		            				break;
		            		}
		            	}
		            }
		            
		            if( data.status == 'ok' ){ ob.refresh(); }
				}
			};

			this.handleFailure = function(o){
				if(o.responseText !== undefined){
					ob.stopProcess();
					ob.PROCESS_ADD = false;
				}
			};

			var callback = { success:this.handleSuccess, failure:this.handleFailure };
			if(typeof el == 'number'){
				var postData = "product_id=" + el;
			}else{
				var postData = "product_id=" + IMF.imfPrd.DDTarget.getProductID( el );
			}
			var request = IMF.util.Connect.asyncRequest('POST', this.ADD_URL, callback, postData);
			this.startProcess( "add" );
			this.PROCESS_ADD = true;
		},
		setTotalProduct:function( count, ed ){
			var Dom = IMF.util.Dom;
			var countEl = Dom.getElementsByClassName( this.TARGET_BASKET_COUNT_CLASS, "span", this.TARGET_ID);
			if( !countEl || !countEl[0] ){ return; }
			countEl[0].innerHTML = count + ( !ed ? " "+ILANG.COUNT_PRODUCT : ''); 			
		},
		setProducts:function( items ){
			var Dom = IMF.util.Dom;
			var countEl = Dom.getElementsByClassName( "items", "cite", this.TARGET_ID);
			if( !countEl || !countEl[0] ){ return; }
			var el = countEl[0];
			el.innerHTML = '';
			
			if(items.length <= 0){ return; }
			for(i in items){
				var item = items[i];
				var spn = document.createElement('span');
				spn.setAttribute('class', 'item');
					var a = document.createElement('a');
					a.setAttribute('href', item.link);
					a.setAttribute('title', item.label);
						var img = document.createElement('img');
						img.setAttribute('src', item.img);
						img.setAttribute('alt', item.label);
						img.setAttribute('border', '0');
						a.appendChild(img);
					spn.appendChild(a);
				el.appendChild(spn);
			}
		},
		refresh:function(){
			var Dom = IMF.util.Dom;
			var targetEl = Dom.get( this.TARGET_ID );
			var ob = this;
			
			var handleSuccess = function(o){
				if(o.responseText !== undefined){
					ob.PROCESS_REFRESH = false;
					ob.stopProcess();
					var data;
		            try {
		                data = IMF.lang.JSON.parse(o.responseText);
		            }catch (x) { return; }

		            if( typeof data.messages != 'boolean' ){
		            	for( var i in data.messages ){
		            		var msg = data.messages[i];
		            		switch( msg.type ){
		            			case 'alert':
		            				IMF.imfPrd.DDTarget.alert( msg.title, msg.message );
		            				break;
		            			case 'inner':
		            				//ob.setTotalProduct( msg.message, true );
		            				break;
		            		}
		            	}
		            }
		            
		            ob.setTotalProduct( parseInt(data.total), false);
		            ob.setProducts(data.items);
				}
			};

			var handleFailure = function(o){
				if(o.responseText !== undefined){
					ob.stopProcess();
					ob.PROCESS_REFRESH = false;
				}
			};

			var callback = { success:handleSuccess, failure:handleFailure };
			var request = IMF.util.Connect.asyncRequest( 'GET', this.REFRESH_URL, callback );
			this.startProcess( "refresh" );
			this.PROCESS_REFRESH = true;
		},
		startProcess:function( action ){
			var Dom = IMF.util.Dom;
			switch( action ){
				case "add": var msg = ILANG.FAV_PROCESS_ADD; break;
				case "refresh": var msg = ILANG.FAV_PROCESS_REFRESH; break;
				default: var msg = ILANG.FAV_PROCESS; break; 
			}
			
			var processEl = Dom.getElementsByClassName( "process", "cite", this.TARGET_ID );
			if( !processEl || !processEl[0] ){ return; }
			processEl[0].innerHTML = '<img src="'+ILANG.THEME+'images/progress.gif" border="0" style="vertical-align: bottom;" /> ' + msg; 
		},
		stopProcess:function(){
			var Dom = IMF.util.Dom;					
			var processEl = Dom.getElementsByClassName( "process", "cite", this.TARGET_ID );
			if( !processEl || !processEl[0] ){ return; }
			processEl = processEl[0];
			processEl.innerHTML = ''; 
		}
	}
