/*
взять DOM-элемент по id
*/
function $(id)
{
    return document.getElementById(id);
};

/*
создать DOM-элемент (таг)
*/
function $$(tag)
{
	return document.createElement(tag);
};

/*
удалить DOM-элемент (таг) и освободить память
*/
function $_(elem)
{
    if (elem && elem.parentNode)
    {
        var p = elem.parentNode;
        p.removeChild(elem);
        delete(elem);
    }
};

/*
String: var a = trim(b);
*/
function trim(s)
{
    s = s.replace(/^[\s\n]+/g, '');
    s = s.replace(/[\s\n]+$/g, '');
    return s;
};

/*
Removes line breaks from the string
*/
function toLine(s)
{
    s = s.replace(/[\n\t\r]+/g, ' ');
    return s;
};

/*
String: var a = trim('<b>something</b>'); // s = 'something';
*/
function stripTags(s)
{
    return s.replace(/(<[^>]+>)/g,'');
};

/*
Тип верстки страницы
 0 - context
 1 - во всю ширину
 2 - карта
*/
function getBodyType()
{
   return $('body').className.replace('body_type_','');
};

/*
установить тип верстки
*/
function setBodyType(type)
{
   type = type || 0;
   if (type==2 /*&& isIE()*/)
   {
       $('main').style.height = '800px';
       window.setTimeout(setBodyType2,100);
       return;
   }
   $('body').className = 'body_type_'+type;
};

/*
прорисовка установки типа верстки
*/
function setBodyType2()
{
    $('body').className = 'body_type_2';
    $('main').style.height = null;
    if (!window.mapEx)
    {
         window.mapEx = true;
         ajax.req('/main/','map',{'BT':2},true);
    }
}

/*
показать DOM-элемент если он скрыт, а если виден - скрыть.
tp по умолчанию 'block', если инлайновый элемент -передавать 'inline'
*/
function toggleElem(id,tp)
{
    tp = tp || 'block';
    var s = $(id).style.display;
    $(id).style.display = (s!='none') ? 'none' : tp;
    return (s != 'none');
};

/*
это IE любой версии? - true | false
*/
function isIE()
{
    return (document.all && !window.opera);
};

/*
размеры элемента на странице
*/
function getPosition(el)
{
    if (el.style.display != 'none' && el.style.display != null)
    return {width: element.offsetWidth, height: element.offsetHeight};
    var els = el.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    var originalDisplay = els.display;
    els.visibility = 'hidden';
    els.position = 'absolute';
    els.display = 'block';
    var originalWidth = element.clientWidth;
    var originalHeight = element.clientHeight;
    els.display = originalDisplay;
    els.position = originalPosition;
    els.visibility = originalVisibility;
    return {width: originalWidth, height: originalHeight};
};

/*
DOM-содержимое iframe
*/
function iFrameContent(fr)
{
    var body = fr.contentDocument ? fr.contentDocument.documentElement.getElementsByTagName('body')
                                  : fr.contentWindow.document.documentElement.getElementsByTagName('body');
    return (body[0]) ? body[0].innerHTML : '';
};

/*
Установить заголовок окна браузера
*/
function setSiteTitle(s)
{
    window.document.title = s;
};

/*
Скрыть пустой элемент списка
*/
function collapseEmptyLi(cid)
{
    var c = $(cid);
    if (!c) return;
    c.style.display = 'none';
    var el = c.getElementsByTagName('LI');
    var len = el.length, z;
    for(var i=0;i<len;i++)
        if (el[i].id && el[i].id.indexOf('x_')==0)
        {
            z = $('z'+el[i].id);
            if (z)
            {
                if ((trim(el[i].innerHTML)).length==0)
                {
                    z.style.display = 'none';
                    el[i].style.display = 'none';
                }
            }
        }
    c.style.display = 'block';
};

/*
массив всех классов элемента
*/
function allClass(el)
{
   return el.className.split(/\s+/);
};

/*
добавить элементу класс с сохранением существующих
*/
function addClass(id, className)
{
   var el = $(id);
   var classes = allClass(el);

   for(var i = 0; i < classes.length; i++)
      if(classes[i] == className) return;
      el.className = el.className + " " + className;
};

/*
удалить элементу класс с сохранением остальных
*/
function delClass(id, className)
{
   var el = $(id);
   var classes = allClass(el);
   var cn = ""
   for(var i = 0; i < classes.length; i++)
   {
       var isMatch = (typeof className.test == "function")
                     ? className.test(classes[i])
                     : (classes[i] == className)
       if(!isMatch) cn = cn + " " + classes[i]
   }
   el.className = cn.substr(1);
};

/*
найти элементы по классу, возвращает массив всех найденных
*/
function findClass(className)
{
    var list = new Array();
    var nodes = document.getElementsByTagName('*')
    for (i = 0; i<nodes.length; i++)
    {
      if (nodes[i].className.indexOf(className) >= 0 ) list.push(nodes[i]);
    }
    return list;
};

/*
это че-то Арт намутил, мысль улавливается как удалялка класса из всех элементов где он найден, но сделано бредово
не трогал, вдруг где-то юзается
*/
function delSelectClasses(className)
{
/*    if(document.getElementsByClassName)
    {
        var el = document.getElementsByClassName(className);
    }
    else
    {*/
    	var el = findClass(className);
  //  }

    var len = el.length;
    if (len > 0)
    {
        for(var i = 0; i < len; i++)
        {
           delClass(el[i].id, className);
        }
    }
};

/*
не юзается, держится как образец
*/
function onInstallMS()
{
    if (navigator.userAgent.indexOf('Mac') != -1)
        window.location.href = 'http://www.wi2geo.ru/updates/MagicScanner/Wi2GeoMagic.zip';
    else if (navigator.userAgent.indexOf('UNIX') != -1)
        alert('UNIX OS is not supported');
    else
        window.location.href = 'http://www.wi2geo.ru/updates/MagicScanner/Wi2Geo.MagicScanner.Installer.msi';
    return false;
}

function setCookie(name,value,expires,path,domain,secure)
{
	// set time, it's in milliseconds
	var today = new Date();
	today.setTime( today.getTime() );

	/*
	if the expires variable is set, make the correct
	expires time, the current script below will set
	it for x number of days, to make it for hours,
	delete * 24, for minutes, delete * 60 * 24
	*/
	if ( expires )
	{
		//expires = expires * 1000 * 60 * 60 * 24;
		expires = expires * 1000;
	}
	var expires_date = new Date( today.getTime() + (expires) );

	document.cookie = name + "=" +escape( value ) +
	( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
	( ( path ) ? ";path=" + path : "" ) +
	( ( domain ) ? ";domain=" + domain : "" ) +
	( ( secure ) ? ";secure" : "" );
}


function getCookie(name) {
	var cookie = " " + document.cookie;
	var search = " " + name + "=";
	var setStr = null;
	var offset = 0;
	var end = 0;
	if (cookie.length > 0) {
		offset = cookie.indexOf(search);
		if (offset != -1) {
			offset += search.length;
			end = cookie.indexOf(";", offset)
			if (end == -1) {
				end = cookie.length;
			}
			setStr = unescape(cookie.substring(offset, end));
		}
	}
	return(setStr);
}

// this deletes the cookie when called
function deleteCookie(name,path,domain)
{

	if (getCookie(name))
		document.cookie = name + "=" +
		((path) ? ";path=" + path : "") +
		((domain) ? ";domain=" + domain : "" ) +
		";expires=Thu, 01-Jan-1970 00:00:01 GMT";

}

function htmlspecialchars(text)
{
   var chars = Array("&", "<", ">", '"', "'");
   var replacements = Array("&amp;", "&lt;", "&gt;", "&quot;", "'");
   for (var i=0; i<chars.length; i++)
   {
       var re = new RegExp(chars[i], "gi");
       if(re.test(text))
       {
           text = text.replace(re, replacements[i]);
       }
   }
   return text;
}
