/**
*	photos.js
*
*	Provide a transparent mechanism for dynamically
*	managing site photo galleries. Requires events.js,
*	ajax.js and cookies.js to function.
*
*	@author Dave Liotta
*	@copyright &copy;2006 Bare Coder, LLC
*	@created November 17th, 2006
*/

var ADD_FAVORITE_NAME_SPACE = "addfav:";
var REMOVE_FAVORITE_NAME_SPACE = "removefav:";
var THUMB_NAME_SPACE = "thumb:";
var SHOOT_SELECT_SUFFIX = "shoot";
var FULL_PHOTO_DIV_ID = "fullphotoview";
var PHOTO_ADDED_DIV_ID = "photoadded";
var FULL_PHOTO_SERVICE = SERVICES_URL + "GetFullPhotoByPhotoIdIMAGE.php";
var ADD_PHOTO_SERVICE = SERVICES_URL + "AddMyGalleryPhotoByIdEMPTY.php";
var REMOVE_PHOTO_SERVICE = SERVICES_URL + "RemoveMyGalleryPhotoByIdEMPTY.php";
var PHOTO_ADDED_OFFSET_TOP = 57;
var PHOTO_ADDED_OFFSET_LEFT = -113;

/**
*	PhotoGalleryHandler class
*/
function PhotoGalleryHandler() {

	var AddFavoriteItems = null;
	var RemoveFavoriteItems = null;
	var ThumbItems = null;

	var FullPhotoObj = null;
	var ShootSelectObj = null;
	var PhotoAddedObj = null;
	
	this.Initialize = function() {

		FullPhotoObj = document.all ? document.all[FULL_PHOTO_DIV_ID] : (document.getElementById ? document.getElementById(FULL_PHOTO_DIV_ID) : null);
		ShootSelectObj = document.all ? document.all[FILTER_NAME_SPACE + SHOOT_SELECT_SUFFIX] : (document.getElementById ? document.getElementById(FILTER_NAME_SPACE + SHOOT_SELECT_SUFFIX) : null);
		PhotoAddedObj = document.all ? document.all[PHOTO_ADDED_DIV_ID] : (document.getElementById ? document.getElementById(PHOTO_ADDED_DIV_ID) : null);

		QueryImageItems();
		ApplyEventListeners();

	}

	this.Destroy = function () {}

	function QueryImageItems() {
		var ListItems = document.getElementsByTagName ? document.getElementsByTagName("li") : null;

		AddFavoriteItems = new Array();
		RemoveFavoriteItems = new Array();
		ThumbItems = new Array();
		if ( ListItems != null ) {
			for (var i=0; i < ListItems.length; i++) {
				if ( ListItems[i].id.length > 0 ) {
					
					ThumbObj = document.all ? document.all[THUMB_NAME_SPACE + ListItems[i].id] : (document.getElementById ? document.getElementById(THUMB_NAME_SPACE + ListItems[i].id) : null);
					if ( ThumbObj != null ) {
						ThumbObj.key = ListItems[i].id;
						ThumbItems[ThumbItems.length] = ThumbObj;
					}

					FavoriteObj = document.all ? document.all[ADD_FAVORITE_NAME_SPACE + ListItems[i].id] : (document.getElementById ? document.getElementById(ADD_FAVORITE_NAME_SPACE + ListItems[i].id) : null);
					if ( FavoriteObj != null ) {
						FavoriteObj.key = ListItems[i].id;
						AddFavoriteItems[AddFavoriteItems.length] = FavoriteObj;
					}

					FavoriteObj = document.all ? document.all[REMOVE_FAVORITE_NAME_SPACE + ListItems[i].id] : (document.getElementById ? document.getElementById(REMOVE_FAVORITE_NAME_SPACE + ListItems[i].id) : null);
					if ( FavoriteObj != null ) {
						FavoriteObj.key = ListItems[i].id;
						RemoveFavoriteItems[RemoveFavoriteItems.length] = FavoriteObj;
					}
				}
			}
		}
	}

	function ApplyEventListeners() {
		if ( ThumbItems == null ) QueryImageItems();
		
		for (var i=0; i < ThumbItems.length; i++) {
			attachEventListener(ThumbItems[i], "click", ThumbItemClicked, false);
		}

		for (var i=0; i < AddFavoriteItems.length; i++) {
			attachEventListener(AddFavoriteItems[i], "click", AddFavoriteItemClicked, false);
		}

		for (var i=0; i < RemoveFavoriteItems.length; i++) {
			attachEventListener(RemoveFavoriteItems[i], "click", RemoveFavoriteItemClicked, false);
		}

		if ( FullPhotoObj != null ) attachEventListener(FullPhotoObj, "click", FullPhotoClicked, false);
	}

	function RemoveEventListeners() {
		if ( ThumbItems != null ) {
			for (var i=0; i < ThumbItems.length; i++) {
				detachEventListener(ThumbItems[i], "click", ThumbItemClicked, false);
			}
		}

		if ( AddFavoriteItems != null ) {
			for (var i=0; i < AddFavoriteItems.length; i++) {
				detachEventListener(AddFavoriteItems[i], "click", AddFavoriteItemClicked, false);
			}
		}

		if ( RemoveFavoriteItems != null ) {
			for (var i=0; i < RemoveFavoriteItems.length; i++) {
				detachEventListener(RemoveFavoriteItems[i], "click", RemoveFavoriteItemClicked, false);
			}
		}
	}

	function AddFavoriteItemClicked(event) { 
		var EventObj = queryEventTarget(event);
		
		function CallBack(AResponse) {
			if ( PhotoAddedObj != null ) {
				APosition = elementPosition(EventObj); // from events.js				
				PhotoAddedObj.style.top = ( APosition[1] + PHOTO_ADDED_OFFSET_TOP ) + "px";
				PhotoAddedObj.style.left = ( APosition[0] + PHOTO_ADDED_OFFSET_LEFT ) + "px";
				DisplayPhotoAdded();
				setTimeout(HidePhotoAdded, 2700);
			}
			else alert("Photo Added.");
		}
		
		AJAXQuery(ADD_PHOTO_SERVICE + "?" + IDENTITY_PARAM_NAME + "=" + EventObj.key + "&" + SECOND_IDENTITY_PARAM_NAME + "=" + ENCODED_USER, null, CallBack);
	}

	function RemoveFavoriteItemClicked(event) { 
		var EventObj = queryEventTarget(event);

		function CallBack(AResponse) {
			PhotoObj = document.all ? document.all[EventObj.key] : (document.getElementById ? document.getElementById(EventObj.key) : null);
			if ( PhotoObj != null ) PhotoObj.style.display = "none";
		}

		AJAXQuery(REMOVE_PHOTO_SERVICE + "?" + IDENTITY_PARAM_NAME + "=" + EventObj.key + "&" + SECOND_IDENTITY_PARAM_NAME + "=" + ENCODED_USER, null, CallBack);
	}

	function ThumbItemClicked(event) {
		var WindowPosition = scrollPosition(); // from events.js
		var EncodedPhotoId = queryEventTarget(event).key;
		if ( FullPhotoObj != null ) { 
			FullPhotoObj.innerHTML = '<img class="clickable" src="' + 
				FULL_PHOTO_SERVICE + '?' + IDENTITY_PARAM_NAME + '=' + EncodedPhotoId +
				'" alt="Click image to close." title="Click image to close." />';
			FullPhotoObj.style.top = (WindowPosition[1] + 17) + 'px';
			FullPhotoObj.style.left = '17px';
			DisplayFullPhoto();
		}
	}

	function FullPhotoClicked(event) {
		HideFullPhoto();
	}

	function DisplayFullPhoto() {
		if ( FullPhotoObj != null ) FullPhotoObj.style.display = 'block';
		if ( ShootSelectObj != null ) ShootSelectObj.style.visibility = "hidden";
	}

    function HideFullPhoto() {
		if ( FullPhotoObj != null ) FullPhotoObj.style.display = 'none'; 
		if ( ShootSelectObj != null ) ShootSelectObj.style.visibility = "visible";
	}

	function DisplayPhotoAdded() {
		if ( PhotoAddedObj != null ) PhotoAddedObj.style.display = 'block';
	}

	function HidePhotoAdded() {
		if ( PhotoAddedObj != null ) PhotoAddedObj.style.display = 'none';
	}

	return true;

}
