var google_ad_start_pos = 0;

function google_ad_wrap_a(google_ad, text, cls)
{
  return '<div class='+cls+'><a onclick="" href="' + google_ad.url + '" onmouseover="window.status=\''
         + google_ad.visible_url + '\'; return true;" onmouseout="window.status=\'\'" target="_blank" >' +
         text + '</a></div>';
}

function google_ad_wrap_a2(google_ad, text, cls)
{
  return '<a class='+ cls + ' href="' + google_ad.url + '" onmouseover="window.status=\''
         + google_ad.visible_url + '\'; return true;" onmouseout="window.status=\'\'" target="_blank" >' +
         text + '</a>';
}

function google_ad_wrap_div(google_ad, text, cls)
{
  return '<div class='+cls+'>' + text + '</div>';
}


function google_ad_show_block_unificated_table(id_block, google_ads, ads_count)
{
  if (ads_count == undefined)
    ads_count = 4;
  if (google_ads.length < google_ad_start_pos+1)
    return;

  var elt = document.getElementById(id_block);
  if (!elt)
    return;

  var txt = '<div class="gLinkUnitCaption ads_title"><A href="' + google_info.feedback_url + '">Ads by Google</A></div>';

  if (google_ads[0].type == 'text')
  {
    txt += '<table cellpadding="0" cellspacing="0">';
    for(i = google_ad_start_pos; i < Math.min(google_ad_start_pos+ads_count, google_ads.length); ++i)
    {
      txt += "<tr><td class=\"col1\">" + google_ad_wrap_a2(google_ads[i], google_ads[i].line1, 'advTitle') + "</td>"
      txt +=     "<td class=\"col2\">" + google_ad_wrap_div(google_ads[i],
                                "<div class='adText'>" + google_ads[i].line2 + " " + google_ads[i].line3 + "</div> " +
                                google_ad_wrap_a2(google_ads[i], google_ads[i].visible_url, 'url'),
                                'description_link') +
                                "</td></tr>";
    }
    txt += "</table>"
  }

  elt.innerHTML = txt;

  elt.style.display = '';
  google_ad_start_pos = Math.min(google_ad_start_pos + ads_count, google_ads.length);
}

function google_ad_request_done(google_ads)
{

  if (google_ads.length == 0)
    return;
  //if (google_ads.length < 1)
  //  return;
  if (typeof(ad_page) == 'undefined')
    ad_page = '';


  // bypassing google's bug when requested number of ads isnt given in one call
  google_ad_start_pos = 0;

  if (ad_page == 'tags')
  {
    if (arguments.callee.first_run)
      arguments.callee.ads = [];

    for(var i=0; i<google_ads.length; i++)
      arguments.callee.ads.push(google_ads[i]);

    if (arguments.callee.first_run)
      arguments.callee.first_run = 0;
    else
      google_ad_show_block_unificated_table('ad_block_1', arguments.callee.ads, 7);
  }
  else
  {
    google_ad_show_block_unificated_table('ad_block_1', google_ads, 5);
    google_ad_show_block_unificated_table('ad_block_2', google_ads);
    google_ad_show_block_unificated_table('ad_block_3', google_ads);
  }
  $(".googleAdv2 a").click(function() {send10SecPing('/Ping10Sec.php');});
}

google_ad_request_done.first_run = 1;

///////////////////// LINK UNITS

function google_radlink_unit_inline(radlinks, unit)
{
  var txt = "<div class='gLinkUnitCaption'><a href='"+google_info.feedback_url+"'>Ads by Google</a></div> ";
  var i;
  for (i=0; i<radlinks.length; i++)
    txt += " <div class='gLinkUnitKeyword'><a target='_blank' href='http://related.wisegeek.com/related/?"
        +  "kw=" + radlinks[i].url_escaped_term
        + "&rt=" + radlinks[i].radlink_token
        + "&url=" + encodeURIComponent(window.location)
        + "'>" + radlinks[i].term + "</a></div>";
  unit.innerHTML = txt;
  unit.style.display = "";
}

function google_radlink_unit_Ncolumns(radlinks, unit, columns, style)
{
  var txt = "<div class='googleAdvT'><div class='gLinkUnitCaption'><a href='"+google_info.feedback_url+"'>Ads by Google</a></div></div>";
  var i;
  n_radlinks = new Array();
  n_radlinks[1] = radlinks.slice(0, radlinks.length/columns);
  n_radlinks[2] = radlinks.slice(radlinks.length/columns, radlinks.length);
  for(var column = 1; column <= columns; column ++)
  {
    txt += "<div class='col"+ column +"' " + style + ">"

    for (i in n_radlinks[column])
      txt += "<div class='gLinkUnitKeyword'><a target='_blank' href='http://related.wisegeek.com/related/?"
          +  "kw=" + n_radlinks[column][i].url_escaped_term
          + "&rt=" + n_radlinks[column][i].radlink_token
          + "&url=" + encodeURIComponent(window.location)
          + "'>" + n_radlinks[column][i].term + "</a></div>";
    txt += "</div>";
    unit.innerHTML = txt;
    unit.style.display = "";
  }
}

function google_radlink_unit(radlinks, unitId)
{
  var unit = document.getElementById(unitId);
  if(!radlinks.length || unit == undefined)
  {
    return false;
  }
  var reg = new RegExp("(?:^|\\s)gLinkUnitBlock2columns(?:$|\\s)");
  var reg2 = new RegExp("(?:^|\\s)gLinkUnitBlock1column(?:$|\\s)");
  if (reg.test(unit.className))
  {
    google_radlink_unit_Ncolumns(radlinks, unit, 1, "");
  }
  else if (reg2.test(unit.className))
  {
    google_radlink_unit_Ncolumns(radlinks, unit, 1, "style='width:200px;'");
  }
  else
  {
    google_radlink_unit_inline(radlinks, unit)
  }
}

function google_radlink_request_done(radlinks)
{
  if((window.google_adlink_request_perfomed != undefined) && window.google_adlink_request_perfomed)
  {
    globalLinks = [];
    for(var i = 0; i < radlinks.length; i++)
      globalLinks[i] = radlinks[i];
  }
  var blocks = [5,6,4];
  if(typeof(aGoogleNumRadlinksPerUnit) !== 'undefined') {
    blocks = aGoogleNumRadlinksPerUnit;
  }

  var i;
  var links;
  for (i=0; i<blocks.length; i++)
  {

    links = radlinks.splice(0, blocks[i]);
    google_radlink_unit(links, "gLinkUnit"+i);
    if (radlinks.length == 0)
      break;
  }
}

function fillRelatedTopicsContainer(oElement, aRelatedTopics, oLinkHasClassName ) {
  var iRelatedTopicKey = 0;

    //Get all links containers (container elements with sLinkClass class name)
  var oColl = oElement.firstChild;

  var regInlineColumns = new RegExp("(?:^|\\s)gInlineBlock(?:$|\\s)");
  if (regInlineColumns.test(oElement.className))
  {
    oColl = oElement;
  }

  for ( ; oColl; oColl = oColl.nextSibling )
  {

    if ( (oColl.nodeType == 1)  )
    {
      var oCurrChild = oColl.firstChild;

      for ( ; oCurrChild; oCurrChild = oCurrChild.nextSibling ) {
        if ( (oCurrChild.nodeType == 1)  ) {

            //Cheking if current sibling element is link container
          if( oLinkHasClassName.test(oCurrChild.className)  ) {

              //Get all links from container (elements with sLinkClass class name)
            var oCurrLinkContainerChild = oCurrChild.firstChild;

            for ( ; oCurrLinkContainerChild; oCurrLinkContainerChild = oCurrLinkContainerChild.nextSibling ) {

                //Cheking if current sibling element is link
              if( oLinkHasClassName.test(oCurrLinkContainerChild.className) ) {

                  //Add url and text to link tag
                oCurrLinkContainerChild.innerHTML = aRelatedTopics[iRelatedTopicKey].keyword;

                oCurrLinkContainerChild.href = aRelatedTopics[iRelatedTopicKey].url;

                iRelatedTopicKey++;
              }
            }
          }
        }
      }
    }
  }
}//This is a last punched card of fillRelatedTopicsContainer function

function showAdLinkBlock(oElement, iCurrADLinksUnitNumber) {

  oElement.innerHTML = '';

  oElement.id = "gLinkUnit"+iCurrADLinksUnitNumber;

}//This is a last punched card of showAdLinkBlock function

function fill_related_topics_links(aRelatedTopics, sTopicsBlockClass, sLinkClass, sContainerElement, iCurrADLinksUnitsCount) {

//  if(aRelatedTopics && aRelatedTopics.length > 0) {
{
    if( typeof(sContainerElement) === 'undefined' ) {
      sContainerElement = '*';
    }

      //Get topic tags containers (sContainerElement elements with sTopicsBlockClass class name)
    var aElements = [];
    if( typeof(document.getElementsByClassName) === 'undefined' ) { //Method getElementsByClassName haven't implemented in IE :D

      var oHasClassName = new RegExp("(?:^|\\s)" + sTopicsBlockClass + "(?:$|\\s)");
      var aAllElements = document.getElementsByTagName(sContainerElement);

      var oElement;
      for( var i = 0; (oElement = aAllElements[i]) != null; i++ ) {

        var sElementClass = oElement.className;

        if (sElementClass && sElementClass.indexOf(sTopicsBlockClass) != -1 && oHasClassName.test(sElementClass)) {
          aElements.push(oElement);
        }

      }

    } else {

      aElements = document.getElementsByClassName(sTopicsBlockClass, sContainerElement);

    }

    if(aElements.length > 0) {

      var oLinkHasClassName = new RegExp("(?:^|\\s)" + sLinkClass + "(?:$|\\s)");

      var iShowAdLinkBreakPoint = 2400;
      var iMaxAdLinksPosts = 5;

      var bShowRelatedTopics = true;
      var iAdLinkPostsCount = 0;

      for(iKey = 0; iKey < aElements.length; iKey++ ) {

        var oElement = aElements[iKey];

          //Show current block for position capture

          //Capture position
          var tmp;
          var aPosition = 0;
          if(oElement.parentNode.parentNode.parentNode.tagName == 'TBODY')
          {
            tmp = oElement.parentNode.parentNode.parentNode.style.display;
            oElement.parentNode.parentNode.parentNode.style.display = '';
            aPosition = getElementPosition(oElement.parentNode.parentNode.parentNode);
            oElement.parentNode.parentNode.parentNode.style.display = tmp;
          }
          else
          {
            tmp = oElement.style.display;
           // oElement.style.display = 'block';
            aPosition = getElementPosition(oElement);
           // oElement.style.display = tmp;
          }

          var iTopOffset = aPosition[1];

        if( (iTopOffset >= iShowAdLinkBreakPoint) && (iAdLinkPostsCount < iMaxAdLinksPosts) ) {
          bShowRelatedTopics = false;
          iShowAdLinkBreakPoint = iTopOffset + 800;
        }

        if(!bShowRelatedTopics) {
          oElement.parentNode.parentNode.parentNode.style.display='';
          var oc = oElement.parentNode.parentNode.firstChild;
          while(oc.nodeType != 1)
          {
            oc = oc.nextSibling;
          }
          oc.innerHTML = "&nbsp;";

          showAdLinkBlock(oElement, (iCurrADLinksUnitsCount+iAdLinkPostsCount));
          iAdLinkPostsCount++;
          bShowRelatedTopics = true;
        } else if(aRelatedTopics && aRelatedTopics.length > 0 &&oElement.innerHTML != '') {
          fillRelatedTopicsContainer(oElement, aRelatedTopics, oLinkHasClassName);
        }

          //Show current related topics block
        oElement.style.display = '';

                  }


              }



        }

  var aAdditionalGoogleParams = [0, ''];

  if(iAdLinkPostsCount > 0) {

    aAdditionalGoogleParams[0] = 5*iAdLinkPostsCount;

    for(i=0; i<iAdLinkPostsCount; i++) {
      aAdditionalGoogleParams[1] += ',5';
    }

  }

  return aAdditionalGoogleParams;

}//This is a last punched card of fill_related_topics_links function

function add_top_related_topics_link_to_image(aRelatedTopics, sImageContainerId, sLinkClass) {

  if(aRelatedTopics && aRelatedTopics.length > 0) {

    if( typeof(sLinkClass) === 'undefined' ) {
      sLinkClass = 'RelatedTopicsImageLink';
    }

    var oImageContainer = document.getElementById(sImageContainerId);

    var oTopTopicLink = document.createElement("a");

    oTopTopicLink.setAttribute("class", sLinkClass);
    oTopTopicLink.setAttribute("className", sLinkClass); //For IE;

    oTopTopicLink.target = '_blank';

    oTopTopicLink.href = aRelatedTopics[0].url;

    oTopTopicLink.innerHTML = oImageContainer.innerHTML;

    oImageContainer.innerHTML = '';

    oImageContainer.appendChild(oTopTopicLink);

  }

}//This is a last punched card of add_top_related_topics_link_to_image function

function getElementPosition(oElement) {

  var iLeftOffset = iTopOffset = 0;

  if (oElement.offsetParent) {
    do {
      iLeftOffset += oElement.offsetLeft;
      iTopOffset += oElement.offsetTop;
    } while (oElement = oElement.offsetParent);
  }

  return [iLeftOffset, iTopOffset];

}//This is a last punched card of getElementPosition function

function getViewportSize() {

  var oSize = {height: 0, width: 0};

  if( typeof window.innerWidth != 'undefined' ) { //mozilla/netscape/opera/IE7+
    oSize.width = window.innerWidth,
    oSize.height = window.innerHeight
  } else if( typeof document.documentElement != 'undefined' && typeof document.documentElement.clientWidth != 'undefined'
             && document.documentElement.clientWidth != 0 ) { //IE6
    oSize.width = document.documentElement.clientWidth,
    oSize.height = document.documentElement.clientHeight
  } else {//IE5.5-
    oSize.width = document.getElementsByTagName('body')[0].clientWidth,
    oSize.height = document.getElementsByTagName('body')[0].clientHeight
  }

  return oSize;

}//This is a last punched card of getViewportSize function

function addEvent(oElement, sType, oHandler) {

  if( oElement == null || oElement == undefined ) {
    return;
  }

  if ( oElement.addEventListener ) {
    oElement.addEventListener( sType, oHandler, false );
  } else if ( oElement.attachEvent ) {
    oElement.attachEvent( "on" + sType, oHandler );
  }

}//This is a last punched card of addEvent function
