/**
 * Javascript pro praci se vstupnimi poli
 * @author DaVee
 * @version 0.7938
 * @license under WTFPL 2.0
 */

/**
 * pomocná funkce pro dedeni
 */
var extend = function(child, parent) {
    var F = function() {};
    F.prototype = parent.prototype;
    child.prototype = new F();
    child._super = parent.prototype;
    child.prototype.constructor = child;
};

/**
 * Languages
 */
var Lang = {
	parent: false,
	langs: new Array(),

	init: function (parent, langs, select) {
		this.parent = parent;
		this.langs = langs;
		if (select != false) this.show("a#lang-chooser-link" + select, select);
		else this.showAll($(parent).find("a").last());
	},
	hide: function () {
		for (var i in this.langs) {
			$("#mainForm input[name*='"+this.langs[i]+"']").each ( function () { $(this).parent().hide(); });
			$("#mainForm select[name*='"+this.langs[i]+"']").each ( function () { $(this).parent().hide(); });
			$("#mainForm textarea[name*='"+this.langs[i]+"']").each ( function () {	$(this).parent().hide(); });
		}
	},
	show: function (button, mark) {
		this.hide();
		$(this.parent).find("a").removeClass("select");
		$(button).addClass("select");
		$("#mainForm input[name*='"+mark+"']").each ( function () { $(this).parent().show(); });
		$("#mainForm select[name*='"+mark+"']").each ( function () { $(this).parent().show(); });
		$("#mainForm textarea[name*='"+mark+"']").each ( function () { $(this).parent().show(); });
	},
	showAll: function (button) {
		$(this.parent).find("a").removeClass("select");
		$(button).addClass("select");
		$("#mainForm input").each ( function () { $(this).parent().show(); });
		$("#mainForm select").each ( function () { $(this).parent().show(); });
		$("#mainForm textarea").each ( function () { $(this).parent().show(); });
	}
}

/**
 * Formular
 */
var jForm = {
	mode: 'alert',
	inputs: new Array(),
	duplicates: new Array(),

	create: function (form) {
		$("#"+form).submit( function() {
			var bool = jForm.check();
			return bool;
		});
	},

	check : function () {
		var error = new Array();
		// duplikace obsahu
		for (i = 0; i < this.duplicates.length; i++) {
			var inpFrom = this.duplicates[i][0];
			var inpTo = this.duplicates[i][1];
			if ($("#"+inpTo).attr('value') == "" && $("#"+inpFrom).attr('value') != "") $("#"+inpTo).attr('value',$("#"+inpFrom).attr('value'));
		}
		// kontrola vstupnich poli
		for (i = 0; i < this.inputs.length; i++) {
			var parent = $("#"+this.inputs[i].mark).parent().parent(".multi-record");
			if ($(parent).css("display") != "none") {
				this.inputs[i].load();
				var erMessage = this.inputs[i].isInvalid();
				if (erMessage !== false) error.push(erMessage);
			}
		}
		// hlaseni
		if (error.length == 0) {
			// odstraneni prazdnych vstupnich poli - MAX_FILE_UPLOAD
			$('input:file').each( function () {
				if ($(this).val() == "") $(this).remove();
			});
			return true;
		//	formUpload();
		}
		else {
			alert ("Chyba ve formulá\u0159i:\n" + error.join("\n"));
		}
		return false;
	},

	addInput: function (input) {
		this.inputs.push(input);
	},

	addDuplicate: function (from, to) {
		this.duplicates.push(new Array(from,to));
	},

	update: function () {
		var marks = new Array();
		var data = new Array();

		for (var input in this.inputs) {
			marks.push($('#'+input.mark).attr('name'));
			data.push($('#'+input.mark).attr('value'));
		}
		alert('nacteno'+marks.length);
		return false;
	}
}


/**
 * Generic Input
 */
var jInput = function (mark, name, empty) {
		this.mark = mark;
		this.name = name;
		this.value = "";
		this.error = Array();
		if (!empty) this.error['EMPTY'] = "";
	}
	jInput.prototype.gName = function () {
		return this.name;
	}
	jInput.prototype.gMark = function () {
		return this.mark;
	}
	jInput.prototype.getVal = function () {
		return this.value;
	}
	jInput.prototype.setVal = function (value) {
		this.value = value;
	}
	jInput.prototype.gError = function (type) {
		if (this.error[type] !== undefined) return this.error[type];
		return false;
	}
	jInput.prototype.load = function () {
		this.value = $("#"+this.mark).val();
	}
	jInput.prototype.addError = function (sign,message) {
		this.error[sign] = message;
	};
	jInput.prototype.isInvalid = function () {
		if (this.error["EMPTY"] !== undefined && this.value == "") {
			if (this.error["EMPTY"] != "") return this.error["EMPTY"];
			return "Pole '"+this.name+"' je prázdné.";
		}
		return false;
	};

/**
 * Text Input
 */
var jInputText = function (mark, name, empty) {
		jInput.call(this, mark, name, empty);
	}
	extend(jInputText, jInput);

/**
 * Number Input
 */
var jInputNumber = function (mark, name, empty) {
		jInputText.call(this, mark, name, empty);
	}
	extend(jInputNumber, jInputText);

	jInputNumber.prototype.isInvalid = function () {
		var num = /^-{0,1}\d*\.{0,1}\d+$/;
		var value = (jInputNumber._super.getVal.call(this)).replace(/ /g,'').replace('+','').replace(',','.');
		var error = jInputNumber._super.gError.call(this, "NUMBER");

		if (value != "" && !num.test(value)) {
			if (error !== false) return error;
			return "Pole '"+ ( jInputNumber._super.gName.call(this) ) +"' není \u010díslo.";
		}
		return jInputNumber._super.isInvalid.call(this);
	};

/**
 * Mail Input
 */
var jInputMail = function (mark, name, empty) {
		jInputText.call(this, mark, name, empty);
	}
	extend(jInputMail, jInputText);

	jInputMail.prototype.isInvalid = function () {
		var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
		var value = jInputMail._super.getVal.call(this);
		var error = jInputMail._super.gError.call(this, "MAIL");

		if (value != "" && !reg.test(value)) {
			if (error !== false) return error;
			return "Pole '"+ ( jInputMail._super.gName.call(this) ) +"' není e-mailová adresa.";
		}
		return jInputMail._super.isInvalid.call(this);
	};

/**
 * TinyMCE Input
 */
var jInputHTML = function (mark, name, empty) {
		jInputText.call(this, mark, name, empty);
	}
	extend(jInputHTML, jInputText);

	jInputHTML.prototype.load = function () {
		jInputHTML._super.setVal.call(this, tinyMCE.get( jInputHTML._super.gMark.call(this) ).getContent() );
	}

/**
 * CheckBox Input
 */
var jInputCheck = function (mark, name, empty) {
		jInput.call(this, mark, name, empty);
	}
	extend(jInputCheck, jInput);

	jInputCheck.prototype.load = function () {
		if ($("#"+jInputCheck._super.gMark.call(this)).attr('checked')) jInputCheck._super.setVal.call(this,"check");
		else jInputCheck._super.setVal.call(this,"");
	}

/**
 * Date Input (JQuery UI)
 */
var jInputDate = function (mark, name, empty) {
		jInput.call(this, mark, name, empty);
	}
	extend(jInputDate, jInput);

	jInputDate.prototype.datepicker = function (link, format, para) {
		var parameter = para != "" ? para : {showOn: 'button', buttonImage: link+'style/jquery/calendar.gif',
			buttonImageOnly: true, dateFormat: format, changeMonth: true, changeYear: true, yearRange: '-80:+10'};
		$("#"+jInputDate._super.gMark.call(this)).datepicker(parameter);
	}

	jInputDate.prototype.option = function (name, value) {
		$("#"+jInputDate._super.gMark.call(this)).datepicker( "option", name, value);
	}

/**
 * Time Input
 */
var jInputTime = function (mark, name, empty) {
		jInput.call(this, mark, name, empty);
	}
	extend(jInputTime, jInput);

	jInputTime.prototype.isInvalid = function () {
		var num = /^([0-9]{0,2}[\:]{0,1})+$/;
		var value = (jInputTime._super.getVal.call(this)).replace(/ /g,'').replace('.',':');
		var error = jInputTime._super.gError.call(this, "NUMBER");

		if (value != "" && !num.test(value)) {
			if (error !== false) return error;
			return "Pole '"+ ( jInputTime._super.gName.call(this) ) +"' není \u010das.";
		}
		return jInputTime._super.isInvalid.call(this);
	};

/**
 * File Input
 */
var jInputFile = function (mark, name, empty) {
		jInput.call(this, mark, name, empty);
	}
	extend(jInputFile, jInput);

/**
 * Color Picker Input
 */
var jInputColor = function (mark, name, empty) {
		$("#"+mark).ColorPicker({
			color: "#"+$("#"+mark).val(),
			onShow: function (colpkr) {
				$(colpkr).fadeIn(500);
				return false;
			},
			onHide: function (colpkr) {
				$(colpkr).fadeOut(500);
				return false;
			},
			onChange: function (hsb, hex, rgb) {
				$("#"+mark).val(hex);
			},
			onSubmit: function(hsb, hex, rgb) {
				$("#"+mark).val(hex);
			}
		}).bind('keyup', function(){
			$(this).ColorPickerSetColor(this.value);
		});
		jInput.call(this, mark, name, empty);
	}
	extend(jInputColor, jInput);

	jInputColor.prototype.isInvalid = function () {
		var mask = /^([0-9a-f]{3,6})+$/;
		var value = (jInputColor._super.getVal.call(this)).replace(/ /g,'');
		var error = jInputColor._super.gError.call(this, "COLOR");

		if (value != "" && !mask.test(value)) {
			if (error !== false) return error;
			return "Pole '"+ ( jInputColor._super.gName.call(this) ) +"' není barva v hexa tvaru.";
		}
		return jInputColor._super.isInvalid.call(this);
	};
