/**
 * jQuery.string
 * 
 * @version 0.2.1
 * - exists checks for undefined values
 * - empty checks for undefined values
 * - writeEmail changed to cleanEmail
 * - bug fix : is_array replaced by (typeof str == 'object')
 *
 * @version 0.2.0
 */

jQuery.string = {};

/**
 * exists
 * @param str
 * @return Boolean
 */
jQuery.string.exists = function (str) {
	if (str == undefined) {
		return (false);
	}
	
	var strstr = str.replace(/ /g, '');
	return ( (strstr !== '') && (strstr.length !== 0) );
};

/**
 * empty
 * @param str
 * @return Boolean
 */
jQuery.string.empty = function (str) {
	return (   (str === "") 
			|| (str === 0)
			|| (str === "0")
			|| (str === null)
			|| (str === undefined)
			|| (str === false)
			|| ((typeof str == 'object') && (str.length === 0))
	);
};

/**
 * isEmail
 * @param email
 * @return Boolean
 */
jQuery.string.isEmail = function (email) {
	var doubleCharPasOk = ["..","--","__",".@","-@","_@","@.","@-","@_","-_","_-",".-","-.","._","_."];	
	
	email = jQuery.string.cleanEmail(email);
	
	for (var i = 0 ; i < doubleCharPasOk.length ; i++) {
		if (!(email.indexOf(doubleCharPasOk[i]) == -1)) {
			return(false);
		}
	}
	
	var regexp = new RegExp("^[a-z0-9]{1}[a-z0-9._-]+@[a-z0-9._-]{2,}[.][a-z]{2,}$", "");
	var result = regexp.test(email);
	
	return(result);
};

/**
 * cleanEmail
 * @param email
 * @return String
 */
jQuery.string.cleanEmail = function (email) {
	email = email.toLowerCase();
	email = email.replace(/ /g, "");
	
	var tabAccents 		= 'àáâãäåçèéêëìíîïñòóôõöùúûüýÿç';
	var tabSansAccents 	= 'aaaaaaceeeeiiiinooooouuuuyyc';
	var len				= tabAccents.length;
	
	for (var i = 0 ; i < len ; i++) {
		var regexp = new RegExp(tabAccents.charAt(i), 'g');
		email = email.replace(regexp, tabSansAccents.charAt(i));
	}
	
	return (email);
};

/**
 * capitalize
 * @param str
 * @return Boolean
 */
jQuery.string.capitalize = function (str) {
	var firstLetter = str.charAt(0);
	str = firstLetter.toUpperCase() + str.substring(1, str.length);

	return(str);
};

/**
 * rangeLength
 * @param str
 * @param Array range
 * @return Boolean
 */
jQuery.string.rangeLength = function (str, range) {
	var len = str.length;
	return( (len >= range[0]) && (len <= range[1]) );
};

/**
 * utf8_decode
 * @param String str
 * @return String
 */
jQuery.string.utf8_decode = function (str) {
	var string = '';
	var i = 0, c = 0, c1 = 0, c2 = 0;
	
	while ( i < str.length ) {
		c = str.charCodeAt(i);
		if (c < 128) {
			string += String.fromCharCode(c);
			i++;
		} else if((c > 191) && (c < 224)) {
			c2 = str.charCodeAt(i+1);
			string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
			i += 2;
		} else {
			c2 = str.charCodeAt(i+1);
			c3 = str.charCodeAt(i+2);
			string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
			i += 3;
		}
	}
	
	return string;
};

/**
 * utf8_encode
 * @param String str
 * @return String
 */
jQuery.string.utf8_encode = function (str) {
	str = str.replace(/\r\n/g, "\n");
	var utftext = "";
	
	for (var n = 0; n < str.length; n++) {
		var c = str.charCodeAt(n);
		if (c < 128) {
			utftext += String.fromCharCode(c);
		} else if((c > 127) && (c < 2048)) {
			utftext += String.fromCharCode((c >> 6) | 192);
			utftext += String.fromCharCode((c & 63) | 128);
		} else {
			utftext += String.fromCharCode((c >> 12) | 224);
			utftext += String.fromCharCode(((c >> 6) & 63) | 128);
			utftext += String.fromCharCode((c & 63) | 128);
		}
	}
	
	return utftext;
};
