addContactGroup = function (str) 
{
	if (null != (name = prompt(str,'')))
	{
		if (name.length > 0) 
		{
			f = GF.DOM.get('newgroup');
			f.elements['cg_name'].value = name;
			f.submit();
		}
	}
	return(false);
}

selectBoxSwap = function (from, to, name) 
{
	for (var i=0; i < from.options.length; i++) 
	{
		if (from.options[i].selected)
		{
			from.options[i].ondblclick = (from.id == name+"_allgroups") ? function() {eval("selectBoxRemove('"+name+"')");} : function() {eval("selectBoxAdd('"+name+"')");};
			to.appendChild(from.options[i]);
			i--;
		}
	}
}
                                                        
selectBoxAdd = function (name) 
{
	selectBoxSwap(GF.DOM.get(name+'_allgroups'), GF.DOM.get(name+'_subgroups'),name);
}

selectBoxAddValue = function (val, to, name) 
{
	var temp = new Array();
	if (val.value) 
	{
		temp = val.value.split(',');
		emailStr = val.value;
	}else
		emailStr = val;
	

	if (temp.length > 1)
	{
		tmplen = to.options.length;
		for (i=0;i<temp.length;i++)
		{
			selectBoxAddValue(temp[i].trim(),to,name);
		}

		if (tmplen < to.options.length)
			val.value = '';
		else
			GF.classmgr.attach(GF.DOM.get('sendmessage_label_add'), 'highlight');
			
	}else
	{
		if (emailCheck(emailStr))
		{
			var newaddress = new Option(emailStr,'a'+emailStr,0,0);
			newaddress.ondblclick = function () {eval("selectBoxRemove('"+name+"')");};
			to.options[to.options.length] = newaddress;
			GF.classmgr.remove(GF.DOM.get('sendmessage_label_add'), 'highlight');
		
		}else if (val.value)
		{
			GF.classmgr.attach(GF.DOM.get('sendmessage_label_add'), 'highlight');
		}

		// clear
		if (val.value) val.value = '';
	}
	return(true);
}

                                                        
selectBoxRemove = function (name) 
{
	selectBoxSwap(GF.DOM.get(name+'_subgroups'), GF.DOM.get(name+'_allgroups'),name);
}


groupValidate = function (f) 
{
	count = 0;
	ok = true;

	if (GF.DOM.get('sendmessage_subgroups').options.length == 0)
	{
		GF.classmgr.attach(GF.DOM.get('sendmessage_label_subgroups'), 'highlight');
		ok = false;		
	}else
	{
		GF.classmgr.remove(GF.DOM.get('sendmessage_label_subgroups'), 'highlight');
		group_manage_save(f,'sendmessage');
	}

	if (!GF.DOM.get('sendmessage_subject').value)
	{
		GF.classmgr.attach(GF.DOM.get('sendmessage_label_subject'), 'highlight');
		ok = false;
	} else 
		GF.classmgr.remove(GF.DOM.get('sendmessage_label_subject'), 'highlight');

	if (!GF.DOM.get('sendmessage_text').value) 
	{
		GF.classmgr.attach(GF.DOM.get('sendmessage_label_text'), 'highlight');
		ok = false;
	} else 
		GF.classmgr.remove(GF.DOM.get('sendmessage_label_text'), 'highlight');

	return ok;
}

function group_manage_save(fobj,name)
{
	obj = fobj.elements[name+'subgroups[]'];
	for (i=0;i<obj.options.length;i++)
		obj.options[i].selected = 1;
	return(true);
	
}


function emailCheck (emailStr) 
{
	var namemailPat=/^(.+)<(.+)>$/
	var emailPat=/^(.+)@(.+)$/
	var specialChars="\\(\\)<>@,;:\\\\\\\"\\.\\[\\]"
	var validChars="\[^\\s" + specialChars + "\]"
	var quotedUser="(\"[^\"]*\")"
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/
	var atom=validChars + '+'
	var word="(" + atom + "|" + quotedUser + ")"
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$")
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$")

	var tmp = emailStr.match(namemailPat)
	if (tmp != null)
		emailStr = tmp[2];

	var matchArray=emailStr.match(emailPat)
	if (matchArray==null || matchArray.length < 2) 
	{
		return(false);
	}
	var user=matchArray[1]
	var domain=matchArray[2]

	if (user.match(userPat)==null) 
	{
	    return(false);
	}

	var IPArray=domain.match(ipDomainPat)
	if (IPArray!=null) 
	{
		for (var i=1;i<=4;i++) 
		{
			if (IPArray[i]>255) 
			{
				return(false);
			}
    		}
		return(true);
	}

	var domainArray=domain.match(domainPat)
	if (domainArray==null) 
	{
		return(false);
	}

	var atomPat=new RegExp(atom,"g")
	var domArr=domain.match(atomPat)
	var len=domArr.length
	if (domArr[domArr.length-1].length<2 || domArr[domArr.length-1].length>3) 
	{
		return(false);
	}

	if (len<2) 
	{
		alert(errStr)
		return(false)
	}
	return(true);
}
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/g, ""); };
