// ==UserScript==
// @name           Send to c:geo
// @namespace      http://send2.cgeo.org/
// @description    Add button "Send to c:geo" to geocaching.com
// @grant          none
// @include        https://www.geocaching.com/play/search/*
// @include        http://www.geocaching.com/seek/cache_details*
// @include        https://www.geocaching.com/seek/cache_details*
// @include        https://www.geocaching.com/map/*
// @include        http://www.geocaching.com/geocache/*
// @include        https://www.geocaching.com/geocache/*
// @include        http://www.geocaching.com/my/recentlyviewedcaches*
// @include        https://www.geocaching.com/my/recentlyviewedcaches*
// @include        http://www.geocaching.com/seek/nearest*
// @include        https://www.geocaching.com/seek/nearest*
// @icon           https://send2.cgeo.org/send2cgeo.png
// @downloadURL    https://github.com/cgeo/send2cgeo/raw/release/send2cgeo.user.js
// @updateURL      https://github.com/cgeo/send2cgeo/raw/release/send2cgeo.user.js
// @version        0.34
// ==/UserScript==

// Inserts javascript that will be called by the s2cgeo button. The closure
// look strange, but avoids having to escape the code. Almost everything
// is put into that script element so that geocaching.com's jQuery may be
// accessed.

var s       = document.createElement('script');
s.type      = 'text/javascript';
s.textContent =  '(' + function() {
  // function that handles the actual sending //////////////////////////////////

  window.s2geo = function(code) {
    // show the box and the "please wait" text
    $('#send2cgeo, #send2cgeo div').fadeIn();
    // hide iframe for now and wait for page to be loaded
    $('#send2cgeo iframe')
      .hide()
      .unbind('load')
//      .attr('src', 'https://send2.cgeo.org/add.html?cache='+code)
	  .attr('src', 'http://localhost:54386/add.html?cache='+code)
      .load(function() {
        // hide "please wait text" and show iframe
        $('#send2cgeo div').hide();
        // hide box after 3 seconds
        $(this).css('display', 'block').parent().delay(3000).fadeOut();
      });
  };


  // Defines the elements to insert into the page //////////////////////////////
  var boxWidth = 10,
      boxHeight = 8;

  var boxStyle = 'display:none; background:#1D1D1D; z-index:1000; left:50%;'
               + 'box-shadow:0 0 0.5em #000; padding:0; border:0; '
               + 'position:fixed; top:0.5em;  text-align:center; '
               + 'margin-left:-'+(boxWidth/2)+'em; line-height:'+boxHeight+'em;'
               + 'width:'+boxWidth+'em; height:'+boxHeight+'em; color: #fff';
  var waitStyle = 'width: '+boxWidth+'em; color: #fff';
  var iframeStyle = 'border:0; width:'+boxWidth+'em; height: '+boxHeight+'em';

  $('body').append('<div id="send2cgeo" style="'+boxStyle+'">'
    + '<div style="'+waitStyle+'">Please wait&hellip;</div>'
    + '<iframe style="'+iframeStyle+'"></iframe>'
    + '</div>');


  // Append to send2cgeo links/buttons /////////////////////////////////////////
  var map = document.getElementById('cacheDetailsTemplate');

  if(map !== null) {
    // geocaching.com map view
    var html = 'Log Visit</span></a>'
             + '<a class="lnk ui-block-b" '
//             + 'href="https://send2.cgeo.org/add.html?cache={{=gc}}" '
			 + 'href="http://localhost:54386/add.html?cache={{=gc}}" '
             + 'onclick="window.s2geo(\'{{=gc}}\'); return false;" '
             + 'class="lnk">'
             + '<img src="/images/sendtogps/sendtogps_icon.png" '
             + 'align="absmiddle" border="0"> '
             + '<span>Send to c:geo</span><a href="#"><span>route</span></a>';

    map.innerHTML = map.innerHTML.replace('Log Visit</span>', html);
  } else if(document.getElementById('searchResultsTable') != null){
    // geocaching.com new search
    
    $("#searchResultsTable th").first().after('<th class="mobile-show"><a class="outbound-link">Send to c:geo</a></th>');
    $("#searchResultsTable col").first().after('<col></col>');
    
    var caches = $(".cache-details");
    caches.each(function() {
        
        var GCCode = $(this ).text();
        GCCode = GCCode.slice( GCCode.indexOf("|") + 1 ).trim();
        
        var html = '<td class="mobile-show" >'
//             + '<a href="https://send2.cgeo.org/add.html?cache=' + GCCode + '" '
			 + '<a href="http://localhost:54386/add.html?cache=' + GCCode + '" '
             + 'onclick="window.s2geo(\'' + GCCode + '\'); return false;">'
             + '<img height="50" src="https://send2.cgeo.org/send2cgeo.png" '
             + 'border="0"> '
             + '</a></td>';

             $(this).parent().parent().before(html);
             
    });
    
    } else if(document.getElementById('ctl00_ContentBody_CoordInfoLinkControl1_uxCoordInfoCode') != null){
    // geocaching.com cache detail page
    var GCCode = $('#ctl00_ContentBody_CoordInfoLinkControl1_uxCoordInfoCode')
                  .html();

    var html = '<input type="button" '
             + 'value="Send to c:geo" '
             + 'onclick="window.s2geo(\''+GCCode+'\'); '
             + 'return false;" '
             + '/>';

    $('#Download p:last').append(html);
    $('#Download dd:last').append(html);
  } else {
    // geocaching.com recentlyviewed
    $('img[src="/images/icons/16/send_to_gps.png"]').each(function(){
      $(this).attr('alt', "Send to c:geo").attr('title', "Send to c:geo");
    });
    $('a[title="Send to GPS"]').each(function(){
      var text = $(this).parent().parent().find(".Merge").last().find(".small").first().text().split("|");
      var GCCode = text[text.length - 2].trim();
      this.href="javascript:window.s2geo('"+GCCode+"')";
      this.title = "Send to c:geo";
    });
    
  }
} + ')();';

// Inject Script. Can't use jQuery yet, because the page is not
// accessible from Tampermonkey
document.getElementsByTagName("head")[0].appendChild(s);
