//Text scroller by Gianluca Corvo http://www.corvoinformatica.it

var jbscroller={
	configholder: {},

	scroll_up: function (idscroll){
		var config = jbscroller.configholder[idscroll];

		if (config.scroll_top < 0) {
			config.scroll_top += config.scroll_step;

			if (config.scroll_top > 0) config.scroll_top = 0;

			jQuery(config.idscroll).stop();
			jQuery(config.idscroll).animate({top: config.scroll_top + 'px'}, config.scroll_speed, 'linear', function(){
				if (config.scroll_top == 0) {
					jQuery(config.idbuttonup).css("opacity", 0.5);
				}
			});
			if (jQuery(config.idbuttondown).css("opacity") == 0.5) {
				jQuery(config.idbuttondown).css("opacity", 1.0);
			}
			if (config.persist){
				jbscroller.setPersistentValue(config, config.idscroll+"persist", config.scroll_top);
			}
		}
	},

	scroll_down: function (idscroll) {
		var config = jbscroller.configholder[idscroll];

		if (config.scroll_top > -config.stop_scroll) {
			config.scroll_top -= config.scroll_step;

			if (config.scroll_top <= -config.stop_scroll) config.scroll_top = -config.stop_scroll;

			jQuery(config.idscroll).stop();
			jQuery(config.idscroll).animate({top: config.scroll_top + 'px'}, config.scroll_speed, 'linear', function(){
				if (config.scroll_top == -config.stop_scroll) {
					jQuery(config.idbuttondown).css("opacity", 0.5);
				}
			});
			if (jQuery(config.idbuttonup).css("opacity") == 0.5) {
				jQuery(config.idbuttonup).css("opacity", 1.0);
			}
			if (config.persist){
				jbscroller.setPersistentValue(config, config.idscroll+"persist", config.scroll_top);
			}
		}
	},

	scroll_to: function (idscroll, top) {
		var config = jbscroller.configholder[idscroll];

		config.scroll_top = top;

		if (config.scroll_top <= -config.stop_scroll) config.scroll_top = -config.stop_scroll;
		if (config.scroll_top > 0) config.scroll_top = 0;

		jQuery(config.idscroll).stop();
		jQuery(config.idscroll).animate({top: config.scroll_top + 'px'}, config.scroll_speed, 'linear', function(){
			if (config.scroll_top == -config.stop_scroll) {
				jQuery(config.idbuttondown).css("opacity", 0.5);
				if (jQuery(config.idbuttonup).css("opacity") == 0.5) {
					jQuery(config.idbuttonup).css("opacity", 1.0);
				}
			}
			if (config.scroll_top == 0) {
				jQuery(config.idbuttonup).css("opacity", 0.5);
				if (jQuery(config.idbuttondown).css("opacity") == 0.5) {
					jQuery(config.idbuttondown).css("opacity", 1.0);
				}
			}
		});
		if (config.persist){
			jbscroller.setPersistentValue(config, config.idscroll+"persist", config.scroll_top);
		}
	},

	getCookie:function(Name){ 
		var re=new RegExp(Name+"=[^;]+", "i"); //construct RE to search for target name/value pair
		if (document.cookie.match(re)) //if cookie found
			return document.cookie.match(re)[0].split("=")[1] //return its value
		return null
	},

	setCookie:function(name, value){
		document.cookie = name+"="+value+"; path=/";
	},

	getPersistentValue:function(config, Name){
		if (config.persistentMethod == 'cookie') {
			return(jbscroller.getCookie(Name));
		}
		else if (config.persistentMethod == 'custom') {
			return(config.persistentMethodGet(Name));
		}

		return(null);
	},

	setPersistentValue:function(config, name, value){
		if (config.persistentMethod == 'cookie') {
			return(jbscroller.setCookie(name, value));
		}
		else if (config.persistentMethod == 'custom') {
			return(config.persistentMethodSet(name, value));
		}

		return(null);
	},

	setup: function(config){
		jQuery(document).ready(function($){

			config.persistentMethod = ((typeof config.persistentMethod == "undefined") ? 'cookie' : config.persistentMethod);
			config.scroll_step = ((typeof config.scroll_step == "undefined") ? 60 : config.scroll_step);
			config.scroll_speed = ((typeof config.scroll_speed == "undefined") ? 0 : config.scroll_speed);
			config.scroll_txt_height = parseInt(jQuery(config.idscroll).get(0).offsetHeight);
			config.view_height = parseInt(jQuery(config.idview).get(0).offsetHeight);
			config.stop_scroll = config.scroll_txt_height - config.view_height;

			if (config.stop_scroll <= 0) {
				jQuery(config.idbuttonup).css("visibility", "hidden");
				jQuery(config.idbuttondown).css("visibility", "hidden");
			}
			else {
		/*
				$(config.idscroll).bind('mousewheel', function(event, delta) {
					if (delta > 0) {
						jbscroller.scroll_up(config.idscroll);
					}
					else {
						jbscroller.scroll_down(config.idscroll);
					}
				});
		*/
				jQuery(config.idbuttonup).click(
					function() {
						jbscroller.scroll_up(config.idscroll);
					}
				);

				jQuery(config.idbuttondown).click(
					function() {
						jbscroller.scroll_down(config.idscroll);
					}
				);
			}

			config.scroll_top = (config.persist) ? parseInt(jbscroller.getPersistentValue(config, config.idscroll+"persist")) : 0;
			config.scroll_top = (((typeof config.scroll_top == "undefined") || isNaN(config.scroll_top)) ? 0 : config.scroll_top);

			if (config.scroll_top <= -config.stop_scroll) config.scroll_top = -config.stop_scroll;
			if (config.scroll_top > 0) config.scroll_top = 0;

			if (config.scroll_top == 0) jQuery(config.idbuttonup).css("opacity", 0.5);
			if (config.scroll_top == -config.stop_scroll) jQuery(config.idbuttondown).css("opacity", 0.5);

			jbscroller.configholder[config.idscroll] = config;

			if (config.scroll_top) {
				jbscroller.scroll_to(config.idscroll, config.scroll_top);
			}
		});

		jQuery(window).bind('unload', function(){ //clean up
			jQuery.each(config, function(ai, oi){
				oi=null;
			});
			config=null;
		});
	}
}