// ---------------------------------------------------------------------------
// Pnet
// Copyright Apricon AB 2006
// Original file name: date_funcs.js
// @desc    Functions for date format control
// @author  Erik Schölander and others
// @created 2002-05-08
// @version 2.0
// @
// ---------------------------------------------------------------------------
// Changes: Date        Sign Description
// -------------------  ---- ---------------------------------------------------
// @change  2005-10-21  DSU  Added functions getFormattedDate() and getFormattedTime(), P00172
// @change  2005-11-17  ESR  format_date() is now supporting internal CaraDoc format (YYYYMMDD)
// @change  2006-03-23  ESR  New function convert_date_format()
// @change  2006-05-03  ESR  reformat_date now handles strings longer than 10 chr
//                           and replaces getFormattedDate
// @--------------------------------------------------------------------------

// ---------------------------------------------------------------------------
// @desc  Returns the value of a field. Handles SELECT fields (using selectedIndex).
//
// @param  fld   Field object
// @--------------------------------------------------------------------------

// Write a date string to the HTTP buffer, formatted according to the given argument
function write_date(swedate, dformat)
{
	document.write(reformat_date(swedate,dformat));
}


function getFormattedTime(timeStr, separator){
	var hourStr, minStr, secStr;

	hourStr=timeStr.substr(10,2); 
	minStr=timeStr.substr(12,2); 	
	secStr=timeStr.substr(14,2); 	

	return(hourStr+separator+minStr+separator+secStr);
}//getFormattedTime


// ---------------------------------------------------------------------------
// @desc  Transform a date string in swedish date format to any given format. ESR Skanska Teknik, 2002-04-26
// @--------------------------------------------------------------------------
function reformat_date(swedate, dformat)
{
	var len = swedate.length;

	// If format is Long Swedish, no reformating needed
	if((dformat == "YYYY-MM-DD" && len==10) || len==0)
	{
		result=swedate;
		return(result);
	}

	if(len < 10) 
	{
		yy=0;
		mm=0;
		dd=0;
	}
	else
	{
		yy = parseInt(swedate.substring(0, 4), 10);
		mm = parseInt(swedate.substring(5, 7), 10);
		dd = parseInt(swedate.substring(8, 10), 10);
	}

	result = format_date(yy, mm, dd, dformat);	
	return(result);
}  // reformat_date()

// ---------------------------------------------------------------------------
// @desc  Returns a date on the given format
//
// Changes: Date        Sign Description
// -------------------  ---- ---------------------------------------------------
// @change  2002-04-26  ESR  Enhanced for international date formats.
// @change  2005-11-17  ESR  Enhanced for internal CaraDoc date format.
// @--------------------------------------------------------------------------
function format_date(yy, mm, dd, dformat)
{	
	var result;
	var delimit = ".";
	
	if (dformat.search("-") != -1) delimit="-";
	else if (dformat.search("/") != -1) delimit="/";

	ms = mm.toString();
	ds = dd.toString();

	// Long Swedish
	if(dformat == "YYYY-MM-DD")
	{
		if(dd < 10) {ds = "0" + ds}
		if(mm < 10) {ms = "0" + ms}
		ys = yy.toString();
		result = ys + "-" + ms + "-" + ds;
	}
	// Short Swedish
	else if(dformat == "YY-MM-DD")
	{
		if(dd < 10) {ds = "0" + ds}
		if(mm < 10) {ms = "0" + ms}
		yy -= 1900;
		if (yy > 99) yy -= 100
		ys = yy.toString();
		if(yy < 10) {ys = "0" + ys};
		result = ys + "-" + ms + "-" + ds;
	}
	// Long American
	else if(dformat == "M/D/YYYY")
	{
		ys = yy.toString();
		result = ms + "/" + ds + "/" + ys;
	}
	// Short American
	else if(dformat == "M/D/YY")
	{
		yy -= 1900;
		if (yy > 99) yy -= 100
		ys = yy.toString();
		if(yy < 10) {ys = "0" + ys};
		result = ms + "/" + ds + "/" + ys;
	}
	// Norwegian/German, Danish, Brittish/French
	else if(dformat == "DD.MM.YYYY" || dformat == "DD-MM-YYYY" || dformat == "DD/MM/YYYY")
	{
		if(dd < 10)	{ds = "0" + ds}
		if(mm < 10)	{ms = "0" + ms}
		ys = yy.toString();
		result = ds + delimit + ms + delimit + ys;
	}
	// Internal CaraDoc format
	else if(dformat == "YYYYMMDD")
	{
		if(dd < 10) {ds = "0" + ds}
		if(mm < 10) {ms = "0" + ms}
		ys = yy.toString();
		result = ys + ms + ds;
	}
	else
	{
		result = "Config error";
	}

	return(result);
}  // format_date()

// ---------------------------------------------------------------------------
// @desc  
// @--------------------------------------------------------------------------
var gYear;
var gMonth;
var gDay;
function valid_date(field, dformat, date_format_error, date_year_error, date_month_error, date_day_error)
{
// Enhanced for various date formats. ESR Skanska Teknik, 2002-04-29
	var yy = -1;
	var mm = -1;
	var dd = -1;

	var ys,ms,ds;

	if(field.value == "") 
	{
		gYear=yy;
		gMonth=mm;
		gDay=dd;
		return(true)
	}

	if(field.value == ".")
	{
		var today = new Date();
		
		gYear  = today.getYear();
		gMonth = today.getMonth() + 1;
		gDay   = today.getDate();
		//yy = today.getYear();
		//mm = today.getMonth() + 1;
		//var dd = today.getDate();
		//field.value = format_date(yy, mm, dd, "YYYY-MM-DD");
		return(true);
	}  // if(field.value == ".")

	var sdate = field.value;
	var sformat = dformat;
	var xformat = "";
	var xdate = "";
	
	for (i=1;i<4;i++)
	{
		for (j=0;j<=sformat.length;j++)
		{
			cc = sformat.substr(j,1);
			if (cc == "-" || cc == "/" || cc == ".") break;
		}
		xformat = sformat.substr(0,j);
		sformat = sformat.substr(j+1,sformat.length-j);

		for (j=0;j<=sdate.length;j++)
		{
			cc = sdate.substr(j,1);
			if (cc == "-" || cc == "/" || cc == ".") break;
		}
		xdate = sdate.substr(0,j)
		sdate = sdate.substr(j+1,sdate.length-j);	


		// 4 digits in 1:st group =Swedish - always recognize and accept
		if (i==1 && xdate.length==4) 
		{
				xformat = "YYYY";
				sformat = "MM-DD";
		}

		if (isNaN(xdate) || isNaN(xdate - 0) || xdate=="") {alert(date_format_error+' '+dformat); return(false)}

		if (xformat == "YYYY" || xformat == "YY")  {ys = xdate; yy = parseInt(ys, 10)}

		else if(xformat == "MM" || xformat == "M") {ms = xdate; mm = parseInt(ms, 10)}

		else if(xformat == "DD" || xformat == "D") {ds = xdate; dd = parseInt(ds, 10)}

		else
		{
			alert("Configuration error. "+dformat+" is not a supported date format.");
			return(false);
		}
	}
	
	// Year
	if ((isNaN(yy)) || (yy < 0)) {alert(date_year_error + ys); return(false)}
	if (yy < 50) yy += 2000;	
	else if (yy < 100) yy += 1900;

	// Month 1 - 12
	if ((isNaN(mm)) || (mm < 1) || (mm > 12)) {alert(date_month_error + ms); return(false)}

	// Day always >0
	if(dd < 1)
	{
		alert(date_day_error + ds);
		return(false);
	}

	// Day i February max 29
	if(mm == 2)
	{
		if(dd > 29) {alert(date_day_error + ds); return(false)}
	}

	// Day in some months max 31
	else if((mm == 1) || (mm == 3) || (mm == 5) || (mm == 7) || (mm == 8) || (mm == 10) || (mm == 12))
	{
		if(dd > 31) {alert(date_day_error + ds); return(false)}
	}

	// Day in some months max 30
	else
	{
		if(dd > 30) {alert(date_day_error + ds); return(false)}
	}

	//field.value = format_date(yy, mm, dd, "YYYY-MM-DD");
	gYear=yy;
	gMonth=mm;
	gDay=dd;

	return(true);
}  // valid_date()

// ---------------------------------------------------------------------------
// @desc    Converts date format for the jscalender
// @example YYYY-MM-DD converts to %Y-%m-%d
// @--------------------------------------------------------------------------
function convert_date_format(dformat)
{
	var f = dformat.toUpperCase();
	f = f.replace('YYYY','%Y');
	f = f.replace('YY','%y');
	f = f.replace('MM','%m');
	f = f.replace('M','%M');
	f = f.replace('DD','%d');
	f = f.replace('D','%d');
	
	return(f);
}

