// JavaScript

function ReplaceSymbol (symbol, string, re) {
  if (BrowserDetect.browser != 'Explorer') return false;  // Css doesn't work in Firefox & Safari in quirks mode
  var Anchors = document.links;
  if (Anchors!=null) 
  {
    for (i=0; i<Anchors.length; i++) 
    {
      var anchorContent = Anchors.item(i).innerHTML;
      if (anchorContent.indexOf(symbol) != -1) Anchors.item(i).innerHTML = anchorContent.replace(re, '$1' + string);
    }
  }
  return true;
}

function AnchorsDescendersFix () {
  var re_j = /(>?[^<>]*?)j(?![^<>]*?>)/g;
  var re_g = /(>?[^<>]*?)g(?![^<>]*?>)/g;
  var re_at = /(>?[^<>]*?)@(?![^<>]*?>)/g;
  ReplaceSymbol('j', '\<u\>j\<\/u\>', re_j);
  ReplaceSymbol('g', '\<u\>g\<\/u\>', re_g);
  ReplaceSymbol('@', '\<u\>@\<\/u\>', re_at);
}

if (wgUserName == null) document.getElementsByTagName('html')[0].className += document.getElementsByTagName('html')[0].className ? ' ' + 'NotSigned' : 'NotSigned';

// from www.design.ru

function InputPlaceholder (input, value, cssFilled, cssEmpty, isEditable)
{
  var thisCopy = this;
  
  this.Input = input;
  this.Value = value;
  this.SaveOriginal = (input.value == value);
  this.CssBase = input.className;
  this.CssFilled = cssFilled;
  this.CssEmpty = cssEmpty;
  this.isEditable = isEditable;
  this.isFirstBlurPassed = false;

  this.setupEvent (this.Input, 'focus', function() {return thisCopy.onFocus()});
  this.setupEvent (this.Input, 'blur',  function() {return thisCopy.onBlur()});
  this.setupEvent (this.Input, 'keydown', function() {return thisCopy.onKeyDown()});

  if (input.value == '') this.onBlur();

  return this;
}

InputPlaceholder.prototype.setupEvent = function (elem, eventType, handler)
{
  if (elem.attachEvent)
  {
    elem.attachEvent ('on' + eventType, handler);
  }

  if (elem.addEventListener)
  {
    elem.addEventListener (eventType, handler, false);
  }
}

InputPlaceholder.prototype.onFocus = function()
{
  this.isFirstBlurPassed = true;
  if (!this.SaveOriginal &&  this.Input.value == this.Value)
  {
    if (!this.isEditable) this.Input.value = '';
    this.Input.className = this.CssBase + ' ' + this.CssFilled;
  }
  else
  {
    this.Input.className = this.CssBase;
  }
}

InputPlaceholder.prototype.onKeyDown = function()
{
  this.Input.className = this.CssBase + ' ' + this.CssFilled;
}

InputPlaceholder.prototype.onBlur = function()
{
  if (!this.isFirstBlurPassed || !this.isEditable)
  {
    if (this.Input.value == '' || this.Input.value == this.Value)
    {
      this.Input.value = this.Value;
      this.Input.className = this.CssBase + ' ' + this.CssEmpty;
    }
    else
    {
      this.Input.className = this.CssBase + ' ' + this.CssFilled;
    }
  }
  else
  {
    if (this.Input.value == this.Value)
    {
      this.Input.value = this.Value;
      this.Input.className = this.CssBase + ' ' + this.CssEmpty;
    }
    else
    {
      this.Input.className = this.CssBase + ' ' + this.CssFilled;
    }
  }
}


// Browser detection

var BrowserDetect = {
	init: function()
	{
		this.browser = this.searchString(this.dataBrowser) || 'An unknown browser';
		this.version = this.searchVersion(navigator.userAgent) || this.searchVersion(navigator.appVersion) || 'an unknown version';
		this.OS = this.searchString(this.dataOS) || 'an unknown OS';
	},
	searchString: function (data)
	{
		for (var i=0; i<data.length; i++)
		{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString)
			{
				if (dataString.indexOf(data[i].subString) != -1) return data[i].identity;
			}
			else if (dataProp) return data[i].identity;
		}
	},
	searchVersion: function (dataString)
	{
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{string: navigator.userAgent, subString: 'OmniWeb', versionSearch: 'OmniWeb/', identity: 'OmniWeb'},
		{string: navigator.vendor, subString: 'Apple', identity: 'Safari'},
		{prop: window.opera, identity: 'Opera'},
		{string: navigator.vendor, subString: 'iCab', identity: 'iCab'},
		{string: navigator.vendor, subString: 'KDE', identity: 'Konqueror'},
		{string: navigator.userAgent, subString: 'Firefox', identity: 'Firefox'},
		{string: navigator.vendor, subString: 'Camino', identity: 'Camino'},
		{string: navigator.userAgent, subString: 'Netscape', identity: 'Netscape'},  // for newer Netscapes (6+)
		{string: navigator.userAgent, subString: 'MSIE', identity: 'Explorer', versionSearch: 'MSIE'},
		{string: navigator.userAgent, subString: 'Gecko', identity: 'Mozilla', versionSearch: 'rv'},
		{string: navigator.userAgent, subString: 'Mozilla', identity: 'Netscape', versionSearch: 'Mozilla'}  // for older Netscapes (4-)
	],
	dataOS : [
		{string: navigator.platform, subString: 'Win', identity: 'Windows'},
		{string: navigator.platform, subString: 'Mac', identity: 'Mac'},
		{string: navigator.platform, subString: 'Linux', identity: 'Linux'}
	]
};
BrowserDetect.init();
document.getElementsByTagName('html')[0].className += document.getElementsByTagName('html')[0].className ? ' ' + BrowserDetect.browser : BrowserDetect.browser;


// Popup panels

var keepPopupPanel = false;
var currentPopupId = false;
function TogglePopupPanel (PanelId)
{
  if (currentPopupId && currentPopupId != PanelId) TogglePopupPanel(currentPopupId);
	var PopupPanel = document.getElementById(PanelId);
	if (PopupPanel)
	{
		var display = PopupPanel.style.display;
		if (display == 'none' || !display)
		{
			PopupPanel.style.display = 'block';
			keepPopupPanel = true;
      currentPopupId = PanelId;
			
			document.onclick = ClosePopupPanel;
			document.onkeydown = EscapePopupPanel;

			PopupPanel.onclick = KeepPopupPanel;
		}
		else
		{
			PopupPanel.style.display = 'none';
    	currentPopupId = false;
		}
		return false;
	}
	else return true;	
}

function KeepPopupPanel()
{
	keepPopupPanel = true;
}

function ClosePopupPanel(event)
{
	if (keepPopupPanel)
	{
		keepPopupPanel = false;
		return;
	}
	var PopupPanel = document.getElementById (currentPopupId);
	if (!PopupPanel) return;
	PopupPanel.style.display = 'none';
	currentPopupId = false;

	document.onclick = null;
	document.onkeydown = null;
}

function ToggleDisplay (panelId)
{
  document.getElementById(panelId).style.display = (document.getElementById(panelId).style.display == 'none') ? 'block' : 'none' ;
}

function EscapePopupPanel (event)
{
	if (window.event) event = window.event;
	var code = event.keyCode ? event.keyCode : event.which ? event.which : null;
	if (code == 27)
	{
		var PopupPanel = document.getElementById (currentPopupId);
		if (!PopupPanel) return;
		PopupPanel.style.display = 'none';
		currentPopupId = false;

		document.onclick = null;
		document.onkeydown = null;
	}
}
