var sb_js_cmn_parentClickBool = false;
var sb_js_cmn_timerID;

(function($) {
	function WindowOpen(root, conf) {
		var self = this;
		var sb_js_cmn_parentClickBool = false;
		var parentOnMouseOverBool = false;
		
		//$(conf.parent).attr('href', 'javascript: void(0)');
		if($(conf.parent).is('a'))
			$(conf.parent).attr('href', 'javascript: void(0)');

		$(conf.parent + ' a').each(function() {
			if($(this).is('a'))
				$(this).attr('href', 'javascript: void(0)');
		});
		
		
		if ($.isFunction($.fn.windowCloseAuto)) {
			options_new = conf;
			options_new.api = true;
			var windowCloseAuto_api = $(conf.parent).windowCloseAuto(options_new);
		}
		
		
		function parentOnClick() {
			$(conf.parent).blur();
			
			if($(conf.menu).css('display') == 'none')
			{
				$(conf.parent).attr('class', conf.parentClassS);
				$(conf.menu).css('display', 'block');
				
				
				if(typeof(conf.funcShow) == 'function')
					conf.funcShow();
				
				
				if ($.isFunction($.fn.windowCloseAuto))
					windowCloseAuto_api.open();
			}
			else
			{
				if ($.isFunction($.fn.windowCloseAuto))
					windowCloseAuto_api.close();
				
				$(conf.parent).attr('class', conf.parentClass);
				$(conf.menu).css('display', 'none');
			}
			
			var menuDeltaX = 0;
			var menuDeltaY = 0;
			var originX = 0;
			var originY = 0;
			
			menuObj = $(conf.menu).get(0);
			menuWidth = menuObj.offsetWidth;
			menuHeight = menuObj.offsetHeight;
			
			switch(conf.menuPos)
			{
				case 'lt':
					menuDeltaY = menuHeight;
				break;
				
				case 'rb':
					menuDeltaX = menuWidth;
				break;
				
				case 'rt':
					menuDeltaX = menuWidth;
					menuDeltaY = menuHeight;
				break;
			}
			
			parentLeft = $(conf.parent).position().left;
			parentTop = $(conf.parent).position().top;
			parentObj = $(conf.parent).get(0);
			parentWidth = parentObj.offsetWidth;
			parentHeight = parentObj.offsetHeight;
			
			switch(conf.origin)
			{
				case 'lb':
					originX = parentLeft;
					originY = parentTop + parentHeight;
				break;
				
				case 'lt':
					originX = parentLeft;
					originY = parentTop;
				break;
				
				case 'rb':
					originX = parentLeft + parentWidth;
					originY = parentTop + parentHeight;
				break;
				
				case 'rt':
					originX = parentLeft + parentWidth;
					originY = parentTop;
				break;
			}
			
			menuX = originX - menuDeltaX;
			menuY = originY - menuDeltaY;
			
			//menuY = $(conf.parent).offset().top + $(conf.parent).height() + 'px';
			//menuX = $(conf.parent).offset().left + $(conf.parent).width() - $(conf.menu).width() + 0 + 'px';
			
			$(conf.menu).css('top', menuY);
			$(conf.menu).css('left', menuX);
			
			sb_js_cmn_parentClickBool = true;
			if(sb_js_cmn_timerID != undefined)
				clearTimeout(sb_js_cmn_timerID);
			
			//return false;
		}
		
		
		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.hide == 'mouseout')
			{
				parentObj.onmouseover = function() {
					
					
					if(sb_js_cmn_parentClickBool)
					{
						clearTimeout(sb_js_cmn_timerID);
					}
				}
				
				
				parentObj.onmouseout = function() {
					if(sb_js_cmn_parentClickBool)
					{
						sb_js_cmn_timerID = setTimeout(function() {
							if(sb_js_cmn_parentClickBool)
							{
								if ($.isFunction($.fn.windowCloseAuto))
									windowCloseAuto_api.close();
								
								$(conf.parent).attr('class', conf.parentClass);
								$(conf.menu).css('display', 'none');
							}
						}, conf.time);
						
						parentOnMouseOverBool = false;
					}
				}
				
				
				menuObj = $(conf.menu).get(0);
				
				menuObj.onmouseover = function() {
					if(sb_js_cmn_parentClickBool)
					{
						clearTimeout(sb_js_cmn_timerID);
					}
				}
				
				
				menuObj.onmouseout = function() {
					if(sb_js_cmn_parentClickBool)
					{
						sb_js_cmn_timerID = setTimeout(function() {
							if(sb_js_cmn_parentClickBool)
							{
								if ($.isFunction($.fn.windowCloseAuto))
									windowCloseAuto_api.close();
								
								$(conf.parent).attr('class', conf.parentClass);
								$(conf.menu).css('display', 'none');
							}
						}, conf.time);
						
						parentOnMouseOverBool = false;
					}
				}
			}
		}
	}
	
	
	
	$.fn.windowOpen = function(conf) {
		var el = this.eq(typeof conf == 'number' ? conf : 0).data("windowOpen");
		if (el) { return el; }
		
		var opts = {
			funcShow : undefined, 
			hide: "mouseout", 
			menu: "", 
			menuPos: "lb", 
			menuClass: "", 
			menuClassS: "", 
			origin: "lb", 
			parent: "", 
			parentClass: "", 
			parentClassS: "", 
			time: 2000
		};
		
		$.extend(opts, conf);
		
		this.each(function() {
			el = new WindowOpen($(this), opts);
			$(this).data("windowOpen", el);
		});
		
		return opts.api ? el: this;
	}
})(jQuery);
