function custom_alert(msg) {	
	s = document.viewport.getScrollOffsets();
	p = document.viewport.getDimensions(); 
	
	d = $('custom_alert');
	
	if(!d) {
		d = $(document.createElement('div'));
		d.addClassName('custom_alert');
		d.setAttribute('id', 'custom_alert');
		document.body.appendChild(d);
	}	
	
	d.innerHTML = msg;
	
	d.setStyle({
		left: 	(s.left + (p.width - d.getWidth()) / 2) + "px",
		top: 	(s.top + (p.height - d.getHeight()) / 2) + "px"
	});
	
	d.hide();
	Effect.Appear(d);
	setTimeout('Effect.Fade(\'custom_alert\')', 3000);
}

// ajax submits a form to it's action
function form_handler(frm, id, callback) {
	vars = $(frm).serialize();
	
	url = frm.action;
		
	content_handler(url, id, vars, callback);
}

function content_handler(url, id, ex, callback) {
	t = function(o) {
		hide_loader(id);
		
		a = c = false;
		
		if(a)
			custom_alert(id, a);
		
		if(c) {
			$(id).innerHTML = c;
			if(callback)
				callback(o);
		} else
			alert('Error:\n' + o.responseText);
	};
	
	f = function() {
		new Ajax.Request(url, { postBody: ex, method: 'post', onSuccess: t } ); 
	}
	
	show_loader(id, 'Loading...', img_directory + '/images/loader.gif');
	setTimeout('f()', 1000);
}

function check_required(id) {
	elements = $(id).getElementsByClassName('required');
	
	if(elements.length) {
		required_found = false;
		msg = '<b>Sorry! Please fill out all required fields.</b><ul>';
		for(x = 0; x < elements.length; x++) {
			if(elements[x].getValue() == "") {								
				required_found = true;
				m = elements[x].getAttribute('message') ;
				
				if(m)
					msg += '<li>' + elements[x].getAttribute('message') + '</li>';
			}
			
		}

		if(required_found) {
			custom_alert(msg + '</ul>');
			return false;
		} else
			return true;
	} else
		return true;
}

function dbg(t) {
	$('dbg').innerHTML += t + '<br>';
}

function ut() {
	var foo = new Date;
	var unixtime_ms = foo.getTime();
	var unixtime = parseInt(unixtime_ms / 1000); 
	return unixtime;
}
