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

		// default configuration properties
		var defaults = {
			speed: 			800
		};

		var options = $.extend(defaults, options);

		return this.each(function() {
			var mainObj = $(this);
			var s = $("dl", mainObj).length;
                        var childObjects = $("dl", mainObj);
			var w = mainObj.width();
			var h = mainObj.height();
                        var startTimeOut = false;
                        var animateTimeOut = false;
                        var iteration = 20;
                        var currentIteration=0;
			var t = 0;
                        var currentObject = '';
                        var currentProcent = 0;
                        var heightSumm = 0;
                        var heightMax = 0;
                        var itemHeight = 0;

                        function sizeThis(){
                            for(i=0; i<s; i++){
                                var selectedObj = $(childObjects[i]);
                                if(heightMax<selectedObj[0].ddObject.height()){
                                    heightMax = selectedObj[0].ddObject.height()+50;
                                }
                                heightSumm += selectedObj[0].aObject.height()+14;
                            }
                            for(i=0; i<s; i++){
                                var selectedObj = $(childObjects[i]);
                                selectedObj[0].oldDDHeight = heightMax;
                            }
                            currentObject[0].ddObject.css('height', heightMax);
                            mainObj.css('height', heightMax + heightSumm);
                            itemHeight = heightMax;
                        }
                        function reSizeThis(){
                            heightSumm = 0;
                            heightMax = 0;
                            for(i=0; i<s; i++){
                                var selectedObj = $(childObjects[i]);
                                if(heightMax<selectedObj[0].ddObject.height()){
                                    heightMax = selectedObj[0].ddObject.height();
                                }
                                heightSumm += selectedObj[0].aObject.height()+14;
                            }
                            for(i=0; i<s; i++){
                                var selectedObj = $(childObjects[i]);
                                selectedObj[0].oldDDHeight = heightMax;
                            }
                            currentObject[0].ddObject.css('height', heightMax);
                            mainObj.css('height', heightMax + heightSumm);
                            itemHeight = heightMax;
                        }

                        for(i=0; i<s; i++){
                            var selectedObj = $(childObjects[i]);
                            ddObject = $('dd', selectedObj);
                            aObject = $('dt > a', selectedObj);

                            selectedObj[0].ddObject = ddObject;
                            ddObject.css('overflow-y', 'hidden');
                            selectedObj[0].oldDDHeight = ddObject.height();
                            selectedObj[0].aObject = aObject;
                            if(i!=0){
                                ddObject.height(0);
                                ddObject.addClass('hidden');
                                aObject.addClass('hidden');
                                aObject.bind('mouseover',
                                        function (){
                                            animate($($($(this).parent()).parent()));
                                        }
                                );
                            }else{
                                currentObject = $(childObjects[i]);
                            }
                        }
                        sizeThis();
                        $(window).resize(function(){
                            reSizeThis();
                        });
                        function animate(obj){
                            if(!animateTimeOut){
                                clearTimeout(startTimeOut);
                                obj[0].aObject.bind('mouseout',
                                    function (){
                                        clearTimeout(startTimeOut);
                                    }
                                );
                                startTimeOut = setTimeout(function(){
                                    currentObject[0].aObject.addClass('hidden');
                                    obj[0].aObject.removeClass('hidden');
                                    _realAnimate(obj, currentObject);
                                }, 200);
                            }
                        }
                        function _realAnimate(newObject, oldObject){

                                if((oldObject[0].ddObject.height()-10)>0){
                                    oldObject[0].ddObject.height(oldObject[0].ddObject.height()-10);
                                }else{
                                    oldObject[0].ddObject.height(0);
                                }

                                if( (newObject[0].ddObject.height()+10)<itemHeight){
                                    newObject[0].ddObject.height(newObject[0].ddObject.height()+10);
                                }else{
                                    newObject[0].ddObject.height(itemHeight);
                                }

                                if( newObject[0].ddObject.height()<itemHeight||
                                    (oldObject[0].ddObject.height()-10)>0){
                                    animateTimeOut = setTimeout(
                                        function(){
                                            _realAnimate(newObject, oldObject);
                                        },
                                    30);
                                }else{
                                    newObject[0].aObject.unbind('mouseover');
                                    newObject[0].aObject.unbind('mouseout');
                                    currentObject[0].aObject.bind('mouseover',
                                            function (){
                                                animate($($($(this).parent()).parent()));
                                            }
                                    );
                                    currentObject = newObject;
                                    animateTimeOut = false;
                                }
                        }
		});

	};

})(jQuery);
