  // 0 .. sunday
  // 1 .. monday
  // 2 ...
  firstDayofWeek = 1; 

  weekdays_names = new Array( "Po" , "Út" , "St" , "Čt" , "Pá" , "So" , "Ne" );

  months_names = new Array( "Leden" , "Únor" , "Březen" , "Duben" , "Květen" , "Červen" , "Červenec" , "Srpen" , "Září" , "Říjen" , "Listopad" , "Prosinec" );
  showPrevMonthDays = true;
  showNextMonthDays = true;
  readonly_input = true;
//  year_from = 2005
//  year_to = 2008

  folder = "js/JSXeloCallendar";

  function RebuildDate( input )
  {
    // result must be specified number of milliseconds to/from midnight January 1, 1970
    day_pos = input.indexOf( "." );
    day = input.substr(0,day_pos);
    tmp = input.substr(day_pos+1);

    month_pos = tmp.indexOf( "." );
    month = Number ( tmp.substr(0,month_pos) ) - 1;

    year = tmp.substr(month_pos+1);

    tmpDate = new Date();
    tmpDate.setFullYear( year , month , day );
    return tmpDate.getTime();
  }

  function RebuildDate_inverse( output )
  {
    // result must be it, what u want set 2 input 
    tmpDate = new Date();
    tmpDate.setTime( output );
    return tmpDate.getDate() + "." + ( tmpDate.getMonth() + 1 ) + ". " + tmpDate.getFullYear();
  }
 




  var firstWeekDayofCurMonth , DayCountCurMonth , months , years , callendar , prevMonthDays , nextMonthDays , callendarcontents , name , selDay , callendar_HTML_obj , callendar_count
  selDay = new Array();
  callendarcontents = new Array();
  callendar_HTML_obj = new Array();
  callendar_count = 0;
 
  function ConstrCall( fname , selDate )
  {
    callendar_count++;
    selDay[ callendar_count - 1 ] = new Date();
    if ( selDate != "" ) selDay[ callendar_count - 1 ].setTime( RebuildDate( selDate ) );
    document.write( "<div style=\"width:143px;height:18px;border:2px solid gray;line-height:20px;margin:0;padding:0;\"><input type=\"text\" class=\"Callendar_input\" name=\"" + fname + "\" id=\"" + fname + "\" value=\"" + selDate + "\"" + ( readonly_input ? "readonly=\"readonly\"" : "" ) + ">" );
    callendarcontents[ callendar_count - 1 ] = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"Callendar_Container\"><tr><td class=\"Callendar_controlHeader\">" + getCallendar_controlHeader( fname , selDay[ callendar_count - 1 ].getMonth() , selDay[ callendar_count - 1 ].getFullYear() , callendar_count - 1 ) + "</td></tr>";
    callendarcontents[ callendar_count - 1 ] += "<tr><td><span id=\"container_" + fname + "\"></span></td></tr></table>";

    document.write( "<button type=\"button\" class=\"Callendar_button\" onclick=\"showcal( '" + fname + "' , this , " + ( callendar_count - 1 ) + " );\"><img src=\"/ck/images/calendar22x18.gif\" style=\"margin:0;padding:0;float:right;\" border=\"0\"></button></div>" );
  }



  function getCallendar_controlHeader( fname , month , year , id )
  {

    months = getComboSpinnerMonth( month , fname , id );

    years = getSpinnerYear( year , fname , id );

    return "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"100%\"><tr><td>" + months + "</td><td align=\"right\">" + years + "</td><td width=\"2\">&nbsp;</td><td align=\"center\" style=\"width:24px;\"><div onclick=\"hidecallendar_CSS('" + id + "');\" class=\"close_callendar\"><img src=\"" + folder + "/images/cross.gif\" /></div></td></tr></table>";

  }

  function getComboYear( year_from , year_to , year , fname , id )
  {
    years = "<select id=\"callendar_year_" + fname + "\" onchange=\"javascript:ShowMonth( '" + fname + "' , document.getElementById( 'callendar_month_" + fname + "' ).value , this.value , '" + id + "' );\">";
    for ( i = year_from; i < year_to + 1; i++ )
    {
      years += "<option value=\"" + i + "\"";
      if ( year == i ) years += " selected=\"selected\" ";
      years += ">" + i + "</option>";
    }
    years += "</select>";
    return years;
  }

  function getSpinnerYear( year , fname , id )
  {
    years = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"callendar_spinner_container\" ><tr><td rowspan=\"2\"><input size=\"4\" readonly=\"readonly\" value=\"" + year + "\" type=\"text\" id=\"callendar_year_" + fname + "\"></td>";
    years += "<td class=\"callendar_spinner_bck\"><img src=\"" + folder + "/images/up.gif\" border=\"0\" style=\"cursor: pointer;\" onmouseover=\"this.src='" + folder + "/images/up_r.gif';\" onmouseout=\"this.src='" + folder + "/images/up.gif';\" onclick=\"javascript:document.getElementById( 'callendar_year_" + fname + "' ).value = Number( document.getElementById( 'callendar_year_" + fname + "' ).value ) - 1 ;ShowMonth( '" + fname + "' , document.getElementById( 'callendar_month_" + fname + "' ).value , document.getElementById( 'callendar_year_" + fname + "' ).value , '" + id + "' );\" /></td></tr>";
    years += "<tr><td class=\"callendar_spinner_bck\"><img src=\"" + folder + "/images/down.gif\" border=\"0\" style=\"cursor: pointer;\" onmouseover=\"this.src='" + folder + "/images/down_r.gif';\" onmouseout=\"this.src='" + folder + "/images/down.gif';\" onclick=\"javascript:document.getElementById( 'callendar_year_" + fname + "' ).value = Number( document.getElementById( 'callendar_year_" + fname + "' ).value ) + 1; ShowMonth( '" + fname + "' , document.getElementById( 'callendar_month_" + fname + "' ).value , document.getElementById( 'callendar_year_" + fname + "' ).value , '" + id + "' );\" /></td></tr></table>";
    return years;
  }

  function getComboMonth( month , fname , id )
  {
    months = "<select id=\"callendar_month_" + fname + "\" onchange=\"ShowMonth( '" + fname + "' , this.value , document.getElementById( 'callendar_year_" + fname + "' ).value , '" + id + "' );\">";
    for ( i = 0; i < months_names.length; i++ )
    {
      months += "<option value=\"" + i + "\"";
      if ( month == i ) months += " selected=\"selected\" ";
      months += ">" + months_names[i] + "</option>";
    }
    months += "</select>";
    return months;
  }

  function getComboSpinnerMonth( month , fname , id )
  {
    months = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"callendar_spinner_container\" ><tr><td rowspan=\"2\">";

    months += getComboMonth( month , fname , id );

    months += "</td>";
    months += "<td class=\"callendar_spinner_bck\"><img src=\"" + folder + "/images/up.gif\" border=\"0\" style=\"cursor: pointer;margin:0px;padding:0px;\" onmouseover=\"this.src='" + folder + "/images/up_r.gif';\" onmouseout=\"this.src='" + folder + "/images/up.gif';\" onclick=\"javascript:DeIncMonth( '" + fname + "' ); ShowMonth( '" + fname + "' , document.getElementById( 'callendar_month_" + fname + "' ).value , document.getElementById( 'callendar_year_" + fname + "' ).value , '" + id + "' );\" /></td></tr>";
    months += "<tr><td class=\"callendar_spinner_bck\"><img src=\"" + folder + "/images/down.gif\" border=\"0\" style=\"cursor: pointer;margin:0px;padding:0px;\" onmouseover=\"this.src='" + folder + "/images/down_r.gif';\" onmouseout=\"this.src='" + folder + "/images/down.gif';\" onclick=\"javascript:IncMonth( '" + fname + "' ); ShowMonth( '" + fname + "' , document.getElementById( 'callendar_month_" + fname + "' ).value , document.getElementById( 'callendar_year_" + fname + "' ).value , '" + id + "' );\" /></td></tr></table>";
    return months;
  }

  function DeIncMonth( fname )
  {
    document.getElementById( "callendar_month_" + fname ).value = document.getElementById( "callendar_month_" + fname ).value - 1;
    if ( document.getElementById( "callendar_month_" + fname ).value == "" ) 
    {
      document.getElementById( "callendar_month_" + fname ).value = 11; 
      document.getElementById( "callendar_year_" + fname ).value = Number( document.getElementById( "callendar_year_" + fname ).value ) - 1 ;
    }
  }

  function IncMonth( fname )
  {
    document.getElementById( "callendar_month_" + fname ).value = Number( document.getElementById( "callendar_month_" + fname ).value ) + 1;
    if ( document.getElementById( "callendar_month_" + fname ).value == "" ) 
    {
      document.getElementById( "callendar_month_" + fname ).value = 0; 
      document.getElementById( "callendar_year_" + fname ).value = Number( document.getElementById( "callendar_year_" + fname ).value ) + 1 ;
    }
  }

  function selectDate( fname , year , month , day , id )
  {
    selDay[ id ].setFullYear( year , month , day );
    document.getElementById( fname ).value = RebuildDate_inverse( selDay[ id ].getTime() );
  }

  
  function ShowMonth( fname , month , year , id )
  {
    firstWeekDayofCurMonth = getfirstWeekDayofMonth( month , year );
    DayCountCurMonth = getDayCountofMonth( month , year );
    callendar = "";


    callendar += "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" class=\"Callendar_table\">";

    /*week days*/
    callendar += "<tr>\r\n" ;
    for ( i = 0; i < weekdays_names.length; i++ )
    {
      callendar +=  "<td class=\"Callendar_weeknamedays\">" + weekdays_names[i] + "</td>";
    }
    callendar += "</tr>\r\n" ;


    /*previous month*/

    prevMonthDays = getDayCountofMonth( getPrevMonth( month ) , getPrevMonthYear( month , year ) );
    different = ( firstWeekDayofCurMonth - firstDayofWeek );
    if ( different < 0 ) different = 7 + different;

    for ( i = prevMonthDays - different + 1 ; i < prevMonthDays + 1; i++ )
    {
      if ( i == prevMonthDays - different + 1 ) callendar += "<tr>" ;
      callendar += "<td class=\"Callendar_weekprevdays\">";
      if ( showPrevMonthDays ) callendar += i;
      callendar += "</td>";
    }

    selMonth = ( month == selDay[ id ].getMonth() ) &&  ( year == selDay[ id ].getFullYear() );
    selDate = selDay[ id ].getDate();

    /*current month*/
    for ( i = 1; i < DayCountCurMonth + 1 ; i++ )
    {
      if ( ( i + firstWeekDayofCurMonth - firstDayofWeek - 1 ) % 7 == 0 ) callendar += "<tr>" ;
      if ( selMonth && ( i == selDate ) ) callendar +=  "<td class=\"Callendar_seltext\"><div class=\"Callendar_seltext\" ";
      else callendar += "<td class=\"Callendar_weekdays\"><div class=\"Callendar_weekdays\" ";
      callendar += "onclick=\"selectDate('" + fname + "','" + year + "','" + month + "','" + i + "' , '" + id  + "' );hidecallendar_CSS( '" + id  + "' );\">";
      callendar += i + "</div></td>";
      if ( ( i + firstWeekDayofCurMonth - firstDayofWeek - 1 + 1 ) % 7 == 0 ) callendar += "</tr>\r\n" ;
    }

    /*next month*/
    nextMonthDays = 7 - ( ( firstWeekDayofCurMonth - firstDayofWeek ) + DayCountCurMonth ) % 7;
    if ( nextMonthDays == 7 ) nextMonthDays = 0;
    for ( i = 1 ; i < nextMonthDays + 1; i++ )
    {
      callendar += "<td class=\"Callendar_weeknextdays\">";
      if ( showNextMonthDays ) callendar += i;
      callendar += "</td>";
      if ( i == nextMonthDays ) callendar += "</tr>" ;
    }

    callendar += "</table>";    

    setInnerHTML( "container_" + fname , callendar );
  }


  function getfirstWeekDayofMonth( )
  {
    var tmpDate = new Date();
    month = tmpDate.getMonth();
    year = tmpDate.getFullYear();
    if ( arguments.length > 0 ) month = arguments[0];
    if ( arguments.length > 1 ) year = arguments[1];
    tmpDate.setFullYear( year , month , 1 );
    return tmpDate.getDay();
  }
  function getDayCountofMonth( )
  {
    var tmpDate = new Date();
    month = tmpDate.getMonth();
    year = tmpDate.getFullYear();
    if ( arguments.length > 0 ) month = arguments[0];
    if ( arguments.length > 1 ) year = arguments[1];
    month = getNextMonth( month );
    year = getNextMonthYear( month , year );

    tmpDate.setFullYear( year , month , 1 );
    tmpDate.setHours( 0 , 0 , 0 , 0 );
    tmpDate.setTime( tmpDate.getTime() - 1 );
    return tmpDate.getDate();
  }


  function getCurrentMonth( )
  {
    var tmpDate = new Date();
    return tmpDate.getMonth();
  }

  function getCurrentYear( )
  {
    var tmpDate = new Date();
    return tmpDate.getFullYear();
  }

  function getPrevMonth( month )
  {
    if ( month == 0 ) return 11;
    else return Number( month ) - 1;
  }
  function getNextMonth( month )
  {
    if ( month == 11 ) return 0;
    else return Number( month ) + 1;
  }
  function getPrevMonthYear( month , year )
  {
    if ( month == 0 ) return year - 1;
    else return year;
  }
  function getNextMonthYear( month , year )
  {
    if ( month == 11 ) return year + 1;
    else return year;
  }


  function setInnerHTML( spId , html )
  {
   if (navigator.appName=='Microsoft Internet Explorer')
   {
      document.all[spId].innerHTML=html;
   } else
   {
      with (document.getElementById(spId)) {
          innerHTML=html;
      }
   }
  }




  function showcallendar_CSS( obj , id ){
    if ( callendar_HTML_obj[ id ] == null ) 
    {
      callendar_HTML_obj[ id ] = document.getElementById( "callendarbox" + id  );
      hidecallendar_CSS( id );
      callendar_HTML_obj[ id ].innerHTML = callendarcontents[ id ];
    }
    callendar_HTML_obj[ id ].style.left = "" + ( findPosX( obj )  ) + "px";
    callendar_HTML_obj[ id ].style.top = "" + ( findPosY( obj ) + obj.offsetHeight ) + "px";
    callendar_HTML_obj[ id ].style.visibility = "visible";
    callendar_HTML_obj[ id ].style.position = "absolute";
  }

  function hidecallendar_CSS( id ){
    callendar_HTML_obj[ id ].style.visibility = "hidden";
    callendar_HTML_obj[ id ].style.left = "-500px";
  }



  function showcal( fname , obj , id )
  {
    if ( document.getElementById( fname ).value != "" ) selDay[ id ].setTime( RebuildDate( document.getElementById( fname ).value ) );
    showcallendar_CSS( obj , id );
    document.getElementById( "callendar_month_" + fname ).value = selDay[ id ].getMonth(); 
    document.getElementById( "callendar_year_" + fname ).value = selDay[ id ].getFullYear();
    ShowMonth( fname , selDay[ id ].getMonth() , selDay[ id ].getFullYear() , id );
  }

  function createcallendarboxes(){
    for ( i = 0 ; i < callendar_count ; i++ )
    {
      var divblock = document.createElement( "div" );
      divblock.setAttribute( "id" , "callendarbox" + i );
      document.body.appendChild( divblock );
    }
  }

  if ( window.addEventListener )
    window.addEventListener("load", createcallendarboxes , false)
  else if ( window.attachEvent )
    window.attachEvent( "onload" , createcallendarboxes )
  else if ( document.getElementById )
    window.onload = createcallendarboxes
  else
    createcallendarboxes


