function UtilityControl() {}

// To "subclass" the GControl, we set the prototype object to
// an instance of the GControl object
UtilityControl.prototype = new GControl();

// Creates a one DIV for each of the buttons and places them in a container
// DIV which is returned as our control element. We add the control to
// to the map container and return the element for the map class to
// position properly.
UtilityControl.prototype.initialize = function(map) {
  var container = document.createElement("div");

  var printDiv = document.createElement("div");
  this.setButtonStyle_(printDiv);
  container.appendChild(printDiv);
  printDiv.appendChild(document.createTextNode("Nyomtatás"));
  GEvent.addDomListener(printDiv, "click", function() {
    closeWindows();
    printMap();
  });

  var emailDiv = document.createElement("div");
  this.setButtonStyle_(emailDiv);
  container.appendChild(emailDiv);
  emailDiv.appendChild(document.createTextNode("E-mail"));
  GEvent.addDomListener(emailDiv, "click", function(ev) {
    closeWindows();
    sendEmail(ev);
  });

  var embedDiv = document.createElement("div");
  this.setButtonStyle_(embedDiv);
  container.appendChild(embedDiv);
  embedDiv.appendChild(document.createTextNode("Link"));
  GEvent.addDomListener(embedDiv, "click", function(ev) {
    closeWindows();
    showEmbed(ev);
  });

  var shareDiv = document.createElement("div");
  this.setButtonStyle_(shareDiv);
  container.appendChild(shareDiv);
  shareDiv.appendChild(document.createTextNode("Megosztás"));
  GEvent.addDomListener(shareDiv, "click", function(ev) {
    closeWindows();
    showShare(ev);
  });

  map.getContainer().appendChild(container);
  return container;
}

function closeWindows() {
    $('div.popup').hide();
}

// By default, the control will appear in the top left corner of the
// map with 7 pixels of padding.
UtilityControl.prototype.getDefaultPosition = function() {
  return new GControlPosition(G_ANCHOR_TOP_RIGHT, new GSize(7, 35));
}

// Sets the proper CSS for the given button element.
UtilityControl.prototype.setButtonStyle_ = function(button) {
  button.style.textDecoration = "none";
  button.style.color = "#000";
  button.style.backgroundColor = "white";
  button.style.fontFamily = "Arial";
  button.style.fontSize = 12;
  button.style.border = "1px solid black";
  button.style.padding = "2px 7px";
  button.style.display = "inline";
  button.style.marginBottom = "3px";
  button.style.textAlign = "center";
  button.style.width = "6em";
  button.style.cursor = "pointer";
}

function run_share_close(that) {
    $(that).click(function() {
        $(that).parents('span').hide( function() { $(this).css('display',''); } );
    });
}

function run_map_share(that) {
    $(that).click(function(ev) {
        closeWindows();
    });
}

function run_map_send(that) {
    $(that).click(function(ev) {
        closeWindows();
        sendEmail(ev);
    });
}

function sendEmail(ev) {
    var p = getClickTarget(ev);
    $('#emailForm').css({top: p.top+15, left: Math.max(p.left-200,10)}).show();
}

function getClickTarget(ev) {
	return {top:ev.pageY ? ev.pageY : ev.clientY, left:ev.pageX ? ev.pageX : ev.clientX};
}

function run_map_print(that) {
	$(that).click(function() {
		closeWindows();
		printMap();
	});
}

function printMap() {
    var $container = $('#mapcontainer');
    var cw = $container.width();
    var ch = $container.height();
    var mw = 640;
    var mh = 640;
    if (cw>ch) {
    	mh = Math.round((ch/cw) * mw);
    } else {
    	mw = Math.round((cw/ch) * mh);
    }
	var maptypes = ['roadmap', 'satellite', 'roadmap', 'hybrid', 'hybrid', 'terrain'];
    
    var u = page_url.split('/');
    u.pop();
	var url = u.join('/')+'/print?size='+mw+'x'+mh+'&';
	url += 'visible='+map.getBounds().getSouthWest().toUrlValue(6);
	url += '|' + map.getBounds().getNorthEast().toUrlValue(6)+'&';
	url += 'maptype='+maptypes[getMapType()]+'&';
    var optional = '';
    if (typeof markers != 'undefined') {
        if (markers.length>0) {
            var poi = [];
            $.each(markers, function() { 
                var coord = this.getLatLng().toUrlValue(6); 
                poi.push(coord); 
            });
            optional = 'markers=color:red|label:A|'+poi.join('|')+'&'; 
        }
    }
    
    if (typeof wp_string != 'undefined') {
        if (wp_string.length>0) {
            var poi = '';
            var pln = contextMenu.gdir.getPolyline();
            var verticies = pln.getVertexCount();
            var points = [];
            for(var n = 0; n<verticies; n++) {
            	points.push(pln.getVertex(n));
            }
            polylineEncoder = new PolylineEncoder(1, map.getZoom(), 0.01);
            var enc = polylineEncoder.dpEncode(points);
            optional += 'path=color:blue|weight:3|enc:'+enc.encodedPoints;
        }
    }
    
    open_doc(url+optional,mw+60,mh+180,'print');
}

function run_send_mail(that) {
    $(that).find('.button.hide').click(function() {
        $('#emailForm').hide();
        return false;
    });
    
    $(that).find('.button.send').click(function() {
        var to_address = $(that).find('input[name=address_to]').val();
        var reMail = /[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/;
        if (!reMail.test(to_address)) {
            alert('A címzett e-mail címe hibás, kérem ellenőrizze!');
            return false;
        }
        
        var url = location.href + '/send';
        var params = {};
        params['from'] = escape($(that).find('input[name=address_from]').val());
        params['to'] = escape(to_address);
        params['map'] = page_url + '?' + generateMapurl();
        
        var u = page_url.split('/');
        u.pop();
        $.get(u.join('/')+'/send', params, function(data) {
            $('#emailForm').hide();
            alert(data);
            return false;
        });
    });
}

function generateMapurl() {
    var center = map.getCenter().toUrlValue(6);
    var mapurl = 'center='+center+'&zoom='+map.getZoom()+'&type='+getMapType();
    if (typeof markers != 'undefined') {
        if (markers.length>0) {
            var poi = [];
            $.each(markers, function() { 
                var coord = this.getLatLng().toUrlValue(6); 
                poi.push(coord); 
            });
            mapurl += '&markers=' + poi.join('|'); 
        }
    }
    if (typeof wp_string != 'undefined') {
        if (wp_string.length>0) {
            mapurl += '&routes=' + escape(wp_string.join('|'));
        }
    }
    
    return mapurl;
}

function run_embed_form(that) {
    $(that).find('.button.hide').click(function() {
        $('#embedForm').hide();
        return false;
    });
    
    $(that).find('#code').focus(function() {
        this.select();
    });
    
    $(that).find('#link').focus(function() {
        this.select();
    });
}

function run_map_link(that) {
    $(that).click(function(ev) {
        closeWindows();
        showEmbed(ev);
    });
}

function showEmbed(ev) {
    var url = '<a href="'+page_url+'"'+'><img src="';
    
    var center = map.getCenter().toUrlValue(6);
    var mapurl = 'http://maps.google.com/maps/api/staticmap?center='+center+'&zoom='+map.getZoom()+'&size=425x250&sensor=false';
    if (typeof markers != 'undefined') {
        if (markers.length>0) {
            var poi = [];
            $.each(markers, function() { 
                var coord = this.getLatLng().toUrlValue(6); 
                poi.push(coord); 
            });
            mapurl += '&markers=color:red|label:A|'+escape(poi.join('|')); 
        }
    }
    
    url += mapurl ;
    url += '" alt="Térkép24"></a>';
    
    var link = page_url + '?' + generateMapurl();
    
    var p = getClickTarget(ev);
    $('#embedForm')
        .css({top: p.top+15, left: Math.max(p.left-300,10)})
        .show()
        .find('#link').val(link).focus()
        .end()
        .find('#code').val(url);
    return false;
}

function run_share_form(that) {
    $(that).find('.button.hide').click(function() {
        $('#shareForm').hide();
        return false;
    });
}

function showShare(ev) {
    var p = getClickTarget(ev);
    $('#shareForm').css({top: p.top+15, left: Math.max(p.left-150,10)}).show();
}

function run_share_iwiw(that) {
    $(that).click(function() {
        var u = page_url + '?' + generateMapurl();
        var t = 'Térkép24.hu - az útvonaltervező';
        window.open('http://iwiw.hu/pages/share/share.jsp?u='+encodeURIComponent(u)+'&t='+encodeURIComponent(t),'iwiwshare','toolbar=0,status=0,location=1, width=650,height=600,scrollbars=1');
        return false;
    });
}

function run_share_startlap(that) {
    $(that).click(function() {
        var u = page_url + '?' + generateMapurl();
        var t = 'Térkép24.hu - az útvonaltervező';
        window.open('http://www.startlap.hu/sajat_linkek/addlink.php?url='+encodeURIComponent(u)+'&title='+encodeURIComponent(t));
        return false;
    });
}

function run_share_facebook(that) {
    $(that).click(function() {
        var u = page_url + '?' + generateMapurl();
        var t = 'Térkép24.hu - az útvonaltervező';
        $(this).attr('share_url', u);
        window.open('http://www.facebook.com/sharer.php?u='+encodeURIComponent(u)+'&t='+encodeURIComponent(t),'facebookshare','toolbar=0,status=0,location=1, width=800,height=600,scrollbars=1');
        return false;
    });
}
