/*
Charset: UTF-8（京）
Version: 20071105
Programing by Masao Takahashi.
*/
function ImageEffect() {
	this.aConfig = new Array();
	this.ajax = new MyHttpRequest();
	this.aShadow = new Array();
	this.aCorner = new Array();
}
ImageEffect.prototype = {
onLoad : function()
{
	for (var j in g_effect.aConfig) {
		g_effect.execConfig(j);
	}
},
onResize : function()
{
	if (g_common._browser != 'ie') {
		return;
	}
	try {
		for (var i in g_effect.aShadow) {
			var data = g_effect.aShadow[i];
			g_effect.adjustShadow(data.node, data.list);
		}
		for (var i in g_effect.aCorner) {
			var data = g_effect.aCorner[i];
			g_effect.adjustCorner(data.node, data.list);
		}
	} catch (e) {}
},
registElementsByClass : function(flag, className, mode, dirName)
{
	var config = new Array();
	config.className = className;
/*
	var j = mode.indexOf(":");
	if (j >= 0) {
		config.mode = mode.substr(0,j);
		config.option = mode.substr(j+1);
	}
	else {
		config.mode = mode;
		config.option = false;
	}
*/
	var arr = mode.split(":");
	config.mode = arr[0];
	config.option = config.position = false;
	if (arr.length) {
		config.option = arr[1];
		config.position = arr[2];
	}
	config.dirName = dirName;
	g_effect.aConfig.push(config);
	if (flag) g_effect.execConfig(g_effect.aConfig.length-1);
},
execConfig : function(index)
{
	var config = g_effect.aConfig[index];
	var list = getElementsByClass(config.className,null,null);
	for (var i=0; i<list.length; i++) {
		var node = list[i];
		if (node._registFlag) continue;
		node._registFlag = 1;
		switch (config.mode) {
		case 'ds':
			var nodeList = g_effect.createShadow(node,config.dirName);
			g_effect.aShadow.push({node:node, list:nodeList});
			break;
		case 'corner':
			var nodeList = g_effect.createCorner(node,config.dirName,config.option);
			g_effect.aCorner.push({node:node, list:nodeList});
			break;
		case 'popup':
			addStyleSheet(config.dirName+"/window.css?t="+(new Date().getTime()));
			node._config = index;
			if (config.option == 'click') {
				node.onclick = g_effect.showPopup;
			}
			else {
				node.onmouseover = g_effect.showPopup;
				node.onmouseout = g_effect.hidePopup;
			}
			break;
		}
	}
},
adjustShadow : function(targetNode, list)
{
	var _ie = (g_common._browser == 'ie');
	var width = targetNode.offsetWidth;
	var height = targetNode.offsetHeight;
	var msz = -5;
	var bw = 1;
	for (var i=0; i<8; i++) {
		var node = list[i];
		switch (i) {
		case 0:
			node.style.left = msz+"px";
			node.style.top = msz+"px";
			break;
		case 1:
			node.style.left = "0px";
			node.style.top = msz+"px";
			if (!_ie) node.style.width = "100%";
			else node.style.width = (width-bw*2)+"px";
			break;
		case 2:
			node.style.right = msz+"px";
			node.style.top = msz+"px";
			break;
		case 3:
			node.style.left = msz+"px";
			node.style.top = "0px";
			if (!_ie) node.style.height = "100%";
			else node.style.height = (height-bw*2)+"px";
			break;
		case 4:
			node.style.right = msz+"px";
			node.style.top = "0px";
			if (!_ie) node.style.height = "100%";
			else node.style.height = (height-bw*2)+"px";
			break;
		case 5:
			node.style.left = msz+"px";
			if (!_ie) node.style.bottom = msz+"px";
			else node.style.top = (height-bw*2)+"px";
			break;
		case 6:
			node.style.left = "0px";
			if (!_ie) node.style.bottom = msz+"px";
			else node.style.top = (height-bw*2)+"px";
			if (!_ie) node.style.width = "100%";
			else node.style.width = (width-bw*2)+"px";
			break;
		case 7:
			node.style.right = msz+"px";
			if (!_ie) node.style.bottom = msz+"px";
			else node.style.top = (height-bw*2)+"px";
			break;
		}
	}
},
createShadow : function(targetNode, dirName)
{
	var _ie = (g_common._browser == 'ie');
	var _ie7over = _ie && (parseInt(g_common._version)>=7);

	targetNode.style.display = "block";
	targetNode.style.position = "relative";
	var config = new Array(
		new Array("t1.png", "no-repeat"),
		new Array("t2.png", "repeat-x"),
		new Array("t3.png", "no-repeat"),

		new Array("l.png", "repeat-y"),
		new Array("r.png", "repeat-y"),

		new Array("b1.png", "no-repeat"),
		new Array("b2.png", "repeat-x"),
		new Array("b3.png", "no-repeat")
	);
	var sz = 5;
	var nodeList = new Array();
	for (var i=0; i<8; i++) {
		var param = config[i];
		var node = document.createElement('div');
		node.className = "js-effect";
		node.style.position = "absolute";
		node.style.width = node.style.height = sz+"px";
		if (_ie) {
			node.style.fontSize = "0px";
			node.style.lineHeight = sz+"px";
		}
		var url = dirName+"/"+param[0];
		if (_ie && !_ie7over) {
			node.style.backgroundColor = "transparent";
			if (param[1].match(/^no-/)) {
				node.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader("+
					"enabled=true, sizingMethod=image src='"+url+"')";
			}
			else {
				node.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader("+
					"enabled=true, sizingMethod=scale src='"+url+"')";
			}
		}
		else {
			node.style.background = "url('"+url+"') 0 0 "+param[1];
		}
		targetNode.appendChild(node);
		nodeList.push(node);
	}
	g_effect.adjustShadow(targetNode, nodeList);
	return nodeList;
},

adjustCorner : function(targetNode, list)
{
	var _ie = (g_common._browser == 'ie');
	for (var i=0; i<4; i++) {
		var node = list[i];
		switch(i) {
		case 0:
			node.style.top ="0px";
			node.style.left = "0px";
			break;
		case 1:
			node.style.top ="0px";
			if(document.documentMode === 8) node.style.left = (targetNode.offsetWidth-6)+"px";
			else if (_ie) node.style.left = (targetNode.offsetWidth-7)+"px";
			else node.style.right = "0px";
			break;
		case 2:
			node.style.bottom ="0px";
			node.style.left = "0px";
			break;
		case 3:
			node.style.bottom ="0px";
			if(document.documentMode === 8) node.style.left = (targetNode.offsetWidth-6)+"px";
			else if (_ie) node.style.left = (targetNode.offsetWidth-7)+"px";
			else node.style.right = "0px";
			break;
		}
	}
},
createCorner : function(targetNode, dirName, size)
{
	var _ie = (g_common._browser == 'ie');
	var _ie7over = _ie && (parseInt(g_common._version)>=7);

	if (!size) size = "7px";
	targetNode.style.display = "block";
	targetNode.style.position = "relative";
	var config = new Array("lt.png","rt.png","lb.png","rb.png");
	var nodeList = new Array();
	for (var i=0; i<4; i++) {
		var node = document.createElement("div");
		node.className = "js-effect";
		node.style.display = "block";
		node.style.position = "absolute";
		node.style.fontSize = "0px";
		node.style.width = node.style.height = size;//"7px";

		var url = dirName+"/"+config[i];
		if (_ie && !_ie7over) {
			node.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader("+
				"enabled=true, sizingMethod=image src='"+url+"')";
		}
		else {
			node.style.background="url("+url+") no-repeat 0 0";
		}
		targetNode.appendChild(node);
		nodeList.push(node);
	}
	g_effect.adjustCorner(targetNode, nodeList);
	return nodeList;
},

showPopup : function(e)
{
	g_effect.hidePopup();
	g_effect.popup = new Array();
	g_effect.popup.nAnchor = this;
	g_effect.popup.nWnd = null;
	g_effect.popup.iShadow = -1;
	var config = g_effect.aConfig[g_effect.popup.nAnchor._config];
//set style sheets
//	var time = new Date().getTime();
//	g_effect.popup.cssWnd = addStyleSheet(config.dirName+"/window.css?t="+time);
//
	var href = g_effect.popup.nAnchor.href;
	var query = "";
	var j = href.indexOf("?");
	if (j >= 0) query = href.substr(j+1);
	var url = config.dirName+"/window.php?js=1&"+query;
	g_effect.ajax.send(url, new Array(), g_effect.showPopup_cb);
	return false;
},
hidePopup : function(e)
{
	g_effect.ajax.abort();
	if (g_effect.popup) {
//		removeStyleSheet(g_effect.popup.cssWnd);
		if (g_effect.popup.iShadow >= 0) g_effect.aShadow.splice(g_effect.popup.iShadow,1);
		if (g_effect.popup.nWnd) document.body.removeChild(g_effect.popup.nWnd);
		g_effect.popup = null;
	}
},
showPopup_cb : function()
{
//check ajax status
	var httpReq = g_effect.ajax.check();
	if (!httpReq) return;
	var html = httpReq.responseText;
	var config = g_effect.aConfig[g_effect.popup.nAnchor._config];
//create popup
	var popup = document.createElement('table');
	var tbody = document.createElement("tbody");
	var tr = document.createElement("tr");
	var td = document.createElement("td");
	td.innerHTML = html.split("<!--%CONTENT%-->")[1];
	tr.appendChild(td);
	tbody.appendChild(tr);
	popup.className = "js-popup js-effect";
	popup.style.position = "absolute";
	popup.style.visibility = "hidden";
	popup.style.borderCollapse = "collapse";
	popup.style.left = popup.style.top = "-2000px";
	popup.style.width = popup.style.height = "1px";
	popup.appendChild(tbody);

	var _ie = (g_common._browser == 'ie');
	var _ie7over = _ie && (parseInt(g_common._version)>=7);
	var list = popup.getElementsByTagName('img');
	for (var i=0; i<list.length; i++) {
		var node = list[i];
		var src = node.src;
		if (src && node.className != "js-absolute") {
			var j = src.lastIndexOf("/");
			if (j >= 0) src = src.substr(j+1);
			var url = config.dirName+"/"+src;
			node.src = url;
			if (_ie && !_ie7over && (node.className == "js-alpha")) {
				node.src = config.dirName+"/null.gif";
				node.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader("+
						"enabled=true, sizingMethod=image src='"+url+"')";
			}
		}
	}
	document.body.appendChild(popup);
	g_effect.popup.nWnd = popup;
//
//	var rect = getElementRect(g_effect.popup.nAnchor);
	var node = g_effect.popup.nAnchor;
	var rect = new Rectangle();
	rect.left = rect.top = 0;
	rect.width = node.offsetWidth;
	rect.height = node.offsetHeight;
	do {
		if (node.style.position == "absolute") {
			rect.left += parseInt(node.style.left);
			rect.top  += parseInt(node.style.top);
		}
		else {
			rect.left += node.offsetLeft;
			rect.top  += node.offsetTop;
		}
		node = node.offsetParent;
	} while (node);

	switch (config.position) {
	case 'bl':
		popup.style.left = (rect.left)+"px";
		popup.style.top  = (rect.top+rect.height)+"px";
		break;
	case 'br':
		popup.style.left = (rect.left+rect.width-popup.offsetWidth)+"px";
		popup.style.top  = (rect.top+rect.height)+"px";
		break;
	default:
		popup.style.left = (rect.left+rect.width)+"px";
		popup.style.top  = (rect.top)+"px";
		break;
	}
	popup.style.visibility = "visible";

	if (config.option == "click") {
		var list = popup.getElementsByTagName('a');
		for (var i=0; i<list.length; i++) {
			var node = list[i];
			switch (node.className) {
			case 'js-close':
				node.onclick = g_effect.hidePopup;
				break;
			}
		}
	}
	var list = getElementsByClass("js-shadow",popup,null);
	if (list.length) {
		var node = list[0];
		var nodeList = g_effect.createShadow(node,config.dirName);
		g_effect.popup.iShadow = g_effect.aShadow.length;
		g_effect.aShadow.push({node:node, list:nodeList});
	}
}

};
var g_effect = new ImageEffect();
g_common.registInterface(g_effect);
