//Existuje-li object se zadaným ID, tak se zjistí jeho viditelnost a invertuje se
function changeShow(id){
  if(document.getElementById(id)){
    if(document.getElementById(id).style.visibility == "hidden" || document.getElementById(id).style.visibility == "")
      showID(id);
    else
      hideID(id);
  }
}
//Existuje-li object se zadaným ID, tak ho zviditelní na stránce
function showID(id){
  if(document.getElementById(id)){
    document.getElementById(id).style.display = "block";
    document.getElementById(id).style.visibility = "visible";
  }
}
//Existuje-li object se zadaným ID, tak ho skryje na stránce
function hideID(id){
  if(document.getElementById(id)){
    document.getElementById(id).style.display = "none";
    document.getElementById(id).style.visibility = "hidden";
  }
}
//
function setInnerID(id, value){
  if(document.getElementById(id)){
    document.getElementById(id).innerHTML = value;
  }
}
function getInnerID(id){
  if(document.getElementById(id)){
    return document.getElementById(id).innerHTML;
  }
}


/*
 *  @description Jednoduche funkce pro usnadneni programovani v JavaScriptu
 *  @author Michal Brauner
 *  @email michal.brauner [at] ogilvydevelopment.cz
 *  @last_update 2008-02-24 10:30:00
 *
 */


/**
 *  Vymaze vsechny polozky ze selectbou
 */
function clearSelect( select )
{
  if ( !select || !select.options )
    return false;
    
  var length  = select.options.length;
  
  for ( var i=length-1; i>=0; i-- )
  {
    select.remove(i);
  }
  
  return true;
}


/**
 *  Vlozi polozku do selectboxu
 */
function insertIntoSelect( text_value, value, select )
{
  if ( !select || !select.options )
    return false;

  var params;
  params        = new Array();
  params[0]     = new Array();
  params[1]     = new Array();
  
  params[1][0]  = "value";
  params[1][1]  = value;
  
  //var option  = createNewElement( "option", params, null);
  
  var option    = new Option(text_value, value);
  
  //option.innerHTML  = text_value;
  
  if ( option )
  {
    try
    {
      select.options.add(option);
    }
    catch (err)
    {
      //alert(err.description);
    }
  }
  
  return true;
}


/**
 *  Vrati true/false jestli dany element ma tuto CSS tridu
 */
function isClass( element, className )
{
  if ( !element )
    return false;

  var classes         = element.className.split( ' ' );
  var classNameExist  = false;

  for ( var i=0; i<classes.length; i++ )
  {
    if ( classes[i]==className )
    {
      classNameExist  = true;
      break;
    }
  }

  return classNameExist;
}


/**
 *  Funkce prida CSS tridu k danemu elementu
 */
function addClass( element, className )
{
  if ( !element )
    return false;
    
  var classes         = element.className.split( ' ' );
  var classNameExist  = false;
  
  for ( var i=0; i<classes.length; i++ )
  {
    if ( classes[i]==className )
    {
      classNameExist  = true;
      break;
    }
  }
  
  if ( classNameExist==false )
    classes.push( className );
    
  element.className = classes.join( ' ' );
  
}


/**
 *  Odstrani CSS tridu k danemu elementu
 */
function removeClass( element, className )
{
  if ( !element )
    return false;

  var classes         = element.className.split( ' ' );
  var classesNew      = new Array();

  for ( var i=0; i<classes.length; i++ )
  {
    if ( classes[i]!=className )
    {
      classesNew.push( classes[i] );
    }
  }

  element.className = classesNew.join( ' ' );

}


/*  @description Vytvori novy element
 *  @param string elementType jmeno elementu (tagu)
 *  @param array params pole parametru ( array( array(attr, value), ... ) )
 *  @parent object parent
 *  @return object
 */
function createNewElement( elementType, params, parent, insertFirst ) {

  if ( !elementType.length )
    return;

  var newElement = false;
  
  currentElement = document.createElement(elementType);
  
  if ( currentElement ) {
    if ( params.length ) {
      for ( var i=0; i<params.length; i++ ) {
        if ( (params[i].length>=2) ) {
          currentElement.setAttribute(params[i][0], params[i][1] );
        }
      }
    }
    if ( parent )
    {
      if ( insertFirst==true )
      {
        newElement = parent.insertBefore( currentElement, parent.childNodes[0] );
      }
      else
        newElement = parent.appendChild( currentElement );
    }
    else
      newElement  = currentElement;
  }
    
  return newElement;
}



/*
 *  @description Funkce odstrani element
 *  @param node e
 */
function remove_element( e ) {

  if ( !e )
    return;

  e.parentNode.removeChild(e);
}




/*
 *  Otestuje jestli je promenna cislo, vraci true / false
 */
function is_number( value ) {

  var regular = '^[0-9]*$';
  
  if ( !value )
    return false;
    
  var valueString = new String(value);
  
  return valueString.match(regular);
}


/*
 *  @description Vrati pole objektu html dokumentu ktere se shoduji s tridou a danym tagem
 *  @param string class_name
 *  @param string tag_name
 *  @return array
 */
function getElementsByClass(class_name, tag_name)
{

  var elements = new Array(0);
  
  // ziskame vsechn objekty daneho tagu
  var all_elements = document.getElementsByTagName( tag_name );

  if ( all_elements.length ) {
    var i, regular, tmp_txt;
    
    // vytvorime regularni vyraz pomoc ktereho budeme hledat jmeno tridy
    regular = '\\b';
    for ( i=0; i<class_name.length; i++ )
      regular = regular + '['+class_name.substr(i,1)+']';
    regular = regular + '\\b';
    
    for ( i=0; i<all_elements.length; i++ ) {
      if ( all_elements[i].className.match(regular) ) {
        elements.push(all_elements[i]);
      }
    }
  }

  return elements;
}


/*
 *  @description Zobrazi nove okno prohlizece s danou adresou o zadane vysce, sirce a s parametry
 *  @param string href
 *  @param int width
 *  @param int height
 *  @param string other
 */
function wopen(href,width,height,other){

   var sirkaOkna;
   var vyskaOkna;
   var nastaveni;

   sirkaOkna=screen.availWidth;
   vyskaOkna=screen.availHeight;


   sirkaOkna -= width;
   sirkaOkna -= 25; //scrollbar
   sirkaOkna /= 2;

   vyskaOkna -= height;
   vyskaOkna /= 2;

   vyskaOkna = Math.round(vyskaOkna);
   sirkaOkna = Math.round(sirkaOkna);

   if ( other != '' )
     nastaveni = 'width='+width+',height='+height+',menubar=no,top='+vyskaOkna+',left='+sirkaOkna+','+other+'';
   else
     nastaveni = 'width='+width+',height='+height+',menubar=no,top='+vyskaOkna+',left='+sirkaOkna+'';

  okno = window.open(href,'',''+nastaveni+'');

  if(okno) okno.focus();

}

/*
 *  @description  Zjisti jestli funkce existuje
 *  @param object o
 *  @return bool
 *
 */
function isFunction(o) {
  return (typeof(o)=="function");
}


/*
 *  @description Overi jestli je ico validni
 *  @param string m
 *  @return bool
 */
function check_validICO(i){
  var ico = "^[0-9]+$";

  if ( i.match(ico) && i.length>=4 )
    return true;
  else
    return false;
}


/*
 *  @description Overi jestli je telefon validni
 *  @param string m
 *  @return bool
 */
function check_validTelefon(t){

  var t2 = t.replace(' ', '');
  
  var tel = "^[ 0-9\.\+\/\-]{9,}$";

  return (t2.match(tel)) ? true : false;
}

/*
 *  @description Overi jestli je email validni
 *  @param string m
 *  @return bool
 */
function check_validEmail(m){
  var mail = "^[_a-zA-Z0-9\.\-]+@[_a-zA-Z0-9\.\-]+[\.]{1}[a-zA-Z]{2,4}$";
  return (m.match(mail)) ? true : false;
}


function check_validPSC(psc){
  var reg_psc = "^[0-9]{3} [0-9]{2}$";
  var reg_psc2 = "^[0-9]{5}$";
  return (psc.match(reg_psc) || psc.match(reg_psc2)) ? true : false;
}

/*
 *  @description Vyskoci JScriptovou hlasku
 *  @param string message
 *  @return 
 */
function js_alert( message )
{
  alert( message );
  return;
}


/*
 *  @description Overi jestli je cislo validni datum
 *  @param string d
 *  @return bool
 */
function check_validDate(d) {
  var datum = '^[\\s]*[0-9]{1,2}[\\s]*[\.]{1}[\\s]*[0-9]{1,2}[\\s]*[\.]{1}[\\s]*[0-9]{4}[\\s]*$';
  return (d.match(datum)) ? true : false;
}




function URLEncode( plain_text )
{
	// The Javascript escape and unescape functions do not correspond
	// with what browsers actually do...
	var SAFECHARS = "0123456789" +					// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" +	// Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()";					// RFC2396 Mark characters
	var HEX = "0123456789ABCDEF";

	var plaintext = plain_text;
	var encoded = "";
	for (var i = 0; i < plaintext.length; i++ ) {
		var ch = plaintext.charAt(i);
	    if (ch == " ") {
		    encoded += "+";				// x-www-urlencoded, rather than %20
		} else if (SAFECHARS.indexOf(ch) != -1) {
		    encoded += ch;
		} else {
		    var charCode = ch.charCodeAt(0);
			if (charCode > 255) {
			    alert( "Unicode Character '"
                        + ch
                        + "' cannot be encoded using standard URL encoding.\n" +
				          "(URL encoding only supports 8-bit characters.)\n" +
						  "A space (+) will be substituted." );
				encoded += "+";
			} else {
				encoded += "%";
				encoded += HEX.charAt((charCode >> 4) & 0xF);
				encoded += HEX.charAt(charCode & 0xF);
			}
		}
	} // for

	return encoded;
}

function stripDiacritic(txt){
  var sdiak = "áäčďéěíĺľňóôöŕšťúůüýřžÁÄČĎÉĚÍĹĽŇÓÔÖŔŠŤÚŮÜÝŘŽ";
  var bdiak = "aacdeeillnooorstuuuyrzAACDEEILLNOOORSTUUUYRZ";
  var tx = "";
  for(var i=0; i<txt.length; i++){
    if (sdiak.indexOf(txt.charAt(i)) != -1){
      tx += bdiak.charAt(sdiak.indexOf(txt.charAt(i)));
    }
    else tx += txt.charAt(i);
  }
  return  tx;
}

function URLDecode( encoded_text )
{
   // Replace + with ' '
   // Replace %xx with equivalent character
   // Put [ERROR] in output if %xx is invalid.
   var HEXCHARS = "0123456789ABCDEFabcdef";
   var encoded = encoded_text;
   var plaintext = "";
   var i = 0;
   while (i < encoded.length) {
       var ch = encoded.charAt(i);
	   if (ch == "+") {
	       plaintext += " ";
		   i++;
	   } else if (ch == "%") {
			if (i < (encoded.length-2)
					&& HEXCHARS.indexOf(encoded.charAt(i+1)) != -1
					&& HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
				plaintext += unescape( encoded.substr(i,3) );
				i += 3;
			} else {
				alert( 'Bad escape combination near ...' + encoded.substr(i) );
				plaintext += "%[ERROR]";
				i++;
			}
		} else {
		   plaintext += ch;
		   i++;
		}
	} // while
   return plaintext;

}


function removeOptions(tagSelectID){

  if(document.getElementById(tagSelectID)){
    var mySelect = document.getElementById(tagSelectID);
    var i;
    for (i = mySelect.length - 1; i>=0; i--) {
      mySelect.remove(i);
    }
  }
}

function addOption(tagSelectID, value, title){
  if(document.getElementById(tagSelectID)){
    var mySelect = document.getElementById(tagSelectID);
      var myOption = document.createElement('option');
          myOption.text = title;
          myOption.value = value;

      try {
        mySelect.add(myOption, null); // standards compliant; doesn't work in IE
      }
      catch(ex) {
        mySelect.add(myOption); // IE only
      }
  }
}

