
/* MODULES */

Comments = {
	highlightField : function(elm, no_focus) {
		var elm = $(elm);
		if(!no_focus) elm.focus();
		var eff = new Effect.Highlight(elm);
	},
	
	toggleError : function(elm, type, show) {
		var elm = $(elm);
		if(elm) {
			var errorElm = $(elm.id + '_' + type + '');
			var fieldElm = $(elm.id + '_field');
			if(errorElm) {
				if(show) {
					Element.addClassName(elm, 'fieldWithErrors');
					errorElm.style.display = 'inline'
					if(fieldElm) {
						Element.addClassName(fieldElm, 'fieldHolderWithErrors');
					}
				} else {
					Element.removeClassName(elm, 'fieldWithErrors');
					errorElm.style.display = 'none'
					if(fieldElm) {
						Element.removeClassName(fieldElm, 'fieldHolderWithErrors');
					}
				}
			}
		}
	},
	
	validateFields : function(elm) {
		var fields = [ 'identity_nickname', 'identity_remember', 'comment_body_src' ];
		var toggle = []
		var form = $('comment_form');
		// first check all fields
		for(var i = 0; i < fields.length; i++) {
			field = $(fields[i]);
			if(field && (field.getAttribute('type') != 'hidden')) {
				if(fields[i] == 'identity_remember') {
					if(field.checked) {
						var email = $('identity_email');
						if(email) {
							Comments.toggleError(email, 'empty', false);
							Comments.toggleError(email, 'format', false);
						}
						if(email.value == '') {
							toggle.push([ email, 'empty' ])
						} else {
							if(!email.value.match(/^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i)) {
								toggle.push([ email, 'format' ])
							}
						}
					}
				} else {
					Comments.toggleError(field, 'empty', false);
					if(field.value == '') {
						toggle.push([field, 'empty'])
					}
				}
			}
		}
		
		if(toggle.length > 0) {
			if((toggle.length == 1) && (toggle[0][0].id == 'identity_email') && (toggle[0][1] == 'empty')) {
				if(confirm('Zaškrtli ste políčko "Zabezpeč a zapamätaj", ale nevyplnili ste e-mailovú adresu.\nChcete sa vrátiť a e-mail vyplniť?')) {
					Comments.highlightField(toggle[0][0]);
					Comments.toggleError(toggle[0][0], toggle[0][1], true);
					return false;
				} else {
					$('identity_remember').checked = false;
				}
			} else {
				toggle[0][0].focus();
				Element.addClassName(form, 'formWithErrors')
				for(var i = toggle.length-1; i >= 0; i--) {
					setTimeout('Comments.highlightField("'+toggle[i][0].id+'", true);', 200*(toggle.length - i));
					setTimeout('Comments.toggleError("'+toggle[i][0].id+'", "'+toggle[i][1]+'", true);', 200*(toggle.length - i));
				}
				return false;
			}
		} else {
			Element.removeClassName(form, 'formWithErrors')
		}
		return true;
	},
	
	toggleEmail : function (highlight) {
		var checkbox = $('identity_remember');
		if(checkbox.checked) {
			Element.show('identity_remember_sub');
			if(highlight == true) {
				Comments.highlightField('identity_email');
			}
		} else {
			Element.hide('identity_remember_sub'); 
		}
	},

	onMinutesChange : function (elm) {
		var eff = new Effect.Highlight(elm);
		if(Element.hasClassName(elm, 'minutes_critical')) {
			elm.innerHTML =  highlight(elm, quant(elm.minutes_left, 'zostáva %s minúta', 'zostávajú %s minúty', 'zostáva %s minút') );
		} else {
			elm.innerHTML = highlight(elm, '(' + quant(elm.minutes_left, 'zostáva %s minúta', 'zostávajú %s minúty', 'zostáva %s minút') + ')');
		}
	},
	
	onTimeOut : function (elm) {
		if(Element.hasClassName(elm, 'minutes_critical')) {
			elm.innerHTML = '<strong class="red">čas vypršal</strong>';
		} else {
			var new_node = document.createElement('strong');
			new_node.className = 'action red small';
			elm.parentNode.parentNode.replaceChild(new_node, elm.parentNode);
			new_node.appendChild(document.createTextNode('čas na úpravy vypršal'));
		}
	}

}


Common = {
  showAsBlocks: function() {
    for (var i = 0; i < arguments.length; i++) {
      var element = $(arguments[i]);
      element.style.display = 'block';
    }
  }
}

/* INITS */

function init_MinutesCountdown() {
	// todo: add try..catch statement
	if(MinutesCountdown) {
		MinutesCountdown.init(Comments.onMinutesChange, Comments.onTimeOut);
	}
}

Event.observe(window, 'load', init_MinutesCountdown)

/* UTILS */
function quant(number, single, two_to_four, five) {
	if(number == 1) {
		return single.replace('%s', number);
	} else if((number > 1) && (number < 5)) {
		return two_to_four.replace('%s', number);
	}
	return five.replace('%s', number);
}

function highlight(elm, string) {
	if(elm.minutes_left < 5) {
		//var eff = new Effect.Highlight(elm);
		return '<strong class="red">' + string + '</strong>';
	}
	return string;
}

Object.extend(Element, {
	toggleClassName : function(element, className) {
		if(Element.hasClassName(element, className)) {
			Element.removeClassName(element, className)
		} else {
			Element.addClassName(element, className)
		}
	}
});