////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	Channel One's from.  Validation, Format the TextArea, add the timestamp and other stuff.
//
//	Author: Chris Siu
//	version: 1.02
////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 	replace the carriage returns in the orgStr with replaceWith value
//	var textAreaStr = document.getElementById("optionalTextarea1").value;
//	document.getElementById("optionalTextarea1").value = replaceCarriageReturn(textAreaStr, "<br/>")
////////////////////////////////////////////////////////////////////////////////////////////////////////////
function replaceCarriageReturn (orgStr, replaceWith) {
	var returnStr;
	returnStr = escape( orgStr ) //encode textarea string's carriage returns
	for(i=0; i<returnStr.length; i++){
		//loop through string, replacing carriage return encoding with HTML break tag
		if(returnStr.indexOf("%0D%0A") > -1){
			//Windows encodes returns as \r\n hex
			returnStr = returnStr.replace("%0D%0A",replaceWith)
		} else if(returnStr.indexOf("%0A") > -1){
			//Unix encodes returns as \n hex
			returnStr = returnStr.replace("%0A",replaceWith)
		} else if(returnStr.indexOf("%0D") > -1){
			//Macintosh encodes returns as \r hex
			returnStr = returnStr.replace("%0D",replaceWith)
		}
	}
	returnStr=unescape(returnStr) //unescape all other encoded characters
	return returnStr;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	Time Stamp.  Add a client timestamp to the form
//
//	For example,
//	
//	<span id="timeStamp"/>
//	<script>
//		var timeStamp = document.getElementById("timeStamp");
//		if (timeStamp) {
//			timeStamp.innerHTML = "<input type='hidden' name='optionalText3' value='" + qdat_TimeStamp() + "' />";
//		}
//	</script>   	
//
////////////////////////////////////////////////////////////////////////////////////////////////////////////

//tool: gets the timestamp date, e.g. "2007-12-31"
function qdat_TimeStampDate() {
	r = '';
	//variables
	var now = new Date();
	var day = qstr_PadZeros(now.getDate(), 2);
	var month = qstr_PadZeros(now.getMonth()+1, 2) ;
	var year = now.getFullYear();
	//build it
	r = year + '-' + month + '-' + day;
	return r;
}

//tool: gets the timestamp time, e.g. "23:59:59"
function qdat_TimeStampTime() {
	var r = '';
	//variables
	var now = new Date();
	var hours = qstr_PadZeros(now.getHours(), 2);
	var minutes = qstr_PadZeros(now.getMinutes(), 2);
	var seconds = qstr_PadZeros(now.getSeconds(), 2);
	//build it
	r = hours + ':' + minutes + ':' + seconds;
	return r;
}

//tool: gets the timestamp, e.g. "2007-12-31 23:59:59"
function qdat_TimeStamp() {
	var r = '';
	//variables
	var timeStampDate = qdat_TimeStampDate();
	var timeStampTime = qdat_TimeStampTime();
	//build it
	var r = timeStampDate + ' ' + timeStampTime;
	return r;
}

function qstr_PadZeros(objNumber, intSize) {
	var r = '';
	//variables
	var strNumber = String(objNumber);
	var intLengthOfStringNumber = strNumber.length;
	//set it
	r = strNumber;
	//pad it
	for(x = intSize; x > intLengthOfStringNumber; x--) {
		r = '0' + r;
	}
	return r;
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	Validate the form
//
//	For example,
////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	checkNotEmpty
//	Return true if the string is not empty, otherwise return false.
////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkNotEmpty( strValue ) {

   if(strValue.length > 0){
     return true;
   }
   return false;
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	Check is the date is valid
//	Return true if the date is valid, otherwise return false;
// 	e.g. 02/29/2008 or 05/24/1970
//
//	REF: http://www.breakingpar.com/bkp/home.nsf/0/75A5C758B9DF576087256AFB00140789
////////////////////////////////////////////////////////////////////////////////////////////////////////////
function checkValidDate(dateStr) {
    // dateStr must be of format month day year with either slashes
    // or dashes separating the parts. Some minor changes would have
    // to be made to use day month year or another format.
    // This function returns True if the date is valid.
    var slash1 = dateStr.indexOf("/");
    if (slash1 == -1) { slash1 = dateStr.indexOf("-"); }
    // if no slashes or dashes, invalid date
    if (slash1 == -1) { return false; }
    var dateMonth = dateStr.substring(0, slash1)
    var dateMonthAndYear = dateStr.substring(slash1+1, dateStr.length);
    var slash2 = dateMonthAndYear.indexOf("/");
    if (slash2 == -1) { slash2 = dateMonthAndYear.indexOf("-"); }
    // if not a second slash or dash, invalid date
    if (slash2 == -1) { return false; }
    var dateDay = dateMonthAndYear.substring(0, slash2);
    var dateYear = dateMonthAndYear.substring(slash2+1, dateMonthAndYear.length);
    if ( (dateMonth == "") || (dateDay == "") || (dateYear == "") ) { return false; }
    // if any non-digits in the month, invalid date
    for (var x=0; x < dateMonth.length; x++) {
        var digit = dateMonth.substring(x, x+1);
        if ((digit < "0") || (digit > "9")) { return false; }
    }
    // convert the text month to a number
    var numMonth = 0;
    for (var x=0; x < dateMonth.length; x++) {
        digit = dateMonth.substring(x, x+1);
        numMonth *= 10;
        numMonth += parseInt(digit);
    }
    if ((numMonth <= 0) || (numMonth > 12)) { return false; }
    // if any non-digits in the day, invalid date
    for (var x=0; x < dateDay.length; x++) {
        digit = dateDay.substring(x, x+1);
        if ((digit < "0") || (digit > "9")) { return false; }
    }
    // convert the text day to a number
    var numDay = 0;
    for (var x=0; x < dateDay.length; x++) {
        digit = dateDay.substring(x, x+1);
        numDay *= 10;
        numDay += parseInt(digit);
    }
    if ((numDay <= 0) || (numDay > 31)) { return false; }
    // February can't be greater than 29 (leap year calculation comes later)
    if ((numMonth == 2) && (numDay > 29)) { return false; }
    // check for months with only 30 days
    if ((numMonth == 4) || (numMonth == 6) || (numMonth == 9) || (numMonth == 11)) {
        if (numDay > 30) { return false; }
    }
    // if any non-digits in the year, invalid date
    for (var x=0; x < dateYear.length; x++) {
        digit = dateYear.substring(x, x+1);
        if ((digit < "0") || (digit > "9")) { return false; }
    }
    // convert the text year to a number
    var numYear = 0;
    for (var x=0; x < dateYear.length; x++) {
        digit = dateYear.substring(x, x+1);
        numYear *= 10;
        numYear += parseInt(digit);
    }
    // Year must be a 2-digit year or a 4-digit year
    if ( (dateYear.length != 2) && (dateYear.length != 4) ) { return false; }
    // if 2-digit year, use 50 as a pivot date
    if ( (numYear < 50) && (dateYear.length == 2) ) { numYear += 2000; }
    if ( (numYear < 100) && (dateYear.length == 2) ) { numYear += 1900; }
    if ((numYear <= 0) || (numYear > 9999)) { return false; }
    // check for leap year if the month and day is Feb 29
    if ((numMonth == 2) && (numDay == 29)) {
        var div4 = numYear % 4;
        var div100 = numYear % 100;
        var div400 = numYear % 400;
        // if not divisible by 4, then not a leap year so Feb 29 is invalid
        if (div4 != 0) { return false; }
        // at this point, year is divisible by 4. So if year is divisible by
        // 100 and not 400, then it's not a leap year so Feb 29 is invalid
        if ((div100 == 0) && (div400 != 0)) { return false; }
    }
    // date is valid
    return true;
}


////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	Calculate the age using day, month and year.
//	Return the age in number (integer)
////////////////////////////////////////////////////////////////////////////////////////////////////////////
function calAge(bday,bmo,byr) {
	var byr;
	var age;
	var now = new Date();
	tday=now.getDate();
	tmo=(now.getMonth()+1); /* for some reason the month is 4 for may */
	tyr=(now.getFullYear()); 
	{
		if((tmo > bmo)||(tmo==bmo & tday>=bday)) {
			age=byr;
		} else {
			age=byr+1;
		}
	}
	return (tyr-age);
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////
//	testing...
////////////////////////////////////////////////////////////////////////////////////////////////////////////
function testing() {
	alert("testing...");
}

