var MAG = 3;
var TOP = 24;
var BTM = 585;
var BDR = 105;

var DELTAX;
var DELTAY;

var FLAG = false;
var MOVE = false;
var GFLAG = false;
var GMOVE = false;
var PAR;
var VGD;
var FGD;

var OPERA = false;
var FIREFOX = false;
var IE = false;

var RATE = new Array("fun", "tri", "tax", "may", "ss", "vs");
var LEVEL = new Array( 30,    30,    30,    30,    5,   20);
var PARTS = new Array("bom", "bldl", "bldr", "bas", "min", "dig");
var DEFX = new Array( 54, 171, 171, 321, 486, 627);
var DEFY = new Array( 27,  24,  63,  72,  27,  27);


// ************************************ SUB

function addEvent(obj, evt, fnc, useCapture) {
	if (obj.addEventListener) {
		obj.addEventListener(evt, fnc, useCapture);
		return true;
	} else if (obj.attachEvent) {
		return obj.attachEvent('on' + evt, fnc);
	} else {
		obj['on'+evt] = fnc;
		return false;
	}
}

function delEvent(obj, evt, fnc, useCapture) {
	if (obj.removeEventListener) {
		obj.removeEventListener(evt, fnc, useCapture);
		return true;
	} else if (obj.detachEvent) {
		return obj.detachEvent('on' + evt, fnc);
	} else {
		obj['on'+evt] = fnc;
		return false;
	}
}

function getMousePosX(evt) {
	if (OPERA) return event.x;
	if (IE) return event.clientX + document.body.scrollLeft;
	if (FIREFOX) return evt.pageX;
	return event.x;
}

function getMousePosY(evt) {
	if (OPERA) return event.y;
	if (IE) return event.clientY + document.body.scrollTop;
	if (FIREFOX) return evt.pageY;
	return event.y;
}

function getObjPosX(obj) {
	return parseInt(getObjStyle(obj, "left"));
}

function getObjPosY(obj) {
	return parseInt(getObjStyle(obj, "top"));
}

function setObjPos(obj, x, y, pos) {
	obj.style.left = x + 'px';
	obj.style.top  = y + 'px';
	obj.style.position = (pos == 'fixed' && IE)? 'absolute' : pos;
	return false;
}

function moveTopLayer(obj) {
	obj.style.zIndex = 1;
	return false;
}

function moveBtmLayer(obj) {
	obj.style.zIndex = 'auto';
	return false;
}

function getObjStyle(obj, sty) {
	if (IE) return obj.currentStyle[sty];
	return document.defaultView.getComputedStyle(obj,"").getPropertyValue(sty);
}



// ************************************ PARTS MOVE

function moveOn(imgId) {
	if (MOVE || GMOVE) return false;
	MOVE = true;
	PAR = document.getElementById(imgId);
	addEvent(PAR, 'mousedown', dragOn,  false);
	addEvent(window.document, 'mouseup',   dragOff, false);
	addEvent(window.document, 'mousemove', dragImg, false);
	return false;
}

function moveOff() {
	if (FLAG) return false;
	if (!MOVE && !FLAG) return false;
	MOVE = false;
	delEvent(PAR, 'mousedown', dragOn,  false);
	delEvent(window.document, 'mouseup',   dragOff, false);
	delEvent(window.document, 'mousemove', dragImg, false);
	return false;
}

function dragOn(evt) {
	if (!MOVE) return false;
	FLAG = true;
	moveTopLayer(PAR);
	DELTAX = getMousePosX(evt) - getObjPosX(PAR)
	DELTAX -= (getObjStyle(PAR, "position") == 'fixed' && FIREFOX) * document.body.scrollLeft;
	DELTAX += (getObjStyle(PAR, "position") == 'absolute' && OPERA)* document.body.scrollLeft
	DELTAY = getMousePosY(evt) - getObjPosY(PAR);
	return false;
}

function dragOff(evt) {
	FLAG = false;
	if (FIREFOX && (getObjPosY(PAR) < (BDR - PAR.height))) {
		x = Math.floor((evt.pageX - (PAR.width/2) - document.body.scrollLeft) / MAG) * MAG;
		y = getObjPosY(PAR);
		setObjPos(PAR, x, y, 'fixed');
	}
	moveBtmLayer(PAR);
	return false;
}

function dragImg(evt) {
	if (!FLAG) return false;
	var nx = getMousePosX(evt);
	var ny = getMousePosY(evt);
	var yy = Math.floor((ny - DELTAY + document.documentElement.scrollTop) / MAG) * MAG;
	var xx;
	var pos;
	if (yy < BDR) {
		if (yy < (BDR - PAR.height)) {
			if (OPERA || IE) {
				pos = 'fixed';
				xx = Math.floor((nx - DELTAX) / MAG) * MAG;
			} else {
				pos = 'absolute';
				xx = Math.floor((nx - DELTAX + document.documentElement.scrollLeft) / MAG) * MAG;
			}
		} else {
			pos = 'absolute';
			xx = Math.floor((nx - DELTAX + document.documentElement.scrollLeft) / MAG) * MAG;
			yy = BDR;
		}
	} else {
		pos = 'absolute';
		xx = Math.floor((nx - DELTAX + document.documentElement.scrollLeft) / MAG) * MAG;
	}
	yy = Math.max(yy, TOP);
	yy = Math.min(yy, BTM - PAR.height);
	xx = Math.max(xx, 0);
	xx = Math.min(xx, (1248*MAG) - PAR.width);
	setObjPos(PAR, xx, yy, pos);
	return false;
}



// ************************************ GUIDE MOVE

function moveGuideOn() {
	if (MOVE || GMOVE) return false;
	GMOVE = true;
	GFLAG = false;
	addEvent(VGD, 'mousedown', dragGuideOn,  false);
	addEvent(window.document, 'mouseup',   dragGuideOff, false);
	addEvent(window.document, 'mousemove', dragGuide, false);
	return false;
}

function moveGuideOff() {
	if (GFLAG) return false;
	FGD.style.left = getObjStyle(VGD, "left");
	GMOVE = false;
	delEvent(VGD, 'mousedown', dragGuideOn,  false);
	delEvent(window.document, 'mouseup',   dragGuideOff, false);
	delEvent(window.document, 'mousemove', dragGuide, false);
	return false;
}

function dragGuideOn() {
	GFLAG = true;
	return false;
}

function dragGuideOff() {
	FGD.style.left = getObjStyle(VGD, "left");
	GFLAG = false;
	GMOVE = false;
	delEvent(VGD, 'mousedown', dragGuideOn,  false);
	delEvent(window.document, 'mouseup',   dragGuideOff, false);
	delEvent(window.document, 'mousemove', dragGuide, false);
	return false;
}

function dragGuide(evt) {
	if (!GFLAG) return false;
	var nx = getMousePosX(evt);
	var ny = getMousePosY(evt);
	var xx = Math.floor((nx - 4 + (!FIREFOX)*document.body.scrollLeft) / MAG) * MAG;
	xx = Math.max(xx, 0);
	xx = Math.min(xx, (1248*MAG) - 9);
	var yy = Math.floor((ny - 94) / MAG) * MAG;
	yy = Math.max(yy, BDR);
	yy = Math.min(yy, BTM - 189);
	setObjPos(VGD, xx, TOP, 'absolute');
	setObjPos(FGD, xx, yy,  'absolute');
	return false;
}


// ************************************ MISC

function flipImg(imgId) {
	PAR = document.getElementById(imgId);
	sUrl = PAR.src;
	sLen = sUrl.length;
	if (sUrl.substring(sLen-11,sLen) == "build_r.gif") {
		iUrl = "build_l.gif";
	} else if (sUrl.substring(sLen-11,sLen) == "build_l.gif") {
		iUrl = "build_r.gif";
	} else if (sUrl.substring(sLen-10,sLen) == "mine_r.gif") {
		iUrl = "mine_l.gif";
	} else if (sUrl.substring(sLen-10,sLen) == "mine_l.gif") {
		iUrl = "mine_r.gif";
	}
	PAR.src = iUrl;
	return false;
}


function stgSelect() {
	var rt = document.stage.Rating.selectedIndex;
	var lv = document.stage.Level.selectedIndex;
	PAR = document.getElementById("stageMap");
	if (LEVEL[rt] <= lv) return false;
	PAR.src = "./stg/" + RATE[rt] + (lv+1) + ".gif";
	setSkills();
	resetParts();
	if (IE) window.scrollTo(1200, 0);
	return false;
}


function resetParts() {
	var prt = 0;
	var cnt;
	do {
		cnt = 0;
		do {
			PAR = document.getElementById(PARTS[prt] + cnt);
			if (PAR) setObjPos(PAR, DEFX[prt] + (IE*1200), DEFY[prt], 'fixed');
		} while (++cnt < 10)
	} while (++prt < 6)
	dragOff();
	FLAG = false;
	MOVE = false;
	return false;
}


function setSkills() {
	var rt = document.stage.Rating.selectedIndex;
	var lv = document.stage.Level.selectedIndex;
	var skills = getSkillNums(rt, lv);
	var i;
	if (IE) {
		for (i=0; i<8; i++) {
			document.getElementById("SKILL"+i).firstChild.nodeValue = skills[i];
		}
	} else {
		for (i=0; i<8; i++) {
			document.getElementById("SKILL"+i).firstChild.nodeValue = ("--" + skills[i]).substr(-2,2);
		}
	}
	return false;
}


function init() {
	VGD = document.getElementById("vguide");
	FGD = document.getElementById("fguide");
	if (window.opera) {
		OPERA = true;
	} else if (document.all) {
		IE = true;
	} else if  (document.getElementById) {
		FIREFOX = true;
	}
	if (IE) {
		document.onSelectStart = function () { return false; }
		VGD.style.left = '-20px';
		FGD.style.left = '-20px';
		document.getElementById("topback").style.left = '1200px';
		document.getElementById("stgselect").style.left = '1590px';
		document.getElementById("skillnums").style.left = '1880px';
		window.scrollTo(1200, 0);
	}
	setSkills();
	resetParts();
	return false;
}



function DEBUGMSG(mes) {
	document.DEBUG.TXT.value = mes + "  M:"+ TF(MOVE) + " F:"+ TF(FLAG) + " GM:"+ TF(GMOVE) + " GF:"+ TF(GFLAG) ;
}

function TF(boo) {
	return (boo)? "T":"F";
}



