/*
	Formas klases JS funkcijas
*/

var texts = {
	addimage : 'add',
	imageerror : 'error',
	deleteConfirm : 'Really delete?'
};

var imagecount = 0;

var baseurl = '';

var fields = [];

function checkRule(field_id, rules, extra) {
	if(!$defined(fields[field_id])) {
		fields[field_id] = new formValidator(field_id, rules, extra);
	}
	
	fields[field_id].checkValue();
	return;

	if(checkRules.length > 0)
	{
		$clear(ajaxTimer);
		var newValue = escape(value);
		var myfunc = function()
		{
			new Request({
				url: url, 
				method: 'post',
				onSuccess: function(response) {
					ajaxRequestComplete(field_id, response, checkRules, undoneRule);
				}
			}).send({data: 'value='+newValue+'&field_id='+field_id+'&form=true&ajax=true'});
		}
		if(value.length > 6)
		{
			ajaxTimer = myfunc.delay(200);
		}
		else
		{
			ajaxTimer = myfunc.delay(500);
		}
	}
	else
	{
		if(undone_rules == 0) {
			$(field_id).getParent().getParent().removeClass('field-error');
			if(had_rule_4 && $defined($(field_id+"2"))) {
				$(field_id+"2").getParent().getParent().removeClass('field-error');
			}
		}
		else {
			$(field_id).getParent().getParent().addClass('field-error');
			if(had_rule_4 && $defined($(field_id+"2"))) {
				$(field_id+"2").getParent().getParent().addClass('field-error');
			}
		}
	}
}

function ajaxRequestComplete(field_id, response, checkRules, undone_rules)
{
	var answers = JSON.decode(response);
	var done_rules = 0;
	var had_rule_4 = false;
	for(rule in checkRules)
	{
		if(!isNaN(answers[4]))
		{
			had_rule_4 = true;
		}
		if(answers[checkRules[rule]] == '1') {
			done_rules++;
			//$(field).removeClass('invalid');
			//$(field).addClass('valid');
''		}
	}

	if(done_rules == undone_rules) {
		$(field_id).getParent().getParent().removeClass('field-error');
		if(had_rule_4 && $defined($(field_id+"2"))) {
			$(field_id+"2").getParent().getParent().removeClass('field-error');
		}
	}
	else {
		$(field_id).getParent().getParent().addClass('field-error');
		if(had_rule_4 && $defined($(field_id+"2"))) {
			$(field_id+"2").getParent().getParent().addClass('field-error');
		}
	}
}

var formValidator = new Class({
	fieldID : null,
	ruleList : [],
	fieldRules : {},
	currRequest : false,
	inlineRules : {},
	rules : {},
	uncheckedRules : [],
	undoneRules : null,
	url : null,
	
	initialize : function (fieldID, rules, extra) {
		this.url = window.location.href;
		this.fieldID = fieldID;
		this.addRules(rules, extra);
		this.buildRules();
	},
	
	checkValue : function() {
		var value = $(this.fieldID).value.clean();
		this.ruleList.each(function (rule, key) {
			if($defined(this.rules[rule.rule])) {
				this.ruleList[key].valid = this.rules[rule.rule](value, rule.extra);
			}
			else
			{
				this.ruleList[key].valid = true;
				this.uncheckedRules.include(rule.rule);
			}
		}.bind(this));
		
		if(this.uncheckedRules.length > 0) {
			if(this.currRequest != false) {
				$clear(this.currRequest);
			}
			var newValue = escape(value);
			var myfunc = function()
			{
				new Request({
					url: this.url, 
					method: 'post',
					onSuccess: function(response) {
						this.ajaxRequestComplete(response);
					}.bind(this)
				}).send({data: 'value='+newValue+'&field_id='+this.fieldID+'&form=true&ajax=true'});
			}.bind(this);
			if(value.length > 6)
			{
				this.currRequest = myfunc.delay(200);
			}
			else
			{
				this.currRequest = myfunc.delay(500);
			}
		}
		
		this.changeStatus();
	},
	
	changeStatus : function () {
		var valid = true;
		this.ruleList.each(function (el) {
			if(el.valid == false)
			{
				valid = false;
			}
		});

		if(valid)
		{
			$(this.fieldID).getParent().getParent().removeClass('field-error')
		}
		else
		{
			$(this.fieldID).getParent().getParent().addClass('field-error')
		}
	},
	
	ajaxRequestComplete : function (response) {
		this.request = false;
		var sentCheck = JSON.decode(response);
		this.uncheckedRules.each(function (el) {
			var status = false
			if(sentCheck[el] == 1)
			{
				status = true
			}
			this.ruleList.each(function (rule, key) {
				if(el == rule.rule) {
					this.ruleList[key].valid = status;
				}
			}.bind(this));
		}.bind(this));

		this.changeStatus();
	},
	
	addRules : function(rules, extra) {
		rules.each(function (el, key) {
			this.ruleList.include({'rule' : el, 'extra' : extra[key], 'valid' : false});
		}.bind(this));
	},
	
	buildRules : function() {
		this.rules[1] = function(value) {
			if(value != '') {
				return true;
			}
			else {
				return false;
			}
		};
		this.rules[2] = function(value) {
			var regex = /^[a-zA-Z0-9][a-zA-Z0-9-_]*(\.[a-zA-Z0-9][a-zA-Z0-9-_]*)*\@[a-zA-Z0-9][a-zA-Z0-9-]*((\.[a-zA-Z0-9][a-zA-Z0-9-_])*[a-zA-Z0-9])*(\.[a-zA-Z]{2,4})$/;
			if(value.test(regex)) {
				return true;
			}
			else {
				return false;
			}
		}
		this.rules[4] = function(value) {
			had_rule_4 = true;
			
			if($defined($(this.fieldID+"2")))
			{
				if($(this.fieldID).value == $(this.fieldID+"2").value) {
					return true;
				}												
			}
			return false;
		}.bind(this);
		this.rules[5] = function(value, extra) {
			if(value.length >= extra || value.length == 0) {
				return true;												
			}
			else {
				return false;
			}
		}
		
		this.rules[6] = function(value, extra) {
			if(value.length <= extra) {
				return true;												
			}
			else {
				return false;
			}
		}
		
		this.rules[8] = function(value) {
			if(!isNaN(value)) {
				return true;												
			}
			else {
				return false;
			}
		}
		
		this.rules[12] = function(value) {
			if(value == '')
			{
				return true;
			}
			
			var numberRegex = /^(\+)?[0-9]{8,15}$/;
			if(value.test(numberRegex))
			{
				return true;												
			}
			else
			{
				return false;
			}
		}
		
		this.rules[15] = function(value, extra)
		{
			if(extra.min != false && value < extra.min)
			{
				return false;
			}
			if(extra.max && value > extra.max)
			{
				return false;
			}
			return true;
		}
	}
});

var imageUpload = new Class({
	id : null,
	lastInput : null,
	options : {
		maxImages : 1,
		currentImages : 1
	},
	
	Implements : Options,
	
	initialize : function(id, options) {
		this.setOptions(options);
		this.id = id;
		if(this.options.currentImages < this.options.maxImages) {
			window.addEvent('domready', function () {
				$(this.id+'_add_more').addEvent('click', function(event) {
					event.stop();
					this.addMoreInputs();
				}.bind(this));
			}.bind(this));
		}
		else
		{
			$(this.id+'_add_more').dispose();
		}
	},
	
	addMoreInputs : function() {
		if(this.options.currentImages < this.options.maxImages) {
			if(this.lastInput === null) {
				this.lastInput = this.id+'_0';
			}
			var last = $(this.lastInput);
			var newInput = last.clone();
			this.lastInput = this.id+'_'+this.options.currentImages+1;
			newInput.setProperty('id', this.lastInput);
			newInput.inject(new Element('br').inject(last, 'after'), 'after');
			this.options.currentImages++;
			if(this.options.currentImages == this.options.maxImages) {
				$(this.id+'_add_more').dispose();
			}
		}
	}
});

window.addEvent('domready', function () {
	if($defined($('info-bubble-pop'))) {
		$$('.form .field-info').each(function (el) {
			var text = el.getProperty('title');
			el.set('title', '');
			el.addEvent('mouseenter', function() {
				$('info-bubble-pop').getElement('p').set('html', text);
				$('info-bubble-pop').addClass('v-hidden');
				$('info-bubble-pop').removeClass('d-none');
				var cord = el.getCoordinates();
				var tb_cord = $('info-bubble-pop').getCoordinates();
				$('info-bubble-pop').setStyle('top', (cord.top - tb_cord.height + 10));
				$('info-bubble-pop').setStyle('left', (cord.left - 23));
				$('info-bubble-pop').removeClass('v-hidden');
			});
			
			el.addEvent('mouseleave', function () {
				$('info-bubble-pop').addClass('d-none');
			});
		});
	}
});

function inputForm(id, command) {
	var el = $(id);
	var preText = '';
	var postText = '';
	
	switch(command) {
		case 'i':
			preText = '[i]';
			postText = '[/i]';
			break;
		case 'b':
			preText = '[b]';
			postText = '[/b]';
			break;
		case 'img':
			if($defined(document.selection)) {
				textSelectionText = document.selection.createRange().text;
				el.focus();
				textSelection = document.selection.createRange();
			}
			formImageUpload(id);
			return;
			break;
	}
	
	insertText(el, preText, postText);
}

var textSelectionText = false;
var textSelection = false;

function insertText(el, preText, postText) {
	if($defined(document.selection)) {
		if(textSelection != false)
		{
			str = textSelectionText;
			sel = textSelection;
			textSelection = false;
			textSelectionText = false;
			el.focus();
		}
		else
		{
			var str = document.selection.createRange().text;
			el.focus();
			var sel = document.selection.createRange();
		}
		sel.text = preText + str + postText;
		return;
	}
	else
	{
		startPos = el.selectionStart;
		endPos = el.selectionEnd;
		before = el.value.substr(0, startPos);
		selected = el.value.substr(el.selectionStart, (el.selectionEnd - el.selectionStart));
		after = el.value.substr(el.selectionEnd, (el.value.length - el.selectionEnd));
		el.value = before + preText + selected + postText + after;
		return;
	}
}

function formImageUpload(id) {
	var overlay = $('ajax-popup-overlay');
	if(!overlay)
	{
		overlay = new Element('div', {
			'id' : 'ajax-popup-overlay',
			events : {
				'click' : function(event) {
					event.stop();
					$$('select').each(function(el) {
						el.removeClass('v-hidden');
					});
					ajaxCont.dispose();
					overlay.dispose();
				}
			}
		});
		
		$$('select').each(function(el) {
			el.addClass('v-hidden');
		});
		
		overlay.inject(document.getElement('body'));
	}
	else
	{
		if(overlay.hasClass('d-none'))
		{
			overlay.removeClass('d-none');
		}
	}
	
	var ajaxCont = new Element('div', { 'class' : 'popup pop-add-pic', id : id+'_ajax_container' });
	ajaxCont.inject(overlay, 'after');
	new Element('div', {
		'class' : 'title',
		'html' : texts.addimagetitle
	}).inject(ajaxCont);
	
	var close = new Element('a', {
		'class' : 'close',
		href : '#',
		html : '&nbsp;'
	}).inject(ajaxCont);
	close.addEvent('click', function (event) {
		event.stop();
		$$('select').each(function(el) {
			el.removeClass('v-hidden');
		});
		ajaxCont.dispose();
		overlay.dispose();
	});
	
	new Element('div', { 'class' : 'c' }).inject(ajaxCont);
	
	var ajaxContent = new Element('div', { 'class' : 'content' });
	ajaxContent.inject(ajaxCont);
	
	new Element('p', { 'html' : texts.addimagetext }).inject(ajaxContent);
	new Element('p', { 'class' : 'error d-none', 'html' : texts.imageerror }).inject(ajaxContent);
	
	var form;
	form = '<form method="post" action="" enctype="multipart/form-data" id="'+id+'_picture_upload_form" target="picture-upload-frame">';
	form+= '<div class="field">';
	form+= '<input type="hidden" name="form_id" value="addinlinepicture" />';
	form+= '<input type="hidden" name="input_id" value="'+id+'" />';
	form+= '<input type="hidden" name="owner_id" value="'+($(id+'_textarea_image_owner_id').getProperty('value'))+'" />';
	form+= '<input type="file" name="picture" />';
	form+= '</div>';
	form+= '<div>';
	form+= '<div class="button-green">';
	form+= '<div class="left"></div>';
	form+= '<input type="submit" value="'+texts.addimage+'" class="middle" />';
	form+= '<div class="right"></div>';
	form+= '</div>';
	form+= '</div>';
	form+= '</form>';
	form+= '<iframe style="visibility: hidden; width: 1px; height: 1px; overflow: hidden;" name="picture-upload-frame" id="picture-upload-frame"></iframe>';
	//form+= '<iframe style="width: 300px; height: 300px; overflow: auto;" name="picture-upload-frame" id="picture-upload-frame"></iframe>';
	
	ajaxContent.innerHTML += form;
	
	centerElement(ajaxCont);
}

function imageUploaded(id, status, filename) {
	if(status == 'error')
	{
		$(id+'_picture_upload_form').getParent().getElement('.error').removeClass('d-none');
	}
	else
	{
		imagecount++;
		var text2insert = '\n['+texts.imagetag+' '+imagecount+']\n'
		insertText($(id), '', text2insert);
		
		var imagesCont = $(id+'_loaded_images');
		
		var imgCont = new Element('div', {
			'class' : 'pic-c'
		}).inject(imagesCont);
		
		var cPic = new Element('div', { 'class' : 'pic' }).inject(imgCont);
		
		if($(id+'_loaded_images').getElement('input[type="submit"]'))
		{
			var newButton = $(id+'_loaded_images').getElement('input[type="submit"]').clone();
			newButton.setProperty('value', filename);
			newButton.removeClass('d-none');
			newButton.inject(cPic);
			newButton.addEvent('click', function (e) {
			if(!confirm(texts.deleteConfirm))
			{
				e.stop();
			}
		})
		}
		
		new Element('img', {
			'src' : baseurl+filename,
			'width' : '80',
			'events' : {
				'click' : function (event) {
					event.stop();
					insertText($(id), '', text2insert);
				}
			}
		}).inject(cPic);
		
		var miscC = new Element('div', { 'class' : 'misc'}).inject(imgCont);
		
		new Element('div', {
			'html' : texts.imagetag+' '+imagecount,
			'class' : 'title'
		}).inject(miscC);
		
		new Element('a', {
			'html' : texts.addimagelinktext,
			'href' : '#',
			'events' : {
				'click' : function (event) {
					event.stop();
					insertText($(id), '', text2insert);
				}
			}
		}).inject(miscC);
		
		$(id+'_textarea_image').value += filename+';';
		
		var errorel = $(id+'_picture_upload_form').getParent().getElement('.error');
		if(!errorel.hasClass('d-none'))
		{
			errorel.addClass('d-none');
		}
		
		$$('select').each(function(el) {
			el.removeClass('v-hidden');
		});
		
		$(id+'_ajax_container').dispose();
		$('ajax-popup-overlay').dispose();
	}
}

function autofillName(value, target)
{
	var request = new Request({
		url : currentUrlAjax,
		method : 'get',
		onSuccess : function(text)
		{
			$(target).value = text;
		}
	}).send({ 'data' : 'value='+value+'&c=checkname'});
	
	$(target).fireEvent('blur');
}

function switchTypeByCat(el, drinkCategories)
{
	el = $(el);
	var  value = el.getProperty('value').toInt();
	var form = el.getParent('form');
	if(drinkCategories.contains(value))
	{
		form.getElements('.drink-field').each(function (e) {
			e.removeClass('d-none');
		});
		
		form.getElements('.food-field').each(function (e) {
			e.addClass('d-none');
		});
	}
	else
	{
		form.getElements('.drink-field').each(function (e) {
			e.addClass('d-none');
		});
		
		form.getElements('.food-field').each(function (e) {
			e.removeClass('d-none');
		});
	}
}

window.addEvent('domready', function () {
	multilangAction();
	$$('.form-image-delete-button').each(function (el) {
		el.addEvent('click', function (e) {
			if(!confirm(texts.deleteConfirm))
			{
				e.stop();
			}
		})
	})
});
var dontBlur = false;

var multilangAction = function () 
{
	var tabs = $$('.multilang-tabs');
	tabs.each(function (el) {
		var l = $(el).getElements('a');
		l.each(function (e) {

			e.addEvent('mouseenter', function (event) { 
				dontBlur = true;
			});
			e.addEvent('mouseleave', function (event) { 
				dontBlur = false;
			});

			e.addEvent('click', function (event) { 
				event.stop();
				event.stopPropagation();

				if(e.getParent().hasClass('selected'))
				{
					return false;
				}

				var id = el.getPrevious('input[type="hidden"]').get('id');
				var selectedEl = el.getElement('li.selected');
				var selectedLang = selectedEl.getElement('a').get('href').replace(/.+?\#/, '');
				var clickedLang = e.get('href').replace(/.+?\#/, '')

				selectedEl.removeClass('selected');
				e.getParent('li').addClass('selected');

				$(id + '_'  + selectedLang).addClass('d-none');
				$(id + '_'  + clickedLang).removeClass('d-none');
				dontBlur = false;
				$(id + '_'  + clickedLang).focus();
			});
		});
	});
}

var showlangtabs = function (el)
{
	var e = $(el);
	var tabs = e.getPrevious('.multilang-tabs');
	tabs.removeClass('d-none');
}

var hidelangtabs = function (el)
{
	if(!dontBlur)
	{
		var e = $(el);
		var tabs = e.getPrevious('.multilang-tabs');
		tabs.addClass('d-none');
	}
}
