(function($) {
	//
	// plugin definition
	//
	$.fn.imageUploader = function(action,options) {
 		if(typeof action == "object" && !options){
			options= action;
			action=false;
		}
		 // build main options before element iteration
		var opts = $.extend({}, $.fn.imageUploader.defaults, options);
		if(!action) action="init";
		
		return $(this).each(function(i,elem){
			
			// build element specific options
			var o = $.extend({}, opts, $(this).metadata());
		
			//$this.data("image-uploader",o); 
			var am= appMode;
			var $xb= $(this).closest(".xblok");
			if($xb.metadata().appMode!=undefined) am=$xb.metadata().appMode;		
			if(am!="EDIT") action='disable';
			var $imageid= $(this).find(":hidden[name$=imageid]");
			var $src= $("#"+$imageid.attr("id").replace("imageid","src"));
			switch(action){
				case "init":
					if(!$src.val().length) $(this).find("img.btn").attr("src",imgprompt);
					if($(this).hasClass("image-uploader-inited")) {
						var $this= $(this);
						$this.ImageOverlay({disabled:false});
						return false;
					}
					$this = $(this).addClass("image-overlay").addClass("changeable");
					
					tools = o.tools.split(",");
					var caption= "<ul class='image-uploader-tools'>";
					for(t=0;t<tools.length;t++) {
						caption+="<li class='image-uploader-tool "+tools[t]+"'><img class='image-uploader-btn' src='app_images/image-"+tools[t]+".gif' /></li>";
					}
					caption+="</ul><div class='instruct'>&nbsp;</div>";
					$this.find(".caption").html(caption).css({width:'100%',display:'block'});
					
					
					$this.find(".image-uploader-tool.remove:first img").attr("title","<p style='text=align:center;'>Click to remove this image.</p>").tooltip({
								tip: "#tooltip",																															  								onBeforeShow: function(){ 
									this.getTip().css({'z-index':5000});
									//console.dir({onBeforeShow:this}) 
									}
							});	
					
					var $btn = $this.find(".image-uploader-tool.uploader:first");
					
					var input= new AjaxUpload($btn,{
						action: 'ajax.php', 
						name: $btn.attr('name'),
						responseType: 'json',
						onSubmit : function(file, ext){	 
							//alert(file+" "+ext);
							var $caption= $btn.closest(".caption");
							if (ext && /^(jpg|jpeg)$/.test(ext)){
								var $uploader= $btn.closest(".image-uploader");
								//$btn.parents().css({border:'2px solid orange'}).each(function(){ dump($(this).attr("class"))});
								var $xblok= $btn.closest(".xblok");
								var $rok= $btn.closest(".rok");
								var szs  = $uploader.metadata().strsz;
								var loc = $xblok.metadata().loc;
								var rid = $rok.metadata().rid;
								var $iid	 = $uploader.find(":input[name$=__imageid]");
								var iid= $iid.val();
								var domiid = $iid.attr("id");
								var dombid = domiid.replace("imageid","blokid");
								var $bid= $("#"+dombid);
								var bid= $bid.val();
								//var srcid = domiid.replace("imageid","src");
								//var $src= $("#"+srcid);
								//var src= $src.val();
								if(!bid) bid=0;
								if(!iid) iid=0;
								//alert("bid="+bid+"\niid="+iid+"\nloc="+loc);
								//return false;
								//alert('$uploader'+ $uploader.attr("class"));
								this.setData({
									'szs' : szs,
									'imageid' : iid,
									'blokid' : bid,
									//'loc' : loc,
									//'rid' : rid,
									'handler' : 'img_uploader'
								});
								this.disable();
								$(this).trigger("mouseout");
								$btn.addClass("uploading")
								//$btnimg= $btn.find("img:first").attr("src",'app_images/image-loading.gif');
								$caption.find(".instruct").css({'background':'transparent','text-align':'center',margin:'2px auto',width:'95%','color':'#fff','line-height':'150%'}).html("<p>Uploading image...<br><img src='app_images/image-loading.gif' border=0></p>");
									
						
							} else {
								//alert("Only jpeg images are allowed.  Please select a jpeg and try again.");
								$caption.find(".instruct").html('<span class=failure>Error: only JPG images are allowed.</span><br>Please try again.<br>Click to select image.');
								return false;				
							}
						},
						onComplete: function(file, response){
							//dump(img_btns);
							dump(response);
							$btn.removeClass("uploading");
							var $xblok= $btn.closest(".xblok");
							var $uploader= $btn.closest(".image-uploader");
							var $img= $uploader.find("img.btn");
							var $caption= $uploader.find(".caption");
							$caption.find(".instruct").html("");
							//alert('success='+response.success);
							if(response.success){
								//alert('tmbsrc='+response.tmbsrc);
								this.enable();
								//if(response.tmbsrc!=undefined) loadImgButton($btn,response.tmbsrc,response.tmbw,response.tmbh);
								$caption.find(".instruct").find("p").html("<span class=success>Success! Image uploaded.</span>");
														
								var $iid	 = $uploader.find(":input[name$=__imageid]");
								var domiid = $iid.attr("id");
								var domxbid = domiid.replace("imageid","blokid");
								var $xbid= $("#"+domxbid);
								var dombid= domxbid.replace("ximagesALIAS","bloks_ximagesALIAS");
								var $bid= $("#"+dombid);
								var domsrc = domiid.replace("imageid","src");
								var $src= $("#"+domsrc);
								//alert("found src="+response.src);
								$iid.val(response.imageid);
								$bid.val(response.blokid);
								$xbid.val(response.blokid);
								if($src.size()) $src.val(response.src);
								
								var xbid= $xbid.val();
								var iid= $iid.val();
								var bid= $bid.val();
								//var src= $src.val();
								
								//alert("bid="+bid+"\nxbid="+xbid+"\niid="+iid+"\nsrc="+src);
								if(!$img.size()){
									$uploader.find("a:first").prepend("<img src='' class='btn'>");
									$img= $uploader.find("img.btn");
								}
								
								$img.attr({src:response.tmbsrc,width:response.tmbw,height:response.tmbh});
								//console.dir({src:response.tmbsrc,width:response.tmbw,height:response.tmbh,"img":$img[0]});
								$img.parent().css({height:response.tmbh});
								$iid.trigger('change.able');
								
								$img.parent().trigger("mouseout.au");
								$(this).trigger('mouseout');
								// add file to the list
							} else {	
								//$btnimg= $btn.find("img:first").attr("src",'app_images/image-uploader.gif');
								$caption.find(".instruct").find("p").html("<span class=failure>ERROR!</span><br>"+response.msg);
							}
						}
					}) // end of AjaxUpload
					
					var $input= $(input);
					//alert($input.size());
					var tip="<p style='text-align:left'>Click to select and upload a photo for this spot.</p>";
					tip+="<p style='text-align:left'>Image Requirements:<ul><li>JPEG's only (no gifs or pngs please)</li><li>2MB or smaller</li><li>Recommended: 800px by 600px</li></ul></p>";
					$input.addClass("tooltip").attr("title",tip).tooltip({
								tip: "#tooltip",
								events:{input:"mouseover,click change mouseout"},
								position:"top center",offset:[-20,75],
								onBeforeShow: function(){ 
									this.getTip().css({'z-index':5000});
									//console.dir({onBeforeShow:this}) 
									}
							});	
																
					
					//dump($imageid.attr("class"));
					var inputid= $imageid.attr("id")+"_au";
					$input.attr("id",inputid).css({"cursor":"pointer"});
					//dump($input.attr("style"));
					//dump($input.attr("tagName"),"input tagName");
					
					$input.bind("mouseover.au", function(){
						//alert("click");
						$btn.trigger("mouseover");
						//dump("mouseover");
						//dump($btn.size());
					});
					$input.bind("mouseout.au", function(){
						//alert("click");
						$btn.trigger("mouseout");
						//dump("mouseover");
						//dump($btn.size());
					});
					//dump($(input).css());
					//alert($this.parent().attr("class"));
					//alert($this.parent().html());
					
					$this.ImageOverlay({image_width:o.tmbw+"px",image_height:o.tmbh+"px",overlay_origin:'top',disabled:false});
				
					var $handle= $this.find(".caption .image-uploader-tool.handle:first");
					if($handle.size()){
						//alert("sortable");
						$handle.css({"cursor":"move"})
							.hover(
								function(){ $(this).closest(".xbukket").children(".xblok").addClass("ui-state-default"); },
								function(){ $(this).closest(".xbukket").children(".xblok").removeClass("ui-state-default"); }
								)
							.children("img").css({"cursor":"move"}).attr("title","<p style='text-align:center'>Click here to drag and reposition this image.</p>").tooltip({
								tip: "#tooltip",
								onBeforeShow: function(){ 
									this.getTip().css({'z-index':5000});
									//console.dir({onBeforeShow:this}) 
									}
							});		
				
						$this.bind("mouseover.sort",function(){
							var $xbkt= $(this).closest(".xbukket");
							$xbkt.css({ "height":$xbkt.height()+"px" });
							var $xbloks= $xbkt.children(".xblok").each(function(i,e){
									$(this).css({ "height":$(this).height()+"px","width":$(this).width()+"px" });
									//dump($(this).attr("style"),i);
								});
							//alert($xbkt.size());
							//$xbkt.addClass("xk_sortable");
							//$xbkt.find('.unmovable').removeClass("hidden");
							var sortOptions= {
								cursor: 'move',
								opacity: 0.5,
								containment:'parent',
								stop: function(event, ui) { xbukketSort(event,ui,$xbkt) },
								placeholder: 'ui-state-highlight',
								handle:'.handle',
								forcePlaceholderSize:true
							}
							var tag= $xbkt.find('.xblok:first').attr("tagName").toLowerCase();
							
							//dump(sortOptions);
							$xbkt.sortable(sortOptions);	
							$xbkt.find(tag).disableSelection();
							
							//$xbloks.addClass("ui-state-default");
						});
						$this.bind("mouseout.sort",function(){
							var $xbkt= $(this).closest(".xbukket");
							var $xbloks= $xbkt.children(".xblok");
							//$xbkt.removeClass("xk_sortable");
							//$xbloks.removeClass("ui-state-default");
						});
					}
					$(this).addClass("image-uploader-inited");		
							
					
				break;
				case 'disable':
					var $this= $(this);
					if($src.size()){
						if(!$src.val().length) $(this).find("img.btn").attr("src",imgnotfound);
					}
					$this.ImageOverlay({disabled:true});
				break;
			}			
		 });
	};
	
	$.fn.imageUploader.defaults= {
		tmbsrc:'',
		tmbw:0,
		tmbh:0,
		tools:'remove,uploader'
	};
	
	
})(jQuery);



