var bPageLoaded=false;
var bShow = false;
var calendar_object, inputRezult, dateFormat;
var monthSelected, yearSelected, dateSelected;
var omonthSelected, oyearSelected, odateSelected;

var dstart="",mstart="",ystart="";
var dfin="",mfin="",yfin="";


var monthName = new Array("Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь","Ноябрь", "Декабрь");
var dayName = new Array("П","Вт","Ср","Ч","Пт","Сб","Вс");


function DocumentRegisterEvents()
{
  document.onkeypress = function hideCalender_Trap1(){if (event.keyCode == 27)hideCalendar();} 
  document.onclick = function hideCalender_Trap2(){if (!bShow)hideCalendar(); bShow = false; }
}

function popUpCalendar(ctl2, format) 
{                       //     alert("asd");    
    var leftpos=0;
    var toppos=0;
    var tokensChanged= 0;
    var formatChar;
    var aFormat;
    var aData;
    inputRezult = ctl2;
    dateFormat=format;

    DocumentRegisterEvents();     
    if (bPageLoaded)
    {                                      
        if (calendar_object.style.visibility == "hidden" )
        {
            formatChar = " ";
            aFormat = dateFormat.split(formatChar);
            if (aFormat.length<3)
            {
                formatChar = "/";
                aFormat = dateFormat.split(formatChar);
                if (aFormat.length<3)
                {
                    formatChar = ".";
                    aFormat = dateFormat.split(formatChar);
                    if (aFormat.length<3)
                    {
                        formatChar = "-";
                        aFormat = dateFormat.split(formatChar);
                        if (aFormat.length<3) formatChar="";   // invalid date format
                    }
                }
            }
            
            tokensChanged = 0;
            if ( formatChar != "" )
            {
                // use user's date
                if(document.getElementById(inputRezult).value)
                {
                    aData = document.getElementById(inputRezult).value.split(formatChar);
                    for (var i=0;i<3;i++)
                    {
                        if ((aFormat[i]=="d") || (aFormat[i]=="dd"))
                        {
                            dateSelected = parseInt(aData[i], 10)
                            tokensChanged ++
                        }
                        else if ((aFormat[i]=="m") || (aFormat[i]=="mm"))
                        {
                            monthSelected = parseInt(aData[i], 10) - 1
                            tokensChanged ++
                        }
                        else if (aFormat[i]=="yyyy")
                        {
                            yearSelected = parseInt(aData[i], 10)
                            tokensChanged ++
                        }
                        else if (aFormat[i]=="mmm")
                        {
                            for    (j=0; j<12;    j++)
                            {
                                if (aData[i]==monthName[j])
                                {
                                    monthSelected=j
                                    tokensChanged ++
                                }
                            }
                        }
                    }
                }
            }

            if ((tokensChanged!=3)||isNaN(dateSelected)||isNaN(monthSelected)||isNaN(yearSelected))
            {
                var today=new Date();
                dateSelected = today.getDate();
                monthSelected = today.getMonth();
                yearSelected = today.getFullYear();
            }
            odateSelected=dateSelected;
            omonthSelected=monthSelected;
            oyearSelected=yearSelected;
                                                       
            pos = getElementPosition(ctl2); 
            var left = pos.left; 
            var top = pos.top; 
            calendar_object.style.left=left+150+"px";
            calendar_object.style.top=top-30+"px";
 
            constructCalendar (1, monthSelected, yearSelected);
            opacity('mod_online_popup_calendar',0,100,500);  
            bShow = true;
        }
    }
    else
    {
        DateSelectorInit();
        popUpCalendar(ctl2, format);
    }
}

function getElementPosition(elemId)
{                    
    var elem = document.getElementById(elemId);  var l = 0; var t = 0;                                        
    while (elem){ l += elem.offsetLeft;  t += elem.offsetTop; elem = elem.offsetParent; }                                           
    return {"left":l, "top":t};
}

function DateSelectorInit()    
{
        calendar_object=document.getElementById("mod_online_popup_calendar");
        hidden('mod_online_popup_calendar') ;                  
        monthConstructed=false;
        yearConstructed=false;    
        var str = "<table width='100%' border='0' cellpadding='0' cellspacing='0'>";
        str += "<tr>";
        str += "  <td width='5'>";
        str += "    <span id='mod_online_spanLeft' class='title-control-normal-style' onclick='decMonth()'>&lt;</span>"
        str += "  </td>";
        str += "  <td width='100%' align='center'>";
        str += "    <span id='mod_online_spanMonth' class='title-control-normal-style'></span>&nbsp;";
        str += "    <span id='mod_online_spanYear' class='title-control-normal-style'></span>";
        str += "  </td>";
        str += "  <td width='5'>";
        str += "    <span id='mod_online_spanRight' class='title-control-normal-style' onclick='incMonth()'>&gt;</span>";
        str += "  </td>";
        str += "</tr>";
        str += "</table>"; 
        document.getElementById("mod_online_caption").innerHTML  = str;
        bPageLoaded=true;
}
function constructCalendar () 
{
    var dateMessage;
    var today= new Date();
    var startDate = new Date (yearSelected,monthSelected,1);
    var endDate = new Date (yearSelected,monthSelected+1,1);  
    endDate = new Date (endDate - (24*60*60*1000));    
    var numDaysInMonth = endDate.getDate();   
                  
    var datePointer = 0;
    var dayPointer = startDate.getDay() - 1;  
    if (dayPointer < 0) dayPointer = 6;

    var str = "<table width='100%' border='0' cellpadding='1' cellspacing='1' class='body-style'><tr>";
    for (var i=0; i<7; i++) str += "<td width='15' align='center'><b>"+ dayName[i]+"</b></td>";
    str +="</tr><tr>";
    for (var i=1; i<=dayPointer;i++ ) str += "<td>&nbsp;</td>";     
    for (datePointer=1; datePointer<=numDaysInMonth; datePointer++ )
    {
        dayPointer++;
        str += "<td width='15' align='center'>";   
        var sStyle="normal-day-style"; //regular day
        if ((datePointer==today.getDate())&&(monthSelected==today.getMonth())&&(yearSelected==today.getFullYear()))sStyle = "current-day-style"; //today
        if ((datePointer==odateSelected) && (monthSelected==omonthSelected) && (yearSelected==oyearSelected))sStyle += " selected-day-style"; //selected day
        str += "<a class='"+sStyle+"' href='js()' onclick='selectDate("+datePointer+");return false;'>" + datePointer + "</a>";
        if ((dayPointer+1) % 7 == 1) str += "</tr><tr>";
    }                      
    document.getElementById("mod_online_content").innerHTML   = str;    
    document.getElementById("mod_online_spanMonth").innerHTML = monthName[monthSelected];
    document.getElementById("mod_online_spanYear").innerHTML = yearSelected;                 
    if(monthSelected==today.getMonth())document.getElementById("mod_online_spanLeft").style.visibility="hidden";
    else document.getElementById("mod_online_spanRight").style.visibility="visible";         
}
function hideCalendar(){opacity('mod_online_popup_calendar',100,0,300);}

function padZero(num) { return (num < 10)? '0' + num : num ; }

function constructDate(d,m,y)
{
    var sTmp = dateFormat;
    sTmp = sTmp.replace("dd","<e>");
    sTmp = sTmp.replace("d","<d>");
    sTmp = sTmp.replace("<e>",padZero(d));
    sTmp = sTmp.replace("<d>",d);
    sTmp = sTmp.replace("mmm","<o>");
    sTmp = sTmp.replace("mm","<n>");
    sTmp = sTmp.replace("m","<m>");
    sTmp = sTmp.replace("<m>",m+1);
    sTmp = sTmp.replace("<n>",padZero(m+1));
    sTmp = sTmp.replace("<o>",monthName[m]);
    return sTmp.replace("yyyy",y);
}      
function selectDate(d)
{
    var today= new Date();
                    
    if(inputRezult=="mod_online_data_start")
    {             
        // alert(dfin+" "+mfin+" "+yfin+" "+d+" "+monthSelected+" "+yearSelected);
          if(dfin!="" && mfin!=null && yfin!="")
          {
              if(monthSelected>mfin || yearSelected>yfin || (d>=dfin && monthSelected==mfin && yearSelected==yfin))
              {
                  var pos = getElementPosition(inputRezult); 
                  var left = pos.left; 
                  var top = pos.top; 
                    
                  document.getElementById("mod_online_popup_error").style.width="100px";
                  document.getElementById("mod_online_popup_error").style.left=(left+160)+"px"; 
                  document.getElementById("mod_online_popup_error").style.top=(top-20)+"px"; 
                  document.getElementById("mod_online_popup_error").innerHTML="<span id='mod_online_error_mes' class='error_mes'>Начальная дата должна быть меньше конечной</span>";
                  opacity('mod_online_popup_error',0,100,300);
                  setTimeout("opacity('mod_online_popup_error'," + 100+","+0+","+300 + ")",1500);  
                  return;
              }
          }
          if(monthSelected==today.getMonth() && yearSelected==today.getFullYear() && d<=today.getDate())
          {
              var pos = getElementPosition(inputRezult); 
              var left = pos.left; 
              var top = pos.top; 
                
              document.getElementById("mod_online_popup_error").style.width="100px";
              document.getElementById("mod_online_popup_error").style.left=(left+160)+"px"; 
              document.getElementById("mod_online_popup_error").style.top=(top-20)+"px"; 
              document.getElementById("mod_online_popup_error").innerHTML="<span id='mod_online_error_mes' class='error_mes'>Выбранная дата некорректна</span>";
              opacity('mod_online_popup_error',0,100,300);
              setTimeout("opacity('mod_online_popup_error'," + 100+","+0+","+300 + ")",1500); 
              return;
          }          
          dstart=d; mstart=monthSelected; ystart=yearSelected;  
          hideCalendar();  
          document.getElementById(inputRezult).value = constructDate(dstart,mstart,ystart);
        //alert(document.getElementById(inputRezult).value);
          return;        
    }
    else if(inputRezult=="mod_online_data_fin")
    {
      if(dstart!="" && mstart!=null && ystart!="" && monthSelected<=mstart && yearSelected<=ystart && d<=dstart)
      {
            var pos = getElementPosition(inputRezult); 
            var left = pos.left; 
            var top = pos.top; 
            document.getElementById("mod_online_popup_error").style.width="100px";
            document.getElementById("mod_online_popup_error").style.left=(left+160)+"px"; 
            document.getElementById("mod_online_popup_error").style.top=(top-20)+"px"; 
            document.getElementById("mod_online_popup_error").innerHTML="<span id='mod_online_error_mes' class='error_mes'>Конечная дата должна быть больше начальной</span>";
            opacity('mod_online_popup_error',0,100,300);
            setTimeout("opacity('mod_online_popup_error'," + 100+","+0+","+300 + ")",1500); 
            return;
      }
      if(monthSelected==today.getMonth() && yearSelected==today.getFullYear() && d<=today.getDate())
      {
            var pos = getElementPosition(inputRezult); 
            var left = pos.left; 
            var top = pos.top; 
            document.getElementById("mod_online_popup_error").style.width="100px";
            document.getElementById("mod_online_popup_error").style.left=(left+160)+"px"; 
            document.getElementById("mod_online_popup_error").style.top=(top-20)+"px"; 
            document.getElementById("mod_online_popup_error").innerHTML="<span id='mod_online_error_mes' class='error_mes'>Выбранная дата некорректна</span>";
            opacity('mod_online_popup_error',0,100,300);
            setTimeout("opacity('mod_online_popup_error'," + 100+","+0+","+300 + ")",1500); 
            return;
      }
      dfin=d; mfin=monthSelected; yfin=yearSelected;
      hideCalendar();  
      document.getElementById(inputRezult).value = constructDate(dfin,mfin,yfin);
      return;
    }
}

function incMonth () 
{
    monthSelected++;
    if (monthSelected>11) {monthSelected=0; yearSelected++; }
    constructCalendar();
}

function decMonth () 
{
    monthSelected--;
    if (monthSelected<0) { monthSelected=11; yearSelected--;}
    constructCalendar();
}
                                