//
// main.js
//

//
// projekt: Text-pilot
// autor: bielda
// dne: 20. 4. 2009
// copyright (c) bielda
// 

//
// hlavni script
//

var defaultPage = "#uvod"; //hlavni stranka
var parts = ["contacts", "news", "ref"]; //vsechny casti praveho sloupce
var rightParts = { //casti preveho sloupce viditelne na dane strance
  uvod: ["contacts", "news", "ref"],
  kontakt: ["news", "ref"],
  def: ["contacts", "news", "ref"] //casti videtne pri zobrazeni stranky nedefinovane vyse
}
var refs = { //pocet zobrazenych referenci (korektura, preklad)
  korektury: 2,
  preklady: 2,
  def: 3
};
var prices = {
  gramatic: [50, 45],
  stylistic: [100, 95],
  transNorm: [230, 215],
  transLaw: [260, 245],
  copy: [20, 20]
};
var mods = {
  weekend: [1.4, 1.4],
  student: [0.85, 0.85]
};
var minAmount = 1;

var expanded = true;
var actualPage;
var form = true; //true - zobrazen kontaktni formular
var showArrows = true;
var showedMember = -1;

var timer;
function changePage(newPage) {
  var clicked = true;
  if (newPage == undefined) {
    newPage = document.location.hash ? document.location.hash : defaultPage;
    clicked = false;
  }
  /*
  if (newPage == "#kontakt_objednavka" && form)
    changeForm();
  else if (newPage == "#kontakt_kontakt" && !form)
    changeForm();
  */
  if ($(newPage).length == 0) { //if neexistuji obsah
    if (!clicked) //if zapsano rucne
      setHash(actualPage);
  }
  else if (actualPage == newPage) { //if soucasny obsah
    if (clicked) { //if kliknuto na odkaz
      if (expanded)
        $(document).scrollTo(actualPage, 1000, {axis: "y", offset: -25});
      else
        $(document).scrollTo("#menu", 1000, {axis: "y", offset: -10});
    }
  }
  else {
    setHash(newPage);
    
    if (expanded) {
      $(document).scrollTo(newPage, 1000, {axis: "y", offset: newPage == "#menu" ? -10 : -25});
    }
    else {
      var pageParts = newPage.split("_");
      var pagePart = pageParts[0];
      
      if (pagePart != actualPage.split("_")[0]) {
        var oldPage = actualPage.split("_")[0];
        
        if ($(document).scrollTop() == $("#menu").offset().top - 10) //if netreba scrollovat
          changeContent(oldPage, newPage);
        else {
          $(document).scrollTo("#menu", 1000, {
            axis: "y",
            offset: -10,
            onAfter: function() {
              changeContent(oldPage, newPage);
            }
          });
        }
      }
    }
    actualPage = newPage;
  }
  
  timer = setTimeout(function() {changePage();}, 100);
}

function changeContent(oldPage, newPage) {
  var pageParts = newPage.split("_");
  var pagePart = pageParts[0];
  
  $(oldPage).hide();
  $(pagePart).show();
  changeRightColumn(pagePart);
  $("#menu a.actual, #footer ul a.actual").removeClass("actual");
  $("#menu a[href=" + pagePart + "], #footer ul a[href=" + pagePart + "]").addClass("actual");
  if (pageParts.length > 1) {
    setTimeout(function() {
      $(document).scrollTo(newPage, 800, {
        axis: "y",
        offset: -10
      });
    }, 100);
  }
}

function changeRightColumn(page) {
  var showedParts = page == "all" ? parts
   : (rightParts[page.substring(1)] == undefined ? rightParts['def'] : rightParts[page.substring(1)]);
  
  var j = 0;
  for (var i = 0; i < parts.length; i++) {
    if (parts[i] == showedParts[j]) {
      $("#right_" + parts[i]).show();
      j++;
    }
    else
      $("#right_" + parts[i]).hide();
  }
  
  changeRefs(page);
}

function changeRefs(page) {
  if (refs[page.substring(1)] == undefined)
    page = "def";
  else
    page = page.substring(1);
  
  $("#right_ref li").hide();
  
  if (page == "preklady" || page == "korektury") {
    if ($("#right_ref li." + page).length != 0)
      $("#right_ref li." + page + ":lt(" + refs[page] + "), #right_ref li.next").show();
    else
      $("#right_ref").hide();
  }
  else
    $("#right_ref li:lt(" + refs.def + "), #right_ref li.next").show();
}

function setHash(hash) {
  var extension = "X";
  var changed = false;
  if ($(hash).length != 0) {
    $(hash).get()[0].id += extension; //zmena id aktualniho obsahu - aby pri zmene hashe stranka neskocila
    changed = true;
  }
  document.location.hash = hash; //zmena hashe na aktualni obsah
  /*
  if (hash != defaultPage)
    document.location.hash = hash; //zmena hashe na aktualni obsah
  */
  if (changed)
    $(hash + extension).get()[0].id = hash.substring(1); //zmena zpet
}

function changeExpansion() {
  if (expanded) { //if rozbaleno -> sbalit
    //$("#content > div:not(" + actualPage + ")").hide(); //nefunguje v Opere 9.10
    if ($("#content " + actualPage).length == 0) { //if hash na neexistuji obsah (typicky #menu)
      $("#content div:not(#content div div, " + defaultPage + ")").hide();
      setHash(defaultPage);
      actualPage = defaultPage;
    }
    else
      $("#content div:not(#content div div, " + actualPage.split("_")[0] + ")").hide();
    
    $("#menu a[href=" + actualPage.split("_")[0] + "], #footer ul a[href=" + actualPage.split("_")[0] + "]")
     .addClass("actual");
    $("#menu li.arrows_up").removeClass().addClass("arrows_down");
    $("#menu li span").text("Rozbalit.");
    
    changeRightColumn(actualPage.split("_")[0]);
  }
  else { // -> rozbalit
    $("#menu a.actual, #footer ul a.actual").removeClass("actual");
    $("#content div:not(#content div div)").show();
    $("#menu li.arrows_down").removeClass().addClass("arrows_up");
    $("#menu li span").text("Sbalit.");
  }
  
  showArrows = false;
  expanded = !expanded;
}
/*
function changeForm() {
  setHash(form ? "kontakt_objednavka" : "kontakt_kontakt");
  $("#formulare h3").text(form ? "Objednávkový formulář." : "Kontaktní formulář.")
   .get(0).id = form ? "kontakt_objednavka" : "kontakt_kontakt";
  $("#form_changer").text(form ? "Zobrazit kontaktní formulář." : "Zobrazit objednávkový formulář.");
  if (form) {
    $("#kontaktni_formular").hide();
    $("#objednavkovy_formular").show();
  }
  else {
    $("#objednavkovy_formular").hide();
    $("#kontaktni_formular").show();
  }
  form = !form;
}
*/
function isMail(mail) {
  if (mail.match(/^[a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+.[A-Za-z]{2,4}$/))
     return true;
	 else
     return false;
}

function processSubmit(message) {
  message = message.substring(6);
  var correct = message == "";
  
  if (correct)
    message = "Zpráva se odesílá.";
  
  var messageBox = $("#message");
  var formHeight = $("#kontaktni_formular").height();
  if (messageBox.length == 0) {
    $("#kontaktni_formular input[type=submit]").css("visibility", "hidden"); //Opera
    $("#kontaktni_formular").prepend("<div id='message'>" + message + "</div>");
    
    messageBox = $("#message");
    
    messageBox.css({
      "top": formHeight - messageBox.outerHeight(),
      "left": ($("#kontaktni_formular").width() - messageBox.width()) / 2
    }).show();
  }
  else {
    $("#kontaktni_formular input[type=submit]").css("visibility", "hidden"); //Opera
    messageBox.html(message).css({
      "top": formHeight - messageBox.outerHeight(),
      "left": ($("#kontaktni_formular").width() - messageBox.width()) / 2
    }).show();
  }
  
  if (correct)
    return true;
  else {
    $("#kontaktni_formular input[type=submit]").css("visibility", "visible");
    setTimeout(function() {messageBox.fadeOut(1000);}, 3000);
    
    return false;
  }
}

function recount() {
  var textLength = $("#calc_text").val().length;
  var type = $("#calc_type").val();
  var copy = $("#calc_copy").get(0).checked;
  var weekend = $("#calc_weekend").get(0).checked;
  var student = $("#calc_student").get(0).checked;
  
  var pages = Math.round((textLength / 1800) * 100) / 100; //zaokrouhleni na setiny
  
  var underMin = pages < minAmount && textLength != 0;
  
  var normalPrice = prices[type][pages > 10 ? 1 : 0];
  var copyPrice = copy ? ((type == "gramatic" || type == "stylistic") ? prices["copy"][pages > 10 ? 1 : 0] : 0) : 0;
  var modification = 1
    * (weekend ? mods["weekend"][pages > 10 ? 1 : 0] : 1) //vikendovy priplatek
    * (student ? mods["student"][pages > 10 ? 1 : 0] : 1); //studentska sleva
  var totalPrice = Math.floor((underMin ? minAmount : pages) * (normalPrice + copyPrice) * modification);
  
  pages = String(pages).replace(".", ",");
  
  $("#kalkulacka b:eq(0)").text(pages + " NS");
  $("#kalkulacka b:eq(1)").text(
    Math.round(normalPrice * modification * 100) / 100
    + (copyPrice == 0 ? "" : (" + " + Math.round(copyPrice * modification * 100) / 100))
    + " Kč/NS"
  );
  $("#kalkulacka b:eq(2)").text(totalPrice + " Kč");
  
  if (underMin) {
    $("#explanation").show();
  } else {
    $("#explanation").hide();
  }
}

function showHideCopy() {
  var type = $("#calc_type").val();
  if (type == "gramatic" || type == "stylistic") {
    $("#kalkulacka label[for=calc_copy]").css("color", "black");
    $("#calc_copy").get(0).disabled = false;
  }
  else {
    $("#kalkulacka label[for=calc_copy]").css("color", "#aaaaaa");
    $("#calc_copy").get(0).disabled = true;
  }
}

function showMemberInfo(member) {
  showedMember = member;
  var memberBox = $("#members div:not(#members div div):eq(" + member + ")");
  /* zneviditelneni ostatnich */
  $("#members div:not(#members div div):eq(" + (member == 0 ? 1 : 0) + ")").css("visibility", "hidden");
  $("#members div:not(#members div div):eq(" + (member == 2 ? 1 : 2) + ")").css("visibility", "hidden");
  /* ----- */
  
  /* animace posunu a zviditelneni textu */
  var textStyle = {
    position: "absolute",
    top: "79px",
    left: "220px",
    width: "420px"
  }
  if (member != 0) { //if NE prvni - treba animovat
    memberBox.css({
      position: "absolute",
      top: Math.floor(memberBox.position().top) + "px",
      left: Math.floor(memberBox.position().left) + "px"
    }).animate({
      top: 0,
      left: 0
    }, 500);
    
    setTimeout(function() {
      memberBox.children("p").css(textStyle).fadeIn(500);
    }, 500);
  }
  else {
    memberBox.children("p").css(textStyle).fadeIn(500);
  }
  /* ----- */
  
  /* zmena click udalosti */
  $("#members div.name, #members img").unbind("click").click(function() {
    hideMemberInfo();
  });
  /* ----- */
}

function hideMemberInfo() {
  if (showedMember != -1) {
    var memberBox = $("#members div:not(#members div div):eq(" + showedMember + ")");
    memberBox.children("p").hide();
    memberBox.css("position", "static");
    $("#members div:not(#members div div):eq(" + (showedMember == 0 ? 1 : 0) + ")").css("visibility", "visible");
    $("#members div:not(#members div div):eq(" + (showedMember == 2 ? 1 : 2) + ")").css("visibility", "visible");
    $("#members div.name").click(function() {
      showMemberInfo($("#members div.name").index(this));
    });
    $("#members img").click(function() {
      showMemberInfo($("#members img").index(this));
    });
    showedMember = -1;
  }
}

$(document).ready(function() {
  actualPage = (document.location.hash && $(document.location.hash).length != 0) ? document.location.hash : defaultPage;
  
  $("#menu").append("<li class=\"arrows_up\"><div><span>Sbalit</span></div></li>");
  $("#menu li div").click(function() {changeExpansion();}).hover(
    function() {
      $("#menu li div span").show();
      $("#language").hide();
    }, 
    function() {
      if (!showArrows)
        $("#menu li div span").hide();
      $("#language").show();
    }
  );
  
  /*
  if (document.referrer.indexOf("?") == -1) {
    changeExpansion();
    $("#menu li div span").hide();
    showArrows = false;
  }
  */
  changeExpansion();
  $("#menu li div span").hide();
  showArrows = false;
  
  $("a[href^=#]").click(function() {
    changePage($(this).attr("href"));
    return false;
  });
  
  /* uprava formularu */
  //$("#objednavkovy_formular").hide();
  //$("#formulare h3:eq(1)").remove();
  //$("#formulare").prepend("<span id=\"form_changer\">Zobrazit objednávkový formulář.</span>");
  /*$("#form_changer").click(function() {
    changeForm();
  }).hover(
    function() {
      $(this).css("text-decoration", "none");
    },
    function() {
      $(this).css("text-decoration", "underline");
    }
  );*/
  
  //$("#formulare form:eq(0) fieldset:last, #formulare form:eq(1) fieldset:last").replaceWith(
  //  "<input type=\"hidden\" name=\"jscontrol\" value=\"true\" />"
  //); //smazani kontrolnich otazek; nahrazeni hiddne-inputem informujicim o tom, ze uzivatel ma zapnuty js
  
  $("#kontaktni_formular fieldset:last").replaceWith(
    "<input type='hidden' name='jscontrol' value='true' />"
  ); //smazani kontrolni otazky; nahrazeni hiddne-inputem informujicim o tom, ze uzivatel ma zapnuty js
  
  if ($("#fi_yes").get(0).checked == true) {
    $("#bill_info").show();
  } else {
    $("#bill_info").hide();
  }
  
  $("#fi_yes").parent().click(function() {
    if ($("#fi_yes").get(0).checked == true) {
      $("#bill_info").show();
    } else {
      $("#bill_info").hide();
    }
  });
  
  $("#kontaktni_formular").submit(function() {
    var message = "";
    
    var billInfo = $("#fi_yes").get(0).checked;
    
    if ($("#ci_name").val().match(/\w/) == null)
      message += "<br />Jméno a příjmení nebylo vyplněno.";
    if (!isMail($("#ci_mail").val()))
      message += "<br />E-mail nemá platný tvar.";
    if (billInfo && $("#fi_name").val().match(/\w/) == null)
      message += "<br />Jméno/název firmy nebylo vyplněno.";
    if (billInfo && $("#fi_address").val().match(/\w/) == null)
      message += "<br />Adresa nebyla vyplněna.";
    
    return processSubmit(message);
  });
  /* ----- */
  
  /* kalkulacka */
  $("#kalkulacka form").submit(function() {return false;}); //at se formular nikdy neodesle
  $("#kalkulacka input[type=submit]").remove();
  $("#kalkulacka form").append("<fieldset><legend>Výsledek</legend><div><span>Počet normostran: </span>"
   + "<b>0 NS</b></div><div><span>Cena za normostranu: </span><b>0 Kč/NS</b></div>"
   + "<div><span>Výsledná cena: </span><b>0 Kč</b></div>"
   + "<div style='margin-top: 5px' id='explanation'>(Podle <a href='#podminky_bod-5'>Smluvních podmínek</a> "
   + "odpovídá minimální cena jedné normostraně.)</div></fieldset>");
  $("#calc_text").focus(function() {
    $("#calc_text").keydown(function() {
      setTimeout(function() {recount();}, 10);
    });
  });
  $("#calc_text").blur(function() {
    $("#calc_text").unbind('keydown');
    recount();
  });
  $("#calc_type").change(function() {
    showHideCopy();
    recount();
  });
  $("#calc_copy").click(function() {
    recount();
  });
  $("#calc_weekend").click(function() {
    recount();
  });
  $("#calc_student").click(function() {
    recount();
  });
  
  showHideCopy();
  recount();
  /* ----- */
  
  /* podrobnosti o clenech tymu */
  /*$("#members p").hide();
  $("#members div.name").css("cursor", "pointer").click(function() {
    showMemberInfo($("#members div.name").index(this));
  });
  $("#members img").css("cursor", "pointer").click(function() {
    showMemberInfo($("#members img").index(this));
  });*/
  /* ----- */
  
  /* referencni dopis */
  $("#right_ref a.img").click(function() {
    var info = $(this).attr("href").split("#");
    var dimension = info[1].split("-");
    
    var $popup = $("<div class='popup'><img src='" + info[0] + "'><div class='close'>Zavřít</div>");
    $popup.css({
      top: ($(window).height() - dimension[1]) < 10
        ? ($(window).scrollTop() - 43)
        : $(window).scrollTop() - 53 + ($(window).height() - dimension[1]) / 2,
      left: ($("#body").width() - dimension[0]) / 2,
      display: "none"
    }).appendTo($("#body")).click(function() {
      $(this).fadeOut("fast", function() {
        $(this).remove();
      });
    }).fadeIn("fast");
    
    return false;
  });
  /* ----- */
  
  changePage();
  
});

