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

// handle the adding/deleting of favorites
function handleFavorite(link) {
  id = link.rel.substring(1)
  action = link.rel.substring(0,1)

  url = (action == 'a') ? '/residentials/create_favorite/'+id : '/residentials/delete_favorite/'+id

  function showFaveResult(r) {
    if (r.status == 401) {
      popLogin()
      return false
    }

    var result = r.responseText.evalJSON();

    if (result.successful) {
      if (result.adding) {
        Element.addClassName(link, 'favoriteOn') 
        link.innerHTML = 'Remove From Favorites'
        link.writeAttribute('rel','r'+id)
      }
      else {
        Element.removeClassName(link, 'favoriteOn') 
        link.innerHTML = 'Add To Favorites'
        link.writeAttribute('rel','a'+id)
      }
    }
  }

  new Ajax.Request(url, {
    asynchronous:true, 
    evalScripts:true, 
    onComplete:function(request) {
      showFaveResult(request) 
    }
  });

  return false
}

function handleInfoRequest(rid) {
  myLightWindow.activateWindow({
    href: '/showing_requests/new?residential_id='+rid, 
    type: 'page', 
    width: 600, 
    height: 480, 
    title: 'Request Showing'
  })
}

function handleToolbarLogin(link) {
  if (getCookie("displet_logged_in")) {
    link.onclick = null
    window.location = "/account"
  }
  else {
    popLogin('/account')
  }
}

var initUsers = false;
var users = new Hash();

// function selectUser() {
//   var users_list = $("users_list");
//   
//   for (var i = 0; i < users_list.options.length; i++) {
//     if (users_list.options[i].selected) {
//       $('selected_user').innerHTML = users_list.options[i].text;
//       $('saved_search_client_user_id').value = users_list.options[i].value;
//       return false;
//     }
//   }
// }

// utils

function isNumberInput(charCode) {
  return ((charCode >= 8 && charCode <= 57) || // from backspace to 9
    (charCode >= 96 && charCode <= 105)) || (charCode == 190) // numpad 0..9
    (charCode == 188); // comma
}

// used on agents_website_path and account dashboard

function initDash() {
  $$('.onDutyCheck').invoke('observe', 'click', makeOnDuty)
  $$('#dashboardNav a').invoke('observe', 'click', switchDash)
}


function switchDash() {
  $$('#dashboardNav a').each(function(l) {
    l.removeClassName('active')
  })
  this.addClassName('active')

  $$('#dashContainer div.dashSegment').each(function(board) {
    board.hide()
  })
  newDash = $(this.rel)
  newDash.appear()
}

function checkedDuty(el) {
  $$('.onDutyCheck').each( function(dutyCheck) {
    if (dutyCheck != el) {
      dutyCheck.disabled = false;
      dutyCheck.checked = false;
    }
    el.checked = true;
    el.disabled = true;
  });
}


function makeOnDuty(event) {
  var agentSelect = Event.element(event);
  var agentId = agentSelect.getOffsetParent().id;

  checkedDuty(agentSelect);

  var url = '/users/' + agentId + '/make_on_duty';

  new Ajax.Request(url, { method: 'post' });
}


function morePowerUsers() {
  $$('.expandablePowerUser').each(function(el) {
    el.show();
  });
  $('lessPowerUsersLink').show();
  $('morePowerUsersLink').hide();
}

function lessPowerUsers() {
  $$('.expandablePowerUser').each(function(el) {
    el.hide();
  });
  $('lessPowerUsersLink').hide();
  $('morePowerUsersLink').show();
}

/* Dashboard - Email Templates */

function templatePreview(email_template) {  
  var templateDraft = escape( $("email_template_" + email_template).getValue() );
  var userId = $(email_template + "_user_id").getValue()
  
  var params = "?user_id=" + userId + "&template_draft=" + templateDraft;
  
  myLightWindow.activateWindow({
    href: '/websites/1/email_template/preview.html' + params, 
    title: 'This is preview of your draft, don\'t forget to save', 
    height: 400,
    width: 800
  });
}

function insertTag(text, textAreaId) {
  var replace = text.innerHTML;
  
  var textArea = $(textAreaId);
  var len = textArea.value.length;
  var start = textArea.selectionStart;
  var end = textArea.selectionEnd;

  var sel = textArea.value.substring(start, end);
  
  textArea.value = textArea.value.substring(0,start) + replace + textArea.value.substring(end,len);
  textArea.focus();
}


// helper funciton for feedback form

function isValidEmail(email) {
  validRegExp = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;

  if (email.search(validRegExp) == -1) {
    return false;
  }
  return true;
}

// Feedback form

function feedbackInit() {
  if ($('feedbackLink')) {
    Event.observe('feedbackLink', 'click', function() {
      left = $('feedback').positionedOffset()[0]
      movex = (left < 0) ? 160 : -160;
      new Effect.Move($('feedback'), { x: movex, y: 0, mode: 'relative' });
      if (movex > 0) {
        $('commentForm').focusFirstElement();
      }
    });
  
    function allowFeedbackSend() {
      var commentEmail = $('email').getValue();
      var commentMessage = $('comment').getValue();

      var allowSubmit = commentEmail.blank() || !isValidEmail(commentEmail) || commentMessage.blank();

      $('commentSubmit').disabled = allowSubmit;
    }

    allowFeedbackSend();

    new Form.Observer('commentForm', 0.5, function() {
      allowFeedbackSend();
    });
  }
}

// shortcuts to specific page tracking methods
var eventTracker = {

  loginShow: function() {
    try {
      pageTracker._trackEvent('authentication', 'showLoginSignup');
    } catch(e) {}
  },

  login: function() {
    try {
      pageTracker._trackEvent('authentication', 'login');
    } catch(e) {}
  },

  signup: function() {
    try {
      pageTracker._trackEvent('authentication', 'signup');
    } catch(e) {}
  },

  propertyShow: function(propertyId) {
    try {
      pageTracker._trackEvent("property", "showDetail", propertyId);
    } catch(e) {}
  }
};

// function showLoginForm() {
//   try  {
//     myLightWindow.activateWindow({href: '/account/login_signup/', type: 'page'});
//     eventTracker.loginShow();
//   }
//   catch(e) {
//     alert(e)
//   }
//   return false;
// }

function toggleDetailView(event) {
  showTab = Event.element(event)
  showId = showTab.rel

  $$('.col2 .largeDetailDisplay').invoke('hide');
  $(showId).show()

  // map display gets distorted when showing/hiding(resizing) its div so we must rest its position
  if (showId == 'detailMapOuter') {
    mapOriginalCenter = map.getCenter()
    map.checkResize()
    map.setCenter(mapOriginalCenter)
  }

  viewTabs.invoke('removeClassName', 'active')
  showTab.addClassName('active')
}

function updateLargeImage(event) {
  clickedImage = Event.element(event)
  $('largeImage').src = clickedImage.src.replace('thumb', 'big')
}

function observeCarousel() {
  if (hc = $("horizontal_carousel")) {
    dCar = new UI.Carousel(hc)
    dCar.observe('scroll:ended', function(event) { 
      $('currentPic').innerHTML = Math.ceil(event.memo.carousel.currentIndex()+1)
    })
  }
}

function keyPressHandler(e) {
  var kC  = (window.event) ? event.keyCode : e.keyCode; // MSIE or Firefox?
  var Esc = (window.event) ? 27 : e.DOM_VK_ESCAPE // MSIE : Firefox
}

function lowProInit() {
  // apply to elements loaded after Ajax calls
  Event.addBehavior.reassignAfterAjax = true;

  Event.addBehavior({
    ".input_mask" : function() {
      Event.observe(this, 'keypress',
      Xaprb.InputMask.applyMask.bindAsEventListener(this));
    }
  });
}

function init() {
  try {
    feedbackInit()
    lowProInit()
  }
  catch(e) {
    alert(e)
  }

  try {
    viewTabs = $$('#detailTabs li a')
    viewTabs.each(function(el) {
      Event.observe(el, 'click', this.toggleDetailView.bindAsEventListener(this));
    }.bind(this));
  }
  catch(e) {alert(e)}
  
  try {
    smallImages = $$('div.container ul li img')
    smallImages.each(function(el) {
      Event.observe(el, 'click', this.updateLargeImage.bindAsEventListener(this));
    }.bind(this));
  }
  catch(e) {alert(e)}
}

Event.observe (window, 'keypress', keyPressHandler);
Event.observe (window, 'load', init);
