// AutoSutaz module

if(typeof AO !== "object")
	AO={};	

/**
 * AO.AutoSutaz singleton class
 */
AO.ConfiguratorFotogal=function()
{	
	var newsletter_saved=false;
	
	var block_send=false;
	
	var sendButton=null;
	
	var sendAfterSave=false;
	var testSendAfterSave=false;
	
	var picsList=null; // pictures list widget
	
	// public interface
	return {		
		
						
		setUpCustomPics : function()
		{		
			this.setUpUploadForm();
						
			// picsList widget
			var aid=$("#carCardID").val();
			if(aid)
				this.setPicsList();
				
		},
		
		
		// #################################################
		// pic upload form
		// #################################################
		
		setUpUploadForm : function()
		{
			// FORM											
			var rules = {
				image_file : {required: true}
			};
				
			var messages = {
				image_file : {required: "povinná položka"}
			};
			
			// FORM validation
			$("#picUploadForm").validate({
				rules: rules,
				messages: messages,
				errorClass: "invalid",
				// focusCleanup: true,
				submitHandler : AO.Common.Util.createHandler(this.submitPicUpload,this)
			});
			
			
			// hide msg
			$("#picUploadStatus").hide();
		},
		
		submitPicUpload : function(form)
		{	
			if(block_send)
				return;
			
			
			var opts={
				success : AO.Common.Util.createHandler(this.submitPicUploadComplete,this),
		        error : AO.Common.Util.createHandler(this.responsePicUploadError,this),				
				// beforeSubmit:  AO.Common.Util.createHandler(this.showRequest,this),
		        url : AO.Common.settings.BASE_URL,
		        dataType : 'text',
				method : "POST"
			};
			
			$(form).ajaxSubmit(opts);
			
			this.setStatusMessage("Prebieha nahrávanie ...","info");			
			
			block_send=true;
		},
		
		/*
		beforeReq : function(fdata,jqForm,options)
		{
			var a="a";
		},
		*/
		
		submitPicUploadComplete : function(responseText, statusText)
		{
			
			// alert(responseText);
			
			try
			{
				var d=eval('('+responseText+')');
				
			}catch(e)
			{
				this.setStatusMessage("Chyba!!! "+e,"ok");
				
				return;
			}
			
			// haluska mrkni firebug
			// ide to 2x (vola sa ale raz) - neviem preco - prvy krat ale nie je evalnuty resposeText
			if(d)
			{
				if(d.result)
				{				
					// fill info
					this.setStatusMessage("Obrázok bol nahraný na server.","ok");
					
					this.getPicsList();
					
				}else
				{
					switch(d.error.code)
					{
						case 400 :
							this.setStatusMessage("Minimálny rozmer obrázku musí byť 300*209!","bad");
						break;
						
						case 701 :
							this.setStatusMessage("Obrázok nie je vo formáte JPG!","bad");
						break;						
						
						default:
							this.setStatusMessage("Nastala chyba (kód: "+d.error.code+" "+d.error.app_part+")","bad");
						break;						
					}
				}
								
				block_send=false;
			}
		},
		
		
		responsePicUploadError : function(er)
		{
			alert("Nahrávanie obrázka neprebehlo úspešne!");	
			
			block_send=false;
		},
		
		
		// #################################################
		// state MSGs
		// #################################################
				
		
		/**
		 * div impl
		 */
		setStatusMessage : function(msg,type)
		{
			
			if(!this.statusObject)
				this.statusObject=new AO.Common.formStatusMsg("picUploadStatus");
			
			this.statusObject.setStatusMessage(msg,type);
			
			this.deferHideStatusMsg();
			
		},
		
		
		deferHideStatusMsg : function()
		{
			if(!this.statusObject)
				this.statusObject=new AO.Common.formStatusMsg("picUploadStatus");
			
			this.statusObject.deferHideStatusMsg();				
		},
		
				
		// #################################################
		// pics refresh
		// #################################################
		
		
		getPicDetail : function(e)
		{	
			e.preventDefault();
			
			// IE fix
			var target=e.currentTarget || $(e.target).parent();
			
			var el=this.getPicEl(target);			
			var id=el.attr("id").substr(5);
					
			if(!id)
				return;
			
			var postData={
				_action : "get_item",
				_pack : "autoCustomFotogal",
				_server : "ao",
				id : id
			};
						
			$.post(AO.Common.settings.BASE_URL, postData, AO.Common.Util.createHandler(this.getPicDetailComplete,this), "json");
		},
		
		
		getPicDetailComplete : function(d)
		{
			if(d.result)
			{
				$("#html_detail").html(d.data.html_detail);					
			}else
			{
				switch(d.error.code)
				{
					default:
						this.setStatusMessage("Nastala chyba (kód: "+d.error.code+")","bad");
					break;					
				}
			}			
		},
		
		
		getPicsList : function()
		{
			var postData={
				_action : "get_list",
				_pack : "autoCustomFotogal",
				_server : "ao",
				_filter_autokarta_id : $("#carCardID").val()
			};
						
			$.post(AO.Common.settings.BASE_URL, postData, AO.Common.Util.createHandler(this.getPicsListComplete,this), "json");
		},
		
		getPicsListComplete : function(d)
		{
			if(d.result)
			{
				// fill and init pics list 
				if(d.data.html_list)
				{
					$("#html_list").html(d.data.html_list);
					this.setPicsList();
				}
			}else
			{
				switch(d.error.code)
				{
					default:
						this.setStatusMessage("Nastala chyba (kód: "+d.error.code+")","bad");
					break;					
				}
			}
		},
				
		// #################################################
		// pics sort ...
		// #################################################
		
		setPicsList : function()
		{
			picsList=$("#picsList");
			
			// detail
			$("a.show_detail",picsList).click(AO.Common.Util.createHandler(this.getPicDetail,this));
			
			// move up
			$("a.move-left",picsList).click(AO.Common.Util.createHandler(this.picMoveUp,this));
			// move down
			$("a.move-right",picsList).click(AO.Common.Util.createHandler(this.picMoveDown,this));
			// remove
			$("a.storno-mini",picsList).click(AO.Common.Util.createHandler(this.picRemove,this));
		},
						
		picMoveUp : function(e)
		{
			e.preventDefault();
			
			// IE fix
			var target=e.currentTarget || $(e.target).parent();
						
			var li=this.getPicEl(target);
			
			// insert before previous sibbling			
			li.insertBefore(li.prev());
			
			this.updatePicsSort(); 
		},
		
		picMoveDown : function(e)
		{
			e.preventDefault();
			
			// IE fix
			var target=e.currentTarget || $(e.target).parent();
			
			var li=this.getPicEl(target);
			
			// insert before previous sibbling			
			li.insertAfter(li.next()); 
			
			this.updatePicsSort();
		},
		
		picRemove : function(e)
		{
			e.preventDefault();
			
			if(block_send)
				return;
				
			// IE fix
			var target=e.currentTarget || $(e.target).parent();
			
			var el=this.getPicEl(target);			
			var id=el.attr("id").substr(5);
			
			var autokarta_id=$("#carCardID").val();			
				
			// remove autokarta
			var postData={
				_action : "delete_item",
				_pack : "autoCustomFotogal",
				_server : "ao",
				id : id,
				autokarta_id : autokarta_id
			};
			
			$.post(AO.Common.settings.BASE_URL, postData, AO.Common.Util.createHandler(this.picRemoveComplete,this), "json");			
			
			this.__temp_removeEl=el;
			
			block_send=true;
		},
		
		picRemoveComplete : function(d)
		{
			if(d.result)
			{
				// remove node
				if(this.__temp_removeEl)
				{
					this.__temp_removeEl.remove();
					delete this.__temp_removeEl;
				}
				
				// this.updatePicsSort(); // netreba
			}else
			{
				switch(d.error.code)
				{
					default:
						this.setStatusMessage("Nastala chyba (kód: "+d.error.code+")","bad");
					break;					
				}
			}
			
			block_send=false;
		},
		
		getPicEl : function(a_el)
		{
			// return element's (attribute) parent DOM element
			var el=$(a_el).parent();
			
			while(!el.hasClass("picListItem"))
				el=el.parent();
				
			return el;
		},
		
		updatePicsSort : function()
		{
			var els=$("div.picListItem",picsList);
			
			var idsar=[];
			
			for(var i=0; i<els.size(); i++)
			{
				idsar.push(els.get(i).id.substr(5));
			}
			
			var idss=idsar.join("|");
			
			var autokarta_id=$("#carCardID").val();		
			
			// send to server to resort
			var postData={
				_action : "resort_items",
				_pack : "autoCustomFotogal",
				_server : "ao",
				ids : idss,
				autokarta_id : autokarta_id
			};
			
			$.post(AO.Common.settings.BASE_URL, postData, AO.Common.Util.createHandler(this.updatePicsSortComplete,this), "json");			
			
		},
		
		updatePicsSortComplete : function(d)
		{
			
		}
		
		
	};
	
}();


