// JavaScript Document

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

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

/*
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-NP-Za-np-z0-9]+/;
  var digitsRegEx = /[\d]{1}/;
  var newKey = key.toUpperCase();
  
  if (keyCode == 8 ||
	  keyCode == 46 ||
	  keyCode == 39 ||
	  keyCode == 37)
  {
	  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 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 == 'kód VIN' ||
	  srch.value == 'jednacie číslo')
  {
	srch.value = "";  
  }
}

// form validation

function validateOrderForm(formName)
{
	if(!valButton(formName.proverka))
	{
		alert('Prosím zvolte typ proverky');
		formName.proverka[0].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
	}
	return true
}

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;
}
