/*
HSlider v1.0
Created by: Gergely Horvath <horvathg2@freemail.hu>
*/

var hslider=new Array();
var HSLIDER_TMP=5;

function hslider_effectSlide(idx,dir,start)
{
	var slider=hslider[idx];
	var cur=slider[1][slider[3]],next;
	var nextidx,ftime;
	var ox=4,oy=4,tcomp=1;
	
	if (slider[3]==slider[1].length-1) nextidx=0;else nextidx=slider[3]+1;
	next=slider[1][nextidx];
	
	if (start) {
		switch (dir) {
			case "d2u": next.style.left="0px";next.style.top=slider[0].style.height;break;
			case "u2d": next.style.left="0px";next.style.top='-'+slider[0].style.height;break;
			case "l2r": next.style.top="0px";next.style.left='-'+slider[0].style.width;break;
			case "r2l": next.style.top="0px";next.style.left=slider[0].style.width;break;
		}
		slider[HSLIDER_TMP]=parseInt(next.style.left);
		slider[HSLIDER_TMP+1]=parseInt(next.style.top);
		slider[HSLIDER_TMP+2]=parseInt(cur.style.left);
		slider[HSLIDER_TMP+3]=parseInt(cur.style.top);
		next.style.visibility='visible';
	}

	ftime=new Date().getTime();

	if (!start) {
		var diff=ftime-slider[HSLIDER_TMP+4];
		if (diff>10) tcomp=diff/10.0;else tcomp=1;
	}

	slider[HSLIDER_TMP+4]=ftime;

	if (Math.abs(slider[HSLIDER_TMP])<=5*tcomp && Math.abs(slider[HSLIDER_TMP+1])<=5*tcomp) {
		hslider_finishChange(cur,next);
	
		slider[3]=nextidx;

		return;
	}

	switch (dir) {
		case "d2u": ox=0;oy=-oy;break;
		case "u2d": ox=0;break;
		case "l2r": oy=0;break;
		case "r2l": ox=-ox;oy=0;break;
	}

	ox*=tcomp;oy*=tcomp;

	if (ox) {
		slider[HSLIDER_TMP]+=ox;
		slider[HSLIDER_TMP+2]+=ox;
		cur.style.left=Math.round(slider[HSLIDER_TMP+2])+"px";
		next.style.left=Math.round(slider[HSLIDER_TMP])+"px";
	}
	if (oy) {
		slider[HSLIDER_TMP+1]+=oy;
		slider[HSLIDER_TMP+3]+=oy;
		cur.style.top=Math.round(slider[HSLIDER_TMP+3])+"px";
		next.style.top=Math.round(slider[HSLIDER_TMP+1])+"px";
	}
	setTimeout("hslider_effectSlide("+idx+",'"+dir+"')",10);
}

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

function hslider_effectSwitch(slider)
{
	var page=slider[1];

	page[slider[3]].style.visibility="hidden";

	if (slider[3]==page.length-1) slider[3]=0;else slider[3]++;

	page[slider[3]].style.visibility="visible";
}

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

function hslider_error(msg) {
	if (console.error) console.error("HSlider error - "+msg);
}

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

function hslider_finishChange(cur,next)
{
	next.style.top="0px";
	next.style.left="0px";

	cur.style.visibility="hidden";
	next.style.visibility="visible";

	cur.style.top="0px";
	cur.style.left="0px";
}

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

function hslider_getSliderById(id)
{
	for (var i=0;i<hslider.length;i++)
		if (hslider[i][0].id==id) return hslider[i];

	return null;
}

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

function hslider_initSlider(slider)
{
	var cstyle=null;

	if (window.getComputedStyle) cstyle=getComputedStyle(slider[0],null);
		else if (slider[0].currentStyle) cstyle=slider[0].currentStyle;
	if (!cstyle) return false;

	slider[0].style.top=cstyle.top;
	slider[0].style.left=cstyle.left;
	slider[0].style.width=cstyle.width;
	slider[0].style.height=cstyle.height;

	var page=slider[1];

	for (var i=0;i<page.length;i++) {
		page[0].style.top="0px";
		page[0].style.left="0px";
	}

	return true;
}

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

function hslider_new(id,interval,effect)
{
	var sl;

	if (!interval) interval=5000;
	if (!effect) effect="switch";

	el=document.getElementById(id);
	if (!el) {hslider_error("Can't find element: "+id);return false;}

	if (!isFinite(interval)) {hslider_error("Slider '"+id+"': interval must be number");return false;}
	if (interval<500) {hslider_error("Slider '"+id+"': Interval must be greater than 500 ms");return false;}

	if (hslider_getSliderById(id)) {hslider_error("Slider '"+id+"' is already registered");return false;}

	var pages=new Array();

	for (var i=0;i<el.childNodes.length;i++) {
		child=el.childNodes[i];
		if (child.tagName!="DIV") continue;
		if (typeof(child.className)!="string") continue;
		if (!hslider_searchArray(child.className.split(' '),"hslider_page")) continue;
		pages.push(child);
	}

	if (pages.length<1) {hslider_error("No page found in "+id);return false;}

	var sl=new Array();
	sl[0]=el;
	sl[1]=pages;
	sl[3]=0;
	sl[4]=effect.toLowerCase();

	hslider_initSlider(sl);

	var idx=hslider.push(sl)-1;

	sl[1][sl[3]].style.visibility='visible';
	sl[2]=setInterval("hslider_nextPage("+idx+")",interval);

	return true;
}

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

function hslider_nextPage(idx)
{
	var slider=hslider[idx];

	if (slider[1].length<2) return;

	switch (slider[4]) {
		case "switch": hslider_effectSwitch(slider);break;
		case "slidedown2up": hslider_effectSlide(idx,"d2u",true);break;
		case "slideup2down": hslider_effectSlide(idx,"u2d",true);break;
		case "slideleft2right": hslider_effectSlide(idx,"l2r",true);break;
		case "slideright2left": hslider_effectSlide(idx,"r2l",true);break;
		default: hslider_error("Slider '"+slider[0].id+"': unknown effect '"+slider[4]+"', falling back to 'switch'");
			slider[4]="switch";hslider_effectSwitch(slider);break;
	}
}

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

function hslider_searchArray(array,item)
{
	for (var i=0;i<array.length;i++)
		if (array[i]==item) return true;
	return false;
}

