var current_textarea = 0;
var tab_groups = new Array();
var tab_bars = new Array();
var chosen_keywords = new Array();
var xmlhttp = false;
var last_focused = 0;
var file_id = 0;
var xmlHttpVersionUsing = "";
var _ms_xmlHttpVersion = "";
var js = "";


function _innerHTML(elId, value) { 
  var el = elId;
  if (typeof(elId) == "string") {
    el = $(elId);
  }    
  
  if (el) {
    var newdiv = document.createElement("div");
    newdiv.innerHTML = value;
    el.innerHTML = '';
    el.appendChild(newdiv);
  }	
}

function Hash() {
  this.length = 0;
  this.items = new Array();
  for (var i = 0; i < arguments.length; i += 2) {
    if (typeof(arguments[i + 1]) != 'undefined') {
	this.items[arguments[i]] = arguments[i + 1];
	this.length++;
    };
  };

  this.removeItem = function(in_key) {
    var tmp_value;
    if (typeof(this.items[in_key]) != 'undefined') {
      this.length--;
      var tmp_value = this.items[in_key];
      delete this.items[in_key];
    };
    return tmp_value;
  };

  this.getItem = function(in_key) {
    return this.items[in_key];
  };

  this.setItem = function(in_key, in_value) {
    if (typeof(in_value) != 'undefined') {
      if (typeof(this.items[in_key]) == 'undefined') {
        this.length++;
      };
      this.items[in_key] = in_value;
    };
    return in_value;
  };

  this.hasItem = function(in_key) {
    return typeof(this.items[in_key]) != 'undefined';
  }; 
};

function setCookie(cookieName,cookieValue,nDays) {
 var today = new Date();
 var expire = new Date();
 if (nDays==null || nDays==0) nDays=1;
 expire.setTime(today.getTime() + 3600000*24*nDays);
 document.cookie = cookieName+"="+escape(cookieValue)
                 + ";expires="+expire.toGMTString();
};
 
function getCookie(name) {
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    } else {
        begin += 2;
    };
    var end = document.cookie.indexOf(";", begin);
    if (end == -1) {
        end = dc.length;
    };
    return unescape(dc.substring(begin + prefix.length, end));
};

function showMenuItem(item) { 
  item.style.background = '#9ca3df';
}

function hideMenuItem(item) { 
  item.style.background = '';
}

function showMenu(menuId) { 
  var el = $(menuId + '_h');
//  el.left = 200;
//  alert(el.offsetLeft);
  for (i = el, x = 0, y = el.clientHeight - 5; i; i = i.offsetParent) {
     x += i.offsetLeft;
     y += i.offsetTop;
  }
  el.style.background = '#9ca3df';
  var elM = $(menuId);
  elM.style.position = 'absolute';
  elM.style.left = x;
  elM.style.top = y;
  elM.style.display = 'block';
}

function hideMenu(menuId) { 
  var el = $(menuId + '_h');
  el.style.background = '';
  el = $(menuId);
  el.style.display = 'none';
}

function disableFormCtrls(formName, disabled) { 
  var form = document.forms[formName];
  if (form == null) 
    return '';
  
  for (var i = 0; i < form.elements.length; i++) {
    el = form.elements[i];
    if (el)
      el.disabled = disabled;
  }
}

function collectFormItems(url, formName) { 
  var form = document.forms[formName];
  if (form == null) 
    return '';
  
  for (var i = 0; i < form.elements.length; i++) {
    el = form.elements[i];
    if (el.type == 'checkbox')
      v = (el.checked) ? 1 : 0;
    else
      v = el.value;

    if (el.type == 'radio' && el.checked)
      v = el.value;
    else if (el.type == 'radio' && !el.checked)
      continue;

    if (el.name != '') {
      if (url == '')
        url = el.name + "=" + encodeURIComponent(v);
      else
        url += "&" + el.name + "=" + encodeURIComponent(v);
    }
  }
  return url;
}

function showResults(art_id) { 
  popupWnd('/vote.php?art_id=' + art_id, 'voteResults', 300, 400);
}

function showHelpBB() { 
  popupWnd('/help/?c=bbtags', 'bbHelp', 600, 450);
}

function showOnline() { 
  popupWnd('/who.php', 'onlineUsers', 600, 300);
}

function openHelp(topic) { 
  popupWnd('/help/?topic=' + topic, 'helpWnd', 600, 300);
}

function showFaved(art_id) { 
  popupWnd('/faved.php?art_id=' + art_id, 'favedWnd', 300, 450);
}

function setToday() { 
  var d = new Date();
  var day = '' + d.getDate();
  var month = '' + (d.getMonth() + 1);
  var year = d.getFullYear();
  if (day.length < 2) 
    day = '0' + day;
  if (month.length < 2) 
    month = '0' + month;
  
  var el = $('stop_date');
  if (el)
    el.value = day + '.' + month + '.' + year;
}

function getDate(diff) {
  var d2 = new Date();
  var d = new Date(d2.getTime() - ( diff * 1000 * 60 * 60 * 24 ));
  var day = '' + d.getDate();
  var month = '' + (d.getMonth() + 1);
  var year = d.getFullYear();
  if (day.length < 2) 
    day = '0' + day;
  if (month.length < 2) 
    month = '0' + month;
  
  var el = $('start_date');
  if (el)
    el.value = day + '.' + month + '.' + year;
}

function addDays(days) {
  var d2 = new Date();
  var d = new Date(d2.getTime() + ( days * 1000 * 60 * 60 * 24 ));
  var day = '' + d.getDate();
  var month = '' + (d.getMonth() + 1);
  var year = d.getFullYear();
  if (day.length < 2)
    day = '0' + day;
    if (month.length < 2)
      month = '0' + month;
    var el = $('expired');
    if (el)
      el.value = day + '.' + month + '.' + year;
}
						  

function toggleAnimation(id, action) { 
 var el = $(id);
 var btn = $(id + "_btn");

 if (el.style.display != 'none') {
   if (btn)
     btn.style.color = "";
   collapseAnim(id, -30, 0, '');
 } else {
   el.style.display = 'block';
   if (btn)
     btn.style.color = "#FF0000";

   collapseAnim(id, 30, 0, action);
 }
}

function enableKeywords(keywords) { 
  var kw = keywords.split(' ');
  for (var i = 0; i < kw.length; i++) { 
    var el = $(kw[i]);
    if (el)
      el.onclick();
  }
}

// Pops up a window.
function popupWnd(url, name, width, height) {
  var width = width ? width : 450;
  var height = height ? height : 550;
  var left = (screen.width - width) / 2;
  var top = (screen.height - height) / 2;
  window.open(url, name,  'top=' + top + ',left=' + left + ',location=no,scrollbars=no,toolbar=no,menubar=no,statusbar=no,resizable=yes,width=' + width + ',height=' + height);
};

function highlight(divId, art_id, imgUrl, name, author, sysname) { 
  var div = $(divId);
  if (div == null) return;
  html = '<a href="/view/'+ art_id +'/"><img style="border: 1px solid #7F7F7F;" src="' + imgUrl +'"></a><br/>';
  html += '<b>' + name + '</b><br/>';
  html += 'Àòªþ¨: <A href="/user/' + sysname + '/">' + author + '</a>';
  div.innerHTML = html;
}

// Returns the element by its id.
function get_by_id(id) {
	return document.getElementById ? document.getElementById(id) :
		document.all ? document.all[id] : 0;
};

function $(id) {
  return get_by_id(id);
}

// Returns the element from the opener's window by the element's id.
function get_by_id_from_opener(id) {
	return opener.document.getElementById ? opener.document.getElementById(id) :
		opener.document.all ? opener.document.all[id] : 0;
};


// Searches for class 'find_class' and returns 'false' if it is not found.
function find_className(el, find_class) {
	var i;
	var classes = el.className.split(' ');
	for(i = 0; i < classes.length; i++)
		if(classes[i] == find_class) return true;
	return false;
};

// Adds class 'add_class' to the class list of element 'el'.
function add_className(el, add_class) {
	var i;
	var classes = el.className.split(' ');
	for (i = 0; i < classes.length; i++)
		if(classes[i] == add_class) return;
	classes.push(add_class);
	el.className = classes.join(' ');
};

// Removes class 'remove_class' from the class list of element 'el'.
function remove_className(el, remove_class) {
	var classes = el.className.split(' ');
	var new_classes = new Array ();
	var found = false;
	var i;
	for(i = 0; i < classes.length; i++)
		if(classes[i] != remove_class) new_classes.push(classes[i]);
		else found = true;
	if(!found) return;
	el.className = new_classes.join(' ');
};

// Sets the clicked keyword ON/OFF.
function switch_keyword(el, listDivId, keywordId, keywordName, keywordList) {
        var el2 = $(keywordName);
	if (!el2) return;
	
	if(find_className(el, 'keyword_enabled')) {
		remove_className(el, 'keyword_enabled');
		chosen_keywords[keywordId] = false;
	}
	else {
		add_className(el, 'keyword_enabled');
		chosen_keywords[keywordId] = '<li> ' + el2.title + ' &mdash; ' + el.innerHTML;

	}
	var listDiv = $(listDivId);
	if(!listDiv) return;

	var keywordListInput = $(keywordList);
	if(!keywordListInput) return;
	var listDivContent = new Array();
	var keywordListInputString = "";
	var first = true;
	for (var i in chosen_keywords) {
	  if(chosen_keywords[i]) {
		listDivContent.push(chosen_keywords[i]);
		keywordListInputString += (first ? "" : " ") + i;
		first = false;
	  }
	}
	listDivContent.sort();
	listDiv.innerHTML = listDivContent.length ? listDivContent.join("<br />") : "ýõª";
	keywordListInput.value = keywordListInputString;
};

// Makes the div with the specified 'id' visible.
function make_visible(id) {
	var el = $(id);
	if(!el) return 0;
	el.style.display = 'block';
	return id;
};

// Makes the div with the specified 'id' invisible.
function make_invisible(id) {
	var el = $(id);
	if(!el) return 0;
	el.style.display = 'none';
	return id;
};

// Toggles visibility of any div with the specified 'id'.
function toggle_visibility(id) {
	var el = $(id);
	if(!el) return 0;
	if(el.style.display == 'none')
		el.style.display = 'block';
	else
		el.style.display = 'none';
	return id;
};

// Sets the focus to specified element.
function set_focus(id) {
	var el = $(id);
	if(el) { el.focus(); last_focused=id; }
};

// Sets the focus to specified element.
function reset_focus() {
	var el = $(last_focused);
	if(el) el.blur();
};

// Shows div 'target_id' while hiding all the other divs from the same 'group'.
function open_tab(tab, group, target_id) {
	if(!tab) return;
	if(tab_bars[group])
		remove_className(tab_bars[group], 'tab_active');
	tab_bars[group] = tab;
	add_className(tab, 'tab_active');
	if(tab_groups[group])
		make_invisible(tab_groups[group]);
	tab_groups[group] = target_id;
	make_visible(target_id);
};

var animInstance = 0;

function collapseAnim( id, speed, instance, action ) {
	var el = $( id );
	var el2 = $( id + "_" );

	if( !el || !el2 )
	{
		return;
	}

	if( 0 /*isIE*/ )
	{
		el.style.display = ( speed < 0 ) ? 'none' : 'block';
		eval( action );
		return;
	}

	var y;
	var height = el2.offsetHeight;
	
	if (height == 0)
	  return;

	if( height == 0 || instance == 0 )
	{
		el.style.display = 'block';
		el.style.overflow = 'hidden';
		el.style.minHeight = '1px';
		el.style.marginTop = '-1px';
	}

	if( height == 0 )
	{
		height = 1024;
		y = ( speed < 0 ) ? 0 : -height;
		el.animInstance = 0;
	}
	else
	{
		if( instance == 0 )
		{
			y = parseInt( el2.style.marginTop );

			if( isNaN( y ))
			{
				y = ( speed < 0 ) ? 0 : -height;
			}
			else
			{
				if( speed > 0 && y < -height )
				{
					y = -height;
				}
			}

			el.animInstance = ++animInstance;
		}
		else
		{
			y = parseInt( el2.style.marginTop ) + speed;

			if( el.animInstance != instance )
			{
				return;
			}
		}
	}

	if(( speed < 0 && y > -height ) || ( speed > 0 && y < 0 ))
	{
		el2.style.marginTop = y + 'px';

		setTimeout( "collapseAnim( '" + id + "', " + speed + ", " +
			el.animInstance + ", '" + action.replace( /\'/g, "\\'" ) + "' );", 10 );
	}
	else
	{
		el.style.display = ( speed < 0 ) ? 'none' : 'block';
		el.style.minHeight = '0px';
		el.style.marginTop = '0px';
		el.style.overflow = ( speed < 0 ) ? 'hidden' : 'visible';
		el2.style.marginTop = ( speed < 0 ) ? ( '-' + height + 'px' ) : '0px';

		eval( action );
	}
};

function toggleAnim( id, speed )
{
	var el = $( id );

	if( !el )
	{
		return;
	}

	if( typeof( el.animDirection ) == "undefined" )
	{
		el.animDirection = -1;
	}

	if( el.animDirection > 0 )
	{
		el.animDirection = -1;
		collapseAnim( id, -speed, 0, '' );
	}
	else
	{
		el.animDirection = 1;
		collapseAnim( id, speed, 0, '' );
	}
};


function showMore() {
  if (++file_id < 10) {
  var el = $('submc' + file_id);
  if (el && el.style.display == 'none')
    el.style.display = 'block';
  }
}


function adjustFilename() {
  for (var i=0; i <= 9; i++) {
    var f = $("submission" + i);
    var fn = $("filename" + i);
    fn.value = f.value;
  }
  return false;
}

		  
function get_by_id(id) {
  return document.getElementById ? document.getElementById(id) :
    document.all ? document.all[id] : 0;
};

function disableFormCtrls(formName, disabled) { 
  var form = document.forms[formName];
  if (form == null) 
    return '';
  
  for (var i = 0; i < form.elements.length; i++) {
    el = form.elements[i];
    if (el)
      el.disabled = disabled;
  }
}

function collectFormItems(url, formName) { 
  var form = document.forms[formName];
  if (form == null) 
    return '';
  
  for (var i = 0; i < form.elements.length; i++) {
    el = form.elements[i];
    if (el.type == 'checkbox')
      v = (el.checked) ? 1 : 0;
    else
      v = el.value;

    if (el.type == 'radio' && el.checked)
      v = el.value;
    else if (el.type == 'radio' && !el.checked)
      continue;

    if (el.name != '') {
      if (url == '')
        url = el.name + "=" + encodeURIComponent(v);
      else
        url += "&" + el.name + "=" + encodeURIComponent(v);
    }
  }
  return url;
}
