/*
JavaScript: works.js (www.ks-architects.com)

last updated on 2008.07.22
(c) 2008 YOSUKE INUI Design Office (http://www.inuiyosuke.jp/)
*/

// ------------------------------- SHORT-CUT KEYS -------------------------------
document.onkeydown = function () {
	if (macFF || winFF) { event = arguments[0]; }
	if (event.altKey || event.ctrlKey || event.shiftKey) { return true; }
	if	(event.keyCode == 27)	{ }	// ESC
	else if	(event.keyCode == 39)	{ JSS.slide (-3/4, JSS.focuskey, 1); }	// →
	else if	(event.keyCode == 37)	{ JSS.slide (3/4, JSS.focuskey, 1); }	// ←
	else if	(event.keyCode == 38)	{ JSS.slide (3/4, JSS.focuskey); }	// ↑
	else if	(event.keyCode == 40)	{ JSS.slide (-3/4, JSS.focuskey); }	// ↓
	else if	(event.keyCode == 33)	{ JSS.slide(3/4, JSS.focuskey); }	// PAGE UP
	else if	(event.keyCode == 34)	{ JSS.slide(-3/4, JSS.focuskey);  }	// PAGE DOWN
	else if	(event.keyCode == 35)	{ JSS.slide(-99, JSS.focuskey); }	// END
	else if	(event.keyCode == 36)	{ JSS.slide(99, JSS.focuskey);  }	// HOME
	else if	(event.keyCode == 32)	{ JSS.slide(-3/4, JSS.focuskey); }	// Space Bar
	else if	(event.keyCode == 13)	{ GALLERY.open(0); }		// Return
//	else	{ alert(event.keyCode); }
}



// ------------------------------- JSS SCROLL -------------------------------
// ATTENTION! -- This JavaScript need 'system.js'.
// mouse.Set('JSS.drag();');	# Alredy adapted in "com.js".
// wheel.Set('JSS.wheel();');	# Alredy adapted in "com.js".
// msup.Set('JSS.off();');	# Alredy adapted in "com.js".
// load.Set('JSS.set();');	# Alredy adapted in "com.js".
var JSS = { timer:new Array(), flag:new Array(), key:new Array(), keys:new Array(),
	device:new Array(), objs:new Array(), up:new Array(), dn:new Array(), pagetop:new Array(), /* to scroll */
	area:new Array(), areaX:new Array(), areaY:new Array(), areaoffset:0, /* scroll area */
	bar:new Array(), barX:new Array(), barY:new Array(), barOffset:0, barSize:new Array(), /* bar */
	box:new Array(), /* scroll bar box */
	mouseoffset:0, focus:0, focuskey:0, dragkey:undefined,
set:function () {
	JSS.objs		= new CLASS('JSS');
	JSS.area		= new CLASS('JSS_AREA');
	JSS.device	= new CLASS('JSS_DEVICE');
	JSS.bar		= new CLASS('JSS_BAR');
	JSS.box		= new CLASS('JSS_BOX');
	JSS.up		= new CLASS('JSS_UP');
	JSS.dn		= new CLASS('JSS_DN');
	JSS.pagetop	= new CLASS('JSS_PAGETOP');

for (i = 0; i < JSS.objs.length; i ++) {
	ENV.Set();
	JSS.areaoffset = parseInt((ENV.W - 960 ) / 2);
	JSS.area[i].setA(0);
	JSS.area[i].setX(JSS.areaoffset + 30);
	JSS.area[i].setD(1);
	JSS.area[i].setW (210 * JSS.objs[i].path.childNodes[0].childNodes[0].childNodes.length);
	JSS.device[i].setW (960);
	JSS.box[i].setW (JSS.device[i].W - 31);
	JSS.box[i].setH (11);
	JSS.device[i].setD(0); 
	JSS.bar[i].setY(JSS.barOffset);
	JSS.pagetop[i].setD(0); 

if (JSS.objs[i].flag && (JSS.area[i].W + JSS.areaoffset) > JSS.objs[i].W ) {
	if (JSS.pagetop[i] && JSS.pagetop[i].flag) { JSS.pagetop[i].setD(1); if (!JSS.flag[i]) { JSS.area[i].setW(JSS.area[i].W + 202); }}

	JSS.flag[i] = true;
	JSS.areaX[i]	= JSS.area[i].X;
	JSS.barX[i]	= JSS.bar[i].X;
//	JSS.box[i].setH(JSS.box[i].H);
//	JSS.box[i].setW(JSS.box[i].W);
	JSS.device[i].setD(1);

	JSS.barSize[i] = parseInt(JSS.objs[i].W / (JSS.area[i].W + JSS.areaoffset)  * JSS.box[i].W);
	JSS.barSize[i] = (JSS.barSize[i] < 30) ? 30 : JSS.barSize[i];

	// スクロール中の範囲選択を停止
	if ( document.getElementsByTagName('body')[0] ) { 
		document.getElementsByTagName('body')[0].onmousedown	= function () { return ((JSS.dragkey != undefined && JSS.key[JSS.dragkey])) ? false : true; }
		document.getElementsByTagName('body')[0].onmousemove	= function () { return ((JSS.dragkey != undefined && JSS.key[JSS.dragkey])) ? false : true; }
	}
	else if ( document.body ) { 
		document.body.onmousedown				= function () { return ((JSS.dragkey != undefined && JSS.key[JSS.dragkey])) ? false : true; }
		document.body.onmousemove				= function () { return ((JSS.dragkey != undefined && JSS.key[JSS.dragkey])) ? false : true; }
	}

	eval ('JSS.objs[' + i + '].path.onmouseover	= function () { clearTimeout(JSS.timer); JSS.focus = 1; JSS.focuskey = ' + i + '; }');
	eval ('JSS.objs[' + i + '].path.onmousemove	= function () { clearTimeout(JSS.timer); JSS.focus = 1; JSS.focuskey = ' + i + '; }');
//	eval ('JSS.objs[' + i + '].path.onmouseout	= function () { JSS.timer = setTimeout("JSS.focus = 0; JSS.focuskey = 0;",16); }');
	eval ('JSS.bar[' + i + '].path.onmousedown	= function () { JSS.on(' + i + '); }');
	eval ('JSS.box[' + i + '].path.onmousedown	= function () { JSS.slide(false, ' + i + '); }');
	eval ('JSS.up[' + i + '].path.onclick		= function () { JSS.slide(3/5, ' + i + '); JSS.key[' + i + '] = false; return false; }');
	eval ('JSS.dn[' + i + '].path.onclick		= function () { JSS.slide(-3/5, ' + i + '); JSS.key[' + i + '] = false; return false; }');
	eval ('JSS.pagetop[' + i + '].path.onclick	= function () { JSS.slide(' + JSS.areaoffset + ', ' + i + '); JSS.key[' + i + '] = false; return false; }');

// 初期動作
	JSS.bar[i].setH(11);
	if (JSS.bar[i].W < 30) { JSS.bar[i].setW(1); }
	size.Set(JSS.bar[i], JSS.box[i].H, JSS.barSize[i]);

}
// 初期絶対動作
	move.Set(JSS.area[i], JSS.areaY, JSS.areaoffset);
	trans.Set(JSS.area[i], 100,8);
}},
on:function (key) { JSS.key[key] = true; JSS.mouseoffset = MX - JSS.barX[key]; JSS.dragkey = key; return false; },
off:function (key) { JSS.key[key] = false; JSS.dragkey = undefined; },
move:function (tmp, key) { if (JSS.flag[key]) {
	JSS.areaX[key] = (arguments[0]) ? arguments[0] : 0;

	if	(JSS.areaX[key] > JSS.areaoffset )					{ JSS.areaX[key] = JSS.areaoffset; }
	else if	(JSS.areaX[key] < JSS.objs[key].W - (JSS.area[key].W + JSS.areaoffset) )	{ JSS.areaX[key] = JSS.objs[key].W - (JSS.area[key].W + JSS.areaoffset); }

	JSS.barX[key] = - parseInt((JSS.areaX[key] - JSS.areaoffset) / ((JSS.area[key].W + JSS.areaoffset) - (JSS.objs[key].W - JSS.areaoffset)) * (JSS.box[key].W - JSS.barSize[key]));
	if	(JSS.barX[key] < JSS.barOffset)					{ JSS.barX[key] = JSS.barOffset; }
	else if	(JSS.barX[key] > JSS.box[key].W - JSS.barSize[key] )			{ JSS.barX[key] = JSS.box[key].W - JSS.barSize[key]; }

	move.Set(JSS.area[key], JSS.areaY[key], JSS.areaX[key], 3, 200);
	move.Set(JSS.bar[key], JSS.barY[key], JSS.barX[key], 5, 30);

}},
drag:function () { if (JSS.dragkey != undefined && JSS.flag[JSS.dragkey]) {
	if (JSS.key[JSS.dragkey]) {
	JSS.barX[JSS.dragkey] = MX - JSS.mouseoffset;
	if	(JSS.barX[JSS.dragkey] < JSS.barOffset)					{ JSS.barX[JSS.dragkey] = JSS.barOffset; }
	else if	(JSS.barX[JSS.dragkey] > JSS.box[JSS.dragkey].W - JSS.bar[JSS.dragkey].W )	{ JSS.barX[JSS.dragkey] = JSS.box[JSS.dragkey].W - JSS.bar[JSS.dragkey].W; }
	JSS.areaX[JSS.dragkey] = parseInt( - ((JSS.area[JSS.dragkey].W + JSS.areaoffset) - JSS.objs[JSS.dragkey].W + JSS.areaoffset) / (JSS.box[JSS.dragkey].W - JSS.bar[JSS.dragkey].W) * JSS.barX[JSS.dragkey]) + JSS.areaoffset;

	JSS.bar[JSS.dragkey].setX(JSS.barX[JSS.dragkey]);		move.Set(JSS.bar[JSS.dragkey], JSS.barY[JSS.dragkey], JSS.barX[JSS.dragkey]);
	JSS.area[JSS.dragkey].setX(JSS.areaX[JSS.dragkey]);	move.Set(JSS.area[JSS.dragkey], JSS.areaY[JSS.dragkey], JSS.areaX[JSS.dragkey]);
	}
}},
slide:function () { if (JSS.flag[(arguments[1])]) {
	var tmp = 1;
	if (!JSS.bar[(arguments[1])].tXoffset)	{ JSS.bar[(arguments[1])] = new OBJ (JSS.bar[(arguments[1])].path); }
	if (arguments[0])							{ tmp	= arguments[0]; }
	else if (MX - JSS.bar[(arguments[1])].tX > JSS.barSize[(arguments[1])])	{ tmp	= -3/5; }
	else if (MX - JSS.bar[(arguments[1])].tX < 0)				{ tmp	= 3/5; }
	else								{ tmp	= 0; }

	if	(arguments[2] && tmp > 0 && JSS.areaX[(arguments[1])] >= JSS.areaoffset )							{ return history.go(-1); }
	else if	(arguments[2] && tmp < 0 && JSS.areaX[(arguments[1])] <= JSS.objs[(arguments[1])].W - (JSS.area[(arguments[1])].W + JSS.areaoffset))	{ return NEXT.go(); }

//	JSS.areaX[(arguments[1])] += parseInt(tmp * JSS.objs[(arguments[1])].W);
	JSS.areaX[(arguments[1])] += parseInt(210 * tmp * 5);

	JSS.move(JSS.areaX[(arguments[1])], arguments[1]);
	JSS.on ();
	return false;
} else if (arguments[2]) {
	if	(arguments[0] > 0)	{ return history.go(-1); }
	else if	(arguments[0] < 0)	{ return NEXT.go(); }
}},
wheelkey:0, wheel:function () { if (JSS.focuskey != undefined && JSS.flag[JSS.focuskey]) {
	var tmp = (MW > 0) ? 1/5: -1/5;
//	if	(tmp > 0 && JSS.areaX[JSS.focuskey] >= 0)						{ JSS.wheelkey++; if (JSS.wheelkey >= 7) { JSS.timer = setTimeout("JSS.focus = 0; JSS.focuskey = undefined;",16); JSS.slide (1/8); JSS.key = false; }}
//	else if	(tmp < 0 && JSS.areaX[JSS.focuskey] <= JSS.objs[JSS.focuskey].W - JSS.area[JSS.focuskey].W)	{ JSS.wheelkey--; if (JSS.wheelkey <= -7) { JSS.timer = setTimeout("JSS.focus = 0; JSS.focuskey = undefined;",16); JSS.key = false; }}
	if ( false )  {;}
	else											{ JSS.wheelkey = 0; JSS.slide (tmp, JSS.focuskey); }
	for (i = 0; i < JSS.key.length; i ++) { JSS.key[i] = false; }
	JSS.dragkey = false;
}}
}
