﻿//---------------------------- UI Manager -----------------------
onerror = logError;

function logError(msg,url,line)
{
    //new Ajax('/logError.aspx?error=' + escape(msg) + '&line=' + line + '&loc=' + escape(document.location.href) + '&browser=' + browser, {method: 'get'}).request();
	return;
};

function logErrorObject(e)
{
    logError(escape(e.name) + ": " + escape(e.message),null,e.lineNumber);
    
};

window.addEvent('domready', function() {

    
    //do not send signal for other browsers
    if (browser != 'Netscape Navigator') {
        return;
    }
    //send check if extension is installed
    try {
        var element = document.createElement("HasExtensionDataElement");
        document.documentElement.appendChild(element);
  
        var evt = document.createEvent("Events");
        evt.initEvent("HasExtensionSignalEventBeta", true, false);
        element.dispatchEvent(evt);
    }
    catch(e) {
        /* */
    }

});



//------------------------------- CSV Manager ---------------------------

var CSVManager = new Object();
var BackLinks = new Object;
var Anchors = new Object();
var IndexedPages = new Object();


CSVManager.exportPages = function()
{
    CSVManager.exportData("url,linkcount",TopPages.data);
};

CSVManager.comparePR = function(a, b) {
    return b.pagerank - a.pagerank;
};

CSVManager.comparePS = function(a, b) {
    return b.strength - a.strength;
};

CSVManager.comparePC = function(a, b) {
    return b.count - a.count;
};

CSVManager.exportBacklinks = function(elem)
{
    var arr = new Array();
    if(typeof(elem) == 'string') {
        var temp = elem;
        elem = new Array();
        elem[0] = temp;
    }
    else if(elem == true) {
        elem = new Array();
        elem[0] = true;
    }
    
    BackLinks.data.sort(CSVManager.comparePR);
    
    for (i=0;i<BackLinks.data.length;i++) {
        for(j=0;j<elem.length;j++) {
            if(elem[j] == true || in_array(BackLinks.data[i].url, elem[j])) {
                var cur = BackLinks.data[i];
                var temp = new Object();
                temp.URL = cur.url;
                temp.Page_Rank = (cur.pagerank >= 0 ? cur.pagerank : 'N/A');
                temp.Anchor_Text = (cur.anchor == null ? '' : cur.anchor);
                switch(cur.backhistoryshort) {
                    case 1: temp.Link_History = 'New'; break;
                    case 2: temp.Link_History = 'Re-entry'; break;
                    case -1: temp.Link_History = 'Just Dropped'; break;
                    case -2: temp.Link_History = 'Dead'; break;
                    default: temp.Link_History = 'Same'; break;
                }
                switch(cur.linktype) {
                    case 0: temp.Link_Type = 'Missing'; break;
                    case 1: temp.Link_Type = 'Good'; break;
                    case 2: temp.Link_Type = 'Nofollow'; break;
                    case 3: temp.Link_Type = 'Text'; break;
                    case 4: temp.Link_Type = 'RSS Feed'; break;
                    default: temp.Link_Type = 'N/A'; break;
                }
                temp.Outbound_Links = cur.obl;
                temp.Strength = cur.strength;
                temp.Links_To = cur.page;
                arr.push(temp);
            }
        }
    }
    CSVManager.exportData("URL,Page_Rank,Anchor_Text,Link_History,Link_Type,Outbound_Links,Strength,Links_To",arr);
};

CSVManager.exportAnchors = function(elem)
{
    if(typeof(Anchors.data) == 'undefined' || Anchors.data.length < 1) {
        var ff = new Array();
        Anchors.data = new Array();
        for (i=0;i<BackLinks.data.length;i++) {
            if(in_array(BackLinks.data[i].anchor, ff)) {
                var j = ff.indexOf(BackLinks.data[i].anchor);
                Anchors.data[j].count++;
            }
            else {
                var cur = BackLinks.data[i];
                var temp = new Object();
                temp.anchor = cur.anchor;
                temp.count = 1;
                Anchors.data.push(temp);
                ff.push(cur.anchor);
            }
        }
    }
    
    var arr = new Array();
    if(typeof(elem) == 'string') {
        var temp = elem;
        elem = new Array();
        elem[0] = temp;
    }
    else if(elem == true) {
        elem = new Array();
        elem[0] = true;
    }
    
    Anchors.data.sort(CSVManager.comparePC);
    
    for (i=0;i<Anchors.data.length;i++) {
        for(j=0;j<elem.length;j++) {
            if(elem[j] == true || in_array(Anchors.data[i].anchor, elem[j])) {
                var cur = Anchors.data[i];
                var temp = new Object();
                temp.Anchor = cur.anchor;
                temp.Count = cur.count;
                arr.push(temp);
            }
        }
    }
    CSVManager.exportData("Anchor,Count",arr);
};

CSVManager.exportIndexedPages = function(elem)
{
    var arr = new Array();
    if(typeof(elem) == 'string') {
        var temp = elem;
        elem = new Array();
        elem[0] = temp;
    }
    else if(elem == true) {
        elem = new Array();
        elem[0] = true;
    }
    
    IndexedPages.data.sort(CSVManager.comparePS);
    
    for (i=0;i<IndexedPages.data.length;i++) {
        for(j=0;j<elem.length;j++) {
            if(elem[j] == true || in_array(IndexedPages.data[i].url, elem[j])) {
                var cur = IndexedPages.data[i];
                var temp = new Object();
                temp.URL = cur.url;
                temp.Title = cur.title;
                temp.Link_Count = cur.linkcount;
                temp.Strength = cur.strength;
                arr.push(temp);
            }
        }
    }
    CSVManager.exportData("URL,Title,Link_Count,Strength",arr);
};

CSVManager.exportData = function(header,data)
{
          //if (!firefoxAddon(true)) return;
          try {
              var elem = document.createElement("CSVDataElement");
              elem.setAttribute("header", header);
              elem.setAttribute("data", JSON.encode(data));
              document.documentElement.appendChild(elem);
              
              var evt = document.createEvent("Events");
              evt.initEvent("CSVEventBeta", true, false);
              elem.dispatchEvent(evt);
          } catch(e) { alert('Unable to find our FireFox Extension.'); }
};
