/*
http://warpspire.com/tipsresources/interface-scripting/image-preloading-revisited/
*/

var Preloader = {
	images: [],
	loadedImages: [],

	add: function(image) {
		if (typeof image == 'string') {
			Preloader.images.push(image);
		}
		if (typeof image == 'array' || typeof image == 'object') {
			for (var i = 0; i< image.length; i++) {
				Preloader.images.push(image[i]);
			}
		}
	},
	load: function() {
		for (var i = 0; i < Preloader.images.length; i++) {
			Preloader.loadedImages[i] = new Image();
			Preloader.loadedImages[i].src = Preloader.images[i];
		}
	}
}

YAHOO.util.Event.addListener(window, 'load', Preloader.load);

// is a variable empty? e.g. a group of check boxes with nothing
// checked, a group of radio buttons with nothing selected, false,
// null, or an empty string.
function is_empty(m_value)
{
	if (typeof m_value == 'undefined')
	{
		return true;
	}
	else if (m_value == null)
	{
		return true;
	}
	else if (typeof m_value == 'object')
	{
		for (var i = 0; i < m_value.length; i++)
		{
			if (m_value[i].checked == true)
			{
				return false;
			}
		}

		return true;
	}
	else
	{
		return (typeof m_value == 'boolean' && m_value == false) || (typeof m_value == 'string' && m_value.length == 0) || m_value == null ? true : false;
	}
}

// open a popup window (centered). ensure a new window is opened every
// time by appending the timestamp to the window name.
function popup(s_url, i_width, i_height, s_options)
{
	// add options with default.
	if (typeof s_options != 'string')
	{
		s_options = 'scrollbars,status';
	}

	var timestamp = new Date();

	var i_left = (screen.width - i_width) / 2;
	var i_top = (screen.height - i_height) / 2;

	var o_window = window.open(s_url, 'popup' + timestamp.getHours() + timestamp.getMinutes() + timestamp.getSeconds(), 'width=' + i_width + ',height=' + i_height + ',left=' + i_left + ',top=' + i_top + ',' + s_options);

	o_window.focus();
}

// automatic image rollovers with preloads.
function preload_rollovers(tag)
{
	if (typeof tag == 'string')
	{
		tag = [tag];
	}
	if (typeof tag == 'array' || typeof tag == 'object')
	{
		var o_re = new RegExp('([^0-9a-z])off(\.[0-9a-z]{3,4})$', 'i');

		for (i in tag) {
			var a_elements = document.getElementsByTagName(is_empty(tag[i]) ? 'img' : tag[i]);

			for (var i = 0; i < a_elements.length; i++)
			{
				// does the element have an 'off' src?
				if (o_re.test(a_elements[i].src))
				{
					// add onmouseout and onmouseover events.
					eval('a_elements[i].onmouseout = function() { this.src = "' + a_elements[i].src + '"; };');
					eval('a_elements[i].onmouseover = function() { this.src = "' + a_elements[i].src.replace(o_re, '$1over$2') + '"; };');

					// add the image to the preloader.
					Preloader.add(a_elements[i].src.replace(o_re, '$1over$2'));
				}
			}
		}
	}
}



	// navigation preload and rollovers.
	function navigation(colour, on)
	{
		var heading = YAHOO.util.Dom.get('navigation-heading');
		var links = YAHOO.util.Dom.getElementsBy(function() { return true; }, 'a', 'navigation');

		function mouseOut(e)
		{
			heading.src = '/media/infinityphotography/images/navigation/headings/' + colour + '/' + on + '.png';
		}

		function mouseOver(e, el)
		{
			heading.src = '/media/infinityphotography/images/navigation/headings/' + colour + '/' + el.className.replace(' double', '') + '.png';
		}

		for (i in links)
		{
			YAHOO.util.Event.addListener(links[i], 'mouseout', mouseOut);
			YAHOO.util.Event.addListener(links[i], 'mouseover', mouseOver, links[i]);
		}

		Preloader.add([
			'/media/infinityphotography/images/navigation/headings/' + colour + '/home.png',
			'/media/infinityphotography/images/navigation/headings/' + colour + '/photography.png',
			'/media/infinityphotography/images/navigation/headings/' + colour + '/philosophy.png',
			'/media/infinityphotography/images/navigation/headings/' + colour + '/weddings.png',
			'/media/infinityphotography/images/navigation/headings/' + colour + '/contact.png',
			'/media/infinityphotography/images/navigation/headings/' + colour + '/packages-prices.png',
			'/media/infinityphotography/images/navigation/headings/' + colour + '/blog.png',
			'/media/infinityphotography/images/navigation/headings/' + colour + '/portraits.png',
			'/media/infinityphotography/images/navigation/headings/' + colour + '/video.png',
			'/media/infinityphotography/images/navigation/headings/' + colour + '/testimonials.png',
			'/media/infinityphotography/images/navigation/headings/' + colour + '/destination-weddings.png',
			'/media/infinityphotography/images/navigation/headings/' + colour + '/media.png',
			'/media/infinityphotography/images/navigation/headings/' + colour + '/employment.png',
			'/media/infinityphotography/images/content_bg.png'
		]);
	}



	// weddings popup menu.
	var weddings = {
		hide: function() {
			clearTimeout(weddings.timer);
			new YAHOO.util.Anim(weddings.menu, {
				opacity: {
					to: 0
				}
			}, 0.25, YAHOO.util.Easing.easeOut).animate();
			weddings.timer = setTimeout(function() {
				YAHOO.util.Dom.setStyle(weddings.menu, 'display', 'none');
			}, 250);
		},
		init: function() {
			weddings.button = YAHOO.util.Dom.get('weddings-button');
			weddings.menu = YAHOO.util.Dom.get('weddings');
			weddings.timer = null;

			YAHOO.util.Dom.setStyle(weddings.menu, 'opacity', 0);

			var links = YAHOO.util.Dom.getElementsBy(function() { return true; }, 'a', 'navigation');

			YAHOO.util.Event.addListener(links, 'mouseover', weddings.hide);
			YAHOO.util.Event.removeListener(weddings.button, 'mouseover', weddings.hide);
			YAHOO.util.Event.addListener([weddings.button, weddings.menu], 'mouseover', weddings.show);
			YAHOO.util.Event.addListener([weddings.button, weddings.menu], 'mouseout', function() {
				weddings.timer = setTimeout(weddings.hide, 500);
			});
		},

		show: function() {
			clearTimeout(weddings.timer);
			YAHOO.util.Dom.setStyle(weddings.menu, 'display', 'block');
			new YAHOO.util.Anim(weddings.menu, {
				opacity: {
					to: 1
				}
			}, 0.25, YAHOO.util.Easing.easeOut).animate();
		}
	}



	// special offer popup.
	var special_offer = {
		hide: function() {
			clearTimeout(special_offer.timer);
			new YAHOO.util.Anim(special_offer.burst, {
				opacity: {
					to: 0
				}
			}, 0.25, YAHOO.util.Easing.easeOut).animate();
			special_offer.timer = setTimeout(function() {
				YAHOO.util.Dom.setStyle(special_offer.burst, 'display', 'none');
			}, 250);
		},
		init: function() {
			special_offer.button = YAHOO.util.Dom.get('contact-button');
			special_offer.burst = YAHOO.util.Dom.get('special-offer');
			special_offer.timer = null;

			YAHOO.util.Dom.setStyle(special_offer.burst, 'opacity', 0);

			var links = YAHOO.util.Dom.getElementsBy(function() { return true; }, 'a', 'navigation');

			YAHOO.util.Event.addListener(links, 'mouseover', special_offer.hide);
			YAHOO.util.Event.removeListener(special_offer.button, 'mouseover', special_offer.hide);
			YAHOO.util.Event.addListener(special_offer.button, 'mouseover', special_offer.show);
			YAHOO.util.Event.addListener(special_offer.button, 'mouseout', function() {
				special_offer.timer = setTimeout(special_offer.hide, 500);
			});
		},

		show: function() {
			clearTimeout(special_offer.timer);
			YAHOO.util.Dom.setStyle(special_offer.burst, 'display', 'block');
			new YAHOO.util.Anim(special_offer.burst, {
				opacity: {
					to: 1
				}
			}, 0.25, YAHOO.util.Easing.easeOut).animate();
		}
	}



	// wedding scroll.
	var wedding = {
		photos_width: 0,
		skip: 700,

		init: function() {
			// get elements.
			wedding.container = YAHOO.util.Dom.get('wedding-container');
			wedding.photos = YAHOO.util.Dom.get('wedding-photos');

			// calculate width of all images, so we don't pan too far.
			var images = YAHOO.util.Dom.getChildren(wedding.photos);
			for (i in images) {
				wedding.photos_width += images[i].width;
			}

			// get initial positions.
			wedding.container_X = YAHOO.util.Dom.getX(wedding.container);
			wedding.photos_X = YAHOO.util.Dom.getX(wedding.photos);
			wedding.photos_X_min = wedding.container_X - wedding.photos_width + 743;
			wedding.photos_Y = YAHOO.util.Dom.getY(wedding.photos);

			// previous events.
			var previous = YAHOO.util.Dom.get('previous');
			YAHOO.util.Event.addListener(previous, 'click', function() {
				clearTimeout(wedding.pan_timer);

				if (wedding.photos_X + wedding.skip > wedding.container_X) {
					wedding.photos_X = wedding.container_X;
				} else {
					wedding.photos_X = wedding.photos_X + wedding.skip;
				}

				new YAHOO.util.Motion(wedding.photos, {
					'points': {
						'to': [wedding.photos_X, wedding.photos_Y]
					}
				}, 0.25, YAHOO.util.Easing.easeOut).animate();

				setTimeout('wedding.pan_timer = setInterval(wedding.pan_left, 50);', 250);
			});
			YAHOO.util.Event.addListener(previous, 'mouseout', function() {
				clearTimeout(wedding.pan_timer);
			});
			YAHOO.util.Event.addListener(previous, 'mouseover', function() {
				wedding.pan_timer = setInterval(wedding.pan_left, 50);
			});

			// next events.
			var next = YAHOO.util.Dom.get('next');
			YAHOO.util.Event.addListener(next, 'click', function() {
				clearTimeout(wedding.pan_timer);

				if (wedding.photos_X - wedding.skip < wedding.photos_X_min) {
					wedding.photos_X = wedding.photos_X_min;
				} else {
					wedding.photos_X = wedding.photos_X - wedding.skip;
				}

				new YAHOO.util.Motion(wedding.photos, {
					'points': {
						'to': [wedding.photos_X, wedding.photos_Y]
					}
				}, 0.25, YAHOO.util.Easing.easeOut).animate();

				setTimeout('wedding.pan_timer = setInterval(wedding.pan_right, 50);', 250);
			});
			YAHOO.util.Event.addListener(next, 'mouseout', function() {
				clearTimeout(wedding.pan_timer);
			});
			YAHOO.util.Event.addListener(next, 'mouseover', function() {
				wedding.pan_timer = setInterval(wedding.pan_right, 50);
			});
		},

		pan_left: function() {
			if (wedding.photos_X < wedding.container_X) {
				YAHOO.util.Dom.setX(wedding.photos, ++wedding.photos_X);
			}
		},

		pan_right: function() {
			if (wedding.photos_X > wedding.container_X - wedding.photos_width + 743) {
				YAHOO.util.Dom.setX(wedding.photos, --wedding.photos_X);
			}
		}
	}

