$(document).ready(function(){		
	
	// never cache ajax get requests
	$.ajaxSetup({
		cache: false
	});

				   
	// make module id available to page
	//uid = $('#unitid').text();
	smpath = '/sitemanager/';
	winContentObj = $("#window_content");
	
	//add link
	$('.lmAddLink').live('click',function(){
		var headingid = $(this).attr("rel");		
		var linkListObj = $("#linkList"+headingid);
		linkListObj.append($('#lmAddForm'+headingid).html());
		reRankLinks(linkListObj);
		
		// set temp ids 
		var newlinkObj = linkListObj.find(".lmEditForm:last");
		var tempid = new Date().getTime();
		newlinkObj.find(".linkbrowse").attr("rel","link"+tempid);
		newlinkObj.find("input[name=url]").attr("id","link"+tempid);
		newlinkObj.find(".savelm").attr("id","savelm"+tempid);
		});
	
	//delete link
	$('.delLink').live('click',function(){
		if(window.confirm("Are you sure you want to delete this link?")){
			var classlen = 'delLink'.length;
			var id = this.id.substr(classlen);
			// remove row from table
			$.post(smpath+"ajax/mod_nav/process.cfm",{action:"delete",id:id});
			// remove row from page
			$(this).closest(".lmRow").remove();
			
			//message, refresh mod
			messageDialog("Link deleted.");
			reloadModule(uid);
			}
		return false;
		});
	
	// edit heading form
	$('.navHeadingEdit').live('click',function(){
		//alert( smpath+'ajax/mod_nav/editHeading.cfm'+$(this).attr("href").split('?')[1]);
		winContentObj.load(smpath+'ajax/mod_nav/editHeading.cfm?'+$(this).attr("href").split('?')[1]);		
		return false;
		});
	
	//edit heading form submit
	$('#saveHeading').live('click',function(){
		var formObj = $('#navHeadingForm');
		$.post(formObj.attr("action"),formObj.serialize(),function(data){
			//message, refresh mod, reload edit screen
			reloadModule(uid);
			messageDialog(data);
			viewEditLinks(winContentObj,uid);
			});		
		});
	
	// show/hide link heading
	$('#linkheading').live('click',function(){
		var linkurl = $('#linkURLBox');
		if($(this).attr('checked')){
			linkurl.show();
			}
		else{
			linkurl.hide();
			}
		});
	
	// delete heading
	$('.navHeadingDelete').live('click',function(){
		if(confirm("Are you sure you want to delete this heading and all its links?")){
			$.post(smpath+"ajax/mod_nav/deleteHeading.cfm?"+$(this).attr("href").split('?')[1],"",function(){
				messageDialog("Heading and links deleted.");
				reloadModule(uid);
				viewEditLinks(winContentObj,uid);																		
				});			
			}
		return false;
		});
	
	// heading settings
	$('#saveNavProperties').live('click',function(){
		var formObj = $('#navProperties');
		$.post(formObj.attr("action"),formObj.serialize(),function(){
			messageDialog("Navigation settings updated.");
			reloadModule(uid);
			viewEditLinks(winContentObj,uid);
			});
		});
	
	// cancel changes, return to heading screen
	$('.cancelChanges').live('click',function(){
		viewEditLinks(winContentObj,uid);
		});
	});

// re-numbers links after a sort
reRankLinks = function(container){
	var rank = 0;
	container.children('.lmEditForm:visible').each(function(i){		
		formObj = $(this);
		//re-rank in case items are added or reordered in form
		rank=i+1;		
		formObj.find("input[name='rank']").val(rank);
		});	
	}

// opens heading/links page, initializes page functionality in callback
viewEditLinks = function(container,id){
	// module cross id - available on entire page
	uid = id;
	
	container.load(smpath+'ajax/mod_nav/view.cfm?unitid='+uid,function(){
		styleTabs();
		
		// start heading sortables
		$('#headList').sortable({
			axis:'y',
			handle:'.navHeadReorder',
			start: function(event,ui){},
			update: function(event, ui) {		
				//re-rank
				var rank = 0;
				var list = "";
				$('.navLinksHeadingBox').each(function(i){
					var headid = $(this).attr("rel");
					//re-rank in case items are added or reordered in form
					rank=i+1;
					
					if (rank==1)
						list = headid;
					else
						list = list+","+headid;
					});
				
				//send heading list to processing page
				$.post(smpath+"ajax/mod_nav/rankHeadings.cfm",{rank:list});
				messageDialog("Headings reordered.");
				}
			
			});
		
		// start heading hover event
		$(".navHeadReorder").hover(
			function(){
				$(this).css("cursor","pointer");
				$(this).parent().css("border-color","#999999");
				},
			function(){
				$(this).parent().css("border-color","#dedede");
				});
		
		// start link sortables
		$('.linkList').sortable({
			axis:'y',
			handle:'.lmCol1',
			start: function(event,ui){
				},
			update: function(event, ui) {
				//re-rank
				var rank = 0;
				$(this).children('.lmEditForm:visible').each(function(i){
					var formObj = $(this);
					//re-rank in case items are added or reordered in form
					rank=i+1;
					
					formObj.find("input[name='rank']").val(rank);
					//send form scope to processing page
					$.post(formObj.attr("action"),formObj.serialize());
					});
				messageDialog("Links reordered.");
				}
			
			});
		
		// start link hover event
		$(".lmCol1:not('.lmHeader')").hover(					
			function(){
				$(this).css("cursor","pointer");
				$(this).parent(".lmRow").css("background-color","#e9e9e9");
				},
			function(){
				$(this).parent(".lmRow").css("background-color","#ffffff");
				}
			);
		
		// show save when linkbrowser opens
		$('.linkbrowse').live('mouseup',function(){
			var saveBtn = $(this).parents(".lmRow").find(".savelm");
			//console.log(saveBtn);  This caused me great pain!  DON'T LEAVE CONSOLE.LOGs in your code!!!
			saveBtn.show();
			return false;
			});
		
		// listen for changes to input buttons
		$('.lmCol input').live("keyup",function(){
			var saveBtn = $(this).parents(".lmRow").find(".savelm");
			saveBtn.show();
			});
		
		// submit link form
		$('.savelm').live('click',function(){
			var formObj = $(this).closest("form");
			var urlObj = formObj.find("input[name=url]");
			var titleObj = formObj.find("input[name=title]");
			
			if (titleObj.val() == ''){
				alert("Title is required.");
				titleObj.focus();
				return false;
				}
				
			if (urlObj.val()==''){
				alert("URL is required.");
				urlObj.focus();
				return false;
				}
			
			if (checkURLs(urlObj)){
				$.post(formObj.attr("action"),formObj.serialize(),function(){
					//message, refresh mod, reload edit screen
					messageDialog("Link updated.");
					reloadModule(uid,startNavVerticalFlyouts);
					viewEditLinks(winContentObj,uid);							
					});
				}
			return false;
			});
		
		// check urls
		$(".lmEditForm input[name='url']").blur(function(){
			checkURLs($(this));
			return false;
			});
			
		}); // finish callback
	}

// determines valid link
checkURLs = function(formfieldObj){
	var val = formfieldObj.val().toLowerCase();
	
	if( val.substr(0,7) == "http://" || 
		val.substr(0,8) == "https://" || 
		val.substr(0,1) == "/" || 
		val.substr(0,1) == "#" ||
		val==""){
		return true;
		}
	else{
		alert("Invalid link.");
		formfieldObj.focus();
		return false;
		}
	}


//public stuff
$(document).ready(function(){	
	
	var accordion = $('.navAccordion'),
		verticalFlyouts = $(".navVerticalFlyouts");

	if ( typeof verticalFlyouts === 'object' && verticalFlyouts.length ) {

		startNavVerticalFlyouts(verticalFlyouts);

	}

	// check to see if accordion exists of page
	if ( typeof accordion === 'object' && accordion.length ) {

		accordion
			.find('.headBox')
			.live('click', function() {
				var el = $(this);		
				toggleAccordion(el);				
				setLastOpened(el.attr('id'));		
			});

		accordion
			.find('.navLinkActive')
			.each(function() { 
				var el = $(this);	
				toggleAccordion(el.parent('ul').prev());
				setLastOpened(el.parent('ul').prev().attr('id'));
			});

	}

});


//accordion toggle
toggleAccordion = function(headEl) {

	subEl = headEl.next('.navLinks');
	
	// if heading has sub elements
	if( subEl.length ) {
		
		headEl.parents('.navAccordion').find('.navLinks').not(subEl).slideUp().prev().removeClass('headBoxActive');
		$(subEl).slideDown();
		subEl.prev().addClass('headBoxActive');
		
		return false;
	}
	
	return true;	
	
};	

//accordion lastopened
setLastOpened = function(id) {
	$.ajax({
		type: "POST",
		url: "/sitemanager/ajax/mod_nav/sessionsetter.cfm",
		data: "lastid="+id
	});
};

// position dropdown menus, apply styles
positionHorizontalPulldowns = function(){
		var navHPOffset = navHorizontalPulldownsObj.offset();
		var navHPOffsetTop = ( navHPOffset != null ? navHPOffset.top : 0 ) + navHorizontalPulldownsObj.height(); // fixes a error in IE
		
		$(".navHorizontalPulldowns .navHead").each(function(){
			var curHeadObj = $(this);
			var offset = curHeadObj.offset();
			
			curHeadObj.children(".navLinks")
				.css("left",offset.left-1)
				.css("top",offset.top+$(this).height())
				.css("position","absolute");
			});
		};

	
startNavVerticalFlyouts = function(navVerticalFlyoutsObj){
		/* NAVVERTICALFLYOUTS-related */
		//navVerticalFlyoutsObj = $(".navVerticalFlyouts");
		
		// position flyout menus, apply styles
		
		$(".navVerticalFlyouts .navHead").each(function(){
			var curHeadObj = $(this);
			var offset = curHeadObj.offset();
			curHeadObj.children(".navLinks").css("left",offset.left+navVerticalFlyoutsObj.width()).css("top",offset.top-1);
			});
		
		$(".navVerticalFlyouts .navHead").live("mouseover",
			function(){
				hoverObj = $(this)
				linkBoxObj = hoverObj.find(".headBox");
				parentObj = hoverObj.parent();
				
				// set bg color
				linkBoxObj.addClass("navVerticalFlyouts-Hover");
				// hide all dropdown menus
				hoverObj.children(".navLinks").hide();
				// show dropdown menu
				hoverObj.children(".navLinks").show();
				}
			);
		
		$(".navVerticalFlyouts .navHead").live("mouseout",
			function(){
				unHoverObj = $(this);
				unHoverLinkBoxObj = unHoverObj.find(".headBox");
				unHoverLinkBoxObj.removeClass("navVerticalFlyouts-Hover");
				unHoverObj.children(".navLinks").hide();
				}
			
			);
		};

