//
var base="";
var basex="";
//var fullbase="http://tolkov.com/gallery/";
var fullbase="http://tolkov-photos.s3.amazonaws.com/";
var sitebase="http://tolkov.com/";
var thisfile="index.html";

var a1='mailto:', a2='valery', a3='tolkov.com';
function mail_to(){ window.location=a1+a2+'@'+a3; };

var NEWDAYS=30;
var HASH=("onhashchange" in window);

var params={};
if(document.location.search!=''){ HASH=false; params=proc_search(document.location.search); }
else if(document.location.hash!=''){ HASH=true; params=proc_search(document.location.hash); }

var ay0=params['y'],ag0=params['g'],ap0=params['p'],al0=params['l']-0;
var ay,ag,ap,al;
var preload;

function proc_search(s){
    var ch=s.charAt(0); if(ch=='?' || ch=='#') s=s.substr(1);
    var a=s.split('&');
    var p={}; 
    for(i in a){
        var aa=a[i].split('='); 
        if(aa.length==2) p[aa[0]]=aa[1];
        }
    return p;
    }

function conv_html(s){
    return s.replace(/</g,'&lt;').replace(/>/g,'&gt;');
    }

function perm_link(y,g,p,l){ 
    var s='';
    if(y){ if(s) s+='&'; s+='y='+y; }
    if(g){ if(s) s+='&'; s+='g='+escape(g); }
    if(p){ if(s) s+='&'; s+='p='+escape(p); }
    if(l){ if(s) s+='&'; s+='l='+l; }
    return s;
    }

function perm_link2(y,g,p,l){ 
	return (HASH ? '#' : '?')+perm_link(y,g,p,l);
	}

function parse_date(s){
    var a=s.split(' ');
    if(a.length==2){ 
        var a1=a[0].split(':');
        var a2=a[1].split(':');
        var dt=new Date();
        dt.setFullYear(a1[0]);
        dt.setMonth(a1[1]-1);
        dt.setDate(a1[2]);
        dt.setHours(a2[0]);
        dt.setMinutes(a2[1]);
        dt.setSeconds(a2[2]);
        dt.setMilliseconds(0);
        return dt;
        }
    return null;
    }

function _print(o){
    var s=o+': '; 
    s+='['+(typeof o)+'] ';
    for(i in o){ 
        var v; 
        try { v=o[i]; } catch(e){ v='err:'+e; };
        s+=i+'='+v+'; ';
        }
    alert(s);
    //$("copyright").html(s);
    };

function uncompress(A){
    var x={}, r={};
    for(var i=0;i<A.length;i++){ 
    	var o=A[i]; 
    	var d={};
    	for(var j in r) d[j]=r[j];
    	for(var j in o) d[j]=o[j];
    	d.idx=i; A[i]=d; x[d.nm]=d; 
    	r=d;
    	}
    return x;
	}

function index_y(Y){
    if(!Y.map && Y.x) Y.map=uncompress(Y.x);
	};

function index_g(G){
    if(!G.map && G.x) G.map=uncompress(G.x);
    };

function get_y(y){
	var Y=Ys[y];
	index_y(Y);
	return Y;
	};

function get_g(y,g){
    var Y=get_y(y); if(!Y) return undefined;
    var G=Y.map[g]; if(!G) return undefined;
    index_g(G);
	return {y:Y,g:G};
	};

function get_p(y,g,p){
    var X=get_g(y,g); if(!X) return undefined;
    var G=X.g;
	var P=G.map[p]; if(!P) return undefined;
	return {y:X.y,g:G,p:P};
	};

function add_cell(tr){
    try { return tr.insertCell(-1); } catch(e){} 
    var td=document.createElement("td"); tr.appendChild(td); return td;
    }

function add_row(t){
    try { return t.insertRow(-1); } catch(e) {}
    var tr=document.createElement("tr"); t.appendChild(tr); return tr;
    }

function mk_hdr(t,y,n){
    var tr=add_row(t);
    var td=add_cell(tr); 
    td.innerHTML="<a name='"+y+"'><font size=3><b>"+y+"</b></font></a>";
    td.colSpan=n;
    td.align="center";
    td.setAttribute("bgcolor","#2255aa");
    return tr;
    }

function mk_err(s){
    var dd=document.createElement("h4");
    dd.innerHTML="<font color=red>"+s+"</font>";
    return dd;
	}

//Years['2009'].color="#335577";
//Years['2008'].color="#557799";
//Years['2007'].color="#335577";
//Years['2006'].color="#557799";
//Years['2005'].color="#335577";
//Years['2004'].color="#557799";

function one_cell(onclick,img,title,date,w,h){
	s='<div class=bordered style="padding:4px;cursor:hand;" onclick="'+onclick+';">';
	s+='<div class=inner style="width:'+w+'px;height:'+h+'px;overflow-x:clip;overflow-y:clip;';
	if(img) s+='background:url(\''+img+'\') no-repeat center bottom;';
	s+='">';
	if(date || title){
		s+='<div style="background-color:rgba(34,51,102,0.7);padding-bottom:4px;">';
		if(date) s+='<div style="float:right;margin-left:8px;font-size:8pt;">'+date+'</div>';
    	if(title) s+='<a href="javascript:'+onclick+'" style="font-size:8pt;"><i>'+conv_html(title)+'</i></a>';
    	s+='</div>';
    	}
    s+='</div></div>';
    return s;
	}

function mk_albums(year){
    var now=(new Date()).getTime();
    var a=new Array();

    for(var y=Y1;y>=Y0;y--){ 
    	var Y=get_y(y);
    	if(!Y || year && Y.y!=year) continue;
        var aa=new Array(); 
        for(var i in Y.x){
            var G=Y.x[i]; if(G.hidden) continue;
            var g=G.nm, y=G.y;

            var onclick="go('"+y+"','"+g+"');";
            var img=base+y+"/"+g+"/"+G.tnm;
            var s=one_cell(onclick,img,G.t,y,G.tw,G.th);

            aa.push(s);
            }

        a.push( {year:Y.y,arr:aa} );
        }

    var t=$("<table>").attr("cellSpacing",0).attr("cellPadding",2).attr("border",0);

    var n=Math.floor((document.body.clientWidth-80)/178);
    if(n<2) n=2;

    var tr=$("<tr>").appendTo(t); 
    var c=0;
    for(j in a){
        var aj=a[j];
        var aa=aj.arr;

        for(i=aa.length-1;i>=0;i--){
            var td=$("<td>").appendTo(tr);
            td.html(aa[i]).attr("vAlign","top");
            if(++c>=n){ tr=$("<tr>").appendTo(t); c=0; }
            }
        }

    return $("<div>").append(t);
    }

function mk_album(y,g){
	var X=get_g(y,g); if(!X) return mk_err("Album '"+g+"'does not exist.");
	var G=X.g;

    //var blog=G.blog;

    var w=document.body.clientWidth-80;
    var x=0;

    var dd=$("<div>");
    var t=null, tr=null;

    preload=[];

    for(var ip in G.x){
        var P=G.x[ip]; if(P.hidden) continue;
		var p=P.nm;
		var D=(P.t ? P.t.split('|') : []);

		var onclick="go('"+y+"','"+g+"','"+p+"')";
		var src=base+y+"/"+g+"/"+P.td+"/"+P.nm;
        var s=one_cell(onclick,src,null,null,P.tw,P.th);
        if(D.length) s+="<div style=\"width:"+P.tw+"px;\">"+D.join("<br>")+"</div>";

		if(t==null){
    		t=$("<table>").attr("cellSpacing",0).attr("cellPadding",2).attr("border",0).appendTo(dd);
    		tr=$("<tr>").appendTo(t);
    		x=0;
    		}

     	$("<td>").html(s).attr("vAlign","top").appendTo(tr);

        x+=P.tw+18; if(x+180>=w) t=null;
        }

    return dd;
    }

function mk_photo(y,g,p,l){
    var X=get_p(y,g,p); if(!X) return mk_err("Photo '"+p+"'does not exist.");
    var G=X.g;
    var P=X.p;
    var blog=G.blog;
    var D=(P.t ? P.t.split('|') : []);
    var next=(P.idx+1<G.x.length ? G.x[P.idx+1].nm : null);
    var prev=(P.idx>0 ? G.x[P.idx-1].nm : null);

    var s="";
    if(blog) s+="<table><tr><td align=center valign=top>";
    if(next) s+="<a href=\"javascript:go2('"+next+"')\">";

    if(l && !P.lw) l=0;

    var width=(l ? P.lw : P.w);
    var height=(l ? P.lh : P.h);
    var dir=(l ? P.ld : P.d); if(dir==".") dir=""; else dir=dir+"/";

    s+="<img width="+width+" height="+height+" src=\""+base+y+"/"+g+"/"+dir+P.nm+"\" border=0 class=\"Bordered1\" >";
    if(next) s+="</a>";
    if(blog){ 
	  s+="</td><td>&nbsp;&nbsp;</td><td align=left valign=top>";
	  if(D.length>1 && D[0]!="") s+="<b>"+D.shift()+"</b><br><br>";
      s+=D.join("<br>");
	  if(next) s+="<br><br><br><a href=\"javascript:go2('"+next+"')\">Next | Р”Р°Р»СЊС€Рµ</a>";
	  s+="</tr></table>";
  	  }
    else {
      s+="<div style=\"width:"+P.w+"px;margin-top:8px;\"><b>"+D.join("<br>")+"</b></div>";
	  }
    s+="<p></p>";
    if(P.mk){ 
        s+="<div style=\"width:"+P.w+"px;\"><small><i>"+P.mk+", "+P.m+", "+P.dt+"</i></small></div>";
        s+="<p></p>";
        }
    //s+="</td></tr></table>\r\n";
    // link
    var blog1="<a href=\""+fullbase+thisfile+"?"+perm_link(y,g,p,l)+"\"><img width="+width+" height="+height+" src=\""+fullbase+y+"/"+g+"/"+dir+P.nm+"\" border=0></a>";
    var blog2="<a href=\""+fullbase+thisfile+"?"+perm_link(y,g,p,l)+"\"><img width="+width/2+" height="+height/2+" src=\""+fullbase+y+"/"+g+"/"+dir+P.nm+"\" border=0 align=right style='margin-left:8px; margin-bottom:8px;'></a>";
    var blog3="<a href=\""+fullbase+thisfile+"?"+perm_link(y,g,p,l)+"\"><img width="+P.tw+" height="+P.th+" src=\""+fullbase+y+"/"+g+"/"+P.td+"/"+P.nm+"\" border=0 align=right style='margin-left:8px; margin-bottom:8px;'></a>";
    s+="<div style=\"width:"+width+";color:#2255aa;\"><small>Link to this photo: ";
    s+="<a href='javascript:$(\"#b1\").show(); $(\"#b2\").hide(); $(\"#b3\").hide();' style='color:#2255aa'>Full</a> | ";
    s+="<a href='javascript:$(\"#b1\").hide(); $(\"#b2\").show(); $(\"#b3\").hide();' style='color:#2255aa'>Half</a> | ";
    s+="<a href='javascript:$(\"#b1\").hide(); $(\"#b2\").hide(); $(\"#b3\").show();' style='color:#2255aa'>Thumb</a> | ";
    s+="<a href='javascript:$(\"#b1\").hide(); $(\"#b2\").hide(); $(\"#b3\").hide();' style='color:#2255aa'>None</a>.";
    s+="</small></div>";
    s+="<textarea id=b1 style='display:none;' rows=4 cols=80>"+conv_html(blog1)+"</textarea>";
    s+="<textarea id=b2 style='display:none;' rows=4 cols=80>"+conv_html(blog2)+"</textarea>";
    s+="<textarea id=b3 style='display:none;' rows=4 cols=80>"+conv_html(blog3)+"</textarea>";

    if(!next) next=G.x[0].nm;
    var preload=new Image; 
    preload.src=base+y+"/"+g+"/"+dir+next; 

    return $("<div>").html(s);
    }         

function mk_nav_bar(y,g){
    var X=get_g(y,g); if(!X) return;
    var G=X.g;

    var a=new Array();
    for(var ip=0;ip<G.x.length;ip++){
        var P=G.x[ip]; if(P.hidden) continue;
        var p=P.nm;

        var s=""; 
        s+="<img width="+P.tw/2+" height="+P.th/2;
        if(P.t) s+=" alt=\""+P.t+"\"";
        s+=" src=\""+base+y+"/"+g+"/"+P.td2+"/"+P.nm+"\" border=0 class=\"Bordered2\" id=\""+p+"\">";
        //s+="<br><small>"+P.dt+"</small>";
        //if(P.descr) s+="<div style=\"width:"+P.twidth+"px;\">"+P.descr+"</div></a>";
        a.push(s);
        }

    var t=$("<table>").attr("cellSpacing",0).attr("cellPadding",2).attr("border",0).attr("id","nav"); 

    var tr=$("<tr>").appendTo(t);
    for(i in a) $("<td>").appendTo(tr).html(a[i]).attr("vAlign","top"); 

    return $("<div>").append(t);
    }

function mk_album_title(yy,g,p){
    var X=get_g(yy,g); if(!X) return "Unknown album: "+g;
    var G=X.g; if(G.hidden) return "<span class=\"Yellow\">"+G.t+"</span>";

    var s="<a href=\"javascript:go()\">Photo Gallery</a> / ";

    if(p) s+="<a href=\"javascript:go('"+yy+"','"+g+"')\">"+G.t+"</a> / ";
    else  s+="<span class=\"Yellow\">"+G.t+"</span> / ";

    var oneyear=false;

    for(var y=Y1;y>=Y0;y--){
        var Y=Ys[y]; if(Y.hidden) continue;
        var X=get_g(y,g);
        if(X){ 
            if(oneyear) s+=" | ";
            if(yy==y) s+="<span class=\"Yellow\">"+y+"</span>";
            else s+="<a href=\"javascript:go('"+y+"','"+g+"')\">"+y+"</a>";
            oneyear=true;
            }
        };
    return s;
    }

function mk_full_title(year){
    return "Photo Gallery, "+(year ? year : Y0+"-"+Y1);
    }

function mk_size_link(y,g,p,l,a){
    if(!y || !g || !p) return '';
    var X=get_p(y,g,p); if(!X) return '';
    var P=X.p;
    if(l==1 && !P.lw) return "";
    var s=(l==1? P.lw+"x"+P.lh : P.w+"x"+P.h);
    s=(a? '<a href="javascript:go3('+l+')">'+s+'</a>' : '<b>'+s+'</b>');
    return s+" | ";
    }

function mk_sshow_link(y,g,p,l,f){
    if(!y || !g || !p) return '';
    return f ? '<a href="javascript:start_show()"><b><font color=yellow>Show</font><b></a> |' :
               '<a href="javascript:stop_show()"><b><font color=yellow>Stop</font><b></a> |'; 
    }

var steps=['>----', '->---', '-->--', '--->-','---->' ];
function mk_step(step){ return steps[step]; }

function replace_node(g,tnew,told){
    if(told && tnew){
        g.insertBefore(tnew,told);
        tnew.parentNode.removeChild(told);
        }
    else if(tnew){
        g.appendChild(tnew);
        }
    else if(told){
        g.removeChild(told);
        }
    }

function set_children(prnt,chld){
    var told = (prnt.length==0 ? null : prnt.childNodes[0]);
    replace_node(prnt,chld,told);
    }

var scroll_id=null;
var scroll_elem=null;
var scroll_to=null;
function scroll_handler(){
    var x=parseInt(scroll_elem.style.left); if(isNaN(x)) x=0;
    var d=x-scroll_to; 
    var st=d/Math.abs(d);
    d=d/st; d=(d>16 ? 16 : (d>4 ? 4 : 1));
    var px=x-d*st; 

    try { scroll_elem.style.left=px+"px"; } catch(e){}

    if(parseInt(scroll_elem.style.pixelLeft)==x || x==scroll_to){
        window.clearInterval(scroll_id); scroll_id=null; 
        }
    }
function scroll_div(d,x){
    if(scroll_id) window.clearInterval(scroll_id);
    scroll_elem=d; 
    scroll_to=280-x; 
    if(scroll_to>0) scroll_to=0;
    scroll_id=window.setInterval(scroll_handler,20);
    //scroll_handler();
    }

var drag_elem=null;
var drag_img=null;
var drag_x=null;
var drag_d=null;
function drag_start(e){
    if(!e) e=window.event; 
    var t=this;
    while(t && t.tagName!="TABLE") t=t.parentNode;
    var ex=e.pageX; if(e.targetTouches && e.targetTouches.length>0) ex=e.targetTouches[0].pageX;
    drag_elem=t; drag_x=ex; drag_d=0;
    drag_img=(e.target ? e.target : (e.srcElement ? e.srcElement : null));
    if(e.preventDefault) e.preventDefault();
    if(e.stopPropagation) e.stopPropagation();
    e.returnValue=false;
    return 0;
    }
function drag_move(e){
    if(drag_elem!=null){
        if(!e) e=window.event;
        //if(!e.button){ drag_end(); return; }
    	var ex=e.pageX; if(e.targetTouches && e.targetTouches.length>0) ex=e.targetTouches[0].pageX;
        var d=ex-drag_x; drag_x=ex;
        var x=parseInt(drag_elem.style.left,10)+d;
        if(x>0) x=0; if(drag_elem.scrollWidth+x<600) x=600-drag_elem.scrollWidth;
        drag_elem.style.left=x+"px";
        drag_d+=Math.abs(d);
        if(e.preventDefault) e.preventDefault();
        if(e.stopPropagation) e.stopPropagation();
        e.returnValue=false;
        }
    };
function drag_end(e){
    if(drag_elem!=null){
        if(!e) e=window.event; 
        if(e.preventDefault) e.preventDefault();
        if(e.stopPropagation) e.stopPropagation();
        e.returnValue=false;
        drag_elem=null;
        if(drag_d<4) go2(drag_img.id);    
        }
    };

function wheel(e){
    if(!e) e=window.event; 

    var delta = 0;
    if(e.wheelDelta) { // IE/Opera.
        delta = e.wheelDelta/120;
        // In Opera 9, delta differs in sign as compared to IE.
        if (window.opera) delta = -delta;
        }
    else if(e.detail) { // Mozilla case.
        // In Mozilla, sign of delta is different than in IE.
        // Also, delta is multiple of 3.
        delta = -e.detail/3;
        }

    if(delta){
        var tbl=document.getElementById("nav");
        var x=parseInt(tbl.style.left,10)+delta*60; 
        if(x>0) x=0; if(tbl.scrollWidth+x<600) x=600-tbl.scrollWidth;
        tbl.style.left=x+"px";
        } 

    if(e.preventDefault) e.preventDefault();
    if(e.stopPropagation) e.stopPropagation();
    e.returnValue=false;
    };

var show_id=null;
var show_step=0;
var show_steps=5;
var show_interval=1000;
function show_handler(){
    show_step++;
    document.getElementById('step').innerHTML=mk_step(show_step);
    if(show_step==show_steps){
        show_step=0;
        var X=get_p(ay,ag,ap); if(!X) return;
        var i=X.p.idx+1; if(i==X.g.x.length) i=0;
        go2(X.g.x[i].nm);
        }
    }
function start_show(){
    if(show_id || !ay || !ag || !ap) return;
    document.getElementById('sshow').innerHTML=mk_sshow_link(ay,ag,ap,al,0);
    show_step=0; 
    document.getElementById('step').innerHTML=mk_step(show_step);
    show_id=window.setInterval(show_handler,show_interval);
    };
function stop_show(){
    document.getElementById('sshow').innerHTML=mk_sshow_link(ay,ag,ap,al,1);
    window.clearInterval(show_id); show_id=null;
    document.getElementById('step').innerHTML='';
    };

function set_cur_nav_bar(p){
    var img=document.getElementById(p);
    var td=img; while(td && td.tagName!="TD") td=td.parentNode;
    if(td){
    	var tr=td.parentNode.childNodes;
	    var i0=null;
	    for(i in tr){ if(tr[i]==td){ i0=i-0; break; }}
	    for(i in tr){ 
	        var s=tr[i]; 
	        if(s.style){ 
	            //var d=Array(1,0.7,0.5,0.3)[Math.abs(i-i0)]; s.style.opacity=d?d:0.1; 
	            s.style.backgroundColor=(i==i0 ? "#3377dd" : "");
	            }
	        }
		}

    var t=document.getElementById("nav"); if(!t) return;
    t.style.position="relative";
    if(td){
	    if(t.style.left==""){ 
	        var x=280-td.offsetLeft; if(x>0) x=0;
	        t.style.left= x+"px";
	        }
	    scroll_div(t,td.offsetLeft);
	    }

    t.onmousedown=drag_start;
    t.onmouseup=drag_end;
    t.onmousemove=drag_move;
    document.body.onmouseup=drag_end;

    t.ontouchstart=drag_start;
    t.ontouchend=drag_end;
    t.ontouchmove=drag_move;
    document.body.ontouchend=drag_end;

    if(window.addEventListener)
        window.addEventListener('DOMMouseScroll',wheel,false);

    t.onmousewheel = wheel;
    }

function ensure_items(y,g,p,l){
    var X=get_g(y,g); if(!X) return false;
    var G=X.g;
/*    
    if(G.x==undefined){
    	$("#gallery").html("<blink>Loading...</blink>");
    	$.getJSON(basex+y+"/"+g+"/gallery.json",function(data,status){ 
        	for(var i in data) G[i]=data[i];
        	regenerate(y,g,p,l,true);
    		});
    	return true;
        }
*/        
    return false;
    }

function regenerate(y,g,p,l,f){ try {

    var ge=$("#gallery"), ne=$("#navbar"), te=$("#title");

    ne.width(document.body.clientWidth-120);

    if(!f && y==ay && g==ag && p==ap && l==al) return;

    if(y && g && ensure_items(y,g,p,l)) return;

    $("#php").attr("href",sitebase+'photo.php?'+perm_link(y,g,p,l));
    //$("#rss").attr("href","./rss.php"+(g?'?y='+y+'&g='+g:''));

    if(p){ 
	    $("#size0").html(mk_size_link(y,g,p,0,l==1));
	    $("#size1").html(mk_size_link(y,g,p,1,l!=1));
	    $("#sshow").html(mk_sshow_link(y,g,p,l,show_id==null,show_step));
	    $("#step").html(show_id ? mk_step(show_step) : '');

        ge.html(mk_photo(y,g,p,l).html());
        if(ag!=g || ap==null){
            te.html(mk_album_title(y,g,p));
            ne.html(mk_nav_bar(y,g).html());
            }
        set_cur_nav_bar(p);
        }
    else if(g){ 
        ge.html(mk_album(y,g).html());
        te.html(mk_album_title(y,g,p));
        ne.empty();
        }
    else { 
        ge.html(mk_albums(y).html()); 
        te.html(mk_full_title(y));
        ne.empty();
        }

    if(HASH) document.location.hash=perm_link(y,g,p,l);

    ay=y; ag=g; ap=p; al=l;

    } catch(e){ _print(e); }}

function go(y,g,p){ 
	if(HASH){ stop_show(); regenerate(y,g,p,al); } 
	else document.location.search=perm_link(y,g,p,al); 
	}
function go2(p){ if(p) regenerate(ay,ag,p,al); }
function go3(l){ regenerate(ay,ag,ap,l); }

$(document).ready(function(){ regenerate(ay0,ag0,ap0,al0,true); });
$(window).resize(function(){ regenerate(ay,ag,ap,al,true); });

$(window).bind("hashchange",function(){ 
	HASH=true; 
	var p=proc_search(document.location.hash); 
	regenerate(p['y'],p['g'],p['p'],p['l']); 
	});

$(document).keydown(function(e){ 
		if(!ap) return;
		var X=get_p(ay,ag,ap); if(!X) return;
		var i=X.p.idx;

		if(e.keyCode==39) i++;
		else if(e.keyCode==37) i--;
		else if(e.keyCode==36) i=0;
		else if(e.keyCode==35) i=X.g.x.length-1;
		else return;

		if(i>=0 && i<X.g.x.length){ go2(X.g.x[i].nm); event.preventDefault(); }
	});

//
