/*
 * 弹出框页面类(支持内嵌内容、iframe、ajax、模态)
 * modify from thickbox-3.1 by yuql 
 * @date 2009.8.11
 * 使用方法：
 * 1、创建实例，并初始化
 *		var page=new popup_page(caption,url);
 * 2、调用公有函数显示
 *		page.show_popup_page();
 * 3、调用静态方法关闭
 *		popup_page.tb_remove();
 * 注意：从URL设置需要的类型，并设置宽和高（默认宽高为630*440）
 *		显示当前页面内嵌内容：
 *			href="#TB_inline?height=155&width=300&inlineId=ContentID"
 *		iframe:
 *			href="iframe.html?TB_iframe=true&height=300&width=500"
 *		ajax:
 *			href="ajax.html?height=200&width=300"
 *		model:(需自行调用静态方法popup_page.tb_remove()关闭)
 *			href="ajax.html?height=85&width=250&modal=true" 
 *		
*/

function popup_page(param_caption , param_url){
	var _this = this;	//避免JS中this变化导致的错误
	var caption = "";
	var url = "";

	//构造函数
	var init = function(){
		caption = param_caption;
		url = param_url;
	}

	//公有函数
	_this.show_popup_page = function(){
		try {
			if (typeof document.body.style.maxHeight === "undefined") {//if IE 6
				$("body","html").css({height: "100%", width: "100%"});
				$("html").css("overflow","hidden");
				if (document.getElementById("TB_HideSelect") === null) {//iframe to hide select elements in ie6
					$("body").prepend("<iframe id='TB_HideSelect'></iframe><div id='TB_overlay'></div><div id='TB_window'></div>");
					$("#TB_overlay").click(popup_page.tb_remove);
				}
			}else{//all others
				if(document.getElementById("TB_overlay") === null){
					$("body").prepend("<div id='TB_overlay'></div><div id='TB_window'></div>");
					$("#TB_overlay").click(popup_page.tb_remove);
				}
			}
			$("#TB_overlay").addClass("TB_overlayBG");//use background and opacity
			
			if(caption===null){caption="";}

			var baseURL;
			if(url.indexOf("?")!==-1){ //ff there is a query string involved
				baseURL = url.substr(0, url.indexOf("?"));
		    }else{ 
				baseURL = url;
		    }

		    var queryString = url.replace(/^[^\?]+\??/,'');
			var params = tb_parseQuery( queryString );

				TB_WIDTH = (params['width']*1) + 30 || 630; //defaults to 630 if no paramaters were added to URL
				TB_HEIGHT = (params['height']*1) + 40 || 440; //defaults to 440 if no paramaters were added to URL
				ajaxContentW = TB_WIDTH - 30;
				ajaxContentH = TB_HEIGHT - 45;
				
				if(url.indexOf('TB_iframe') != -1){// either iframe or ajax window		
						urlNoQuery = url.split('TB_');
						$("#TB_iframeContent").remove();
						if(params['modal'] != "true"){//iframe no modal
							$("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='Close'>关闭</a> 或 Esc</div></div><iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;' > </iframe>");
						}else{//iframe modal
						$("#TB_overlay").unbind();
							$("#TB_window").append("<iframe frameborder='0' hspace='0' src='"+urlNoQuery[0]+"' id='TB_iframeContent' name='TB_iframeContent"+Math.round(Math.random()*1000)+"' onload='tb_showIframe()' style='width:"+(ajaxContentW + 29)+"px;height:"+(ajaxContentH + 17)+"px;'> </iframe>");
						}
				}else{// not an iframe, ajax
						if($("#TB_window").css("display") != "block"){
							if(params['modal'] != "true"){//ajax no modal
							$("#TB_window").append("<div id='TB_title'><div id='TB_ajaxWindowTitle'>"+caption+"</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton'>关闭</a> 或 Esc</div></div><div id='TB_ajaxContent' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px'></div>");
							}else{//ajax modal
							$("#TB_overlay").unbind();
							$("#TB_window").append("<div id='TB_ajaxContent' class='TB_modal' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>");	
							}
						}else{//this means the window is already up, we are just loading new content via ajax
							$("#TB_ajaxContent")[0].style.width = ajaxContentW +"px";
							$("#TB_ajaxContent")[0].style.height = ajaxContentH +"px";
							$("#TB_ajaxContent")[0].scrollTop = 0;
							$("#TB_ajaxWindowTitle").html(caption);
						}
				}
				
				$("#TB_closeWindowButton").click(popup_page.tb_remove);
				
					if(url.indexOf('TB_inline') != -1){	
						$("#TB_ajaxContent").append($('#' + params['inlineId']).children());
						$("#TB_window").unload(function () {
							$('#' + params['inlineId']).append( $("#TB_ajaxContent").children() ); // move elements back when you're finished
						});
						tb_position();
						$("#TB_window").css({display:"block"}); 
					}else if(url.indexOf('TB_iframe') != -1){
						tb_position();
						if($.browser.safari){//safari needs help because it will not fire iframe onload
							$("#TB_window").css({display:"block"});
						}
					}else{			
						$("#TB_ajaxContent").load(url += "&random=" + (new Date().getTime()),function(){//to do a post change this load method
							tb_position();
							$("#TB_window").css({display:"block"});
						});			
					}

			if(!params['modal']){
				document.onkeyup = function(e){ 	
					if (e == null) { // ie
						keycode = event.keyCode;
					} else { // mozilla
						keycode = e.which;
					}
					if(keycode == 27){ // close
						popup_page.tb_remove();
					}	
				};
			}
			
		} catch(e) {
			//nothing here
		}
	}


	var tb_showIframe = function(){
		$("#TB_window").css({display:"block"});
	}

	var tb_position = function(){
	$("#TB_window").css({marginLeft: '-' + parseInt((TB_WIDTH / 2),10) + 'px', width: TB_WIDTH + 'px'});
		if ( !(jQuery.browser.msie && jQuery.browser.version < 7)) { // take away IE6
			$("#TB_window").css({marginTop: '-' + parseInt((TB_HEIGHT / 2),10) + 'px'});
		}
	}

	var tb_parseQuery = function( query ) {
	   var Params = {};
	   if ( ! query ) {return Params;}// return empty object
	   var Pairs = query.split(/[;&]/);
	   for ( var i = 0; i < Pairs.length; i++ ) {
		  var KeyVal = Pairs[i].split('=');
		  if ( ! KeyVal || KeyVal.length != 2 ) {continue;}
		  var key = unescape( KeyVal[0] );
		  var val = unescape( KeyVal[1] );
		  val = val.replace(/\+/g, ' ');
		  Params[key] = val;
	   }
	   return Params;
	}

	init();
}
//popup_page的静态方法
popup_page.tb_remove = function(){
	$("#TB_closeWindowButton").unbind("click");
	$("#TB_window").fadeOut("fast",function(){$('#TB_window,#TB_overlay,#TB_HideSelect').trigger("unload").unbind().remove();});
	if (typeof document.body.style.maxHeight == "undefined") {//if IE 6
		$("body","html").css({height: "auto", width: "auto"});
		$("html").css("overflow","");
	}
	document.onkeydown = "";
	document.onkeyup = "";
	return false;
}