﻿$(document).ready(function()
{

    //bkLib.onDomLoaded(nicEditors.allTextAreas);
    new nicEditor().panelInstance('ctl00_ContentPlaceHolder1_AnswerBox');
    
    $(".AnswerUpVote").click(UpAnswerVoteClick);
    $(".AnswerDownVote").click(DownAnswerVoteClick);
    $(".QuestionUpVote").click(UpQuestionVoteClick);
    $(".QuestionDownVote").click(DownQuestionVoteClick);
    
    $("#IsOffensiveLink").click(MarkQuestionOffensive);
    $(".OffensiveAnswer").click(MarkAnswerOffensive);

    $(".EditQuestionLink").click(EditQuestionClick);
    
    
    GetHiddenBoxValues();

});

function UpAnswerVoteClick(evt)
{
	
	HandleAnswerVote(evt, "up")
}

function DownAnswerVoteClick(evt)
{
	HandleAnswerVote(evt, "down");
}

function HandleAnswerVote(evt, direction)
{
    var answerId = 0;
    if (evt.originalTarget)
    {
        answerId = $(evt.originalTarget).attr("answerid");
    }
    else if (evt.srcElement)
    {
        answerId = $(evt.srcElement).attr("answerid");
    }
    else if (evt.currentTarget)
    {
        answerId = $(evt.currentTarget).attr("answerid");
    }
    
    HandleVote(direction, answerId, evt);
}

function UpQuestionVoteClick(evt)
{	
	HandleVote("up", "0" ,evt);
}

function DownQuestionVoteClick(evt)
{
	HandleVote("down", "0",evt);
}

var questionId = "";
var userId = "";

function HandleVote(direction, aId, evt) {

    var answerId = "0";
    if (aId) answerId = aId;
    
    if (userId == "") {
        ShowAlertMessage(evt, "Please Login or Register to Vote.");
        return;
    }
    $.ajax(
	{
	    type: "Post",
	    url: "../../SBTForums.ashx",
	    complete: function(request, status) { VoteComplete(request, status, evt, direction); },
	    data:
		{
		    uid: userId,
		    vote: direction,
		    qid: questionId,
		    qcid: answerId
		}
	});
}

function EditQuestionClick(evt)
{
    alert("edit question clicked");
}

function MarkAnswerOffensive(evt)
{
    var answerId = $(evt.originalTarget).attr("olanswerTextId");
    if (answerId == null) return;
    if (userId == "")
    {
        ShowAlertMessage(evt, "Please Login or Register to mark Offensive.");
        return;
    }

    $.ajax(
	{
	    type: "Post",
	    url: "../../SBTForums.ashx",
	    complete: function(request, status) { MarkOffensiveComplete(request, status, evt); },
	    data:
		{
		    offensivea: "1",
		    uid: userId,
		    qcid: answerId
		}
	});
}

function MarkQuestionOffensive(evt) {
    if (userId == "") {
        ShowAlertMessage(evt, "Please Login or Register to mark Offensive.");
        return;
    }
    
    $.ajax(
	{
	    type: "Post",
	    url: "../../SBTForums.ashx",
	    complete: function(request, status) { MarkOffensiveComplete(request, status, evt); },
	    data:
		{
		    offensiveq: "1",
		    uid: userId,
		    qid: questionId
		}
	});

}

function VoteComplete(request, status, evt, direction) {
    switch (request.responseText) {
        case "USERNOTAUTHENTICATED":
            ShowAlertMessage(evt, "Please Login or Register to vote.");
            break;
        case "XSSATTACK":
            ShowAlertMessage(evt, "Security Check Failed. Please log out and log back in.");
            break;
        case "NOID":
            ShowAlertMessage(evt, "An Error Occurred. Please Refresh this Page.");
            break;
        case "NOTENOUGHREPUTATIONUP":
            ShowAlertMessage(evt, "Need Reputation of at least 15 to Vote Up");
            break;
        case "NOTENOUGHREPUTATIONDOWN":
            ShowAlertMessage(evt, "Need Reputation of at least 100 to Vote Down");
            break;
        case "SUCCESS":
            ShowSuccesfulVoteResults(evt, direction);
            break;
        case "SUCCESSNOCHANGE":
            ShowAlertMessage(evt, "You already voted for this.");
            break;
        case "FAILURE":
        default:
            ShowAlertMessage(evt, "An error occurred while voting. <br />Sorry for the inconvenience. This has been logged.");
            break;
    }
}

function ShowSuccesfulVoteResults(evt, direction)
{
    var answerId = $(evt.originalTarget).attr("answerid");
    var addVal = -1;
    if (direction == "up") addVal = 1;

    if (answerId == null) //is a vote
    {
        var curNum = $(".VoteCountItem").text();
        var newNum = parseInt(curNum) + addVal;
        $(".VoteCountItem").text(newNum);

    }
    else
    {
        var curNum = $("span[answerTextId='" + answerId + "']").text();
        var newNum = parseInt(curNum) + addVal;
        $("span[answerTextId='" + answerId + "']").text(newNum);
        
    }
}

function MarkOffensiveComplete(request, status, evt) {
    switch (request.responseText) {
        case "SUCCESS":
            ShowAlertMessage(evt, "Offensive Flag Recorded.");
            break;
        case "XSSATTACK":
            ShowAlertMessage(evt,"Security Check Failed. Please log out and log back in.");
            break;
        case "NOTENOUGHREPUTATION":
            ShowAlertMessage(evt, "Need Reputation of at least 15 to Mark Offensive");
            break;
        case "USERNOTAUTHENTICATED":
            ShowAlertMessage(evt, "Please Login or Register to mark Offensive.");
            break;
        case "NOID":
            ShowAlertMessage(evt, "An Error Occurred. Please Refresh this Page.");
            break;
        default:
            break;
    }
    //alert(request + "\n" + status);
}

function ShowAlertMessage(evt, msg) {
    $("#AlertMessageTextDiv").html(msg);
    $("#AlertMessageDiv").css("top", evt.pageY + "px");
    $("#AlertMessageDiv").css("left", evt.pageX + "px");
    $("#AlertMessageDiv").fadeIn("fast");
    $("#AlertMessageDiv").click(function() { $("#AlertMessageDiv").fadeOut("fast"); });
}

function GetHiddenBoxValues() {
    //Get settings from hidden fields
    $("input:hidden").each(function(i, item) {
        var itemId = $(item).attr("id");
        if (itemId.search(/QuestionIdHidden/) > -1) {
            questionId = $(item).val();
        }

        if (itemId.search(/UserIdHidden/) > -1) {
            userId = $(item).val();
        }
    });
}



