zapatecUtils = Zapatec.Utils;

fw = function() {};

fw.showModal = function() {
	var oPopup = document.getElementById(fw.id);
	if (!oPopup) {
		return;
	}
	var oOffset = zapatecUtils.getElementOffset(oPopup);
	var iOffsetWidth = oOffset.width;
	var iOffsetHeight = oOffset.height;
	if (iOffsetHeight < 40) {
		// Wait until loading content
		setTimeout(fw.showModal, 1000);
		return;
	}
	var iMaxZindex = fw.maxZindex;
	if (!iMaxZindex) {
		iMaxZindex = fw.maxZindex = 1000000;
	}
	var oModal = fw.modal;
	if (!oModal) {
		oModal = fw.modal = new Zapatec.Modal({
			themePath: '/zapatec/zpextra/themes/indicator/',
			zIndex: iMaxZindex - 1
		});
		zapatecUtils.addEvent(window, 'resize', fw.updateModal);
	}
	oModal.show();
	var oModalStyle = oModal.container.style;
	var oWindowSize = zapatecUtils.getWindowSize();
	var iLeft = Math.floor((oWindowSize.width - iOffsetWidth) / 2);
	if (iLeft < 0) {
		iLeft *= 2;
	}
	var iTop = Math.floor((oWindowSize.height - iOffsetHeight) / 2);
	if (iTop < 0) {
		iTop = 0;
	}
	var oStyle = oPopup.style;
	oStyle.zIndex = iMaxZindex;
	oStyle.left = iLeft + 'px';
	oStyle.top = iTop + 'px';
	if (zapatecUtils.getStyleProperty(oPopup, 'position') == 'fixed') {
		oModalStyle.position = 'fixed';
		oModalStyle.left = 0;
		oModalStyle.top = 0;
	} else if (document.documentElement) {
		// IE6
		oStyle.left = document.documentElement.scrollLeft + iLeft + 'px';
		oStyle.top = document.documentElement.scrollTop + iTop + 'px';
		oModal.container.id = 'floatingWindowModal';
		zapatecUtils.addEvent(window, 'scroll', fw.onScroll);
		oPopup = document.getElementById(fw.id + 'Wch');
		if (oPopup) {
			var oWCH = zapatecUtils.createWCH(oPopup);
			zapatecUtils.setupWCH(oWCH, 0, 0, iOffsetWidth, iOffsetHeight);
		}
	}
};

fw.updateModal = function() {
	setTimeout(fw.autoresizeModal, 0);
	setTimeout(fw.autoresizeModal, 0);
};

fw.autoresizeModal = function() {
	var oModal = fw.modal;
	if (!oModal) {
		zapatecUtils.removeEvent(window, 'resize', fw.updateModal);
		return;
	}
	var oPopup = document.getElementById(fw.id);
	if (!oPopup) {
		return;
	}
	var oOffset = zapatecUtils.getElementOffset(oPopup);
	var oWindowSize = zapatecUtils.getWindowSize();
	var iWindowWidth = oWindowSize.width;
	var iWindowHeight = oWindowSize.height;
	var iLeft = Math.floor((iWindowWidth - oOffset.width) / 2);
	if (iLeft < 0) {
		iLeft *= 2;
	}
	var iTop = Math.floor((iWindowHeight - oOffset.height) / 2);
	if (iTop < 0) {
		iTop = 0;
	}
	oModal.setWidth(iWindowWidth);
	oModal.setHeight(iWindowHeight);
	var oStyle = oPopup.style;
	oStyle.left = iLeft + 'px';
	oStyle.top = iTop + 'px';
};

fw.showFloating = function() {
	var oPopup = document.getElementById(fw.id);
	if (!oPopup) {
		return;
	}
	var oOffset = zapatecUtils.getElementOffset(oPopup);
	var iOffsetWidth = oOffset.width;
	var iOffsetHeight = oOffset.height;
	if (iOffsetHeight < 40) {
		// Wait until loading content
		setTimeout(fw.showFloating, 1000);
		return;
	}
	var iMaxZindex = fw.maxZindex;
	if (!iMaxZindex) {
		iMaxZindex = fw.maxZindex = zapatecUtils.getMaxZindex();
	}
	var oWindowSize = zapatecUtils.getWindowSize();
	var oStyle = fw.style = oPopup.style;
	oStyle.zIndex = iMaxZindex;
	oStyle.left = -iOffsetWidth + 'px';
	var iTop = Math.floor((oWindowSize.height - iOffsetHeight) / 2);
	if (iTop < 0) {
		iTop = 0;
	}
	oStyle.top = iTop + 'px';
	if (zapatecUtils.getStyleProperty(oPopup, 'position') != 'fixed' &&
		document.documentElement) {
		// IE6
		zapatecUtils.addEvent(window, 'scroll', fw.onScroll);
		oPopup = document.getElementById(fw.id + 'Wch');
		if (oPopup) {
			var oWCH = zapatecUtils.createWCH(oPopup);
			zapatecUtils.setupWCH(oWCH, 0, 0, iOffsetWidth, iOffsetHeight);
		}
	}
	fw.left = -iOffsetWidth;
	fw.targetLeft = Math.floor((oWindowSize.width - iOffsetWidth) / 2);
	zapatecUtils.addEvent(window, 'resize', fw.updateFloating);
	fw.move();
};

fw.move = function() {
	var oStyle = fw.style;
	if (!oStyle) {
		return;
	}
	fw.left += 20;
	var iLeft = fw.left;
	if (iLeft >= fw.targetLeft) {
		oStyle.left = fw.targetLeft + 'px';
		fw.style = null;
		return;
	}
	oStyle.left = iLeft + 'px';
	setTimeout(fw.move, 0);
};

fw.updateFloating = function() {
	var oPopup = document.getElementById(fw.id);
	if (!oPopup) {
		return;
	}
	var oOffset = zapatecUtils.getElementOffset(oPopup);
	var iOffsetHeight = oOffset.height;
	if (iOffsetHeight < 40) {
		// Wait until loading content
		return;
	}
	var oWindowSize = zapatecUtils.getWindowSize();
	var iLeft = Math.floor((oWindowSize.width - oOffset.width) / 2);
	if (iLeft < 0) {
		iLeft *= 2;
	}
	var iTop = Math.floor((oWindowSize.height - iOffsetHeight) / 2);
	if (iTop < 0) {
		iTop = 0;
	}
	// Stop moving
	fw.left = fw.targetLeft = iLeft;
	var oStyle = oPopup.style;
	oStyle.left = iLeft + 'px';
	oStyle.top = iTop + 'px';
};

fw.onScroll = function() {
	var oEl, oStyle;
	oEl = document.getElementById(fw.id);
	if (!oEl) {
		zapatecUtils.removeEvent(window, 'scroll', fw.onScroll);
		return;
	}
	var oOffset = zapatecUtils.getElementOffset(oEl);
	var oWindowSize = zapatecUtils.getWindowSize();
	var iLeft = Math.floor((oWindowSize.width - oOffset.width) / 2);
	if (iLeft < 0) {
		iLeft *= 2;
	}
	var iTop = Math.floor((oWindowSize.height - oOffset.height) / 2);
	if (iTop < 0) {
		iTop = 0;
	}
	// Stop moving
	fw.left = fw.targetLeft = iLeft;
	oStyle = oEl.style;
	oStyle.left = document.documentElement.scrollLeft + iLeft + 'px';
	oStyle.top = document.documentElement.scrollTop + iTop + 'px';
	oEl = document.getElementById('floatingWindowModal');
	if (oEl) {
		oStyle = oEl.style;
		oStyle.left = document.documentElement.scrollLeft + 'px';
		oStyle.top = document.documentElement.scrollTop + 'px';
	}
};

fw.show = function(sPopupContent) {
	var bModal = false;
	var bFloating = false;
	var sCookie = zapatecUtils.getCookie('fw');
	if (sCookie) {
		var oCookie = Zapatec.Transport.parseJson({strJson: sCookie});
		if (oCookie) {
			bModal = oCookie.modal;
			bFloating = oCookie.floating;
		}
	}
	if (!bFloating) {
		fw.fixFlashAds();
		fw.id = 'floatingWindow';
		document.write('\
<div id="' + fw.id + '" class="fw">\
	<div id="' + fw.id + 'Wch"></div>\
	<table>\
		<tr>\
			<td>\
				<div class="fwContainer">\
					<div class="fwRoundCorners fwRoundCorners1"></div>\
					<div class="fwRoundCorners fwRoundCorners2"></div>\
					<div class="fwRoundCorners fwRoundCorners3"></div>\
					<div class="fwRoundCorners fwRoundCorners4"></div>\
					<div class="fwRoundCorners fwRoundCorners5"></div>\
					<div class="fwHead">\
						<div class="fwX" onclick="fw.discard()"></div>\
						&nbsp;\
					</div>\
					<div class="fwBody">\
						<div class="fwBodyContainer1">\
							<div class="fwBodyContainer2">' + sPopupContent + '</div>\
						</div>\
					</div>\
					<div class="fwRoundCorners fwRoundCorners6"><div class="fwRoundCorners fwRoundCorners7"></div></div>\
					<div class="fwRoundCorners fwRoundCorners8"></div>\
					<div class="fwRoundCorners fwRoundCorners9"></div>\
				</div>\
			</td>\
		</tr>\
	</table>\
</div>\
');
		if (!bModal) {
			setTimeout(fw.showModal, 1000);
		} else {
			setTimeout(fw.showFloating, 1000);
		}
	}
};

fw.fixFlashAds = function() {
	var aEls = document.getElementsByTagName('object');
	if (aEls) {
		var iEl, iEls;
		iEls = aEls.length;
		for (iEl = 0; iEl < iEls; iEl++) {
			try {
				aEls[iEl].innerHTML += '<param name="wmode" value="transparent">';
			} catch(oException) {};
		}
		aEls = document.getElementsByTagName('embed');
		if (aEls) {
			iEls = aEls.length;
			for (iEl = 0; iEl < iEls; iEl++) {
				try {
					aEls[iEl].setAttribute('wmode', 'transparent');
				} catch(oException) {};
			}
		}
	}
};

fw.discard = function() {
	var oPopup = document.getElementById(fw.id);
	if (oPopup) {
		oPopup.style.display = 'none';
		oPopup.parentNode.removeChild(oPopup);
	}
	var oModal = fw.modal;
	if (oModal) {
		oModal.hide();
		zapatecUtils.removeEvent(window, 'resize', fw.updateModal);
		zapatecUtils.removeEvent(window, 'resize', fw.updateFloating);
		zapatecUtils.removeEvent(window, 'scroll', fw.onScroll);
		oModal.discard();
		fw.modal = null;
		zapatecUtils.writeCookie('fw', '{"modal":true}', null, '/', 1);
	} else {
		zapatecUtils.writeCookie('fw', '{"floating":true}', null, '/', 1);
	}
	fw = null;
};
