// возвращает объект с указанным id или false
function element( sID )
{
	if( document.getElementById )
	{
		var oElement = document.getElementById(sID);
		return oElement == null ? false : oElement;
	}
	return false;
};
// возвращает массив дочерних элементов имеющих определенное имя тега или пустой массив
function byTagName( oElement, sTagName )
{
	if( oElement != false )
	{
		var aElements = oElement.getElementsByTagName(sTagName);
		return aElements;
	}
	return new Array();
};
function create( sTagName )
{
	return document.createElement( sTagName );
};
function createText( sText )
{
	return document.createTextNode( sText );
};
/*----------------------------------------------------------------------------*/
// добавляет атрибут target="_blank" всем ссылкам у которых есть атрибут rel="ext"
function useTarget() { if( element('doc') ) { var refs = byTagName( element('doc'), 'a' ); for( var i = 0; i < refs.length; i++ ){ if( refs[i].getAttribute("href") && refs[i].getAttribute("rel") == "ext" ) { refs[i].target = "_blank"; }; }; }; return; };
// преобразует защищенные ссылки
function hiddenMail( sLogin, sServer ) { var sHref = '\x6d\x61\x69\x6c\x74\x6f\x3a' + sLogin + '\x40' + sServer; window.location.href = sHref; };

String.prototype.contains = function( str )
{
    return this.indexOf( str ) > -1;
};
function start( params )
{// DOM загружен
	useTarget();
    var el;
    var el1;
    var i;
    // исправление всплывающих подсказок для меню слева от логотипа в IE<8
    if( ie && !modern )
    {
        el = element('r-nav');
        if(el)
        {
            var hrefs = byTagName( el, 'a' );
            for( i = 0; i < hrefs.length; i++ )
            {
                el1 = byTagName( hrefs[i], 'img' );
                el1[0].alt = hrefs[i].title;
            }
        }
    };
    // поля на странице сравнения эффективности
    el = element('concurent');
    if( el )
    {
        var inputs = byTagName( el, 'input' );
        if( inputs.length > 0 )
        {
            for( i = 0; i < inputs.length; i++ )
            {
                if( inputs[i].type == 'text' )
                {
                    compInp[inputs[i].id] = inputs[i].value;
                    addEvent( inputs[i], 'focus', inputFocus );
                    addEvent( inputs[i], 'blur', inputBlur );
                }
            }
        }
    }
    // ссылки с вопросами на странице сравнения
    el = element('package1help');
    if( el )
    {
        addEvent( el, 'click', preventDefault );
        addEvent( el, 'mouseover', showHelpText );
        addEvent( el, 'mouseout', hideHelpText );
    }
    // выравнивание надписей в кнопках
    if( ua.indexOf('firefox') != -1 )
    {
        el = element('next-btn');
        if( el ){ el.style.paddingBottom = '7px';}
        /*el = element('select-variants');
        if( el ){ el.style.paddingBottom = '7px';}*/
        /*el = element('checkout');
        if( el ){ el.style.paddingBottom = '7px';}
        el = element('compare');
        if( el ){ el.style.paddingBottom = '7px';}       */
        /*el = element('calculate');
        if( el ){ el.style.paddingBottom = '7px';}      */
    }
}
//------------------------------------------------------------------------------
var compTit = [];
var compInp = [];
var ie = /*@cc_on!@*/false;
var modern = true;
var ua = navigator.userAgent.toLowerCase();
if( ua.indexOf('msie') != -1 && ua.indexOf('opera') == -1 && ua.indexOf('msie 8') == -1 ){modern=false;};
// добавляет обработчики событий
// o - объект, к котором надо добавить событие
// e - название события
// f - имя функции
function addEvent(o,e,f){if(o){if(ie){o.attachEvent('on'+e,f);}else{o.addEventListener(e,f,false);};};}
// для отмены перехода по ссылке
function preventDefault(e)
{
	e = e || event;
	if(e.preventDefault){e.preventDefault();}
	else{e.returnValue=false;};
}
// вставляет newNode после obj
function insertAfter(obj,newNode){obj.parentNode.insertBefore(newNode,obj.nextSibling);}
scriptLoaded=true;
//------------------------------------------------------------------------------
// изображение действия для ajax
var loadingImg = new Image();
loadingImg.src = host + "/sitedesign/images/loading.gif";
//alert(loading);
//alert(loading.src);
function inputFocus(e)
{
    e = e || event;
    var oThis = e.target || e.srcElement;
    if( oThis.value == compInp[oThis.id] )
    {
        oThis.value = '';
    }
}
function inputBlur(e)
{
    e = e || event;
    var oThis = e.target || e.srcElement;
    if( oThis.value == '' )
    {
        oThis.value = compInp[oThis.id];
    }
}
function showHelpText(e)
{
    e = e || event;
    var oThis = e.target || e.srcElement;
    var row = oThis.parentNode;
    row.style.position = 'relative';
    var label = byTagName( row, 'label' );
    var txt = '<' + 'span>'+label[0].innerHTML +'<'+'/span> &mdash; '+ oThis.title;
    compTit[oThis.id]=oThis.title;
    oThis.title = '';
    var d = create( 'div' );
    d.id = "packageHint";
    row.appendChild(d);
    d.innerHTML = '<'+'p>'+txt+'<'+'/p>';
    d.style.position = 'absolute';
}
function hideHelpText(e)
{
    e = e || event;
    var oThis = e.target || e.srcElement;
    var el = element('packageHint');
    if(el)
    {
        el.parentNode.removeChild(el);
    }
    oThis.title = compTit[oThis.id];
}
// объект vxml
var vxml = {
	useActiveX: typeof ActiveXObject != 'undefined',
	useXMLHTTP: typeof XMLHttpRequest != 'undefined'
}
vxml.XMLHTTP_Versions = [ 'MSXML2.XMLHTTP.6.0', 'MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP' ];
// объект vXMLHTTP, посредством этого объекта происходит вся работа
function vXMLHTTP() {}
// создание запроса
vXMLHTTP.createRequest = function()
{
	if( vxml.useXMLHTTP == true )
	{// FF, Opera, Safari, etc
		return new XMLHttpRequest();
	}
	else if( vxml.useActiveX == true )
	{// IE
		if( !vxml.XMLHTTP_Version )
		{
            var versionsAmount = vxml.XMLHTTP_Versions.length
			for( var i = 0; i < versionsAmount; i++ )
			{
				try
				{
					new ActiveXObject( vxml.XMLHTTP_Versions[i] );
					vxml.XMLHTTP_Version = vxml.XMLHTTP_Versions[i];
					break;
				}
				catch( error ){}
			}
		}
		if( vxml.XMLHTTP_Version )
		{
			return new ActiveXObject( vxml.XMLHTTP_Version );
		}
		else
		{
			throw new Error( 'Невозможно создать запрос XMLHTTP' );
		}
	}
	else
	{
		throw new Error( 'Ваш браузер не поддерживает AJAX' );
	}
}
// функция выводит изображения действия
vXMLHTTP.showActionIcon = function()
{
    var b = element('doc');
    // если изображение действия ajax уже выведено, убираем его
    var loading = element('loading');
    if(loading){loading.parentNode.removeChild(loading);};
	var icon = document.createElement('div');
	icon.id = 'loading';
    if( ie == true )
    {
        // в IE нужно сначала добавить элемент, а потом назначать ему стили
		b.appendChild( icon );
        // высота расположения изображения действия
        var h = (document.documentElement.scrollTop+300)+'px';
    }
    else
    {
        // высота расположения изображения действия
        var h = window.scrollY + screen.availHeight / 2 - 54 + 'px';
    }
    // стили и позиционирование
    icon.style.top = h;
    icon.style.left = '50%';
    icon.style.position = 'absolute';
    icon.style.zIndex = '128';
    icon.style.border = '2px solid #3185C2';
    icon.style.width = '50px';
    icon.style.height = '40px';
    icon.style.marginLeft = '-27px';
    icon.style.background = '#FFF';
    icon.style.textAlign = 'center';
    icon.style.paddingTop = '10px';
    var animation = document.createElement('img');
    animation.src = loadingImg.src;
    icon.appendChild(animation);    
	if( ie == false )
	{
		b.appendChild( icon );
	}
}
// функция создает невидимый временный контейнер для данных
vXMLHTTP.createHiddenContainer = function()
{
    var b = element('doc');
    // если контейнер уже создан - делаем его пустым
    var container = element('hiddenContainer');
    if(container){container.innerHTML = '';}
    else
    {
        container = create('div');
        container.id = 'hiddenContainer';
        // в IE нужно сначала добавить элемент, а потом назначать ему стили
        if(ie==true){b.appendChild(container);};
        container.style.display = 'none';
        if(ie==false){b.appendChild(container);};
    };
};
// функция отправки запроса
vXMLHTTP.sendRequest = function( action, value )
{
	var params = new Array();
	var address = host;
	var param = '';
	var sbody = '';
	var async = true;
    var el;
	switch(action)
	{
        case 'add2cart':
            var parts = value.split( '|' );
            param = encodeURIComponent( 'id' );
            param += "=" + encodeURIComponent( parts[0] );
            params.push(param);
            param = encodeURIComponent( 'amount' );
            param += "=" + encodeURIComponent( parts[1] );
            params.push(param);
            address += '/index.php/spares/j-add2cart/';
            break;
	}
    if( address != host )
    {// если запрос определен, предпринимаем действия
        // вывод изображение действия
        vXMLHTTP.showActionIcon();
        // создаем контейнер если необходимо вернуть данные, для которых контейнер не предусмотрен, либо которые используют контейнер совместно с другими данными
        vXMLHTTP.createHiddenContainer();
        // добавляем время, чтобы не кешировалось и формируем тело запроса
        param = encodeURIComponent( 'time' );
        param += "=" + encodeURIComponent( time+Math.random() );
        params.push(param);
        sbody = params.join("&");
        //alert(sbody);
        //alert(address);
        // создаем объект vXMLHTTP, открываем соединение, устанавливаем заголовки
        var oXmlHTTP = vXMLHTTP.createRequest();
        oXmlHTTP.open( "post", address, async );
        oXmlHTTP.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
        // назначаем обработчик результата
        oXmlHTTP.onreadystatechange = function()
        {
            if(oXmlHTTP.readyState == 4 )
            {
                if(oXmlHTTP.status == 200)
                {// успех
                    //alert(address);
                    vXMLHTTP.saveRequest(oXmlHTTP.responseText);
                }
                else
                {// возникла ошибка
                    vXMLHTTP.saveRequest("Error: " + oXmlHTTP.statusText);
                }
            }
        }
        // посылаем запрос
        oXmlHTTP.send(sbody);        
    }
}
// посылка скрытого запроса, когда нам не нужна изображение действия
vXMLHTTP.sendSilentRequest = function( action, value )
{
	var params = new Array();
	var address = host;
	var param = '';
	var sbody = '';
	var async = true;
	switch(action)
	{
		case 'caf-getLands':
			param = encodeURIComponent( 'countryID' );
			param += "=" + encodeURIComponent( value );
			params.push(param);
			address += '/index.php/advertiser/j-caf-get-lands/';
			break;
		case 'add2cart':
			address += '/index.php/trade/j-add2cart/';
			break;
	}
    if( address != host )
    {// если запрос определен, предпринимаем действия
        // добавляем время, чтобы не кишировалось и формируем тело запроса
        param = encodeURIComponent( 'time' );
        param += "=" + encodeURIComponent( time+Math.random() );
        params.push(param);
        sbody = params.join("&");
        // создаем объект vXMLHTTP, открываем соединение, устанавливаем заголовки
        var oXmlHTTP = vXMLHTTP.createRequest();
        oXmlHTTP.open( "post", address, async );
        oXmlHTTP.setRequestHeader( "Content-Type", "application/x-www-form-urlencoded" );
        // назначаем обработчик результата
        oXmlHTTP.onreadystatechange = function()
        {
            if(oXmlHTTP.readyState == 4 )
            {
                if(oXmlHTTP.status == 200)
                {// успех
                    vXMLHTTP.saveSilentRequest(oXmlHTTP.responseText);
                }
                else
                {// возникла ошибка
                    vXMLHTTP.saveRequest("Error: " + oXmlHTTP.statusText);
                }
            }
        }
        // посылаем запрос
        oXmlHTTP.send(sbody);
    }
}
// обработчик результата обычного запроса
vXMLHTTP.saveRequest = function( response )
{
    //alert(response);
    // если есть php-ошибки - выводим. убрать в релизе (FIXME).
    if(response.indexOf( '<b>Error' ) != -1 || response.indexOf( '<b>Warning' ) != -1 || response.indexOf('parse error') != -1 || response.indexOf( '<b>Notice' ) != -1 || response.indexOf( 'Fatal error' ) != -1 ){alert(vXMLHTTP.escapeToNormal(response));};
	// задержка изображения действия
	setTimeout( "{var n = element('loading'); if(n) {n.parentNode.removeChild( n);}}", 1000 );
    
	var parts = response.split( '|||' );
    // количество обновляемых объектов
	var iterations = Math.round((parts.length)/3);
	for( var i = 0; i < iterations; i++ )
	{   
        // проходим по всем обновляемым объектам
		var id = parts[i*3].substr( 1, parts[i*3].length - 2 );
        // объект, который надо обновить
		var contentHolder = element( id );
		if( !contentHolder )
		{
            // если объект не найден, проверяем также родительское окно
			contentHolder = window.opener ? window.opener.document.getElementById( parts[i*3].substr( 1, parts[i*3].length - 2 ) ) : 'undef';
		}
		if( contentHolder != 'undef' )
		{
            // декодируем контент
            var str = vXMLHTTP.escapeToNormal( parts[i*3+1].substr( 1, parts[i*3+1].length - 2 ) );
			if( ie == true && str.indexOf( 'option' ) != -1 )
			{
                // в IE есть проблема с заменой innerHTML у select'ов
				contentHolder.innerHTML = '';
				contentHolder.outerHTML = contentHolder.outerHTML.replace( /<\/select>/gi, str+"</select>" );
			}
			else
			{
                // заменяем содержимое объекта на новое
				contentHolder.innerHTML = str;
			}
            // дополнительный вызов функции, если нужно, после замены контента в объекте
            if( parts[i*3+2] )
            {
                var f = parts[i*3+2].substr( 1, parts[i*3+2].length - 2 );
                if( f !== 'false' ){eval("window."+f+"()");}
            }
		}// если есть целевой объект
	}// for по обновляемым объектам
}
// обработчик результата скрытого запроса
vXMLHTTP.saveSilentRequest = function( response )
{
	var parts = response.split( '|||' );
    // количество обновляемых объектов
	var iterations = Math.round((parts.length)/3);
	for( var i = 0; i < iterations; i++ )
	{
        // проходим по всем обновляемым объектам
		var id = parts[i*3].substr( 1, parts[i*3].length - 2 );
        // объект, который надо обновить
		var contentHolder = element( id );
		if( !contentHolder )
		{
            // если объект не найден, проверяем также родительское окно
			contentHolder = window.opener ? window.opener.document.getElementById( parts[i*3].substr( 1, parts[i*3].length - 2 ) ) : 'undef';
		}
		if( contentHolder != 'undef' )
		{
            // создаем дополнительный целевой объект и присоединяем его к основному
			var ws = create('div');
			ws.id = 'wnd-ws';
			ws.innerHTML = vXMLHTTP.escapeToNormal(parts[i*3+1].substr( 1, parts[i*3+1].length - 2 ));
            contentHolder.appendChild(ws);
            // дополнительный вызов функции, если нужно, после замены контента в объекте
            if( parts[i*3+2] )
            {
                var f = parts[i*3+2].substr( 1, parts[i*3+2].length - 2 );
                if( f !== 'false' ){eval("window."+f+"()");}
            }
		}// если есть целевой объект
	}// for по обновляемым объектам
}
// функция декодирования
vXMLHTTP.escapeToNormal = function( str )
{
	str = str.replace( /%C0/g, 'А' );
	str = str.replace( /%C1/g, 'Б' );
	str = str.replace( /%C2/g, 'В' );
	str = str.replace( /%C3/g, 'Г' );
	str = str.replace( /%C4/g, 'Д' );
	str = str.replace( /%C5/g, 'Е' );
	str = str.replace( /%C6/g, 'Ж' );
	str = str.replace( /%C7/g, 'З' );
	str = str.replace( /%C8/g, 'И' );
	str = str.replace( /%C9/g, 'Й' );
	str = str.replace( /%CA/g, 'К' );
	str = str.replace( /%CB/g, 'Л' );
	str = str.replace( /%CC/g, 'М' );
	str = str.replace( /%CD/g, 'Н' );
	str = str.replace( /%CE/g, 'О' );
	str = str.replace( /%CF/g, 'П' );
	str = str.replace( /%D0/g, 'Р' );
	str = str.replace( /%D1/g, 'С' );
	str = str.replace( /%D2/g, 'Т' );
	str = str.replace( /%D3/g, 'У' );
	str = str.replace( /%D4/g, 'Ф' );
	str = str.replace( /%D5/g, 'Х' );
	str = str.replace( /%D6/g, 'Ц' );
	str = str.replace( /%D7/g, 'Ч' );
	str = str.replace( /%D8/g, 'Ш' );
	str = str.replace( /%D9/g, 'Щ' );
	str = str.replace( /%DA/g, 'Ъ' );
	str = str.replace( /%DB/g, 'Ы' );
	str = str.replace( /%DC/g, 'Ь' );
	str = str.replace( /%DD/g, 'Э' );
	str = str.replace( /%DE/g, 'Ю' );
	str = str.replace( /%DF/g, 'Я' );
	str = str.replace( /%E0/g, 'а' );
	str = str.replace( /%E1/g, 'б' );
	str = str.replace( /%E2/g, 'в' );
	str = str.replace( /%E3/g, 'г' );
	str = str.replace( /%E4/g, 'д' );
	str = str.replace( /%E5/g, 'е' );
	str = str.replace( /%E6/g, 'ж' );
	str = str.replace( /%E7/g, 'з' );
	str = str.replace( /%E8/g, 'и' );
	str = str.replace( /%E9/g, 'й' );
	str = str.replace( /%EA/g, 'к' );
	str = str.replace( /%EB/g, 'л' );
	str = str.replace( /%EC/g, 'м' );
	str = str.replace( /%ED/g, 'н' );
	str = str.replace( /%EE/g, 'о' );
	str = str.replace( /%EF/g, 'п' );
	str = str.replace( /%F0/g, 'р' );
	str = str.replace( /%F1/g, 'с' );
	str = str.replace( /%F2/g, 'т' );
	str = str.replace( /%F3/g, 'у' );
	str = str.replace( /%F4/g, 'ф' );
	str = str.replace( /%F5/g, 'х' );
	str = str.replace( /%F6/g, 'ц' );
	str = str.replace( /%F7/g, 'ч' );
	str = str.replace( /%F8/g, 'ш' );
	str = str.replace( /%F9/g, 'щ' );
	str = str.replace( /%FA/g, 'ъ' );
	str = str.replace( /%FB/g, 'ы' );
	str = str.replace( /%FC/g, 'ь' );
	str = str.replace( /%FD/g, 'э' );
	str = str.replace( /%FE/g, 'ю' );
	str = str.replace( /%FF/g, 'я' );
	str = str.replace( /%A8/g, 'Ё' );
	str = str.replace( /%B8/g, 'ё' );

	return str;
}
// функция кодирования русских символов перед отправкой на сервер
vXMLHTTP.escapeToUnNormal = function( str )
{
	str = str.replace( /А/g, '%C0' );
	str = str.replace( /Б/g, '%C1' );
	str = str.replace( /В/g, '%C2' );
	str = str.replace( /Г/g, '%C3' );
	str = str.replace( /Д/g, '%C4' );
	str = str.replace( /Е/g, '%C5' );
	str = str.replace( /Ж/g, '%C6' );
	str = str.replace( /З/g, '%C7' );
	str = str.replace( /И/g, '%C8' );
	str = str.replace( /Й/g, '%C9' );
	str = str.replace( /К/g, '%CA' );
	str = str.replace( /Л/g, '%CB' );
	str = str.replace( /М/g, '%CC' );
	str = str.replace( /Н/g, '%CD' );
	str = str.replace( /О/g, '%CE' );
	str = str.replace( /П/g, '%CF' );
	str = str.replace( /Р/g, '%D0' );
	str = str.replace( /С/g, '%D1' );
	str = str.replace( /Т/g, '%D2' );
	str = str.replace( /У/g, '%D3' );
	str = str.replace( /Ф/g, '%D4' );
	str = str.replace( /Х/g, '%D5' );
	str = str.replace( /Ц/g, '%D6' );
	str = str.replace( /Ч/g, '%D7' );
	str = str.replace( /Ш/g, '%D8' );
	str = str.replace( /Щ/g, '%D9' );
	str = str.replace( /Ъ/g, '%DA' );
	str = str.replace( /Ы/g, '%DB' );
	str = str.replace( /Ь/g, '%DC' );
	str = str.replace( /Э/g, '%DD' );
	str = str.replace( /Ю/g, '%DE' );
	str = str.replace( /Я/g, '%DF' );
	str = str.replace( /а/g, '%E0' );
	str = str.replace( /б/g, '%E1' );
	str = str.replace( /в/g, '%E2' );
	str = str.replace( /г/g, '%E3' );
	str = str.replace( /д/g, '%E4' );
	str = str.replace( /е/g, '%E5' );
	str = str.replace( /ж/g, '%E6' );
	str = str.replace( /з/g, '%E7' );
	str = str.replace( /и/g, '%E8' );
	str = str.replace( /й/g, '%E9' );
	str = str.replace( /к/g, '%EA' );
	str = str.replace( /л/g, '%EB' );
	str = str.replace( /м/g, '%EC' );
	str = str.replace( /н/g, '%ED' );
	str = str.replace( /о/g, '%EE' );
	str = str.replace( /п/g, '%EF' );
	str = str.replace( /р/g, '%F0' );
	str = str.replace( /с/g, '%F1' );
	str = str.replace( /т/g, '%F2' );
	str = str.replace( /у/g, '%F3' );
	str = str.replace( /ф/g, '%F4' );
	str = str.replace( /х/g, '%F5' );
	str = str.replace( /ц/g, '%F6' );
	str = str.replace( /ч/g, '%F7' );
	str = str.replace( /ш/g, '%F8' );
	str = str.replace( /щ/g, '%F9' );
	str = str.replace( /ъ/g, '%FA' );
	str = str.replace( /ы/g, '%FB' );
	str = str.replace( /ь/g, '%FC' );
	str = str.replace( /э/g, '%FD' );
	str = str.replace( /ю/g, '%FE' );
	str = str.replace( /я/g, '%FF' );
	str = str.replace( /Ё/g, '%A8' );
	str = str.replace( /ё/g, '%B8' );

	return str;
}
