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') {
            addFormMessages(formData, formData.messages);
        }
        
        return true;
    }
    
    return false;
}

function addFormMessages(formData, messages)
{
    var form = $('form[action="' + formData.action + '"]');
    if (form.length > 0) {
        if (typeof messages == 'object') {
            var element;
            var focused = false;
            var message;
            for (elementKey in messages) {
                message = '';
                for (messageKey in messages[elementKey]) {
                    if (typeof messages[elementKey][messageKey] == 'object') {
                        element = form.find('[name="' + elementKey + '[]"]:eq(' + messageKey + '),[name="' + elementKey + '[input][]"]:eq(' + messageKey + ')').not('input[type="hidden"]');
                        for (messageKey2 in messages[elementKey][messageKey]) {
                            message += '<br /><span class="input-error-message">' + messages[elementKey][messageKey][messageKey2] + '</span>';
                        }
                    } else {
                        element = form.find('[name="' + elementKey + '"],[name="' + elementKey + '[input]"]').not('input[type="hidden"]');
                        message += '<br /><span class="input-error-message">' + messages[elementKey][messageKey] + '</span>';
                    }
                }
                if (element.length > 0) {
                    element.addClass('input-error');
                    element.parent().append(message);
                    if (!focused) {
                        element.focus();
                        focused = true;
                    }
                }
            }
        }
        
        return true;
    }
    
    return false;
}
