var slideEnd      = 10;
var slideOver     = 40;
var slideDelay    = 25;
var slideSpeed    = 3;
var slideInterval = 60;

var chip = new Array();
var Timer = new Object();
if(slideEnd      <  0) slideEnd      = 0;
if(slideOver     <  0) slideOver     = 0;
if(slideDelay    <  0) slideDelay    = 0;
if(slideSpeed    <= 0) slideSpeed    = 1;
if(slideInterval <= 0) slideInterval = 1;

var scrollPos = new Point2D(0,0);
var windowSize = new Point2D(0,0);
var mousePos = new Point2D(0,0);

var Chip_onload = window.onload;
var Chip_onscroll = window.onscroll;
var Chip_onresize = window.onresize;
var Chip_onmousemove = document.onmousemove;

window.onload = function(){
	if(typeof Chip_onload == 'function') Chip_onload();
	getScrollPos();
	getWindowSize();
	Chip_init();
}

window.onscroll = function(){
	if(typeof Chip_onscroll == "function") Chip_onscroll();
	getScrollPos();
}

window.onresize = function(){
	if(typeof Chip_onresize == "function") Chip_onresize();
	getWindowSize();
}

document.onmousemove = function(e){
	if(typeof Chip_onmousemove == 'function') Chip_onmousemove();
	getMousePos(e);
}

function getScrollPos(){
	if( document.all ){
		scrollPos.setX(document.body.scrollLeft);
		scrollPos.setY(document.body.scrollTop);
	}else if( document.getElementById ){
		scrollPos.setX(pageXOffset);
		scrollPos.setY(pageYOffset);
	}
}

function getWindowSize(){
	if( document.all ){
		windowSize.setX(document.body.clientWidth);
		windowSize.setY(document.body.clientHeight);
	}else if( document.getElementById ){
		windowSize.setX(innerWidth);
		windowSize.setY(innerHeight);
	}
}

function getMousePos(e){
	if( document.all ){
		mousePos.setX(scrollPos.X()+event.x);
		mousePos.setY(scrollPos.Y()+event.y);
	}else if( document.getElementById ){
		mousePos.setX(scrollPos.X()+e.clientX);
		mousePos.setY(scrollPos.Y()+e.clientY);
	}
}

function Point2D(x,y){
	this.varX = x;
	this.varY = y;

	this.X = function(){return this.varX;}
	this.Y = function(){return this.varY;}

	this.setX = function(x){this.varX = x;}
	this.setY = function(y){this.varY = y;}
	this.addX = function(x){this.varX = this.X()+x;}
	this.addY = function(y){this.varY = this.Y()+y;}
	this.mulX = function(x){this.varX = this.X()*x;}
	this.mulY = function(y){this.varY = this.Y()*y;}
}

function Chip(){
	this.varBase   = 0;
	this.varCount  = 0;
	this.loadImage = false;

	this.X         = function(){return parseInt(this.Object.style.left);}
	this.Y         = function(){return parseInt(this.Object.style.top);}
	this.Width     = function(){return this.Object.clientWidth;}
	this.Height    = function(){return this.Object.clientHeight;}
	this.Base      = function(){return this.varBase;}
	this.Count     = function(){return this.varCount;}

	this.setX      = function(x){this.Object.style.left  = x;}
	this.setY      = function(y){this.Object.style.top   = y;}
	this.setHTML   = function(arg){this.Object.innerHTML = arg;}
	this.setBase   = function(){this.varBase             = this.X();}
	this.initCount = function(){this.varCount            = 0;}
	this.addCount  = function(){this.varCount           += Math.min((100-this.varCount),slideSpeed);}

	this.Visible   = function(){this.Object.style.visibility = "visible";}
	this.Hidden    = function(){this.Object.style.visibility = "hidden";}

	this.errorImage   = Chip_errorImage;
	this.calcPosition = Chip_calcPosition;

	this.Object = document.createElement("div");
	this.Object.style.visibility = "hidden";
	this.Object.style.position   = "absolute";
	this.Object.style.zIndex     = 10000;
	document.body.appendChild(this.Object);
}

function Chip_init(){
	chip[0] = new Chip();
	chip[1] = new Chip();
}

function Chip_errorImage(){
	this.setHTML("<table cellpadding=0 cellspacing=0><tr><td class='brerror'>Banner not Found...</td></tr></table>");
}

function Chip_calcPosition(arg){
	var calc = new Array();

	this.varBase = Math.max(this.Base(),-this.Width());
	calc[0] = this.Count()/100;
	if(arg == 1){
		calc[2] = -this.Width();
		calc[3] = (slideEnd+slideOver);
		calc[4] = slideEnd;
	}else{
		calc[2] = this.Base();
		calc[3] = Math.min((slideEnd+slideOver),(this.Base()+slideOver));
		calc[4] = -this.Width();
	}
	if(calc[2] == calc[4]) calc[1] = 1/2;
	else calc[1] = ((calc[3]-calc[2])-Math.sqrt((calc[3]-calc[2])*(calc[3]-calc[4])))/(calc[4]-calc[2]);
	calc[5] = -(calc[3]-calc[2])/(calc[1]*calc[1]);
	calc[6] = 2*(calc[3]-calc[2])/calc[1];
	calc[7] = calc[2];

	return (calc[5]*calc[0]*calc[0]+calc[6]*calc[0]+calc[7]);
}

function showChip(arg){
	if(chip.length < 2) return;

	var calc = new Array();
	clearInterval(Timer);

	chip[0].Hidden();
	chip[1].Hidden();
	chip[0].initCount();
	chip[1].initCount();
	chip[0].setBase();
	chip[1].setBase();
	chip[0].loadImage = true;
	chip[1].loadImage = false;

	calc[0] = "";
	calc[0]+= "<table cellpadding=0 cellspacing=0><tr><td class='chip'>";
	if(decodeGenle(arg) == "edit"){
		calc[0]+= "[編集]<br>";
		calc[0]+= "Html Linksの内容を編集します<br>";
		calc[0]+= "URL : <u>"+document.getElementById(arg).href+"</u><br>";
	}else{
		if(getItem(arg).site  != "") calc[0]+= "Site : "+getItem(arg).site+"<br>";
		else calc[0]+= "<br>";
		if(getItem(arg).admin != "") calc[0]+= "Master : "+getItem(arg).admin+"<br>";
		else calc[0]+= "<br>";
		if(getItem(arg).memo  != "") calc[0]+= "Memo : "+getItem(arg).memo+"<br>";
		if(getItem(arg).url   != "") calc[0]+= "URL : <u>"+getItem(arg).url+"</u><br>";
		else calc[0]+= "<br>";
	}
	calc[0]+= "</td></tr></table>";
	chip[0].setHTML(calc[0]);

	calc[0] = "";
	     if(decodeGenle(arg) == "edit") calc[0]+= "<table cellpadding=0 cellspacing=0><tr><td class='nbr'>Edit (Html Links)</td></tr></table>";
	else if(getItem(arg).banner == "")  calc[0]+= "<table cellpadding=0 cellspacing=0><tr><td class='nbr'>NoBanner</td></tr></table>";
	else                                calc[0]+= "<img src="+getItem(arg).banner+" onload='chip[1].loadImage = true;' onerror='chip[1].errorImage();'>";
	chip[1].setHTML(calc[0]);

	if(mousePos.Y() < windowSize.Y()/2){
		chip[0].setY(scrollPos.Y()+10);
		chip[1].setY(scrollPos.Y()+10+chip[0].Height()+1);
	}else{
		chip[0].setY(scrollPos.Y()+windowSize.Y()-chip[0].Height()-10);
		chip[1].setY(scrollPos.Y()+windowSize.Y()-chip[1].Height()-10-chip[0].Height()-1);
	}
	chip[0].setX(scrollPos.X()-chip[0].Width());
	chip[1].setX(scrollPos.X()-chip[1].Width());

	Timer = setInterval("updateChip(1);",1000/slideInterval);
}

function hideChip(){
	if(chip.length < 2) return;
	clearInterval(Timer);

	chip[0].initCount();
	chip[1].initCount();
	chip[0].setBase();
	chip[1].setBase();
	Timer = setInterval("updateChip(-1);",1000/slideInterval);
}

function updateChip(dir){
	if((chip[0].Count() == 100)&&(chip[1].Count() == 100)) clearInterval(Timer);

	if(mousePos.Y() >= windowSize.Y()/2){
		chip[0].setY(scrollPos.Y()+10);
		chip[1].setY(scrollPos.Y()+10+chip[0].Height()+1);
	}else{
		chip[0].setY(windowSize.Y()+scrollPos.Y()-10-chip[0].Height());
		chip[1].setY(windowSize.Y()+scrollPos.Y()-10-chip[1].Height()-chip[0].Height()-1);
	}

	if( (! chip[0].Object.getElementsByTagName("img")[0]) || ( chip[0].loadImage ) ){
		chip[0].addCount();
		chip[0].setX(scrollPos.X()+chip[0].calcPosition(dir));
		chip[0].Visible();
	}
	if( (! chip[1].Object.getElementsByTagName("img")[0]) || ( chip[1].loadImage ) ){
		if((chip[0].Count() == 100)||(Math.abs(chip[1].Count()-chip[0].Count()) >= slideDelay )){
			chip[1].addCount();
			chip[1].setX(scrollPos.X()+chip[1].calcPosition(dir));
			chip[1].Visible();
		}
	}
}
