function ktkCheckRUT(id) {
	var codeObj = ktkObj(ktkExtendName(id, 'code'));
	var verifObj = ktkObj(ktkExtendName(id, 'verif'));
	var codeVal;
	
	if(APP == "ecosa") {
		codeVal = codeObj.value = ktkPadLeft(codeObj.value, 8, "0"); // Agregar 0 a la izq y sin puntos.
	} else {
		codeVal = codeObj.value;
		codeVal = ktkNumber_ParseFormatedString(codeObj.value);
	}

	if(verifObj.value) {
		// RUT completo
		if(!checkRut(codeVal, verifObj.value)) {
			alert("RUT incorrecto");
			verifObj.value = "";
			ktkFocus(codeObj.id);
		}
		
		var dataObj = ktkObj(id);
		
		if("" + codeVal != "") {
			ktkSetObjectValue(dataObj, codeVal + '-' + verifObj.value);
		} else {
			ktkSetObjectValue(dataObj, '');
		}
		
	} else if("" + codeVal == "") {
		// RUT en blanco
		var dataObj = ktkObj(id);
		ktkSetObjectValue(dataObj.value, "");
	}
	
	if(APP != "ecosa") {
		codeObj.value = ktkFormatNumber(codeVal, 0);
	}
}

function ktkFormatNumber(val, decimals, force) {
	if("" + val == "") return "";
	if(!decimals && decimals != 0) decimals = 2;
	
	// Redondear antes de truncar
	val = float(val, decimals);

	var prefix = "";
	if(val < 0) {
		val = -val;
		prefix = "-";
	}
	val = val + "";
	var i = (val + ".").indexOf(".");
	var intStr = val.substr(0, i);
	var decStr = val.substr(i + 1).substr(0, decimals);
	if(force) decStr = ktkPadRight(decStr, decimals, "0");
	
	var str = "";
	for(i = intStr.length - 3;;) {
		if(i <= 0) {
			str = intStr.substr(0, 3 + i) + str;
			break;
		} else {
			str = "." + intStr.substr(i, 3) + str;
		}
		i -= 3;
	}
	if(decStr) str += "," + decStr;
	return prefix + str;
}

function ktkNumber_ParseString(str) {
	str = str.replace(/,/g, '.');
	if(str != "") {
		str = parseFloat(str);
	}
	return str;
}

function ktkNumber_ParseFormatedString(str) {
	str = str.replace(/(,|\.)/g, '');
	if(str != "") {
		str = parseFloat(str);
	}
	return str;
}

function ktkInput_RUT_Focus(id) {
	var codeObj = ktkObj(ktkExtendName(id, 'code'));
	codeObj.value = ktkNumber_ParseFormatedString(codeObj.value);
}

function ktkInput_RUT_Blur(id) {
	var codeObj = ktkObj(ktkExtendName(id, 'code'));
	if(APP != "ecosa") {
		codeObj.value = ktkFormatNumber(codeObj.value, 0);
	}
}

function ktkNumberBox_Focus(id) {
	var captionObj = ktkObj(ktkExtendName(id, 'ktkField'));
	var obj = ktkObj(id);
	captionObj.value = ktkNumberBox_ApplyPrecision(obj, obj.value);
	ktkFocus(captionObj.id, true);
}

function ktkNumberBox_GetPrecision(obj) {
	var p = obj.getAttribute("precision");
	return p ? p : KTK_DEFAULT_DECIMALS; // Default precision
}

function ktkNumberBox_ApplyPrecision(obj, str) {
	if("" + str == "") {
		val = "";
	} else {
		val = float(str, ktkNumberBox_GetPrecision(obj));
	}
	return val;
}

// caption -> data
function ktkNumberBox_Write(id) {
	// ktkDebug("NumberBox Write: " + id);
	var obj = ktkObj(id);
	var captionObj = ktkObj(ktkExtendName(id, 'ktkField'));
	var val = ktkNumberBox_ApplyPrecision(obj, ktkNumber_ParseString(captionObj.value));
	return ktkSetObjectValue(obj, val, true);
}

// data -> caption (se invocó del objeto hidden)
function ktkNumberBox_Read(id) {
	// ktkDebugLog("NumberBox Read: " + id);
	
	var obj = ktkObj(id);
	if(!obj) return; // La fila se eliminó antes de procesarse el evento.
	
	var captionObj = ktkObj(ktkExtendName(id, 'ktkField'));
	var str;
	
	if(obj.value == "Infinity") {
		obj.value = "";
	}

	str = ktkFormatNumber(obj.value, ktkNumberBox_GetPrecision(obj));

	captionObj.value = str;
}

function ktkJumpNext(obj, size, steps) {
	alert("ok");
	if(!steps) steps = 1;
	if(obj.value.length >= size && event.keyCode != 9 && event.keyCode != 16 && !window.KTK_JUMPED) {
		KTK_JUMPED = true;
		for(var i = 0; i < steps; i++) {
			obj = ktkFocusNext(obj);
		}
	} else {
		KTK_JUMPED = false;
	}
}

function ktkCheckPercent(id) {
	var obj = ktkObj(id);
	var str = obj.value.replace(',', '.');
	if(str == '') return;
	
	var val = float(str);
	var msg = false;
	
	if(val < 0) {
		msg = true;
		val = 0;
	} else if(val > 100) {
		msg = true;
		val = 100;
		
	} else if(isNaN(val)) {
		alert("El porcentaje ingresado no es válido");
		val = '';
	}
	
	if(msg) {
		alert("Sólo se aceptan valores entre 0% y 100%");
	}
	
	obj.value = val;
}

function ktkInput_IsControlKey(code) {
	return (code == 13 || code == 9 || code == 27
			|| code == 0 || code == 8); // MOZ
}

function ktkInput_FilterNumbers(evt) {
	var code = ktkPressedKeyCode(evt);
	if(ktkInput_IsControlKey(code)) return true;
	return (code >= 48 && code <= 57);
}

function ktkInput_FilterNumbersAndDots(evt) {
	var code = ktkPressedKeyCode(evt);
	if(ktkInput_IsControlKey(code)) return true;
	if((code >= 48 && code <= 57) || code == 46 || code == 44 || code == 45) {
		return true;
	} else {
		alert("Sólo se aceptan valores numéricos");
		return false;
	}
}

function ktkInput_FilterCodVerif(evt) {
	var code = ktkPressedKeyCode(evt);
	if(ktkInput_IsControlKey(code)) return true;
	if(code == 107) code = evt.keyCode = 75;
	return (code >= 48 && code <= 57) || code == 75;
}

function checkRut(rut, dv) { 
	var count = 0; 
	var count2 = 0; 
	var factor = 2; 
	var suma = 0; 
	var sum = 0; 
	var digito = 0; 
	
	rut = "" + rut;
	count2 = rut.length - 1; 
	
	while(count < rut.length) { 	
		sum = factor * (parseInt(rut.substr(count2,1))); 
		suma += sum; 
		sum = 0; 
		
		count++; 
		count2--; 
		factor++; 
	
		if(factor > 7) { 
			factor = 2; 
		} 
	} 
		
	digito = 11 - (suma % 11);
	
	if(digito == 11) { 
		digito = 0; 
	} 
	
	if(digito == 10) { 
		digito = "K"; 
	} 
	
	return digito == dv;
} 

function ktkComposeField(formIndex, dstField, srcFields) {
	var f = getForm(formIndex);
	
	for(var i in srcFields) {
		// Verificar si existen
		if(!f.getObject(srcFields[i], true)) return;
	}
	
	var str = "";
	for(var i in srcFields) {
		if(str) {
			str += '-';
		}
		str += f.getValue(srcFields[i]);
	}
	
	f.setValue(dstField, str);
}

function ECOSA_ProductRequest(name) {
	var obj = ktkObj(name);
	provName = ktkExtendName(name, 'prov');
	famName = ktkExtendName(name, 'fam');
	prodName = ktkExtendName(name, 'prod');
	val = ktkObj(provName).value + "-" + ktkObj(famName).value + "-" + ktkObj(prodName).value;
	obj.ktkIgnoreOnChange = true;
	ktkSetObjectValue(obj, val, true);
	obj.ktkIgnoreOnChange = false;
}

// Se ejecuta tras seleccionar un producto y recibir la respuesta del RPC (onChange en campo hidden)
function ECOSA_ProductResponse(name) {
	var obj = ktkObj(name);
	if(!obj.ktkIgnoreOnChange) {
		val = obj.value;
		provId = ktkExtendName(name, 'prov');
		famId = ktkExtendName(name, 'fam');
		prodId = ktkExtendName(name, 'prod');
		prodNameId = ktkExtendName(name, 'prodName');
		
		var prodName = "", prov = "", fam = "", prod = "";
		pos = val.indexOf(":");
		if(pos != -1) {
			prodName = val.substr(pos + 2);
			var t = val.substr(0, pos).split("-");
			prov = t[0];
			fam = t[1];
			prod = t[2];
		}

		if(obj.parentNode.all) {
			var sieblings = obj.parentNode.all;
			ktkSetObjectValue(sieblings[prodNameId], prodName);
			sieblings[provId].value = prov;
			sieblings[famId].value = fam;
			sieblings[prodId].value = prod;
		} else {
			ktkSetObjectValue(ktkObj(prodNameId), prodName);
			ktkObj(provId).value = prov;
			ktkObj(famId).value = fam;
			ktkObj(prodId).value = prod;
		}
	}
}

function ktkResizeField(obj, incBySteps) {
	var size = obj.getAttribute("ktkSize");
	if(size) return;

	var l = obj.value.length;
	if(l < 3) l = 3;
	
	var incr = 10;
	if(incBySteps) {
		l += incr;
		l = l - l % incr;
	}
	
	if(!window.KTK_MAX_FIELD_SIZE) KTK_MAX_FIELD_SIZE = 40;
	if (l > KTK_MAX_FIELD_SIZE) l = KTK_MAX_FIELD_SIZE - incr;
	
	obj.size = l;

	// TODO: OPT: Hacer sólo si cambió el tamaño
	ktkWindowResized();
}

function ktkFocusChanged() {
	window.KTK_FOCUS_CHANGED = true;
}

function ktkEnableOption(comboObj, opt, value) {
	var optObj = ktkGetOptionObject(comboObj, opt);
	if(optObj) {
		if(optObj.selected && !value) comboObj.selectedIndex = null;
		ktkInitCombo(comboObj);
		ktkInitOption(optObj);
		optObj.disabled = !value;
	}
}

// ComboBoxOption Disable Fix

function ktkInitCombo(obj) {
	if(!obj.ktkComboInitialized) {
		obj.ktkComboInitialized = true;

		ktkAddEvent(obj, "change", onChangeSelect);
		ktkAddEvent(obj, "propertychange", onPropertyChangeSelect);
		
		obj.ktkLastSelectedIndex = obj.selectedIndex;
		ktkInitComboOnChange(obj);
	}
}

function ktkInitOption(optObj) {
	if(!optObj.ktkComboInitialized) {
		optObj.ktkComboInitialized = true;
		ktkAddEvent(optObj, "propertychange", onPropertyChangeOption);
		ktkSetOptionStyle(optObj);
	}
}

function ktkInitComboOnChange(obj) {
	obj.detachEvent("propertychange", onPropertyChangeSelect);
	obj.ktkOriginalOnChange = obj.onchange;
	obj.onchange = null;
	ktkAddEvent(obj, "propertychange", onPropertyChangeSelect);
}

function onChangeSelect(e) {
	var comboObj = ktkGetTarget(e);
	if (comboObj.options[comboObj.selectedIndex].disabled) {
		comboObj.selectedIndex = comboObj.ktkLastSelectedIndex;
	} else {
		comboObj.ktkLastSelectedIndex = comboObj.selectedIndex;
		if (comboObj.ktkOriginalOnChange != undefined) {
			comboObj.ktkOriginalOnChange();
		}
	}
}

function onPropertyChangeSelect(e) {
	var comboObj = ktkGetTarget(e);
	var sChangedPropertyName = event.propertyName.toLowerCase();
	if (sChangedPropertyName == "onchange") {
		ktkInitComboOnChange(comboObj);
	} else if (sChangedPropertyName == "selectedindex") {
		comboObj.ktkLastSelectedIndex = comboObj.selectedIndex;
	}
}

function onPropertyChangeOption(e) {
	var optObj = ktkGetTarget(e);
	var sChangedPropertyName = event.propertyName.toLowerCase();
	if (sChangedPropertyName == "disabled") {
		ktkSetOptionStyle(optObj);
	}
}

function ktkSetOptionStyle(optObj) {
	if (optObj.disabled) {
		optObj.style.color = "graytext";
	} else {
		optObj.style.color = "menutext";
	}
}

function ktkChangedSelectorValue(obj) {
	// obj es el ktkField de un selector
	var editButtonName = ktkExtendName(obj.id, "editButton");
	
	var buttonObj = obj.parentNode.all ? obj.parentNode.all[editButtonName] : ktkObj(editButtonName);
	if(!buttonObj) {
		// En Transtecnia > Atención Telefónica (batchSelector) se pasa obj.id = "ktkId" en vez de "ktkId_ktkField"
		editButtonName = ktkExtendName(obj.id, "ktkField_editButton");
		buttonObj = obj.parentNode.all ? obj.parentNode.all[editButtonName] : ktkObj(editButtonName);
	}
	
	if(buttonObj) {
		// buttonObj.style.setAttribute("visibility", obj.value ? "visible" : "hidden");
		ktkCompatSetStyle(buttonObj, "visibility", obj.value ? "visible" : "hidden");
		ktkCompatSetStyle(buttonObj, "display", obj.value ? "" : "none"); // Se usa?
	}
}

function ktkChangedFile(name, obj) {
	var nameBox = ktkObj(ktkExtendName(name, "name"));
	ktkObj(name).value = "n";
	ktkSetObjectValue(nameBox, ktkBaseName(obj.value));
}

function ktkInitInputObject(obj) {
	var tmp;
	if(!obj.ktkInputInitialized) {
		obj.ktkInputInitialized = true;

		/*
		CHANGED: Se hace en ktkInitEventHandler()
		if(MOZ) {
			if(obj.onblur) {
				// Asegurar que se haga onChange antes de onBlur
				obj._ktkOnBlur = obj.onblur
				obj.onblur = new Function("ktkMOZDelayBlur('" + obj.id + "')");
			}
		}
		*/

	   obj.ktkOriginalBgColor = obj.style.backgroundColor;

		// OBS: IE7 requiere "focusin" para comboboxes (sino se renderean incorrectamente)
		ktkAddEvent(obj, (MSIE ? "focusin" : "focus"), ktkInputControl_OnFocus);
		ktkAddEvent(obj, "blur", ktkInputControl_OnBlur);

		if(window.KTK_UPPERCASE_ALL && (obj.type == "text" || obj.type == "textarea" || obj.type == "select-one") && !obj.getAttribute("ignoreUpperCase")) {
			ktkAddEvent(obj, "change", ktkInputControl_OnChange, true);
			ktkCompatSetStyle(obj, "textTransform", "uppercase");
		}

		if(tmp = obj.getAttribute("ktkSize")) {
			obj.size = tmp;

		} else if (MOZ && !obj.size || MSIE && obj.size == 20 && obj.outerHTML.indexOf("size=") == -1) {
			// size not set
			if(obj.type == "text") {
				obj.size = 5;
			}
		} else if (obj.type == "textarea" && obj.getAttribute("maxLength")) {
			ktkAddEvent(obj, "keyup", ktkTextArea_LimitSize);
		}

		if(obj.getAttribute("ktkFocus")) ktkFocus2(obj);
	}
}

function ktkTextArea_LimitSize(e) {
	var obj = ktkGetTarget(e);
	var len = obj.getAttribute("maxLength");
	if (obj.value.length > len) {
		alert("El largo máximo para éste campo es de " + len + " caracteres");
		obj.value = obj.value.substring(0, len);
	}
}

function ktkInputControl_OnFocus(e) {
	var obj = ktkGetTarget(e);
	KTK_FOCUSED_ELEMENT = obj;
	if(obj.className != "ktkDisabled") {
		obj.style.backgroundColor = "#F9FFCE";
	}
	obj.ktkOldValue = obj.value;
}

function ktkInputControl_OnBlur(e) {
	var obj = ktkGetTarget(e);
	obj.style.backgroundColor = obj.ktkOriginalBgColor;
}

function ktkInputControl_OnChange(e) {
	var obj = ktkGetTarget(e);
	if(obj) {
		if(window.KTK_UPPERCASE_ALL && (obj.type == "text" || obj.type == "textarea") && !obj.getAttribute("ignoreUpperCase")) {
			obj.value = obj.value.toUpperCase();
		}
	}
}

function Document_ReplaceEnterForTab(parentObj) {
	if(!parentObj) parentObj = document;

	function excludeObject(obj) {
		ktkAddEvent(obj, "focus", new Function("KTK_ENTER_AS_TAB = false"));
		ktkAddEvent(obj, "blur", new Function("KTK_ENTER_AS_TAB = true"));
	}
	
	// Excluir elementos

	var arr = parentObj.getElementsByTagName("INPUT");	
	var count = arr.length;
	for (var i = 0; i < count; i++) {
		var obj = arr[i];
		if(obj.type == 'submit' || obj.type == 'button' && !obj.getAttribute("ktkEnterAsTab")) {
			excludeObject(obj);
			/*
			if(!obj.getAttribute("ktkMultiButton")) {
				excludeObject(obj);
			}
			*/
		} else {
			ktkInitInputObject(obj);
		}
	}

	arr = parentObj.getElementsByTagName("TEXTAREA");
	var count = arr.length;
	for (var i = 0; i < count; i++) {
		var obj = arr[i];
		ktkInitInputObject(obj);
		excludeObject(obj);
	}

	arr = parentObj.getElementsByTagName("SELECT");
	var count = arr.length;
	for (var i = 0; i < count; i++) {
		var obj = arr[i];
		ktkInitInputObject(obj);
	}

	function ktkDocument_KeyDown(e) {
		e = ktkCompatGetEvent(e);
		if(!e) return;
		var k = ktkGetKeyCode(e);
		
		if(k == 9) {
			ktkSetFlag('focus_changed', 1);
		}

		if(KTK_ENTER_AS_TAB) {
			if (k == 13) {
				if(MSIE) {
					try {
						window.event.keyCode = 9;
						ktkSetFlag('focus_changed', 1);
					} catch(e) {};
				} else {
					ktkFocusNext(e.target);
					return false;
				}
			}
		}
		
		if(window.KTK_GLOBAL_KEY_EVENTS) {
			for(var i in KTK_GLOBAL_KEY_EVENTS) {
				var def = KTK_GLOBAL_KEY_EVENTS[i];
				if(k == def.key) {
					eval(def.func);
				}
			}
		}
	}
	
	KTK_ENTER_AS_TAB = true;

	document.body.onkeydown = ktkDocument_KeyDown;
	// if (netscape) document.captureEvents(Event.KEYDOWN|Event.KEYUP);
}

function ktkOpenUserURL(id, evt) {
	var url = ktkObj(id).value;
	if(url.indexOf("://") == -1) url = "http://" + url;
	ktkOpenLink(ktkCompatGetEvent(evt), url, 0, 0, 1);
}
