﻿/*		
		Common script for Total Solutions, Inc. Web Site.
		http://www.totalsolutions.jp/
		Copyright(c)2007 Total Solutions, Inc.
	
		'global.js' & 'event.js' are required to run this script.
		
		This script is under BSD license.
*/

// ---------- Global variable ----------
var menu = null;
var pagetop = null;
var current = null;

// ---------- Start up ----------
Event.addEventListener(window, Event.load, initCommon);

// ---------- Initialize ----------
function initCommon() {
	
	// global.js & event.js are writen in current html page.
	var Cookie = "check=true; domain=totalsolutions.jp; path=/";
	document.cookie = Cookie;
	
	include('menu.js');
	include('pagetop.js');
	
	initChangeSize();
	initPageTop();
	initMenu();
	
	//google analytics code
	//initAnalytics();
	//_uacct = "UA-1838355-1";
	//urchinTracker();
	
	init(); // writen in current html page.
}
function initChangeSize() {
	var id 				 = '_changesize';
	var base_str	 	 = '<a href="#" class="large">大</a>';
	base_str 			+= '<a href="#" class="medium">中</a>';
	base_str 			+= '<a href="#" class="small">小</a>';
	base_str 			+= '<span>文字サイズ</span>';
	
	var el = document.getElementById(id);
	if(!el) return null;
	el.innerHTML = base_str;
	var an = el.getElementsByTagName('a');
	addEvtChangeSize(an);
}
function initPageTop() {
	var id				= 'pagetop';
	var offset_x		= -150;
	var offset_y		= -50;
	var bodywidth		= 800;
	var scroll			= 100;
	var base_str		= '<a href="#"><span>ページトップへ</span></a>';
	
	pagetop = new PageTop(id, offset_x, offset_y, bodywidth, scroll);
	if(!pagetop.create()) return null;
	pagetop._box.innerHTML = base_str;
	addEvtPageTop();
}
function initMenu() {
	var menu_id			= '_menu';
	var parent_tag		= 'li';
	var parent_cls		= '_parent';
	var child_tag		= 'ul'
	var active_cls		= 'menu_act';
	
	menu = new Menu(menu_id, parent_tag, parent_cls, child_tag, active_cls);
	if(!menu.initMenu()) return false;
	addEvtMenu();
}
function initAnalytics() {
	var url = 'http://www.google-analytics.com/urchin.js';
	var req = null;
	var msHTTP = 'Microsoft.XMLHTTP';
	if(window.XMLHttpRequest) {
		req = new XMLHttpRequest();
	} else if (typeof ActiveXObject != 'undefined') {
		req = new ActiveXObject(msHTTP);
	}
	req.open('GET', url, false);
	req.send('');
	eval(req.responseText);
}
// ---------- Event Listener ----------
function addEvtChangeSize(el) {
	for(var i=0; i<el.length; i++) {
		Event.addEventListener(el[i], Event.click, sizeClick);
	}
}
function addEvtPageTop() {
	Event.addEventListener(window, Event.scroll ,pageScroll);
}
function addEvtMenu() {
	for(var i=0; i<menu.total; i++) {
		menu._parent[i].col = i;
		if(!Event.addEventListener(menu._parent[i], Event.mouseover, menuOver)) return false;
		if(!Event.addEventListener(menu._parent[i], Event.mouseout, menuOut)) return false;
		for(var j=0; j<menu._anchor[i].length; j++) {
			menu._anchor[i][j].row = j;
			if(!Event.addEventListener(menu._anchor[i][j], Event.focus, menuFocus)) return false;
			if(!Event.addEventListener(menu._anchor[i][j], Event.blur, menuBlur)) return false;
			if(!Event.addEventListener(menu._anchor[i][j], Event.keydown, menuPress)) return false;
		}
	}
	return true;
}

// ---------- Functions ----------
function changeSize(size) {
	if(!size) return false;
	document.body.style.fontSize = size;
}
function pagetopPopup() {
	var w = document.documentElement.clientWidth;
	var x = Math.min(w, pagetop.body.width) + pagetop.offset.x + document.documentElement.scrollLeft;
	var y = document.documentElement.clientHeight + pagetop.offset.y + document.documentElement.scrollTop;
	pagetop.show(x, y);
}
function pagetopHide() {
	pagetop.hide();
}
function menuShow(evt) {
	var col = menuCol(evt);
	menu.show(col);
}

// ---------- Listener method ----------
function sizeClick(evt) {
	var target = Event._target(evt);
	if(!target) return false;
	var size = target.className;
	changeSize(size);
}
function pageScroll() {
	var h = document.documentElement.scrollTop;
	if(h > pagetop.scroll) pagetopPopup(); else pagetopHide();
}
function menuOver(evt) {
	if(current) current.blur();
	menuShow(evt);
}
function menuOut() {
	menu.hide();
}
function menuFocus(evt) {
	current =  Event._target(evt);
	current.className = menu.activeCls;
	menuShow(evt);
}
function menuBlur() {
	if(current) current.className = null;
	menuOut();
}
function menuPress(evt) {
	var keycode = Event._keycode(evt);
	if(keycode == Event.enter) {
		var href = Event._target(evt).href;
		if(href) document.location.href = href;
		return null;
	}
	if(keycode == Event.esc) {
		if(current) current.blur();
		return null;
	}
	if(keycode == Event.left) {
		Event.preventDefault(evt);
		menuLeft(evt);
		return null;
	}
	if(keycode == Event.right) {
		Event.preventDefault(evt);
		menuRight(evt);
		return null;
	}
	if(keycode == Event.up) {
		Event.preventDefault(evt);
		menuUp(evt);
		return null;
	}
	if(keycode == Event.down) {
		Event.preventDefault(evt);
		menuDown(evt);
		return null;
	}
}
function menuLeft(evt) {
	var col = menuCol(evt);
	if(col >=0 && menu.total) {
		var order = (col <= 0) ? menu.total-1 : col-1;
		menu._anchor[order][0].focus();
	}
}
function menuRight(evt) {
	var col = menuCol(evt);
	if(col >=0 && menu.total) {
		var order = (col >= menu.total-1) ? 0 : col+1;
		menu._anchor[order][0].focus();
	}
}
function menuUp(evt) {
	var col = menuCol(evt);
	var row = Event._target(evt).row;
	if(col >= 0 && row >= 0) {
		var order = (row <= 0) ? menu._anchor[col].length-1 : row-1;
		menu._anchor[col][order].focus();
	}
}
function menuDown(evt) {
	var col = menuCol(evt);
	var row = Event._target(evt).row;
	if(col >= 0 && row >= 0) {
		var order = (row >= menu._anchor[col].length-1) ? 0 : row+1;
		menu._anchor[col][order].focus();
	}
}
function menuCol(evt) {
	var target = Event._target(evt);
	for(var i=0; i<10 ; i++) {
		if(target.col != undefined) break;
		if(!target.parentNode) return null;
		target = target.parentNode;
	}
	return target.col;
}

// ---------- Get mouse position ----------
function _mousex(evt) {
	return Event._mousex(evt) + document.documentElement.scrollLeft;
}
function _mousey(evt) {
	return Event._mousey(evt)+document.documentElement.scrollTop;
}
