$.fn.custom_datepicker = function() {
    var date_or_today = function(date_string) {
        var date = new Date(date_string);
        return isNaN(date.getDay()) ? new Date : date;
    };

    this.each(function() {
        var self = $(this),
            start = date_or_today(self.val());

        self.DatePicker({
            format: 'm/d/Y',
            date: start,
            current: start,
            onBeforeShow: function() {
                self.DatePickerSetDate(date_or_today(self.val()), true);
            },
            onChange: function(formated, dates) {
                self.val(formated);
                self.DatePickerHide();
            }
        });
    });
};



$.fn.form_validation = (function(){
  var validate = (function() {
    var c = { log: function() {} };
    // var c = console;

    var f = function() {
      $(this).each(function() {
        var t = $(this);

        if (validate_presence_of(t)) return;
        if (t.attr('name').match(/email/i))
          if (validate_email(t)) return;
      });
    };
    f.has_errors = false;

    var validate_presence_of = function(t) {
      c.log('validate_presence_of', t);
      if ($.trim(t.val()) != "") {
        return hide_error(t);
      } else {
        return show_error(t, "Required");
      }
    };

    var email_regex = /^([\w\.%\+\-]+)@([\w\-]+\.)+([\w]{2,})$/i;
    var validate_email = function(t) {
      c.log('validate_email', t);
      if (email_regex.test(t.val())) {
        return hide_error(t);
      } else {
        return show_error(t, "Invalid Email");
      }
    };

    var show_error = function(t, message) {
      c.log('show error', t, message);
      var container = t.closest('li'),
        inline_message = container.find('.inline_message,.hint');

      f.has_errors = true;

      if (inline_message.length == 0) {
        inline_message = $('<span>').addClass('inline_message');
        container.append(inline_message);
      }

      container.addClass('error');
      inline_message.text(message).show();

      return true;
    };

    var hide_error = function(t) {
      c.log('hide error', t);
      var container = t.closest('li'),
        inline_message = container.find('.inline_message');
      container.removeClass('error');
      inline_message.hide();

      return false;
    };

    return f;
  })();


  return function(validateable_inputs) {
    return this.submit(function() {
      validate.has_errors = false;
      validate.apply($(validateable_inputs, this));

      return !validate.has_errors;
    }).find(validateable_inputs).blur(validate);
  };
})();



// It's like int main()!
$(document).ready(function() {
    $('#nav li:last-child').addClass('last bottom');
    $('#reviews').cycle({
        fx: 'fade',
        speed: 8000
    });
    $.placeholder();

    $('#guarantee,#pre-owned').click(function() {
        var a = $('a', this);
        document.location = a.attr('href');
    }).css('cursor', 'pointer');

    $('form .date').custom_datepicker();
    $('form.appointment').form_validation('#name,#email,#phone,#date,#time');
});

