var advshow = false;

function optional(name) {
	var elem = document.getElementsByName(name);

	return (elem != null)? elem[0] : null;
}

function require(name) {
	return document.getElementsByName(name)[0];
}

function removeForward(i) {
	require('application_'+i).value = '';
	require('ip_'+i).value = '';
	require('manual_bw_'+i).checked = false;
	require('cir_'+i).value = '';
	require('mir_'+i).value = '';
	require('to_port_'+i).value = '0';
	require('from_port_'+i).value = '0';
	hideDiv('manual_bw_cir_'+i);
	hideDiv('manual_bw_mir_'+i)
}

function confirmRedirect(msg, url) {
	var confirms = confirm(msg);
	if(confirms) {
		location.replace(url);
	}
}

function hideDiv(divname) {
	changeDisplay(divname, 'none', 'DIV');
}

function showDiv(divname) {
	changeDisplay(divname, 'block', 'DIV');
}

function changeDisplay(divname, display, nodeName) {
	if(document.getElementById || document.all) { // DOM3 = IE5, NS6
		var div = document.getElementById(divname);
		if(div && (!nodeName || div.nodeName == nodeName)) {
			
			div.style.display = display;
		} else {
		 	var divs = document.getElementsByName(divname);
			for(var i = 0; i < divs.length ; i++) {
				if(!nodeName || divs[i].nodeName == nodeName)
					divs[i].style.display = display;
			}
		}
	} else {
		alert("Navegador no soportado");
	}
}

function showAtts(cbo, prefix) {
	if(cbo == null) {
		return;
	}
	for(i = 0; i < cbo.length;i++) {
		hideDiv(prefix + '-' + cbo.options[i].value);
	}
	var index = cbo.selectedIndex;
	if(index != -1) {
		showDiv(prefix + '-' + cbo.options[cbo.selectedIndex].value);
	}
}

function showProvider(cbo) {
	if(cbo == null) {
		return;
	}
	type = cbo.name.substring(0, cbo.name.indexOf('.'));
	for(i = 0; i < cbo.length;i++) {
		changeDisplay(type +'.provider_' + cbo.options[i].value, 'none', 'SELECT');
	}
	var index = cbo.selectedIndex;
	if(index != -1) {
		changeDisplay(type + '.provider_' +cbo.options[cbo.selectedIndex].value, 'block', 'SELECT');
	}
}

function showCheck(checkbox, divname) {
	if(checkbox.checked) {
		showDiv(divname);
	} else {
		hideDiv(divname);
	}
}

function showCheckAtts(checkbox) {
	if(checkbox == null) {
		return;
	}
	if(checkbox.checked) {
		showDiv(checkbox.name);
	} else {
		hideDiv(checkbox.name);
	}
}

function getLANPrefix(prefixName) {
	return require(prefixName + '1').value + '.' + require(prefixName + '2').value + '.';
}

function setLANPrefix(prefixName) {	
	var ip_prefix = getLANPrefix(prefixName);

	require('transparent-prefix').innerHTML = ip_prefix;
	require('dhcp-prefix-from').innerHTML = ip_prefix;
	require('dhcp-prefix-to').innerHTML = ip_prefix;
}

function getIPRange(netmask, baseip) {
	netmask4 = netmask.split('.')[3];
	net = baseip & ~(255 - netmask4);
	return [net + 1, net + (254 - netmask4) ];
}

function initSetup() {
	showAtts(require('tunasoho.wan-type'), 'wan');
	showAtts(optional('tunasoho.control-mode'), 'control');
	showAtts(optional('tunasoho.auth-method'), 'auth');
	showAtts(optional('tunasoho.acct-method'), 'acct');

	showProvider(require('wan-pppoa.country'));
	showProvider(require('wan-eoa-pppoe.country'));
	showProvider(require('wan-eoa-static.country'));
	showProvider(require('wan-ipoa.country'));

	showCheckAtts(require('lan.dhcpd-enable_check'));
	showCheckAtts(optional('syslog.enable_check'));

	setLANPrefix('lan.ip');
	advOptions();
}

function getkey(e){
	if(window.event)
		return window.event.keyCode;
	else if(e)
		return e.which;
	else
		return null;
}

function valIPoct(e,elmnt,content){
	var key, keychar, elname, namepref,next, nextname;
	
	elname=elmnt.name;
	namepref=elname.substring(0,elname.length -1);
	next=parseInt(elname.charAt(elname.length - 1)) + 1;
	nextname = new String(namepref + next);

	key = getkey(e);
	if(key == null) return false;

	// get character
	keychar = String.fromCharCode(key);
	keychar = keychar.toLowerCase();

	if(keychar=="."){
		if(valRange(elmnt,content,0,255)){
			if(next<5){
				document.getElementsByName(nextname)[0].focus();
				document.getElementsByName(nextname)[0].select();
			}
		}else{
			elmnt.value="";
		}
		return false;
	} else if((("0123456789").indexOf(keychar) > -1)){
		return true;
	} else if(key == 8) {
		return true;
	} else if(key==null || key==0 || key==9 || key==13 || key==27){
		if(valRange(elmnt,content,0,255)){
			return true;
		}
		elmnt.value="";
		return false;
	} else
		return false;
}

function valIntOrZero(e,elmnt,content,min,max,allowzero){
	var key, keychar, elname, namepref,next, nextname;
	
	elname=elmnt.name;
	namepref=elname.substring(0,elname.length -1);
	next=parseInt(elname.charAt(elname.length - 1)) + 1;
	nextname = new String(namepref + next);

	key = getkey(e);
	if(key == null) return false;

	// get character
	keychar = String.fromCharCode(key);
	keychar = keychar.toLowerCase();

	if((("0123456789").indexOf(keychar) > -1)){
		return true;
	} else if(key==8) {
		return true;
	} else if(key==null || key==0 || key==9 || key==13 || key==27){
		return valRangeOrZero(elmnt,content,min,max,allowzero);
	} else
		return false;
}

function valInt(e,elmnt,content,min,max,allowzero){
	return valIntOrZero(e,elmnt,content,min,max,false);
}

function valMACoct(e,elmnt,content){
	var key, keychar, elname, namepref,next, nextname;

	elname=elmnt.name;
	namepref=elname.substring(0,elname.length -1);
	next=parseInt(elname.charAt(elname.length - 1)) + 1;
	nextname = new String(namepref + next);

	key = getkey(e);
	if(key == null) return false;

	// get character
	keychar = String.fromCharCode(key);
	keychar = keychar.toLowerCase();

	if(keychar==":"){
		if(next<7){
			document.getElementsByName(nextname)[0].focus();
			document.getElementsByName(nextname)[0].select();
		}
		return false;
	}
	else if((("0123456789abcdef").indexOf(keychar) > -1)){
		return true;
	} else if(key==null || key==0 || key==8 || key==9 || key==13 || key==27){
		return true;
	} else
		return false;
}

function valRange(elem,value,min,max){
	if(min<=value && value<=max) {
		return true;
	} else {
		window.status="Debe ingresar un valor entre "+min+" y "+max;
		elem.focus();
		elem.select();
		return false;
	}
}

function valRangeOrZero(elem,value,min,max,allowzero){
	return(allowzero && value == 0) || valRange(elem,value,min,max);
}

function advOptions(){
	var advDiv = document.getElementById("advanced");

	if(advDiv == null) {
		return false;
	}
	if(advshow){
		advDiv.innerHTML = "Ocultar opciones avanzadas";
		advshow=false;
		showDiv("advoptions0");
		showDiv("advoptions1");
	} else{
		advDiv.innerHTML = "Mostrar opciones avanzadas";
		advshow=true;
		hideDiv("advoptions1");
		hideDiv("advoptions0");
	}
	return false;
}

function listMove(sName,dName) {
	var src = require(sName);
	var dst = require(dName);
	for(var i = 0; i < src.length; i++) {
		if(src.options[i].selected) {
			dst.options[dst.length] = new Option(src.options[i].text, src.options[i].value);
			src.options[i--] = null;
		}
	}
}

function listExport(selName,unselName,prefix) {
	var src = require(selName);
	for(var i = 0; i < src.length; i++) {
		var value = src.options[i].value;
		require(prefix + value).value = value;
	}
	src = require(unselName);
	for(var i = 0; i < src.length; i++) {
		var value = src.options[i].value;
		require(prefix + value).value = "";
	}
}

