
/** Create jqueryfied DOM element */
$.c = function(tag, className, attr) {
	var el = $(document.createElement(tag));
	if (className) {
		el.addClass(className);
	}
	if (attr) {
		el.attr(attr);
	}
	return el;
};

/** Ajax */
$.ezajax = function(className, method, params, callback, type) {
	params.className = className;
	params.method = method;
	if (!type) {
		type = 'text';
	}
	$.post('includes/ezajax/ezajax.php', params, callback, type);
};

$.rmi = function(moduleName, p1, p2, p3, p4, p5) {
	var namespace = '';
	var data, callback, methodName, className;
	
	if (p5) {
		namespace = p1;
		className = p2;
		methodName = p3;
		data = p4;
		callback = p5;
	} else {
		className = p1;
		methodName = p2;
		data = p3;
		callback = p4;
	}
	
	if (namespace && namespace.substring(namespace.length - 2, namespace.length - 1) != '/') {
		namespace += '/';
	}
	
	$.post('../rmi/json/'+moduleName+'/'+namespace+className+'/'+methodName, data,
	function(response) {
		if (typeof response.error != 'undefined') {
			alert('Error: ' + response.error);
		} else if (typeof callback == 'function') {
			callback(response);
		}
	}, 'json')
	.error(function(response, r2) {
		alert('JSON Parse Error: ' + response.responseText);
	});
};

/** Float values and currency */
$.fn.floatVal = function(){
	var val = $(this).val();
	val = $.trim(val.replace(',', '.'));
	val = parseFloat(val);
	
	if (val.toString() == 'NaN') {
		return 0;
	}
	
	return val;
};

$.formatFloat = function(val, precision, unit) {
	if (val.toString() == 'NaN') {
		return '';
	}
	
	if (typeof precision != 'undefined') {
		val = 100.0 * val;
		val = parseFloat(Math.round(val));
		val = val.toString();
		while (val.length < precision + 1) {
			val = '0' + val;
		}
		
		var cut = val.length - precision;
		val = val.substring(0, cut) + ',' + val.substring(cut, val.length);
	}
	
	if (typeof unit != 'undefined') {
		val = val + unit;
	}
	
	return val;
};

$.fn.formattedFloatVal = function(precision, unit) {
	var val = $(this).floatVal();
	return $.formatFloat(val, precision, unit);
};

/** Dates */
$.parseGermanDate = function(germanDate) {
	var today = new Date();
	
	var valArr = germanDate.split('.');
	
	var day = parseInt(valArr[0], 10);
	day = day || today.getDate();
	
	var month = parseInt(valArr[1], 10);
	month = month || today.getMonth() + 1;
	
	var year = parseInt(valArr[2], 10);
	year = year || today.getYear() + 1900;
	if (year < 100) {
		year += 2000;
	}
	
	var date = new Date(year, month - 1, day);
	
	return {
		day: date.getDate(),
		month: date.getMonth() + 1,
		year: date.getYear() + 1900
	};
};

$.germanToSqlDate = function(germanDate) {
	var parsed = $.parseGermanDate(germanDate);
	return parsed.year + '-' + parsed.month + '-' + parsed.day;
};

