/* (C)Satoshi Kaizu | Ver.20090915 */
/*@cc_on _d=document;eval('var document=_d')@*/
/*for Dreamweaver: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />*/

function SKSP() {
	var userAgent = navigator.userAgent.toLowerCase();
	this.isMac    = userAgent.match(/Mac|mac/);
	this.isWin    = userAgent.match(/Win|win/);
	this.isIE     = userAgent.match(/MSIE|msie/);
	this.isOldIE  = (userAgent.match(/(MSIE|msie) (5|6)\./) != null);

	this.naviInterval     = null;
	this.scrollInterval   = null;
	this.scrollTargetID   = '';
	this.preloadImages    = [];
	this.rollOverElements = [];
	  
	this.bodyBlockID      = 'body';
	this.mainBlockID      = 'main';
	this.naviBlockID      = 'sidebar';
	this.waitDuration     = 500;
	this.updateDuration   = 10;
	this.easingSpeed      = 10;
	this.mainSlideHeight  = 0;
	this.naviSlideHeight  = 0;
	this.naviSlideTop     = 20;

	var protocol = (document.location.protocol == 'file:') ? 'http:' : document.location.protocol;
	this.usingMouseDown  = false;
	this.mouseOverSuffix = '_o';
	this.mouseDownSuffix = '_d';
	this.domain  = 'www.specialsite2.city.niigata.jp/konanku';
	this.pngPath = protocol + '//' + this.domain + '/share/img/png.gif';
}

SKSP.prototype = {

	addEventListener : function (o, e, f, c) {
		if (e == 'DOMMouseScroll') {
			if (window.addEventListener) window.addEventListener('DOMMouseScroll', f, false);
			window.onmousewheel = document.onmousewheel = f;
		}
		else {
			(o.addEventListener) ? o.addEventListener(e, f, c) : o.attachEvent('on' + e, f);
		}
	},

	removeEventListener : function (o, e, f, c) {
		if (e == 'DOMMouseScroll') {
			if (window.removeEventListener) window.removeEventListener('DOMMouseScroll', f, false);
			window.onmousewheel = document.onmousewheel = null;
		}
		else {
			(o.removeEventListener) ? o.removeEventListener(e, f, c) : o.detachEvent('on' + e, f);
		}
	},

	getElementsByClassName : function(tagName, className) {
		var results  = new Array();
		var elements = document.getElementsByTagName(tagName);
		for (var i = 0, count = elements.length; i < count; i++) {
			if (!elements[i].className) continue;
			var classes = elements[i].className.split(' ');
			for (var j = 0, n = classes.length; j < n; j++) {
				if (classes[j] == className) {
					results[results.length] = elements[i];
					break;
				}
			}
		}
		return results;
	},

	/*--------------------------------------------------*/

	getOffsetTop : function(o) {
		return o.offsetTop + ((o.offsetParent) ? K.getOffsetTop(o.offsetParent) : 0);
	},

	getOffsetLeft : function(o) {
		return o.offsetLeft + ((o.offsetParent) ? K.getOffsetLeft(o.offsetParent) : 0);
	},

	getScrollTop : function() {
		return document.body.scrollTop || document.documentElement.scrollTop;
	},

	/*--------------------------------------------------*/

	getStyle : function (elememt, property, pseudo) {
		var camelize = function(str) {
			return str.replace(/-([a-z])/g, function($0, $1) { return $1.toUpperCase(); });
		};
		var deCamelize = function(str) {
			return str.replace(/[A-Z]/g, function($0) { return '-' + $0.toLowerCase(); });
		};
		if (elememt.currentStyle) {
			if (property.indexOf('-') != -1) property = camelize(property);
			return elememt.currentStyle[property];
		}
		else if (getComputedStyle) {
			if (property.indexOf('-') == -1) property = deCamelize(property);
			return document.defaultView.getComputedStyle(elememt, pseudo).getPropertyValue(property);
		}
		return '';
	},

	getFloatStyle : function(element) {
		var userAgent = navigator.userAgent.toLowerCase();
		var float = K.getStyle(element, 'float');
		if (!float) {
			var styleFloat = (userAgent.match(/msie/) && !userAgent.match(/opera/)) ? 'styleFloat' : 'cssFloat';
			float = K.getStyle(element, styleFloat);
		}
		return float;
	},

	/*--------------------------------------------------*/

	getFlashPlayerMajorVersion : function() {
		var tmp;
		if (navigator.plugins && navigator.mimeTypes.length) {
			tmp = navigator.plugins['Shockwave Flash'].description.match(/([0-9]+)/);
		}
		else {
			tmp = new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version').match(/([0-9]+)/);
		}
		return parseInt(tmp[0]);
	},

	createSWFObject : function(src, attr, param) {
		document.write('\n<object');
		if (K.isIE) document.write(' classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0"');
		if (attr) {
			for (var key in attr) document.write(' ' + key + '="' + attr[key] + '"');
		}
		document.write(' data="' + src + '" type="application/x-shockwave-flash">\n');
		document.write('<param name="movie" value="' + src + '" />\n');
		if (param) {
			for (var key in param) {
				if (key != 'wmode') {
					document.write('<param name="' + key + '" value="' + param[key] + '" />\n');
				}
				else if (param[key] == 'transparent' || K.getFlashPlayerMajorVersion() < 10) {
					document.write('<param name="wmode" value="' + param[key] + '" />\n');
				}
			}
		}
		else 	if (K.getFlashPlayerMajorVersion() < 10) {
			document.write('<param name="wmode" value="opaque" />\n');
		}
		document.write('</object>');
	},
	
	/*--------------------------------------------------*/

	moveNavi : function() {
		clearInterval(K.naviInterval);
		var naviBlock = document.getElementById(K.naviBlockID);
		if (!naviBlock) naviBlock = K.getElementsByClassName('div', K.naviBlockID)[0];
		var scrollTop = K.getScrollTop();
		var targetTop = (scrollTop - K.bodyStartTop) + K.naviSlideTop;
		if (targetTop <= K.naviStartTop) {
			targetTop = K.naviStartTop;
		}
		else if (targetTop >= K.movableTop) {
			targetTop = K.movableTop;
		}
		var naviTop = parseInt(K.getStyle(naviBlock, 'top'));
		var distance = targetTop - naviTop;
		distance += (distance > 0) ? K.easingSpeed : -K.easingSpeed;
		if (Math.abs(distance) > K.easingSpeed) {
			var moving = distance / K.easingSpeed;
			if (Math.abs(moving) < 1) moving = (moving > 0) ? 1 : -1;
			naviBlock.style.top = (naviTop + moving) + 'px';
			K.naviInterval = setInterval(K.moveNavi, K.updateDuration);
		}
		else {
			naviBlock.style.top = targetTop + 'px';
		}
	},

	naviHandler : function() {
		clearInterval(K.naviInterval);
		K.naviInterval = setInterval(K.moveNavi, K.waitDuration);
	},

	setupNavi : function() {
		var bodyBlock = document.getElementById(K.bodyBlockID);
		var mainBlock = document.getElementById(K.mainBlockID);
		var naviBlock = document.getElementById(K.naviBlockID);
		if (!bodyBlock && K.getElementsByClassName('div', K.bodyBlockID).length == 1) bodyBlock = K.getElementsByClassName('div', K.bodyBlockID)[0];
		if (!mainBlock && K.getElementsByClassName('div', K.mainBlockID).length == 1) mainBlock = K.getElementsByClassName('div', K.mainBlockID)[0];
		if (!naviBlock && K.getElementsByClassName('div', K.naviBlockID).length == 1) naviBlock = K.getElementsByClassName('div', K.naviBlockID)[0];
		if (!bodyBlock || !mainBlock || !naviBlock) return;
		var mainHeight = mainBlock.scrollHeight + K.mainSlideHeight;
		var naviHeight = naviBlock.scrollHeight + K.naviSlideHeight;
		if (naviHeight >= mainHeight) return;
		if (!K.getStyle(bodyBlock, 'position').match(/absolute|relative/)) {
			bodyBlock.style.position = 'relative';
		}		
		K.bodyStartTop = K.getOffsetTop(bodyBlock);
		K.naviStartTop = K.getOffsetTop(naviBlock) - K.bodyStartTop;
		K.movableTop = K.naviStartTop + (mainHeight - naviHeight);		
		if (K.getStyle(naviBlock, 'position') != 'absolute') {
			var naviLeft = K.getOffsetLeft(naviBlock) - K.getOffsetLeft(bodyBlock);
			naviBlock.style.position = 'absolute';
			naviBlock.style.float = 'none';
			naviBlock.style.margin = '0px';
			naviBlock.style.top = K.naviStartTop + 'px';
			naviBlock.style.left = naviLeft + 'px';
		}
		K.addEventListener(window, 'scroll', K.naviHandler, false);
		K.addEventListener(window, 'resize', K.naviHandler, false);
		K.moveNavi();
	},

	/*--------------------------------------------------*/

	smoothScroll : function() {
		clearInterval(K.scrollInterval);
		var targetTop = K.getOffsetTop(document.getElementById(K.scrollTargetID));
		var pageHeight = (document.body.scrollHeight) ? document.body.scrollHeight : document.height;
		var windowHeight = (window.innerHeight) ? window.innerHeight : document.documentElement.offsetHeight;
		var scrollMax = pageHeight - windowHeight;
		if (targetTop > scrollMax) targetTop = scrollMax;
		var scrollTop = K.getScrollTop();
		var distance = targetTop - scrollTop;
		distance += (distance > 0) ? K.easingSpeed : -K.easingSpeed;
		if (Math.abs(distance) > K.easingSpeed) {
			var moving = distance / K.easingSpeed;
			if (Math.abs(moving) < 1) moving = (moving > 0) ? 1 : -1;
			window.scrollTo(0, scrollTop + moving);
			K.scrollInterval = setInterval(K.smoothScroll, K.updateDuration);
		}
		else {
			window.scrollTo(0, targetTop);
		}
	},

	setupAnchor : function() {
		var anchors = document.getElementsByTagName('a');
		for (var i = 0, length = anchors.length; i < length; i++) {
			var anchor = anchors[i].getAttribute('href', 2).replace(/#/g, '');
			if (!anchor || !document.getElementById(anchor)) continue;
			var clickHandler = function(e) {
				(e.preventDefault) ? e.preventDefault() : e.returnValue = false;
				var anchor = (e.srcElement) ? e.srcElement : this;
				while (anchor.tagName.toLowerCase() != 'a') anchor = anchor.parentNode;
				K.scrollTargetID = anchor.getAttribute('href', 2).replace(/#/g, '');
				K.scrollInterval = setInterval(K.smoothScroll, K.updateDuration);
			};
			K.addEventListener(anchors[i], 'click', clickHandler, false);
		}
	},

	/*--------------------------------------------------*/
	
	addStopScrollEvent : function() {
		var stopScroll = function(e) {
			if (K.scrollInterval != null) {
				clearInterval(K.scrollInterval);
				K.scrollInterval = null;
			}
		};
		K.addEventListener(document, 'mousedown', stopScroll, false);
		K.addEventListener(window, 'DOMMouseScroll', stopScroll, false);
	},
	
	/*--------------------------------------------------*/
	
	replaceAlphaImage : function(element, type) {
		var original = element.src;
		var imageWidth = element.width;
		var imageHeight = element.height;
		element.src = K.pngPath;
		element.width = imageWidth;
		element.height = imageHeight;
		var src = (type) ? element[type] : (element.original) ? element.original : original;
		element.style.filter = 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + src + '", sizingMethod="scale")';
	},

	setupIEpng : function() {
		if (K.isOldIE && K.isWin) {
			var imgs = document.getElementsByTagName('img');
			for (var i = 0, count = imgs.length; i < count; i++) {
				var img = imgs[i];
				if (img.src.match(/\.png/) && img.original == null) K.replaceAlphaImage(img);
			}
			try {
				document.execCommand('BackgroundImageCache', false, true);
			}
			catch(err) {}
		}
	},
	
	getRollOverElements : function(container, withAnchor) {
		if (!container) return;
		if (container.length == undefined) container = [container];
		for (var j = 0, n = container.length; j < n; j++) {
			if (container[j] == undefined) continue;
			var imgs = container[j].getElementsByTagName('img');
			var inputs = container[j].getElementsByTagName('input');
			for (var i = 0, count = imgs.length; i < count; i++) {
				if (withAnchor && imgs[i].parentNode.tagName.toLowerCase() != 'a') continue;
				var regexp = new RegExp(K.mouseDownSuffix + '(\.gif|\.jpg|\.png)');
				if (imgs[i].src.match(regexp)) continue;
				K.rollOverElements.push(imgs[i]);
			}
			for (i = 0, count = inputs.length; i < count; i++) {
				K.rollOverElements.push(inputs[i]);
			}
		}
	},

	getRollOverButtons : function() {
		var imgs = K.getElementsByClassName('img', 'button');
		var inputs = K.getElementsByClassName('input', 'button');
		var elements = imgs.concat(inputs);
		for (var i = 0, count = elements.length; i < count; i++) {
			K.rollOverElements.push(elements[i]);
		}
	},

	setupRollOverImage : function() {
		if (K.mouseOverSuffix == '') return;
		var elements = K.rollOverElements;
		for (var i = 0, count = elements.length; i < count; i++) {
			var element = elements[i];
			if (K.mouseDownSuffix != '') {
				var regexp = new RegExp(K.mouseDownSuffix + '(\.gif|\.jpg|\.png)');
				if (element.src.match(regexp)) continue;
			}
			element.original  = element.src;
			element.mouseover = element.original.replace(/(\.gif|\.jpg|\.png)/, K.mouseOverSuffix + '$1');
			element.useAlphaImageLoader = false;
			if (K.isOldIE && element.src.match(/\.png/)) {
				element.useAlphaImageLoader = true;
				K.replaceAlphaImage(element);
			}
			var preOverImg = new Image();
			K.preloadImages.push(preOverImg);
			preOverImg.onload = function() {
				K.addEventListener(this.target, 'mouseover', function(o) {
					var o = (o.srcElement) ? o.srcElement : this;
					(o.useAlphaImageLoader) ? K.replaceAlphaImage(o, 'mouseover') : o.src = o.mouseover;
				});
				K.addEventListener(this.target, 'mouseout', function(o) {
					var o = (o.srcElement) ? o.srcElement : this;
					(o.useAlphaImageLoader) ? K.replaceAlphaImage(o) : o.src = o.original;
				});
			}
			preOverImg.target = element;
			preOverImg.src = element.mouseover;
			if (K.usingMouseDown) {
				element.mousedown = element.original.replace(/(\.gif|\.jpg|\.png)/, K.mouseDownSuffix + '$1');				
				var preDownImg = new Image();
				K.preloadImages.push(preDownImg);
				preDownImg.onload = function() {
					K.addEventListener(this.target, 'mousedown', function(o) {
						var o = (o.srcElement) ? o.srcElement : this;
						(o.useAlphaImageLoader) ? K.replaceAlphaImage(o, 'mousedown') : o.src = o.mousedown;
					});
				};
				preDownImg.target = element;
				preDownImg.src = element.mousedown;
			}
		}
	}

}

function setupPage() {	
	K.setupAnchor();
	K.setupNavi();
	K.addStopScrollEvent();
	
	K.getRollOverElements(document.getElementById('logo'), true);
	K.getRollOverElements(document.getElementById('gnav'), true);
	K.getRollOverElements(document.getElementById('pmenu'), true);
	K.getRollOverElements(document.getElementById('sidebar'), true);
	K.getRollOverElements(document.getElementById('footer'), true);	
	if (document.getElementById('information')) {
		K.getRollOverElements(document.getElementById('map'), true);
		K.getRollOverElements(document.getElementById('pickup'), true);
	}
	K.getRollOverElements(K.getElementsByClassName('div', 'index'), true);	
	K.getRollOverElements(K.getElementsByClassName('div', 'check'), true);
	K.getRollOverButtons();
	K.setupRollOverImage();
	K.setupIEpng();
	
	if (K.isOldIE && document.getElementById('path')) {
		var a = document.getElementById('path').getElementsByTagName('a');
		for (var i = 0, count = a.length; i < count; i++) a[i].title = '';
	}
}

var K = new SKSP();
K.addEventListener(window, 'load', setupPage, false);

