/**
 * List  datatable
 * @author Lucdt <lucdt@vnext.vn>
 */
function todayStr() {
	var today=new Date()
	return today.getMonth()+1+"/"+today.getDate()+"/"+(today.getYear() + 1900);
}
 
var CalendarController = {
	
    Dom : YAHOO.util.Dom,
    Event : YAHOO.util.Event,
    cal1: null,
    over_cal : false,
    cur_field : '',
	divCalendar : 'calContainer',
	mindate : todayStr(),

   init : function() {
        CalendarController.cal1 = new YAHOO.widget.Calendar("cal1",CalendarController.divCalendar, 
        			{ START_WEEKDAY: 1, 
        			MULTI_SELECT:false,
        			close:true
        			//,mindate:CalendarController.mindate
        			});
		CalendarController.cal1.cfg.setProperty("MDY_YEAR_POSITION", 1);
		CalendarController.cal1.cfg.setProperty("MDY_MONTH_POSITION", 2);
		CalendarController.cal1.cfg.setProperty("MDY_DAY_POSITION", 3);
	
		CalendarController.cal1.cfg.setProperty("MY_YEAR_POSITION", 1);
		CalendarController.cal1.cfg.setProperty("MY_MONTH_POSITION", 2);

        CalendarController.cal1.selectEvent.subscribe(CalendarController.getDate, CalendarController.cal1, true);
        CalendarController.cal1.renderEvent.subscribe(CalendarController.setupListeners, CalendarController.cal1, true);       
	   
        CalendarController.cal1.render();
        //dp.SyntaxHighlighter.HighlightAll('code'); 
    } ,

    setupListeners : function() {
        CalendarController.Event.addListener(CalendarController.divCalendar, 'mouseover', function() {
            CalendarController.over_cal = true;
        });
        CalendarController.Event.addListener(CalendarController.divCalendar, 'mouseout', function() {
            CalendarController.over_cal = false;
        });
    },
	
    getDate : function() {
            var calDate = this.getSelectedDates()[0];
			
			var month = calDate.getMonth() + 1;
			month = month >= 10 ? month : "0" + month;
			var day = calDate.getDate();
			day = day >= 10 ? day : "0" + day;
							
            calDate = calDate.getFullYear() + '/' + month + '/' + day;
            CalendarController.cur_field.value = calDate;            
            CalendarController.over_cal = false;
            CalendarController.hideCal();
    },
	isDate : function(strValue){
	
	   var objRegExp  =  /^\d{4}\/\d{1,2}\/\d{1,2}$/;	
		//check for Date Format
  	    if(!objRegExp.test(strValue))return false;
		//alert('lan 1');
	   datebits = strValue.split('/');
	   year = parseInt(datebits[0],10);
       month = parseInt(datebits[1],10);
       day = parseInt(datebits[2],10);

		if ((month<1) || (month>12) || (day<1) ||
       ((month==2) && (day>28+(!(year%4))-(!(year%100))+(!(year%400)))) ||
       (day>30+((month>7)^(month&1)))) return false; // date out of range
       
		return true;
  		
	},
    showCal : function(ev,tar) {
		if(typeof(tar) != 'object'){
			tar = document.getElementById(tar);		
		}
		if(typeof(ev) != 'object'){
			ev = document.getElementById(ev);		
		}
        CalendarController.cur_field = tar;
    	
		if(tar.disabled) return;
		
        var xy = CalendarController.Dom.getXY(ev),
        date = tar.value;
		if(!CalendarController.isDate(date)) date ='';
        if (date) {
            CalendarController.cal1.cfg.setProperty('selected', date);
            CalendarController.cal1.cfg.setProperty('pagedate', new Date(date), true);
        } else {
            CalendarController.cal1.cfg.setProperty('selected', '');
            CalendarController.cal1.cfg.setProperty('pagedate', new Date(), true);
        }
        CalendarController.cal1.render();
        CalendarController.Dom.setStyle(CalendarController.divCalendar, 'display', 'block');
        //xy[0] = xy[0] - 100;
		xy[1] = xy[1] + 20;
        CalendarController.Dom.setXY(CalendarController.divCalendar, xy);
    },

    hideCal : function() {
        if (!CalendarController.over_cal) {
            CalendarController.Dom.setStyle(CalendarController.divCalendar, 'display', 'none');
        }
    }
}
YAHOO.util.Event.onDOMReady(CalendarController.init);
