var messenger = {
	display: function message(scopes, messages) {
		var scopes = $(scopes);

		if(typeof(messages) == 'object') {
			$.each(messages, function(type, strings) {
				var output = scopes.find('.'+type);
				$.each(strings, function(index, text) {
					if( !text ) text = 'Unspecified Exception';
					if(output.length) {
						output.append(text.replace(/\n/, '<br />')+'<br />').show();
					}else{
						alert(text); 
					}
				});
			});
		}
	},
	clear: function(scopes) {
		if(scopes) {
			scopes.find('*').html('').hide();
		}else{
			$('.messages:not(.static) .message').html('').hide();
		}
	}
}

function ajaxEvent(trigger, url) {
	var trigger = $(trigger);

	var form  = trigger.closest('form');
	if(!url) url = form.attr('action');

	var messages = form.find('.messages').not('.static');
	messenger.clear(messages);

	$.ajax({
		url: url,
		type: 'POST',
		data: form.serialize(),
		dataType: 'json',
		success: function(returnData) {
			if(returnData.message) {
				messenger.display(messages, returnData.message);
			}
			
			if(returnData.html != undefined) { 
				form.find('.results').html(returnData.html); 
			}
			
			if(returnData.call) { 
				eval(returnData.call); 
			}
		},
		error: function(req, status, error) { alert('Error! Please contact administrator. (Reason: ' + status + ')'); },
		complete: function() { }
	});
}

function Ping() { $.get('/ajax/Ping.php'); }

function reShade(container) {
	container.children().removeClass('shade').filter(':even').addClass('shade');
}

function floatval(number) {
	var number = parseFloat(number);
	if(isFinite(number)) { return number; } else { return 0; }
}

function intval(number) {
	var number = parseInt(number, 10);
	if(isFinite(number)) { return number; } else { return 0; }
}

function isNull(what) { 
	return what == null;
}


function uniqid() {
	var uniqid = Math.floor(Math.random()*999999999);
	return uniqid;
}

function getURI() {
	$uri = window.location.toString();
    return $uri.split('#')[0];
}

function getURIAnchor() {
	$uri = window.location.toString();
    if ($uri.match('#')) {
        $anchor = $uri.split('#')[1];
		return $anchor;
    }
	return false;
}

function setURIAnchor($anchor) {
	if( $anchor == undefined ) $anchor = '';
	window.location.href = getURI()+'#'+$anchor;
}

function reloadPage() {
	window.location.reload();
}

$(document).ready(function() {
	$('.pushText').each(function() {
		var pushTextKey = $(this).attr('id');
		var replaceElement = $(this);

		$.ajax({
			url: '/ajax/PushText.php',
			data: { key : pushTextKey },
			dataType: 'html',
			success: function(html) {
				replaceElement.replaceWith(html);
			}
		});
	});

	//$('input.numeric').numeric();

	$('a.ajaxTrigger').live('click', function(event) {
		event.preventDefault();
		if( this.href.match('#') ) return false;
		ajaxEvent(this, this.href);
	});

	$('a.toggle').click(function(e) {
		e.preventDefault();
		var element = $(this).attr('href');
		$(element).toggle();
	});

	$('form.ajax').submit(function(event) { 
		event.preventDefault(); 
	}).find('input,select').keydown(function(event) {
		if( event.keyCode == 13 ) event.preventDefault();
	});
	

	$('.selectable').live('click', function(event) {
	//$('.selectable:not(.disabled)').live('click', function(event) {
		var selectable = $(this);
		var selectables = selectable.closest('.selectables');
		
		var name = selectable.find('input:first').attr('name');
		var siblings = $('[name="' + name + '"]').parents('.selectable');
		
		if(selectables.hasClass('radio')) {
			siblings.removeClass('selected').find(':input').attr('checked', '');
			selectable.addClass('selected').find(':input').attr("checked", "checked");
		}
		else if(selectables.hasClass('check')) {
			selectable.toggleClass('selected').find('input').attr('checked', (selectable.hasClass('selected')) ? 'checked' : '');		
		}
	});
});

var ping = window.setInterval('Ping();', 600000);