/**
 * aka void main()
 */
$(function() {

  Shop22.Search.init();
  Shop22.MainMenu.init();

});

(function() {

    /**
     * Merge the contents of two or more objects together into the first object
     * (based on jQuery extend function)
     * @param {Boolean} [recursive] - recursive flag
     * @param {Object} target - target object
     * @param {Object*} [objectN] - object to merge in
     * @return {Object} target object
     */
    Object.extend = function() {
        var n = 1,
            recursive = false,
            target = arguments[0],
            obj,
            name, src, val;

        // check for recursive flag in first argument
        if (typeof target === 'boolean') {
            recursive = target;
            target = arguments[1];
            n = 2;
        }

        if ((typeof target !== 'object') && (typeof target !== 'function')) {
            target = {};
        }

        for ( ; n < arguments.length; n++) {
            if ((obj = arguments[n]) != null) {
                for (name in obj) {
                    src = target[name];
                    val = obj[name];
                    // convert Number and String object to primitives
                    if (typeof val === 'object') {
                        if (val instanceof Number) {
                            val = Number(val);
                        } else if (val instanceof String) {
                            val = String(val);
                        }
                    }
                    // Try to recursive merge if copy is object and nor array or function
                    if ((recursive) && (typeof val === 'object') && (val) && (!(val instanceof Function)) && (!(val instanceof Array))) {
                        target[name] = Object.extend(recursive, src, val);
                    } else if (val !== undefined) {
                        target[name] = val;
                    }
                }
            }
        }
        return target;
    };
    /**
     * Merging content two or more objects non-recursive to new object
     * @param {Object*} two or more objects
     * @return {Object} the result
     */
    Object.merge = function() {
        var args = [{}];
        for (var i = 0; i < arguments.length; i++) {
            args.push(arguments[i]);
        }
        return Object.extend.apply(this, args);
    };


    function __p() {}
    /**
     * Create prototype chain for object
     * @param {Object} child - child object
     * @param {Object} parent - parent object
     * @return {Object} child object
     */
    Object.inherit = function(child, parent) {
        __p.prototype = parent.prototype || {};
        child.prototype = new __p();
        child.prototype.constructor = child;
        child.SUPER = parent.prototype;
        return child;
    };

    // Aliases to Function() object

    /**
     * Add prototype chain to object
     * @param {Object} parent - parent object
     * @return {Object}
     */
    Function.prototype.inherit = function(parent) {
        return Object.inherit(this, parent);
    };

    /**
     * Extend object prototype
     * @param {object} proto
     * @return {Function}
     */
    Function.prototype.proto = function(proto) {
        Object.extend(this.prototype, proto);
        return this;
    };
})();


/**
 * Добавим в массив метод indexOf
 */
if (!Array.indexOf) {
    Array.prototype.indexOf = function(searchElement, fromIndex) {
        if (!fromIndex)
            fromIndex = 0;
        for(var i = fromIndex; i < this.length; i ++)
            if (this[i] == searchElement)
                return i;
        return -1;
    }
}

var __trimRegExp = /^(\s|\u00A0)+|(\s|\u00A0)+$/g;
String.prototype.trim = function() {
    return this.replace(__trimRegExp, '');
}


/**
 * Класс для обработки специфических функций браузера
 */
Browser = function() {
    var userAgent = navigator.userAgent.toLowerCase();
    var _ie = /msie/.test(userAgent) && !/opera/.test(userAgent);
    var _opera = /opera/.test(userAgent);
    var _old_ie = /MSIE (5\.5|6|7).+Win/.test(navigator.userAgent);
    var _webkit = /webkit/.test(userAgent);
    return {
        isOpera: _opera,
        isMSIE: _ie,
        isWebKit: _webkit,
        isIE6: _old_ie,
        /**
         * Определяет область с основной прокруткой
         * (в браузерах на WebKit она волшебным образом отличается
         */
        getScrollBody: function() {
            return (_webkit)
                ? document.body
                : document.documentElement;
        }
    }
}();

window.mousePos = function(event) {
  event = event || window.event;
  return {x: event.pageX || (event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft),
          y: event.pageY || (event.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop)};

}

/**
 * Глобальный неймспейс
 */
Shop22 = new Object();

/** @type {Object} неймспейс проекта */
Shop22 = function(undef) {
    return {
        undefined : undef
    }
}();

//----- Общие настройки---------------------------------------------------------

/** @type {Number} Значение прозрачности для оверлея */
Shop22.overlayOpacity = 0.6;

/** @type {string} Значение цвета для оверлея */
Shop22.overlayColor = "#333333";

//------------------------------------------------------------------------------

Shop22.Search = function(){

    var $search = $();
    var $scnt = $();
    var DEFAULT_TEXT_SEARCH = "Поиск";

    function setup(){
      $scnt = $search.parent();
      $search.appendTo(document.body);
      var pos = $scnt.offset();
      $search.css({ position: "absolute",
                    top: pos.top + 5,
                    left: pos.left + 13,
                    width: $scnt.width() - 26});
      $search.mouseenter(function(){ $(this).addClass('s-hovered'); $scnt.addClass('s-hovered'); })
             .mouseleave(function(){ if(!$(this).data("has_focus")){  $(this).removeClass('s-hovered'); $scnt.removeClass('s-hovered');}});

      $(".btn-search").click(function(){
      	var $val = $("#search-inp").val();
      	window.location = '/search/?q='+$val;
      	return false;
      });
      
      $search.val(DEFAULT_TEXT_SEARCH);
      $search.live("focus",function() {
          $search.data("has_focus",true);
          $search.trigger("mouseenter");
          search_off = $(this).offset();
          if($(this).attr("value") === DEFAULT_TEXT_SEARCH) {
              $(this).attr("value", "");
          }
          trace_search();
      });

      $search.blur(function() {
          if($(this).attr("value") === "") {
            $search.data("has_focus",false);
            $search.trigger("mouseleave");
            clear_search();
          };
      });
      $(window).resize(resize);
    }

    function resize(){
      var pos = $scnt.offset();
      $search.css({ top: pos.top + 5,
                    left: pos.left + 13,
                    width: $scnt.width() - 26});
      var popup = Shop22.Popup.popup();
      if(popup.length>0){
        popup.css({ width: $scnt.width()+8,
                    left: pos.left - 5 });
      }
    }
    
	     var timeout;
	
			
		 function _clearTimeout() {
		    if (timeout) {
		       window.clearTimeout(timeout);
		    }
		 }
		
		 function _setTimeout() {
		    _clearTimeout();
		    timeout = window.setTimeout(start_search, 1000);
		 }

    
    function trace_search(){
        $search.keyup(function(event){
            keyw = $search.val();
            if (event.which == 13) {
            	window.location = '/search/?q='+keyw;
            	return false;
            }
            _setTimeout();            
        });
    }
    
    var is_load = false;
    function start_search()
    {
    	if(!is_load)
    	{
    		is_load = true;
            $.get('/ajax_qsearch/', {'q' : $('#search-inp').val()}, function(data)
          		  {
          	  			is_load = false;
          	  			
          	  			if(data.length > 10)
          	  			{
          	  				show_results(data);
          	  			}
          		  });
    	}
    }

    function clear_search() {
        $search.val(DEFAULT_TEXT_SEARCH);
        Shop22.Popup.close();
    }

    function show_results( data) {
        var text = data;
        var position = $scnt.offset();
        Shop22.Popup.show({ html: text,
                            delayshow: true,
                            x: position.left - 5,
                            y: parseInt(position.top + $scnt.height() + 10),
                            onClose: function(){ $search.data("has_focus",false);
                                                 $search.trigger("mouseleave"); }});
        var popup = Shop22.Popup.popup();
        popup.width($scnt.width()+8);
        if(Browser.isIE6){
          popup.width($scnt.width() + 46);
        }
        Shop22.Popup.animate();
    }
    
   

    return {
      init: function(){
        $search = $("#search-inp");
        if($search.length>0){
          setup();
        }
      }
    }
}();

/**
 *  Слой - оверлей
 */
Shop22.Overlay = function(){
    var $overlay = null;

    function _show(){
        if (!$overlay){
              $overlay = $(document.createElement('div'))
                         .addClass('overlay')
                         .css({
                              opacity: Shop22.overlayOpacity
                         }).hide()
                         .appendTo(document.body);
        }
        $overlay.show();
        if (Browser.isIE6)
            $overlay.css({
                position : 'absolute',
                height : document.body.scrollHeight
            });
    }

    function _hide(){
        $overlay.hide();
    }

    return {
        show: function(){
            _show();
        },
        hide: function(){
            _hide();
        },
        onclick: function(handler){
            $overlay.unbind("click");
            $overlay.click(handler);
        }
    }
}();

/**
  *  Класс для работы с всплывающим окном
  *  Использует класс Shop22.Overlay
  */

Shop22.Popup = function(){


// параметры. определяются при иницилизации
    var params = {  };
    /*
        Возможные параметры:
          html - внутренний код для попапа (обязателен)
          x - координата по x (не обязателен)
          y - координата по y (не обязателен)
          delayshow - отложить показ (не обязателен). если определен и верен, то попап создается, но не показывается
          arrow - используется ли угол (top-left, top-right, bottom-left, bottom-right)
          onClose - функция, которая выполнится при закрытии
     */

    var close_handler = null;

    var $popup = $();
    var $popup_cnt = $();

    // создание попапа
    function create(){
      $popup = $(document.createElement('div'))
                    .addClass('popup search-res')
                    .hide()
                    .appendTo(document.body);
      var $pp = $(document.createElement('div'))
                        .addClass('pp-cnt')
                        .appendTo($popup);
      var $pp_cnt = $(document.createElement('div'))
                        .addClass('pp')
                        .appendTo($pp);
      $popup_cnt = $(document.createElement('div'))
                        .addClass('pp-text')
                        .appendTo($pp_cnt);
      /*$popup.append('<div class="hb hbt"></div><div class="hb hbb"></div><div class="vb vbl"></div><div class="vb vbr"></div><div class="pc pctl"></div><div class="pc pctr"></div><div class="pc pcbl"></div><div class="pc pcbr"></div><div class="pca"></div>');*/
      $pp.append('<em class="cn cn-bl"></em><em class="cn cn-br"></em>');
      $pp_cnt.append('<em class="cn cn-tl"></em><em class="cn cn-tr"></em>');
      /*$(document.createElement('span'))
            .addClass('pc-close')
            .click(close)
            .appendTo($popup);*/
    }

    // показ попапа
    function show(params){
        if(params.html){
          $popup_cnt.html(params.html);

          if(params.arrow){
              setArrow(params.arrow);
          }

          if((params.onClose)&&(typeof(params.onClose)=="function")){
            close_handler = params.onClose;
          }

          Shop22.Overlay.show();
          Shop22.Overlay.onclick(function(){ Shop22.Overlay.hide(); close(); });

          if(Browser.isMSIE){
            $popup.show().css({ visibility: 'hidden', top: 0, left: 0 });
          }else{
            $popup.show().css({ opacity: 0 });
          }



          if((params.x)&&(params.y)){
            $popup.css({ top: params.y+'px',
                         left: params.x+'px'});
          }else{
            var top = parseInt(($(window).height() - $popup.height())/2 + Browser.getScrollBody().scrollTop);
            var left = parseInt(($(window).width() - $popup.width())/2);
            if(top<50) top = 50;
            if(left<50) left = 50;
            $popup.css({top: top,
                        left: left });
          }
          if(!params.delayshow)
              animate();
        }
    }

    // установка стрелки
    function setArrow(arrow){
        switch(arrow){
            case "top-left":
                $popup.addClass("pwa-tl")
            break;
            case "top-right":
                $popup.addClass("pwa-tr")
            break;
            case "bottom-left":
                $popup.addClass("pwa-bl")
            break;
            case "bottom-right":
                $popup.addClass("pwa-br")
            break;
        }
    }

    // анимация появления попапа
    function animate(){
        if(Browser.isMSIE){
            $popup.css({ visibility: 'visible' });
        }else{
            $popup.animate({ opacity: 1 },600);
        }
    }

    // Закрытие окна попапа
    function close(delay){
        if (delay == 1)
        {
            setTimeout(function(){
                Shop22.Overlay.hide();
                $popup_cnt.html("");
                $popup.removeClass("pwa-tl")
                      .removeClass("pwa-tr")
                      .removeClass("pwa-bl")
                      .removeClass("pwa-br");
                $popup.hide();
                if(typeof(close_handler)=="function"){
                  close_handler();
                  close_handler = null;
                }
            }, 500);
        }
        else
        {
            Shop22.Overlay.hide();
            $popup_cnt.html("");
            $popup.removeClass("pwa-tl")
                  .removeClass("pwa-tr")
                  .removeClass("pwa-bl")
                  .removeClass("pwa-br");
            $popup.hide();
            if(typeof(close_handler)=="function"){
              close_handler();
              close_handler = null;
            }
        }
    }

    return {
        show: function(data){
            params = data;
            if(!$popup.length){
                create();
            }
            show(params);
        },
        close: function(handler,delay){
            if(typeof(handler)=="function"){
              close_handler = handler;
            }
            close(delay);
        },
        onClose: function(handler){
            close_handler = handler;
        },
        popup: function(){
            return $popup;
        },
        content: function(){
            return $popup_cnt;
        },
        animate: function(){
            animate();
        },
        setArrow: function(arrow){
            setArrow(arrow);
        }
    }

}();


/*
Shop22.Search = function(){

    var $search = $();
    var $scnt = $();
    var DEFAULT_TEXT_SEARCH = "Поиск";

    function setup(){
      $scnt = $search.parent();
      var pos = $scnt.offset();
//      Временно меняем position с absolute на static
//      $search.appendTo(document.body);
//      $search.css({ position: "absolute",
      $search.css({ position: "static",
                    top: pos.top + 5,
                    left: pos.left + 13,
                    width: $scnt.width() - 26});
      $search.mouseenter(function(){ $(this).addClass('s-hovered'); $scnt.addClass('s-hovered'); })
             .mouseleave(function(){ if(!$(this).data("has_focus")){  $(this).removeClass('s-hovered'); $scnt.removeClass('s-hovered');}});

//      Временно сделаем, чтоб текст по-умолчанию появлялся только когда поле изначально пустое
//      $search.val(DEFAULT_TEXT_SEARCH);
      if (!$search.val()) $search.val(DEFAULT_TEXT_SEARCH);

      $search.live("focus",function() {
          $search.data("has_focus",true);
          $search.trigger("mouseenter");
          search_off = $(this).offset();
          if($(this).attr("value") === DEFAULT_TEXT_SEARCH) {
              $(this).attr("value", "");
          }
          trace_search();
      });

      $search.blur(function() {
          if($(this).attr("value") === "") {
            $search.data("has_focus",false);
            $search.trigger("mouseleave");
            clear_search();
          };
      });
      $(window).resize(resize);
    }

    function resize(){
      var pos = $scnt.offset();
      $search.css({ top: pos.top + 5,
                    left: pos.left + 13,
                    width: $scnt.width() - 26});
      var popup = Shop22.Popup.popup();
      if(popup.length>0){
        popup.css({ width: $scnt.width()+8,
                    left: pos.left - 5 });
      }
    }

    function trace_search(){
        $search.keyup(function(){
            keyw = $search.val();

            if(keyw.length > 3){
              show_results();
            }
        });
    }

    function clear_search() {
        $search.val(DEFAULT_TEXT_SEARCH);
        Shop22.Popup.close();
    }

    function show_results() {
// Временно отключаем результаты поиска
return;
        var text = $("#search-result").html();
        var position = $scnt.offset();
        Shop22.Popup.show({ html: text,
                            delayshow: true,
                            x: position.left - 5,
                            y: parseInt(position.top + $scnt.height() + 10),
                            onClose: function(){ $search.data("has_focus",false);
                                                 $search.trigger("mouseleave"); }});
        var popup = Shop22.Popup.popup();
        popup.width($scnt.width()+8);
        if(Browser.isIE6){
          popup.width($scnt.width() + 46);
        }
        Shop22.Popup.animate();
    }

    return {
      init: function(){
        $search = $("#search-inp");
        if($search.length>0){
          setup();
        }
      }
    }
}();*/

/**
 *  Главное меню сайта. Создает и показывает попапы.
 */
Shop22.MainMenu = function(){

    var $body = null;
    var hideDelay = 80;

    createOuterCont = function(link){

        var hideDelayTimer = null;
        var beingShown = false;
        var shown = false;

        var parent = link.parentNode;
        var hd = $(parent).find(".hd");
        if(hd.length>0){
            $(parent).addClass("has-menu");
            var bubble = $(document.createElement("div"))
                            .addClass("popup pp-menu")
                            .css({ zIndex: 300 })
                            .appendTo($body);
            if($(parent.parentNode).hasClass('menu')){
                bubble.data("mmenu",1);
            }
            var wrp = $(document.createElement("div"))
                            .addClass("pp-cnt")
                            .appendTo(bubble);
            var pp = $(document.createElement("div"))
                            .addClass("pp")
                            .html(hd.html())
                            .appendTo(wrp);
            pp.append("<em class='cn cn-tl'/><em class='cn cn-tr'/>");
            wrp.append("<em class='cn cn-bl'/><em class='cn cn-br'/>");

           $([ link, bubble.get(0)]).mouseover(function () {
                  if (hideDelayTimer) clearTimeout(hideDelayTimer);
                  if (beingShown || shown) {
                        return false;
                  } else {
                        beingShown = false;
                        shown = true;
                        var position = $(link.parentNode).offset();

                        if(bubble.data("mmenu")){
                            position.top+=2;
                        }else{
                            position.left+=5;
                        }

                        bubble.css({top: Math.round(position.top + link.offsetHeight + 28)+'px',
                                    left: Math.round(position.left - 25)+'px'});
                        if(Browser.isMSIE){
                          bubble.show();
                        }else{
                          bubble.stop().css({opacity: 0,
                                      display: 'block'}).animate({ opacity: 1 },300);
                        }

                  }
                  return false;
            }).mouseout(function () {
                  if (hideDelayTimer) clearTimeout(hideDelayTimer);
                  hideDelayTimer = setTimeout(function () {
                        hideDelayTimer = null;
                        bubble.css('display', 'none');
                        shown = false;
                  },hideDelay);
                  return false;
            });
        }
    }

    return{
        init: function(){
            $body = $(document.body);
            $(".h-menu li .ma").each(function(){
                createOuterCont(this);
            })
        }
    }
}();

//Подгрузка товаров
var SEARCH_WORD = '';
var CATALOG_PAGE = 1;
var CATALOG_ITEMS_COUNT = 0;

function SEARCH_PAGE()
{
	var loading = false; //Идет ли загрузка
	var loading_offset = 1500;
	function searchListLoad()
	{	
	  $(window).scroll(function()
	  {  
		  if(CATALOG_ITEMS_COUNT > 25)
		  {
		      if(!loading && $(document).height() - $(window).height() <= $(window).scrollTop() + loading_offset)
		      {
		          if(CATALOG_PAGE<2) CATALOG_PAGE = 1;
		
		          loadAjaxPage( );
		      }
		  }
	  });
	}
	
	function loadAjaxPage()
	{		
		loading = true;
		$("#search_list_ajax").show();	
		
		CATALOG_PAGE += 1;
		
		$.get('/search/',{'q':SEARCH_WORD,'page': CATALOG_PAGE,'ajax':true}, function(data){
			$("#search_list_ajax").hide();
			if(data.length)
			{
				$("#search_item_list").append(data);
			}
			
			loading = false;
		})
	}
	
	searchListLoad();
}

$(document).ready(function(){	
	if( $('#search_item_list').length )
	{
		SEARCH_PAGE();
	}
});


//------------------------------------------------------------------------------
