//彈出對話框 var imagePath = ""; // 圖片路徑 function addLable(url,title,width,heigth,imgPath) { imagePath = imgPath; if(url.indexOf("?")<0){ url = url+"?data="+new Date(); } showWindow({ url: url, width: width, height: heigth, title: title }); } /// /// 添加事件 /// /// 載體 /// 事件類型 /// 事件函數 function addEventHandler(target, type, func) { if (target.addEventListener) target.addEventListener(type, func, false); else if (target.attachEvent) target.attachEvent("on" + type, func); else target["on" + type] = func; } /// /// 移除事件 /// /// 載體 /// 事件類型 /// 事件函數 function removeEventHandler(target, type, func) { if (target.removeEventListener) target.removeEventListener(type, func, false); else if (target.detachEvent) target.detachEvent("on" + type, func); else delete target["on" + type]; } /// /// 獲得HTML元素當前的樣式 /// /// HTML元素 function currentStyle(element) { return element.currentStyle || document.defaultView.getComputedStyle(element, null); } /// /// 構造拖拽引擎 /// /// 拖拽元素 /// 移動元素 /// 拖拽范圍 left: 左邊界 right: 右邊界 top: 上邊界 bottom: 下邊界 (-1 表示不限制) function DragEngine(target, drag, bounds) { this.target = target; this.drag = typeof drag != "undefined" ? drag : traget; this.drag.style.position = "absolute"; this.downPoint = {}; // 鼠標按下的坐標 this.offset = { x: parseInt(currentStyle(this.drag).marginLeft) || 0, y: parseInt(currentStyle(this.drag).marginTop) || 0 }; this.bounds = typeof bounds != "undefined" ? bounds : { left: 0, top: 0, right: -1, bottom: -1 }; var dragEngine = this; this.documentMousemove = function(e) { if (window.getSelection) getSelection().removeAllRanges(); else if (document.selection && document.selection.empty) document.selection.empty(); var left = e.clientX - dragEngine.downPoint.x + dragEngine.offset.x; var top = e.clientY - dragEngine.downPoint.y + dragEngine.offset.y; if (parseInt(dragEngine.bounds.right) >= 0) left = Math.min(left, dragEngine.bounds.right - dragEngine.drag.offsetWidth); if (parseInt(dragEngine.bounds.bottom) >= 0) top = Math.min(top, dragEngine.bounds.bottom - dragEngine.drag.offsetHeight); if (parseInt(dragEngine.bounds.left) >= 0) left = Math.max(left, dragEngine.bounds.left); if (parseInt(dragEngine.bounds.top) >= 0) top = Math.max(top, dragEngine.bounds.top); dragEngine.drag.style.left = left + "px"; dragEngine.drag.style.top = top + "px"; if (typeof dragEngine.onmove == "function") dragEngine.onmove(dragEngine); }; this.documentMouseup = function(e) { var iframes = dragEngine.drag.getElementsByTagName("iframe"); for (var i = 0; i < iframes.length; i++) { iframes[i].style.display = ""; //removeEventHandler(iframes[i], "mouseover", dragEngine.documentMouseup); } removeEventHandler(document, "mousemove", dragEngine.documentMousemove); removeEventHandler(document, "mouseup", dragEngine.documentMouseup); removeEventHandler(dragEngine.target, "losecapture", dragEngine.documentMouseup); if (dragEngine.target.releaseCapture) dragEngine.target.releaseCapture(); removeEventHandler(window, "blur", dragEngine.documentMouseup); if (typeof dragEngine.onstop == "function") dragEngine.onstop(dragEngine); }; this.targetMousedown = function(e) { // which: 1 == left; 2 == middle; 3 == right if (!e.which && e.button) e.which = e.button & 1 ? 1 : (e.button & 2 ? 3 : (e.button & 4 ? 2 : 0)); if (e.which != 1) return; var iframes = dragEngine.drag.getElementsByTagName("iframe"); for (var i = 0; i < iframes.length; i++) { iframes[i].style.display = "none"; //addEventHandler(iframes[i], "mouseover", dragEngine.documentMouseup);} dragEngine.downPoint.x = e.clientX - dragEngine.drag.offsetLeft;dragEngine.downPoint.y = e.clientY - dragEngine.drag.offsetTop; addEventHandler(document, "mousemove", dragEngine.documentMousemove); addEventHandler(document, "mouseup", dragEngine.documentMouseup); addEventHandler(dragEngine.target, "losecapture", dragEngine.documentMouseup); if (dragEngine.target.setCapture) dragEngine.target.setCapture(); addEventHandler(window, "blur", dragEngine.documentMouseup); if (e.preventDefault) e.preventDefault(); if (typeof dragEngine.onstart == "function") dragEngine.onstart(dragEngine); }; addEventHandler(this.target, "mousedown", this.targetMousedown); } /// /// 釋放拖拽引擎 /// DragEngine.prototype.dispose = function() { removeEventHandler(this.target, "mousedown", this.targetMousedown); }; var globalZIndex = 1001; // 對話框層次 /// /// 獲取文檔的邊界信息 /// function getDocumentBounds() { if (document.documentElement && document.compatMode == "CSS1Compat") { return { st: document.documentElement.scrollTop, sl: document.documentElement.scrollLeft, sw: document.documentElement.scrollWidth, sh: document.documentElement.scrollHeight, cw: document.documentElement.clientWidth, ch: document.documentElement.clientHeight }; } else if (document.body) { return { st: document.body.scrollTop, sl: document.body.scrollLeft, sw: document.body.scrollWidth, sh: document.body.scrollHeight, cw: document.body.clientWidth, ch: document.body.clientHeight }; } } function CsdnDialog(title, left, top, width, height, closefree, fixup) { this.div_dialog = document.createElement("div"); this.closefree = closefree; this.div_dialog.style.textAlign = "left"; this.div_dialog.style.display = "none"; this.div_dialog.style.position = "absolute"; this.div_dialog.style.borderStyle = "none"; this.div_dialog.style.borderWidth = "0px"; this.div_dialog.style.zIndex = globalZIndex; this.edgeWidth = 25; // 邊寬 document.body.appendChild(this.div_dialog); this.table_dialog = document.createElement("table"); this.table_dialog.cellPadding = "0px"; this.table_dialog.cellSpacing = "0px"; this.div_dialog.appendChild(this.table_dialog); this.tr_top = this.table_dialog.insertRow(-1); this.tr_top.style.height = "40px"; this.tr_middle = this.table_dialog.insertRow(-1); this.tr_bottom = this.table_dialog.insertRow(-1); this.tr_bottom.style.height = "25px"; this.td_top_left = this.tr_top.insertCell(-1); this.td_top_left.style.backgroundImage = "url(" + imagePath + "corner.png)"; this.td_top_left.style.backgroundPosition = "0px -100px"; this.td_top_left.style.backgroundRepeat = "no-repeat"; this.td_top_left.style.width = this.edgeWidth + "px"; /* this.img_icon = document.createElement("img"); this.img_icon.src = imagePath + "icon.gif"; this.img_icon.style.marginTop = "10px"; this.img_icon.style.marginLeft = "17px"; this.td_top_left.appendChild(this.img_icon); */ this.td_top_center = this.tr_top.insertCell(-1); this.td_top_center.style.backgroundImage = "url(" + imagePath + "vertical.png)"; this.td_top_center.style.width = (width - this.edgeWidth * 2) + "px"; this.td_top_center.style.backgroundPosition = "0px -100px"; this.td_top_center.style.backgroundRepeat = "repeat-x"; this.div_title = document.createElement("div"); this.div_title.style.styleFloat = "left"; this.div_title.style.cssFloat = "left"; this.div_title.style.fontWeight = "bold"; if (!fixup) { this.div_title.style.cursor = "move"; this.dragEngine = new DragEngine(this.div_title, this.div_dialog); } this.div_title.style.height = "29px"; this.div_title.style.verticalAlign = "middle"; this.div_title.style.lineHeight = "29px"; this.div_title.style.marginTop = "11px"; this.div_title.dialog = this; this.td_top_center.appendChild(this.div_title); this.div_close = document.createElement("div"); this.div_close.style.styleFloat = "right"; this.div_close.style.cssFloat = "right"; this.td_top_center.appendChild(this.div_close); this.img_close = document.createElement("img"); this.img_close.id = "imgclose"; this.img_close.src = imagePath + "blank.gif"; this.img_close.style.backgroundImage = "url(" + imagePath + "closebtn.gif)"; this.img_close.style.width = "44px"; this.img_close.style.height = "19px"; this.img_close.style.backgroundRepeat = "no-repeat"; this.img_close.style.marginTop = "12px"; try { this.img_close.style.cursor = "pointer"; } catch (e) { this.img_close.style.cursor = "hand"; } this.img_close.onmouseover = function() { this.hot = true; this.doChange(); }; this.img_close.onmouseout = function() { this.down = false; this.hot = false; this.doChange(); }; this.img_close.onmousedown = function() { this.down = true; this.doChange(); }; this.img_close.onmouseup = function() { this.down = false; this.doChange(); }; this.img_close.onclick = function() { if (!this.dialog) return; this.dialog.close(); }; this.img_close.dialog = this; this.img_close.hot = false; this.img_close.down = false; this.img_close.doChange = function() { if (this.disabled) this.style.backgroundPosition = "-132px 0px"; else if (this.down) this.style.backgroundPosition = "-88px 0px"; else if (this.hot) this.style.backgroundPosition = "-44px 0px"; else this.style.backgroundPosition = "0px 0px"; }; this.div_close.appendChild(this.img_close); this.td_top_right = this.tr_top.insertCell(-1); this.td_top_right.style.backgroundImage = "url(" + imagePath + "corner.png)"; this.td_top_right.style.backgroundRepeat = "no-repeat"; this.td_top_right.style.backgroundPosition = "-75px -100px"; this.td_top_right.style.width = this.edgeWidth + "px"; this.td_middle_left = this.tr_middle.insertCell(-1); this.td_middle_left.style.backgroundImage = "url(" + imagePath + "horizontal.png)"; this.td_middle_left.style.backgroundPosition = "-100px 0px"; this.td_middle_left.style.backgroundRepeat = "repeat-y"; this.td_middle_center = this.tr_middle.insertCell(-1); this.td_middle_center.style.backgroundColor = "White"; this.div_html = document.createElement("div"); this.td_middle_center.appendChild(this.div_html); this.td_middle_right = this.tr_middle.insertCell(-1); this.td_middle_right.style.backgroundImage = "url(" + imagePath + "horizontal.png)"; this.td_middle_right.style.backgroundPosition = "-175px 0px"; this.td_middle_right.style.backgroundRepeat = "repeat-y"; this.td_bottom_left = this.tr_bottom.insertCell(-1); this.td_bottom_left.style.backgroundImage = "url(" + imagePath + "corner.png)"; this.td_bottom_left.style.backgroundRepeat = "no-repeat"; this.td_bottom_left.style.backgroundPosition = "0px -175px"; this.td_bottom_center = this.tr_bottom.insertCell(-1); this.td_bottom_center.style.backgroundImage = "url(" + imagePath + "vertical.png)"; this.td_bottom_center.style.backgroundPosition = "0px -175px"; this.td_bottom_center.style.backgroundRepeat = "repeat-x"; this.td_bottom_right = this.tr_bottom.insertCell(-1); this.td_bottom_right.style.backgroundImage = "url(" + imagePath + "corner.png)"; this.td_bottom_right.style.backgroundRepeat = "no-repeat"; this.td_bottom_right.style.backgroundPosition = "-75px -175px"; this.resize(left, top, width, height); this.setTitle(title); } CsdnDialog.prototype.hide = function() { this.div_dialog.style.display = "none"; }; CsdnDialog.prototype.resize = function(left, top, width, height) { var bounds = getDocumentBounds(); if (typeof top == "undefined" || top < 0) top = Math.max((bounds.ch - height) / 2 + bounds.st, 10); if (typeof left == "undefined" || left < 0) left = Math.max((bounds.cw - width) / 2 + bounds.sl, 10); this.left = left; this.top = top; this.width = width; this.height = height; this.div_dialog.style.left = this.left + "px"; this.div_dialog.style.top = this.top + "px"; this.div_dialog.style.width = width + "px"; this.div_dialog.style.height = height + "px"; this.table_dialog.style.width = width + "px"; this.table_dialog.style.height = height + "px"; this.tr_middle.style.height = (height - 40 - 25) + "px"; this.td_top_center.style.width = (width - this.edgeWidth * 2) + "px"; this.div_title.style.width = (width - this.edgeWidth * 2 - 50) + "px"; this.td_middle_center.style.height = (height - 40 - 25) + "px"; this.div_html.style.width = (width - this.edgeWidth * 2) + "px"; this.div_html.style.height = (height - 40 - 25) + "px"; if (typeof this.onresize == "function") this.onresize(this); }; CsdnDialog.prototype.setTitle = function(title) { if (this.title == title) return; this.title = title; this.div_title.innerHTML = title; }; CsdnDialog.prototype.show = function() { this.div_dialog.style.left = this.left + "px"; this.div_dialog.style.top = this.top + "px"; this.div_dialog.style.display = ""; this.bodyStyleOverflow = document.body.style.overflowX; document.body.style.overflowX = "hidden"; if ((/(msie)\s*(\d+(\.\d+)?)/i).exec(navigator.userAgent)) { //document.createStyleSheet("javascript:'html{overflow-x:hidden;}body{overflow-x:auto;}'"); //document.createStyleSheet().addRule("html", "overflow-x:hidden;"); //document.createStyleSheet().addRule("body", "overflow-x:hidden;"); } }; CsdnDialog.prototype.close = function() { if (typeof this.onclose == "function") this.onclose(this); if (typeof (this.closefree) != "undefined" && this.closefree) this.dispose(); else this.hide(); document.body.style.overflowX = this.bodyStyleOverflow; if ((/(msie)\s*(\d+(\.\d+)?)/i).exec(navigator.userAgent)) { //document.createStyleSheet("javascript:'html{overflow-x:auto;}body{overflow-x:auto;}'"); //document.createStyleSheet().addRule("html", "overflow-x:auto;"); //document.createStyleSheet().addRule("body", "overflow-x:auto;"); } }; CsdnDialog.prototype.dispose = function() { if (typeof this.ondispose == "function") this.ondispose(this); if (!fixup) this.dragEngine.dispose(); this.td_middle_center.removeChild(this.div_html); this.div_close.removeChild(this.img_close); this.td_top_center.removeChild(this.div_close); this.td_top_center.removeChild(this.div_title); this.td_top_left.removeChild(this.img_icon); this.div_dialog.removeChild(this.table_dialog); document.body.removeChild(this.div_dialog); }; // 調用封裝 var currentDialog = null; function showWindow(opts) { if (!currentDialog) { if (typeof opts.width == "undefined") opts.width = 200; if (typeof opts.height == "undefined") opts.height = 200; var bounds = getDocumentBounds(); currentDialog = new CsdnDialog(opts.title, opts.left, opts.top, opts.width, opts.height, false, false); currentDialog.div_black = document.createElement("div"); currentDialog.div_black.style.position = "absolute"; currentDialog.div_black.style.borderStyle = "none"; currentDialog.div_black.style.zIndex = "1000"; currentDialog.div_black.style.left = "0"; currentDialog.div_black.style.top = "0px"; currentDialog.div_black.style.height = document.body.offsetHeight; currentDialog.div_black.style.width = document.body.offsetWidth; currentDialog.div_black.style.filter = "alpha(opacity = 40)"; currentDialog.div_black.style.opacity = "0.55857"; currentDialog.div_black.style.backgroundColor = "#999999"; document.body.appendChild(currentDialog.div_black); currentDialog.onresize = function() { var bounds = getDocumentBounds(); currentDialog.div_black.style.top = bounds.st - 1000 + "px"; }; currentDialog.onclose = function() { currentDialog.div_black.style.display = "none"; document.body.removeChild(currentDialog.div_black); currentDialog = null; }; currentDialog.ondispose = function() { document.body.removeChild(currentDialog.div_black); currentDialog = null; }; } else { currentDialog.div_black.style.display = "block"; currentDialog.resize(opts.left, opts.top, opts.width, opts.height); currentDialog.setTitle(opts.title); } if (typeof opts.url == "string") { if (/\/Manage\/Top\/AddTop\.aspx/.test(opts.url)) opts.url = opts.url.replace(/%3e/ig, "%uFF1E").replace(/%3c/ig, "%uFF1C"); currentDialog.div_html.innerHTML = ""; currentDialog.iframe = document.createElement("iframe"); currentDialog.iframe.width = (opts.width - currentDialog.edgeWidth * 2) + "px"; currentDialog.iframe.height = (opts.height - 40 - 25) + "px"; currentDialog.iframe.style.margin = "0"; currentDialog.iframe.frameBorder = "0"; currentDialog.iframe.src = opts.url; currentDialog.div_html.appendChild(currentDialog.iframe); } else if (typeof opts.html == "string") { currentDialog.div_html.innerHTML = opts.html; } currentDialog.show(); }