﻿(function() {

	jQuery.fn.rhNav = function(settings) {
		var config = {
			'imghovertag': 'srch'
			, 'imgdowntag': 'srcd'
			, 'linkdowntag': 'classd'
			, 'exacttag': 'downexact'
			, 'starttag': 'downstart'
			, 'usehreftag': 'matchhref'
			, 'blinktag': 'blink'
			, 'blinkdelaytag': 'blinktimer'
			, 'blinkexptimetag': 'blinkexptime'
			, 'blinkcounttag': 'blinkcount'
			, 'blinksettag': 'blinkset'
			, 'blinkpagecounttag': 'blinkpagecount'
		};

		var prefix = "_rhNv1";

		if (settings) jQuery.extend(config, settings);

		this.each(function() {
			var obj = jQuery(this);
			var l = obj.find("img");
			var h = obj.attr("href");
			var exact = obj.attr(config.exacttag);
			var start = obj.attr(config.starttag);
			var usehref = obj.attr(config.usehreftag);
			var bDown = false;
			var i, ss;
			var date = new Date();

			if (start) {
				ss = start.split(",");
				for (i = 0; i < ss.length; i++) {
					bDown |= (location.pathname.match("^" + ss[i]) == ss[i]);
				}
			}

			if (exact) {
				ss = exact.split(",");
				for (i = 0; i < ss.length; i++) {
					bDown |= (location.pathname == ss[i]);
				}
			}

			if (usehref) bDown = (location.pathname == h);

			if (l.length > 0) {
				l.each(function() {
					var i = jQuery(this);
					var s = i.attr("src");
					var h = i.attr(config.imghovertag);
					var d = i.attr(config.imgdowntag);
					var blink = i.attr(config.blinktag);
					var blinktimer = parseInt(i.attr(config.blinkdelaytag));
					var blinkexpire = new Date(i.attr(config.blinkexptimetag));
					var blinkcount = parseInt(i.attr(config.blinkcounttag));
					var blinkset = i.attr(config.blinksettag);
					var blinkpagecount = parseInt(i.attr(config.blinkpagecounttag));

					if (bDown && d) {
						s = d;
						i.attr("src", d);
					}

					if (blink && !bDown) {
						jQuery("<img src='" + blink + "' />");
						if (blink.length > 0) {
							if (!blinktimer) blinktimer = 500;
							if (!blinkcount) blinkcount = -1;
							if (!blinkpagecount) blinkpagecount = -1;
							if ((date <= blinkexpire) || (isNaN(blinkexpire))) {
								i.attr(prefix + config.blinkcounttag, "0");
								var bpc = UpdateBlinkSet(blinkset);
								if (bpc <= blinkpagecount) setTimeout(function() { navimgBlink(i, s, blink, blinktimer, blinkcount) }, blinktimer);
							}
						}
					}

					if (!h) return;
					jQuery("<img src='" + h + "' />");
					jQuery(this).hover(function() { i.attr("src", h); }, function() { i.attr("src", s); });
				});
			}
			else {

				var d = obj.attr(config.linkdowntag);
				var blink = obj.attr(config.blinktag);
				var blinktimer = parseInt(obj.attr(config.blinkdelaytag));
				var blinkexpire = new Date(obj.attr(config.blinkexptimetag));
				var blinkcount = parseInt(obj.attr(config.blinkcounttag));
				var blinkset = obj.attr(config.blinksettag);
				var blinkpagecount = parseInt(obj.attr(config.blinkpagecounttag));

				if (!d) return;
				if (bDown) obj.addClass(d);

				if (blink && !bDown) {
					if (blink.length > 0) {
						if (!blinktimer) blinktimer = 500;
						if (!blinkcount) blinkcount = -1;
						if (!blinkpagecount) blinkpagecount = -1;
						if ((date <= blinkexpire) || (isNaN(blinkexpire))) {
							obj.attr(prefix + config.blinkcounttag, "0");
							var bpc = UpdateBlinkSet(blinkset);
							if (bpc <= blinkpagecount) setTimeout(function() { navlinkBlink(obj, blink, blinktimer, blinkcount) }, blinktimer);
						}
					}
				}
			}
		});

		function navimgBlink(object, imgBlinkFrom, imgBlinkTo, blinktimer, blinkcount) {
			var s = object.attr("src");
			var c = parseInt(object.attr(prefix + config.blinkcounttag));
			var bsc;

			if (s == imgBlinkFrom) {
				object.attr("src", imgBlinkTo);
				c = -2;
			}
			else {
				object.attr("src", imgBlinkFrom);
				if (blinkcount == -1) c = -2; else c++;
				object.attr(prefix + config.blinkcounttag, c)
			}

			if (c < blinkcount) setTimeout(function() { navimgBlink(object, imgBlinkFrom, imgBlinkTo, blinktimer, blinkcount) }, blinktimer);
		};

		function navlinkBlink(object, BlinkTo, blinktimer, blinkcount) {
			var c = parseInt(object.attr(prefix + config.blinkcounttag));

			if (!object.hasClass(BlinkTo)) {
				object.addClass(BlinkTo);
				c = -2;
			}
			else {
				object.removeClass(BlinkTo);
				if (blinkcount == -1) c = -2; else c++;
				object.attr(prefix + config.blinkcounttag, c)
			}

			if (c < blinkcount) setTimeout(function() { navlinkBlink(object, BlinkTo, blinktimer, blinkcount) }, blinktimer);
		};

		function UpdateBlinkSet(blinkset) {
			var c = GetBlinkSetCount(blinkset);
			if (c == -2) return -2;

			if ((!c) || (isNaN(c))) c = 0;
			c++;
			jQuery.cookie(prefix + blinkset, c, { path: '/' })
			return c;
		}

		function GetBlinkSetCount(blinkset) {
			if (!jQuery.cookie) return -2;
			if (!blinkset) return -2;
			if (blinkset.length == 0) return -2;
			var c = parseInt(jQuery.cookie(prefix + blinkset));
			if ((!c) || (isNaN(c))) c = 0;
			return c;
		}

		return this;
	};


})(jQuery);

