var duration = 5000;
jQuery.validator.addMethod("required", function( value, element ) {
	var result_req = true;
	if ($(element).val() == "") {result_req = false;}
	return result_req;
}, 'You did not fill required field(s)');

jQuery.validator.addMethod("letter", function( value, element ) {
	var result = this.optional(element) || /^[0-9a-z_-]|\s+$/i.test(value);
	if (!result) {
		this.blockFocusCleanup = true;
		element.focus();
		this.blockFocusCleanup = false;
	}
	return result;
}, 'Available symbols: a-z, _ and -');

$(document).ready(function(){
	if ($('#mess_holder > span')) {
		setTimeout("hide_message('error')", duration);
	}
});

function clearFormInputs(form_id)
{
	var form = $('#' + form_id);
	var inputs = $('input[type=text]', form);
	$(inputs).live('focus', function(){
		if ($(this).hasClass('default_value')) {
			$(this).removeClass('default_value').val('');
		}
	})
}

function duplicatePassFields(form_id)
{
	var form = $('#' + form_id);
	var pass_input = $('input[type=password]', form);
	$(pass_input).after('<input id="' + form_id + '_pass_clone" type="text" class="text default_value" value="Password" />');
	$(pass_input).hide();
	
	var inputs = $('input[type=text]', form);
	$(inputs).live('focus', function(){
		if ($(this).attr('id').indexOf('pass_clone') != -1) {
			$('#' + form_id + '_pass_clone').hide();
			$(pass_input).show().focus();
		}
	});
}

function ajax_loader_start(message)
{
	$('body').append('<div class="ajax_loader"><div class="inner"><div class="holder_inner"></div></div></div>');
	if (message) {
		$('div.holder_inner').append('<p>' + message + '</p>');
	}
	$('div.holder_inner').append('<img src="' + presets.siteURL() + 'images/ajax-loader.gif" alt="" />');
}

function ajax_loader_stop()
{
	$('div.ajax_loader').remove();
}

function array_flip(arr)
{
	var flip_arr = [];
	for (var i in arr) {
		flip_arr[arr[i]] = i;
	}
	return flip_arr;
}

Array.prototype.remove = function(from, to) {
	var rest = this.slice((to || from) + 1 || this.length);
	this.length = from < 0 ? this.length + from : from;
	return this.push.apply(this, rest);
};

Array.prototype.empty = function() {
	return typeof(this[0]) == 'undefined' ? true : false;
}

function trim(str)
{
	return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');
}

function isset(el)
{
	return typeof(el) != 'undefined';
}

function show_message(message, type)
{
	if (typeof(message) != 'undefined') {
		if (typeof(type) == 'undefined') {
			type = 'info';
		}
		var d = new Date();
		var time = d.getTime();
		var html = '<span class="' + type + ' ' + time + '">' + message + '</span>';
		$('#mess_holder').html(html);
		setTimeout("hide_message(" + time + ")", duration);
	}
}

function hide_message(time)
{
	if (!isset(time)) {
		time = 'message';
	}
	$('.' + time).remove();
}

// obj is a selector!
function clickOutside(e, obj)
{
	return (!$(e.target).is(obj));
}

function showPopup(id)
{
	$('body').append('<div class="popup-overlay"></div>');
	
	var width 	= parseInt($('#' + id).css('width')),
		height 	= parseInt($('#' + id).css('height')),
		left 	= (document.documentElement.clientWidth - width)/2,
		top 	= (document.documentElement.clientHeight - height)/2;

	var mainBox = $('#' + id);
	$(mainBox).css({'top': top + 'px',
					'left': left + 'px'})
				.fadeIn(200);
	$(mainBox).show();
	
	$(document).keyup(function(event) {
		if (event.keyCode == 27) {
			hidePopup(id);
		}
	});
	
	$('a.close_popup').click(function(){
		hidePopup(id);
		return false;
	});
}

function hidePopup(id)
{
	$('div.popup-overlay').remove();
	$('#' + id).fadeOut(200);
}

function strip_tags(str)
{
	return str.replace(/<\/?[^>]+>/gi, '');
}

//Common validation template
function formValidation(postSubmit, handler, formId)
{
	var options = {
		success:		postSubmit,
		url: 			presets.siteURL() + handler,
		dataType:		'json'
	};
	$("#" + formId).validate({
		submitHandler: function(form) {
			$(form).ajaxSubmit(options);
		},
		onkeyup: false,
		focusInvalid: false,
		focusCleanup: false,
		errorClass: "ui-state-error",
		errorPlacement: function(error, element) {
			var label = error.get(0);
			show_message($(label).text(), 'error');
		}
	});
}

function in_array(needle, haystack, strict)
{
	var found = false, key, strict = !!strict;
 
	for (key in haystack) {
		if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {
	        found = true;
			break;
		}
	}
	return found;
}
