dojo.require("dojo.io.IframeIO");
dojo.require("dojo.widget.Menu2");

function err() { return true; }
window.onerror = err;


function mobipic(url) {
  var w = window.open(sid(url), 'mobipic', 'width=820,height=520,menubar=no,location=no,resizable=yes,scrollbars=yes,status=yes,titlebar=yes,toolbar=no');
  w.focus();
}

function toprint(url) {
  var w = window.open(sid(url), 'toprint', 'width=820,height=520,menubar=no,location=no,resizable=yes,scrollbars=yes,status=yes,titlebar=yes,toolbar=no');
  w.focus();
}

var engBig = new Array("E\'", "CH", "SH", "YO", "JO", "ZH", "YU", "JU", "YA", "JA", "A","B","V","G","D","E", "Z","I","J","K","L","M","N","O","P","R","S","T","U","F","H","C", "W","~","Y", "\'");
var engSmall = new Array("e\'", "ch", "sh", "yo", "jo", "zh", "yu", "ju", "ya", "ja", "a", "b", "v", "g", "d", "e", "z", "i", "j", "k", "l", "m", "n", "o", "p", "r", "s",  "t", "u", "f", "h", "c", "w", "~", "y", "\'");
var rusRegBig = new Array( /Э/g, /Ч/g, /Ш/g, /Ё/g, /Ё/g, /Ж/g, /Ю/g, /Ю/g, /Я/g, /Я/g, /А/g, /Б/g, /В/g, /Г/g, /Д/g, /Е/g, /З/g, /И/g, /Й/g, /К/g, /Л/g, /М/g, /Н/g, /О/g, /П/g, /Р/g, /С/g, /Т/g, /У/g, /Ф/g, /Х/g, /Ц/g, /Щ/g, /Ъ/g, /Ы/g, /Ь/g);
var rusRegSmall = new Array( /э/g, /ч/g, /ш/g, /ё/g, /ё/g, /ж/g, /ю/g, /ю/g, /я/g, /я/g, /а/g, /б/g, /в/g, /г/g, /д/g, /е/g, /з/g, /и/g, /й/g, /к/g, /л/g, /м/g, /н/g, /о/g, /п/g, /р/g, /с/g, /т/g, /у/g, /ф/g, /х/g, /ц/g, /щ/g, /ъ/g, /ы/g, /ь/g);
var enBig = new Array("Ee", "Uu", "Ii", "Aa", "Sh", "Gj", "Kj", "Lj", "Zh", "Ch", "Nj");
var enSmall = new Array("ee", "uu", "ii", "aa", "sh", "gj", "kj", "lj", "zh", "ch", "nj");
var lvRegBig =   new Array(/Ē/g, /Ū/g, /Ī/g, /Ā/g, /Š/g, /Ģ/g, /Ķ/g, /Ļ/g, /Ž/g, /Č/g, /Ņ/g);
var lvRegSmall = new Array(/ē/g, /ū/g, /ī/g, /ā/g, /š/g, /ģ/g, /ķ/g, /ļ/g, /ž/g, /č/g, /ņ/g);

function fixalbum(o) {
  var s = o.value;
  for (i=0; i<rusRegSmall.length; i++)
    s = s.replace(rusRegSmall[i], engSmall[i])
  for (var i=0; i<rusRegBig.length; i++)
    s = s.replace(rusRegBig[i], engBig[i])
  for (i=0; i<lvRegSmall.length; i++)
    s = s.replace(lvRegSmall[i], enSmall[i])
  for (var i=0; i<lvRegBig.length; i++)
    s = s.replace(lvRegBig[i], enBig[i])
  s = s.replace(/'/, '');
  o.value = s;
}

function sid(url) {
  var sid = 'inbox=' + SESSION_ID;
  if(url.indexOf('?') != -1) {
    url += '&' + sid;   
  } else {
    url += '?' + sid;
  }
  return url;
}

function jspopup(url, noexec) {
  var win = dojo.widget.byId('popupWindow');
  win.closeWindow = win.hide = win.destroy = function() {
    if(dojo.byId('progress')) {
      dojo.byId('progress').style.display = 'none';
      dojo.byId('bodyRoot').style.display = 'block';
    }
    dojo.widget.byId('popupWindow').hideModalDialog();
    dojo.byId('popupWindow').style.display = 'none';  
  }
  popupGo(url, noexec);
}

var statusWin;
function showProgress() {
  statusWin = open('/progress_uploading.php','Status','height=150,width=350,location=no,scrollbars=no,menubars=no,toolbars=no,resizable=yes');
}

function hideProgress() {
  if (typeof(statusWin) != "undefined") {
    statusWin.close();
    statusWin = void(0);
  }
}

function hideProgressAndReload() {  
  hideProgress();
  history.go(0);
}


function imageEditChoice(selected_select) {
  var sel_index = selected_select.selectedIndex;
  var sel_value = selected_select.options[sel_index].value;
  selected_select.options[0].selected = true;
  selected_select.blur();
  javascript:nw=window.open(sid(sel_value),'Edit','height=500,width=500,location=no,scrollbars=yes,menubars=no,toolbars=no,resizable=yes');nw.opener=self;return false;
}

function selectedPhotos(w) {
  var f = w.document.photos;
  if(!f) return; // window has gone away
  var rv = [];
  for(var i = 0; i < f.elements.length; i++) {
    var el = f.elements[i];
    if(!el || !el.type) continue;
    if(el.name != 'photo' && el.type != 'checkbox') continue;
    if(el.name == 'photo' || el.checked) {
      rv[rv.length] = dojo.json.evalJson(el.defaultValue);
    }
  }
  return rv;
}

function h(s) {
  if(s == null) s = '';
  return String(s).replace(/</g, '&lt;').replace(/&/g, '&amp;');
}

function showThumbs(ths) {
  var o = [];
  o[o.length] = '<table cellspacing="1" cellpadding="1" border="0"><tr align="center" valign="baseline" bgcolor="#eeeeee">';
  for(var i = 0; i < ths.length; i++) {
    var th = ths[i];
    o[o.length] = '<td><div><img src="' + h(th[2]) + '" width="' + h(th[3]) + '" height="' + h(th[4]) + '" alt="' + h(th[0]) + '"></div><div style="width:110px;white-space:nowrap;overflow:hidden;font-size:11px;font-family:arial,tahoma,helvetica;">' + h(th[1]) + '</div></td>';
  }
  o[o.length] = '</table>';
  //var ifr = document.getElementById('ifr');
  //var win = ifr.contentWindow ? ifr.contentWindow : window.frames[window.frames.length-1];
  //win.document.write(o.join(''));
  document.getElementById('ifr').innerHTML = o.join('');
}

function resizeAndCenter(w, h) {
  var popup = dojo.widget.byId('popupWindow');
  var sz = dojo.html.getViewport();
  var maxHeight = sz.height - 110;
  if(h > maxHeight) h = maxHeight;
  popup.resizeTo(w, h);
  var t = parseInt((sz.height - h) / 2);
  if(t < 80) t += 70; // banner
  var l = parseInt((sz.width - w) / 2);
  popup.domNode.style.top = t + 'px';
  popup.domNode.style.left = l + 'px';
}

// try to enlarge window so it doesn't get scrolled
function fixsize() {
  var bodyRoot = dojo.byId('bodyRoot');
  resizeAndCenter(bodyRoot.offsetWidth + 100, bodyRoot.offsetHeight + 80);
}



// --------------------- window stuff ---------------------

	// show progress bar if it exists	
	function doProgress() { 
        if(dojo.byId('popupWindow').style.display == 'none') return;		  
    	if(!dojo.byId('progress')) return;		
        dojo.byId('bodyRoot').style.display = 'none';
		dojo.byId('progress').style.display = 'block';
		dojo.html.getElementsByClass('dojoFloatingPaneCloseIcon')[0].style.display = 'none';
		resizeAndCenter(200, 150);
	}
	function hideProgress() {
		if(!dojo.byId('progress')) return;
		dojo.byId('bodyRoot').style.display = 'block';
		dojo.byId('progress').style.display = 'none';
		dojo.html.getElementsByClass('dojoFloatingPaneCloseIcon')[0].style.display = 'block';
	}
	function popupLoad(data, noexec) {
		var win = dojo.widget.byId('popupWindow');
		dojo.html.getElementsByClass('dojoFloatingPaneCloseIcon')[0].style.display = 'block';

		// workaround: otherwise shows "false" in IE just below window title (at least in Wine)
		var ifr = dojo.byId('popupWindow').getElementsByTagName('iframe');
		if(ifr && ifr.length) ifr[0].src = '/blank.html';

		// hide output of windows with progress bar
		hasProgress = dojo.byId('progress') && (dojo.byId('progress').style.display == 'block');	
		if(!hasProgress) dojo.byId('popupWindow_container').innerHTML = data;
		if(typeof(noexec) == 'undefined') {
			popupExec(data);
		}
		if(!hasProgress) {
			win.show();
			fixsize();
			popupMagic();
			if(noexec) {
				popupTitle(noexec);
			}
		}
	}
	function popupGo(url, noexec) {
		doProgress();
		dojo.io.bind({
			url: url,
			load: function(type, data, evt) {
				popupLoad(data, noexec);
			}
		});
	}
	function popupMagic() {
		var cancel = document.getElementById('cancel');
		if(cancel) dojo.event.browser.addListener(cancel, 'onclick', function() { popupClose(); } );
		var back = document.getElementById('back');
		if(back) dojo.event.browser.addListener(back, 'onclick', function() { history.back(); } );
			var body = document.getElementById('bodyRoot');
			var i = 0, forms = body.getElementsByTagName('form');
			if(forms.length) {
			while(f = forms[i++]) {
				if(!f.action) continue;
				dojo.event.connect(f, 'onsubmit', function(evt) {
					if(evt.cancelEvent) { // XXX custom!
						evt.preventDefault();
						dojo.event.browser.stopEvent(evt);
						return false;
					}
					doProgress();
					var f = evt.target;
					dojo.io.bind({
						url: f.action,
						formNode: f,
						method: f.method,
						load: function(type, data, e) {
							popupLoad(data);
						}
					});
					evt.preventDefault();
					dojo.event.browser.stopEvent(evt);
					return false; 
				});
			}
			} // forms.length
			var i = 0, links = body.getElementsByTagName('a');
			if(links.length) {
			while(l = links[i++]) {
				l.onclick = function() { popupGo(this.href); return false; }
			}
			} // links.length
	} // popupMagic
	function popupClose() {
		var win = window.parent.dojo.widget.byId('popupWindow');
		win.destroy();
	}
	function popupTitle(title) {
		dojo.html.getElementsByClass('dojoFloatingPaneTitleText')[0].innerHTML = dojo.string.escapeXml(title);
	}

	// slightly faster than Dojo's version because does less
	function popupExec(data) {
		var regex = /<script([^>]*)>([\s\S]*?)<\/script>/gi;
		var scripts = new Array();
		while(match = regex.exec(data)){
			scripts[scripts.length] = match[2];
		}
		try {
			eval(scripts.join("\n"));
		} catch(e) {
			alert("An exception occurred in the script. Error name: " + e.name + ". Error description: " + e.description + ". Error number: " + e.number + ". Error message: " + e.message);
		}
	}
	





function getRadioValue (radioButtonOrGroup) {
  var value = null;
  if (radioButtonOrGroup.length) { // group 
    for (var b = 0; b < radioButtonOrGroup.length; b++)
      if (radioButtonOrGroup[b].checked)
        value = radioButtonOrGroup[b].value;
  }
  else if (radioButtonOrGroup.checked)
    value = radioButtonOrGroup.value;
  return value;
}

function get_album(frm, auto_default) {
	if(typeof(frm.set_albumName) == 'undefined') return false;
	var alb = getRadioValue(frm.set_albumName);
	if((!alb) && auto_default) {
		if(!frm.set_albumName.length) {
			frm.set_albumName.checked = true;
			return frm.set_albumName.value;
		}
	}
	return alb;
}

function add_photos(frm) {
	var album = get_album(frm, 0);
	if(album) {
		jspopup('/choose_uploader.php?set_albumName=' + album);
	} else {
		jspopup('/create_album.php', TXT_CREATE_NEW_ALBUM);
	}
}

function share_album(frm) {
	var album = get_album(frm, 1);
	if(!album) {
		alert(TXT_SELECT_ALBUM_SHARE);
		return false;
	}
	jspopup('/album_permissions.php?set_albumName=' + album);
}

function rename_album(frm) {
	var album = get_album(frm, 1);
	if(!album) {
		alert(TXT_SELECT_ALBUM_RENAME);
		return false;
	}
	jspopup('/rename_album.php?set_albumName=' + album);
}

function delete_album(frm) {
	var album = get_album(frm, 1);
	if(!album) {
		alert(TXT_SELECT_ALBUM_DELETE);
		return false;
	}
	jspopup('/delete_album.php?set_albumName=' + album);
}

function order_album(frm) {
	var album = get_album(frm, 1);
	if(!album) {
		alert(TXT_SELECT_ALBUM_PRINT);
		return false;
	}
	
	document.basket.set_albumName.value = album;
	document.basket.whole.value = '1';
	document.basket.submit();
}


/* check all */
var seen_i = -1;
function pcl(cb) {
	var ev = window.event;
        if(!ev) return;
        var f = cb.form;
        var me_i = -1;
        for(var i = 0; i < f.elements.length; i++) {
        	var el = f.elements[i];
                if(!el || !el.type || el.type != 'checkbox') continue;
                if(el == cb) {
                	me_i = i;
                        break;
		}
	}
	if(me_i == -1) return; // not found, shouldn't happen
        if(seen_i == -1) {
        	seen_i = me_i;
                return;
	}
        if(ev.shiftKey && f.elements[seen_i].checked == cb.checked) {
        	if(me_i < seen_i) {
                	var tmp = seen_i;
                        seen_i = me_i;
                        me_i = tmp;
		}
		for(var i = seen_i; i <= me_i; i++) {
			f.elements[i].checked = cb.checked;
		}
	}
	seen_i = me_i;
}


/* hover */
var lastTtid = null;
var currentTtid = null;
function ttUpdate() {
        if(lastTtid && lastTtid != currentTtid) {
                var cbb = dojo.byId('cbb' + lastTtid);
                if(!cbb) return;
                cbb.style.backgroundColor = '#fff';
        }
        lastTtid = currentTtid;
        var h = dojo.byId('imhover');
        var color = h.style.display == 'block'? '#ffc' : '#fff';
        var cbb = dojo.byId('cbb' + currentTtid);
        if(!cbb) return;
        cbb.style.backgroundColor = color;
}

var hoverOk = false;
function hoverDivs() {
        return {
                hover: dojo.byId('imhover'),
                tb: dojo.byId('imhover_tb'),
                lb: dojo.byId('imhover_lb'),
                rb: dojo.byId('imhover_rb')
        };
}

function hoverDisplay(disp) {
        var h = hoverDivs();
        if(h.hover.style.display == disp) return;
        h.hover.style.display = disp;
        h.tb.style.display = disp;
        h.lb.style.display = disp;
        h.rb.style.display = disp;
        ttUpdate();
}

var timeHover = null;
function overHoverAlarm() {
        if(timeHover) {
                clearTimeout(timeHover);
                timeHover = null;
        }
        overHover();
        var h = dojo.byId('imhover');
        if(h.style.display != 'block') {
                hoverDisplay('block');
        }
}

function overHover() {
        if(timeHover) clearTimeout(timeHover);
        var h = dojo.byId('imhover');
        if(h.style.display == 'block') return;
        if(h.style.display == 'none') {
                timeHover = setTimeout('overHoverAlarm()', 500);
        }
}

function checkHover(evt) {
        var h = dojo.byId('imhover');
        if(dojo.html.overElement(h, evt)) return;
        var els = document.getElementsByTagName('table');
        for(var i = 0; i < els.length; i++) {
                if(els[i].className == 'thumbs' && dojo.html.overElement(els[i], evt)) return;
        }
        if(timeHover) {
                clearTimeout(timeHover);
                timeHover = null;
        }
        if(h.style.display != 'none')
                hoverDisplay('none');
}

var lastBase = null;
function moveHover(ev, base, ttid) {
        var hov = hoverDivs();
        if(lastBase == base) return;
        lastBase = base;
        
        var pos = dojo.html.getAbsolutePosition(base, true);
        var t = pos.top;
        var l = pos.left;
        var sz = dojo.html.getContentBox(base);
        var w = sz.width;
        var h = sz.height;
        
        if(!hoverOk) {
                hov.tb.style.width = w + 'px';
                hov.lb.style.height = hov.rb.style.height = h + 'px';
                dojo.html.setMarginBox(hov.hover, w, h);
                hoverOk = true;
        }
        
        hov.tb.style.top = hov.lb.style.top = hov.rb.style.top = t + 'px';
        hov.tb.style.left = hov.lb.style.left = l + 'px';
        hov.rb.style.left = l + w - 2 + 'px';
        hov.hover.style.top = t + h + 'px';
        hov.hover.style.left = l + 'px';
        var tt = dojo.byId('tt' + ttid);
        hov.hover.innerHTML = tt.innerHTML;
        
        currentTtid = ttid;
        ttUpdate();
}
dojo.event.connect(document.body, 'onmousemove', 'checkHover');




function len(str) {
        var count = 0;
	for (i=0;i<str.length;i++)
	        if((str.charCodeAt(i)!=10)) count++;
        return count;
}

function lenten(str) {
        return str.length-len(str);
}

function magicCount(x, mLen){
        txtln = len(x.value);
        if (mLen - txtln < 0) {
                x.value = x.value.substring(0,mLen+lenten(x.value));
        }
        while( (((zzz = x.value.charCodeAt(x.value.length-1))==10) || (zzz==13)) && ( len(x.value) > mLen) ) {
                x.value = x.value.substring(0,x.value.length-2);
        }
        txtln = len(x.value);
        this.innerHTML=mLen - txtln;
}
	
function bgsel(img) {
        var im = img.parentNode.getElementsByTagName('IMG');
        for(var i = 0; i < im.length; i++) {
                im[i].style.borderColor = '#fff';
	}
	img.style.borderColor = '#666';
	document.theform.background.value = img.alt;
}


function submitBasket() {
        dojo.io.bind({
                url: "/basket.php",
                load: function(type, evaldObj){
                        dojo.byId('basket_div').innerHTML = evaldObj;
                        Fat.fade_element('basket', 30, 3000, '#4477cc', '#FFFFFF');
                },
                formNode: document.getElementById("basket")
        });
}

function order(mode) {
        var ths = selectedPhotos(window);
        if((mode == 0) || (mode == 1 && !ths.length)) { // order whole album
                if(mode == 1) {
                        var whole = confirm(TXT_NO_PHOTOS_SELECTED1);
                        if(!whole) return;
                }
                document.basket.whole.value = '1';
                submitBasket();
        } else { // order only selected photos
                var ph = [];
                for(var i = 0; i < ths.length; i++) {
                        ph[ph.length] = ths[i][7] + ';' + ths[i][8] + ';' + ths[i][0] + ';' + ths[i][9];
                }
                document.basket.whole.value = '0';
                document.basket.photos.value = ph.join('|');
                submitBasket();
        }
}

function delist() {
        var ths = selectedPhotos(window);
        console.log(ths);
        var whole = 0;
        if(!ths.length) {
                whole = confirm(TXT_NO_PHOTOS_SELECTED2);
                if(!whole) return;
        }
        if(!whole) {
                var ph = [];
                for(var i = 0; i < ths.length; i++) {
                        ph[ph.length] = ths[i][7] + ';' + ths[i][8] + ';' + ths[i][0];
                }
                document.basket.photos.value = ph.join('|');
        }
        document.basket.whole.value = whole;
        document.basket.basket.value = 'delist';
        submitBasket();
}

function selAction(act, album) {
        var ths = selectedPhotos(window);
        if(!ths.length && act != 'rearrange' && act != 'moveAll' ) {
                alert(TXT_PLEASE_SELECT_PHOTOS1);
                return;
        }
        
        if(act == 'move' || act == 'copy' || act == 'moveAll') {
                jspopup('/album_chooser.php?set_albumName=' + album + '&act=' + act);
        } else if (act == 'order') {
                order(2);
        } else {
                jspopup('/' + act + '.php?set_albumName=' + album);
        }
}

function delfav() {
        var ths = selectedPhotos(window);
        if(!ths.length) {
                alert(TXT_PLEASE_SELECT_PHOTOS2);
                return;
        }
        var ph = [];
        for(var i = 0; i < ths.length; i++) {
                ph[ph.length] = ths[i][7] + ';' + ths[i][8] + ';' + ths[i][0];
        }
        document.dfav.photos.value = ph.join('|');
        document.dfav.submit();
}

function showMenu(obj, menuId) {
        var menu =  dojo.widget.getWidgetById(menuId);
        if ( !menu ) { return; }
        
        if ( menu.open && !menu.isShowingNow) {
                var pos = dojo.html.getAbsolutePosition(obj, true);
                var box = dojo.html.getBorderBox(obj);
                menu.open(pos.x, pos.y + box.height, null, obj);
        } else if ( menu.close && menu.isShowingNow ) {
                menu.close();
        } else {
                menu.toggle();
        }
}

function selPhotos(sel) {
        var f = document.photos;
        for(var i = 0; i < f.elements.length; i++) {
                var el = f.elements[i];
                if(!el || !el.type || el.type != 'checkbox') continue;
                el.checked = sel;
        }
}

