$(document).ready(function() {
  bscal.init();
});

var bscal = {
    left : 0,
    top  : 0,
    width: 0,
    height: 0,
    format: "%d.%m.%Y",

    wds  : new Array("пн","вт","ср","чт","пт","сб","вс"),
    mns  : new Array("Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь"),
    dim  : new Array(31,28,31,30,31,30,31,31,30,31,30,31),

    nowD : new Date().getDate(),
    nowM : new Date().getMonth()+1,
    nowY : new Date().getFullYear(),

    curD : null,
    curM : null,
    curY : null,

    minY : 2009,  /*new Date().getFullYear()*/
    maxY : new Date().getFullYear() + 5,

    css  : document.createElement("link"),
    div  : document.createElement("div"),
    ifr  : document.createElement("iframe"),
    msel : null,
    ysel : null,
    obj  : null,
    id_to: null,
    cal_close: '',
    weekend_click_array: new Object(),
    id_color_array : new Object(),
    color_old_array: new Object(),
    cell_id_array  : new Object(),
    last_id_array  : new Object(),
    number_color   : new Object(),
    change_color: false,
    display_always: false,
    addtovar:false,
    hidden_id:null,
    hover: null,
    init : function() {
      bscal.css.rel = "stylesheet";
      bscal.css.href= "bs_calendar.css";
      document.body.appendChild(bscal.css);
      bscal.div.id = 'bscal';
      bscal.div.innerHTML = bscal.html();
      bscal.div.style.display = "none";
      $("#calendar").append(bscal.div);


      bscal.msel = document.getElementById("bs_month");
      bscal.msel.style.width = "40%";
      for (var i=0;i<bscal.mns.length;i++)
        bscal.msel.options[i] = new Option(bscal.mns[i], i+1);
      bscal.ysel = document.getElementById("bs_year");
      bscal.ysel.style.width = "30%";
      for (var i=0;i<=bscal.maxY-bscal.minY;i++)
        bscal.ysel.options[i] = new Option(bscal.maxY-i, bscal.maxY-i);
    },
    draw : function() {
    /*очищаем дни*/
    /* set background */
    for(k in bscal.cell_id_array) {
      $("#"+bscal.cell_id_array[k]).css('background-color',bscal.color_old_array[k]);
    }

    for(k in bscal.last_id_array) {
      $("#"+bscal.last_id_array[k].id).css('background-color','#f2f2f2');
      $("#"+bscal.last_id_array[k].id).css('color','#0054e3');
    }

    for (var y=1;y<=6;y++)
    for (var x=1;x<=7;x++) {
      var el = document.getElementById("cell_"+y+"_"+x)

      $("#cell_"+y+"_"+x).css("color","#0054e3")
      el.className = (x <6) ? "day" : "weekend";
      el.style.cursor = 'default';
      el.innerHTML   = "&nbsp;";

      if(x>=6)
        $("#cell_"+y+"_"+x).css("background-color","#f2f2f2");

      
      $("#cell_"+y+"_"+x).css('background-color','#f2f2f2');
      

    }
    all_days = (bscal.curM == 2 && bscal.isLeap(bscal.curY)) ? 29 : bscal.dim[bscal.curM-1];
    begin = new Date(bscal.curY,bscal.curM-1,1).getDay();

    /*заполняем месяц*/
    y=1; x=begin!=0 ? begin:7;
    for (c=1;c<=all_days;c++) {
      var el = document.getElementById("cell_"+y+"_"+x)
      if (bscal.istoday(c)){el.className="today";}
      el.innerHTML = c;


      CurM = (bscal.curM < 10 ) ? "0" + bscal.curM : bscal.curM;
      CurD = (c<10) ? "0" + c : c;
      nowD = (bscal.nowD<10) ? "0" + bscal.nowD : bscal.nowD;

      if(CurD>=nowD && bscal.curY==bscal.nowY && bscal.curM==bscal.nowM) {
         $("#cell_"+y+"_"+x).css('background-color','#17c005');        
         $("#cell_"+y+"_"+x).css('color','#ffffff');
      }

      if(bscal.curY>bscal.nowY) {
         $("#cell_"+y+"_"+x).css('background-color','#17c005');        
         $("#cell_"+y+"_"+x).css('color','#ffffff');
      }

      if(bscal.curM>bscal.nowM) {
         $("#cell_"+y+"_"+x).css('background-color','#17c005');        
         $("#cell_"+y+"_"+x).css('color','#ffffff');
      }

      if(bscal.id_color_array[CurD + '.' + CurM + '.' + bscal.curY]!=null)  {
        $("#"+bscal.cell_id_array[CurD + '.' + CurM + '.' + bscal.curY]).css("background-color",bscal.id_color_array[CurD + '.' + CurM + '.' + bscal.curY]);
        $("#"+bscal.cell_id_array[CurD + '.' + CurM + '.' + bscal.curY]).css("color",bscal.number_color[CurD + '.' + CurM + '.' + bscal.curY]);

      }

      el.style.cursor = 'pointer';
        x++; if (x>7){x=1;y++;}
      }

    },
    retD : function(r_day,TdObj) {

    current_year = new Date().getFullYear();

    if (!r_day || r_day=="&nbsp;") return false;

    //If we want just show dates
    if(bscal.display_always==true) return false;

    res = bscal.format;
    res = res.replace("%d",(r_day < 10 ? "0":"") + r_day);
    res = res.replace("%m",(bscal.curM<10?"0":"") + bscal.curM);
    res = res.replace("%Y",bscal.curY);
    bscal.obj.value = res;

    (bscal.nowD<10?"0":"") + bscal.nowD + '.' + (bscal.nowM<10?"0":"") + bscal.nowM + '.' + bscal.nowY;

    if(bscal.curM<bscal.nowM)
        return false;
    if(bscal.curY<bscal.nowY)
        return false;
    if(bscal.curY==bscal.nowY && bscal.curM==bscal.nowM && r_day<bscal.nowD)
        return false;
    if(bscal._color==false)
        return false;

    if(TdObj!=null) {
      TdColor = $("#"+TdObj.id).css("background-color");
    if(TdColor=='#9a9a9a') {
      TdColor = '#f2f2f2';
      bscal.weekend_click_array[res] = TdObj.id;
    }
    if(TdColor=='rgb(154, 154, 154)') {
      TdColor = 'rgb(134, 134, 134)';
      bscal.weekend_click_array[res] = TdObj.id;
    }

    if(bscal.change_color==false) {

      for(k in bscal.last_id_array) {
        $("#"+bscal.last_id_array[k].id).css('background-color','#f2f2f2');
        $("#"+bscal.last_id_array[k].id).css('color','#0054e3');
      }

      bscal.last_id_array[res] = TdObj;

      $("#"+TdObj.id).css('background-color','#006400');
      $("#"+TdObj.id).css('color','#ffffff');
      $("#" + bscal.hidden_id).val(res);
      return false;
    }


    switch(TdColor) {
      /*case ('#f2f2f2') :{
                         bscal.color_old_array[res] = '#f2f2f2';
                         bscal.number_color[res] = '#ffffff';
                         $("#"+TdObj.id).css('background-color','#000000');
                         $("#"+TdObj.id).css('color','#ffffff');
                         bscal.id_color_array[res] = $("#"+TdObj.id).css('background-color');
                         bscal.cell_id_array[res] = TdObj.id;
                         break;
      }*/
      case ('#000000') :{
                         bscal.color_old_array[res] = '#f2f2f2';
                         bscal.number_color[res] = '#ffffff';
                         $("#"+TdObj.id).css('background-color','#17c005');
                         bscal.id_color_array[res] = $("#"+TdObj.id).css('background-color');
                         bscal.cell_id_array[res] = TdObj.id;
                         break;
      }
      case ('#17c005') :{
                         bscal.color_old_array[res] = '#f2f2f2';
                         bscal.number_color[res] = 'ffffff';
                         $("#"+TdObj.id).css('background-color','#bbc028');
                         bscal.id_color_array[res] = $("#"+TdObj.id).css('background-color');
                         bscal.cell_id_array[res] = TdObj.id;
                         break;
      }
      case ('#bbc028') :{
                         bscal.color_old_array[res] = '#f2f2f2';
                         bscal.number_color[res] = '#ffffff';
                         $("#"+TdObj.id).css('background-color','#d86c00');
                         bscal.id_color_array[res] = $("#"+TdObj.id).css('background-color');
                         bscal.cell_id_array[res] = TdObj.id;
                         break;
      }
      case ('#d86c00') :{
                         bscal.color_old_array[res] = '#f2f2f2';
                         bscal.number_color[res] = '#ffffff';
                         $("#"+TdObj.id).css('background-color','#cd0404');
                         bscal.id_color_array[res] = $("#"+TdObj.id).css('background-color');
                         bscal.cell_id_array[res] = TdObj.id;
                         break;
      }
      case ('#cd0404') :{
                         bscal.color_old_array[res] = '#f2f2f2';
                         bscal.number_color[res] = '#ffffff';
                         //$("#"+TdObj.id).css('background-color','#f2f2f2');
                         $("#"+TdObj.id).css('background-color','#000000');
                         //$("#"+TdObj.id).css('color','#0054e3');
                         if(bscal.weekend_click_array[res]!=null) {
                           bscal.color_old_array[res] = '#9a9a9a';
                           $("#"+bscal.weekend_click_array[res]).css('background-color','#9a9a9a');
                           bscal.flag_weekend = 0;
                         }
                         delete(bscal.id_color_array[res]);
                         delete(bscal.cell_id_array[res]);
                         delete(bscal.number_color[res]);
                         break;
      }
    }

    switch(TdColor) {
      /*case 'rgb(242, 242, 242)' :{
                                  bscal.color_old_array[res] = '#f2f2f2';
                                  bscal.number_color[res] = '#ffffff';
                                  $("#"+TdObj.id).css('background-color','#000000');
                                  $("#"+TdObj.id).css('color','#ffffff');
                                  bscal.id_color_array[res] = $("#"+TdObj.id).css('background-color');
                                  bscal.cell_id_array[res] = TdObj.id;
                                  break;
      }*/
      case 'rgb(0, 0, 0)' :{
                                  bscal.color_old_array[res] = '#f2f2f2';
                                  bscal.number_color[res] = '#ffffff';
                                  $("#"+TdObj.id).css('background-color','#17c005');
                                  $("#"+TdObj.id).css('color','#ffffff');
                                  bscal.id_color_array[res] = $("#"+TdObj.id).css('background-color');
                                  bscal.cell_id_array[res] = TdObj.id;
                                  break;
      }
      case 'rgb(23, 192, 5)' :{
                                  bscal.color_old_array[res] = '#f2f2f2';
                                  bscal.number_color[res] = '#ffffff';
                                  $("#"+TdObj.id).css('background-color','#bbc028');
                                  $("#"+TdObj.id).css('color','#ffffff');
                                  bscal.id_color_array[res] = $("#"+TdObj.id).css('background-color');
                                  bscal.cell_id_array[res] = TdObj.id;
                                  break;
      }
      case 'rgb(187, 192, 40)' :{
                                  bscal.color_old_array[res] = '#f2f2f2';
                                  bscal.number_color[res] = '#ffffff';
                                  $("#"+TdObj.id).css('background-color','#d86c00');
                                  $("#"+TdObj.id).css('color','#ffffff');
                                  bscal.id_color_array[res] = $("#"+TdObj.id).css('background-color');
                                  bscal.cell_id_array[res] = TdObj.id;
                                  break;
      }
      case 'rgb(216, 108, 0)' :{
                                  bscal.color_old_array[res] = '#f2f2f2';
                                  bscal.number_color[res] = '#ffffff';
                                  $("#"+TdObj.id).css('background-color','#cd0404');
                                  $("#"+TdObj.id).css('color','#ffffff');
                                  bscal.id_color_array[res] = $("#"+TdObj.id).css('background-color');
                                  bscal.cell_id_array[res] = TdObj.id;
                                  break;
      }
      case 'rgb(205, 4, 4)' :{
                                  bscal.color_old_array[res] = '#f2f2f2';
                                  bscal.number_color[res] = '#ffffff';
                                  //$("#"+TdObj.id).css('background-color','#f2f2f2');
                                  $("#"+TdObj.id).css('background-color','#000000');
                                  //$("#"+TdObj.id).css('color','#0054e3');
                                  if(bscal.weekend_click_array[res]!=null) {
                                    bscal.color_old_array[res] = '#9a9a9a';
                                    $("#"+bscal.weekend_click_array[res]).css('background-color','#9a9a9a');
                                    bscal.flag_weekend = 0;
                                  }
                                  delete(bscal.id_color_array[res]);
                                  delete(bscal.cell_id_array[res]);
                                  delete(bscal.number_color[res]);
                                  break;
      }
    }

  }
},
  istoday : function(day) {
    return (bscal.nowD==day && bscal.curM==bscal.nowM && bscal.curY == bscal.nowY) ? true : false;
},

  dover : function(el) {
    if (el.innerHTML=='&nbsp;') return false;
    bscal.hover = el.className;
    if(bscal._color!=false) {
      el.className = 'over';
    }
  },
  dout  : function(el) {
    if (el.innerHTML=='&nbsp;') return false;
    el.className = bscal.hover;
    bscal.hover = null;
  },
  today : function() {
    bscal.curD = bscal.nowD;
    bscal.curM = bscal.nowM;
    bscal.curY = bscal.nowY;
    bscal.scroll_M(0);
  },
  change_M : function (dir) {
    bscal.curM = dir*1;
    bscal.scroll_Y(0);
  },
  scroll_M : function (dir) {
    bscal.curM = bscal.curM + dir;
    if (bscal.curM < 1) {
      bscal.curM = 12;
      bscal.curY -= 1;
    }
    if (bscal.curM > 12) {
      bscal.curM = 1;
      bscal.curY += 1;
    }
    document.getElementById('bs_month').selectedIndex=bscal.curM-1
      bscal.scroll_Y(0);
  },
  change_Y : function (dir) {
    if (dir.length != 4) return false;
    bscal.curY = dir*1;
    bscal.scroll_Y(0);
  },
  scroll_Y : function (dir) {
    bscal.curY+= dir;
    if (bscal.curY < bscal.minY) bscal.curY = bscal.minY;
    if (bscal.curY > bscal.maxY) bscal.curY = bscal.maxY;
    document.getElementById('bs_year').value = bscal.curY;
    bscal.draw();
  },

  isLeap : function (year) {
    return (((year % 4)==0) && ((year % 100)!=0) || ((year % 400)==0)) ? true : false },

  html : function() {


    var res  = "";
    res += "<table cellpadding='0' cellspacing='0' width='372px' height='10px' class='top'>\n";
    res += "<tr><td onclick='bscal.hide();' align=right style='cursor:pointer' colspan='2'><span style='color:#303031;font-size:12pt;' id='close_calendar'>" + bscal.cal_close + "</span></td></tr>\n";
    res += "</table>";
    res += "<table cellpadding='0' cellspacing='7'  bgcolor='#f9f9f9' width='372px' height='386px' unselectable='on'>\n";
    res += "<tr unselectable='on' bgcolor='#f2f2f2'><td colspan='7' align='center' unselectable='on'><select id='bs_month' style='width:40%;' onchange=\"bscal.change_M(this.value);bscal.div.focus();\"></select>&nbsp;<select id='bs_year' type='text' style='width:30%' onchange=\"bscal.change_Y(this.value);\" onkeyup=\"bscal.change_Y(this.value);\"></select></td></tr>\n";
    res += "<tr unselectable='on' align='center'>\n";
    for (var x=0;x<7;x++) {
       if(x>=5)
         res += "<TD class='weekendday' width='30'  unselectable='on'>"+bscal.wds[x]+"</TD>\n";
       else
         res += "<TD class='week' width='30'  unselectable='on'>"+bscal.wds[x]+"</TD>\n";
    }
    res += "</tr>";
    for (var y=1;y<=6;y++) {
      res += "<TR align='center' unselectable='on' >\n";
      for (var x=1;x<=7;x++) {
        res += "<td id='cell_"+y+"_"+x+"' onmouseover=\"bscal.dover(this);\" onmouseout=\"bscal.dout(this);\" onclick=\"bscal.retD(this.innerHTML,this);\" unselectable=on>"+y+"_"+x+"</td>\n";
      }
      res += "</TR>\n";
    }
    res += "<tr bgcolor='#f2f2f2' align='center'>\n"+
             "<td class=bot onClick=bscal.scroll_Y(-1);><img src='/jqcalendar/images/left_double_arrow.gif' alt='' align='absmiddle' border='0'></td><td class=bot onClick=bscal.scroll_M(-1);><img src='/jqcalendar/images/left_arrow.gif' alt='' align='absmiddle' border='0'></td>\n"+
             "<td colspan='3' class='bot' onClick=\"bscal.today();bscal.retD("+bscal.nowD+");\">сегодня</td>\n"+
             "<td class='bot' onClick=bscal.scroll_M(1);><img src='/jqcalendar/images/right_arrow.gif' alt='' align='absmiddle' border='0'></td><td class=bot onClick=bscal.scroll_Y(1);><img src='/jqcalendar/images/right_double_arrow.gif' alt='' align='absmiddle' border='0'></td>\n"+
           "</tr>\n";
    res += "</table>";
    return res;
  },

  show : function(id_to,hid_id) {

    if (id_to==bscal.id_to) {
      bscal.hide();
    }


    bscal.id_to = id_to;
    bscal.obj = document.getElementById(id_to);
    var pos = bscal.pos(bscal.obj);
    pos.x += bscal.left;
    pos.y += bscal.obj.offsetHeight+bscal.top;
    bscal.today();

    /*if ((pos.y+bscal.height)>document.body.offsetHeight)pos.y-= bscal.height+bscal.obj.offsetHeight;*/

    if ((pos.x+bscal.width)>document.body.offsetWidth)pos.x = document.body.offsetWidth-bscal.width;
    bscal.div.style.display = "block";
    bscal.ifr.style.display = "block";
    bscal.width  = bscal.ifr.style.width  = bscal.div.offsetWidth;
    bscal.height = bscal.ifr.style.height = bscal.div.offsetHeight;
    bscal.div.style.left = bscal.ifr.style.left = pos.x;
    bscal.div.style.top  = bscal.ifr.style.top  = pos.y;
    bscal.hidden_id = hid_id;
  },

  hide : function() {
    if(bscal.addtovar==true) return false;

    if(bscal.display_always==false) {
      bscal.id_to = null;
      bscal.div.style.display = "none";
      bscal.ifr.style.display = "none";
    }
  },
  pos  : function (el) {
    var r = { x: el.offsetLeft, y: el.offsetTop };
    if (el.offsetParent) {
      var tmp = bscal.pos(el.offsetParent);
      r.x += tmp.x;
      r.y += tmp.y;
    }
    return r;
  }
};
