var preLoader=new Image();
var viewImage=document.getElementById("iv_view_window_photo");
var viewImageTd=document.getElementById("iv_view_window_photo_td");
var viewWindow=document.getElementById("iv_view_window");
var viewFon=document.getElementById("iv_view_fon");
var viewFonImage=document.getElementById("iv_view_fon_image");
var viewImageDesc=document.getElementById("iv_photo_title");

var viewCounter=document.getElementById("iv_counter");
var viewCounterAll=document.getElementById("iv_count");
var viewCounterId=document.getElementById("iv_id");
var viewBtnNext=document.getElementById("iv_btn_next");
var viewBtnPrev=document.getElementById("iv_btn_prev");

var page=document.getElementById("bone");

var OP=(navigator.userAgent.indexOf('Opera')!=-1);
var IE=(navigator.userAgent.indexOf('MSIE')!=-1)&&(!OP);
var MZ=(navigator.userAgent.indexOf('Gecko')!=-1);
var winWidth=0;
var winHeight=0;
var winTop=0;
var viewOpened=false;
var viewGalleryId=false;
var viewPhotoId=false;

if (OP) {
	viewFonImage.src="/f/i/common/z.gif";
	viewFonImage.className="iv_png";
	viewFonImage.style.backgroundImage="url('/f/i/common/fon.png')";
}

function viewOpen(img, width, height, desc) {
	
	resizeFon();
	viewFon.style.display="";
	
	viewWindow.style.width=(width+((OP)?10:5))+"px";
	viewImageTd.style.height=(height)+"px";
	viewImage.style.width="32px";
	viewImage.style.height="32px";
	viewImage.src="/f/i/common/loader.gif";
	viewWindow.style.display="";
	viewWindow.style.visibility="hidden";
	viewSetCenter();
	viewWindow.style.visibility="visible";
	document.onkeydown=listenKeys;
	preLoader.onload=function() {
		viewImage.style.width=(width)+"px";
		viewImage.style.height=(height)+"px";
		viewImage.src=img;
	}
	viewImageDesc.innerHTML = desc;
	preLoader.src=img;
    viewBtnPrev.style.display=
    viewBtnNext.style.display=
    viewCounter.style.display='none';
	viewOpened=true;
	return false;
}
function viewOpenGallery(galleryId,photoId) {
	var gallery=galleriesList[galleryId];
    var photo=gallery[photoId];
    
    if (!photo) { return false; }
    
	resizeFon();
	viewFon.style.display="";
    
	viewWindow.style.width=(photo.width+((OP)?10:5))+"px";
	viewImageTd.style.height=(photo.height)+"px";
	viewImage.style.width="32px";
	viewImage.style.height="32px";
	viewImage.src="/f/i/common/loader.gif";
	viewWindow.style.display="";
	viewWindow.style.visibility="hidden";
	viewSetCenter();
	viewWindow.style.visibility="visible";
	document.onkeydown=listenKeys;
	preLoader.onload=function() {
		viewImage.style.width=(photo.width)+"px";
		viewImage.style.height=(photo.height)+"px";
		viewImage.src=photo.img;
	}
	viewImageDesc.innerHTML = photo.desc;
    viewCounterAll.innerHTML = gallery.length;
    viewCounterId.innerHTML = (photoId+1);
    viewBtnPrev.style.display=
    viewBtnNext.style.display=
    viewCounter.style.display=(gallery.length>1)?'':'none';
	preLoader.src=photo.img;
	viewOpened=true;
    viewGalleryId=galleryId;
    viewPhotoId=photoId;
	return false;
}
function viewPhotoNext() {
    var gallery=galleriesList[viewGalleryId];
    if (!gallery) { return false; }
    var pCount=gallery.length;
    if (pCount==0) { return false; }
    photoId=viewPhotoId+1;
    if (photoId>=pCount) { photoId=0; }
    
    viewOpenGallery(viewGalleryId,photoId);
    //return false;
}
function viewPhotoPrev() {
    var gallery=galleriesList[viewGalleryId];
    if (!gallery) { return false; }
    var pCount=gallery.length;
    if (pCount==0) { return false; }
    photoId=viewPhotoId-1;
    if (photoId<0) { photoId=pCount-1; }
    
    viewOpenGallery(viewGalleryId,photoId);
    //return false;
}
function viewClose() {
	viewWindow.style.display="none";
	viewFon.style.display="none";
	preLoader.src="/f/i/common/loader.gif";
	document.onkeydown=function(){};
	viewOpened=false;
    viewGalleryId=false;
    viewPhotoId=false;
}
function viewSetCenter() {
	var winWidth=page.offsetWidth;
	var winHeight=page.offsetHeight;
	var winTop=document.documentElement.scrollTop;
	viewWindow.style.left=((winWidth-viewWindow.offsetWidth)/2)+"px";
	var innerHeight=(!OP)?document.body.clientHeight:window.innerHeight;
	var ptop=(innerHeight-viewWindow.offsetHeight)/2;
	if (ptop<0) {ptop=0;}
	viewWindow.style.top=(ptop+winTop)+"px";
}
function listenKeys(e) {
	if (IE) { key=event.keyCode; }
	else { key=e.which; }
	if (key == 27) { viewClose(); }
}


/* для окна заказа */

var formWindow=document.getElementById("iv_form_window");
var formOpened=false;
function formOpen(step) {
    switch (step) {
        case 1: {
            document.getElementById('step-2').style.display='none';
            document.getElementById('step-3').style.display='none';
            //document.getElementById('step-4').style.display='none';
            document.getElementById('step-1').style.display='';
            break;
        }
        case 2: {
            document.getElementById('step-1').style.display='none';
            document.getElementById('step-3').style.display='none';
            //document.getElementById('step-4').style.display='none';
            document.getElementById('step-2').style.display='';
            break;
        }
        case 3: {
            document.getElementById('step-1').style.display='none';
            document.getElementById('step-2').style.display='none';
            //document.getElementById('step-4').style.display='none';
            document.getElementById('step-3').style.display='';
            break;
        }
        case 4: {
            //document.getElementById('step-1').style.display='none';
            //document.getElementById('step-2').style.display='none';
            //document.getElementById('step-3').style.display='none';
            document.getElementById('step-4').style.display='';
            break;
        }
        default: {
            document.getElementById('step-0').style.display='';
            break;
        }
        
    }
    resizeFon();
	viewFon.style.display="";
	
    formWindow.style.display="";
	formWindow.style.visibility="hidden";
	formSetCenter();
	formWindow.style.visibility="visible";
    document.onkeydown=listenKeys2;
    formOpened=true;
    return false;
}
function formClose() {
	formWindow.style.display="none";
	viewFon.style.display="none";
	document.onkeydown=function(){};
	formOpened=false;
}
function formSetCenter() {
	var winWidth=page.offsetWidth;
	var winHeight=page.offsetHeight;
	var winTop=document.documentElement.scrollTop;
	formWindow.style.left=((winWidth-formWindow.offsetWidth)/2)+"px";
	var innerHeight=(!OP)?document.body.clientHeight:window.innerHeight;
	var ptop=(innerHeight-formWindow.offsetHeight)/2;
	if (ptop<0) {ptop=0;}
	formWindow.style.top=(ptop+winTop)+"px";
}
function listenKeys2(e) {
	if (IE) { key=event.keyCode; }
	else { key=e.which; }
	if (key == 27) { formClose(); }
}

var monthes=new Array('бокабль','января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря');
var monthDays=new Array(-1,31,28,31,30,31,30,31,31,30,31,30,31);
var now=new Date().getFullYear();
if ( (now%4==0 && now%100!=0) || now%400==0 ) { monthDays[2]=29; }

var formCurrentNum=1;
var formParts=new Array(false,true);
var sRoomId=0;
var sRoom=undefined;

/* обрабатывает изменения в периоде заказа */
function formSetPeriod(flag) {
    var dS=Number($$('day-from-'+formCurrentNum).value);
    var dF=Number($$('day-to-'+formCurrentNum).value);
    var mS=Number($$('month-from-'+formCurrentNum).value);
    var mF=Number($$('month-to-'+formCurrentNum).value);
    var resHTML='';
    var isOk=false;
    if (dS && dF && mS && mF) {
        var mSD=monthDays[mS];
        var mFD=monthDays[mF];
        if (dS<1 || dS>mSD) { resHTML='день приезда неправильный'; }
        else if (dF<1 || dF>mFD) { resHTML='день отъезда неправильный'; }
        else if (mS>mF || (mS==mF && dS>dF)) { resHTML='путаете даты?'; }
        else if ((mS==roomsDates.mS && dS<roomsDates.dS) || (mF==roomsDates.mF && dF>roomsDates.dF)) { 
            var _mS=''; var _mF=''; var _opt=$$('month-from-'+formCurrentNum).options;
            for (k=0;k<_opt.length;k++) {
                if (_opt[k].value==roomsDates.mS) { _mS=_opt[k].text; }
                if (_opt[k].value==roomsDates.mF) { _mF=_opt[k].text; }
            }
            resHTML='мы работаем с '+roomsDates.dS+' '+_mS+' по '+roomsDates.dF+' '+_mF; 
        }
        else {
            var days=dayCount(dS,mS,dF,mF);
            resHTML='(всего '+textAfterNum(days,textDay)+((days>1)?(' и '+textAfterNum(days-1,textNight)):'')+')';
            isOk=true;
        }
    }
    else {
        if (dS==NaN) { resHTML='день приезда не число'; }
        else if (dF==NaN) { resHTML='день отъезда не число'; }
        else if (mS==NaN) { resHTML='месяц приезда неправильный'; }
        else if (mF==NaN) { resHTML='месяц отъезда неправильный'; }
        /*else if (dS==0) { resHTML='день приезда не введен'; }
        else if (dF==0) { resHTML='день отъезда не введен'; }
        else if (mS==0) { resHTML='месяц приезда не выбран'; }
        else if (mF==0) { resHTML='месяц отъезда не выбран'; }*/
        else { resHTML=''; }
    }
    $$('days-total-'+formCurrentNum).innerHTML=resHTML;
    
    if (flag==undefined) { 
        formMakeCost();
    }
    
    if (isOk) { formFieldsUnlock('people-count',flag); return true; }
    else { formFieldsLock('people-count'); return false; }
}

/* обрабатывает изменения в количестве людей */
function formSetPeopleCount(flag) {
    var pCount=Number($$('people-count-'+formCurrentNum).value);
    var rSel=$$('room-type-'+formCurrentNum);
    var oVal=rSel.value;
    var nVal='';
    var oc=rSel.options.length;
    for (i=1;i<oc;i++) {
        rSel.options[1]=null;
    }
    var j=1;
    var roomsSize=rooms.size();
    var roomsA=rooms.toArray();
    for (i=0;i<roomsSize;i++) {
        if (pCount <= roomsA[i][1].pcount) {
            rSel.options[j]=new Option(roomsA[i][1].title,roomsA[i][0]);
            if (oVal==roomsA[i][0]) { nVal=oVal; }
            j++;
        }
    }
    rSel.value=nVal;
            
    if (flag==undefined) { 
        formMakeCost();
    }
    
    if (pCount) { formFieldsUnlock('room-type',flag); return true; }
    else { formFieldsLock('room-type'); return false; }
}

/* обрабатывает изменения в типе комнаты */
function formSetRoomType(flag) {
    sRoomId=Number($$('room-type-'+formCurrentNum).value);
    sRoom=rooms.find(function(item){return item.key==sRoomId});
    var rSel=$$('children-count-'+formCurrentNum);
    var oVal=rSel.value;
    var nVal='';
    var r2Sel=$$('children2-count-'+formCurrentNum);
    var o2Val=r2Sel.value;
    var n2Val='';
    var childCount=0;
    if (sRoom) {
        childCount=sRoom[1].ccount;
        $$('room-descr-'+formCurrentNum).innerHTML=sRoom[1].descr;
    }
    else {
        $$('room-descr-'+formCurrentNum).innerHTML='';
    }
    
    if (childCount < rSel.options.length-1) {
        var oc=rSel.options.length;
        for (i=childCount+1; i<oc; i++) {
            rSel.options[childCount+1]=null;
        }
        nVal=(oVal>childCount)?childCount:oVal;
        var cCount=childCount+nVal;
    }
    else if (childCount>=rSel.options.length) {
        for (i=rSel.options.length; i<=childCount; i++) {
            rSel.options[i]=new Option(i,i);
        }
        var cCount=childCount;
    }
    
    if (childCount < r2Sel.options.length-1) {
        var oc=r2Sel.options.length;
        for (i=childCount+1; i<oc; i++) {
            r2Sel.options[childCount+1]=null;
        }
        n2Val=(o2Val>childCount)?childCount:o2Val;
    }
    else if (childCount>=r2Sel.options.length) {
        for (i=r2Sel.options.length; i<=childCount; i++) {
            r2Sel.options[i]=new Option(i,i);
        }
    }
    
    if (childCount==0) {
        if (sRoom) {
            $$('child-hidden-'+formCurrentNum).style.display='none';
            $$('children-'+formCurrentNum).style.display='none';
        }
        else {
            formChildrenBlock(formChildrenBlockShow)
            $$('children-'+formCurrentNum).style.display='';
        }
    }
    else {
        formChildrenBlock(formChildrenBlockShow)
        $$('children-'+formCurrentNum).style.display='';
    }
    
    if (flag==undefined) { 
        formSetChildrenCount(0);
        formMakeCost();
    }
    
    if (sRoom) { formFieldsUnlock('other',flag); return true; }
    else { formFieldsLock('other'); return false; }
}


/* обрабатывает изменения в количестве детей */
function formSetChildrenCount(part) {
    // проверить заполение полей с приставными местами, 
    // в сумме должно быть не больше разрешенного кол-ва
    sRoomId=Number($$('room-type-'+formCurrentNum).value);
    sRoom=rooms.find(function(item){return item.key==sRoomId});
    var childCount=0;
    if (sRoom) {
        childCount=sRoom[1].ccount;
        var rSel=$$('children-count-'+formCurrentNum);
        var oVal=rSel.value;
        var nVal='';
        var r2Sel=$$('children2-count-'+formCurrentNum);
        var o2Val=r2Sel.value;
        var n2Val='';
        if (childCount < oVal+o2Val) {
            // правим значения по приоритету
            if (part==0 || part==1) {
                // фиксируем oVal
                $$('children2-count-'+formCurrentNum).value=childCount-oVal;
            }
            else {
                // фиксируем o2Val
                $$('children-count-'+formCurrentNum).value=childCount-o2Val;
            }
        }
        
    }
    
    
    if (part > 0) {
        formMakeCost();
    }
}

var formChildrenBlockShow=false;
/* показ блока детей */
function formChildrenBlock(flag) {
    formChildrenBlockShow=flag;
    if (flag==false) {
        $$('child-hidden-'+formCurrentNum).style.display='none';
    }
    else {
        $$('child-hidden-'+formCurrentNum).style.display='';
    }
    
    formMakeCost();
}







/* вычисляет стоимость номера */
function formMakeRoomCost(num,periods) {
    var cost=0;
    if (periods) {
        var pCount=Number($$('people-count-'+num).value);
        sRoomId=Number($$('room-type-'+num).value);
        sRoom=rooms.find(function(item){return item.key==sRoomId});
        
        if (pCount>0 && sRoom) {
            for (i=1;i<periods.length;i++) {
                cost+=periods[i]*pCount*sRoom[1].cost[i];
            }
        }
    }
    
    if (cost>0) { $$('room-cost-'+num).innerHTML=cost+' грн'; }
    else { $$('room-cost-'+num).innerHTML=''; }
    
    return cost;
}
/* вычисляет стоимость детей */
function formMakeChildrenCost(num,periods) {
    var cost=0;
    var cost2=0;
    if (periods) {
        sRoomId=Number($$('room-type-'+num).value);
        sRoom=rooms.find(function(item){return item.key==sRoomId});
        
        if (sRoom) {
            if (sRoom[1].ccount>0 && formChildrenBlockShow) {
                var cCount=Number($$('children-count-'+num).value);
                var c2Count=Number($$('children2-count-'+num).value);
                if (cCount>0) { // 3 - 12
                    for (i=1;i<periods.length;i++) {
                        cost+=periods[i]*cCount*(sRoom[1].cost[i]*0.65);
                    }
                }
                if (c2Count>0) { // > 12
                    for (i=1;i<periods.length;i++) {
                        cost2+=periods[i]*c2Count*(sRoom[1].cost[i]*0.80);
                    }
                }
            }
        }
    }
    
    if (cost>0) { $$('children-cost-'+num).innerHTML=Math.round(cost)+' грн'; }
    else { $$('children-cost-'+num).innerHTML=''; }
    if (cost2>0) { $$('children2-cost-'+num).innerHTML=Math.round(cost2)+' грн'; }
    else { $$('children2-cost-'+num).innerHTML=''; }
    
    return cost+cost2;
}
/* вычисляет общую стоимость номера */
function formMakeCost(num) {
    if (num==undefined) { num=formCurrentNum; }
    var dS=Number($$('day-from-'+num).value);
    var dF=Number($$('day-to-'+num).value);
    var mS=Number($$('month-from-'+num).value);
    var mF=Number($$('month-to-'+num).value);
    var periods=null;
    if (dS && dF && mS && mF) {
        var mSD=monthDays[mS];
        var mFD=monthDays[mF];
        if (dS>=1 && dS<=mSD && dF>=1 && dF<=mFD && (mS<=mF || (mS==mF && dS<=dF)) && (mS!=roomsDates.mS || dS>=roomsDates.dS) && (mF!=roomsDates.mF || dF<=roomsDates.dF)) {
            // определяем периоды для вытягивания цен
            var dayS=dayCount(roomsDates.dS,roomsDates.mS,dS,mS); // номер дна приезда
            var dayF=dayCount(roomsDates.dS,roomsDates.mS,dF,mF); // номер дня отъезда
            periods=new Array(0);
            for (i=1;i<roomsDate.length;i++) {
                if (dayS>=roomsDate[i].dS && dayS<=roomsDate[i].dF && dayF>=roomsDate[i].dS && dayF<=roomsDate[i].dF) {
                    // период полностью внутри месяца
                    periods[i]=dayF-dayS+1;
                }
                else if (dayS>=roomsDate[i].dS && dayS<=roomsDate[i].dF && dayF>roomsDate[i].dF) {
                    // попало только начало периода
                    periods[i]=roomsDate[i].dF-dayS+1;
                }
                else if (dayF>=roomsDate[i].dS && dayF<=roomsDate[i].dF && dayS<roomsDate[i].dS) {
                    // попало только конец периода
                    periods[i]=dayF-roomsDate[i].dS+1;
                }
                else if (dayS<roomsDate[i].dS && dayF>roomsDate[i].dF) {
                    // перод целиком покрыл месяц
                    periods[i]=roomsDate[i].dF-roomsDate[i].dS+1;
                }
                else {
                    periods[i]=0;
                }
            }
            
        }
    }
    // пишем полные стоимости где возможно
    var totalCost=formMakeRoomCost(num,periods)+
                  formMakeChildrenCost(num,periods);
    if (bonuseP) {
        totalCost=Math.round(totalCost*(100-bonuseP))/100;
    }
    if (totalCost>0) { 
        $$('total-cost-'+num).innerHTML=Math.round(totalCost)+' грн'; $$('total-cost-txt-'+num).style.visibility='visible'; 
        $$('order-'+num).innerHTML=$$('room-type-'+num).options[$$('room-type-'+num).selectedIndex].text;
    }
    else { 
        $$('total-cost-'+num).innerHTML=''; $$('total-cost-txt-'+num).style.visibility='hidden'; 
        $$('order-'+num).innerHTML='текущий выбор';
    }
}

/* вычисляет количество дней в периоде */
function dayCount(dS,mS,dF,mF) {
    c=dF-dS;
    for (i=mS;i<mF;i++) { c+=monthDays[i]; }
    return c;
}


var textDay=new Array('дней','день','дней','дня');
var textNight=new Array('ночей','ночь','ночей','ночи');
/* добавляет после чила слово в нужной форме */
function textAfterNum(num,text) {
    var res='';
    if (num>0) {
        var l1=num%10;
        var l2=num%100;
        if (l2>=11 && l2<=14) { res=2; }
        else if (l1==1) { res=1; }
        else if (l1>=2 && l1<=4) { res=3; }
        else { res=2; }
    }
    else {
        res=0;
    }
    return num+' '+text[res];
}

var bonuseP=0;
var bonuseC='';
var bonuseCC='';
var bonuseText='';
/* вытягивает скидку из базы */
function formGetBonuse(e) {
    if (!e) { e = window.event; }
    if (e.ctrlKey) { return; }
    var bonuseNum=$$('bonus-card-'+formCurrentNum).value;
    bonuseC=bonuseNum;
    if (bonuseNum.length==10) {
        var post='ajax=ajax&cnumber='+bonuseNum;
        new Ajax.Request(
            '/about/price/cardinfo/',
            {
                method: 'post',
                postBody: post,
                onSuccess:  formSetBonuse
            }
        );
    }
    else {
        formRecalcBonuse(0);
    }
}
/* пересчитывает стоимость по новой скидке */
function formSetBonuse(answer) {
    formRecalcBonuse(Number(answer.responseText));
}
/* непосредственный пересчет всех заказов по новой скидке */
function formRecalcBonuse(newBonuse) {
    if (newBonuse==bonuseP && bonuseCC==bonuseC) { return; }
    bonuseText='';
    if (newBonuse>0) { bonuseText='-'+newBonuse+'%'; }
    else if (newBonuse<0) { bonuseText='карта не найдена'; newBonuse=0; }
    // во все формы вбить
    var recalc=(newBonuse!=bonuseP);
    bonuseP=newBonuse;
    bonuseCC=bonuseC;
    for (j=1;j<formParts.length;j++) {
        if (formParts[j]) {
            if (recalc) { formMakeCost(j); }
            $$('bonus-card-'+j).value=bonuseCC;
            $$('bonus-'+j).innerHTML=bonuseText;
        }
    }
    
}

/* выбор номера при множественном заказе */
function formSelectOrder(num,check) {
    if (num==formCurrentNum) { return; }
    if (!check) {
        if (!formCheckOrder(formCurrentNum)) { return; }
    }
    if ($$('order-form-'+num)) {
        if ($$('order-form-'+formCurrentNum)) { 
            //$$('order-'+formCurrentNum).innerHTML=$$('room-type-'+formCurrentNum).options[$$('room-type-'+formCurrentNum).selectedIndex].text;
            $$('order-form-'+formCurrentNum).style.display='none'; 
            $$('order-'+formCurrentNum).className=''; 
        }
        formCurrentNum=num;
        //$$('order-'+formCurrentNum).innerHTML='текущий выбор';
        $$('order-form-'+formCurrentNum).style.display='';
        $$('order-'+formCurrentNum).className='sel';
        formChildrenBlockShow=$$('with-cildren-'+formCurrentNum).checked;
        // приводим доступность полей в порядок
        formSetPeriod(true);
    }
}

/* обрабатывает отказ от номера */
function formDeleteOrder(num) {
    var oc=0;
    for (i=1;i<formParts.length;i++) {
        if (formParts[i]) { oc++; }
    }
    if (oc<=1) { 
        // нужно просто обнулить форму - делаем ресет всей форме и не паримся
        formReset();
        return; 
    }
    formParts[num]=false;
    oc=0;
    for (i=1;i<formParts.length;i++) {
        if (formParts[i]) { oc=i; }
    }
    $$('orders-list').removeChild($$('order-'+num));
    $$('step-1').removeChild($$('order-form-'+num));
    formSelectOrder(oc,true);
}

/* приводит форму в первоначальное состояние */
function formReset(onlyclear) {
    $$('contact-name').value='';
    $$('contact-email').value='';
    $$('contact-phone').value='';
    for (i=1;i<formParts.length;i++) {
        if (formParts[i]) {
            $$('orders-list').removeChild($$('order-'+i));
            $$('step-1').removeChild($$('order-form-'+i));
            if ($$('order-info-'+i)) {
                $$('step-2').removeChild($$('order-info-'+i));
            }
        }
    }
    formParts=new Array(false);
    formCurrentNum=0;
    formAddOrder(true);
    if (onlyclear==undefined) { formSetStep(1,1); }
}

var monthOpt='';
var peopleCountOpt='';
var roomTypesOpt='';
var foodTypesOpt='';
/* обрабатывает заказ еще одного номера */
function formAddOrder(isReset) {
    var id=formParts.length;
    if (!isReset) {
        if (!formCheckOrder(formCurrentNum)) { return; }
        var dS=$$('day-from-'+formCurrentNum).value;
        var dF=$$('day-to-'+formCurrentNum).value;
        var mS=$$('month-from-'+formCurrentNum).value;
        var mF=$$('month-to-'+formCurrentNum).value;
    }
    else {
        var dS='';
        var dF='';
        var mS='';
        var mF='';
    }
    formParts[id]=true;
    if (roomTypesOpt=='') {
        rooms.each(function(item){ roomTypesOpt+='<option value="'+item.key+'">'+item.value.title+'</option>'; });
    }
    if (peopleCountOpt=='') {
        for (i=1;i<=maxpcount;i++) {
            peopleCountOpt+='<option value="'+i+'">'+i+'</option>';
        }
    }
    if (monthOpt=='') {
        for (i=roomsDates.mS;i<=roomsDates.mF;i++) {
            monthOpt+='<option value="'+i+'">'+monthes[i]+'</option>';
        }
    }
    
    var nd=document.createElement('div');
    nd.id='order-form-'+id;
    nd.style.display='none';
    nd.innerHTML='<table class="order-form" cellspacing="0" cellpadding="0">'+
            	    '<tr><td width="25%"></td><td width="40%"></td><td width="35%"></td></tr>'+
            		'<tr class="first main-fields">'+
            			'<th>Время посещения турбазы:</th>'+
            			'<td class="from-fields">'+
            				'<div class="order-dates">'+
            					'<label for="day-from-'+id+'">с</label>&nbsp;'+
            					'<input name="FromDay'+id+'" id="day-from-'+id+'" type="text" value="'+dS+'" size="2" onkeyup="formSetPeriod()" />&nbsp;'+
            					'<select name="FromMonth'+id+'" id="month-from-'+id+'" onchange="formSetPeriod()"><option value="">&nbsp;</option>'+monthOpt+'</select>,&nbsp;'+
            					'<label for="day-to-'+id+'">по</label>&nbsp;'+
            					'<input name="ToDay'+id+'" id="day-to-'+id+'" type="text" value="'+dF+'" size="2" onkeyup="formSetPeriod()" />&nbsp;'+
            					'<select name="ToMonth'+id+'" id="month-to-'+id+'" onchange="formSetPeriod()"><option value="">&nbsp;</option>'+monthOpt+'</select>'+
            				'</div>'+
            			'</td>'+
            			'<td class="fields-info" id="days-total-'+id+'"></td>'+
            		'</tr>'+
            		'<tr class="main-fields" style="display: none;">'+
            			'<th><label for="currency-'+id+'">Показывать цены в:</label></th>'+
            			'<td class="from-fields"><select id="currency-'+id+'" class="type-big"><option>украинских гривнах</option></select></td>'+
            			'<td class="fields-info"></td>'+
            		'</tr>'+
            		'<tr class="main-fields">'+
            			'<th><label for="people-count-'+id+'">Количество взрослых:</label></th>'+
            			'<td class="from-fields"><select name="PeopleCount'+id+'" id="people-count-'+id+'" class="type-big" onchange="formSetPeopleCount()"><option value="0">&nbsp;</option>'+peopleCountOpt+'</select></td>'+
            			'<td class="fields-info"></td>'+
            		'</tr>'+
            		'<tr class="main-fields">'+
            			'<th><label for="room-type-'+id+'">Категория номера:</label></th>'+
            			'<td class="from-fields">'+
            				'<div class="f-wrap">'+
            					'<select name="RoomType'+id+'" id="room-type-'+id+'" class="type-big" onchange="formSetRoomType();"><option value="0">&nbsp;</option>'+roomTypesOpt+'</select>'+
            				'</div>'+
            				'<div class="order-price" id="room-cost-'+id+'"></div>'+
            			'</td>'+
            			'<td class="fields-info" id="room-descr-'+id+'"></td>'+
            		'</tr>'+
            		'<tr class="child-fields" id="children-'+id+'">'+
            			'<td></td>'+
            			'<td class="from-fields">'+
                			'<div>'+
                				'<input name="Children'+id+'" type="checkbox" id="with-cildren-'+id+'" class="input-checkbox" onclick="formChildrenBlock(this.checked)" />'+
                				'<label for="with-cildren-'+id+'">Добавить приставные места </label>'+
            				'</div>'+
            			'</td>'+
            			'<td class="fields-info">Дети до 3-х лет — бесплатно,<br/>от 3-х до 12-ти лет - 65% стоимости,<br/>старше 12-ти лет, а также взрослые - 80% стоимости</td>'+
            		'</tr>'+
            		'<tr class="child-fields" id="child-hidden-'+id+'" style="display: none;">'+
            			'<th class="pt"><label for="children-count-'+id+'">Приставные места для:</label></th>'+
            			'<td class="from-fields">'+
            				'<div class="f-wrap pb">'+
            					'<select name="ChildrenCount'+id+'" id="children-count-'+id+'" class="sm" onchange="formSetChildrenCount(1)">'+
            						'<option value="0">&nbsp;</option>'+
            					'</select>детей от 3-х до 12-ти лет'+
            				'</div>'+
            				'<div class="order-price" id="children-cost-'+id+'"></div>'+
            				'<div class="f-wrap">'+
            					'<select name="Children2Count'+id+'" id="children2-count-'+id+'" class="sm" onchange="formSetChildrenCount(2)">'+
            						'<option value="0">&nbsp;</option>'+
            					'</select>детей старше 12-ти лет и взрослых'+
            				'</div>'+
            				'<div class="order-price" id="children2-cost-'+id+'"></div>'+
            			'</td>'+
            			'<td class="fields-info">Место + питание</td>'+
            		'</tr>'+
            		'<tr class="discounts-fields">'+
            			'<th><label for="bonus-card-'+id+'">Номер карты скидок:</label> </th>'+
            			'<td class="from-fields">'+
            				'<div class="f-wrap">'+
            					'<input name="BonusCard'+id+'" type="text" id="bonus-card-'+id+'" value="'+bonuseCC+'" onkeyup="formGetBonuse(event)" />'+
            				'</div>'+
            				'<div class="order-price" id="bonus-'+id+'">'+bonuseText+'</div>'+
            			'</td>'+
            			'<td class="fields-info">Если у Вас есть карта постоянного клиента, введите ее номер, чтобы получить скидку</td>'+
            		'</tr>'+
            		'<tr class="total-fields">'+
            			'<td></td>'+
            			'<td class="from-fields">'+
            				'<div class="order-price" id="total-cost-'+id+'"></div>'+
            				'<a href="" onclick="formDeleteOrder('+id+');return event.returnValue=false;">отказаться от номера</a>'+
            			'</td>'+
            			'<td class="fields-info"><span id="total-cost-txt-'+id+'" style="visibility: hidden;">Данная сумма является примерной. Точная сумма будет выставлена в счете, после уточнения заказа оператором.</span></td>'+
            		'</tr>'+
            		'<tr id="order-error-'+id+'" style="display: none;">'+
            		    '<td></td>'+
            		    '<td class="from-error" id="order-error-txt-'+id+'"></td>'+
            		    '<td></td>'+
            		'</tr>'+
        		 '</table>';
    $$('step-1').insertBefore(nd,$$('mark').nextSibling);
    $$('month-from-'+id).value=mS;
    $$('month-to-'+id).value=mF;
    
    var nl=document.createElement('li');
    nl.id='order-'+id;
    eval('nl.onclick=function(){ formSelectOrder('+id+',false) }');
    nl.innerHTML='текущий выбор';
    if ($$('orders-list').firstChild) {
        $$('orders-list').insertBefore(nl,$$('orders-list').firstChild);
    }
    else {
        $$('orders-list').appendChild(nl);
    }
    
    formSelectOrder(id,true);
    
}

/* проверяет правильность заполнения формы заказа номера */
function formCheckOrder(num) {
    if (num!=undefined) {
        // это проверка формы первого шага
        $$('order-error-'+num).style.display='none';
        // проверка периода
        var dS=Number($$('day-from-'+num).value);
        var dF=Number($$('day-to-'+num).value);
        var mS=Number($$('month-from-'+num).value);
        var mF=Number($$('month-to-'+num).value);
        var okPeriod=false;
        if (dS && dF && mS && mF) {
            var mSD=monthDays[mS];
            var mFD=monthDays[mF];
            if (dS>=1 && dS<=mSD && dF>=1 && dF<=mFD && (mS<=mF || (mS==mF && dS<=dF))) {
                okPeriod=true;
            }
        }
        
        // проверка кол-ва людей
        var okPeople=(Number($$('people-count-'+num).value)!=0);
        
        // проверка типа комнаты
        sRoomId=Number($$('room-type-'+num).value);
        sRoom=rooms.find(function(item){return item.key==sRoomId});
        var okRoom=(sRoom)?true:false;
        
        // проверка детей
        if ($$('with-cildren-'+num).checked) {
            if (Number($$('children-count-'+num).value)==0 && Number($$('children2-count-'+num).value)==0) {
                $$('with-cildren-'+num).checked=false;
                $$('child-hidden-'+formCurrentNum).style.display='none';
                formChildrenBlockShow=false;
            }
        }
        
        // выдача ошибок если есть
        if (!okPeriod || !okPeople || !okRoom) {
            var resHTML='';
            if (!okPeriod) { resHTML+='период поездки указан не корректно<br>'; }
            if (!okPeople) { resHTML+='не указано количество человек<br>'; }
            if (!okRoom) { resHTML+='не выбран номер<br>'; }
            $$('order-error-txt-'+num).innerHTML=resHTML;
            $$('order-error-'+num).style.display='';
            return false;
        }
    }
    else {
        // это проверка формы второго шага
        $$('order-error').style.display='none';
        var contactName=$$('contact-name').value;
        var contactEmail=$$('contact-email').value;
        var contactPhone=$$('contact-phone').value;
        var contactPay=$$('contact-pay').value;
        var filterEmail=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
        var resHTML='';
        if (contactName.length<3) { resHTML+='фамилия и имя не могут быть короче 3-х симфолов<br>'; }
        if (!filterEmail.test(contactEmail)) { resHTML+='адрес email введен некорректно<br>'; }
        if (contactPhone.replace(/\D+/g,'').length<11) { resHTML+='телефон введен некорректно<br>'; }
        if (contactPay=='') { resHTML+='способ оплаты не указан<br>'; }
        if (resHTML.length>0) {
            $$('order-error-txt').innerHTML=resHTML;
            $$('order-error').style.display='';
            return false;
        }
    }
    return true;
}


/* формирует текстовую информацию по заказам на втором шаге */
function formBuildOrdersInfo() {
    //'<p class="order-summary" id="order-info-1">2-х местный люкс, на 12 дней с 8 июля по 20 июля, с питанием на 2-х, со скидкой 3%, на сумму 8730 грн</p>';
    for (j=1;j<formParts.length;j++) {
        if ($$('order-info-'+j)) { $$('step-2').removeChild($$('order-info-'+j)); }
        if (formParts[j]) {
            var np=document.createElement('p');
            np.className='order-summary';
            np.id='order-info-'+j;
            var _days=$$('days-total-'+j).innerHTML.substr(7);
            var _t=_days.indexOf(' '); _t=_days.indexOf(' ',_t+1);
            if (_t!=-1) { _days=_days.substr(0,_t); }
            var dF=Number($$('day-from-'+j).value);
            var dT=Number($$('day-to-'+j).value);
            var mF=Number($$('month-from-'+j).value);
            var mT=Number($$('month-to-'+j).value);
            var resHTML=$$('room-type-'+j).options[$$('room-type-'+j).selectedIndex].text+', на '+_days+
                ((dF==dT && mF==mT)?(' '+dF+' '+$$('month-from-'+j).options[$$('month-from-'+j).selectedIndex].text):(' c '+dF+((mF!=mT)?(' '+$$('month-from-'+j).options[$$('month-from-'+j).selectedIndex].text):(''))+' по '+dT+' '+$$('month-to-'+j).options[$$('month-to-'+j).selectedIndex].text))+', ';
            var pC=Number($$('people-count-'+j).value);
            var cC=($$('with-cildren-'+j).checked)?Number($$('children-count-'+j).value):0;
            var c2C=($$('with-cildren-'+j).checked)?Number($$('children2-count-'+j).value):0;
            var c=pC+cC+c2C;
            resHTML+='на '+pC+((pC>1)?'-х взрослых':'-го взрослого')+ 
                ((cC>0)?(((c2C>0)?', ':' и ')+cC+((cC>1)?'-х детей от 3-х до 12-ти лет':'-го ребенка от 3-х до 12-ти лет')):'')+
                ((c2C>0)?(' и '+c2C+((c2C>1)?'-х детей старше 12-ти лет или взрослых':'-го ребенка старше 12-ти лет или взрослого')):'');
            if (bonuseP) {
                resHTML+=', со скидкой '+bonuseP+'%';
            }
            resHTML+=', на сумму&nbsp;<span class="" onclick="formSetStep(1,'+j+')">'+$$('total-cost-'+j).innerHTML+'</span>';
            np.innerHTML=resHTML;
            $$('step-2').insertBefore(np,$$('order-info-mark'));
        }
    }
}

/* переход между шагами заказа */
function formSetStep(step,order) {
    switch (step) {
        case 1: {
            // показать нужный раздел
            formSelectOrder(order,true);
            break;
        }
        case 2: {
            // проверяем текуую форму
            if (!formCheckOrder(formCurrentNum)) { return; }
            // формируем текст по заказам
            formBuildOrdersInfo();
            break;
        }
        case 3: {
            
            break;
        }
        case 4: {
            
            break;
        }
        
    }
    formOpen(step);
}

/* отправка данных заказа для обработки */
function formProcess() {
    if (!formCheckOrder()) { return; }
    var post='ajax=ajax';
    var fE=$$('order-form').elements;
    for (i=0;i<fE.length;i++) {
        if (fE[i].name!='') {
            if (fE[i].className!='input-checkbox' || (fE[i].className='input-checkbox' && fE[i].checked)) {
                post+='&'+fE[i].name+'='+myEncode(fE[i].value);
            }
        }
    }
    var orders='';
    for (i=1;i<formParts.length;i++) {
        if (formParts[i]) {
            orders+=((orders.length>0)?',':'')+i;
        }
    }
    post+='&orders='+orders;
    new Ajax.Request('/about/price/add/?'+_SN+'='+_SI,
        {
            method: 'post',
            postBody: post,
            onSuccess: formProcessAnswer
        }
    );
}

/* обработка ответа сервера */
function formProcessAnswer(answer) {
    res=answer.responseText;
    var _t=res.indexOf('|');
    if (res.substr(0,_t)=='ok') {
        //$$('order-id').innerHTML=res.substr(_t+1);
        formSetStep(3);
    }
    else {
        $$('order-error-txt').innerHTML='Произошла ошибка, проверьте данные и повторите попытку';
        $$('order-error').style.display='';
    }
    
}

/* нужна из-за тупости стандартного JS */
function myEncode(value) { return encodeURI(value).replace(/\+/g,'%2B'); }

/* блокирует недоступные поля формы */
function formFieldsLock(field) {
    switch (field) {
        case 'currency': $$('currency-'+formCurrentNum).disabled=true;
        case 'people-count': $$('people-count-'+formCurrentNum).disabled=true;
        case 'room-type': $$('room-type-'+formCurrentNum).disabled=true;
        case 'other': $$('with-cildren-'+formCurrentNum).disabled=true;
                      $$('children-count-'+formCurrentNum).disabled=true;
                      $$('children2-count-'+formCurrentNum).disabled=true;
                      $$('bonus-card-'+formCurrentNum).disabled=true;
                      $$('add-order').style.display='none';
    }
}

/* разблокирует доступные поля формы */
function formFieldsUnlock(field,flag) {
    switch (field) {
        case 'other': $$('with-cildren-'+formCurrentNum).disabled=false;
                      $$('children-count-'+formCurrentNum).disabled=false;
                      $$('children2-count-'+formCurrentNum).disabled=false;
                      $$('bonus-card-'+formCurrentNum).disabled=false;
                      $$('add-order').style.display=''; 
                      if (flag!=undefined) { break; }
        case 'room-type': $$('room-type-'+formCurrentNum).disabled=false; formSetRoomType(true); if (flag!=undefined) { break; }
        case 'people-count': $$('people-count-'+formCurrentNum).disabled=false; formSetPeopleCount(true); if (flag!=undefined) { break; }
        case 'currency': $$('currency-'+formCurrentNum).disabled=false;
    }
}


/* общее для всех */
function resizeFon() {
    var winWidth=page.offsetWidth;
	var winHeight=page.offsetHeight;
	var winTop=document.documentElement.scrollTop;
	viewFon.style.width=(winWidth)+"px";
	viewFon.style.height=(winHeight)+"px";
}

function onResize() {
    var flag=false;
    if (viewWindow) { if (viewOpened) { viewSetCenter(); flag=true; } }
    if (formWindow) { if (formOpened) { formSetCenter(); flag=true; } }
    if (flag) { resizeFon(); }
}
window.onresize=onResize;





/* проверяет наличие слова в строке */
function StringContainWord(str, wrd, sep){
    if (!str) { str=''; } 
    if (sep==undefined) { sep=' '; }
    if (wrd.length == 0) {
        return true;
    }
    var k = 0;
    var s = 0;
    var flag = false;
    while (!flag && (k = str.indexOf(wrd, s)) != -1) {
        flag = ((k == 0 && (str.length == wrd.length || str[wrd.length] == sep)) ||
        (k > 0 && str[k - 1] == sep && (str[k + wrd.length] == sep || str.length == k + wrd.length))) ? true : false;
        s = k + 1;
    }
    return flag;
};
/* добавляет слово в строку */
function StringAppendWord(str, wrd, sep){
    if (!str) { str=''; } 
    if (sep==undefined) { sep=' '; }
    if (!StringContainWord(str, wrd, sep)) {
        str += ((str.length > 0) ? sep : '') + wrd;
    }
    return str;
};
/* убирает слово из строки */
function StringRemoveWord(str, wrd, sep){
    if (!str) { str=''; } 
    if (sep==undefined) { sep=' '; }
    if (wrd.length == 0 || str.length == 0) {
        return str;
    }
    if (!StringContainWord(str, wrd, sep)) {
        return str;
    }
    var k = 0;
    var ks = 0
    var s = 0;
    var flag = false;
    while (!flag && (k = str.indexOf(wrd, s)) != -1) {
        flag = ((k == 0 && (str.length == wrd.length || str[wrd.length] == sep)) ||
        (k > 0 && str[k - 1] == sep && (str[k + wrd.length] == sep || str.length == k + wrd.length))) ? true : false;
        s = k + 1;
        ks = k;
    }
    var ke = ks + wrd.length;
    var res = '';
    if (ks === 0) {
        if (ke < str.length) {
            res = str.substring(ke + 1, str.length);
        }
        else {
            res = str.substring(ke, str.length);
        }
    }
    else {
        if (ke == str.length) {
            res = str.substring(0, ks - 1);
        }
        else {
            res = str.substring(0, ks - 1) + str.substring(ke, str.length);
        }
    }
    return res;
};



// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// для страницы карты базы
var mapSelectedItems=new Array();
var mapSelectedSection=false;

function mapSelectSection(key) {
    if (key==mapSelectedSection) { return; }
    window.location.hash='#'+key;
}

function mapLinkOver(obj) {
    obj.className='hover';
}
function mapLinkOut(obj) {
    obj.className='';
}


function mapBlockOver(section,key) {
    if (mapSelectedSection!=section) { return false; }
    var hoverObj=$$('map-hover');
    if (hoverObj) {
        hoverObj.className=StringAppendWord(hoverObj.className,key);
    }
}
function mapBlockOut(section,key) {
    if (mapSelectedSection!=section) { return false; }
    var hoverObj=$$('map-hover');
    if (hoverObj) {
        hoverObj.className=StringRemoveWord(hoverObj.className,key);
    }
}

function mapBlockClick(section,key) {
    if (mapSelectedSection!=section) { return false; }
    var hash=window.location.hash.replace(/#/,'');
    var ta=hash.split(':');
    if (StringContainWord(ta[1],key,'+')) {
        // убираем 
        ta[1]=StringRemoveWord(ta[1],key,'+');
    }
    else {
        //добавляем
        ta[1]=StringAppendWord(ta[1],key,'+');
    }
    window.location.hash='#'+ta[0]+((ta[1].length>0)?(':'+ta[1]):'');
}

function mapCheckHash() {
    // #places:parking+library+dinner-p
    // #cases:case-1+case-k
    if ($$('map-container')) {
        // разбираем текущий якорь
        var hash=window.location.hash.replace(/#/,'');
        var ta=hash.split(':');
        if (ta[0]=='') { ta[0]=mapSections[0]; }
        
        var newClassName=''
        // проверка раздела
        if (ta[0]!==mapSelectedSection) {
            // устанавливаем новый раздел
            mapSelectedSection=ta[0];
            // сбрасываем все остальные отметки
            //$$('map-container').className=mapSelectedSection;
            mapSelectedItems=new Array();
        }
        newClassName=mapSelectedSection;
        
        // проверка отметок
        if (ta[1]) {
             newClassName+=' '+ta[1].replace(/\+/g,' ');
        }
        $$('map-container').className=newClassName;
    }
    setTimeout('mapCheckHash()',300);
}
mapCheckHash();



// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
// для страницы цен
var priceOpenBlock='';
function priceBlockClick(key) {
    if (key!=priceOpenBlock) {
        window.location.hash='#'+key;
    }
    else {
        window.location.hash='#';
    }
}

function priceCheckHash() {
    // #places:parking+library+dinner-p
    // #cases:case-1+case-k
    if ($$('categories-container')) {
        // разбираем текущий якорь
        var hash=window.location.hash.replace(/#/,'');
        if ($$(priceOpenBlock)) {
            $$(priceOpenBlock).className='category-block';
        }
        if ($$(hash)) {
            $$(hash).className='category-block block-opened';
        }
        priceOpenBlock=hash;
    }
    setTimeout('priceCheckHash()',300);
}
priceCheckHash();
