var M_arrayPageSize = new Array(0,0,0,0);
var M_arrayPageScroll = new Array(0,0,0,0);

var frm = "";
var popId;
var popContent = "";
var M_height = 0;
var M_offset = {};
var d_w = 50;
var minHeight = 250;
var fheight = 0;
var M_timeout;
var M_out = false;
/*elements that can not covered: 
	embed flash without 'wmode = transparent'
*/
var slctobj = "";


jQuery.fn.outerHTML = function() {
	return $('<div>').append( this.eq(0).clone() ).html();
};

function M_getPageSize(){
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}

	M_arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return M_arrayPageSize;
}


function M_getPageScroll(){

	var yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
	}

	M_arrayPageScroll = new Array('',yScroll) 
	return M_arrayPageScroll;
}



function M_location(frm, below, b_offset){
	if(M_height > 0 ){
		fheight = M_height;
	}else{
		try{
			fheight = frm.height();
		} catch(e) {
			fheight = minHeight;
		}
		fheight = Math.max($('#content____layer').height(), fheight);
	}
	if(popId){
			fwidth = $('#' + popId).width();
		}
	if(M_arrayPageSize[3] == undefined) {
		M_arrayPageSize[3] = 0;
	}
	var frmLeft = 0;
	var frmTop = 0;
	/*if(follow){
		frmLeft = M_offset.x;
		frmTop = M_offset.y;
		if(M_arrayPageSize[2] - M_offset.x - d_w <= fwidth && M_arrayPageSize[2] >= fwidth){
			frmLeft = M_arrayPageSize[2] - d_w - fwidth;
		}
		frmTop = $.browser.msie ? (M_offset.y + M_arrayPageScroll[1]) : M_offset.y;
		if(M_arrayPageSize[3] - M_offset.y <= Math.max(fheight, minHeight) && M_arrayPageSize[3] >= minHeight){
			
			frmTop =  M_arrayPageSize[3] + M_arrayPageScroll[1] - d_w*4 - fheight;
		}
	}*/
	if(below){
		frmLeft = b_offset.left < M_arrayPageSize[2] - fwidth - d_w ? b_offset.left : M_arrayPageSize[2] - fwidth - d_w;
		frmTop = b_offset.top < M_arrayPageSize[3] + M_arrayPageScroll[1] - minHeight ? b_offset.top : M_arrayPageSize[3] +  M_arrayPageScroll[1] - minHeight - d_w;
	}else{
		frmLeft = (M_arrayPageSize[0] - fwidth) / 2;
		frmTop = M_arrayPageScroll[1] + ((M_arrayPageSize[3] - fheight)/ 2);
		frmTop = frmTop > 0 ? frmTop : 50;
	}
	$('#content____layer').css({
		position:	"absolute",
		zIndex:		"65533"
	});
	frm.css({
		left:		frmLeft + "px", 
		top:		"115.5px", 
		position:	"absolute", 
		zIndex:		"65535"
	});
	
	if($.browser.msie &&  /6.0/.test(navigator.userAgent)){
		var m_iframe = $("<iframe></iframe>").attr("id", "_______m_iframe").css({
			position:			"absolute", 
			zIndex:				"65534",
			left:				frmLeft + "px",
			top:				frmTop + "px",
			height:				fheight,
			width:				fwidth + 16
		}).css("opacity", "0").appendTo($("body"));
	}
}

function M_close(){
	M_out = false;
	if(popId != undefined && popId != "M____window"){
		$('#content____layer').add($('#' + popId)).remove();
		var store = $("<div></div>");
		if(popContent){
			store.html(popContent).attr("id", popId).appendTo($("body")).hide();
		}
	}else{
		$('#content____layer').remove();
	}
	var temp_layer = $("#_______overlayer").add($('#M____window')).add($('#_______m_iframe'));
	if(temp_layer){
		temp_layer.remove();
	}
	slctobj.css("visibility","visible");
}

function M_init(){
	M_arrayPageScroll = M_getPageScroll();
	M_arrayPageSize = M_getPageSize();
	//hide embed flash without attr wmode != transparent
	//slctobj = $("embed[wmode!='transparent']") does not work???
	slctobj = $('embed').filter(function(i){
		return $(this).attr("wmode") != "transparent";
	});
}

function M_showOverlayer(){
	var offArr = arguments[0];
	var t = l = 0;
	if(offArr){
		t = offArr[0];
		l = offArr[1];
	}
	var layer = $("<div></div>").attr("id", "_______overlayer").css({
		position:			"absolute", 
		zIndex:				"65534",
		top:				t,
		left:				l,
		width:				self.innerHeight ? "100%" :  M_arrayPageSize[0]+"px",
		height:				(self.innerHeight ? M_arrayPageSize[1] : M_arrayPageSize[1] + 30)+ "px",
		backgroundColor:	"#000"
	}).css("opacity", "0.2").appendTo($("body"));
}

M_window = function(defaults){
	M_init();
	M_close();
	
	if(defaults.modal){
		if(!defaults.modalOffset){
			M_showOverlayer();
		}else{
			M_showOverlayer(defaults.modalOffset);
		}
	}
	if(defaults.height){
		M_height = defaults.height;
	}
	defaults.follow = defaults.follow || false;
	defaults.below = defaults.below || false;
	defaults.below_offset = {};
	defaults.below_offset.left = defaults.below_left || 0;
	defaults.below_offset.top = defaults.below_top || 0;
	defaults.autohide = defaults.autohide || false;
	defaults.e = defaults.source || "";
	M_offset.x = defaults.e.pageX||defaults.e.clientX;
	M_offset.y = defaults.e.pageY||defaults.e.clientY;
	defaults.title = defaults.title || "信息提示";
	defaults.hidetitle = defaults.hidetitle || false;
	defaults.close = defaults.close ? "<span class=\"w_close\"><a href=\"###\"></a></span>" : "";
	defaults.id = defaults.id || "M____window";
	defaults.content = defaults.content || $('#' + defaults.id).html();
	defaults.callback = defaults.callback;
	defaults.mclass = defaults.mclass;
	
	popId = defaults.id;
	popContent = $('#' + defaults.id).html();
	$('#' + defaults.id).remove();
	
	$('body').append("<div id='content____layer'></div>");
	frm = $('#content____layer');
	
	var titlecomp = !defaults.hidetitle ? "<h3>" + defaults.close + defaults.title + "</h3>" : "";
	var m_class = defaults.below ? "m_window m_friend_alt" : "m_window";
	m_class = defaults.mclass ? "m_window " + defaults.mclass : "m_window";
	frm_content = "<div id='" + defaults.id + "' class='" + m_class + "'>" + titlecomp + defaults.content + "</div>"
	frm.html(frm_content);
	M_location(frm, defaults.below, defaults.below_offset);
	
	$('.w_close a').click(function(e){
		M_close();
		if(defaults.callback){
			defaults.callback();
		}
		e.preventDefault();
	})
	if(defaults.autohide){
		$('.m_window').hover(
		function(){
			M_out = true;
			window.clearTimeout(M_timeout);
		},
		//function(){M_close();setTimeout(M_close, 1000);})
		function(){
			window.clearTimeout(M_timeout);
			M_timeout = window.setTimeout(M_close, 2);}
		)
	}
	
	$(window).keydown(function(e){
		if(e.keyCode == 27){
			$('.w_close a').trigger('click');
		}
	})
	$("#" + defaults.id + " select").show();
	slctobj.css("visibility","hidden");
}

var M_c = 0;
function delete_confirm(obj, content){
	if(M_confirm(obj, content)){
		return true;
	}else{
		return false;
	}
}

function M_confirm(obj, content) {

	if(M_c == 1){
		M_confirm_close('1');
	}
	var offset = $(obj).offset();
	var popoffset = 30;
	var popheight = 80;
	M_arrayPageScroll = M_getPageScroll();
	M_arrayPageSize = M_getPageSize();
	
	//fix browse window too narrow to display whole part
	var left = M_arrayPageSize[0] > 960 ? offset.left - 120 : offset.left;
	//fix 
	var top = offset.top - M_arrayPageScroll[1] > M_arrayPageSize[3]/2 + popheight ? (offset.top - popheight - popoffset) : (offset.top + popoffset);
	
	str = '<a href="' + $(obj).attr('href') + '" id="s_href" style="display:none;">s</a><div class="m_checkout" style="z-index:64444; position:absolute; left:' + left + 'px; top:' + top + 'px" id="t"><div class="checkcout_content">' + content + '</div><div class="w_option"><input type="button" class="m_btn" onclick="return M_confirm_close(\'' + $(obj).attr('href') + '\');" value="确定"><input type="button" class="m_cancel" onclick="return M_confirm_close(\'1\');" value="取消"></div></div>';
	$('body').append(str);
	M_c = 1;
	return false;
}

function M_confirm_close(obj) {
	$('#t').remove();
	
	M_c = 0;
	if(obj != 1){
		if(document.all) {
			document.getElementById("s_href").click();
		} else {
			location.href = obj;
		}
	}
	$('#s_href').remove();
	return true;
}