/* (c) 2008-2010, Nikiforov Vladimir aka Volod
This file may be freely copied and used without any limitations. */


var LOAD_INDICATOR = "<img src='/images/indicator.gif' />";
var saved_window_title = document.title;

$(function()
{
	$('ul.jd_menu').jdMenu();
	$(document).bind('click', function()
	{
		$('ul.jd_menu ul:visible').jdMenuHide();
	});
});

//http://xpoint.ru/know-how/JavaScript/PoleznyieFunktsii
var trans = [];
for (var i = 0x410; i <= 0x44F; i++)
  trans[i] = i - 0x350; // А-Яа-я
trans[0x401] = 0xA8;    // Ё
trans[0x451] = 0xB8;    // ё

// Сохраняем стандартную функцию escape()
var escapeOrig = window.escape;

// Переопределяем функцию escape()
window.escape = function(str)
{
  var ret = [];
  // Составляем массив кодов символов, попутно переводим кириллицу
  for (var i = 0; i < str.length; i++)
  {
    var n = str.charCodeAt(i);
    if (typeof trans[n] != 'undefined')
      n = trans[n];
    if (n <= 0xFF)
      ret.push(n);
  }
  return escapeOrig(String.fromCharCode.apply(null, ret));
}

//Определение координат элемента на странице
//http://xpoint.ru/know-how/JavaScript/PoleznyieFunktsii
function getBounds(element)
{
  var left = element.offsetLeft;
  var top = element.offsetTop;
  for (var parent = element.offsetParent; parent; parent = parent.offsetParent)
  {
    left += parent.offsetLeft// - parent.scrollLeft;
    top += parent.offsetTop// - parent.scrollTop;
    //alert('top: '+top+ ' = ' + parent.offsetTop +' (-) '+ parent.scrollTop);
  }
  return {left: left, top: top, width: element.offsetWidth, height: element.offsetHeight};
}


/*
Фильтр ввода для текстового поля
Иногда требуется ограничить содержимое текстового поля лишь определенными символами. Следующий код позволит вводить в текстовое поле только символы латинского алфавита, цифры и знак подчеркивания:
<input type="text" onkeypress="return testKey(event)">
<script type="text/javascript">
*/
function testKey(e)
{
  // Make sure to use event.charCode if available
  var key = (typeof e.charCode == 'undefined' ? e.keyCode : e.charCode);

  // Ignore special keys
  if (e.ctrlKey || e.altKey || key < 32)
    return true;

  key = String.fromCharCode(key);
  return /\w/.test(key);
}
/*</script>*/

function getRadioButtonValue(radio)
{
	for (var i=0; i < radio.length; i++) if (radio[i].checked) return radio[i].value;
	return null;
}


function setCookie(name, value)
{
	var today = new Date();
	var expires = new Date();
	expires.setTime(today.getTime()+60*60*24*365*1000);
	document.cookie = name+"="+escape(value)+"; expires="+expires.toGMTString();
	//alert(value);
}

function getCookie(Name)
{
	var search = Name+"="; 
	if (document.cookie.length <= 0) return "";
	var offset = document.cookie.indexOf(search);	
	if (offset == -1) return "";
	offset += search.length;
	var end = document.cookie.indexOf(";", offset);
	if (end == -1) end = document.cookie.length;
	return unescape(document.cookie.substring(offset, end));
}

function loginaction(what)
{
	f = document.getElementById('loginform');
	if (what == 'login')
		f.action = '/login.php';
	if (what == 'forgot')
		f.action = '/forgot.php';
	if (what == 'register')
	{
		f.action = '/register.php';
		f.password.value = '';
	}
	f.submit();		
}

function highlight_block(e, over)
{
	e.className = (over) ? 'pageselectedblock' : 'pageunselectedblock';
}

function alert_or_reload(data)
{
	(data != 'OK') ? alert(data) : document.location.reload();
}

function ch_uis(k,v)//change user interface settings
{
	$.get('/user_settings.php',{ k: k, v: v}, alert_or_reload);
}

function move_screen_block(k,v)//
{
	$.get('/move_screen_block.php', {k: k, a: v}, alert_or_reload);
}

function close_screen_block(k,v)
{
	$('#pageblock'+v).fadeOut(1000);
	$.get('/user_settings.php', {k: k, v: -v});
}

function da(o)
{
	//var l = '';
	for (var p in o)
	{
		l = o.name + "." + p + "=" + o[p] + "<br />";
		document.write(l)
	}
	document.write("Object: " + o.name);
	//alert(l);
}

/*
Array.prototype.toString = 
Object.prototype.toString = function() {
  var cont = [];
  var addslashes = function(s) {
    // Использовать replace НЕЛЬЗЯ - в Опере
    // происходит зацикливание, т.к. из replace
    // зачем-то вызывается Object.toString().
    return s.split('\\').join('\\\\').split('"').join('\\"');
  }
  for (var k in this) {
    if (cont.length > 0) cont[cont.length-1] += ",";
    var v = this[k];
    var vs = '';
    if (v.constructor == String) 
      vs = '"' + addslashes(v) + '"';
    else 
      vs = v.toString();
        if (this.constructor == Array)
      cont[cont.length]
        else 
      cont[cont.length] = k + ": " + vs;
  }
  // Здесь тоже нельзя делать replace()! 
  cont = "  " + cont.join("\n").split("\n").join("\n  ");
  var s = cont;
  if (this.constructor == Object) {
    s = "{\n"+cont+"\n}";
  } else if (this.constructor == Array) {
    s = "[\n"+cont+"\n]";
  }
  return s;
}
*/

function show_domainexample()
{
	d = document.getElementById('registerform').domainname.value;	
	
	if (d != '')
		s = "<a href='http://"+ d + ".itfoto.ru'>" + d + ".itfoto.ru</a>";
	else
		s = 'задайте имя домена';

	$('#domainexample').html(s);
}

function show_image(u)
{
	$('#div_img_preview').fadeIn(500);
	
	i = document.getElementById('img_preview');
	
	if (i.alt == '/images/' + u)
	{
		$('#div_img_preview').fadeOut(500);
		i.alt = '';
		return;
	}
	$('#div_img_preview').fadeIn(500);
	i.src='/images/' + u;
	i.alt='/images/' + u;
}


function FocusAndSelect(c)
{
	c.focus();
	c.select();
}

function check_user_data(f)
{
	rf = document.getElementById('registerform');
	v = rf[f].value;
	
	p = document.getElementById('check_'+f+'_res');
	p.style.visibility = 'visible';

	$('#check_'+f+'_res')
		.show()
		.html(LOAD_INDICATOR)
		.load('/check_user_data.php', {f: f, v: escape(v)});
}


// http://www.mattkruse.com/javascript/selectbox/source.html
function hasOptions(obj)
{
	return (obj != null && obj.options != null)
}

function sortSelect(obj)
{
	var o = new Array();
	if (!hasOptions(obj))
		return;
	
	for (var i = 0; i < obj.options.length; i++)
		o[o.length] = new Option( obj.options[i].text, obj.options[i].value, obj.options[i].defaultSelected, obj.options[i].selected);
	
	if (o.length == 0)
		return;
	
	o.sort(function(a,b) { 
		var x = a.text.toLowerCase();
    	var y = b.text.toLowerCase();
	    return ((x < y) ? -1 : ((x > y) ? 1 : 0));
	});
		
	//obj.options.splice(0);
	for (var i = 0; i < o.length; i++)
	{
		//obj.options[i] = null;
		//delete obj.options[i];
		obj.options[i] = new Option(o[i].text, o[i].value, o[i].defaultSelected, o[i].selected);
	}
	//alert(o.length+' '+obj.length);
}

function moveBetweenSelectors(from, to)
{   
	for (i = 0; i < from.length; i++)
	{
		var o = from.options[i];
		if (o.selected)
		{
			var index = 0;
			if (hasOptions(to))
				index = to.options.length;
			to.options[index] = new Option( o.text, o.value, false, false);
		}
	}
	
	var sel = 0;
	for (var i = (from.options.length - 1); i >= 0; i--)
	{
		var o = from.options[i];
		if (o.selected)
		{
			sel = i;
			from.options[i] = null;
		}
	}
	
	if (from.options.length > 0)
	{
		if (sel < from.options.length)
			from.options[sel].selected = true;
		else
			from.options[from.options.length-1].selected = true;
	}
}

function toggleElementDisplay(e)
{
	if (e.style.display == 'block')
		e.style.display = 'none';
	else
		e.style.display = 'block';
}

function slowHide(n, p)
{                 	
	setTimeout("_slowHide('" + n + "', 100)", p);
}

function _slowHide(n, opac)
{
	e = document.getElementById(n);
	if (opac > 0)
	{
		e.style.opacity = opac/100;
		e.style.filter= 'Alpha(Opacity=' + opac + ')';
		opac = opac - 20;
		setTimeout("_slowHide('" + n + "'," + opac + ")", 50);
	}
	else
	{
		e.style.opacity = 1;
		e.style.filter= 'Alpha(Opacity=100)';
		e.style.display = 'none';
		return;
	}
}

function slowShow(n, p)
{                 	
	setTimeout("_slowShow('" + n + "', 0)", p);
}

function _slowShow(n, opac)
{
	e = document.getElementById(n);
	if (opac < 100)
	{
		e.style.opacity = opac/100;
		e.style.filter= 'Alpha(Opacity=' + opac + ')';
		opac = opac + 20;
		setTimeout("_slowShow('" + n + "'," + opac + ")", 50);
	}
	else
	{
		e.style.opacity = 1;
		e.style.filter= 'Alpha(Opacity=100)';
		e.style.display = 'block';
		return;
	}
}

function slowPale(n, maximum, p)
{                 	
	setTimeout("_slowPale('" + n + "', " + maximum + ", 0)", p);
}

function _slowPale(n, maximum, bright)
{
	e = document.getElementById(n);
	if (bright < maximum)
	{
		e.style.background = 'rgb(' + maximum + ',' + maximum + ',' + bright + ')';
		bright = bright + 10;
		setTimeout("_slowPale('" + n + "'," + maximum + "," + bright + ")", 50);
	}
	else
	{
		e.style.background = 'rgb(' + maximum + ',' + maximum + ',' + maximum + ')';
		return;
	}
}


//хинты: хрень, позволяющая вызвать  функцию по mouseOver, но не сразу, а с задержкой, чтобы 
//не раздражало
//параметр - строка которая eval-юируется через скока надо милисекунд, если не 
//произошел MouseOut
//вызов, например так <div ......
//onmouseover='HintOver(\"showUserInfo({$c['comment_id']})\")'
//onmouseout='HintOut(\"showUserInfo({$c['comment_id']})\")' >.......</div>


var hint_flags = new Array();

function HintStage2(f){	if (hint_flags[f]) eval(f); }
function HintOut(f){ hint_flags[f] = false;}

//чё вызвать и через сколько милисекунд
function HintOver(f, d)
{
	hint_flags[f] = true;
	if (!d) d = 500;
	setTimeout("HintStage2('"+f+"')", d);
}


function getBodyScrollTop()
{
  return self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
}

function getBodyScrollLeft()
{
  return self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft);
}

function getBodyWidth()
{
	return document.body.offsetWidth || window.innerWidth;
}

function getBodyHeight()
{
	return document.body.offsetHeight || window.innerHeight;
}

function getClientWidth()
{
  return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientWidth:document.body.clientWidth;
}

function getClientHeight()
{
  return document.compatMode=='CSS1Compat' && !window.opera?document.documentElement.clientHeight:document.body.clientHeight;
}

function getClientCenterX()
{
	return parseInt(getClientWidth()/2) + getBodyScrollLeft();
}

function getClientCenterY()
{
	return parseInt(getClientHeight()/2) + getBodyScrollTop();
}

function changeIconAndTitle(s, mode)
{
	document.title = s;
	var icon = document.createElement('link');
	icon.type = 'image/png';
	icon.rel = 'shortcut icon';	
	icon_name = 'itfoto-icon1';
	if (mode == 'new') icon_name = 'new_comment1';
	icon.href = '/'+icon_name+'.png';
	document.getElementsByTagName('head')[0].appendChild(icon);
}

function checkForNewCommentsOld_CB(data)
{
	//alert(data);
	s = ''
	if (data != null && data['new_comments'] > 0)
	{
		s = 'новые комментарии ';
	}
	if (s != '')
	{
		changeIconAndTitle(s, 'new');
	}
}

function checkForNewCommentsOld(t)
{
	if (typeof(last_comment_ts) == 'undefined') return;
	if (typeof(otd_id) == 'undefined') otd_id = 0;
	if (typeof(user_id) == 'undefined') user_id = 0;
	//alert('check: ' + otd_id+ ' ' +last_comment_ts);
	setTimeout('checkForNewCommentsOld('+t+')', t * 1000);
	//alert(last_comment_ts);
	//$.get('/whats_new.php',{
	$.getJSON('/whats_new.php',{
		user_id: user_id,
		last_comment_ts: last_comment_ts,
		otd_id: otd_id}, checkForNewCommentsOld_CB);	
}

function checkForNewComments_CB(data)
{
	//alert(data);
	s = ''
	if (data != null && data['new_comments'] > 0)
	{
		s = 'новые комментарии ';
	}
	if (s != '')
	{
		changeIconAndTitle(s, 'new');
		l = $('.reloadCommentsLinkDiv');//I've used class instead of ID, because there are could be a multiple links on the page (1 or 2)
		if (l) l.show();
	}
}

function checkForNewComments(t)
{
	if (typeof(last_comment_ts) == 'undefined') return;
	if (typeof(otd_id) == 'undefined') otd_id = 0;
	if (typeof(user_id) == 'undefined') user_id = 0;
	setTimeout('checkForNewComments('+t+')', t * 1000);
	//$.get('/comments/single/checkNew', {
	$.getJSON('/comments/single/checkNew', {
		user_id: user_id,
		last_comment_ts: last_comment_ts,
		otd_id: otd_id}, checkForNewComments_CB);	
}

function loadCommentsOld(otd, id, page)
{
	if (otd == 'photo')
	{
		$('#div_comm_list').load('/php.php', {file: 'gallery_photo_page', method: 'getComments', id: id, page: page});
	}
}