var imgDir = "/bitrix/templates/dom/i/controls/";                                                 //folder with controls' images

$(document).ready(function(){
    $("div.tabs").maxTabs();
    $("input.fileinp").each(function(){$(this).fileStyle()});
    $("#login_popup input.login_textbox").controls('login_inp_l.png', 'login_inp_r.png');
    $("#header .r form .search_textbox").controls('search_inp_l.png', 'search_inp_r.png');
    $("form input.button_small").controls('button_small_l.png', 'button_small_r.png');
    $("form input.button_large").controls('button_large_l.png', 'button_large_r.png');
    $("form input.button_dark").controls('button_dark_l.png', 'button_dark_r.png');
    $("input.textbox").controls('textbox_l.png', 'textbox_r.png');

    $("#login_popup input.login_textbox[type='text']").input_value("Логин");
    $("#login_popup input.login_textbox[type='password']").input_value("Пароль");
    $("#header .search_textbox").input_value("поиск по сайту");
    $("input.textbox").each(function(){$(this).input_value()});
    $("textarea").input_value();

	$(".menu_left > ul").treeview({
	    collapsed: true,
		animated: "medium",
		persist: "location",
        unique: true
	});
    $("select.select").each(function(){$(this).selectStyle()});
    $("div.row").blocksHeight();
    $("#content .content_block").contentHeight();

    $("#main_menu ul li.selected").prepend("<i><b></b></i><p></p>").find("a").css({paddingTop:"1px"});
    $("#main_menu > table td:last").css("padding-right", 0);
    $("div.content-list div.content-item:last").css("border", "none");
    $("#footer_menu > table td:first").css("border", "none").find("a").css("border-left", "none").parent().parent().find("td:last a").css("border-right", "none");
    $(".news-calendar-compact td:first").css("border-right", "1px solid #d7d9db");

    $("#partners").rotator(500, 5000);                                          //rotate partners' logos
    loginform(500);                                                             // popup login (speed)
    calendarPopups(200);
});

$(window).load(function(){
    $("div.gallery").find("div.rotator").gallery(15, 2, 6);                                         //portfolio gallery script (timeout, step, margin)
});


//----------------------------------------  input file style script
$.fn.fileStyle = function() {
    var inp = $(this).css({"position":"relative", "z-index": "10"}),
        id = $(inp).attr("name") + "_mask",
        div = $("<div />").css( {"position":"relative", "z-index":"0", "margin-top":-29} ).insertAfter(inp),
        button = $("<input />")
                    .attr("type", "button").attr("value", "Обзор")
                    .addClass("button_small")
                    .appendTo(div),
        text = $("<input />")
                    .attr("type", "text").attr("id", id)
                    .addClass("textbox")
                    .css("width", ( $(inp).width() - $(button).width() - 40) )
                    .prependTo(div);
    $(inp).css("opacity", 0).change(function(){document.getElementById(id).value = this.value});
}

//----------------------------------------  add pre and post images to textboxes and buttons
$.fn.controls = function (left_img_path, right_img_path) {
    $(this).before('<img alt="" src="'+imgDir+left_img_path+'"/>');
    $(this).after('<img alt="" src="'+imgDir+right_img_path+'"/>');
}

// ----------------------------------------  hide/show text of textboxes
$.fn.input_value = function(val) {
    if (!val) {
        $(this).attr("value") ? val = $(this).attr("title") : val = "";
    };
    $(this)
        .focus(function(){
            if (this.value == val) {
                this.value = "";
            }
        })
        .blur(function(){
            if (this.value == "") {
                this.value = val;
            }
        });
}

//----------------------------------------  selects style script
$.fn.selectStyle = function() {
  if ($(this).hasClass("select")){
    var id = $(this).attr("id");
    var select = document.getElementById(id);
    var images = [];
    if ($(select).height() > 20) {
        images = ["sel_large_l.png", "sel_large_r.png"];
    } else {
        images = ["sel_l.png", "sel_r.png"];
    };
    $("<div />", {
                id: id+"_span", "class":"select_span",
                css: {
                    top: select.offsetTop+"px",
                    left: select.offsetLeft+"px",
                    width: $(select).width()+2+"px"
                }
        })
        .html("<img class='r' src='"+imgDir+images[1]+"' /><img class='l' src='"+imgDir+images[0]+"' /><span><span></span></span>")
        .insertAfter(this);
    var span = $("div#"+id+"_span span span")
    $(this).css("opacity", 0);
    $(span).text(select.options[select.selectedIndex].text);
    select.onchange = function(){
        $(span).text(select.options[select.selectedIndex].text);
    };
  };
}

//----------------------------------------  login form
function loginform(speed) {
    var popup = document.getElementById("login_popup");
    // show login form
    $("#enter").click(function(){
        if (popup.style.display != "block") {
            $(popup).fadeIn(speed);
        };
    });
    // hide login form
    $("#close").click(function(){
        $(popup).fadeOut(speed);
    });
    $("body").live("mousedown", function(ev){
        var el = $(ev.target).parents("#login_popup");
        if (!$(el).is("#login_popup")) {
            $(popup).fadeOut(speed);
        };
    });
}

//----------------------------------------  tabs
jQuery.fn.extend({
maxTabs: function(){
 // this.each(function(){console.log(this);});
  this.each(function(){ createOneTab(this); });
  return;

  function createOneTab(container){
    var obj = container.jQuery?container:$(container);
    var elements = $('>.tab-body > .tab-body-element ',container);
        maxh = $(elements[0]).height();
    for (var i=1, cnt=elements.length; i<cnt; i++) {
        if ($(elements[i]).height() > maxh) maxh=$(elements[i]).height();
    };
    //console.log(elements[0]);
    //console.log(elements);
    elements.css({display:'none', minHeight:maxh});
    //$(elements[0]).css({display:'block'});

    var handles = $('>.tab-header > .tab-handle',container);
    handles.each(function(index,handle){
        var bodies = elements;
        var me = handle;
        me.idx = index;
        var siblings = handles;
        $(me).click(
          function(){
            bodies.css({display: 'none'});
            $(bodies[this.idx]).css({display:'block'});
            handles.removeClass('active-tab-handle');
            $(this).addClass('active-tab-handle');
          }
        );
    });
    $(handles[0]).click();
  }
 // this.each(createOneTab);
}
});

//----------------------------------------  Checking form
function checkForm (formName, fields) {
    var form = document.forms[formName],
        id = form.id,
        correct = true,
        error = "";
    for (var i=0, length=fields.length; i<length; i++) {
        var val = form.elements[fields[i]].value;
        var title = form.elements[fields[i]].title;
        if (!val || val==" " || val==title) {
            error += "Пожалуйста, заполните поле '<b>"+title+"</b>'<br />";
            correct = false;
        } else {
            if (fields[i] == "email") {
                if (!checkmail(val)) {
                    error += "Пожалуйста, введите правильный адрес E-mail<br />";
                    correct = false;
                };
            };
        };
    };
    if (!correct) {
        $(window).scrollTop( $(form).offset().top );
        $(".error", form).html(error);
    } else {
        form.submit();
    };
};

//----------------------------------------  email check
function checkmail(email, strict) {
   if ( !strict ) email = email.replace(/^\s+|\s+$/g, '');
   return (/^([a-z0-9_\-]+\.)*[a-z0-9_\-]+@([a-z0-9][a-z0-9\-]*[a-z0-9]\.)+[a-z]{2,3}$/i).test(email);
};

//----------------------------------------  restrict textarea's length
   var ns6=document.getElementById &&!document.all

   function restrictinput(maxlength, e, placeholder)
      {
      if (window.event && event.srcElement.value.length >= maxlength)
         return false;
      else if (e.target && e.target == eval(placeholder) && e.target.value.length >= maxlength)
         {
         var pressedkey = /[a-zA-Z0-9\.\,\/]/;
         if (pressedkey.test(String.fromCharCode(e.which)))
            e.stopPropagation();
         }
      }

   function countlimit(maxlength, e, placeholder)
      {
      var theform = eval(placeholder);
      var lengthleft = maxlength-theform.value.length;
      var placeholderobj = document.all ? document.all[placeholder] : document.getElementById(placeholder);
      if (window.event || e.target&&e.target == eval(placeholder))
         {
         if (lengthleft < 0)
             theform.value = theform.value.substring(0, maxlength);
         $("p.symbols_left").text('Осталось ' + lengthleft + ' символов');
         }
      }

   function displaylimit(thename, theid, thelimit)
      {
      var theform = theid != "" ? document.getElementById(theid) : thename;
      var limit_text = 'Осталось ' + thelimit + ' символов';
      if (document.all || ns6)
         $("p.symbols_left").text(limit_text);
      if (document.all)
         {
         eval(theform).onkeypress = function(){ return restrictinput(thelimit, event, theform)}
         eval(theform).onkeyup = function(){ countlimit(thelimit, event, theform)}
         }
      else if (ns6)
         {
         document.body.addEventListener('keypress', function(event) { restrictinput(thelimit, event, theform) }, true);
         document.body.addEventListener('keyup', function(event) { countlimit(thelimit, event, theform) }, true);
         }
      }

//----------------------------------------  calendar popup events
function calendarPopups (speed) {
    var container = $("#calendar");

    //show popup
    $(".fc-events-count span", container).live("mouseenter", function(){
        $(this).parent()
            .css({"border-color": "#057edb", "z-index": 10})
            .find("div.fc-event-description").each(function(){
                //count position if not counted
                if (parseInt($(this).css("left")) == 0) {
                    var popup = $(this),
                        containerOffset = $(container).offset(),
                        holderOffset = $(popup).parent().offset(),
                        popupOffset = {
                            width: $(popup).width(),
                            height: $(popup).height(),
                            top: 0,
                            left: $(popup).parent().width()-5
                        };
                    if ($(container).width() < (holderOffset.left-containerOffset.left)+popupOffset.left+popupOffset.width) {
                        popupOffset.left = -popupOffset.width+5;
                    };
                    var rezerv = $(container).height()-(holderOffset.top-containerOffset.top+popupOffset.height);
                    if (rezerv<-30) { popupOffset.top += rezerv+30 };
                    $(this).css({
                            left: popupOffset.left,
                            top: popupOffset.top
                        });
                };
                $(this).fadeIn(speed);
            });
    });

    //hide popup
    $(".fc-events-count", container).live("mouseleave", function(){
        $(this).find("div.fc-event-description").fadeOut(speed, function(){
                $(this).parent().css({"border-color": "#ffffff", "z-index": 7})
            });
    });
}

//----------------------------------------  content block height change
$.fn.contentHeight = function() {
    var height = $(this).height(),
        hh = $(this).parent().height(),
        max = hh,
        h, els = $("#content > div");
    for (var i=0, length=els.length; i<length; i++) {
        h = $(els[i]).height();
        h>max ? max=h : max;
    }
    if (hh != max) {
        $("> div.content", this).css("min-height", height+(max-hh)-2);
    }
}

//----------------------------------------  blocks height on promo pages
$.fn.blocksHeight = function() {
    var blocks = $("div", this).filter(".block, .banner"),
        max = 0,
        hh, i, length;
    for(i=0, length=blocks.length; i<length; i++) {
        hh = $(blocks[i]).height();
        if (hh > max) { max = hh };
    };
    for(i=0, length=blocks.length; i<length; i++) {
        hh = $(blocks[i]).height();
        var fix = $("> div.content", blocks[i]).height() + (max-hh);
        if ($("#partners", blocks[i]).length > 0) {
            $("> div.content", blocks[i]).css("height", fix);
        } else {
            $("> div.content", blocks[i]).css("min-height", fix);
        };
    };
}

//----------------------------------------  partners rotator
$.fn.rotator = function(speed, timeout) {
    var container = $("div.content", this),
        imgs = $("> a", container),
        length = imgs.length,
        i = 1;
    setInterval ( function(){
            next(i++);
            i<length ? i : i=0;
        }, timeout );

    function next(item) {
        $(container).fadeOut(speed, function() {
            $("a.shown", this).removeClass("shown");
            $(imgs[item]).addClass("shown");
            $(container).fadeIn(speed);
        });
    }
}

//----------------------------------------  calc create
$.fn.calc = function() {
    var params = calcParameters(),
        form = $(this),
        room = $("#room", form),
        equipment = $("#equipment", form),
        admin = $("#admin", form),
        coffee = $("#coffee", form),
        dinner = $("#dinner", form),
        supper = $("#supper", form);

    //room options create
    for (var i=0, cnt=params.room.length; i<cnt; i++) {
        $("<option />").attr("value", params.room[i].price).text(params.room[i].name).appendTo(room);
    };

    //equipment items create
    for (var i=0, cnt=params.equipment.length; i<cnt; i++) {
        var container;
        if (i%2 == 0) {
            container = $("<tr><td><p></p></td></tr>").appendTo(equipment);
        } else {
            container = $("<td><p></p></td>").appendTo("#equipment tr:last");
        };
        container = $("p", container);
        $("<input />")
            .attr({
                "type": "checkbox",
                "name": "eq_"+i,
                "id": "eq_"+i,
                "value": params.equipment[i].price
            })
            .appendTo(container)
            .after("<label for='eq_"+i+"'>"+params.equipment[i].name+"</label>");
    };

    //admin option create
    for (var i=0, cnt=params.admin.length; i<cnt; i++) {
        var container = $("<p />").appendTo(admin);
        $("<input />")
            .attr({
                "type": "checkbox",
                "name": "adm_"+i,
                "id": "adm_"+i,
                "value": params.admin[i].price
            })
            .appendTo(container)
            .after("<label for='adm_"+i+"'>"+params.admin[i].name+"</label>");
    };

    //coffee options create
    for (var i=0, cnt=params.food.coffee.length; i<cnt; i++) {
        $("<option />").attr("value", params.food.coffee[i].price).text(params.food.coffee[i].name).appendTo(coffee);
    };

    //dinner options create
    for (var i=0, cnt=params.food.dinner.length; i<cnt; i++) {
        $("<option />").attr("value", params.food.dinner[i].price).text(params.food.dinner[i].name).appendTo(dinner);
    };

    //supper options create
    for (var i=0, cnt=params.food.supper.length; i<cnt; i++) {
        $("<option />").attr("value", params.food.supper[i].price).text(params.food.supper[i].name).appendTo(supper);
    };

}

//----------------------------------------  calc reset
function sbros() {
    var form = document.calc,
        speed = 200;

    if (!form) {form = document.subscribe};

    $("#results", form).animate({height: "hide"});
    form.reset();
    $(".error", form).html("")
    $("select", form).each(function(){
        var text = $("option[value='"+this.value+"']", this).text();
        $("#"+this.id+"_span span span").text(text);
    });
    $("input[type='checkbox']").each(function(){
        if (this.checked) {
            $(this).prev(".NFCheck").addClass("NFh_check");
        } else {
            $(this).prev(".NFCheck").removeClass("NFh_check");
        }
    });
    $("input[type='radio']").each(function(){
        if (this.checked) {
            $(this).prev(".NFRadio").addClass("NFh");
        } else {
            $(this).prev(".NFRadio").removeClass("NFh");
        }
    });
}

//----------------------------------------  calculating
function calculate() {
    var form = document.calc,
        error = "",
        correct = true,
        speed = 200;

    //checking required fields
    if (form.room.value < 0) {
        error += "Выберите, пожалуйста, помещение<br />";
        correct = false;
    };
    if (!(parseInt(form.persons.value) > 0) && form.persons.value!=="0") {
        error += "Пожалуйста, введите количество персон<br />";
        correct = false;
    };
    if (!(parseInt(form.hours.value) > 0)) {
        error += "Пожалуйста, введите количество часов<br />";
        correct = false;
    };

    $(".error", form).html(error);
    if (!correct) {
        $(document).scrollTop(0);
    } else {
        var hours = parseInt(form.hours.value),
            persons = parseInt(form.persons.value),
            res_arenda = parseInt(form.room.value) * hours,
          //  res_arenda_eq = hours * sum_eq(),
            res_arenda_eq = sum_eq(),
            res_food = persons * sum_food(),
            res_admin = hours * (form.adm_0.checked ? parseInt(form.adm_0.value) : 0),
            res_common = res_arenda + res_arenda_eq + res_food,
            res_person = res_common / persons,
            res_main = res_common + res_admin;

        $("#results", form).animate({height: "show"}, speed);

        form.res_arenda.value = round(res_arenda)+" грн.";
        form.res_arenda_eq.value = round(res_arenda_eq)+" грн.";
        form.res_food.value = round(res_food)+" грн.";
        form.res_admin.value = round(res_admin)+" грн.";
        form.res_common.value = round(res_common)+" грн.";
        form.res_person.value = round(res_person)+" грн.";
        form.res_main.value = round(res_main)+" грн.";
    }

    function sum_eq(){
        var sum = 0;
        $("#equipment input", form).each(function(){
            if (this.checked) {sum += parseInt(this.value)};
        });
        return sum;
    }

    function sum_food(){
        var sum = 0;
        $("#food select", form).each(function(){
            sum += parseInt(this.value);
        });
        return sum;
    }

    function round(num) {
        return Math.round ((num*100)/100);
    }
}

//gallery script
$.fn.gallery = function(speed, step, margin){
    var rotator = $(this),
        contentdiv = $('.r_content', this)[0],
        carrierdiv = $('.r_carrier', this)[0],
        picture = $(rotator).parent().find('.picture'),
        toleft = false,
        toright = false,
        left = -margin,
        minleft = -$(contentdiv).width() + margin + $(carrierdiv).width(),
        imgs = $("img", contentdiv);
    $(contentdiv).css("left", left);

if (imgs.length > 0 && $(this).parent().hasClass("gallery")) {
//add images zoom links
    for (var i=0, cnt=imgs.length; i<cnt; i++) {
        $("<a />").attr("href", imgs[i].alt).css("opacity", 0.5).appendTo(".picture span");
    };
    $('img', picture).attr('src', imgs[0].alt);
    $("a:first", picture).addClass("zoom");
    $("a", picture)
                .mouseover( function(){ $(this).animate({opacity: 1}, 150) } )
                .mouseout( function(){ $(this).css({opacity: 0.5}, 150) } )
                .lightBox({
                	overlayBgColor: '#000',
            	    overlayOpacity: 0.8,
                	imageLoading: '/bitrix/templates/dom/i/loading.gif',
            	    imageBtnClose: '/bitrix/templates/dom/i/lightbox-btn-close.gif',
			        imageBtnPrev: '/bitrix/templates/dom/i/lightbox-btn-prev.gif',
        			imageBtnNext: '/bitrix/templates/dom/i/lightbox-btn-next.gif',
                	containerResizeSpeed: 300
                });

//hide controls if width is enough
    if ($(contentdiv).width() <= $(carrierdiv).width()) {
      $('div.r_left', rotator).css('display', 'none');
      $('div.r_right', rotator).css('display', 'none');
    };

//button left
    $('div.r_left', this)
      .css("opacity", 0.5)
      .mouseover(function(){$(this).animate({opacity: 1}, 100)})
      .mouseout( function() {$(this).css({opacity: 0.5}, 100)} )
      .mousedown(function(){
        toright = true;
        left = parseInt(contentdiv.style.left);
        slideright(left);
      })
      .mouseup(function(){
        toright = false;
      });

//button right
    $('div.r_right', this)
      .css("opacity", 0.5)
      .mouseover(function(){$(this).animate({opacity: 1}, 100)})
      .mouseout( function() {$(this).css({opacity: 0.5}, 100)} )
      .mousedown(function(){
        toleft = true;
        left = parseInt(contentdiv.style.left);
        slideleft(left);
      })
      .mouseup(function(){
        toleft = false;
      });

//moove right
    function slideright(left){
      if (toright && left<-margin) {
          left += step;
          contentdiv.style.left = left + "px";
          setTimeout(function() {slideright(left)}, speed);
      }
    };

//moove left
    function slideleft(left){
      if (toleft && left > minleft) {
          left -= step;
          contentdiv.style.left = left + "px";
          setTimeout(function() {slideleft(left)}, speed);
      };
    };

//click on thumbnail
    $('img', contentdiv).click(function(){
        var link = $(this).attr('alt');
        $(".zoom", picture).removeClass("zoom");
        $('img', picture).attr('src', link);
        $("a[href='"+link+"']:first", picture).addClass("zoom");
    });

};
};
