/**
 * @name       embed.js
 * @version    1.01
 * @updated    2008/06/01
 * @copyright  Copyright (c) 2008, neocom PROJECT, Licenced to.
 */

// エンジンの設置位置
var engineRoot = "/engine/";

if (typeof(scenarioID) == "undefined") {
	var scenarioID = 1;	// 「-1」: デフォルトで停止
}

// swfobject の読み込み
document.writeln("<script type='text/javascript' src='" + engineRoot + "swfobject.js'></script>");



var IE = document.all && (navigator.userAgent.indexOf("Win") != -1);
var MacIE = document.all && (navigator.userAgent.indexOf("Mac") != -1);
var NN;
var gFlashID = "charaNaviFlash";
var gflgStop = false;
var gLOADED = "cn=";
var gLOADED_VALUE;
var FirefoxOnMac = false;

var targetPosX = 0;
var targetPosY = 0;

var move_distX = 0;
var move_distY = 0;
var TimerId = "";
var move_time = 1200;
var timeInterval = 40;
var anime_time = 0;

var flgStopOnEmbed = false;

function InitMoveVariable() {
	move_distX = 20;
	move_distY = 20;
	TimerId = "";
	anime_time = 0;
}

function MoveCharacter(xpos, ypos, quick) {
	InitMoveVariable();
	
	targetPosX = xpos;
	targetPosY = ypos;
	if (!MacIE) {
		var curPosX = parseFloat(document.getElementById(gFlashID).style.left);
		var curPosY = parseFloat(document.getElementById(gFlashID).style.top);
	} else {
		var curPosX = document.all(gFlashID).style.left;
		var curPosY = document.all(gFlashID).style.top;
	}
	var x_dist = Math.abs(curPosX - xpos);
	var y_dist = Math.abs(curPosY - ypos);
	
	// window.scroll(xpos, ypos);
	ScrollToPosition(xpos, ypos);
	
	if (x_dist == 0 && y_dist == 0) {
		return false;
	}
	
	if (typeof(quick) != "undefined" && quick == "true") {
		var move_count =1;
	}else{
		var move_count = Math.ceil(move_time / timeInterval);
	}
	
	move_distX = x_dist / move_count;
	move_distY = y_dist / move_count;
	
	if (curPosX <= xpos) {
		move_distX = move_distX;
	} else {
		move_distX = -move_distX;
	}
	if (curPosY <= ypos) {
		move_distY = move_distY;
	} else {
		move_distY = -move_distY;
	}
	
	if (!MacIE) {
		if (typeof(quick) != "undefined" && quick == "true") {
			MoveAnime()
		} else {
			TimerId = setInterval("MoveAnime()", timeInterval);
		}
	} else {
		if (typeof(quick) != "undefined" && quick == "true") {
			MoveAnimeDocAll()
		} else {
			TimerId = setInterval("MoveAnimeDocAll()", timeInterval);
		}
		document.getElementById(gFlashID).style.display = "block";
	}
	return true;
}

function MoveAnime() {
	if (anime_time <= move_time) {
		document.getElementById(gFlashID).style.left = parseFloat(document.getElementById(gFlashID).style.left) + move_distX  + "px";
		document.getElementById(gFlashID).style.top = parseFloat(document.getElementById(gFlashID).style.top) + move_distY + "px";
		anime_time += timeInterval;
		return false;
	} else {
		clearInterval(TimerId);
		document.getElementById(gFlashID).style.left = targetPosX + "px";
		document.getElementById(gFlashID).style.top = targetPosY + "px";
		return true;
	}
}

function MoveAnimeDocAll() {
	if (anime_time <= move_time) {
		document.all(gFlashID).style.left = parseFloat(document.all(gFlashID).style.left) + move_distX;
		document.all(gFlashID).style.top = parseFloat(document.all(gFlashID).style.top) + move_distY;
		anime_time += timeInterval;
		return false;
	} else {
		clearInterval(TimerId);
		document.getElementById(gFlashID).style.left = targetPosX;
		document.getElementById(gFlashID).style.top = targetPosY;
		document.getElementById(gFlashID).style.display="block";
		return true;
	}
}

function CharaMove(xpos, ypos,quick) {
	MoveCharacter(xpos, ypos,quick);
}

function ShowExternalDialog(msgtext, xpos, ypos, balColor, foreColor, balSize) {
	var myNewDiv = document.createElement('div');
	myNewDiv.setAttribute("style", "position: absolute; color: " + foreColor + "; background-color: " + balColor + "; left: " + xpos + "; top: " + ypos);
	myNewDiv.innerHTML = msgtext.replace("___LT___", "<").replace("___GT___", ">");
	document.body.insertAfter(myNewDiv, document.getElementById(gFlashID).firstChild);
}

function MoveToTagetID(posId, xdist, ydist,quick) {
	if (IE || MacIE) {
		var xpos = GetSpanX_IE(posId);
		var ypos = GetSpanY_IE(posId);
	} else {
		var xpos = GetSpanX_NN(posId);
		var ypos = GetSpanY_NN(posId);
	}
	// window.alert([xpos, ypos]);
	xpos += Number(xdist);
	ypos += Number(ydist);
	MoveCharacter(xpos, ypos,quick);
}

function DragCharacter(xdist, ydist) {
	var move_distX = Number(xdist);
	var move_distY = Number(ydist);
	document.all(gFlashID).style.left = parseFloat(document.all(gFlashID).style.left) + move_distX;
	document.all(gFlashID).style.top = parseFloat(document.all(gFlashID).style.top) + move_distY;
}

var start_mouse_x = false;
var start_mouse_y = false;
function StartDragCharacter() {
	document.onmousemove = function (e) {
		var tempX;
		var tempY;
		if (IE || MacIE) {	// grab the x-y pos.s if browser is IE
			tempX = event.clientX;
			tempY = event.clientY;
  		} else {	// grab the x-y pos.s if browser is NS
			tempX = e.pageX;
			tempY = e.pageY;
  		}  
		if (start_mouse_x) {
			if (!MacIE) {
				document.getElementById(gFlashID).style.left = - start_mouse_x + tempX + parseFloat(document.getElementById(gFlashID).style.left) + "px";
				document.getElementById(gFlashID).style.top = - start_mouse_y + tempY + parseFloat(document.getElementById(gFlashID).style.top) + "px";
			} else {
				window.status = document.all(gFlashID).style.left + 'rrr';
				document.getElementById(gFlashID).style.position = "relative";
				document.all(gFlashID).style.left = - start_mouse_x + tempX + "px";
				document.all(gFlashID).style.top = - start_mouse_y + tempY + "px";
				window.status = document.all('Test_Pos').style.left;
				// document.all('Test_Pos').style.left = - start_mouse_x + tempX + parseFloat(document.getElementById(gFlashID).style.left) + "px";
				// document.all('Test_Pos').style.top = - start_mouse_y + tempY + parseFloat(document.getElementById(gFlashID).style.top) + "px";
			}
		}
		start_mouse_x = tempX;
		start_mouse_y = tempY;
	}
	document.onmouseup = StopDragCharacter;
}

function StopDragCharacter() {
	document.onmousemove = null;
	start_mouse_x = false;
	start_mouse_y = false;
}

document.onmouseup = StopDragCharacter;

function MoveToPosition(position, xdist, ydist, quick) {
	var pos = getPosition(position, 355, 250);
	var xpos = Number(pos[0]) + Number(xdist);
	var ypos = Number(pos[1]) + Number(ydist);
	MoveCharacter(xpos, ypos, quick);
}

function getPosition(position, charaW, charaH) {
	var pageW, pageH, x, y;
	if (IE || MacIE) {
		pageW = window.document.body.clientWidth;
		pageH = window.document.body.clientHeight;
	} else {
		pageW = window.innerWidth;
		pageH = window.innerHeight;
	}
	switch (position) {
		case "left_top":
			x = 0;
			y = 0;
			break;
		case "left_bottom":
			x = 0;
			y = pageH - charaH;
			break;
		case "middle":
			x = (pageW - charaW) / 2;
			y = (pageH - charaH) / 2;
			break;
		case "middle_top":
			x = (pageW - charaW) / 2;
			y = 0;
			break;
		case "right_top":
			x = pageW - charaW;
			y = 0;
			break;
		case "right_bottom":
			x = pageW - charaW;
			y = pageH - charaH;
			break;
		default:
			x = 0;
			y = 0;
			break;
	}
	return [x, y];
}

function GetSpanX_IE(posId) {
	var cf = 0;
	var Elem = window.document.all(posId);
	if (Elem == null) {
		return 0;
	}
	// Elem.scrollIntoView(false);
	var X = 0 + Elem.offsetLeft;
	tempElem = Elem;
	while(tempElem.tagName != "BODY") {
		cf += 1;
		if (cf >= 60) {
			break;
		}
		tempElem = tempElem.offsetParent;
		X += tempElem.offsetLeft;
	}
	// window.alert([document.body.scrollLeft, X, window.document.all(posId).offsetLeft]);
	// X -= document.body.scrollLeft;
	return X;
}

function GetSpanY_IE(posId) {
	var cf = 0;
	var Elem = window.document.all(posId);
	if (Elem == null) {
		return 0;
	}
	// Elem.scrollIntoView(false);
	var Y = 0 + Elem.offsetTop;
	tempElem = Elem;
	while(tempElem.tagName != "BODY") {
		cf += 1;
		if (cf >= 60) {
			break;
		}
		tempElem = tempElem.offsetParent;
		Y += tempElem.offsetTop;
	}
	// Y -= document.body.scrollTop;
	return Y;
}

function GetSpanX_NN(posId) {
	var cf = 0;
	var Elem = window.document.getElementById(posId);
	if (Elem == null) {
		return 0;
	}
	// Elem.scrollIntoView(false);
	var X = 0 + Elem.offsetLeft;
	tempElem = Elem;
	while(tempElem.tagName != "BODY") {
		cf += 1;
		if (cf >= 60) {
			break;
		}
		tempElem = tempElem.offsetParent;
		X += tempElem.offsetLeft;
	}
	// window.alert([window.pageXOffset, X, window.document.getElementById(posId).offsetLeft]);
	// X -= window.pageXOffset;
	return X;
}

function GetSpanY_NN(posId) {
	var cf = 0;
	var Elem = window.document.getElementById(posId);
	if (Elem == null) {
		return 0;
	}
	// Elem.scrollIntoView(false);
	var Y = 0 + Elem.offsetTop;
	tempElem = Elem;
	while(tempElem.tagName != "BODY") {
		cf += 1;
		if (cf >= 60) {
			break;
		}
		tempElem = tempElem.offsetParent;
		Y += tempElem.offsetTop;
	}
	// Y -= window.pageYOffset;
	return Y;
}

function actJump(target, winName, option) {
	window.name = "_self";
	target = target + "?" + gLOADED + "true";
	window.open(target, winName, option);
}

function charaClick() {
	document.getElementById(gFlashID).style.visibility = "hidden";
	gflgStop=true;
}

function charaEnd() {
	setIgnoreCharanavi();
	
	var cn = document.getElementById("charanavi");
	cn.style.visibility = "hidden";
	
	if (typeof(hiddenDialog) != "undefined") {
		hiddenDialog();
	}
	
	// var top_swf = document.getElementById("movie");
	
	if (null != cn && typeof(cn.stopAction) != "undefined") {
		// for Vista IE7
		try {
			cn.stopAction();
		} catch(e) { }
	}
	
	// if (top_swf != null && typeof(top_swf) != "undefined") {
	// 	if (typeof(top_swf.charanavi_close) != "undefined") {
	// 		top_swf.charanavi_close();
	// 	}
	// }
}

function charaVisible(flg) {
	if (flg) {
		document.getElementById(gFlashID).style.visibility = "visible";
		gflgStop = false;
	} else {
		document.getElementById(gFlashID).style.visibility = "hidden";
		gflgStop = true;
	}
}

function ActionEnd() {
	return;
}

function isIgnoreCharanavi() {
	var cn = document.getElementById("charanavi");
	if (null != cn && typeof(cn.isCharanaviIgnore) != "undefined") {
		return cn.isCharanaviIgnore();
	} else {
		setTimeout(function() {
			var cn = document.getElementById("charanavi");
			// if (cn.isCharanaviIgnore()) {
			//	var top_swf = document.getElementById("movie");
			//	if (top_swf != null && typeof(top_swf) != "undefined") {
			//		if (typeof(top_swf.charanavi_close) != "undefined") {
			//			top_swf.charanavi_close();
			//		}
			//	}
			// }
		},1000)
		return false;
		
		cn.isCharanaviIgnore();
	}
}

function EmbedFlash() {
	if (CheckEnvironment()) {
		var src = document.location.href;
		while(src.indexOf("\\", 0) != -1) {
			src = src.replace(/\\/, "/");
		}
		
		src_full = engineRoot + "base.swf?key=" + Math.random();
		
		var ele = document.createElement("div");
		ele.setAttribute("id", gFlashID);
		
		/*ele.onmouseover = function(mp) {
			if (isIgnoreCharanavi()) {
				// alert("hidden");
				var ele = document.getElementById(gFlashID);
				ele.style.left = "0";
				var curY;
				if (IE || MacIE) {
					curY = window.event.clientY;
				} else {
					curY = mp.clientY;
				}
				if (curY < 300) {
					ele.style.top = "300px";
				} else {
					ele.style.top = "0";
				}
			} else {
				// alert("visible");
			}
		};*/
		
		var style = ele.style;
		style.position = "absolute";
		style.width = "355px";
		style.height = "250px";
		style.top = 0;
		style.left = 0;
		style.zIndex = 99;
		
		document.body.appendChild(ele);
		
		var so = new SWFObject(src_full, "charanavi", "355", "250", "8", "#ffffff");
		so.addParam('menu', false);
		so.addParam('wmode', 'transparent');
		so.addParam('allowscriptaccess', 'always');
		so.addVariable('filename', src);
		so.addVariable('engineRoot', engineRoot);
		so.addVariable('scenarioID', scenarioID);
		so.addVariable('versionno', "20080701");
		
		if (checkLoaded()) {
			so.addVariable('navigated', gLOADED_VALUE);
		}
		so.write(gFlashID);
	}
}

function EmbedFlashAndStop() {
	flgStopOnEmbed = true;
	EmbedFlash();
}



function isStopAction() {
	if (flgStopOnEmbed) {
		flgStopOnEmbed = false;
		return true;
	} else {
		return false;
	}
}

function checkLoaded() {
	var src = document.location.href;
	var search="?" + gLOADED;
	
	if (src.lastIndexOf(search) != -1 ) {
		param = getCnParsedParam();
		gLOADED_VALUE = param["cn"];
		return true;
	}
	return false;
}

function CheckEnvironment() {
	var requestedVer = new deconcept.PlayerVersion([8,0,0]);
	var installedVer = deconcept.SWFObjectUtil.getPlayerVersion();
	if (false == installedVer.versionIsValid(requestedVer)) {
		return false;
	}
	if (navigator.userAgent.indexOf("Win") != -1) {
		if (navigator.userAgent.indexOf("MSIE") != -1) {
			var temp=navigator.userAgent.indexOf("MSIE");
			temp += 5;
			var version = navigator.userAgent.substring(temp, temp + 3);
			
			if (Number(version) >= 5.5) {
				// upper Win IE 5.5
				return true;
			} else {
				// lower Win IE 5.5
				return false;
			}
		} else if (navigator.userAgent.indexOf("Netscape") != -1) {
			if (Number(navigator.vendorSub) >= 7.02) {
				// upper NN7.02
				return true;
			} else {
				// lower NN7.02
				return false;
			}
		} if (navigator.userAgent.indexOf("Firefox") != -1) {
			var temp = navigator.userAgent.indexOf("Firefox");
			temp += 8;
			var version = navigator.userAgent.substring(temp, temp + 3);
			if (Number(version) >= 1.5) {
				// upper Win Firefox 1.5
				return true;
			} else {
				// lower Win Firefox 1.5
				return false;
			}
		}
		// other
		return false;
	} else if (navigator.userAgent.indexOf("Mac") != -1) {
		if (navigator.userAgent.indexOf("MSIE") != -1) {
			var temp=navigator.userAgent.indexOf("MSIE");
			temp += 5;
			var version = navigator.userAgent.substring(temp, temp + 3);
			
			if (Number(version) >= 5.20) {
				// upper Mac IE 5.2
				return false;
			} else {
				//lower Mac IE 5.2
				return false;
			}
		} else if (navigator.userAgent.indexOf("Firefox") != -1) {	// Firefox
			var temp=navigator.userAgent.indexOf("Firefox");
			temp += 8;
			var version = navigator.userAgent.substring(temp, temp + 3);
			FirefoxOnMac = true;
			if (Number(version) >= 1.5) {
				// upper Mac Firefox 1.5
				return true;
			}else {
				// lower Mac Firefox 1.5
				return false;
			}
		} else if (navigator.userAgent.indexOf("Safari") != -1) {
			var temp=navigator.userAgent.indexOf("Safari");
			temp += 7;
			var version = navigator.userAgent.substring(temp, temp + 3);
			if (Number(version) >= 312) {
				// upper Mac Safari 1.3
				return true;
			} else {
				// lower Mac Safari 1.3
				return false;
			}
		}
		// other Mac IE
		return false;
	}
}

function charanavi_message(message) {
	var msglog = document.getElementById("cn_msglog");
	if (msglog == null || typeof(msglog) == "undefined") {
		msglog = document.createElement("div");
		msglog.setAttribute("id", "cn_msglog");
		var style = msglog.style;
		style.backgroundColor = "white";
		style.position = "absolute";
		style.width = 400;
		
		msglog.innerHTML = "<textarea id=\"cn_msgarea\" cols=\"80\" rows=\"60\"></textarea>";
		
		document.body.appendChild(msglog);
	}
	
	var logarea = document.getElementById("cn_msgarea");
	var myDate = new Date();
	time = myDate.getHours() + ":" + myDate.getMinutes() + ":" + myDate.getSeconds() + "." + myDate.getMilliseconds();
	logarea.innerHTML = "[" + time + "]"+ message + "\n" + logarea.innerHTML;
	// alert(message);
}

function charanavi_callback() {
	var cn = document.getElementById("charanavi");
	cn.charanavi_callback();
}

var palablocker = false;
function charanavi_restart() {
	var cn = document.getElementById("charanavi");cn.style.visibility = "visible";
	if (palablocker == false) {
		palablocker = true;
		flgStopOnEmbed = false;
		setTimeout(function() {
			palablocker = false;
		},10000);
		if (typeof(hiddenDialog) != "undefined") {
			hiddenDialog();
		}
		cn.style.visibility = "visible";
		cn.Rewind();
		setTimeout(function() {
			resetIgnoreCharanavi();
			var cn = document.getElementById("charanavi");
			cn.Rewind();
		},200);
	}
}

function charanavi_toggle() {
	var cn = document.getElementById("charanavi");
	if (cn.style.visibility == "hidden") {
		cn.style.visibility = "visible";
	} else {
		cn.style.visibility = "hidden";
	}
}

function setIgnoreCharanavi() {
	var cn = document.getElementById("charanavi");
	if (null != cn) {
		cn.style.visibility = "visible";
		cn.setCharanaviIgnore();
	}
}

function resetIgnoreCharanavi() {
	var cn = document.getElementById("charanavi");
	if (null != cn) {
		cn.style.visibility = "visible";
		cn.resetCharanaviIgnore();
	}
}

function getCnParsedParam() {
	q = location.search.slice(1).split("&");
	h = new Array();
	for (var i = 0 , c = q.length ; i < c ; i++) {
		var s = q[i].split("=");
		h[s[0]] = s[1];
	}
	return h;
}


// 2008/06/19 sumigama
var scrollToY;
var scrollLastY;
var scrollTimer;

function ScrollToPosition(xdist, ydist) {
	if (scrollTimer) { clearInterval(scrollTimer); }
	scrollToY = ydist - 50;
	scrollLastY = GetScrollPosY();
	scrollTimer = setInterval('ScrollDo();', 75);
}

function ScrollDo() {
	var d = scrollLastY - scrollToY;
	var done = false;
	if (Math.abs(d) < 1) {
		done = true;
		scrollLastY = scrollToY;
	} else if (GetScrollPosY() != Math.floor(scrollLastY)) {
		done = true;
	} else {
		scrollLastY -= d / 6;
	}
	self.scrollTo(0, Math.floor(scrollLastY));
	if (done) {
		clearInterval(scrollTimer);
		scrollTimer = null;
	}
}

function GetScrollPosY() {
	if (IE) return document.body.scrollTop;
	return self.pageYOffset;
}



