var calIn;
var calOut;
var over_cal=false;
var calInMargin=convertDaysToUnix(marginInMin);
var calInRange=convertDaysToUnix(marginInMax);
var calInDateMin=new Date();
var calInDateMax=new Date();
calInDateMin.setTime(calInDateMin.getTime()+calInMargin);
calInDateMax.setTime(calInDateMin.getTime()+calInRange);
var calOutMargin=convertDaysToUnix(marginOutMin);
var calOutRange=convertDaysToUnix(marginOutMax);
var calOutDateMin=new Date();
var calOutDateMax=new Date();
var calInDateStart=new Date;
calInDateStart.setTime(calInDateMin.getTime()+convertDaysToUnix(startDateInMod));
var calOutDateStart=new Date;
calOutDateStart.setTime(calOutDateMin.getTime()+convertDaysToUnix(startDateOutMod));

function init()
{
	calIn=new YAHOO.widget.CalendarGroup("calIn",nameInContainer,{title:calInTitle,close:true});
	calIn=localizationGeneral(calIn);
	calOut=new YAHOO.widget.CalendarGroup("calOut",nameOutContainer,{title:calOutTitle,close:true});
	calOut=localizationGeneral(calOut);
	setDateOutMargin(calInDateMin);
	calIn.cfg.setProperty('mindate',dateToStringFormat(calInDateMin));
	calIn.cfg.setProperty('maxdate',dateToStringFormat(calInDateMax));
	//selectRender();
	calIn.selectEvent.subscribe(getDateIn,calIn,true);
	calOut.selectEvent.subscribe(getDateOut,calOut,true);
	calIn.renderEvent.subscribe(setupListenersIn,calIn,true);
	calOut.renderEvent.subscribe(setupListenersOut,calOut,true);
	YAHOO.util.Event.addListener(nameInInput,'focus',showCalIn);
	YAHOO.util.Event.addListener(nameOutInput,'focus',showCalOut);
	YAHOO.util.Event.addListener(nameInInput,'blur',hideCalIn);
	YAHOO.util.Event.addListener(nameOutInput,'blur',hideCalOut);
	//YAHOO.util.Event.addListener(nameBetween,'change',betweenChange);
	//AHOO.util.Dom.get(nameInInput).value=dateToStringFormat(calInDateStart);
	setDateInCalIn(dateToStringFormat(calInDateStart));
	//YAHOO.util.Dom.get(nameOutInput).value=dateToStringFormat(calOutDateStart);
	setDateInCalOut(dateToStringFormat(calOutDateStart));
	//setBetweenSelect();
	calIn.render();
	calOut.render();
}
function setupListenersIn()
{
	YAHOO.util.Event.addListener(nameInContainer,'mouseover',overCal);
	YAHOO.util.Event.addListener(nameInContainer,'mouseout',outCal);
}
function setupListenersOut(){
	YAHOO.util.Event.addListener(nameOutContainer,'mouseover',overCal);
	YAHOO.util.Event.addListener(nameOutContainer,'mouseout',outCal);
}
function getDateIn(){
		
	var calInDate=new Date(calIn.getSelectedDates()[0]);
	var calOutDate=new Date(calOut.getSelectedDates()[0]);
	
	calOutDate.setTime(calInDate.getTime()+convertDaysToUnix(YAHOO.util.Dom.get(nameBetween).value));

	setDateInCalOut(dateToStringFormat(calOutDate));
	
	setDateOutMargin(calInDate);
		
	if (calOutDate.getTime()<calOutDateMin.getTime()){
		calOutDate.setTime(calOutDateMin.getTime());
		setDateInCalOut(dateToStringFormat(calOutDate));
	}
	if (calOutDate.getTime()>calOutDateMax.getTime()){
		calOutDate.setTime(calOutDateMax.getTime());
		setDateInCalOut(dateToStringFormat(calOutDate));
	}
	setBetweenSelect();
	
	YAHOO.util.Dom.get(nameOutInput).value=dateToStringFormat(calOutDate);
	YAHOO.util.Dom.get(nameInInput).value=dateToStringFormat(calInDate);
	over_cal=false;
	calIn.render();
	calOut.render();
	hideCalIn();
}
function getDateOut(){
	var calInDate=new Date(calIn.getSelectedDates()[0]);
	var calOutDate=new Date(calOut.getSelectedDates()[0]);
	var calInDateMinUnix=calInDateMin.getTime();
	var calInDateMaxUnix=calInDateMax.getTime();
	setDateOutMargin(calInDate);
	setBetweenSelect();
	YAHOO.util.Dom.get(nameInInput).value=dateToStringFormat(calInDate);
	YAHOO.util.Dom.get(nameOutInput).value=dateToStringFormat(calOutDate);
	over_cal=false;
	calIn.render();
	calOut.render();
	hideCalOut();
}
function betweenChange(){
	var value=convertDaysToUnix(YAHOO.util.Dom.get(nameBetween).value);
	var selectedDateIn=new Date(calIn.getSelectedDates()[0]);
	selectedDateIn.setTime(selectedDateIn.getTime()+value);
	setDateInCalOut(dateToStringFormat(selectedDateIn));
	YAHOO.util.Dom.get(nameOutInput).value=dateToStringFormat(selectedDateIn);calOut.render();
}
function showCalIn(){
	var xy=YAHOO.util.Dom.getXY(nameInInput);
	var date=YAHOO.util.Dom.get(nameInInput).value;
	if(date){
		setDateInCalIn(date);calIn.render();
	}
	YAHOO.util.Dom.setStyle(nameInContainer,'display','block');
	xy[1]=xy[1]+20;
	YAHOO.util.Dom.setXY(nameInContainer, xy);
}
function showCalOut(){
	var xy=YAHOO.util.Dom.getXY(nameOutInput);
	var date=YAHOO.util.Dom.get(nameOutInput).value;
	if(date){
		setDateInCalOut(date);
		calOut.render();
	}
	YAHOO.util.Dom.setStyle(nameOutContainer,'display','block');
	xy[1]=xy[1]+20;
	YAHOO.util.Dom.setXY(nameOutContainer, xy);
}
function hideCalIn(){
	//alert("aa" + over_cal);
	if(!over_cal)
	{
		YAHOO.util.Dom.setStyle(nameInContainer,'display','none');
	}
}
function hideCalOut(){
	if(!over_cal){
		YAHOO.util.Dom.setStyle(nameOutContainer,'display','none');
		}
}
function overCal(){over_cal=true;}
function outCal(){over_cal=false;}

function setDateOutMargin(date){
	calOutDateMin.setTime(date.getTime()+calOutMargin);
	calOutDateMax.setTime(date.getTime()+calOutRange);
	calOut.cfg.setProperty('mindate',dateToStringFormat(calOutDateMin));
	calOut.cfg.setProperty('maxdate',dateToStringFormat(calOutDateMax));
}
function setDateInCalIn(date){
	var dateArray=date.split("-");
	var dateObject=new Date(dateArray[0],(dateArray[1]-1),dateArray[2]);
	calIn.cfg.setProperty('selected',date);
	calIn.cfg.setProperty('pagedate',dateObject);
}
function setDateInCalOut(date){
	var dateArray=date.split("-");
	var dateObject=new Date(dateArray[0],(dateArray[1]-1),dateArray[2]);
	calOut.cfg.setProperty('selected',date);
	calOut.cfg.setProperty('pagedate',dateObject);
}
function dateToStringFormat(object){
	var dDay=object.getDate().toString();
	var dMonth=(object.getMonth()+1).toString();
	if(dDay.length<2){dDay="0"+dDay;}
	if(dMonth.length<2){
		dMonth="0"+dMonth;
	}
	return object.getFullYear()+'-'+dMonth+'-'+dDay;
}
function setBetweenSelect(num){
	var dateFirst=new Date(calOut.getSelectedDates()[0]);
	var dateSecond=new Date(calIn.getSelectedDates()[0]);
	var num=getNumberOfDaysBetweenTwoDates(dateFirst.getTime(),dateSecond.getTime());
	YAHOO.util.Dom.get(nameBetween).value=num;
}
function getNumberOfDaysBetweenTwoDates(first,second){
	var output=((first-second)/60/60/24/1000);
	return output;
}
function convertDaysToUnix(days){
	var unix=days*60*60*24*1000;return unix;
}
function selectRender(){}

function localizationGeneral(calendar){
	calendar.cfg.setProperty("DATE_FIELD_DELIMITER","-");
	calendar.cfg.setProperty("DATE_RANGE_DELIMITER","=");
	calendar.cfg.setProperty("MDY_DAY_POSITION",3);
	calendar.cfg.setProperty("MDY_MONTH_POSITION",2);
	calendar.cfg.setProperty("MDY_YEAR_POSITION",1);
	calendar.cfg.setProperty("START_WEEKDAY",1);
	calendar=localizationNames(calendar);
	return calendar;
}
YAHOO.util.Event.addListener(window,'load',init);
