function ajaxAccordionContentLoader(event, ui, url, callback_fn) {
	if (!$('.content_tab-'+ui.index).hasClass('content-loaded') && !$('.content_tab-'+ui.index).hasClass('content-loading')) {
        $('.content_tab-'+ui.index).parent().prev().find('.plugin-loading').show();
        $.manageAjax.add('defaultQueue', {
            success: function(html) {
				$('.content_tab-'+ui.index).addClass('content-loading');
				$('.content_tab-'+ui.index).addClass('content-loaded').html(html);
				$('.content_tab-'+ui.index).removeClass('content-loading');
				$('.content_tab-'+ui.index).parent().prev().find('.plugin-loading').hide();
                if (callback_fn) {
                    callback_fn();
                }
				expandText(ui.panel);
            },
            url: url,
            cacheResponse: false
        });
        return true;
    } else {
        return false;
   }
};

function ajaxAccordionSlideshowLoader(event, ui, url) {
    ui.panel.id=ui.index;
	if (!$('.content_tab-'+ui.index).hasClass('content-loaded') && !$('.content_tab-'+ui.index).hasClass('content-loading')) {
        $('.content_tab-'+ui.index).parent().prev().find('.plugin-loading').show();
	    $.manageAjax.add('defaultQueue', {
	        success: function(html) {
				$('.content_tab-'+ui.index).addClass('content-loading');
				$('.content_tab-'+ui.index).addClass('content-loaded').html(html);
				$('.content_tab-'+ui.index).removeClass('content-loading');
				$('.content_tab-'+ui.index).parent().prev().find('.plugin-loading').hide();
	            var prevButton = '.content_tab-'+ui.index+' .prev-arrow';
	            var nextButton = '.content_tab-'+ui.index+' .next-arrow';
				$('.content_tab-'+ui.index).html(html).find('.slideshow').serialScroll({
	                items:'li',
	                prev:prevButton,
	                next:nextButton,
                    step:8,
                    exclude: 8
	            });
	        },
	        url: url
	    });
	    return true;
	} else {
		return false;
	}
}

function ajaxTabContentLoader(event, ui, url, callback_fn) {
    if (!$(ui.panel).hasClass('content-loaded') && !$(ui.panel).hasClass('content-loading')) {
    	$(ui.tab.parentNode).append('<span class="loading"></span>').fadeIn('fast');
    	$(ui.panel).addClass('content-loading');
        $.manageAjax.add('defaultQueue', {
            success: function(html) {
                $(ui.panel).removeClass('content-loading').addClass('content-loaded').prepend(html);
                $(ui.tab.parentNode).find('span.loading').fadeOut("slow", function(){$(this).remove();});
                if (callback_fn) {
                    callback_fn();
                }
				expandText(ui.panel);
            },
            url: url,
            cacheResponse: false
        });
        return true;
    } else {
        return false;
    }
};

function ajaxTabSlideshowLoader(event, ui, url) {
    if (!$(ui.panel).hasClass('content-loaded')) {
        $.manageAjax.add('defaultQueue', {
            success: function(html) {
                $(ui.panel).addClass('content-loaded');
                var prevButton = '#'+ui.panel.id+' .prev-arrow';
                var nextButton = '#'+ui.panel.id+' .next-arrow';
                $(ui.panel).append(html).find('.slideshow').serialScroll({
                    items:'li',
	                prev:prevButton,
	                next:nextButton,
                    step:8,
                    cycle:false
                });
            },
            url: url
        });
        return true;
    } else {
        return false;
    }
}

function ajaxTabMapLoader(event, ui, mapSettings) {
    var tab = ui.panel == undefined ? ui : ui.panel;
    if (!$(tab).hasClass('content-loaded')) {
        $(tab).addClass('content-loaded');
        tbMaps.initTBMap(mapSettings);
        return true;
    } else if ($(tab).hasClass('needs-reload')) {
        $(tab).removeClass('needs-reload');
        tbMaps.reloadMap();
    } else {
        return false;
    }
}

$.fn.paginate = function(options) {
    var defaultOptions = {
        data: [],
        onSuccess: null,
        url: null,
        urlFunc: null,
        dataFunc: null,
		scroll: true,
		scrollTo: this,
		itemsPerPage: true
    };
    var settings = $.extend(defaultOptions, options);
	var $container = $(this);
    var $navButtons = $(this).find(".pagination a");
	var container_id = $(this).attr('id');
	if(!settings.itemsPerPage){
		$(".items_per_page", $container).remove();
	}
    $navButtons.live("click", function() {
		if(container_id) {
			$container = $("#"+container_id);
		}
        if (settings.url) {
            var url = urlQueryString(settings.url)+this.href.split('?')[1];
        } else {
            var url = this.href;
        }
        var data = settings.data;
        if (settings.urlFunc) {
            url = settings.urlFunc(url);
        }
        if (settings.dataFunc) {
            data = settings.dataFunc(data);
        }
        $.manageAjax.add('defaultQueue', {
            success: function(response) {
                $container.html(response);
				if (settings.scroll) {
					$.scrollTo(settings.scrollTo, 500);
				}	
                if (settings.onSuccess) {
                    settings.onSuccess(response);
                }
				if(!settings.itemsPerPage){
					$(".items_per_page", $container).remove();
				}
            },
            url: url,
            data: data
        });
        return false;
    });
    return this;
}

$.fn.reloadContentOnSubmit = function(container, params) {
    var successFunc = params.success;
    var $container = $(container);
    $(this).submit(function() {
        $.manageAjax.add('defaultQueue', {
            success: function(response) {
                $container.html(response);
                if (successFunc) {
                    successFunc(response);
                }
            },
            url: $(this).attr('action'),
            type: 'POST',
            data: $(this).serialize()
        });
        return false;
    });
    return this;
}

$.fn.objectSlideList = function() {
    var $itemLinks = $(this).find(".item-list-link");
    var $itemDescriptions = $(this).find(".item-description");
    $itemLinks.click(function() {
        return false;
    }).hover(function() {
        $itemLinks.parent().removeClass("active");
        $itemDescriptions.hide();
        $(this).parent().addClass("active").find(".item-description").show();
    });
    $itemDescriptions.hide();
    $itemLinks.first().trigger("mouseover");
    return this;
}

$.fn.dynamicSelect = function(childInput, baseUrl) {
    var $childInput = $(childInput);
    $(this).change(function() {
        var url = baseUrl+"?id="+$(this).val();
        $.manageAjax.add('defaultQueue', {
            success: function(data) {
                $childInput.find("option").remove();
                var options = '';
                $.each(data, function(idx, el) {
                    options += '<option value="'+el[0]+'">'+el[1]+'</option>'
                });
                $childInput.append(options);
                $childInput.find("option[value='']").attr("selected", "selected");
            },
            url: url
        });
    });
    return this;
}

$.fn.widgetAnchorScroll = function(options) {
    var defaultOptions = {
        offset: {top: -50},
        onBefore: function(event, target) {
            if ($(target).parent().hasClass("plugin")) {
                var targetIdSplitted = target.id.split('-');
                if (targetIdSplitted.length > 1) {
                    var widgetId = targetIdSplitted[targetIdSplitted.length-1];
                    var pluginName = '#'+targetIdSplitted.slice(0, targetIdSplitted.length-1).join('-');
                    $(pluginName).tabs("select", widgetId-1);
                }
            }
        }
    };
    var settings = $.extend(defaultOptions, options);
    $(".nav-menu").localScroll(settings);
    return this;
}

/* 
    Check if content of tinymce field in modal has changed. 
    Should be called in cancelClose in this way:
        if (!warningDialogInProgress) {
            return checkIfContentChanged(dialog);
        }
        return true;
    warningDialogInProgress flag need to be set at the
    beginning and set to false in onClose event.
*/
function checkIfContentChanged(parentDialog) {
    warningDialogInProgress = true;
    var currentContent = $(parentDialog).find("#id_note_container iframe").contents().find("#tinymce").html();
    var startContent = tinyMCE.getInstanceById('id_note').startContent;
    if (startContent != currentContent) {
        $('<div></div>').warningPopup({
            msg: "Content has changed. All changes will be lost.",
            onConfirm: function() {
                $(parentDialog).dialog("close");
            },
            onCancel: function() {
                warningDialogInProgress = false;
            }
        }).trigger("click");
        return false;
    } else {
        return true;
    }
}

$.fn.tooltipValidate = function(options) {
    var defaultOptions = {
        errorElement: "label",
        errorPlacement: function(error, placement) {
            if (placement.is(':visible')) {
                placement.attr('rel', error.text());
                placement.tooltip();
            } else {
				var $ui_tabs = placement.parents(".ui-tabs");
				if($ui_tabs.length){
					$("ul li a", $ui_tabs).each(function(){
						var panel_id = this.href.split("#").pop()
						if(placement.parents("#"+panel_id).length){
							var index = $(this).parents("li:first").index();
							$ui_tabs.tabs('select', index);
						}
					})
				} else {
					console.log("Field '"+placement.get(0).id+"' is hidden. Can't display error. Maybe you are using JS widget?");
				}
            }
        }
    };
    var options = $.extend(defaultOptions, options);
    return $(this).validate(options);
};

function smart_truncate(){
var adjustheight = 80;
// The "more" link text
var moreText = "+  More";
// The "less" link text
var lessText = "- Less";

// Sets the .more-block div to the specified height and hides any content that overflows
$(".more-less .more-block").css('height', adjustheight).css('overflow', 'hidden');

// The section added to the bottom of the "more-less" div
$(".more-less").append('<p class="continued">[&hellip;]</p><a href="#" class="adjust"></a>');

$("a.short-text").text(moreText);

$(".short-text").toggle(function() {
		$(this).parents("div:first").find(".more-block").css('height', 'auto').css('overflow', 'visible');
		// Hide the [...] when expanded
		$(this).parents("div:first").find("p.continued").css('display', 'none');
		$(this).text(lessText);
	}, function() {
		$(this).parents("div:first").find(".more-block").css('height', adjustheight).css('overflow', 'hidden');
		$(this).parents("div:first").find("p.continued").css('display', 'block');
		$(this).text(moreText);
});
}


