/**
 * Autor: Grzegorz Zawadzki  
 * 
 * iSlideShow
 *
 * Prezentacja grafiki jako js
 *      
 * Infoman S.C. 2011  
 */
function iSlideShow(config)
{
    var _id = config.div_id;
    var _data = config.data;
    var _template = config.template;
    var _template_img = config.template_img;
    var _blank_img = config.blank;
    var _mod_id = makeid();
    var _maxWidth = 714;
    var _maxScrolls = 0;
    var _curScroll = 1;
    var _active = 0;
    var num_pass=0; 
    var _bStartup = true;
    
    /**
     * Zamienia wszystkie wystąpienia 'stringToFind' na 'stringToReplace' w 'Source'
     *
     * @param   źródło
     * @param   szukany string
     * @param   string do podmiany
     */
    function tpl_replace(Source,stringToFind,stringToReplace)
    {
        var temp = Source, index = temp.indexOf(stringToFind);

        while(index != -1)
        {
            temp = temp.replace(stringToFind,stringToReplace);
            index = temp.indexOf(stringToFind);
        }
        return temp;
    }
    /**
     * Przetwarza zewnętrzny szablon
     *
     * @param   szablon
     * @param   dane do wstawienia
     */
    function tpl_parse(template, data)
    {    
        var tpl = template;            
        $('#itmp').html('');
        if( data !== undefined )
        {
            jQuery.each(data, function(i, val) {                
                tpl = tpl_replace(tpl, '.'+i+'.', val);
            });
        }
        return tpl;
    }
    
    /**
     * Losowe ID
     */
    function makeid()
    {
        var text = "", possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

        for( var i=0; i < 5; i++ )
            text += possible.charAt(Math.floor(Math.random() * possible.length));

        return text;
    }
    
    /**
     * SCROLL !!!
     */
    function DoScroll(id, modifier)
    {  
        num_pass++;

        if( modifier > 0 && _curScroll <= 1  ) {return;}        
        if( modifier < 0 && _curScroll >= _maxScrolls ) {return;}
        
        if( modifier > 0)  _curScroll--;
        else _curScroll++;

        var Val = $(id).css("margin-left");
        Val = (Val == 'auto') ? 0: Val;
        var Val2 = parseInt(Val) + modifier;

        $(id).animate( {marginLeft: Val2}, {duration: config.ScrollTime, easing: 'easeOutBounce'} );                
    }
    
    function makeScrollFor(direction)
    {       
        $('#ih_'+_mod_id+' .is_'+direction).click(function()
        {            
            var modifier = (direction == 'left') ? 1 : -1;
            DoScroll('#itb_'+_mod_id, (_maxWidth+32)*modifier);
        });                        
    }
    
    //***STARTUP
    
    $('#itmp').load(_template_img, function(response, status, xhr) {
        _template_img = $('#itmp').html();
        $('#itmp').load(_template, function(response, status, xhr) {
            _template = $('#itmp').html();
            startup();
        });
    });
    
    function activate(obj)
    {        
        
        $('#im_'+_mod_id).height($('.is_main').height());
        $('.is_main').fadeOut('fast', function()
        {
            _active = $(obj).attr('id').replace('load_info-','');    
            
            $('.is_title').html('');

            var tpl = '';
            if( _data[_active].big.indexOf('.swf') == -1 )
                tpl += '<center><img src="'+_data[_active].big+'" alt="'+_data[_active].title.replace('"', '')+'" style="margin-top: 55px; max-width: '+_maxWidth+'px; margin-bottom: 15px;" /></center>';
            else
                tpl += '<center><div style="height: 55px; width: 100%;">&nbsp;</div><br/><div id="ic_flash_hldr'+_mod_id+'" style="width: 10px; height: 10px;"><div id="ic_flash'+_mod_id+'"></div></div><div style="height: 15px;">&nbsp;</div></center>';
            
            tpl += '<table border="0" cellspacing="0" cellpadding="0"><tr><td style="width: 19px;"><div class="ic_left_field"></div></td>';
            tpl += '<td class="ic_right_field">';
            tpl += '<span class="f_14pxArial">'+_data[_active].title+'</span><div style="height: 6px; width: 693px;"></div>'+_data[_active].description;
            tpl += '</td></tr></table>';                        

            $('#ir_'+_mod_id+' .is_main').html(tpl);       
            
            if( _data[_active].big.indexOf('.swf') != -1 )
                swfobject.embedSWF(_data[_active].big, "ic_flash"+_mod_id, '100%', '100%', "9.0.0","expressInstall.swf", {}, {wmode: "transparent"}, {});
            
            $('.is_img').removeClass('is_img_active');
            $('.is_img').addClass('is_img_inactive');
            $(obj).find("img").removeClass('is_img_inactive');
            $(obj).find("img").addClass('is_img_active');

            $('.is_img_mark').removeClass('is_img_active_mark');
            $('.is_img_mark').addClass('is_img_inactive_mark');
            $(obj).find(".is_img_mark").removeClass('is_img_inactive_mark');
            $(obj).find(".is_img_mark").addClass('is_img_active_mark');
            $('.is_main').fadeIn('fast', function(){  
                $('#im_'+_mod_id).animate({height: $('.is_main').height()+'px'}, 100, function(){
                    if( !_bStartup )
                        $('html,body').animate({ scrollTop: $('#itb_'+_mod_id).offset().top });​
                    else
                        _bStartup = false;
                });                
            });
        });             
    }
    
    function RollOver(obj)
    {
        $(obj).hover(
            function()
            {
                $(this).css('background-image', $(this).css('background-image').replace("_off","_on"));                
            },
            function()
            {
                $(this).css('background-image', $(this).css('background-image').replace("_on","_off"));
            });
    }
    
    function startup()
    {
        var img_html = '<table id="itb_'+_mod_id+'" border="0" cellspacing="0" cellpadding="0"><tr>';
        var steps = 0, iterations = 0;
        
        for(var i=0; i<_data.length; i++)
        {
            if( steps >= 9 ){steps = 0;iterations++;}            
            steps++;
            
            var prz_align = ( steps > 5 ) ? 'right' : 'left';
            
            var template_imgs = 
            {
                prz_id: i,
                prz_title: _data[i].title,
                prz_min: _data[i].thumb+'?'+makeid(),
                prz_align: prz_align
            };
            
            img_html += '<td>'+tpl_parse(_template_img, template_imgs)+'</td>';
            
            if( i < _data.length-1 )
                img_html += '<td style="width: 30px;"><img src="'+_blank_img+'" /></td>';
        }
        
        img_html += '</tr></table>';
        var template_val = {
            mod_id: _mod_id,
            images: img_html
        };
        var result = tpl_parse(_template, template_val);    
        $('#'+_id).html(result);
        
        _maxScrolls =  Math.ceil($('#itb_'+_mod_id).outerWidth()/_maxWidth);

        /**
         * WŁĄCZA SCROLA ITP
         */
        makeScrollFor('left');
        makeScrollFor('right');    
        $('.is_item').click(function(){activate(this);});    
        $('.is_item :first').click();   

        $('.ism_left').click(function()
        {
            if( _active <= 0 )
                return;
            
            _active--;
            $('#load_info-'+_active).click();
            if( _curScroll > Math.ceil((_active+1)/9) ) $('.is_left').click();            
        });
        
        $('.ism_right').click(function()
        {
            if( _active >= _data.length-1 )
                return;
            
            _active++;
            $('#load_info-'+_active).click();
            if( Math.ceil((_active+1)/9) > _curScroll ) $('.is_right').click();
        });
          
        RollOver(".is_left");
        RollOver(".is_right");
        RollOver(".ism_left");
        RollOver(".ism_right");
        
        $('.is_img').hover(function(){
            
            if( $(this).hasClass('is_img_active') )
                return;
            
            var lid = $(this).attr('id');
            lid = lid.replace('img_info-','');
            $('.is_title').html('');
            $('#title_info-'+lid).html(_data[lid].title);
            lid = ( lid > 8 ) ? lid - 9 : lid;
           
            if( lid > 5 )
            {
                var wdh = $('#title_info-'+lid).width() - parseInt(50);
                if( wdh > 0 && $('#title_info-'+lid).attr('rel') != 'no_move' )
                {
                    wdh += parseInt($('#title_info-'+lid).css('right'));
                    $('#title_info-'+lid).css('right', wdh+'px');
                    $('#title_info-'+lid).attr('rel', 'no_move');
                }
            }
            $(this).fadeTo( 100, 1.0 );            
        }, function(){
            $('.is_title').html('');
            if( !$(this).hasClass('is_img_active') )
                $(this).fadeTo( 100, 0.4, 'swing' );
        });        
    }
                
    return {
        set_flashRes: function( flash_size ){
            var sizes = flash_size.split(',');            
            $('#ic_flash_hldr'+_mod_id).css('width', sizes[0]+'px');
            $('#ic_flash_hldr'+_mod_id).css('height', sizes[1]+'px');
        }
    }
}
