$(document).ready(function(){

   // Initialise BudoKin Functions
	initTopMenu()
	initTabMenus()
	initHelpTips()
	initRoundCorners()
	initZebraLists()
	
}); 

/* ***************************************
	TOP MENU
*************************************** */	
function initTopMenu() {	
	$("#menu li").hover(
       function(){ 
			$("ul", this).css("left","auto");	  
		 }, 
       function() { 
			$("ul", this).css("left","-999em");	
		 } 
	);
}	

/* ***************************************
	ROUND CORNERS
*************************************** */	
function initRoundCorners() {
	if ($.browser.msie) {		
		$(".round").corner("8px");
		$(".contentBox").corner("8px");
		$(".sidebarBox").corner("8px");
		$(".main .ui-tabs-panel").corner("tr round 25px");
		$(".main .ui-tabs-nav li").corner("top 8px");
		$(".mini .ui-tabs-nav li").corner("top 8px");
		$("#group_tabs li a").corner("top 5px");
		$("form.blue fieldset").corner("8px");		
		//$("#main #register_form").corner("8px");
	}
	//$('[cnr]').each(function() {				
		//	var dimensions = $(this).attr("cnr");
		//	$(this).corner(dimensions);		
	//});		
}	

/* ***************************************
	ZEBRA LISTS
*************************************** */	
function initZebraLists() {	 
		 
	//$('#friends .search_listing:even').addClass('alt');
	$('.zebra .search_listing:even').addClass('alt');
	$('ul.zebra li:even').addClass('alt');
	//$('#groups .topic_post').addClass('alt');
	//$('#comments .generic_comment:even').addClass('alt');
}

/* ***************************************
	MODAL BOXES
*************************************** */
function modal(klass,url,title,width,height) {

	$(".ui-dialog").remove();			
	$.ajax({
		url: url,
		success: function(data){
				$("body").append('<div id="modal">' + data + '</div>');	
				$("#modal").dialog({ 
				    modal: 			true,  
				    width: 			width || 400, 
				    height: 		height || 450, 
				    draggable:		false, 
				    resizable: 	false, 
					 stack: 			false,
				    title: 			title, 
					 dialogClass: 	klass || 'modal',
					 autoResize: 	false,
				    overlay: { 
				        opacity:		0.5, 
				   	  background: 	"silver"	
				    },
					 isOpen: 		$("#modal").show()
				});	
		}
	});
	return false;	
}

/* ***************************************
	HELP TIPS
*************************************** */	
function initHelpTips() {
	$(".helptip").each(function() {
			
      var cookieName = this.id;
		var cookieValue = $.cookie(cookieName);		
		
		if (cookieValue != 'closed') {		
			$(this).show();
		} 	
		
		$(this).find(".remove").click(function() { // set cookie by number of days
      	$.cookie(cookieName, 'closed', { path: '/', expires: 9999 });
			$(this).parent().slideUp('slow');
      	return false;
      });
		
		$(this).find(".check").click(function() { 
			alert($.cookie(cookieName));
      	return false;
      });
	});	
}	
	
/* ***************************************
	TABS
*************************************** */	
function initTabMenus() {

	var pageHasTabs = false;
		
	var $tabs = $('.tabs > ul').tabs({	
	   show: function(event, ui) {			 			
		 	bindInnerLinks()
		   bindPagination()
			initZebraLists()	
   		setup_avatar_menu()				
			if ($(this).parent().hasClass('main')) {		  
				pageHasTabs = true;
			} 					
	   },
		add: function(event, ui) {			
        	$tabs.tabs('select', '#' + ui.panel.id);
    	}

	});
			
	// Initialise Sidemenu integration with Tabs
	$("#submenu a.tab").click(function () {	
		
		$(this).parent().parent().find('li').removeClass();
		$(this).parent().addClass('selected');		
			
		if (pageHasTabs == true) {		
			var tabid = parseInt(this.rel);
			$tabs.tabs('select',tabid);
			return false;	
		} else {	
			return true;		
		}		
			
	});		
			
	// Initialise Sidemenu integration for Inline Content
	$("#submenu a.inline").click(function () {	
		
		$(this).parent().parent().find('li').removeClass();
		$(this).parent().addClass('selected');		
		
		$("#inline_content").remove();		
		$("#page_title").after('<div id="inline_content"><a class="remove">x</a><div class="content"></div></div>');				
		$("#inline_content .content").load(this.href);		
		
		$("#inline_content .remove").click(function () {	
			$("#inline_content").remove();	
		});	
			
	   return false;
	});	
		
	// Inline form submitting
   $(".tab_output_form").submit(function() {
	
		var url;		
		var action = this.action;		
		var params;		
		var targetTab;		
		var tabCount = $('.tabs > ul > li').length;
			
		// Serialize url string
		$('input', this).each(function() {					
			if (this.value.length > 0) {
				params = params + "&" + this.name + "=" + this.value.replace(" ","+");		
				if (this.name == "tabid") {
					tabId = this.value;		
				}			
			}
		});				
		url = action + "?" + params;		
			
		// Load search results
      $tabs.tabs('select', parseInt(tabId));
		$(".ui-tabs-panel").load(url, function(){
			$(this).removeClass('ajax_loader');
 		});
		
      return false;
   });

	
	
}
	
	
function bindInnerLinks() {
	$('.tabs_inner_controls a').click(function() {		
		
		//Menu interaction			
		$(this).parent().parent().find('li').removeClass('selected');
		$(this).parent('li').addClass('selected');
		
		// Display the loading animation
		$(".search_results").html('').addClass('ajax_loader');
		
		// Load search results dynamically
		$(".ui-tabs-panel").load(this.href, {limit: 10}, function(){
			$(this).removeClass('ajax_loader');
		   bindInnerLinks()
			bindPagination()
 		});
		
	   return false;
	});
}

/*
function bindExternalForms($tabs) {
		//tabs.tabs('select',2);
    $(".tab_output_form").ajaxForm({ 
        //target:        '.search_results',
		  tabs:				$tabs,
        beforeSubmit:  	externalFormRequest,
        success:       	externalFormResponse 
    }); 
}

function externalFormRequest(data, form, options) { 
	 //$(searchFilterOptions['target']).html('').addClass("ajax_loader");
	 //searchFilterOptions['tabs'].tabs('select',2);
		//tabs.tabs('select',2);
		$(".search_results").html('').addClass('ajax_loader');
    return true; 
} 

// Post submit callback
function externalFormResponse(response, status, searchFilterOptions) { 
	 //$('.search_results').removeClass("ajax_loader");
	 
	 alert(response);
	 
	$(".ui-tabs-panel").html(response);
 	//});
		
			//$tabs.tabs('select',2);
	 //alert(response);
} 
*/

function bindPagination() {
	$('.tabs .pagination a').click(function() {		
		
		$(".search_results").html('').addClass('ajax_loader');
		
		var url = this.href;
		var query = url.replace(/^[^\?]+\??/,'');
		var params = getUrlParams(query);		
		var limit = params['limit'] || 10;
		
		// Load search results dynamically
		$(".ui-tabs-panel").load(this.href, {limit: limit}, function(){
			$(this).removeClass('ajax_loader');
		   bindInnerLinks()
			bindPagination()
   		setup_avatar_menu()
 		});
		
	   return false;
	});
}

/* ***************************************
	SEARCH FILTER FORM
*************************************** */	
function bindSearchFilterForm(data, form, searchFilterOptions) { 

    $(".search_filter_form").ajaxForm({ 
        target:        '.search_results',
        beforeSubmit:  searchFilterFormRequest,
        success:       searchFilterFormResponse 
    }); 
	 
 	 $(".search_filter_form input").blur(function() { 
			$(this).parents("form").submit();
	 });  
 	 $(".search_filter_form select").change(function() { 
			$(this).parents("form").submit();
	 }); 
	 
}	 

// Pre submit callback
function searchFilterFormRequest(data, form, searchFilterOptions) { 

    //var queryString = $.param(data); 
    //alert('About to submit: \n\n' + queryString); 

	 $(searchFilterOptions['target']).html('').addClass("ajax_loader");
    return true; 
} 

// Post submit callback
function searchFilterFormResponse(response, status, searchFilterOptions) { 
	 $('.search_results').removeClass("ajax_loader");
} 

/* ***************************************
	WIDGET CONTENT TOGGLE
*************************************** 
$(document).ready(function(){

	$('a.toggle_box_contents').unbind();
	$('a.toggle_box_contents').bind('click', toggleWidget);
	
}); 

function widget_state(forWidget) {

	var thisWidgetState = $.cookie(forWidget);

	if (thisWidgetState == 'collapsed') {
	
		forWidget = "#" + forWidget;
		
		$(forWidget).find("div.collapsable_box_content").hide();
		$(forWidget).find("a.toggle_box_contents").addClass('collapsed');
		$(forWidget).find("a.toggle_box_edit_panel").fadeOut('medium');
	};	
}

var toggleWidget = function(e) {
	var targetContent = $('div.collapsable_box_content', this.parentNode.parentNode);
		if (targetContent.css('display') == 'none') {
			targetContent.slideDown(400);
			$(this.parentNode.parentNode).addClass('expanded');
			$(this.parentNode).children("[class=toggle_box_edit_panel]").fadeIn('medium');
			
			// set cookie for widget panel open-state
			var thisWidgetName = $(this.parentNode.parentNode.parentNode).attr('id');
			$.cookie(thisWidgetName, 'expanded', { expires: 365 });
			
			
		} else {
			targetContent.slideUp(400);
			$(this.parentNode.parentNode).removeClass('expanded');
			$(this.parentNode.parentNode).addClass('collapsed');
			$(this.parentNode).children("[class=toggle_box_edit_panel]").fadeOut('medium');
			// make sure edit pane is closed
			$(this.parentNode.parentNode).children("[class=collapsable_box_editpanel]").hide();
			
			// set cookie for widget panel closed-state
			var thisWidgetName = $(this.parentNode.parentNode.parentNode).attr('id');
			$.cookie(thisWidgetName, 'collapsed', { expires: 365 });			
		}
	return false;
};
*/	

/* ***************************************
	PERSISTENT REQUESTS
*************************************** */	
var lastRequestUrl = null;
var lastRequestParams = null;
var lastRequestAttempts = 0;	
	
function doRequest(url, params) {

  	lastRequestUrl = url;
  	lastRequestParams = params;
  	lastRequestAttempts += 1;
  
	$.post(url, params, function(data){
     	fetchResponse(data);
   });
}

function fetchResponse(data) {	
	if (!data) {
    	// Retry failed requests up to 5 times
    	if (lastRequestAttempts < 5) {
      	setTimeout(function() {
        		doRequest(lastRequestUrl, lastRequestParams);
      	}, 200);
    	}
    	else {
      	// Maximum retries exceeded - bail out
      	// Display an error or maintenance message here
			alert('Sever unavailable, program terminated');
    	}
    	return;
  	}
  	// Reset # of request attempts after a successful request
  	lastRequestAttempts = 0;

	// TODO: Return data to client in a useful way. callback?
	return data;
}


/* ***************************************
	MISC FUNCTIONS
*************************************** */	
function getUrlParams(query) {
   var Params = {};
   if (!query) {return Params;}// return empty object
   var Pairs = query.split(/[;&]/);
   for (var i = 0; i < Pairs.length; i++ ) {
      var KeyVal = Pairs[i].split('=');
      if (!KeyVal || KeyVal.length != 2) {continue;}
      var key = unescape(KeyVal[0]);
      var val = unescape(KeyVal[1]);
      val = val.replace(/\+/g, ' ');
      Params[key] = val;
   }
   return Params;
}

function textCounter(field,cntfield,maxlimit) {
    // if too long...trim it!
    if (field.value.length > maxlimit) {
        field.value = field.value.substring(0, maxlimit);
    } else {
        // otherwise, update 'characters left' counter
        cntfield.value = maxlimit - field.value.length;
    }
}

