/**
 * overlayHelper is a Singleton object.
 * usage:
 * 	显示背景层：overlayHelper.show();
 *  隐藏背景层：overlayHelper.hide();
 *  调整背景层：overlayHelper.adjust();
 */
window.overlayHelper = function (){
	var _select_cache;
	var _div_cache;
	var _div_html = '<div id="superman_bg" style="display:none"></div>';
	var _is_ie6 = $.browser.msie && $.browser.version<7;
	var _is_show = false;
	var _show_option;
	
	function getOverlayDiv(){
		if( ! _div_cache )
		{
			var div = $("#superman_bg");
			_div_cache = div.size() ? div : $(_div_html).appendTo( $('body') );// if div not exists, create it
		}
		return _div_cache;
	}
	function fixOverlayDiv(){
		var opacity = _show_option.opacity;
		_div_cache.css({
       	 	position: 'absolute',
       	 	filter:'Alpha(Opacity=' + opacity * 100 + ')', 
       	 	opacity:opacity, 
       	 	backgroundColor:'black',
            left: 0,
            top: 0,
            zIndex: 1000,
            width: '100%',
            height: $(document).height() + 200 // 某些页面可能有不能遮盖全的情况，+200处理之
        });
		var wrapperWidth = $(document).width();
		var contentWidth = $('body').width();
		if( _show_option.left === null ){
			var left = Math.floor((wrapperWidth-contentWidth)/2);
		}
		else{
		   var left = _show_option.left;
		}
		var width = _is_ie6 && window.screen.width + left || window.innerWidth && Math.max(window.innerWidth, wrapperWidth) || wrapperWidth;
		_div_cache.width(width).css('left', - left);
		return _div_cache;
	}
	function hideSelect(){
		if (!_select_cache) {
			_select_cache = $('select:visible');
		}
		_select_cache.css('visibility', 'hidden');
	}
	function showSelect(){
		if( _select_cache )
			_select_cache.css('visibility','visible');// $.fn.show does not be used here.
	}
	function fixBodyOnShow() {
		$('html').addClass('removeX');
	}
	function fixBodyOnHide() {
		$('html').removeClass('removeX');
	}
	// 在window的resize事件重新设定背景层大小
	$(window).resize(function(){
		if (_is_show) {
			getOverlayDiv();
			fixOverlayDiv();
		}
	});
	return {
        show: function(o){
			o = $.extend({
				opacity : 0.7, // 不透明度，如果需要完全透明的背景层，请设为0
				hiddenSelect : true,
				left : null
			}, o);
			_show_option = o;
    		var div = getOverlayDiv();
    		fixOverlayDiv();
			if ( _show_option.hiddenSelect )
    			hideSelect();
    		fixBodyOnShow();
    		div.show();
        	_is_show = true;
        },
        hide: function(){
    		var div = getOverlayDiv();
    		div.hide();
    		fixBodyOnHide();
    		showSelect();
			_is_show = false;
        }
	}
}();

/**
 * a jquery plugin
 * 调整div的位置，使之显示在window的中间
 * 
 * usage:
 * 	  $('#panel').asPopPanel();
 * @param {Object} o
 */
$.fn.asPopPanel = function(o){
	o = $.extend({
		show: true, // 调用后立即显示
		width: 600, // 弹窗的宽度，若为0则不改变
		top: 100,
		left: 0,
		fixChildrenPos : false,
		focus: false // the jQuery selector, the dom element will be focus
	}, o);
	var $div = $(this).css({position:'absolute', zIndex:20000}).addClass('window_box');
    if (o.width>0)
    	$div.width(o.width);
	var de = document.documentElement;
    var w = self.innerWidth || (de && de.clientWidth) || document.body.clientWidth;
	var bodyWidth = $('body').width();
	if (bodyWidth > 0 && bodyWidth < w) {
		w = bodyWidth;
	}
	var width = $(this).width();
    $div.css({
		top: $(document).scrollTop() + o.top,
        left: (w - width) / 2 + o.left
    });
    if (o.fixChildrenPos) {
    	var $alphaDiv = $div.find('div.window_alpha');
    	if ($alphaDiv.size()>0)	{
    		$alphaDiv.css({width:$div.width()+10, height:$div.height()+10});
    	}
    	var $contDiv = $div.find('div.window_cont');
    	if ($contDiv.size()>0)	{
    		$contDiv.css({width:$div.width()-10, height:$div.height()-10});
    	}
    }
    if( o.focus ){
		window.setTimeout(function(){
			$(o.focus, $div).focus();
		}, 0);
	}
	if( o.show ){
		$div.show();
	}
	return $div;
};
/**
 * a jquery plugin
 * 加载一个iframe的内容，并将它以弹窗的形式显示在页面的中
 * 
 * usage:
 * 	  $.loadIframePopPanel();
 * @param {Object} o
 */
$.loadIframePopPanel = function(o){
	o = $.extend({
		title : '提示消息',
		contentUrl : '', // required
		show : true, // 调用后立即显示
		showCloseButton : true, // 是否显示关闭按钮
		withOverlay : true,
		width : 600,
		className : '', // 给容纳iframe元素的div加上css class
		hideTitleBar : false, // 是否默认隐藏title bar(title文字 and 关闭按钮)
		overlayOpacity : 0.6,
		ue3 : false, // 是否用ue3风格的样式
		iframe_scrolling : 'no',
		height : 0, // 指定iframe的高度 if > 0
		loading_image : '/images/common/loading.gif'
	}, o);
	var _is_ie6 = $.browser.msie && $.browser.version<7;
	var img = o.loading_image ? '<div id="iframe_panel_loading" style="text-align:center;padding:25px 0"><img src="' + o.loading_image + '" /></div>' : '';
	var html = '<dl><dt' + (o.hideTitleBar ? ' style="display:none"' : '') + '><b id="iframe_panel_title">' + o.title + '</b><a id="iframe_panel_close" href="#" onclick="return false;" class="closeWin" style="display:none">关闭</a></dt><dd>' + img + '<iframe id="iframe_panel" height="1" frameborder="0" scrolling="' + o.iframe_scrolling + '" allowtransparency="true" hspace="0" vspace="0" marginheight="0" marginwidth="0"></iframe></dd></dl>';
	$('#iframe_panel_wrapper').remove();
	var div = document.createElement('div');
	div.id = 'iframe_panel_wrapper';
	if ( o.className ) {
		div.className = o.className;
	}
	var $div = $(div);
	var div_html = '<div class="window_cont">' + html + '</div>';
	if ( o.ue3 ) {
		div_html = ' <b class="xtop"><b class="xb1"></b><b class="xb2"></b><b class="xb3"></b><b class="xb4"></b></b>' 
		+ div_html + '<b class="xbottom"><b class="xb4"></b><b class="xb3"></b><b class="xb2"></b><b class="xb1"></b></b>';
	}
	div_html += '<div id="iframe_panel_alpha_div" class="window_alpha">&nbsp;</div>';
	div.innerHTML = div_html;
	$('body').append($div);
	var $iframe = $('#iframe_panel');
	if ($.browser.mozilla) {
		// fix firefox's bug
		var iframeObj = document.getElementById('iframe_panel');
		if (iframeObj) {
			iframeObj.contentWindow.location=o.contentUrl;
			iframeObj.width=o.width;
		}
	} else {
		$iframe.attr({width:o.width, src:o.contentUrl});
	}
	
	$iframe.bind('doPanelResize', function(){
		$('#iframe_panel_loading').hide();
		var obj = this;
		if (o.height>0) {
			obj.height = o.height;
		}
		else {
			
			if (obj.contentDocument && obj.contentDocument.body.offsetHeight) {
				obj.height = obj.contentDocument.body.offsetHeight+20;
			} else if (obj.Document && obj.Document.body.scrollHeight) {
		  		obj.height = obj.Document.body.scrollHeight+20;
			}
		}
		$.browser.mozilla && obj.contentWindow.scrollTo(0, 0); // fix ff's bug
		$.iframePopPanelFixAlphaDivSize();
	});
	
	$iframe.load(function(){
		$(this).trigger('doPanelResize');
	});
	// 窗口rewize的时候，重新定位div的位置居中
	var div_width = o.ue3 ? o.width + 2 : o.width;
	$(window).resize(function(){
		$div.asPopPanel({show:false, width:div_width});
	});
	// 调整半透明层
	$.iframePopPanelFixAlphaDivSize = function() {
		$('#iframe_panel_alpha_div').css({width:$div.width()+10, height:$div.height()+(_is_ie6?5:10)});
	};
	// 关闭按钮处理
	// 方式1：关闭弹出层
	$.iframePopPanelCloseHandler_close = function(){
		$div.hide();
		o.withOverlay && overlayHelper.hide();
	};
	// 方式2：关闭弹出层，并刷新当前页
	$.iframePopPanelCloseHandler_refresh = function(){
		$.iframePopPanelCloseHandler_close();
		window.location.reload();
	};
	// 默认直接关闭
	$.iframePopPanelCloseHandler = $.iframePopPanelCloseHandler_close;
	var $closeBtn = $('#iframe_panel_close').click(function(){
		if ($.isFunction($.iframePopPanelCloseHandler)) {
			$.iframePopPanelCloseHandler.apply();
		}
		return false;
	});
	o.showCloseButton && $closeBtn.show();
	$div.asPopPanel({show:o.show, width:div_width});
	$.iframePopPanelFixAlphaDivSize();
	o.withOverlay && overlayHelper.show({opacity:o.overlayOpacity});
	$.iframePopPanelIsShow = true;
	return $div;
};
$.hideIframePopPanel = function(o){
	o = $.extend({
		withOverlay : true,
		dummy : ''
	}, o);
	$('#iframe_panel_wrapper').hide();
	o.withOverlay && overlayHelper.hide();
	$.iframePopPanelIsShow = false;
};
$.setIframePopPanelOptions = function(o){
	o = $.extend({
		title : null, // 弹窗标题
		width : null,  // 弹窗宽度
		showCloseButton : null, // 是否显示关闭按钮
		refreshOnClose : null, // 点击关闭时，刷新页面
		ue3 : false
	}, o);
	var div_width = o.ue3 ? o.width + 20 : o.width;
	if (o.title!==null)
		$('#iframe_panel_title').html(o.title);
	if (o.width!==null)
		$('#iframe_panel_wrapper, #iframe_panel').width(div_width), 
		$('#iframe_panel_wrapper').asPopPanel({width:div_width}),
		$.iframePopPanelFixAlphaDivSize();
	if (o.showCloseButton===true) {
		$('#iframe_panel_close').show();
	} else if (o.showCloseButton===false) {
		$('#iframe_panel_close').hide();
	}
	if (o.refreshOnClose===true) {
		$.iframePopPanelCloseHandler = $.iframePopPanelCloseHandler_refresh;
	}
};


/**
 * a jquery plugin
 * 调整div的位置，使之显示在某个target对象的底部，作为一个弹窗菜单
 * （目前用在了房产大学列表页的更多大学弹窗效果）
 * @author wg
 * usage:
 * 	  $('#panel').asRelatedPanel({targetObj: $('#targetLink')});
 * @param {Object} o
 */
$.fn.asRelatedPanel = function(o) {
	o = $.extend({
		targetObj: null, // required, dom目标的jQuery对象
		adjust:{},
		show: true
	}, o);
	var $target = o.targetObj;
    var $this = $(this);
    var offset = $target.offset();
	var $wrapper = $('#wrapper');
	if ($wrapper.size() > 0) {
		offset.left -= $wrapper.offset().left;
	}
	offset.left -= $this.width() / 2;
	offset.top += $target.height() + 3;
	offset.left = Math.max(0, offset.left);
	var w = window.innerWidth || document.body && document.body.clientWidth;
	if (w>0) {
		var pw = $this.width();
		if ( pw + offset.left > w ) {
			offset.left = Math.max(w - pw - 30, 30);
		}
	}
	$this.css({left:offset.left+(o.adjust.left||0), top:offset.top+(o.adjust.top||0)});
	if( o.show ){
		$this.show();
	}
	return $this;
};
