jQuery(document.body).ready( function() {
  jQuery(document.body).addClass('hasJavaScript');
  if ($.browser.msie && $.browser.version < 8) {
    $('body').append($('#city_options'));
  };
});

var getYpos = function(element) {

  var ypos = element.offsetTop;
  var thisNode = element;
  while (thisNode.offsetParent &&  (thisNode.offsetParent != document.body)) {
    thisNode = thisNode.offsetParent;
    ypos += thisNode.offsetTop;
  }
  return ypos;

};
var getXpos = function(element) {

  var xpos = element.offsetLeft;
  var thisNode = element;
  while (thisNode.offsetParent &&  (thisNode.offsetParent != document.body)) {
    thisNode = thisNode.offsetParent;
    xpos += thisNode.offsetLeft;
  }
  return xpos;

};
var getWindowHeight = function() {
  if (self.innerHeight) {
    return self.innerHeight;
  } else if (document.documentElement && document.documentElement.clientHeight) {
    return document.documentElement.clientHeight;
  } else if (document.body) {
    return document.body.clientHeight;
  }
  return 0;
};
var getWindowWidth = function() {
  if (self.innerWidth) {
    return self.innerWidth;
  } else if (document.documentElement && document.documentElement.clientWidth) {
    return document.documentElement.clientWidth;
  } else if (document.body) {
    return document.body.clientWidth;
  }
  return 0;
};
var getCurrentYScroll = function() {
  if (document.body && document.body.scrollTop) {
    return document.body.scrollTop;
  }
  if (document.documentElement && document.documentElement.scrollTop) {
    return document.documentElement.scrollTop;
  }
  if (window.pageYOffset) {
    return window.pageYOffset;
  }
  return 0;
};

//  scrollToElement smoothly scrolls the page to the position of a specified element.
//  element = the element to scroll to.
//  interval = the time between jumps, in milliseconds.

var scrollToElement = function(element,interval) {

  if (element.movement) {
    window.clearTimeout(element.movement);
  }

  var final_y = getYpos(element);
  var ypos = getCurrentYScroll();

  if (ypos == final_y) {
    return true;
  } else if (ypos < final_y) {
    ypos += Math.ceil((final_y - ypos)/2);
  } else if (ypos > final_y) {
    ypos -= Math.ceil((ypos - final_y)/2);
  }

  window.scrollTo(0,ypos);

  var repeat = function () {
    scrollToElement(element,interval);
  };

  element.movement = window.setTimeout(repeat,interval);

};

//  Clicking one element moves another element.
//  The target element is moved to the trigger element
//  e.g. a log-in link (triggerElement) moves the log-in widget (targetElement) to the position of the log-in link.

var triggerElementMove = function(triggerElement,targetElement) {

  var x = getXpos(triggerElement);
  var y = getYpos(triggerElement)+jQuery(triggerElement).height();

  if (x+jQuery(targetElement).width() > jQuery(document.body).width()) {
    x = ( getXpos(triggerElement) + jQuery(triggerElement).width() ) - jQuery(targetElement).width();
  }

  if (y+jQuery(targetElement).height() > (getCurrentYScroll() + getWindowHeight() )) {
    y = getYpos(triggerElement) - jQuery(targetElement).height();
  }
  jQuery(targetElement).css('left',x);
  jQuery(targetElement).css('top',y);

};

//  Make internal links scroll smoothly and
//  Enable toggling of widgets.

jQuery(document).ready(function() {
  
  // Find galleries on page and set them up.
	var galleries = []; // We don't currently do anything with these.
	$('.slideshow').each(function(index, item) {
		galleries.push(new RmaGallery(item));
	});
  
  // Add property-filter toggle
  jQuery('#property-filter-toggle').click(function() {
    jQuery('#property-results').toggleClass('filter');
    return false;
  });
  
  // All A tags with class 'get' will perform an ajax call
  jQuery('a.get').livequery('click', function() {
    var link = jQuery(this);
    $.get(link.attr('href'), { calling_id: link.attr('id') }, null, "script");
    return false;
  }).attr("rel", "nofollow");

//  The expression a[href*=#] finds all anchor elements with hash portions in the url.
  jQuery('a[href*=#]').click(function() {
//  Make sure that the link is pointing to the same page.
    if ( ( (this.pathname == location.pathname) || ('/'+this.pathname == location.pathname) ) && (this.search == location.search) ) {
      var target = this.href.split('#')[1];
//  If this is a movable widget, move the widget and display it.
      if (document.getElementById(target) && document.getElementById(target).className.indexOf('movable') != -1) {
        var x = jQuery('#'+target).css('left');
        var y = jQuery('#'+target).css('top');
        triggerElementMove(this,document.getElementById(target));
//  If it hasn't moved, toggle the opacity.
        if ( x == jQuery('#'+target).css('left') && y == jQuery('#'+target).css('top') ) {
          jQuery('#'+target).animate( { opacity : 'toggle' } , 200);
        } else {
//  If it has moved, fade it in.
          jQuery('#'+target).fadeIn(200);
        }
        return false;
      }
//  If this is a slideable object, slide it down (or up).
      if (document.getElementById(target).className.indexOf('slide') != -1) {
        if (target=='city_options' && $.browser.msie && $.browser.version < 8) {
          if ($.browser.version < 7) {
            var ie6_offset = 430 - $('#current_city').width();
            $('#city_options').css('left', ($('#current_city').offset().left - ie6_offset)+'px');
          } else{
            var ie7_offset = 420 - $('#current_city').width();
            $('#city_options').css('left', ($('#current_city').offset().left - ie7_offset)+'px');
          };
          $('#city_options').css('top', '90px');
        };
        if (document.getElementById(target).className.indexOf('exposed') == -1) {
          jQuery('.exposed').slideUp('fast',function() {
            jQuery(this).removeClass('exposed');
            jQuery('a[href*=#].active-slide').removeClass('active-slide');
          });
        }
        jQuery('#'+target).slideToggle('fast',function() {
          jQuery(this).toggleClass('exposed');
          jQuery('a[href*='+target+']').toggleClass('active-slide');
        });
        if (jQuery(this).hasClass("enquire-first")) {
          return true;
        }
        return false;
      }
  //  If this is a set of tabs.
      if (document.getElementById(target).className.indexOf('tabs') != -1) {
        //  stop now if the clicked element is already active
        if (document.getElementById(target).className.indexOf('active') != -1) {
          return false;
        }
        else{
          // hide and de-activate siblings of the target
          jQuery('.active').hide().removeClass('active');
          //  remove the 'selected' class from the tab which was selected before this click
          jQuery('a[href=#'+target+']').parents('.tab').siblings('.tab.selected').removeClass('selected');
          //  make the clicked elements tab 'selected'
          jQuery('a[href=#'+target+']').parents('.tab').addClass('selected');
          //  fade in the target, and...
          jQuery('#'+target).fadeIn('fast',function() {
            //  set it's class to be active
            jQuery(this).addClass('active');
            // alert('a[href=#'+target+']');
          });
          return false;
        }
      }
//  If we are dealing with a revealable object...
      if (document.getElementById(target).className.indexOf('reveal') != -1) {
//  If the object is nearby, toggle its visibility.
        if (this.className.indexOf('nearby') != -1) {
          jQuery('#'+target).toggle();
          return false;
        } else {
//  Otherwise just reveal it.
          jQuery('#'+target).show();
        }
      }
//  By default, scroll smoothly to the object.
//  This is causing a problem in Firefox.
     // scrollToElement(document.getElementById(target),25);
     // return false;
    }
  });
});


jQuery(document).ready(function() {
  jQuery('.toggle').prepend('<div class="close"><a href="#">close</a></div>');
  jQuery('.close a').click(function() {
    jQuery(this.parentNode.parentNode).fadeOut(200);
    return false;
  });
});

jQuery(document).ready( function () {
  var corners = new Array('nw','ne','se','sw');
  jQuery.each(corners,function(i,corner) {
    jQuery('.rounded').append('<span class="corner '+corner+'"></span>');
  });
});

var selectToTextarea = function(selectId,textareaId) {
  if (!document.getElementById(selectId) || !document.getElementById(textareaId)) {
    return;
  }
  document.getElementById(selectId).textareaId = textareaId;
  jQuery('#'+selectId).removeAttr('multiple');

//  Create a hidden form field to hold the selected values
  var hiddenfield = document.createElement('input');
  hiddenfield.setAttribute('type','hidden');
  hiddenfield.setAttribute('id',selectId+'_hidden');
  hiddenfield.setAttribute('value','');
  var fieldname = document.getElementById(selectId).name;
  document.getElementById(selectId).setAttribute("name","");
  hiddenfield.setAttribute("name",fieldname);
  document.getElementById(selectId).parentNode.appendChild(hiddenfield);
  document.getElementById(selectId).hiddenId = selectId+'_hidden';


  jQuery('#'+selectId).change(function() {
    var selectedValue = this.options[this.selectedIndex].value;
    var selectedText = this.options[this.selectedIndex].firstChild.nodeValue;
    var textareaValue = document.getElementById(this.textareaId).value;
    if (selectedValue && textareaValue.indexOf(selectedText) == -1) {
//      add the text to the textarea
      if (textareaValue && textareaValue[textareaValue.length-1]!= ',') {
        textareaValue+=',';
      }
      textareaValue+=selectedText;
      document.getElementById(this.textareaId).value = textareaValue;

//      add the value to the hidden form field
      var hiddenValue = document.getElementById(this.hiddenId).value;
      if (hiddenValue && hiddenValue[hiddenValue.length-1]!= ',') {
        hiddenValue+=',';
      }
      hiddenValue+=selectedValue;
      document.getElementById(this.hiddenId).value = hiddenValue;
    }

  });
};

//  Standing on the shoulders of PPK
//  http://www.quirksmode.org/dom/maxlength.html

jQuery(document).ready(function() {
  jQuery('textarea').each(function() {
    if (this.getAttribute('maxlength')) {
      var counter = document.createElement('span');
      counter.className = 'note';
      counter.innerHTML = '<span class=\"countertext\">'+this.getAttribute('maxlength')+'</span> characters left';
      jQuery(this).before(counter);
      this.relatedElement = counter.firstChild;
      this.onkeypress = this.onchange = this.onblur = checkMaxLength;
      this.onkeypress();
    }
  });
});

// Ajax remove button for user avatars

jQuery(
  function(){
    jQuery('#remove_avatar').click(function(){
      jQuery.ajax({
        url:'/avatar',
        data:{'_method':'delete'},
        type:'POST',
        dataType:'script'
      });
      return false;
    });
  }
);

function checkMaxLength() {
  var maxLength = this.getAttribute('maxlength');
  var currentLength = this.value.length;
  if (currentLength >= maxLength) {
    this.value=this.value.substring(0,maxLength);
    currentLength = maxLength;
  }
  this.relatedElement.firstChild.nodeValue = maxLength - currentLength;
}

jQuery.ajaxSetup({
  'beforeSend': function(xhr) {xhr.setRequestHeader("Accept", "text/javascript");}
});

// added by d3r
jQuery(document).ready( function () {
  jQuery('#subnav .map-size').click(function() {
    jQuery(this).toggleClass('larger');
    jQuery('#map').toggleClass('smaller');
    jQuery('#main').toggleClass('small-map');
    return false;
  });
  jQuery('span.search_options').each(function() {
    var that = this;
    jQuery('.option',this).click(function() {
      // jQuery('input[type=hidden]',that).val(jQuery(this).attr('value'));
      // if (controls = jQuery('label[controller='+jQuery('input[type=hidden]',that).attr('name')+']')) {
      //   (jQuery(this).attr('value') != 'proximity' ? jQuery(controls).fadeIn('fast') : jQuery(controls).fadeOut('fast') );
      // }
      jQuery('span.selected',that).text(jQuery(this).text());
      jQuery(that).children('.inner').slideUp('fast');
      return true;
    });
    jQuery(this).click(function() {
        jQuery(this).children('.inner:hidden').slideDown('fast');
      });
    jQuery('.inner',this).hover(function() {}, function() {
      jQuery(this).slideUp('fast');
    });

  });
  jQuery('.tabs:not(.active)').hide();
});