/**********************************************************************************   
Spotlight 
*   Copyright (C) 2001 Thomas Brattli
*   This script was released at DHTMLCentral.com
*   Visit for more great scripts!
*   This may be used and changed freely as long as this msg is intact!
*   We will also appreciate any links you could give us.
*
*   Made by Thomas Brattli
*
*   Script date: 09/04/2001 (keep this date to check versions) 
*********************************************************************************/

/*  Modified by Zdenek Lanc, Ceskatelevize.cz 2006 */

function lib_bwcheck(){ //Browsercheck (needed)
	this.ver=navigator.appVersion
	this.agent=navigator.userAgent
	this.dom=document.getElementById?1:0
	this.opera5=(navigator.userAgent.indexOf("Opera")>-1 && document.getElementById)?1:0
	this.ie5=(this.ver.indexOf("MSIE 5")>-1 && this.dom && !this.opera5)?1:0; 
	this.ie6=(this.ver.indexOf("MSIE 6")>-1 && this.dom && !this.opera5)?1:0;
	this.ie4=(document.all && !this.dom && !this.opera5)?1:0;
	this.ie=this.ie4||this.ie5||this.ie6
	this.mac=this.agent.indexOf("Mac")>-1
	this.ns6=(this.dom && parseInt(this.ver) >= 5) ?1:0; 
	this.ns4=(document.layers && !this.dom)?1:0;
	this.bw=(this.ie6 || this.ie5 || this.ie4 || this.ns4 || this.ns6 || this.opera5)
	return this
}
var bw=lib_bwcheck()
var moveit = false
var ax=0
var ay=0
var xcntgoto = "plus"
var ycntgoto = "plus"

/*** Variables to set ***/
sCircleWidth = 220	//The width the script will clip to
sCircleHeight = 220	//The height the script will clip to
sStarty = 180		//Where do you want it to initially start
sStartx = 420		//Where do you want it to initially start
clipSpeed = 20		//Number of pixels for each step in the animation.

/******************************************************************************
Making the clipobject part
******************************************************************************/	
function makeObj(obj, nest, x, y){
	nest = (!nest) ? "":'document.'+nest+'.';										
   	this.css = bw.dom? document.getElementById(obj).style:bw.ie4?document.all[obj].style:bw.ns4?eval(nest+"document.layers." +obj):0;		
	this.evnt = bw.dom? document.getElementById(obj):bw.ie4?document.all[obj]:bw.ns4?eval(nest+"document.layers." +obj):0;													
	this.clip = b_clip;
	this.clipIt = b_clipIt;
	this.clipTo = b_clipTo;
	this.obj = obj + "Object";
	eval(this.obj + "=this");
	return this;
}

// A unit of measure that will be added when setting the position or size of a layer.
var px = bw.ns4||window.opera?"":"px";

//clip part
function b_clipTo(t,r,b,l){
	if (bw.ns4){
		this.css.clip.top=t;this.css.clip.right=r;this.css.clip.bottom=b;this.css.clip.left=l;
	}
	else {
		this.css.clip="rect("+t+"px "+r+"px "+b+"px "+l+"px)";
	}
}
function b_clipIt(tstop,rstop,bstop,lstop,step,fn){
	if (!fn) fn = null
	var clipval = new Array()
	if (bw.dom || bw.ie4) {
		clipval = this.css.clip
		clipval = clipval.slice(5,clipval.length-1);
		clipval = clipval.split(' ')
		for (var i=0; i<4; i++) clipval[i] = parseInt(clipval[i])
	}
	else {
		clipval[0] = this.css.clip.top
	    clipval[1] = this.css.clip.right
	    clipval[2] = this.css.clip.bottom
	    clipval[3] = this.css.clip.left
	}
	totantstep = Math.max(Math.max(Math.abs((tstop-clipval[0])/step),Math.abs((rstop-clipval[1])/step)),
		Math.max(Math.abs((bstop-clipval[2])/step),Math.abs((lstop-clipval[3])/step)))
	if (!this.clipactive)
		this.clip(clipval[0],clipval[1],clipval[2],clipval[3],(tstop-clipval[0])/totantstep,
			(rstop-clipval[1])/totantstep,(bstop-clipval[2])/totantstep,
				(lstop-clipval[3])/totantstep,totantstep,0, fn)
}
function b_clip(tcurr,rcurr,bcurr,lcurr,tperstep,rperstep,bperstep,lperstep,totantstep,antstep, fn){
	tcurr=tcurr+tperstep; rcurr=rcurr+rperstep
	bcurr=bcurr+bperstep; lcurr=lcurr+lperstep
	this.clipTo(tcurr,rcurr,bcurr,lcurr)
	if(antstep<totantstep){
		this.clipactive=true
		antstep++
		setTimeout(this.obj+".clip("+tcurr+","+rcurr+","+bcurr+","+lcurr+","+tperstep+","
			+rperstep+","+bperstep+","+lperstep+","+totantstep+","+antstep+",'"+fn+"')", 40)	
	}else{
		this.clipactive = false
		eval(fn)
	}
}
/******************************************************************************
Initiating the page and the clip objects.
******************************************************************************/	
function spotInit(){
	pageWidth = (bw.ns4 || bw.ns6)?innerWidth:document.body.clientWidth;
	pageHeight = (bw.ns4 || bw.ns6)?innerHeight:document.body.clientHeight;
	oExCont = new makeObj('divExCont')
	if (bw.dom || bw.ie4){
		oExCont.css.width = pageWidth+px
		oExCont.css.height = pageHeight+px
	}
	oCircle = new makeObj('divCircle','divExCont')
	oExCont.clipTo(sStarty,sStartx+sCircleWidth,sStarty+sCircleHeight,sStartx)
	oCircle.css.left = sStartx+px
	oCircle.css.top = sStarty+px
	oCircle.css.visibility = "visible"
	if (bw.ns4)document.captureEvents(Event.MOUSEMOVE)
	document.onmousemove = moveCircle
	document.onmousedown = startmovin
	document.onmouseup = stopmovin
	document.ondragstart = new Function ("return false")
	document.onselectstart = startmovin
	ax = sStartx
	ay = sStarty
	automoving()
	}

function detect(e) {
	x = (bw.ns4 || bw.ns6)?e.pageX:event.x
	y = (bw.ns4 || bw.ns6)?e.pageY:event.y
	
	circleright = (parseInt(oCircle.css.left) + sCircleWidth)
	circlebott = (parseInt(oCircle.css.top) + sCircleHeight)
	
	if(x >= (parseInt(oCircle.css.left)) && x <= circleright && y >= (parseInt(oCircle.css.top)) && y <= circlebott) isin=true;
	else isin=false;
	//document.title = isin

	if (!isin) moveit=false
	return isin
}

function startmovin(e) {
	document.body.style.cursor = "crosshair"
	moveit = detect(e)
	return !moveit
}

function stopmovin(e) {
	document.body.style.cursor = ""
	moveit = false
	//automoving()
}

function moveCircle(e){
				
	isin=detect(e)
	if(moveit && isin) 
	{
		if(x>=780) x=780
		if(y>=600) y=600
		if(x<=sCircleWidth/2) x=sCircleWidth/2
		if(y<=sCircleHeight/2) y=sCircleHeight/2
	
		oExCont.clipTo(y-sCircleHeight/2, x+sCircleWidth/2, y+sCircleHeight/2, x-sCircleWidth/2)
		oCircle.css.left = x - sCircleWidth/2 + px
		oCircle.css.top = y - sCircleHeight/2 + px
		ax=x
		ay=y
	}
}

function automoving() {

		if(!moveit) {
		oExCont.clipTo(ay-sCircleHeight/2, ax+sCircleWidth/2, ay+sCircleHeight/2, ax-sCircleWidth/2)
		oCircle.css.left = ax - sCircleWidth/2 + px
		oCircle.css.top = ay - sCircleHeight/2 + px
							
		if(ax>=780) xcntgoto="minus"
		if(ax<=sCircleWidth/2) xcntgoto="plus"
		if(ay>=600) ycntgoto="minus"
		if(ay<=sCircleWidth/2) ycntgoto="plus"
											
		if(xcntgoto=="minus") ax--; else ax++;
		if(ycntgoto=="minus") ay--; else ay++;
		
		yd = setTimeout("automoving()", 10)
		}
}
			
if (bw.bw) onload = spotInit
