NaviaAPI = (function() {
  var popup, overlay, naviaOptions, naviaCompany;
  
  // From prototype
  function setStyle(element, styles) {
    element.style.cssText += ';' + styles;
  };
  
  function setOpacity(element, value) {
  	element.style.opacity = value;
  	element.style.filter = 'alpha(opacity=' + value * 100 + ')';
  }
  
  function viewport()
  {
    var e = window, a = 'inner';
    if ( !( 'innerWidth' in window ) ) {
      a = 'client';
      e = document.documentElement || document.body;
    }
    return { width : e[ a+'Width' ] , height : e[ a+'Height' ] }
  }
  
  function createIframe(company, options) {
    var backUrl = encodeURIComponent(document.location.href);
    options = options || {backButtonText: "Back to homepage"}
    params = 'back_url=' + backUrl;
    if (options.zoom)
      params += "&zoom=" + options.zoom
    if (options.center)
      params += "&center=" + options.center
    if (options.css)
      params += "&css=" + encodeURIComponent(options.css)
    if (company)
      var iframe = '<iframe src="http://' + company + '.navia.com/api/map?' + params;
    else
      var iframe = '<iframe src="http://' + 'navia.com/api/map?' + params;
    
    iframe += '&back_text=' + options.backButtonText + '"';
    var width = options.width || 998;
    var height = options.height || 480;
    iframe += ' width="' + width + '" height="' + height + '" scrolling="no" frameborder="0" ALLOWTRANSPARENCY=true></iframe>';

    return iframe  
  }
  
  function insertMapSearch(company, options) {
    document.writeln(createIframe(company, options))
  }
  
  function openPopup(event) {
		if (!popup) {
		  var width = (naviaOptions.width || 1000);
		  var height = (naviaOptions.height || 480);
		  popup = document.createElement('div');
		  setStyle(popup, "position: fixed; background: #FFF; top: 50%; left: 50%; border: 1px solid #DDD; z-index:9999999");
		  setStyle(popup, "width: " + width + "px; height:" + height + "px");
		  setStyle(popup, "margin-left: " + (-width/2) + "px; margin-top:" + (-height/2) + "px");
		  setStyle(popup, "box-shadow: 5px 5px 5px #888");
		  document.body.appendChild(popup);
		  
		  var closeButton = document.createElement('div');
		  setStyle(closeButton, "position:absolute; width:28px; height:28px; top:-14px; right:-14px; background-image:url(http://navia.com/images/icons/close.png)")
		  setStyle(closeButton, "cursor:pointer")
		  closeButton.onclick = function() {
		    popup.style.display = "none";
		    overlay.style.display = "none";
		    return false;
		  }
		  popup.innerHTML = createIframe(naviaCompany, naviaOptions);
		  popup.appendChild(closeButton)
		  
		  overlay = document.createElement('div')
		  setStyle(overlay, "position: fixed; top:0; left: 0; background: #333; height: " + viewport().height + "px; width: 100%; z-index:999998");
		  setOpacity(overlay, 0.5);
		  document.body.appendChild(overlay);
		  window.onresize = function() {
		    setStyle(overlay, "height: " + viewport().height + "px");
		  }
		}
		
		popup.style.display = "block"
		overlay.style.display = "block"
    return false;
  }
  
  function popupMapSearch(company, options) {
    naviaOptions = options;
    naviaCompany = company;
    var ids = options.elementIDS;
    for (var i=0; i< ids.length;i++) {
      document.getElementById(ids[i]).onclick = openPopup;
    }
  }
  
  return {insertMapSearch: insertMapSearch,
          popupMapSearch: popupMapSearch}
})();
