///////////////////////////////////////////////////////////////////////
//                                                                   //
//    Viser en dynamisk kalender, der ved                            //
//    klik på en dato indsætter denne i et angivet                   //
//    input-felt i en html-formular                                  //
//                                                                   //
//    Kalenderen kaldes med                                          //
//    showCal(navn_på_input_field);                                  //
//                                                                   //
//    Nederst i sidens body anbringes følgende:                      // 
//    <div id='cal' class='calDiv'></div>                            //
//                                                                   //
//    Kim Bak Sep. 2002                                              //
//    Last update 20-01-2008                                         //
//                                                                   //
///////////////////////////////////////////////////////////////////////

// Initialistering
idag = new Date();
globalM = idag.getMonth() + 1;
globalY = idag.getFullYear();
var formName, submitMe;

function dateAdd(dato,i) {
    var count = i * 3600000 * 24;
    var tempDate = new Date(dato);
    var buffer = Date.parse(tempDate);
    buffer += count;
    var newDate = new Date(buffer);
    return newDate;
}

function grabDate(dato,fFelt){
   document.all[fFelt].value = dato;
   document.all.cal.style.display = 'none';
   document.all[fFelt].select();
   if(submitMe){
      document.forms[formName].submit();
   }
}


function makeCal(maaned, aar, fFelt){
   var myCal = ""
   myCal += "<table width='100%' style='border-width:0px; width:100%;' cellspacing=0>"
   myDate = new Date(aar, maaned - 1, 1);
   var dateToday = new Date();
   var strToday = dateToday.getDate() + "-" + (dateToday.getMonth()+1) + "-" + dateToday.getYear();
   myWeekday = myDate.getDay();
   if(myWeekday == 0){ myWeekday = 7; }

   // Find mandag i månedens første uge
   nextDate = dateAdd(myDate,-(myWeekday - 1));
   for(u=0;u<6;u++){
      myCal += "<tr>"
      for(i=0;i<7;i++){
         if(nextDate.getMonth() == (maaned - 1)){
            myStrDate = nextDate.getDate() + "-" + (nextDate.getMonth()+1) + "-" + nextDate.getYear()
            myCal += "<td class='calCell' ";

            //markér dags dato
            if(myStrDate == strToday){
               myCal += "id='calTodayCell' ";
            }
            myCal += "onMouseover='this.style.backgroundColor=" + '"white";' + "'"
            myCal += " onMouseOut='this.style.backgroundColor=" + '"#EDF2F6";' + "'"
            myCal += " onClick ='grabDate(" + '"' + myStrDate + '","' + fFelt + '"' + ");'>" + nextDate.getDate() + "</td>"
         }
         else {
            myCal += "<td class=disCalCell>"
            myCal += nextDate.getDate() + "</td>"
         }

         nextDate = dateAdd(nextDate, 1)
      }
      myCal += "</tr>"
      if(nextDate.getMonth() >= maaned) { break; }
   }
   myCal += "</table>"
   return myCal;
}

function submitCal(form, fFelt){
   submitMe = true;
   formName = form;
   showCal(fFelt);
}

function showCal(fFelt){
   mousex = event.clientX;
   mousey = event.clientY;
   var calDiv = document.getElementById("cal");
   calDiv.style.display = "block";
   calDiv.style.posTop = mousey;
   calDiv.style.posLeft = mousex;
   if(document.all[fFelt].value != ''){
    dArray = document.all[fFelt].value.split("-");
      if(dArray.length == 3){
         tmpM = parseInt(dArray[1]);
         tmpY = dArray[2];
         if(tmpM > 0 && tmpM <=12 && tmpY > 1000 && tmpY < 3000){
            changeCal(fFelt, tmpM, tmpY);
         }
         else{
            changeCal(fFelt, globalM, globalY);
         }
      }
      else{
         changeCal(fFelt, globalM, globalY);
      }
      
   }
   else{
      changeCal(fFelt, globalM, globalY);
   }
}

function changeCal(fFelt,maaned,aar){
   globalM = maaned;
   globalY = aar;
   var monthname = new Array("Jan","Feb","Mar","Apr","Maj","Jun","Jul","Aug","Sep","Okt","Nov","Dec");
   var shortMonthname = new Array("J","F","M","A","M","J","J","A","S","O","N","D");
   var myCal = "<table style='border-width:0px;width:100%;' cellspacing='0' margin='0'><tr><td style='padding:0px;' colspan='7'><table width='100%'><tr>"
   for(var i = 1; i < 13; i++){
      myCal += "<td class='calHead'><a class='calHeadLink' href='#' onClick='changeCal(" + '"' + fFelt + '",' + i + ", " + aar + ");'>" + shortMonthname[i-1] + "</a></td>";
   }
   myCal += "</tr></table></td></tr><tr>"
   myCal += "<td class='calHead'>"
   if(maaned > 1){
      myCal += "<a class='calHeadLink' href='javascript: changeCal(" + '"' + fFelt + '",' + (maaned - 1) + ", " + aar + ");'>"
   }
   else{
       myCal += "<a class='calHeadLink' href='javascript: changeCal(" + '"' + fFelt + '",' + (maaned + 11) + ", " + (aar - 1) + ");'>"
   }
   myCal += "<</a></td>"
   myCal += "<td style='width:30px;' class='calHead'>" + monthname[maaned - 1] + "</td><td class='calHead'>"
   if(maaned < 12){
      myCal += " <a class='calHeadLink' href='javascript: changeCal(" + '"' + fFelt + '",' + (maaned + 1) + ", " + aar + ");'>"
   }
   else{
      myCal += " <a class='calHeadLink' href='javascript: changeCal(" + '"' + fFelt + '",' + (maaned - 11) + ", " + (aar + 1) + ");'>"
   }
   myCal += "></a></td>"

   myCal += "<td class='calHead'>"
   myCal += "<a class='calHeadLink' href='javascript: changeCal(" + '"' + fFelt + '",' + maaned + ", " + (aar - 1) + ");'>"
   myCal += "<</a></td>"
   myCal += "<td style='width:30px;' class='calHead'>" + aar + "</td><td class='calHead'>"
   myCal += " <a class='calHeadLink' href='javascript: changeCal(" + '"' + fFelt + '",' + maaned + ", " + (aar + 1) + ");'>"
   myCal += "></a></td>"

   myCal += "<td class='calHead'>"
   myCal += "<a href='javascript: empty();' class='luk' onClick='document.all.cal.style.display = " + '"none";' + "'>[X]</a></td></tr></table>"
   getCal = makeCal(maaned,aar,fFelt)
   document.getElementById("cal").innerHTML = myCal + getCal;
}

function empty(){
}

function fixDate(df){
   var d = df.value;		// df = datofeltet, d = den indtastede værdi
   var newDate;
   if(d == ""){
      return;
   }
   else{
      dPattern1 = /^(\d{2})(\d{2})((\d{2})|(\d{4}))$/g
      dPattern2 = /^([0-9]{1,2})[\/|\.|\-]([0-9]{1,2})[\/|\.|\-]([0-9]{2,4})$/g

      if(d.match(dPattern1)){
         newDate = d.replace(dPattern1,"$1-$2-$3");
      }
      else if(d.match(dPattern2)){
         newDate = d.replace(dPattern2,"$1-$2-$3");
      }
      else{
         alert("Datoformatet kan ikke genkendes.\nIndtast dato som dd-mm-åååå (f.eks 22-08-2008)");
         df.select();df.focus();
         return;
      }
      if(checkDate(newDate)){
        df.value = newDate;
      }
      else{
         alert("Datoformatet kan ikke genkendes.\nIndtast dato som dd-mm-åååå (f.eks 22-08-2008)");
         df.select();df.focus();
      }
   }
}

function checkDate(d){
   dArr = d.split("-");
   dd = dArr[0];
   mm = dArr[1];
   yy = dArr[2];
   if(dd < 1 || dd > 31) return false;
   if(mm < 1 || mm > 12) return false;
   if(mm == 2 && dd > 29) return false;
   if((mm == 4 || mm == 6 || mm == 9 || mm == 11)&& (dd > 30)) return false;
   return true;

}

