// Declaring valid date character, minimum year and maximum year
var dtCh= "/";
var minYear=1900;
var maxYear=2100;

function isInteger(s) {
	for (var i = 0; i < s.length; i++){   
			// Check that current character is number.
			var c = s.charAt(i);
			if (((c < "0") || (c > "9"))) return false;
	}
	// All characters are numbers.
	return true;
}

function stripCharsInBag(s, bag){
	var i;
	var returnString = "";
	// Search through string's characters one by one.
	// If character is not in bag, append to returnString.
	for (i = 0; i < s.length; i++){   
			var c = s.charAt(i);
			if (bag.indexOf(c) == -1) returnString += c;
	}
	return returnString;
}

function Separated_StoN(s){
	return new Number(stripCharsInBag(s, ','));
}

function Separated_NtoS(n) {
	var sign = (n < 0) ? "-" : "";
	var separator = "";//todo: place comma here
	var sint = "";
	var ar = n.toString(10).split('.');
	if ( ar.length <= 0 ) return "";

	var sdec = "";  // fraction
	if ( ar.length > 1 ) sdec = '.' + ar[1];

	ar = Math.abs(n).toString(10).split('.');
	var wn = ar[0]; // whole number

	var i;
	var pos = wn.length % 3;
	if (pos == 0) pos = 3;
	for (i = 0; i < wn.length; i++) {
		if (pos == i) {
			sint += separator;
			pos += 3;
		}
		sint += wn.charAt(i);
	}
	return sign + sint + sdec;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
	// EXCEPT for centurial years which are not also divisible by 400.
	return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
	}
	return this
}

function isDate(dtStr){
	if ( !dtStr ) return false;
	if ( dtStr=='' ) return false;

	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strMonth=dtStr.substring(0,pos1)
	var strDay=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}

	month = parseInt(strMonth)
	day = parseInt(strDay)
	year = parseInt(strYr)

	if ( pos1==-1 || pos2==-1 )
		return false

	if (strMonth.length<1 || month<1 || month>12)
		return false

	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month])
		return false

	if ( strYear.length == 3 || year == 0 || year<minYear || year>maxYear )
		return false

	if ( dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false)
		return false

	return true
}

function ParseDate(sDate){
	if ( !sDate ) return NaN;
	if ( sDate=='' ) return NaN;

	var daysInMonth = DaysArray(12)
	var pos1=sDate.indexOf(dtCh)
	var pos2=sDate.indexOf(dtCh,pos1+1)
	var strMonth=sDate.substring(0,pos1)
	var strDay=sDate.substring(pos1+1,pos2)
	var strYear=sDate.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}

	if ( pos1==-1 || pos2==-1 )
		return NaN;

	month = parseInt(strMonth)
	day = parseInt(strDay)
	year = parseInt(strYr)

	if ( isNaN(month) || isNaN(day) || isNaN(year) )
		return NaN;

	if ( month<1 || month>12 )
		return NaN;

	if ( day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month])
		return NaN;

	if ( year < 1000 )
		year += 2000;

	if ( year<minYear || year>maxYear )
		return NaN;

	if ( sDate.indexOf(dtCh,pos2+1)!=-1 || !isInteger(stripCharsInBag(sDate, dtCh)) )
		return NaN;

	return new Date(year, month-1, day);
}

function DateToString(dt) {
	var sMonth = new String(dt.getMonth()+1);
	var sDay = new String(dt.getDate());
	var sYear = new String(dt.getYear());
	if ( sYear.length<2 ) sYear = '200' + sYear;
	else if ( sYear.length<3 ) sYear = '20' + sYear;

	return sMonth + '/' + sDay + '/' + sYear;
}

function TrimString(sInString) {
	sInString = sInString.replace( /^\s+/g, "" );// strip leading
	return sInString.replace( /\s+$/g, "" );// strip trailing
}
