/**
 *
 * @author Ardeleanu Ionut
 * @langversion JAVASCRIPT
 *
 * http://www.neokinetics.ro
 * iardeleanu@neokinetics.ro
 *
 * Browsers tested: IE6+, Firefox 3+, Opera 8+, Chrome, Safari 4 for windows
 * Last Update: 15.06.2010 
 */



function _string_isAlpha(chars){
	
	var extendedChars = (chars == null) ? "" : chars;
	var re = new RegExp("^[a-zA-Z"+extendedChars+"\u00C0-\u00FF]+$");
	
	return re.test(this);	
}

function _string_isAlphaNumeric(chars){
	var extendedChars = (chars == null) ? "" : chars;
	var re = new RegExp("^[a-zA-Z0-9"+extendedChars+"\u00C0-\u00FF]+$");
	
	return re.test(this);	
}


function _string_isNumeric(chars){
	var extendedChars = (chars == null) ? "" : chars;
	var re = new RegExp("^[0-9"+extendedChars+"]+$");
	
	return re.test(this);
}


function _string_isEmail(){
	var specialChars = String("авджзийклопфцњщыь") + String("авджзийклопфцњщыь").toUpperCase();
	var re1 = new RegExp("^[a-zA-Z0-9"+specialChars+"]([a-zA-Z0-9-_"+specialChars+"])*(\.[a-zA-Z0-9-_"+specialChars+"]+){0,}@(([a-zA-Z0-9-_.])*)+\.[a-zA-Z]{2,6}$")
	var re2 = new RegExp("[\._-]{2,}"); 
	
	if (re1.test(this) && re2.test(this) == false){
		return true;
	}
	else{ 
		return false;
	}
}


function _string_areEmails(){
	var emails = this.split(/(?:;|\n)+/);  //multiple split after (;) and new line separator(\n)
	
	for (var i=0; i<emails.length; i++){
		var email = emails[i].replace(/^\s+|\s+$/g,"");   //remove whitespaces before and after the string
		valid = email.isEmail();
		
		if (valid == false) {
			return false;
		}			
	}
	
	return true;
}


function _string_isDate(format){
	var date = [];
	
	if (this.indexOf("/") != -1) date = this.split("/");
	else if (this.indexOf(":") != -1) date = this.split(":");
	else if (this.indexOf("-") != -1) date = this.split("-");
	else if (this.indexOf(".") != -1) date = this.split(".");
	
	if (date.length != 3) return false;
	
	var day, month, year;
	
	switch (format.toLowerCase()){
	
		case "mmddyyyy":
			month = Number(String(date[0]));
			day = Number(String(date[1]));
			year = Number(String(date[2]));
			break;
			
		case "ddmmyyyy":
			month = Number(String(date[1]));
			day = Number(String(date[0]));
			year = Number(String(date[2]));
			break;
			
		case "yyyymmdd":
			month = Number(String(date[1]));
			day = Number(String(date[2]));
			year = Number(String(date[0]));
			break;
			
		case "yyyyddmm":
			month = Number(String(date[2]));
			day = Number(String(date[1]));
			year = Number(String(date[0]));
			break;
			
		default:
			break;
	}
	
	var dt = new Date(month + "/" + day + "/" + year);
	
	if(dt.getDate() != day) return false;

    if(dt.getMonth()!= month-1) return false
    
	if(dt.getFullYear() != year) return false
    
	return true;
}


function _string_isHour(){
	
	if (this.indexOf(":") == -1){
		return false;	
	}
	
	var h = this.split(":")[0];
	var m = this.split(":")[1];
	
	if (h.length <2 || m.length < 2 || isNaN(h) || isNaN(m)){
		return false;
	}
	
	if (parseInt(h) <0 || parseInt(h)>23){
		return false;
	}
	
	if (parseInt(m) <0 || parseInt(m)>59){
		return false;
	}
	
	return true;
	
}

function _string_isArhive(types){
	
	for (var j=0; j<types.length; j++){
		var length = types[j].length+1;
		var type = this.substr(this.length-length,length);
		
		if (type.toUpperCase() == "."+types[j].toUpperCase()){
			return true;
		}		
	}
	
	return false;	
}


function _string_isURL(){
	if (this.length == 0) return true;
	
	var valid = true;
	
	var reg = new RegExp(/^http(|s):\/\/\S+(?=\.\S+)|^www(|[123])\.\S+(?=\.\S+)/g);
	result = this.match(reg);
	
	if (result == null) return false;
	
	return true;	
}


function _string_hasInvalidChars(chars){
	var extendedChars = chars.split("");
	
	for (var j=0; j<extendedChars.length; j++){
		var character = extendedChars[j];
		if (this.indexOf(character) != -1) return true;
	}

	return false;
}


function _string_stripBlanks(){
	var r;                 //Declare variables.
	var ss = this;
	
	//replace the whitespaces from the start and the end of the value
	r = ss.replace(/^\s+|\s+$/g,"");
	return(r);
}

String.prototype.isAlpha = _string_isAlpha;
String.prototype.isAlphaNumeric = _string_isAlphaNumeric;
String.prototype.isNumeric = _string_isNumeric;
String.prototype.isEmail = _string_isEmail;
String.prototype.areEmails = _string_areEmails;
String.prototype.isDate = _string_isDate;
String.prototype.isHour = _string_isHour;
String.prototype.isArhive = _string_isArhive;
String.prototype.isURL = _string_isURL;
String.prototype.hasInvalidChars = _string_hasInvalidChars;
String.prototype.stripBlanks = _string_stripBlanks;

