//<!--
//<META http-equiv=Content-Type content="text/html; charset=windows-1251">
function und(val){return typeof(val) == 'undefined';}
function exists(name) { if(typeof(window[name])=='undefined') return 0; else return 1; }

function $(e_id){
    return document.getElementById(e_id);
}

function $$(tag){
    return document.createElement(tag);
}

function $_(elem) {
    if (elem && elem.parentNode) {
        var p = elem.parentNode;
        p.removeChild(elem);
        delete(elem);
    }
}
function $S(elem) { 
	if (!elem.tagName) elem = $(elem);	
	return(elem.style); 
}


function toggle(elem) { 
		$S(elem).display=($S(elem).display=='none'?'block':'none'); 
}

function findPos(obj) {
    if (!obj) return [0,0];
    var curleft = curtop = 0;
	//alert('obj.offsetParent='+obj.offsetParent);
    if (obj.offsetParent) {
        curleft = obj.offsetLeft
        curtop = obj.offsetTop
        while (obj = obj.offsetParent) {
            curleft += obj.offsetLeft
            curtop += obj.offsetTop
        }
    }
    return [curleft,curtop];
}

function getParentByTag(elem, tag){
    if (!elem || !elem.tagName) return false;
    while (elem = elem.parentNode)
    {
        if (!elem || !elem.tagName) return false;
        if (elem.tagName == tag) return elem;
    }
    return false;
}

function getChildElementsByTagName(elem, tag){
	if (!elem || !elem.childNodes) return false;
	var ch = [];
	var el = elem.childNodes;
	var el_l = el.length;
	for (var i = 0; i < el_l; i++) {
		if (el[i].tagName && el[i].tagName == tag)  ch.push(el[i]);
		//writeLogMsg("tagName="+el[i].tagName +" = "+ch.length );
	}
	//writeLogMsg("children="+ch +" = "+ch.length );
	return ch;
}

function getEvent() {
	if(typeof(window.event)!='undefined')
	return window.event;
	else if(typeof(window.MouseEvent)!='undefined')
	return window.MouseEvent;
	else return false;
}


function addListener(element,event,func){
	if(event=='mousewheel'&&browsCap.isMozilla){event='DOMMouseScroll'}
    if(document.attachEvent){
        element.attachEvent("on"+event, func);
    }else if(document.addEventListener){
        element.addEventListener(event, func, true);
    }else{
        eval(element+".on"+event+"="+func);
    }
}

function removeListener(element,event,func){
    if(document.detachEvent){
        element.detachEvent("on"+event, func);
    }else if(document.removeEventListener){
        element.removeEventListener(event, func, true);
    }else{
        eval(element+".on"+event+"= function(){return false;}");
    }
}

//	$('debug_note').innerHTML+= "e: "+e+" x: "+e.pageX+" y: "+e.pageY+"<br>";

function getMouseXY(e){
    var x = 0, y = 0;
    if (!e) e = getEvent();

	if (e.pageX || e.pageY){
        x = e.pageX;
        y = e.pageY;
    } else if (e.clientX || e.clientY){
        x = e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
        y = e.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;
    }
	return {"x":x, "y":y};
}

function slideTo(elem, x, y, callback){
    var ex = parseInt(elem.offsetLeft);
    var ey = parseInt(elem.offsetTop);
    var deltaX = (x  - ex)/7;
    var deltaY = (y  - ey)/7;
    var counter = 1;
    var timer = null;

    function doSlide() {
        if (counter > 7){
            window.clearInterval(timer);
            callback();
            return;
        }
        elem.style.left = Math.floor(ex + deltaX*counter);
        elem.style.top = Math.floor(ey + deltaY*counter);
        counter++;
    }
    timer = window.setInterval(doSlide, 10);
}

function getBody() {
	if(document.documentElement && document.documentElement.clientWidth) return document.documentElement;
	else if (document.body) return document.body;
	else return false;
}

function getBodyInfo() {
	var body = getBody();
	if(!body) return false;
	var info={};
	info.x = body.scrollLeft;
	info.y = body.scrollTop;
	info.w = body.clientWidth;
	info.h = body.clientHeight;
	return info;
}

function hasClassName(elem, cname){
    if (!elem) return false;
    var a =  elem.className.split(/\s+/);
    for (var i = 0; i < a.length; i++)
    if (a[i] == cname) return true;
    return false;
}

function addClassName(elem, cname){
    if (!elem) return false;
    if (hasClassName(elem, cname)) return false;
    elem.className += ' '+cname;
 //	alert(typeof(elem.className)+"="+elem.className+"="+elem.tagName);
    return true;
}

function delClassName(elem, cname){
    var a =  elem.className.split(/\s+/);
    var newName = '';
    for (var i = 0; i < a.length; i++)
    if (a[i] != cname) newName += ' '+a[i];
    elem.className = newName;
    return true;
}

function stopBubbleStopReturn(event){
//	showEventProperties(event);
	if(!event)return false;
    if(typeof(event.stopPropagation)!='undefined'){ 	// FF
        event.stopPropagation();
        event.preventDefault();
    } else if(event.cancelBubble == false || event.returnValue == true){
        event.cancelBubble = true;
        event.returnValue = false;
	}
}


function Dragable(e, element, boundingBox, moveFunc, releaseFunc){
    if (!element) return false;
    if (!e) return false;

	var minTop = winMinTop;
    var minLeft = winMinLeft;    
    var maxLeft = 0;
    var maxTop = 0;
	var visibleLimit = 50; // limit of visible part of window

	if (document.documentElement) {
	   var maxLeft = document.documentElement.offsetWidth;
	   //var maxTop = document.documentElement.offsetHeight;
	}else if (document.body && document.body.offsetWidth) {
	   var maxLeft = document.body.offsetWidth;
	   //var maxTop = document.body.offsetHeight;
	}
	
	if(boundingBox != null && boundingBox != document.body)
	{
	  var bp = findPos(boundingBox);    
	  maxLeft = boundingBox.offsetWidth + bp[0];
	  maxTop = boundingBox.offsetHeight + bp[1];
	  minLeft = bp[0];
	  minTop = bp[1];
	}

    var x = parseInt(element.style.left);
    var y = parseInt(element.style.top);
    if(isNaN(x) == true)  x = 0;
    if(isNaN(y) == true)  y = 0;
	
    var mPos = getMouseXY(e);
    stopBubbleStopReturn(e);

	if(!mPos.x) return;

	window.deltaX = mPos.x - x;
    window.deltaY = mPos.y - y;

	addListener(document,"mousemove",startDrag);
    addListener(document,"mouseup",stopDrag);    


/*
	function startDrag(e){
		if(!e)var e=window.event;
		var mPos=getMouseXY(e);
		stopBubbleStopReturn(e);
		if(window.opera){
			e.target.ownerDocument.defaultView.getSelection().removeAllRanges()
		}
		var newX=(mPos.x-window.deltaX);
		var newY=(mPos.y-window.deltaY);
		
		if((newX>=minLeft&&newX<=maxLeft-element.offsetWidth)){
			element.style.left=newX+"px"
		}
		else if(newX<minLeft){
			element.style.left=minLeft+'px'
		}
		else{
			element.style.left=maxLeft-element.offsetWidth+"px"
		}
		if(newY>=minTop&&((maxTop==0)||(newY<=maxTop))){
			element.style.top=newY+"px"
		}
		else if(newY<minTop){
			element.style.top=minTop+'px'
		}
		if(movefunc)movefunc(element,mPos.x,mPos.y,newX,newY)
	}
*/

    function startDrag(e){
		// if(!e)var e=window.event;
       if(!e) var e = getEvent();
        var mPos = getMouseXY(e);
       stopBubbleStopReturn(e);
		if(window.opera){ e.target.ownerDocument.defaultView.getSelection().removeAllRanges() }

        var newX = (mPos.x - window.deltaX);
        var newY = (mPos.y - window.deltaY);
//	$('debug_note').innerHTML+= "x: "+mPos.x+" y: "+mPos.y+"  x: "+window.deltaX+" y: "+ window.deltaY+"<br>";
		
		var maxOffset = (maxLeft - visibleLimit); // - element.offsetWidth

		if(newX >= minLeft && newX < maxOffset){
            element.style.left = newX + "px";
        } else if (newX < minLeft){
            element.style.left  = minLeft+'px';
        } else {
            element.style.left = maxOffset + "px";
        }
 
 		if(newY >= minTop && ((maxTop == 0) || (newY <= maxTop))) {
            element.style.top  = newY + "px";
        } else if (newY < minTop ){
            element.style.top  = minTop+'px';
        }
        // addClassName($('cover'), 'coverShow');  $('cover').style.height = getDocumentHeight();
        if(moveFunc)  moveFunc(element, mPos.x, mPos.y, newX, newY);
    }

    function stopDrag(e){
        if(!e)
        var e = getEvent();
        stopBubbleStopReturn(e);
        removeListener(document,"mousemove",startDrag);
        removeListener(document,"mouseup",stopDrag);
		/*
        $('cover').style.display = 'none';
        $('cover').style.height = 'auto';
		writeLogMsg("data="+mPos.x+"x"+mPos.y+" => "+newX+"x"+newY); return false;  //////////////////////////////////////////////// Message
		*/
        if(releaseFunc) releaseFunc(element);
    }
}
    
function containsDOM (container, containee) {
  var isParent = false;
  do {
    if ((isParent = container == containee))
      break;      
      try {containee = containee.parentNode;} catch(e) {return true;}
  }
  while (containee != null);
  return isParent;
}

function checkMouseOver (element, evt) {
  if (element.contains && evt.fromElement) {
    return !element.contains(evt.fromElement);
  }
  else if (evt.relatedTarget) {
    return !containsDOM(element, evt.relatedTarget);
  }
}

function checkMouseOut (element, evt) {
  if (element.contains && evt.toElement) {
    return !element.contains(evt.toElement);
  }
  else if (evt.relatedTarget) {
    return !containsDOM(element, evt.relatedTarget);
  }
}    

function getBodyScrollTop()
{
    return self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
}

function getBodyScrollLeft()
{
    return self.pageXOffset || (document.documentElement && document.documentElement.scrollLeft) || (document.body && document.body.scrollLeft);
}



//Размер клиентской области окна по горизонтали
/*
function getClientWidth() {
	var w=0;
	// w = Math.min(document.documentElement.clientWidth, document.documentElement.scrollWidth);
   	if (self.innerHeight) w = self.innerWidth;
	else if (document.documentElement && document.documentElement.clientWidth) w = document.documentElement.clientWidth;
	else if (document.body) w = document.body.clientWidth;
	return w;
}

//Размер клиентской области окна по вертикали
function getClientHeight() {
    var h=0;
    if (self.innerHeight) h = self.innerHeight;
    else if (document.documentElement && document.documentElement.clientHeight) h = document.documentElement.clientHeight;
    else if (document.body) h = document.body.clientHeight;
    return h;
}
//Размер документа по горизонтали
function getDocumentWidth(offsetLeft) {
    var size = 25;
    //if (window.opera) size = 19;
    //else if (document.all && !window.opera) size = 25;
    //status = size;
	if(isNaN(parseInt(offsetLeft))) offsetLeft=0;
    return (document.body.scrollWidth > document.body.offsetWidth)?document.body.scrollWidth:document.body.offsetWidth + offsetLeft - size;
}

function getDocumentHeight(offsetTop){    
	if(isNaN(parseInt(offsetTop))) offsetTop=0;
    return (document.body.scrollHeight > document.body.offsetHeight)?document.body.scrollHeight:document.body.offsetHeight + offsetTop;
}
*/


function check(e){
    if(typeof e == "string"){element = $(e);}else{element = e;}
    if(element == null || typeof element != "object") throw Error("Element "+e+" does not exist. It is type "+typeof element);
    return element;
}

function setOpacity(e,op){
    e = check(e);
    if(op==null) op=100;
    if(isNaN(op)) op = parseFloat(op);
    if(op<=1) op=op*100;
    e.style.filter = "alpha(opacity="+op+")";
    op = op/100;
    e.style.MozOpacity = op;
    e.style.KhtmlOpacity = op;
    e.style.opacity = op;
}

function findAncestor(elem, property, value)
{
    if (!elem) { return false }
    while (elem = elem.parentNode)
    {
        if (elem && elem.getAttribute && (elem.getAttribute(property) == value || elem[property] == value)) { return elem }
    }
    return false
}


function encode_utf8( s ) {
	return unescape( encodeURIComponent( s ) );
}
function decode_utf8( s ){
	return decodeURIComponent( escape( s ) );
}


function Hide(elem) {
	if(elem) {
	elem.style.display = 'none';
	elem.style.visibility = 'hidden';
	} 
}
function Display(elem) {
	if(elem) {
	elem.style.display='block';
	elem.style.visibility='visible';
	} 
}


String.prototype.pad = function(l, s, t)
{
	return s || (s = " "), (l -= this.length) > 0 ? (s = new Array(Math.ceil(l / s.length)
		+ 1).join(s)).substr(0, t = !t ? l : t == 1 ? 0 : Math.ceil(l / 2))
		+ this + s.substr(0, l - t) : this;
};

String.prototype.trim = function() 
{ 
     var s = this;
     s = s.replace(/^\s+/g, ''); // strip leading 
     s = s.replace(/\s+$/g, ''); // strip trailing
     return s; 
} 


function showEventProperties(e) {

 function addCell(row, text) {
    var cell = row.insertCell(-1);
    cell.appendChild(document.createTextNode(text));
  }

  var e = e || window.event;
  document.getElementById('eventType').innerHTML = e.type;

  var table = document.createElement('table');
  var thead = table.createTHead();
  var row = thead.insertRow(-1);
  var lableList = ['#', 'Property', 'Value'];
  var len = lableList.length;

  for (var i=0; i<len; i++) { 
    addCell(row, lableList[i]);
  }

  var tbody = document.createElement('tbody');
  table.appendChild(tbody);

  for (var p in e) {
    row = tbody.insertRow(-1);
    row.className = (row.rowIndex % 2)? 'odd':'even';
    addCell(row, row.rowIndex);
    addCell(row, p);
    addCell(row, e[p]);
  }

  document.body.appendChild(table);
}

/*
  var thead = table.createTHead();
  var row = thead.insertRow(-1);
*/
//	alert(event+'='+event.bubbles+'='+event.button+'='+event.cancelable+'='+event.clientX );
//	alert(event+'='+event.stopPropagation+'='+event.preventDefault+'='+event.cancelBubble+'='+event.returnValue);


