/***********************************************************************
 * ade.js
 *
 * JavaScript for ade.cgi
 *
 * Uses the jQuery JavaScript Library, the jQuery-Plugins autocomplete &
 * tooltip, and optionally bgiframe.
 *
 * Also depends on adejs.cgi for AJAX-queries.
 * 
 * Author: Magnus Herold
 ***********************************************************************/


var ade_valid = false;          // prefix ade_ to avoid name-clashes

// returns string with &<> replaced by &amp;&lt;&gt;.
function escapeHTML(s) {
  return s.toString().replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
}

jQuery.noConflict();
jQuery(document).ready(function($) {

  var form = $('form[name=start]');

  // Make extended options dynamic
  var dyn_div = $('table.ade div.dyn');
  if ($(':hidden[name=extset]', form).val() == 'close') dyn_div.hide();

  var dyn_a = $('table.ade a.dyn');
  dyn_a.parent().parent().show();

  dyn_a.click(function() {
    var extset = $(':hidden[name=extset]', form);
    if (extset.val() == 'open') {
      $('img', this).attr('src', '/im/plus.gif');
      dyn_div.hide();
      extset.val('close');
    }
    else {
      $('img', this).attr('src', '/im/minus.gif');
      dyn_div.show();
      extset.val('open');
    }
  });

  // Set up special subcon-value to signal JavaScript to ade,
  // needed to bypass unnecessary "please click continue once more..."
  //$('[name=subcon]').val('continue_js');
  $(':hidden[name=lang]', form)
    .after('<input type="hidden" value="true" name="js"/>');

  // Get cid and lang from document
  var lang = $(':hidden[name=lang]', form).val();
  var cid = $(':hidden[name=cid]', form).val();

  // Set up the tooltips
  $('[tooltiptext]').each(function() {
    $(this).attr('title', $(this).attr('tooltiptext'));
  });
  $('[title]').tooltip({
    showURL: false,
    track: true,
    delay: 0,
    top: -5,
    left: 20
    //fade: 200
  });

  // enable help-popups
  $('a[target=help]').removeAttr('onclick')
    .click(function() {
      var ops = 'channelmode=no, directories=no, fullscreen=no, location=no, menubar=no, resizable=yes, scrollbars=yes, status=no, titlebar=no, toolbar=no';
      window.open(this.href, 'help', 'width=400, height=400, ' + ops);
    });

  // date_place Object
  var date_place = {
    mapgifname: cid + '.gif',
    get_from_form: function() {
      this.sday = $('input[name=sday]', form).val();
      this.imon = $('select[name=imon]', form).val();
      this.syar = $('input[name=syar]', form).val();
      this.ihou = $('select[name=ihou]', form).val();
      this.smin = $('input[name=smin]', form).val();
      this.spli = $('[name=spli]', form).val();
      this.szon = $('select[name=szon]', form).val();
      this.nongli = $('input[name=nongli]', form).val();
      this.mleap = $('select[name=mleap]', form).val();
      this.lcalm = $('select[name=lcalm]', form).val();
      //alert('get_from_form called' + '\nsday=' + this.sday + '\nimon=' + this.imon + '\nsyar=' + this.syar + '\nihou=' + this.ihou + '\nsmin=' + this.smin + '\nspli=' + this.spli + '\nszon=' + this.szon + '\nnongli=' + this.nongli + '\nmleap=' + this.mleap);
    },
    validate: function() {
      var okchcal = 1;
      if (this.nongli && this.sday != '' && this.syar != '') {
	var pars = "&func=convert_chinese_date&lang="+lang+"&sday="+this.sday+"&imon="+this.imon+"&syar="+this.syar+"&mleap="+this.mleap+"&lcalm="+this.lcalm+"&spli="+this.spli;
	var ret = 'aaa';
	$.ajax({
	   type: "GET",
	   async: false,
	   url: "adejs.cgi",
           data: pars,
	   success:function(data) {
	     //alert('I' + data + 'I');
	     ret = data;
	   }
	});
  	var jobj = eval('(' + ret + ')');
	this.syar = jobj.greg_year;
	this.imon = jobj.greg_month;
	this.sday = jobj.greg_day;
	if (jobj.greg_serr != '') { 
	  okchcal = 0;
	  //alert(jobj.greg_serr);
          $('#adechgreg').empty().append(jobj.greg_serr);
        } else {
          $('#adechgreg').empty().append(jobj.gregdat);
	}
      }
      var oksday = this.sday >= 1 && this.sday <= 31;
      var okimon = this.imon >= 1 && this.imon <= 12;
      var oksyar = this.syar >= -4000 && this.syar <= 4000;
      var okihou = this.ihou != '' && this.ihou >= 0 && this.ihou <= 23;
      var oksmin = this.smin >= 0 && this.smin <= 59;
      var okscit = Boolean(this.spli);
      var valid = oksday && okimon && oksyar && okihou && oksmin && okscit && okchcal;
      //alert('validate called.' + valid + oksday + okimon + oksyar + okihou + oksmin + okscit);
      ade_valid = valid;
      return valid;
    },
    get_ajax: function() {
      dp = this;
      $.get('adejs.cgi', {
	  func: 'get_su_mo_asc_map',
	  lang: lang, 
	  sday: dp.sday, 
	  imon: dp.imon, 
	  syar: dp.syar, 
	  ihou: dp.ihou, 
	  smin: dp.smin, 
	  szon: dp.szon, 
	  spli: dp.spli, 
	  mapgif: dp.mapgifname,
	  nongli: dp.nongli
	}, 
	function(data) {
	  if (!data) {
	    ade_valid = false;
	    $('#glyphs, #zz').empty();
            $(':checkbox[name=map]', form).triggerHandler('click');
	    return;
	  }
	  //alert('I' + data + 'I');
	  $(':checkbox[name=map]', form).triggerHandler('click');
	  var jobj = eval('(' + data + ')');
	  $('#glyphs').empty().append(jobj.sumoasc_html);
	  var time = new Date().getTime();
	  $('#map img').attr('src', '/tmpd/' + dp.mapgifname + '?' + time);
          $('#zz').empty().append(jobj.zz_content_html);
          $('#adechgreg').empty().append(jobj.gregdat);
	}
      );
    }
  };

  // is called when a date/time/place/tz - field changes its
  // value. if necessary, an ajax-query is sent to update
  // the glyphs, map and timezone.
  var dp_change_handler = function() {
      date_place.get_from_form();
      if (date_place.validate()) {
	date_place.get_ajax();
      }
      else {
	//$('#glyphs, #zz, #adechgreg').empty();
	$('#glyphs, #zz').empty();
        $(':checkbox[name=map]', form).triggerHandler('click');
      }
  };

  // gender-rb's: set handler to show/hide partner reference and 
  // change glyph if necessary
  // also, change text of "event"
  $(':radio[name=ssx]', form).click(function() {
    var val = $(this).val();
    if (val == 'm') {
      $('#gend > span:eq(2)').show();
      $('#gend > span:eq(3)').hide();
      $('label[for=hom_cb] img', form).attr('src', '/im/rel_mm.gif');
      $('#hom_tr').show();
    }
    else if (val == 'f') {
      $('#gend > span:eq(2)').show();
      $('#gend > span:eq(3)').hide();
      $('label[for=hom_cb] img', form).attr('src', '/im/rel_ff.gif');
      $('#hom_tr').show();
    }
    else {
      $('#gend > span:eq(2)').hide();
      $('#gend > span:eq(3)').show();
      $('#hom_tr').hide();
    }
  });

  // map-checkbox, set handler
  $(':checkbox[name=map]', form).click(function() {
      if (this.checked && ade_valid) { 
	$('#map').show();
      }
      else {
        $('#map').hide();
      }
    });  

  // time-zone input, set handler
  $('#tz_input').change(dp_change_handler);

  // Make autocomplete for scit-input
  $('input[name=scit]', form).autocomplete('adejs.cgi', {
    max: 300,
    minChars: 2,
    cacheLength: 5,
    matchSubset: false,
    mustMatch: false,
    selectFirst: false,
    multipleSeparator: 'abcdexyz', // only workaround for a bug!
    extraParams: {
      func: "place_query",
      sctr: function() { return $('select[name=sctr]', form).val(); },
      lang: lang
    },
    formatItem: function(rowstr) {
      if (rowstr.length > 2) {
        //if (rowstr[3] != 0) 
          $('#serr_place').empty().append(rowstr[2]);
        //else
          //$('#serr_place').empty();
      }
      /*if (rowstr[0].length > 5) {
        var rowsplit = rowstr[0].split(',');
	var head = rowsplit.shift();
	var tail = rowsplit.join(',');
        return head + ',<small>' + tail + '</small>';
      }*/
      if (rowstr[0].length > 50) {
        return rowstr[0].slice(0, 50);
      }
      return rowstr[0];
    }
  });
  // If a city is selected from the list, create a hidden input "spli"
  // result() is a method from the autocomplete plugin
  $('input[name=scit]', form).result(function(e, data, value) {
    if ($(':hidden[name=spli]', form).length == 0)
      $(this).after('<input type="hidden" name="spli"/>');
    $(':hidden[name=spli]', form).val(data[1]);
    dp_change_handler();
  });
  $('input[name=scit]', form).change(function() { 
    //if (!$.trim($(this).val())) {
      $(':hidden[name=spli]', form).remove();
      dp_change_handler();
    //}
  });

  // flush the autocomplete-cache if another country is selected 
  // (this is necessary for correct operation)
  $('select[name=sctr]', form).change(function() {
    $('input[name=scit]', form).flushCache();
  });

  // set "change"-handler for date/place inputs
  var dp_inputs = ['input[name=sday]', 'select[name=imon]', 'input[name=syar]',
      'select[name=ihou]', 'input[name=smin]', 'select[name=spli]', 'select[name=mleap]', 'select[name=lcalm]'];
  $(dp_inputs.join(', '), form).change(dp_change_handler);

  // init
  dp_change_handler();
});



