var HHBanner = {};
var HH = HH || {};
HH.TargetParams = HH.TargetParams || {};
HH.banners = [];
HH.getBanners = function(){
  for (var i = 0, l = HH.banners.length; i < l; i++){
    HH.banners[i]();
  }
};
HH.bannerObserve = function(element, eventName, handler){
  if (element.addEventListener) {
    element.addEventListener(name, handler, false);
  } else {
    element.attachEvent('on' + name, handler);
  }
};

HH.insertBanner = function(url, placeId){
  /*if (!HH.checkBanner(placeId)){
    return;
  }*/
  document.write('<div id="banner_' + placeId + '" class="banex-banner banex-banner-' + placeId + '"></div>');
  function getBanner(){
    HH.getBanner(url, placeId);
  }
  HH.banners[HH.banners.length] = getBanner;
};
/*HH.checkBanner = function(placeId){

  // Баннер справа от выдачи, не показывать если разрешение
  // экрана меньше 1280 пикселей.
  // Проверяем на 1250 из-за наличия скрола.
  if (placeId == 156 && document.body.offsetWidth < 1250){
    return false;
  }

  return true;
};*/
HH.getBanner = function(url, id){
  HHBanner['sendBanner_' + id] = function(banner){
    HH.sendBanner(banner, id);
  };
  HH.insertScript(url + HH.getDelimiter(url) + 'trace=' + id);
};
HH.sendBanner = function(banner, id){
  if (!(banner instanceof Array)){
    banner = [banner];
  }
  for (var i = 0, l = banner.length; i < l; i++){
    HH._sendBanner(banner[i], id);
  }
};
HH._sendBanner = function(banner, id){
  if (banner.iframe){
    HH.placeIframeBanner(id, banner.iframe);
  } else if (banner.html && banner.html.indexOf('startFlashBody') != -1) {
    HH.placeFlashBanner(id, banner);
  } else if (banner.jssrc) {
    HH.placeJSBanner(id, banner.jssrc[0], banner.html || null);
  } else {
    HH.placeHTMLBanner(id, banner.html);
  }
};

HH.getDelimiter = function(url){
  var delimiter = '?';
  if ((url.indexOf('?') != -1)) {
    delimiter = (url.lastIndexOf('?') == url.length - 1) ? '' : '&';
  }
  return delimiter;
};
HH.insertScript = function(src){
  var script = document.createElement('script');
  script.setAttribute('type', 'text/javascript');
  script.setAttribute('charset', 'utf-8');
  script.setAttribute('src', src);
  var head = document.getElementsByTagName('head').item(0);
  head.insertBefore(script, head.firstChild);
};
HH.placeHTMLBanner = function(id, html){
  var bannerBlock = document.getElementById('banner_' + id);
  bannerBlock.innerHTML += html;

  //временный костыль для таргетинга баннеров mail.ru
  var targerBannerMailRu = bannerBlock.getElementsByClassName('target-banner-mailru');
  for(var i = 0; i < targerBannerMailRu.length; i++) {
    HH.targetBannerUrlReplace(targerBannerMailRu[i]);
  }
};
HH.targetBannerUrlReplace = function(banner) {
  var params = Array('language', 'age', 'gender', 'wage', 'education', 'profarea', 'userId', 'random');
  for (var i = 0; i < params.length; i++) {
     if (HH.TargetParams[params[i]] == undefined) {
       HH.TargetParams[params[i]] = '';
     }
    banner.src = banner.src.replace('data-'+params[i], HH.TargetParams[params[i]]);
  }
};
HH.placeIframeBanner = function(id, params){
  var iframe = document.createElement('iframe');
  iframe.src = params.src;
  iframe.style.border = '0';
  iframe.style.width = (params.width || 0) + 'px';
  iframe.style.height = (params.height || 0) + 'px';
  iframe.frameBorder = 'no';
  iframe.scrolling = 'no';
  document.getElementById('banner_' + id).appendChild(iframe);
};
HH.placeJSBanner = function(id, src, html){
  if (html){
    HH.placeHTMLBanner(id, html);
  }
  HH.insertScript(src);
};

HH.placeFlashBanner = function(id, banner){
  var template = '' +
    '<img class="banex-clickimg" width="%width%" height="%height%" src="http://i.hh.ru/images/dot.gif" style="display:block;position:absolute;"/>' +
    '<embed ' +
      'height="%height%" ' +
      'align="middle" ' +
      'width="%width%" ' +
      'type="application/x-shockwave-flash" ' +
      'pluginspage="http://www.adobe.com/go/getflashplayer" ' +
      'allowscriptaccess="always" ' +
      'name="%name%" ' +
      'bgcolor="%bgcolor%" ' +
      'quality="high" ' +
      'wmode="transparent" ' +
      'src="%src%" '+
      'flashvars="swfUrl=%swfUrl%&targetUrl=%targetUrl%" ' +
      'scale="noScale"'+
    '/>';

  var params = eval('(' + banner.html.match(/<\!--startFlashBody(.*)endFlashBody-->/)[1] + ')');

  // Костыль для старых баннеров, у которых параметры приходят массивом ['name', 'value', ...]
  // 22.10.2009
  if (typeof params.src == 'undefined'){
    var _params = {};
    for (var i = 0, l = params.length; i < l; i++){
      _params[params[i]] = params[++i];
    }
    params = _params;
  }

  var banner_html = template
    .replace(/%height%/g, params.height)
    .replace(/%width%/g, params.width)
    .replace('%name%', params.name)
    .replace('%bgcolor%', params.bgcolor)
    .replace('%src%', params.src)
    .replace('%swfUrl%', params.swfUrl)
    .replace('%targetUrl%', params.targetUrl);
  banner.html = banner.html.replace(/<\!--startFlashBody.*endFlashBody-->/, banner_html);

  var b = document.getElementById('banner_' + id);
  b.innerHTML += banner.html;

};

