var messageContainers = new Array('error', 'success', 'message');

function setStatusMessages(data) 
{
	for (key in messageContainers) {
		$('#' + messageContainers[key]).children().empty().remove();
	}
	addStatusMessages(data);
}

function addStatusMessages(data) 
{
	if (typeof data != 'undefined' && typeof data.messages != 'undefined') {
		$.each(data.messages, function(key, value) {
			var container = $('#' + key);
			if (container.length < 1) {
				container = $('<ul class="' + key + '" id="' + key + '"></ul>');
				$('#statusMessages').append(container);
			}
			if (typeof value == 'string') {
				container.append('<li>' + value + '</li>');
			} else {
				$.each(value, function(key2, value2) {
					container.append('<li>' + value2 + '</li>');
				});
			}
		});
	}
	for (key in messageContainers) {
		if ($('#' + messageContainers[key]).children().length > 0) {
			if (messageContainers[key] == 'error') {
				$('#' + messageContainers[key] + '-container').dialog({ buttons: { "Ok": function() { $(this).dialog("close"); } } });
			} else {
				$('#' + messageContainers[key] + '-container').show();
			}
		} else {
			$('#' + messageContainers[key] + '-container').hide();
		}
	}
}

function urlize(txt) 
{
	sdiak = 'áäčďéěíĺľňóôőöŕšťúůűüýřžÁÄČĎÉĚÍĹĽŇÓÔŐÖŔŠŤÚŮŰÜÝŘŽ';
	bdiak = 'aacdeeillnoooorstuuuuyrzAACDEEILLNOOOORSTUUUUYRZ';

	tx = '';

	for (p = 0; p < txt.length; p++) {
		if (sdiak.indexOf(txt.charAt(p)) != -1)
			tx += bdiak.charAt(sdiak.indexOf(txt.charAt(p)));
		else
			tx += txt.charAt(p);
	}
	tx = trim(tx);
	var re = /\W+/g;

	tx = tx.replace(re, '-');
	return tx.toLowerCase();
}

function makeSaferPasswords(ids, hashedId) 
{
	for (var i = 0; i < ids.length; i++) {
		if (document.getElementById(ids[i]).value != '') {
			document.getElementById(ids[i]).value = hex_sha1(document.getElementById(ids[i]).value);
		}
	}
	document.getElementById(hashedId).value = 1;
}

function trim(str) 
{
	return str.replace(/^\s+|\s+$/g, '');
}

function roundit(Num, Places)
{
   if (Places > 0) {
      if ((Num.toString().length - Num.toString().lastIndexOf('.')) > (Places + 1)) {
         var Rounder = Math.pow(10, Places);
         return Math.round(Num * Rounder) / Rounder;
      }
      else return Num;
   }
   else return Math.round(Num);
}

function ceilit(Num, Places) {
	if (Places > 0) {
		if ((Num.toString().length - Num.toString().lastIndexOf('.')) > (Places + 1)) {
			var Rounder = Math.pow(10, Places);
			return Math.ceil(Num * Rounder) / Rounder;
		}
		else return Num;
	}
	else return Math.ceil(Num);
}

function callAjax(url, query, type, callback, dataType, startLoader, throwErrors, errorCallback)
{
	if (typeof startLoader == 'undefined') {
		startLoader = false;
	}
	if (typeof type == 'undefined') {
		type = 'GET';
	}
	if (typeof throwErrors == 'undefined') {
		throwErrors = false;
	}
	if (typeof dataType == 'undefined') {
		dataType = 'json';
	}
	
	var options = {
		'type' : type,
		'url' : url,
		'data' : query,
		'dataType' : dataType,
		'error' : function (XMLHttpRequest, textStatus, errorThrown) {
			if (errorCallback) {
				errorCallback(XMLHttpRequest, textStatus, errorThrown);
			}
			try {
				eval('var responseJSON = ' + XMLHttpRequest.responseText);
				setStatusMessages(responseJSON);
			} catch(e) {
				if (throwErrors) {
					alert(translate.getTranslation('Error occured while processing your request.'));
				}
			} finally {
				if (startLoader) {
					loader.finish();
					unsetProcessMessage();
				}
			}
		},
		'success' : function (data, textStatus) {
			setStatusMessages(data);
			if (callback) {
				callback(data);
			}
			if (startLoader) {
				loader.finish();
				unsetProcessMessage();
			}
		},
		'complete' : function (XMLHttpRequest, textStatus) {
		}
	};
	if (startLoader) {
		loader.start();
	}
	$.ajax(options);
}

function setProcessMessage(message)
{
	$('#processMessage').hide().text(message).show('slow');
}

function unsetProcessMessage(timeout)
{
	if (typeof timeout == 'undefined') {
		timeout = 3000;
	}
	
	setTimeout(function() {
		$('#processMessage').hide('slow').text('');
	}, timeout);
	
}

function isEmpty(obj) 
{
	for(var prop in obj) {
		if(obj.hasOwnProperty(prop))
			return false;
	}
	return true;
}

function fillForm(formData)
{
	if (typeof formData.action == 'undefined' || typeof formData.data == 'undefined') {
		return false;
	}
	
	var form = $('form[action="' + formData.action + '"]');
	if (form.length > 0) {
		for (dataKey in formData.data) {
			if (typeof formData.data[dataKey] == 'object') {
				for (dataKey2 in formData.data[dataKey]) {
					$('input[type="text"][name="' + dataKey + '[]"] eq:' + dataKey2).val(formData.data[dataKey][dataKey2]);
					$('textarea[name="' + dataKey + '[]"] eq:' + dataKey2).html(formData.data[dataKey][dataKey2]);
					$('input[type="checkbox"][name="' + dataKey + '[]"][value="' + formData.data[dataKey][dataKey2] + '"]').attr('checked', true);
					$('input[type="radio"][name="' + dataKey + '[]"][value="' + formData.data[dataKey][dataKey2] + '"]').attr('checked', true);
					$('select[name="' + dataKey + '"] option[value="' + formData.data[dataKey][dataKey2] + '"]').attr('selected', true);
				} 
			} else {
				$('input[type="text"][name="' + dataKey + '"]').val(formData.data[dataKey]);
				$('textarea[name="' + dataKey + '"]').html(formData.data[dataKey]);
				$('input[type="checkbox"][name="' + dataKey + '"][value="' + formData.data[dataKey] + '"]').attr('checked', true);
				$('input[type="radio"][name="' + dataKey + '"][value="' + formData.data[dataKey] + '"]').attr('checked', true);
				$('select[name="' + dataKey + '"] option[value="' + formData.data[dataKey] + '"]').attr('selected', true);	
			}
		}
		
		if (typeof formData.messages == 'object') {
			var element;
			var focused = false;
			for (elementKey in formData.messages) {
				element = form.find('[name="' + elementKey + '"],[name="' + elementKey + '[input]"]').not('input[type="hidden"]');
				if (element.length > 0) {
					element.addClass('input-error');
					for (messageKey in formData.messages[elementKey]) {
						element.parent().append('<br /><span class="input-error-message">' + formData.messages[elementKey][messageKey] + '</span>');
					}
					if (!focused) {
						element.focus();
						focused = true;
					}
				}
			}
		}
		
		return true;
	}
	
	return false;
}
