﻿/**
 * ymPrompt.js 消息提示元件
 * @author netman8410@163.com
 */
//<meta http-equiv="X-UA-Compatible" content="IE=7" />  IE8透明度解決方案
//var location=window.location; 避免iframe跳轉解決方案
(function() {
	if (window.ymPrompt) return;
	var objType = function(type) {
		return new Function('o', "return Object.prototype.toString.call(o)=='[object " + type + "]'")
	}; //判斷元素類型
	var isArray = objType('Array'),
	isObj = objType('Object'); //判斷元素是否陣列、object
	window.ymPrompt = {
		version: '4.0',
		pubDate: '2009-03-02',
		apply: function(o, c, d) {
			if (d) ymPrompt.apply(o, d);
			if (o && c && isObj(c)) for (var p in c) o[p] = c[p];
			return o;
		},
		eventList: []
	};
	/*初始化可能在頁面載入完成調用的介面，防止外部調用失敗。_initFn:緩存初始調用傳入的參數*/
	var initFn = ['setDefaultCfg', 'show'], _initFn = {}, t;
	while (t = initFn.shift()) ymPrompt[t] = eval('0,function(){_initFn.' + t + '?_initFn.' + t + '.push(arguments):(_initFn.' + t + '=[arguments])}');
	/*以下為公用函數及變數*/
	var isIE = !+'\v1'; //IE流覽器
	var isCompat = document.compatMode == 'CSS1Compat';	//流覽器當前解釋模式
	var IE6 = isIE && /MSIE (\d)\./.test(navigator.userAgent) && parseInt(RegExp.$1) < 7; //IE6以下需要用iframe來遮罩
	var useFixed = !isIE || (!IE6 && isCompat); //滾動時，IE7+（標準模式）及其它流覽器使用Fixed定位
	var $ = function(id) {return document.getElementById(id)}; //獲取元素
	var $height = function(obj) {return parseInt(obj.style.height) || obj.offsetHeight}; //獲取元素高度
	var addEvent = (function() {
		return new Function('env', 'fn', 'obj', 'obj=obj||document;' + (window.attachEvent ? "obj.attachEvent('on'+env,fn)": 'obj.addEventListener(env,fn,false)') + ';ymPrompt.eventList.push([env,fn,obj])')
	})(); //事件綁定
	var detachEvent = (function() {
		return new Function('env', 'fn', 'obj', 'obj=obj||document;' + (window.attachEvent ? "obj.detachEvent('on'+env,fn)": 'obj.removeEventListener(env,fn,false)'))
	})(); //取消事件綁定

	//為元素的特定樣式屬性設定值
	var setStyle = function(el, n, v) {
		if (!el) return;
		if (isObj(n)) {
			for (var i in n) setStyle(el, i, n[i]);
			return;
		}
		/*dom陣列或dom集合*/
		if (isArray(el) || /htmlcollection|nodelist/i.test('' + el)) {
			for (var i = el.length - 1; i >= 0; i--) setStyle(el[i], n, v);
			return;
		}
		try {
			el.style[n] = v
		} catch(e) {}
	};
	/*----------------和業務有關的公用函數-----------------*/
	var btnIndex = 0, btnCache, seed = 0; //當前焦點的按鈕的索引、當前存在的按鈕、id種子
	/*創建按鈕*/
	var mkBtn = function(txt, sign, autoClose, id) {
		if (!txt) return;
		if (isArray(txt)) {
			/*無效按鈕刪除*/
			var item, t = [],
			dftBtn = {
				OK: [curCfg.okTxt, 'ok'],
				CANCEL: [curCfg.cancelTxt, 'cancel']
			};
			while (txt.length)(item = txt.shift()) && t[t.push(mkBtn.apply(null, dftBtn[item] || item)) - 1] || t.pop();
			return t;
		}
		id = id || 'ymPrompt_btn_' + seed++;
		autoClose = autoClose == undefined ? 'undefined': !!autoClose;
		return {
			id: id,
			html: "<input type='button' id='" + id + "' onclick='ymPrompt.doHandler(\"" + sign + "\"," + autoClose + ")' style='cursor:pointer' class='btnStyle handler' value='" + txt + "' />"
		};
	};
	/*生成按鈕組合的html*/
	var joinBtn = function(btn) {
		if (!btn) return btnCache = '';
		if (!isArray(btn)) btn = [btn];
		if (!btn.length) return btnCache = '';
		btnCache = btn.concat();
		var html = [];
		while (btn.length) html.push(btn.shift().html);
		return html.join('&nbsp;&nbsp;');
	}
	/*默認顯示配置及用戶當前配置*/
	var dftCfg = {
		message: '內容',		//訊息方塊內容
		width: 320,				//訊息方塊寬度
		height: 185,			//訊息方塊高度
		title: '標題',			//訊息方塊標題
		handler: function() {},	//回調事件，默認空函數
		maskAlphaColor: '#000',	//遮罩透明色，默認黑色
		maskAlpha: 0.1,			//遮罩透明度，默認0.1
		iframe: false,			//iframe模式，默認不是
		icoCls: '',				//訊息方塊左側圖示，默認無
		btn: null,				//訊息方塊顯示的按鈕，默認無
		autoClose: true,		//點擊關閉、確定等按鈕是否自動關閉，默認自動關閉
		fixPosition: true,		//是否隨捲軸滾動，默認是
		dragOut: false,			//是否允許拖出視窗範圍，默認不允許
		titleBar: true,			//是否顯示標題欄，默認顯示
		showMask: true,			//是否顯示遮罩，默認顯示
		winPos: 'c',			//訊息方塊彈出的位置，默認在頁面中間
		winAlpha: 0.8,			//拖動時訊息方塊的透明度，默認0.8
		closeBtn: true,			//是否顯示關閉按鈕，默認顯示
		showShadow: false,		//是否顯示訊息方塊的陰影，默認不顯示（IE支援）
		useSlide: false,		//是否啟用訊息方塊的淡入淡出效果，默認不啟用
		slideCfg: {				//淡入淡出效果配置，useSlide=true時有效
			increment: 0.3,		//每次漸變的值，值範圍0-1
			interval: 50		//漸變的速度
		},
		closeTxt: '關閉',		//關閉按鈕的提示文本
		okTxt: ' 確 定 ',		//確定按鈕的提示文本
		cancelTxt: ' 取 消 ',	//取消按鈕的提示文本
		msgCls: 'ym-content',	//訊息方塊內容的class名稱，用於自定義驗屍官，默認為ym-content,僅在iframe:false時有效
		minBtn: false,			//是否顯示最小化按鈕，默認不顯示
		minTxt: '最小化',		//最小化按鈕的提示文本
		maxBtn: false,			//是否顯示最大化按鈕，默認不顯示
		maxTxt: '最大化',		//最大化按鈕的提示文本
		allowSelect:false,		//是否允許選擇訊息方塊內容，默認不允許
		allowRightMenu:false	//是否允許在訊息方塊使用右鍵，默認不允許
	},curCfg = {};

	/*開始解析*/
	(function() {
		var rootEl = document.body, callee = arguments.callee;
		if (!rootEl || typeof rootEl != 'object') return addEvent('load', callee, window); //等待頁面載入完成
		/*防止在IE下因document未就緒而報“IE無法打開INTERNET站點的錯”的錯*/
		if (isIE && document.readyState != 'complete') return addEvent('readystatechange',function() {
			document.readyState == "complete"&&callee()
		});

		rootEl = isCompat ? document.documentElement: rootEl; //根據html Doctype獲取html根節點，以相容非xhtml的頁面
		var frameset = document.getElementsByTagName('frameset').length; //是否frameset頁面
		if (!isIE && frameset) return; //frameset頁面且不是IE則直接返回，否則會出現錯誤。
		/*獲取scrollLeft和scrollTop，在fixed定位時返回0，0*/
		var getScrollPos = function() {
			return curCfg.fixPosition && useFixed ? [0, 0] : [rootEl.scrollLeft, rootEl.scrollTop];
		}
		/*保存視窗定位資訊，彈出視窗相對頁面左上角的座標資訊*/
		var saveWinInfo = function() {
			var pos = getScrollPos();
			ymPrompt.apply(dragVar, {
				_offX: parseInt(ym_win.style.left) - pos[0],
				_offY: parseInt(ym_win.style.top) - pos[1]
			});
		};
		/*-------------------------創建彈窗html-------------------*/
		var maskStyle = 'position:absolute;top:0;left:0;display:none;text-align:center';
		var div = document.createElement('div');
		div.innerHTML = [
		/*遮罩*/
		"<div id='maskLevel' style=\'" + maskStyle + ';z-index:10000;\'></div>', IE6 ? ("<iframe id='maskIframe' src='javascript:false' style='" + maskStyle + ";z-index:9999;filter:alpha(opacity=0);opacity:0'></iframe>") : '',
		/*表單*/
		"<div id='ym-window' style='position:absolute;z-index:10001;display:none'>", IE6 ? "<iframe src='javascript:false' style='width:100%;height:100%;position:absolute;top:0;left:0;z-index:-1'></iframe>": '', "<div class='ym-tl' id='ym-tl'><div class='ym-tr'><div class='ym-tc' style='cursor:move;'><div class='ym-header-text'></div><div class='ym-header-tools'>", "<div class='ymPrompt_min' title='最小化'><strong>0</strong></div>", "<div class='ymPrompt_max' title='最大化'><strong>1</strong></div>", "<div class='ymPrompt_close' title='關閉'><strong>r</strong></div>", "</div></div></div></div>", "<div class='ym-ml' id='ym-ml'><div class='ym-mr'><div class='ym-mc'><div class='ym-body' style='position:relative'></div></div></div></div>", "<div class='ym-ml' id='ym-btnl'><div class='ym-mr'><div class='ym-btn'></div></div></div>", "<div class='ym-bl' id='ym-bl'><div class='ym-br'><div class='ym-bc'></div></div></div>", "</div>",
		/*陰影*/
		isIE ? "<div id='ym-shadow' style='position:absolute;z-index:10000;background:#808080;filter:alpha(opacity=80) progid:DXImageTransform.Microsoft.Blur(pixelradius=2);display:none'></div>": ''].join('');
		document.body.appendChild(div);
		/*視窗上的物件*/
		/*mask、window*/
		var maskLevel = $('maskLevel');
		var ym_win = $('ym-window');
		var ym_shadow = $('ym-shadow');
		var ym_wins;
		/*header*/
		var ym_headbox = $('ym-tl');
		var ym_head = ym_headbox.firstChild.firstChild;
		var ym_hText = ym_head.firstChild;
		var ym_hTool = ym_hText.nextSibling;
		/*content*/
		var ym_body = $('ym-ml').firstChild.firstChild.firstChild;
		/*button*/
		var ym_btn = $('ym-btnl');
		var ym_btnContent = ym_btn.firstChild.firstChild;
		/*bottom*/
		var ym_bottom = $('ym-bl');
		var maskEl = [maskLevel]; //遮罩元素
		IE6 && maskEl.push($('maskIframe'));
		var ym_ico = ym_hTool.childNodes; //右上角的圖示
		var dragVar = {};
		/*視窗的最大化最小化核心功能實現*/
		var cur_state = 'normal',
		cur_cord = [0, 0]; //cur_cord記錄最大化前視窗的座標
		var cal_cord = function() {
			var pos = getScrollPos();
			cur_cord = [parseInt(ym_win.style.left) - pos[0], parseInt(ym_win.style.top) - pos[1]]
		}; //保存座標(相對頁面左上角座標)
		/*從常態到最大化*/
		var doMax = function() {
			cal_cord(); //記錄座標，便於還原時使用
			cur_state = 'max';
			ym_ico[1].firstChild.innerHTML = '2';
			ym_ico[1].className = 'ymPrompt_normal';
			setWinSize(rootEl.clientWidth, rootEl.clientHeight, [0, 0]);
		};
		/*從正常到最小化*/
		var doMin = function() {
			cal_cord();
			cur_state = 'min';
			ym_ico[0].firstChild.innerHTML = '2';
			ym_ico[0].className = 'ymPrompt_normal';
			setWinSize(0, $height(ym_headbox), cur_cord); //定位在當前座標
		};
		var doNormal = function(init) { //init=true,彈出時調用該函數
			! init && cur_state == 'min' && cal_cord(); //從最小化過來重新獲取座標
			cur_state = 'normal';
			ym_ico[0].firstChild.innerHTML = '0';
			ym_ico[1].firstChild.innerHTML = '1';
			ym_ico[0].className = 'ymPrompt_min';
			ym_ico[1].className = 'ymPrompt_max';
			setWinSize.apply(this, init ? [] : [0, 0, cur_cord]);
		};
		var max, min;
		addEvent('click', min = function() {
			cur_state != 'normal' ? doNormal() : doMin();
		},
		ym_ico[0]); //最小化
		addEvent('click', max = function() {
			cur_state != 'normal' ? doNormal() : doMax();
		},
		ym_ico[1]); //最大化
		addEvent('dblclick', function(e) {
			/*如果操作元素是最大最小關閉按鈕則不進行此處理*/
			curCfg.maxBtn && (e.srcElement || e.target).parentNode != ym_hTool && max()
		},
		ym_head);
		addEvent('click', function() {
			ymPrompt.doHandler('close');
		},
		ym_ico[2]); //關閉
		/*視窗最大化最小化核心部分結束*/
		/*getWinSize取得頁面實際大小*/
		var getWinSize = function() {
			return [Math.max(rootEl.scrollWidth, rootEl.clientWidth), Math.max(rootEl.scrollHeight, rootEl.clientHeight)]
		};
		var winSize = getWinSize(); //保存當前頁面的實際大小
		/*事件綁定部分*/
		var bindEl = ym_head.setCapture && ym_head; //綁定拖放事件的物件，只有Ie下bindEl有效
		/*表單透明度控制*/
		var filterWin = function(v) {
			/*滑鼠按下時取消表單的透明度，IE標準模式下透明度為1則直接清除透明屬性，防止iframe視窗不能拖動捲軸*/
			! frameset && setStyle(ym_win, v == 1 && isCompat ? {
				filter: '',
				opacity: ''
			}: {
				filter: 'Alpha(opacity=' + v * 100 + ')',
				opacity: v
			});
		};
		/*mousemove事件*/
		var mEvent = function(e) {
			var sLeft = dragVar.offX + e.clientX;
			var sTop = dragVar.offY + e.clientY;
			if (!curCfg.dragOut) { //頁面可見區域內拖動
				var pos = getScrollPos(),
				sl = pos[0],
				st = pos[1];
				sLeft = Math.min(Math.max(sLeft, sl), rootEl.clientWidth - ym_win.offsetWidth + sl);
				sTop = Math.min(Math.max(sTop, st), rootEl.clientHeight - ym_win.offsetHeight + st);
			} else if (curCfg.showMask && '' + winSize != '' + getWinSize()) //及時調整遮罩大小
			resizeMask(true);
			setStyle(ym_wins, {
				left: sLeft + 'px',
				top: sTop + 'px'
			});
		};
		/*mouseup事件*/
		var uEvent = function() {
			filterWin(1);
			detachEvent("mousemove", mEvent, bindEl);
			detachEvent("mouseup", uEvent, bindEl);
			saveWinInfo(); //保存當前窗口的位置
			curCfg.iframe && setStyle(getPage().nextSibling, 'display', 'none');
			/*IE下視窗外部拖動*/
			bindEl && (detachEvent("losecapture", uEvent, bindEl), bindEl.releaseCapture());
		};
		addEvent('mousedown',function(e) {
			if ((e.srcElement || e.target).parentNode == ym_hTool) return false; //點擊操作按鈕不進行啟用拖動處理
			filterWin(curCfg.winAlpha); //滑鼠按下時表單的透明度
			/*滑鼠與彈出框的左上角的位移差*/
			ymPrompt.apply(dragVar, {
				offX: parseInt(ym_win.style.left) - e.clientX,
				offY: parseInt(ym_win.style.top) - e.clientY
			});
			addEvent("mousemove", mEvent, bindEl);
			addEvent("mouseup", uEvent, bindEl);
			if (curCfg.iframe) {
				var cfg = {display: ''}, pg = getPage();
				isCompat && IE6 && ymPrompt.apply(cfg, {
					width: pg.offsetWidth,
					height: pg.offsetHeight
				}); //IE6必須設置高度
				setStyle(pg.nextSibling, cfg)
			}
			/*IE下視窗外部拖動*/
			bindEl && (addEvent("losecapture", uEvent, bindEl), bindEl.setCapture());
		},
		ym_head);
		/*頁面滾動彈出視窗滾動*/
		var scrollEvent = function() {
			setStyle(ym_win, {
				left: dragVar._offX + rootEl.scrollLeft + 'px',
				top: dragVar._offY + rootEl.scrollTop + 'px'
			});
		};
		/*鍵盤監聽*/
		var keydownEvent = function(e) {
			var keyCode = e.keyCode;
			if (keyCode == 27) destroy(); //esc鍵
			if (btnCache) {
				var l = btnCache.length, nofocus;
				/*tab鍵/左右方向鍵切換焦點*/
				document.activeElement && document.activeElement.id != btnCache[btnIndex].id && (nofocus = true);
				if (keyCode == 9 || keyCode == 39) nofocus && (btnIndex = -1),
				$(btnCache[++btnIndex == l ? (--btnIndex) : btnIndex].id).focus();
				if (keyCode == 37) nofocus && (btnIndex = l),
				$(btnCache[--btnIndex < 0 ? (++btnIndex) : btnIndex].id).focus();
				if (keyCode == 13) return true;
			}
			/*禁止F1-F12/ tab 回車*/
			return keyEvent(e, (keyCode > 110 && keyCode < 123) || keyCode == 9 || keyCode == 13);
		};
		/*監聽鍵盤事件*/
		var keyEvent = function(e, d) {
			e = e || event;
			/*允許對表單項進行操作*/
			if (!d && /input|select|textarea/i.test((e.srcElement || e.target).tagName)) return true;
			try {
				e.returnValue = false;
				e.keyCode = 0;
			} catch(ex) {
				e.preventDefault && e.preventDefault();
			}
			return false;
		};
		maskLevel.oncontextmenu = keyEvent; //禁止右鍵和選擇
		/*重新計算遮罩的大小*/
		var resizeMask = function(noDelay) {
			setStyle(maskEl, 'display', 'none'); //先隱藏
			var size = getWinSize();
			var resize = function() {
				setStyle(maskEl, {
					width: size[0] + 'px',
					height: size[1] + 'px',
					display: ''
				});
			};
			isIE ? noDelay === true ? resize() : setTimeout(resize, 0) : resize();
			cur_state == 'min' ? doMin() : cur_state == 'max' ? doMax() : setWinSize(); //最大化最小化狀態還原
		};
		/*蒙版的顯示隱藏,state:true顯示,false隱藏，默認為true*/
		var maskVisible = function(visible) {
			if (!curCfg.showMask) return; //無遮罩
			(visible === false ? detachEvent: addEvent)("resize", resizeMask, window); //頁面大小改變及時調整遮罩大小
			if (visible === false) return setStyle(maskEl, 'display', 'none'); //隱藏遮罩
			setStyle(maskLevel, {
				background: curCfg.maskAlphaColor,
				filter: 'Alpha(opacity=' + curCfg.maskAlpha * 100 + ')',
				opacity: curCfg.maskAlpha
			});
			resizeMask(true);
		};
		/*計算指定位置的座標，返回陣列*/
		var getPos = function(f) {
			/*傳入有效的陣列，則採用用戶座標（需要做簡單處理），否則根據傳入字串到map中匹配，如果匹配不到則默認採用c配置*/
			f = isArray(f) && f.length == 2 ? (f[0] + '+{2},{3}+' + f[1]) : (posMap[f] || posMap['c']);
			var pos = [rootEl.clientWidth - ym_win.offsetWidth, rootEl.clientHeight - ym_win.offsetHeight].concat(getScrollPos());
			var arr = f.replace(/\{(\d)\}/g,function(s, s1) {return pos[s1]}).split(',');
			return [eval(arr[0]), eval(arr[1])];
		}; //9個常用位置常數
		var posMap = {
			c: '{0}/2+{2},{1}/2+{3}',
			l: '{2},{1}/2+{3}',
			r: '{0}+{2},{1}/2+{3}',
			t: '{0}/2+{2},{3}',
			b: '{0}/2,{1}+{3}',
			lt: '{2},{3}',
			lb: '{2},{1}+{3}',
			rb: '{0}+{2},{1}+{3}',
			rt: '{0}+{2},{3}'
		};
		/*設定窗口大小及定位*/
		var setWinSize = function(w, h, pos) {
			if (ym_win.style.display == 'none') return; //當前不可見則不處理
			/*默認使用配置的寬高*/
			h = parseInt(h) || curCfg.height;
			w = parseInt(w) || curCfg.width;
			setStyle(ym_wins, {
				width: w + 'px',
				height: h + 'px',
				left: 0,
				top: 0
			});
			pos = getPos(pos || curCfg.winPos); //支援自定義座標，或者默認配置
			setStyle(ym_wins, {
				top: pos[1] + 'px',
				left: pos[0] + 'px'
			});
			saveWinInfo(); //保存當前視窗位置資訊
			setStyle(ym_body, 'height', h - $height(ym_headbox) - $height(ym_btn) - $height(ym_bottom) + 'px'); //設定內容區的高度
			isCompat && IE6 && curCfg.iframe && setStyle(getPage(), {height: ym_body.clientHeight}); //IE6標準模式下要計算iframe高度
		};
		var _obj = []; //IE中可見的obj元素
		var cacheWin = []; //佇列中的視窗
		var winVisible = function(visible) {
			var fn = visible === false ? detachEvent: addEvent;
			fn('scroll', curCfg.fixPosition && !useFixed ? scrollEvent: saveWinInfo, window);
			setStyle(ym_wins, 'position', curCfg.fixPosition && useFixed ? 'fixed': 'absolute');
			fn('keydown', keydownEvent);
			if (visible === false) { //關閉
				setStyle(ym_shadow, 'display', 'none');
				/*關閉視窗執行的操作*/
				var closeFn = function() {
					setStyle(ym_win, 'display', 'none');
					setStyle(_obj, 'visibility', 'visible');
					_obj = []; //把當前彈出移除
					cacheWin.shift(); //讀取佇列中未執行的彈出
					if (cacheWin.length) ymPrompt.show.apply(null, cacheWin[0].concat(true))
				};
				/*漸變方式關閉*/
				var alphaClose = function() {
					var alpha = 1;
					var hideFn = function() {
						alpha = Math.max(alpha - curCfg.slideCfg.increment, 0);
						filterWin(alpha);
						if (alpha == 0) {
							maskVisible(false);
							closeFn();
							clearInterval(it);
						}
					};
					hideFn();
					var it = setInterval(hideFn, curCfg.slideCfg.interval);
				};
				curCfg.useSlide ? alphaClose() : closeFn();
				return;
			}
			for (var o = document.getElementsByTagName('object'), i = o.length - 1; i > -1; i--) o[i].style.visibility != 'hidden' && _obj.push(o[i]) && (o[i].style.visibility = 'hidden');
			setStyle([ym_hText, ym_hTool], 'display', (curCfg.titleBar ? '': 'none'));
			ym_head.className = 'ym-tc' + (curCfg.titleBar ? '': ' ym-ttc'); //無標題欄
			ym_hText.innerHTML = curCfg.title; //標題
			for (var i = 0, c = ['min', 'max', 'close']; i < 3; i++) {
				ym_ico[i].style.display = curCfg[c[i] + 'Btn'] ? '': 'none';
				ym_ico[i].title = curCfg[c[i] + 'Txt'];
			}
			/*iframe如果不加上opacity=100，則ym-win和用於遮罩iframe的div也透明時，iframe也就透明了*/
			var ifmStyle = 'position:absolute;width:100%;height:100%;top:0;left:0;opacity:1;filter:alpha(opacity=100)';
			ym_body.innerHTML = !curCfg.iframe ? ('<div class="' + curCfg.msgCls + '">' + curCfg.message + '</div>') : "<iframe style='" + ifmStyle + "' border='0' frameborder='0' src='" + curCfg.message + "'></iframe><div style='" + ifmStyle + ";background:#000;opacity:0.1;filter:alpha(opacity=10);display:none'></div>"; //內容
			(function(el, obj) {
				for (var i in obj) try {
					el[i] = obj[i]
				} catch(e) {}
			})(ym_body.firstChild, curCfg.iframe); //為iframe添加自定義屬性
			ym_body.className = "ym-body " + curCfg.icoCls; //圖示類型
			setStyle(ym_btn, 'display', ((ym_btnContent.innerHTML = joinBtn(mkBtn(curCfg.btn))) ? '': 'none')); //沒有按鈕則隱藏
			! curCfg.useSlide && curCfg.showShadow && setStyle(ym_shadow, 'display', '');
			setStyle(ym_win, 'display', '');
			doNormal(true);
			filterWin(curCfg.useSlide ? 0 : 1); //此處使用filter同時可以解決IE非標準模式下有時下邊會出現1px空白，使內容與下部不銜接的問題
			/*漸變方式顯示*/
			curCfg.useSlide && (function() {
				var alpha = 0;
				var showFn = function() {
					alpha = Math.min(alpha + curCfg.slideCfg.increment, 1);
					filterWin(alpha);
					if (alpha == 1) {
						clearInterval(it);
						curCfg.showShadow && setStyle(ym_shadow, 'display', '')
					}
				}
				showFn();
				var it = setInterval(showFn, curCfg.slideCfg.interval);
			})();
			btnCache && $(btnCache[btnIndex = 0].id).focus(); //第一個按鈕獲取焦點
			/*是否禁止選擇、禁止右鍵*/
			ym_win.onselectstart = curCfg.allowSelect?null:keyEvent;
			ym_win.oncontextmenu = curCfg.allowRightMenu?null:keyEvent;
		}; //初始化
		var init = function() {
			ym_wins = [ym_win].concat(curCfg.showShadow ? ym_shadow: ''); //是否使用陰影
			maskVisible();
			winVisible();
		}; //銷毀
		var destroy = function() { ! curCfg.useSlide && maskVisible(false);
			winVisible(false);
		}; //取得iframe
		var getPage = function() {
			return curCfg.iframe ? ym_body.firstChild: null
		}
		ymPrompt.apply(ymPrompt, {
			close: destroy,
			max: max,
			min: min,
			normal: doNormal,
			getPage: getPage,
			/*顯示訊息方塊,fargs:優先配置，會覆蓋args中的配置*/
			/*show 強制顯示*/
			show: function(args, fargs, show) { //如果有視窗未關閉則將本次傳入的資訊放到佇列裏
				if (!show && cacheWin.push([args, fargs]) && cacheWin.length > 1) return;
				/*支援兩種參數傳入方式:(1)JSON方式 (2)多個參數傳入*/
				var a = [].slice.call(args, 0), o = {}, j = -1;
				if (!isObj(a[0])) {
					for (var i in dftCfg) if (a[++j]) o[i] = a[j];
				} else {
					o = a[0];
				}
				ymPrompt.apply(curCfg, ymPrompt.apply({}, o, fargs), ymPrompt.setDefaultCfg()); //先還原默認配置
				/*修正curCfg中的無效值(null/undefined)改為預設值*/
				for (var i in curCfg) curCfg[i] = curCfg[i] != null ? curCfg[i] : ymPrompt.cfg[i];
				init();
			},
			doHandler: function(sign, autoClose, closeFirst) {
				if (autoClose == undefined ? curCfg.autoClose: autoClose) destroy();
				try { (curCfg.handler)(sign)
				} catch(e) {
					alert(e.message)
				};
			},
			resizeWin: setWinSize,
			/*設定默認配置*/
			setDefaultCfg: function(cfg) {
				return ymPrompt.cfg = ymPrompt.apply({}, cfg, ymPrompt.apply({}, ymPrompt.cfg, dftCfg));
			},
			getButtons: function() {
				var btns = btnCache || [], btn, rBtn = [];
				while (btn = btns.shift()) rBtn.push($(btn.id));
				return rBtn;
			}
		});
		ymPrompt.setDefaultCfg(); //初始化默認配置
		/*執行用戶初始化時的調用*/
		var t;
		for (var i in _initFn) while (t = _initFn[i].shift()) ymPrompt[i].apply(null, t);
		/*取消事件綁定*/
		addEvent('unload', function() {
			while (ymPrompt.eventList.length) detachEvent.apply(null, ymPrompt.eventList.shift());
		}, window);
	})();
})(); //各訊息方塊的相同操作
ymPrompt.apply(ymPrompt, {
	alert: function() {
		ymPrompt.show(arguments, {
			icoCls: 'ymPrompt_alert',
			btn: ['OK']
		});
	},
	succeedInfo: function() {
		ymPrompt.show(arguments, {
			icoCls: 'ymPrompt_succeed',
			btn: ['OK']
		});
	},
	errorInfo: function() {
		ymPrompt.show(arguments, {
			icoCls: 'ymPrompt_error',
			btn: ['OK']
		});
	},
	confirmInfo: function() {
		ymPrompt.show(arguments, {
			icoCls: 'ymPrompt_confirm',
			btn: ['OK', 'CANCEL']
		});
	},
	win: function() {
		ymPrompt.show(arguments);
	}
});

