function OpenPostGroupCommentForm(event, idParentComment, xOffset, yOffset)
{
	CloseSharePresentationForm();
	
    GetElement("id_parent_comment").value = (idParentComment ? idParentComment : "");
    
    var x = GetMouseOnEventXPosition(event);
    var y = GetMouseOnEventYPosition(event); 
    
    xOffset = (xOffset ? xOffset : -30);
    yOffset = (yOffset ? yOffset : 10);
    
    var postCommentForm = GetElement("postGroupCommentForm");
    postCommentForm.style.top  = (y + yOffset) + "px";
    postCommentForm.style.left = (x + xOffset) + "px";
    
    SetVisibility(postCommentForm, true);
}

function ClosePostGroupCommentForm()
{
    SetVisibility("postGroupCommentForm", false);
}

function ShowError(message)
{
	SetVisibility("shareResourceError", true);
	GetElement("shareResourceErrorMessage").innerHTML = message;
}

function HideError()
{
	SetVisibility("shareResourceError", false);
	GetElement("shareResourceErrorMessage").innerHTML = "";
}

function HideFeedback()
{
	SetVisibility("postCommentFeedback", false);
	SetVisibility("shareResourceFeedback", false);
}

function ShowPostCommentFeedback()
{
	SetVisibility("postCommentFeedback", true);
	SetVisibility("shareResourceFeedback", false);
}
function ShowShareResourceFeedback()
{
	SetVisibility("postCommentFeedback", false);
	SetVisibility("shareResourceFeedback", true);
}

function PostGroupComment()
{
	HideError();
	HideFeedback();
    var comment = Trim(GetElementValue("group_comment"));
    if (!comment)
    {
        alert("Please enter a comment.");
        return;
    }
    
    GetElement("comment_text").value = comment;
    GetElement("action").value = "post_comment";
    
    GetElement("page").value = "1";
    
    SetVisibility("postCommentIndicator", true);
    DisableButton("postCommentButton");
    ajaxpage(document.location.href, OnPostGroupCommentHandler, $("#frmComments").serialize());
}

function OnPostGroupCommentHandler(response)
{
	SetVisibility("postCommentIndicator", false);
	EnableButton("postCommentButton");
	GetElement("group_comment").value = "";
	
	var responseObject = GetObjectFromQuery(response);
	if (responseObject)
	{
		if (responseObject.show_feedback)
		{
			HideError();
			ShowPostCommentFeedback();
		}
		
		if (responseObject.redirect_url)
		{
			GotoUrl(responseObject.redirect_url);
		}
		
		if (responseObject.refresh_page)
		{
			GetElement("action").value = "";
			SubmitForm("frmComments");
		}
	}
	
	ClosePostGroupCommentForm();
}

function LeaveCurrentGroup()
{
    if (confirm("Are you sure want to leave this group?"))
    {
        GetElement("action").value = "leave_group";
        SubmitForm("frmComments");  
    }
}

function OpenSharePresentationForm(event, xOffset, yOffset)
{
	ClosePostGroupCommentForm();
	
    var x = ( event ) ? GetMouseOnEventXPosition(event) : parseInt(GetParamValue( "x" ));
    var y = ( event ) ? GetMouseOnEventYPosition(event) : parseInt(GetParamValue( "y" ));
    
    $( "#sharePresentationForm" ).data( "mouseX", x ).data( "mouseY", y );
    
    xOffset = (xOffset ? xOffset : -30);
    yOffset = (yOffset ? yOffset : 10);
    
    var x1 = x + xOffset;
    var y1 = y + yOffset;
    var shareForm = GetElement("sharePresentationForm");
    shareForm.style.top  = (y + yOffset) + "px";
    shareForm.style.left = (x + xOffset) + "px";
    DisableButton("shareAnotherPresentationButton");
    EnableButton("sharePresentationButton");
    EnableButton("shareMorePresentationButton");
    
    SetVisibility(shareForm, true);
}

function CloseSharePresentationForm()
{
    SetVisibility("sharePresentationForm", false);
}

function ShareMorePresentation()
{
    $( "#sharePresentationForm" ).data( "shareMore", true );
    SharePresentation();
}

function SharePresentation()
{
    var siteRoot = $("#site_root").val();
	HideError();
	HideFeedback();
	
    var resourceUrl = Trim(GetElementValue("presentation_url"));
    
    if (!resourceUrl)
    {
        alert("Please enter resource url!");
        return; 
    }
    
    var urlFormats = 
    [
        "^" + siteRoot + "/([0-9]+)/?$",
        "^" + siteRoot + "/presentations/([0-9]+)/?.*?$",
    ];
    
    var idResource = 0;
    for (var i in urlFormats)
    {
        var re = new RegExp(urlFormats[i]);
        var matches;
        if (matches = resourceUrl.match(re))
        {
            idResource = parseInt(matches[1]);
            if (idResource > 0)
                break;
        }
    }
    
    if (!(idResource > 0))
    {
        alert("Wrong resource url!");
        return;
    }
    
    var message = GetElementValue("message");
    
    GetElement("action").value       = "share_presentation";
    GetElement("comment_text").value = message;
    GetElement("id_resource").value  = idResource;
    GetElement("page").value = 1;
    
    SetVisibility("sharePresentationIndicator", true);
    DisableButton("sharePresentationButton");
    DisableButton("shareMorePresentationButton");
    ajaxpage(document.location.href, OnShareResourceHandler, $("#frmComments").serialize());
}

function OnShareResourceHandler(response)
{
	SetVisibility("sharePresentationIndicator", false);
	EnableButton("sharePresentationButton");
	EnableButton("shareMorePresentationButton");
	GetElement("presentation_url").value = "";
	GetElement("message").value = "";
	
	var responseObject = GetObjectFromQuery(response);
	if (responseObject)
	{
		if (responseObject.show_feedback)
		{
			HideError();
			ShowShareResourceFeedback();
		}
		else if (responseObject.show_error)
		{
			ShowError(responseObject.error_message);
		}
		
		if (responseObject.redirect_url)
		{
			GotoUrl(PrepareSharePresentationRedirectURL(responseObject.redirect_url));
		}
	}
	
	CloseSharePresentationForm();
}

function PrepareSharePresentationRedirectURL( url )
{
    var preparedURL = url;
    var sharePresentationForm = $( "#sharePresentationForm" );
    if ( ( sharePresentationForm.data( "shareMore" ) == true ) 
        && sharePresentationForm.data( "mouseX" ) && sharePresentationForm.data( "mouseY" ) )
    {
        if ( preparedURL.indexOf( "?" ) == -1 )
            preparedURL += "?";
        else
            preparedURL += "&";
        preparedURL += "x=" + sharePresentationForm.data( "mouseX" ) 
                    + "&y=" + sharePresentationForm.data( "mouseY" );
    }
    
    return preparedURL;
}

function OnChangeGroupPresentationRows()
{
    document.frmComments.page.value = 1;

    var page = document.frmComments.page.value;
    var rows = document.frmComments.rows.value;

    var parameters = ["page", "rows"];
    var values = [page, rows];
    var uriParams = UriSerialize(parameters, values);
    
    window.location.href = "?" + uriParams;
}

function DeleteGroupPost(idPost)
{
    GetElement("id_post").value = idPost;
    GetElement("action").value = "remove_post";
    
    GetElement("page").value = "1"; 
    SubmitForm("frmComments");
}

/**
 * Decodes string from get method.
 */
function DecodeStringFromGet( string )
{
    decodedString = string.replace( /\+/g, " " );
    
    return decodedString;
}

/**
 * Returns parameter value by its name.
 */
function GetParamValue( paramName )
{ 
    var loc = location.search.substring( 1, location.search.length );
    var param_value = false;
    
    var params = loc.split("&");
    for ( i=0; i < params.length; i++ )
    {
        param_name = params[i].substring(0,params[i].indexOf('='));
        if (param_name == paramName)
        {
            param_value = params[i].substring(params[i].indexOf('=')+1)
        }
    }    
    if ( param_value )
    {
        return DecodeStringFromGet( param_value );
    }
    else
    {
        return false;
    }
}

$(function(){

    var counterLabel = $("#counter_label").val();
    var commentCharLimit = parseInt($("#comment_char_limit").val());

    if ( ( GetParamValue( "x" ) !== false ) && ( GetParamValue( "y" ) !== false ) )
    {
        OpenSharePresentationForm();
        //$( "#sharePresentationForm" ).css( "display", "block !important" );
    }

    $("#group_comment").setLimit(commentCharLimit).setCounter(counterLabel);
    $("#message").setLimit(commentCharLimit).setCounter(counterLabel);
});
