$(document).ready(function() {
  $('input.input_date').each(function() {
    var name = $(this).attr('name');
    $(this).attr('id', name);
    var month = new Array(12);
    month[0] = "Jan"; month[1] = "Feb"; month[2] = "Mar"; month[3] = "Apr";
    month[4] = "May"; month[5] = "Jun"; month[6] = "Jul"; month[7] = "Aug";
    month[8] = "Sep"; month[9] = "Oct"; month[10] = "Nov"; month[11] = "Dec";
    var today;
    if ($(this).val().length > 0) {
      today = new Date($(this).val()); // set to default value for this date-- the value in the text box
    } else {
      today = new Date();
    }
    var mo_options = '';
    for (var i = 1; i < 13; i++) {
      var select = (today.getMonth() == i - 1);
      mo_options += '<option ' + (select ? 'selected="selected" ' : '') + 'value="' + '00'.substr(0, 2 - i.toString().length) + i.toString() + '">' + month[i - 1] + '</option>';
    }
    var dy_options = '';
    for (var i = 1; i < 32; i++) {
      var select = (today.getDate() == i);
      dy_options += '<option ' + (select ? 'selected="selected" ' : '') + 'value="' + '00'.substr(0, 2 - i.toString().length) + i.toString() + '">' + i.toString() + '</option>';
    }
    var yr_options = '';
    for (var i = today.getFullYear() - 40; i < today.getFullYear() + 10; i++) {
      var select = (today.getFullYear() == i);
      yr_options += '<option ' + (select ? 'selected="selected" ' : '') + 'value="' + i.toString() + '">' + i.toString() + '</option>';
    }
    var input_html =
    '<div class="multi_input_wrapper"><div class="input_date_wrapper">' +
    '<select class="input_date_field input_date_mo" id="' + name + '_field_mo" type="text">' +
    mo_options +
    '</select>/' +
    '<select class="input_date_field input_date_dy" id="' + name + '_field_dy" type="text">' +
    dy_options +
    '</select>/' +
    '<select class="input_date_field input_date_yr" id="' + name + '_field_yr" type="text">' +
    yr_options +
    '</select>' +
    '</div></div>';
    $(this).after(input_html);
    $(this).hide();
    $('#' + name + '_field_mo').change(function() {
      var date = new Date($(this).val() + '/' +
                          $('#' + name + '_field_dy').val() + '/' +
                          $('#' + name + '_field_yr').val());
      var molen = new Array(12);
      molen[0] = 31; molen[1] = 28 + (date.getFullYear() % 4 == 0 ? 1 : 0);
      molen[2] = 31; molen[3] = 30; molen[4] = 31; molen[5] = 30; molen[6] = 31;
      molen[7] = 31; molen[8] = 30; molen[9] = 31; molen[10] = 30; molen[11] = 31;
      var dayopts = new Array(3);
      dayopts[0] = '<option value="29">29</option>';
      dayopts[1] = '<option value="30">30</option>';
      dayopts[2] = '<option value="31">31</option>';
      for (var i = 29; i < 32; i++) {
        if (i <= molen[date.getMonth()]) {
          if ($('#' + name + '_field_dy option[value=' + i + ']').length == 0) {
            $('#' + name + '_field_dy').append(dayopts[i - 29]);
          }
        } else {
          $('#' + name + '_field_dy option[value=' + i + ']').remove();
        }
      }
    });
    
    $('#' + name + '_field_mo, #' + name + '_field_dy, #' + name + '_field_yr').change(function() {
      $('input[name=' + name + ']').val(
                  $('#' + name + '_field_yr').val() + '-' +
                  $('#' + name + '_field_mo').val() + '-' +
                  $('#' + name + '_field_dy').val());
    });
  });
  
  $('input.input_dog').each(function() {
    var name = $(this).attr('name');
    $(this).attr('id', name);
    if (Number($(this).val()) > 0) {
      $.ajax({
        async: true,
        cache: false,
        dataType: 'text',
        error: function (xhr, result, exception) {
          alert(result + ': ' + exception.toString());
        },
        success: function (text, result, xhr) {
          var curval = text;
          $('#' + name + '_field').val(curval);
        },
        type: 'GET',
        url: '/util/ajax.php?act=getdogbyid&q=' + $(this).val()
      });
    }
    var input_html =
    '<div class="multi_input_wrapper">' +
    '<input class="input_dog_field" id="' + name + '_field" autocomplete="off" type="text" value="">' +
    '<div class="input_dog_box" id="' + name + '_box"><ul></ul></div>' +
    '</div>';
    $(this).after(input_html);
    $(this).hide();
    var list, lastval, ajax_active, is_set;
    var box = $('#' + name + '_box');
    $('#' + name + '_field').blur(function() {
      if ($(this).val().length > 0) {
        var c = 0;
        var itemtext = '';
        var itemid = 0;
        for (var i = 0; i < list.length; i++) {
          if ($(list[i]).text().replace(/'s?/ig, '').match(new RegExp('(.* )?' + $(this).val().replace(/'s?/ig, '') + '.*', 'i'))) {
            c++;
            itemtext = $(list[i]).text();
            itemid = $(list[i]).attr('id');
          }
        }
      }
      
      if (c == 0) {
        $('#' + name).val(0);
        is_set = false;
      } else if (c == 1) {
        $('#' + name + '_field').val(itemtext);
        $('#' + name).val(itemid);
        is_set = true;
      } else {
        $('#' + name).val(0);
        is_set = false;
      }
      box.hide();
    });
    
    $('#' + name + '_field').keyup(function() {
      if (is_set) {
        $('#' + name).val(0);
        is_set = false;
      }
      var val = $(this).val();
      var gender = '';
      if (val.length == 0) {
        box.hide();
        list = null;
        return true;
      } else {
        box.css({
          'z-index': 1,
          'top': $('#' + name).outerHeight(),
          'left': 0
        });
        box.show();
      }
      
      if (!list) {
        if (!ajax_active) {
          ajax_active = true;
          $.ajax({
            async: true,
            cache: false,
            complete: function (xhr, result) {
              ajax_active = false;
            },
            dataType: 'html',
            error: function (xhr, result, exception) {
              box.hide();
              alert(result + ': ' + exception.toString());
            },
            success: function (html, result, xhr) {
              if (html.length > 0) {
                var li = $(html).find('li');
                list = new Array($(li).length);
                $(li).each(function(index) {
                  list[index] = this;
                });
              } else {
                box.hide();
              }
            },
            type: 'GET',
            url: '/util/ajax.php?act=getdog&q=' + val + '&f=' + gender
          });
        }
      }
      
      if (!list) {
        box.hide();
      } else {
        box.find('span').remove();
        var ul = box.find('ul');
        $(ul).empty();
        var c = 0;
        for (var i = 0; i < list.length; i++) {
          if ($(list[i]).text().replace(/'s?/ig, '').match(new RegExp('(.* )?' + val.replace(/'s?/ig, '') + '.*', 'i'))) {
            var text = $(list[i]).html();
            var insert = '<li>';
            var words = text.split(' ');
            var match_words = val.toLowerCase().split(' ');
            for (var w = 0; w < words.length; w++) {
              var matches = -1;
              for (var m = 0; m < match_words.length; m++) {
                if (match_words[m].length > 0) {
                  if (words[w].replace(/'s?/ig, '').substr(0, match_words[m].replace(/'s?/ig, '').length).toLowerCase() == match_words[m].replace(/'s?/ig, '')) {
                    matches = m;
                  } 
                }
              }
              if (matches >= 0) {
                insert += '<span>';
                insert += words[w].substr(0, match_words[matches].replace(/'s?/ig, '').length);
                insert += '</span>';
                insert += words[w].substr(match_words[matches].replace(/'s?/ig, '').length);
              } else {
                insert += words[w];
              }
              insert += ' ';
            }
            insert += '</li>';
            $(ul).append(insert);
            c++;
            if (c >= 5) {
              break;
            }
          }
        }
        if (c == 0) {
          box.append('<span>No dogs found.</span>');
        }
      }
    });
    
    $('#' + name + '_box ul li').live('click', function() {
      $('#' + name + '_field').val($(this).text());
      $('#' + name).val($(this).attr('id'));
      is_set = true;
      box.hide();
    });
  });
  
  $('select[name=litter_verb]').change(function() {
    if ($(this).val() == '0') {
      $('label[for=litter_date]').text('Date Due:');
      $('div#sect_born').slideUp();
      $('select[name=count_males]').val(-1);
      $('select[name=count_females]').val(-1);
      $('input[name=desc_short]').val('');
    } else {
      $('label[for=litter_date]').text('Date Born:');
      $('div#sect_born').slideDown();
      $('select[name=count_males]').val(0);
      $('select[name=count_females]').val(0);
    }
  });
  
  $('select[name=dog_own_cat]').change(function() {
    if ($(this).val() == 'PAST') {
      $('div#sect_died').slideDown();
    } else {
      $('div#sect_died').slideUp();
      $('input[name=date_death]').val('');
    }
  });
  
  $('select[name=dog_own_state]').change(function() {
    switch ($(this).val()) {
      case 'LW':
        $('label[for=own_by]').text('Live' + ($('select[name=dog_own_cat]').val() == 'PAST' ? 'd' : 's') + ' with:');
        $('div#sect_ob').slideDown();
        break;
      case 'SW':
        $('label[for=own_by]').text('Shared with:');
        $('div#sect_ob').slideDown();
        break;
      case 'OW':
        $('label[for=own_by]').text('Owned with:');
        $('div#sect_ob').slideDown();
        break;
      case 'OB':
        $('label[for=own_by]').text('Owned by:');
        $('div#sect_ob').slideDown();
        break;
      default:
      case 'LWP':
      case 'AF':
      case 'AS':
      case 'NONE':
        $('div#sect_ob').slideUp();
        $('input[name=own_by]').val('');
        break;
    }
  });
  
  $('input.cancel').click(function() {
    window.location = $(this).attr('href');
    return false;
  });
  
  $('a#image_more').click(function() {
    var next = Number($(this).attr('value')) + 1;
    var input_html =
    '<label for="desc_short_' + next + '">Title:</label>'+
    '<input name="desc_short_' + next + '" type="text" maxlength="50" value="">'+
    '<label for="desc_long_' + next + '">Subtext:</label>'+
    '<input name="desc_long_' + next + '" class="long" type="text" maxlength="100" value="">'+
    '<label for="desc_time_' + next + '">Taken on:</label>'+
    '<input name="desc_time_' + next + '" type="text" maxlength="50" value="">'+
    '<label for="active_' + next + '">Visible:</label>'+
    '<select name="active_' + next + '" class="short">'+
      '<option value="1" selected="selected">Yes</option>'+
      '<option value="0">No</option>'+
    '</select>'+
    '<label for="image_' + next + '">Image file:</label>'+
    '<div class="multi_input_wrapper">'+
      '<input name="image_' + next + '" class="input_file" type="file" value="">'+
    '</div>'+
    '<small>File type: Image; Maximum size: 512 MB</small>'+
    '<br />';
    $(this).attr('value', next);
    $('input#img_count').val(next);
    var input = $(input_html);
    input.hide();
    $(this).before(input);
    input.slideDown();
  });
});