var isIE6 = ((navigator.userAgent.indexOf("MSIE 6.") != -1) && (navigator.userAgent.indexOf("Opera") == -1));
var isIE7 = ((navigator.userAgent.indexOf("MSIE 7.") != -1) && (navigator.userAgent.indexOf("Opera") == -1));
var isIE = (navigator.appName.toLowerCase().indexOf('internet explorer')+1?1:0);
var isOpera = (navigator.userAgent.indexOf("Opera") != -1);
var isFF = (navigator.userAgent.indexOf("Gecko") != -1);

function showNodeNames(node){
	var str = "";
	//alert(navigator.userAgent);
	for(i=0;i<node.childNodes.length;i++) str+=i+" - "+node.childNodes[i].nodeName+"\n";
	alert(str);
}

function $() {
  var results = [], element;
  for (var i = 0; i < arguments.length; i++) {
    element = arguments[i];
    if (typeof element == 'string')
      element = document.getElementById(element);
    results.push(element);
  }
  return results.length < 2 ? results[0] : results;
}

function trim(str) {
  return str.replace(/(\s+$)|(^\s+)/g, '');
}

function addClass(objId, className) {
	var obj = $(objId);
	if(obj) {
		if(obj.className.indexOf(className) < 0 ) obj.className += " " + className;
	}
}

function removeClass(objId, className) {
	var obj = $(objId);
	if(obj) {
		if(obj.className.indexOf(className) > -1 ) obj.className = trim(obj.className.replace(className, ""));
	}
}


// addEvent and removeEvent, designed by Aaron Moore
function addEvent(element, eventName, handler, listener)
{
	if(typeof element == 'string') element = $(element);
	if(!element) {
		alert("addEvent: element was not found!")
		return;
	}
	
	//if the system is not set up, set it up, and
	// store any outside script's event registration in the first handler slot
	if(typeof element[eventName] != 'function' || 
	typeof element[eventName + '_num'] == 'undefined'){
		element[eventName + '_num'] = 0;
		if(typeof element[eventName] == 'function'){
			element[eventName + 0] = element[eventName];
			element[eventName + '_num']++;
		}
		element[eventName] = function(e){
			var r = true;
			e = (e) ? e : window.event;
			for(var i = 0; i < element[eventName + '_num']; i++) {
				if(listener) {
					if((element[eventName + i]).call(listener, e) === false) r = false;
				} else {
					if(element[eventName + i](e) === false) r = false;
				}
			}
			return r;
		}
	}
	//if handler is not already stored, assign it
	for(var i = 0; i < element[eventName + '_num']; i++)
		if(element[eventName + i] == handler) return;
	element[eventName + element[eventName + '_num']] = handler;
	element[eventName + '_num']++;
}

function removeEvent(element, eventName, handler)
{
	//if the system is not set up, or there are no handlers to remove, exit
	if(typeof element[eventName] != 'function' || 
	typeof element[eventName + '_num'] == 'undefined' ||
	element[eventName + '_num'] == 0) return;
	//loop through handlers,
	//  if target handler is reached, begin overwriting each
	//  handler with the handler in front of it until one before the last
	var found = false;
	for(var i = 0; i < element[eventName + '_num']; i++){
		if(!found)
			found = element[eventName + i] == handler;
		if(found && (i+1) < element[eventName + '_num'])
			element[eventName + i] = element[eventName + (i+1)];
	}
	//if handler was found, decrement the handler count
	if(found)
		element[eventName + '_num']--;
}

/* getX, getY functions provided by ADenis (adenis@ukr.net) */
function getX(object){
	return findPos(object)[0];
}

function getY(object){
	return findPos(object)[1];
}
function findPos(obj, _debug) {
	var curleft = curtop = 0;
	
	if (obj.offsetParent) {
		curleft = obj.offsetLeft;
		curtop = obj.offsetTop;
		curleft -= obj.scrollLeft;
		curtop -= obj.scrollTop;
		
		var obj2 = obj;
		
		while (obj2 = obj2.parentNode) {
			if (obj2.tagName && obj2.tagName != "HTML" && obj2 != document.body) {
				curleft -= (obj2.scrollLeft) ? obj2.scrollLeft : 0;
				curtop -= (obj2.scrollTop) ? obj2.scrollTop : 0;
			}
		}
		
		while (obj = obj.offsetParent) {
			curleft += (obj.offsetLeft) ? obj.offsetLeft : 0;
			curtop += (obj.offsetTop) ? obj.offsetTop : 0;
		}
	}
	
	return [curleft,curtop];
}


function opacity(id, opacStart, opacEnd, millisec) {
	//speed for each frame
	var speed = Math.round(millisec / 100);
	var timer = 0;
	var object = document.getElementById(id).style;
	if(object.display == 'none') object.display = "";
	
	//determine the direction for the blending, if start and end are the same nothing happens
	if(opacStart > opacEnd) {
		for(i = opacStart; i >= opacEnd; i--) {
			setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
			timer++;
		}
	} else if(opacStart < opacEnd) {
		for(i = opacStart; i <= opacEnd; i++) {
			setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
			timer++;
		}
	}
}

//change the opacity for different browsers
function changeOpac(opacity, elem) {
	var object = $(elem).style; 
	object.opacity = (opacity / 100);
	object.MozOpacity = (opacity / 100);
	object.KhtmlOpacity = (opacity / 100);
	object.filter = "alpha(opacity=" + opacity + ")";
}

function getChildByClassName(object, className) {
	var childs = object.childNodes;
	var count = childs.length;
	
	for (var i = 0; i < count ; i++) {
		if(childs[i].className && childs[i].className == className){
			return childs[i];
		} else {
			if(childs[i].childNodes) {
				var child = getChildByClassName(childs[i], className);
				if(child) return child;
			}
		}
	}
	
	return null;
}

function getStyleProperty(object, cssProperty) {
	if (object.currentStyle) {
		return object.currentStyle[cssProperty];
	} else if (window.getComputedStyle) {
		return document.defaultView.getComputedStyle(object,null).getPropertyValue(cssProperty);
	}
}

function isDate(year, month, day) {//monthes = [1,...,12]
	month = month-1;
    var mydate = new Date( year, month, day )
    if((day == mydate.getDate()) && (month == mydate.getMonth()) && (year == mydate.getFullYear()) && (year > 1753)) return true;
	return false;
}

function isLeapYear(year) {
    if(year%4 == 0) {
        if(year%100 == 0) {
            if(year%400 == 0) {
                return true;
            }
            else
                return false;
        }
        else
            return true;
    }
    return false;
}

function removeItemByIndex(mas,ind){
	if(mas.length > 1) mas = mas.slice(0, i).concat(mas.slice(i+1, mas.length));
    else mas = mas.slice(0, 0);
    return mas;
}


function removeXsltEscaping(string) {
	if(string.indexOf("<![CDATA[") > -1) {
		string = string.replace("<![CDATA[", "");
		string = string.replace("]]>", "");
	}
	return string;
}