//Ken Chin 2007-01-11 
//http://www.henoo.com

function isDate(p_Expression){
	return !isNaN(new Date(p_Expression));		// <<--- this needs checking
}

// REQUIRES: isDate()
function dateAdd(p_Interval, p_Number, p_Date){
	if(!isDate(p_Date)){return "invalid date: '" + p_Date + "'";}
	if(isNaN(p_Number)){return "invalid number: '" + p_Number + "'";}	

	p_Number = new Number(p_Number);
	var dt = new Date(p_Date);
	switch(p_Interval.toLowerCase()){
		case "yyyy": {// year
			dt.setFullYear(parseInt(dt.getFullYear()) + parseInt(p_Number));
			break;
		}
		case "q": {		// quarter
			dt.setMonth(parseInt(dt.getMonth()) + parseInt(p_Number*3));
			break;
		}
		case "m": {		// month
			dt.setMonth(parseInt(dt.getMonth()) + parseInt(p_Number));
			break;
		}
		case "y":		// day of year
		case "d":		// day
		case "w": {		// weekday
			dt.setDate(parseInt(dt.getDate()) + parseInt(p_Number));
			break;
		}
		case "ww": {	// week of year
			dt.setDate(parseInt(dt.getDate()) + parseInt(p_Number*7));
			break;
		}
		case "h": {		// hour
			dt.setHours(parseInt(dt.getHours()) + parseInt(p_Number));
			break;
		}
		case "n": {		// minute
			dt.setMinutes(parseInt(dt.getMinutes()) + parseInt(p_Number));
			break;
		}
		case "s": {		// second
			dt.setSeconds(parseInt(dt.getSeconds()) + parseInt(p_Number));
			break;
		}
		case "ms": {		// second
			dt.setMilliseconds(parseInt(dt.getMilliseconds()) + parseInt(p_Number));
			break;
		}
		default: {
			return "invalid interval: '" + p_Interval + "'";
		}
	}
	return dt;
}


var month_name = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
var day_name = new Array("Sun", "Mon", "Tues", "Wed", "Thu", "Fri", "Sat");

function fill_monthyear_list(sel_month_year){
    
	var sel_dept_date_monthyear = document.getElementById(sel_month_year);
	var todayDate = new Date();
	var defaultDate = new Date(); 
	defaultDate = dateAdd("m",1,todayDate);
					
	for (i=0;i<18;i++){		
	    	
	    if (todayDate.getDate() >= 29){todayDate = dateAdd("d",-10,todayDate);}

		if (i>0){todayDate = dateAdd("m",1,todayDate);}

		var month = todayDate.getMonth();
		var year = todayDate.getFullYear();
		
		var val = month_name[month]+' '+year;
		var key = month+'-'+year;
		
		sel_dept_date_monthyear.options[i] = new Option(val,key);
	}
	sel_dept_date_monthyear.options[1].selected=true;
}
function fill_day_list(changed,sel_month_year, div_content_, step_,date_ipt_box){	

	var sel_dept_date_monthyear = document.getElementById(sel_month_year);
	var monthyear = ""
	if (sel_dept_date_monthyear.selectedIndex + step_ < sel_dept_date_monthyear.length){
	    
	    monthyear = sel_dept_date_monthyear.options[sel_dept_date_monthyear.selectedIndex + step_].value;
	    sel_dept_date_monthyear.selectedIndex = sel_dept_date_monthyear.selectedIndex + step_;
	}
	if (monthyear != ""){
	
	    var dimmer_ = document.getElementById(div_content_).parentNode.parentNode.parentNode.parentNode.parentNode.id;
		
		var todayDate = new Date();			
		var defaultDate = new Date(); 
		var arr = monthyear.split("-");
		
		var month = arr[0];
		var year = arr[1];
		
		var dt = new Date();
		dt.setDate(1);
		dt.setMonth(month);
		dt.setFullYear(year);	
        
        var dy = new Date();
		dy.setDate(1);
		dy.setMonth(month);
		dy.setFullYear(year);	
	    var dy = dateAdd("m",-1,dy);
		
		if (changed == true){				
			defaultDate.setDate(1);
			
			defaultDate.setMonth(month);
			defaultDate.setFullYear(year);	
		}else{	
			defaultDate = dateAdd("m",1,todayDate);	
		}
		var current_month = month
		var x = dt.getMonth();
		var i =0;
		var s= "";
		s += "<table width=\"100%\" cellspacing=\"0\" cellpadding=\"2\" >"
		var cal_started = false;
		var started = false;
		var j = 0;
        var minus_days = dt.getDay();
        minus_days = minus_days -7;
        var num_rows = Math.ceil((daysInMonth(x,year) + (7 + minus_days)) / 7)
        s += "<tr class=\"cal_header\">";
    	for (j = 0;j<7;j++){
	        s += "<td>" + day_name[j] + "</td>\n";
	    }
        s += "</td>\n";
        var days_b4 = 7 + minus_days;
        for (i = 0;i < num_rows;i++){
		    for(j=0;j<7;j++){
			    if (j == 0){s +="<tr>"}
			    x = dt.getMonth();
                if (x != current_month){break;}
                var thisDay = dt.getDay();
                var val = dt.getDate();
                var year_ = dt.getYear();
                if(year_ < 2000){year_ = year_ + 1900}
                if (thisDay != j){
                    var y = dy.getMonth();
                    var val = dy.getDate();
                    var year_ = dy.getYear();
                    if(year_ < 2000){year_ = year_ + 1900}
                    var lastMonthDay = daysInMonth(y, year_);
                    val = (lastMonthDay + 1) - days_b4;
                    if (todayDate < dt){
                        if (!started){s += "<td align='center' class=\"cal_cell_shaded\" onclick=\"select_date('" + date_ipt_box + "','" + val + "-"+ month_name[y] + "-" + year_ +  "','" + dimmer_ + "')\">" + val + "</td>\n";}
                    }else{
                        s += "<td align='center' class=\"cal_cell_2\">" + val + "</td>\n";
                    }
                    days_b4 -=1
                    
                }
                if (thisDay == j){started = true;}
                if (todayDate < dt){
                    if (started){s += "<td align='center' class=\"cal_cell\" onclick=\"select_date('" + date_ipt_box + "','" + val + "-"+ month_name[x] + "-" + year_ +  "','" + dimmer_ + "')\">" + val + "</td>\n";}                
                }else{
                    if (started){s += "<td align='center' class=\"cal_cell_2\">" + val + "</td>\n";}
                }
                
                if (started){dt = dateAdd("d",1,dt);}										
                if (j == 6){s +="</tr>"}
                
		    }
		    for (k = j;k<7;k++){
		        x = dt.getMonth();
                var thisDay = dt.getDay();
                var val = dt.getDate();
                var year_ = dt.getYear();
                if(year_ < 2000){year_ = year_ + 1900}
                if (todayDate < dt){
                    if (started){s += "<td align='center' class=\"cal_cell_shaded\" onclick=\"select_date('" + date_ipt_box + "','" + val + "-"+ month_name[x] + "-" + year_ +  "','" + dimmer_ + "')\">" + val + "</td>\n";}                
                }else{
                    if (started){s += "<td align='center' class=\"cal_cell_2\">" + val + "</td>\n";}
                }
                dt = dateAdd("d",1,dt);

		        //s += "<td></td>\n";
		    }
		    if (j != 6){
		        s +="</tr>";
		    }
        }
        s += "<tr><td colspan=\"7\" align=\"center\"><a onclick=\"close_me('" + dimmer_ + "')\"  style=\"cursor:pointer;\">Close</a></td></tr>"
		s += "</table>"
		var obj = document.getElementById(div_content_);
		
		
		
		obj.innerHTML = s;
	}
}
function daysInMonth(iMonth, iYear)
{
	return 32 - new Date(iYear, iMonth, 32).getDate();
}

//function select_date(obj_name,val_,div_container_){
//    var obj = document.getElementById(obj_name);
//    obj.value = val_;
//    obj = document.getElementById(div_container_);
//    obj.style.display = "none";

//}

function select_date(obj_name,val_,div_container_){

    var obj = document.getElementById(obj_name);
    var objtxt_calendar = document.getElementById("txt_calendar")
    var objtxt_calendarRet = document.getElementById("txt_calendarRet")    
    var date
    var day 
    var moth 
    var year 
    obj.value = val_;    
    obj = document.getElementById(div_container_);
    obj.style.display = "none";
}

function close_me(id){
    var obj = document.getElementById(id);
    obj.style.display = "none";
}
