jQuery.fn.rememberHint = function()
{
	$(this).addClass('hint').each(function(index)
	{
		var $this =  $(this);
		var hint = $this.val();
		$this.focus(function()
		{
			if ($this.val() === hint)
			{
				$this.val('').removeClass('hint');
			}
		}).blur(function(e)
		{
			if ($this.val() === '')
			{
				$this.val(hint).addClass('hint');
			}
		});
	});
	return this;
};
function resetEdit()
{
	$('#edit').removeEditControls();
	$('#bookmarks').addEditControls().find('ul').sortable();

}
function refuseClick()
{
	return false;
}
jQuery.fn.addEditControls = function()
{
	if (!$(this).data('editmode'))
	{
		var $this = $(this);
		$this.addClass('editMode');
		$('a', this).click(refuseClick);

		var $theTarget;
		var $movingObject;
		var count;
		function handleResorting(event, dragData)
		{
		
			$('.dropzone').each(function(){
				var $this = $(this);
				$this.parent().find('li:not(".folder, .dropzone, .edit-control"):last').after($this);
			});
			
			$('#bookmarks ul').sortable('disable');
			$movingObject = $(dragData.item);
			$movingObject.addClass('position-tracker');

			var $target = $movingObject.parents('.folder:first');
			var targetId = $target.attr('id');

			var position;
			$('#'+targetId+' ul > li:not(.edit-control, .dropzone)').each(function(index)
			{
				var $this = $(this);
				if ($this.hasClass('position-tracker'))
				{
					position = index+1;
					childId = $this.attr('id');
					return true;
				}
				
			});

			$('.position-tracker').removeClass('position-tracker');
			if (!position)
			{
				position = 1;
			}

			$.ajax(
			{
				data:
				{
					'action': 'reorder',
					'id': childId,
					'position': position,
					'parent-id': targetId
				},
				success: function()
				{
					$('#bookmarks ul').sortable('enable');
				},
				error: function()
				{
					alert("An error has occured, we could not save your new list order.\n\n\nPlease try again later on or contact us on info@guitarmasterclass.net");
					$('#bookmarks ul').sortable('enable');
				}
			});
			resetEdit();
		}

		if ($this.data('sortable') === undefined)
		{
			$this.data('sortable', 'true');
			
		}
		else
		{
			$this.find('ul').sortable('destroy');
		}
		
		$('#bookmarks ul').each(function()
		{
			$(this).addClass('linking').sortable({  
				axis: 'y',
				connectWith: ['#bookmarks ul ul:not(.linking)'],
				stop: handleResorting,
				items: '> *:not(".folder, .edit-control")',
				tolerance: 'intersect'
			}).removeClass('linking');
		});
		
		$this.data('editmode', true).each(function(){
			var $addFolder = $('<li />').addClass('add-folder edit-control').text('Add folder').hover(function()
			{
				$(this).parent().addClass('parent');
			},
			function()
			{
				$(this).parent().removeClass('parent');
			});

			$(this).find('ul').prepend($addFolder);
			
			var $deleteButton = $('<img />').attr('src', '/bookmarks/img/delete.png').addClass('delete edit-control').click(function(event)
			{
				var $parent = $(this).parent();
				
				if (confirm('Do you really want to remove "'+$parent.text()+'"?'))
				{
					var thisId = $parent.attr('id');
					var error = false;
					if (thisId)
					{
						$.ajax(
						{
							data: {
								'action': 'delete',
								'id': thisId
							},
							success: function(text)
							{
								if ($.trim(text) == 'true')
								{
									$parent.animate({"opacity":0,"height":0},200,function()
									{
										$(this).remove();
									});
								}
								else
								{
									error = true;
								}
							},
							error: function()
							{
								error = true;
							}
						});
					}
					else
					{
						error = true;
					}
					if (error)
					{
						alert("An error has occured, we could not delete this bookmark.\n\n\nPlease try again later on or contact us on info@guitarmasterclass.net");
					}
				}
			});
			var $renameButton = $('<img />').attr('src', '/bookmarks/img/rename.png').addClass('rename edit-control').click(function(event)
			{
				function reset()
				{
					$nameHolder.parent().find(':input').remove();
					$editButton.data('editing','');
					$nameHolder.removeClass('hide');
				}

				if (!$(this).data('editing'))
				{
					var $editButton = $(this);
					$editButton.data('editing','true');
					$nameHolder = $(this).parent().find('.folderName:first');
					$nameHolder.addClass('hide');

					var $input = $('<input type="text">').val($nameHolder.text()).bind('blur', function(event){
						$nameHolder.parent().find(':input').remove();
						$editButton.data('editing','');
						$nameHolder.removeClass('hide');
					}).bind('change', function(event)
					{
						var newName = $(this).val();
						if (confirm('Are you sure you want to change the name of "'+$nameHolder.text()+'" to "'+newName+'"?'))
						{
							$.ajax(
							{
								data: {
									'action': 'renameCategory',
									'newName': newName,
									'id': $nameHolder.parent().attr('id')
								},
								success: function()
								{
									$nameHolder.parent().find(':input').remove();
									$editButton.data('editing','');
									$nameHolder.removeClass('hide');
									$nameHolder.text(newName);
								},
								error: function()
								{
									alert("An error has occured, we could not change the name of this folder.\n\n\nPlease try again later on or contact us on info@guitarmasterclass.net");
								}
							});
						}
						else
						{
							reset();
						}
					}).bind('keyup', function(event)
					{
						if (event.keyCode === 27)
						{
							reset();
						}
						if (event.keyCode === 13 && $.browser.msie)
						{
							$(this).change();
						}
					});

					$(this).after($input);
					$input.select();
					if ($.browser.msie)
					{
						$input.select();
					}
				}
				
			});

			$(this).find('li:not(.folder, .edit-control, .dropzone)').prepend($deleteButton);
			$('.folder').prepend($renameButton);
			$(this).find('li:not(".folder, .edit-control")');
		});
		$('.folder:not("#folder-0")').each(function(index)
		{
			var $deleteFolderButton = $('<img />').attr('src', '/bookmarks/img/delete.png').addClass('delete-folder edit-control').click(function(event)
			{
				var $parent = $(this).parent();
				var bookmarksToBeRemoved = [];
				var bookmarksToBeRemovedString = '';
				$('li:not(".edit-control, .dropzone, .folder")', $parent).each(function(index)
				{
					bookmarksToBeRemoved.push($(this).text());
				});

				if (bookmarksToBeRemoved.length)
				{
					bookmarksToBeRemovedString = "\n\nThe bookmarks that will be removed are:\n\t"+bookmarksToBeRemoved.join("\n\t");
				}

				if (confirm('Do you really want to remove "'+$parent.find('.folderName:first').text()+'"?'+"\n\nRemoving the folder will delete ALL the bookmarks inside it."+bookmarksToBeRemovedString))
				{
					var thisId = $parent.attr('id');
					var error = false;
					if (thisId)
					{
						$.ajax(
						{
							data: {
								'action': 'deleteFolder',
								'id': thisId.replace(/folder-/gi,'')
							},
							success: function(text)
							{
								if ($.trim(text) == 'true')
								{
									$parent.fadeOut(function()
									{
										$(this).remove();
									});
								}
								else
								{
									error = true;
								}
							},
							error: function()
							{
								error = true;
							}
						});
					}
					else
					{
						error = true;
					}
					if (error)
					{
						alert("An error has occured, we could not delete this folder.\n\n\nPlease try again later on or contact us on info@guitarmasterclass.net");
					}
				}
			});
			$(this).prepend($deleteFolderButton);
		});
		$('.add-folder').addFolder();	
	}
	if ($('.folderName:first').text() == 'Bookmarks') {
		$('.add-folder:first, .rename:first').remove();
	}
	return this;
};
jQuery.fn.removeEditControls = function()
{
	$('.editMode').removeClass('editMode');
	$('a').unbind('click', refuseClick);
	$('.edit-control').remove();
	$('#bookmarks').data('editmode','').data('sortable','').find('ul').sortable('disable');

	return this;
};
jQuery.fn.addFeatures = function()
{
	$(this).click(function(event)
	{
		if (event.target.tagName === 'SPAN' && !$('#bookmarks').data('editmode'))
		{
			$this = $(event.target).parent();
			if ($this.hasClass('collapsed'))
			{
				$this.removeClass('collapsed');
			}
			else
			{
				$this.addClass('collapsed');
			}
			setBookmarkCookie();
		}
	});

	return this;
};
jQuery.fn.addFolder = function()
{
	return this.each(function(){
		$(this).click(function(event)
		{
			var folderName;
			folderName = prompt('What should the new folder be called?', '');
			if (folderName)
			{
				$parent = $(this).parent().parent();
				/* console.log($parent.get(0)); */
				parentId = $parent.attr('id');
				var folderCount = $('#'+$parent.attr('id')+' > .folder').length;
				var newId = '#'+parentId+'-'+folderCount;
				$.ajax(
				{
					data: {
						'action': 'addFolder',
						'parentId': parentId.replace(/folder-/gi,''),
						'name': folderName
					},
					success: function(newId)
					{
						if (!isNaN(newId))
						{
							var $newBookmark = $('<li />').attr('id', 'folder-'+newId).html($('<span />').addClass('folderName').text(folderName)).addClass('folder').append($('<ul />').attr('id', newId).prepend($('<li />').addClass('dropzone')));
							$parent.find('ul:first').append($newBookmark);
						}
						else
						{
							alert("An error has occured, we could not add your new folder.\n\n\nPlease try again later on or contact us on info@guitarmasterclass.net");
						}
						resetEdit();
					},
					error: function()
					{
						alert("An error has occured, we could not add your new folder.\n\n\nPlease try again later on or contact us on info@guitarmasterclass.net");
					}
				});
			}
			else
			{
				alert('The folder needs to be named.');
			}
		});
	});
};
jQuery.extend(jQuery.expr[':'], {
	containsIgnoreCase: "(a.textContent||a.innerText||jQuery(a).text()||'').toLowerCase().indexOf((m[3]||'').toLowerCase())>=0"
});

jQuery.fn.listFilter = function()
{
	return this.each(function(){
		var $this =  $(this);
		$(this).rememberHint().one('click', function(event)
		{
			$(this).val('');
		}).bind('keyup', function(event)
		{
			$('#bookmarks ul ul li').each(function(index)
			{
				if ($(this).is(':containsIgnoreCase("'+$this.val()+'")'))
				{
					$(this).filter(':not(".dropzone")').show();
				}
				else
				{
					$(this).hide();
				}
			});
		});
	});
};
function setBookmarkCookie()
{
	var collapsedCategories = [];
	$('.collapsed').each(function(index)
	{
		collapsedCategories.push($(this).attr('id'));
	});
	$.cookie('bookmarks', collapsedCategories.join('#'), {path: '/'});
}
function gmcBookmarks()
{
	$.ajaxSetup({
		url:'/bookmarks/index.php',
		type:'post',
		dataType: 'html'
	});

	$('#edit').toggle(function()
	{
		$(this).text('Finished editing');
		$('#bookmarks').addEditControls().find('ul').sortable();
	},
	function()
	{
		$(this).text('Edit').removeEditControls();
	});
	$('#bookmarks').addFeatures();
	$('#filter').listFilter();

	$('#clearFilter').click(function(event)
	{
		$('#filter').val('').trigger('keyup').trigger('blur');
	});

	if ($.cookie('bookmarks'))
	{
		var collapsedFolders = $.cookie('bookmarks').split('#');
		$(collapsedFolders).each(function(index)
		{
			$('#'+this).addClass('collapsed');
		});
	}
}

$(function()
{

	if (window.location.hash === "#farmdebug")
	{
		var ajaxCount = 1;
		$('<div />').attr('id', 'debugwindow').css({
			position: 'absolute',
			top: '10px',
			left: '10px',
			width: '200px',
			height: '400px',
			overflow: 'hidden'
		}).appendTo('body');
		
		$('#debugwindow').ajaxSend(function(evt, request, settings){
			$(this).prepend('<hr><li style="color: #fff">#'+ajaxCount+' Starting request at ' + settings.url +' - '+ new Date() +"</li>");
			ajaxCount++;
		}).ajaxSuccess(function(request, settings){
			$(this).prepend('<hr><li style="color: #ddd"><strog>Request Complete. - '+ new Date()+ '</strog></li>');
		}).ajaxError(function(request, settings){
			$(this).prepend('<hr><li style="color: #ddd">Request Error - '+ new Date()+ '</li>');
		});
	}

	function submitQuickSearch()
	{
		var postData = {
			'echo': true,
			'formSearch': $('#formSearchField').val()
		};

		if (window.location.hash === "#debug")
		{
			postData.debug = true;
		}

		$('#search_results').html('<div style="width:100px;margin-top:20px;margin-left:60px;" class="red9"><img src="/img/searching_twirl.gif" alt="Searching..."/></div>');

		var $this = $(this);
		if (ajaxCall)
		{
			ajaxCall.abort();
		}
		ajaxCall = $.ajax(
		{
			url: '/managerpublic/quicksearchdelegate.php',
			type: 'post',
			dataType: 'html',
			data: postData,
			success: function(html)
			{
				$('#search_results').html(html);
				
				$('#didYouMeanLink').click(function(){
					
					var suggestion = $('#didYouMeanLink').html();
					$("#formSearchField").val(suggestion);
					submitQuickSearch();
					
				})
				
			},
			error: function()
			{
				//called when there is an error
			}
		});
		return false;
	}
	
	var ajaxCall;
	$('.searchbtn:not("#advanced_search")').attr('onclick','').click(submitQuickSearch);
	$('#searchForm').attr('onsubmit','').submit(submitQuickSearch);
	
	$('.searchbtn:not("#quick_search")').attr('onclick','').click(function(){
		window.location = "/search_results.php?formSearch=" + $("#formSearchField").val();
	});
});
