/**
 * This file contains the functions for controlling adver.
 *
 * @package webroot
 * @subpackage js
 * @author
 * @created 2009/04/03
 */

var adverCount = 0;
var adTimerID = -1;
var adInit = true;
var adScrolling = 0;    //  -4, 0, 4

$(document).ready(function() {
        $('img#prevAdBanner').click( onPrevAdClicked );
        $('img#nextAdBanner').click( onNextAdClicked );
});

// load ad data by job_type
function loadAdData(jobID)
{
    var thisJson = "/ajax/adver?jobtype=" + jobID;

    $.ajax({
        type: 'POST',
        url: thisJson,
        success: function(data) {
            if( data.length > 3 )
            {
                eval( "var jsonData = " + data );
                refreshAdver(jsonData.adver);
            }
            else
                refreshAdver([]);
        }
    });
}

// ad-click handler
function onAdClicked()
{
	var adverID = $(this).children('a').attr('id');

	var ajaxURL = '/ajax/click_banner';
	
    $.ajax({
        type: 'POST',
        url: ajaxURL,
		data : { id : adverID },
        success: function(data) {
        }
    });
}

// refresh adver-displaying area
function refreshAdver(adver)
{
    var i = 0, j = 0;
//    adverCount = adver.length;
    adverCount = $('div#adContainer').children('ul').children('li').length;
    
    if( adTimerID != -1 )
    {
        clearInterval( adTimerID );
        adTimerID = -1;
    }

    //  check whether adver-area is valid, or not ...
    if( $('div#pageTopAd').is('div') != true )
        return;
    
    // 読み込み直し
    if( adverCount == 0 )
        {
            $('div#pageTopAd').children('div#adContainer').html("<ul></ul>");
            $('div#pageTopAd').hide("slow");
        return;
    }

    $('div#pageTopAd').show("slow");

    if( ! adInit )
        $('div#adContainer').children('ul').stop();
    
    // リフレッシュ
//    var adAreaTag = "<ul>";
    //var doubleTimes = Math.round( 5 / adverCount + 0.49 );
    
//    for( j = 0; j < adverCount; j ++ )
//    {
//         i = j % adverCount;
//         adAreaTag = adAreaTag + composeAdHtml(adver[i]);
//    }
//    adAreaTag = adAreaTag + "</ul>";
//    $('div#pageTopAd').children('div#adContainer').html(adAreaTag);
//    $('div#adContainer').children('ul').css('left', 0);
    // /リフレッシュ
    
    // ボタンのリフレッシュ
    refreshAdButton();

    //  hide all & fadeIn
    $('div#adContainer').children('li a img').css("opacity", 0 );
    $('div#adContainer').children('li a img').fadeTo("slow", 1);

	// set click-handler
    $('div#adContainer').children('ul').children('li').click(onAdClicked);

    //  set timer
    adInit = true;
    if( adverCount > 4 )
    {
        adTimerID = setInterval( scrollAdNormally, 4000 );
        scrollAdNormally();
    }
}

//  show/hide scroll buttons
function refreshAdButton()
{
    if( adverCount > 4 )
    {
        $('img#prevAdBanner').css('visibility', 'visible');
        $('img#nextAdBanner').css('visibility', 'visible');
    }
    else
    {
        $('img#prevAdBanner').css('visibility', 'hidden');
        $('img#nextAdBanner').css('visibility', 'hidden');
    }
}

//  scroll ad
function scrollAdNormally()
{
    var firstEle = "";
    if( adverCount <= 4 )
        return;

    if( adScrolling != 0 || $('div#adContainer').children('ul').is(':animated') )
    {
        return;
    }

    if( ! adInit )
    {
        firstEle = $('div#adContainer').children('ul').children('li:nth-child(1)').html();
        $('div#adContainer').children('ul').children('li:nth-child(1)').remove();
        $('div#adContainer').children('ul').css('left', 0);
        
        if( firstEle != "" )
            $('div#adContainer').children('ul').append( "<li>" + firstEle + "</li>" );

		// set click-handler
		$('div#adContainer').children('ul').children('li').click(onAdClicked);
    }
    
    var aWidth = $('div#adContainer').children('ul').children('li:nth-child(1)').width() + 4/*margin*/;
    $('div#adContainer').children('ul').animate( { left : -aWidth }, 1500 );

    adInit = false;
}

function prepare4Scroll()
{
    var firstEle = "";

    if( $('div#adContainer').children('ul').is(':animated') )
        $('div#adContainer').children('ul').stop(false, true);

    if( !adInit )
    {
        firstEle = $('div#adContainer').children('ul').children('li:nth-child(1)').html();
        $('div#adContainer').children('ul').children('li:nth-child(1)').remove();
        $('div#adContainer').children('ul').css('left', 0);
        
        if( firstEle != "" )
            $('div#adContainer').children('ul').append( "<li>" + firstEle + "</li>" );
    }
}

//  prev - onclick
function onPrevAdClicked()
{
    if( adverCount <= 4 || adScrolling != 0 )
        return;

    // preparing ... 
    prepare4Scroll();
    adScrolling = 4;
    adInit = true;

    var elements = "";
    for( var i = 1; i <= 4; i ++ )
        elements = elements + "<li>" + $('div#adContainer').children('ul').children('li:nth-child(' + i + ')').html() + "</li>";

    //  copy first 4 elements at the end of ul ...
    $('div#adContainer').children('ul').append(elements);

    // animate for showing next page of ad.
    var adAreaWidth = $('div#adContainer').width();
    $('div#adContainer').children('ul').animate( { left : -adAreaWidth }, 500, removeTmpAd );
}

//  next - onclick
function onNextAdClicked()
{
    if( adverCount <= 4 || adScrolling != 0 )
        return;

    // preparing ... 
    prepare4Scroll();
    adScrolling = -4;
    adInit = true;

    var elements = "";
    var adItems = $('div#adContainer').find('li').size();
    var allElements = "";
    for( var i = 3; i >= 0; i -- )
        elements = elements + "<li>" + $('div#adContainer').children('ul').children('li:nth-child(' + (adItems-i) + ')').html() + "</li>";

    //  copy last 4 elements at the first of ul ...
    allElements = $('div#adContainer').children('ul').html();
    $('div#adContainer').children('ul').html(elements+allElements);

    // animate for showing prev page of ad.
    var adAreaWidth = $('div#adContainer').width();
    $('div#adContainer').children('ul').css('left', -adAreaWidth);
    $('div#adContainer').children('ul').animate( { left : 0 }, 500, removeTmpAd);
}

//  remove ad items appended to head or tail for scrolling effect...
function removeTmpAd()
{
    var i = 0;

    if( adScrolling == 4 )
    {
        for( i = 0; i < 4; i ++ )
            $('div#adContainer').children('ul').children('li:nth-child(1)').remove();
    }
    else if( adScrolling == -4 )
    {
        var adItems = $('div#adContainer').find('li').size();
        for( i = 0; i < 4; i ++ )
            $('div#adContainer').children('ul').children('li:nth-child(' + (adItems-i) + ')').remove();
    }

    if( adScrolling != 0 )
    {
        $('div#adContainer').children('ul').css('left', 0);

        for( i = 1; i <= 4; i ++ )
            $('div#adContainer').children('ul').children('li:nth-child(' + i + ')').css("opacity", 0.5);

        for( i = 1; i <= 4; i ++ )
            $('div#adContainer').children('ul').children('li:nth-child(' + i + ')').fadeTo("slow", 1);
    }

    adScrolling = 0;
    // set click-handler
    $('div#adContainer').children('ul').children('li').click(onAdClicked);
}

/**
 *    compose html-section from ad-info.
 * 
 * @param mixed adInfo ad-info
 * @return string ad-displaying html
 */
function composeAdHtml(adInfo)
{
//  <li><a href="/00-000-0000/"><img src="/files/img/company/999/99999999/ad3.jpg" alt="ファーマルホールディング" /></a></li>
    var retHtml = "";
    if( adInfo.img == '' || adInfo.img == undefined )
        return retHtml;

    retHtml = "<li><a href=\"" + (adInfo.url != '' ? adInfo.url : '#') + "\" target=" + adInfo.target + " id=\"" + adInfo.id + "\" >";
    retHtml = retHtml + " <img src=\"" + adInfo.img + "\"";
    retHtml = retHtml + " alt=\"" + adInfo.alt + "\" /></a></li>";

    return retHtml;
}
