function is_string(s)
{
	return(/^\S+$/.test(s));
}

function is_ssid(s)
{
	return(/^[A-Za-z0-9][A-Za-z0-9_\-]*$/.test(s));
}

function is_digits(s)
{
	return(/^\d+$/.test(s));
}

function is_integer(s)
{
	return(/^[\+\-]?\d+$/.test(s));
}

function is_float(s)
{
	return(/^[\+\-]?[\d\.]+$/.test(s));
}

function is_keypad(s)
{
	return(/^[0-9#\*]+$/.test(s));
}

function is_keypad_ch(s)
{
	return(/^[#\*]+$/.test(s));
}

function is_phone(s)
{
	return(/^\d+[\d\*#\-\s]*\d+$/.test(s));
}

function is_digitmap(s)
{
	return(/^[0-9XT#\*\.\-\[\]]+$/.test(s));
}

function is_port(s)
{
	return(/^(\d+)$/.test(s) && 
		RegExp.$1>=1 && RegExp.$1<=65535);
}

function is_portrange(s)
{
	return(/^(\d+)\-(\d+)$/.test(s) &&
		RegExp.$2 > RegExp.$1 &&
		RegExp.$1>=1 && RegExp.$1<=65535 &&
		RegExp.$2>=1 && RegExp.$2<=65535);
}

function is_port_or_portrange(s)
{
	return(is_port(s)||is_portrange(s));
}

function is_portrange_mapable(s1, s2)
{
	var range1, range2;

	if (is_port(s1) && is_port(s2))
		return true;

	if (!is_portrange(s1))
		return false;		
	range1=RegExp.$2-RegExp.$1;

	if (!is_portrange(s2))
		return false;		
	range2=RegExp.$2-RegExp.$1;

	return(range1==range2);
}

function is_ip(s)
{
	return(/^(\d+)\.(\d+)\.(\d+)\.(\d+)$/.test(s) &&
		RegExp.$1<224 && RegExp.$1>=0 &&
		RegExp.$2<=255 && RegExp.$2>=0 &&
		RegExp.$3<=255 && RegExp.$3>=0 &&
		RegExp.$4<=255 && RegExp.$4>=0);
}
		
function is_iprange(s)
{
	return(/^(\d+)\.(\d+)\.(\d+)\.(\d+)-(\d+)\.(\d+)\.(\d+)\.(\d+)$/.test(s) &&
		RegExp.$1<224 && RegExp.$1>=0 &&
		RegExp.$2<=255 && RegExp.$2>=0 &&
		RegExp.$3<=255 && RegExp.$3>=0 &&
		RegExp.$4<=255 && RegExp.$4>=0 &&
		RegExp.$5<224 && RegExp.$5>=0 &&
		RegExp.$6<=255 && RegExp.$6>=0 &&
		RegExp.$7<=255 && RegExp.$7>=0 &&
		RegExp.$8<=255 && RegExp.$8>=0
	);
}
		
function is_hostname(s)
{
	if(/(\d+)\.(\d+)\.(\d+)/.test(s) && !is_ip(s))	// wrong ip string?
		return(false);
	return (/^([\d\w]+[\-\.])*[\d\w]+$/.test(s));
}

function is_mac(s)
{
	return(/^[\dA-Fa-f][\dA-Fa-f]:[\dA-Fa-f][\dA-Fa-f]:[\dA-Fa-f][\dA-Fa-f]:[\dA-Fa-f][\dA-Fa-f]:[\dA-Fa-f][\dA-Fa-f]:[\dA-Fa-f][\dA-Fa-f]$/.test(s));
}


function is_srtp_key(s)
{
	if (s.length!=60 || !/^[\dA-Fa-f]+$/.test(s))
		return(false);
	return(true);
}


function is_same_subnet(ip1str, ip2str, maskstr)
{
	var mask, ip1, ip2;
	var m, i;

	ip1=ip1str.split(".");
	ip2=ip2str.split(".");
	mask=maskstr.split(".");

	for (i=0; i<4; i++) {
		m=parseInt(mask[i]);
		if ((parseInt(ip1[i])&m)!=(parseInt(ip2[i])&m))
			return(false);
	}
	return(true);
}

function subnet_start(ipstr, maskstr)
{
	var mask, ip, start;
	var m, i;

	ip=ipstr.split(".");
	mask=maskstr.split(".");

	start="";
	for (i=0; i<4; i++) {
		m= parseInt(ip[i]) & parseInt(mask[i]);
		start=start+m.toString();
		if (i<3) start=start+".";
	}
	return(start);
}

function subnet_end(ipstr, maskstr)
{
	var mask, ip, end;
	var m, i;

	ip=ipstr.split(".");
	mask=maskstr.split(".");

	end="";
	for (i=0; i<4; i++) {
		m= parseInt(ip[i]) | (parseInt(mask[i])^255);
		end=end+m.toString();
		if (i<3) end=end+"."
	}
	return(end);
}

function is_network(ipstr, maskstr)
{
	var mask, ip;
	var m, i;

	ip=ipstr.split(".");
	mask=maskstr.split(".");

	for (i=0; i<4; i++) {
		if ( (parseInt(ip[i]) & (parseInt(mask[i])^255)) !=0)
			return false;
	}
	return(true);
}


function is_ip_ge(ip1str, ip2str)
{
	var ip1, ip2;
	var i;

	ip1=ip1str.split(".");
	ip2=ip2str.split(".");
	for (i=0; i<4; i++)
		if ( parseInt(ip1[i]) < parseInt(ip2[i]) )
			return(false);
	return(true);
}
function is_ip_gt(ip1str, ip2str)
{
	return(is_ip_ge(ip1str, ip2str) && ip1str!=ip2str);
}
function is_ip_lt(ip1str, ip2str)
{
	return(!is_ip_ge(ip1str, ip2str));
}
function is_ip_le(ip1str, ip2str)
{
	return(!is_ip_gt(ip1str, ip2str));
}


// must contain at least digits, letters, and is longer than 6 chars
function is_secure_password(s)
{
	return(/\d/.test(s) && /[A-Za-z]/.test(s) && s.length>=6 );
}


function valid(s, func, errmsg)
{
	if (func(s))
		return(true);
	alert(errmsg);
	return(false);
}

function valid_or_null(s, func, errmsg)
{
	if (func(s) || s=="")
		return(true);
	alert(errmsg);
	return(false);
}


function value_between(v, min, max, errmsg)
{
	if (/^[\+\-]?\d+\.?\d*$/.test(v) && v>=min && v<=max)
		return(true);
	alert(errmsg);
	return(false);
}

function integer_between(v, min, max, errmsg)
{
	if (/^[\+\-]?\d+$/.test(v) && v>=min && v<=max)
		return(true);
	alert(errmsg);
	return(false);
}

function string_equal(s1, s2, errmsg)
{
	if (s1==s2)
		return(true);
	alert(errmsg);
	return(false);
}

function string_differ(s1, s2, errmsg)
{
	if (s1!=s2)
		return(true);
	alert(errmsg);
	return(false);
}

