function isValidEmail(email) {
	var emailPattern = /^[a-zA-Z0-9_-]+(?:\.[a-zA-Z0-9_-]+)*@(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+([a-zA-Z0-9]{2,4})$/;
	return emailPattern.test(email);
}

function isValidUrl(str) {
   return (str.indexOf("http://") == 0) || (str.indexOf("https://") == 0);
}

function isPositiveInteger(val) {
	return isInteger(val) && val > 0;
}

function isAlphaNumeric(val)
{
	if (val == null)  {
		return false;
	}
	for(var j=0; j<val.length; j++) {
		var a = val.charAt(j);
		var c = a.charCodeAt(0);
		if((c > 47 && c < 58) || (c > 64 && c < 91) || (c > 96 && c < 123)) {
			continue;
		}
		else {
			return false;
		}
	}
	return true;
}

function isInteger(val)
{
	if (!val || val == null)  {
		return false;
	}
	for(var j=0; j<val.length; j++) {
		var a = val.charAt(j);
		var c = a.charCodeAt(0);
		if(c > 47 && c < 58) {
			continue;
		}
		else {
			return false;
		}
	}
	return true;
}

function containsHtml(inputText){
	var htmlRegex = new RegExp(/<\/?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)\/?>/gim);

	if(inputText.match(htmlRegex)){
	
		return true;
	}
	return false;
}

function validateFields(fieldArray,errorArray, labelProvideValue, labelFieldTooLong) {
	
	for(var i = 0; i < fieldArray.length; i++) {
		var fieldId = fieldArray[i][0];
												
		if (document.getElementById(fieldId)) {
			var whatToValidate = fieldArray[i][3];
			
			if (!whatToValidate || whatToValidate.length == 0) continue;
			
			var maxFieldLen = fieldArray[i][1];
			var fieldLabel = fieldArray[i][2];
			var fieldObj = document.getElementById(fieldId);
			var fieldValue;
			
			if(whatToValidate.indexOf('REQ') != -1){
				if(fieldObj != null)
					fieldValue = fieldObj.value;
				
				if(fieldValue != null)
					fieldValue = fieldValue.trim();
				
				if(fieldValue == '' || fieldValue == null ) {
					eLen = errorArray.length;
					errorArray[eLen] = new Array();
					errorArray[eLen][0] = fieldId; 
					if (fieldArray[i][4]) {
						errorArray[eLen][1] = fieldArray[i][4];
					}
					else {
						errorArray[eLen][1] = labelProvideValue.replace('{0}', fieldLabel); 
					}
				 }
			}
			if(whatToValidate.indexOf('MAXLEN') != -1){
				var fieldLen = StringLength(fieldObj.value);
				if(fieldLen > maxFieldLen && whatToValidate.indexOf('MAXLEN') != -1) {
					eLen = errorArray.length;
					errorArray[eLen] = new Array();
					errorArray[eLen][0] = fieldId; 
					
					errorArray[eLen][1] = labelFieldTooLong.replace('{0}', fieldLabel).replace('{1}', maxFieldLen);
				}	
			}
		}
	}

}


function validateKeyword(textId, labelTitle, keywordMoreThan1Char,showAsAlert) {

	var keywordVal = document.getElementById(textId).value;
	var errorArray = new Array();
	
	if (keywordVal == null) {
		return true;
	}
	
	keywordVal = keywordVal.trim();
	var errorMsg;
	if (keywordVal.length == 1 || 
		(keywordVal.length == 2 && (keywordVal.charAt(0) == '*' || keywordVal.charAt(1) == '*'))) {
		if (!showAsAlert) {
			i = errorArray.length;
			errorArray[i] = new Array();
			errorArray[i][0] = textId;
			errorArray[i][1] = keywordMoreThan1Char;
			showErrors(errorArray,'error-msg-main', labelTitle);
			return false;
		}
		else {
			errorMsg = labelTitle + ':\n' + keywordMoreThan1Char;
			alert(errorMsg);
			return false;
		}
	}
	return true;
}

function enterKeyHit(e) {

	if(window.event){ // IE
		keynum = e.keyCode;
	} else if(e.which){ // Netscape/Firefox/Opera
		keynum = e.which;
	}

	return (keynum == 13);
}

function StringLength(enteredString){
	if(enteredString == null){ return 0;}
	var s = enteredString.length;
	for(var index = 0;  index < enteredString.length; index++ ){                     
       if(enteredString[index] == '\n' ){                                           
          s += 1; 
       }                           
    }
	return s;
}

function trim(str){
	return str.replace(/^\s+|\s+$/g, "");
}

function isEmpty(value){
	return (value == null || value == '' || trim(value).length == 0);
}


// Accept only (0-9) integer and two decimal point (decimal point is optional)
function isNumber(value){
    if(isEmpty(value)) return false;
    return (/^([0-9]+(\.[0-9]{1,2})?$)$/.test(value));			    
}

/**
 * Checks for correct Date format input (mm/dd/yyyy)
**/
function isDate(txtDate) {

    var objDate,  // date object initialized from the txtDate string
        mSeconds, // txtDate in milliseconds
        day,      // day
        month,    // month
        year;     // year

    if (txtDate.length < 8 || txtDate.length > 10) {
        return false;
    }	
    	
	var SplitValue = txtDate.split("/");
	
	if(SplitValue.length != 3){
		return false;
	}
	if (SplitValue[0].length != 1 && SplitValue[0].length != 2) {
        return false;
    }
    if (SplitValue[1].length != 1 && SplitValue[1].length != 2) {
        return false;
    }
    if (SplitValue[2].length != 4) {
		return false;
    }
	
	// cast from string to integer
    month = SplitValue[0] - 1; // months in JS start from 0
    day = SplitValue[1] - 0;
    year = SplitValue[2] - 0;
	
    // convert txtDate to milliseconds
    mSeconds = (new Date(year, month, day)).getTime();
	
    // initialize Date() object from calculated milliseconds
    objDate = new Date();
    objDate.setTime(mSeconds);
    
	// compare input date and parts from Date() object
    // if difference exists then date isn't valid
    if (objDate.getFullYear() !== year ||
        objDate.getMonth() !== month ||
        objDate.getDate() !== day) {
        return false;
    }
    
	// otherwise return true
    return true;
}	

/**
 * return true if date is in the future
 * date should be on the format (mm/dd/yyyy)
**/
function isFutureDate(d) {
    var day, mSec1, mSec2;
    day = 24*60*60*1000;
    
    // define number of milliseconds
    mSec1 = Date.parse(d);
    mSec2 = (new Date()).getTime();

	// compare to now() - 1 day
    return (mSec1 - mSec2 + day) >= 0;

}


