// function written by Dean Edwards, 2005
// with input from Tino Zijdel, Matthias Miller, Diego Perini

// http://dean.edwards.name/weblog/2005/10/add-event/

function addEvent(element, type, handler) {
	if (element.addEventListener) {
		element.addEventListener(type, handler, false);
	} else {
		// assign each event handler a unique ID
		if (!handler.$$guid) handler.$$guid = addEvent.guid++;
		// create a hash table of event types for the element
		if (!element.events) element.events = {};
		// create a hash table of event handlers for each element/event pair
		var handlers = element.events[type];
		if (!handlers) {
			handlers = element.events[type] = {};
			// store the existing event handler (if there is one)
			if (element["on" + type]) {
				handlers[0] = element["on" + type];
			}
		}
		// store the event handler in the hash table
		handlers[handler.$$guid] = handler;
		// assign a global event handler to do all the work
		element["on" + type] = handleEvent;
	}
};
// a counter used to create unique IDs
addEvent.guid = 1;

function removeEvent(element, type, handler) {
	if (element.removeEventListener) {
		element.removeEventListener(type, handler, false);
	} else {
		// delete the event handler from the hash table
		if (element.events && element.events[type]) {
			delete element.events[type][handler.$$guid];
		}
	}
};

function handleEvent(event) {
	var returnValue = true;
	// grab the event object (IE uses a global event object)
	event = event || fixEvent(((this.ownerDocument || this.document || this).parentWindow || window).event);
	// get a reference to the hash table of event handlers
	var handlers = this.events[event.type];
	// execute each event handler
	for (var i in handlers) {
		this.$$handleEvent = handlers[i];
		if (this.$$handleEvent(event) === false) {
			returnValue = false;
		}
	}
	return returnValue;
};

function fixEvent(event) {
	// add W3C standard event methods
	event.preventDefault = fixEvent.preventDefault;
	event.stopPropagation = fixEvent.stopPropagation;
	return event;
};
fixEvent.preventDefault = function() {
	this.returnValue = false;
};
fixEvent.stopPropagation = function() {
	this.cancelBubble = true;
};
//----- end of Dean Edward's code

// Validate generic field
function validateField(field) {
  if(field.nodeName.toUpperCase() == "BUTTON")
    return true;

  if((new RegExp("(^|\\s)required(\\s|$)")).test(field.className)){
    if(field.value == "") {
      alert("Nevyplněné povinné pole. Prosím doplňte.");
      return false;
    }
  }

  if(((new RegExp("(^|\\s)email(\\s|$)")).test(field.className))&&(field.value!="")){
    if(!((new RegExp("^[\\w-_\.+]*[\\w-_\.]\@([\\w]+\\.)+[\\w]+[\\w]$")).test(field.value))) {
      alert("Špatně vyplněný e-mail. Prosím opravte.");
      return false;
    }
  }

  if(((new RegExp("(^|\\s)telephone(\\s|$)")).test(field.className))&&(field.value!="")){
    if(!((new RegExp("^([+]?)([0-9\x20]*)$")).test(field.value))) {
      alert("Špatně vyplněný telefon. Prosím opravte.");
      return false;
    }
  }

  if(((new RegExp("(^|\\s)integer(\\s|$)")).test(field.className))&&(field.value!="")){
    if(!((new RegExp("^([+-]?)([0-9]+)$")).test(field.value))) {
      alert("Špatně vyplněné číslo. Prosím opravte.");
      return false;
    }
  }

  if(((new RegExp("(^|\\s)date(\\s|$)")).test(field.className))&&(field.value!="")){
    if(!((new RegExp("^([0-2][1-9]|[1-9]|30|31)\.(0[1-9]|1[012]|[1-9])\.([1-2][0-9][0-9][0-9])$")).test(field.value))) {
      alert("Špatně vyplněné datum. Prosím opravte.");
      return false;
    }
  }

  if(((new RegExp("(^|\\s)float(\\s|$)")).test(field.className))&&(field.value!="")){
    if(!((new RegExp("^[+-]?([0-9]+)(\.[0-9]+)?$")).test(field.value))) {
      alert("Špatně vyplněné číslo. Prosím opravte.");
      return false;
    }
  }

  return true;
}

// Validate generic form
function validateForm(e) {
  var valid = true;
  var form=this;
  for(var i=0; i<form.elements.length; i++){
    if(!validateField(form.elements[i]))
      valid = false;
  }
  if(!valid) {
    if (e.preventDefault) e.preventDefault();
	  else e.returnResult = false;
		if (e.stopPropagation) e.stopPropagation();
		else e.cancelBubble = true;
  }
  return valid;
}

// Runs on page load
function addAllTheStuff() {
  // Add validation to forms
  var forms = document.getElementsByTagName("form");
  for(var i=0; i<forms.length; i++) {
    addEvent(forms[i], "submit", validateForm, false);
  }
}

// Framekiller (anticlickjacking)
if (top != self) {
  top.location.replace(self.location.href)
}

// Start "addAllTheStuff" when DOM is ready
var alreadyrunflag=0 //flag to indicate whether target function has already been run
if (document.addEventListener)
  document.addEventListener("DOMContentLoaded", function(){alreadyrunflag=1; addAllTheStuff()}, false)
else if (document.all && !window.opera){
  alreadyrunflag = 1
  addAllTheStuff()
}
window.onload=function(){
  setTimeout("if (!alreadyrunflag){addAllTheStuff()}", 0)
}
