package com.guru.utils
{
	public class StringUtil
	{
		function StringUtil(){}
		
		public static function removeNewLineSpacing(pString_str:String):String
		{
			return pString_str.replace(/\r/g, "");
		}
		
		/**
		 * change the line break into \n
		 * @param pString_str the source string
		 * @return string
		 * */
		public static function convertToUnixLineBreak(pString_str:String):String
		{
			var pc2Unix_str:String = pString_str.split("\r\n").join("\n");
			return pc2Unix_str.split("\r").join("\n");
		}
		
		/**
		 * replace the string with specify string
		 * @param string the source string
		 * @param pWhat_str the change of the string
		 * @param pTo_str the target string
		 * @return string
		 * */
		public static function replace(pString_str:String, pWhat_str:String, pTo_str:String):String
		{
			return pString_str.split(pWhat_str).join(pTo_str);
		}
		
		/**
		 * cancel the space in the left hand side and the right hand side
		 * @param string the source string
		 * @return string
		 * */
		public static function trim(string:String):String 
		{
			return leftTrim(rightTrim(string));
		}
	
		/**
		 * cancel the space in the left hand side
		 * @param string the source string
		 * @return string
		 * */
		public static function leftTrim(string:String):String 
		{
			return leftTrimForChars(string, "\n\t\n ");
		}
		
		/**
		 * cancel the space in the right hand side
		 * @param string the source string
		 * @return string
		 * */
		public static function rightTrim(string:String):String 
		{
			return rightTrimForChars(string, "\n\t\n ");
		}
		
		/**
		 * cancel all the words from the specify chars in the left hand side
		 * @param string the source string
		 * @param chars the target chars
		 * @return string
		 * */
		public static function leftTrimForChars(string:String, chars:String):String 
		{
			var from:Number = 0;
			var to:Number = string.length;
			while (from < to && chars.indexOf(string.charAt(from)) >= 0){
				from++;
			}
			return (from > 0 ? string.substr(from, to) : string);
		}
		
		/**
		 * cancel all the words from the specify chars in the right hand side
		 * @param string the source string
		 * @param chars the target chars
		 * @return string
		 * */
		public static function rightTrimForChars(string:String, chars:String):String 
		{
			var from:Number = 0;
			var to:Number = string.length - 1;
			while (from < to && chars.indexOf(string.charAt(to)) >= 0) {
				to--;
			}
			return (to >= 0 ? string.substr(from, to+1) : string);
		}
		
		/**
		 * change a url format string into a object
		 * @param str the source string
		 * @return object
		 * */
		public static function stringToObject(str:String):Object
		{
			var element_array = str.split("&");
			var tmpObject = new Object();
			for (var i = 0; i < element_array.length; i++)
			{
				var item = element_array[i].split("=");
				tmpObject[item[0]] = item[1];
			}
			return tmpObject;
		}
		
		/**
		 * change a object into a url format string
		 * @param obj the source object
		 * @return string
		 * */
		public static function objectToString(obj:Object):String
		{
			var tmp_str:String = "";
			for (var i in obj)
			{
				tmp_str += i + "=" + obj[i] + "&";
			}
			return tmp_str;
		}
		
		/**
		 * check the email format is valid or not
		 * @param pEmail_str the source string
		 * @return Boolean
		 * */
		public static function checkEmail(pEmail_str:String):Boolean 
		{
			var emailRegPat:RegExp = /^[0-9A-Za-z\.\-_]+[@][0-9A-Za-z_\-]+[.][0-9A-Za-z\.]{2,}$/;
			if (!emailRegPat.test(pEmail_str))
			{
				return false;
			}
			return true;
		}
		
		/**
		 * check the link format is valid or not
		 * @param pText_str the source string
		 * @return Boolean
		 * */
		public static function checkLink(pText_str:String):Boolean 
		{
			//var emailRegPat:RegExp = /^[0-9A-Za-z\.\-_]+[@][0-9A-Za-z_\-]+[.][0-9A-Za-z\.]{2,}$/;
			var linkRegPat:RegExp = /([\d\w-.]+?\.(a[cdefgilmnoqrstuwz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvxyz]|d[ejkmnoz]|e[ceghrst]|f[ijkmnor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eouw]|s[abcdeghijklmnortuvyz]|t[cdfghjkmnoprtvwz]|u[augkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw]|aero|arpa|biz|com|coop|edu|info|int|gov|mil|museum|name|net|org|pro)(\b|\W(?<!&|=)(?!\.\s|\.{3}).*?))(\s|$)/;
			if (!linkRegPat.test(pText_str))
			{
				return false;
			}
			return true;
		}
	}
}