/* Tiny Scrolling - a smooth navigation between internal links and their destinations
by Marco Rosella - http://www.centralscrutinizer.it/en/design/js-php/tiny-scrolling
based on the works by Travis Beckham and Brian McAllister.
                v0.3 - March 27, 2006
*/

window.onload = function() {
	tinyScrolling.init();
	}

var tinyScrolling = {
	speed : 50,      //set here the scroll speed: when this value increase, the speed decrease. 
	maxStep: 150,	 //set here the "uniform motion" step for long distances
	brakeK: 3,		 //set here the coefficient of slowing down
	hash:null,		
	currentBlock:null,
	requestedY:0,
	init: function() {
			var lnks = document.getElementsByTagName('a');   
			for(var i = 0, lnk; lnk = lnks[i]; i++) {   
				if ((lnk.href && lnk.href.indexOf('#') != -1) &&  ( (lnk.pathname == location.pathname) ||
				('/'+lnk.pathname == location.pathname) ) && (lnk.search == location.search)) {  
				lnk.onclick = tinyScrolling.initScroll;   		
				}   
			}
	},
	getElementYpos: function(el){
			var y = 0;
			while(el.offsetParent){  
				y += el.offsetTop    
				el = el.offsetParent;
			}	return y;
	},		
	getScrollTop: function(){
			if(document.all) return (document.documentElement.scrollTop) ? document.documentElement.scrollTop : document.body.scrollTop;
			else return window.pageYOffset;   
	},	
	getWindowHeight: function(){
			if (window.innerHeight)	return window.innerHeight;
			if(document.documentElement && document.documentElement.clientHeight) return document.documentElement.clientHeight;
	},
	getDocumentHeight: function(){
			if (document.height) return document.height;
			if(document.body.offsetHeight) return document.body.offsetHeight;
	},
	initScroll: function(e){
			var targ;  
			if (!e) var e = window.event;
			if (e.target) targ = e.target;
			else if (e.srcElement) targ = e.srcElement;   
			tinyScrolling.hash = targ.href.substr(targ.href.indexOf('#')+1,targ.href.length); 
			tinyScrolling.currentBlock = document.getElementById(tinyScrolling.hash);   
			if(!tinyScrolling.currentBlock) return;
			tinyScrolling.requestedY = tinyScrolling.getElementYpos(tinyScrolling.currentBlock); 
			tinyScrolling.scroll();  
			return false;
	},
	scroll: function(){
			var top  = tinyScrolling.getScrollTop();
			if(tinyScrolling.requestedY > top) {  
				var endDistance = Math.round((tinyScrolling.getDocumentHeight() - (top + tinyScrolling.getWindowHeight())) / tinyScrolling.brakeK);
				endDistance = Math.min(Math.round((tinyScrolling.requestedY-top)/ tinyScrolling.brakeK), endDistance);
				var offset = Math.max(2, Math.min(endDistance, tinyScrolling.maxStep));
			} else { var offset = - Math.min(Math.abs(Math.round((tinyScrolling.requestedY-top)/ tinyScrolling.brakeK)), tinyScrolling.maxStep);
			} window.scrollTo(0, top + offset);  
			if(Math.abs(top-tinyScrolling.requestedY) <= 1 || tinyScrolling.getScrollTop() == top) {
				window.scrollTo(0, tinyScrolling.requestedY);
				if(!document.all || window.opera) location.hash = tinyScrolling.hash;
				tinyScrolling.hash = null;
			} else 	setTimeout(tinyScrolling.scroll,tinyScrolling.speed);
	}		
}


//
//サブウィンドウオープン
/*ウィンドウを多数起動させない方式*/

//--親または子ウインドウの有無確認関数 
function win_closed(winVar) {
  var ua = navigator.userAgent
  if( !!winVar )
    if( ( ua.indexOf('Gecko')!=-1 || ua.indexOf('MSIE 4')!=-1 )
      && ua.indexOf('Win')!=-1 ) 
      return winVar.closed
    else return typeof winVar.document != 'object'
  else return true
}



//本閲覧用サブウィンドウオープン
//ウィンドウを多数起動させない方式
//
var SubWin;
function WinOpenZ( url, winname, size_x, size_y, posi_x, posi_y, options){
  if(!win_closed(SubWin)) SubWin.close();
  if(SubWin && SubWin == winname) SubWin.close();
  var win_x = screen.availWidth;
  var win_y = screen.availHeight;

  if( win_x <= size_x - 15 ){
    size_x = win_x - 15;
  }
  if( win_y <= size_y - 60){
    size_y = win_y - 60;
  }

if (posi_x == 'center'){
    posi_x = (win_x - size_x)/2;
  }else if(posi_x == 'right'){
    posi_x = win_x - size_x - 15;
  }else if(posi_x == 'left'){
    posi_x = 0;
  }

  if (posi_y == 'middle'){
    posi_y = (win_y - size_y)/2;
  }else if(posi_y == 'bottom'){
    posi_y = win_y - size_y - 30;
  }else if(posi_y == 'top'){
    posi_y = 0;
  }

  if(typeof(options) == 'undefined' || options == ''){
    options = ''; //基本的に全てのツールバーを表示
  }

  SubWin = window.open(url, winname ,"width=" + size_x + ",height=" + size_y + ",top=" + posi_y + ",left=" + posi_x + "," + options);
  self.status = "";
  SubWin.focus();
  return SubWin;
}

//ウィンドウを重複起動させない方式
function OpenSubwin(URL,Xsize,Ysize){
  matchStr = new RegExp("[\\W]","g");
  subWin = URL.replace(matchStr,'');
  newWin= window.open(URL,subWin,'width=' +Xsize+ ',height=' +Ysize+ ',menubar=no,toolbar=no,scrollbars=no,resizable=yes');
  newWin.focus();
}
