
// modes
CALENDAR_MODE_NORMAL=0;
CALENDAR_MODE_READONLY=1;

// icons
var Gico_calendar=new Image();
Gico_calendar.src="/common/images/content/calendar/ico_calendar.gif";
var Gico_clear=new Image();
Gico_clear.src="/common/images/content/calendar/ico_clear.gif";



// constructor
// -----------
// name - instance name
// inp - id of input with calendar
// readonly - mode
// el - calendar holda
// im - icons margin
// mn - array with month names
// dn - array with day names
// cl - "calendar" text
// kl - "clear" text

function Calendar(name,inp,readonly,el,im,mn,dn,cl,kl){

  this.name=name;
  this.inp=document.getElementById(inp);
    this.monthNames=typeof(mn)=="undefined"?new Array("leden","únor","březen","duben","květen","červen","červenec","srpen","září","říjen","listopad","prosinec"):mn;
    this.dayNames=typeof(dn)=="undefined"?new Array("Po","Út","St","Čt","Pá","So","Ne"):dn;

  this.offsX=10;
  this.offsY=5;
  this.iconsMargin=typeof(im)=="undefined"?0:im;

  this.month=0;
  this.year=0;

  var calIco=document.createElement("img");
  calIco.src=Gico_calendar.src;
  calIco.className="calendaricon";
  calIco.calendar=this.name;
  calIco.onclick=this.displayMe;


  calIco.alt=typeof(cl)=="undefined"?"kalendář":cl;
  calIco.title=typeof(cl)=="undefined"?"kalendář":cl;



  this.iconsWidth=calIco.width;
  this.inp.parentNode.appendChild(calIco);

  if(readonly==CALENDAR_MODE_READONLY){
    this.inp.readOnly=true;

    var clrIco=document.createElement("img");
    clrIco.src=Gico_clear.src;
    clrIco.className="clearcalendaricon";
    clrIco.calendar=this.name;
    clrIco.onclick=this.clearDate;

	clrIco.alt=typeof(kl)=="undefined"?"vyčistit":kl;
    clrIco.title=typeof(kl)=="undefined"?"vyčistit":kl;


    this.inp.parentNode.appendChild(clrIco);
    this.iconsWidth+=clrIco.width;
  }

  this.inp.style.width=getElementWidth(this.inp)-this.iconsWidth-this.iconsMargin+"px";

  var calContainer=document.createElement("div");
  calContainer.style.display="none";
  calContainer.className="calendarcontainer";
  calContainer.id="calendarcontainer"+this.name;

  el.insertBefore(calContainer,el.firstChild);


  this.container=document.getElementById("calendarcontainer"+this.name);

  this.draw();

  this.originalOnclick=document.onclick;
  var self=this;


}





// draw calendar
Calendar.prototype.draw=function(y,m){
  var dateRE=new RegExp("^[0-9]{4}-[0-9]{2}-[0-9]{2}$");

     var aDate=new Date();

var ad=aDate.getDate();
 if(!browser.isIE){
        var ay=aDate.getYear()+1900;
        var am=aDate.getMonth();
      }else{
        var ay=aDate.getYear();
        var am=aDate.getMonth();
      }


  if(typeof(m)=="undefined" || typeof(y)=="undefined"){
    if(this.inp.value!="" && dateRE.test(this.inp.value)){
      var year=parseInt(this.inp.value.substr(0,4));
      var month=parseInt(this.inp.value.substr(5,2))-1;
    }else{


      if(!browser.isIE){
        var year=aDate.getYear()+1900;
        var month=aDate.getMonth();
      }else{
        var year=aDate.getYear();
        var month=aDate.getMonth();
      }
    }
  }else{
    var year=y;
    var month=m;
    if(month==-1){
      month=11;
      year--;
    }
    if(month==12){
      month=0;
      year++;
    }
  }



  this.month=month;
  this.year=year;

  var calStr="";

  calStr+='<span class="calendarbar">';
  calStr+='<span onmouseover="this.className=\'calendarbarbuttonover\'" onmouseout="this.className=\'calendarbarbutton\'" class="calendarbarbutton" onclick="'+this.name+'.draw('+(this.year-1)+','+this.month+')">&laquo;</span><span class="calendaryear">'+this.year+'</span><span class="calendarbarbutton" onmouseover="this.className=\'calendarbarbuttonover\'" onmouseout="this.className=\'calendarbarbutton\'"  onclick="'+this.name+'.draw('+(parseInt(this.year)+1)+','+this.month+')">&raquo;</span>';
  calStr+='<span onmouseover="this.className=\'calendarbarbuttonover rightcalendarbarbutton\'" onmouseout="this.className=\'calendarbarbutton rightcalendarbarbutton\'"  class="calendarbarbutton rightcalendarbarbutton" onclick="'+this.name+'.draw('+this.year+','+(this.month-1)+')">&laquo;</span><span class="calendarmonth">'+this.monthNames[this.month]+'</span><span class="calendarbarbutton" onmouseover="this.className=\'calendarbarbuttonover\'" onmouseout="this.className=\'calendarbarbutton\'"  onclick="'+this.name+'.draw('+this.year+','+(parseInt(this.month)+1)+')">&raquo;</span>';
  calStr+="</span>";

	 calStr+="<table><tr>";

	 for(var i=0;i<this.dayNames.length;i++){
  		calStr+="<th>"+this.dayNames[i]+"</th>";
 	}
  calStr+="</tr>";

  var firstDay=new Date(year,month,1).getDay();
  if(firstDay==0)firstDay = 7;
  var lastDay=new Date(year,month+1,0).getDate();


 	var dayInWeek=0;
 	for(var i=1;i<firstDay;i++){
  		calStr+='<td class="emptycalendarcell">&nbsp;</td>';
  		dayInWeek++;
	 }

  for(var i=1;i<=lastDay;i++){
  		if(dayInWeek==7){
			   calStr+="</tr><tr>";
   			dayInWeek=0;
		  }
		  dayInWeek++;
var tod=(i==ad && year==ay && month==am);
		  calStr+='<td  '+(tod?'class="actual"':'')+'  onmouseover="this.className=\'calendarcellover\'"     onmouseout="this.className=\''+(tod?'actual':'')+'\'"  onclick="'+this.name+'.putDate('+i+')">'+i+'</td>';
	 }

  for(var i=dayInWeek;i<7;i++)calStr+='<td class="emptycalendarcell">&nbsp;</td>';

  calStr+="</tr></table>";
 	this.container.innerHTML=calStr;
}




// here you can change date format
Calendar.prototype.putDate=function(day){
  var pMonth=parseInt(this.month)+1;
  var pDay=day;
  if(pMonth<10)pMonth="0"+pMonth;
  if(pDay<10)pDay="0"+pDay;
  this.inp.value=this.year+"-"+pMonth+"-"+pDay;
  this.container.style.display="none";
  this.inp.onchange();
}




Calendar.prototype.displayMe=function(){
  var cal=eval(this.calendar);
  swapDisplay(cal.container);
  cal.container.style.left=parseInt(findPosX(this)+cal.iconsWidth+cal.offsX)+"px";
  cal.container.style.top=parseInt(findPosY(this)+cal.offsY)+"px";
}


Calendar.prototype.clearDate=function(){
  var cal=eval(this.calendar);
  cal.inp.value="";
}


Calendar.prototype.toString=function(){
  return "Calendar\n\n(c) 2004 Maňas\n\n\ninstance "+this.name;
}




