//---------------------------------------------------[ INITIALIZE ]
//addEvent(window, 'DOMContentLoaded', init);
document.observe('dom:loaded', init);

function init()
{
	var agents = getUserAgents();

	if (agents[0] || agents[1])
	{
		fixDropDown('navigation');
		fixMenuHover('navigation');
		findPNGs();
	}
}

//addEvent(window, 'unload', clearUp);
document.observe('unload', clearUp);

function clearUp()
{
	frameInterval = null;
}

//------------------------------------------------[ get: USER AGENTS ]
function getUserAgents()
{
	var userAgent = navigator.userAgent;
	var msIE6 = userAgent.indexOf('MSIE 6.0') != -1;
	var msIE55 = userAgent.indexOf('MSIE 5.5') != -1;
	var agents = new Array(msIE6, msIE55);

	return agents;
}


//----------------------------------------[ fix: navigation MENU HOVER for ie6 ]
function fixMenuHover(containerID)
{
	var elementList = $(containerID).down('UL');
	if (elementList)
	{
		var listObjects = elementList.childElements();
		listObjects.each( function (element)
		{
			if (element.tagName == 'LI')
			{
				var className = (element.hasClassName('band2')) ? 'over2' : 'over';
				element.observe('mouseenter', function() { this.addClassName(className); });
				//addEvent(element, 'mouseenter', function() { this.addClassName(className); });
				element.observe('mouseleave', function() { this.removeClassName(className); });
				//addEvent(element, 'mouseleave', function() { this.removeClassName(className); });
			}
		});
	}
}

//----------------------------------------[ fix: navigation DROP DOWN for ie6 ]
function fixDropDown(containerID)
{
	var elementList = $(containerID);
	if (elementList)
	{
		var listObjects = elementList.select('.dropdown');
		listObjects.each( function (element)
		{
			var elementParent = element.up('LI');
			elementParent.observe('mouseenter', function() { this.addClassName('over'); });
			//addEvent(elementParent, 'mouseenter', function() { this.addClassName('over'); });
			elementParent.observe('mouseleave', function() { this.removeClassName('over'); });
			//addEvent(elementParent, 'mouseleave', function() { this.removeClassName('over'); });
		});
	}
}

//-----------------------------------------[ find: all PNG images ]
function findPNGs()
{
	if (!document.getElementsByTagName) return; 
	var images = $A(document.getElementsByTagName("IMG")); 
	images.each( function(image)
	{ 
		var imageSrc = image.src;
		var regex = /.png/
		var foundPNG = regex.test(imageSrc);
		if (foundPNG)
		{
			fixPNG(image);
		}
	});
}

//----------------------------------------[ fix: PNG display ]
function fixPNG(imageRef)
{
	var imgID = (imageRef.id) ? "id='" + imageRef.id + "' " : "";
	var imgClass = (imageRef.className) ? "class='" + imageRef.className + "' " : "";
	var imgTitle = (imageRef.title) ? "title='" + imageRef.title + "' " : "title='" + imageRef.alt + "' ";
	var imgStyle = "display: block;" + imageRef.style.cssText;
	var strNewHTML = "<span " + imgID + imgClass + imgTitle;
	strNewHTML += " style=\"" + "width:" + imageRef.width + "px; height:" + imageRef.height + "px;" + imgStyle; // + ";";
	strNewHTML += "filter:progid:DXImageTransform.Microsoft.AlphaImageLoader"
	strNewHTML += "(src=\'" + imageRef.src + "\', sizingMethod='image');\"></span>";
	imageRef.outerHTML = strNewHTML;
}

//-------------------------[ SETUP: train connection from passed index value. ]
function mystery( indexValue, subjectText )
{
	var mystery ="109,97,105,108,116,111,58,"; // setup code.
	var train = "?subject=" + subjectText; // setup subject as string.
	var coming = "&body=";
	
	mystery += return2sender(indexValue * 1); // get required code.
	var decode = mystery.split(","); // setup array from encoded.
	mystery = ""; // setup source variable as string.
	for (var e = 0; e < decode.length; e++)
	{
		mystery += String.fromCharCode(decode[e]); // decode as string.
	}
	document.location = mystery + train + coming; // Write call.
}

//------------------------------------------------[ setup: GALLERY ]
var currentView = null;
function setupImageGallery(pageID)
{
	if (!$('gallery')) return;
	var gallery = $('gallery');
	var viewer = gallery.down('DIV#viewer');
	viewer.hide();
	
	var thumbnailLink = gallery.select('A');
	thumbnailLink.each( function(link)
	{
		link.onclick = function()
		{
			return false;
		}
	});
	
	if (pageID)
	{
		var postURL = 'build/content/gallery.comms.php';
		var options = 'mode=1&page=' + pageID;
		var myAjax = new Ajax.Updater(viewer, postURL, { method: 'post', parameters: options, onComplete: imagesDownloaded });
	}
}

//------------------------------------------------[ ACTION: FUNCTION NAME ]
function imagesDownloaded()
{
	setTimeout(setupGalleryControls, 500);
}


//------------------------------------------------[ setup: GALLERY CONTROLS ]
function setupGalleryControls()
{
	var gallery = $('gallery');
	var views = gallery.select('.view');
	var viewer = gallery.down('DIV#viewer');
	
	views.each( function(view)
	{
		view.setStyle({ opacity: '0' });
	});
	views.invoke('show');

	var thumbnails = gallery.select('DIV.thumbnail');
	thumbnails.each( function(link)
	{
		link.onclick = function()
		{
			if (inFade) return false;
			var view = $('view' + this.down('A').id.replace('tn', ''));
			if (null != currentView)
			{
				if (currentView == view) return false;
				
				if (null != currentView && currentView != view)
				{
					fadeThis(currentView, 1, 0, fadeDown);
				}
			} else {
				viewer.show();
			}
			fadeThis(view, 0, 1, fadeUp, function() { inFade = false; });
			currentView = view;
			return false;
		}
	});
}

//------------------------------------------------[ fade: THIS (element, begin, end, duration) ]
var inFade = false; var fadingUp = false;
function fadeThis(element, begin, end, duration, after)
{
	if (begin == 0)
	{
		inFade = true;
	}
	var options = { duration: duration, from: begin, to: end, afterFinish: after };
	new Effect.Opacity(element, options );
}

//------------------------------------------------[ get: PAGE IMAGES ]
function getPageImages()
{
	var agents = getUserAgents();
	if (agents[0] || agents[1]) return false;
	var postURL = 'build/content/gallery.pipe.php';
	var options = 'mode=2';
	var myAjax = new Ajax.Request(postURL, { method: 'post', parameters: options, onSuccess: processPageImages });
}

//------------------------------------------------[ process: PAGE IMAGES ]
function processPageImages(result)
{
	if (result.responseText)
	{
		var data = result.responseText.split(',');
		if (data.length)
		{
			setupFrameController(data);
		}
	}
}

//------------------------------------------------[ setup: FRAME CONTROLLER ]
var frameInterval;
var numOfFrames;
var framePointer = 0;
var frames = new Array();
var currentFrame;

function setupFrameController(data)
{
	numOfFrames = data.length;
	for (var f = 0; f < numOfFrames; f ++)
	{
		frames[f] = new ImageFrame(f, 'page_image', data[f], frameFadeTime, 'image_back');
	}
	frames.each( function (frame)
	{
		frame.setupFrame();
	});

	frameInterval = setTimeout(showNextFrame, (frameIntervalTime * 1000));
}

//------------------------------------------------[ show: NEXT FRAME ]
function showNextFrame()
{
	currentFrame = framePointer;
	framePointer ++;
	if (framePointer >= numOfFrames) framePointer = 0;
	frames[framePointer].displayFrame();
}

//------------------------------------------------[ shock: CONTROLLER ]
function frameController()
{
	frames[framePointer].resetLayer();
	frames[currentFrame].resetFrame();
	frameInterval = setTimeout(showNextFrame, (frameIntervalTime * 1000));
}
