/*
 *  @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, optionClass )
{
  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 )
  {
  	if ( optionClass && optionClass.length )
  		addClass(option, optionClass);
  		
    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( ' ' );

}


function show_element(element)
{
	if ( !element )
	    return false;
	    
	element.style.display   = 'block';
}

function hidde_element(element)
{
	if ( !element )
	    return false;

	element.style.display   = 'none';
}


/*  @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);
}


function in_array(elem, arr)
{
	for (var i=0; i<=arr.length; i++)
	{
	    if ( arr[i]==elem )
	        return true;
	}
	
	return false;
}


/*
 *  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;
}


/*
 *  @description Vyskoci JScriptovou hlasku
 *  @param string message
 *  @return 
 */
function js_alert( message )
{
  alert( message );
  return;
}


function include(jsFile)
{
  document.write('<script type="text/javascript" src="'+ jsFile + '"></scr' + 'ipt>');
}



/*
 *  @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 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 load_xml_content_string(xmlData) 
{
	if (window.ActiveXObject) {
		//for IE
		xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		xmlDoc.loadXML(xmlData);
		return xmlDoc;
	} else if (document.implementation && document.implementation.createDocument) {
		//for Mozila
		parser=new DOMParser();
		xmlDoc=parser.parseFromString(xmlData,"text/xml");
		return xmlDoc;
	}
}
