var sCurrentRQControlCalendar=0;
function RQControlCalendar()
{
	this.m_name			= "";
	this.m_divName		= "";
	this.m_inputStrName	= "";
	this.m_refDivId		= "";
	this.m_obj			= null;
	this.m_cbApply		= null;
	this.m_usrVal		= null;
	this.m_popupObj		= null;
	this.m_selected		= null;
	this.m_selectedStr	= null;
	this.m_isTime		= false;
	this.m_isAdmin		= false;
	this.m_isOpen		= false;
	this.M_init = function(opts)
	{
		this.m_isOpen	= true;
		this.m_name		= opts.varName;
		this.m_divName	= "calendar"+this.m_name;
		this.m_inputStrName = "calendarstr_"+this.m_name;
		this.m_refDivId	= opts.ref ? opts.ref:"input[name="+this.m_inputStrName+"]";
		this.m_selected	= null;
		this.m_isTime	= opts.time;
		this.m_cbApply	= opts.cb?opts.cb:null;
		this.m_usrVal	= opts.userData? opts.userData : null;

		// create the calendar div
		this.m_obj = document.createElement("div");
		$(this.m_obj).addClass('rqsiteCalendarPlaceholder').addClass('PanelOlive');		// PanelOlive depends on the style ==> no good to see it here
		$(this.m_obj).attr('id',this.m_divName).css({display:"none",position:"absolute",zIndex:"200"});

		
		// create a popup
		this.m_popupObj = document.createElement("div");
		$(this.m_popupObj).prependTo($(document.body));
		$(this.m_popupObj).addClass("popupBg");
		$(this.m_popupObj).css({position:"absolute", display:"none",opacity:"0.3",width:"100%",height:Math.max( $(document).height(),$(window).height()),background:"#000",zIndex:"2",top:"0",left:"0"});
		$(this.m_popupObj).attr("id",'popup'+this.m_name);
		$(this.m_popupObj).fadeIn("fast",RQDelegate(this,this.M_cbShow));

		// position calendar
		$(this.m_popupObj).after(this.m_obj);
		var tePos,te;
		if(te = this.M_getTextEdit())
		{	tePos = te.offset();
			if( tePos)
			{
				$(this.m_obj).css({ position:"absolute", top:tePos.top, left:tePos.left});
			}
		}


		this.M_fill();

	}
	this.M_getTextEdit =function()
	{
		return $(this.m_refDivId);
	}

	this.M_cbShow = function()
	{
	}
	this.M_fill = function()
	{	
		var url="action=showCalendar&calName="+this.m_name;
		var initialValue="";
		//if( initialValue =$("input[@name="+this.m_name+"]").val())				// works but it's too weird
		if( initialValue =RQGetVariableValue(this.m_name).substr(0,10))
		{	url+="&date="+initialValue;
			this.m_selected = initialValue;		
		}
		if(this.m_isTime)
			url+="&isTime="+this.m_isTime;
		if(this.m_isAdmin)
			RQSiteAdminAjaxCallPlugin("RQControlCalendar",url,"M_cbShowCalendar",this)
		else
			RQAjaxCallPlugin("RQControlCalendar",url,"M_cbShowCalendar",this)
	}

	this.M_cbShowCalendar = function(message,isErr)
	{
		if( !isErr)
		{
			eval(message);
			this.M_markSelected();
			$(this.m_obj).css({position:"absolute",zIndex:"5"}).fadeIn();

		}
	}
	this.M_navigate = function (y,m)
	{	
		if(this.m_isAdmin)
			RQSiteAdminAjaxCallPlugin("RQControlCalendar","action=showCalendarContent&calName="+this.m_name+"&year="+y+"&month="+m+(this.m_isTime?"&isTime=true":""),"M_cbShowCalendar",this)
		else
			RQAjaxCallPlugin("RQControlCalendar","action=showCalendarContent&calName="+this.m_name+"&year="+y+"&month="+m+(this.m_isTime?"&isTime=true":""),"M_cbShowCalendar",this)
	}

	this.M_click = function(dt,dtString)
	{
		this.m_selected		= dt;
		this.m_selectedStr	= dtString ;
		$(".rqsiteCalendarSelected").html(dtString);	
		this.M_markSelected();
	}
	this.M_markSelected=function()
	{
		if(this.m_selected)
		{
			$(".rqsiteCalendarPlaceholder .calSel").removeClass("calSel").addClass("calNrm");
			$("#dt"+this.m_selected).parent().addClass("calSel");
		}

	}
	this.M_today = function()
	{
		if(this.m_isAdmin)
			RQSiteAdminAjaxCallPlugin("RQControlCalendar","action=setCalendarToday&calName="+this.m_name,"M_cbShowCalendar",this)
		else
			RQAjaxCallPlugin("RQControlCalendar","action=setCalendarToday&calName="+this.m_name,"M_cbShowCalendar",this)

	}
	this.M_apply = function()
	{	
		var inputName =this.m_name;
		if( this.m_selected)
		{	var value=this.m_selected;
			var strTime=""
			if(this.m_isTime)
			{	strTime=" "+RQGetVariableValue(inputName+"_hour")+":"+RQGetVariableValue(inputName+"_mins");
				value+=strTime;
			}

			if(this.m_cbApply)
				this.m_cbApply(this.m_usrVal,value,this.m_selectedStr,strTime);
			else
			{
				SetVariable(inputName,this.m_selected + strTime);
				SetVariable(this.m_inputStrName, this.m_selectedStr + strTime);
			}
			this.M_close();

		}
	}
	this.M_close = function()
	{
		if(this.m_popupObj)
		{	$(this.m_obj).hide();
			$(this.m_popupObj).fadeOut("fast",RQDelegate(this,this.M_cbClosed));
			this.M_getTextEdit().removeClass("selected");
			this.m_isOpen	= false;

		}
	}
	this.M_cbClosed = function()
	{	$(this.m_obj).remove();
		$(this.m_popupObj).remove();
	}
}
RQControlCalendar.sm_instance= null;
RQControlCalendar.sM_getInstance = function()
{
	if(!RQControlCalendar.sm_instance )
		RQControlCalendar.sm_instance = new RQControlCalendar()
	return RQControlCalendar.sm_instance;
}
RQControlCalendar.sM_mouseover = function(te)
{
	$(te).addClass("selected");
}
RQControlCalendar.sM_mouseout = function(te)
{
	$(te).removeClass("selected");
}


RQControlCalendar.sM_click=function(dt,dtString)
{	RQControlCalendar.sM_getInstance().M_click(dt,dtString);
}
RQControlCalendar.sM_navigate=function(y,m)
{	RQControlCalendar.sM_getInstance().M_navigate(y,m);
}

RQControlCalendar.sM_apply = function()
{
	RQControlCalendar.sM_getInstance().M_apply();
}
RQControlCalendar.sM_today = function()
{
	RQControlCalendar.sM_getInstance().M_today();
}

RQControlCalendar.sM_cancel = function()
{
	RQControlCalendar.sM_getInstance().M_close();
}
function rqSiteCalendarOver(date)
{
}

RQControlCalendar.sM_show = function(opts)
{
	if( c =RQControlCalendar.sM_getInstance())
	{
		if( !c.m_isOpen)
		{
			c.m_isAdmin=opts.admin?true:false;
			c.M_init(opts);
		}
	}
}
