function doRedir(loc)
{
    location.href=loc;
}

function doAsk(loc, question)
{
    var q;
    if(question) q = question;
    else q = 'Sunteti sigur?';
    if(!confirm(q)) return;
    doRedir(loc);
}

var ajax = null;
function ajaxCall(post_url, post_vars, funcOnResponse)
{
    try { ajax.cancel(); } catch(e) {}
    ajax=new Request({method:'post', url: post_url, link: 'cancel', onSuccess: function(responseText, responseXML) { funcOnResponse(responseText); }});
    ajax.send(post_vars);
}

function sendFormModule(obj)
{
    if(obj) {
        try {
            obj.value = 'Asteptati...';
            obj.set('disabled','disabled');
        } catch(e) {}
    }

    var post_url = $('sbm_action').value;
    var post_vars = '';
    $$('.send_sep').each(function(item) {
        if(!item.name) return;
        if(post_vars.length!=0) post_vars += '&';
        post_vars += item.name+'='+item.value;
    });

    ajaxCall(post_url, post_vars, onReceiveFormResponse);
}

(function(jQuery) {
    jQuery.fn.ajaxForm = function(options) {
        var defaults = { dataType: 'html', success: null, beforeSubmit: null };

        if (jQuery.isFunction(options)) {
            options = {success: options};
        } else {
            options = jQuery.extend(defaults, options);
        }

        jQuery(this).each(function() {
            var data = {};
            var self = jQuery(this);

            jQuery(this).submit(function() {
                jQuery(this).find('button[type=submit], input[type=submit]').click(function() {
                    if (!jQuery(this).attr('name')) {
                        return true;
                    }

                    data[jQuery(this).attr('name')] = jQuery(this).val();

                    return true;
                });

                var buttons = jQuery(this).find('button[type=button]');
                for(var i = 0; i < buttons.length; i++) {
                    var button = jQuery(buttons[i]);
                    if (button.attr('value')) {
                        data[button.attr('name')] = button.attr('value');
                    }
                }

                if (options.beforeSubmit) {
                    if (!options.beforeSubmit.call(self)) {
                        return false;
                    }
                }

                var url = jQuery(this).attr('action');
                var type = jQuery(this).attr('method');
                var formData = jQuery(this).serializeArray();

                for(i = 0; i < formData.length; i++) {
                    data[formData[i]['name']] = formData[i]['value'];
                }

                data = jQuery.param(data);

                jQuery.ajax({
                    url: url,
                    type: type,
                    data: data,
                    dataType: options.dataType,
                    success: function(response) {
                        if (options.success) {
                            options.success.call(self, response);
                        }
                    },

                    complete: function(jqXHR, textStatus) {
                        data = {};
                    }
                });

                return false;
            });
        });
    }
})(jQuery);

function validateForm(form) {
    if (!form) {
        form = jQuery(this);
    }

    var fields = jQuery('.required-field', form);
    for(var i = 0; i < fields.length; i++) {
        var field = jQuery(fields[i]);
        if (jQuery.trim(field.val()) == '') {
            var title = field.attr('title');

            if (title) {
                alert("Campul " + title.toLowerCase() + " este obligatoriu!");
            } else {
                alert("Campul este obligatoriu!");
            }

            field.focus();
            return false;
        }
    }

    return true;
}

function onReceiveFormResponse(txt)
{
    $('sbm_div').setStyle('display','none');
    $('sbm_result').set('html', txt);
    $('sbm_result').setStyle('display','block');
}

function showFormPriceStep1()
{
    $('modprice_step2').setStyle('display','none');
    $('btncalcprice').erase('disabled');
    $('btncalcprice').value = 'Rezerva';
    $('modprice_step1').setStyle('display','block');
}

function showFormPriceStep2(obj)
{
    if(obj) {
        try {
            obj.value = 'Asteptati...';
            obj.set('disabled','disabled');
        } catch(e) {}
    }

    $('modprice_step1').setStyle('display','none');

    var numa = $('js_numa').value;
    var numc = $('js_numc').value;

    var htm = '';
    for(var i=1;i<=numa;i++) {
        htm += '<div class="field"><input type="text" id="nameadult_'+i+'" value="Nume si prenume adult ' + i + '" /></div>';
        htm += '<div class="sep" style="height:8px;">&nbsp;</div>';
    }
    for(var i=1;i<=numc;i++) {
        htm += '<div class="field"><input type="text" id="namechild_'+i+'" value="Nume si prenume copil ' + i + '" /></div>';
        htm += '<div class="sep" style="height:8px;">&nbsp;</div>';
    }
    $('pers_names').set('html', htm);

    $('modprice_step2').setStyle('display','block');

}

function showFormPriceStep3(obj)
{
    if($('c_name').value.length=='') {
        alert('Va rugam completati numele dvs.');
        return false;
    }
    if($('c_email').value.length=='') {
        alert('Va rugam completati adresa email a dvs.');
        return false;
    }
    if($('c_email').value != $('c_email2').value) {
        alert('Va rugam completati corect adresa email');
        return false;
    }
    obj.set('disabled','disabled');
    obj.value = 'Asteptati...';
    try {
        obj.getPrevious('input').set('disabled','disabled');
    } catch(e) {}



    // collect the info
    var dstart = Date.parse($('sel_dstart').value);
    var nights = parseInt($('nights').value);
    var room = parseInt($('roomtype').value);

    var post_url = $('sbm_action').value;
    var post_vars = '';
    $$('.send_sep').each(function(item) {
        if(!item.name) return;
        if(post_vars != '') post_vars += '&';
        post_vars += item.name+'='+item.value;
    });
    post_vars += '&dstart='+dstart.format('%Y-%m-%d');
    post_vars += '&nights='+nights;
    post_vars += '&room='+room;
    post_vars += '&adults='+$('js_numa').value;
    post_vars += '&childs='+$('js_numc').value;
    for(var i=1;i<=$('js_numa').value;i++) {
        post_vars += '&nameadult'+i+'='+$('nameadult_'+i).value;
    }
    for(var i=1;i<=$('js_numc').value;i++)
    {
        post_vars += '&namechild'+i+'='+$('namechild_'+i).value;
        post_vars += '&child'+i+'='+$('y_child'+i).value+'-'+$('m_child'+i).value+'-'+$('d_child'+i).value;
    }

    for(var i=0;i<1000;i++) {
        var os = $('opt_'+i);
        if(!os) break;
        post_vars += '&opt_'+i+((os.checked)?'1':'0');
    }

    // post_vars += '&expl='+$('price_expl').get('html');
    post_vars += '&total='+$('price_total').get('html');

    ajaxCall(post_url, post_vars, onReceivePriceResponse);

}

function onReceivePriceResponse(txt)
{
    $('modprice_step2').setStyle('display','none');
    $('sbm_result').set('html', txt);
    $('sbm_result').setStyle('display','block');
}

function initWindow() {
    initHlocImages();
    initListItems();
    initCalendars();
}

function initListItems() {
    $$('.list_item').each(function(item) {
        item.setStyle('cursor', 'pointer');
        var img = item.getElements('.list_image img');
        img = img[0];
        var link = item.getElements('.item_link');
        link = link[0].value;
        item.addEvent('mouseover', function() { item.addClass('item_rm'); });
        item.addEvent('mouseout', function() { item.removeClass('item_rm'); });
        item.addEvent('click', function() { doRedir(link); });
    });
}

function initHlocImages()
{
    $$('a.hloc_images').each(function(item) {
        item.fade(1);
        item.addEvent('mouseover', function() { item.fade('in');});
        item.addEvent('mouseout', function() { item.fade(1); });
    });

    var num_images = $$('a.hloc_images').length;
    var dis_images = 4;

    if(num_images == 0) return;

    var hloc = $('hloc_scroll');
    var max_len = num_images * 195;
    hloc.setStyle('width', max_len);
    hloc.set('tween', {duration: 'long'});
    hloc.store('didx', 0);
    var imgleft = $('hloc_imgleft');
    var imgright = $('hloc_imgright');
    if(imgleft) {
        if(hloc.retrieve('didx')==0) imgleft.fade(0.3);
        imgleft.addEvent('click', function() {
            var didx = hloc.retrieve('didx');
            didx++;
            if(didx>=0) {
                didx=0;
                imgleft.fade(0.3);
            } else {
                imgleft.fade('in');
            }
            hloc.store('didx', didx);
            hloc.tween('left', didx * 195);
        });
    }
    if(imgright) {
        if(num_images <= dis_images) imgright.fade(0.3);
        imgright.addEvent('click', function() {
            var didx = hloc.retrieve('didx');
            didx--;
            if((didx + num_images) < dis_images) didx = 0;
            hloc.store('didx', didx);
            hloc.tween('left', didx * 195);

            if(didx<0 && imgleft) imgleft.fade('in');
            else if(imgleft && didx>=0) imgleft.fade(0.3);

        });
    }
}

function changeSearchLocation(lidx)
{
    var jsloc = JSON.decode($('js_locations').value);
    var z = $('zones');
    while(z.options.length>1) z.remove(1);
    var zones = jsloc[lidx].zones;
    for(var zz in zones) {
        var zz1 = new Element('option', {'value':zz,'html':zones[zz]['name']});
        z.add(zz1, null);
    }
}

function doFilter(loc, page)
{
    var filter = new Object();
    filter.page = page;
    $$('.srch').each(function(item) {
        eval('filter[\''+item.name+'\'] = \'' + item.value + '\'');
        // filter[''+item.name] = item.value;
    });
    $('formfilter_filter').value = JSON.encode(filter);
    $('formfilter').submit();
}

function createCalendar(name) {
    var c = new Calendar({sel_dstart: 'Y-m-d'}, {tweak: { x:-120, y:20}, onHideStart: function() {
        var d = Date.parse($('sel_dstart').value);
        if(!d) d = new Date();
        c.calendars[0].button.set('html', d.format('%d %m %Y'));
        c.calendars[0].button.set('value', d.format('%d %m %Y'));
    }});
    var btn = c.calendars[0].button;
    btn.addClass('bcal');
    btn.addClass('field');
    if (name) {
        btn.setProperty('name', name);
    }
    var dd  = Date.parse($('sel_dstart').value);
    if(!dd) dd = new Date();
    btn.set('html', dd.format('%d %m %Y'));
    btn.set('value', dd.format('%d %m %Y'));

    return c;
}

function initCalendars()
{
    $$('.cal').each(function(item)
    {
        createCalendar();
    });
}

function findPriceForDate(date, prices, room) {
    for (var i = 0; i < prices.pers.length; i++) {
        var startPeriod = Date.parse(prices.pers[i].dstart);
        startPeriod.setDate(startPeriod.getDate());

        var endPeriod = Date.parse(prices.pers[i].dend);

        if (date >= startPeriod && date <= endPeriod) {
            var periodPrice = prices.pers[i].rooms[room];
            var periodCcz1 = periodPrice.split(':').shift();
            var periodCcz2 = periodPrice.split(':').pop();
            return [parseFloat(periodCcz1), parseFloat(periodCcz2)];
        }
    }

    return [0, 0];
}

function calculatePricePerNight(start, nights, room, prices) {
    var ccz1 = 0;
    var ccz2 = 0;

    for(var i = 0; i < nights; i++) {
        var current = new Date(start.getTime());
        current.setDate(start.getDate() + i);

        var price = findPriceForDate(current, prices, room);

        if (price[0] == 0 && price[1] == 0) {
            return null;
        }

        ccz1 += price[0];
        ccz2 += price[1];
    }

    ccz1 = (ccz1 / nights).toFixed(1);
    ccz2 = (ccz2 / nights).toFixed(1);

    price = { 'rooms': {} };
    price['rooms'][room] = ccz1.toString() + ':' + ccz2.toString();

    return price;
}

function calculatePrice()
{
    // decode the js vars
    var price = JSON.decode($('jsprice').value);
    var hrooms = JSON.decode($('jsrooms').value);

    // explanations
    var explan = new Array();
    var explav = new Array();

    // collect the values
    var nights = parseInt($('nights').value);
    var dstart = Date.parse($('sel_dstart').value);
    var dend = Date.parse($('sel_dstart').value);
    dend.setDate(dstart.getDate() + nights);
    var room = parseInt($('roomtype').value);
    var price_per = null;

    price_per = calculatePricePerNight(dstart, nights, room, price);

    if(!price_per) {
        alert('no price for that date!');
        return;
    }

    // early bookings
    var tds = dstart.clone();
    var maxdate = null;
    var ebmax = null;
    for(var i=0;i<price.early.length;i++)
    {
        var eb = price.early[i];
        var mx = new Date();
        if(eb.p=='d') mx.increment('day',eb.v);
        if(eb.p=='m') mx.increment('month',eb.v);
        if(eb.p=='y') mx.increment('year',eb.v);

        if(mx.getTime() < tds.getTime()) {
            if(maxdate==null) {
                maxdate = mx;
                ebmax = eb;
            } else {
                if(maxdate < mx) {
                    maxdate = mx;
                    ebmax = eb;
                }
            }
        }
    }

    var eb_adult = 0;
    var eb_child = 0;
    var eb_servc = 0;
    if(ebmax != null) {
        eb_adult = parseFloat(ebmax.a);
        eb_child = parseFloat(ebmax.c);
        eb_servc = parseFloat(ebmax.s);
        // $('cheb').addClass('earlyb');
    } else {
        // $('cheb').removeClass('earlyb');
    }

    // validate the childs
    var num_adults = 0;
    var num_childs = 0;
    for(var i = 0; i<hrooms.length;i++) {
        if(room == hrooms[i].id) {
            num_adults = hrooms[i].adults;
            num_childs = hrooms[i].childs;
            break;
        }
    }

    $('js_numa').value = num_adults;
    $('js_numc').value = num_childs;

    $('div_child0').setStyle('display','block');
    $('div_child1').setStyle('display','none');
    $('div_child2').setStyle('display','none');

    if(num_childs == 1) {
        $('div_child0').setStyle('display','none');
        $('div_child1').setStyle('display','block');
    } else if(num_childs == 2) {
        $('div_child0').setStyle('display','none');
        $('div_child1').setStyle('display','block');
        $('div_child2').setStyle('display','block');
    }

    var cc = 0;

    var ccz = 0;

    ccz = price_per.rooms[room];
    var dum1 = ccz.split(':');
    var ccz1 = parseFloat(dum1[0]);
    var ccz2 = parseFloat(dum1[1]);

    // cc += Math.round(((100 - eb_adult) * num_adults / 100) * price_per.rooms[room]);
    if(!price.stay) {
        if(eb_adult) {
            explan.push('Tarif/adult/noapte ' + ccz1 + price.curr + ' <b>(-'+eb_adult+'% early booking)</b>'  + ((ccz2>0)?' +' + ccz2 + price.curr:'') + ' x ' + num_adults + ' adulti  x ' + nights + ' nopti');
            ccz = (100-eb_adult)*ccz1/100 + ccz2;
            ccz *= nights;
            ccz *= num_adults;
            ccz = Math.round(ccz);
        } else {
            explan.push('Tarif/adult/noapte ' + (ccz1+ccz2) + price.curr + ' x ' + num_adults + ' adulti x ' + nights+ ' nopti');
            ccz = ccz1+ccz2;
            ccz *= nights;
            ccz *= num_adults;
            ccz = Math.round(ccz);
        }
    } else {
        if(eb_adult) {
            explan.push('Tarif/adult/sejur ' + ccz1 + price.curr + ' <b>(-'+eb_adult+'% early booking)</b>' + ((ccz2>0)?' +' + ccz2 + price.curr:'') + ' x ' + num_adults + ' adulti ');
            ccz = (100-eb_adult)*ccz1/100 + ccz2;
            ccz *= num_adults;
            ccz = Math.round(ccz);
        } else {
            explan.push('Tarif/adult/sejur ' + (ccz1 + ccz2) + price.curr + ' x ' + num_adults + ' adulti');
            ccz = ccz1+ccz2;
            ccz *= num_adults;
        }
    }

    explav.push('' + ccz);
    cc += ccz;

    // adult options
    for(var i=0;i<price.optserv.length;i++) {
        var os = price.optserv[i];
        if(!$('opt_'+i).checked) continue;
        var xx = os.s + ' ' + ((os.v != 0)?os.v + price.curr:"");
        var xv = parseInt(os.v);
        if(os.p) {
            xx += ' x ' + num_adults + ' adulti';
            xv *= num_adults;
        }
        if(os.n) {
            xx += ' x ' + nights + ' nopti';
            xv *= nights;
        }

        if(os.e && eb_servc) {
            // earlybookings
            xx += ' <b>-'+eb_servc+'% early bookings'+'</b>';
            xv = (100 - eb_servc) * xv / 100;
            xv = Math.round(xv);
        }
        explan.push(xx);
        explav.push((xv!=0)?xv:'inc');
        cc += xv;
    }

    err = false;

    // childs
    for(var nchild=1;nchild<=num_childs;nchild++)
    {
        var age1 = 0;
        // calculate the age of the child
        var db = new Date($('y_child'+nchild).value, $('m_child'+nchild).value, $('d_child'+nchild).value);
        age1 = db.diff(dstart,'month')+1;
        if(dstart.getDate() < (db.getDate()+1)) age1 -= 1;
        age1 = age1 / 12;
        if(age1 < 0) {
            explan.empty();
            explav.empty();
            explan.push('<b>Varsta copil ' + nchild + ' nu este valida</b>');
            explav.push('-');
            err = true;
        }

        perc_child1 = -1;
        flat_child1 = -1;
        amount_child1 = -1;

        catg_child1 = -1;
        if(nchild>1 && price.childs2 && price.childs2.length > 0) {
            for(var i=0;i<price.childs2.length;i++) {
                var v = price.childs2[i];
                if(v.ys <= age1 && v.ye > age1) {
                    perc_child1 = v.v;
                    flat_child1 = v.vf;
                    amount_child1 = v.va;
                    catg_child1 = i;
                    break;
                }
            }
        } else {
            for(var i=0;i<price.childs.length;i++) {
                var v = price.childs[i];
                if(v.ys <= age1 && v.ye > age1) {
                    perc_child1 = v.v;
                    flat_child1 = v.vf;
                    amount_child1 = v.va;
                    catg_child1 = i;
                    break;
                }
            }
        }

        if(catg_child1 < 0) {
            explan.empty();
            explav.empty();
            explan.push('<b>Copilul ' + nchild + ' nu are varsta necesara! Va rugam selectati alt tip de camera sau selectati data nasterii copilului.</b>');
            explav.push('-');
            err = true;
        }

        if(!err)
        {
            xx = 'Tarif copil ' + nchild + ' ';
            xv = (100 - perc_child1) * (ccz1 + ccz2) / 100

            if (flat_child1 > 0) {
                xv = (ccz1 + ccz2) - flat_child1;
            }

            if (amount_child1 > 0) {
                xv = amount_child1;
            }

            xx += Math.round(xv) + price.curr;
            if(price.stay) {
                xx += ' / sejur';
            } else {
                xx += ' / noapte x ' + nights + ' nopti';
                xv *= nights;
            }
            if(eb_child) {
                xx += ' <b>(-'+eb_child+'% early booking)</b>';
                xv = (100 - eb_child) * xv / 100;
            }
            xv = Math.round(xv);
            cc += xv;

            explan.push(xx);
            explav.push(xv);

            for(var i = 0;i < price.optserv.length; i++) {
                if(!$('opt_'+i).checked) continue;
                os = price.optserv[i];
                var ovp = os.c;
                if(catg_child1==1) ovp = os.c2;
                else if(catg_child1>1) ovp = os.c3;
                xx = os.s + ' copil ' + nchild + ' ' + ((ovp!=0)?ovp + price.curr:'');
                xv=ovp;
                if(os.n) {
                    xx += ' / noapte x ' + nights + ' nopti';
                    xv *= nights;
                }
                if(os.p) {
                    // aici trebuie luat in considerare numarul de copii
                }
                if(os.e && eb_servc) {
                    xx += ' <b>(-'+eb_servc+'% early booking)</b>';
                    xv = (100 - eb_servc) * xv / 100;
                }
                xv = Math.round(xv);
                cc += xv;
                explan.push(xx);
                explav.push((xv!=0)?xv:'inc');
            }
            $('btncalcprice').erase('disabled');
        } else {
            $('btncalcprice').set('disabled','disabled');
        }
    }

    var htm = '<table border="0" cellspacing="0" cellpadding="1" width="100%">';
    for(var i=0;i<explan.length;i++) {
        htm += '<tr><td>'+explan[i]+'</td><td align="right">'+explav[i]+'</td></tr>';
    }
    htm += '</table>';
    $('price_expl').set('html', htm);
    if(!err) {
        $('price_total').set('html', cc + ' ' + price.curr);
    } else {
        $('price_total').set('html', 'eroare');
    }

    $('expn_arr').value = JSON.encode(explan);
    $('expv_arr').value = JSON.encode(explav);
}

function ujsafe(text)
{
    s = text.replace(/(\s|\/|'|"|;|&)/gi,'-');
    while(s.indexOf('--') != -1) {
        s = s.replace('--','-');
    }
    return s;
}
