//
// idealcover/static/myFalidate.js
//


if ( window.addEvent ) {
 window.addEvent( window, 'load', focusRelevantInput );
 // addEvent( window, 'load', menuFlasBindInit );
}


 //r url vytvori pole, tak sa da pristupovat k jednotlivym premenam metoodov get
        var pole = window.location.search.substr(1).split("&"); 
        var httpGetVars = new Array(); 
        for(i = 0; i < pole.length; i++){
        	httpGetVars[pole[i].split("=")[0]] = unescape(pole[i].split("=")[1]);  
        }
        
      
     
        
        

//
// najde první textový nereadonly ani nedisabled input a focusne ho
//
function focusRelevantInput() {
 if ( document.forms[0] ) {
  for ( var j = 0; j < document.forms[0].elements.length; j++) {
   if (document.forms[0].elements[j].name
   && !document.forms[0].elements[j].getAttribute('readonly')
   && document.forms[0].elements[j].type == 'text' ) {
    document.forms[0].elements[j].focus();
    break
   }
  }
 }
}

//
// myfalidate([formulář=objekt],[class povinných inputů=string])
// předpokládá, že všechny testované inputy mají vlastního parenta (např <p>)
// testované inputy musí mít jako první class [reqInputClassName]
// v druhém classu může být konkrétní typ (number|date|email|string)
// přidané je testování vypnlěnosti "jedné z" (pouze pro jedinou skupinu)
// warning se vypíše do (prvního) tagu ([warningTagName]) v daném kontejneru
//

function myfalidate(thisForm,reqInputClassName) {
 if ( !thisForm ) { return }
 reqInputClassName = reqInputClassName || 'required';
 locales.setLangCode();
 var warningTagName = 'strong';
 var result = true;

 var oneOfCnt = 0;
 var oneOfCntValue = 0;
 var oneOfTxtBuffer = [];

 var allUsedClassesRX = new RegExp('(' + reqInputClassName + '|email|date|number|oneOf|mustBeChecked)');

 for( var i = 0; i < thisForm.elements.length; i++) {

  curr = thisForm.elements[i];
  if ( !allUsedClassesRX.test(curr.className) ) {
   continue
  }
  currClassNames = curr.className.split(/\s+/);




  // přidáme prázdný / vymažeme warning
  clearWarning(curr);


  for ( var j = 0; j < currClassNames.length; j++) {

   currClassName = currClassNames[j];

   if ( currClassName == 'oneOf' ) {
    oneOfTxtBuffer.push(
     curr.parentNode.getElementsByTagName('label')[0].innerHTML.replace(/\W+$/,'')
    )
    oneOfCnt++;
   }

   if ( curr.value.length > 0 ) {
    if ( currClassName == 'email' ) {
     if ( !jcv_checkEmail(curr.value) ) {
      setWarning(curr,locales.get('insertEmail'));
     }
    } else if ( currClassName == 'number' ) {
     if ( curr.value.search(/^\d+$/) == -1 ) {
      setWarning(curr,locales.get('inserNumber'));
     }
    } else if ( currClassName == 'date' ) {
     if ( curr.value.search(/^\d\d\.\d\d\.\d\d\d\d$/) == -1 ) {
      setWarning(curr,locales.get('insertDate'));
     }
    } else if ( currClassName == 'oneOf' ) {
     oneOfCntValue++;
    }
   } else {
    if ( currClassName == reqInputClassName
    // +BASTL:
       && !/(^|\s+)oneOf(\s+|$)/.test(curr.className)
    // /+bastl
       ) {
     setWarning(curr,locales.get('fillIn'));
    }
   }

   if ( currClassName == 'mustBeChecked' ) {
    if ( curr.checked == false ) {
     setWarning(curr,locales.get('mustBeChecked'));
    }
   }

  }
 }

 if ( oneOfCnt > 0 && oneOfCntValue == 0 ) {
  for( var i = 0; i < thisForm.elements.length; i++) {
   curr = thisForm.elements[i];
   currClassNames = curr.className.split(/\s+/);
   for ( var j = 0; j < currClassNames.length; j++) {
    currClassName = currClassNames[j];
    if ( currClassName == 'oneOf' ) {
     setWarning(curr,locales.get('fillInOneOf') + oneOfTxtBuffer.join(', ') + '.' );
    }
   }
  }
 }

 // přidá text [str] za [obj]ekt do tagu [warningTagName] (viz začátek)
 function setWarning(obj,str) {
  obj.parentNode.getElementsByTagName(warningTagName)[0].innerHTML = str;
  result = false;
 }
 function clearWarning(obj) {

  if ( obj.parentNode.getElementsByTagName(warningTagName).length == 0 ) {
   var novyObj = document.createElement(warningTagName);
   obj.parentNode.appendChild(novyObj);
  }
  obj.parentNode.getElementsByTagName(warningTagName)[0].innerHTML = '';
 }

 return result

}

//
// locales
//
var locales = {
 langCode:
 // požadovaný jazyk, přepsatelný "odkudkoli"
  'en'
 ,
 setLangCode:
 // nastaví langCode pode kódu v URL
  function () {
   var langRgx = /\/(cs|en|de|ru|it|es|fr)\//i;
   if ( langRgx.test(document.location.href) ) {
    this.langCode = document.location.href.match(langRgx)[1].toLowerCase();
   } else { 
   
   if (this.langCode == 'en') this.langCode=httpGetVars["locale"];
     
   }
  }
 ,
 get:
 // vrátí slovo v aktuálním jazyce
  function ( locale ) {
   try {
    var msg = this.library[ locale ][ this.langCode ];
    if ( !msg ) { throw new Error }
   } catch(e) {
    var msg = e + ' "' + locale + '" ' + this.langCode;
     
   }
   return msg
  }
 ,
 library:
 // jazykově závislé texty
  {
   insertEmail:
    { cs: 'Vložte prosím platnou e-mailovou adresu.'
    , en: 'Please enter valid e-mail address.'
    , de: 'Schreiben Sie, bitte, Ihre E-Mail-Adresse.'
    , ru: 'Запишите действительный электронный адрес - и-майл.'
    , it: 'Inserisca il Vostro indirizzo e-mail valido.'
    , es: 'Escriba, por favor, la dirección válida de su correo electrónico.'
    , fr: 'Remplissez l´adresse d´e-mail valable, S.V.P.'
    }
   ,
   inserNumber:
    { cs: 'Vyplňte prosím číslo.'
    , en: 'Please enter number.'
    , de: 'Füllen Sie, bitte, die Nummer aus.'
    , ru: 'Укажите, пожалуйста, число.'
    , it: 'Inserite il numero.'
    , es: 'Rellene, por favor, el número.'
    , fr: 'Remplissez le numéro, S.V.P.'
    }
   ,
   insertDate:
    { cs: 'Vyplňte prosím datum ve formátu <code>dd.mm.rrrr<\/code>.'
    , en: 'Please enter date in form <code>dd.mm.yyyy<\/code>.'
    , de: 'Füllen Sie, bitte, das Datum im Format <code>TT.MM.JJJJ aus<\/code>.'
    , ru: 'Введите, пожалуйста, дату в формате <code>дд.мм.гггг<\/code>.'
    , it: 'Scriva la data in formato <code>gg.mm.aaaa<\/code>.'
    , es: 'Rellene, por favor, la fecha en formato <code>dd.mm.aaaa<\/code>.'
    , fr: 'Remplissez la date en format suivant: <code>jj.mm.aaaa<\/code>.'
    }
   ,
   fillIn:
    { cs: 'Vyplňte prosím položku.'
    , en: 'Please enter item.'
    , de: 'Füllen Sie, bitte, die Position aus.'
    , ru: 'Заполните, пожалуйста, поле.'
    , it: 'Compili il campo, per favore.'
    , es: 'Rellene, por favor, esta partida.'
    , fr: 'Remplissez le poste.'
    }
   ,
   fillInOneOf:
    { cs: 'Vyplňte prosím alespoň jednu z položek: '
    , en: 'Please enter at least one of these items: '
    , de: 'Füllen Sie, bitte, mindestes eine von diesen Angaben aus: '
    , ru: 'Укажите, пожалуйста, минимально одно из данных: '
    , it: 'Compili almeno uno dei campi: '
    , es: 'Rellene, por favor, por lo menos uno de los contactos: '
    , fr: 'Remplissez au moins un des postes: '
    }
   ,
   mustBeChecked:
    { cs: 'Musíte souhlasit.'
    , en: 'You must agree.'
    , de: 'Sie müssen Ihr Einverständnis erklären.'
    , ru: 'Подтвердите согласие.'
    , it: 'Accetto.'
    , es: 'Tiene que confirmar.'
    , fr: 'Vous devez d´être d´accord.'
    }
   ,
   emptyCartWarning:
    { cs: 'Nebylo vybráno žádné zboží.'
    , en: 'No product selected.'
    , de: 'Sie haben keine Ware Gewählt.'
    , ru: 'не было подобрано никакого товара.'
    , it: 'Non ha scelto nessun prodotto.'
    , es: 'No ha seleccionado ningún producto.'
    , fr: 'Vous n´avez pas choisi le produit.'
    }
   ,
   totalPrice:
    { cs: 'Cena celkem:'
    , en: 'Total price:'
    , de: 'Gesamt Preis:'
    , ru: 'итого цена:'
    , it: 'Prezzo totale:'
    , es: 'Precio total:'
    , fr: 'Prix total:'
    }
   //,
  }
 //,
}


//
// Reference: Sandeep V. Tamhankar (stamhankar@hotmail.com),
// http://javascript.internet.com
//
function jcv_checkEmail(emailStr) {
    if (emailStr.length == 0) {
        return true;
    }
    // TLD checking turned off by default
    var checkTLD=1;
    var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
    var emailPat=/^(.+)@(.+)$/;
    var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
    var validChars="\[^\\s" + specialChars + "\]";
    var quotedUser="(\"[^\"]*\")";
    var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
    var atom=validChars + '+';
    var word="(" + atom + "|" + quotedUser + ")";
    var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
    var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
    var matchArray=emailStr.match(emailPat);
    if (matchArray==null) {
        return false;
    }
    var user=matchArray[1];
    var domain=matchArray[2];
    for (i=0; i<user.length; i++) {
        if (user.charCodeAt(i)>127) {
            return false;
        }
    }
    for (i=0; i<domain.length; i++) {
        if (domain.charCodeAt(i)>127) {
            return false;
        }
    }
    if (user.match(userPat)==null) {
        return false;
    }
    var IPArray=domain.match(ipDomainPat);
    if (IPArray!=null) {
        for (var i=1;i<=4;i++) {
            if (IPArray[i]>255) {
                return false;
            }
        }
        return true;
    }
    var atomPat=new RegExp("^" + atom + "$");
    var domArr=domain.split(".");
    var len=domArr.length;
    for (i=0;i<len;i++) {
        if (domArr[i].search(atomPat)==-1) {
            return false;
        }
    }
    if (checkTLD && domArr[domArr.length-1].length!=2 &&
        domArr[domArr.length-1].search(knownDomsPat)==-1) {
        return false;
    }
    if (len<2) {
        return false;
    }
    return true;
}
