var sb_js_cmn_winCloseAuto = ({});
var sb_js_cmn_windOpenClick = false;
var clck;

(function($) {
	function WindowCloseAuto(root, conf) {
		var self = this;
		
		
		$.extend(self, {
			close: function() {
				if(sb_js_cmn_winCloseAuto.action == 'open')
				{
					$(sb_js_cmn_winCloseAuto.parent).attr('class', sb_js_cmn_winCloseAuto.parentClass);
					$(sb_js_cmn_winCloseAuto.menu).css('display', 'none');
					
					sb_js_cmn_winCloseAuto = ({});
				}
			}, 
			
			open: function() {
				if(sb_js_cmn_winCloseAuto.action == 'open')
				{
					$(sb_js_cmn_winCloseAuto.parent).attr('class', sb_js_cmn_winCloseAuto.parentClass);
					$(sb_js_cmn_winCloseAuto.menu).css('display', 'none');
					
					sb_js_cmn_winCloseAuto = $.extend({
						action: "open"
					}, conf);
				}
				else if(sb_js_cmn_winCloseAuto.action == undefined)
				{
					sb_js_cmn_winCloseAuto = $.extend({
						action: "open"
					}, conf);
				}
			}
		});
		
		
		function parentOnClick() {
			clck = 1;
			//return false;
		}
		
		
		function menuOnClick() {
			clck = 1;
		}
		
		
		/*
		function objectClick(action, func)
		{
			actionOld = action;
			
			if(typeof action != 'function') {
				action = func;
			} else {
				action = function() {
					actionOld();
					func();
				}
			}
		}
		*/
		
		
		if($(conf.parent).length)
		{
			parentObj = $(conf.parent).get(0);
			parentOnClickNow = parentObj.onclick;
			parentOnClickFunc = typeof parentOnClickNow;
			
			if(parentOnClickFunc != 'function')
			{
				$(parentObj).click(parentOnClick);
			}
			else
			{
				$(parentObj).click(function() {
					parentOnClickNow();
					parentOnClick()
				});
			}
		}
		
		
		if($(conf.menu).length)
		{
			menuObj = $(conf.menu).get(0);
			menuOnClickNow = menuObj.onclick;
			menuOnClickFunc = typeof menuOnClickNow;
			
			if(menuOnClickFunc != 'function')
			{
				menuObj.onclick = menuOnClick;
			}
			else
			{
				menuObj.onclick = function() {
					menuOnClickNow();
					menuOnClick()
				}
			}
		}
		
		
		function sb_js_cmn_windowClick() {
			if(clck != 1)
			{
				$(sb_js_cmn_winCloseAuto.parent).attr('class', sb_js_cmn_winCloseAuto.parentClass);
				$(sb_js_cmn_winCloseAuto.menu).css('display', 'none');
				
				sb_js_cmn_winCloseAuto = ({});
				
				
				if(sb_js_cmn_parentClickBool != undefined)
					sb_js_cmn_parentClickBool = false;
				
				if(sb_js_cmn_timerID != undefined)
					clearTimeout(sb_js_cmn_timerID);
			}
			
			clck = 0;
		}
		
		
		if(sb_js_cmn_windOpenClick == false)
		{
			var bodyOnClick = document.body.onclick;
			
			if(typeof document.body.onclick != 'function') {
				document.body.onclick = sb_js_cmn_windowClick;
			} else {
				document.body.onclick = function() {
					bodyOnClick();
					sb_js_cmn_windowClick();
				}
			}
			
			sb_js_cmn_windOpenClick = true;
		}
	}
	
	
	
	$.fn.windowCloseAuto = function(conf) {
		var el = this.eq(typeof conf == 'number' ? conf : 0).data("windowCloseAuto");
		if (el) { return el; }
		
		var opts = {
			api: false, 
			menu: "", 
			menuClass: "", 
			menuClassS: "", 
			parent: "", 
			parentClass: "", 
			parentClassS: "", 
			time: 2000
		};
		
		$.extend(opts, conf);
		
		this.each(function() {
			el = new WindowCloseAuto($(this), opts);
			$(this).data("windowCloseAuto", el);
		});
		
		return opts.api ? el: this;
	}
})(jQuery);
