/**
 * Orizne mezery ze zacatku textu a konce textu
 * 
 */
function trim( parText ) 
{
	return ltrim( rtrim( parText ) );
}


/**
 * Orizne mezery ze zacatku textu
 * 
 */
function ltrim( parText ) 
{
	return parText.replace(/^\s+/,"");
}


/**
 * Orizne mezery z konce textu
 * 
 */
function rtrim( parText ) 
{
	return parText.replace(/\s+$/,"");
}


/**
 * Zformatuje castku pro default. menu
 *
 */
function formatDefaultCurrency( parQuantity, parParams )
 {
 	// test na lokalni / mezinarodni zobrazeni 
	if( languageCurrent == languageDefault ) {
		var locate = 1;
	} else {
		var locate = 2;
	}
 	
 	var format = new Format( );
 	var strRet = format.money( parQuantity, currencyCodeDefault, locate, parParams ); 
 	return strRet;
 }


/**
 * Zformatuje castku pro alternativni menu
 *
 */
function formatAlternativeCurrency( parQuantity, parParams )
 {
 	// test na lokalni / mezinarodni zobrazeni 
	if( languageCurrent == languageDefault ) {
		var locate = 1;
	} else {
		var locate = 2;
	}
 	
 	 if( currencyCodeAlternative != null && currencyCourseAlternative != null && currencyCourseAlternative > 0 ) {
		var format = new Format( );
		
		// test na null hodnotu
		var quantityCourseAlternative = null;
		if( parQuantity != null ) {
			quantityCourseAlternative = parQuantity / currencyCourseAlternative; 
		}
		
 		var strRet = format.money( quantityCourseAlternative, currencyCodeAlternative, locate, parParams ); 
 		return strRet;
	} else return "";
 }


/**
 * Vrati opakujici se retezec
 * 
 * @param	string	parInput
 * @param	integer	parMultiplier
 * 
 * @return	string	retezec	
 * 
 */
function strRepeat( parInput, parMultiplier )
{
	var strRet = "";
	for( var i = 0; i < parMultiplier; i++ ) {
		strRet += parInput; 
	}
	return strRet;
} 



/**
 * Doplni retezec na pozadovanou delku jinym retezcem
 * 
 * @param	string	parInput
 * @param	integer	parPadLength
 * @param	string	parPadString
 * @param	integer	parPadType	= 1 - zleva
 * 								= 2 - zprava
 * @return	string	zformatovany retezec
 * 
 */
function strPad( parInput, parPadLength, parPadString, parPadType )
{
	var parInput = parInput + "";
	var doplnek = strRepeat( parPadString, parPadLength - parInput.length );
	
	if( parPadType == 1 ) {
		return doplnek + parInput;
	} else {
		return parInput + doplnek;
	}
}

	
/**
 * Zformatuje cislo
 * 
 * @param	float	parNumber - vstupni cislo
 * @param	integer	parDecimal - pocet desetinnych mist
 * @param	string	parDecPoint - oddelovac desetinnych mist 
 * @param	string	parThousandSep - oddelovac tisicu
 *  
 * @return	string zformatovany retezec
 * 
 */	
function numberFormat( parNumber, parDecimal, parDecPoint, parThousandSep )
{
	// zakladni zformatovani cisla
	if( parDecimal == 0 ) {
		parNumber = Math.round( parNumber );
	}
	parNumber = parNumber.toString( ).replace( /\$|\,/g, '' );
	
	// test na nulu
	if( isNaN( parNumber ) ) parNumber = "0";
	
	// znamenko
	var sign = ( parNumber == ( parNumber = Math.abs( parNumber ) ) );
	
	// desetinna mista
	// test na pocet des. mist
	if( parDecimal != 0 ) {
		// koeficient pro presnost - 10, 100, 1000, ...
		var decimalCoeff = 1 + strRepeat( "0", parDecimal );
		//alert( parDecimal );
		parNumber = Math.floor( parNumber * decimalCoeff + 0.50000000001 );
		var decimal = parNumber % decimalCoeff;
		parNumber = Math.floor( parNumber / decimalCoeff ).toString( );
		decimal = strPad( decimal, parDecimal, "0", 1 );
	} else {
		// zadne des. misto
		var decimal = "";
		parDecPoint = "";
	}
	
	// zformatovani tisicu
	for ( var i = 0; i < Math.floor( ( parNumber.length - ( 1 + i ) ) / 3 ); i++ ) {
		parNumber = parNumber.substring( 0, parNumber.length - ( 4 * i + 3 ) ) + parThousandSep + parNumber.substring( parNumber.length - ( 4 * i + 3 ) );
	}
	
	return ( ( ( sign ) ? '' : '-' ) + parNumber + parDecPoint + decimal );
}

	
	
/**
 * Provadi konverzi formatu
 * 
 */	

function Format( )
{
	
	/**
	 * Prevadi ciselnou hodnotu na retezec, predstavujici menu
	 *
	 * @param number parAmount - castka [ 123 , 123,45 ]
	 * @param string parCurrency - kod meny [ CZK, SKK, ... ]
	 * @param integer parLocate = 1 - lokalni nastaveni
	 * 							= 2 - mezinarodni nastaveni  
	 * @param array parParams	- dalsi parametry
	 * 
	 * 
	 * @return string zformatovany retezec
	 * 
	 * kodovani utf-8
	 * 
	 * name frac_len thou_sep dec_sep space_sep utf_sym htm_sym com_sym pre 
	 * CZK => ["Czech Koruna",2,".",","," ",$EMPTY,$EMPTY,"Kc",0],
	 * EUR => ["Euro",2,".",",","","\x{20AC}","&#x20AC;","EUR",1],
	 * SKK => ["Slovak Koruna",2," ",","," ",$EMPTY,$EMPTY,"Sk",0],
	 * 
	 * 	"name" => "Czech Koruna",		// jmeno 
	 *	"decimal_point" => ",",			// oddelovac des. mist
     *	"thousands_sep" => " ",			// oddelovac tisicu
	 *	"int_curr_symbol" => "CZK",		// mezinarodni symbol meny
	 *	"currency_symbol" => "Kc",		// lokalni symbol meny
	 * 	"curr_symbol_show" => 			// priznak, zda se ma zobrazit symbol meny
	 * 							= null - zobrazi symbol podle akt. jazyka ( lokalni / mezinarodni )
	 * 							= 0 - nezobrazi zadny symbol
	 *			 				= 1 - zobrazi lokalni symbol meny
	 * 							= 2 - zobrazi mezinarodni symbol meny
	 *	"p_sign" => "",					// znamenko pro kladne hodnoty
	 *	"n_sign" => "-",				// znamenko pro zaporne hodnoty
	 *	"int_frac_digits" => 2,			// mezinarodni pocet desetinnych mist
	 * 	"int_frac_symbol" => ",-",		// mezinarodni symbol desetinnych mist
	 *	"frac_digits" => 2,				// lokalni pocet desetinnych mist
	 * 	"frac_symbol" => "-",			// mezinarodni symbol desetinnych mist
	 *	"p_cs_precedes" => true,		// priznak pro kladne hodnoty, zda se ma zobrazit symbol meny
	 *	"p_sep_by_space" => true,		// priznak pro kladne hodnoty, zda se ma mezi symbol meny a hodnotu vlozit mezera
	 * 	"n_cs_precedes" => true,		// priznak pro zaporne hodnoty, zda se ma zobrazit symbol meny
	 *	"n_sep_by_space" => true,		// priznak pro zaporne hodnoty, zda se ma mezi symbol meny a hodnotu vlozit mezera
	 *	"p_sign_posn" => 1,				// pro kladne hodnoty urcuje polohu symbolu ceny a znamenka 
	 *									// 1 - + 123,45 Kc
	 *									// 2 - +123,45 Kc
	 *									// 3 - Kc + 123,45
	 *									// 4 - Kc +123,45
	 *	"n_sign_posn" => 2,				// pro zaporne hodnoty urcuje polohu symbolu ceny a znamenka
	 * 									// 1 - - 123,45 Kc
	 * 									// 2 - -123,45 Kc
	 * 									// 3 - Kc - 123,45
	 *									// 4 - Kc -123,45
	 *	"brace_symbol" => 1,			// lokalni zobrazeni zavorek
	 * 									// 0 - zadne zavorky
	 * 									// 1 - ( )
	 * 									// 2 - [ ]
	 * 									// 3 - { }
	 * 									// 4 - / / 
	 *	"int_brace_symbol" => 1,		// mezinarodni zobrazeni zavorek
	 * 									// 0 - zadne zavorky
	 * 									// 1 - ( )
	 * 									// 2 - [ ]
	 * 									// 3 - { }
	 * 									// 4 - / /
	 * 
	 * 
	 *
	function money( $parQuantity = null, $parCurrency, $parLocate = 1, $parParams = array( "curr_symbol_show" => true, "brace_symbol" => 0 ) )
	{*/
	this.money = function( parQuantity , parCurrency, parLocate, parParams )
	{
		// definice formatu jednotlivych men
		var currency = {	"CZK" : {	"name" : "Czech Koruna", 
										"decimal_point" : ",",
										"thousands_sep" : " ",
										"int_curr_symbol" : "Kč",
										"currency_symbol" : "Kč",
										"curr_symbol_show" : null,
										"p_sign" : "",
										"n_sign" : "-",
										"int_frac_digits" : 0,
										"int_frac_symbol" : ",-",
										"frac_digits" : 0,
										"frac_symbol" : ",-",
										"p_cs_precedes" : true,
										"p_sep_by_space" : true,
										"n_cs_precedes" : true,
									    "n_sep_by_space" : true,
									    "p_sign_posn" : 2,
									    "n_sign_posn" : 2,
										"brace_symbol" : 0,
										"int_brace_symbol" : 0
								 },
							"EUR" : {	"name" : "Euro",
										"decimal_point" : ",",
							    		"thousands_sep" : " ",
									    "int_curr_symbol" : "€",
									    "currency_symbol" : "€",
					 					"curr_symbol_show" : null,
									    "mon_decimal_point" : "",
									    "mon_thousands_sep" : "",
									    "p_sign" : "",
									    "n_sign" : "-",
									    "int_frac_digits" : 2,
					 					"int_frac_symbol" : "",
									    "frac_digits" : 2,
					 					"frac_symbol" : "",
									    "p_cs_precedes" : true,
									    "p_sep_by_space" : false,
									    "n_cs_precedes" : true,
									    "n_sep_by_space" : true,
									    "p_sign_posn" : 2,
									    "n_sign_posn" : 2,
					 					"brace_symbol" : 0,
										"int_brace_symbol" : 0
							 	},
							"SKK" : {	"name" : "Slovak Koruna",
										"decimal_point" : ",",
							    		"thousands_sep" : " ",
									    "int_curr_symbol" : "SKK",
									    "currency_symbol" : "Sk",
					 					"curr_symbol_show" : null,
									    "mon_decimal_point" : "",
									    "mon_thousands_sep" : "",
									    "p_sign" : "",
									    "n_sign" : "-",
									    "int_frac_digits" : 2,
					 					"int_frac_symbol" : "",
									    "frac_digits" : 2,
					 					"frac_symbol" : "",
									    "p_cs_precedes" : true,
									    "p_sep_by_space" : true,
									    "n_cs_precedes" : true,
									    "n_sep_by_space" : true,
									    "p_sign_posn" : 2,
									    "n_sign_posn" : 2,
					 					"brace_symbol" : 0,
										"int_brace_symbol" : 0
							 	}
							};
							
		
		// pretizeni default. atributu vstupnimi parametry
		for( var key in parParams ) {
			currency[parCurrency][key] = parParams[key];
		}
		
		// test na kladne cislo
		flSign = 0;
		if( parQuantity > 0 ) flSign = 1;
		if( parQuantity < 0 ) flSign = -1;
		
		// zformatovani cisla
		quantityFormat = "";
		if( parQuantity != null ) {
			quantityFormat = numberFormat( Math.abs( parQuantity ), currency[parCurrency]["int_frac_digits"], currency[parCurrency]["decimal_point"], currency[parCurrency]["thousands_sep"] );
		}
		
		// test na symbol za desetinnou carkou misto cisel
		if( parQuantity != null ) {
			if( parLocate == 1 ) {
				// lokalni symbol
				quantityFormat += currency[parCurrency]["frac_symbol"]; 
			} else {
				// mezinarodni symbol
				quantityFormat += currency[parCurrency]["int_frac_symbol"];
			}
		}
		
		// test na symbol ceny
		switch( currency[parCurrency]["curr_symbol_show"] ) {
			case 0:		// zadny symbol
						currencySymbol = "";
						break;
			case 1:		// mistni symbol
						currencySymbol = currency[parCurrency]["currency_symbol"];
						break;
			case 2:		// mezinarodni symbol
						currencySymbol = currency[parCurrency]["int_curr_symbol"];
						break;
			case null:	// symbol podle parLocate ( mistni / mezinarodni )
			default:
						if( parLocate == 1 ) {
							// mistni symbol
							currencySymbol = currency[parCurrency]["currency_symbol"];
						} else if( parLocate == 2 ) {
							// mezinarodni symbol
							currencySymbol = currency[parCurrency]["int_curr_symbol"];
						}
						break;
		}
		
		// seskupeni a zformatovani znamenka a cisla a symbolu meny
		switch( flSign ) {
			case 1:		// kladne cislo
						switch ( currency[parCurrency]["p_sign_posn"] ) {
							case 1:	returnStr = currency[parCurrency]["p_sign"]
									 + " " + quantityFormat
									 + ( currency[parCurrency]["p_cs_precedes"] == true ?
											( currency[parCurrency]["p_sep_by_space"] == true ? " " : "" )
											 + currencySymbol
										: "" );
									break;
							case 2:	returnStr = currency[parCurrency]["p_sign"]
									 + quantityFormat
									 + ( currency[parCurrency]["p_cs_precedes"] == true ?
											( currency[parCurrency]["p_sep_by_space"] == true ? " " : "" )
											 + currencySymbol
										: "" );
									break;
							case 3:	returnStr = 
										( currency[parCurrency]["p_cs_precedes"] == true ?
											currencySymbol
											 + ( currency[parCurrency]["p_sep_by_space"] == true ? " " : "" )
										: "" )
									 + currency[parCurrency]["p_sign"]
									 + " " + quantityFormat;
									break;
							case 4:	returnStr = 
										( currency[parCurrency]["p_cs_precedes"] == true ?
											currencySymbol
											 + ( currency[parCurrency]["p_sep_by_space"] == true ? " " : "" )
										: "" )
									 + currency[parCurrency]["p_sign"]
									 + quantityFormat;
									break;
						}	
						break;
			case -1:	// zaporne cislo
						switch ( currency[parCurrency]["n_sign_posn"] ) {
							case 1:	returnStr = currency[parCurrency]["n_sign"]
									 + " " + quantityFormat
									 + ( currency[parCurrency]["n_cs_precedes"] == true ?
											( currency[parCurrency]["n_sep_by_space"] == true ? " " : "" )
											 + currencySymbol
										: "" );
									break;
							case 2:	returnStr = currency[parCurrency]["n_sign"]
									 + quantityFormat
									 + ( currency[parCurrency]["n_cs_precedes"] == true ?
											( currency[parCurrency]["n_sep_by_space"] == true ? " " : "" )
											 + currencySymbol
										: "" );
									break;
							case 3:	returnStr = 
										( currency[parCurrency]["n_cs_precedes"] == true ?
											currencySymbol
											 + ( currency[parCurrency]["n_sep_by_space"] == true ? " " : "" )
										: "" )
									 + currency[parCurrency]["n_sign"]
									 + " " + quantityFormat;
									break;
							case 4:	returnStr = 
										( currency[parCurrency]["n_cs_precedes"] == true ?
											currencySymbol
											 + ( currency[parCurrency]["n_sep_by_space"] == true ? " " : "" )
										: "" )
									 + currency[parCurrency]["n_sign"]
									 + quantityFormat;
									break;
						}	
						break;	
			case 0:		// nula - bere se jako kladne cislo
						switch ( currency[parCurrency]["p_sign_posn"] ) {
							case 1:	returnStr = quantityFormat
									 + ( currency[parCurrency]["p_cs_precedes"] == true ?
											( currency[parCurrency]["p_sep_by_space"] == true ? " " : "" )
											 + currencySymbol
										: "" );
									break;
							case 2:	returnStr = quantityFormat
									 + ( currency[parCurrency]["p_cs_precedes"] == true ?
											( currency[parCurrency]["p_sep_by_space"] == true ? " " : "" )
											 + currencySymbol
										: "" );
									break;
							case 3:	returnStr = 
										( currency[parCurrency]["p_cs_precedes"] == true ?
											currencySymbol
											 + ( currency[parCurrency]["p_sep_by_space"] == true ? " " : "" )
										: "" )
									 + quantityFormat;
									break;
							case 4:	returnStr = 
										( currency[parCurrency]["p_cs_precedes"] == true ?
											currencySymbol
											 + ( currency[parCurrency]["p_sep_by_space"] == true ? " " : "" )
										: "" )
									 + quantityFormat;
									break;
						}	
						break;
		}
		
		// oriznuti mezer kolem ceny
		returnStr = trim( returnStr );
		
		// test na zavorky kolem meny
		//var parParams = { "brace_symbol" : 0 };
		
		if( parParams != null && parParams["brace_symbol"] != null && parParams["brace_symbol"] != 0 ) {
			if( parLocate == 1 ) {
				// lokalni
				switch( parParams["brace_symbol"] ) {
					case 1:	returnStr = "(" + returnStr + ")";
							break;
					case 2:	returnStr = "[" + returnStr + "]";
							break;
					case 3:	returnStr = "{" + returnStr + "}";
							break;
					case 4:	returnStr = "/" + returnStr + "/";
							break;
				}
			} else {
				// mezinarodni
				switch( parParams["brace_symbol"] ) {
					case 1:	returnStr = "(" + returnStr + ")";
							break;
					case 2:	returnStr = "[" + returnStr + "]";
							break;
					case 3:	returnStr = "{" + returnStr + "}";
							break;
					case 4:	returnStr = "/" + returnStr + "/";
							break;
				}
			}
		}
		
		return returnStr;
		//return numberFormat( parQuantity, 2, ",", " " );
	} 
}


/**
 * Kontroluje objednavku pred odeslanim
 * @return true / false
 * 
 */
function checkFormObjednavkaGUI( ) {
	var elem;
	var celkem = 0;
	var doruceno = false;
	var aTxt = "";
	var objednavka = document.formObjednavka;
	
	// hodnota html prvku "titul" do promenne
	var eTitul = getElement( 'titul' );
	titul = eTitul.value;
	
	// test, zda existuji vstupenky v obj.
	if ( obObjednavka.existsVstupenkaListInOrder( ) == false ) {
		aTxt += messageVyberteVstupenku + "\n";
	}
	
	// test na zpusob doruceni
	try {
		for (var i = 0; i <= 6; i++) {
			elem = objednavka.predani[i];
			if ( elem != null && elem.checked ) { 
				doruceno = true;
				// zpusob doruceni - typ, zeme
					// typ
				deliveryWay = elem.value;
					// zeme
				if( deliveryWay == 3 ) {
					var eZeme = getElement( 'uZemePlatbaZahranici' );
					deliveryCountry = eZeme.value;
				}
				if( deliveryWay == 7 ) {
					var eZeme = getElement( 'uZemePrevodZahranici' );
					deliveryCountry = eZeme.value;
				}
			}
		}
		elem = objednavka.predani;
		if ( elem != null && elem.checked ) doruceno = true;
	}
	catch (Exception) {
		doruceno = true;
	}
	if (!doruceno) {
		aTxt += messageVyberteZpusobDoruceni;
	}
	
	// vypsani varovne hlasky
	if (aTxt != '') {
		alert(aTxt);
		return false;
	}
	
	return true;
}

/**
 * Akce - "Pokracovat v objednavce"
 * 1. Provede test na pocet vstupenek v obj.
 * 2. Vytvori objednavku
 * 3. Prejde na formular s daty
 * 
 */
function actionContinueOrder( )
{
	
	if( checkFormObjednavkaGUI( ) != false ) {
		var url = 'index.php?pg=objednavka&titul=' + titul + '&blok=' + blok + '&mode=gui&prog=' + program + '&' + SID + '&action=continue&delivery_way=' + deliveryWay + '&delivery_country=' + deliveryCountry + '#hall_view';
		//alert( url );
		httpRedirect( url );
	}
}

/**
 * Akce - "Pridat / Odebrat sedadlo ( vstupenku ) z docasne objednavky"
 * Prida / Odebere vstupenku z docasne objednavky
 */
function actionAddDeleteFromOrderTmp( parVstupenkaId )
{
	// test na povolene akce
	if( flActionDisabled == false ) {
		var obVstupenka = new Vstupenka( parVstupenkaId );
		
		// test na stav_vstupenky_id = 2 ( Volna )
		if( obVstupenka.getStavVstupenkyId( ) == 1 ) {
			// add
			actionAddToOrderTmp( parVstupenkaId );
		} else {
			// delete
			actionDeleteFromOrderTmp( parVstupenkaId );
		}
	}
}


/**
 * Akce - "Pridat sedadlo ( vstupenku ) do docasne objednavky"
 * Prida vstupenku do docasne objednavky
 * 1. Nastavi stav_vstupenky_id = 2
 */
function actionAddToOrderTmp( parVstupenkaId )
{
	var obVstupenka = new Vstupenka( parVstupenkaId );
	
	// test na stav_vstupenky_id = 1 ( Volna )
	if( obVstupenka.getStavVstupenkyId( ) == 1 ) {
		// test na max. mnozstvi objednanych vstupenek
		if( obObjednavka.getPocetVstupenek( ) < 8 ) {
			// vstupenka 
				// zmena stavu
			obVstupenka.setStavVstupenkyId( 2 );
				// pridani vstupenky do obj.
			var vstupenkaData = obVstupenka.getDataAddToOrderTmp( );
			obObjednavka.addVstupenkaToOrderTmp( vstupenkaData );
			
			// prekresleni objektu
			obVstupenka.refresh( );
			obObjednavka.refresh( );
			showSedadloInfo( parVstupenkaId );
		} else {
			alert( messageObjednavkaMaxPocetVstupenek );
		}
	}
}


/**
 * Akce - "Odebrat sedadlo ( vstupenku ) z docasne objednavky"
 * Odebere vstupenku z docasne objednavky
 * 1. Nastavi stav_vstupenky_id = 1
 */
function actionDeleteFromOrderTmp( parVstupenkaId )
{
	var obVstupenka = new Vstupenka( parVstupenkaId );
	
	// test na stav_vstupenky_id = 2 ( Volna )
	if( obVstupenka.getStavVstupenkyId( ) == 2 ) {
		// vstupenka 
			// zmena stavu
		obVstupenka.setStavVstupenkyId( 1 );
			// smazani vstupenky z obj.
		var vstupenkaData = obVstupenka.getDataAddToOrderTmp( );
		obObjednavka.deleteVstupenkaFromOrderTmp( vstupenkaData );
		
		// prekresleni objektu
		obVstupenka.refresh( );
		obObjednavka.refresh( );
		showSedadloInfo( parVstupenkaId );
	}
}

/**
 * Akce - "Odebrat sedadla ( vstupenky ) z docasne objednavky"
 * Odebere vsechny vstupenky z docasne objednavky
 * 1. Nastavi stav_vstupenky_id = 1
 */
function actionDeleteAllFromOrderTmp( )
{
	// seznam vstupenek v objednavce
	var rsVstupenkaList = new RS( );
	rsVstupenkaList = obObjednavka.getVstupenkaRsListInOrderTmp( ); 
	
	while( rsVstupenkaList.foreach( ) == true ) {
		var parVstupenkaId = rsVstupenkaList.getValue( 'vstupenka_id' );
		var obVstupenka = new Vstupenka( parVstupenkaId );
		
		// test na stav_vstupenky_id = 2 ( Volna )
		if( obVstupenka.getStavVstupenkyId( ) == 2 ) {
			// vstupenka 
				// zmena stavu
			obVstupenka.setStavVstupenkyId( 1 );
				// smazani vstupenky z obj.
			var vstupenkaData = obVstupenka.getDataAddToOrderTmp( );
			obObjednavka.deleteVstupenkaFromOrderTmp( vstupenkaData );
			
			// prekresleni objektu
			obVstupenka.refresh( );
		}
	}
	obObjednavka.refresh( );
}

/**
 * Akce - "Pridat sedadlo ( vstupenku ) do objednavky"
 * Prida vstupenku do objednavky
 * 1. Sestavi seznam vstupenek a odesle je na server
 * 
 */
function actionAddToOrder( )
{
	var vstupenkaList = obObjednavka.getVstupenkaListInOrderTmp( );
	//alert( vstupenkaList );
	httpRedirect( 'index.php?pg=objednavka&blok=' + blok + '&mode=gui&prog=' + program + '&' + SID + '&ticket_list=' + vstupenkaList + '&action=add#hall_view' );
}

/**
 * Akce - "Zmenit blok"
 * Otestuje, zda se v tmp objednavce vyskytuji nejake vstupenky
 * 1. Vyhodi info hlasku
 * 2. Pokusi se pridat vstupenky do objednavky
 * 3. Zmeni akt. blok
 * httpRedirect( 'index.php?pg=objednavka&prog={sal_data.program_id}&mode=gui&blok={sal_data.blok_virt_id}&{sal_data.auth}#hall_view' ); return false;
 * 
 */
function actionChangeBlock( parBlokId )
{
	// test na vstupenky v tmp obj.
	/*try {
		if( obObjednavka.existsVstupenkaListInOrderTmp( ) == true ) {
			// test na souhlas uzivatele
			if( window.confirm( messageActionChangeBlock ) == true ) {
				// uzivatele chce vstupenky pridat
				var vstupenkaList = obObjednavka.getVstupenkaListInOrderTmp( );
				httpRedirect( 'index.php?pg=objednavka&blok=' + parBlokId + '&mode=gui&prog=' + program + '&' + SID + '&ticket_list=' + vstupenkaList + '&action=add#hall_view' ) ;
				return false;
			} else {
				// uzivatele nechce vstupenky pridat
				httpRedirect( 'index.php?pg=objednavka&blok=' + parBlokId + '&mode=gui&prog=' + program + '&' + SID + '#hall_view' );
				return false;
			}
		} else {
			// tmp. obj. neobsahuje zadne vstupenky
			httpRedirect( 'index.php?pg=objednavka&blok=' + parBlokId + '&mode=gui&prog=' + program + '&' + SID + '#hall_view' );
			return false;
		}
		return false;
	} catch ( e ) {
		// tmp. obj. neni zobrazena ( prvni zobrazeni stranky )
		httpRedirect( 'index.php?pg=objednavka&blok=' + parBlokId + '&mode=gui&prog=' + program + '&' + SID + '#hall_view' );
		return false;
	}*/
	
	try {
		// test na povolene akce
		if( flActionDisabled == false ) {
			httpRedirect( 'index.php?pg=objednavka&blok=' + parBlokId + '&mode=gui&prog=' + program + '&' + SID + '#hall_view' );
			return false;
		}
	} catch ( e ) {
		// tmp. obj. neni zobrazena ( prvni zobrazeni stranky )
		httpRedirect( 'index.php?pg=objednavka&blok=' + parBlokId + '&mode=gui&prog=' + program + '&' + SID + '#hall_view' );
		return false;
	}
	return false;
}

/**
 * Akce - "Smazat vsechna sedadla ( vstupenky ) z objednavky"
 * 
 */
function actionDeleteAllFromOrder( )
{
	if( window.confirm( messageActionDeleteAllFromOrder ) == false ) return false;
	httpRedirect( 'index.php?pg=objednavka&blok=' + blok + '&mode=gui&prog=' + program + '&' + SID + '&action=delete_all#hall_view' );
} 


/**
 * Objekt ResultSet
 */
function RS( )
{
	this.data = Array( );		// data
	this.columnList = Array( );	// seznam sloupcu ['col1', 'col2', ...]
	this.currentRow = -1;		// akt. radek []
	this.rowCount = 0;			// pocet radku
	this.foreachFlag = false;	// priznak pro bezici foreach
	
	
	/**
	 * Smaze radek, kde dany sloupec obsahuje danou hodnotu
	 * !!! NN 4.0, MSIE 4.0 !!!
	 * @param parColumnName
	 * @param parValue
	 * @return cislo radku / false
	 * 
	 */
	this.deleteRowByValue = function( parColumnName, parValue )
	{
		var row = this.searchRowByValue( parColumnName, parValue ); 
		if( row != -1 )	this.deleteRow( row );
	}
	
	/**
	 * Smaze aktualni radek
	 * !!! NN 4.0, MSIE 4.0 !!!
	 * 
	 */
	/*this.deleteCurrentRow = function( )
	{
		if( this.currentRow != -1 ) {
			var currentRow = this.currentRow;
			this.data.splice( this.currentRow, 1 );
			this.currentRow = currentRow - 1;
			this.rowCount = this.data.length;
		}
	}*/
	
	/**
	 * Smaze radek
	 * !!! NN 4.0, MSIE 4.0 !!!
	 * @param parRowNumber [ 0 ... ]
	 * 
	 */
	this.deleteRow = function( parRowNumber )
	{
		//alert( parRowNumber + ' - ' + this.currentRow );
		//this.dump( 'begin' );
		var currentRow = this.currentRow;
		this.data.splice( parRowNumber, 1 );
		//this.dump( 'end' );
		this.currentRow = currentRow - 1;
		this.rowCount = this.data.length;
	}
	
	/**
	 * Nalezne radek, kde dany sloupec obsahuje danou hodnotu
	 * @param parColumnName
	 * @param parValue
	 * @return cislo radku / -1
	 * 
	 */
	this.searchRowByValue = function( parColumnName, parValue )
	{
		/*while( this.foreach( ) == true ) {
			if( this.getValue( parColumnName ) == parValue ) {
				return this.currentRow;
			}
		}*/
		for( row in this.data ) {
			//alert( this.data[row][parColumnName] + '-' + parValue );
			if( this.data[row][parColumnName] == parValue ) {
				return row;
			}
		}
		return -1;
	}
	
	/**
	 * Projde cely RS a nad kazdym radkem provede akci
	 * @return true / false ( EOF )
	 * 
	 * Priklad:
	 * while( this.objednavkaData.foreach( ) == true ) {
	 *		this.objednavkaData.setValue( 'cena', 123 );	
	 *	}
	 * 
	 */
	this.foreach = function( )
	{
		// test na bezici foreach -> inicializace
		if( this.foreachFlag == false ) {
			this.currentRow = -1;
		}
		this.foreachFlag = true;
				
		// test na EOF
		if( this.currentRow + 1 == this.rowCount ) {
			this.currentRow = 0;
			this.foreachFlag = false;
			return false;
		} else {
			this.currentRow++;
			return true;
		}
	}
	
	/**
	 * Importuje data
	 * @param parData - Data RS ( indexovane pole asociovanych poli )
	 *
	 */
	this.importData = function( parData )
	{
		// test na prazdna data
		if( parData.length > 0 ) {
			// vytvoreni columnListu
			var columnList = parData[0];
			for( columnName in columnList ) {
				this.columnList.push( columnName );
			}
			
			// naplneni dat
			this.data = parData;
			
			// posunuti curzoru na 1. radek
			this.currentRow = 0;
			// nastaveni citace radku
			this.rowCount = this.data.length;
		}
	}
	
	/**
	 * Exportuje data
	 * @return Data RS ( indexovane pole asociovanych poli )
	 *
	 */
	this.exportData = function( )
	{
		return this.data;
	}	
	
	/**
	 * Prida sloupec
	 *
	 */
	this.addColumn = function( parColumnName )
	{
		this.columnList.push( parColumnName );		
	}
	
	/**
	 * Prida prazdny radek
	 *
	 */
	this.addRow = function( )
	{
		var rsRow = Array( );
		// vysosnuti seznamu sloupcu
		for( var item in this.columnList ) {
			var columnName = this.columnList[item];
			rsRow[columnName] = null;
		}
		// pridani radku
		this.data.push( rsRow );
		// posunuti curzoru na novy radek
		this.currentRow = this.rowCount;
		// nastaveni citace radku
		this.rowCount += 1;
	}
	
	/**
	 * Nastavi hodnotu v danem radku a sloupci
	 *
	 */
	this.setValue = function( parColumnName, parValue )
	{
		this.data[this.currentRow][parColumnName] = parValue;		
	}
	
	/**
	 * Ziska hodnotu v danem radku a sloupci
	 *
	 */
	this.getValue = function( parColumnName )
	{
		return this.data[this.currentRow][parColumnName];		
	}
	
	/**
	 * Dumpuje obsah RS
	 *
	 */
	this.dump = function( parTitle )
	{
		var dumpStr = '<style>.dump_table {	z-index: 1000; text-align: center; font-size: 10px;} .dump_table th { background-color: fuchsia; } .dump_table td { background-color: aqua; } </style>';
		dumpStr += '<h1 style="color: navy">' + parTitle + '</h1>';
		dumpStr += '<table border="1" cellspacing="1" cellpadding="1" class="dump_table">';
		dumpStr += '<tr><th>' + this.columnList.join( '</th><th>' ) + '</th></tr>';
		for( rowIndex in this.data ) {
			var row = this.data[rowIndex];
			dumpStr += '<tr>';
			for( columnName in row ) {
				dumpStr += '<td>' + row[columnName] + '</td>';
			}
			dumpStr += '</tr>';
		}		
		dumpStr += '</table>';
		dump( dumpStr );
		dumpStr = '';		
	}
}

// debug
/*
var rs = new RS( );
rs.addColumn( 'col1' );
rs.addColumn( 'col2' );
rs.addColumn( 'col3' );
rs.addRow( );
rs.setValue( 'col1', 1 );
rs.dump( 'dump1' );
rs.addRow( );
rs.setValue( 'col2', 2 );
rs.dump( 'dump2' );
rs.addRow( );
rs.setValue( 'col3', 3 );
rs.dump( 'dump3' );
*/

/*
var rs = new RS( );
rs.importData( objednavkaData );
rs.dump( 'objednavkaData' );
*/

/**
 * Objekt Objednavka
 *
 */
function Objednavka(  )
{
	var objednavkaData = null;
	
	/**
	 * Inicializuje objednavku
	 * Namapuje globalni promennou "objednavkaData" na instacni promennou
	 * Veskere akce s objednavkou budou probihat nad touto instancni promennou
	 *
	 */
	this.init = function( parObjednavkaData )
	{
		this.objednavkaData = new RS( );
		if( parObjednavkaData.length > 0 ) {
			this.objednavkaData.importData( parObjednavkaData );
		} else {
			// inicializace columnListu
			this.objednavkaData.addColumn( 'vstupenka_id' );
			this.objednavkaData.addColumn( 'cen_mapa-cen_mapa_uroven' );
			this.objednavkaData.addColumn( 'cen_mapa_kat' );
			this.objednavkaData.addColumn( 'c_rady' );
			this.objednavkaData.addColumn( 'c_sedadla' );
			this.objednavkaData.addColumn( 'stav_vstupenky_id' );
			this.objednavkaData.addColumn( 'cena' );
			this.objednavkaData.addColumn( 'blok' );
			this.objednavkaData.addColumn( 'blok_virt' );
		}
	}

	/**
	 * Vrati pocet vstupenek v objednavce
	 *
	 */
	this.getPocetVstupenek = function( )
	{
		return this.objednavkaData.rowCount;
	}
	
	/**
	 * Prida vstupenku do docasne objednavky
	 * @param RS parVstupenkaData
	 *
	 */
	this.addVstupenkaToOrderTmp = function( parVstupenkaData )
	{
		//parVstupenkaData.dump( 'vstupenka data' );
		
		this.objednavkaData.addRow( );
		this.objednavkaData.setValue( 'vstupenka_id', parVstupenkaData.getValue( 'vstupenka_id' ) );
		this.objednavkaData.setValue( 'cen_mapa-cen_mapa_uroven', parVstupenkaData.getValue( 'cen_mapa-cen_mapa_uroven' ) );
		this.objednavkaData.setValue( 'c_rady', parVstupenkaData.getValue( 'c_rady' ) );
		this.objednavkaData.setValue( 'c_sedadla', parVstupenkaData.getValue( 'c_sedadla' ) );
		this.objednavkaData.setValue( 'stav_vstupenky_id', 2 );
		this.objednavkaData.setValue( 'cena', parVstupenkaData.getValue( 'cena' ) );
		//alert(parVstupenkaData.getValue( 'blok' ));
		this.objednavkaData.setValue( 'blok', parVstupenkaData.getValue( 'blok' ) );
		this.objednavkaData.setValue( 'blok_virt', parVstupenkaData.getValue( 'blok_virt' ) );
		this.objednavkaData.setValue( 'cen_mapa_kat', parVstupenkaData.getValue( 'cen_mapa_kat' ) );
	}
	
	/**
	 * Odebere vstupenku z docasne objednavky
	 * @param RS parVstupenkaData
	 *
	 */
	this.deleteVstupenkaFromOrderTmp = function( parVstupenkaData )
	{
		//parVstupenkaData.dump( 'vstupenka data' );
		this.objednavkaData.deleteRowByValue( 'vstupenka_id', parVstupenkaData.getValue( 'vstupenka_id' ) );
	}
	
	/**
	 * Vrati seznam vstupenek v docasne objednavce ( stav_vstupenky_id = 2 )
	 * @return "|vstupenkaId-cen_mapa-cen_mapa_uroven-cen_mapa_kat| ..."
	 *
	 */
	this.getVstupenkaListInOrderTmp = function( )
	{
		//this.objednavkaData.dump('data');
		var retVstupenkaList = "";
		while( this.objednavkaData.foreach( ) == true ) {
			if( this.objednavkaData.getValue( 'stav_vstupenky_id' ) == 2 ) {
				retVstupenkaList += '|' + this.objednavkaData.getValue( 'vstupenka_id' ) + '-' + this.objednavkaData.getValue( 'cen_mapa-cen_mapa_uroven' ) + '-' + this.objednavkaData.getValue( 'cen_mapa_kat' );
			}
		}
		// orezani pocatecni carky
		retVstupenkaList = retVstupenkaList.substring( 1 );
		return retVstupenkaList;
	}
	
	/**
	 * Vrati seznam vstupenek v docasne objednavce
	 * @return RS
	 *
	 */
	this.getVstupenkaRsListInOrderTmp = function( )
	{
		return this.objednavkaData;
	}
	
	/**
	 * Otestuje zda jsou nejake vstupenky v docasne objednavce ( stav_vstupenky_id = 2 )
	 * @return true | false
	 *
	 */
	this.existsVstupenkaListInOrderTmp = function( )
	{
		var ret = false;
		while( this.objednavkaData.foreach( ) == true ) {
			if( this.objednavkaData.getValue( 'stav_vstupenky_id' ) == 2 ) {
				ret = true;
			}
		}
		return ret;
	}
	
	/**
	 * Otestuje zda jsou nejake vstupenky v objednavce ( stav_vstupenky_id = 3 )
	 * @return true | false
	 *
	 */
	this.existsVstupenkaListInOrder = function( )
	{
		var ret = false;
		while( this.objednavkaData.foreach( ) == true ) {
			if( this.objednavkaData.getValue( 'stav_vstupenky_id' ) == 3 ) {
				ret = true;
			}
		}
		return ret;
	}
	
	/**
	 * Prekresli nahled objednavky
	 * 
	 */
	this.refresh = function( )
	{
		//this.objednavkaData.dump( 'obj. data' );
		
		var str = '';
		var cenaCelkem = 0;
		
		// Sestaveni vystupu
		var tmpl = new Template( );
		tmpl.loadTemplate( tmplOrder );
		
		
		// data k zobrazeni
		var objData = new RS( );
		objData.addColumn( 'blokVirtPopis' );
		objData.addColumn( 'cenMapaUrovenPopis' );
		objData.addColumn( 'radaCislo' );
		objData.addColumn( 'sedadloCislo' );
		objData.addColumn( 'cena' );
		objData.addColumn( 'cenMapaUrovenBarvaHex' );
		
		this.objednavkaData.currentRow = 0;
		
		while( this.objednavkaData.foreach( ) == true ) {
			var blokVirtPopis = obBlok.getPopis( this.objednavkaData.getValue( 'blok_virt' ) );
			var cenMapaUrovenPopis = obCenMapaCenMapaUroven.getPopis( this.objednavkaData.getValue( 'cen_mapa-cen_mapa_uroven' ) );
			var radaCislo = this.objednavkaData.getValue( 'c_rady' );
			var sedadloCislo = this.objednavkaData.getValue( 'c_sedadla' );
			var cena = this.objednavkaData.getValue( 'cena' );
			var cenMapaUrovenBarvaHex = obCenMapaCenMapaUroven.getBarvaHex( this.objednavkaData.getValue( 'cen_mapa-cen_mapa_uroven' ) );
			var blok = this.objednavkaData.getValue('blok');
            var blokPopis = blokData[blok]['popis'];
			
			objData.addRow( );
			objData.setValue( 'blokVirtPopis', blokPopis );
			objData.setValue( 'cenMapaUrovenPopis', cenMapaUrovenPopis );
			objData.setValue( 'radaCislo', radaCislo );
			objData.setValue( 'sedadloCislo', sedadloCislo );
			
			var cenaFormat = formatDefaultCurrency( cena, {"curr_symbol_show" : 0 } )
								/*+ "<br>" + formatAlternativeCurrency( cena, {"curr_symbol_show" : null, "brace_symbol" : 1, "p_sign_posn" : 4 } )*/;
			objData.setValue( 'cena', cenaFormat );
			objData.setValue( 'cenMapaUrovenBarvaHex', cenMapaUrovenBarvaHex );
			
			// sum cena
			cenaCelkem += cena;
		}
		
		tmpl.iterate( 'obj', objData.exportData( ) );
		var objBodyStr = tmpl.render( );
		
		// zobrazeni
		innerHTMLWrite( 'objednavka_rozpis', objBodyStr, false );
		//alert( objBodyStr );	
		var cenaCelkemFormat = formatDefaultCurrency( cenaCelkem, {"curr_symbol_show" : 0 } )
								+ "<br>" + formatAlternativeCurrency( cenaCelkem, {"curr_symbol_show" : null, "brace_symbol" : 1, "p_sign_posn" : 2 } );
		innerHTMLWrite( 'objednavka_cena_celkem', cenaCelkemFormat, false );
	}
	
	/**
	 * Dumpuje obsah
	 *
	 */
	this.dump = function( parMsg )
	{
		this.objednavkaData.dump( parMsg );
	}
}


/**
 * Objekt Blok
 *
 */
function Blok( )
{
			
		this.getPopis = function( parBlokVirtId )
		{
			return blokVirtData[parBlokVirtId]['popis'];
		}	
}


/**
 * Objekt Kategorie
 *
 */
function Kategorie( )
{
		this.eKategorieId =  getElement( 'kategorie_id' );
	
		this.getKategorieId = function( )
		{
			return this.eKategorieId.value;
		}	
}


/**
 * Objekt CenMapaCenMapaUroven
 *
 */
function CenMapaCenMapaUroven( )
{
		this.getCena = function( parCenMapaCenMapaUrovenId )
		{
			kategorieId = obKategorie.getKategorieId( ); 
			return cenMapaCenMapaUroven[parCenMapaCenMapaUrovenId]['cena_kat' + kategorieId];
		}
		
		this.getPopis = function( parCenMapaCenMapaUrovenId )
		{
			return cenMapaCenMapaUroven[parCenMapaCenMapaUrovenId]['cen_mapa_uroven_popis'];
		}
		
		this.getBarvaHex = function( parCenMapaCenMapaUrovenId )
		{
 			return cenMapaCenMapaUroven[parCenMapaCenMapaUrovenId]['cen_mapa_uroven_barva_hex'];
		}
}


/**
 * Objekt Vstupenka
 *
 */
function Vstupenka( parVstupenkaId )
{
	// property
		// data vstupenky
	this.vstupenkaId = parVstupenkaId;
	this.cenMapaCenMapaUroven = sedadloData[this.vstupenkaId]['cen_mapa-cen_mapa_uroven']; 
	this.cRady = sedadloData[this.vstupenkaId]['c_rady'];
	this.cSedadla = sedadloData[this.vstupenkaId]['c_sedadla'];
	this.stavVstupenkyId = sedadloData[this.vstupenkaId]['stav_vstupenky_id'];
	this.blokId = sedadloData[this.vstupenkaId]['blok'];
	this.blokVirtId = sedadloData[this.vstupenkaId]['blok_virt'];
	//this.cena = sedadloData[this.vstupenkaId]['cena'];
	this.cena = null;
		
		// html elementy
	this.eVstupenkaBorder = getElement( parVstupenkaId + '_border' ); 
	this.eVstupenkaBody = getElement( parVstupenkaId + '_body' );
	
	// method
	
	/**
	 * Ziska aktualni cenu vstupenky podle kategorie
	 *
	 */
	this.getCena = function( )
	{
		var cena = obCenMapaCenMapaUroven.getCena( this.cenMapaCenMapaUroven );
		this.cena = cena;
		return cena;
	}
	
	/**
	 * Pripravi data a prida vstupenku do docasne objednavky
	 *
	 */
	this.getDataAddToOrderTmp = function( )
	{
		var dataRow = Array( );
		dataRow['vstupenka_id'] = this.vstupenkaId;
		dataRow['cen_mapa-cen_mapa_uroven'] = this.cenMapaCenMapaUroven; 
		dataRow['c_rady'] = this.cRady;
		dataRow['c_sedadla'] = this.cSedadla;
		dataRow['cena'] = this.getCena( );
		dataRow['stav_vstupenky_id'] = this.stavVstupenkyId;
		dataRow['blok'] = this.blokId;
		dataRow['blok_virt'] = this.blokVirtId;
		dataRow['cen_mapa_kat'] = obKategorie.getKategorieId( );
		
		var dataRS = new RS( );
		dataRS.importData( Array( dataRow ) );
		return dataRS;
	}
	
	/**
	 * Nastavi stav vstupenky
	 *
	 */
	this.setStavVstupenkyId = function( parStavVstupenky )
	{
		sedadloData[this.vstupenkaId]['stav_vstupenky_id'] = parStavVstupenky;
	}
	
	/**
	 * Ziska stav vstupenky
	 *
	 */
	this.getStavVstupenkyId = function( )
	{
		return sedadloData[this.vstupenkaId]['stav_vstupenky_id'];
	}
	
	/**
	 * Ziska barvu pro stav vstupenky
	 *
	 */
	this.getStavVstupenkyBarva = function( )
	{
		return stavVstupenky[this.getStavVstupenkyId( )]['stav_vstupenky_barva_hex'];
	}
	
	/**
	 * Prekresli nahled vstupenky podle stavu vstupenky
	 *
	 */
	this.refresh = function( )
	{
		// nastavi barvu pozadi podle stavu vstupenky
		//this.eVstupenkaBody.style.color = '#ff0000';
		var backgroundColor = this.getStavVstupenkyBarva( );
		this.eVstupenkaBody.style.backgroundColor = '#' + backgroundColor;
	}
}




/**
 * Objekt Template
 * Implementuje pouze skalarni promenne, RS 
 *
 */
function Template( )
{
	// property
	this.template = '';
	this.property = [];
	
	/**
	 * Natahne sablonu
	 *
	 */
	this.loadTemplate = function( parTemplateStr )
	{
		// osetreni aktivnich znaku
		parTemplateStr = parTemplateStr.replace( '\'', '\'' );
		
		this.template = "this.template = '" + parTemplateStr + '\';';		
	}
	
	/**
	 * Naplni hodnotu skalarni promenne
	 *
	 */
	this.set = function( parTagName, parTagValue )
	{
		this.template = this.template.replace( '{' + parTagName + '}', this.property[ parTagName ] );
		this.property[ parTagName ] = parTagValue;
	}
	
	/**
	 * Pripravi naplneni RS
	 *  
	 */
    this.iterate = function( parTagName, parTagValue )
    {
	    // <t:var> -> this.doIterate($this->pole, '
	    this.template = this.template.replace( '<t:' + parTagName + '>', '\' + this.doIterate( \'' + parTagName + '\', \'' );
	    
	    // </t:var> -> ')
	    this.template = this.template.replace( '</t:' + parTagName + '>', '\') + \'' );
	    
	    // registrace property
	    this.property[parTagName] = parTagValue;
    }
    
    
    // naplni RS
    this.doIterate = function( parPropertyName, parTemplate  )
    {
	    propertyValue = this.property[parPropertyName];
	    ret = "";
	    
	    for( row in propertyValue ) {
		    templateTmp = parTemplate;
		    for( columnName in propertyValue[row] ) {
		    	var columnValue = propertyValue[row][columnName];
		    	//dump( 'columnName' + columnName );
		    	//dump( 'columnValue' + columnValue );
		    	templateTmp = templateTmp.replace( '{' + parPropertyName + '.' + columnName + '}', columnValue );
		    }
		    ret += templateTmp;
	    }
	    return ret;
    }
    
    /**
     * Vrati retezec sablony 
     */
    this.render = function(  )
    {
		//alert( this.template );
		eval( this.template );
		//alert( this.template );
		return this.template;
    }
	
	
	/**
	 * Vrati sablonu
	 *
	 */
	this.getTemplate = function()
	{
		return this.template;
	}
}

/**
 * class Template
{
    // pripravi naplneni RS 
    function iterate( $var, $value )
    {
	    // <t:var> -> $this->iterate($this->pole, '
	    $this->template = str_replace( "<t:".$var.">", "'.\$this->doIterate(\"".$var."\", '", $this->template);
	    
	    // </t:var> -> ')
	    $this->template = str_replace( "</t:".$var.">", "').'", $this->template);
	    
	    // registrace property
	    $this->property[$var] = $value;
    }
    
    // naplni RS
    function doIterate( $propertyName, $template  )
    {
	    $propertyValue = $this->property[$propertyName];
	    $ret = "";
	    
	    foreach( $propertyValue as $row ) {
		    $templateTmp = $template;
		    foreach( $row as $colName => $colValue ) {
			    $templateTmp = str_replace( "{".$propertyName.".".$colName."}", $colValue, $templateTmp );
		    }
		    $ret.= $templateTmp;
	    }
	    return $ret;
    }
    
    // vrati retezec sablony
    function render( $displayContent = false )
    {
	eval( $this->template );
	$this->template = trim( $this->template ,"\n" );	// odstraneni "\n"
	
	if( $displayContent === true ) echo $this->template;
	return $this->template;
    }
 */


/**
 * Vrati html element s danym jmenem
 * @param elementName Nazev html elementu
 * @return html element / null
 *
 */
function getElement( elementName )
{
	return document.getElementById( elementName );
}

/**
 * Provede http redirect na dane url
 * 
 */
function httpRedirect( url )
{
	window.location = url;
}

/**
 * Do daneho html prvku vypise text
 * 
 */
function innerHTMLWrite( parElementName, parText, parAdd )
{
	var eElement = getElement( parElementName );
	
	if( parAdd == true ) {
		var text = eElement.innerHTML + parText;
	} else {
		var text = parText;
	}
	eElement.innerHTML = text;
}

/**
 * Vypise info text
 * ve strance musi byt prvek
 * <span name="dump" id="dump"></span>
 */
function dump( parMsg )
{
	var eDump =  getElement( 'dump' );
	var strDump = eDump.innerHTML + parMsg;
	
	eDump.innerHTML = strDump;
}