/**
 * This is what page you are on in the nav.
 */
var navPageIndex = 0;
/**
 *
 */
var thumbnailsPerPage = 4;
var currentImageIndex = 0;
/* This is the max you have moved forward from the uuid
 * it helps when trying to figure out whether or not to
 * just move or load then move.
 */
var maxForward = 0;
/* This is the max you have moved backward from the uuid
 * it helps when trying to figure out whether or not to
 * just move or load then move.
 */
var maxBackward = 0;
/**
 * This is the currently show image's uuid
 */
var currentImageUUID = '';
/**
 * This keeps track of whether or not the thumbnail slider
 * in the process of sliding to prevent overclicking
 */
var slideActive = false;
/**
 * This var counts each ad load in the photo galleries
 * to prevent double loading upon initial window load
 */
var adCounter = 0;


function initializeGalleryTracking(galleryUUID, edition, eventTitle) {
	// get gallery/item info and do some string clean up
	var sectionTitle = ((typeof(eventTitle) == "undefined") || (eventTitle == "")) ? "gallery" : "red_carpet";
	var galleryTitle = makeURLsafe($('gallery_title').innerHTML,0);
	var itemTitle = makeURLsafe($('item_title').innerHTML,0);
	var itemCaption = makeURLsafe($('item_caption').innerHTML,20);
	var cleanGalleryTitle = galleryTitle.toLowerCase().replace(/_/g, "-");
	var cleanItemTitle = itemTitle.toLowerCase().replace(/_/g, "-");	

	GalleryTracking.sTrackPath.Init();	//	This resets sTrackPath to an empty element
	
	GalleryTracking.sTrackPath.AddItems(
		[
		 	sectionTitle,
			eventTitle,
			"photos",
			cleanGalleryTitle,
			cleanItemTitle
		]
	);
	var sTrackPath = GalleryTracking.sTrackPath.Get();	// Omniture SiteCatalyst

	// track gallery item on item load
	var trackingPath = galleryTitle + "/" + itemTitle + "__" + itemCaption;

	if ((typeof(eventTitle) != "undefined") && (eventTitle != "")) {
		trackingPath = eventTitle + "/" + trackingPath;
	}

	trackingPath = (trackingPath.indexOf("/") === 0) ? trackingPath.substring(1) : trackingPath; // added in case eventTitle is null or blank... there is probably a better way to do this, but this should work for now.

	pageTracker._trackPageview('/photos_ajax/' + trackingPath);		// Google Analytics
	sTrackPhotoView(sTrackPath, cleanGalleryTitle);

	if (edition == 'au') { _sc('/photos_ajax/' + trackingPath); }	// SiteCensus (AUSTRALIA ONLY!!)

	EventTracking.ObserveDynamicElements(trackingPath);	// track elements loaded with the gallery item fragment (next/prev arrows)
	EventTracking.ObserveOnceElements(galleryTitle, galleryUUID);	// track other elements in the page
}


GalleryTracking = {
	sTrackPath:{
		AddItem:function(theItem) { if ((typeof(theItem) != "undefined") && (theItem != "")) { this.Items.push(theItem); } },
		AddItems:function(theItems) { if ((typeof(theItems) != "undefined") && (theItems != "")) { theItems.each(function(el){ GalleryTracking.sTrackPath.AddItem(el); }); } },
		Get:function() { return (this.Items == "") ? "sTrackPath_not_defined" : this.Items.join(":"); },
		Init:function() { this.Items = new Array(0); }
	}
};


Thumbnail = {
	UpdateArrows: function (galleryUUID) {
		if(navPageIndex === 0) {
			$('previousThumbnails_'+galleryUUID).addClassName('disabled');
		} else {
			$('previousThumbnails_'+galleryUUID).removeClassName('disabled');
		}
		if(navPageIndex == maxPageIndex) {
			$('nextThumbnails_'+galleryUUID).addClassName('disabled');
		} else {
			$('nextThumbnails_'+galleryUUID).removeClassName('disabled');
		}
	},
	DoSlide: function (moveDist) {
		new Effect.Move('thumbnails', {x: moveDist, y: 0, mode: 'relative', duration: 0.5, transition: Effect.Transitions.sinoidal, afterFinish: function() {slideActive = false;}});
	},
	GetPrevious: function (url, emailUrl, gallery, slide, item, eventTitle, loadingIndicator) {
		if(navPageIndex > 0 && slideActive !== true) {
			slideActive = true;
			if(navPageIndex > maxBackward && ($('position_'+item) !== null || item == '')) {
				Thumbnail.CalculateAndDoSlide(item, false, gallery, eventTitle);
			} else {
				if (loadingIndicator === true) {
					$('previousThumbnails_'+gallery).addClassName('loading');
				}
				maxBackward--;
				new Ajax.Updater('thumbnails', '/includes/jsp/image_navigator.jsp?'+'eventTitle='+eventTitle+'&galleryUUID='+gallery+'&page='+(maxBackward)+'&containerUrl='+url+'&currentImageUUID='+currentImageUUID+'&emailUrl='+emailUrl, {
					method: 'get',
					parameters:pars,
					insertion: Insertion.Top,
					onComplete: function(transport) {
						var slideThisMuch = 404;
						if(transport.responseText.match(/.*href.*/)) {
							$('thumbnails').setStyle({left: '-'+slideThisMuch+'px'});
							if(slide){
								var currentImagePageIndex = Thumbnail.CalculateCurrentImageNavPage(item);
								var difference = currentImagePageIndex - navPageIndex;
								if(difference !== 0) {
									var amount = ((difference)*slideThisMuch)+'px';
									$('thumbnails').setStyle({left: amount});
								}
								Thumbnail.CalculateAndDoSlide(item, false, gallery, eventTitle);
							} else {
								slideActive = false;
							}
							Thumbnail.Show(item);
						}
					}
				});
				if (loadingIndicator === true) {
					$('previousThumbnails_'+gallery).removeClassName('loading');
				}
			}
		}
	},
	GetNext: function (url, emailUrl, gallery, slide, item, eventTitle, loadingIndicator) {
		if(navPageIndex < maxPageIndex && slideActive !== true) {
			slideActive = true;
			if(navPageIndex < maxForward && ($('position_'+item) !== null || item === '')) {
				Thumbnail.CalculateAndDoSlide(item, true, gallery, eventTitle);
			} else {
				if (loadingIndicator === true) {
					$('nextThumbnails_'+gallery).addClassName('loading');
				}
				maxForward++;
				new Ajax.Updater('thumbnails', '/includes/jsp/image_navigator.jsp?'+'eventTitle='+eventTitle+'&galleryUUID='+gallery+'&page='+(maxForward)+'&containerUrl='+url+'&currentImageUUID='+currentImageUUID+'&emailUrl='+emailUrl, {
					method: 'get',
					insertion: Insertion.Bottom,
					onComplete: function(transport) {
						if(transport.responseText.match(/.*href.*/)) {
							if(slide) {
								Thumbnail.CalculateAndDoSlide(item, true, gallery, eventTitle);
							} else {
								slideActive = false;
							}
							Thumbnail.Show(item);
						}
					}
				});
				if (loadingIndicator === true) {
					$('nextThumbnails_'+gallery).removeClassName('loading');
				}
			}
		}
	},
	ChangeIndicator: function (url, isFirst, emailUrl, gallery, item, eventTitle, next, loadingIndicator) {
		var photo_count_array = $$('#thumbnails .photo_count');
		photo_count_array.each(function(photo_count_array){
			photo_count_array.hide();
		});
		if (item !== null) {
			if($('position_'+item) === null) {
				if(next) {
					Thumbnail.GetNext(url, emailUrl, gallery, true, item, eventTitle, loadingIndicator);

				} else {
					Thumbnail.GetPrevious(url, emailUrl, gallery, true, item, eventTitle, loadingIndicator);
				}
			} else {
				Thumbnail.Show(item);
				if(!isFirst) {
					Thumbnail.CalculateAndDoSlide(item, next, gallery, eventTitle);
				}
			}
		} else {
			photo_count_array[0].show();
		}
	},
	CalculateAndDoSlide: function(item, next, gallery, eventTitle) {
		var slideThisMuch = 404;
		if($('position_'+item) !== null) {
			var currentImagePageIndex = Thumbnail.CalculateCurrentImageNavPage(item);
			var difference = currentImagePageIndex - navPageIndex;
			Thumbnail.DoSlide(-slideThisMuch*difference);
			navPageIndex += difference;
			Thumbnail.Show(item);
		} else {
			if(next) {
				navPageIndex++;
				Thumbnail.DoSlide(-slideThisMuch);
			} else {
				navPageIndex--;
				Thumbnail.DoSlide(slideThisMuch);
			}
		}
		Thumbnail.UpdateArrows(gallery);
		EventTracking.ObserveThumbnails();
	},
	CalculateCurrentImageNavPage: function(item) {
		if($('position_'+item) !== null) {
			var indices = $('position_'+item).innerHTML.split(" ");
			return parseInt((parseInt(indices[0], 10)-1)/thumbnailsPerPage, 10);
		}
		return navPageIndex;
	},
	Initialize: function(url, emailUrl, gallery, eventTitle) {
		new Ajax.Updater('thumbnails', '/includes/jsp/image_navigator.jsp?'+'eventTitle='+eventTitle+'&galleryUUID='+gallery+'&page='+navPageIndex+'&currentImageUUID='+currentImageUUID+'&containerUrl='+escape(url)+'&emailUrl='+emailUrl, {
			method:'get',
			onComplete: function() {
				Thumbnail.UpdateArrows(gallery);
				EventTracking.ObserveThumbnails();
			}
		});
	},
	Show: function(item) {
		$('position_'+item).show();
	}
};

Photo = {
	//used to check if substring index of '#' is numeric, which determines if the item is an image id or tynt tracer tracking
	IsNumeric: function (sText) {
		var ValidChars = '0123456789.';
		var IsNumber=true;
		var Char;
		for (i = 0; i < sText.length && IsNumber === true; i++) {
			Char = sText.charAt(i);
			if (ValidChars.indexOf(Char) == -1) {
				IsNumber = false;
			}
		}
		return IsNumber;
	},

	Load: function (containerUrl, gallery, item, eventTitle, emailUrl, isFirst, next, loadingIndicator) {

		var pars;
		var url;
		if(item) {
			if(containerUrl.indexOf('#') > 0) {
				containerUrl = containerUrl.substring(0, containerUrl.indexOf('#'));
			}
			url = containerUrl+'#'+item;
			pars = 'eventTitle=' + eventTitle + '&galleryUUID=' + gallery + '&containerUrl='+ escape(url) + '&uuid=' + item + '&emailUrl='+emailUrl;
		} else {
			pars = 'eventTitle=' + eventTitle + '&galleryUUID=' + gallery + '&containerUrl='+ escape(containerUrl) + '&emailUrl='+emailUrl;
		}
		new Ajax.Updater('item_container', '/photos/includes/jsp/gallery_item.jsp', {
			method: 'get',
			parameters: pars,
			onComplete: function() {
				Comments.Init();				
				FB.init("c8b255ab4b2a035cb0d6ee247e52eb41", "/static/includes/html/xd_receiver.htm");
				Thumbnail.ChangeIndicator(containerUrl, isFirst, emailUrl, gallery, item, eventTitle, next, loadingIndicator);
	
				// Note: photoGalleryEdition is a global variable set in gallery.jsp
				initializeGalleryTracking(gallery, photoGalleryEdition, eventTitle);	
			},
			evalScripts: false
		});

		var nthPhoto = 2; // Change this value if you want to reload the ads more or less frequently
		var loadAdsEveryNthPhoto = ((adCounter > 0) && (adCounter % nthPhoto === 0)) ? true : false;
		if (loadAdsEveryNthPhoto) { LoadAds(); } // (re)load iframe ads
		adCounter=adCounter+1;
			}
};

UUID = {
	GetIndex: function(gallery, item) {
		new Ajax.Updater('notanid', '/includes/jsp/navIndexFinder.jsp?galleryUUID='+gallery+'&uuid='+item, {
			method:'get',
			onComplete: function(transport) {
				navPageIndex = parseInt(transport.responseText, 10);
				maxBackward = navPageIndex;
				maxForward = navPageIndex;
			}
		});
	}
};

/* suckerfish hover is used for IE6 thumbnail navigator hover styles */
sfHover = function() {
	var sfEls = document.getElementById("thumbnails").getElementsByTagName("a");
	for (var i=0; i<sfEls.length; i++) {
		sfEls[i].onmouseover=function() {
			this.className+=" sfhover";
		};
		
		sfEls[i].onmouseout=function() {
			this.className=this.className.replace(new RegExp(" sfhover\\b"), "");
		};
	}
};

if (window.attachEvent){
		window.attachEvent("onload", sfHover);
}

function loadAccordions() {
	if ($$('#photo_categories .accordion_toggle').size() > 0) {
		var photo_categories = new accordion('#photo_categories', {
			onEvent: 'mouseover'
		});
		photo_categories.activate($$('#photo_categories .accordion_toggle')[0]);
	}
}
// photo category accordions
Event.observe(window, 'load', loadAccordions, false);


/*******************************************************
 * TRACKING FOR THE PHOTO GALLERIES:
 * the following tracks each gallery item and click
 * events like next/prev arrows, right column stuff,
 * and the thumbnail navigator. used for Google
 * Analytics and SiteCatalyst (Nielsen SiteCensus is
 * no longer used).
 *******************************************************/
var loadOnceEventTrackersLoaded = 'false';

// function for SiteCensus
function _sc(_sctitle) {
	// _sctitle = Title of the Object
	var ScImgSrc;

	var ScRandom = Math.ceil(Math.random()*1000000000);

	ScImgSrc = 'http://secure-au.imrworldwide.com/cgi-bin/m?ci=mcn';
	ScImgSrc += '&amp;cg=eonline';
	ScImgSrc += '&amp;si=' + encodeURIComponent(_sctitle);
	ScImgSrc += '&amp;cc=1';     //Cookie Check (Always on)
	ScImgSrc += '&amp;rnd=' + ScRandom;

	new Insertion.Bottom('photo_body', '<img src="'+ScImgSrc+'" style="display:none;" border="0" alt=""/>');
}



// attaches event listeners to the elements we need to track
EventTracking = {
	ObserveDynamicElements: function(trackingPath) {
		if ($('prev_overlay')) {
			$('prev_overlay').observe('click', function(){pageTracker._trackPageview('/events/photos/prev_overlay/' + trackingPath);}); 
			}
		
		if ($('next_overlay')) {
			$('next_overlay').observe('click', function(){pageTracker._trackPageview('/events/photos/next_overlay/' + trackingPath);});
			}
		
		if ($('prev_bottom')) {
			$('prev_bottom').observe('click', function(){pageTracker._trackPageview('/events/photos/prev_bottom/' + trackingPath);});
			}
		
		if ($('next_bottom')) {
			$('next_bottom').observe('click', function(){pageTracker._trackPageview('/events/photos/next_bottom/' + trackingPath);});
			}
	},
	ObserveOnceElements: function(galleryTitle, galleryUUID) {
		if (loadOnceEventTrackersLoaded != 'true') {
			$('previousThumbnails_'+galleryUUID).observe('click', function(){
				pageTracker._trackPageview('/events/photos/thumb_scroll_left/');
			});
			$('nextThumbnails_'+galleryUUID).observe('click', function(){
				pageTracker._trackPageview('/events/photos/thumb_scroll_right/');
			});
			if ($('photo_categories')) {
				$A($('photo_categories').getElementsByTagName('a')).each(function(s){
					if (!s.hasClassName('more')) {
						$(s).observe('click', function(){
							pageTracker._trackPageview('/events/photos/related_photo/' + galleryTitle);
						});
					} else {
						$(s).observe('click', function(){
							pageTracker._trackPageview('/events/photos/related_more/' + galleryTitle);
						});
					}
				});
			}
			if ($('our_picks')) {
				$A($('our_picks').getElementsByTagName('a')).each(function(s){
					$(s).observe('click', function(){
						pageTracker._trackPageview('/events/photos/our_picks/' + galleryTitle);
					});
				});
			}
			if ($('top_galleries')) {
				$A($('top_galleries').getElementsByTagName('a')).each(function(s){
					$(s).observe('click', function(){
						pageTracker._trackPageview('/events/photos/top_10_galleries/' + galleryTitle);
					});
				});
			}
			if ($('gallery_categories')) {
				$A($('gallery_categories').getElementsByTagName('a')).each(function(s){
					if (!s.hasClassName('all')) {
						$(s).observe('click', function(){
							pageTracker._trackPageview('/events/photos/categories/' + s.innerHTML.stripTags().replace(/[\.,;!#\$\/:\?'\(\)\[\]_\-\\]/g, "").replace(/ /gi, "_").replace("&nbsp", "_"));
						});
					} else {
						$(s).observe('click', function(){
							pageTracker._trackPageview('/events/photos/all_photos');
						});
					}
				});
			}
			if ($('next_gallery_link')) {
				$A($('next_gallery_link').getElementsByTagName('a')).each(function(s){
					$(s).observe('click', function(){
						pageTracker._trackPageview('/events/photos/top_10_galleries/' + galleryTitle);
					});
				});
			}
			loadOnceEventTrackersLoaded = 'true';
		}
	},
	ObserveThumbnails: function() {
		$A($('thumbnails').getElementsByTagName('a')).each(function(s){
			if (!$(s).hasClassName('eventTrackingLoaded')) {
				$(s).observe('click', function(){
					pageTracker._trackPageview('/events/photos/thumb_click/' + $('gallery_title').innerHTML.stripTags().replace(/[\.,;!#\$\/:\?'\(\)\[\]_\-\\]/g, "").replace(/ /gi, "_").replace("&nbsp", "_"));
				});
				$(s).addClassName('eventTrackingLoaded');
			}
		});
	}
};

GalleryPoll = {
	DisableVoting: function () {
		var poll_link_array = $$('.poll_choice_link');
		poll_link_array.each(function(poll_link_array){
			poll_link_array.removeAttribute('onclick');
		});
	}
};
