if (!Array.prototype.indexOf)
{
  Array.prototype.indexOf = function(elt /*, from*/)
  {
    var len = this.length >>> 0;

    var from = Number(arguments[1]) || 0;
    from = (from < 0)
         ? Math.ceil(from)
         : Math.floor(from);
    if (from < 0)
      from += len;

    for (; from < len; from++)
    {
      if (from in this &&
          this[from] === elt)
        return from;
    }
    return -1;
  };
}


//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/array/shuffle [v1.0]

shuffle = function(o){ //v1.0
	for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
	return o;
};
//---------


function opacity(id, opacStart, opacEnd, millisec) {
	//speed for each frame
	var speed = Math.round(millisec / 100);
	var timer = 0;

	//determine the direction for the blending, if start and end are the same nothing happens
	if(opacStart > opacEnd) {
		for(i = opacStart; i >= opacEnd; i--) {
			setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
			timer++;
		}
	} else if(opacStart < opacEnd) {
		for(i = opacStart; i <= opacEnd; i++)
			{
			setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
			timer++;
		}
	}
}

//change the opacity for different browsers
function changeOpac(opacity, id) {
	var object = document.getElementById(id).style; 
	object.opacity = (opacity / 100);
	object.MozOpacity = (opacity / 100);
	object.KhtmlOpacity = (opacity / 100);
	object.filter = "alpha(opacity=" + opacity + ")";
}

function shiftOpacity(id, millisec) {
	//if an element is invisible, make it visible, else make it ivisible
	if(document.getElementById(id).style.opacity == 0) {
		opacity(id, 0, 100, millisec);
	} else {
		opacity(id, 100, 0, millisec);
	}
}

function blendimage(divid, imageid, imagefile, millisec) {
	var speed = Math.round(millisec / 100);
	var timer = 0;
	
	//set the current image as background
	document.getElementById(divid).style.backgroundImage = "url('" + document.getElementById(imageid).src + "')";
	
	//make image transparent
	changeOpac(0, imageid);
	
	//make new image
	document.getElementById(imageid).src = imagefile;

	//fade in image
	for(i = 0; i <= 100; i++) {
		setTimeout("changeOpac(" + i + ",'" + imageid + "')",(timer * speed));
		timer++;
	}
}

function currentOpac(id, opacEnd, millisec) {
	//standard opacity is 100
	var currentOpac = 100;
	
	//if the element has an opacity set, get it
	if(document.getElementById(id).style.opacity < 100) {
		currentOpac = document.getElementById(id).style.opacity * 100;
	}

	//call for the function that changes the opacity
	opacity(id, currentOpac, opacEnd, millisec)
}

var eventVar;
var theElement;
var scroll;
var diffX, diffY;
var movedownvar, moveupvar;
var current = 0;
var nextPic;

function mover(event)
{
	//theElement.style.left = (event.clientX - diffX) + "px";
	
	try{event.clientY}
	catch(e){event = eventVar}
	
	if (event.clientY-diffY <= 0)  //top of scroll
	{
		theElement.style.top = "0px";
		document.getElementById(scroll.contentID).style.top = "0px";
	}
	else if(event.clientY-diffY >= scroll.scrollBarHeight-scroll.scrollFaceHeight) //bottom of scroll
	{
		theElement.style.top = scroll.scrollBarHeight - scroll.scrollFaceHeight + "px";
		document.getElementById(scroll.contentID).style.top = -(scroll.contentHeight-scroll.contentPaneHeight)+"px";
	}
	else  //somewhere in mid of scroll
	{ 
		theElement.style.top = (event.clientY - diffY) + "px";
		document.getElementById(scroll.contentID).style.top = -(scroll.contentHeight-scroll.contentPaneHeight) * ((event.clientY - diffY) / (scroll.scrollBarHeight-scroll.scrollFaceHeight)) +"px";
	}
	//document.getElementById('debug2').innerHTML += "moved";
	//document.getElementById('debug').innerHTML = "TOP: "+theElement.style.top+" --- diffX: " +diffX+ ", DiffY: "+diffY + ", event.clientY: " + event.clientY + "<br />" + (event.clientY-diffY);
	try{eventVar.stopPropagation();}
	catch(e){}
}

function dropper(event) 
{	
	document.onmousemove = null;
	document.onmouseup = null;
	try{eventVar.stopPropagation();}
	catch(e){}
}
	
function scrollBar(ID, scrollFaceID, contentID, scrollBarID, contentPaneHeight, scrollBarHeight, scrollFaceHeight, contentMargin)
{
	this.ID = ID;
	this.scrollFaceID = scrollFaceID;
	this.contentID = contentID;
	this.scrollBarID = scrollBarID;
	this.scrollBarHeight = scrollBarHeight;
	this.contentPaneHeight = contentPaneHeight;
	this.contentHeight;
	this.contentMargin = contentMargin;
	this.scrollFaceHeight = scrollFaceHeight;
	this.speed;
		
	this.initialize = function()
	{
		
		this.contentHeight = document.getElementById(this.contentID).offsetHeight;
		document.getElementById(this.contentID).style.top = "0px";
		document.getElementById(this.scrollFaceID).style.top = "0px";
		
		if (this.contentHeight > this.contentPaneHeight)
		{
			this.speed = this.contentHeight/this.contentPaneHeight;
			this.contentHeight += this.contentMargin*2;
			this.scrollFaceHeight = (this.contentPaneHeight/this.contentHeight)*this.scrollBarHeight;
			document.getElementById(this.scrollFaceID).style.height = this.scrollFaceHeight+"px";
			document.getElementById(this.scrollBarID).style.visibility = "visible";
		}
		else
		{	
			document.getElementById(this.scrollBarID).style.visibility = "hidden";
		}
	}
	
	this.scrollDrag = function(event)
	{	
		
		eventVar = event;
		scroll = this;
		theElement = document.getElementById(this.scrollFaceID);//event.currentTarget;
		
		var posX = parseInt(theElement.style.left);
		var posY = parseInt(theElement.style.top);
		
		
		diffX =eventVar.clientX - posX;
		diffY =eventVar.clientY - posY;
		
		document.onmousemove = mover;
		document.onmouseup = dropper;
		
		try{event.stopPropagation();}
		catch(e){}
		try {event.preventDefault();}
		catch(e){}
	}
	
	this.movedown = function(){
	if (parseInt(document.getElementById(this.contentID).style.top)-this.speed >= -1*(this.contentHeight-this.contentPaneHeight))
	{
		document.getElementById(this.contentID).style.top = parseInt(document.getElementById(this.contentID).style.top)-this.speed +"px";
		document.getElementById(this.scrollFaceID).style.top = Math.abs(parseInt(document.getElementById(this.contentID).style.top))*((this.scrollBarHeight-this.scrollFaceHeight)/(this.contentHeight-this.contentPaneHeight))+"px";
	}
	else
	{
		document.getElementById(this.scrollFaceID).style.top = this.scrollBarHeight - this.scrollFaceHeight + "px";
	}
		
	movedownvar=setTimeout(this.ID+".movedown()",15);
	}
	
	this.moveup = function()
	{
	if (parseInt(document.getElementById(this.contentID).style.top) < 0)
	{
		document.getElementById(this.contentID).style.top = parseInt(document.getElementById(this.contentID).style.top)+this.speed +"px";
		document.getElementById(this.scrollFaceID).style.top = Math.abs(parseInt(document.getElementById(this.contentID).style.top))*((this.scrollBarHeight-this.scrollFaceHeight)/(this.contentHeight-this.contentPaneHeight))+"px";
	}
	moveupvar=setTimeout(this.ID+".moveup()",15);
	}

}

mainScroll = new scrollBar('mainScroll', 'scrollFace', 'content', 'scrollBar', 202, 180, null, 0);
popScroll = new scrollBar('popScroll', 'popScrollFace', 'popContent', 'popScrollBar', 230, 180, null, 0);

function showThumbs()
{
	changeOpac(0, "picDiv");
	document.getElementById("picDiv").style.visibility = "visible";
	opacity("picDiv", 0, 100, 1000);
	
	for (i = 0; i < galleryPics.length; i++)
	{
		changeOpac(0, "thumb_"+galleryPics[i]);
		document.getElementById("thumb_"+galleryPics[i]).style.visibility = "visible";
	}
	
	var galleryPicsFadeOrder = new Array(galleryPics.length);
	 for (k = 0; k < galleryPics.length; k++)
	 	galleryPicsFadeOrder[k] = galleryPics[k];
	 	
	shuffle(galleryPicsFadeOrder);
	
	for (j = 0; j < galleryPics.length; j++)
	{
		setTimeout("opacity('thumb_"+galleryPicsFadeOrder[j]+"', 0, 100, 500)", 100*j);
	}
	if (thumbFade == "yes") //variable set in gallery.php, this means there is NOT a specific section picture
	{
		setTimeout("opacity('thumb_"+galleryPics[0]+"', 100, 50, 500)", 100*galleryPics.length+501);
		document.getElementById('galleryDirection').style.visibility = "visible";
	}
}

function showPop(id)
{
	document.getElementById('popContent').innerHTML = document.getElementById(id).innerHTML;
	changeOpac(0, 'coverBack');
	changeOpac(0, 'coverContainer');
	document.getElementById('coverContainer').style.display = "block";
	document.getElementById('coverContainer').style.visibility = "visible";
	document.getElementById('coverBack').style.display = "block";
	document.getElementById('coverBack').style.visibility = "visible";
	opacity('coverBack', 0, 70, 500);
	opacity('coverContainer', 0, 100, 500);
	popScroll.initialize();
}
function popFadeout()
{
	document.getElementById('popContent').innerHTML = "";
	document.getElementById('coverContainer').style.display = "none";
	document.getElementById('coverContainer').style.visibility = "hidden";
	document.getElementById('coverBack').style.display = "none";
	document.getElementById('coverBack').style.visibility = "hidden";
	changeOpac(0, 'coverBack');
	changeOpac(0, 'coverContainer');
}
function closePop()
{
	
	opacity('coverBack', 70, 0, 500);
	opacity('coverContainer', 100, 0, 500);
	setTimeout('popFadeout()', 500);
}


function getHeight()
{
	mainScroll.initialize();
		
	showThumbs();
}

function galleryClick(id)
{
	changeOpac(100, "thumb_"+galleryPics[current]);
	blendimage("picDiv", "picInfront", "images/gallery/"+id+".jpg", 500);
	current = galleryPics.indexOf(id);
	changeOpac(50, "thumb_"+galleryPics[current]);
	document.getElementById('galleryDirection').style.visibility = "visible";
	
}

function galleryNext()
{
	
	if (current +1 >= galleryPics.length)
		galleryClick(galleryPics[0]);
	else
		galleryClick(galleryPics[current+1]);
	//blendimage("picDiv", "picInfront", "images/gallery/"+galleryPics[current]+".jpg", 500);
		
}

function galleryPrevious()
{
	
	if (current-1 < 0)
		galleryClick(galleryPics[galleryPics.length-1]);
	else
		galleryClick(galleryPics[current-1]);
		
	//blendimage("picDiv", "picInfront", "images/gallery/"+galleryPics[current]+".jpg", 500);
		
}

function thumbOver(id)
{	
	if (current != galleryPics.indexOf(id))
		changeOpac(50, "thumb_"+id);
}

function thumbOut(id)
{	
	if (current != galleryPics.indexOf(id))
		changeOpac(100, "thumb_"+id);
}
