/* ---------------------------------------- EXTENSIONES DEL OBJETO STRING ------------------------------------------- */
//	Versión: 1.0
//	Navegadores soportados: Todos los que soportan el objeto String y la capacidad de añadir extensiones a 'prototype'.
//	Paquete: Juego de Cartas (sólo IEW y DOM).
//	Dependencias: Ninguna.
//	Comentarios:
//		Son un conjunto de funciones que extienden el tipo básico String de JavaScript.
//	Histórico de cambios (tras versión 1.0):
/* ------------------------------------------------------------------------------------------------------------------ */

/*- Extrae una porción del centro de una cadena. Puede especificarse primero la última y luego la primera posición a
 leer.
Parámetros:
	p -- Posición inicial.
	q -- Posición final.
Devuelve:
	La porción pedida de la cadena a que se aplica.
-*/
String.prototype.gsMid=function(p,q){
	return p<q?this.substring(p,q-p+1):this.substring(q,p-q+1)
}
/* - Extrae una porción de la cadena por su izquierda.
Parámetros:
	p -- Número de caracteres a extraer.
Devuelve:
	Si p<0, una cadena vacía. Si p>longitud, toda la cadena. En caso contrario, la porción pedida.
- */
String.prototype.gsLeft=function(p){
	return p<0?'':p>=this.length?this:this.substring(0,p)
}
/* - Extrae una porción de la cadena por su derecha.
Parámetros:
	p -- Número de caracteres a extraer.
Devuelve:
	Si p<0, una cadena vacía. Si p>longitud, toda la cadena. En caso contrario, la porción pedida.
- */
String.prototype.gsRight=function(p){
	return p<0?'':p>=this.length?this:this.substring(this.length-p)
}
/* - Elimina los espacios de la izquierda de una cadena.
Parámetros:
	Ninguno.
Devuelve:
	La cadena sin los espacios a la izquierda.
-*/
String.prototype.gsTrimL=function(){
	return this.replace(/^\s+/,'')
}
/* - Elimina los espacios de la derecha de una cadena.
Parámetros:
	Ninguno.
Devuelve:
	La cadena sin los espacios a la derecha.
-*/
String.prototype.gsTrimR=function(){
	return this.replace(/\s+$/,'')
}
/* - Elimina los espacios de los extremos de una cadena.
Parámetros:
	Ninguno.
Devuelve:
	La cadena sin los espacios en los extremos.
-*/
String.prototype.gsTrim=function(){
	return this.gsTrimR().gsTrimL()
}
/* - Elimina caracteres de la derecha de una cadena. Si no se da argumento, devuelve la cadena original. Si el valor pasado
 es mayor que la longitud de la cadena, devuelve la cadena vacía.
Parámetros:
	p -- [opcional] Número de caracteres a extraer.
Devuelve:
	La cadena con 'p' menos caracteres a su derecha.
-*/
String.prototype.gsDelR=function(p){
	return typeof(p)=="undefined"?this:p<this.length?this.substring(0,this.length-p):''
}
/* - Elimina caracteres de la izquierda de una cadena. Si no se da argumento, devuelve la cadena original. Si el valor pasado
 es mayor que la longitud de la cadena, devuelve la cadena vacía.
Parámetros:
	p -- [opcional] Número de caracteres a extraer.
Devuelve:
	La cadena con 'p' menos caracteres a su izquierda.
-*/
String.prototype.gsDelL=function(p){
	return typeof(p)=="undefined"?this:p<this.length?this.substring(p):''
}
/* - Trocea una cadena en una matriz de enteros. No se comprueba si los valores troceados son enteros válidos o no, así que
 algunos elementos de la matriz resultante pueden tener valores como "NaN" o "Inf".
Parámetros:
	r -- Expresión regular a utilizar para el troceado.
Devuelve:
	Cadena troceada.
- */
String.prototype.gsSplitInt=function(r){
	var s=this.split(r)
	if(s.length)for(var i=0;i<s.length;i++)s[i]=parseInt(s[i])
	return s
}
/* - Trocea una cadena en una matriz de números decimales. No se comprueba si los valores troceados son números decimales
 válidos o no, así que algunos elementos de la matriz resultante pueden tener valores como "NaN" o "Inf".
Parámetros:
	r -- Expresión regular a utilizar para el troceado.
Devuelve:
	Cadena troceada.
- */
String.prototype.gsSplitFloat=function(r){
	var s=this.split(r)
	if(s.length)for(var i=0;i<s.length;i++)s[i]=parseFloat(s[i])
	return s
}

/* -- Código de depuración/test -- */
if(typeof(gsDebug)=="undefined")gsDebug=null
if(gsDebug){
	var a=' epepeppee ',b='1.5,4.5,6.6',c={x:10,y:10}
	gsDebug.titulo('archivo "extstring.js"','#FFAA40')
	gsDebug.escribe("a=|"+a+"|")
	gsDebug.escribe("b="+b)
	gsDebug.escribe("c="+c)
	gsDebug.escribe("a.gsMid(4,5)=|"+a.gsMid(4,5)+"|")
	gsDebug.escribe("a.gsLeft(6)=|"+a.gsLeft(6)+"|")
	gsDebug.escribe("a.gsRight(3)=|"+a.gsRight(3)+"|")
	gsDebug.escribe("a.gsTrimL()=|"+a.gsTrimL()+"|")
	gsDebug.escribe("a.gsTrimR()=|"+a.gsTrimR()+"|")
	gsDebug.escribe("a.gsTrim()=|"+a.gsTrim()+"|")
	gsDebug.escribe("a.gsDelR(5)=|"+a.gsDelR(5)+"|")
	gsDebug.escribe("a.gsDelL(5)=|"+a.gsDelL(5)+"|")
	gsDebug.escribe("b.gsSplitInt(',')=["+b.gsSplitInt(',')+"]")
	gsDebug.escribe("b.gsSplitFloat(',')=["+b.gsSplitFloat(',')+"]")
	gsDebug.escribe("Volcando c:")
	gsDebug.vuelcaObjeto(c)
	gsDebug.refresca()
}
