﻿//.s.
//.s. Extends de JQuery (JQ rel.1.3.1)
//.s. Metodos: $("#edDesde").Calendario(CargarFechaHoy Bool,Funcion Callback Function);

var PCalendarioJS = {

	mMeses			: ["Enero","Febrero","Marzo","Abril","Mayo","Junio","Julio","Agosto","Septiembre","Octubre","Noviembre","Diciembre"],
	mDias			: ["Lu","Ma","Mi","Ju","Vi","Sa","Do"],
	mElem			: null,
	mCallBack		: null,
	mFechaMaster	: "",
	
	/*-----------------------------------------------------
	*
	*------------------------------------------------------*/
	
	Calendario : function(CargaFechaHoy,CallBack)
	{
		if (CargaFechaHoy == null){ CargaFechaHoy = false; };
				
		if (CargaFechaHoy){
			$(this).val(PCalendarioJS.GetFecha(0));
		}
		
		mFechaMaster	= "";
		mCallBack		= "";
		
		if (CallBack){
			mCallBack = CallBack;
		}
		
		$(this).click(function(){
			mElem = $(this);
			
			if ($(".calendario_DivMain").size() == 0){
				var oDiv = $("<div class='calendario_DivMain' id='divCalendario' style='display:none'></div>");
			}
			else{
				var oDiv = $(".calendario_DivMain");
			}
			
			oDiv.css({"top" : (mElem.position().top + mElem.outerHeight()),"left" : mElem.position().left});
		
			oDiv.html(PCalendarioJS._Calendario_DoHtml());
		
			$("body").append(oDiv);
			
			PCalendarioJS._Calendario_Show();
			oDiv.show('fast');
		
			oDiv.hover(function(){},function(){	oDiv.remove();});			
		});
		
	},
	
	/*-----------------------------------------------------
	*
	*------------------------------------------------------*/
	
	Str2Date : function(sDate)
	{
		iYear	= 2000 + parseFloat(sDate.substr(6,2));
		iMes	= sDate.substr(3,2) - 1;
		iDia	= parseFloat(sDate.substr(0,2))
	
		return new Date(iYear,iMes,iDia);
	},
	
	/*-----------------------------------------------------
	*
	*------------------------------------------------------*/
	
	Date2Str : function(fDate)
	{
		var sDia = fDate.getDate() > 9 ? fDate.getDate() : "0" + fDate.getDate();
		var sMes = fDate.getMonth()+1 > 9 ? fDate.getMonth()+1 : "0" + (fDate.getMonth()+1);
		var sAno = fDate.getFullYear().toString().substr(2, 2);
		
		return sDia + "/" + sMes + "/" + sAno;
	},
	
	/*-----------------------------------------------------
	*
	*------------------------------------------------------*/
	
	GetFecha : function(iDias)
	{
		var dFecha = new Date();
		dFecha = new Date(dFecha.getFullYear(),dFecha.getMonth(),dFecha.getDate() + iDias);
		return PCalendarioJS.Date2Str(dFecha);
	},
	
	/*-----------------------------------------------------
	*
	*------------------------------------------------------*/
	
	_Calendario_Show : function()
	{
		oDiv = $(".calendario_DivMain");
		
		//.s. Eventos de los dias
		oDiv.find("td.calendario_NDia[available='true']")
			.click(function(){
				PCalendarioJS._Calendario_SelDia(this);	
				oDiv.hide();
			})
			.hover(function(){
						$(this).addClass("calendario_NDiaSel");
					},
					function(){
						$(this).removeClass("calendario_NDiaSel");
					}
			);
		
		oDiv.find(".calendario_BtAvanzaMesIzq").click(function(){
			mFechaMaster = new Date(mFechaMaster.getFullYear(),mFechaMaster.getMonth()-1,1);
			oDiv.html(PCalendarioJS._Calendario_DoHtml());
			PCalendarioJS._Calendario_Show();
			
		});
		
		oDiv.find(".calendario_BtAvanzaMesDrc").click(function(){
			mFechaMaster = new Date(mFechaMaster.getFullYear(),mFechaMaster.getMonth()+1,1);
			oDiv.html(PCalendarioJS._Calendario_DoHtml());
			PCalendarioJS._Calendario_Show();
		});	
		
		oDiv.find(".calendario_BtAvanzaAnyDrc").click(function(){
			mFechaMaster = new Date(mFechaMaster.getFullYear()+1,mFechaMaster.getMonth(),1);
			oDiv.html(PCalendarioJS._Calendario_DoHtml());
			PCalendarioJS._Calendario_Show();
		});	
		
		oDiv.find(".calendario_BtAvanzaAnyIzq").click(function(){
			mFechaMaster = new Date(mFechaMaster.getFullYear()-1,mFechaMaster.getMonth(),1);
			oDiv.html(PCalendarioJS._Calendario_DoHtml());
			PCalendarioJS._Calendario_Show();
		});
		
	},
	
	/*-----------------------------------------------------
	*
	*------------------------------------------------------*/
	
	_Calendario_DoHtml : function()
	{
		if (mFechaMaster == ""){
			mFechaMaster = mElem.val() == "" ? PCalendarioJS.Str2Date(GetFecha(0)) : PCalendarioJS.Str2Date(mElem.val());
		}
		
		var lFechaGestion	= mFechaMaster;
		var iLastDia		= new Date(lFechaGestion.getFullYear(),lFechaGestion.getMonth()+1,0).getDate();
		var iDiaSemana		= new Date(lFechaGestion.getFullYear(),lFechaGestion.getMonth(),0).getDay();
		var iMes			= lFechaGestion.getMonth()+1;
			sMes			= iMes < 10 ? "0" + iMes : iMes;
		var sYear			= lFechaGestion.getFullYear().toString().substr(2,2);
	    
		html = "<table class='calendario_TbMain' border='0' cellspacing='0' cellpadding='0'>";
		
		html += "<tr><td colspan='7'><div style='display:block;'>";
		html += "<div class='calendario_BtAvanzaAnyIzq'><<</div>";
		html += "<div class='calendario_BtAvanzaMesIzq'><</div>";
		html += "<div class='calendario_NombreMes'>" + PCalendarioJS.mMeses[iMes - 1] + " " + sYear + "</div>";
		html += "<div class='calendario_BtAvanzaAnyDrc'>>></div>";
		html += "<div class='calendario_BtAvanzaMesDrc'>></div>";
		html += "</div></td></tr>";
		
		html += "<tr>";
		
		for (i = 0;i < PCalendarioJS.mDias.length; i++){
			html += "<td class='calendario_NombreDia'>" + PCalendarioJS.mDias[i] + "</td>";
		}
		html += "</tr>";
		
		//.s. Matriz de días
		vRows	= [];	
		iRow	= 0;	iCol	= 0;
		iDia	= 1 - iDiaSemana;
		
		while(iDia <= iLastDia)
		{
			vCols	= [];
			for (i = 0;i < 7;i++){
				sDia = iDia < 1 || iDia > iLastDia ? "" : iDia;
				vCols[iCol] = sDia;
				iCol++; iDia++;
			}
			vRows[iRow]	= vCols;
			iCol		= 0;
			iRow++;
		}
		
		//.s. Render
		for (i = 0; i < vRows.length;i++){
			html += "<tr>";
				for (j = 0;j < vRows[i].length;j++){
					sFecha = (vRows[i][j] < 10 ? "0" + vRows[i][j] : vRows[i][j])  + "/" + sMes + "/" + sYear
					html += "<td class='calendario_NDia' " + (vRows[i][j] != "" ? "available='true'" : "") + " fecha='" + sFecha + "'>" + vRows[i][j] + "</td>";
				}
			html += "</tr>";
		}
				
		html += "</table>";
		
		return html;
	
	},
	
	/*-----------------------------------------------------
	*
	*------------------------------------------------------*/
	
	_Calendario_SelDia : function(pObj)
	{
		var lElem = $(pObj);
		
		mElem.val(lElem.attr("fecha"));
		
		if (typeof mCallBack == 'function'){
			mCallBack(lElem,mElem);
		}
	
	}
};
(function($){ $.fn.extend(PCalendarioJS); })(jQuery);
