function isDate(strDate) {
// use dd/mm/yyyy 
	var myDate = strDate;
	var delimiterFirstInstance;
	var delimiterSecondInstance;
	var delimiterType;
	var monthPart;
	var dayPart;
	var yearPart;

	//accepts delimiting characters of either "/" or "-"
	
	delimiterFirstInstance = myDate.indexOf("/");
	if (delimiterFirstInstance == -1) {
		//check for the other allowed delimiter
		delimiterFirstInstance = myDate.indexOf("-");
		//if it is still not found, return false
		if (delimiterFirstInstance == -1) {
			return false;
		}
		else { 
		delimiterType = "-";
		}
	} 
	else { 
		delimiterType = "/";
	}

	delimiterSecondInstance = myDate.indexOf(delimiterType, (delimiterFirstInstance + 1));
	if (delimiterSecondInstance == -1) {
		return false;
	}
	
	
	monthPart =  myDate.substring((delimiterFirstInstance + 1), (delimiterSecondInstance));
	if(validateMonth(monthPart) == false) {
		 return false;
	}
	
	yearPart = myDate.substring((delimiterSecondInstance + 1), (myDate.length));

	if(validateYear(yearPart) == false) {
		return false;
	}

	dayPart = myDate.substring(0, delimiterFirstInstance);
	if(validateDay(monthPart, dayPart, yearPart) == false) {
		return false;
	} 
	else { 
		return true;
	}
}

function validateDay(m, d, y) {
	if((isNaN(d)) || d == "") {
		return false;
	}

	var mo = parseInt(m, 10);
	var da = parseInt(d, 10);
	var ye = parseInt(y, 10);

	if (da < 1) {
	 return false;
	}

	if ((mo == 4) || (mo == 6) || (mo == 9) || (mo == 11)) {
   //it is a 30 day month
		if (da > 30) {
			return false;
		}
	} 
	else if(mo == 2) {
	// it is february (either 28 or 29 depending on leap year)
		if (isLeapYear(ye) == true) {
			if (da > 29) {
			//leap years have 29 days in february
				return false;
			}
		} 
		else {
			if (da > 28) {
			//non leap years have 28 days in february
				return false;
			}
		}
	} 
	else {
	// it is a 31 day month
		if (da > 31) {
			return false;
		}
	}
	//if we made it through all of the above without falling out,
	//it must be a valid day for the given month and year
	return 
}

function validateMonth(mnth) {
	if((isNaN(mnth)) || mnth == "") {
		return false;
	}

	var intMonth = parseInt(mnth, 10);
	if((intMonth < 1) || (intMonth > 12)) {
		return false; //month must be between 1 and 12 (inclusive)
	} 
	else { 
		return true;
	}
}

function validateYear(yr) {
	if((isNaN(yr)) || yr == "") {
		return false;
	}
	
	var intYear = parseInt(yr, 10);

	if((intYear < 1970) || (intYear > 9999)) {
		return false; //year must be between 1970 and 9999 (inclusive)
	} 
	else { 
		return true;
	} 
}

function isLeapYear(yr) {
/* classic leap year calculation:
if the year is:
 evenly divisible by 4 and not evenly divisible by 100
 or
 evenly divisible by 400
then it is a leap year,
Otherwise it is not a leap year
*/

	if (((yr % 4 == 0) && (yr % 100 != 0)) || (yr % 400 == 0)) {
		return true;
	} 
	else { 
		return false;
	} 
}

function GetDayOfWeek(inDateStr) {
// use dd/mm/yyyy 
	var myDate = inDateStr;
	var delimiterFirstInstance;
	var delimiterSecondInstance;
	var delimiterType;
	var monthPart;
	var dayPart;
	var yearPart;
	var numMonth;
	var days = new Array('SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT');
	var objDate;
	var numDay;
	var strDay;

	if (!isDate(inDateStr)) {
		return 'Invalid Date. Valid(DD/MM/YYYY)';
	}
	
	//accepts delimiting characters of either "/" or "-"
	
	delimiterFirstInstance = myDate.indexOf("/");
	if (delimiterFirstInstance == -1) {
		//check for the other allowed delimiter
		delimiterFirstInstance = myDate.indexOf("-");
		//if it is still not found, return false
		if (delimiterFirstInstance == -1) {
			return 'Unknow Date';
		}
		else { 
		delimiterType = "-";
		}
	} 
	else { 
		delimiterType = "/";
	}

	delimiterSecondInstance = myDate.indexOf(delimiterType, (delimiterFirstInstance + 1));
	if (delimiterSecondInstance == -1) {
		return 'Unknow Date';
	}
	
	
	dayPart = myDate.substring(0, delimiterFirstInstance);
	monthPart =  myDate.substring((delimiterFirstInstance + 1), (delimiterSecondInstance));
	yearPart = myDate.substring((delimiterSecondInstance + 1), (myDate.length));
	
	numMonth = monthPart - 1;
	objDate = new Date(yearPart, numMonth, dayPart);
	numDay = objDate.getDay();
	strDay = days[numDay];
	return strDay;
}

function trim(inString) {
	var Output;
	
	Output = inString.replace(/\s+$/gi, "");
	Output = Output.replace(/^\s*/gi, "");
	
	return Output;
}

function ValidateTextField(objText, strTextName) {
	if (trim(objText.value) == '') {
		alert('Please enter ' + strTextName);
		objText.focus();	
		return false;
	}
	else
		return true;
}

function ValidateTextFieldWithDefault(objText, strTextName, strDefault) {
  var valueToCheck = trim(objText.value);
  
	if ((valueToCheck == '') || (valueToCheck == strDefault)) {
		alert('Please enter ' + strTextName);
		objText.focus();	
		return false;
	}
	else
		return true;
}

function ValidateMMYY(objText, strTextName) {
    var mm = objText.value.substr(0, 2);
    var yy = objText.value.substr(3, 2);
    
	if ((trim(objText.value) == '') || (!isDate('01/' + mm + '/20' + yy))) {
		alert('Please enter ' + strTextName + ' in mm/yyyy format');
		objText.focus();	
		return false;
	}
	else
		return true;
}

function isInteger(a){
	return a==parseInt(a,10)
}

function isNumeric(a){
	return !isNaN(a)
}

function ValidateNumber(objNumberText, strFieldName) {
	var ValueToCheck;
	
	ValueToCheck = objNumberText.value.replace(/,/g, '');
	
	if ((trim(ValueToCheck) != '') && isNumeric(ValueToCheck) ){
		return true;
	}
	else {
		alert("Please input valid number for " + strFieldName);
		objNumberText.focus();
		return false;
	}
}

function ValidDateFieldAllowEmpty(inObject, inTitle) {
	if ((trim(inObject.value) == '') || ValidateNumber(inObject, inTitle)) {
		return true;
	}
	else
		return false;
}

function ValidateCC(inObject) {
	var ValueToCheck;
	
	ValueToCheck = inObject.value.replace(/ /g, '');
	
	if ((trim(inObject.value) != '') && (trim(ValueToCheck) != '') && isNumeric(ValueToCheck) ){
		return true;
	}
	else {
		alert("Please input valid Credit Card Number");
		inObject.focus();
		return false;
	}
}

function ValidateSelect(inObjSelect, inTitle) {
    if (inObjSelect.value == '') {
		alert("Please select " + inTitle);
		inObjSelect.focus();
		return false;
    }
    else 
        return true;
}

function OpenNewWindow(NewWindowName, NewLocation, inHeight, inWidth, inOthers) {
	var NewWindow;
	var w=screen.width; 
	var x=((w/2)-(inWidth/2));
	var h=screen.height; 
	var y=((h/2)-(inHeight/2));

	NewWindow = window.open(NewLocation, NewWindowName,
		' height=' + inHeight + ', width=' + inWidth + ', left=' + x + ', top=' + y +
        ', resizable=yes' + inOthers);
	NewWindow.focus();
}

function clear_text(objText, inDefaultText) {
  if (objText.value == inDefaultText) {
    objText.value = '';
  }
}

function set_text(objText, inDefaultText) {
  if (trim(objText.value) == '') {
    objText.value = inDefaultText;
  }
}

function limitText(limitField, limitCount, limitNum) {
  var objCount = document.getElementById(limitCount);
  
	if (limitField.value.length > limitNum) {
		limitField.value = limitField.value.substring(0, limitNum);
	} else {
    if (objCount) {
      objCount.innerHTML = limitNum - limitField.value.length;
    }
	}
}
