var actualChapter = 0;
var actualPrep = 0;
var questionsCount = 0;
var testOrder = new Array();
var sections = ["toc", "thumbs", "single"]
var displayMode = "normal"
window.addEventListener("load", init)
var baseurl = this.location.href;
function init(evt) {
var chapter = -1;
var prep = -1;
if (baseurl.indexOf("?") > -1) {
var end = baseurl.substring(baseurl.indexOf("?")+1);
var attrs = end.match(/[^\&]+=[^\&]+/g);
if (attrs) {
for (var i = 0; i < attrs.length; i++) {
var attr = attrs[i];
var name = attr.substring(0,attr.indexOf("="));
var val = attr.substring(attr.indexOf("=")+1);
if (name == "chapter") {
chapter = parseInt(val);
}
if (name == "prep") {
prep = parseInt(val);
}
}
}
baseurl = baseurl.substring(0, baseurl.indexOf("?"))
}
if (chapter != -1) {
showChapter(chapter);
if (prep > 0) {
showPreparate(prep-1);
}
}
//showSection("toc")
}
function hltab(uzel) {
var tabs = uzel.parentNode.getElementsByTagName("LI");
for (var i =0; i < tabs.length; i++) {
tabs[i].className = (tabs[i] == uzel) ? "active" : ""
}
}
function showToc() {
showSection("toc")
}
function generateToc() {
var vystup = "
"
for (var i =0; i< chapters.length; i++) {
vystup += "";
vystup += (chapters[i].podtitul.length > 0) ? chapters[i].podtitul : chapters[i].titul
vystup += " "
}
vystup +=" "
document.getElementById("toc").innerHTML = vystup
}
function nextChapter() {
if (actualChapter < chapters.length-1) {
actualChapter++;
showChapter(actualChapter)
}
}
function prevChapter() {
if (actualChapter > 0) {
actualChapter--;
showChapter(actualChapter)
}
}
function showChapter(index) {
actualChapter = index;
var chapter = chapters[index];
var vystup = ""
// vystup += " "
if (index > 0) {
vystup += " "
}
else {vystup += " "}
vystup += chapter.titul
if (index < chapters.length-1) {
vystup += " "
}
else {vystup += " "}
document.getElementById("maintitle").innerHTML = vystup
if (chapter.podtitul != "" ) {
document.getElementById("subtitle").innerHTML = chapter.podtitul
document.getElementById("subtitle").style.display = "block"
}
else {
document.getElementById("subtitle").style.display = "none"
}
if (chapter.popis && chapter.popis != "" ) {
document.getElementById("ch_description").innerHTML = chapter.popis
document.getElementById("ch_description").style.display = "block"
}
else {
document.getElementById("ch_description").style.display = "none"
}
actualPrep = 0;
showSection("thumbs");
generateThumbs()
/*showPreparate(0)
*/
history.pushState({}, popis, baseurl + "?chapter=" + actualChapter);
}
function showSection(sid) {
document.getElementById("zahlavi").style.display = (sid == "thumbs" || sid == "single") ? "block" : "none"
for (var i = 0; i < sections.length; i++) {
document.getElementById(sections[i]).style.display = (sid == sections[i] ) ? "block" : "none";
}
}
/* ************************* generovani prehledu nahledu */
function generateThumbs() {
showSection("thumbs")
document.getElementById("subsubsection").style.display = "none"
var thumbs = document.getElementById("thumbs")
var vystup = ""
var preparaty = chapters[actualChapter].preparaty
var sections = chapters[actualChapter].sekce;
secs = { unsorted: [] }
if (chapters[actualChapter].sekce) {
for (var i = 0; i < sections.length; i++ ) {
secs[sections[i].id] = []
}
}
for (var i =0; i < preparaty.length; i++) {
if (!preparaty[i].sekce ||preparaty[i].sekce == "" ) secs.unsorted.push( {prep: preparaty[i], index: i} )
else secs[preparaty[i].sekce].push( {prep: preparaty[i], index: i} )
}
for (var i = 0; i < secs.unsorted.length; i++) {
vystup += generateThumb(secs.unsorted[i])
}
for (var i= 0; i < chapters[actualChapter].sekce.length; i++) {
var sec = secs[chapters[actualChapter].sekce[i].id]
vystup += "" + chapters[actualChapter].sekce[i].titul + "<\/h3>"
for (var j=0; j < sec.length; j++) {
vystup += generateThumb(sec[j])
}
}
vystup += "<\/menu>";
thumbs.innerHTML = vystup;
history.pushState({}, popis, baseurl + "?chapter=" + actualChapter);
}
function generateThumb(preparat) {
var vystup = ""
var file = preparat.prep.preparat;
var desc = preparat.prep.titul;
var label = chapters[actualChapter].label + "–"
desc = desc.replace(/(\s)([ksvziouKSCVZIOU])(\s)/g,"$1$2 ")
/* */
var chunks = desc.split(" ");
desc = chunks[0];
for (var j = 1; j < chunks.length; j++) {
if (desc.length + chunks[j].length + 1 < 55 ) {
desc += " " + chunks[j];
}
else break;
}
if (desc.indexOf("") > 0 && desc.indexOf("<\/em>") ==-1 ) desc += " "
desc += "…";
file = file.substring(0, file.indexOf("."));
var type = "";
if (preparat.prep.type) type = "class='" + preparat.prep.type + "'";
vystup += ""
vystup += " "
vystup += "" + label + (preparat.index + 1) + " " + desc + " ";
vystup += " "
return vystup
}
function getSubsection(sid) {
var secs = chapters[actualChapter].sekce;
for (var i = 0; i < secs.length; i++) {
if (secs[i].id == sid) return secs[i]
}
return false;
}
/* *************** navigace mezi preparaty *****************/
function nextPreparate() {
if (actualPrep < chapters[actualChapter].preparaty.length-1) {
actualPrep++;
showPreparate(actualPrep)
}
}
function prevPreparate() {
if (actualPrep > 0) {
actualPrep--;
showPreparate(actualPrep)
}
}
function showPreparate(index) {
actualPrep = index;
showSection("single");
var first = (index == 0) ? "firstOn" : "firstOff";
var last = (index == chapters[actualChapter].preparaty.length -1) ? "lastOn" : "lastOff";
document.getElementById("mainFigure").className = "figure popiskyOff legendaOff" + " " + first + " " + last;
document.getElementById("legenda").innerHTML = ""
var vystup = ""
var prep = chapters[actualChapter].preparaty[index];
var ssc = document.querySelector("#subsubsection")
if (prep.sekce) {
var subsec = getSubsection(prep.sekce)
ssc.style.display = "block";
ssc.querySelector("h3").innerHTML = subsec.titul;
ssc.querySelector("div").innerHTML = subsec.popis;
}
else {ssc.style.display = "none"}
var label = chapters[actualChapter].label + "-"
vystup += " "
vystup += label + (index+1) + " " + prep.titul
document.getElementById("figtitle").innerHTML = vystup
//generovani popisku
var fig1 = document.getElementById("preparat");
var f_name = prep.preparat.substring(0, prep.preparat.indexOf("."))
var f_type = prep.preparat.substring(prep.preparat.indexOf(".")+1)
var pic = ""
var p_height = 480
if (displayMode == "fullscreen") {
p_height = Math.min(650, prep.origH );
}
if (f_type == "svg" ) {
pic = ""
pic+= " "
pic += "<\/object>"
}
else {
var pic = " ";
}
var svg = ""
if (prep.graphics) {
svg = ""
for (var i =0; i < prep.graphics.length; i++) {
var graph = prep.graphics[i];
var style = "";
if (graph.type == "path") {
var markerEnd = (graph.markerEnd) ? " marker-end='url(#" + graph.markerEnd + ")'" : "";
//svg += " ";
if (graph.style && graph.style != "") {
style = " style='" + graph.style + "'";
}
svg += " "
}
if (graph.type == "text") {
if (graph.style && graph.style != "") {
style = " style='" + graph.style + "'";
}
svg += "" + graph.text + " ";
}
}
svg += " "
}
fig1.innerHTML = pic + svg
hookEvent('fig_preparat', 'mousewheel', resizePic);
//vystup = " "
/*
var puvodni = fig1.getElementsByTagName("DIV")
for (var i = puvodni.length-1; i >-1; i--) fig1.removeChild(puvodni[i])
*/
var sfy = p_height/480;
document.getElementById("fig_preparat").addEventListener("click", addDesc)
for (var i=0; i < prep.popisky.length; i++) {
var pop = prep.popisky[i];
var cx = Math.round(pop[0]*sfy - 10 + 10*sfy-10)
var cy = Math.round(pop[1]*sfy - 0 + 10*sfy-10)
var desc = fig1.appendChild(document.createElement("DIV"))
desc.setAttribute("class", "popisek");
if (pop.length > 3) desc.classList.add("orient-" + pop[3]);
//desc.setAttribute("style", "left: " + (pop[0]-10) + "px; top: " + (pop[1]-0) + "px;");
desc.setAttribute("style", "left: " + cx + "px; top: " + cy + "px;");
var legenda = prep.legenda[pop[2]-1];
legenda = legenda.replace(/(\s)([ksvziouKSVZAIOU])\s/g,"$1$2 ")
desc.setAttribute("alt", prep.legenda[pop[2]-1] );
desc.innerHTML = " " //"?" //pop[2];
var div = desc.appendChild(document.createElement("P"))
var inter = div.appendChild(document.createElement("SPAN"))
inter.setAttribute("class", "popis_obsah");
inter.innerHTML = legenda
}
var tl_visible = (prep.popisky.length == 0) ? "hidden" : "visible"
var labels = document.getElementById("mainFigure").getElementsByTagName("LABEL")
for (var i = 0; i < labels.length; i++) {
labels[i].style.visibility = tl_visible;
}
//generovani legendy
vystup = "";
for (var i = 0; i < prep.legenda.length; i++) {
vystup += "" + prep.legenda[i] + "<\/li>"
}
document.getElementById("legenda").innerHTML = vystup;
//embryo + rez
var sf = 0.6
var d = 120;
if (prep.rez.length > 3) d = prep.rez[3];
vystup = " "
var rotace = "-webkit-transform: rotate(" + prep.rez[2] + "deg); -moz-transform: rotate(" + prep.rez[2] + "deg);"
var delka = " width: " + (d*sf) + "px;"
vystup += "
"
document.getElementById("embryo").innerHTML = vystup;
//spodni popis obrazku
var popis = prep.popis;
popis = popis.replace(/(\s)([ksvziouKSVZAIOU])\s/g,"$1$2 ")
document.getElementById("popis").innerHTML = popis ;
history.pushState({}, popis, baseurl + "?chapter=" + actualChapter + "&prep=" + (index+1));
}
var dCount = 0;
function addDesc(evt) {
var tgt = evt.target
var box = tgt.getBoundingClientRect();
var cx = Math.round(evt.clientX - box.left) -12;
var cy = Math.round(evt.clientY - box.top) -12;
if (evt.ctrlKey) { // klik na pozadi + CTRL = pridani noveho krouzku
dCount++;
document.getElementById("vystupni").value += ", [" + cx + ", " + cy + ", " + dCount + "]";
}
else {
// detachEdits();
}
}
/************************* testova cast *******************************/
function randomizer() {
return Math.floor(3*Math.random()+1)-2
}
function removeClicks() {
var descs = document.getElementById("preparat").getElementsByTagName("DIV");
for (var j = 0; j < descs.length; j++) {
descs[j].setAttribute("onclick", "")
}
}
function startTest2() {
hideInfos();
var figure = document.getElementById("mainFigure")
figure.className = figure.className.replace("popiskyOn", "popiskyOff")
figure.className = figure.className.replace("legendaOff", "legendaOn")
questionsCount = 0;
testOrder = new Array()
var test = document.getElementById("test_legenda")
var legenda_ol = document.getElementById("legenda")
var figure = document.getElementById("mainFigure").className
var leg = chapters[actualChapter].preparaty[actualPrep].legenda
var items = new Array()
for (var i =0; i < leg.length; i++) {
items.push(leg[i])
}
items.sort(randomizer)
var vystup = ""
for (var i = 0; i< items.length; i++ ) {
vystup += " " + items[i] + "<\/li>";
}
legenda_ol.innerHTML = vystup
var descs = document.getElementById("preparat").getElementsByTagName("DIV");
for (var k =0; k < descs.length; k++) testOrder.push(k);
testOrder.sort(randomizer);
for (var j = 0; j < descs.length; j++) {
descs[j].setAttribute("onclick", "")
// descs[j].className = ( j == testOrder[0] ) ? "popisek questioned" : "popisek hidden"
if ( j == testOrder[0] ) descs[j].classList.add("questioned")
else {
descs[j].classList.add("hidden")
}
descs[j].setAttribute("title", "");
}
}
function checkAnswer2(answer) {
var items = document.getElementById("preparat").getElementsByTagName("DIV")
if (questionsCount == items.length) return;
var spravna = items[testOrder[questionsCount]];
spravna.classList.remove("questioned");
//spravna.className = (spravna.getAttribute("alt") == answer ) ? "popisek correct" : "popisek wrong";
if (spravna.getAttribute("alt") == answer ) spravna.classList.add("correct")
else spravna.classList.add("wrong");
if (++questionsCount < items.length ) {
var newItem = items[testOrder[questionsCount]]
newItem.classList.add("questioned");
newItem.classList.remove("hidden");
}
//else removeClicks()
}
function showInfos() {
var items = document.getElementById("legenda").getElementsByTagName("LI")
var vystup = ""
for (var i = 0; i< items.length; i++ ) {
var item = items[i]
if (!item.classList.contains("hidden")) items[i].classList.add("hidden");
}
var descs = document.getElementById("preparat").getElementsByTagName("DIV");
for (var j = 0; j < descs.length; j++) {
var desc = descs[j];
desc.setAttribute("onclick", "");
desc.classList.remove("hidden");
desc.classList.remove("questioned");
desc.classList.remove("correct");
desc.classList.remove("wrong");
desc.classList.add("infos");
//descs[j].setAttribute("title", descs[j].getAttribute("alt"));
}
}
function hideInfos() {
var descs = document.getElementById("preparat").getElementsByTagName("DIV");
for (var j = 0; j < descs.length; j++) {
var desc = descs[j];
desc.setAttribute("onclick", "")
desc.classList.add("hidden");
desc.classList.remove("infos");
}
}
function toggleDesc(visible) {
var figure = document.getElementById("mainFigure");
var svg = document.getElementById("desc_graphics");
if (visible ) {
showInfos();
if (svg) svg.style.visibility = "visible";
figure.className = figure.className.replace("legendaOn", "legendaOff")
figure.className = figure.className.replace("popiskyOff", "popiskyOn")
}
else {
hideInfos()
if (svg) svg.style.visibility = "hidden";
figure.className = figure.className.replace("popiskyOn", "popiskyOff")
}
}
function toggleLeg(bt) {
var figure = bt.parentNode.parentNode
if (bt.className == "btOn" ) {
bt.className = "btOff";
bt.setAttribute("title", "Skrýt legendu")
figure.className = figure.className.replace("legendaOff", "legendaOn")
}
else {
bt.className = "btOn";
bt.setAttribute("title", "Zobrazit legendu")
figure.className = figure.className.replace("legendaOn", "legendaOff")
}
}
function getPosX(obj)
{
var curleft = document.documentElement.scrollLeft ? document.documentElement.scrollLeft : document.body.scrollLeft;
if(obj.offsetParent)
while(1)
{
curleft += obj.offsetLeft;
if(!obj.offsetParent)
break;
obj = obj.offsetParent;
}
else if(obj.x)
curleft += obj.x;
return curleft;
}
function getPosY(obj)
{
var curtop = - (document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop);
if(obj.offsetParent)
while(1)
{
curtop += obj.offsetTop;
if(!obj.offsetParent)
break;
obj = obj.offsetParent;
}
else if(obj.y)
curtop += obj.y;
return curtop;
}
function showPos(evt, uzel) {
var mouseX = evt.clientX - getPosX(uzel)
var mouseY = evt.clientY - getPosY(uzel)
document.getElementById("info").innerHTML = "" + mouseX + ", " + mouseY + ", scroll: " + uzel.scrollLeft + ", " + uzel.scrollTop
}
function setScroll(uzel, sx, sy) {
uzel = document.getElementById(uzel);
uzel.scrollTop = sy
uzel.scrollLeft = sy
}
function hookEvent(element, eventName, callback)
{
if(typeof(element) == "string")
element = document.getElementById(element);
if(element == null)
return;
if(element.addEventListener)
{
if(eventName == 'mousewheel')
element.addEventListener('DOMMouseScroll', callback, false);
element.addEventListener(eventName, callback, false);
}
else if(element.attachEvent)
element.attachEvent("on" + eventName, callback);
}
function unhookEvent(element, eventName, callback)
{
if(typeof(element) == "string")
element = document.getElementById(element);
if(element == null)
return;
if(element.removeEventListener)
{
if(eventName == 'mousewheel')
element.removeEventListener('DOMMouseScroll', callback, false);
element.removeEventListener(eventName, callback, false);
}
else if(element.detachEvent)
element.detachEvent("on" + eventName, callback);
}
function cancelEvent(e)
{
e = e ? e : window.event;
if(e.stopPropagation)
e.stopPropagation();
if(e.preventDefault)
e.preventDefault();
e.cancelBubble = true;
e.cancel = true;
e.returnValue = false;
return false;
}
function resizePic(e)
{
e = e ? e : window.event;
var raw = e.detail ? e.detail : e.wheelDelta;
var normal = e.detail ? e.detail * -1 : e.wheelDelta / 40;
//document.getElementById('scrollContent').innerHTML = " Raw Value: " + raw + " Normalized Value: " + normal;
changeSize("fig_preparat", normal )
cancelEvent(e);
}
function changeSize(fig, sf) {
//sf = +-3
var figure = document.getElementById(fig);
var svgDesc = document.querySelector("#desc_graphics g");
//var obr = figure.getElementsByTagName("IMG")[0]
// alert(figure)
var prep = chapters[actualChapter].preparaty[actualPrep]
var nh = figure.height + sf*20;
nh = Math.max(nh, 480)
nh = Math.min(nh, prep.origH)
var sfy = nh/480;
figure.width = prep.origW/prep.origH*nh;
figure.height = nh;
if (svgDesc) {
svgDesc.setAttribute("transform", "scale(" + sfy + ") translate(" + (-10)*(sfy-1) + ", " + (-20)*(sfy-1) + ")");
}
var descs = figure.parentNode.childNodes;
var dcount =-1
for (var i = 0; i < descs.length; i++) {
if (descs[i].nodeType == 1 && descs[i].nodeName == "DIV") {
dcount++;
var cx = Math.round(prep.popisky[dcount][0]*sfy - 10 + 10*sfy-10)
var cy = Math.round(prep.popisky[dcount][1]*sfy - 0 + 10*sfy-10)
descs[i].style.left = "" + cx + "px"
descs[i].style.top = "" + cy + "px"
}
}
var zoomIn = document.getElementById("zoomIn");
var zoomOut = document.getElementById("zoomOut");
zoomOut.removeAttribute("disabled");
zoomOut.setAttribute("src","design/Misc-Zoom-Out-icon.png");
zoomIn.removeAttribute("disabled");
zoomIn.setAttribute("src","design/Misc-Zoom-In-icon.png");
if (nh == 480) { // minimalni zvetseni
zoomOut.setAttribute("disabled","disabled");
zoomOut.setAttribute("src","design/Misc-Zoom-Out-icon_dis.png");
}
if (nh == prep.origH) { // minimalni zvetseni
zoomIn.setAttribute("disabled","disabled");
zoomIn.setAttribute("src","design/Misc-Zoom-In-icon_dis.png");
}
}
function startDrag(evt) {
/*
var mouseX = evt.clientX - getPosX(canvas_axon)
var mouseY = evt.clientY - getPosY(canvas_axon)
var bid = evt.target.parentNode.getAttribute("id")
bid = bid.substring(bid.indexOf("_")+1)
var bod = objects[bid]
offsetX = mouseX - bod.ax;
offsetY = mouseY - bod.ay;
bod.isDragged = true;
draggedPoint = bid
*/
}
function checkDrag(evt) {
/*
if (draggedPoint != null ) {
var bod = objects[draggedPoint]
var mouseX = evt.clientX - getPosX(canvas_axon) // canvas_axon.offsetLeft;
var mouseY = evt.clientY - getPosY(canvas_axon) // canvas_axon.offsetTop;
bod.ax = mouseX - offsetX;
bod.ay = mouseY - offsetY;
bod.projectAxon()
clearCanvases()
updateCanvases()
} */
}
function stopDrag(evt) {
/*
var bid = evt.target.parentNode.getAttribute("id")
bid = bid.substring(bid.indexOf("_")+1)
var bod = objects[bid]
bod.isDragged = false;
draggedPoint = null;
*/
}
function getSVGInfo(uzel) {
alert(uzel.parentNode.getAttribute("title"))
uzel.setAttribute("class", "selected")
var svg = document.getElementById("fig_preparat").getSVGDocument()
var doc = svg.getElementsByTagName("svg")[0]
doc.setAttribute("class", "clickable")
var objs = svg.getElementsByTagName("g");
var titles = new Array()
for (var i = 0; i < objs.length; i++) {
if (objs[i].getAttribute("title") != undefined) titles.push(objs[i].getAttribute("title"))
}
}