//<?php
/**
*	Ochrana před opakovaným odesíláním požadavků na server
*
*	Zabraňuje opakovanému odeslání požadavku na stránku na prevent_double_click milisekund
*	Změní value <input type="submit"> na submit_value_processing
*
*	Po opakovaném požadavku na stejnou stránku
*	zobrazí na loading_message_timeout milisekund HTML element s id LoadingPageId
*
*	Neexistuje-li LoadingPageId a existuje-li LoadingPageAlt, pak se zobrazí alert(LoadingPageAlt)

*	DOPORUČENÍ:
*	v PHP volat co nejdříve session_write_close();
*	(	jinak se po kliknutí na long-page.php a
*		rychlé změně názoru a kliknutí na short-page.php
*		na serveru stejně čeká na celé zpracování long-page.php
*		Tento problém není ovlivněn funkcí prevent-double-click.js
*	)
*
*	@package    JavaScript
*	@author     Josef Doležal <josef.dolezal@abeo.cz>
*	@author     Jan Mazánek <jan.mazanek@abeo.cz>
*	@copyright  1997-2005 Abeo s.r.o.
*	@since      20050222, version 1.22.123
*	@todo       20050313, jamaz;To:Dolo: ošetření chybových stavů
*	@internal   charset: UTF-8
*	@version    SVN: $Id: prevent-double-click.js 7330 2007-08-11 19:25:57Z jan-mazanek $
*/

/**
*/

//	Konfigurovatelné:
var prevent_double_click_timeout=8000;
var loading_message_timeout=1500;
var LoadingPageId='LoadingPage';
var LoadingPageAlt='Okamžik prosím...\r\n...stránka se načítá\r\n\r\nPlease wait...\r\n...page is loading';
var submit_value_processing='Odesílám...';

//	Vlastní kód (neměnit)
var previously_disabled_element=false;
var prevent_double_click=false;
var loading_message=false;
//P1	var submit_value_original=false;

function RegisterOnClickDisable()
{	//	Registers HandleOnClick to capture every onclick event
	if(document.captureEvents) {
		document.captureEvents(Event.CLICK);
	}
	document.onclick = HandleOnClick;
	return true;
}
		
function HandleOnClick(event)
{	//	triggers PreventDoubleClick
	//	if onclick was on <a href> or <input type="submit"> or <input type="image">
	if(!event) {
		var event = window.event;
	}
	var target=(event.target) ? event.target : event.srcElement
	//	Detekce, jestli je některý z parent elementů <a> nebo <input>
	var current=target;
	var tagName=false;
	var message='Event: ' + event;
	do {
		if(current.tagName) {
			tagName=current.tagName;
			tagName=tagName.toUpperCase();
		}else{
			if(self.routeEvent) {
				//	Info: Netscape 4;http://www.quirksmode.org/js/events_netscape4.html
				routeEvent(event);
			}
			return true;
		}
		if(('A' == tagName) || ('INPUT' == tagName)) {
			return PreventDoubleClick(current, event);
		}
	}
	while(current=current.parentNode);
}

function PreventDoubleClick(element, event)
{	//	Disables element
	//	Test if element was already clicked
	if(previously_disabled_element) {
		//	some object was previously disabled by this function
		if(	(element.href && previously_disabled_element.href && (element.href==previously_disabled_element.href)) ||
			(	element.type && previously_disabled_element.type && 
				(element.name==previously_disabled_element.name) &&
				(('SUBMIT'==element.type.toUpperCase()) || ('IMAGE'==element.type.toUpperCase()))
			)
		) {	//	The same element was clicked
			if(0<loading_message_timeout) {
				DisplayLoadingPage(event);
				loading_message=window.setTimeout('HideLoadingPage();', loading_message_timeout);
			}
			return false;
		}else{
			//	Different element was clicked
			HideLoadingPage();
			window.clearTimeout(prevent_double_click);
			//P1	if(submit_value_original) {
			//P1		previously_disabled_element.value=submit_value_original;
			//P1		submit_value_original=false;
			//P1	}
			previously_disabled_element=false;
		}
	}
	previously_disabled_element=element;
	if('SUBMIT'==element.type.toUpperCase()) {
		//P1	submit_value_original=element.value;
		element.value=submit_value_processing;
	}
	//P1	Je-li požadováno obnovení původního textu na submitu:
	//	previously_disabled_element.value=submit_value_original;submit_value_original=false;
	prevent_double_click=window.setTimeout('HideLoadingPage();previously_disabled_element=false;', prevent_double_click_timeout);
	return true;
}

function DisplayLoadingPage(event)
{	var LoadingPage=false;
	if(LoadingPage=document.getElementById(LoadingPageId)) {
		var s=LoadingPage.style;
		if (event.pageX || event.pageY) {
			s.left=event.pageX - parseInt(s.width)/2;
			LoadingPage.style.top=event.pageY - parseInt(s.height)/2;
		}
		else if (event.clientX || event.clientY) {
			s.left=event.clientX + document.body.scrollLeft - parseInt(s.width)/2;
			s.top=event.clientY + document.body.scrollTop - parseInt(s.height)/2;
		}
		s.display='block';
	}else{
		if(LoadingPageAlt) {
			alert(LoadingPageAlt);
		}
	}
	return true;
}

function HideLoadingPage()
{	var LoadingPage=false;
	if(LoadingPage=document.getElementById(LoadingPageId)) {
		LoadingPage.style.display='none';
	}
	return true;
}
RegisterOnClickDisable();
//?>