﻿String.ScriptFragment = "(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)";

extendEx(String,
{
	getGuid: function()
	{
		return this + new Date().valueOf() +  parseInt(Math.random() * 10000, 10);
	},

  StripTags: function() 
  {
    return this.replace(/<\/?[^>]+>/gi, "");
  },
 
  ReplaceAll: function(strFind, strReplace)
  {
    return this.replace(new RegExp(strFind, "ig"), strReplace);
  },
 
  StripScripts: function() 
  {
    return this.replace(new RegExp(String.ScriptFragment, "img"), "");
  },
  
  ExtractScripts: function() 
  {
    var matchAll = new RegExp(String.ScriptFragment, "img");
    var matchOne = new RegExp(String.ScriptFragment, "im");
	
    return(this.match(matchAll) || []).map
    (
        function(scriptTag) 
        {
	        return (scriptTag.match(matchOne) || ["", ""])[1];
        }
     );
  },

  Capitalize: function()
  {
    return this.charAt(0).toUpperCase() + this.substr(1);
  },
  
  getUrlParameters: function() 
  {
    var pairs = this.match(/^\??(.*)$/)[1].split("&");
    var parms = {};
	
    try
    {
      for(var i = 0; i < pairs.length; i++)
      {
        var pair = pairs[i].split("=");
        parms[pair[0]] = pair[1];
      }
	    
      return parms;
    }
    finally
    {
      pairs = parms = null;
    }
  },
  
  trimEx: function()
  {
    return this.replace(/(^\s+)|\s+$|^\xa0+|\xa0+$/g, "");
  },
  
  GetLength: function() 
  {
    return this.replace(/[^\x00-\xff]/g, "aa").length;
  },

  ToArray: function() 
  {
      return this.split("");
  },
  
  camelize: function() 
  {
    var stringArray = this.split('-');
	
    if (stringArray.length == 1) 
        return stringArray[0];
	
    var camelizedString = this.indexOf('-') == 0 ? stringArray[0].charAt(0).toUpperCase() + stringArray[0].substring(1) : stringArray[0];

    for (var i = 1, len = stringArray.length; i < len; i++) 
    {
        var s = stringArray[i];
        camelizedString += s.charAt(0).toUpperCase() + s.substring(1);
    }
    
      return camelizedString;
  },
 
	parseCDATA: function()
	{
		return this.replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001A\uD800-\uDFFF]/gm,function(c) {var code = c.charCodeAt(0); return (code > 9 ? "&#" + code : "&#0" + code) + ";"});
	},
	
	parseHTML: function()
	{
		return this.replace(/&/gm,"&amp;").replace(/</gm,"&lt;").replace(/>/gm,"&gt;")
	},

	startsWith: function(s)
	{
		return (this.length >= s.length) && (this.substr(0, s.length) == s);
	},

  ToFixed: function(n)
  {
    if (n <= 0)
	    return this;

    var result = this;
	
    var tmp = result.split(".");
	
    if (tmp.lenth > 1)
    {
	    for(var i = 0; i < n; i++)
	    {
		    tmp[1] += "0";
	    }
		
	    result = tmp.join(".");
    }
    else
    {
	    result += ".";
		
	    for(var i = 0; i < n; i++)
	    {
		    result += "0";
	    }
    }

    return result;
  }
});

