//
// JavaScript library 
// Copyright (c) LogitecUA 2005-2008
//
// All basic routines for JavaScript

function ToSingleLine(str)
{
	var newStr = str.replace(/\r/gm, "");
	return newStr.replace(/\n/gm, " ");
}

function StopEvent(event)
{
    if (event.preventDefault) {
	    event.preventDefault();
	    event.stopPropagation();
	} else {
		event.cancelBubble = true;		//IE5+
		event.returnValue  = false;
	}
	
	return false;	
}

function Redirect(url)
{
	location.href = url;
}

// AJAX functions

function CreateRequestObject()
{
	var request = null;
	try {
    	request=new ActiveXObject('Msxml2.XMLHTTP');
    } catch (e){}
	if(!request) try {
    	request=new ActiveXObject('Microsoft.XMLHTTP');
	} catch (e){}
	if(!request) try {
    	request=new XMLHttpRequest();
	} catch (e){}
	return request;
}

function ServerRequest(url, method, data, callback, blockIdToChange)
{
    var request = CreateRequestObject();
	if(!request) return false;
	request.onreadystatechange  = function() { 
    	if(request.readyState == 4 && callback) {
    		callback(request, blockIdToChange);
		}
    }
    request.open(method, url, true);

	if (method == 'POST') {
		try { 
			request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		} catch (e) {}	
	}

	request.send(UrlEncodeData(data));		
	
	return true;
}

function UrlEncodeData(data)
{
	var query = [];
	if (data instanceof Object) {
    	for (var k in data) {
        	query.push(encodeURIComponent(k) + "=" + encodeURIComponent(data[k]));
    	}
    	return query.join('&');
	} else {
    	return encodeURIComponent(data);
	}
}

function SetAjaxOnClickFunctions(blockElement)
{
	var nodes = []; 
	var ajaxClass = "active_ajax";
	if (blockElement.className == ajaxClass) {
		nodes.push(blockElement);
	} else {
		var elem = blockElement.getElementsByTagName('*');
		for (var i = 0; i < elem.length; i++) {
		   if (elem[i].className == ajaxClass) {
		      nodes.push(elem[i]);
		   }
		}
	}
	
	for (var i = 0; i < nodes.length; i++) { 
		var aElements = nodes[i].getElementsByTagName("a");
		for (var j = 0; j < aElements.length; j++) {
			if (aElements[j].getAttribute("onClick") == null && aElements[j].className != "no_ajax") {
				AddHandler(aElements[j], "click", ModifyBlockOnClick);
			}
		}
		var formElements = nodes[i].getElementsByTagName("form");
		for (var j = 0; j < formElements.length; j++) {
			if (formElements[j].onSubmit == undefined && formElements[j].className != "no_ajax") {
				AddHandler(formElements[j], "submit", ModifyBlockOnForm);
			}
		}
	}
}

function AddHandler(object, event, handler)
{
  if (typeof object.addEventListener != 'undefined')
    object.addEventListener(event, handler, false);
  else if (typeof object.attachEvent != 'undefined')
    object.attachEvent('on' + event, handler);
}

function ModifyBlockOnClick(event)
{
	event = (event) ? event : window.event;
	var aElement = (event.target) ? event.target : event.srcElement;
	while (aElement.tagName.toLowerCase() != "a") {
		aElement = aElement.parentNode;
	}
	if (aElement.tagName.toLowerCase() != "a") {
		return false;
	}
	
	var blockId = "";
	var parent = aElement;
	while(parent.parentNode != undefined) {
		if (parent.tagName.toLowerCase() == "div" && parent.id.indexOf("block") == 0) {
			blockId = parent.id;
			break;
		}
		parent = parent.parentNode;
	}
	if (blockId == "") {
		return false;
	}
	
	return ModifyBlock(blockId, aElement, event, "GET");
}

function ModifyBlock(blockId, aElement, event, requestMethod)
{
	var url = aElement.href + "&output=content";
	requestMethod = (requestMethod != undefined) ? requestMethod : "GET";
	
	var result = ServerRequest(url, requestMethod, null, ChangeBlockContent, blockId);
	if (result == true) {
		StopEvent(event);
	}	
}
function ChangeBlockContent(request, blockId)
{
	var text = request.responseText;
	var block = document.getElementById(blockId);
	if (text != "" && block != null) {
		block.innerHTML = text;
		SetAjaxOnClickFunctions(block);
	}
}

function ModifyBlockOnForm(event)
{
	event = (event) ? event : window.event;
	var form = (event.target) ? event.target : event.srcElement;
	while (form.tagName.toLowerCase() != "form") {
		form = form.parentNode;
	}
	if (form.tagName.toLowerCase() != "form") {
		return false;
	}
	
	var blockId = "";
	var parent = form;
	while(parent.parentNode != undefined) {
		if (parent.tagName.toLowerCase() == "div" && parent.id.indexOf("block") == 0) {
			blockId = parent.id;
			break;
		}
		parent = parent.parentNode;
	}
	if (blockId == "") {
		return false;
	}
	
	var url = "index.php?";
	for (var i = 0; i < form.elements.length; i++) {
		url += encodeURIComponent(form.elements[i].name) + '=' + encodeURIComponent(form.elements[i].value) + "&";
	}
	
	var aElement = new Object();
	aElement.href = url;
	return ModifyBlock(blockId, aElement, event, form.getAttribute("method"));
}


//modify sequence AJAX functions

function ModifySequence(aElement, event)
{
	var url = aElement.href + "&show=short_list";
	var result = ServerRequest(url, "GET", null, callback);

	if (result == true) {
		StopEvent(event);
	}
}
function callback(request)
{
	var text = request.responseText;
	var list = document.getElementById("sequence_short_list");
	
	if (text != "" && list != null) {
		list.innerHTML = text;
	}
}

// help page functions

function GetVisibleBodyHeight()
{
	var bodyHeight = document.body.clientHeight;
	var scrollTop = document.documentElement.scrollTop ? 
		    	    document.documentElement.scrollTop : document.body.scrollTop;
	return (bodyHeight - scrollTop);
}
function GetVisibleBodyWidth()
{
	var bodyWidth  = document.body.clientWidth;
	var scrollLeft = document.documentElement.scrollLeft ? 
		    	    document.documentElement.scrollLeft : document.body.scrollLeft;
	return (bodyWidth - scrollLeft);
}

function ShowHelpPage(event, pageUrl)
{
	StopEvent(event);
	ServerRequest(pageUrl, 'GET', null, SetHelpPage);
}
function CloseHelpPage()
{
	document.getElementById('help_page_content').innerHTML = '';
	document.getElementById('help_page').style.visibility = 'hidden';
}

function SetHelpPage(request)
{
	if (request.status == 200) {
		var helpText = request.responseText;

		//parse helpText for [[page_name|link_text]] to show link on another help pages
		var replacement = '<a href="#" onClick="ShowHelpPage(event, \'skins/' +
					templateSkin + '/help/\$1.' + templateLanguage + '.html\')">\$2</a>';
		helpText = helpText.replace(/\[\[([^\]\|]*)\|([^\]]*)\]\]/g, replacement);
	} else {
		var helpText = 'There is no help information for this page';
	}
	helpText = helpText + '<!--[if lte IE 6.5]><iframe style="display: none; display: block; position: absolute; top: 0px; left: 0px; z-index: -1; filter:mask(); width: 100%; height: 100%;"></iframe><![endif]-->';
	
	var helpPageContent = document.getElementById('help_page_content');
	helpPageContent.innerHTML = helpText;
	var helpPageContentHeight = parseInt(GetVisibleBodyHeight() / 4 * 3);   //75%
	helpPageContent.style.height = helpPageContentHeight + 'px';
	var helpPageContentWidth = parseInt(GetVisibleBodyWidth() / 4 * 3);   //75% 
	helpPageContent.style.width = helpPageContentWidth + 'px';

	var image = document.getElementById('help_image');
	var imageTop = image.offsetTop;                   
	for (var parent = image.offsetParent; parent; parent = parent.offsetParent) {
		imageTop += parent.offsetTop - parent.scrollTop;
	} 

	var helpPage = document.getElementById('help_page');
	var helpPageHeight = helpPageContentHeight + 15 * 4;  //plus images ������� �� template!!!
	var helpPageStyleTop = imageTop - helpPageHeight + 10;

	if (navigator.userAgent.indexOf('Safari') > 0) {
		helpPageStyleTop = helpPageStyleTop + document.body.scrollTop;
	}

	if (helpPageStyleTop < 0) {
		helpPageStyleTop = 0;
	}
	helpPage.style.top = helpPageStyleTop + 'px';

	helpPage.style.visibility = 'visible';

}

function ChangeDisplayStatus(elementId)
{
	var element = document.getElementById(elementId);
	if (element.style.display == 'none') {
		element.style.display = 'block';
	} else {
		element.style.display = 'none';
	}
}

function IsColour(value)
{
	return value.match(/^#[0-9a-f]{6}$/i);
}

function ChangeColourSamples(colourEl, sampleColourSquareId)
{
	var colour = colourEl.value.toUpperCase();

	if (IsColour(colour)) {
		currentColour = colour;
		colourEl.value = colour;
		document.getElementById(sampleColourSquareId).style.backgroundColor = colour;
		document.getElementById('sam').style.backgroundColor = colour;
		document.getElementById('samp').innerHTML = '<font face=Tahoma size=2>' + colour +' <font color=white>' + colour + '</font></font>';
		return true;
	} else {
		alert('"' + colourEl.value + '" is not a colour.');
		colourEl.value = currentColour;
		return false;
	}
}

function SetCookie(name, value, expires, path, domain, secure)
{
    document.cookie = name + "=" + escape(value) +
      ((expires) ? "; expires=" + expires : "") +
      ((path) ? "; path=" + path : "") +
      ((domain) ? "; domain=" + domain : "") +
      ((secure) ? "; secure" : "");
}
