// was ajax_obj.js

function ajaxObj ()
{
	this.req = null;
	this.url = null;
	this.status = null;
	this.statusText = '';
	this.method = 'GET';
	this.async = true;
	this.dataPayload = null;
	this.readyState = null;
	this.responseText = null;
	this.responseXML = null;
	this.handleResp = null;
	this.responseFormat = 'text', // 'text', 'xml', 'object'
	this.mimeType = null;
	this.headers = [];
	this.init = function ()
	{
		var i = 0;
		var reqTry = [ 
			function() { return new XMLHttpRequest (); },
			function() { return new ActiveXObject ('Msxml2.XMLHTTP'); },
			function() { return new ActiveXObject ('Microsoft.XMLHTTP'); }];
			
		while (!this.req && (i < reqTry.length))
		{
			try
			{
				this.req = reqTry [i++] ();
			}
			catch (e) {}
		}
		return true;
	};
	this.doGet = function (url, handler, format)
	{
		this.url = url;
		this.handleResp = handler;
		this.responseFormat = format || 'text';
		this.doReq ();
	}
	this.doReq = function ()
	{
		if (!this.init ())
		{
			alert ('Could not create XMLHttpRequest object.');
			return;
		}
		this.req.open (this.method, this.url, this.async);
		if (this.mimeType)
		{
			try
			{
				req.overrideMimeType (this.mimeType);
			}
			catch (e)
			{
				// Couldn't override MIME type -- IE6 or Opera?
			}
		}
		var self = this; // Fix loss-of-scope in inner function
		this.req.onreadystatechange = function ()
		{
			var resp = null;
			if (self.req.readyState == 4)
			{
				switch (self.responseFormat)
				{
					case 'text':
						resp = self.req.responseText;
						break;
					case 'xml':
						resp = self.req.responseXML;
						break;
					case 'object':
						resp = req;
						break;
				}
				if (self.req.status >= 200 && self.req.status <= 299)
				{
					self.handleResp (resp);
				}
				else
				{
					self.handleErr (resp);
				}
			}
		}
		this.req.send (this.postData);
	};
	this.setMimeType = function (mimeType)
	{
		this.mimeType = mimeType;
	};
	this.handleErr = function () {};
	this.abort = function ()
	{
		if (this.req)
		{
			this.req.onreadystatechange = function () {};
			this.req.abort ();
			this.req = null;
		}
	};
}





// was utils.js

function tii_dom_createElement (nodeName, attributes) {
	var isopera = typeof window.opera != 'undefined';
	var isie = typeof document.all != 'undefined' && !isopera && navigator.vendor != 'KDE';
		
	var newElement;
	try {
		newElement = document.createElement (nodeName);
	}
	catch (error) {
		return null;
	}
	
	var attributesLength = attributes.length;
	for (var i = 0; i < attributesLength; i++) {
		var attribute = attributes[i][0];
		var value = attributes[i][1];
		newElement.setAttribute(attribute, value);
		switch (attribute) {
			case 'id':
				newElement.id = value;
				break;
			case 'class':
				if (isie) {
					newElement.setAttribute ('className', value);
				}
				newElement.className = value;
				break;
			case 'style':
				newElement.style.cssText = newElement.style.cssText + ' ' + value;
				break;
			case 'for':
				if (isie) {
					newElement.setAttribute ('htmlFor', value);
				}
				newElement.htmlFor = value;
		}
	}
	return newElement;
}


function tii_dom_removeWhitespaceTextNodes(node) {
	for (var x = 0; x < node.childNodes.length; x++) {
		var child = node.childNodes [x];
		if (child.nodeType == 3 && !/\S/.test(child.nodeValue)) {
			node.removeChild(node.childNodes[x]);
			x--;
		}
		if (child.nodeType == 1) {
			tii_dom_removeWhitespaceTextNodes(child);
		}
	}
}

function tii_callFunctionOnWindowLoad(functionToCall) {
	if (typeof window.addEventListener != 'undefined') {
		window.addEventListener ('load', functionToCall, false);
	}
	else if (typeof document.addEventListener != 'undefined') {
		document.addEventListener ('load', functionToCall, false);
	}
	else if (typeof window.attachEvent != 'undefined') {
		window.attachEvent ('onload', functionToCall);
	}
	else {
		var oldFunctionToCall = window.onload;
		if (typeof window.onload != 'function') {
			window.onload = functionToCall;
		}
		else {
			window.onload = function () {
				oldFunctionToCall ();
				functionToCall ();
			};
		}
	}
}

function tii_callFunctionOnElementLoad(targetId, functionToCall) {
	var myArguments = arguments;
	tii_callFunctionOnWindowLoad (function () {
		window.loaded = true;
	});
	var targetElement = document.getElementById (targetId);
	if (targetElement == null && !window.loaded) {
		var pollingInterval = setInterval (function () {
			if (window.loaded) {
				clearInterval (pollingInterval);
			}
			targetElement = document.getElementById (targetId);
			if (targetElement != null) {
				clearInterval(pollingInterval);
				var argumentsTemp = new Array();
				var argumentsTempLength = myArguments.length - 2;
				for (var i = 0; i < argumentsTempLength; i++) {
					argumentsTemp[i] = myArguments[i + 2];
				}		
				functionToCall.apply(this, argumentsTemp);
			}
		}, 10);
	}
}


function tii_addEventHandlerOnElementLoad(targetId, eventType, functionToCall, bubbleEventUpDOMTree) {
	tii_callFunctionOnWindowLoad (function () {
		window.loaded = true;

	});
	var targetElement = document.getElementById (targetId);
	if (targetElement == null && !window.loaded) {
		var pollingInterval = setInterval (function () {
			if (window.loaded) {
				clearInterval(pollingInterval);
			}
			targetElement = document.getElementById(targetId);
			if (targetElement != null) {
				clearInterval(pollingInterval);
				tii_addEventHandler(targetElement, eventType, functionToCall, bubbleEventUpDOMTree);
			}
		}, 10);
	}
}


function tii_addEventHandler(targetElement, eventType, functionToCall, bubbleEventUpDOMTree) {
	if (!targetElement) {
		window.status = 'Warning: Tried to attach event to null object';
		return false;
	}
	if (typeof targetElement.addEventListener != 'undefined') {
		targetElement.addEventListener (eventType, functionToCall, bubbleEventUpDOMTree);
	}
	else if (typeof targetElement.attachEvent != 'undefined') {
		targetElement.attachEvent ('on' + eventType, functionToCall);
	}
	else {
		eventType = 'on' + eventType;
		if (typeof targetElement [eventType] == 'function') {
			var oldListener = targetElement [eventType];
			targetElement [eventType] = function () {
				oldListener ();
				return functionToCall ();
			}
		}
		else {
			targetElement [eventType] = functionToCall;
		}
	}
	return true;
}

function tii_removeEventHandler(targetElement, eventType, functionToRemove, bubbleEventUpDOMTree) {
	if (typeof targetElement.removeEventListener != "undefined") {
		targetElement.removeEventListener(eventType, functionToRemove, bubbleEventUpDOMTree);
	}
	else if (typeof targetElement.detachEvent != "undefined") {
		targetElement.detachEvent("on" + eventType, functionToRemove);
	}
	else {
		targetElement["on" + eventType] = null;
	}
	return true;
}

function tii_stopDefaultAction (event)
{
	event.returnValue = false;
	if (typeof event.preventDefault != 'undefined')
	{
		event.preventDefault ();
	}
}




// was home_gallery.js

/* Initialization */

// tp: 12/12/2007: This variable will be set globally by the json tcl template.
//var dataFileURL = '/tii/isweddings2008/js/json/home_gallery.json';

var handler = setupHomepageGallery;

/* Ajax */
var ajax = new ajaxObj ();
ajax.setMimeType ('text/plain');
tii_callFunctionOnElementLoad ('gallery', function ()
{
	ajax.doGet (dataFileURL, handler);
});

/* This function sets up the home page gallery */
function setupHomepageGallery (ajaxContent)
{
	/* Get JSON object */
	var jsonObj = eval ('(' + ajaxContent + ')');

	/* Check if there is only one slide */
	var slidesTotal = jsonObj.Gallery.SlidesTotal;
	if (slidesTotal < 2)
	{
		return;
	}

	var wait = setTimeout (startSetup, 10);
	function startSetup ()
	{
		var slide = document.getElementById ('slide');
		if (slide)
		{
			/* Get elements */
			var photoanchor = document.getElementById ('photoanchor');
			var photoimg = document.getElementById ('photoimg');
			var photocredit = document.getElementById ('photocredit');
			var navs = new Array ();
			navs [0] = document.getElementById ('nav1');
			navs [1] = document.getElementById ('nav2');
			var navAnchors = new Array ();
			for (var i = 0; i < 2; i++)
			{
				var navLis = navs [i].getElementsByTagName ('li');
				navAnchors [i] = new Array ();
				for (var j = 0; j < 3; j++)
				{
					navAnchors [i] [j] = navLis.item (j).getElementsByTagName ('a').item (0);
					navAnchors [i] [j].href = 'javascript:{}';
				}
			}
			var pagination1 = document.getElementById ('pagination1');
			var pagination2 = document.getElementById ('pagination2');
			var eyebrowimg = document.getElementById ('eyebrowimg');
			var h2 = document.getElementById ('h2');
			var text = document.getElementById ('text');
			var nextlinkanchor = document.getElementById ('nextlinkanchor');
			var upnextanchor = document.getElementById ('upnextanchor');
			
			/* Add event handlers */
			var isPlaying = true;
			var currentSlide = 0;
			var interval;
			var anchor_prev;
			var anchor_next;
			var anchor_play_pause;
			var img_play_pause;
			var playSrc;
			var pauseSrc;
			var keyevent = 'keypress';
			if (slide.onkeydown)
			{
				keyevent = 'keydown';
			}
			function attachEventHandlers (index)
			{
				anchor_prev = navAnchors [index] [2];
				anchor_next = navAnchors [index] [0];				
				anchor_play_pause = navAnchors [index] [1];
				img_play_pause = anchor_play_pause.getElementsByTagName ('img').item (0);
				if (index == 0)
				{
					img_play_pause_1 = navAnchors [0] [1].getElementsByTagName ('img').item (0);
					img_play_pause_2 = navAnchors [1] [1].getElementsByTagName ('img').item (0);
					playSrc = img_play_pause.className;
					pauseSrc = img_play_pause.src;
					
					/* Start gallery */
					interval = setInterval (function () { getNewSlide (1); }, 4000);
				}
				if (isPlaying)
				{
					img_play_pause.src = pauseSrc;
				}
				tii_addEventHandler (anchor_prev, 'click', function (event) { getNewSlide (-1, true, event); }, false);
				tii_addEventHandler (anchor_prev, keyevent, function (event) { getNewSlide (-1, true, event); }, false);
				tii_addEventHandler (anchor_next, 'click', function (event) { getNewSlide (1, true, event); }, false);
				tii_addEventHandler (anchor_next, keyevent, function (event) { getNewSlide (1, true, event); }, false);
				tii_addEventHandler (anchor_play_pause, 'click', function (event) { togglePlayPause (event); }, false);
				tii_addEventHandler (anchor_play_pause, keyevent, function (event) { togglePlayPause (event); }, false);
				
				/* Event handlers */
				function getNewSlide (increment, isManual, event)
				{
					if (event && !keyeventIsValid (event))
					{
						return;
					}
					if (isManual && interval)
					{
						img_play_pause_1.src = playSrc;
						img_play_pause_2.src = playSrc;
						clearInterval (interval);
					}
					currentSlide += increment;
					if (currentSlide < 0)
					{
						currentSlide = slidesTotal - 1;
					}
					else if (currentSlide >= slidesTotal)
					{
						currentSlide = 0;
					}



					var jsonSlide = jsonObj.Gallery.Slides [currentSlide];
					photoanchor.href = jsonSlide.PhotoUrl;
					photoimg.src = jsonSlide.PhotoSrc;
					photoimg.alt = jsonSlide.PhotoAlt;
					photocredit.innerHTML = jsonSlide.PhotoCredit;
					pagination1.innerHTML = (currentSlide + 1) + ' of ' + slidesTotal;
					pagination2.innerHTML = (currentSlide + 1) + ' of ' + slidesTotal;
					if (typeof eyebrowimg != 'undefined' && eyebrowimg)
					{
						eyebrowimg.src = jsonSlide.EyebrowSrc;
						eyebrowimg.alt = jsonSlide.EyebrowAlt;
					}
					h2.innerHTML = jsonSlide.H2;
					text.innerHTML = jsonSlide.Text;
					nextlinkanchor.href = jsonSlide.NextLinkUrl;
					nextlinkanchor.innerHTML = jsonSlide.NextLinkText;
					upnextanchor.href = jsonSlide.UpNextUrl;
					upnextanchor.innerHTML = jsonSlide.UpNextText;
				}
				function togglePlayPause (event)
				{
					if (!keyeventIsValid (event))
					{
						return;
					}
					if (isPlaying)
					{
						img_play_pause_1.src = playSrc;
						img_play_pause_2.src = playSrc;
						if (interval)
						{
							clearInterval (interval);
						}
						isPlaying = false;
					}
					else
					{
						img_play_pause_1.src = pauseSrc;
						img_play_pause_2.src = pauseSrc;
						interval = setInterval (function () { getNewSlide (1); }, 4000);
						isPlaying = true;
					}
				}
				function keyeventIsValid (event)
				{
					if (event.type == keyevent && event.keyCode != 13)
					{
						return false;
					}
					return true;
				}
			}
			attachEventHandlers (0);
			attachEventHandlers (1);
		}
	}
}