/**
 * @author dino
 */
 
  
  var calendarInputId = "";
  var calendarCallbackFunc = null;
  var wcalendar = {
    showCalendar : function(args) {
      var event, preGap, nextGap, date, y, m;
      try {
        event = args['cEvent'];
      } catch (e) {}
      
      calendarInputId = args["inputName"];
      if(calendarCallbackFunc == null) calendarCallbackFunc = args["callback"];
      preGap = args["preGap"] || 5
      nextGap = args["preGap"] || 5
      
	  y_pos = args["y_pos"]  || 8
      date = new Date();
      y = args["year"] || date.getFullYear();
      m = args["month"] || date.getMonth()+1;
      if(event){
        y = parseInt($(calendarInputId).value.split(".")[0]) || y;
        m = parseInt($(calendarInputId).value.split(".")[1], 10) || m;
      }
      
	  
      
      text = '<p> ' +
              ' <select style="width:62px;" onchange="wcalendar.showCalendar(#{changeYear});" id="calendarYear">   ';
              for(var year = date.getFullYear() - preGap; year < date.getFullYear() + nextGap; year ++ ){
                text += '   <option '+(year == y ? 'selected="selected"' : '' )+' value='+year+'>'+year+'</option>';
              }
      text += ' </select>년                                         ' +
              ' <select style="width:35px;" onchange="wcalendar.showCalendar(#{changeMonth})" id="calendarMonth">   ';
              for(var month = 1; month <= 12; month++){
                text += '   <option '+(month == m ? 'selected="selected"' : '' )+' value='+month+'>'+month+'</option>';
              }
      text += ' </select>월                                         ' +
              '</p>                           ' +
              '<div class="calendarbox" id="LayerCalendarBox">' +
              ' <span>' +
              ' <img src="/images/homepage/i_c1.gif" alt="이전달" onclick="wcalendar.showCalendar(#{preMonth})" style="cursor:pointer;"/>' +
              '   &nbsp;<var>#{nowYear}.#{nowMonth}</var>&nbsp; ' +
              ' <img src="/images/homepage/i_c2.gif" alt="다음달" onclick="wcalendar.showCalendar(#{nextMonth})" style="cursor:pointer;"/>' +
              ' </span>' +
              ' <table>' +
              '   <tr><th class="sun">일</th><th>월</th><th>화</th><th>수</th><th>목</th><th>금</th><th class="sat">토</th></tr>';
              
      var d1 = (y+(y-y%4)/4-(y-y%100)/100+(y-y%400)/400+m*2+
                (m*5-m*5%9)/9-(m<3?y%4||y%100==0&&y%400?2:3:4))%7;
      for (i = 0; i < 42; i++) {
           if (i%7==0) text += '</tr>\n<tr>';
           if (i < d1 || i >= d1+(m*9-m*9%8)/8%2+(m==2?y%4||y%100==0&&y%400?28:29:30))
               text += '<td> </td>';
           else
               text += '<td style="cursor:pointer" ' +
                       ' align="right"' + (i%7 ? '' : ' class="sun"') + 
                       ' onclick = "#{clickHandler}" ' +
                       ' onmouseover = "#{overHandler}" ' +
                       ' now_date='+(i+1-d1) +
                       ' now_year='+ y +
                       ' now_month='+m+'>' + (i+1-d1) + '</td>';
      }
      text += "</table>";
      text += '</tr>\n</table>'
       
      var template = new Template(text);
      var win = document.createElement('div');
      win.setAttribute('id', 'LayerCalendar');
      if(!$('LayerCalendar')){
        document.body.insertBefore(win, document.body.lastChild);    
      }else {
        $('LayerCalendar').show();
      }
       
      if(event) $('LayerCalendar').setStyle({'top':(Event.pointerY(event) + y_pos)+"px", 'left': (Event.pointerX(event)-80) + "px"});     
      $('LayerCalendar').setStyle({position:'absolute', zIndex:999999});
      $('LayerCalendar').innerHTML = template.evaluate({"preMonth" : "{'year' : " + (m==1 ? (y-1) : y )+", 'month' : "+(m==1 ? 12:(m-1))+", 'inputName' : '" + args["inputName"] + "'}", 
                                                         "nextMonth" : "{'year' : " + (m==12 ? (y+1) : y )+", 'month' : "+(m==12 ? 1:(m+1))+", 'inputName' : '" + args["inputName"] + "'}", 
                                                         "changeYear" : "{'year' : this.value, 'month' : " + m + ", 'inputName' : '" + args["inputName"] + "'}",  
                                                         "changeMonth" : "{'year' : "+y+", 'month' : this.value, 'inputName' : '" + args["inputName"] + "'}",  
                                                         "nowYear" : y, nowMonth : ((m < 10) ? ('0' + m) : m),
                                                         "clickHandler" : "wcalendar.onClickHandler(event)",
                                                         "overHandler" : "wcalendar.onMouseOverHandler(event)"
                                                         });
                                                         
		Event.observe(document, 'click', wcalendar.bfx);
    },
  
    onClickHandler : function(e){
     var element = Event.element(e);
     var now_month = element.getAttribute('now_month');
     var now_year = element.getAttribute('now_year');
     var now_date = element.getAttribute('now_date');      
     $(calendarInputId).value = now_year + "." +now_month.ljust(2, '0')+ "." + now_date.ljust(2, '0');
     $('LayerCalendar').hide();
     this._stopObserving();
     //콜백 함수
     if(calendarCallbackFunc) calendarCallbackFunc();
    },
    onMouseOverHandler : function(event){
    },
    _stopObserving : function(e){
      Event.stopObserving(document, 'click', wcalendar.bfx);
    },
    _startObserving :function(e){
	
	try {
      if(!Event.element(e).id.include('LayerCalendar') 
         && !Event.element(e).up('div').id.include('LayerCalendar') 
         && Event.element(e).id != calendarInputId
         && !Event.element(e).hasClassName('wcalendar')){
         //$('LayerCalendar').toggle();
		 $('LayerCalendar').toggle();
		 this._stopObserving();
         
       }
    } catch (e) {}
    }
  };
  
  wcalendar.bfx = wcalendar._startObserving.bindAsEventListener(wcalendar);
