// JavaScript Document
/**
 * Doménové centrum
 * 
 * Doménové Centrum má okamžitě (AJAX) zjišťovat, Page Rank, Srank apod.
 * 
 */


/**
 * Po načtení stránky se zobrazí instrukce, pokud není zadána žádná doména
 */
window.onload = function() {
   document.getElementById("output").style.display = "block";
   Field.focus("domainName");
   if ($F("domainName").length > 1) {
       domc.keyPressed();
   }
   else {
       domc.showInstructions();
   }
}

// namespace pro Doménové Centrum
var domc = {};

// PROMĚNNÉ
domc.domainName = null;   // jméno domény
domc.lastSearch = null;   // která doména se zjišťovala naposled
domc.protokol = null;     // protokol který použije při hledání
domc.google = null;       // jestli se bude zobrazovat
domc.seznam = null;       // jestli se bude zobrazovat
domc.yahoo = null;        // jestli se bude zobrazovat
domc.alexa = null;        // jestli se bude zobrazovat
domc.jyxo = null;        // jestli se bude zobrazovat

/**
 * Po stisku klávesy se vyčisí zadaná doména a případně se začne hledat
 */
domc.keyPressed = function() {
    domc.hideError();
    if ($F("domainName").length == 0) {
        domc.showInstructions();
        domc.ajax.cancelRequests();
        return;
    }
    else if (domc.domainName == $F("domainName")) {
        var myform = document.getElementById('vyhledavani');
        for ( var i = 0; i < myform.length; i ++ ) {
          if ( myform[i].getAttribute('name') == 'protokol' ) {
            var ref = myform[i].getAttribute('value');
            if ( myform[i].checked ) {
              domc.protokol = ref;
            }
          }
        }
        if(domc.validDomain($F("domainName")) == true){
          domc.zobraz();
        }
        else{
          domc.showError();
        }
        
    }
    else {
        domc.domainName = $F("domainName");  //načíst doménu z formuláře
        domc.domainName = domc.purgeDomainName(domc.domainName);  //vyčistit doménu        
        var myform = document.getElementById('vyhledavani');
        for ( var i = 0; i < myform.length; i ++ ) {
          if ( myform[i].getAttribute('name') == 'protokol' ) {
            var ref = myform[i].getAttribute('value');
            if ( myform[i].checked ) {
              domc.protokol = ref;
            }
          }
        }
        $("domainName").value = domc.domainName;  // vrátit zpět do formuláře

        //pokud se zadá jen jeden znak, který se ořízne, tak se nehledá
        if ($F("domainName").length == 0) {
            domc.showInstructions();
            domc.ajax.cancelRequests();
            return;
        }
      if(domc.validDomain($F("domainName")) == true){
        domc.zobraz();
      }
      else{
        domc.showError();
      }
    }
}


domc.zobraz = function() {
    var myform = document.getElementById('ranky');
        for ( var i = 0; i < myform.length; i ++ ) {
          if ( myform[i].getAttribute('name') == 'google' ) {
            var ref = myform[i].getAttribute('value');
            if ( myform[i].checked ) {
              domc.google = ref;
              domc.showRank("g");
            }
                else
                {
                  domc.google = "false";
                  domc.hideRank("g");
                }
          }
          else if ( myform[i].getAttribute('name') == 'seznam' ) {
                var ref = myform[i].getAttribute('value');
                if ( myform[i].checked ) {
                domc.seznam = ref;
                domc.showRank("s");
              }
                else
                {
                  domc.seznam = "false";
                  domc.hideRank("s");
                }
          }
          else if ( myform[i].getAttribute('name') == 'yahoo' ) {
                var ref = myform[i].getAttribute('value');
                if ( myform[i].checked ) {
                domc.yahoo = ref;
                domc.showRank("y");
                }
                else
                {
                  domc.yahoo = "false";
                  domc.hideRank("y");
                }
          }
          else if ( myform[i].getAttribute('name') == 'alexa' ) {
                var ref = myform[i].getAttribute('value');
                if ( myform[i].checked ) {
                domc.alexa = ref;
                domc.showRank("a");
                }
                else
                {
                  domc.alexa = "false";
                  domc.hideRank("a");
                }
          }
          else if ( myform[i].getAttribute('name') == 'jyxo' ) {
                var ref = myform[i].getAttribute('value');
                if ( myform[i].checked ) {
                domc.jyxo = ref;
                domc.showRank("j");
                }
                else
                {
                  domc.jyxo = "false";
                  domc.hideRank("j");
                }
          }
        }
    if(domc.domainName == null || (domc.alexa == "false" && domc.google == "false" && domc.yahoo == "false" && domc.seznam == "false" && domc.jyxo == "false")){
        domc.showInstructions();
    }
    else
    {
        domc.searchDomain();
    }
}

domc.hideRank = function(page){
  document.getElementById(page).style.display = "none";
}

domc.showRank = function(page){
  document.getElementById(page).style.display = "inline";
}

// kontrola validace domény 
domc.validDomenka = function(domain){
    var domenka = /[a-z0-9]+['-']*(\.){1}[a-z0-9]+['-']*(\.){1}[a-z]*/
    if(domain.match(domenka)){
        var ret = true;
    }
    else{
        var ret = false;
    }
    return ret;
}

domc.validDomena = function(domain){
    var domena = /[a-z0-9]+['-']*(\.){1}[a-z]{2,5}/;
    if(domain.match(domena)){
        var ret = true;
    }
    else{
        var ret = false;
    }
    return ret;
}

domc.validDomain = function(domain){
    if(domc.validDomenka(domain) == true || domc.validDomena(domain) == true){
        var ret = true;
    }
    else{
        var ret = false;
    }
    return ret;
}


/**
 * Funkce zavolá dotaz na server na hledání ranku
 * Po odpovědi 
 */
domc.searchDomain = function() {        
        // před voláním nového requestu se starý zruší (včetně whois requestů)
        domc.ajax.cancelRequests();
    if(domc.yahoo == "true"){
        domc.ajax.requestYahoo = new Ajax.Request('./h/yahoo/' + domc.domainName + '/' + domc.protokol, {
            method:'get',
            onSuccess: function(q) {
                 domc.ajax.onSucces(q,"yahoo");
            },
            onLoading: domc.ajax.onLoading()
        });
    }
    if(domc.seznam == "true"){
        domc.ajax.requestSeznam = new Ajax.Request('./h/seznam/' + domc.domainName + '/' + domc.protokol, {
            method:'get',
            onSuccess: function(q) {
                domc.ajax.onSucces(q,"seznam");
            },
            onLoading: domc.ajax.onLoading()
        });
    }
    if(domc.google == "true"){
        domc.ajax.requestGoogle = new Ajax.Request('./h/google/' + domc.domainName + '/' + domc.protokol, {
            method:'get',
            onSuccess: function(q) {
                domc.ajax.onSucces(q,"google");
            },
            onLoading: domc.ajax.onLoading()
        });
    }
    if(domc.alexa == "true"){
        domc.ajax.requestAlexa = new Ajax.Request('./h/alexa/' + domc.domainName + '/' + domc.protokol, {
            method:'get',
            onSuccess: function(q) {
                 domc.ajax.onSucces(q,"alexa");
            },
            onLoading: domc.ajax.onLoading()
        });
    }
    if(domc.jyxo == "true"){
        domc.ajax.requestAlexa = new Ajax.Request('./h/jyxo/' + domc.domainName + '/' + domc.protokol, {
            method:'get',
            onSuccess: function(q) {
                 domc.ajax.onSucces(q,"jyxo");
            },
            onLoading: domc.ajax.onLoading()
        });
    }
}


/**
 * Odstranění znaků nepovolených pro doménový název z řetězce
 */
domc.purgeDomainName = function(domainName) {
    if (domainName.length == 0) { return domainName; }
    domainName = domainName.toLowerCase();  
    domainName = domainName.replace(/[^a-zA-Z0-9-.]+/g, "");
    domainName = domainName.substring(0,63);
    return domainName;
}


/**
 * Funkce zobrazí instrukce a skryje výsledky
 */
domc.showInstructions = function() {
    $('instructions').show();
    $('list').hide();
    $('chyba').hide();
    document.getElementById("moznosti").style.width = "auto";
    document.getElementById("moznosti").style.cssFloat = "none";
};

domc.showError = function() {
    $('chyba').show();
    $('instructions').hide();
    $('list').hide();
    document.getElementById("moznosti").style.width = "320px";
      if(navigator.appName == "Microsoft Internet Explorer" || navigator.appName == "Opera"){  
        document.getElementById("moznosti").style.styleFloat = "right";
      } else {
        document.getElementById("moznosti").style.cssFloat = "right";
      }
} 

domc.hideError = function() {
    $('chyba').hide();
    $('instructions').hide();
    $('list').show();
}
/**
 * Funkce skryje instrukce a zobrazí výsledky
 */
domc.showResults = function() {
    $('instructions').hide();
    $('list').show();
};


domc.whois = {}

domc.whois.setWhois = function(whois, page) {
    if (page == "yahoo") {
    	$('whois' + page).innerHTML = "Informace nejsou dostupné:<br />";
//        $('whois' + tld).innerHTML = "<strong>Doména:</strong> " + whois.domainName + '.' + tld + '<br />';
//        $('whois' + tld).innerHTML += "<strong>Popis:</strong> " + whois.description + '<br />';
//        $('whois' + tld).innerHTML += "<strong>Kontakt:</strong> " + whois.email + '<br />';
//        $('whois' + tld).innerHTML += "<strong>Registrováno od:</strong> " + whois.registeredFrom + '<br />';
//        $('whois' + tld).innerHTML += "<strong>Vyprší:</strong> " + whois.expiration + '<br />';
//        $('whois' + tld).innerHTML += "<strong>Držitel:</strong> " + whois.holder + '<br />';
//        $('whois' + tld).innerHTML += "<strong>Technický správce:</strong> " + whois.technicalHolder + '<br />';
//        $('whois' + tld).innerHTML += "<strong>Registrátor:</strong> " + whois.registrar + '<br />';
    }
    else if (page == "seznam") {
        $('whois' + page).innerHTML = "<strong>Doména:</strong> " + whois.domainName + '.' + tld + '<br />';
        $('whois' + page).innerHTML += "<strong>Registrováno od:</strong> " + whois.registeredFrom + '<br />';
        $('whois' + page).innerHTML += "<strong>Vyprší:</strong> " + whois.expiration + '<br />';
        $('whois' + page).innerHTML += "<strong>Registrátor:</strong> " + whois.registrar + '<br />';
    }
    else if (page == "google") {
        $('whois' + page).innerHTML = "<strong>Doména:</strong> " + whois.domainName + '.' + tld + '<br />';
        $('whois' + page).innerHTML += "<strong>Registrováno od:</strong> " + whois.registeredFrom + '<br />';
        $('whois' + page).innerHTML += "<strong>Registrátor:</strong> " + whois.registrar + '<br />';
        $('whois' + page).innerHTML += '<a href="http://www1.whois.eu/public/whois/GetDomainStatus.htm?domainName=' + whois.domainName + '" onclick="return!window.open(this.href);">Detaily</a>';
    }
    $('whois' + page).innerHTML += '<br/>  <a onclick="return!window.open(this.href);" style="display:inline;" href="' + domc.render.getWhoisLink(whois.domainName, page) + '">Pro detaily klikněte</a>'; 
}


domc.whois.request = new Array;
/**
 * Načtení whois informací
 * @param string domain Doménové jméno, pro které se zjišťuje
 * @param string tld Přípona domény pro kterou se zjišťuje whois info
 */
domc.whois.loadWhois = function(domain, page) {
    domc.whois.request[page] = new Ajax.Request('./whois/' + tld + '/' + domain, {
        method:'get',
        onSuccess: function(q) {
            try {
                var response = q.responseText.evalJSON();
                if (response.whois.err) {
                    throw "err";
                }
                domc.whois.setWhois(response.whois, tld);
            }
            catch (e) {
                $('whois' + tld).innerHTML = 'Informace nejsou dostupné.<br /><br />' +
                        '<a onclick="return!window.open(this.href);" style="display:inline;" href="' + domc.render.getWhoisLink(domain, tld) + '">Pro whois klikněte</a>';
            }
        },
        onLoading: function() {
             $('whois' + tld).innerHTML = "Informace se nahrávají";
        }
    });
}

/**
 * Zobrazení whois (po najetí na odkaz)
 * @param string tld Pro kterou doménu
 */
domc.whois.show = function(page) {
    $('whois' + page).show();
    $('copyright').setStyle({'padding-top': '225px'});  
}

/**
 * Skrytí whois (po sjetí mimo odkaz nebo div whois)
 * @param string tld Pro kterou doménu
 */
domc.whois.hide = function(page) {
    $('whois' + page).hide();
    //$('copyright').setStyle({'padding-top': '225px'});  
}


domc.ajax = {}
domc.ajax.request = new Array;
domc.ajax.requestYahoo = null;  // ajaxový request
domc.ajax.requestSeznam = null;  // ajaxový request
domc.ajax.requestGoogle = null;  // ajaxový request
domc.ajax.requestAlexa = null;  // ajaxový request
domc.ajax.requestJyxo = null;  // ajaxový request

/**
 * Zrušení všech otevřených ajax requestů
 */
domc.ajax.cancelRequests = function() {
    try {
        domc.ajax.requestYahoo.transport.abort();
        domc.ajax.requestSeznam.transport.abort();
        domc.ajax.requestGoogle.transport.abort();
        domc.ajax.requestAlexa.transport.abort();
        domc.ajax.requestJyxo.transport.abort();
        }   
    catch(e) {} 
}


/**
 * Požadavek se úspěšně vrátil ze serveru
 */
domc.ajax.onSucces = function(query, page) {
    var response = query.responseText.evalJSON();
    if(page == "yahoo"){
       var rank = response.yahoo;
	     var irank = response.yirank;
	     var linky = response.ylinky;
    }
    else if (page == "seznam") {
       var rank = response.seznam;
	     var irank = response.sirank;
	     var linky = response.slinky;
    }
    else if (page == "google") {
       var rank = response.google;
	     var irank = response.girank;
	     var linky = response.glinky;
    }
    else if (page == "alexa") {
       var rank = response.alexa;
	     var irank = response.airank;
	     var linky = response.alinky;
    }
    else if (page == "jyxo") {
       var rank = response.jyxo;
       var irank = response.jirank;
       var linky = response.jlinky;
    }
    if(response.domena != "error"){
      domc.render.drawOne(page, rank, irank, linky);
    }
    else{
      domc.showError();
    }
}

/**
 * Vykreslení načítání pro všechny domény
 */
domc.ajax.onLoading = function() {
        domc.showResults();
        domc.render.drawLoadingOne('yahoo');
        domc.render.drawLoadingOne('seznam');
        domc.render.drawLoadingOne('google');
        domc.render.drawLoadingOne('alexa');
        domc.render.drawLoadingOne('jyxo');
}

/**
 * Funkce pro vykreslování výsledků
 */
domc.render = {};

domc.render.getWhoisLink = function(domainName, page) {
    if (page == "yahoo") {
        whoisLink = "http://www.nic.cz/whois/?d=" + domainName + ".cz";
    }
    else if (page == "seznam") {
        whoisLink = "http://www.dnsstuff.com/tools/whois.ch?ip=" + domainName + ".com";
    }
    else if (page == "google") {
        whoisLink = "http://www1.whois.eu/public/whois/GetDomainStatus.htm?domainName=" + domainName + "&changeLang=cs";
    }
    return whoisLink;
}


/**
 * Vykreslení výsledků pro jednu doménu
 * @param string domainName Doména, která se hledala
 * @param string tld Přípona domény
 * @param availability Dostupnost dané domény (a, u, e, ea)
 */
domc.render.drawOne = function(page, rank, irank, linky) {  
    if(page == "seznam" && domc.seznam == "true"){
        $(page).innerHTML = 'S-rank <br /> <strong>' + rank + '</strong><br /><br />Zaindexované stránky<br /><strong>' + irank + '</strong><br /></strong>';
    }
    else if(page == "google" && domc.google == "true"){
        if(rank == null){rank = "0/10";}
        $(page).innerHTML = 'Page rank <br /><strong>' + rank + '</strong><br /><br />Zaindexované stránky<br /><strong>' + irank + '</strong><br /><br />Zpětné odkazy<br /><strong>' + linky + '</strong>';
    }
    else if(page == "yahoo" && domc.yahoo == "true"){
        $(page).innerHTML = 'Yahoo backlinks <br /><strong>' + rank + '</strong><br /><br />Zaindexované stránky<br /><strong>' + irank + '</strong><br /><br />Zpětné odkazy<br /><strong>' + linky + '</strong>';
    }
    else if(page == "alexa" && domc.alexa == "true"){
        $(page).innerHTML = 'Alexa traffic rank <br /><strong>' + rank + '</strong><br /><br />Zaindexované stránky<br /><strong>' + irank + '</strong><br /><br />Zpětné odkazy<br /><strong>' + linky + '</strong>';
    }
    else if(page == "jyxo" && domc.jyxo == "true"){
        $(page).innerHTML = 'Jyxo rank<br /><strong>' + rank + '</strong><br /><br />Zaindexované stránky<br /><strong>' + irank + '</strong><br /><br />Zpětné odkazy<br /><strong>' + linky + '</strong>';
    }
    // posunutí copyrightu dolu, jinak překrývá výsledky
   $('copyright').setStyle({'padding-top': '225px'});  
    
}

/**
 * Vykreslení načítání pro konkrétní doménu
 * @param string tld Přípona domény, která se má vykreslit jako načítající se
 */
domc.render.drawLoadingOne = function(page) {
    //$(page).className = 'loading';
    if(domc.google == "true"){
    $('google').innerHTML = '<span class="loadingText">Rank<br />se nahrává...</span>';
    }
    if(domc.yahoo == "true"){
    $('yahoo').innerHTML = '<span class="loadingText">Rank<br />se nahrává...</span>';
    }
    if(domc.seznam == "true"){
    $('seznam').innerHTML = '<span class="loadingText">Rank<br />se nahrává...</span>';
    }
    if(domc.alexa == "true"){
    $('alexa').innerHTML = '<span class="loadingText">Rank<br />se nahrává...</span>';
    }
    if(domc.jyxo == "true"){
    $('jyxo').innerHTML = '<span class="loadingText">Rank<br />se nahrává...</span>';
    }
}

domc.preview = {}
domc.preview.show = function(page) {
    $('preview' + page).show();
}
domc.preview.hide = function(page) {
    $('preview' + page).hide();
}


