/**
 * Update: Thu Apr 28 18:56:52 HKT 2011
 * Usage: 
 * 	[if tag A]
 * 		<a class="updater[ updater-A]" href="URL" rel="URL [parentDIV] [[ChildA|ChildB|ChildN]]">Anchor</a>
 *
 * 	[if tag SELECT]
 * 		<form rel="URL [parentDIV] [[ChildA|ChildB|ChildN]]" action="URL">
 * 			<select class="updater[ updater-SELECT]"></select>
 * 		</form>
 *
 * 	[if tag FORM]
 * 		<form class="updater[ updater-FORM]" rel="URL [parentDIV] [[ChildA|ChildB|ChildN]]" action="URL"></form>
 *
 * Callback: 
 * 	$.updater.success = function(){};
 *
 *
 **/
(function($) {
	var upduuid = new Date().getTime();
	function Updater(){
		this.uuid = new Date().getTime();
		this.upduuid = upduuid;
		this.params = new Array();
		this.enable = true;
	}
	$.extend(Updater.prototype, {
		setting: function($this){
			var sRel = $this.attr("rel");
			if(sRel.lastIndexOf("/") == -1) sRel = ($this.attr('tagName') == "FORM" ? $this.attr("action") : $this.attr("href")) +" "+ sRel;
			$.updater.aUrl = new Array();
			$.updater.aElement = new Array();
			if(sRel.indexOf("[") == -1 || sRel.indexOf("]") == -1){
				$.updater.sUrl = sRel;
				var aRel = sRel.split(" ");
				$.updater.aElement[0] = aRel[1];
			}else{
				$.updater.sUrl = sRel.slice(0,sRel.indexOf("[")-1);
				$.updater.aUrl = $.updater.sUrl.split(" ");
				sElement = sRel.slice(sRel.indexOf("[")+1,sRel.indexOf("]"));
				$.updater.aElement = sElement.split('|');
			}
			if($this.attr('tagName') == "FORM") $.updater.sUrl = $this.attr('action');
		},
		post: function(){
			$.post($.updater.sUrl, $.updater.postData ,function(data){
				var $data = data;
				if($.updater.aUrl[1]){
					$data = $(data).filter($.updater.aUrl[1]);
					if($(data).filter($.updater.aUrl[1]).length == 0){
						$data = $(data).find($.updater.aUrl[1]);
					}	
					$.updater.aUrl.splice (1,1); 
				}
				$.updater.update($data);
			});
		},
		update: function($data){
			$.each($.updater.aElement,function(i){
				var $newElement = $(($.updater.aUrl.length >= 2 ? $.updater.aUrl[1] +" ": "" )+$.updater.aElement[i],$data);
				if($newElement.length != 0)
					$(($.updater.aUrl.length >= 2 ? $.updater.aUrl[1] +" ": "" )+$.updater.aElement[i])
					.replaceWith($newElement); 
			}); 
			$.updater.loading.fadeOut(200);
			$(".updater").updater();
			$.updater.success();
		},
		click: function($this){
			$.updater.loading.fadeIn(200);
			$.updater.setting($this);
			var $loader = $("<div>");
			$loader.load($.updater.sUrl,function(){
				$.updater.update($loader);
			});
		},
		change: function($this){
			$.updater.loading.fadeIn(200);
			var $form = $this.closest('form');
			$.updater.submit($form);
		},
		submit: function($this){
			$.updater.loading.fadeIn(200);
			$.updater.postData = $this.serializeArray();
			$.updater.setting($this);
			$.updater.post();
		},
		success: function(){
			$("a#single_image").fancybox();
			$('input[name=weeks_specials]').click(function() {
				if($(this).attr('checked') == true) {
					$.post('/admin/menu/ajax', {'id':$(this).attr('id'), 'specials':'1'});
				} else {
					$.post('/admin/menu/ajax', {'id':$(this).attr('id'), 'specials':'0'});
				}
			});

			$('.admin-table tr').mouseover(function() {
				$(this).css('background', '#CCC');
			});

			$('.admin-table tr').mouseout(function() {
				$(this).css('background', '#FFF');
			});
		},
		disable: function(){
			$.updater.enable = false;
		}	
	});
	$.fn.updater = function(params){
		if($('.ui-updater-loading').length == 0){
			var $loading = $('<div class="ui-updater-loading">Loading...</div>').hide();
			$("body").append($loading);
		}
		$.updater.loading = $('.ui-updater-loading');
		this.each(function(i) {
			var $this = $(this);
			if($this.attr('class').indexOf('ui-updater') == -1){
				var uuid = $.updater.uuid++;
				var tagName = $this.attr('tagName');
				$this.addClass('updater ui-updater-'+ tagName + '-' + uuid);
				if(params && !$this.attr('rel')) $this.attr('rel',$this.attr('href')+" "+params);
			}
		});
		return this;
	};
	$.updater = new Updater();
	window['UPD_jQuery_' + upduuid] = $;
})(jQuery);
$(function(){
	$(".updater").updater();
	$.updater.success();
	$("[class*='ui-updater-A']").live('click',function(){
		if($.updater.enable){ $.updater.click($(this)); return false;}
	});
	$("[class*='ui-updater-SELECT']").live('change',function(){
		if($.updater.enable){$.updater.change($(this)); return false;}
	});
	$("[class*='ui-updater-FORM']").live('submit',function(){
		if($.updater.enable){$.updater.submit($(this)); return false;}
	});
	$("[class*='ui-updater-INPUT']").live('keyup',function(){
		if($.updater.enable){$.updater.change($(this)); return false;}
	});
});

