function html_entity_decode(str)
{
    try
	{
		var  tarea=document.createElement('textarea');
		tarea.innerHTML = str; return tarea.value;
		tarea.parentNode.removeChild(tarea);
	}
	catch(e)
	{
		//for IE add <div id="htmlconverter" style="display:none;"></div> to the page
		document.getElementById("htmlconverter").innerHTML = '<textarea id="innerConverter">' + str + '</textarea>';
		var content = document.getElementById("innerConverter").value;
		document.getElementById("htmlconverter").innerHTML = "";
		return content;
	}
}

(function($) {
   
    $.fn.scrollbox = function(options) {

            var settings = $.extend({
                'autoplay': false,
                'pagination': false,
                'simple_pagination': false,
                'simple_pagination_text': ['', ''],
                'pagination_of': false,
                'animate': true,
                'fading': false,
                'animation_speed': 500,
                'slideshow': true,
                'play_speed': 5000,
                'play_button': ['slideshow', 'stop'],
                'mouse_functions': [false, false],
                'description': false,
                'leading_zeros': false,
                'paginate_by': 1
            }, options)

            var interval = null
            var scrollbox = this
            
            this.each(function() {

                var obj = $(this)
                scrollbox.obj = obj
                var items = $(".scrollbox-item", obj)
                var item = items[0]
                scrollbox.items_count = Math.ceil(items.length / settings.paginate_by)
                var item_width = ($(item).width() + parseFloat($(item).css('padding-left').replace(/px/, '')) + parseFloat($(item).css('padding-right').replace(/px/, ''))) * settings.paginate_by
                var scrollbox_position = 0
//                 this.interval = null
                var playing = 0
//               alert(item_width)
                
                obj
                    .addClass('js')
                    .css({
                        'width': (scrollbox.items_count * item_width) + 'px'
                    })
                    .wrap(
                        $("<div />")
                            .addClass('scrollbox-inner')
                        )

                obj.parent().wrap(
                    $("<div />")
                        .addClass('scrollbox-wrapper')
                )

                obj.parent().parent().append(
                    $("<nav />")
                        .addClass('scrollbox-pagination')
                )
                  
                if(settings.description) {
                    obj.parent().parent().prepend(
                        $("<h2 />")
                            .addClass('scrollbox-item-title')
                            .text($(item).attr('alt'))
                    )
                }

                if(settings.fading) {
                    zindex = 1000 + scrollbox.items_count
                    for(var i = 0; i < scrollbox.items_count; i++) {
                        obj.find(".scrollbox-item:eq(" + i + ")").css('zIndex', zindex)
                        zindex = zindex - 1
                    }
                }

                // If pagination {
                if(settings.pagination && scrollbox.items_count > 1) {

                    for(var i = 1; i <= scrollbox.items_count; i++) {
                        var nr = i
                        if(settings.leading_zeros) {
                            nr = '0' + i
                        }
                        obj.parent().parent().find(".scrollbox-pagination")
                            .append(
                                $("<a />")
                                    .attr({
                                        'href': '',
                                        'rel': i
                                    })
                                    .addClass('scrollbox-pagination-item')
                                    .text(nr)
                                    .append(
                                        $("<span />")
                                            .addClass('replace')
                                    )
                            )
                            .append(' ')
                    }

                    obj.parent().parent().find(".scrollbox-pagination-item").click(function() {
                        var nr = $(this).attr('rel')
                        scrollbox.scroll(obj, nr)
                        return false
                    })

                    $(".scrollbox-pagination-item:eq(0)").addClass('selected')
                    
                }
                // } If pagination
                            
                // If simple pagination {
                if(settings.simple_pagination && scrollbox.items_count > 1) {
                    
                    obj.parent().parent().find(".scrollbox-pagination")
                        .append(
                            $("<a />")
                                .attr({
                                    'href': ''
                                })
                                .text(html_entity_decode(settings.simple_pagination_text[0]))
                                .addClass('scrollbox-simple-pagination-item prev')
                                .append(
                                    $("<span />")
                                        .addClass('replace')
                                )
                        )
                    if(settings.pagination_of) {
                        obj.parent().parent().find(".scrollbox-pagination")
                            .append(
                                $("<span />")
                                    .text('1 ' + settings.pagination_of + ' ' + scrollbox.items_count)
                                    .addClass('scrollbox-pagination-of')
                            )
                    }
                    obj.parent().parent().find(".scrollbox-pagination")
                        .append(
                            $("<a />")
                                .attr({
                                    'href': ''
                                })
                                .text(html_entity_decode(settings.simple_pagination_text[1]))
                                .addClass('scrollbox-simple-pagination-item next')
                                .append(
                                    $("<span />")
                                        .addClass('replace')
                                )
                        )
                    
                        obj.parent().parent().find(".scrollbox-simple-pagination-item").click(function() {
                            if($(this).hasClass('prev')) {
                                scrollbox.scroll(obj, undefined, true)
                            } else {
                                scrollbox.scroll(obj)
                            }
                            return false
                        })
                        
                }
                // } If simple pagination

                // If mouse functions {
                if(settings.mouse_functions[0] && settings.mouse_functions[1]) {
                    obj.parent().parent()
                        .mouseover(function() {
                            settings.mouse_functions[0](obj)
                        })
                        .mouseout(function() {
                            settings.mouse_functions[1](obj)
                        })
                }
                // } If mouse functions

                // Play/pause button {
                if(settings.slideshow) {
                    obj.parent().parent().find(".scrollbox-pagination")
                        .append(
                            $("<a />")
                                .attr({
                                    'href': ''
                                })
                                .addClass('scrollbox-play-button')
                                .text(settings.play_button[0])
                        )
                }

                obj.parent().parent().find(".scrollbox-play-button").toggle(function() {
                    if(settings.autoplay) {
                        scrollbox.pause(obj)
                        $(this).text(settings.play_button[0])
                    } else {
                        scrollbox.play(obj)
                        $(this).text(settings.play_button[1])
                    }
                }, function() {
                    if(settings.autoplay) {
                        scrollbox.play(obj)
                        $(this).text(settings.play_button[1])
                    } else {
                        scrollbox.pause(obj)
                        $(this).text(settings.play_button[0])
                    }
                })
                // } Play/pause button

                scrollbox.scroll = function(obj, nr, back) {
                    if(nr == undefined) {
                        nr = (-(scrollbox_position) / item_width + 2)
                        if(nr > scrollbox.items_count) {
                            nr = 1
                        }
                        if(back) {
                            nr = (-(scrollbox_position) / item_width)
                            if(nr == 0) {
                                nr = scrollbox.items_count
                            }
                        }
                    }
                    scrollbox_position = -((nr * item_width) - item_width)
                    if(settings.animate) {
                        obj.stop().animate({
                            'marginLeft': scrollbox_position + 'px'
                        }, settings.animation_speed)
                    } else {
                        if(settings.fading) {
                            obj.find(".scrollbox-item").css({
                                'zIndex': 1000
                            })
                            queue = nr - 1
                            queue_prev = queue - 1
                            if(queue == 0) {
                                queue_prev = scrollbox.items_count - 1
                            }
                            obj.find(".scrollbox-item:eq(" + queue_prev + ")").css('zIndex', (1000 + scrollbox.items_count))
                            obj.find(".scrollbox-item:eq(" + queue + ")")
                                .css({
                                    'zIndex': (1000 + scrollbox.items_count + 1),
                                    'opacity': 0
                                })
                            if($.support.opacity) {
                                obj.find(".scrollbox-item:eq(" + queue + ")")
                                    .animate({
                                        'opacity': 1
                                    }, settings.animation_speed)
                            } else {
                                obj.find(".scrollbox-item:eq(" + queue + ")")
                                    .css({
                                        'opacity': ''
                                    })
                            }
                        } else {
                            obj.css({
                                'marginLeft': scrollbox_position + 'px'
                            })
                        }
                    }
                    if(settings.pagination) {
                        obj.parent().parent().find(".scrollbox-pagination-item").removeClass('selected')
                        obj.parent().parent().find(".scrollbox-pagination-item[rel=" + nr + "]").addClass('selected')
                    }
                    if(settings.description) {
                        obj.parent().parent().find(".scrollbox-item-title").text($(".scrollbox-item:eq(" + (nr - 1) + ")").attr('alt'))
                    }
                    if(settings.pagination_of) {
                        obj.parent().parent().find(".scrollbox-pagination-of").text(nr + ' ' + settings.pagination_of + ' ' + scrollbox.items_count)
                    }
                }

                scrollbox.play = function(obj) {
                    scrollbox.interval = setInterval(function() {
                        if(obj == undefined) {
                            obj = scrollbox.obj
                        }
                        scrollbox.scroll(obj)
                    }, settings.play_speed)
                    playing = 1
                }

                scrollbox.pause = function() {
                    clearInterval(scrollbox.interval)
                    playing = 0
                }

                if(settings.autoplay) {
                    scrollbox.play(obj)
                    obj.parent().parent().find(".scrollbox-play-button").text(settings.play_button[1])
                }

            })
            
            return this

        }

})(jQuery)

