var acount = 0;
var aqid = 0;
var asummary = "";
var asource = "";

function register_events () {
    $$('a.pick-suggestion').each(function(item) {
            alert(item);
            item.onclick = "pick_suggestion()";
            });
}

function pick_suggestion (text) {
    $('answer-box').setValue(text);
    $('answer-box').focus();
    return false;
}

function pickSuggestionsTag (name) {
    $$('.suggestions-nav-tab').invoke('removeClassName', 'current');
    $$('.suggestions-tab').invoke('removeClassName', 'current');

    $('suggestions-nav-' + name).addClassName('current');
    $('suggestions-' + name).addClassName('current');
}

function checkAnswer (alertUser) {
    var answer = $('answer-box').getValue();
    $('answer-size').innerHTML = 255 - answer.length;

    if (answer.length > 255) {
        $('answer-size').addClassName("negative");
        $('answer-submit').addClassName("disabled");

        if (alertUser) {
            alert("This answer is too long! \n\nAnswer cannot be longer than 255 characters");
        }
        return false;
    } else {
        $('answer-size').removeClassName("negative");
        $('answer-submit').removeClassName("disabled");
    }

    return true;
}

function fetchZookResults (node, url) {
    node.innerHTML = '(Fetching, please wait&hellip;)';
    new Ajax.Request(url, {
        onSuccess: function(transport) {
            node.innerHTML = '<pre>' + transport.responseText + '</pre>';
        },
        onFailure: function(transport) {
            node.innerHTML = '(Failed to fetch content, please check back after some time.)';
        }
    });
}

function webSearchResultsCallback (z) {
    var tab = $('suggestions-nav-websearch');
    var template = $('websearch-result-template');

    if (!z || !z.ysearchresponse || z.ysearchresponse.totalhits == 0) {
        return;
    }

    tab.innerHTML += ' (' + addCommas(z.ysearchresponse.totalhits) + ')';
    tab.show();

    var results = z.ysearchresponse.resultset_web;
    for(var i = 0; i < results.length; i++) {
        url = results[i].url;
        title = results[i].title;
        summary = results[i].abstract;

        title = '<a href="' + url + '" target="_blank">' + title + '</a>';

        var result = template.cloneNode(true);
        result.select('.title')[0].update(title);
        result.select('.summary')[0].update(summary);

        template.insert({ before : result.show() });
    }
}

function buddhiResultsCallback (results) {
    var tab = $('suggestions-nav-buddhi');
    var template = $('buddhi-result-template');

    if (!results || results.length == 0) {
        return;
    }

    tab.innerHTML += ' (' + results.length + ')';
    tab.show();

    for(var i = 0; i < results.length; i++) {
        url = results[i].url;
        title = results[i].title;
        snippets = results[i].snippets;
        summary = '';
        for (var j = 0; j < snippets.length; j++) {
            summary += '<p>' + encodeHTML(snippets[j]) + '</p><br/>';
        }

        title = '<a href="' + url + '" target="_blank">' + title + '</a>';

        var result = template.cloneNode(true);
        result.select('.title')[0].update(title);
        result.select('.summary')[0].update(summary);

        template.insert({ before : result.show() });
    }
}

document.observe("dom:loaded", function() {
        });

function encodeHTML(text) {
    if(text && text.length > 0)
    {
        text = text.replace(/&/, "&amp;");
        text = text.replace(/</, "&lt;");
        text = text.replace(/>/, "&gt;");
    }
    return text;
}

function addCommas(nStr)
{
    nStr += '';
    x = nStr.split('.');
    x1 = x[0];
    x2 = x.length > 1 ? '.' + x[1] : '';
    var rgx = /(\d+)(\d{3})/;
    while (rgx.test(x1)) {
        x1 = x1.replace(rgx, '$1' + ',' + '$2');
    }
    return x1 + x2;
}
function defaultreFormat()
{
    var answer = $('answer-box').getValue();
    answer = answer.replace(/\u2013/g,'-');
    answer = answer.replace(/\u2014/g,'-');
    answer = answer.replace(/\u2022/g,'');
    $('answer-box').setValue(answer);
    return true;
}
function refineAnswer() {
    var answer = $('answer-box').getValue();
    if(answer != null && answer.length > 0)
    {
        //removes the trailing and begining spaces.
        answer = answer.replace(/^\s+|\s+$/,"");
        //replace more that one space with one space.
        answer = answer.replace(/[\r\t ]+/g," ");
        //replace all non ASCII characters
        answer = answer.replace(/[^\u0000-\u007F]/g,"");
        $('answer-box').setValue(answer);
        checkAnswer(false);
    }    
    return true;
}

function bolcb (z) {

    var tab = $('suggestions-nav-buddhi');
    var template = $('buddhi-result-template');
    var loaderimg = $('loaderimg');

    if (!z || !z.results || z.results.length == 0) {
        loaderimg.innerHTML = "No results found";
        return;
    }

    tab.innerHTML += ' (' + addCommas(z.results.length) + ')';
    tab.show();

    var results = z.results;
    for(var i = 0; i < results.length; i++) {
        url = results[i].snippets[0].url;
        name = results[i].snippets[0].query;
        summary = results[i].snippets[0].abstract;
        ttle = results[i].title;
        title = '<a href="' + url + '" target="_blank">' + ttle + '</a>';
        var result = template.cloneNode(true);
        result.select('.title')[0].update(title);
        summary = removeHTMLTags(summary);
        summary = summary.replace(/\s+/g,' ');
        summary = summary.replace(/\'/g,'\\\'');
        picaction = "<a href=\"#\" onclick=\"addWebSnippet('"+summary+"','"+url+"');\">Pick</a>";
        result.select('.summary')[0].update(summary);
        result.select('.action')[0].update(picaction);
        template.insert({ before : result.show() });
        template.show();
        //remove the ajax-imgloader image
        $('loaderimg').style.display = "none";
    }
}

function count_submitted_answer(count,qid,source)
{
    asource = source;
    acount = count;
    aqid = qid;
    new Ajax.PeriodicalUpdater('cnt-return','answers/cntanswer', {
          method: 'POST',parameters: {question_id: qid},
          frequency: 5, decay: 0, onSuccess: sec1 }); 
}

function sec1(res)
{
    var c = res.responseText;
    c = c.replace(/^\s+|\s+$/g,'');
    var diff = c-acount;
    if(acount != c)
    {
        get_new_answers();
        if(diff > 1) {
            $('ans-count').innerHTML="<b>"+diff+" new answers.</b>";
        } else if(diff == 1) {
            $('ans-count').innerHTML="<b>1 new answer.</b>";
        }
            $('display-count').style.display="block";
    } else {
        $('display-count').style.display="none";
    }
    
}

function get_new_answers()
{
    new Ajax.Updater('suggestions-submitted','answers/submittedanswer', {
          method: 'POST',parameters: {question_id: aqid},
          }); 
}

function addWebSnippet(summary,url)
{
   asummary = summary;
   url_encode = encodeURIComponent(url);
   /*Check the source and if source is sms then dont call url shortner.*/
   if(asource && asource.replace(/^\s+|\s+$/g,'').toLowerCase() != "sms")
   {
   jsonurl = 'http://durl.me/api/Create.do?type=json&callback=shorturlcb&longurl='+url_encode;
   dyn_script(jsonurl);
   } else {
   pick_suggestion(asummary);
   checkAnswer(false);
   asummary = '';
   }


}
function shorturlcb(cbobj)
{
  var status = cbobj.status;
  status = status.replace(/^\s+|\s$/,'');
  var shorturl = "";
  if(status && status.toLowerCase() == "ok")
  {
        shorturl = cbobj.shortUrl;
        shorturl = shorturl.replace(/^\s+|\s+$/,'');
        asummary = asummary + "\n\nFrom: "+shorturl;
  }
  pick_suggestion(asummary);
  checkAnswer(false);
  asummary = '';
}

function dyn_script(url){
     var script=document.createElement('script'); // pretty self explanatory
     script.src=url; // sets the scripts source to the specified url
     script.type="text/javascript";
     document.getElementsByTagName('head')[0].appendChild(script); // appends the tag to the head
}

/*Created by: Robert Nyman | http://robertnyman.com/ 
modified it to accept input and return the output.
*/
function removeHTMLTags(text){
    var strInputCode = text;
    /*This line is optional, it replaces escaped brackets with real ones, 
      i.e. < is replaced with < and > is replaced with > */ 
     strInputCode = strInputCode.replace(/&(lt|gt);/g,function (strMatch, p1){return (p1 == "lt")? "<" : ">";});
     var strTagStrippedText = strInputCode.replace(/<\/?[^>]+(>|$)/g, "");
     return  strTagStrippedText;
}   
