Doh=Doh || {settings:{}};
autocomplete_hover=false;
(function($){
	$(document).ready(function(){
		if(Doh.settings.forms && Doh.settings.forms.sortable){
			var ids=Doh.settings.forms.sortable.ids.join(', #');
			$( '#'+ ids).sortable({
				revert: true,
				handle: '.handle',
			});
			$( '#'+ ids ).each(function(){
				var el=this;
				$(this).draggable({
					connectToSortable: '#'+this.id,
					helper: 'clone',
					revert: 'invalid',
					handle: '.handle',
					containment: 'parent'
				});
				$('#'+this.id+' .handle').disableSelection();
			});
		}
		var i;
		ajaxitem_init();
		$('.autosuggest-option').live({
			mouseover: function(){
				$(this).css({background:'blue'});
			},
			mouseout: function(){
				$(this).css({background:'white'});
			},
			click: function(){
				var id=$(this).closest('ul').attr('rel');
				$('#'+id).val($(this).text());
				$('#'+id).attr('rel',$(this).attr('rel'));
				$('.autocomplete_popup').remove()
			}
		});
		$('.ajax-handle').live({
			submit:function(){
				$('.autocomplete',this).each(function(){
					if($(this).attr('rel')!=undefined){
						$(this).val($(this).attr('rel'));
					}
				})
			}
		});
		$('.autocomplete_popup').live({
			mouseover:function(){autocomplete_hover=true;},
			mouseout: function(){autocomplete_hover=false;}
		});
	
	    $("body").mouseup(function(){ 
	        if(!autocomplete_hover) $('.autocomplete_popup').remove();
	    });
	    $('.form-item').live({
	    	mouseover:function(){$(this).addClass('hover');},
	    	mouseout:function(){$(this).removeClass('hover');}
	    });
	    $('form').submit(function(){
	    	
			if($('.form-item.sortable',$(this)).length>0){
				$('.form-item.sortable',$(this)).each(function(){
					var value={};
					var sortable=this;
					$('.sort_item',$(this)).each(function(){
						var option=this;
						console.log(option);
						if($(':input',$(this)).length>0){
							$(':input',$(this)).each(function(){
								var input=$('<input type="hidden" name="'+sortable.id+'['+option.id+']['+this.name+']" value="'+$(this).val()+'" />');
								$(this).after(input);
								console.log(input);
							});
						}else{
							var input=$('<input type="hidden" name="'+sortable.id+'['+option.id+']" value="'+$(this).text()+'" />');
							$(this).after(input);
							//console.log(input);
						}
					});
					//value=value.join(',');
					//console.log(value);
					//$('#'+this.id+'_sortable').val(value);
				});
				//return false;
			}
		});
		runTest=function() {

                var $prog = $("#prog");

                function showProgress(jqXHR, evt) {
                    console.log("Global event", arguments);
                    var msg = "Length not computable";
                    if (evt.lengthComputable) {
                        msg = "Got " + evt.loaded + " / " + evt.total;
                    }
                    $("<p>" + msg + "</p>").appendTo($prog);
                }


                $("body").ajaxProgress(showProgress);

                // In Firefox, this file is too small
                var ajax = $.ajax({url:"/lib/jquery-1.5.2.js",
                            cache: false, dataType: "text", // If we don't set a dataType, jQuery will get reinitialized
                            progress: function(jqHXR, e) {
                                console.log("Local event", arguments);
                            }}
                );

                ajax.done(function() {
                    console.log("Done!");
                });

                ajax.fail(function() {
                    console.warn(arguments, "Failed!");
                })
            }
	});
	autocomplete={
		populate: function(arr,el){
			var exisiting=$('.autocomplete_popup ul[rel="'+el.id+'"]');
			if(exisiting.length>0){
				exisiting.closest('.autocomplete_popup').remove();
			}
			var wrapper=$('<div class="autocomplete_popup"></div>');
			wrapper.css({width:$(el).width()});
			var list=$('<ul class="autocomplete_list"></ul>');
			list.attr('rel',el.id);
			for(i in arr){
				var li=$('<li class="autosuggest-option"></li>');
				li.text(arr[i]);
				li.attr('rel',i);
				$(list).append(li);
			}
			wrapper.append(list);
			wrapper.insertAfter($(el).closest('label'));
			wrapper.css({position:'absolute'});
		}
	}
})(jQuery);
function ajaxitem_init(){
	$('.ajax-item:not(.processed)').each(function(){
		$(this).addClass('processed');
		var trigger_el=this;
		var item=Doh.settings.forms.ajax_items[this.id];
		if(item.wrapper!==String) item.wrapper=$(this).closest('.form-item-wrapper');
		var form=$(this).closest('form');
		if(!form.hasClass('ajax-handle')) form.addClass('ajax-handle');
		$(this)[item.event](function(){
			var form_item=this;
			if($(this).hasClass('file-trigger')){
				var _iframe=$('<iframe src="javascript:false;" name="' + this.id + '_iframe" />');
				_iframe.attr({id:this.id + '_iframe'});
				_iframe.css({display:'none'});
				$('body').append(_iframe);
				var _form=$('<form method="post" enctype="multipart/form-data"></form>');
				//var q=form.serialize()+'&ajax_ids='+this.id;
				_form.attr({action:'/ajax/file/upload',target:this.id + '_iframe'});
				//_form.append($(this).closest('fieldset').clone(true))
				//_form.append($('#form_id',form).clone(true));
				_form.css({display:'none'});
				var button=this;
				$('#' + this.id + '_iframe').load(function(){
					var fid=$(this).contents().text();
					$(form_item).closest('.form-item-wrapper').addClass('ajax-load');
					$.ajax({
						type:'POST',
						url:location.protocol+'//'+location.host,
						data:form.serialize()+'&ajax_ids='+form_item.id+'&new_fid='+fid,
						success:function(msg){
							var vals=$.parseJSON(msg);
							for(i in vals){
								var item=Doh.settings.forms.ajax_items[i];
								if(item.method=='autocomplete'){
									autocomplete.populate(vals[i],form_item);
								}else{
									$(item.wrapper)[item.method](vals[i]);
								}
							}
							$(form_item).closest('.form-item-wrapper').removeClass('ajax-load');
							ajaxitem_init();
						}
					});
					var spl=button.id.split('_');
					$('#sort_form_file_upload_wrapper-'+spl[1]).attr({id:'sort_form_file_upload_wrapper-'+fid});
					$('.handle.form_file_upload_wrapper-'+spl[1]).removeClass('form_file_upload_wrapper-'+spl[1]).addClass('form_file_upload_wrapper-'+fid);
					_iframe.remove();
					_form.remove();
				});

				$('body').append(_form);
				_form.append($(':input',$(this).closest('fieldset')).clone(true));
				_form.submit();
			}else{
				$(form_item).closest('.form-item-wrapper').addClass('ajax-load');
				$.ajax({
					type:'POST',
					url:location.protocol+'//'+location.host,
					data:form.serialize()+'&ajax_ids='+form_item.id,
					success:function(msg){
						var vals=$.parseJSON(msg);
						for(i in vals){
							var item=Doh.settings.forms.ajax_items[i];
							if(item.method=='autocomplete'){
								autocomplete.populate(vals[i],form_item);
							}else if(item.method!=false){
								$(item.wrapper)[item.method](vals[i]);
							}
						}
						$(form_item).closest('.form-item-wrapper').removeClass('ajax-load');
						ajaxitem_init();
					}
				});
			}
			return false;
		});
	});
}
