var errorMsg = "Eroare";

function reOnCloseCalendar(calendar)
{
	calendar.hide();
  // or calendar.destroy();
}

/*update pe cele 3 inputuri de la calendar*/
function reUpdateDateInputuri( radacinaName, hiddenInputId )
{
		var valueDate = document.getElementById( hiddenInputId );
		if( valueDate != undefined && valueDate.value != '' )
		{
			var myDate_array = valueDate.value.split( '/' );
			var dayD = document.getElementById( radacinaName + '_calDateD' );
			if( dayD != undefined && myDate_array.length == 3 )
			{
				dayD.value= myDate_array[0];
			}
			var dayM = document.getElementById( radacinaName + '_calDateM' );
			if( dayM != undefined && myDate_array.length == 3 )
			{
				dayM.value= myDate_array[1];
			}
			var dayY = document.getElementById( radacinaName + '_calDateY' );
			if( dayY != undefined && myDate_array.length == 3 )
			{
				dayY.value= myDate_array[2];
			}
	}
}
function reUpdateDateHiddenValue( radacinaName, hiddenInputId )
{
	var valueDate = document.getElementById( hiddenInputId );
	if( valueDate != undefined )
	{
		var dayD = document.getElementById( radacinaName + '_calDateD' );
		var dayM = document.getElementById( radacinaName + '_calDateM' );
		var dayY = document.getElementById( radacinaName + '_calDateY' );
		if( dayD != undefined && dayM != undefined && dayY != undefined )
		{
			if( !checkCalenderDate( parseInt( dayD.value ), parseInt( dayM.value ), parseInt( dayY.value ) ) )
			{
				alert( errorMsg );
				/*punem valorile inapoi*/
				reUpdateDateInputuri( radacinaName, hiddenInputId );
				return;
			}

			valueDate.value = dayD.value + '/' + dayM.value + '/' + dayY.value;
		}
	}
}
/*schimb data din cele 3 textbox-uri de la una din cele doua date */
function reUpdatePeriodHiddenValue( radacinaCalendarName, radacinaHiddenInputId, periodHiddenInput, sufix )
{
	/*facem update la inputuri*/
	var calendName =  radacinaCalendarName + sufix;
	var hiddenName =  radacinaHiddenInputId + sufix;
	reUpdateDateHiddenValue( calendName, hiddenName );
	/*facem update la parametrul RE */
	updatePeriodHiddenInput( radacinaCalendarName, radacinaHiddenInputId, periodHiddenInput, sufix );

}

/*folosita de calendar la onUpdate al calendarului....este apelata cand s-a modificat prin intermediul calendarului
 unul din inputuri*/
function reUpdatePeriodInputuri( radacinaCalendarName, radacinaHiddenInputId, periodHiddenInput, sufix )
{
	/*facem update la inputuri*/
	var calendName =  radacinaCalendarName + sufix;
	var hiddenName =  radacinaHiddenInputId + sufix;
	//alert( 'reUpdatePeriodInputuri' +  radacinaCalendarName + '   ' + radacinaHiddenInputId  + '  ' + sufix );
	reUpdateDateInputuri( calendName, hiddenName );

	/*facem update la parametrul RE */
	updatePeriodHiddenInput( radacinaCalendarName, radacinaHiddenInputId, periodHiddenInput, sufix );
}


function updatePeriodHiddenInput( radacinaCalendarName, radacinaHiddenInputId, periodHiddenInput, sufix )
{
	var refPeriodHiddenInput = document.getElementById( periodHiddenInput );
	var refHiddenInputId1 = document.getElementById( radacinaHiddenInputId + '_S' );
	var refHiddenInputId2 = document.getElementById( radacinaHiddenInputId + '_E' );

	if( refPeriodHiddenInput != undefined )
	{
		var arrayDate = refPeriodHiddenInput.value.split( '-' );
		//alert( '' + arrayDate.length  + ' '  + sufix );
		if( arrayDate.length == 2  )
		{
			if( sufix == '_S' )/*prima parte s-a schimbat*/
			{
				  /*verificam daca data1 <= data2*/
					if( getDateFromFormatedString( refHiddenInputId1.value ) > getDateFromFormatedString( arrayDate[ 1 ] ) )
					{
						alert( errorMsg );
						/*schimbam valoarea si ptr al doilea */
						refHiddenInputId2.value = refHiddenInputId1.value;
						reUpdateDateInputuri( radacinaCalendarName + '_E', radacinaHiddenInputId + '_E' );

					}

			}
			else if( sufix == '_E' )/*a doua parte s-a schimbat*/
			{
				  /*verificam daca data1 <= data2*/
					if( getDateFromFormatedString( arrayDate[ 0 ] ) > getDateFromFormatedString(  refHiddenInputId2.value ) )
					{
						alert( errorMsg );
						/*schimbam valoarea si ptr al primul */
						refHiddenInputId1.value = refHiddenInputId2.value;
						reUpdateDateInputuri( radacinaCalendarName + '_S', radacinaHiddenInputId + '_S' );

					}
			}
		}
		refPeriodHiddenInput.value = refHiddenInputId1.value + '-' + refHiddenInputId2.value;
		//alert( 'refPeriodHiddenInput.value= ' + refPeriodHiddenInput.value );
	}
}

function getDateFromFormatedString( stringValue, separator )
{
	var dateVal = null;
	if( stringValue == null ) return null;

	if( separator == null ) separator = '/';

	var splitDate = stringValue.split( separator );
	if( splitDate == null || splitDate.length != 3 ) return null;
	if( checkCalenderDate( splitDate[ 0 ], splitDate[ 1 ], splitDate[ 2 ] ) )
	{
		 dateVal = new Date(  );
		 dateVal.setYear( parseInt( splitDate[ 2 ] ) );
		 dateVal.setMonth ( splitDate[ 1 ]  -1 );
		 dateVal.setDate(  splitDate[ 0 ] );
		 dateVal.setHours( 0 );
		 dateVal.setMinutes( 0 );
		 dateVal.setSeconds( 0 );

	}
	return dateVal;
}



function checkCalenderDate( day, month, year )
{
//	alert( day + ' ' + month + ' ' + year );
	// trebuie sa fie numere
	if( isNaN( day ) || isNaN( month ) || isNaN( year ) )
		return false;
	var cDate = new Date();
	var cFullYear = parseInt( cDate.getFullYear() );
	var cNbYears = 100;	// intervalul in jurul anului curent (+/-)

	if( ( year < cFullYear - cNbYears + 1 ) || ( year > cFullYear + cNbYears ) )
  		return false;	// iese din interval

  	if( ( month < 1 || month > 12 ) || ( day < 1 || day > 31 ) )
  		return false;

  	if( ( month == 4 || month == 6 || month == 9 || month == 11 ) && day == 31 )
  		return false;

	if( month == 2 )
	{
		var isleap = ( year % 4 == 0 && ( year % 100 != 0 || year % 400 == 0 ) );
		if( day > 29 || ( day == 29 && !isleap ) )
			return false;
	}
	return true;
}

/** In momentul in care se doreste filtrare dupa data, si se check-uieste checkbox-ul dinaintea lui,
	calendarul trebuie sa poata fi modificat
*/

function editableCalendar( checkboxRef, calendarName, nameHidden )
{
	var dateEnabled = false;

	if( checkboxRef.checked )
	{
		dateEnabled = true;
	}
    //readOnlyCalendar = dateEnabled; /*permite afisarea calendarului*/

     if( calendarName != undefined )
	{	/*schimbam permisiunea textbox-urile care afiseaza data*/
		 calD =  document.getElementById( calendarName + '_calDateD' );
		if( calD != undefined )
		{ calD.disabled = !dateEnabled;
		}
		calM = document.getElementById( calendarName + '_calDateM' );
		if( calM != undefined )
		{ calM.disabled = !dateEnabled;
		}
		calY = document.getElementById( calendarName + '_calDateY' );
		if( calY != undefined )
		{ calY.disabled = !dateEnabled;
		}
	  //adaugam valoarea la input-ul hidden
		if( nameHidden != undefined )
		{
			var calValueHidden = document.getElementById( nameHidden );
			var imageCal = document.getElementById( 'td_' + calendarName );
			if( calValueHidden != undefined )
			{
				//daca checkbox-ul este disablat se stege valoarea din hidden
				if( !dateEnabled )
				{	calValueHidden.value = '';
					imageCal.style.display= 'none';
				}
				else if( calD != undefined && calM != undefined && calY != undefined )
				{	calValueHidden.value= calD.value + '/' + calM.value + '/' + calY.value;
					try {
					  //standards compliant browsers
					  imageCal.style.display = 'table-cell';
					} catch(e) {
					  //IE stupidity
					  imageCal.style.display = 'block';
					}
									}
			 }
		}
	 }
}

function editablePeriod( checkboxRef, radacinaCalendarName, radacinaHiddenInputId, periodHiddenInput )
{
	editableCalendar( checkboxRef, radacinaCalendarName + '_S', radacinaHiddenInputId + '_S' );
	editableCalendar( checkboxRef, radacinaCalendarName + '_E', radacinaHiddenInputId + '_E' );
	var calValueHidden = document.getElementById( periodHiddenInput );
	if( calValueHidden != undefined )
	{
		//daca checkbox-ul este disablat se stege valoarea din hidden
		if( !checkboxRef.checked )
		{	calValueHidden.value = '';
		}
		else
		{
			hiddenS = document.getElementById( radacinaHiddenInputId + '_S' );
			hiddenE = document.getElementById( radacinaHiddenInputId + '_E' );
			if( hiddenS != undefined && hiddenE != undefined )
				calValueHidden.value= hiddenS.value + '-' + hiddenE.value;
		}
	 }

}

function showCalendar( hiddenButtonId )
{
	var bt = document.getElementById ( hiddenButtonId );
	if( bt != undefined )
	{
		bt.onclick();
	}
}

function onEnterShowCalendar( buttonId, e )
{
	var tragetId = "";
	var oEvent = e;

	/* ie*/
	if( document.addEventListener == undefined )
	{
		oEvent = event;
		//tragetId = oEvent.srcElement.id;
	}
	else/*mozilla*/
	{
		//tragetId = oEvent.target.id;
	}

	if( oEvent.keyCode == 13 /*&& tragetId == idButton + '_span'*/ )
	{
		showCalendar( buttonId );
		if(  oEvent.stopPropagation != undefined )/*mozilla*/
		{		oEvent.stopPropagation();
		}
		else/*ie*/
		{
			oEvent.cancelBubble = true;
		}
	}

}
