var i_calendar_input_nVersion=2.125;
/*
	Intelygenz  - www.intelygenz.com
	[VER] 	 M:\ig_intelygenz\ig05_intranet\desarrollo\areas\dev\docs\i_calendar_input.txt
	[UPDATE] M:\ig_intelygenz\ig05_intranet\desarrollo\areas\dev\libs\js\i_calendar_input.js

	open -> i_exml_calendar.js
*/

if(!GetType("i_igz_nVersion", 1) || (GetType("i_igz_nVersion", 1) && i_igz_nVersion<0.639)) ErrorJS("i_calendar.js v"+i_calendar_nVersion+" necesita la librería i_igz v0.639 o superior");
oIGZ.f_require("i_gfx", 0.171);
oIGZ.f_loadLib("i_calendar_input", i_calendar_input_nVersion);

oIGZ.f_mouseMoveOn();
oCalendar = new Calendar("oCalendar", oIGZ.m_sRootPath+"libs/js/i_exml_calendar.html");
iCalendar = oCalendar;
function Calendar(sObj, sEXML_CalendarURL){
	this.m_sObj = sObj;
	this.m_nVersion = i_calendar_input_nVersion;
	this.m_oFrame = null;

	// [Configuración General]
	//
	// sDateFormat	  : Funciona 
	// nTimeMode	  : Solo admite 12 o 24 y se refiere al sistema horario
	// a_sSpecialDays: ["YEAR", "MONTH", "SPECIAL_DAY", "TYPE"]
	this.m_maConfig = [			["sDateFormat"
								 ,"sEXML_CalendarURL"
								 ,"vIFrameSizeX", "vIFrameSizeY"
								 ,"sHTML_CalendarIco", "bCalendarIco"
								 ,"sClass_Input_Off", "sClass_Input_On"
								 ]
				      			,["nDD/nMM/nYYYY"
				      			  ,sEXML_CalendarURL
				      			  ,"Auto", "Auto"
				      			  ,"<IMG name='IMG_CalendarIco' style='cursor: pointer;' src='"+oIGZ.m_sRootPath+"pix/exml_calendar/calendar_input_ico.gif' width=18 height=18 border=0 />", 1
				      			  ,"CalendarInputOff", "CalendarInputOn"
				      			  ]
		      			 ]


	this.f_getConfig = function (sConfig){ return (this.m_maConfig.f_maGetVal(sConfig, 0)); }
	this.f_setConfig = function (a_sConfig){
		for (var f=0; f<a_sConfig.length; f+=2){
			this.m_maConfig.f_maSetVal(a_sConfig[f], a_sConfig[f+1], 0);
		}
	}

	this.f_draw = function (sInputName, sTitle, sDateOrInputBackLimit, sDateOrInputNextLimit, sXtra, a_sOwnConfig, bInputExterno){
		var sHTML = "";
		var sInputId = ""
		if (bInputExterno) sInputId = sInputName

		if( IsUndefined(sDateOrInputBackLimit) ) sDateOrInputBackLimit = "";
		if( IsUndefined(sDateOrInputNextLimit) ) sDateOrInputNextLimit = "";

		var sClassName = this.f_getConfig("sClass_Input_Off");

		sHTML += "<TABLE cellpadding=0 cellspacing=0 border=0>";
		sHTML += "<TR>";
		if (!bInputExterno) sHTML += "<TD><INPUT id='"+sInputName+"' name='"+sInputName+"' class='"+sClassName+"' type='text' "+sXtra+" minvalue='"+sDateOrInputBackLimit+"' maxvalue='"+sDateOrInputNextLimit+"' /></TD>";
		if (this.f_getConfig("bCalendarIco")==1) sHTML += "<TD id='"+sInputName+"_Ico' onclick='"+this.m_sObj+".f_show(this,\""+sInputId+"\", \""+sDateOrInputBackLimit+"\", \""+sDateOrInputNextLimit+"\")'>"+this.f_getConfig("sHTML_CalendarIco")+"</TD>";
		sHTML += "</TR>";
		sHTML += "</TABLE>";

		return (sHTML);
	}
	this.f_print = function (sInputName, sTitle, sDateOrInputBackLimit, sDateOrInputNextLimit, sXtra, a_sOwnConfig, bInputExterno){
		document.write(this.f_draw(sInputName, sTitle, sDateOrInputBackLimit, sDateOrInputNextLimit, sXtra, a_sOwnConfig, bInputExterno))
	}

	this.f_display = function (sInputName, bShowIco, bShowInput) {
		if ( bShowIco ) GetElement(sInputName+"_Ico").style.display = "";
		else  GetElement(sInputName+"_Ico").style.display = "none";
		if ( bShowInput ) GetElement(sInputName).style.display = "";
		else  GetElement(sInputName).style.display = "none";
	}

	this.m_oEXMLCalendar = null;
	this.m_oInputActive  = null;
	this.f_show = function (oTD, sInputId, sDateOrInputBackLimit, sDateOrInputNextLimit) {
		var oCalendarObj = this;
		var oFrame = this.m_oFrame;
		var oDate = new Date();
		var oDateTmp;
		if (oFrame && oFrame.m_oIFrame && oFrame.m_oIFrame.oEXMLCalendar) {
			oFrame.m_oIFrame.oEXMLCalendar.f_close();
	
			if (sInputId)  {			// v2.112
				this.m_oInputActive = document.getElementById(sInputId);
			}
			else {
				this.m_oInputActive = oTD.previousSibling.childNodes[0];
			}
	
			oInput = this.m_oInputActive;
			oInput.className = this.f_getConfig("sClass_Input_On");
	
			if (oInput.value) {
				oDateTmp = oInput.value.f_toDate( this.f_getConfig("sDateFormat") );
				if(IsDate(oDateTmp)) oDate = oDateTmp;
			}
	
			if ( sDateOrInputBackLimit ) {
				if ( IsDate(sDateOrInputBackLimit) ) oFrame.m_oIFrame.oEXMLCalendar.m_oDateBackLimit = sDateOrInputBackLimit.f_toDate("nDD/nMM/nYYYY");
				else if (oInput.form[sDateOrInputBackLimit]) oFrame.m_oIFrame.oEXMLCalendar.m_oDateBackLimit = String(oInput.form[sDateOrInputBackLimit].value).f_toDate(this.f_getConfig("sDateFormat"));
			}
			else oFrame.m_oIFrame.oEXMLCalendar.m_oDateBackLimit = null;
			if ( sDateOrInputNextLimit ) {
				if ( IsDate(sDateOrInputNextLimit) ) oFrame.m_oIFrame.oEXMLCalendar.m_oDateNextLimit = sDateOrInputNextLimit.f_toDate("nDD/nMM/nYYYY");
				else if ( oInput.form[sDateOrInputNextLimit] ) oFrame.m_oIFrame.oEXMLCalendar.m_oDateNextLimit = String(oInput.form[sDateOrInputNextLimit].value).f_toDate(this.f_getConfig("sDateFormat"));
			}
			else oFrame.m_oIFrame.oEXMLCalendar.m_oDateNextLimit = null;
	
			oFrame.m_oIFrame.oEXMLCalendar.m_oEXMLCalendarInputTarget = this;
			oFrame.m_oIFrame.oEXMLCalendar.f_load( oDate );
			oFrame.m_oIFrame.oEXMLCalendar.f_okDay = function (){
				oInput.value = this.m_oDate.f_drawFormat( this.m_oEXMLCalendarInputTarget.f_getConfig("sDateFormat") );
				clearInterval(oFrame.m_stAutoPos);
				oCalendarObj.f_hide();
			}
			oFrame.m_oIFrame.oEXMLCalendar.f_okWeekEnd = function (){
				oInput.value = this.m_oDate.f_drawFormat( this.m_oEXMLCalendarInputTarget.f_getConfig("sDateFormat") );
				clearInterval(oFrame.m_stAutoPos);
				oCalendarObj.f_hide();
			}
			oFrame.m_oIFrame.oEXMLCalendar.f_okDayNow = function (){
				oInput.value = this.m_oDate.f_drawFormat( this.m_oEXMLCalendarInputTarget.f_getConfig("sDateFormat") );
				clearInterval(oFrame.m_stAutoPos);
				oCalendarObj.f_hide();
			}
	
			if(oFrame.m_stAutoPos) clearInterval(oFrame.m_stAutoPos);
	
			var nMouseX = oIGZ.m_nMouseX+5;
			var nMouseY = oIGZ.m_nMouseY+5;
			var nPosX = nMouseX;
			var nPosY = nMouseY;
	
			oFrame.f_show();		//Mirar porque hacen falta las 3 !!!
	
			var nPosRight  = nPosX+oGFX.f_getSizeX(oFrame);
			var nPosBottom = nPosY+oGFX.f_getSizeY(oFrame);
			
			//
			var scrollLeft
			if(document.documentElement && document.documentElement.scrollLeft){
				scrollLeft = new Number(document.documentElement.scrollLeft)
			}else{
				scrollLeft = new Number(document.body.scrollLeft)
			}
			if(scrollLeft)
				nPosX += scrollLeft;
			
			var scrollTop
			if(document.documentElement && document.documentElement.scrollTop){
				scrollTop = new Number(document.documentElement.scrollTop)
			}else{
				scrollTop = new Number(document.body.scrollTop)
			}
			if(scrollTop)
				nPosY += scrollTop;
			
				
			var nPosRightMax = document.body.clientWidth + scrollLeft;						
			if (nPosRight > nPosRightMax){
				nPosX -= nPosRight - document.body.clientWidth - scrollLeft;
			}

			var nPosBottomMax = document.body.clientHeight + scrollTop;			
			if (nPosBottom > nPosBottomMax){ 
				nPosY -= nPosBottom-document.body.clientHeight-scrollTop;
			}

			oFrame.style.left = nPosX;
			oFrame.style.top  = nPosY;
		}		
	}
	this.f_hide = function () {
		this.m_oFrame.f_hide();
		if (this.m_oInputActive) this.m_oInputActive.className = this.f_getConfig("sClass_Input_Off");
	}

	this.f_drawStatic = function (sIFrameId, sEXML_CalendarURL, vSizeX, vSizeY, bScroll, bBorder, sXtra, f_onload) {
		return ( oIFRAME.f_draw(sIFrameId, sEXML_CalendarURL, vSizeX, vSizeY, bScroll, bBorder, sXtra, f_onload) );
	}
	this.f_printStatic = function (sIFrameId, sEXML_CalendarURL, vSizeX, vSizeY, bScroll, bBorder, sXtra, f_onload) {
		document.write( this.f_drawStatic(sIFrameId, sEXML_CalendarURL, vSizeX, vSizeY, bScroll, bBorder, sXtra, f_onload) );
	}

	this.f_init = function () {
		var sIFrameId = this.m_sObj+"_EXMLCalendar";
		this.m_oFrame = oIFRAME.f_create(document.body, sIFrameId, this.f_getConfig("sEXML_CalendarURL")+"?IFRAME="+sIFrameId, this.f_getConfig("vIFrameSizeX"), this.f_getConfig("vIFrameSizeY"), 0, 0, "style='position: absolute; display: none;'", function () { } );
	}
	oIGZ.m_a_sStartUps.push(this.m_sObj+".f_init()");
}

