/////////////////////////////////////////////////////////////////////////////////////////////////////
// TURN A DATE FROM STRING INTO DATE OBJECT /////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////////////////////
function getDateObjectFromString(thisDate, standard) {
	// transform this date to mysql date
   	var thisDateMysql=standard2mysqlDateConversion(thisDate,standard);
   	
   	// get date elements
   	var strSeparatorArray = new Array("-"," ","/",".","_");
	var thisDateArr=explodeString(thisDateMysql,strSeparatorArray);
	

	// create date object
	var returnDate=new Date(thisDateArr[0],thisDateArr[1]-1,thisDateArr[2],0,0,0,0);
	
	return returnDate;
}

var ONE_DAY = 1000 * 60 * 60 * 24;
function days_between(date1, date2, standard) {
   
   	// create date objects
    var startDate=getDateObjectFromString(date1, standard);
    var endDate=getDateObjectFromString(date2, standard);    
    
   	// turn startDate and endDate into milliseconds and compute difference in days
	var startDate_ms=startDate.getTime();
	var endDate_ms=endDate.getTime();
	var difference_ms = Math.abs(startDate_ms - endDate_ms)
    return Math.round(difference_ms/ONE_DAY)
	
}

//--------------------------------
function corectYear(yearString){

	// check that year is numeric
	if (isNaN(parseInt(yearString))) 
		return '';
		
	// return correct year	
	yearString=yearString.toString();
	if(yearString.length==1) return '200'+yearString;
	if(yearString.length==2) return '20'+yearString;
	if(yearString.length==3) return '2'+yearString;
	if(yearString.length==4) return yearString;

	return '';
}

//--------------------------------
// FORMAT DATE DD-MM-YYYY
//--------------------------------
function formatDate(day, month, year, standard){

	day=parseInt(day, 10);
	month=parseInt(month,10);
	year=corectYear(year);

	if (year>2000)
		shortYear=year-2000;
	else
		shortYear=year-2000+100;

	// if standard is not given as a parameter
	if (!standard)
		standard='iso';

	if (year<0 || day<0	|| month<0)
		return 0;

	// EUROPEAN STANDARD DD-MM-YYYY
	if (standard=='eu')
		return dateElementZeroFill(day)+'-'+dateElementZeroFill(month)+'-'+dateElementZeroFill(year);
	// EUROPEAN SHORT STANDARD DD-MM-YYYY
	if (standard=='eu_s')
		return day+'-'+month+'-'+dateElementZeroFill(year);
	// EUROPEAN EXTRA SHORT STANDARD D-M-YY
	if (standard=='eu_es') {
		return day+'-'+month+'-'+dateElementZeroFill(shortYear);
	}
	// US STANDARD MM-DD-YYYY
	if (standard=='us')
		return dateElementZeroFill(month)+'-'+dateElementZeroFill(day)+'-'+dateElementZeroFill(year);
	// US EXTRA-SHORT STANDARD M-D-YY
	if (standard=='us_es') {
		return month+'-'+day+'-'+dateElementZeroFill(shortYear);
	}
	// ISO STANDARD YYYY-MM-DD
	if (standard=='iso')
		return dateElementZeroFill(year)+'-'+dateElementZeroFill(month)+'-'+dateElementZeroFill(day);

}


//--------------------------------
// GET MONTH NUMBER FROM A STRING/NUMBER
//--------------------------------
function monthValid(monthString){
	monthString=escape(monthString.toString().toLowerCase());

	switch (monthString){
		case '01':case '02':case '03':case '04':
		case '05':case '06':case '07':case '08':
		case '09':case '10':case '11':case '12':{
			return eval(monthString);
		}
		case '1':case '2':case '3':case '4':
		case '5':case '6':case '7':case '8':
		case '9':case '10':case '11':case '12':{
			return eval(monthString);
		}
		case 1:case 2:case 3:case 4:
		case 5:case 6:case 7:case 8:
		case 9:case 10:case 11:case 12:{
			return monthString;
		}

		//romanian
		case 'ian':return 1;
		case 'feb':return 2;
		case 'mar':return 3;
		case 'apr':return 4;
		case 'mai':return 5;
		case 'iun':return 6;
		case 'iul':return 7;
		case 'aug':return 8;
		case 'sep':return 9;
		case 'oct':return 10;
		case 'noi':return 11;
		case 'dec':return 12;

		// english
		case 'jan':return 1;
		case 'mar':return 3;
		case 'may':return 5;
		case 'jun':return 6;
		case 'jul':return 7;
		case 'nov':return 11;

		// bulgarian
		case '%u044F%u043D':return 1;
		case '%u0444%u0435%u0432':return 2;
		case '%u043C%u0430%u0440':return 3;
		case '%u0430%u043F%u0440':return 4;
		case '%u043C%u0430%u0438':return 5;
		case '%u044E%u043D%u0438':return 6;
		case '%u044E%u043B%u0438':return 7;
		case '%u0430%u0432%u0433':return 8;
		case '%u0441%u0435%u043F':return 9;
		case '%u043E%u043A%u0442':return 10;
		case '%u043D%u043E%u0435':return 11;
		case '%u0434%u0435%u043A':return 12;

		// ROMANIAN
		case 'ianuarie':return 1;
		case 'februarie':return 2;
		case 'martie':return 3;
		case 'aprilie':return 4;
		case 'mai':return 5;
		case 'iunie':return 6;
		case 'iulie':return 7;
		case 'august':return 8;
		case 'septembrie':return 9;
		case 'octombrie':return 10;
		case 'noiembrie':return 11;
		case 'decembrie':return 12;

		// english
		case 'january':return 1;
		case 'february':return 2;
		case 'march':return 3;
		case 'april':return 4;
		case 'may':return 5;
		case 'june':return 6;
		case 'july':return 7;
		case 'august':return 8;
		case 'september':return 9;
		case 'october':return 10;
		case 'november':return 11;
		case 'december':return 12;


		// BULGARIAN
		case '%u044F%u043D%u0443%u0430%u0440%u0438':return 1;
		case '%u0444%u0435%u0432%u0440%u0443%u0430%u0440%u0438':return 2;
		case '%u043C%u0430%u0440%u0442':return 3;
		case '%u0430%u043F%u0440%u0438%u043B':return 4;
		case '%u043C%u0430%u0438':return 5;
		case '%u044E%u043D%u0438':return 6;
		case '%u044E%u043B%u0438':return 7;
		case '%u0430%u0432%u0433%u0443%u0441%u0442':return 8;
		case '%u0441%u0435%u043F%u0442%u0435%u043C%u0432%u0440%u0438':return 9;
		case '%u043E%u043A%u0442%u043E%u043C%u0432%u0440%u0438':return 10;
		case '%u043D%u043E%u0435%u043C%u0432%u0440%u0438':return 11;
		case '%u0434%u0435%u043A%u0435%u043C%u0432%u0440%u0438':return 12;

	}
}

//--------------------------------
// CHECK IF A DATE EXITS
//--------------------------------
function dateExists(day,month,year)
{
	var monthLength = new Array(31,28,31,30,31,30,31,31,30,31,30,31);
	day=parseInt(day,10);
	month=parseInt(month,10);
	year=parseInt(year,10);

	if (!day || !month || !year)
		return false;

	if (year/4 == parseInt(year/4))
		monthLength[1] = 29;

	if (day > monthLength[month-1])
		return false;

	if (month>12)
		return false;

	monthLength[1] = 28;

	var now = new Date();
	now = now.getTime(); //NN3

	var dateToCheck = new Date();
	dateToCheck.setYear(year);
	dateToCheck.setMonth(month-1);
	dateToCheck.setDate(day);
	var checkDate = dateToCheck.getTime();

	//var futureDate = (now < checkDate);
	//var pastDate = (now > checkDate);

	return true;
}
// FILS A DATE WITH '0' IF IT'S LOWER THAN 10
function dateElementZeroFill(dateElement){

	if (dateElement<10)
		return '0'+parseInt(dateElement);
	else
		return parseInt(dateElement);
}

///////////////////////////////////////////////////////////////////////////////////
// TRANSFORMS A MYSQL DATE INTO A STANDARD DATE ///////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
function mysql2standardDateConversion(dateString, standard) {
	if (dateString=='')
		return 0;
	if (standard=='')
		standard='iso';

	// separate date string into date pieces
	strSeparatorArray = new Array("-"," ","/",".","_");
	dateArr=explodeString(dateString,strSeparatorArray);

	thisDay=dateArr[2];
	thisMonth=dateArr[1];
	thisYear=dateArr[0];

	return formatDate(thisDay, thisMonth, thisYear, standard);
}

///////////////////////////////////////////////////////////////////////////////////
// TRANSFORMS A STANDARD DATE INTO A MYSQL DATE ///////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////
function standard2mysqlDateConversion(dateString, standard) {
	if (dateString=='')
		return 0;
	if (standard=='')
		return 0;

	// separate date string into date pieces
	strSeparatorArray = new Array("-"," ","/",".","_");
	dateArr=explodeString(dateString,strSeparatorArray);

	// guess date elements (day, month, year)
	if (standard=='eu' || standard=='eu_s' || standard=='eu_es') {
		thisDay=dateArr[0];
		thisMonth=dateArr[1];
		thisYear=dateArr[2];
	}
	if (standard=='us' || standard=='us_es') {
		thisDay=dateArr[1];
		thisMonth=dateArr[0];
		thisYear=dateArr[2];
	}
	if (standard=='iso') {
		thisDay=dateArr[2];
		thisMonth=dateArr[1];
		thisYear=dateArr[0];
	}

	thisDay=parseInt(thisDay, 10);
	thisMonth=parseInt(thisMonth, 10);
	thisYear=corectYear(thisYear);

	thisDay=dateElementZeroFill(thisDay);
	thisMonth=dateElementZeroFill(thisMonth);

	return thisYear+"-"+thisMonth+"-"+thisDay;
}
