/**
 * @author oldoffice
 * @version 0.5
 * usage : $("WRAPPER").acordion(options);
 */

(function($){
	
	$.fn.acordion = function(options)
	{
		var elem = this;
		var options = $.extend({
			reminder : null, //$.cookie or null.
			area : "GLOBAL", //"GLOBAL" or "CATEGORY"
			def : "OPEN", //"OPEN" or "CLOSE" otherwise Array. ex / [true, false, false]
			filter : null
		}, options);
		
		if(options.reminder != null)
		{
			$.cookie = options.reminder;
		}
		
		var filter = options.filter;
		var controller = $(this).find(".ooCtrl");
		
		var toggleAreaSelect = function($this)
		{
			var toggler;
			if(filter != null)
			{
				toggler = $($this).parent().siblings(filter);
			}
			else
			{
				toggler = $($this).next();
			}
			
			return toggler;
		}
		
		var toggle = function()
		{
			var toggler = toggleAreaSelect(this);
	
			toggler.slideToggle(); //TASK : Add CallBack Process
			this.flag = !this.flag;
			
			if(options.reminder != null)
			{
				var writer = getStateSet();
				writeCookie(writer);
			}
			
			return false;
		};
		
		var checkCookie = function()
		{
			var ck = $.cookie('state');
	
			if(ck != null)
			{
				return cookieToObject(ck);
			}
			else
			{
				return null;
			}
		};
		
		var cookieToObject = function($src)
		{
			var state = $src.split(","); 
			return state;
		};
		
		var writeCookie = function($writer)
		{
			switch(options.area)
			{
				case "GLOBAL" :
					$.cookie('state', $writer, { path: "/" });
					break;
					
				case "CATEGORY" :
					$.cookie('state', $writer, { path: "/" });　//TASK : CURRENT CATEGORY
					break;
					
				default :
					$.cookie('state', $writer, { path: "/" });
					break;
			}
		};
		
		var getStateSet = function()
		{
			var writer = [];
			for( var i = 0; i < objSet.length; i++ )
			{
				writer.push(objSet[i].flag);
			}
			return writer;
		}
		
		//if already exist cookie
		if(options.reminder != null)
		{
			var checker = checkCookie();
			if(checker != null)
			{
				var counter = 0;
				controller.each(function(){
					this.flag = eval(checker[counter]);
					counter++;
				});
			}
		}
		
		var objSet = [];
		var counter = 0;
		controller.each(function()
		{
			if(this.flag == undefined)
			{
				if(options.def == "OPEN")
				{
					this.flag = true;
				}
				else if(options.def == "CLOSE")
				{
					this.flag = false;
					var toggler = toggleAreaSelect(this);
					toggler.hide();
				}
				else
				{
					this.flag = options.def[counter];
					if(!this.flag)
					{
						var toggler = toggleAreaSelect(this);
						toggler.hide();
					}
					counter++;
				}
			}
			else //cookie is already exist
			{
				if(!this.flag)
				{
					var toggler = toggleAreaSelect(this);
					toggler.hide();
				}
			}
			
			objSet.push(this);
			$(this).click(toggle);
		});
		
		if(options.reminder != null)
		{
			var writer = getStateSet();
			writeCookie(writer);
		}
		
		return this;
	};
	
})(jQuery);

