/* functions for cookies control */

function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

// decrypt helper function
function decryptCharcode(n,start,end,offset)	{
	n = n + offset;
	if (offset > 0 && n > end)	{
		n = start + (n - end - 1);
	} else if (offset < 0 && n < start)	{
		n = end - (start - n - 1);
	}
	return String.fromCharCode(n);
}
// decrypt string
function decryptString(enc,offset)	{
	var dec = "";
	var len = enc.length;
	for(var i=0; i < len; i++)	{
		var n = enc.charCodeAt(i);
		if (n >= 0x2B && n <= 0x3A)	{
			dec += decryptCharcode(n,0x2B,0x3A,offset);	// 0-9 . , - + / :
		} else if (n >= 0x40 && n <= 0x5A)	{
			dec += decryptCharcode(n,0x40,0x5A,offset);	// A-Z @
		} else if (n >= 0x61 && n <= 0x7A)	{
			dec += decryptCharcode(n,0x61,0x7A,offset);	// a-z
		} else {
			dec += enc.charAt(i);
		}
	}
	return dec;
}
// decrypt spam-protected emails
function linkTo_UnCryptMailto(s)	{
	location.href = decryptString(s,-2);
}

/* Show/Hide some cotainer. Original to news page */
function container_showhide(switchID, containerID) {
  var slider = document.getElementById(containerID);
  if (slider == null) return;
  var sliding = slider.sliding || false;
  if (sliding) return;
  if(slider.style.display == 'none') slider.sliderHeight = slider.sliderHeight || -1;
  Slide(containerID, false, true, true);
/*  if ( document.getElementById(containerID).style.display == 'none' ) {
    document.getElementById(containerID).style.display = 'block';
    document.getElementById(switchID).className = 'other-minus';
  }
  else {
    document.getElementById(containerID).style.display = 'none';
    document.getElementById(switchID).className = 'other-plus';
  }*/
  document.getElementById(switchID).className = ( document.getElementById(switchID).className == 'other-minus' ? 'other-plus' :'other-minus' );
}

/* Make external links TARGET=_BLANK */
function externallinks(elem)
{
  var elem = elem || 'fullheight';
  var c=document.getElementById(elem);
  if(c)
  {
    var ls=c.getElementsByTagName('a');
    for(var i=0;i<ls.length;i++){
      if(ls[i].getAttribute('rel')=='external')
      {
        //ls[i].className+=ls[i].className?' extlink':'extlink';
        ls[i].title+=' (opens in new window)';
        ls[i].onclick=function(){return !window.open(this.href);}
      }
    }
  }
}

window.onload=function(){
  if(!document.getElementById && !document.createTextNode){return;}
  externallinks();
}

// Block javascript errors
//window.onerror = function(){return true;}


// SLIDER *********************************
var slideSpeed = 10;
var sliderMax = 220;

function Slide(SlideElem, SlideW, SlideH, SlideO)
{
   slider = document.getElementById(SlideElem);
   if (slider == null) return;
   slider.sliding = slider.sliding || false;
   slider.sliderHeight = slider.sliderHeight || sliderMax;
   slider.sliderIntervalId = slider.sliderIntervalId || 0;
   if(slider.sliding)
      return false;
   slider.sliding = true;
   slider.slideW = SlideW || false;
   slider.slideH = SlideH || true;
   slider.slideO = SlideO || false;
   //if(slider.sliderHeight == sliderMax)
   if(slider.style.display != 'none')
      slider.sliderIntervalId = setInterval("SlideUpRun('"+SlideElem+"')", 20);
   else {
      slider.style.display = 'block';
      if(slider.slideH) slider.style.height = '0px';
      if(slider.slideW) slider.style.width  = '0px';
      if(slider.slideO) slider.style.opacity = 0;
      slider.sliderIntervalId = setInterval("SlideDownRun('"+SlideElem+"')", 20);
   }
}

function SlideUpRun(SlideElem)
{
   slider = document.getElementById(SlideElem);
   if(slider.sliderHeight <= 0)
   {
      slider.sliding = false;
      slider.sliderHeight = -1;
      if(slider.slideH) slider.style.height = 'auto';
      if(slider.slideW) slider.style.width  = sliderMax + 'px';
      if(slider.slideO) slider.style.opacity = 1;
      slider.style.display = 'none';
      clearInterval(slider.sliderIntervalId);
   }
   else
   {
      slider.sliderHeight -= slideSpeed;
      if(slider.sliderHeight <0)
         slider.sliderHeight = 0;
      if(slider.slideH) slider.style.height = slider.sliderHeight + 'px';
      if(slider.slideW) slider.style.width  = slider.sliderHeight + 'px';
      if(slider.slideO) slider.style.opacity = slider.sliderHeight / sliderMax;
   }
}

function SlideDownRun(SlideElem)
{
   slider = document.getElementById(SlideElem);
   if(slider.sliderHeight>= sliderMax)
   {
      slider.sliding = false;
      slider.sliderHeight = sliderMax;
      if(slider.slideH) slider.style.height = 'auto';
      if(slider.slideW) slider.style.width  = sliderMax + 'px';
      if(slider.slideO) slider.style.opacity = 1;
      clearInterval(slider.sliderIntervalId);
   }
   else
   {
      slider.sliderHeight += slideSpeed;
      if(slider.sliderHeight> sliderMax)
         slider.sliderHeight = sliderMax;
      if(slider.slideH) slider.style.height = slider.sliderHeight + 'px';
      if(slider.slideW) slider.style.width  = slider.sliderHeight + 'px';
      if(slider.slideO) slider.style.opacity = slider.sliderHeight / sliderMax;
   }
}

/* The default getCoordinates (gC) function. If neither the
 * Microsoft or DOM approach is deemed supported, this will be
 * used to always return (0, 0).
 */
/* Tests if the given argument is a number. */
function isN(o) {return 'number' == typeof o;}
function gC(e) {
  if (!e) e = window.event;
  if(isN(e.clientX) && isN(e.clientY)) return {x: e.clientX, y: e.clientY};
  else if(isN(e.x) && isN(e.x)) return {x: e.x, y: e.x};
  else return {x: 0, y: 0};
}

function hookEvent(element, eventName, callback) {
  if(typeof(element) == "string") element = document.getElementById(element);
  if(element == null) return;
  if(document.addEventListener) element.addEventListener(eventName, callback, false);
  else if(document.attachEvent) element.attachEvent('on' + eventName, callback);
  else element['on' + eventName] = callback;
}
function unhookEvent(element, eventName, callback) {
  if(typeof(element) == "string") element = document.getElementById(element);
  if(element == null) return;
  if(document.addEventListener) element.removeEventListener(eventName, callback, false);
  else if(document.attachEvent) element.detachEvent('on'+eventName, callback);
  else element['on'+eventName]=returnFalse;
}

function returnFalse(e){
  return false;
}

function cancelEvent(e){
  if(e.preventDefault)e.preventDefault();
  else e.returnValue=false;
}

/* class for photo preview */
MYPanel = function (elem) {
  var Supported = !!document.getElementById;// && !window.opera;
  var element;
  if(typeof(elem) == "string")
     element = document.getElementById(elem);
  else element = elem;

  var clicked = false;
  var canmove = false;
  var offsetX;
  var offsetY;
  
  var OMD = function (e) {
    if (!e) e = window.event;
    if ( e.button == 2 || e.button == 4 ) return;
    if ( ! canmove ) return;
    clicked = true;
    element.style.opacity = '0.6';
    cancelEvent(e);
    hookEvent(document,'selectstart',returnFalse);
    var div = gC(e);
    var left = element.style.left;
    var top = element.style.top;
    left = left.substring(0, left.length-2);
    top =   top.substring(0, top.length-2);
    offsetX = div.x - left;
    offsetY = div.y - top;
  }

  var OMU = function () {
    clicked = false;
    element.style.opacity = '1';
    unhookEvent(document,'selectstart',returnFalse);
  }

  var OMM = function (e) {
    if (!e) e = window.event;
    if ( !clicked ) return;
    var div = gC(e)
    element.style.left = (div.x - offsetX) + 'px';
    element.style.top = (div.y - offsetY) + 'px';
  }
  
  this.BindPanel = function (debug) {
    var debug = debug || false;
    if ( ! Supported ) return;
    if ( element == null ) return;

    hookEvent(element, "mousedown", OMD);
    hookEvent(element, "mouseup", OMU);
    hookEvent(document, "mousemove", OMM);

    if (debug) element.innerHTML = 'bind for ' + element.id ;
  }

  /*
   * Floating photo preview
   * Get information about User to floation div.
   *  taken form http://photofile.name/
   */
  this.Open = function (id, lang) {
    if (element.sliding) return;
    else element.sliderHeight = sliderMax || 220;
    var n = 'photo_cache_' + element.name;
    if ( document.getElementById(n) ) 
      if ( element.innerHTML != document.getElementById('fakedivloading').innerHTML)
        document.getElementById(n).innerHTML = element.innerHTML;
    var x = document.getElementById('fullheight').clientWidth - 500;
    var y = 200;

    // закрываем прежний блок и открываем новый или просто закрываем текущий.
    if ( element.name == "id_" + id ) return;
    element.name = "id_" + id;
    if (element.style.display == "none")
      element.innerHTML = document.getElementById('fakedivloading').innerHTML;
    
    if ( element.style.left == '' ) element.style.left = x+"px";
    if ( element.style.top == '' ) element.style.top = y+"px";
    element.style.display = "block";    

    n = 'photo_cache_' + element.name;
    if ( document.getElementById(n).innerHTML != '' ) {
        element.innerHTML = document.getElementById(n).innerHTML;
        return;
    }

    var url = 'http://' + document.location.host + '/utils/ajax.peopleinfo.php?id='+ id +'&lang='+ lang;
    var infoAjax = new Ajax.Updater(element.id, url, {method: 'get', parameters: ''});

    canmove = true;
    element.style.cursor = 'move';
  }
  this.Close = function () {
    canmove = false;
    element.style.cursor = 'default';
    Slide(element.id, false, true, true);
  }
}

/* Seminars Show and Hide */
function YearShow(y) {
 document.getElementById('fl-'+y).style.backgroundImage="url('/img/ajax-loader.gif')";
 document.getElementById('fl-'+y).style.backgroundRepeat="no-repeat";
 document.getElementById('fl-'+y).style.backgroundPosition="75px center";
 var loadwait = true;
 setTimeout(function(){
  loadwait = false;
 }, 1500);
 var infoAjax = new Ajax.Updater('s-'+y, '/utils/seminars.year.php',
  {method: 'post',
  parameters: { 'year': y, 'tc': tc },
  onComplete: function(transport){
   var unhide = false;
   var o = 0;
   var i = setInterval(function(){
    if(!loadwait) {
     if(!unhide) {
      unhide = true;
      document.getElementById('fl-'+y).style.backgroundImage="";
      document.getElementById('fs-'+y).className='hidden';
      document.getElementById('s-'+y).className='';
      document.getElementById('s-'+y).style.opacity = '0';
     }
     o = o + 0.2;
    }
    document.getElementById('s-'+y).style.opacity = o;
    if ( o > 0.8 ) {
     clearInterval(i);
     ys[y] = true;
     YearShowHideCheck();
    }
   }, 150);
  }
 });
}
function YearHide(y) {
 document.getElementById('l-'+y).style.backgroundImage="url('/img/ajax-loader-a.gif')";
 document.getElementById('l-'+y).style.backgroundRepeat="no-repeat";
 document.getElementById('l-'+y).style.backgroundPosition="center 50px";
 var o = 1;
 var i = setInterval(function(){
  document.getElementById('s-'+y).style.opacity = o;
  o = o - 0.2;
  if ( o < 0.2 ) {
   clearInterval(i);
   ys[y] = false;
   YearShowHideCheck();
   document.getElementById('l-'+y).style.backgroundImage="";
   document.getElementById('fs-'+y).className='';
   document.getElementById('s-'+y).className='hidden';
   document.getElementById('s-'+y).style.opacity = '1';
  }
 }, 150);
}
var YearShowAll = function() {
 c = true;
 for(y in ys) { c = c && ys[y]; }
 for(y in ys) {
  if(!c&&!ys[y])YearShow(y);
  if(c)YearHide(y);
 }
}
function YearShowHideCheck(tc) {
 c = true;
 for(n in ys) { c = c && ys[n]; }
 if(c) { document.getElementById('YshA').className='other-minus'; }
 else { document.getElementById('YshA').className='other-plus'; }
}
var BlkShowHideO = function(id,elem) {
  blks[id] = ! blks[id];
  for (t in blks) {
    if (t!=id) blks[t] = false;
    BlkShowHide(t,elem);
  }
}
var BlkShowHide = function(id,elem) {
  var el_sh = document.getElementById('sh-'+id);
  var el_c = document.getElementById('blk-'+id);
  if ( el_sh == null || el_c == null ) return;
  var el_a = el_c.getElementsByTagName(elem);
  var el_ac = el_a.length;
  var i;
  if(blks[id]) {
    el_sh.className='other-minus';
    for(i=0;i<el_ac;i++) { el_a[i].className=''; }
  } else {
    el_sh.className='other-plus';
    for(i=0;i<el_ac;i++) { el_a[i].className='hidden'; }
  }
}

