/**
 * Javascript for Form edit
 * @author DaVee
 * @version 0.796
 * @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();});
	}
}

/**
 * Podpurne funkce pro formulare
 */
function lastID () {
	var max = 1;
	$("input[name^='form_unique_id']").each( function (i) {
		var string = $(this).attr("name");
		var num = parseInt((string.substr(15, string.length - 16)));
		if (num > max) max = num;
	});
	return (max+1);
}
function formAappend (element,form) {
	var button = '<input class="rsib-del" type="button" name="delete" onclick="formDel(this)" value="Smaž záznam" />';
	var input = $('<div class="multi-record">' + form + button + '</div>');
	input.hide();
	input.insertBefore($(element));
	input.slideDown("normal");
}
function formDel (element) {
	var parent = $(element).parent(".multi-record");
	var idRow = $(parent).children("input[name^='form_unique_id']")[0];
	if ($(idRow).val() != "") {
		var length = ($(idRow).attr("name")).length;
		var begin = ($(idRow).attr("name")).indexOf("[");
		var idForm = ($(idRow).attr("name")).substr(begin + 1, length - begin - 2);
		var answer = confirm("Opravdu si p\u0159ejete odstranit tento záznam ?");
		if (answer) { // IE bug
			$(parent).slideUp("normal", function () {
				$(parent).append('<input type="hidden" name="delete-subform['+idForm+']" value="'+$(idRow).attr("value")+'" />');
			});
			$(parent).parent().children("button[name^='addnext']").show();
		}
	}
	else {
		$(parent).slideUp("normal", function () {$(parent).remove();});
		$(parent).parent().children("button[name^='addnext']").show();
	}
	return false;
}
function formDelFile (element) {
	var name = $(element).attr('name');
	var parent = $(element).parent("p");
	parent.children(".form-preview").each( function() {$(this).remove();});
	$(element).remove();
	$(parent).append('<input type="hidden" name="'+name+'" value="1" />');
	return false;
}

/**
 * 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).val() == "" && $(inpFrom).val() != "") {
				var duplicate = $(inpFrom).val();
				if ($(inpTo).attr("maxlength") != undefined && $(inpTo).attr("maxlength") > 0) {
					duplicate = duplicate.substr(0, $(inpTo).attr("maxlength"));
				}
				$(inpTo).val(duplicate);
			}
		}
		// 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).attr('disabled','disabled');
			});
			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);
	};
