// kalendar 30.1.2008

//======================================================
// funkce precte XML odpoved od serveru
// @param xmlhttp odpoved serveru 
//------------------------------------------------------

function updateProgram(xmlhttp) {
    if (xmlhttp.readyState == 4) {
        var odpovedi = xmlhttp.responseXML.getElementsByTagName('den');
        resetProgram(); 
        var num=0;
        for (var i=0; i < odpovedi.length; i++) {
            num = parseInt(odpovedi[i].getAttribute('num'));
            program[num]=odpovedi[i].firstChild.data;
            setDayActive(num);
        }
    }
}

//======================================================
// funkce nastavi dany den jako aktivni
// @param day cislo dne v mesici, ktery ma byt oznacen
//------------------------------------------------------

function setDayActive(day){
  var table = getObj('cTable');
  var tds = table.getElementsByTagName('td');
  for (var i=0; i < tds.length; i++) {
    if(tds[i].getAttribute('rel') == day && tds[i].className != 'disabled'){
      if(tds[i].className == 'today' || tds[i].className == 'active_today'){
        fieldSetActiveToday(tds[i]);
        tds[i].onmouseover=cs_over_active;
        tds[i].onmouseout=cs_out_active_today;
      }
      else{
        fieldSetActive(tds[i]);
        tds[i].onmouseover=cs_over_active;
        tds[i].onmouseout=cs_out_active;
      }
    }
  }
}

//======================================================
// funkce vyprazdni pole program
//------------------------------------------------------

function resetProgram(){
  for(var i=0; i < program.length; i++)
    program[i]=null;
}

function getObj(objID)
{
    if (document.getElementById) {return document.getElementById(objID);}
    else if (document.all) {return document.all[objID];}
    else if (document.layers) {return document.layers[objID];}
}

//======================================================
// funkce vrati cas v databazovem tvary
// @param y rok
// @param m mesic
// @param d den
//------------------------------------------------------

function getDbTime(y, m, d){
  m++;
  if(m<10) m='0'+m;
  if(d<10) d='0'+d;
  
  return (d+'-'+m+'-'+y);
}

//======================================================
// funkce vrati instanci tridy date s predanym datem
// @param d datum ve tvaru yyyy-mm-dd
//------------------------------------------------------

function getDateFromDB(d){

  var p = d.split("-");
  var m = parseInt(p[1])-1;
  var c = new Date(p[0], m, p[2], 0, 0, 0);
  return c;
}

function isChild(s,d) {
	while(s) {
		if (s==d) 
			return true;
		s=s.parentNode;
	}
	return false;
}

function findPosX(obj) {
    var curleft = 0;
    if (obj.offsetParent) {
        while (1) {
            curleft+=obj.offsetLeft;
            if (!obj.offsetParent) {
                break;
            }
            obj=obj.offsetParent;
        }
    } else if (obj.x) {
        curleft+=obj.x;
    }
    return curleft;
}
function findPosY(obj) {
    var curtop = 0;
    if (obj.offsetParent) {
        while (1) {
            curtop+=obj.offsetTop;
            if (!obj.offsetParent) {
                break;
            }
            obj=obj.offsetParent;
        }
    } else if (obj.y) {
        curtop+=obj.y;
    }
    return curtop;
}

function isset(varname){
  return(typeof(window[varname])!='undefined');
}

var now = new Date;
var staticCurentDay=now.getDate();
var staticCurentMonth=now.getMonth();
var staticCurentYear=now.getFullYear();
var curentMonth=now.getMonth();
var curentYear=now.getFullYear();

if(!isset('lang')) lang='cz';
switch(lang){
  case 'cz' : var mn=new Array('Leden','Únor','Březen','Duben','Květen','Červen','Červenec','Srpen','Září','Říjen','Listopad','Prosinec'); break;
  case 'en' : var mn=new Array('January','February','March','April','May','June','July','August','September','October','November','December'); break;
  case 'fr' : var mn=new Array('Janvier','Février','Mars','Avril','Mai','Juin','Jillet','Août','Septembre','Octobre','Novembre','Décembre'); break;
}

var mnn=new Array('31','28','31','30','31','30','31','31','30','31','30','31');
var mnl=new Array('31','29','31','30','31','30','31','31','30','31','30','31');

var responseScript='/inc/get_program.php';
var program = new Array();


//======================================================
// funkce vypise do kodu strukturu kalendare
// @param obj objekt, do ktereho se ma kalendar umistit
// @param q cesta, kam maji vest odkazy
// @param curDate nepovinny, vychozi datum
//------------------------------------------------------
function calendar(obj, q, curDate) {

  query=q;
	if(curDate.length > 0){
    var c = getDateFromDB(curDate);
    staticCurentDay = c.getDate();
    staticCurentMonth = c.getMonth();
    staticCurentYear = c.getFullYear();
    curentMonth = staticCurentMonth;
    curentYear = staticCurentYear;
    
  }

	document.write('<table id="cTable" cellspacing="0">');
  document.write('<tr><td class="prev_month" onclick="prevMonth()">&nbsp;</td><td colspan=5 id="mns" class="month_name"></td><td class="next_month" onclick="nextMonth()"></td></tr>');
  switch(lang){
    case 'cz' : document.write('<tr class="days"><td>Po</td><td>Út</td><td>St</td><td>Čt</td><td>Pá</td><td>So</td><td>Ne</td></tr>'); break;
    case 'en' : document.write('<tr class="days"><td>Mo</td><td>Tu</td><td>We</td><td>Th</td><td>Fr</td><td>Sa</td><td>Su</td></tr>'); break;
    case 'fr' : document.write('<tr class="days"><td>Lu</td><td>Ma</td><td>Me</td><td>Je</td><td>Ve</td><td>Sa</td><td>Di</td></tr>'); break;
  }
  for(var row=1;row<=6;row++) {
  	document.write('<tr>');
	  for(var col=1;col<=7;col++) {
		  num= 7 * (row-1) - (-col);
		  document.write('<td id="v' + num + '">&nbsp;</td>');
	  }
	  document.write('</tr>');
  }
  document.write('</table>');

	getObj('cTable').style.left=findPosX(obj)+'px';
	getObj('cTable').style.top=(findPosY(obj)+2)+'px';
	getObj('cTable').style.display='block';
	
	initCalendar(staticCurentYear, staticCurentMonth);  // Y,m
}

function evtTgt(e)
{
	var el;
	if(e.target)el=e.target;
	else if(e.srcElement)el=e.srcElement;
	if(el.nodeType==3)el=el.parentNode; // defeat Safari bug
	return el;
}
function EvtObj(e){if(!e)e=window.event;return e;}

//======================================================
// funkce obsluhuji udalosti - zjisti elemnt, ktery udalost
// vyvolal a preda jeje jako parametr funkci na zmenu className
// @param e udalost
//------------------------------------------------------


function cs_over(e) {
	fieldSetHighlighted(evtTgt(EvtObj(e)));
}
function cs_out(e) {
	fieldSetNormal(evtTgt(EvtObj(e)));
}
function cs_out_today(e) {
	fieldSetToday(evtTgt(EvtObj(e)));
}
function cs_out_active(e) {
	fieldSetActive(evtTgt(EvtObj(e)));
}
function cs_over_active(e) {
	fieldSetHlActive(evtTgt(EvtObj(e)));
}
function cs_out_active_today(e) {
	fieldSetActiveToday(evtTgt(EvtObj(e)));
}

//======================================================
// funkce zmeni adresu dokumentu na zvoleny den
// @param e udalost
//------------------------------------------------------

function showDay(e) {
  dayNum = evtTgt(EvtObj(e)).getAttribute('rel');
  var dayTitle = program[dayNum];

  if(typeof(dayTitle) != 'undefined' && dayTitle != null) dayURL = dayTitle + '-';
  else dayURL = '';
  
	location.href=query + dayURL + getDbTime(curentYear, curentMonth, dayNum)+'.html';
}

//======================================================
// funkce zmeni className daneho elementy
// @param e udalost
//------------------------------------------------------

function fieldSetNormal(obj) {
	obj.className='normal';
}

function fieldSetDisabled(obj) {
	obj.className='disabled';
}

function fieldSetHighlighted(obj) {
  obj.className='highlighted';
}

function fieldSetHlActive(obj) {
  obj.className='highlighted_active';
}

function fieldSetActive(obj) {
  obj.className='active';
}

function fieldSetActiveToday(obj) {
  obj.className='active_today';
}

function fieldSetToday(obj) {
  obj.className = 'today';
}

//======================================================
// funkce vepise do pripravene struktury kalendare aktualni hodnoty
// @param year rok
// @param month mesic
//------------------------------------------------------

function initCalendar(year, month) {
	getObj('mns').innerHTML=mn[month]+ ' ' + year;  
  pdm=new Date();
  pdm.setDate(1);
	pdm.setFullYear(year);
	pdm.setMonth(month);
  cdt=pdm.getDay();
  sd=pdm.getTime()-cdt*86400000;
  n=new Date();
  for(var d=1; d <= 42; d++){
    fieldSetNormal(getObj('v'+parseInt(d)));
    sd+=86400000;
    ad=new Date(sd);
    getObj('v'+parseInt(d)).innerHTML=ad.getDate();	
    getObj('v'+parseInt(d)).setAttribute('rel', ad.getDate());
    if(ad.getMonth()==month){
      if(ad.getDate()==n.getDate() && ad.getMonth()==n.getMonth() && ad.getFullYear()==n.getFullYear()){
        fieldSetToday(getObj('v'+parseInt(d)));
        getObj('v'+parseInt(d)).onmouseover=cs_over;
		    getObj('v'+parseInt(d)).onmouseout=cs_out_today;
      }
      else{
        getObj('v'+parseInt(d)).onmouseover=cs_over;
		    getObj('v'+parseInt(d)).onmouseout=cs_out;
      }
      getObj('v'+parseInt(d)).onclick=showDay;
    }
    else{
      fieldSetDisabled(getObj('v'+parseInt(d)));
      getObj('v'+parseInt(d)).onmouseover=null;
		  getObj('v'+parseInt(d)).onmouseout=null;
      getObj('v'+parseInt(d)).onclick=null;
    }
  }
  send_xmlhttprequest(updateProgram, 'GET', responseScript + '?year=' + curentYear + '&month=' + curentMonth + '&lang=' + lang);
}

//======================================================
// funkce zmeni adresu dokumentu na zvoleny den
// @param e udalost
//------------------------------------------------------

function nextMonth() {
	marr=((curentYear%4)==0)?mnl:mnn;

	curentMonth+=1;
	if (curentMonth>=12) {
		curentMonth=0;
		curentYear++;
	}

	initCalendar(curentYear,curentMonth);
}

function prevMonth() {
	marr=((curentYear%4)==0)?mnl:mnn;
	
	curentMonth-=1;
	if (curentMonth<0) {
		curentMonth=11;
		curentYear--;
	}

	initCalendar(curentYear,curentMonth);
}
