1. //Hunter v. 1.4
  2. _skhunterVersion=14;
  3.  
  4. var xmlhttp;
  5. var targetDoc;
  6. var UI;
  7. var data;
  8.  
  9.  
  10. //there is no tbody ?? rightnow
  11. function getSectorTable(documentBody,trIndex,tdIndex,TextFlagRegex){
  12.     var tables=documentBody.getElementsByTagName("table");
  13.         var tryTable = null;
  14.         var sectorTableNotFound = true;
  15.         var j = 0;
  16.         while(j<tables.length && sectorTableNotFound) {
  17.            if(tables[j].getElementsByTagName("tbody")[0]){
  18.              tryTable = tables[j].getElementsByTagName("tbody")[0];
  19.            } else {
  20.          tryTable = tables[j];
  21.        }
  22.            var tryRow = tryTable.getElementsByTagName("tr")[trIndex];
  23.        if(tryRow){
  24.          var tryTD = tryRow.getElementsByTagName("td")[tdIndex];
  25.              if(tryTD && tryTD.innerHTML.match(TextFlagRegex)){
  26.               sectorTableNotFound = false;
  27.              }
  28.        }
  29.            j++;
  30.         }
  31.         return tryTable;
  32. }
  33.  
  34. function getSectorTable_(documentBody,trIndex,tdIndex,TextFlagRegex){
  35.     var tables=documentBody.getElementsByTagName("table");
  36.  
  37.         var tryTable = null;
  38.         var sectorTableNotFound = true;
  39.         var j = 0;
  40.         while(j<tables.length && sectorTableNotFound) {
  41.             if(tables[j].getElementsByTagName("tbody")[0]){
  42.                 tryTable = tables[j].getElementsByTagName("tbody")[0];
  43.             } else {
  44.                 tryTable = tables[j];
  45.             }
  46.             var tryRow = tryTable.getElementsByTagName("tr")[trIndex];
  47.             if(tryRow){
  48.                 var tryTD = tryRow.getElementsByTagName("td")[tdIndex];
  49.                 if(tryTD && tryTD.innerHTML.match(TextFlagRegex)){
  50.                     sectorTableNotFound = false;
  51.                 }
  52.             }
  53.             j++;
  54.         }
  55.         if (sectorTableNotFound == true) return null;
  56.         return tryTable;
  57. }
  58.  
  59.  
  60.  function makeReport(event){
  61.    
  62.     //var data = self.data;
  63.     var timeIndex = UI.value;
  64.    
  65.     eval(data);
  66.     var ITarget = event.originalTarget.parentNode.parentNode.parentNode.parentNode;
  67.  
  68.     //documentB=event.originalTarget.getElementsByTagName("body")[0];
  69.    
  70.       //var ITarget = getSectorTable_(documentB,1,0,/^Kingdom Name/);
  71.      
  72.     var slotsTarget=ITarget.getElementsByTagName("tr");
  73.     //alert(slotsTarget[3].innerHTML);
  74.     for(i=0;i<slotsNR;i++){
  75.         var tds=slotsTarget[i+2].getElementsByTagName("td");
  76.     if ((0 <= timeIndex) && (timeIndex < times.length)){
  77.  
  78.         Land = ""
  79.         if (landchange[timeIndex][i] != 0){
  80.             if ( landchange[timeIndex][i] > 0) {
  81.                 Land += " +"+landchange[timeIndex][i];
  82.                 tds[3].style.color="#22FF22";
  83.             } else {
  84.                 Land += landchange[timeIndex][i];
  85.                 tds[3].style.color="#FF2222";
  86.             }
  87.             tds[3].lastChild.nodeValue = Land;
  88.         } else {
  89.             tds[3].lastChild.nodeValue = "";
  90.         }
  91.         NW = ""
  92.         if (nwchange[timeIndex][i] != 0){
  93.             if ( nwchange[timeIndex][i] > 0) {
  94.                 NW += " +"+nwchange[timeIndex][i];
  95.                 tds[5].style.color="#22FF22";
  96.             } else {
  97.                 NW += nwchange[timeIndex][i];
  98.                 tds[5].style.color="#FF2222";
  99.             }
  100.             tds[5].lastChild.nodeValue = NW;
  101.         } else {
  102.             tds[5].lastChild.nodeValue = "";
  103.         }
  104.  
  105.         Honour = ""
  106.         if (hchange[timeIndex][i] != 0){
  107.             if ( hchange[timeIndex][i] > 0) {
  108.                 Honour += " +"+hchange[timeIndex][i];
  109.                 tds[7].style.color="#22FF22";
  110.             } else {
  111.                 Honour += hchange[timeIndex][i];
  112.                 tds[7].style.color="#FF2222";
  113.             }
  114.             tds[7].lastChild.nodeValue = Honour;
  115.         } else {
  116.             tds[7].lastChild.nodeValue = "";
  117.         }
  118.  
  119.     } else {
  120.         tds[3].lastChild.nodeValue = "";
  121.         tds[5].lastChild.nodeValue = "";
  122.         tds[7].lastChild.nodeValue = "";
  123.     }
  124.     }
  125. //alert(data);
  126.  
  127. }
  128.  
  129. function evalData(event) {
  130.  
  131. if(xmlhttp.readyState==4) {
  132.  
  133.  
  134.     if(xmlhttp.getResponseHeader("Content-Type") != "text/plain") {
  135.         targetDoc.getElementById("serverMessageTD").lastChild.nodeValue="SK Hunter: No response from server.";
  136.         times=null;
  137.         //alert(xmlhttp.responseText);
  138.         return;
  139.     }
  140.    
  141.     if(xmlhttp.responseText.match(/\/\*MAINT\*\//)) {
  142.         targetDoc.getElementById("serverMessageTD").lastChild.nodeValue="SK Hunter Server Response: server is in maintainance.";
  143.         times=null;
  144.         return;
  145.     }  
  146.  
  147.     if(xmlhttp.responseText.match(/\/\*VERSION\*\//)) {
  148.         targetDoc.getElementById("serverMessageTD").lastChild.nodeValue="SK Hunter Server Response: Please upgrade your Hunter extension.";
  149.         times=null;
  150.         return;
  151.     }
  152.  
  153.     if(xmlhttp.responseText.match(/\/\*ERROR\*\//)) {
  154.         targetDoc.getElementById("serverMessageTD").lastChild.nodeValue="SK Hunter Server Response:" + xmlhttp.responseText;
  155.         throw "SK HUNTER server response:"+xmlhttp.responseText;
  156.         times=null;
  157.         return;
  158.     }
  159.  
  160.     if(xmlhttp.responseText.match(/\/\*DROP\*\//)) {
  161.         targetDoc.getElementById("serverMessageTD").lastChild.nodeValue="SK Hunter Server Response: No data for this sector.";
  162.         times=null;
  163.         return;
  164.     }
  165.  
  166.     if(!xmlhttp.responseText.match(/\/\*OK\*\//)) {
  167.         targetDoc.getElementById("serverMessageTD").lastChild.nodeValue="SK Hunter Server Response: Your request failed.";
  168.         times=null;
  169.         return;
  170.     }
  171.     var firstChar = xmlhttp.responseText.indexOf("/*OK*/") + 6;
  172.     var lastChar = xmlhttp.responseText.indexOf("/*EOT*/");
  173.     var msgEv = xmlhttp.responseText.substring(firstChar, lastChar);
  174.     //alert(msgEv);
  175.    
  176.         try {
  177.           eval(msgEv);
  178.         } catch(x) {
  179.           targetDoc.getElementById("serverMessageTD").lastChild.nodeValue="SK HUNTER server response does not make sense. See Javascript Error Console.";
  180.           throw "SK HUNTER server response is jibberish. Forced ads might have been injected or your PHP script gets filtered by host.";
  181.          
  182.           return;
  183.         }
  184. //alert(landchange[1][1]);
  185.     //display server message
  186.     if(srvmsg){
  187.         var tdM = targetDoc.getElementById("serverMessageTD");
  188.         if(srvmsg_link){
  189.                    var Aelem = targetDoc.createElement("a");
  190.                    Aelem.setAttribute("href",srvmsg_link);
  191.                    if(srvmsg_color)Aelem.style.color=srvmsg_color;
  192.                    var AelemT = targetDoc.createTextNode(srvmsg);
  193.  
  194.                    Aelem.appendChild(AelemT);
  195.                    tdM.replaceChild(Aelem,tdM.lastChild);
  196.                    
  197.                 } else {
  198.           if(srvmsg_color)tdM.style.color=srvmsg_color;
  199.           tdM.lastChild.nodeValue=srvmsg;
  200.                 }
  201.     }
  202.  
  203.  
  204.     //add times to selection element
  205.     //UI=targetDoc.getElementById("timeline");
  206.     order=Components.classes["@mozilla.org/preferences-service;1"].
  207.         getService(Components.interfaces.nsIPrefService).
  208.         getBranch("extensions.skhunter.").getBoolPref('order');
  209.     if(order){
  210.     //ascending
  211.     for (i=times.length-1;i>=0;i--){
  212.         s = targetDoc.createElement("option");
  213.         s.setAttribute("value",i);
  214.        
  215.         t = targetDoc.createTextNode(times[i]);
  216.         s.appendChild(t);
  217.         UI.appendChild(s);
  218.     }
  219.     } else {
  220.     //descending
  221.     for (i=0;i<times.length;i++){
  222.         s = targetDoc.createElement("option");
  223.         s.setAttribute("value",i);
  224.         t = targetDoc.createTextNode(times[i]);
  225.         s.appendChild(t);
  226.         UI.appendChild(s);
  227.     }
  228.     }
  229.  
  230.     var s = targetDoc.createElement("option");
  231.     s.setAttribute("value",times.length);
  232.     var t = targetDoc.createTextNode("none");
  233.    
  234.     s.appendChild(t);
  235.     UI.appendChild(s);
  236.    
  237.     //add a reference to the target documet to use by the event handler
  238.  
  239.     //add a reference to the recieved data to use by the event handler
  240.     //UI.data = xmlhttp.responseText
  241.    
  242.    
  243.     //display data; pass the object itself for reference;
  244.     //UI.onchange(UI);
  245.     data = msgEv;
  246.     //UI.addEventListener("change", makeReport, false);
  247.     // works!! document.addEventListener("change", function(e) { makeReport(e);}, true);
  248.     UI.addEventListener("change", function(e) { makeReport(e);}, true);
  249.     //window.addEventListener("change", function(e) { makeReport(e);}, false);
  250.     //UI.addEventListener("change", function(e) { makeReport(e);}, false);
  251.     //makeReport(event);
  252.    
  253.     // does still work !! alert(targetDoc.getElementsByTagName("body")[0].innerHTML);
  254.     var event = document.createEvent("HTMLEvents");
  255.     event.initEvent("change", true, false);
  256.     UI.dispatchEvent(event);
  257.    
  258.  
  259.    
  260.     //
  261. }  
  262. }
  263.  
  264.  
  265. function buildPostData(server){
  266. try{
  267.  
  268.     var documentB=targetDoc.getElementsByTagName("body")[0];
  269.    
  270.  
  271.     var postData = "";
  272.     var ITarget = null;
  273.    
  274.     var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.skhunter.");
  275.    
  276.     var aPWD;// = encodeURIComponent(prefs.getCharPref('aPWD'));
  277.     var kdnm;// = encodeURIComponent(prefs.getCharPref('kdnm'));
  278.     var email;// = encodeURIComponent(prefs.getCharPref('email'));
  279.     var kdx;// = encodeURIComponent(prefs.getIntPref('kdx'));
  280.     var kdy;// = encodeURIComponent(prefs.getIntPref('kdy'));
  281.     //
  282.     if (server == 1){
  283.         aPWD = encodeURIComponent(prefs.getCharPref('aPWD'));
  284.         kdnm = encodeURIComponent(prefs.getCharPref('kdnm'));
  285.         email = encodeURIComponent(prefs.getCharPref('email'));
  286.         kdx = encodeURIComponent(prefs.getIntPref('kdx'));
  287.         kdy = encodeURIComponent(prefs.getIntPref('kdy'));
  288.     } else {
  289.         aPWD = encodeURIComponent(prefs.getCharPref('aPWD2'));
  290.         kdnm = encodeURIComponent(prefs.getCharPref('kdnm2'));
  291.         email = encodeURIComponent(prefs.getCharPref('email2'));
  292.         kdx = encodeURIComponent(prefs.getIntPref('kdx2'));
  293.         kdy = encodeURIComponent(prefs.getIntPref('kdy2'));
  294.     }
  295.     //
  296.     var tcap = encodeURIComponent(prefs.getIntPref('tcap'));
  297.    
  298.    
  299.     postData = "l="+encodeURIComponent(targetDoc.location.href);
  300.     postData += "&aPWD=" + aPWD;
  301.     postData += "&hver=" + _skhunterVersion;
  302.     postData += "&kdnm=" + kdnm;
  303.     postData += "&email=" + email;
  304.     postData += "&kdx=" + kdx;
  305.     postData += "&kdy=" + kdy;
  306.     postData += "&tcap=" + tcap;
  307.    
  308. }
  309. catch(err)
  310. {
  311.   txt = "SK HUNTER::buildPostData() failed: " + err.description;
  312.   throw txt;
  313. }  
  314.  
  315.  
  316.  
  317.     SKTime = function(HTMLObj){
  318.         try{
  319.             var DateString = HTMLObj.getElementsByTagName("tr")[0].getElementsByTagName("td")[2].innerHTML
  320.             DateString=DateString.replace(/,/g, "");
  321.             var Date=DateString.split(" ");
  322.             this.month=encodeURIComponent(Date[0]);
  323.             this.day= new Number(Date[1]);
  324.             var Temp2=Date[2].split(":");
  325.             this.hour=new Number(Temp2[0]);
  326.             this.minute=new Number(Temp2[1]);
  327.             this.sufix=encodeURIComponent(Date[3]);
  328.         }
  329.         catch(err)
  330.         {
  331.             txt = "SK HUNTER::buildPostData::SKTime() failed: " + err.description;
  332.             throw txt;
  333.         }
  334.    
  335.     }
  336.    
  337.     SKTime_ = function(HTMLObj){
  338.         var DateString = HTMLObj.innerHTML;
  339.         DateString = DateString.replace(/,/g, "");
  340.         var start = DateString.indexOf("(");
  341.         var end = DateString.indexOf(")");
  342.         DateString = DateString.slice(start+1,end);
  343.         var Date=DateString.split(" ");
  344.         this.month=encodeURIComponent(Date[0]);
  345.         this.day= new Number(Date[1]);
  346.         var Temp2=Date[2].split(":");
  347.         this.hour=new Number(Temp2[0]);
  348.         this.minute=new Number(Temp2[1]);
  349.         this.sufix="";
  350.     }
  351.    
  352.     var date;
  353.    
  354.     var ITarget = targetDoc.getElementById("time");
  355.     // alert(ITarget.innerHTML);
  356.     if(ITarget){
  357.             date = new SKTime_(ITarget);
  358.     } else {
  359.         ITarget = getSectorTable(documentB,1,0,/^Money:/); 
  360.         date = new SKTime(ITarget);
  361.     }
  362.        
  363.     postData += "&m="+date.month+"&d="+date.day+"&hour="+date.hour+"&min="+date.minute+"&s="+date.sufix;
  364.  
  365.     SKgalaxy = function(HTMLObj){
  366.         try{   
  367.             var Coords=HTMLObj.getElementsByTagName("tr")[0].getElementsByTagName("td")[1].getElementsByTagName("input");
  368.             this.X=encodeURIComponent(Coords[0].getAttribute("value"));
  369.             this.Y=encodeURIComponent(Coords[1].getAttribute("value"));
  370.         }
  371.         catch(err)
  372.         {
  373.             txt = "SK HUNTER::buildPostData::SKgalaxy() failed: " + err.description;
  374.             throw txt;
  375.         }      
  376.     }
  377.    
  378.     ITarget = getSectorTable(documentB,0,1,/Galaxy:/);
  379.     var galaxy = new SKgalaxy(ITarget);
  380.     postData += "&x=" + galaxy.X + "&y="+ galaxy.Y;
  381.  
  382.     getAlliance = function(HTMLObj){
  383.         try{
  384.             var temp = HTMLObj.getElementsByTagName("tr")[0].getElementsByTagName("td")[2].getElementsByTagName("a");
  385.             if(temp[0]) {
  386.                 return encodeURIComponent(temp[0].innerHTML);
  387.             } else {
  388.                 return "none";
  389.             }
  390.         }
  391.         catch(err)
  392.         {
  393.             txt = "SK HUNTER::buildPostData::getAlliance() failed: " + err.description;
  394.             throw txt;
  395.         }      
  396.        
  397.     }
  398.  
  399. try{   
  400.    // ITarget = getSectorTable(documentB,0,0,/^The Sector Of:/);
  401.     // var alliance = getAlliance(ITarget);
  402.     // postData += "&ali=" + alliance;
  403.         postData += "&ali=" + "no";
  404.  
  405.         ITarget = getSectorTable(documentB,0,0,/^Kingdom Name/);
  406.     var slots=ITarget.getElementsByTagName("tr");  
  407.     for (i=1;i<slots.length;i++){
  408.         var status= slots[i].getAttribute("class");
  409.         var tds=slots[i].getElementsByTagName("td");
  410.         var a=tds[0].getElementsByTagName("a")[0];
  411.         if(a) {
  412.             var name=a.innerHTML;
  413.             name=name.slice(0,name.indexOf("(")-1);
  414.         } else {
  415.             name="";
  416.         }
  417.  
  418.         //var type=tds[1].innerHTML;
  419.         type="";
  420.  
  421.         a=tds[2].getElementsByTagName("a")[0];
  422.         if(a) {
  423.             var land=a.innerHTML.replace(/,/g, "");
  424.         } else {
  425.             land=tds[2].innerHTML.replace(/,/g, "");
  426.         }
  427.        
  428.         a=tds[3].getElementsByTagName("a")[0];
  429.         if(a) {
  430.             var nw=a.innerHTML.replace(/,/g, "");
  431.         } else {
  432.             nw=tds[3].innerHTML.replace(/,/g, "");
  433.         }
  434.  
  435.         a=tds[4].getElementsByTagName("a")[0];
  436.         if(a) {
  437.             var h=a.innerHTML.replace(/,/g, "");
  438.         } else {
  439.             h=tds[4].innerHTML.replace(/,/g, "");
  440.         }
  441.         postData+="&name["+i+"]="+name;
  442.         postData+="&sts["+i+"]="+status;
  443.         postData+="&type["+i+"]="+type;
  444.         postData+="&land["+i+"]="+land;
  445.         postData+="&nw["+i+"]="+nw;
  446.         postData+="&h["+i+"]="+h;
  447.     }
  448. }
  449. catch(err)
  450. {
  451.   txt = "Error description: " + err.description + "\n";
  452.   throw txt;
  453. }
  454.     //alert(postData);
  455.     return postData;
  456. }
  457.  
  458.  
  459.  
  460. var skhunter = {
  461.   onLoad: function() {
  462.     // initialization code
  463.     this.initialized = true;
  464.     this.strings = document.getElementById("skhunter-strings");
  465.     document.getElementById("contentAreaContextMenu")
  466.             .addEventListener("popupshowing", function(e) { this.showContextMenu(e); }, false);
  467.  
  468.     var appcontent = document.getElementById("appcontent");  
  469.     if(appcontent && !appcontent.hasHunter) {
  470.       appcontent.addEventListener("DOMContentLoaded", this.onPageLoad, true);
  471.       appcontent.hasHunter = true;
  472.     }          
  473.   },
  474.  
  475.  
  476. //
  477.  
  478.    
  479.  
  480.   onPageLoad: function(aEvent) {
  481.     targetDoc = aEvent.originalTarget;
  482.     if(targetDoc.location.href.match(/game.php?page=viewsector/) == null) return;
  483.     if(targetDoc.location.href.match(/game.php?page=viewsector&scroll=yoursector/)) return;
  484.    
  485.     var sk1 = 0;
  486.  
  487.    
  488.     var sss = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.skhunter.").getCharPref('sSHORT');   
  489.     var sss2 = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.skhunter.").getCharPref('sSHORT2'); 
  490.    
  491.  
  492.     var smatch_ = new RegExp (sss+"\gearsofconquest\.com\u1"); 
  493. //  var smatch2 = new RegExp (sss2+"\.starkingdoms\.com");     
  494.    
  495.     if(targetDoc.location.href.match(smatch_) != null) {
  496.         sk1 = 1;
  497.     } else {
  498.         if(targetDoc.location.href.match(smatch2) != null){
  499.             sk1 = 2;
  500.         } else {
  501.             return;
  502.         }
  503.     }
  504.    
  505.  
  506.    
  507.     var HunterEnabled = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.skhunter.").getBoolPref('on');
  508.     var HunterEnabled2 = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.skhunter.").getBoolPref('on2');
  509.  
  510.     if(sk1 == 1)
  511.     {
  512.         if(!HunterEnabled) return;
  513.     }
  514.     if(sk1 == 2)
  515.     {
  516.         if(!HunterEnabled2) return;
  517.     }
  518.  
  519.  
  520.     xmlhttp = new XMLHttpRequest();
  521.         //-->? xmlhttp.targetDoc = targetDoc;
  522.     xmlhttp.onreadystatechange=evalData;
  523.    
  524.     var sURL;
  525.  
  526.     if (sk1 == 1){
  527.     sURL = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.skhunter.").getCharPref('sURL');
  528.     } else {
  529.     sURL = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.skhunter.").getCharPref('sURL2');
  530.     }
  531.    
  532.     //if(!targetDoc.location.href.match(/s1/)) return;
  533.     xmlhttp.open("POST",sURL,true);
  534.     xmlhttp.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
  535.     var postData = buildPostData(sk1);
  536.     xmlhttp.send(postData);
  537.    
  538.  
  539.     // make User Interface
  540.     documentBody=targetDoc.getElementsByTagName("body")[0];
  541.     //var ITarget=documentBody.getElementsByTagName("table")[6].getElementsByTagName("tbody")[0];
  542.         var ITarget = getSectorTable(documentBody,0,0,/^Kingdom Name/);
  543.     //create selection element
  544.     UI=targetDoc.createElement("select");
  545.     UI.setAttribute("id","timeline");
  546.    
  547.     //create first option element
  548.     //s = targetDoc.createElement("option");
  549.     //s.setAttribute("value",0);
  550.     //t = targetDoc.createTextNode(" ");
  551.     //s.appendChild(t);
  552.     //UI.appendChild(s);
  553.  
  554.     //text surrounding selection tag
  555.     var t = targetDoc.createTextNode("View ");
  556.     var t2 = targetDoc.createTextNode(" ago");
  557.  
  558.     //create selection <td>
  559.     var td=targetDoc.createElement("td");
  560.     td.appendChild(t);
  561.     td.appendChild(UI);
  562.     td.appendChild(t2);
  563.  
  564.     //create hunter table row
  565.     tr=targetDoc.createElement("tr");
  566.     tr.appendChild(td);
  567.  
  568.     //tds for server message
  569.     var tM = targetDoc.createTextNode("loading data, please wait...");
  570.     var tdM=targetDoc.createElement("td");
  571.     //set server message id for later reference
  572.     tdM.setAttribute("id","serverMessageTD");
  573.     tdM.setAttribute("colspan","8");
  574.     tdM.appendChild(tM);
  575.     tr.appendChild(tdM);
  576.  
  577.     //ITarget is the the table body, it's chiles are the table rows displaying kindom lines
  578.     var ref=ITarget.getElementsByTagName("tr");
  579.     ITarget.insertBefore(tr,ref.item(0));
  580.  
  581.     ref=ITarget.getElementsByTagName("tr");
  582.     var tdref=ref[1].getElementsByTagName("td");   
  583.     //add tds "change"
  584.     td=targetDoc.createElement("td");
  585.     t = targetDoc.createTextNode("change");
  586.     td.appendChild(t);
  587.     ref[1].insertBefore(td,tdref.item(3));
  588.     td2=td.cloneNode(true);
  589.     ref[1].insertBefore(td2,tdref.item(5));
  590.     td3=td.cloneNode(true);
  591.     ref[1].insertBefore(td3,tdref.item(7));
  592.  
  593.     //create tds for change values;
  594.     for(i=1;i<21;i++){
  595.         tdref=ref[i+1].getElementsByTagName("td");
  596.         td=targetDoc.createElement("td");
  597.         t = targetDoc.createTextNode("--");
  598.         td.appendChild(t);
  599.         ref[i+1].insertBefore(td,tdref.item(3));
  600.         td2=td.cloneNode(true);
  601.         ref[i+1].insertBefore(td2,tdref.item(5));
  602.         td3=td.cloneNode(true);
  603.         ref[i+1].insertBefore(td3,tdref.item(7));
  604.     }
  605.    
  606.    
  607. //
  608. //
  609.    
  610.   },  
  611.  
  612.   showContextMenu: function(event) {
  613.     // show or hide the menuitem based on what the context menu is on
  614.     // see http://kb.mozillazine.org/Adding_items_to_menus
  615.     document.getElementById("context-skhunter").hidden = gContextMenu.onImage;
  616.   },
  617.  
  618.   onMenuItemCommand: function(e) {
  619.     var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
  620.                                   .getService(Components.interfaces.nsIPromptService);
  621.     var HunterEnabled = Components.classes["@mozilla.org/preferences-service;1"].
  622.                                     getService(Components.interfaces.nsIPrefService).
  623.                                     getBranch("extensions.skhunter.").getBoolPref('on');   
  624.     var seURL = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService).getBranch("extensions.skhunter.").getCharPref('sURL');                                   
  625.     var strH = this.strings.getString("helloMessage");
  626.     if(HunterEnabled){
  627.         promptService.alert(window, this.strings.getString("helloMessageTitle"),
  628.                                 strH + " " + seURL );
  629.     } else {
  630.         promptService.alert(window, this.strings.getString("helloMessageTitle"),
  631.                                 this.strings.getString("sorryMessage"));   
  632.     }
  633.   },
  634.  
  635. };
  636. window.addEventListener("load", function(e) { skhunter.onLoad(e); }, false);
  637.  
  638. //window.addEventListener("onchange", function(e) { skhunter.makeReport(e);}, false);
  639. // works!! window.addEventListener("change", function(e) { alert('fuck you'); }, false);