// ***** ------------ *****
// ***** Smoke.js *****
// ***** ------------ *****
/**********************************************************************
*
* Created By: TAKE
* Created Date: 2009-10-30
* Language: JavaScript
* Description: Smoke screen
* Usage:
*
* Win FX3: O
* Win IE6: O
* Win IE7: O
* Win IE8: O
* Win SF3: O
* Win CH3: O
* Win OP10: O
*
**********************************************************************/
var smoke = new Smoke(); // generic instance
function Smoke() {
// --- public methods ---
this.setHtml = setHtml;
this.remove = remove;
this.show = show;
// --- private variables ---
var bLock = 0;
var sTargetId = '';
var oBase = Object();
var oScr = document.createElement('div'); // smoke screen
// --- set the default message ---
var sMessage = '';
sMessage += '
';
sMessage += '';
sMessage += '';
sMessage += '';
sMessage += ' | ';
sMessage += '';
sMessage += ' Loading...';
sMessage += ' | ';
sMessage += '
';
sMessage += '
';
// --- build message box ---
var oMsgBoxTd = document.createElement('td');
oMsgBoxTd.align = 'center';
oMsgBoxTd.valign = 'middle';
oMsgBoxTd.innerHTML = sMessage;
var oMsgBoxTr = document.createElement('tr');
oMsgBoxTr.appendChild(oMsgBoxTd);
var oMsgBoxTbody = document.createElement('tbody');
oMsgBoxTbody.appendChild(oMsgBoxTr);
var oMsgBox = document.createElement('table');
oMsgBox.appendChild(oMsgBoxTbody);
function setHtml(myHtml) {
if (!myHtml) return 0;
var sHtml = '';
sHtml += '';
sHtml += '';
sHtml += '';
sHtml += myHtml;
sHtml += ' | ';
sHtml += '
';
sHtml += '
';
oMsgBoxTd.innerHTML = sHtml;
}
function remove() {
if (!bLock) return 0;
if (!oScr) return 0;
oScr.parentNode.removeChild(oScr);
if (!oMsgBox) return 0;
oMsgBox.parentNode.removeChild(oMsgBox);
bLock = 0;
}
function show(myTargetId) {
sTargetId = myTargetId;
if (bLock) return 0;
// --- get base object ---
if (sTargetId) {
oBase = document.getElementById(sTargetId);
} else {
oBase = document.body;
}
// --- find message position ---
if (sTargetId) {
// -----------------------------------------
// this is really important for IE
// -----------------------------------------
if (navigator.userAgent.indexOf('MSIE') > -1) {
oBase.style.display = 'inline-block';
}
oMsgBox.style.position = 'absolute';
oMsgBox.style.width = oBase.clientWidth + 'px';
oMsgBox.style.height = oBase.clientHeight + 'px';
oMsgBox.style.left = getObjPos(oBase).x + 'px';
oMsgBox.style.top = getObjPos(oBase).y + 'px';
} else {
var iMsgTop = document.documentElement.scrollTop || document.body.scrollTop;
var iMsgHeight = document.documentElement.clientHeight || document.body.clientHeight;
oMsgBox.style.position = 'absolute';
oMsgBox.style.width = '100%';
oMsgBox.style.height = iMsgHeight + 'px';
oMsgBox.style.top = iMsgTop + 'px';
}
// --- find width & height ---
var aPageSize = Object();
var sBoxWidth = '0px';
var sBoxHeight = '0px';
if (sTargetId) {
sBoxWidth = oBase.clientWidth;
sBoxHeight = oBase.clientHeight;
} else {
// --- entire page ---
aPageSize = getPageSize();
sBoxWidth = aPageSize[0];
sBoxHeight = aPageSize[1];
}
//alert(oBase.tagName)
//alert(sTargetId)
//alert([sBoxWidth, sBoxHeight])
// --- setup smoke screen ---
oScr.style.backgroundColor = '#ffffff';
oScr.style.position = 'absolute';
oScr.style.width = '500px';
oScr.style.height = '500px';
oScr.style.width = sBoxWidth + 'px';
oScr.style.height = sBoxHeight + 'px';
oScr.style.left = getObjPos(oBase).x + 'px';
oScr.style.top = getObjPos(oBase).y + 'px';
oScr.style.opacity = '0.35';
oScr.style.MozOpacity = '0.35';
oScr.style.KhtmlOpacity = '0.35';
oScr.style.filter = 'progid:DXImageTransform.Microsoft.Alpha(opacity=35);';
// --- put smoke screen & message ---
document.body.appendChild(oScr);
document.body.appendChild(oMsgBox);
bLock = 1;
}
// *********************************************************************
// obj getObjPos(obj) - reusable
// *********************************************************************
function getObjPos(oElement){
var pos = {x:oElement.offsetLeft, y:oElement.offsetTop};
while(oElement = oElement.offsetParent){
pos.x += oElement.offsetLeft;
pos.y += oElement.offsetTop;
}
return pos;
}
// *********************************************************************
// arr getPageSize() - reusable
// *********************************************************************
function getPageSize() {
// --- get scroll page size ---
var scrollX, scrollY;
if (window.innerHeight && window.scrollMaxY) {
// Firefox
scrollX = window.innerWidth + window.scrollMaxX;
scrollY = window.innerHeight + window.scrollMaxY;
} else if (document.body.scrollHeight > document.body.offsetHeight){
// IE6,7
scrollX = document.body.scrollWidth;
scrollY = document.body.scrollHeight;
} else {
// --- Mac IE, IE6 strict, Mozilla and Safari ---
scrollX = document.body.offsetWidth;
scrollY = document.body.offsetHeight;
}
// --- get viewable size ---
var windowWidth, windowHeight;
if (self.innerHeight) {
// --- all except IE ---
if (document.documentElement.clientWidth){
windowWidth = document.documentElement.clientWidth;
} else {
windowWidth = self.innerWidth;
}
windowHeight = self.innerHeight;
} else if (document.documentElement && document.documentElement.clientHeight) {
// --- IE6 Strict Mode ---
windowWidth = document.documentElement.clientWidth;
windowHeight = document.documentElement.clientHeight;
} else if (document.body) {
// --- other IE ---
windowWidth = document.body.clientWidth;
windowHeight = document.body.clientHeight;
}
// --- choose the larger width ---
if (scrollX > windowWidth){
pageWidth = scrollX;
} else {
pageWidth = windowWidth;
}
// --- choose the larger height ---
if (scrollY > windowHeight){
pageHeight = scrollY;
} else {
pageHeight = windowHeight;
}
return [pageWidth, pageHeight];
}
}