/**
 * Funciones para crear componentes visuales para un formulario
 */

/**
 * Devuelve un nuevo botón
 * @param {String} id identificador del botón
 * @param {String} caption texto del botón
 * @param {Array} attrs array asociativo con más atributos para el botón (pueden ser eventos)
 */
function createButton(id, caption, attrs){
	if((attrs==undefined)||(attrs==null))
		attrs = new Array();
	attrs['type'] = 'button';
	attrs['id'] = id;
	attrs['value'] = caption;
	return createInput(attrs);
}

/**
 * Devuelve un nuevo botón radio
 * @param {String} id identificador del botón
 * @param {String} caption texto del botón
 * @param {Array} attrs array asociativo con más atributos para el botón (pueden ser eventos)
 */
function createRadioButton(id, caption, attrs){
	if((attrs==undefined)||(attrs==null))
		attrs = new Array();
	attrs['type'] = 'radio';
	attrs['id'] = id;
	attrs['value'] = caption;
	return createInput(attrs);
}

/**
 * Devuelve un nuevo Input text
 * @param {String} id identificador del botón
 * @param {String} value texto
 * @param {Array} attrs array asociativo con más atributos para el input (pueden ser eventos)
 */
function createInputText(id, value, attrs){
	if((attrs==undefined)||(attrs==null))
		attrs = new Array();
	attrs['type'] = 'text';
	attrs['id'] = id;
	attrs['value'] = value;
	return createInput(attrs);
}

/**
 * Devuelve un nuevo combo
 * @param {String} id identificador del botón
 * @param {String} value valor seleccionado (Puede ser null para ninguno)
 * @param {Array} options array asociativo con los pares <valor> = <texto> para cada option
 * @param {Array} attrs array asociativo con más atributos para el input (pueden ser eventos)
 */
function createCombo(id, value, options, attrs){
	var result = document.createElement('select');
	if((attrs==undefined)||(attrs==null))
		attrs = new Array();
	attrs['id'] = id;
	assignAttrs(result, attrs);
	
	for(optValue in options){
		var option = addOption(result);
		option.value = optValue;
		option.text = options[optValue];
	}
	if((value!=undefined)&&(value!=null)){
		var index = findValue(result, value);
		if(index!=-1)
			result.selectedIndex = index;
	}
	sortComboBox(result);
	return result;
}

/**
 * Crea un nuevo input en base a los atributos especificados
 * @param {Array} attrs array asociativo con atributos para el input (identificador, tipo, valor, eventos ....)
 */
function createInput(attrs){
	var result = document.createElement('input');
	assignAttrs(result, attrs);
	return result;	
}

/**
 * Asigna atributos a un objeto obtenidos de un array asociativo
 * @param {Array} attrs array asociativo con más atributos para el botón (pueden ser eventos)
 */
function assignAttrs(object, attrs){
	for(attrName in attrs){
		var attr = attrs[attrName];
		object[attrName] = attr;
	}
}

/**
 * Retorna los options para un combo de selección de sexo
 */
function getSexOptions(){
	return _SEX_OPTIONS;
}

/**
 * Retorna los options para un combo de selección de tipo de documento
 */
function getTypeDocumentOptions(){
	return _TYPE_DOCUMENT_OPTIONS;
}

/**
 * Retorna los options para un combo de selección de estado civil
 */
function getCivilStateOptions(){
	return _CIVIL_STATE_OPTIONS;
}

/**
 * Retorna los options para un combo de selección de nacionalidad
 */
function getNationalityOptions(){
	return _NATIONALITY_OPTIONS;
}

var _SEX_OPTIONS = {'': '-', '0': I18N.get('client.sex.female'), '1': I18N.get('client.sex.male')};

var _TYPE_DOCUMENT_OPTIONS = {'': '-',
		'DNI': 	I18N.get('idType.DNI'),
		'CI':	I18N.get('idType.CI'),
		'LC':	I18N.get('idType.LC'),
		'LE':	I18N.get('idType.LE'),
		'PAS':	I18N.get('idType.PAS')};

var _CIVIL_STATE_OPTIONS = {'': '-',
		'SO': 	I18N.get('stateCivil.SO'),
		'CA': 	I18N.get('stateCivil.CA'),
		'DI': 	I18N.get('stateCivil.DI'),
		'VI': 	I18N.get('stateCivil.VI')};

var _NATIONALITY_OPTIONS = {'': '-',
		'AF': I18N.get('country.AF'),
        'AL': I18N.get('country.AL'),
        'DE': I18N.get('country.DE'),
        'AD': I18N.get('country.AD'),
        'AO': I18N.get('country.AO'),
        'AI': I18N.get('country.AI'),
        'AQ': I18N.get('country.AQ'),
        'AG': I18N.get('country.AG'),
        'AN': I18N.get('country.AN'),
        'SA': I18N.get('country.SA'),
        'DZ': I18N.get('country.DZ'),
        'AR': I18N.get('country.AR'),
        'AM': I18N.get('country.AM'),
        'AW': I18N.get('country.AW'),
        'AU': I18N.get('country.AU'),
        'AT': I18N.get('country.AT'),
        'AZ': I18N.get('country.AZ'),
        'BS': I18N.get('country.BS'),
        'BH': I18N.get('country.BH'),
        'BD': I18N.get('country.BD'),
        'BB': I18N.get('country.BB'),
        'BE': I18N.get('country.BE'),
        'BZ': I18N.get('country.BZ'),
        'BJ': I18N.get('country.BJ'),
        'BM': I18N.get('country.BM'),
        'BT': I18N.get('country.BT'),
        'BY': I18N.get('country.BY'),
        'MM': I18N.get('country.MM'),
        'BO': I18N.get('country.BO'),
        'BA': I18N.get('country.BA'),
        'BW': I18N.get('country.BW'),
        'BR': I18N.get('country.BR'),
        'BN': I18N.get('country.BN'),
        'BG': I18N.get('country.BG'),
        'BF': I18N.get('country.BF'),
        'BI': I18N.get('country.BI'),
        'CV': I18N.get('country.CV'),
        'KH': I18N.get('country.KH'),
        'CM': I18N.get('country.CM'),
        'CA': I18N.get('country.CA'),
        'TD1': I18N.get('country.TD1'),
        'CL': I18N.get('country.CL'),
        'CN': I18N.get('country.CN'),
        'CY': I18N.get('country.CY'),
        'VA': I18N.get('country.VA'),
        'CO': I18N.get('country.CO'),
        'KM': I18N.get('country.KM'),
        'CG': I18N.get('country.CG'),
        'KR': I18N.get('country.KR'),
        'KP': I18N.get('country.KP'),
        'CI': I18N.get('country.CI'),
        'CR': I18N.get('country.CR'),
        'HR': I18N.get('country.HR'),
        'CU': I18N.get('country.CU'),
        'DK': I18N.get('country.DK'),
        'DJ': I18N.get('country.DJ'),
        'DM': I18N.get('country.DM'),
        'EC': I18N.get('country.EC'),
        'EG': I18N.get('country.EG'),
        'SV': I18N.get('country.SV'),
        'AE': I18N.get('country.AE'),
        'ER': I18N.get('country.ER'),
        'SK': I18N.get('country.SK'),
        'SI': I18N.get('country.SI'),
        'ES': I18N.get('country.ES'),
        'US': I18N.get('country.US'),
        'EE': I18N.get('country.EE'),
        'ET': I18N.get('country.ET'),
        'MK': I18N.get('country.MK'),
        'PH': I18N.get('country.PH'),
        'FI': I18N.get('country.FI'),
        'FR': I18N.get('country.FR'),
        'GA': I18N.get('country.GA'),
        'GM': I18N.get('country.GM'),
        'GE': I18N.get('country.GE'),
        'GS': I18N.get('country.GS'),
        'GH': I18N.get('country.GH'),
        'GI': I18N.get('country.GI'),
        'GD': I18N.get('country.GD'),
        'GR': I18N.get('country.GR'),
        'GL': I18N.get('country.GL'),
        'GP': I18N.get('country.GP'),
        'GU': I18N.get('country.GU'),
        'GT': I18N.get('country.GT'),
        'GY': I18N.get('country.GY'),
        'GF': I18N.get('country.GF'),
        'GN': I18N.get('country.GN'),
        'GQ': I18N.get('country.GQ'),
        'GW': I18N.get('country.GW'),
        'HT': I18N.get('country.HT'),
        'NL': I18N.get('country.NL'),
        'HN': I18N.get('country.HN'),
        'HK': I18N.get('country.HK'),
        'HU': I18N.get('country.HU'),
        'IN': I18N.get('country.IN'),
        'ID': I18N.get('country.ID'),
        'IQ': I18N.get('country.IQ'),
        'IR': I18N.get('country.IR'),
        'IE': I18N.get('country.IE'),
        'BV': I18N.get('country.BV'),
        'CX': I18N.get('country.CX'),
        'HM': I18N.get('country.HM'),
        'IS': I18N.get('country.IS'),
        'KY': I18N.get('country.KY'),
        'CK': I18N.get('country.CK'),
        'CC': I18N.get('country.CC'),
        'FO': I18N.get('country.FO'),
        'FJ': I18N.get('country.FJ'),
        'FK': I18N.get('country.FK'),
        'MP': I18N.get('country.MP'),
        'MH': I18N.get('country.MH'),
        'UM': I18N.get('country.UM'),
        'PW': I18N.get('country.PW'),
        'SB': I18N.get('country.SB'),
        'TK': I18N.get('country.TK'),
        'TC': I18N.get('country.TC'),
        'VI': I18N.get('country.VI'),
        'VG': I18N.get('country.VG'),
        'IL': I18N.get('country.IL'),
        'IT': I18N.get('country.IT'),
        'JM': I18N.get('country.JM'),
        'JP': I18N.get('country.JP'),
        'JO': I18N.get('country.JO'),
        'KZ': I18N.get('country.KZ'),
        'KE': I18N.get('country.KE'),
        'KG': I18N.get('country.KG'),
        'KI': I18N.get('country.KI'),
        'KW': I18N.get('country.KW'),
        'LA': I18N.get('country.LA'),
        'LS': I18N.get('country.LS'),
        'LV': I18N.get('country.LV'),
        'LB': I18N.get('country.LB'),
        'LR': I18N.get('country.LR'),
        'LY': I18N.get('country.LY'),
        'LI': I18N.get('country.LI'),
        'LT': I18N.get('country.LT'),
        'LU': I18N.get('country.LU'),
        'MO': I18N.get('country.MO'),
        'MG': I18N.get('country.MG'),
        'MY': I18N.get('country.MY'),
        'MW': I18N.get('country.MW'),
        'MV': I18N.get('country.MV'),
        'ML': I18N.get('country.ML'),
        'MT': I18N.get('country.MT'),
        'MA': I18N.get('country.MA'),
        'MQ': I18N.get('country.MQ'),
        'MU': I18N.get('country.MU'),
        'MR': I18N.get('country.MR'),
        'YT': I18N.get('country.YT'),
        'MX': I18N.get('country.MX'),
        'FM': I18N.get('country.FM'),
        'MD': I18N.get('country.MD'),
        'MC': I18N.get('country.MC'),
        'MN': I18N.get('country.MN'),
        'MS': I18N.get('country.MS'),
        'MZ': I18N.get('country.MZ'),
        'NA': I18N.get('country.NA'),
        'NR': I18N.get('country.NR'),
        'NP': I18N.get('country.NP'),
        'NI': I18N.get('country.NI'),
        'NE': I18N.get('country.NE'),
        'NG': I18N.get('country.NG'),
        'NU': I18N.get('country.NU'),
        'NF': I18N.get('country.NF'),
        'NO': I18N.get('country.NO'),
        'NC': I18N.get('country.NC'),
        'NZ': I18N.get('country.NZ'),
        'OM': I18N.get('country.OM'),
        'PA': I18N.get('country.PA'),
        'PG': I18N.get('country.PG'),
        'PK': I18N.get('country.PK'),
        'PY': I18N.get('country.PY'),
        'PE': I18N.get('country.PE'),
        'PN': I18N.get('country.PN'),
        'PF': I18N.get('country.PF'),
        'PL': I18N.get('country.PL'),
        'PT': I18N.get('country.PT'),
        'PR': I18N.get('country.PR'),
        'QA': I18N.get('country.QA'),
        'UK': I18N.get('country.UK'),
        'CF': I18N.get('country.CF'),
        'CZ': I18N.get('country.CZ'),
        'ZA': I18N.get('country.ZA'),
        'CD': I18N.get('country.CD'),
        'DO': I18N.get('country.DO'),
        'RE': I18N.get('country.RE'),
        'RW': I18N.get('country.RW'),
        'RO': I18N.get('country.RO'),
        'RU': I18N.get('country.RU'),
        'WS': I18N.get('country.WS'),
        'AS': I18N.get('country.AS'),
        'KN': I18N.get('country.KN'),
        'SM': I18N.get('country.SM'),
        'PM': I18N.get('country.PM'),
        'VC': I18N.get('country.VC'),
        'SH': I18N.get('country.SH'),
        'LC': I18N.get('country.LC'),
        'ST': I18N.get('country.ST'),
        'SN': I18N.get('country.SN'),
        'YU': I18N.get('country.YU'),
        'SC': I18N.get('country.SC'),
        'SL': I18N.get('country.SL'),
        'SG': I18N.get('country.SG'),
        'SY': I18N.get('country.SY'),
        'SO': I18N.get('country.SO'),
        'LK': I18N.get('country.LK'),
        'SZ': I18N.get('country.SZ'),
        'SD': I18N.get('country.SD'),
        'SE': I18N.get('country.SE'),
        'CH': I18N.get('country.CH'),
        'SR': I18N.get('country.SR'),
        'SJ': I18N.get('country.SJ'),
        'TH': I18N.get('country.TH'),
        'TW': I18N.get('country.TW'),
        'TZ': I18N.get('country.TZ'),
        'TJ': I18N.get('country.TJ'),
        'IO': I18N.get('country.IO'),
        'TF': I18N.get('country.TF'),
        'TP': I18N.get('country.TP'),
        'TG': I18N.get('country.TG'),
        'TO': I18N.get('country.TO'),
        'TT': I18N.get('country.TT'),
        'TN': I18N.get('country.TN'),
        'TM1': I18N.get('country.TM1'),
        'TR': I18N.get('country.TR'),
        'TV': I18N.get('country.TV'),
        'UA': I18N.get('country.UA'),
        'UG': I18N.get('country.UG'),
        'UY': I18N.get('country.UY'),
        'UZ': I18N.get('country.UZ'),
        'VU': I18N.get('country.VU'),
        'VE': I18N.get('country.VE'),
        'VN': I18N.get('country.VN'),
        'WF': I18N.get('country.WF'),
        'YE': I18N.get('country.YE'),
        'ZM': I18N.get('country.ZM'),
        'ZW': I18N.get('country.ZW')};
        