// used to validate some common elements
var validate = function() {
	var form;
	if(!arguments[0])
		form = document.forms[0];
	else
		form = arguments[0];
	
	var phoneRegExp = /(\s)*(\(\d{3}\))?-?\d{3}-\d{4}/;
	var emailRegExp = /^[^\s()<>@,;:\"\/\[\]?=]+@\w[\w-]*(\.\w[\w-]*)*\.[a-z]{2,}$/;
	for(var i = 0; i < form.elements.length; i++) {
		if(form.elements[i].name == 'Name' && form.elements[i].value == '') {
			alert('Please enter a name to proceed');
			return false;
		}
		if(form.elements[i].name == 'Phone' && (form.elements[i].value == '' || !phoneRegExp.test(form.elements[i].value))) {
			alert('Please enter a valid phone number to proceed');
			return false;
		}
		if(form.elements[i].name == 'Email' && (form.elements[i].value == '' || !emailRegExp.test(form.elements[i].value))) {
			alert('Please enter a valid e-mail address to proceed');
			return false;
		}
	}
	return true;
};

var build_form = function(config) {
	var container = config.container;
	container.slideToggle('slow');
};

var display = function(event){
	var obj_key = event.data.obj_key; 
	var container = $(event.data.container);
	var elements = event.data.elements;
	if(this.checked) {	
		// loop through the form elements for a one of the
		// available documents. check to see if the element
		// matches an element on the page. if it does see if
		// we are storing the values and set the form element's
		// value.
		$('#request :input:text').each(function() {
			set_values(this, elements, obj_key);
		});
		container.slideDown('slow');
	}else {
		posted[obj_key] = {};
		container.slideUp('slow');	
	}
};

var set_values = function(elem, elements, obj_key) {
	$.each(elements, function(i, e_name) {
		if((elem.name.toLowerCase() == e_name) && (posted[obj_key][e_name] || posted[e_name])) {
			if(posted[obj_key][e_name]) {
				elem.value = posted[obj_key][e_name];
			}else {
				elem.value = posted[e_name];
				posted[obj_key][e_name] = posted[e_name];
			}
		}
	});
}

var special_display = function(event) {
	var exposed = 0;
	$('#request input:checkbox').gt(4).each(function() {
		exposed += this.checked? 1: 0; 			
	});
	if(exposed) { 
		$(event.data.container).slideDown('slow');
		var elements = event.data.elements;
		var obj_key = event.data.obj_key;
		$('#request input:text').gt(15).each(function() {
			set_values(this, elements, obj_key)
		});
	}else {
		$(event.data.container).slideUp('slow');
	}
}

var save = function(event) {
	if(this.value) {
		var object = event.data.object;
		var sub_obj = event.data.subobj;
		var property = this.name.toLowerCase();
		var value = this.value;
		if(this.type == 'checkbox') {			
			value = this.checked? true: false;
		}
		object[property] = value;
		if(sub_obj && (this.id.indexOf('_')>1)) {
			key = this.id.slice(0, this.id.indexOf('_'));
			object[key][property] = value;
		}
		//print('Saving', object);
	}
};

var apply = function(f, o, r) {
	$.each(o, function(i, v) {
		if(v && r && (typeof v == 'object')) {
			apply(f, o[i], r);
		}
		f(i, v);
	});
}

var print = function(msg, obj) {
	if(msg)
		$('#console').append('$&gt;'+msg+'<br />');
		
	$.each(obj, function(prop,val){ 
		var val_type = typeof val;
		if(val_type!='object' || val==null) {
			$('#console').append('$&gt;'+prop+':'+val+'<br />');
		}else if(val_type=='object') {
			print(prop+'--->', val);
		}
	});
}

var check_data = function(data) {
	var isvalid = false;
	var info_selected = false;
	var phoneRegExp = /(\s)*(\(\d{3}\))?-?\d{3}-\d{4}/;
	var emailRegExp = /^[^\s()<>@,;:\"\/\[\]?=]+@\w[\w-]*(\.\w[\w-]*)*\.[a-z]{2,}$/;
	
	form = document.getElementById('request');
	for(var i=0; i<form.elements.length; i++) {
		ele = form.elements[i];
		if(ele.type == 'checkbox') {
			if(ele.checked) {
				info_selected = true;	
				break;
			}
		}
			
	}
	if(!info_selected)
		alert('Please select an interest.');
	else if(data['name'] == null)
		alert('Please provide a contact name.');
	else if((data['address'] == null || data['city'] == null || data['state'] == null) && !phoneRegExp.test(data['phone']) && !emailRegExp.test(data['email']))
		alert('Please provide your address, telephone number or e-mail address.');
	else
		isvalid = true;
	return isvalid;
}
