/*----------------------------------------------------------------------------|
|  Subject:       Simple Datepicker
|  Version:       1.0
|  Author:        Anonymous
|  Revisor        Sunarrow
|  Created:       2008-9-26
|  LastModified:  2008-9-26
|  Download:      http://code.google.com/p/cwin/downloads/list
\-----------------------------------------------------------------------------*/
var _c_allMonth=[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var _c_allNameOfWeekDays=["一","二", "三", "四", "五", "六", "日"];
var _c_allNameOfMonths=["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"];
var _c_dateFormat = "yyyy-mm-dd";
var _c_newDate=new Date();
var _c_yearZero=_c_newDate.getFullYear();
var _c_monthZero=_c_newDate.getMonth();
var _c_day=_c_newDate.getDate();
var _c_currentDay=0, currentDayZero=0;
var _c_month=_c_monthZero, year=_c_yearZero;
var _c_yearMin=1800, _c_yearMax=2020;
var _c_target='';
var _c_hoverEle=false;

document.write("<style type=\"text/css\">#basis {display:inline;position:relative;}#calender {position:absolute;top:30px;left:0;width:220px;background-color:#fff;border:3px solid #ccc;padding:10px;z-index:10;}#control {text-align:center;margin:0 0 5px 0;}#control select {font-family:\"Lucida sans unicode\", sans-serif;font-size:11px;margin:0 5px;vertical-align:middle;}#calender .controlPlus {padding:0 5px;text-decoration:none;color:#333;}#calender table {empty-cells: show;width:100%;font-size:11px;table-layout:fixed;}#calender .weekdays td{text-align:right;padding:1px 5px 1px 1px;color:#333;}#calender .week td {text-align:right;cursor:pointer;border:1px solid #fff;padding:1px 4px 1px 0;}#calender .week .today { background-color:#ccf;border-color:#ccf;}#calender .week .holiday {font-weight: bold;}#calender .week .hoverEle {border-color:#666;background-color:#99f;color:#000;}</style>");

 function setCalenderTarget(e){
      if(e) return e.target;
      if(event) return event.srcElement;
     return null;
 }
 function newCalenderElement(type, attrs, content, toNode) {
      var ele=document.createElement(type);
      if(attrs) {
           for(var i=0; i<attrs.length; i++) {
                eval('ele.'+attrs[i][0]+(attrs[i][2] ? '=\u0027' :'=')+attrs[i][1]+(attrs[i][2] ? '\u0027' :''));
           }
      }
      if(content) ele.appendChild(document.createTextNode(content));
      if(toNode) toNode.appendChild(ele);
      return ele;
 }
 function setCalenderMonth(ele){_c_month=parseInt(ele.value);calender()}
 function setCalenderYear(ele){year=parseInt(ele.value);calender()}
 function setCalenderValue(ele) {
      if(ele.parentNode.className=='week' && ele.firstChild){
           var dayOut=ele.firstChild.nodeValue;
           if(dayOut < 10) dayOut='0'+dayOut;
           var monthOut=_c_month+1;
           if(monthOut < 10) monthOut='0'+monthOut;
           var datestring = _c_dateFormat;
            datestring = datestring.replace("yyyy",year);
            datestring = datestring.replace("mm",monthOut);
            datestring = datestring.replace("dd",dayOut);
            _c_target.value = datestring;
           removeCalender();
      }
 }
 function removeCalender() {
      var parentEle=document.getElementById("calender");
      while(parentEle.firstChild) parentEle.removeChild(parentEle.firstChild);
      document.getElementById('basis').parentNode.removeChild(document.getElementById('basis'));
 }
 function calender() {
      var parentEle=document.getElementById("calender");
      parentEle.onmouseover=function(e) {
           var ele=setCalenderTarget(e);
           if(ele.parentNode.className=='week' && ele.firstChild && ele!=_c_hoverEle) {
                if(_c_hoverEle) _c_hoverEle.className=_c_hoverEle.className.replace(/hoverEle ?/,'');
                _c_hoverEle=ele;
                ele.className='_c_hoverEle '+ele.className;
           } else {
                if(_c_hoverEle) {
                     _c_hoverEle.className=_c_hoverEle.className.replace(/hoverEle ?/,'');
                     _c_hoverEle=false;
                }
           }
      }
      while(parentEle.firstChild) parentEle.removeChild(parentEle.firstChild);
      function check(){
           if(year%4==0&&(year%100!=0||year%400==0))_c_allMonth[1]=29;
           else _c_allMonth[1]=28;
      }
      function addClass (name) { if(!currentClass){currentClass=name} else {currentClass+=' '+name} };
      if(_c_month < 0){_c_month+=12; year-=1}
      if(_c_month > 11){_c_month-=12; year+=1}
      if(year==_c_yearMax-1) _c_yearMax+=1;
      if(year==_c_yearMin) _c_yearMin-=1;
      check();
      var control=newCalenderElement('p',[['id','control',1]],false,parentEle);
      var controlPlus=newCalenderElement('a', [['href','javascript:_c_month--;calender()',1],['className','controlPlus',1]], '<', control);
      var select=newCalenderElement('select', [['onchange',function(){setCalenderMonth(this)}]], false, control);
      for(var i=0; i<_c_allNameOfMonths.length; i++) newCalenderElement('option', [['value',i,1]], _c_allNameOfMonths[i], select);
      select.selectedIndex=_c_month;
      select=newCalenderElement('select', [['onchange',function(){setCalenderYear(this)}]], false, control);
      for(var i=_c_yearMin; i<_c_yearMax; i++) newCalenderElement('option', [['value',i,1]], i, select);
      select.selectedIndex=year-_c_yearMin;
      controlPlus=newCalenderElement('a', [['href','javascript:_c_month++;calender()',1],['className','controlPlus',1]], '>', control);
      check();
      _c_currentDay=1-new Date(year,_c_month,1).getDay();
      if(_c_currentDay > 0) _c_currentDay-=7;
      currentDayZero=_c_currentDay;
      var newMonth=newCalenderElement('table',[['cellSpacing',0,1],['onclick',function(e){setCalenderValue(setCalenderTarget(e))}]], false, parentEle);
      var newMonthBody=newCalenderElement('tbody', false, false, newMonth);
      var tr=newCalenderElement('tr', [['className','head',1]], false, newMonthBody);
      tr=newCalenderElement('tr', [['className','weekdays',1]], false, newMonthBody);
      for(i=0;i<7;i++) td=newCalenderElement('td', false, _c_allNameOfWeekDays[i], tr);
      tr=newCalenderElement('tr', [['className','week',1]], false, newMonthBody);
      for(i=0; i<_c_allMonth[_c_month]-currentDayZero; i++){
           var currentClass=false;
           _c_currentDay++;
           if(_c_currentDay==_c_day && _c_month==_c_monthZero && year==_c_yearZero) addClass ('today');
           if(_c_currentDay <= 0 ) {
                if(currentDayZero!=-7) td=newCalenderElement('td', false, false, tr);
           }
           else {
                if((_c_currentDay-currentDayZero)%7==0) addClass ('holiday');
                td=newCalenderElement('td', (!currentClass ? false : [['className',currentClass,1]] ), _c_currentDay, tr);
                if((_c_currentDay-currentDayZero)%7==0) tr=newCalenderElement('tr', [['className','week',1]], false, newMonthBody);
           }
           if(i==_c_allMonth[_c_month]-currentDayZero-1){
                i++;
                while(i%7!=0){i++;td=newCalenderElement('td', false, false, tr)};
           }
      }
 }
/**
 * show date picker
 * @param e  input element
 * @param df dateformat :optional parameters
 * @param min min year : optional parameters
 * @param max max year : optional parameters
 */
 function showCalender(e,df,min,max) {
     if(df != undefined && df != ''){
         _c_dateFormat = df;
     }
     if(min != undefined && max != undefined){
         _c_yearMin = min;
         _c_yearMax = max;
     }
      if(document.getElementById('basis')) { removeCalender() }
      else {
           _c_target=e;
           var basis=e.parentNode.insertBefore(document.createElement('div'),e);
           basis.id='basis';
           newCalenderElement('div', [['id','calender',1]], false, basis);
           calender();
      }
 }