if (!document.trace) {
	this.trace = function(output) {
		if (window.console && console.log && output) console.log(output);
	}
}

var dirtyItems = [];
var removableItems = [];

var CollectionEditor = new Class({


	initialize : function(view) {
		this.CollectionMode = 'friends';
		if (!view) return;
	
		trace('CollectionEditor.initialize(' + view.getProperty('id') + ')');
		
		this.view = view;
		
		var scope = this;
		
		this.toggleButton = this.view.getElementsBySelector('.edit')[0];
		this.toggleButton.addEvent('mousedown', this.onToggleClick.bindWithEvent(this));
		
		this.cancelButton = {};
		
		//this.removableItems = [];
		this.removeButtons = [];
		//this.dirtyItems = [];
		
		this.enabled = false;
	},
	
	
	toggleEditing : function() {
		
		if (!this.enabled) this.enableEditing();
		else this.disableEditing(true);
		
		if(this.enabled)
		{
			if(this.toggleButton.id == 'edit_all_friends')
			{
					$jq('#edit_all_following').hide();
			}
			else if(this.toggleButton.id == 'edit_all_following')
			{
					$jq('#edit_all_friends').hide();
			}
		}
		else
		{
			$jq('#edit_all_friends').show();
			$jq('#edit_all_following').show();
		}
	},
	
	
	enableEditing : function() {
	
		//this.removableItems = this.view.getElementsBySelector('.removable');
		removableItems = this.view.getElementsBySelector('.removable');
		this.removeButtons = [];
		
		this.enabled = true;
		
		this.toggleButton.setText('DONE');
		
		//for (var i = 0; i < this.removableItems.length; ++i) {
		for (var i = 0; i < removableItems.length; ++i) {
			var removableItem = removableItems[i]; //this.removableItems[i];
			
			var y = Math.floor(removableItem.getCoordinates().height / 2) - 8;
			
			var remove = new Element('div');
			remove.setStyle('position', 'absolute');
			remove.setStyle('z-index', '10');
			remove.setStyle('overflow', 'hidden');
			remove.setStyle('width', '17px');
			remove.setStyle('height', '17px');
			remove.setStyle('background', 'url(/themes/ca/images/glyph_close.png) no-repeat');
			remove.setStyle('left', '-8px');
			remove.setStyle('top', y + 'px');
			remove.setStyle('cursor', 'pointer');
					
			remove.injectInside(removableItem);
			
			remove.addEvent('mouseover', function(e) { this.setStyle('background-position', '0 -17px'); });
			remove.addEvent('mouseout', function(e) { this.setStyle('background-position', '0 0'); });
			remove.addEvent('mousedown', this.onRemovableItemClick.bindWithEvent(this));
			
		
			this.removeButtons.push(remove);
		}
		
		var cancelButton = new Element('a');
		cancelButton.setText('CANCEL');
		cancelButton.addClass('on_left');
		cancelButton.injectAfter(this.toggleButton);
		cancelButton.addEvent('mousedown', this.onCancelClick.bindWithEvent(this));
		
		this.cancelButton = cancelButton;
	},
	
	
	onRemovableItemClick : function(e) {
		e.preventDefault();
		this.removeItem(e.target);
	},
	
	
	onToggleClick : function(e) {
		e.preventDefault();
		this.toggleEditing();
	},
	
	
	onCancelClick : function(e) {
		e.preventDefault();
		this.disableEditing(false);
		$jq('#edit_all_friends').show();
		$jq('#edit_all_following').show();
	},
	
	
	disableEditing : function(flush) {
		
		this.enabled = false;
		
		this.toggleButton.setText('EDIT');
		
		for (var i = 0; i < this.removeButtons.length; ++i) {
			var removeButton = this.removeButtons[i];
			removeButton.remove();
		}
		
		this.removeButtons = [];
		
		//if (this.dirtyItems.length > 0) {
		if (dirtyItems.length > 0) {
			if (flush) this.flush();
			else this.restore();
		}
		
		this.cancelButton.remove();
		this.cancelButton = {};
		$jq('#edit_all_friends').show();
		$jq('#edit_all_following').show();
	},
	
	
	removeItem : function(removeButton) {
	
		var removeIndex = this.getRemoveButtonIndex(removeButton);
		
		trace('CollectionEditor.removeItem(' + removeIndex + ')');
		
		var elementToRemove = removableItems[removeIndex]; //this.removableItems[removeIndex];
		elementToRemove.setStyle('display', 'none');
		elementToRemove.setStyle('visibility', 'hidden');
		
		//this.dirtyItems.push(removeIndex);
		dirtyItems.push(removeIndex);
		removeButton.setStyle('display', 'none');
	},
	
	
	/**
	 * Flush dirty (pending deletion) items. This should flush items 
	 * from the server. Note - the item indices are updated with each 
	 * flush, so if the intent is to keep the indices relative to a 
	 * base record set/hash the hash will need to be kept/referenced 
	 * relative to the updated/modified indices.
	 *
	 * If user confirmation is required, it could be integrated at 
	 * this step ('are you sure you want to delete 1, 2, and 3?').
	 */
	flush : function() {
		
		trace('CollectionEditor.flush()');
		trace('CollectionEditor -> PHP.removeItemsFromCollection');
		trace('-- collection element id: ' + this.view.getProperty('id'));
		
		var removeSummary = "-- item indices to remove: ";

		//this.dirtyItems.sort(); // << linearize indices
		dirtyItems.sort(); // << linearize indices
		var friendsRecordsToDelete = ''; //comma seperate list of items to be deleted.
		var followersRecordsToDelete = ''; //comma seperate list of items to be deleted.
		var gamesRecordsToDelete = ''; //comma seperate list of items to be deleted.
		var keyToRemove = '';
		var itsD = '';

		//for (var i = 0; i < this.dirtyItems.length; ++i) {
		for (var i = 0; i < dirtyItems.length; ++i) {
		
			//var removeIndex = this.dirtyItems[i];
			var removeIndex = dirtyItems[i];
			var removeElement = removableItems[removeIndex]; //this.removableItems[removeIndex];
			/**
			 * SN TEAM CODE ADDED HERE
			 * JW
			 */
			keyToRemove = removeElement.getProperty('id');
			if(this.CollectionMode=="friends") {
				itsD = keyToRemove.charAt(8);
				if (itsD == "d") 
				{
					friendsRecordsToDelete += "," + keyToRemove.substring(9);
				} 
				else
				{ //must be a follower
					followersRecordsToDelete += "," + keyToRemove.substring(12);
				}
			}
			else {
				gamesRecordsToDelete += "," + keyToRemove;
			}	 
			//end SN TEAM CODE
			
			//removeElement.remove(); //method is actually deleting the document element using mootools Element.remove() native method)
			
			removeSummary += removeIndex;
			//if (i < this.dirtyItems.length - 1) removeSummary += ",";
			if (i < dirtyItems.length - 1) removeSummary += ",";
		}
		/**
		 * SN TEAM CODE ADDED HERE
		 * JW
		 */
		//remove fist comma
		friendsRecordsToDelete = friendsRecordsToDelete.substring(1);
		followersRecordsToDelete = followersRecordsToDelete.substring(1);
		gamesRecordsToDelete  = gamesRecordsToDelete.substring(1);
		if(this.CollectionMode == "friends") {
			if (friendsRecordsToDelete.length > 2) {
				gl_ajax_deleteContact(friendsRecordsToDelete);
			}
			if (followersRecordsToDelete.length > 2) {
				gl_ajax_deleteFollower(followersRecordsToDelete);			
			}
		}
		else {
				gl_ajax_deleteFavoriteGame(gamesRecordsToDelete);
		}

		//end SN TEAM CODE
		
		trace(removeSummary);
		
		//this.removableItems = [];
		//this.dirtyItems = [];
		//dirtyItems = [];
	},
	
	/**
	 * Restore dirty (pending deletion) items. This should not flush items 
	 * from the server.
	 */
	restore : function() {
		
		trace('CollectionEditor.restore()');
		
		//this.dirtyItems.sort();
		dirtyItems.sort();
		
		//for (var i = 0; i < this.dirtyItems.length; ++i) {
		for (var i = 0; i < dirtyItems.length; ++i) {
		
			//var restoreIndex = this.dirtyItems[i];
			var restoreIndex = dirtyItems[i];
			var restoreElement = removableItems[restoreIndex]; //this.removableItems[restoreIndex];
			
			restoreElement.setStyle('display', 'block');
			restoreElement.setStyle('visibility', 'visible');
		}
		
		//this.removableItems = [];
		//this.dirtyItems = [];
		removableItems = [];
		dirtyItems = [];
	},
	
	
	getRemoveButtonIndex : function(removeButton) {
	
		for (var i = 0; i < this.removeButtons.length; ++i) {
			if (this.removeButtons[i] == removeButton) return i;
		}
		return -1;
	},
	
	
	toString : function() {
		return ["CollectionEditor"];
	}
	
	
});

function ce_ajax_flush() {
	dirtyItems.sort();
	for (var i = 0; i < dirtyItems.length; ++i) {
		var removeIndex = dirtyItems[i];
		var removeElement = removableItems[removeIndex];
		removeElement.remove();
	}
	
	dirtyItems = [];
	removableItems = [];
}

function ce_ajax_restore() {
	dirtyItems.sort();
	//alert("In ce_ajax_restore");
	//alert("dirtyItems.length = " + dirtyItems.length);
	//alert("removableItems.length = " + removableItems.length);
	for (var i = 0; i < dirtyItems.length; ++i) {
		
		var restoreIndex = dirtyItems[i];
		var restoreElement = removableItems[restoreIndex]; //this.removableItems[restoreIndex];
				
		restoreElement.setStyle('display', 'block');
		restoreElement.setStyle('visibility', 'visible');
	}
	
	removableItems = [];
	dirtyItems = [];
	$jq('#edit_all_friends').show();
	$jq('#edit_all_following').show();
}
