 function doCall(func, params, callback, before_callback, show_feedback_text) {
	/*var vars = [];
	for (var i = 0; i < args.length-1; i++){
		vars.push(args[i]);
	}*/
	if (show_feedback_text === undefined) {
		show_feedback_text = true;
	}
	var send = {_ajaxArgs: $.toJSON(params), _ajax: 1, _ajaxFunction:func};
	$.post(window.location.pathname, send, function(dat){
		try {
			var d = $.parseJSON(dat);
			if (before_callback){
				before_callback(d);
			}
			if (d._ajaxResponse == 1){
				if (d._errors){
					var first = true;
					for (key in d._errors){
						var element = $('#' + key + ', #' + key + '_PlainText');
						if (element){
							if (first) element.focus().select();
							first = false;
							element.removeClass('Success').addClass('Error');
							setFeedback('Error', element, show_feedback_text ? d._errors[key] : '');
						}
					}
				}
				if (d._success){
					for (key in d._success){
						var element = $('#' + key + ', #' + key + '_PlainText');
						if (element){
							element.removeClass('Error').addClass('Success');
							setFeedback('Success', element, show_feedback_text ? d._success[key] : '');
						}
					}
				}
				if (d._js){
					eval(d._js);
				}
				d.getErrors = function(){
					return this._errors;
				}
				d.getSuccess = function(){
					return this._success;
				}
				d.hasError = function(id){
					if (!id){
						for (key in this._errors){
							return true;
						}
						return false;
					}
					return !!this._errors[id];
				}
				d.getData = function(key) {
					if (this._data) {
						return this._data[key];
					} else {
						return false;
					}
				}
				d.hasSuccess = function(id){
					if (!id){
						for (key in this._success){
							return true;
						}
						return false;
					}
					return !!this._success[id];
				}
				if (d._url === ""){
					d._url = "/";
				}
				if (d._url){
					if (d._url == "_refresh_") {
						refresh();
					} else { 
						window.location = d._url;
					}
				}
				d.Success = d.getData("Success");
			}
		} catch (error) {
			$("#debugger").unbind('dblclick').bind("dblclick", function() {$(this).fadeOut()}).fadeIn().find(".error").html(
				'<h2>' + $.encode(error.name) + '</h2>' + 
				'<table style="font-size:11px">' + 
					'<tr>' + 
						'<td style="width:100px"><strong>Response</strong></td>' + 
						'<td><pre>' + $.encode(dat) + '</pre></td>' + 
					'</tr>' + 
					'<tr>' + 
						'<td><strong>File Name</strong></td>' + 
						'<td><pre>' + $.encode(error.fileName) + '</pre></td>' + 
					'</tr>' + 
					'<tr>' + 
						'<td><strong>Line Number</strong></td>' + 
						'<td><pre>' + $.encode(error.lineNumber) + '</pre></td>' + 
					'</tr>' + 
					'<tr>' + 
						'<td><strong>Message</strong></td>' + 
						'<td><pre>' + $.encode(error.message) + '</pre></td>' + 
					'</tr>' + 
				'</table>')
		}
		if (callback){
			callback(d);
		}
	});
}

function removeFeedback(form){
	form.find('input, select, textarea').removeClass('Error').removeClass('Success');
	form.find('.Feedback').slideUp();
}

function fadeFeedback(form){
	form.find('.Feedback').fadeTo('fast', .1);
}

function setFeedback(className, element, text){
	var display = false;
	if ($.isArray(text)){
		var str = '';
		for (var i = 0; i < text.length; i++){
			str += text[i] + "<br />";
		}
		text = str;
	}
	var hasClass;
	var container = $('#' + element.attr('name') + 'Feedback');
	if (container.length > 0){
		display = container;
		container.addClass('Feedback');
		hasClass = true;
	}else{
		if (element.hasClass('auto')){
			element = element.parent();
		}
		hasClass = element.prev().hasClass('Feedback');
		if (hasClass){
			display = element.prev();
		}
	}
	if (hasClass){
		display.html(text);
		display.slideUp(200, function(){
			if (text){
				display.removeClass();
				display.addClass('Feedback');
				display.addClass(className);
			}
		});
	}else{
		if (text){
			display = element.before('<div style="display:hidden">' + text + '</div>').prev();
			display.hide();
			display.addClass('Feedback');
			display.addClass(className);
		}
	}
	if (text){
		display.fadeTo(200, 1).slideUp(200);
		display.slideDown(200);
	}
}

function handleSubmit(element, func, params){
	if (func == ''){
		func = 'doCall';
	}
	element.submit(function(event){  
		event.preventDefault();  
		func.apply(params);
	});  
}
function getFormValues(form){
	var inputs = form.find('input, textarea, select');
	var values = {};
	inputs.each(function(i, el) {
		var InputVal = $(el).val();
		$el = $(el);
		if ($el.attr("type") == "radio" ) {
			if (!$el.is(":checked")) {
				return;
			}
		} else if ($el.attr("type") == "checkbox") {
			InputVal = $el.is(":checked") ? 1 : 0;
		}
				
		values[el.name] = InputVal;
	});
	return values;
}
function updateDefaultTexts(){
	$(".defaultText").focus(function(srcc){
		if ($(this).val() == $(this)[0].title){
			$(this).removeClass("defaultTextActive");
			$(this).val("");
		}
	});
	
	$(".defaultText").blur(function(){
		if ($(this).val() == ""){
			$(this).addClass("defaultTextActive");
			$(this).val($(this)[0].title);
		}
	});
	
	$(".defaultText").blur();   
}
$(document).ready(updateDefaultTexts);

function sendForm(id, callback, type){
	var form = $('#' + id);
	return $.post(form.action, form.serialize, callback, type);
}
function refresh(){
	window.location = window.location;
}


function ready(func){
	$(document).ready(func);
}

var autoDefaults = new Object();

function cloneInput(input, type){
	var attrs = input[0].attributes;
	var inp = $("<input type='" + type + "' />");
	for (var i = 0; i < attrs.length; i++){
		if (attrs[i].name != 'type'){
			inp.attr(attrs[i].name, attrs[i].value);
		}
	}
	return $(inp);
}

function autoDefault(element, value){
	var obj = new Object();
	obj.value = value;
	obj.pass = element.attr('type') == 'password';
	autoDefaults[element.attr('id')] = obj;
	var plainText = element.attr('name') + '_PlainText';
	
	
	if (obj.pass){
		autoDefaults[plainText] = obj;
		element.after(cloneInput(element, 'text')
				.attr('id', plainText)
				.attr('name', plainText)
				.addClass('auto_default')
				.val(value))
				.hide();
	}else{
		if (element.val().length == 0){
			element.val(value);
		}
		element.addClass('auto_default');
	}
	(obj.pass ? $("#" + element.attr('name') + '_PlainText') : element).focus(function(){
		var $this = $(this);
		var val = autoDefaults[$this.attr('id')];
		if (!$this.val() || $this.val() == val.value){
			if (val.pass){
				$this.prev().show().focus();
				$this.hide();
			}else{
				$this.removeClass('auto_default').val('');
			}
		}
	})
	element.blur(function(){
		var $this = $(this);
		var val = autoDefaults[$this.attr('id')];
		if (!$this.val() || $this.val() == val.value){
			if (val.pass){
				$this.next().show();
				$this.hide();
			}else{
				$this.addClass('auto_default').val(val.value);
			}
		}
	});
}

function removeLast(list) {
	var newList = [];
	for (var i = 0; i < list.length - 1; i++ ){
		newList.push(list[i]);
	}
	return newList;
}

var pageOpen = new Date();

function pageTime() {
	curTime = new Date();
	var minutes = (curTime.getMinutes() - pageOpen.getMinutes());
	var seconds = (curTime.getSeconds() - pageOpen.getSeconds());
	var time = (seconds + (minutes * 60));
	if (time < 0) { time = 0; }
	return time;
}