$( function() {

} );

function addCategory( level )
{
	var edit = false;
	var input_obj = $( '#level' + level + '-add :input[@name=name]' );
	var edit_obj = $( '#level' + level + '-add :input[@name=edit]' );
	
	if( edit_obj.attr('checked') == true )
	{
		edit = true;
	}

	// Create the new category or fail
	 $.post(
		'/action/ajax-category/save',
		{
			name: input_obj.val(),
			parent: $( '#level' + level + '-add :input[@name=parent]' ).val(),
			level: level,
			edit: edit,
			hash: $( '#level' + level + '-add :input[@name=hash]' ).val()
		},
		function(msg)
		{
			if( msg == 'ERROR' )
			{
				if( edit == true )
				{
					alert( 'An error occurred during save process' );
				}
				else
				{
					alert( 'This category already exists!' );
				}
			}
			else
			{
				if( edit == true )
				{
					alert( 'Category name updated to ' + input_obj.val() );
				}
				else
				{
					alert( 'Category ' + input_obj.val() + ' added to level ' + level );
				}
				input_obj.val('');
				loadSubCategories( level-1,false );
			}
		}
	);
};

function deleteCategory( level )
{
	if( confirm('Deleting the category named ' + $( '#level' + level + ' option:selected' ).html() + ' will also delete all subcategories assigned to it. Any articles that are contained within this category or subcategories will become orphans which you can move to a new category at a later time.\n\nAre you sure that you wish to continue?') )
	{
		 $.post(
			'/action/ajax-category/del',
			{
				category: $( '#level' + level + ' option:selected' ).val(),
				level: level
			},
			function(msg)
			{
				if( msg == 'YES' )
				{
					alert( $( '#level' + level + ' option:selected' ).html() + ' has been deleted' );
					window.location.reload( true );
				}
				else
				{
					alert(msg);
				}
			}
		);
	}
	else
	{
		alert( 'No changes made' );
		return false;
	}		
}

function loadSubCategories( level, hash ) {
	loadCategoryArticles( level, hash );

	//Return if lvl 3
	if( level != 3 )
	{
		$( '#main .col:eq(' + level + ')' ).load( 
			'/action/ajax-category/load',
			{
				category: hash ? hash : $( '#level' + level ).val(),
				level: level
			}		
		);
	}
	if( level <= 1 )
	{
		$( '#level3' ).html('');
		$( '#level3-add :input[@name=name]' ).attr({ readonly: 'readonly' });
		$( '#level3-add :input[@type=submit]' ).attr({ disabled: 'disabled' });
	}
	if( level == 0 )
	{
		$( '#level2' ).html('');
		$( '#level2-add :input[@name=name]' ).attr({ readonly: 'readonly' });
		$( '#level2-add :input[@type=submit]' ).attr({ disabled: 'disabled' });
	}

	//Insert name in to input for editing
	if( level > 0 )
	{
		if( $( '#level' + level + ' option:selected' ).html() != null )
		{
			var toinput = $( '#level' + level + ' option:selected' );

			//Text
			var toinput_text = toinput.html();
			toinput_text = toinput_text.replace( /&amp;/g, '&' );
			$( '#level' + level + '-add :input[@name=name]' ).val( toinput_text );
			//Hash
			$( '#level' + level + '-add :input[@name=hash]' ).val( toinput.val() );
			//Edit - on
			$( '#level' + level + '-add :input[@name=edit]' ).attr('checked','checked');
			$( '#level' + level + '-add :input[@name=edit]' ).removeAttr("disabled");
			$( '#level' + level + '-add :input[@name=delete]' ).removeAttr("disabled");
		}
	}
};

function loadCategoryArticles( level, hash )
{
	$( '#ajax-article' ).load( 
		'/action/ajax-article',
		{
			category: hash ? hash : $( '#level' + level ).val()
		}
	);
};

/** Inline table editor functions and stuffs **/
function NewRow( page, extra )
{
	// Generate a new hash for use
	$.post( "/action/ajax-" + page + "/hash",{},
		function(msg)
		{
			$( '#table-' + page + ' tbody' ).prepend('<tr id="' + page + extra + '-' + msg + '">\n' + $( '#' + page + '-hash' ).html().replace( /hash/g, msg ) + '</tr>') ;
		}
	);
}

/** Inline table editor functions and stuffs **/
function ajaxTableEdit( hash, name, type )
{
	$( '#' + name + '-' + hash )
		.find('span').hide().end()
		.find( type ).show().each( function() { this.focus() } );
}

function ajaxTableSave( page, hash, name, type )
{
	//Process replacement text for spans
	switch( type )
	{
		case 'input':
			var input = $( '#' + name + '-' + hash + ' :input[@name=' + name + ']');
			var span = $( '#' + name + '-' + hash + ' span');
		break;
		case 'select':
			var input = $( '#' + name + '-' + hash + ' select option:selected' );
			var span = $( '#' + name + '-' + hash + ' span');
		break;
	}
	
	//Error check blank
	if( !input.val() )
	{
		alert( 'Cannot submit empty value!' );
		input.focus();
		return;
	}

	//Ignore same
	if( input.val() != span.html() )
	{
		$.post(
			"/action/ajax-" + page + "/save",
			{
				hash:	hash,
				field:	name,
				value:	input.val()
			},
			function(msg)
			{
				//Fail?
				if(msg == 'ERROR')
				{
					alert("Save failed!");
				}
				else
				//Success - Change span text
				{
					span.html( input.val() );
				}
			}
		);
	}

	//Swap hide/show
	$( '#' + name + '-' + hash )
		.find( type ).hide().end()
		.find('span').show();
	return true;
}

function DeleteRow( page, hash )
{
	if( confirm('Are you sure you want to delete this record?') )
	{
		$.post(
			"/action/ajax-" + page + "/del",
			{
				hash:	hash
			},
			function(msg)
			{
				//Fail?
				if(msg == 'ERROR')
				{
					alert("Delete failed!");
				}
				else
				//Success - Delete row from table
				{
					window.location.reload( true );
				}
			}
		);
	}
	else
	{
		alert('No Changes Made');
	}
}

/** User specific function **/
function ChangePassword( hash )
{
	var pass1 = prompt('Please type the new password', '');

	if( pass1 == null || pass1 == '' )
	{
		return alert("No Changes made!");
	}

	var pass2 = prompt('Please confirm the new password', '');

	if( pass1 != pass2 )
	{
		return alert('Passwords did not match! No changes made.');
	}
	else
	{
		$.post(
			"/action/ajax-user/save",
			{
				hash:	hash,
				field:	'password',
				value:	pass1
			},
			function(msg)
			{
				//Fail?
				if(msg == 'ERROR')
				{
					alert("Save failed!");
				}
				else
				//Success - Change span text
				{
					alert('Password changed sucessfully');
				}
			}
		);
	}
}

function checkEnter(e, page, hash, name, type)
{
	if ( ( window.event && window.event.keyCode == 13 ) || ( e && e.keyCode == 13 ) )
	{
		ajaxTableSave( page, hash, name, type );
	}
	else
	{
		return true;
	}
}

/** Show Articles by domain **/
function GetArticles( hash )
{
	$( '#articles-container' ).load( 
		'/action/ajax-article',
		{
			domain: hash
		},
		function()
		{
			$('#article-display').show();
			$('#main .ajax-edit').hide();
		}
	);
}

function CloseArticles()
{
	$('#article-display').hide();
	$('#main .ajax-edit').show();
}

/** Generic Hiding or showing **/
function HideShow( elementbyid )
{
	var thiselement = $( elementbyid );
	//Already shown?
	if( thiselement.css('display') != 'none' )
	{
		$( elementbyid ).hide();
	}
	else
	{
		$( elementbyid ).show();
	}
}

/** Check an article exists - create new **/
function CheckExists()
{
	$( '#same-name-article' ).load( 
		'/action/ajax-article/checkexists',
		{
			name: $('#main :input[@name=title]').val()
		},
		function(msg)
		{
			if( msg )
			{
				$('#same-name-article').show();
			}
			else
			{
				$('#same-name-article').hide();
			}
		}
	);
}

