//######################### EXTERNAL CALENDAR ###############################
//##                                                                       ##
//###########################################################################

function openCalendarFrame(ObjectID,FrameID) {
    //
    if (CurFrameID) closeCalendarFrame(CurFrameID);
    CurFrameID = FrameID;
    //
    if (!CalendarFrames[FrameID]) {createDocument(ObjectID,FrameID);}
    document.getElementById(FrameID).style.display='block';
}

function createDocument(ObjectID,FrameID) {
    Frame = window.frames[FrameID];
	if(!Frame)
		Frame = document.getElementById(FrameID).contentWindow;
    CalendarFrames[FrameID]=true;
    Frame.document.write('<html><head><title>Календарь</title><meta name="Author" Content="Copyright (c) StudioSVET www.studiosvet.ru"><meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><meta name="Robots" content="INDEX, FOLLOW"></head><body><div id="Calendar" name="Calendar"></div></body></html>');
	
	style = Frame.document.createElement('link');
	style.rel = 'stylesheet';
	style.type = 'text/css';
	style.href = 'calendar.css';
	Frame.document.getElementsByTagName('head')[0].appendChild(style);
	
    calendar(ObjectID,'Calendar',FrameID);
}

function closeCalendarFrame(FrameID) {
    document.getElementById(FrameID).style.display='none';
}

var Classes = new Array();
var CalendarFrames = new Object();
var CurFrameID = '';

//######################### INTERNAL CALENDAR ###############################
//##                                                                       ##
//###########################################################################
function calendarClose(fname,cid,FrameID,id,date,add_events,todayDate,isClose) {
    calendarResult=id;    
    if (id) document.getElementById(fname).value=id.substr(8)+"."+id.substr(5,2)+"."+id.substr(0,4);
  
    if(id) {
        todayDate=id;
        calendarPopulate(fname,cid,FrameID,date,add_events,todayDate,isClose);
        //document.getElementById(id).className='calendarToday';
    }
    if (isClose==0) calendarRemove(FrameID);  
//	alert('before '+fname+'= '+document.getElementById(fname).value);
    document.getElementById(fname).focus();
//	alert('after= '+document.getElementById(fname).value);
}

function calendarRemove(FrameID) {
    document.getElementById(FrameID).style.display = 'none';
}

var calendarResult='';
var Classes=new Array();

var targetId='';
var CurDivID='';

function calendar(ObjectID,cid,FrameID,events,todayDate,isClose) {  
  if (isClose==undefined)   isClose=0;
  if (todayDate==undefined) todayDate=0;
  if (events==undefined)    events=0;
  //calendarRemove(CurDivID);
  //CurDivID=fname;
  if(document.getElementById('advanced')) {
      if(optShown) {
          showHideAdditonal();
      }
  }
  date = document.getElementById(ObjectID).value;  

  calendarRemove(FrameID);

  //var div=Frame.document.getElementById("Calendar");
  //div.name="asd";
  //var textBox = document.getElementById(ObjectID);
  /*
  if(navigator.userAgent.indexOf("Firefox") != -1) {
    div.style.position='fixed';
  } else {
    div.style.position='absolute';
  }
  */

  //div.style.zIndex=999;
  calendarPopulate(ObjectID,cid,FrameID,date,events,todayDate,isClose);
}

function calendarPopulate(fname,cid,FrameID,date,add_events,todayDate,isClose) {
  Frame = window.frames[FrameID];
  if(!Frame)
		Frame = document.getElementById(FrameID).contentWindow;

  var dayNames=new Array('Mo','Tu','We','Th','Fr','Sa','Su');
  var monthNames=new Array('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul','Aug', 'Sep', 'Oct', 'Nov', 'Dec');
  var id;
  var styleClass='';
  var table='';
  var events= 'onClick="parent.calendarClose(\''+fname+'\',\''+cid+'\',\''+FrameID+'\',this.id,\''+date+'\',\''+add_events+'\',\''+todayDate+'\',\''+isClose+'\');'+((add_events && add_events>0)? 'self.location.href=\''+add_events+'\'+\'/\'+document.getElementById(\''+fname+'\').value.replace(/\\\//g,\'-\');':'')+'" onMouseOver="this.className=\'calendarHighlight\';" onMouseOut="this.className=parent.Classes[this.id];"';      
  //var events= 'onClick="calendarClose(\''+fname+'\',\''+cid+'\',this.id,\''+isClose+'\');'+((add_events)? 'document.getElementById(\''+add_events+'\').submit();':'')+'" onMouseOver="this.className=\'calendarHighlight\';" onMouseOut="this.className=Classes[this.id];"';    
  //if(add_events && add_events!="undefined") events=events.replace(/;" /,'; document.getElementById(\''+add_events+'\').submit()";')+events;    
  var slash_symbol=".";//"/";

  var dateArray = date.split(slash_symbol);  
  if(date.substr(2,1)=="."){
  	var nda=dateArray;
  	dateArray[0]=nda[2];
  	dateArray[2]=nda[0];
  }
  today = new Date();
  if(dateArray[0]=='' || dateArray[1]=='' || dateArray[2]=='') {
	  dateArray[0] = today.getFullYear();
	  dateArray[1] = today.getMonth()+1;
	  dateArray[2] = today.getDate();
  }
  if (todayDate) {
      var todayDateArray = todayDate.split(slash_symbol);
      today.setYear(todayDateArray[0]);
      today.setMonth(todayDateArray[1]-1);
      today.setDate(todayDateArray[2]);
  }
  else
   {
      today.setYear(dateArray[0]);
      today.setMonth(dateArray[1]-1);
      today.setDate(dateArray[2]);
  }
  

  blah=new Date();
  blah.setYear(dateArray[0]);
  blah.setDate(1);
  blah.setMonth(dateArray[1]-1);

  zarg = new Date();
  zarg.setYear(blah.getFullYear());
  zarg.setDate(1);
  zarg.setMonth(blah.getMonth()-1);

  
  
  prevMonth = "&laquo;&nbsp;<a href='javascript:parent.calendarPopulate(\""+fname+"\",\""+cid+"\",\""+FrameID+"\",\""+zarg.getFullYear()+slash_symbol+(zarg.getMonth()+1)+slash_symbol+zarg.getDate()+"\",\""+add_events+"\",\""+todayDate+"\",\""+isClose+"\")'>"+monthNames[zarg.getMonth()]+"<\/a>";
  
  zarg.setYear(blah.getFullYear());
  zarg.setDate(1);
  zarg.setMonth(blah.getMonth()+1);

  if(zarg.getMonth() == today.getMonth()) {zarg.setYear(today.getFullYear());}

  nextMonth = "<a href='javascript:parent.calendarPopulate(\""+fname+"\",\""+cid+"\",\""+FrameID+"\",\""+zarg.getFullYear()+slash_symbol+(zarg.getMonth()+1)+slash_symbol+zarg.getDate()+"\",\""+add_events+"\",\""+todayDate+"\",\""+isClose+"\")'>"+monthNames[zarg.getMonth()]+"<\/a>&nbsp;&raquo;";

  nextYear = "<a href='javascript:parent.calendarPopulate(\""+fname+"\",\""+cid+"\",\""+FrameID+"\",\""+(blah.getFullYear()+1)+slash_symbol+(blah.getMonth()+1)+slash_symbol+"01\",\""+add_events+"\",\""+todayDate+"\",\""+isClose+"\")'>"+(blah.getFullYear()+1)+"<\/a>";
  prevYear = "<a href='javascript:parent.calendarPopulate(\""+fname+"\",\""+cid+"\",\""+FrameID+"\",\""+(blah.getFullYear()-1)+slash_symbol+(blah.getMonth()+1)+slash_symbol+"01\",\""+add_events+"\",\""+todayDate+"\",\""+isClose+"\")'>"+(blah.getFullYear()-1)+"<\/a>";

  table+='<table class=calendar>\n';
  table+='<tr><td colspan=7 class="calendarMonthTitle" align="center">'
  table+=prevYear+'&nbsp;'+prevMonth+'&nbsp;&nbsp;';
  table+=monthNames[blah.getMonth()]+'&nbsp;'+blah.getFullYear()+'&nbsp;&nbsp;';
  table+=nextMonth+'&nbsp;'+nextYear+'<\/td>';
  table+='<\/tr>\n';
  table+='<tr>';
  for(i=0;i<5;i++) table+='<td width="14%" class="calendarWeekdayHeading" align="center">'+dayNames[i]+'<\/td>';
  for(;i<7;i++) table+='<td width="14%" class="calendarWeekendHeading" align="center">'+dayNames[i]+'<\/td>';

  table+='<\/tr>\n';
  table+='<tr>';

  if (blah.getDay()!=1)
  {
    var i=-(blah.getDay()+5)%7;

    for(;i<1;i++) 
    {
      workingDate = new Date(blah);
      workingDate.setDate(i);

      if ((month=(workingDate.getMonth()+1))<10) 
      {
        month='0'+month;
      }

      if ((day=(workingDate.getDate()))<10)
      {
        day='0'+day;
      }

      id=workingDate.getFullYear()+slash_symbol+month+slash_symbol+day;

      if(today.getDate() == workingDate.getDate() && today.getMonth() == workingDate.getMonth()
         && today.getFullYear() == workingDate.getFullYear()) 
      {
        styleClass='calendarWrongToday';
      }
      else if ((workingDate.getDay==0)||(workingDate.getDay()==6)) 
      {
        styleClass='calendarWrongMonthWeekend';
      }
      else 
      {
        styleClass='calendarWrongMonthWeekday';
      }

      table+='<td width="14%" id="'+id+'" '+events+' class='+styleClass+' align=center>';
      Classes[id]=styleClass;
      table+=workingDate.getDate();
      table+='<\/td>\n';
    }
  }
  else
  {
    var i=1;
  }

  for(;;i++) 
  {
    workingDate=new Date(blah);
    workingDate.setDate(i);
    if((month=(workingDate.getMonth()+1))<10) month='0'+month;
    if((day=(workingDate.getDate()))<10) day='0'+day;
    id=workingDate.getFullYear()+slash_symbol+month+slash_symbol+day;

    if (workingDate.getMonth()!=blah.getMonth()) 
    {
      break;
    }

    if (workingDate.getDay()==1) {
      table+='<\/tr>\n<tr>';
    }
    if(today.getDate() == workingDate.getDate() && today.getMonth() == workingDate.getMonth()
       && today.getFullYear() == workingDate.getFullYear()) 
    {
      styleClass='calendarToday';
    }
    else if ((workingDate.getDay()==0)||(workingDate.getDay()==6)) 
    {
      styleClass='calendarWeekend';
    }
    else 
    {
      styleClass='calendarWeekday';
    }

    table+='<td id="'+id+'" '+events+' class="'+styleClass+'" align="center">';
    Classes[id]=styleClass;
    table+=workingDate.getDate();
    table+='<\/td>\n';
  }
  if (workingDate.getDay()!=1) 
  {
    for(;;i++) {
      workingDate=new Date(blah);
      workingDate.setDate(i);
      if((month=(workingDate.getMonth()+1))<10) month='0'+month;
      if((day=(workingDate.getDate()))<10) day='0'+day;
      id=workingDate.getFullYear()+slash_symbol+month+slash_symbol+day;
      if(today.getDate() == workingDate.getDate() && today.getMonth() == workingDate.getMonth()
         && today.getFullYear() == workingDate.getFullYear()) 
      {
        styleClass='calendarWrongToday';
      }
      else if ((workingDate.getDay()==0)||(workingDate.getDay()==6))
                        {
                                 styleClass='calendarWrongMonthWeekend';
                        }
      else
                        {
                                 styleClass='calendarWrongMonthWeekday';
                        }
      table+='<td id="'+id+'" '+events+' class="'+styleClass+'" align="center">';
      Classes[id]=styleClass;
      table+=workingDate.getDate();
      table+='<\/td>\n';
      if (workingDate.getDay()==0) break;
    }
  }
  table+='<\/tr>\n';
  if (isClose==0) table+='<tr><td colspan="7" class="calendarClose" align="center"><a href="javascript:parent.calendarClose(\''+fname+'\',\''+cid+'\',\''+FrameID+'\',0,\''+date+'\',\''+add_events+'\',\''+todayDate+'\',\''+isClose+'\')">close<\/a><\/td><\/tr>';
  table+='<\/table>';
  var div = Frame.document.getElementById(cid);
  div.innerHTML=table;
  div.style.display = 'block';
}

