var PORTAL_CGI_URL = "/cgi-bin/portalshops.pl";// point to the portal shop cgi script

var gv_ps_by = '';
var gv_ps_val = '';
var gv_init_shops = '';
var gv_ps_lang_id = '';

jQuery(document).ready(function() {

  // take lang id from form
  gv_ps_lang_id = document.getElementById('_ps_lang_id').value;

  // show either some A-Z shops or some category shops, set flag here
  if($("#shoppen-left-body > div:first > a[class=choiceheader_act]:first").length){
    gv_init_shops = "a-z";
  }else if($("#shoppen-left-body > div:eq(1) > a[class=choiceheader_act]:first").length){
    gv_init_shops = "category";
  }

  load_sf_menu();
/*
  // hide & save the first shop abstract, and remove the rest
  if($("#shop_list_area div[class=shop_abstract]").length){
    $("#shop_list_area div[class=shop_abstract]:first").hide().nextAll("div[class=shop_abstract]").remove();
  }else if($("#shop_list_area div[class=shop_row4]").length){
    $("#shop_list_area div[class=shop_row4]:first").hide().nextAll("div[class=shop_row4]").remove();
  }
*/

  // handlers for A-Z links

  if($("#shoppen-right-meta-left-abc").length){
    //install event handlers for each letter
    $("#shoppen-right-meta-left-abc a").click(function(){
      if($(this).hasClass('pagenr_act')) return false;
      $(this).siblings().removeClass('pagenr_act');
      $(this).addClass('pagenr_act');
      showShopsByLetter($(this).text() );
      return false;
    });
  }//end if 

  // handler for search buttons
  $("#shoppen-search-form input[type=button]").click(function(){
    var txt = $("#searchfield").val();
    if(txt != "") showShopsBySearch(txt);
    return false;
  });
  // handler for search text field
  $("#shoppen-search-form input[type=text]").keydown(function(e){
    if(e.keyCode == 13){ //enter submit
      $("#shoppen-search-form input[type=button]").trigger('click');
    }
  });
  //clear search fields, or not, show a default word would be good
  //$("#shoppen-search-form input[name=searchword]").val('');

  // handler for page size drop down
  $("#shoppen-search-form select:first").change(function(){
    showShopsPage(1);
  });

  // disable search field
  $("#shoppen-search-form input[name=searchword]").attr('readonly',true);

  // handler for first shop age layer yes/no buttons
  $("#shop_list_area > div[class='shop_abstract']:first > div[class='shop_age_control'] div[class=age_control_answer_yes] a:first").click(function(){ set_cookie('shopAbove18','YES'); return true; });
  $("#shop_list_area > div[class='shop_abstract']:first > div[class='shop_age_control'] div[class=age_control_answer_no] a:first").click(function(){
    $(this).parent().parent().parent().parent().parent().siblings("div").show();
    $(this).parent().parent().parent().parent().parent().removeAttr('style').addClass('shop_age_control');
    $(this).parent().parent().parent().parent().parent().hide();
    return false;
  });

});


function showShopsByCategory(cat_id,cat_name){
  //showHeaderCategory();
  $("#shoppen-right-meta div[class='shoppen-right-meta-left']:first span:first").text(cat_name);
  saveShopsCriteria('CATEGORY',cat_id);
  showShopsPage(0);
}
function showShopsByLetter(letter){
  //showHeaderLetters();
  saveShopsCriteria('LETTER',letter);
  showShopsPage(0);
}
function showShopsBySearch(text){
  $("#shoppen-right-meta-left-abc a").removeClass('pagenr_act');
  saveShopsCriteria('SEARCH',text);
  // disable search field
  $("#shoppen-search-form input[name=searchword]").attr('readonly',true);
  showShopsPage(0);
}
function saveShopsCriteria(by,val){
  gv_ps_by = by;
  gv_ps_val = val;
}
function showShopsPage(pageNo){
  var lim = $("#shoppen-search-form select:first").val();
  $("#shop_list_area").slideUp('slow',function(){
    $("#shoppen-right-meta > div[class='shop_no_result']").hide();
    $("#ajax_loader").show();
	  if(gv_ps_by != "" && gv_ps_val != ""){
	    $.getJSON(PORTAL_CGI_URL,
	      {_show:"shops",_ps_lang_id:$("#_ps_lang_id").val(),_ps_limit:lim,_ps_page:pageNo,_ps_val:gv_ps_val,_ps_by:gv_ps_by},
	      function(ar){
                if($("#ajax_loader").length) $("#ajax_loader").hide();
                setPageLinks(ar[0]);
                if( $("#shop_list_area div[class=shop_abstract]:first").length ){
                  reloadShopsArea(ar);
                }else if( $("#shop_list_area div[class=shop_row4]:first").length ){
                  reloadShopsArea_layout2(ar);
                }
              }
	    );
	  }
	  // change random teaser, dynamic teaser only for category page now
          if(gv_ps_by == "CATEGORY") showTeaser();
  });
}

function reloadShopsArea_layout2(ar){
  // hide & save the first shop info block, remove all the rest
  $("#shop_list_area div[class=shop_row4]:first").show().nextAll("div[class=shop_row4]").remove();
  // set shops per page
  //$("#shoppen-right-meta > div[class='shoppen-right-meta-left'] > select:first").attr('selectedIndex', ar[0][1] == 48 ? 3 : ar[0][1]/8 -1);
  $("#shoppen-right-meta > div[class='shoppen-right-meta-left'] > select:first").val( ar[0][1] );

  for(var i=1; i<Math.ceil((ar.length-1)/4); i++){
    $("#shop_list_area div[class=shop_row4]:first").after($("#shop_list_area div[class=shop_row4]:first").clone(true));
  }
  $("#shop_list_area div[class=shop_abstract_box_bg]").each(function(idx){
    if(null == ar[idx+1]){
      $(this).hide();
    }else{

      $(this).find("td[class=shop_picture]").empty().append($('<img />').attr('src',ar[idx+1].shop_picture_path));
      $(this).find("div[class=shop_abstract_box_link] > a").attr('href','http://'+ar[idx+1].shop_extlink);
      $(this).find("div[class=shop_abstract_box_link] > a").attr('target','_blank');      
      if(ar[idx+1].shop_age_minimum_18 == 1){
        $(this).find("div[class=shop_abstract_box_link] > a").click(function(){ return check_18cookie_layout2(this); });
      }
      $(this).children("div[class=shop_box_name]").empty().append(ar[idx+1].shop_name);
      $(this).show();
    }
  });

  // show a no_result image if not shops returned
  if(ar.length > 1){
    $("#shop_list_area").slideDown('slow');
  }else{
    $("#shoppen-right-meta > div[class='shop_no_result']").show();
  }

  // re-enable search field
  $("#shoppen-search-form input[name=searchword]").removeAttr('readonly');
}
function reloadShopsArea(ar){
  // hide & save the first shop info block, remove all the rest
  $("#shop_list_area div[class=shop_abstract]:first").hide().nextAll("div[class=shop_abstract]").remove();
  $("#shop_list_area > br[class=clearer]").remove();

  // set shops per page
  //$("#shoppen-right-meta > div[class='shoppen-right-meta-left'] > select").attr('selectedIndex',ar[0][1]/5 -1);
  $("#shoppen-right-meta > div[class='shoppen-right-meta-left'] > select").val( ar[0][1] );

  for(var i=1;i<ar.length;i++){
    var $sh_logo = $("#shop_list_area > div[class='shop_abstract']:first > div[class='shop_abstract_logo']");
    var $sh_copy = $("#shop_list_area > div[class='shop_abstract']:first > div[class='shop_abstract_copy']");
    var $sh_link = $("#shop_list_area > div[class='shop_abstract']:first > div[class='shop_abstract_link'] > a:first");
    var $sh_ageY = $("#shop_list_area > div[class='shop_abstract']:first > div[class='shop_age_control'] div[class=age_control_answer_yes] a:first ");

    $sh_copy.empty().html("<b>"+ar[i].shop_name + "</b><br/>" + ar[i].shop_description_text);
    $sh_link.attr('href','http://'+ar[i].shop_extlink);
    $sh_link.attr('target','_blank');
    $sh_ageY.attr('href','http://'+ar[i].shop_extlink);
    $sh_ageY.attr('target','_blank');

    $sh_link.unbind();
    if(ar[i].shop_age_minimum_18 == 1 ){
      $sh_link.click(function(){ return check_18cookie(this); });
    }

    if(ar[i].shop_picture_path.length > 3){
      $sh_logo.empty().html("<a href='http://"+ar[i].shop_extlink+"' target='_blank'><img alt='"+ar[i].shop_name+"' src='" + ar[i].shop_picture_path + "' border=''/></a>");
      $sh_logo.children('a').unbind();
      if(ar[i].shop_age_minimum_18 == 1 ){
        $sh_logo.children('a').click( function(){ return check_18cookie(this); });
      }
    }else{ //no img tag if path empty
      $sh_logo.empty().html("&nbsp;<br/>");
    }

    $("#shop_list_area").append($("#shop_list_area div[class='shop_abstract']:first").clone(true).show());
    $("#shop_list_area").append(newBr());
  }

  // show a no_result image if not shops returned
  if(ar.length > 1){
    //$("#shop_list_area").append(newBr());
    //$("#shop_list_area").slideDown('slow');
    $("#shop_list_area").show();
  }else{
    $("#shoppen-right-meta > div[class='shop_no_result']").show();
  }

  // re-enable search field
  $("#shoppen-search-form input[name=searchword]").removeAttr('readonly');
}
function check_18cookie (anchor) {
  if('YES' == get_cookie('shopAbove18')) return true;

  // prompt the age18 question
  if($(anchor).parent().hasClass('shop_abstract_link') || $(anchor).parent().hasClass('shop_abstract_logo')){
    $(anchor).parent().parent().children('div').hide();
    $(anchor).parent().siblings("div[class=shop_age_control]").show();
  }

  return false;
}
function check_18cookie_layout2(anchor){
  if('YES' == get_cookie('shopAbove18')) return true;
  if($(anchor).parent().parent().parent().siblings("div[class=shop_age_control]").length){
    $(anchor).parent().parent().parent().siblings("div[class=shop_age_control]").find("div[class=age_control_answer_no]").children('a').click(function(){$(this).parent().parent().parent().parent().parent().hide();return false;});
    $(anchor).parent().parent().parent().siblings("div[class=shop_age_control]").find("div[class=age_control_answer_yes]").children('a').attr('href',$(anchor).attr('href'));
    $(anchor).parent().parent().parent().siblings("div[class=shop_age_control]").find("div[class=age_control_answer_yes]").children('a').attr('target','_blank');
    $(anchor).parent().parent().parent().siblings("div[class=shop_age_control]").find("div[class=age_control_answer_yes]").children('a').click(function(){set_cookie('shopAbove18','YES');$("div[class=shop_age_control]").hide();return true;});    
    $(anchor).parent().parent().parent().siblings("div[class=shop_age_control]").show();
  }
  return false;
}




function setPageLinks(ar){
  var total     = ar[0];
  var limit     = ar[1];
  var currPage  = ar[2];
  var pageTotal = ar[3];

  var HALF = 2; //how many page links to show on each side of currPage
  var head1,head2,tail1,tail2;

  var $page_links = $("div[class='shoppen-right-meta-left']:has(select) + div[class='shoppen-right-meta-right']");
  $page_links.empty();
  // empty result set
  if(total == 0){
    $page_links.append("&laquo; &lsaquo; &rsaquo; &raquo;");
    // replicate at the bottom
    $("#shoppen-right-meta div[class='shoppen-right-meta-right']:last")
      .empty()
      .replaceWith($("div[class='shoppen-right-meta-left']:has(select) + div[class='shoppen-right-meta-right']").clone(true))
    ;
    return;
  }
  if(currPage == 1) {
    $page_links.append("&laquo; &lsaquo; ");
  }else {
    $page_links.append("<a href='#' class='pagenav_bold' onclick='showShopsPage("+1+");return false;'>&laquo;</a> <a href='#' class='pagenav_bold' onclick='showShopsPage("+(currPage-1)+"); return false;'>&lsaquo;</a> ");
  }
  for(i=0;i<pageTotal;i++){
    if(i==1 && i< currPage-HALF-1)
      $page_links.append("... ");
    if(i==pageTotal-2 && i> currPage+HALF-1)
      $page_links.append("... ");
    if(i>0 && i< currPage-HALF-1) continue;
    if(i>currPage+HALF-1 && i<pageTotal-1) continue;
    if(i+1 == currPage)
      $page_links.append("<span class='pagenr_act'>"+(i+1)+"</span> ");
    else
      $page_links.append("<a href='#'>"+(i+1)+"</a> ");

    if(i==0 && currPage == 2 + HALF) $page_links.append("| ");
    if(pageTotal == i+ 2 && currPage +HALF +1 == pageTotal) $page_links.append("| ");
    if(i > currPage - HALF -2 && i < currPage + HALF -1 && i < pageTotal -1) $page_links.append("| ");
  }
  if(currPage == pageTotal){
    $page_links.append("&rsaquo; &raquo;");
  }else {
    $page_links.append("<a href='#' class='pagenav_bold' onclick='showShopsPage("+(currPage+1)+");return false'>&rsaquo;</a> <a href='#' class='pagenav_bold' onclick='showShopsPage("+pageTotal+"); return false;'>&raquo;</a>");
  }
  $page_links.children('a').click(function(){
    if($(this).text().match(/^\d+$/) && ! $(this).hasClass('pagenr_act')) showShopsPage($(this).text());
    return false;
  });

  // replicate at the bottom
  $("#shoppen-right-meta div[class='shoppen-right-meta-right']:last")
    .empty()
    .replaceWith($("div[class='shoppen-right-meta-left']:has(select) + div[class='shoppen-right-meta-right']").clone(true))
  ;
}

function showTeaser(){
  $.ajax({
    type:     'GET',
    url:      PORTAL_CGI_URL,
    dataType: 'json',
    data:     '_show=teaser&_ps_lang_id='+$("#_ps_lang_id").val()+'&_ps_cat_id='+gv_ps_val,
    cache:    false,
    success: function(data){
      if(data.length > 1 && $("#shoppen-right-meta-teaser").length){
        if( (data[2] && data[2] == 1) || data[0].match(/swf$/) ){ // swf
          if($("#shoppen-right-meta-teaser > object:first").length &&
             $("#shoppen-right-meta-teaser > object:first").attr('data') == data[0]) return;
            $("#shoppen-right-meta-teaser").empty()
            .html("<object classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0' height='60' width='468'><param name='movie' value='"+data[0]+"'/><param name='wmode' value='transparent' /><param name='quality' value='best' /> <param name='bgcolor' value='#FFFFFF' /><embed src='"+data[0]+"' wmode='transparent'  quality='best' bgcolor='#FFFFFF' width='468' height='60' type='application/x-shockwave-flash' pluginspace='http://www.macromedia.com/go/getflashplayer'></embed></object>");
        }else{ // image
          if($("#shoppen-right-meta-teaser > a:first > img:first").length &&
             $("#shoppen-right-meta-teaser > a:first > img:first").attr('src') == data[0]) return;
          $("#shoppen-right-meta-teaser").empty().append("<a href='http://"+data[1]+"' target='_blank'><img src='"+data[0]+"' /></a>");
        }
      }
    }
  });

}
function load_kategoriennavi(){
  // load category tree
  if(0 == $("#kategoriennavi").length) return;
  $("#kategoriennavi ul:first").hide();
  $("#kategoriennavi").append($("#ajax_loader img").clone().show());
  $.getJSON(PORTAL_CGI_URL,
    {_show:"categoryTree",_ps_lang_id:$("#_ps_lang_id").val()},
    function(json){
      var ul = document.createElement('ul');
      parseUL(json,ul);
      $("#kategoriennavi").empty().append(ul);
      //add_menu_style(ul);
      $("#kategoriennavi > ul:first > li:first").addClass('first');
      $("#kategoriennavi > ul > li > a").each(function(i){
        var cat_name = this.innerHTML;
        $(this).empty().append("<div class='li_head'>&nbsp;</div><div class='li_body'>"+cat_name+"</div><div class='li_head_right'>&nbsp;</div>");
      });
      $("#kategoriennavi > ul > li > ul").prepend("<div class='ul_top'><div class='ul_top_left'><div class='ul_top_right'>&nbsp;</div></div></div>");
      $("#kategoriennavi > ul > li > ul").append("<div class='ul_bottom'><div class='ul_bottom_repeat'><div class='ul_bottom_left'>&nbsp;</div><div class='ul_bottom_right'>&nbsp;</div></div></div>");
      $("#kategoriennavi > ul > li > ul > li:nth-child(2)").addClass('first');
      jqueryslidemenu.buildmenu("kategoriennavi", arrowimages);

      //load some shops
      if("" != get_cookie('shopCategory2Load') && gv_init_shops == 'category'){ // 
        var cat_ar = get_cookie('shopCategory2Load').split("|||");
        set_cookie('shopCategory2Load',''); //clear cookie value
        showShopsByCategory(cat_ar[0],cat_ar[1]);
      }else if(gv_init_shops == 'a-z'){
        if($("#shoppen-right-meta-left-abc").length) $("#shoppen-right-meta-left-abc > a:first").trigger('click');
      }else if(gv_init_shops == 'category'){
        if($("#kategoriennavi > ul:first > li:first > a:first").length){
          $("#kategoriennavi > ul:first > li:first > a:first").trigger("click");
        }else{
          showShopsByCategory(1,'');
        }
      }
      gv_init_shops = '';
    }
  );
}
function load_sf_menu(){
  //if(0 == $("#shops_category_menu").length) return;
  $("#kategoriennavi ul:first").hide();
  $("#kategoriennavi").append($("#ajax_loader img").clone().show());
  $.getJSON(PORTAL_CGI_URL,
    {_show:"categoryTree",_ps_lang_id:$("#_ps_lang_id").val()},
    function(json){
      var ul = document.createElement('ul');
      parseUL(json,ul);
      ul.setAttribute('id','sf-menu-cab');

      var dummy_li2 = document.createElement('li');
      dummy_li2.setAttribute('class','l2_last');
      dummy_li2.innerHTML = '<a class="sf-with-ul"><span class="l2_pre"></span><span class="l2_copy">&nbsp; </span></a>';

      $(ul).removeClass().addClass('sf-menu').addClass('sf-vertical');
      $(ul).children('li:first').removeClass().addClass('l1_first');
      $(ul).children('li:last').removeClass().addClass('l1_last');
      $(ul).children('li').not(':first').not(':last').removeClass().addClass('l1_regular');
      $(ul).children('li').children('a:first-child').children('span:last-child').removeClass().addClass('l1_copy');
      $(ul).children('li').children('ul').children('li').children('a:first-child').children('span').removeClass().addClass('l2_copy');
      $(ul).children('li').children('ul').children('li').children('a:first-child').prepend('<span class="l2_pre"></span>');
      $(ul).children('li').children('ul').removeClass().addClass('sf-menu_2nd');
      $(ul).children('li').children('ul').children('li').removeClass().addClass('l2_regular');
      $(ul).children('li').children('ul').append(dummy_li2.cloneNode(true));
      $(ul).children('li').children('ul').children('li:first-child').removeClass().addClass('l2_first');
      $(ul).children('li').children('ul').children('li:last-child').removeClass().addClass('l2_last');
      $(ul).children('li').children('ul').children('li').children('a').removeClass().addClass('sf-with-ul');
      $(ul).children('li').children('ul').parent('li').children('a:first-child').removeClass().addClass('sf-with-ul');
      $("#kategoriennavi").empty().append(ul);
      //$("#kategoriennavi").removeClass().attr('id','shops_category_menu');
      
      //jqueryslidemenu.buildmenu("kategoriennavi", arrowimages);
			$("ul.sf-menu").supersubs({
			      minWidth:    12,
			      maxWidth:    235,
			      extraWidth:  2
			  }).superfish({
			          delay:100,
			          speed:10
			  });


      //load some shops
      if("" != get_cookie('shopCategory2Load') && gv_init_shops == 'category'){ //
        var cat_ar = get_cookie('shopCategory2Load').split("|||");
        set_cookie('shopCategory2Load',''); //clear cookie value
        showShopsByCategory(cat_ar[0],cat_ar[1]);
      }else if(gv_init_shops == 'a-z'){
        if($("#shoppen-right-meta-left-abc").length) $("#shoppen-right-meta-left-abc > a:first").trigger('click');
      }else if(gv_init_shops == 'category'){
        if($("#kategoriennavi > ul:first > li:first > a:first").length){
          $("#kategoriennavi > ul:first > li:first > a:first").trigger("click");
        }else{
          showShopsByCategory(1,'');
        }
      }
      gv_init_shops = '';
    }
  );
}
//load the category tree, (recursion)
function parseUL(o,ul){
  if("object" != typeof o) return;
  var count = 0;
  for(i in o){ count ++; }
  if(count == 0) return;

  for(k in o){
    if("object" == typeof o[k]){
      var li = parseLI(o[k]);
      if(li != null) ul.appendChild(li);
    }
  }
}
function parseLI(o){
  if("object" != typeof o) return null;
  if((!'cat_name' in o) || (! 'uid' in o) || (! 'children' in o)) return null;
  var a  = document.createElement('a');
  if($("#shoppen-left-body > div:first > a[class=choiceheader_act]:first").length){ // a-z page
    a.setAttribute('href',$("#shoppen-left-body > div:eq(1) > a:first").attr('href'));
    a.setAttribute('name',o.uid+'|||'+o.cat_name);
    a.onclick=function(){
      // set cookie & trigger click
      set_cookie('shopCategory2Load', this.name);
      return true;
    }
  }else{ // category page
    a.setAttribute('href','#');
    a.onclick=function(){
      // load shops only
      showShopsByCategory(o.uid,o.cat_name);
      return false;
    }
  };
  var spn = document.createElement('span');
  spn.appendChild(document.createTextNode(o.cat_name));
  a.appendChild(spn);
  var li = document.createElement('li');
  li.appendChild(a);
  var ul = document.createElement("ul");
  parseUL(o.children,ul);
  if(ul.hasChildNodes()) li.appendChild(ul);
  return li;
}

function newBr(){
  var b = document.createElement('br');
  b.setAttribute('class','clearer');
  return b;
}

function get_cookie(ck_name){
  if(document.cookie.length > 0){
    var ck_start=document.cookie.indexOf(ck_name + "=");
    if (ck_start!=-1) {
      ck_start = ck_start + ck_name.length+1;
      var ck_end=document.cookie.indexOf(";",ck_start);
      if (ck_end==-1) ck_end=document.cookie.length;
      return unescape(document.cookie.substring(ck_start,ck_end));
    }
  }
  return '';
}
function set_cookie(ck_name,ck_value,exp_days){
  var exdate = new Date();
  exdate.setDate(exdate.getDate()+exp_days);
  var ck_str = ck_name + '=' + escape(ck_value);
  if(exp_days != null) ck_str = ck_str + ';expires=' + exdate.toGMTString();
  document.cookie = ck_str;
  //alert('cookie set: '+ck_name+'=>'+document.cookie);
}


