browserCSSClean();
// popup date picker 

// global vars

var gobjDay,gobjMonth,gobjYear,gobjDiv;
var currentDay,currentMonth,currentYear;
var currentSelectedDay,currentSelectedMonth,currentSelectedYear;

var minYear=1900;	// limit 
var maxYear=(new Date()).getYear();if (maxYear<=1900) maxYear+=1900;	maxYear++;

var language_month_long = new Array( 
					"January",
					"February",
					"March",
					"April",
					"May",
					"June",
					"July",
					"August",
					"September",
					"October",
					"November",
					"December"
					)

var language_month_short = new Array( 
					"Jan",
					"Feb",
					"Mar",
					"Apr",
					"May",
					"Jun",
					"Jul",
					"Aug",
					"Sep",
					"Oct",
					"Nov",
					"Dec"
					)

var language_week_long = new Array(
					"Sunday",
					"Monday",
					"Tuesday",
					"Wednesday",
					"Thursday",
					"Friday",
					"Saturday"
					)

var language_week_char = new Array(
					"S",
					"M",
					"T",
					"W",
					"T",
					"F",
					"S"
					)
					
var language_todayis="today is";
var language_close="close";

function popupdatepicker(objDay,objMonth,objYear,objDiv) {
	// override current values
	if (gobjDiv) {
		popupdatepicker_close();
	}
	if (document.captureEvents)
		document.captureEvents(Event.CLICK);
	document.onclick = datePickerHandler;
	gobjDiv = objDiv;
	gobjDay = objDay;
	gobjMonth = objMonth;
	gobjYear = objYear
	// get current values
	currentDay=objDay.value;
	currentMonth=objMonth.value;
	currentYear=objYear.value;
	currentSelectedDay=objDay.value;
	currentSelectedMonth=objMonth.value;
	currentSelectedYear=objYear.value;
	setLanguage_week_char();
	setLanguage_week_long();
	setLanguage_month_short();
	setLanguage_month_long();
	setLanguage_text();
	gobjYear.style.display='none';
	popupdatepicker_build();
	//alert('Day = '+currentDay +'\nMonth = '+currentMonth +'\nYear = '+currentYear );
}

function popupdatepicker_build() {
	var arrayDays = new Array(7*5);
	// set a new date with days set to 1
	var d = new Date();
	d.setYear(currentYear);
	d.setDate(1);
	d.setMonth(currentMonth); // set after date !!

	// then get week day
	var c=1;
	// add to arrayDays
	for (var i=d.getDay();i<d.getDay()+getDays(d.getMonth(),d.getYear());i++) {
		arrayDays[i]=c;
		c++;
	}
	// set new date with month set to -1
	dm = d;
	dm.setDate(d.getDate()-1);
	var c = getDays(dm.getMonth(),dm.getYear());
	// get last day and populate array backwards
	// inline condition fixes bug 9357
	for(var i=(d.getDay()==6)?-1:d.getDay();i>=0;i--) {
		arrayDays[i]=c+1000;
		c--;
	}
	// set new date with month set to +1
	dm = d;
	dm.setDate(d.getDate()+1);
	// get day 1 and populate array forwards
	dm.setDate(1);
	c=1;
	var max=(7*5);
	if (arrayDays.length > max) {
		max=7*6;
	}
	for (var i=d.getDay()+getDays(d.getMonth(),d.getYear());i<max;i++) {
		arrayDays[i]=c+1000;
		c++;
	}	
	var d1="";
	var link="";
	var colc=6;
	for(var i=0;i<arrayDays.length;i++) {
		colc++;
		if (colc>=7) { colc=0; d1+="<tr>"; }
		link="<td onclick='popupdatepicker_select(new Date(";
		link+=getDateCon(arrayDays[i],i);
		link+="));return(false);'";
		if (isLTIE7()) link+= ' onmouseover="popupdatepickerM(this)"' + ' onmouseout="popupdatepickerM(this)"';
		if ( (currentSelectedDay ==arrayDays[i]) &&
			 (currentSelectedMonth ==currentMonth) &&
			 (currentSelectedYear ==fYear(currentYear) )
			) { 
			link+=' class="popupdatepicker_selectedDate"'; }
		if (arrayDays[i]>31) {
			link+=' class="popupdatepicker_outOfMonthDate"';
			link+=">";
			link+=(arrayDays[i]-1000) + "</td>";
		} else {
			link+=' class="popupdatepicker_date"'; 
			link+=">";
			link+=arrayDays[i] + "</td>";
		}
		d1+=link;
		if (colc>=7) d1+="</tr>";
	}
	gobjDiv.innerHTML = buildHeader() + '<div class="popupdatepicker_table_div"><table class="popupdatepicker_table" cellPadding="3" cellSpacing="0">' + buildWeekDays() + '<tr class="popupdatepicker_table_line"><td colspan="7" class="popupdatepicker_table_line"></td></tr>' + d1 + "</table></div>"+buildToday()+buildfooter() ;
	gobjDiv.style.display='block';
}

function buildWeekDays() {
	var header="<tr>";
	for(var i=0;i<language_week_char.length;i++) {
		header+='<th class="popupdatepicker_week">'+language_week_char[i]+"</th>";
	}
	header+="</tr>";
	return(header);
}

function buildHeader() {
	var header="";
	header+='<div onclick="popupdatepicker_prev();" class="popupdatepicker_prev"></div>';
	header+='<div class="popupdatepicker_header">'+language_month_long[currentMonth]+', '+fYear(currentYear)+'</div>';
	header+='<div onclick="popupdatepicker_next();" class="popupdatepicker_next"></div>';
	return(header);
}

function buildToday() {
	var header="";
	var today = new Date();
	header+=language_todayis+': <span class="popupdatepicker_today">';
	header+=language_week_long[today.getDay()]+", ";
	header+=language_month_short[today.getMonth()] ;
	header+=" ";
	header+=today.getDate();
	header+="</span>";
	return('<div class="popupdatepicker_today">'+header+'</div>');
}

function buildfooter() {
	return('<div onclick="popupdatepicker_close();" class="popupdatepicker_footer">'+language_close+'</div>');
}

function popupdatepicker_prev() {
		var month,year;	
		month=currentMonth;
		year=currentYear;
		month--;
		if (month<=-1) {
			month=11;
			year--;
		}
		if (year<minYear) { year=minYear; month=0; }
		currentMonth=month;
		currentYear=year;
		popupdatepicker_build();
}

function popupdatepicker_next() {
		var month,year;	
		month=currentMonth;
		year=currentYear;
		month++;
		if (month>=12) {
			month=0;
			year++;
		}
		if (year>maxYear) { year=maxYear; month=11; }
		currentMonth=month;
		currentYear=year;
		popupdatepicker_build();
}


// apply selected date to form and close popupdatepicker
function popupdatepicker_select(selectedDate) {
	gobjYear.value=fYear(selectedDate.getYear());
	currentYear = gobjYear.value;
	gobjMonth.value=selectedDate.getMonth();
	currentMonth = gobjMonth.value;
	// ensure date exists.
	gobjDay.value=selectedDate.getDate();
	updateDaysSelect(gobjDay,gobjMonth,gobjYear)
	currentDay = gobjDay.value;
	popupdatepicker_close();
	if (gobjYear.value=="") gobjYear.value="1900";
	if (gobjDay.value=="") gobjDay.value="1";
}

// this is basicaly cancel, as select is one click deal
function popupdatepicker_close() {
	gobjDiv.innerHTML="";
	gobjDiv.style.display='none';
	gobjYear.style.display='inline';	
	if (document.captureEvents)
		document.releaseEvents(Event.CLICK);
	document.onclick ='';
}

function getDateCon(day,counter) {
		// build a date string yyyy,mm,dd
		var month,year;
		month=currentMonth;
		year=currentYear;
		if (day>=1000) {day-=1000;}
		if ((counter<7) && (day > 20)) { 
			month--;
			if (month<=-1) { 
				month=11;
				year--;
			}
		} else if((counter>20) && (day < 7)) { 
			month++;
			if (month>=12) { 
				month=0;
				year++;
			}
		}
		return(fYear(year)+","+month+","+day);
}

function fYear(year) {
	if (year<1900) year+=1900;
	return(year);
}

function setLanguage_month_long() {
	var objHF = gobjDay.parentNode.getElementsByTagName('input')['popup_localised_month_long'];
	if (objHF) {
		var arr=objHF.value.split(',');
		for (var i=0;i<arr.length;i++) {
			language_month_long[i] = arr[i];
		}
	}	
}
function setLanguage_month_short() {
	var objHF = gobjDay.parentNode.getElementsByTagName('input')['popup_localised_month_short'];
	if (objHF) {
		var arr=objHF.value.split(',');
		for (var i=0;i<arr.length;i++) {
			language_month_short[i] = arr[i];
		}
	}

}
function setLanguage_week_long() {
	var objHF = gobjDay.parentNode.getElementsByTagName('input')['popup_localised_week_long'];
	if (objHF) {
		var arr=objHF.value.split(',');
		for (var i=0;i<arr.length;i++) {
			language_week_long[i] = arr[i];
		}
	}
}

function setLanguage_week_char() {
	var objHF = gobjDay.parentNode.getElementsByTagName('input')['popup_localised_week_char'];
	if (objHF) {
		var arr=objHF.value.split(',');
		for (var i=0;i<arr.length;i++) {
			language_week_char[i] = arr[i];
		}
	}
}

function setLanguage_text() {										
	var objHF = gobjDay.parentNode.getElementsByTagName('input')['popup_localised_text_todayis'];
	if (objHF) {
		language_todayis=objHF.value;
	}
	objHF = gobjDay.parentNode.getElementsByTagName('input')['popup_localised_text_close'];
	if (objHF) {
		language_close=objHF.value;
	}
}

function isLTIE7() {
	var ret=false;
	if (navigator.appName=="Microsoft Internet Explorer") {
		var s=navigator.appVersion.indexOf("MSIE ");
		if (s>0) {
			var aver = navigator.appVersion.substring(s+5,s+5+1);
			if (parseInt(aver)<7) {
				ret=true;
			}
		}
	}
	return(ret);			
}

function browserCSSClean() {
	if (isLTIE7()) {
		var clean1 = addCSSRule(".popupdatepicker_prev");
		var clean2 = addCSSRule(".popupdatepicker_next");
		var clean3 = addCSSRule(".calendar_selection_right_rounded");
		var clean4 = addCSSRule("img.calendar_popup");
		clean1.style.marginLeft="4px";
		clean2.style.marginRight="5px";
		clean3.style.right="-1px";
		clean4.style.paddingTop="3px";
	}
}

//http://www.hunlock.com/blogs/Totally_Pwn_CSS_with_Javascript
function getCSSRule(ruleName, deleteFlag) {               // Return requested style obejct
   ruleName=ruleName.toLowerCase();                       // Convert test string to lower case.
   if (document.styleSheets) {                            // If browser can play with stylesheets
      for (var i=0; i<document.styleSheets.length; i++) { // For each stylesheet
         var styleSheet=document.styleSheets[i];          // Get the current Stylesheet
         var ii=0;                                        // Initialize subCounter.
         var cssRule=false;                               // Initialize cssRule. 
         do {                                             // For each rule in stylesheet
            if (styleSheet.cssRules) {                    // Browser uses cssRules?
               cssRule = styleSheet.cssRules[ii];         // Yes --Mozilla Style
            } else {                                      // Browser usses rules?
               cssRule = styleSheet.rules[ii];            // Yes IE style. 
            }                                             // End IE check.
            if (cssRule)  {                               // If we found a rule...
               if (cssRule.selectorText.toLowerCase()==ruleName) { //  match ruleName?
                  if (deleteFlag=='delete') {             // Yes.  Are we deleteing?
                     if (styleSheet.cssRules) {           // Yes, deleting...
                        styleSheet.deleteRule(ii);        // Delete rule, Moz Style
                     } else {                             // Still deleting.
                        styleSheet.removeRule(ii);        // Delete rule IE style.
                     }                                    // End IE check.
                     return true;                         // return true, class deleted.
                  } else {                                // found and not deleting.
                     return cssRule;                      // return the style object.
                  }                                       // End delete Check
               }                                          // End found rule name
            }                                             // end found cssRule
            ii++;                                         // Increment sub-counter
         } while (cssRule)                                // end While loop
      }                                                   // end For loop
   }                                                      // end styleSheet ability check
   return false;                                          // we found NOTHING!
}                                                         // end getCSSRule 

function killCSSRule(ruleName) {                          // Delete a CSS rule   
   return getCSSRule(ruleName,'delete');                  // just call getCSSRule w/delete flag.
}                                                         // end killCSSRule

function addCSSRule(ruleName) {                           // Create a new css rule
   if (document.styleSheets) {                            // Can browser do styleSheets?
      if (!getCSSRule(ruleName)) {                        // if rule doesn't exist...
         if (document.styleSheets[0].addRule) {           // Browser is IE?
            document.styleSheets[0].addRule(ruleName, null,0);      // Yes, add IE style
         } else {                                         // Browser is IE?
            document.styleSheets[0].insertRule(ruleName+' { }', 0); // Yes, add Moz style.
         }                                                // End browser check
      }                                                   // End already exist check.
   }                                                      // End browser ability check.
   return getCSSRule(ruleName);                           // return rule we just created.
} 

function datePickerHandler(e) {
	var source =(typeof event!='undefined')? event.srcElement : e.target;
	if (!source.className) {
		popupdatepicker_close();
	} else {
		if ( (source.className.indexOf('popupdatepicker_')!=0) &&  (source.className!='calendar_popup') ){
			popupdatepicker_close();
		}
	}
	if (typeof event=='undefined') {
		routeEvent(e);
	}
}

function popupdatepickerM(obj) {
	if (obj.className.indexOf('_HOVER')<0) {
		obj.className+='_HOVER';
	} else {
		obj.className=obj.className.substring(0,obj.className.indexOf('_HOVER'));
	}
}

var calref2=0;