var dragged = false;

var TimezoneDefaults = $H({
  '-11' : 'International Date Line West',
  '-10' : 'Hawaii',
  '-9'  : 'Alaska',
  '-8'  : 'Pacific Time (US & Canada)',
  '-7'  : 'Mountain Time (US & Canada)',
  '-6'  : 'Central Time (US & Canada)',
  '-5'  : 'Eastern Time (US & Canada)',
  '-4'  : 'Atlantic Time (Canada)',
  '-3'  : 'Greenland',
  '-2'  : 'Mid-Atlantic',
  '-1'  : 'Azores',
  '0'   : 'London'
  // 1   : 'Amsterdam'
  // 2   : 'Athens'
  // 3   : 'Moscow'
  // 4   : 'Abu Dhabi'
  // 5   : 'Ekaterinburg'
});

function setTimeZone () {
  offset = -(new Date().getTimezoneOffset()/60);
  var val;
  if (val = TimezoneDefaults.get(''+offset)) {
    $('user_time_zone').value = val;
  } else {
    $$('#user_time_zone > option').each(function(el){
      if (el.text.startsWith("(GMT+"+offset.toPaddedString(2))) {
        $('user_time_zone').value = el.value;
        throw $break;
      }
    });
  }
}

function mshow(els){
  if(els){
    $(els).each(function(e){e.show()});
  }
}

function setSelected(el){
  $$('#filter a.selected').each(function(e){e.removeClassName('selected')})
  el.addClassName('selected')
}

function mhide(els){
  if(els){
    $(els).each(function(e){e.hide()});
  }
}

function mtoggle (els) {
  if(els){
    $(els).each(function(e){e.toggle()});
  }
}

function updateProcessingTime (time_lost) {
  if ($('remaining')) {
    var current = $('remaining').innerHTML;
    $('remaining').innerHTML = current.sub(/(\d+)/, function(match){
      if (match[1]*1 == 0) {
      
      } else if (current.match(/minutes/) && (match[1]*1 != 2)){
        setTimeout('updateProcessingTime(1)', 60000);
      } else {
        setTimeout('updateProcessingTime(1)', 1000);
      }
    
      return (match[1]*1 - time_lost);
    });
    if ($('remaining').innerHTML == '1 minutes') {
      $('remaining').innerHTML = '60 seconds';
    }
    if ($('remaining').innerHTML == '0 seconds') {
      $('remaining').innerHTML = "Sorry, it's taking a little longer than expected"
    }
  }
}

function showProofProcessing () {
  $('mainFooter').hide();
  if ($('fileUpload').down().innerHTML.match(/\.(pdf|zip)/i)) {
    var time = $('temp_size').value * 10;
    var time_string;
    if (time <= 60) {
      time_string = time + " seconds"
      setTimeout('updateProcessingTime(1)', 1000);
    } else {
      time_string = Math.ceil(time/60) + " minutes"
      setTimeout('updateProcessingTime(1)', 60000);
    }
    $('loadingFooter').down('img').insert({'before' : "<p>Estimated time: <span id='remaining'>"+time_string+"</span></p>"})
  }
  $('loadingFooter').show();
}

function invitePopup(api_key, header_text, invite_screen_body, external_text, url, exclude_ids, invite_url) {
  if (!invite_url)
    invite_url = "http://apps.facebook.com/useapollo";
  FB_RequireFeatures( ["XFBML"], function() {
    FB.Facebook.init(api_key, '/xd_receiver.htm', null);
    var box = new FB.UI.FBMLPopupDialog(header_text,
      '<fb:request-form action="'+url+'" method="POST" invite="true" type="Apollo" content=\'' + external_text + '<fb:req-choice url="'+invite_url+'" label="Accept" />\'><fb:multi-friend-selector max="20" rows="2" cols="4" exclude_ids="'+exclude_ids+'" showborder="false" bypass="cancel" actiontext="'+invite_screen_body+'"></fb:request-form>');
    box.setContentWidth(660);
    box.setContentHeight(520);
    box.set_placement(FB.UI.PopupPlacement.center);
    box.show();
  });
  
}

function hide_new_note() {
	$('new_note_box').hide();
	$('new_note').reset();
}

function stopEvent(event) {
  // Stop this event from propagating to the click handler on #image
  event.stop();
}

function wedge(event){ 
  event.stop(); 
  return false;
}

function clear_invite(emails) {
  $('invite[1]').value = '';
  for (var i=2; i <= emails; i++) {
    $('email_' + i).remove();
  }
}

function position_note(note_left, note_top, note_id) {
  var imageViewportOffsetX = $('image_holder').viewportOffset()[0];
  var imageViewportOffsetY = $('image_holder').viewportOffset()[1];
  var left = note_left;
  var top = note_top;
  $(note_id).setStyle({ left: left + 'px', top: top + 'px'});
  $(note_id.replace('note', 'note_holder')).show();
  $(note_id).observe('click', stopEvent);
}

function position_arrow(arrow_left, arrow_top, arrow_id) {
  var imageViewportOffsetX = $('image_holder').viewportOffset()[0];
  var imageViewportOffsetY = $('image_holder').viewportOffset()[1];
  var left = arrow_left;
  var top = arrow_top;
  $(arrow_id).setStyle({ left: left + 'px', top: top + 'px'});
  $(arrow_id).observe('click', stopEvent);
}

function position_line(note_left, note_top, arrow_left, arrow_top, line_id, note_id) {
  var imageViewportOffsetX = $('image_holder').viewportOffset()[0];
  var imageViewportOffsetY = $('image_holder').viewportOffset()[1];
  var n_left = note_left;
  var n_top =note_top;
  var a_left = arrow_left + 5;
  var a_top =arrow_top + 5;
	var note_width = $(note_id).getWidth();
	var note_height = $(note_id).getHeight();
		
	
	var note_half_width = note_width/2;
	var note_half_height = note_height/2;
		if ((n_top + note_half_height == a_top) || (n_left + note_half_width == a_left)){
			if (n_top + note_half_height == a_top){
				var left = n_left + note_width;
				var top = a_top;
				var b_left = "none";
				var b_right = "none";
				var b_top = "none";
				var b_bottom = "solid";
				var height = "1";
				var width = a_left - left;				
			}
			else{
				var left = a_left;
				var top = a_top;
				var b_left = "none";
				var b_right = "none";
				var b_top = "none";
				var b_bottom = "solid";
				var height = "1";
				var width = n_left - left;
			}	
			if (n_left + note_half_width == a_left){
				var left = a_left;
				var top = n_top + note_height;
				var b_left = "solid";
				var b_right = "none";
				var b_top = "none";
				var b_bottom = "none";
				var height = a_top - top;
				var width = "1";
			}
			else{
				var left = a_left;
				var top = n_top - note_height;
				var b_left = "solid";
				var b_right = "none";
				var b_top = "none";
				var b_bottom = "none";
				var height = top - a_top;
				var width = "1";				
			}						
		}
		else{
			if(n_left >= (a_left+10)){
				if ((n_top + note_half_height) < a_top){
					var left = a_left;
					var top = n_top + note_half_height;
					var b_left = "solid";
					var b_right = "none";
					var b_top = "solid";
					var b_bottom = "none";
					var height = a_top - top;
					var width = n_left - a_left;
				}
				else{
					var left = a_left;
					var top = a_top;
					var b_left = "solid";
					var b_right = "none";
					var b_top = "none";
					var b_bottom = "solid";
					var height = (n_top + note_half_height) - a_top;
					var width = n_left - a_left;
				}
			}
			else{
				if((n_left+note_width+10) < a_left){
					if (n_top + note_half_height < a_top){
						var left = n_left + note_width;
						var top = n_top + note_half_height;
						var b_left = "none";
						var b_right = "solid";
						var b_top = "solid";
						var b_bottom = "none";
						var height = a_top - top;
						var width = (a_left - n_left - note_width);
					}
					else{
						var left = n_left + note_width;
						var top = a_top;
						var bottom = "auto";
						var right = "auto";
						var b_left = "none";
						var b_right = "solid";
						var b_top = "none";
						var b_bottom = "solid";
						var height = (n_top + note_half_height) - a_top;
						var width = (a_left - n_left - note_width);
					}
				}
				else{
					if (n_top + note_half_height < a_top){
						if (n_left + note_half_width > a_left){
							var left = a_left;
							var top = n_top + note_height;
							var b_left = "none";
							var b_right = "solid";
							var b_top = "none";
							var b_bottom = "solid";
							var height = a_top - top;
							var width = (n_left + note_half_width) - left;
						}
						else{
							var left = n_left + note_half_width;
							var top = n_top + note_height;
							var b_left = "solid";
							var b_right = "none";
							var b_top = "none";
							var b_bottom = "solid";
							var height = a_top - top;
							var width = a_left - left;
						}
					}
					else{
						if (n_left + note_half_width > a_left){
							var left = a_left;
							var top = a_top;
							var b_left = "none";
							var b_right = "solid";
							var b_top = "solid";
							var b_bottom = "none";
							var height = n_top - a_top;
							var width = (n_left + note_half_width) - left;
						}
						else{
							var left = n_left + note_half_width;
							var top = a_top;
							var b_left = "solid";
							var b_right = "none";
							var b_top = "solid";
							var b_bottom = "none";
							var height =n_top - a_top;
							var width = a_left - left;
						}
					}
				}
			}
		}
		
  $(line_id).setStyle({ left: left + 'px', top: top + 'px', borderLeftStyle: b_left, borderRightStyle: b_right, borderTopStyle: b_top, borderBottomStyle: b_bottom, height: height + 'px', width: width + 'px'});
}


function newNote(event) {
  var scrollOffsets = document.viewport.getScrollOffsets();
	var imageViewportOffsetX = $('annotated').viewportOffset()[0] + scrollOffsets['left'];
  var imageViewportOffsetY = $('annotated').viewportOffset()[1] + scrollOffsets['top'];
  if (Prototype.Browser.Opera) {
    imageViewportOffsetY = imageViewportOffsetY - scrollOffsets['top'];
  }
	elem = getEventElem(event);
  // if ((elem.id != 'uploaded_image') && !elem.id.match('line')) return;
	if (Element.extend(elem).up('#new_note_box')) return;
	clickViewportOffsetX = Event.pointerX(event) - imageViewportOffsetX;
	clickViewportOffsetY = Event.pointerY(event) - imageViewportOffsetY;
	$('new_note_box').setStyle({
	left: clickViewportOffsetX + 'px',
	top: clickViewportOffsetY + 'px'
	});

  var annotatedImageViewportOffsetX = $('annotated').viewportOffset()[0];
  var annotatedImageViewportOffsetY = $('annotated').viewportOffset()[1];
	$('new_note_box').show();
	$('note_content').focus();
	
	$('note_left').value = clickViewportOffsetX + 10;  
	$('note_top').value = clickViewportOffsetY + 10;
	$('note_arrow_left').value = clickViewportOffsetX;  
	$('note_arrow_top').value = clickViewportOffsetY;
}
function stopEvent(event) {
event.stop();
}

function getEventElem(e) {
var elem;
if (!e) var e = window.event;
if (e.target) elem = e.target;
else if (e.srcElement) elem = e.srcElement;
if (elem.nodeType == 3) { // defeat Safari bug
elem = elem.parentNode;
}
return elem;
}

function dragging(line, note, arrow){
	$(line).hide();
	$(note).setStyle({ borderColor: '#eaae0e'});
	$(arrow).setStyle({ backgroundImage: 'url(/images/orange_dot.png)'});
}
function stopDragging(line, note, arrow){
	$(line).show();
	$(note).setStyle({ borderColor: '#000'});
	$(arrow).setStyle({ backgroundImage: 'url(/images/black_dot.png)'});
}

function showIfNotDragged(line, note, arrow) {
  if (dragged) {
    dragged = false
  } else {
    stopDragging(line, note, arrow)
  }
}

function inviteAnother () {
  var timestamp = Number(new Date());
  new_node = $('emails').descendants().first().cloneNode(true)
  new_node.id = "div_" + timestamp;
  input = new_node.down('input[type=text]');
  input.id = "email_" + timestamp;
  input.name = "email_" + timestamp;
  input.value = ""
  $('emails').insert({'bottom' : new_node});
}

function signOff (accepted) {
  $('popup_mask').show();
  $('sign_off_popup').show();
  if (accepted) {
    $('popup_accept').show();
    $('submit_signoff').value = 'Accept';
  } else {
    $('popup_reject').show();
    $('submit_signoff').value = 'Reject';
  }
}

function showPopup (url) {
  new Ajax.Updater('popupContent', url, {method : 'get', evalScripts : true, onComplete : function(){$('popupBox').show();$('popup').style.width = $('popupContent').down('.content').clientWidth+20+'px';} });
}

function closePopup () {
  $('popupBox').hide();
}

function closeBlankSlates(){
  $('addnew_slate').hide();
  $('members_slate').hide();
}

function inviteMore() {
  //   var timestamp = Number(new Date());
  //   // var div_elem = $('emails').down();
  //   // var html = div_elem;
  // var html = '<li>\
  // <input id="invite_'+timestamp+'" type="text" name="invite['+timestamp+']"/>\
  // <input id="reviewer_'+timestamp+'" type="radio" value="'+timestamp+'" style="width: 20px;" name="reviewer"/>\
  // </li>'
  // // TODO: needs to be DRYer   
  //   $('invites').insert({'bottom' : html});
  
  
  var timestamp = Number(new Date());
  new_node = $('emails').descendants().first().cloneNode(true)
  new_node.id = "div_" + timestamp;
  input = new_node.down('input[type=text]');
  input.id = "invite_" + timestamp;
  input.name = "invite[" + timestamp + ']';
  input.value = ""
  radio = new_node.down('input[type=radio]');
  radio.id = "reviewer_" + timestamp;
  radio.value = timestamp;
  radio.checked = false;
  $('emails').insert({'bottom' : new_node});
}
 
function filterUsers (elem) {
	clearSuggestions();
	suggestionsBox = document.createElement('div');
	suggestionsBox.id = "suggestionsBox";
	suggestionsBox.className = "suggestions";
	Element.extend(elem).ancestors()[0].appendChild(suggestionsBox);
	suggestions_top = document.createElement('div');
	suggestions_top.id = "suggestions_top";
	$("suggestionsBox").appendChild(suggestions_top);
	suggestions = document.createElement('div');
	suggestions.id = "email_suggestions";
	$("suggestionsBox").appendChild(suggestions); 
	suggestions_bottom = document.createElement('div');
	suggestions_bottom.id = "suggestions_bottom"; 
	$("suggestionsBox").appendChild(suggestions_bottom);
	var found = false;
	users.each(function(u){
	  if (u.toLowerCase().unescapeHTML().match(elem.value.toLowerCase())) {
	    result = document.createElement('a');
			found = true;
	    result.onmousedown = function(){
	      elem.value = u.unescapeHTML();
	      clearSuggestions();
	    }
	    result.innerHTML = u;
	    $('email_suggestions').appendChild(result);
	  }
	});
	if (!found) {
		clearSuggestions();
	}
}


function clearSuggestions(){
  if($('suggestionsBox')){$('suggestionsBox').remove();}
}

function dropNote (argument) {
  alert(argument);
}

function previewAnnouncement () {
  new Ajax.Updater('announcement_preview', '/announcements/preview?content='+escape($F('announcement_message')), {method : 'get', evalScripts : true} );
}