/*
 * JTicker 0.5 Beta
 * By Jason Levine (http://www.jasons-toolbox.com)
 * A ticker plugin for the jquery library.
 */
jQuery.JTickerObjArray = new Array();
jQuery.fn.jticker = function(passedOptions) {
	var options = {
	    TickerID: "",
		delay: 5000,
		newwindow: true,
		url: "tickerdata.xml",
		transition: "slide",
		speed: "slow",
		contentcounter: -1,
		ArrayIndex: -1,
		dataXML: {
		},
		timerid: -1,
		setRSS: function(ArrayIndex) {
			jQuery("#" + options.TickerID).hide();
			// Load Data
			jQuery.get(options.url, function(data){
				data = jQuery.trim(data);
				options.dataXML = options.toDOM(data);
				if(options.dataXML) {
					// options.contentcounter = -1;
					options.FillSlide(0);
				}
			});
		},

		toDOM: function(xmlString) {
			var xmlDoc;
			if (document.implementation.createDocument){
			   // Mozilla, create a new DOMParser
			   var parser = new DOMParser();
			   xmlDoc = parser.parseFromString(xmlString, "text/xml");
			} else if (window.ActiveXObject){
			   // Internet Explorer, create a new XML document using ActiveX
			   // and use loadXML as a DOM parser.
			   xmlDoc = new ActiveXObject("Microsoft.XMLDOM")
			   xmlDoc.async="false";
			   xmlDoc.loadXML(xmlString);
			}

			return xmlDoc.documentElement;
		},
		FillSlide: function(i) {
			var Item, TickerHTML, Title, URL, Desc;
			jQuery("#" + options.TickerID).empty();

			var feedSize = jQuery("item", options.dataXML).length;

			if(typeof i == 'undefined') {
				options.contentcounter++;
			} else {
				if(i >= 0) {
					options.contentcounter = i;
				} else {
					options.contentcounter = feedSize-1;
				}
			}

			if (options.contentcounter == feedSize) {
				options.contentcounter = 0;
			}
			Item = jQuery("item", options.dataXML).get(options.contentcounter);
			Title = jQuery("title", Item).text();
			URL = jQuery("link", Item).text();
			Desc = jQuery("description", Item).text();
			var buttNextPrev = "<span class='JTickerButtons'><a href='#' onclick='jQuery.JTickerObjArray["+options.ArrayIndex+"].FillSlide("+(options.contentcounter-1)+"); return false;'>&#171;</a>&nbsp;&nbsp;<a href='#' onclick='jQuery.JTickerObjArray["+options.ArrayIndex+"].FillSlide("+(options.contentcounter+1)+"); return false;'>&#187;</a></span>&nbsp;&nbsp;";
			TickerHTML = "<div class=\"JTickerTitle\">"+buttNextPrev+"<a href=\"" + URL + "\""
			if (options.newwindow) {
				TickerHTML += " target=\"_blank\""
			}
			TickerHTML += ">" + Title + "</a></div>";// "<div>" + Desc + "</div>";
			jQuery("#" + options.TickerID).append(TickerHTML);
			options.EnterSlide();
		},
	    ExitSlide: function() {

			//if(jQuery.browser.safari) {
				setTimeout(function(){options.FillSlide();}, 500);
				return;
			//}
			/*
			if (options.contentcounter > -1) {
				clearTimeout(options.timerid);
				switch (options.transition.toLowerCase()) {
					case "slide":
						jQuery("#" + options.TickerID).slideUp(
							options.speed,
							options.ExitSlideStep2()
						);
						break;
					default:
						jQuery("#" + options.TickerID).fadeOut(
							options.speed,
							options.ExitSlideStep2()
						);
						break;
				}
			} else {
				options.ExitSlideStep2(ArrayIndex);
			}*/
	    },
	    ExitSlideStep2: function() {
			var tempid;

			tempid = setTimeout(function(){options.FillSlide();}, 500); //setTimeout("jQuery.JTickerObjArray[" + options.ArrayIndex + "].FillSlide();", 500);
		},
	    EnterSlide: function() {

	    	//if(jQuery.browser.safari) { // safari 因為無法執行 fadeIn 因此直接 show 出！(why!? [benx - 20070815])
	    		jQuery("#" + options.TickerID).show();
				options.timerid = setTimeout(function(){options.FillSlide();}, options.delay); //setTimeout("jQuery.JTickerObjArray[" + options.ArrayIndex + "].FillSlide();", options.delay);
	    		return;
	    	//}
			/*
			var ArrayIndex = options.ArrayIndex;
			switch (options.transition.toLowerCase()) {
				case "slide":
					jQuery("#" + options.TickerID).slideDown(
						options.speed,
						options.EnterSlideStep2()
					);
					break;
				default:
					jQuery("#" + options.TickerID).fadeIn(
						options.speed,
						options.EnterSlideStep2()
					);
					break;
			}*/
	    },
	    EnterSlideStep2: function() {
			options.timerid = setTimeout(function(){options.ExitSlide();}, options.delay); //setTimeout("jQuery.JTickerObjArray[" + options.ArrayIndex + "].ExitSlide();", options.delay);
		}
	};
	if (passedOptions) {
		jQuery.extend(options, passedOptions);
	}

	return this.each(function(){
		options.TickerID = this.id;
		jQuery.JTickerObjArray.push(options);
		options.ArrayIndex = jQuery.JTickerObjArray.length - 1;
		jQuery("#" + options.TickerID).hover(function() {
			clearTimeout(options.timerid);
		}, function() {
			options.timerid = setTimeout(function(){options.ExitSlide();}, options.delay); //setTimeout("jQuery.JTickerObjArray[" + options.ArrayIndex + "].ExitSlide();", options.delay);
		});
		jQuery.JTickerObjArray[options.ArrayIndex].setRSS(options.ArrayIndex);
	});
};