var sfNav = new Class({
	Implements: Options,
	pn: Class.empty,
	sn: Class.empty,
	navtimer: false,
	options: {
		closeDelay: 400,
		navonClass: 'navon',
		offsetElement: Class.empty,
		offPosition: -999,
		skipPrimaryClass: 'nosub',
		titlePrefix: '',
		pProp: 'rel',
		sProp: 'id'
	},
	initialize: function(primaryNav, subNav, options) {
		this.pn = primaryNav;
		this.sn = subNav;
		this.setOptions(options);
		this.pn.each(function(el) {
			if (el.getProperty(this.options.pProp)>'' && !el.hasClass('nosub')) {
				el.addEvent('mouseover', this.navon.pass(el.getProperty(this.options.pProp), this));
				el.addEvent('mouseout', this.navout.bind(this));
			} else {
				el.addEvent('mouseover', this.navoff.bind(this));
			}
		}, this);
		this.sn.each(function(el) {
			el.addEvent('mouseenter', this.navon.pass(el.getProperty(this.options.sProp), this));
			el.addEvent('mouseleave', this.navout.bind(this));
		}, this);
	},
	navon: function(sel) {
		var lp = this.options.offPosition;
		if (this.navtimer) {
			$clear(this.navtimer);
			this.navtimer = false;
		}
		if (sel.search(this.options.titlePrefix)==0) sel = sel.substring(this.options.titlePrefix.length);
		this.pn.each(function(el) {
			if (el.getProperty(this.options.pProp)==sel) {
				if (this.options.offsetElement) lp = el.getCoordinates().left.toInt() - this.options.offsetElement.getCoordinates().left.toInt();
				else lp = el.getCoordinates().left.toInt();
				el.addClass(this.options.navonClass);
			} else {
				el.removeClass(this.options.navonClass);
			}
		}, this);
		sel = this.options.titlePrefix + sel;
		this.sn.each(function(el) {
			if (el.getProperty(this.options.sProp)==sel) {
				if (lp>=0) el.setStyle('left', lp + 'px');
			} else {
				el.setStyle('left', this.options.offPosition + 'px');
			}
		}, this);
	},
	navout: function() {
		this.navtimer = this.navoff.delay(this.options.closeDelay, this);
	},
	navoff: function() {
		$clear(this.navtimer);
		this.pn.each(function(el) {
			el.removeClass(this.options.navonClass);
		}, this);
		this.sn.each(function(el) {
			el.setStyle('left', this.options.offPosition + 'px');
		}, this);
	}
});