/**
TODO: Add comments explaining options
*/

// global variable included by jsInc macro
// JS_LINK_ERROR
var JS_LINK_ERROR  = "Se ha producido un error, intente mas tarde.";

/* submit comentarios */
jQuery.fn.fAjaxSubmit = function(event, options) {
    event.preventDefault();
    
    return this.each(function() {
        jQuery.extend(options, {
            complete: function() { 
                jQuery.fAjaxUtilSubmit.indicateAjaxComplete(options, this.target);
            },
            error:    function() {
                jQuery.fAjaxUtil.displayError(JS_LINK_ERROR, options.errorContainer);
            },
            success:  function(responseText) { 
                jQuery.fAjaxUtil.handleSuccessResponse(responseText, options, null, options.onComplete); 
            }
        });
        
        jQuery(this).ajaxSubmit(options);
        
        jQuery.fAjaxUtilSubmit.indicateAjax(options, this.target);
        
    });
       
};
/* Link borrar comentarios */
jQuery.fAjaxLink = function(event, options) {
    event.preventDefault();
    toggleLink();

    linkUrl = $j(event.target).attr("href");

    jQuery.extend(options, {
        type: "GET",
		url: linkUrl,
	    success: function(responseText) 
		{ 
		    jQuery.fAjaxUtil.handleSuccessResponse(responseText, options, toggleLink, options.onComplete); 
	    },
	    error: function() 
	    {
	        toggleLink();
	        jQuery.fAjaxUtil.displayError(JS_LINK_ERROR, options.errorContainer) 
	    }
    });
    
    function toggleLink()
    {
        if (options.indicator.css("display") == "none")
        {
		    options.indicator.css("display", "inline");
		    $j(event.target).hide();
        }
        else
        {
	        options.indicator.css("display", "none");
	        $j(event.target).show();
        }
    }
    
    jQuery.ajax(options);
    
};


jQuery.fAjaxUtilSubmit = {
    indicateAjax: function(options, formElmt)
	{
	    options.indicator.css("visibility", "visible");
	    $j(formElmt).find("input|textarea").each(function() {
	        $j(this).attr("disabled", true);
	    });
	},
	
    indicateAjaxComplete: function(options, formElmt)
	{
        options.indicator.css("visibility", "hidden");
        $j(formElmt).find("input|textarea").each(function() {
            $j(this).attr("disabled", false);
	    });
	}
}

jQuery.fAjaxUtil = {
	makeErrorMsg: function(msg) 
	{
	    return '<div class="ajaxError"><div class="outer"><a href="" class="close">x</a></div><div class="inner">' + msg + '</div></div>';
	},
	
	closeErrorMsg: function(event, errorContainer)
	{
	    event.preventDefault();
	    errorContainer.hide()
	},
	
	isErrorResponse: function(res)
	{
	    return res.indexOf("<!--/error/-->") >= 0;
	},
	
	displayError: function(msg, errorContainer)
	{
	    errorContainer.html(jQuery.fAjaxUtil.makeErrorMsg(msg));
	    
	    jQuery("a.close", errorContainer).click(function(event) { 
	        jQuery.fAjaxUtil.closeErrorMsg(event, errorContainer); 
        });
	    errorContainer.show();
	},
	
	handleSuccessResponse: function(responseText, options, errorCallback, successCallback)
	{
	if (jQuery.fAjaxUtil.isErrorResponse(responseText))
		{
            if (errorCallback) errorCallback();
            jQuery.fAjaxUtil.displayError(responseText, options.errorContainer);
	} else {
            options.update.html(responseText);
	    if (successCallback) { successCallback(); }
	}
	}
}


