/**
 * @class
 * name String
 */

/**
 * Permet de formater une chaine de caractère à la manière du MessageFormat.format de java
 * @example
 * "Ceci est un {0}".format('exemple')
 */
String.prototype.format = function() {
    var args = arguments;

    value = this;
    value = value.replace(/(\'\')/g, function() {
    	return "'";
    })

    return value.replace(/\{(\d+)\}/g, function() {
    	if (typeof(args)=='undefined' || args.length==0) return "";
    	var paramsArray = null;
    	if (args.length==1) {
    		if (jQuery.isArray(args[0])) paramsArray = args[0];
    		else paramsArray = args;
    	} else paramsArray = args;

		var pos = arguments[1];
		if (paramsArray.length<=pos) return "";
		var val = paramsArray[pos];
		if (typeof(val)=='undefined' || val==undefined || val==null) return "";
		return val;
    });
};

/**
 * Teste si cette chaine se termine par la chaine passée en paramètre
 * @example
 * "Toto aime le jambon".endsWith("jambon")
 */
String.prototype.endsWith = function (suffix) {
  return (this.substr(this.length - suffix.length) == suffix);
};

/**
 * Teste si cette chaine commence par la chaine passée en paramètre
 * @example
 * "Toto aime le jambon".startsWith("Toto")
 */
String.prototype.startsWith = function(prefix) {
  return (this.substr(0, prefix.length) == prefix);
};

/**
 * Permet d'exporter un object dans une arborescence décrite par cette chaine de caractère
 * @param nsContent Object à exporter. Par défaut {}
 * @separator	Séparateur de hiérarchie. Par défaut '.'
 * @example
 * "wedia.bov3.Test".namespace({msg: "Ceci est un test"})
 *  var msg = wedia.bov3.Test.msg
 */
String.prototype.namespace = function(nsContent, separator) {
	nsContent = nsContent || {};
	separator = separator || ".";
	var namespacePath = this.split(separator);
	var obj = window;
	for(var i = 0, len=namespacePath.length; i < len; i++) {
		obj = obj[namespacePath[i]] = obj[namespacePath[i]] || {};
	}
	for(var key in nsContent) {
		obj[key] = nsContent[key];
	}
};

/**
 * Supprime les espaces en début et fin de chaine
 */
String.prototype.trim = function() {
	if( this.length == 0 ) return this; 
	var start, end;
	function isSpace(c) {
		return (c == ' ' || c == '\t' || c == '\n' || c == '\r');
	}
	for( start = 0; start < this.length; start++ ) {
		var c = this.charAt(start);
		if( !isSpace(c) ) break;
	}
	if( start == this.length ) return "";
	else {
		for( end = this.length - 1; end >= 0; end-- ) {
			var c = this.charAt(end);
			if( !isSpace(c) ) break;
		}
		return this.substring(start, end + 1);
	}
}
