/*
		project     :checkDate 1.0
		filename    :checkDate.js

		creationdate: 17.03.2004
		DATENLOTSEN INFORMATIONSSYSTEME GMBH
		e-mail: info@datenlotsen.net  web: http://www.datenlotsen.net
Die Funktion checkdate() überprüft die Gültigkeit von Datumseingaben. Beim Verlassen des
Eingabefeldes wird dessen Inhalt zuerst syntaktisch, danach inhaltlich geprüft. Das
Datum wird dann in der Form 'Wochentag, Tag. Monat Jahr' ausgegeben. In einem zweiten
(versteckten) Feld dessen Namen aus dem string 'mg' und dem Feldname des Eingabefeldes
besteht, wird das Datumsformat in einer für Magic besser verständlichen Form gespeichert
(tt/mm/yyyy).
Ist die Datumseingabe nicht eindeutig wird die Seite 'kalendar.html' in einem Popupfenster
aufgerufen.
Die Funktion makecalendar() stellt einen Kalendaer in der Monatsansicht dar. Beim Anklicken
eines Datums wird das spezifizierte Datum der Aufrufenden Instanz (checkDate.html) übergeben.

ChangeLog
18/01/2005: Mehrsprachlichkeit auf Basis der Clientsprache eingebaut. Die Funktion checkdate() wurde um einen Inputparameter erweitert der eine globale language setzt.
20/09/2004: Erweiterung: Im HTML steht jetzt abhängig davon, ob das schon eingegebene DAtum gültig ist oder nicht der Warntext. Dazu die funktion
            checkdatestring eingebaut und benutzt.
14/09/2004: Kleiner Bugfix: Wenn "datetoshow" *ein* space, wird jetzt das aktuelle Datum als Start ausgegeben. (Vorher: 1910, weil " " != leer)
		    Dazu wurde ((datetoshow != '') && (datetoshow != ' ')) anstatt (datetoshow != '') eingebaut.
17/03/2004: Version 1.0 erstellt
18/03/2004: alle Javascript Funktionen in eigene Datei ausgelagert
*/
var allmonth;
var allmonth2;
var shortmonth;
var shortmonth2;

var days;
var message;

var centurystart=1920;
var formname = '';
var fieldname = '';
var language = 0;
allmonth = new Array();
allmonth[0] = new Array("Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember");
allmonth[1] = new Array("January","February","March","April","May","June","July","August","September","October","November","December");
allmonth2 = new Array();
allmonth2[0] = new Array("januar","februar","märz","april","mai","juni","juli","august","september","oktober","november","dezember");
allmonth2[1] = new Array("january","february","march","april","may","june","july","august","september","october","november","december");
shortmonth = new Array();
shortmonth[0] = new Array("Jan","Feb","Mar","Apr","Mai","Jun","Jul","Aug","Sep","Okt","Nov","Dez");
shortmonth[1] = new Array("Jan","Feb","Mar","Apr","May","June","July","Aug","Sep","Oct","Nov","Dec");
shortmonth2 = new Array();
shortmonth2[0] = new Array("jan","feb","mar","apr","mai","jun","jul","aug","sep","okt","nov","dez");
shortmonth2[1] = new Array("jan","feb","mar","apr","may","june","july","aug","sep","oct","nov","dec");
days = new Array();
days[0] = new Array ("So","Mo","Di","Mi","Do","Fr","Sa");
days[1] = new Array ("Sun","Mon","Tue","Wed","Thu","Fri","Sat");
message = new Array();
message[0] = "Bitte wählen Sie ein Datum";
message[1] = "Please select a date";

function checkdatestring(datestring){
  datepattern = /(\d{1,2})\W{1,2}(\w|\w.+)\W{1,2}(\d.+)/;
  datepattern.exec(datestring);
  var day = RegExp.$1;
  var month = RegExp.$2;
  var year = RegExp.$3;
  //alert (day+"|"+month+"|"+year);
  year = year * 1;
  if (year < 1000){
    divide = centurystart - 1900;
    if (year > divide) year = year + 1900;
    else if (year <= divide) year = year + 2000;
  }
  var monthpicture = month.search(/\d/);
  if (monthpicture == -1){
    month = getmonth(month);
    month = month * 1;
  }
  else {month = month - 1;}
  td = new Date (year, month, day);
  testday = td.getDate();
  if (day == testday && month <= 11){return true;}
  else {return false;}
}

function checkdate(formname,fieldname,clientlang) {
  if (!clientlang)language = 0;
  else language = clientlang;
  if (document[formname][fieldname].value == ''){
    document[formname]["mg"+fieldname].value = '';
    return
  }
  datepattern = /(\d{1,2})\W{1,2}(\w|\w.+)\W{1,2}(\d.+)/;
  datepattern.exec(document[formname][fieldname].value);
  var day = RegExp.$1;
  var month = RegExp.$2;
  var year = RegExp.$3;
  //alert (day+"|"+month+"|"+year);
  year = year * 1;
  if (year < 1000){
    divide = centurystart - 1900;
    if (year > divide) year = year + 1900;
    else if (year <= divide) year = year + 2000;
  }
  var monthpicture = month.search(/\d/);
  if (monthpicture == -1){
    month = getmonth(month);
    month = month * 1;
  }
  else {month = month - 1;}
  td = new Date (year, month, day);
  testday = td.getDate();
  if (day == testday && month <= 11){
    weekday = td.getDay();
    finalstring = days[language][weekday]+", "+day+" "+shortmonth[language][month]+" "+year;
    //month = month + 1;
    //finalstring = day+"."month+"."+year;
    //finalstring = month+"/"+day+"/"+year;
    month = month + 1;
    month = month.toString();
    if (month.length<2) month = "0"+month;
    day = day.toString();
    if (day.length<2) day = "0"+day;
    mgstring = day+"/"+month+"/"+year;
    document[formname][fieldname].value = finalstring;
    document[formname]["mg"+fieldname].value = mgstring;
    document[formname][fieldname].blur();
  }
  else {openCalendar(formname,fieldname)};
}

function openCalendar(form,field) {
  formname = form;
  fieldname = field;
  kalender = window.open("/kalendar.html","Kalender2","width=330,height=220,left=0,top=0,status=no,resizable=no,status=no");
}

function getmonth(month){
  for (var i=0;i<allmonth[language].length;i++){
    if (month == allmonth[language][i]) {return i}
    if (month == allmonth2[language][i]) {return i}
    if (month == shortmonth[language][i]) {return i}
    if (month == shortmonth2[language][i]) {return i}
  }
  return null;
}

function finshDateImport(formname, fieldname){
  checkdate (formname,fieldname,language);
  kalender.close();
}

function makecalendar(day,month,year){
  language = opener.language;
  var form = opener.formname;
  var field = "mg"+opener.fieldname;
  datetoshow = opener.document[form][field].value;
  //if (opener.document.forms[formname].elements[field].value)
  //{var datetoshow = opener.document.forms[formname].elements[field].value;}
  //else var datetoshow = '',
  today = new Date;
  if (!day){
    if ((datetoshow != '') && (datetoshow != ' ')){
      day = datetoshow.substring(0,2);
      highlightday = day;
    }
    else{
      day = today.getDate();
      highlightday = day;
    }
  }
  else {
    day = day * 1;
    highlightday = day
  }
  if (!month){
    if ((datetoshow != '') && (datetoshow != ' '))month = (datetoshow.substring(3,5))*1 -1;
    else month = today.getMonth();
  }
  else month = (month * 1);
  if (!year){
    if ((datetoshow != '') && (datetoshow != ' '))year = datetoshow.substring(6,10);
    else year = today.getYear();
  }
  else year = year * 1;
  if (year < 1900) year = year + 1900;
  var co = new Date (year,month,day);
  co.setDate(1);
  weekday = co.getDay();
  if (checkdatestring(datetoshow)){
    var code = "<br /><br />";
  }
  else{
    var code = message[language];
  }
  //var code = "Dargestellter Kalender:"+days[language][weekday]+" "+day+" "+allmonth[language][month]+" "+year;
  if (month == 0) {
    prevyear = year - 1;
    prevmonth = 11;
  }
  else {
    prevyear = year;
    prevmonth = month - 1;
  }
  if (month == 11) {
    nextyear = (year*1) + 1;
    nextmonth = 0;
  }
  else {
    nextyear = year;
    nextmonth = month +1;
  }
  code +="<form name='selector'>";
  code += "<table id='calendartable'><tr>";
  code += "<td class='calendarcellheader' style='text-align:left;'><a href='javascript:makecalendar(0,\""+prevmonth+"\",\""+prevyear+"\");' style='text-decoration:none'><</a></td>";
  code += "<td class='calendarcellheader' style='text-align:center;' colspan='5'>";
  code +="<select onChange='makecalendar(\"1\",this.value,document.forms[\"selector\"].elements[1].value);'>";
  for (i=0;i<allmonth[language].length;i++){
    if (i == month){code +="<option value=\""+i+"\" selected>"+allmonth[language][i]+"</option>";}
    else code +="<option value=\""+i+"\">"+allmonth[language][i]+"</option>";
  }
  code +="</select>";
  code +="<select onChange='makecalendar(\"1\",document.forms[\"selector\"].elements[0].value,this.value)'>";
  for (i=1910;i<2020;i++){
    if (i == year){code +="<option value=\""+i+"\" selected>"+i+"</option>";}
    else code +="<option value=\""+i+"\">"+i+"</option>";
  }
  code +="</select>";
  code +="</td>";
  code += "<th  class='calendarcellheader' style='text-align:right;'><a href='javascript:makecalendar(0,\""+nextmonth+"\",\""+nextyear+"\");' style='text-decoration:none'>></a></th>";
  code += "</tr><tr>";
  for(i=1;i<=days[language].length;i++){
    if (i == 7) i = 0;
    code += "<td class='calendarcellsubheader'>"+days[language][i]+"</td>\n";
    if (i == 0) i = 7;
  }
	  code += "</tr><tr>";
  if (weekday != 1){
    if (weekday == 0) weekday = 7;
    for (var i=0;i<weekday-1;i++){code += "<td></td>\n";}
  }
  co.setMonth(month + 1);
  co.setDate(co.getDate() - 1);
  lastday = co.getDate();
  openermonth = ((datetoshow.substring(3,5))*1 -1);
  for (i=1;i<lastday+1;i++){
    co.setDate(i);
    weekday = co.getDay();
    if ((today.getDate() == i && today.getMonth() == month && today.getYear() == year) || (highlightday == i && ((datetoshow.substring(3,5))*1 -1) == month && datetoshow.substring(6,10) == year)) code += "<td  class='calendarcellsactive'><a href=\"javascript:writedate('"+year+"','"+month+"','"+i+"')\" style='color:#ffffff;'>"+ i+"</a></td>";
    else if (weekday == 6 || weekday == 0)code += "<td class='calendarcellsweekend'><a href=\"javascript:writedate('"+year+"','"+month+"','"+i+"')\" style='font-weight:normal'>"+ i+"</a></td>";
    else code += "<td class='calendarcells'><a href=\"javascript:writedate('"+year+"','"+month+"','"+i+"')\">"+ i+"</a></td>";
    if (weekday == 0)code += "</tr><tr>";
  }
  code +="</table>";
  code +="</form>";
  xGetElementById("body").innerHTML = code;
  self.focus();
}


function writedate (year,month,day){
  formname = opener.formname;
  fieldname = opener.fieldname;
  //alert (formname+","+fieldname);
  month = (month*1) + 1;
  datestring = day+"/"+month+"/"+year;
  opener.document.forms[formname].elements[fieldname].value = datestring;
  opener.finshDateImport(formname,fieldname);
}

function xGetElementById(e) {
  if(typeof(e)!="string") return e;
  if(document.getElementById) e=document.getElementById(e);
  else if(document.all) e=document.all[e];
  else if(document.layers) e=xLayer(e);
  else e=null;
  return e;
}

function compareDates(formname, firstdate, seconddate) {
//use mg-dates for compareDates
  datepattern = /(\d{1,2})\W{1,2}(\w|\w.+)\W{1,2}(\d.+)/;
  datepattern.exec(document[formname][firstdate].value);
  var day = RegExp.$1;
  var month = RegExp.$2;
  var year = RegExp.$3;
  earlier = Date.UTC (year, month, day);
  datepattern.exec(document[formname][seconddate].value);
  var day = RegExp.$1;
  var month = RegExp.$2;
  var year = RegExp.$3;
  later = Date.UTC (year, month, day);
  if (later < earlier){
    return false;
  }
  else return true;
}
