/**
 * slider menu widget definition
 * 
 * @author muralidharan
 * 
 * @param uuid -
 *            any unique id
 * @param ele -
 *            on click trigger element
 * 
 */
var _uuid = "";
var _spanEle = null;
var _closeTimer = null;
var _defaultTimeOut = 600;
var _ulEle4Topnav = null;
var _onClickEle = null;

function MoaSliderMenu(auid, ele) {
	this._uuid = auid;
	this._onClickEle = ele;
	this.initialize();
	this.enableMenu();
}

// constructor initialization
MoaSliderMenu.prototype.initialize = function() {
	var _objRef = this;

	this._ulEle4Topnav = getUlEle();
	this._ulEle4Topnav.attr('class', 'topnav');
	this._ulEle4Topnav.attr('id', _objRef._uuid + '_topnav');

	var liEle4Topnav = getLiEle();

	var ulEle4Subnav = getUlEle();
	ulEle4Subnav.attr('class', 'subnav');
	liEle4Topnav.append(ulEle4Subnav);

	this._ulEle4Topnav.append(liEle4Topnav);

	var spanEle = getSpanEle();
	spanEle.attr('id', _objRef._uuid + '_span');

	this._spanEle = spanEle;

	$(ulEle4Subnav).parent().append(spanEle);

	this._ulEle4Topnav.hover( function() {
	}, function() {
		_objRef.setTimer();
	});

	$(spanEle).hover( function() {
		spanEle.addClass("subhover");
	}, function() {
		spanEle.removeClass("subhover");
	});
};

// enable 'rating' menu option
MoaSliderMenu.prototype.enableMenu = function() {
	var _objRef = this;

	if (!_objRef._onClickEle.find("ul.topnav").attr('class')) {
		if (!_objRef._onClickEle.is(':visible')) {
			_objRef._onClickEle.attr("style",
					"display:block !important;cursor:pointer !important;");
		}
		if (_objRef._onClickEle != null) {
			if (_objRef._ulEle4Topnav != null) {
				_objRef._onClickEle.append(_objRef._ulEle4Topnav);
			}
			_objRef._onClickEle.bind('click', function() {
				_objRef.show();
			}).hover( function() {
			}, function() {
				_objRef.setTimer();
			});
		}
	}
};

// enable 'rating' menu option
MoaSliderMenu.prototype.show = function() {
	var _objRef = this;
	_objRef._spanEle.parent().find("ul.subnav").slideDown('fast').show();

	_objRef._spanEle.parent().find("ul.subnav").hover( function() {
		_objRef.clearTimer();
	}, function() {
		$(this).parent().find("ul.subnav").slideUp('fast');
	});
	_objRef.doTrigger();
};

// trigger internal custom events
MoaSliderMenu.prototype.doTrigger = function() {
	var _objRef = this;
	_objRef._spanEle.parent().find("ul.subnav").find('div.star-rating')
			.trigger('loadRating');
};

// clear timer
MoaSliderMenu.prototype.clearTimer = function() {
	var _objRef = this;
	if (_objRef._closeTimer != null) {
		window.clearTimeout(_objRef._closeTimer);
		_objRef._closeTimer = null;
	}
};

// clear timer
MoaSliderMenu.prototype.setTimer = function() {
	var _objRef = this;
	_objRef._closeTimer = window.setTimeout( function() {
		$('#' + _objRef._uuid + '_span').parent().find("ul.subnav").slideUp(
				'slow');
	}, _defaultTimeOut);
};

// enable 'commenting' menu option
MoaSliderMenu.prototype.addMenuItem = function(item) {
	var liEle4Menuitem = getLiEle();
	liEle4Menuitem.append(item);
	this.add(liEle4Menuitem);
};

MoaSliderMenu.prototype.add = function(liEle) {
	var _objRef = this;
	if (_objRef._spanEle != null)
		_objRef._spanEle.parent().find("ul.subnav").append(liEle);
};

function getLiEle() {
	return $("<li></li>").clone();
}
function getUlEle() {
	return $("<ul></ul>").clone();
}
function getDivEle() {
	return $("<div></div>").clone();
}
function getSpanEle() {
	return $("<span></span>").clone();
}
