/**
 * Скрипт xmlajax.js
 *
 * Данный скрипт предназначен для AJAX-обработки данных на странице
 */
var inpar = new Array();
var collapsed;
var current;
var xml;
var axml = new Array();
var active = false;
var timeout;
var inlock=false;
var lock;
var clicktimeout;
var xmlTMPdata;
var CurrentColumn=-1;
var CurrentType;

function init()
{
    if (window.XMLHttpRequest == undefined)
    {
        XMLHttpRequest = function()
        {
            return new ActiveXObject("Microsoft.XMLHTTP");
        }
    }
    var tree = document.getElementById('TreeTable');
    collapsed = new Array(tree.tBodies[0].rows.length);
    xml = new XMLHttpRequest();
    if (window.alt_table != undefined)
        {alt_table()}
    var ediv = document.getElementById('ErrorDiv');
    ediv.style.display = 'none';
    xmlTMPdata = getXMLFromString(xmlString);
}

function actionHandler()
{
    lock = false;
    clearTimeout(timeout);
    if(active)
    {
        if(xml.readyState==4)
        {
            if(xml.status==200)
            {
                //скрипт успешно выполнился
                var txml = xml.responseXML;
                inlock = false;
                axml[inpar[0]-1]= txml;
                if(txml.childNodes[IEindex].tagName=='tree')
                    AddTree(txml.childNodes[IEindex])
                else
                    if(txml.childNodes[IEindex].tagName=='filter')
                    {
                        xmlTMPdata = txml;
                        ChangeTree(txml.childNodes[IEindex]);
                    }
            }
            else
                {
                    error();
                    inpar.splice(0, 1);
                    setTimeout('actionHandler()', 200)
                }
        }
        else
        setTimeout('actionHandler()', 200)
    }

    if(!active)
    {
        if(current!=undefined)timeout = setTimeout('actionHandler()', 200);
        else
        if(inpar.length>0)
        {
            xml.open('POST', 'xmlthread.php');
            xml.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
            current = inpar[0];
            inpar.splice(0, 1);
            xml.send(req_arr[current]);
            active = true;
            timeout = setTimeout('actionHandler()', 200);
            inlock = false;
        }
    }
}

function addRequestFilter()
{
    if(xml==undefined)return;
    inpar = new Array();
    var cont = document.getElementById('filterForm');
    var t = 'query=filter&kom_ot='+encodeURIComponent(cont.kom_ot.value)+'&kom_do='+encodeURIComponent(cont.kom_do.value)+'&pl_ot='+
        encodeURIComponent(cont.pl_ot.value)+'&pl_do='+encodeURIComponent(cont.pl_do.value)+'&price_ot='+
        encodeURIComponent(cont.price_ot.value)+'&price_do='+encodeURIComponent(cont.price_do.value)+'&adres='+
        encodeURIComponent(cont.adres.value);
    req_arr[0]=t;
    inpar.push(0);
    timeout = setTimeout('actionHandler()', (1+Math.random()*7));
}

function addRequest(id)
{
    if(lock) return null;
    lock = true;
    if(xml==undefined){lock = false;return error('Подождите, страница еще не загрузилась');}
    if(!axml[id-1])
        {
            inpar.push(id);
            timeout = setTimeout('actionHandler()', (1+Math.random()*7));
        }
    else
        {
            inpar.push(id);
            AddTree(undefined);
        }
    return null;
}

function error(message)
{
    var ediv = document.getElementById('ErrorDiv');
    ediv.style.display = 'inline';
    if(!message)
        ediv.innerHTML = '<h3>Внимание! Возникла ошибка! Пожалуйста перезагрузите страницу</h3><p>Если ошибка возникнет вновь, пожалуйста сообщите администратору</p>';
    else
        ediv.innerHTML = '<p>'+message+'</p>';
}

function AddTree(xml)
{
    lock = false;
    timeout = setTimeout('actionHandler()', 200)
    var id=current;
    current = undefined;
    if(id==undefined&&xml!=null) return null;
        else if(id==undefined){id=inpar[0];inpar.splice(0,1);}
    if(collapsed[id]==true){return current=undefined;}
    var tree = document.getElementById('TreeTable');
    var count=id;
    if(xml!=null)  axml[id-1] = xml;
        else xml = axml[id-1];
    active = false;
    var i;
    for (i=0 ; i<id ; i++)
        if(collapsed[i])count++;
    var row = tree.rows[count];
    row.onclick = function () {CollapseTree(id);}
    for(i=1 ; i<row.cells.length ; i++){
        row.cells[i].style.backgroundColor = '#FEEADA';
		row.cells[i].style.color = '#0A466A';
	}
    row = tree.insertRow(count+1);
    var ptr = tree.rows[count].cells[6].innerHTML
//    ptr = ptr+' ';
//    if(ptr.length>4) ptr= ptr.slice(0,-4)+' '+ptr.slice(-4, -1)+' ';
//    if(ptr.length>8) ptr= ptr.slice(0,-8)+' '+ptr.slice(-8, -1);
    var pr = '<div class="bgprice">'+(ptr)+'</div>';
    var cell = row.insertCell(0);
    cell.style.background = 'white';
    cell.innerHTML='&nbsp;';
    cell = row.insertCell(1);
    cell.style.background = 'white';
    cell.style.color = 'black';
    collapsed[id]=true;
    if(!IE)
        var txt = '<div style="width: 633px;"><table border="0" width="100%" class="tree"><tr valign="top"><td width="134"><div class="openTree"><table class="params"><tr><td colspan="2" align="left">Комнаты:</td></tr><tr><td colspan="2" align="right"><span class="unbold">'
    else
        var txt = '<div style="width: 637px;"><table border="0" width="100%" class="tree"><tr valign="top"><td width="132"><div class="openTree"><table class="params"><tr><td colspan="2" align="left">Комнаты:</td></tr><tr><td colspan="2" align="right"><span class="unbold">'
    var text = '';
    var link = 1;
    var cls = '';
    var ii,iii;
    for( i=0 ; i<xml.childNodes.length ; i++)
        {
            switch(xml.childNodes[i].tagName)
            {
                case 'stages':
                    for(ii=0 ; ii<xml.childNodes[i].childNodes.length ; ii++)
                        {
                            link ^= 1;
                            cls = link==1?'openTree2':'openStage';
                            text += '<div class="'+cls+'"><div class="treeStage">'
                                // style="float:left; width:70px;"

                            if(!IEindex)
                            {
                                text +=xml.childNodes[i].childNodes[ii].childNodes[0].textContent+' этаж</div><div class="rooms">';
                                for(iii=1 ; iii<xml.childNodes[i].childNodes[ii].childNodes.length; iii++)
                                {
                                    text+='<span class="apart"><a href="apartment-'+xml.childNodes[i].childNodes[ii].childNodes[iii].childNodes[1].textContent+'.html">'+xml.childNodes[i].childNodes[ii].childNodes[iii].childNodes[0].textContent+'</a></span>';
                                    if(iii%10==0){text+='<br/>';}
                                }
                            }
                            else
                            {
                                text +=xml.childNodes[i].childNodes[ii].childNodes[0].text+' этаж'+'</div><div class="rooms">Квартиры: ';
                                for(iii=1 ; iii<xml.childNodes[i].childNodes[ii].childNodes.length; iii++)
                                {
                                    text+='<span class="apart"><a href="apartment-'+xml.childNodes[i].childNodes[ii].childNodes[iii].childNodes[1].text+'.html">'+xml.childNodes[i].childNodes[ii].childNodes[iii].childNodes[0].text+'</a></span>';
                                    if(iii%10==0){text+='<br/>';}
                                }
                            }
                            text +='</div></div>';
                        }
                    text+='</div>';
                    break;
                case 'rooms':if(!IEindex)txt += xml.childNodes[i].textContent+'</span></td></tr>';
                                else txt +=xml.childNodes[i].text+'</span></td></tr>';
                    break;
                case 'kit':if(!IEindex)txt +='<tr><td align="left">Кухня:</td><td align="right"><span class="unbold">'+xml.childNodes[i].textContent+'</span></td></tr>';
                                else txt +='<tr><td align="left">Кухня:</td><td align="right"><span class="unbold">'+xml.childNodes[i].text+'</span></td></tr>';
                    break;
                case 'cor':if(!IEindex)txt +='<tr><td align="left">Коридор:</td><td align="right"><span class="unbold">'+xml.childNodes[i].textContent+'</span></td></tr></table></div>'+pr+'</td><td><div class="openTree" style="margin-left:2px;">';
                                else txt +='<tr align="left"><td>Коридор:</td><td align="right"><span class="unbold">'+xml.childNodes[i].text+'</span></td></tr></table></div>'+pr+'</td><td><div class="openTree" style="margin-left:2px;">';
                    break;
            }
        }
    if(IE)
        text = '<div style="margin-left:-40px; margin-right:-40px;">'+txt+text+'</td></tr></table></div></div>';
    else
        text = '<div style="margin-left:-40px; margin-right:-50px;padding-left:35px;">'+txt+text+'</td></tr></table></div></div>';
    cell.colSpan = 7;
    cell.innerHTML=text;
    var x = tree.rows[count].cells[0];
    x.innerHTML = '<div class="simlink"><img src="images/close_.gif"/></div>';
    return null;
}

function CreateFunction(count)
{
    return function(){addRequest(count);};
}

function ChangeTree(xml)
{
    current = undefined;
    inpar.length = 0;
    collapsed.length = 0;
    active = false;
    var count=1;
    var tree = document.getElementById('TreeTable');
    var i;
    axml.length = 0;
    req_arr.length = 0;
    for( i=1 ; i<tree.rows.length ;)
        {
            tree.deleteRow(1);
        }
    var row, cell;
    var text, ht;
    var roomcount,square,price,sale,planid,address,finefinish,fineID;
    for(i=0 ; i<xml.childNodes.length ; i++)
    {
        row = tree.insertRow(count);
        cell = row.insertCell(0);
        if(!IEindex)
        {
            square = xml.childNodes[i].childNodes[0].textContent;
            price = xml.childNodes[i].childNodes[1].textContent;
            sale = xml.childNodes[i].childNodes[2].textContent;
            planid = xml.childNodes[i].childNodes[3].textContent;
            address = xml.childNodes[i].childNodes[4].textContent;
            roomcount = xml.childNodes[i].childNodes[5].textContent;
            ht = xml.childNodes[i].childNodes[6].textContent;
            finefinish = xml.childNodes[i].childNodes[8].textContent;
            fineID = xml.childNodes[i].childNodes[9].textContent;
        }
        else
        {
            square = xml.childNodes[i].childNodes[0].text;
            price = xml.childNodes[i].childNodes[1].text;
            sale = xml.childNodes[i].childNodes[2].text;
            planid = xml.childNodes[i].childNodes[3].text;
            address = xml.childNodes[i].childNodes[4].text;
            roomcount = xml.childNodes[i].childNodes[5].text;
            ht = xml.childNodes[i].childNodes[6].text;
            finefinish = xml.childNodes[i].childNodes[8].text;
            fineID = xml.childNodes[i].childNodes[8].text;
        }
        if('Кирпичный'==ht)
            row.className = 'tmp1';
        else
            row.className = 'tmp2';
        var prc;
        prc = price;
        price = price.replace(/([0-9]{3})$/, ' $1');
        price = price.replace(/([0-9]{3} )/,' $1');
        sale = sale.replace(/([0-9]{3})$/, ' $1');
        sale = sale.replace(/([0-9]{3} )/,' $1');
        req_arr[i+1]='query=tree&house='+planid+'&price='+prc+'&fineID='+fineID;
        if(price<0){price='';sale='';}
        row.onclick = CreateFunction(count);
        count++;
        text = '<div class="simlink"><img src="images/open.gif" alt=""/></div>';
        cell.innerHTML = text;
        cell.style.background = 'none';
//Адрес	Комнат	Общая площадь	Цена, руб	Цена при 100% оплате или ипотеке, руб
        cell = row.insertCell(1);
        cell.innerHTML = address;
        cell.className = "left";
        cell = row.insertCell(2)
        cell.innerHTML = ht;
        cell = row.insertCell(3);
        cell.innerHTML = roomcount;
        cell = row.insertCell(4);
        cell.innerHTML = square;
        cell.className = "left";
        cell = row.insertCell(5);
        cell.innerHTML = finefinish;
        cell = row.insertCell(6);
        cell.innerHTML = price;
        cell = row.insertCell(7);
        cell.innerHTML = sale;
    }
    
    collapsed = new Array(tree.tBodies[0].rows.length);
}

function CollapseTree(id)
{
    var i;var count=id;
    for (i=0 ; i<id ; i++)
        if(collapsed[i])count++;
    collapsed[id]=false;
    var tree = document.getElementById('TreeTable');
    tree.deleteRow(count+1);
    tree.rows[count].cells[0].innerHTML = '<div class="simlink"><img src="images/open.gif"/></div>';
    tree.rows[count].onclick = function(){addRequest(id);};
    var row = tree.rows[count];
    for(i=1 ; i<row.cells.length ; i++){
        row.cells[i].style.backgroundColor = '';
	    row.cells[i].style.color = '#FFF';		
	}
}

function getXMLFromString(s)
{
    if(window.ActiveXObject)
    {
        var xml;
        xml=new ActiveXObject("Microsoft.XMLDOM");
        xml.async=false;
        xml.loadXML(s);
        return xml;
    }
    else if(window.DOMParser)
    {
      var parser = new DOMParser();
      return parser.parseFromString(s,'text/xml');
    }
    else
    {
        alert("Загрузка XML не поддерживается браузером");
        return null;
    }
}

function transformXslt(source,style) {
    if(window.ActiveXObject)
    {
        return source.transformNode(style);
    }
    else if(window.XSLTProcessor)
    {
        var xsltProcessor=new XSLTProcessor();
        xsltProcessor.importStylesheet(style);
        var resultDocument = xsltProcessor.transformToDocument(source);
        var xmls = new XMLSerializer();
        return xmls.serializeToString(resultDocument);
    }
    else
    {
        alert("Преобразование XML не поддерживается браузером");
        return null;
    }
}  

function GenerateXSLT(column,type)
{
    var mainCol;
    var tType;
    var stype = type=='a'?'ascending':'descending';
    switch(column)
    {
        case 0:mainCol='address';tType='text';break;
        case 1:mainCol='ht';tType='text';break;
        case 2:mainCol='roomcount';tType='number';break;
        case 3:mainCol='square1';tType='number';break;
        case 4:mainCol='finefinish';tType='text';break;
        case 5:mainCol='price';tType='number';break;
        case 6:mainCol='sale';tType='number';break;
    }
    var t=t='<?xml version="1.0" encoding="UTF-8"?>\
\
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">\
    <xsl:output method="xml" version="1.0" encoding="UTF-8"/>\
\
    <xsl:template match="/">\
<filter>\
    <xsl:for-each select="filter/Planning">\
        <xsl:sort select = "'+mainCol+'" lang = "ru" data-type = "'+tType+'" order = "'+stype+'" case-order = "upper-first"/>\
        <xsl:sort select = "ht" lang = "ru" data-type = "text" order = "ascending" case-order = "upper-first"/>\
        <xsl:sort select = "roomcount" lang = "ru" data-type = "number" order = "ascending" case-order = "upper-first"/>\
        <xsl:sort select = "price" lang = "ru" data-type = "number" order = "ascending" case-order = "upper-first"/>\
<Planning><square><xsl:value-of select="square"/></square><price><xsl:value-of select="price"/></price>\
<sale><xsl:value-of select="sale"/></sale><planid><xsl:value-of select="planid"/></planid>\
<address><xsl:value-of select="address"/></address><roomcount><xsl:value-of select="roomcount"/></roomcount>\
<ht><xsl:value-of select="ht"/></ht><square1><xsl:value-of select="square1"/></square1>\
<finefinish><xsl:value-of select="finefinish"/></finefinish><fineID><xsl:value-of select="fineID"/></fineID></Planning>\
    </xsl:for-each>\
</filter>\
    </xsl:template>\
</xsl:stylesheet>';

    var xslt = getXMLFromString(t);
    xmlTMPdata = getXMLFromString(transformXslt(xmlTMPdata, xslt));
    ChangeTree(xmlTMPdata.childNodes[IEindex]);
}

function ChangeSorting(column)
{
    var tree = document.getElementById('TreeTable');
    var st;
    if(CurrentColumn!=column)
        {GenerateXSLT(column,'a');st='asc';}
    else
        {if(CurrentType=='desc'){GenerateXSLT(column,'a');st='asc';}else{GenerateXSLT(column,'d');st='desc';}}
    for(var i=1 ; i<tree.rows[0].cells.length ; i++)
    {
        if(i-1!=column)
            tree.rows[0].cells[i].className = '';
        else
            tree.rows[0].cells[i].className = st;
    }
    CurrentColumn = column;
    CurrentType=st;
}




hs.graphicsDir = 'design/highslide/graphics/';
hs.outlineType = 'rounded-white';
hs.outlineWhileAnimating = true;

var galleryOptions = {
	slideshowGroup: 'gallery',
	wrapperClassName: 'glossy-dark',
	outlineType: 'glossy-dark',
	dimmingOpacity: 0.75, // прозрачность остального пространства страницы
	align: 'right', // выравнивание картинки
	transitions: ['expand', 'crossfade']
};

if (hs.addSlideshow) hs.addSlideshow({
    slideshowGroup: 'gallery',
    interval: 3000, // интервал смены картинок
    repeat: false, // повторять картинки по кругу или нет
    useControls: false, // использовать контрлбар или нет
	fixedControls: true,
    overlayOptions: {
        opacity: 100, // прозрачность
        position: 'top center', // позиция контрлбара
        hideOnMouseOut: false // скрывать контрлбар при отводе крысы или нет
	}
});

// remove the registerOverlay call to disable the controlbar
hs.registerOverlay({
	thumbnailId: null,
	overlayId: 'controlbar',
	position: 'top right',
	hideOnMouseOut: true
});

hs.graphicsDir = 'scripts/highslide/graphics/';
hs.outlineType = 'rounded-white';
// Tell Highslide to use the thumbnail's title for captions
hs.captionEval = 'this.thumb.title';

function view(){document.getElementById("viewform").style.display = 'block';}
function blur1(t,b)
{
    if( (t.value.length) < 2 )
    {
        t.value = b;
        t.className = 'free';
    }
}
function focus1(t,b)
{
    if(t.value==b)
    {
        t.value = '';
        t.className = 'filled';
    }
}
function showallfeatures()
{
    document.getElementById('feature').style.visibility = 'visible';
	document.getElementById('visibleID').style.visibility = 'hidden';
}
function featureClick()
{
	//document.getElementById('imgplan').style.visibility = 'visible';
	document.getElementById('visibleID').style.visibility = 'visible';
	document.getElementById('feature').style.visibility = 'hidden';

}
var timeout;
function View()
{
    clearTimeout(timeout);
    if(/^[A-Za-zёЁА-РС-Яа-рс-я][- A-Za-zёЁА-РС-Яа-рс-я]{2,}$/.test(formName.value)
       && formName.value!="укажите Ваши имя и фамилию")checked1.className="checkedOn";
        else checked1.className="checkedOff";
    if(/^[- ()0-9]{3,}[0-9][- ()0-9]{2,}$/.test(formPhone.value)
        && formPhone.value!="номер телефона")checked2.className="checkedOn";
        else checked2.className="checkedOff";
}
function Change1()
{
    error.style.visibility = 'hidden';
    timeout = setTimeout(View,10);
}
function SendForm()
{
    if(formPhone&&formName)
    {
        var state = 4;
        if('укажите Ваши имя и фамилию'!=formName.value)state--
        if('номер телефона'!=formPhone.value)state--
        if(state<4)
        {
            state=3;
            if(/^[A-Za-zёЁА-РС-Яа-рс-я][- A-Za-zёЁА-РС-Яа-рс-я]{2,}$/.test(formName.value))state--
            if(/^[- ()0-9]{3,}[0-9][- ()0-9]{2,}$/.test(formPhone.value))state-=2;
        }
        else state=4;
        if(state==0)
            return true;
        else
            ShowError(state);
    }
    return false;
}
function ShowError(t)
{
    var mess;
    switch(t)
    {
        case 4:mess='Пожалуйста, заполните форму';break;
        case 3:mess='Неправильно заполнены поля:<br/> - для имени используйте русские или английский буквы, тире, пробел<br/> - для номер телефона используйте цифры, пробелы, тире, скобки';break;
        case 2:mess='Неправильно заполнено поле с номером телефона:<br/>используйте цифры, пробелы, тире, скобки';break;
        case 1:mess='Неправильно заполнено поле с именем:<br/>используйте русский и английские буквы, тире, пробелы';break;
    }
    error.innerHTML='<table cellspacing="10"><tr><td><img src="/images/alert.gif" alt=""/></td><td>'+mess+'</td></tr></table>';
    error.style.visibility = 'visible';
}
