(function($) {

	$.adTree = {
		defaults : {
			slideSpeed	: 300,
			clicked			: '',
			formType		:	'edit'
		}
	};
	
	
	/* extend jquery with the plugin */
	$.fn.extend({
		adTree:function(config) {
			var obj = $(this);
			
			/* use defaults or properties supplied by user */
			var config = $.extend($.adTree.defaults, config);

			$.adTree.init();
			obj.find('span').live('click',function(){
				console.log($.adTree.defaults.type);
				var clicked = $(this);
				$.adTree.clicked = clicked;
				if($.adTree.defaults.type == 'siteBuilder') {
					$.adTree.defaults.formType = 'edit';
					$.adTree.actions(clicked);
				} else if($.adTree.defaults.type == 'linkEditor') {
					if(clicked.attr('title') != '') {
						var name = clicked.attr('title')
						$('#href').val(name);
					}
				} else  {
					if(clicked.closest('.adSystemLinkEditorArea') && clicked.attr('title') != '') {
						var name = clicked.attr('title')
						$('.adLinkFinal').val(name);
						$('.adCurrentIntLink span').empty().append(name);
					}
				}
				$.adTree.loadData(clicked);
			});
			obj.find('a').live('click',function(){
				var clicked = $(this);
				$.adTree.slide(clicked);
			});
			
			/* return the jquery object for chaining */
			return this;
		}
	});
	
	
	/* control functions */
	$.adTree.init = function() {
		$('.adFormTree').live('submit',function(e){
			e.preventDefault();
			var clicked = $.adTree.clicked
					parent = clicked.parent();

			if(clicked.hasClass('adTreeItemPageHolder')) $.adTree.defaults.formType = 'add';

			updatePageOptions = {
				url: '?adJax=updatePage',
				type: 'submit',
				dataType: 'json',
				success: function(responseText, statusText, xhr, $form){
					$.adTree.debug(responseText);
					if(responseText.Name != name) clicked.text(responseText.Name);
					if(responseText.Enabled == 1) {
						if(parent.hasClass('adTreePageDisabled')) parent.removeClass('adTreePageDisabled');	
					} else {
						if(!parent.hasClass('adTreePageDisabled')) parent.addClass('adTreePageDisabled');	
					}
				}
			}
			addPageOptions = {
				url: '?adJax=addPage',
				type: 'submit',
				dataType: 'json',
				success: function(responseText, statusText, xhr, $form){
					$.adTree.debug(responseText);
					if(responseText.top) {
						var parent = $('#adTreeItemHolder'+responseText.parent);
					} else {
						var parent = $('#adTreeItem'+responseText.parent);
					}
					$.ajax({
						url: '?adJax=treeItem',
						type: 'GET',
						data: responseText,
						success: function(d){
							if(parent.hasClass('adTreeParent')) {
								// already has children	
								parent.children('ul').append(d);
								if(!parent.hasClass('adTreeOpen')) $.adTree.slide(parent.children('a'));
							} else {
								// doesnt have children						
								parent.append('<ul>'+d+'</ul>');
								parent.addClass('adTreeParent');
								$.adTree.slide(parent.children('a'));
							}
							$('.adSiteContentAdd .adInput').each(function(){ $(this).val(''); });
						},
						dataType: 'html'	
					});
				}
			}
			if($.adTree.defaults.formType == 'add') {
				options = addPageOptions;	
			} else {
				options = updatePageOptions;	
			}
			$(this).ajaxSubmit(options);
		});
		
		$('.adSiteEdit').live('click',function(){
			if($('.adSiteContentEdit').hasClass('adHide')) {
				$('.adSiteContentEdit').fadeIn(300).removeClass('adHide');	
				$('.adSiteContentAdd').fadeOut(300).addClass('adHide');
				$.adTree.defaults.formType = 'edit';
			}
		});
		$('.adSiteAdd').live('click',function(){
			if($('.adSiteContentAdd').hasClass('adHide')) {
				$('.adSiteContentAdd').fadeIn(300).removeClass('adHide');	
				$('.adSiteContentEdit').fadeOut(300).addClass('adHide');
				$.adTree.defaults.formType = 'add';
			}
		});
		$('.adSiteDelete').live('click',function(){
			if(confirm('Are you sure you wish to delete this page?')){
				var guid = $(this).attr('id').replace('page','');
				$.ajax({
					type: 'GET',
					url: '?adJax=deletePage',
					data: '&guid='+guid,
					success: function(data){ 
						var node = $('#adTreeItem'+guid),
								ul = node.parent(),
								parentLi = ul.parent(),
								parentSpan = parentLi.children('span'),
								siblings = node.siblings();
								
						node.fadeOut(300,function(){
							$(this).remove();
							if(siblings.size() < 1) {
								parentLi.removeClass('adTreeParent').removeClass('adTreeOpen');	
								ul.remove();
							}
							parentLi.addClass('adTreeOn');
							$.adTree.actions(parentSpan);
						});
					},
					dataType: 'html'
				});
			}
		});
		
	}
	
	$.adTree.actions = function(clicked) {
		var data = { id: clicked.attr('id').replace('adTreeItemSpan','') };
		clicked.hasClass('adTreeItemPageHolder') ? data.type = 'holder' : data.type = 'page';
		clicked.hasClass('adTreeItemPageTop') ? data.level = 'top' : data.level = 'sub';
		var name = clicked.text(), 
				parent = clicked.parent();
		
		$.ajax({
			url: '?adJax=siteBuilderItem',
			type: 'GET',
			data: data,
			success: function(response){
				$('.adTreeContent').empty().append(response);
			},
			dataType: 'html'	
		});
		
	}
	
	$.adTree.slide = function(clicked){
		if(clicked.siblings('ul').css('display') == 'none') {
			clicked.parent().addClass('adTreeOpen');
			clicked.siblings('ul').slideDown($.adTree.defaults.slideSpeed);
		} else {
			clicked.siblings('ul').slideUp($.adTree.defaults.slideSpeed,function(){
				$(this).parent('li').removeClass('adTreeOpen');
			});
		}
		$.adTree.debug(clicked);
		$.adTree.debug('-----');
	}
	
	$.adTree.loadData = function(clicked) {
		$('.adTree .adTreeOn').each(function(){ $(this).removeClass('adTreeOn'); });
		clicked.parent().addClass('adTreeOn');
	}
		
	$.adTree.debug = function(data){
		if(window.console) {
			//console.log(data);
		} else {
			 //alert(data);
		}	
	}
	/* end control functions */
	
	
})(jQuery);
