// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

// Displays modal information window
function help(msg) {
  Dialog.alert({url: "/info/help/" + msg, options: {method: 'get'}}, {className: "alphacube", width:540, okLabel: "Close"});
}


function createOverlay(template, adjust) {
  var _width = template.offsetWidth - adjust * 2;
  var _height = template.offsetHeight - adjust * 2;
  var topleft = Position.cumulativeOffset(template);
  
  var overlay = document.createElement("div");
  overlay.style.width = _width + "px";
  overlay.style.height = _height + "px";
  overlay.style.position = "absolute";
  overlay.style.background = "#dedede";
  overlay.style.top = (topleft[1] + adjust) + "px";
  overlay.style.left = (topleft[0] + adjust) + "px";
  
  overlay.style.filter = "alpha(opacity=50)";
  overlay.style.opacity = "0.5";
  overlay.style.mozOpacity = "0.5";
  return overlay;
}


function enableDiv(div) {
  if ($('hide-' + div)) {
    $('hide-' + div).remove();
  }
}

function disableDiv(div, message) {
  if ($('hide-' + div)) {
    return;
  }
  var overlay = createOverlay($(div), 0);
  overlay.id = 'hide-' + div;
  if (message) {
    overlay.style.background = "#fff";
    overlay.style.opacity = "1.0";
    overlay.innerHTML = message;
  }
  document.getElementsByTagName("body")[0].appendChild(overlay);
}


function flash(message, icon) {
  if (!$('flash')) {
    var overlay = createOverlay($('maininfo'), 1);
    overlay.style.background = "#fff";
    overlay.style.opacity = "1.0";
    overlay.id = 'flash';
    document.getElementsByTagName("body")[0].appendChild(overlay);
  }
  $('flash').update("<br><img src='/images/icons/" + icon + ".png'> " + message + "   <a href='#' onclick='javascript:closeFlash();'>ok</a>");
}

function closeFlash() {
  $('flash').remove();
}


function htmlEscape(s) {
  if (s) {
    return s.replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/'/g, "&apos;").replace(/"/g, "&quot;");
  } else {
    return '';
  }
}


function max(x,y) {
  if (x < y) {
    return y;
  } else {
    return x;
  }
}


function min(x,y) {
  if (x > y) {
    return y;
  } else {
    return x;
  }
}

// This take a nested hash and turns it into a flat has with names that are
// interpreted by the rails params[] array.
// eg.
//   {map: {x: {a: 1, b:2}, y:3}, pam: 4}
// returns
//   {'map[x][a]':1, 'map[x][b]':2, 'map[y]':3, 'pam':4}
function flatten(p) {
  var params = {};
  for (var i in p) {
    if (typeof(p[i]) == 'object') {
      flattenRec(p[i], i, params);
    } else {
      params[i] = p[i];
    }
  }
  return params;
}

// Recursive helper function for <flatten>
function flattenRec(p, prefix, result) {
  for (var i in p) {
    var varname = prefix + "[" + i + "]";
    if (typeof(p[i]) == 'object') {
      flattenRec(p[i], varname, result);
    } else {
      result[varname] = p[i];
    }
  }
}


// Add or remove a favorite from river_id
// state=true/false, river_id=river_id/0  0 means all currently visible
function setFavorite(river_id, state) {
  if (river_id == 0) {
    if (getMarkersVisible) {
      var show = getMarkersVisible();
      new Ajax.Request('/river/ajax_favorite', {
        asynchronous: true,
        parameters: {
          multiple:show.join(','),
          state: state
        },
        evalScripts: true
      });
      if (state) {
        $('favorite').update("<a href='javascript:;' onclick='setFavorite(0,false);' title='Remove all from favorites'><img src='/images/icons/heart_delete.png' border=0>");
      } else {
        $('favorite').update("<a href='javascript:;' onclick='setFavorite(0,true);' title='Add all to favorites'><img src='/images/icons/heart_add.png' border=0>");
      }
    }
  } else {
    new Ajax.Request('/river/ajax_favorite', {
      asynchronous: true,
      parameters: {
        river_id:river_id,
        state: state
      },
      evalScripts: true
    });
  }
}


// For trip editing in /trip controller

function tripEdit(id) {
  new Ajax.Updater('tripinfo', '/trip/ajax_form/' + id, {evalScripts:true});
}

function tripSave() {
  var params = $('form').serialize(true);
  params['trip[notes]'] = tinyMCE.get('trip_notes').getContent();
    
  new Ajax.Request("/trip/ajax_edit_save", {
    method: 'post',
    parameters: params,
    evalScripts: true
  });
}

function tripCancel(id) {
  if (id) {
    new Ajax.Updater('tripinfo', "/trip/ajax_tripinfo/" + id, { evalScripts: true });
  } else {
    $('tripinfo').update('');
  }
}

// Trip functions in /river controller

function tripClose(id) {
  new Ajax.Updater('panelmain', '/river/ajax_paneltab/' + id, { parameters:{tab: 'trips'}, evalScripts:true});
}