/*************************************************
 * WIDGET用のJavascript
 * 2008.07.10 AZIA S.Sato
 * 2009.11.02 AZIA S.Sato
 *************************************************/
var PAGE_OFFSET_X = 10;
var PAGE_OFFSET_Y = 10;
var _REQUEST_TIMEOUT = 120000;
var _UNIQUE_PARAM = 'ajdt';

//-------------------------------------------------------------------
// Window
//-------------------------------------------------------------------
/**
 * ウィンドウを開く
 */
function openWindow(url, name, height, width, scrollbars, resizable, status) {
	var window_condition = "height=" + height + ",width=" + width + 
		",scrollbars=" + scrollbars + ",resizable=" + resizable + ",toolbar=no,status=" + status;
	
	subWindow = window.open(url, name, window_condition);
	subWindow.focus();
	return subWindow;
}

/**
 * 常に手前に表示するウィンドウを開く
 */
function openModalWindow(url, name, height, width, scrollbars, resizable, status) {
	ModalWindow = openWindow(url, name, height, width, scrollbars, resizable, status);
	onfocus = function onFocus() {
		try {
			if (null !=ModalWindow && !ModalWindow.closed) {
				try {
					ModalWindow.focus();
				} catch(e) {
					document.onmousemove = null;
				}
			} else {
				document.onmousemove = null;
			}
		} catch (ex) {}
	};
	document.onmousemove = onfocus;
	return ModalWindow;
}

//-------------------------------------------------------------------
// Tooltip widget
//-------------------------------------------------------------------
/**
 * Tooltip(W:360px, H:100px以上)を表示します
 * 表示される内容は、resposeで吐き出されるHTMLとなります
 */
function showBubbleTooltip(url, params, popupX, popupY) {
	$('bubble_tooltip').hide();
	
	var rjaxReq = new Ajax.Request(
		url, 
		{
			method: 'post', 
			parameters: params, 
			evalScripts: true,
			onComplete: function(request) {
				if (200 == request.status) {
					$("bubble_tooltip_content").innerHTML = request.responseText;
					setTimeout(function(){initBubbleTooltip(popupX, popupY, 'bubble_tooltip');}, 100);
				}
			},
			onCreate: function() {
				$('bubble_tooltip_content').innerHTML = '読み込み中...';
			},
			onFailure: function(request, obj) {
				alert('エラーが発生しました。しばらくしてから再度お試し下さい。');
				document.getElementById('bubble_tooltip').display = 'none';
			},
			onException: function(request, ex) {
				alert('エラーが発生しました。しばらくしてから再度お試し下さい。');
				alert(ex.message);
				document.getElementById('bubble_tooltip').display = 'none';
			}
		}
	);
	rjaxReq = null;
}
/**
 * Uploadを実行してPopupを表示します
 */
function showUploadTooltip(url, formName, popupX, popupY) {
	$('bubble_tooltip').hide();
	
	var formObject = document.getElementById(formName);
	YAHOO.util.Connect.setForm(formObject, true);
	
	var callback = {
		failure : function(response) {
			alert('エラーが発生しました。しばらくしてから再度お試し下さい。');
			document.getElementById('bubble_tooltip').display = 'none';
		},
		upload : function(response) {
			$('bubble_tooltip_content').innerHTML = response.responseText;
			setTimeout(function(){initBubbleTooltip(popupX, popupY, 'bubble_tooltip');}, 100);
		}
	};
	
	var ajax = YAHOO.util.Connect.asyncRequest('POST', url, callback);
}
/**
 * Uploadを実行して完了時のResponseを指定したLayerIDに出力
 * 成功した場合の画面には、"_TOOLTIP_COMPLETE"を埋め込むことで判断します
 * エラーの場合は、Popupへ戻ります
 */
function uploadCompleteTooltip(url, formName, layerId, popupX, popupY) {
	$('bubble_tooltip').hide();
	
	var formObject = document.getElementById(formName);
	YAHOO.util.Connect.setForm(formObject, true);
	
	var callback = {
		failure : function(response) {
			alert('エラーが発生しました。しばらくしてから再度お試し下さい。');
			document.getElementById('bubble_tooltip').display = 'none';
		},
		upload : function(response) {
			var str = response.responseText;
			if (str.indexOf("_TOOLTIP_COMPLETE_REPLACE") != -1) {
				if (layerId != null && layerId != '') {
					$(layerId).innerHTML = response.responseText;
				}
			} else if (str.indexOf("_TOOLTIP_COMPLETE") != -1) {
				if (layerId != null && layerId != '') {
					new Insertion.After(layerId, response.responseText);
				}
			} else {
				$('bubble_tooltip_content').innerHTML = response.responseText;
				setTimeout(function(){initBubbleTooltip(popupX, popupY, 'bubble_tooltip');}, 100);
			}
		}
	};
	
	var ajax = YAHOO.util.Connect.asyncRequest('POST', url, callback);
}

function initBubbleTooltip(popupX, popupY, layerId, offsetX, offsetY) {
	var bubble = $(layerId);
	var arrowSide;
	var arrowTop = false;
	var arrowLeft = false;
	var needScroll = false;
	var windowSize = getWindowSize();
	
	deltaX =  window.pageXOffset
		|| document.documentElement.scrollLeft
		|| document.body.scrollLeft
		|| 0;
	deltaY =  window.pageYOffset
		|| document.documentElement.scrollTop
		|| document.body.scrollTop
		|| 0;
	
	if (popupY - deltaY < windowSize[1]/2) {
		$('bubble_bottom').className = 'bubble_bottom';
		arrowSide = 'bubble_top';
		arrowTop = true;
		if (windowSize[1] - (popupY - deltaY) < bubble.getHeight()) needScroll = true;
	} else {
		$('bubble_top').className = 'bubble_top';
		arrowSide = 'bubble_bottom';
		if (popupY - deltaY < bubble.getHeight()) needScroll = true;
	}
	
	if (popupX - deltaX < windowSize[0]/2) {
//		$(arrowSide).className = arrowSide + '_left';
		arrowLeft = true;
	} else {
//		$(arrowSide).className = arrowSide + '_right';
	}
	
	if ((popupX + 360) > windowSize[0]) {
		popupX = windowSize[0] - 360;
	}
	
	document.getElementById(layerId).style.left = (popupX + offsetX) + "px";
	document.getElementById(layerId).style.top = (popupY + offsetY) + "px";
	
	bubble.show();
	
	if (needScroll) Element.scrollTo(bubble);
}
function hideBubbleTooltip(layerId) {
	$(layerId).hide();
}

//-------------------------------------------------------------------
// Execute function
//-------------------------------------------------------------------

/**
 * 指定したURLにRequestをGETで投げて、結果を指定したIDに返します。
 * Parametorで送信(POST)
 */
function requestActionByParam(url, params, layerId, func) {
	var uniqueParam = new Date().getTime();
	url += '?' + _UNIQUE_PARAM + '=' + uniqueParam + '&' + params;
	
	var callback = {
		success: function(oResponse) {
			if (layerId != null && layerId != '') {
				$(layerId).innerHTML = oResponse.responseText;
			}
			if (func != null) {
				setTimeout(function(){func();}, 1000);
			}
		},
		failure: function(oResponse) {
			// alert('エラーが発生しました。しばらくしてから再度お試し下さい。');
		},
		timeout: _REQUEST_TIMEOUT
	};
	
	YAHOO.util.Connect.asyncRequest('POST', url, callback);
}

/**
 * 指定したURLにRequestをGETで投げて、結果を指定したIDに返します。
 * Formで送信
 */
function requestActionByForm(url, formName, layerId, func) {
	var uniqueParam = new Date().getTime();
	url += '?' + _UNIQUE_PARAM + '=' + uniqueParam;
	
	var formObject = $(formName);
	YAHOO.util.Connect.setForm(formObject, false);
	
	var callback = {
		failure : function(response) {
			// alert('エラーが発生しました。しばらくしてから再度お試し下さい。');
		},
		success: function(response) {
			if (layerId != null && layerId != '') {
				$(layerId).innerHTML = response.responseText;
			}
			if (func != null) {
				setTimeout(function(){func();}, 1000);
			}
		},
		timeout: _REQUEST_TIMEOUT
	};
	
	var ajax = YAHOO.util.Connect.asyncRequest('POST', url, callback);
}
function requestActionByUploadForm(url, formName, layerId, func) {
	var uniqueParam = new Date().getTime();
	url += '?' + _UNIQUE_PARAM + '=' + uniqueParam;
	
	var formObject = $(formName);
	YAHOO.util.Connect.setForm(formObject, true);
	
	var callback = {
		failure : function(oResponse) {
			// alert('エラーが発生しました。しばらくしてから再度お試し下さい。');
		},
		upload : function(oResponse) {
			if (layerId != null && layerId != '') {
				$(layerId).innerHTML = oResponse.responseText;
			}
			if (func != null) {
				setTimeout(function(){func();}, 1000);
			}
		},
		timeout: _REQUEST_TIMEOUT
	};
	
	var ajax = YAHOO.util.Connect.asyncRequest('POST', url, callback);
}
//-------------------------------------------------------------------
// Popup message
//-------------------------------------------------------------------
function showPopupWindowByParam(url, params, func) {
	var uniqueParam = new Date().getTime();
	url += '?' + _UNIQUE_PARAM + '=' + uniqueParam + '&' + params;
	
	disableMainWindow();
	
	var callback = {
		success: function(oResponse) {
			$('popup_edit_page').innerHTML = oResponse.responseText;
			initPopupWindow(0,0,'popup_edit_page',0,0);
			if (func != null) {
				setTimeout(function(){func();}, 1000);
			}
		},
		failure: function(oResponse) {
			// alert('エラーが発生しました。しばらくしてから再度お試し下さい。');
		},
		timeout: _REQUEST_TIMEOUT
	};
	
	YAHOO.util.Connect.asyncRequest('POST', url, callback);
}
function showPopupWindowByForm(url, formName, func) {
	var uniqueParam = new Date().getTime();
	url += '?' + _UNIQUE_PARAM + '=' + uniqueParam;
	
	var formObject = $(formName);
	YAHOO.util.Connect.setForm(formObject, false);
	
	disableMainWindow();
	
	var callback = {
		success: function(oResponse) {
			$('popup_edit_page').innerHTML = oResponse.responseText;
			initPopupWindow(0,0,'popup_edit_page',0,0);
			if (func != null) {
				setTimeout(function(){func();}, 1000);
			}
		},
		failure: function(oResponse) {
			// alert('エラーが発生しました。しばらくしてから再度お試し下さい。');
		},
		timeout: _REQUEST_TIMEOUT
	};
	
	YAHOO.util.Connect.asyncRequest('POST', url, callback);
}
function showPopupWindowByUploadForm(url, formName, func) {
	var uniqueParam = new Date().getTime();
	url += '?' + _UNIQUE_PARAM + '=' + uniqueParam;
	
	var formObject = $(formName);
	YAHOO.util.Connect.setForm(formObject, true);
	
	disableMainWindow();
	
	var callback = {
		failure : function(oResponse) {
			// alert('エラーが発生しました。しばらくしてから再度お試し下さい。');
		},
		upload : function(oResponse) {
			$('popup_edit_page').innerHTML = oResponse.responseText;
			initPopupWindow(0,0,'popup_edit_page',0,0);
			if (func != null) {
				setTimeout(function(){func();}, 1000);
			}
		},
		timeout: _REQUEST_TIMEOUT
	};
	
	YAHOO.util.Connect.asyncRequest('POST', url, callback);
}
function hidePopupWindow() {
	$('popup_edit_page').innerHTML = '';
	$('popup_edit_page').hide();
	enableMainWindow();
}
function initPopupWindow(popupX, popupY, layerId, offsetX, offsetY) {
	var bubble = $(layerId);
	var needScroll = true;
	var windowSize = getWindowSize();
	var popupWidth = 500;
	
	deltaX =  window.pageXOffset
		|| document.documentElement.scrollLeft
		|| document.body.scrollLeft
		|| 0;
	deltaY =  window.pageYOffset
		|| document.documentElement.scrollTop
		|| document.body.scrollTop
		|| 0;
	
//	if (popupY - deltaY < windowSize[1]/2) {
//		if (windowSize[1] - (popupY - deltaY) < bubble.getHeight()) needScroll = true;
//	} else {
//		if (popupY - deltaY < bubble.getHeight()) needScroll = true;
//	}
	
	if ((popupX + popupWidth) > windowSize[0]) {
		popupX = windowSize[0] - popupWidth;
	} else {
		popupX = (windowSize[0] - popupWidth) / 2;
	}
	
	if (popupY == 0) {
		popupY = (windowSize[1] + deltaY - 300) / 2;
	}
	
	document.getElementById(layerId).style.left = (popupX + offsetX) + "px";
	document.getElementById(layerId).style.top = (popupY + offsetY) + "px";
	
	setWidgetVisibility(layerId, true);
	bubble.show();
	
	if (needScroll) Element.scrollTo(bubble);
}
function disableMainWindow() {
	changeSelectVisible('hidden');
	setOpacity(5, 'wait_area');
}
function enableMainWindow() {
	changeSelectVisible('visible');
	setOpacity(0, 'wait_area');
}
function setOpacity(value, layerId) {
	var elm = $(layerId);
	var windowSize = getWindowSize();
	var deltaY =  window.pageYOffset
		|| document.documentElement.scrollTop
		|| document.body.scrollTop
		|| 0;
	
	if (elm && value > 0) {
		setWidgetLayerPosition(layerId, 0, 0);
		var windowSize = getWindowSize();
		elm.style.visibility = 'visible';
		elm.style.width = (windowSize[0] - 20) + "px";
		elm.style.height = (windowSize[1] + deltaY) + "px";
		
		elm.style.opacity = value / 10;
		elm.style.MozOpacity = value / 10;
		elm.style.filter = 'alpha(opacity=' + value * 10 + ')';
		elm.style.zIndex = 5;
	} else {
		elm.style.visibility = 'hidden';
		
		elm.style.opacity = value / 10;
		elm.style.MozOpacity = value / 10;
		elm.style.filter = 'alpha(opacity=' + value * 10 + ')';
	}
}

//-------------------------------------------------------------------
// Context menu
//-------------------------------------------------------------------
var currentMenuId;
function showContextMenu(layerId, e, parentId) {
	hideContextMenu();
	var x = Event.pointerX(e);
	var y = Event.pointerY(e);
	
	// Layer上のcontextの場合の位置補正
	var deltaX = 0;
	var deltaY = 0;
	if ($(parentId)) {
		if (document.all) {
			// IE
			var p1 = Position.cumulativeOffset($(parentId));
		} else {
			var p1 = Position.cumulativeOffset($('popup_edit_page'));
		}
		
		deltaX = x - parseFloat(p1[0]);
		deltaY = y - parseFloat(p1[1]);
	} else {
		deltaX = x;
		deltaY = y;
	}
	
	$(layerId).style.top = deltaY + "px";
	$(layerId).style.left = deltaX + "px";
	$(layerId).style.display = 'block';
	$(layerId).style.visibility = 'visible';
	
	currentMenuId = layerId;
	
//	Event.observe($(layerId), "mouseout", hideContextMenu, false);
	Event.observe(document, "click", hideContextMenu, false);
}
function hideContextMenu() {
	if ($(currentMenuId)) {
		$(currentMenuId).style.visibility = 'hidden';
		$(currentMenuId).style.display = 'none';
	}
}

/**
 * Windowの幅を取得します
 */
function getWindowSize() {
	var myWidth = 0, myHeight = 0;
	
	if( typeof( window.innerWidth ) == 'number' ) {
		//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	} else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	}
	
	return [myWidth, myHeight];
}

/**
 * 全てのselectboxの表示を切り替えます。<br>
 * IE6の場合Leyerでz-indexを指定してもselectboxが上に来てしまうため、
 * ここで非表示/表示の切り替えを行ないます。
 */
function changeSelectVisible(param) {
	var i,j = 0;
	if (document.all) {
		for (i = 0; i < document.forms.length; i++) {
			for (j = 0; j < document.forms[i].elements.length; j++) {
				if (document.forms[i].elements[j].type && document.forms[i].elements[j].type.indexOf("select") != -1) {
					document.forms[i].elements[j].style.visibility=param;
				}
			}
		}
	}
}

//-------------------------------------------------------------------
// 折りたたみ
//-------------------------------------------------------------------
function showPlagin(pcid) {
	pc = ('plag_cl_' + (pcid));
	po = ('plag_op_' + (pcid));
	
	if($(pc).style.display == "none") {
		$(pc).style.display = "block";
		$(po).style.display = "none";
	} else {
		$(pc).style.display = "none";
		$(po).style.display = "block";
	}
}

// Wait用のLayerとPopup用のLayerを出力しておく
document.write('<div id="wait_area" style="z-index:5;"></div>');
document.write('<div id="popup_edit_page" style="z-index:10;"></div>');

