/*****************************************************
 * Courtesy of Dreamweaver (http://www.macromedia.com)
 *
 *****************************************************/

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

/*****************************************************
 * Form Validation
 *****************************************************/

function formSetRequirements(lbl, obj, descr, req, check) {
	obj = MM_findObj(obj);

	// set properties
	if (obj) {
		obj.validateLabel = lbl;
		obj.validateReq = req;
		obj.validateCheck = check;
		obj.validateDescr = descr;
	}
}

function formCheck(f) {
	var noerrors = true;
	var first	 = false;
	var fields   = new Array();
	
	// Check for errors
	for (var i = 0; i < f.elements.length; i++) {
		if (f.elements[i].validateCheck || f.elements[i].validateReq) {
			err = formUpdate (obj = f.elements[i]);
			
			if (err) {
				if (first == false) first = i;
				
				fields.push(f.elements[i].validateDescr);
				noerrors = false;
			}
		}
	}
	
	if (!noerrors) {
		alert ('The following fields contain errors:\n\n- ' + 
			   fields.join('\n- ') + 
			   '\n\n' +
			   'Before you can continue you need\n' +
			   'to correct these errors.\n');
		
		// Select field with first error
		f.elements[first].select();
		f.elements[first].focus();
	}
	
	return (noerrors);
}

function formUpdate(obj) {
	if (obj.validateCheck || obj.validateReq) {
		err = false;
		val = obj.value;
		
		if ((val == '' || val == '-' || val == 'http://') && obj.validateReq == true)
			err = true;
		
		if (obj.validateCheck && !err && val != '') {
			if (obj.validateCheck == 'url' && !formValidateUrl(val))
				err = true;
				
			if (obj.validateCheck == 'email' && !formValidateEmail(val))
				err = true;
			
			if (obj.validateCheck.substr(0,7) == 'string:') {	
				if (obj.validateCheck.length > 7)
					max = obj.validateCheck.substr(7,obj.validateCheck.length - 7);
				else
					max = 0;
				
				if (!formValidateString(val, max))
					err = true;
			}

			if (obj.validateCheck == 'integer' && !formValidateInteger(val))
				err = true;
	
			if (obj.validateCheck == 'number' && !formValidateNumber(val))
				err = true;

			if (obj.validateCheck == 'checked' && !formValidateChecked(obj))
				err = true;
			
			if (obj.validateCheck.substr(0,8) == 'compare:') {
				compare = obj.validateCheck.substr(8,obj.validateCheck.length - 8);
				compareobj = MM_findObj(compare);
				
				if (val != compareobj.value)
					err = true;
			}
		}
		
		// Change class
		if (err) {
			if (obj.className!='radio' && obj.className!='checkbox') obj.className='error';
			obj = MM_findObj(obj.validateLabel);
			if (obj) obj.className='error';
		} else {
			if (obj.className!='radio' && obj.className!='checkbox') obj.className='flat';
			obj = MM_findObj(obj.validateLabel);
			if (obj) obj.className='';
		}
		
		return (err);
	}
}

function formValidateUrl(val) {
	return !(val.substr(0,7) != 'http://' && 
			val.substr(0,8) != 'https://'  &&
			val.length <= 255);
}

function formValidateEmail(val) {
	var iChars = "*|,\":<>[]{}`\';()&$#%";

	for (var i = 0; i < val.length; i++) {
		if (iChars.indexOf(val.charAt(i)) != -1)
			return false;
	}

	return !(val.indexOf('@') < 1 ||
			val.indexOf('@') == (val.length - 1) ||
			val.length > 50);
}

function formValidateString(val, max) {
	if (max == 0 && val == '-') val = '';
				
	return (val.length <= max);
}

function formValidateInteger(val) {	
	return (val.match(/^\d+$/) && val.length<=10);
}

function formValidateNumber(val) {	
	return (val.match(/^\d+\.?\d*$/));
}

function formValidateChecked(obj) {	
	return (obj.checked);
}