// JavaScript Document

var emod; /*the event model*/
var alt = false;
var ctrl = false;
var shift = false;

function validateVinCode(vinCode)
{
	var vinRegEx = /^[A-HJ-NPR-Za-hj-npr-z0-9]{13,13}[\d]{4,4}$/;
	return vinRegEx.test(vinCode);
}

function validateCisloJednaci(CisloJednaci)
{
	var vinRegEx = /^[\d]{9,9}$/;
	return vinRegEx.test(CisloJednaci);
}

/*
the third argument to changeKey should be a function
  function exampleKeyChecker (keyCode, key)
which returns an object 
  { cancelKey: boolean, replaceKey: boolean, newKeyCode: number, newKey:
string }

Not all properties need to be present, if cancelKey is set to true the
other properties are not needed.

If replaceKey is set to true then at least newKeyCode needs to be set.
*/

function changeKey (textControl, evt, keyChecker) {
	
  var keyCode = evt.keyCode ? evt.keyCode :
                evt.charCode ? evt.charCode :
		evt.which ? evt.which : void 0;
		
  var ctrlKey = evt.ctrlKey;
  var shiftKey = evt.shiftKey;
  var altKey = evt.altKey;
  
  var key;
  if (keyCode) {
    key = String.fromCharCode(keyCode);
  }
  var keyCheck = keyChecker(keyCode, key, textControl, ctrlKey, shiftKey, altKey);
  if (keyCode && window.event && !window.opera) {
    if (keyCheck.cancelKey) {
      return false;
    }
    else if (keyCheck.replaceKey) {
      window.event.keyCode = keyCheck.newKeyCode;
      if (window.event.preventDefault) {
        window.event.preventDefault();
      }
      return true;
    }
    else {
      return true;
    }
  }
  else if (typeof textControl.setSelectionRange != 'undefined') {
    if (keyCheck.cancelKey) {
      if (evt.preventDefault) {

        evt.preventDefault();
      }
      return false;
    }
    else if (keyCheck.replaceKey) {
      // cancel the key event and insert the newKey for the current
      // selection
      if (evt.preventDefault) {
	  evt.preventDefault();
      }
      var oldSelectionStart = textControl.selectionStart;
      var oldSelectionEnd = textControl.selectionEnd;
      var selectedText = textControl.value.substring(oldSelectionStart,
                                                     oldSelectionEnd);
      var newText = typeof keyCheck.newKey != 'undefined'
                    ? keyCheck.newKey
                    : String.fromCharCode(keyCheck.newKeyCode);
      textControl.value = 
        textControl.value.substring(0, oldSelectionStart) +
        newText +
        textControl.value.substring(oldSelectionEnd);
      textControl.setSelectionRange(oldSelectionStart + newText.length,
                                    oldSelectionStart + newText.length);
      return false;
    }
    else {
      return true;
    } 
  }
  else if (keyCheck.cancelKey) {
    if (evt.preventDefault) {
      evt.preventDefault();
    }
    return false;
  }
  else {
    return true;
  }
}

function vinCompatibleText (keyCode, key, textControl, ctrlKey, shiftKey, altKey) {

  var enabledCharsRegEx = /[A-HJ-NPR-Za-hj-npr-z0-9]+/;
  var digitsRegEx = /[\d]{1}/;
  var newKey = key.toUpperCase();
  
  if (keyCode == 8 ||
	  keyCode == 13 ||
	  keyCode == 46 ||
	  keyCode == 39 ||
	  keyCode == 37 ||
	  (ctrlKey && keyCode == 118) || 
	  (ctrlKey && keyCode == 120) || 
	  (ctrlKey && keyCode == 99)
	  )
  {
	  return { cancelKey: false };
  }
  else if (ctrlKey || altKey ||
	  (textControl.value.length < 17 && textControl.value.length > 12 && (getSelectionStart(textControl) > 12 || getSelectionEnd(textControl) > 12) && !digitsRegEx.test(key)))
  {
	  return { cancelKey: true };
  }
  else if (enabledCharsRegEx.test(key) && 
	((textControl.value.length < 17) ||
	(textControl.value.length > 16 && getSelectionEnd(textControl) - getSelectionStart(textControl) == textControl.value.length))) {
    return { replaceKey: true,
             newKeyCode: newKey.charCodeAt(),
             newKey: newKey };
  }
 
  return { cancelKey: true };
}

function cisloJednaciCompatibleText (keyCode, key, textControl, ctrlKey, shiftKey, altKey) {
  var enabledCharsRegEx = /[\d]+/;
  var digitsRegEx = /[\d]{1}/;
  var newKey = key.toUpperCase();
  
  if (keyCode == 8 ||
	  keyCode == 9 ||
	  keyCode == 13 ||
	  keyCode == 46 ||
	  keyCode == 39 ||
	  keyCode == 37 ||
	  (ctrlKey && keyCode == 118) || 
	  (ctrlKey && keyCode == 120) || 
	  (ctrlKey && keyCode == 99)
	  )
  {
	  return { cancelKey: false };
  }
  else if (enabledCharsRegEx.test(key) && 
	((textControl.value.length < 9) ||
	(textControl.value.length > 8 && getSelectionEnd(textControl) - getSelectionStart(textControl) == textControl.value.length))) {
    return { replaceKey: true,
             newKeyCode: newKey.charCodeAt(),
             newKey: newKey };
  }
 
  return { cancelKey: true };
}

 function getSelectionStart(input) 
{
	if (input.createTextRange) 
	{
		selectedRange = document.selection.createRange().duplicate();
		selectedRange.moveEnd("character",input.value.length);
		pos=input.value.lastIndexOf(selectedRange.text);
		if (selectedRange.text=="") pos=input.value.length;
		return pos;
	}                
	else
		return input.selectionStart;
}
function getSelectionEnd(input) 
{
	if (input.createTextRange) 
	{
		selectedRange = document.selection.createRange().duplicate();
		selectedRange.moveStart("character",-input.value.length);
		pos=selectedRange.text.length;
		return pos;
	}                
	else
		return input.selectionEnd;
}  

// clear <input> text box
function clearDefault(srch)
{
  if (srch.value == 'zde zadejte VIN' ||
	  srch.value == 'zde číslo jednací')
  {
	srch.value = "";  
  }
}

// form validation

function ValidateEmail(theinput)
{
	s=theinput.value
	if(s.search)
	{
		return (s.search(new RegExp("^([-!#$%&'*+./0-9=?A-Z^_`a-z{|}~])+@([-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+\.)+[a-zA-Z]{2,4}$","gi"))>=0)
	}
	if(s.indexOf)
	{
		at_character=s.indexOf('@')
		if(at_character<=0 || at_character+4>s.length)
			return false
	}
	if(s.length<6)
		return false
	else
		return true
}

function validateOrderForm(formName)
{
	proverka = valButton(formName.proverka);
	
	if(!proverka)
	{
		alert('Prosím zvolte typ prověrky');
		formName.proverka[0].focus();
		return false
	}
	
	if(formName.tovarni_znacka.value == '')
	{
		alert('Prosím doplňte tovární značku.');
		formName.tovarni_znacka.focus();
		return false
	}
	
	if(formName.typ_vozidla.value == '')
	{
		alert('Prosím doplňte typ vozidla.');
		formName.typ_vozidla.focus();
		return false
	}
	
	if(!validateVinCode(formName.vin.value))
	{
		alert('Prosím vyplňte správně \'VIN - 17-místné číslo karoserie\'')
		selectValue(formName.vin);
		return false
	}
	
	if(formName.spz.value == '')
	{
		alert('Prosím doplňte SPZ.');
		formName.spz.focus();
		return false
	}
	
	if(formName.barva.value == '')
	{
		alert('Prosím doplňte barvu vozidla.');
		formName.barva.focus();
		return false
	}
	
	if(formName.rok_prvni_registrace.value == '')
	{
		alert('Prosím doplňte rok 1.registrace.');
		formName.rok_prvni_registrace.focus();
		return false
	}
	
	if(formName.jmeno_nazev_spolecnosti.value == '')
	{
		alert('Prosím doplňte vaše jméno/název společnosti.');
		formName.jmeno_nazev_spolecnosti.focus();
		return false
	}
	
	if(formName.adresa.value == '')
	{
		alert('Prosím doplňte adresu.');
		formName.adresa.focus();
		return false
	}
	
	if(formName.ico.value == '')
	{
		alert('Prosím doplňte IČO, v případě osoby rodné číslo.');
		formName.ico.focus();
		return false
	}
	
	if(formName.kontaktni_osoba.value == '')
	{
		alert('Prosím doplňte kontaktní osobu.');
		formName.kontaktni_osoba.focus();
		return false
	}
	
	if(!ValidateEmail(formName.email))
	{
		alert('Prosím doplňte e-mailovou adresu.');
		formName.email.focus();
		return false
	}
	
	if (proverka == 'K' || proverka == 'M' || proverka == 'N')
	{
		if(formName.vozidlo_adresa.value == '')
		{
			alert('Prosím doplňte adresu umístění vozidla v době prověrky.');
			formName.vozidlo_adresa.focus();
			return false
		}
		
		if(formName.vozidlo_kontaktni_osoba.value == '')
		{
			alert('Prosím doplňte kontaktní osobu na adrese umístění vozidla v době prověrky.');
			formName.vozidlo_kontaktni_osoba.focus();
			return false
		}
		
		if(formName.vozidlo_telefon.value == '')
		{
			alert('Prosím doplňte telefonní číslo na adresu umístění vozidla v době prověrky.');
			formName.vozidlo_telefon.focus();
			return false
		}
	}

	return true
}

function validateCertificateForm(formName)
{
	if(!validateCisloJednaci(formName.cisloJednaci.value))
	{
		alert('Prosím doplňte číslo jednací, jeho délka je 9 čísel.');
		formName.cisloJednaci.focus();
		return false
	}
	
	if(!validateVinCode(formName.vin.value))
	{
		alert('Prosím doplňte VIN kód, jeho délka je 17 znaků.');
		formName.vin.focus();
		return false
	}
	
	return true
}

function validateVinForm(formName, type, message)
{
	if(!validateVinCode(formName.vin.value))
	{
		alert('Prosím doplňte VIN kód, jeho délka je 17 znaků.');
		formName.vin.focus();
		return false
	}
	
	if (type == 'text')
	{
		warningBoxObj = document.getElementById('warningBox');
		style = warningBoxObj.style;
		style.display = '';
	}
	else if (type == 'image')
	{
		boxObj = document.getElementById('toolbar10');
		style = boxObj.style;
		style.display = '';
	}
	
	return true
}

function switchVisibility(poskytovatel)
{
	var obj, obj_default;
	obj = document.getElementById(poskytovatel + '1');
	obj_default = document.getElementById(poskytovatel);
	toggle(poskytovatel + '-img');
	
	counter = 2;
	
    if (obj.style && obj_default.style)
    {
    	obj=obj.style;
    	obj_default=obj_default.style;
    	v=obj.display;
    	v_default=obj_default.display;
    	v=(v=='none')?v_default:(v==v_default)?'none':v;
    	obj.display=v;
    	
    	while ((obj = document.getElementById(poskytovatel + counter)) != null)
    	{
   			obj=obj.style;
   			obj.display=v;
   			counter++;
   		}
    }
}

function selectValue(formItem)
{
	formItem.focus()
	if (formItem.createTextRange) 
	{
		selectedRange = document.selection.createRange().duplicate();
		selectedRange.moveStart("character", 0);
		selectedRange.moveEnd("character", formItem.value.length);
		selectedRange.select()
	}
	else
	{
		formItem.selectionStart = 0;
		formItem.selectionEnd = formItem.value.length;
	}
}

// validate radio button
function valButton(btn) {
	var cnt = -1;
	for (var i=btn.length-1; i > -1; i--) {
	   if (btn[i].checked) {cnt = i; i = -1;}
	   }
	if (cnt > -1) return btn[cnt].value;
	else return false;
}

// preload images
function preload()
{
	plus = new Image();
	minus = new Image();
	cekejte = new Image();
	
	plus.src = "imgs/plus.gif";
	minus.src = "imgs/minus.gif";
	cekejte.src = "imgs/cs/cekejte.gif";
}

// togle images
function toggle(img){
	obj = document.getElementById(img);

	if (obj.src == plus.src)
		obj.src = minus.src;
	else
		obj.src = plus.src;
}

function swapImage()
{
  var i,j=0,x,arg=swapImage.arguments;
  document.DIsrc = new Array;

  for(i=0;i<(arg.length-1);i+=3)
  {
  	if ((x=findObj(arg[i]))!=null)
	{
		document.DIsrc[j++]=x;
		if(!x.oSrc)
			x.oSrc=x.src; x.src=arg[i+1];
	}
  }
}

function swapImgRestore()
{
  var i,x,arg = document.DIsrc;
  for(i = 0; arg && i < arg.length && (x = arg[i]) && x.oSrc; i++)
  {
  	x.src=x.oSrc;
  }
}

function findObj(obj)
{
	return document.getElementById(obj);
}

function preloadImages()
{
  var d = document;
  if(d.images)
  {
	  if(!d.DIp)
	  	d.DIp = new Array();
		
	var i,j=d.DIp.length,arg=preloadImages.arguments;
	for(i=0; i<arg.length; i++)
	{
    	if (arg[i].indexOf("#") != 0)
		{
			d.DIp[j]=new Image;
			d.DIp[j++].src = arg[i];
		}
	}
  }
}

var sens = new Image();
var sensvote = 9 + Math.round(Math.random()*1);
var sensrnd = 1 + Math.round(Math.random()*1);
if (sensrnd == 1) {sens.src='http://staropramen-sensation.cz/napis/hodnoceni/detail/195/vote/'+sensvote};