//Глобальные переменные
var popCalDstFld;
var popCalDstFldXY;
var popCalWinW;

var popCalDateTmp;
var popCalDateTmpDay = 0;

function popupCalW(){
  var tmpDate = new Date();
  var tmpNum = 0;
  var tmpString = "";
  var popCalDateVal = 0;
     
  // Инициализировать пустое окно.
  popCalWinW = new Object();
	
  // Проверить кол-во параметров
  if (arguments.length < 3){
	alert("popupCalW(): ОШИБКА кол-во параметров меньше 3.");
	return void(0);}
	
  // Получить параметры командной строки
  var dstWindowName = popupCalW.arguments[0];
  popCalDstFld = popupCalW.arguments[1];
  popCalDstFldXY = popupCalW.arguments[2];
  
  // Получить значение поля даты
  tmpString = new String(popCalDstFld.value); 
       
  if(tmpString == ""){
    popCalDateVal = new Date();}
  else{
	tmpNum = tmpString.lastIndexOf( "." );
  	if ( (tmpString.length - tmpNum) == 2 ){
      tmpString = tmpString.substring(0,tmpNum + 1)+(tmpDate.getFullYear()/100) + tmpString.substr(tmpNum+1);
	  popCalDateVal = new Date(tmpString);}
    else{
      //После последней точки Год имеет 4 цыфры.  
	  // Преобразование строки в дату
	  var tmpD = convertDataW(tmpString, 0);
	  popCalDateVal = convertStrToData(tmpD);
	}
	
	popCalDateTmp = popCalDateVal;
	popCalDateTmpDay = popCalDateVal.getDate();}
            
  //Make sure the date is a valid date.  Set it to today if it is invalid
  if( popCalDateVal.toString() == "Invalid Date" ){
    popCalDateVal = new Date();}
                                 
  //Set the base date to midnight of the first day of the specified month, this makes things easier?
  //Call the routine to draw the initial calendar
  var dateString = String(popCalDateVal.getMonth()+1) + "/" + String(popCalDateVal.getDate()) + "/" + String(popCalDateVal.getFullYear());

  reloadCalPopupW(dateString, dstWindowName);
  document.close();
  return void(0);
}
 
function closeCalPopup(){
  popCalWinW.close();
  return void(0);
}
 
function Point(iX, iY){
  this.x = iX;
  this.y = iY;
}

function GetXY(aTag){
  var objTmp = aTag;
  var pt = new Point(0, 0);
 
  pt.x += objTmp.offsetLeft;
  pt.y += objTmp.offsetTop;
  while (objTmp.offsetParent != null) {
    objTmp = objTmp.offsetParent;
    pt.x += objTmp.offsetLeft;
    pt.y += objTmp.offsetTop;
    if (objTmp.tagName == 'BODY') break;
  }
  return pt;  
} 


function reloadCalPopupW(){
  var point = GetXY(popCalDstFldXY);
  var xy = "left=" + String(point.x - 52) + ",top=" + String(point.y + popCalDstFld.offsetHeight-47);
  //Set the window's features here
  var windowFeatures = "resizable=no,height=175,width=170," + xy;
  
  //var tmpD = convertDataW(reloadCalPopupW.arguments[0], 0);
  //var tmpDate = new Date(tmpD);
  var tmpD = reloadCalPopupW.arguments[0];
  var tmpDate = convertStrToData(tmpD);
  
  
  if (tmpDate.toString() == "Invalid Date") tmpDate = new Date();
            
  //tmpDate.setDate(1);
            
  // Получить календарные данные
  var popCalData = calPopupSetDataW(tmpDate, reloadCalPopupW.arguments[2],reloadCalPopupW.arguments[1]);
 
  //Check to see if the window has been initialized, create it if it hasn't been
  if( popCalWinW.toString() == "[object Object]" ){
    popCalWinW = window.open("",reloadCalPopupW.arguments[1],windowFeatures);
    }
  else {
    //Remember the existing window's position
	var xPos = popCalWinW.screenX;
    var yPos = popCalWinW.screenY;
    popCalWinW.document.open();
    }
            
  popCalWinW.document.write(popCalData);
  popCalWinW.document.close();
            
  return void(0);
}

 
function calPopupSetDataW(firstDay, dstWindowName){
 
  firstDay.setDate(1);
  
  var popCalData = "";
  var lastDate = 0;
  var fnt = new Array( 
  "<FONT SIZE=\"1\" COLOR=\"Green\">", 
  "<FONT SIZE=\"1\" COLOR=\"235991\">", 
  "<FONT SIZE=\"1\" COLOR=\"#CC2222\">", 
  "<FONT SIZE=\"1\" COLOR=\"Navy\">", 
  "<FONT SIZE=\"1\">");
  
  var dtToday = new Date();  
  var thisMonth = firstDay.getMonth();
  var thisYear = firstDay.getFullYear();
  var nPrevMonth = (thisMonth == 0 ) ? 11 : (thisMonth - 1);
  var nNextMonth = (thisMonth == 11 ) ? 0 : (thisMonth + 1);
  var nPrevMonthYear = (nPrevMonth == 11) ? (thisYear - 1): thisYear;
  var nNextMonthYear = (nNextMonth == 0) ? (thisYear + 1): thisYear;
              
  var sToday = String((dtToday.getMonth()+1) + "/01/" + dtToday.getFullYear());
  var sPrevMonth = String((nPrevMonth+1) + "/01/" + nPrevMonthYear);
  var sNextMonth = String((nNextMonth+1) + "/01/" + nNextMonthYear);
  var sPrevYear1 = String((thisMonth+1) + "/01/" + (thisYear - 1));
  var sNextYear1 = String((thisMonth+1) + "/01/" + (thisYear + 1));
 
  var startDate = new Date(2000, 5, 8);
  startDate = new Date( startDate.valueOf() - 1001 );
  
  //var tmpDate = new Date( sNextMonth );
  var tmpDate = new Date( nNextMonthYear, nNextMonth, 1);         
  tmpDate = new Date( tmpDate.valueOf() - 1001 );
  lastDate = tmpDate.getDate();
            
  var monthNames = new Array("Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август",
                             "Сентябрь","Октябрь","Ноябрь","Декабрь");
  var styles = "<style>";
  styles += "<!-- ";
  styles += "body " ;
  styles += "{font-family: Arial, Helvetica, sans-serif; ";
  styles += "font-size: 8pt}; ";
  styles += "td ";
  styles += "{font-family: Arial, Helvetica, sans-serif; ";
  styles += "font-size: 8pt; ";
  styles += "color: #000000}; ";
  styles += "A {text-decoration: none}; ";
  styles += "TD.day ";
  styles += "{border-bottom: solid black; ";
  styles += "border-width: 1px;}";
  styles += "-->";
  styles += "</style>";
  
  var htmlHead   = "<HTML>";
  htmlHead 		+= "<HEAD>";
  htmlHead 		+= "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\">";
  htmlHead 		+= styles;
  htmlHead 		+= "</HEAD>";
  htmlHead 		+= "<BODY alink=\"#ff0000\" link=\"#900000\" text=\"#235991\" vlink=\"#900000\" marginwidth=\"0\" marginheight=\"0\" topmargin=\"0\" leftmargin=\"0\" BGCOLOR=\"#FBFBF9\">";
  var htmlTail = "</BODY></HTML>";
  
  
 // var closeAnchor = "<A HREF=\"javascript:window.opener.closeCalPopup()\">Закрыть</A>";
  //var closeAnchor = "<p " + cellAttribs2 + "><A HREF=\"javascript:window.opener.closeCalPopup()\">Закрыть</A>";
            
//  var todayAnchor = "<A HREF=\"javascript:window.opener.reloadCalPopup('"+sToday+"','"+dstWindowName+"');\">Текущий день</A>";
var todayAnchor = "<A HREF=\"javascript:window.opener.reloadWindow('"+sToday+"','"+dstWindowName+"');\">Сегодня</A>";
  var prevMonthAnchor = "<A HREF=\"javascript:window.opener.reloadWindow('"+sPrevMonth+"','"+dstWindowName+"')\">" + monthNames[nPrevMonth] + "</A>";
  var nextMonthAnchor = "<A HREF=\"javascript:window.opener.reloadWindow('"+sNextMonth+"','"+dstWindowName+"');\">" + monthNames[nNextMonth] + "</A>";
 
  var prevYear1Anchor = "<A HREF=\"javascript:window.opener.reloadWindow('"+sPrevYear1+"','"+dstWindowName+"');\"><<</A>";
  var nextYear1Anchor = "<A HREF=\"javascript:window.opener.reloadWindow('"+sNextYear1+"','"+dstWindowName+"');\">>></A>";
                          
  popCalData += htmlHead;

            
  popCalData += "<TABLE align=\"center\" BORDER=\"0\" cellspacing=\"0\" callpadding=\"0\" width=\"100%\"><TR align=\"center\"><TD width=\"20%\">&nbsp</TD>";
  popCalData += ("<TD width=\"10%\" align=\"center\">");
  popCalData += ("<A onClick=\"javascript:window.opener.reloadWindow('"+sPrevYear1+"','1')\">");
           
  popCalData += (fnt[0]+prevYear1Anchor+"</FONT></A></TD>");
  popCalData += ("<TD width=\"40%\" align=\"center\">");
  popCalData += ("<A onClick=\"javascript:window.opener.reloadWindow('"+sToday+"','"+dstWindowName+"')\">");
  popCalData += (fnt[0]+todayAnchor+"</FONT></A></TD>");
  popCalData += ("<TD width=\"10%\" align=\"center\">");
  popCalData += ("<A onClick=\"javascript:window.opener.reloadWindow('"+sNextYear1+"','"+dstWindowName+"')\">");
  popCalData += (fnt[0]+nextYear1Anchor+"</FONT></A></TD><TD width=\"20%\">&nbsp</TD>");
  popCalData += "</TR></TABLE>";

  popCalData += "<TABLE align=\"center\" BORDER=\"0\" cellspacing=\"0\" callpadding=\"0\" width=\"100%\">";          
  popCalData += ("<TR align=\"center\"><TD width=\"30%\" align=\"center\">");
  popCalData += ("<A onClick=\"javascript:window.opener.reloadWindow('"+sPrevMonth+"','"+dstWindowName+"')\">");
  popCalData += (fnt[1]+prevMonthAnchor+"</FONT></A></TD>");
  popCalData += "<TD width=\"40%\" align=\"center\">";
  popCalData += (fnt[1]+monthNames[thisMonth]+ ",<br>"+thisYear+"</FONT></TD>");
  popCalData += ("<TD width=\"30%\" align=\"center\">");
  popCalData += ("<A onClick=\"javascript:window.opener.reloadWindow('"+sNextMonth+"','"+dstWindowName+"')\">");
  popCalData += (fnt[1]+nextMonthAnchor+"</FONT></A></TD></TR></TABLE>");       
 
  popCalData += ("<TABLE align=\"center\" BORDER=\"0\" cellspacing=\"2\" cellpadding=\"1\">" );
  popCalData += ("");
            
  popCalData += ("<TR align=\"center\"><TD>"+fnt[1]+"Пн.</FONT></TD><TD>"+fnt[1]+"Вт.</FONT></TD><TD>");
  popCalData += (fnt[1]+"Ср.</FONT></TD><TD>"+fnt[1]+"Чт.</FONT></TD><TD>");
  popCalData += (fnt[1]+"Пт.</FONT></TD><TD>"+fnt[1]+"Сб.</FONT></TD><TD>");
  popCalData += (fnt[1]+"Вс.</FONT></TD></TR>");
			
  var calDay = 0;
  var monthDate = 1;

  var weekDay = firstDay.getDay()-1;
  if (weekDay < 0) {weekDay = 6}
	
    do {
      popCalData += ("<TR align=\"center\">");
      for (calDay = 0; calDay < 7; calDay++ ){
        if((weekDay != calDay) || (monthDate > lastDate)){
          popCalData += ("<TD>"+fnt[1]+"&nbsp;</FONT></TD>");
          continue;
          }
        else {
		 anchorVal = "<A HREF=\"javascript:window.opener.calPopupSetDate(window.opener.popCalDstFld,'" + monthDate + "/" + (thisMonth+1) + "/" + thisYear + "');window.opener.closeCalPopup()\">"; 
         jsVal = "javascript:window.opener.calPopupSetDate(window.opener.popCalDstFld,'" + monthDate + "." + (thisMonth+1) + "." + thisYear + "');window.opener.closeCalPopup()"; 
      
         if ((firstDay.getMonth() == dtToday.getMonth()) && 
            (monthDate == dtToday.getDate()) && 
            (thisYear == dtToday.getFullYear()) ){
			  //Сегодня
			  if (monthDate == popCalDateTmpDay){
			    popCalData += ("<TD onClick=\""+jsVal+"\">");
                popCalData += (anchorVal+fnt[3]+"<b>"+monthDate+"</b>"+"</A></FONT></TD>");}
			  else {
			    popCalData += ("<TD onClick=\""+jsVal+"\">");
                popCalData += (anchorVal+fnt[2]+"<b>"+monthDate+"</b>"+"</A></FONT></TD>");}
			  }
          else{
		    if 	(monthDate == popCalDateTmpDay){
			  // 
			  if ((thisYear == popCalDateTmp.getFullYear()) && 
				 (firstDay.getMonth() == popCalDateTmp.getMonth())){
				    popCalData += ("<TD onClick=\""+jsVal+"\">");
		            popCalData += (anchorVal+fnt[3]+monthDate+"</A></FONT></TD>");}
			  else {
			    if ((thisYear < dtToday.getFullYear()) ||
				((thisYear == dtToday.getFullYear()) && 
				(firstDay.getMonth() < dtToday.getMonth())) ||
				((thisYear == dtToday.getFullYear()) && 
				(firstDay.getMonth() == dtToday.getMonth()) &&
				(monthDate < dtToday.getDate()))){
			      popCalData += ("<TD onClick=\""+jsVal+"\">");
		          popCalData += (anchorVal+fnt[4]+monthDate+"</A></FONT></TD>");}
				else {
				  popCalData += ("<TD>");
		          popCalData += (fnt[1]+monthDate+"</A></FONT></TD>");}
				}
			  }
			else {
			  if ((thisYear < dtToday.getFullYear()) ||
				((thisYear == dtToday.getFullYear()) && 
				(firstDay.getMonth() < dtToday.getMonth())) ||
				((thisYear == dtToday.getFullYear()) && 
				(firstDay.getMonth() == dtToday.getMonth()) &&
				(monthDate < dtToday.getDate()))){
				  if ((thisYear > startDate.getFullYear()) ||
					((thisYear == startDate.getFullYear()) && 
					(firstDay.getMonth() > startDate.getMonth())) ||
					((thisYear == startDate.getFullYear()) && 
					(firstDay.getMonth() == startDate.getMonth()) &&
					(monthDate > startDate.getDate()))){
						popCalData += ("<TD onClick=\""+jsVal+"\">");
		          		popCalData += (anchorVal+fnt[4]+monthDate+"</A></FONT></TD>");}
					else {
						popCalData += ("<TD align=\"center\">"); 
						popCalData += (fnt[1]+monthDate);}
				  }
			  else {	  
			    // Больше текущей даты
			    popCalData += ("<TD>");
			    popCalData += (fnt[1]+monthDate+"</FONT></TD>");}
			  }
			}
 
		  popCalData += "</A></FONT></TD>";                 
          weekDay++;
          monthDate++;
          }
        }
      weekDay = 0;
    } while( monthDate <= lastDate );
            
    popCalData += ("</TABLE>");//</DIV>
    popCalData += htmlTail;
//    popCalData += (closeAnchor+"</FONT>"+htmlTail);
    return( popCalData );
}

function convertStrToData(strDate){ 
  var pos1 = strDate.indexOf(".");
  var pos2 = strDate.lastIndexOf(".");
  
  if (pos1 < 0) pos1 = strDate.indexOf("/");
  if (pos2 < 0) pos2 = strDate.lastIndexOf("/");
  
  if (pos1 == 4){
    var strYear = strDate.substring(0, pos1);
    var strMon = strDate.substring(pos1+1, pos2);
    var strDay = strDate.substring(pos2+1, strDate.length);}
  else 
  {
    var strMon = strDate.substring(0, pos1);
    var strDay = strDate.substring(pos1+1, pos2);
    var strYear = strDate.substring(pos2+1, strDate.length);}
	
  var tmpDate = new Date( parseFloat(strYear), parseFloat(strMon)-1, parseFloat(strDay));
  return(tmpDate);
}

function convertDataW(strDate, typeDate){
  var pos1 = strDate.indexOf(".");
  var pos2 = strDate.lastIndexOf(".");
  
  if (strDate != "") {
    if (pos1 < 0) pos1 = strDate.indexOf("/");
    if (pos2 < 0) pos2 = strDate.lastIndexOf("/");
  
    var strDay = strDate.substring(0, pos1);
    var strMon = strDate.substring(pos1+1, pos2);
    var strYear = strDate.substring(pos2+1, strDate.length);
  
    if (typeDate == 1){
      if (strDay < 10) strDay = "0" + strDay;
	  if (strMon < 10) strMon = "0" + strMon;
	  return( strDay + "." + strMon + "." + strYear );}
    else{
	  if (typeDate == 2){
	    if (strDay < 10) strDay = "0" + strDay;
	    if (strMon < 10) strMon = "0" + strMon;
	    return( strYear + "." + strMon + "." + strDay );}
	  else {
        return( strMon + "/" + strDay + "/" + strYear );}
	  }
    }
  else{
    return(strDate);} 
}
 
function calPopupSetDate(){
  var strData = convertDataW(calPopupSetDate.arguments[1], 1);
  calPopupSetDate.arguments[0].value = strData;
  calPopupSetDate.arguments[0].text = strData;
}

function reloadWindow(){
  var tmpD = reloadWindow.arguments[0];
  var tmpDate = convertStrToData(tmpD);
  if (tmpDate.toString() == "Invalid Date") tmpDate = new Date();
  
  popCalWinW.document.write(calPopupSetDataW(tmpDate, '0'));
  popCalWinW.document.close();         
  return void(0);
}