// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

function changePhoto(id, image_url, target_url) 
{  
	var image = $("photoSrc" + id);
  image.src = image_url;
  
  if(target_url)
  {
  	var target = $("photoTarget" + id);  
    target.href = target_url;    
  }  
}

var map;
var pmarker;
function createMarker(point, readOnly) {

  if(pmarker) 
  {
    map.removeOverlay(pmarker);
  }
  
  var marker = new GMarker(point, {draggable: true});
   
  if(!readOnly)
  {
    $("map_lat").value = marker.getPoint().lat().toFixed(12);
    $("map_lng").value = marker.getPoint().lng().toFixed(12);
     
    GEvent.addListener(marker, "dragend", function() {
      $("map_lat").value = marker.getPoint().lat().toFixed(12);
      $("map_lng").value = marker.getPoint().lng().toFixed(12);
    });
  }
  
  map.addOverlay(marker);
  pmarker = marker;
}

function highlightPost(obj) {
  obj.style.background='#F0F0F0';
}

function initializeMap(location, zoom, lat, lng, showInfo, readOnly) {
  if (GBrowserIsCompatible()) {
    map = new GMap2($("map_canvas"));
    
    map.setMapType(G_HYBRID_MAP);
    map.disableDoubleClickZoom();
    map.enableScrollWheelZoom();
    map.enableContinuousZoom();        
    map.addControl(new GLargeMapControl3D());      
    map.addControl(new GMapTypeControl());        
    map.setCenter(new GLatLng(lat, lng), zoom);
          
    if(showInfo)
    {
      map.openInfoWindow(map.getCenter(), document.createTextNode(location));
    }
    else
    {
      var point = new GLatLng(lat, lng);      
      createMarker(point, readOnly);
    }
                  
    if(!readOnly)
    {
      GEvent.addListener(map, "moveend", function() {
        $("map_zoom").value = map.getZoom().toString();
      });
      
      GEvent.addListener(map, "click", function(overlay, point) {
        if (point) {
          createMarker(point, readOnly);
        }
      });
    }
  }
}

var swfu;
var swfu_ajax_update;
function initializeSWFUpload(upload_path, button_path, ajax_update, session_id)
{
  var settings_object = { upload_url             : upload_path, 
                          flash_url              : "/objects/swfupload.swf", 
                          
                          file_post_name         : "photo[uploaded_data]", 
                          post_params            : {"is_flash" : "true", "session_id" : session_id},                           
                          file_types             : "*.jpg;*.jpeg;*.jpe;*.png", 
                          file_types_description : "Room Photo",    
                          file_upload_limit      : "0",                           
                          file_queue_limit       : "10",                                                     
                          file_size_limit        : "4 MB",
                          
                          file_queued_handler          : onFileQueued,
                          file_queue_error_handler     : onFileQueueError,
                          file_dialog_complete_handler : onFileDialogComplete,
                          upload_start_handler         : onUploadStart,                          
                          upload_progress_handler      : onUploadProgress,
                          upload_error_handler         : onUploadError,
                          upload_success_handler       : onUploadSuccess,
                          upload_complete_handler      : onUploadComplete,


                          button_image_url       : button_path, 
                          button_placeholder_id  : "swfupload",
				                  button_width           : 100,
				                  button_height          : 28,
				                  button_cursor          : SWFUpload.CURSOR.HAND,
                          
                          debug                  : false
                        }; 
  swfu = new SWFUpload(settings_object); 
  swfu_ajax_update = ajax_update;
}

function onFileQueued(file) {
}

function onFileQueueError(file, errorCode, message)
{  
  switch (errorCode) 
  {
  case SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED:
    alert("Too many photos selected!");
    break;      
  case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
  case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
    alert("Invalid photo found!");
    break;
  case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
    alert("Photo too large!");
    break;
  default:
    alert(message);
    break;
  }
}

function onFileDialogComplete(numFilesSelected, numFilesQueued) 
{
  if(numFilesQueued > 0)
  {
	  this.startUpload();
          
    $("swfupload_container").insert("<div id='progress_bar_container' class='input'><div class='progress_bar'><span><em id='progress_bar_ticker'></em></span></div></div>");
	}
}

function onUploadStart(file) 
{
  $("progress_bar_ticker").setStyle({left: '0px'});
}

function onUploadProgress(file, bytesLoaded) 
{
  $("upload_status").value = "Uploading " + file.name + " ..."; 

  var base = 180;  
  var offset = Math.ceil((bytesLoaded / file.size) * base); 
  $("progress_bar_ticker").setStyle({left: offset + 'px'});
}

function onUploadSuccess(file, serverData) 
{  
  eval(swfu_ajax_update);
}

function onUploadComplete(file) 
{
  //  I want the next upload to continue automatically so I'll call startUpload here
  if(this.getStats().files_queued > 0) 
  {
    this.startUpload();
  } 
  else
  {
    $("upload_status").value = "All photos are successfully uploaded!";     
    $("progress_bar_container").remove();   
    
    location.reload();
  }
}

function onUploadError(file, errorCode, message) 
{
  $("upload_status").value = "Failed to upload " + file.name + "!";     
}

var preloadedThumbs = new Array();
function preloadThumbs(thumbs) 
{
  for(var i = 0; i < thumbs.length; ++i)
  {
    preloadedThumbs[i] = new Image(150, 150);
    preloadedThumbs[i].src = thumbs[i]
  }
}

var preloadedViews = new Array();
function preloadViews(views) 
{
  for(var i = 0; i < views.length; ++i)
  {
    preloadedViews[i] = new Image;
    preloadedViews[i].src = views[i]
  }
}

function processPostClick(obj, parentObj, target) {
  obj.style.background='#F5F6F7';  
  parentObj.location=target;  
}

function resetForm(id) {
  $(id).reset();  
}

var selected_dates = 0;
function selectDate(id) 
{  
  date = $("dates_" + id)
  if(date == null) 
  {  
    var field = new Element("input");      

    field.setAttribute("type", "hidden");
    field.setAttribute("id", "dates_" + id);  
    field.setAttribute("name", "dates[" + id + "]");    
    field.setAttribute("value", id);
    
    $("date" + id).appendChild(field);  
    $("date" + id).fade({from: 1.0, to: 0.3});
    
    selected_dates++;
  }
  else
  {
    $("date" + id).removeChild(date);
    $("date" + id).fade({from: 0.3, to: 1.0});
    
    selected_dates--;
  }    
}

function selectThumb(list_id, thumb_id, size) 
{
	for(i = 0; i < size; i++) 
  {
    var thumb = $('thumb_' + list_id + '_' + i); 
    
		if(i == thumb_id) 
    {
		  thumb.className = "selected_photo";
		} 
    else 
    {
			thumb.className = "unselected_photo";
		}
	}
}

function sendFacebook(url, title) {
  window.open('http://www.facebook.com/sharer.php?u=' + encodeURIComponent(url) + '&t=' + encodeURIComponent(title), 'sharer', 'toolbar=0,status=0,width=626,height=436');
}

function switchCalendar(curr, next) {
  Effect.BlindUp(curr, { duration: 3.0 });
  Effect.BlindDown(next, { duration: 3.0 });
}

function unhighlightPost(obj) {
  obj.style.background='#F5F6F7';  
}

function validateCalendar(minimum) {
  if(selected_dates > 0) 
  {
    if(selected_dates >= minimum) 
    {
      return true;
    }
    else
    {
      alert("Minimum stay is " + minimum + " nights!");
      return false;    
    }
  }
  else
  {
    alert("Please select a date!");
    return false;
  }
}

function validateMarker() {
  if(pmarker) 
  {
    return true;
  }
  else
  {
    alert("Please mark a location!");
    return false;
  }
}
