/*! jQuery Radmenu (Radial Menu) Plugin version: 1.0.0 (14-MAY-2011) http://www.tikku.com/jquery-radmenu-plugin */
;(function($){var RADMENU = ".radmenu",OPTS = "options"+RADMENU,PREVOPTS = "prevoptions"+RADMENU,RADMENU_CLASS = "ui-radmenu-parent"; var defaults = {listClass: "list",itemClass: "item",activeItemClass: "active",selectEvent: null, onSelect: function($selected){},radius: 10, angleOffset: 0,centerX: 0,centerY: 0,animSpeed: 500,animEasing: "swing",initialScale: 1,scaleAnimSpeed: 0,scaleAnimEasing: "swing",scaleAnimOpts: {},onScaleItem: function($item, factor, coords){},afterAnimation: function($m){},onShow: function($items){$items.show();},onHide: function($items){$items.hide();},onNext: function($items){return true;},onPrev: function($items){return true;},rotate: false,getRotation: function(degrees, index, numItems){return degrees;}};$.radmenu = {container: {html: "<div></div>",css: { "position": "relative" },clz: "radial_div",itemClz: "radial_div_item"}};$.fn.radmenu = function(input, param){try {var $this = $(this);var type = typeof input;if(arguments.length==0 || type=="object") 	return init($this, input);	else if(type=="string")	return (input=="items" || input=="opts") ?			$this.triggerHandler(input+RADMENU) :			$this.trigger(input+RADMENU, param || null);	else if(type=="number")		return $this.trigger("select"+RADMENU,input);} catch (e) { return "error : "+e; }};
function init($menu, opts){var o = $.extend({}, defaults, opts);return $menu.each(function(m){var $this = $(this);if(!$this.hasClass(RADMENU_CLASS)) {	var $list = $this.find("."+o.listClass);	$list.find("."+o.itemClass).hide();		$this.data(OPTS, updateRadius(o, o.initialScale, o.radius));	for(e in MENU) 			$this.bind(e+RADMENU, $this, MENU[e]);		$this.addClass(RADMENU_CLASS);}});};function selectMenuitem(evt){ var $this = $(this);var $element = $(evt.target);var container = $.radmenu.container;if(!$element.hasClass(container.itemClz))	$element = $element.closest("."+container.itemClz);var isInNested = $element.parents("."+container.itemClz).length>0;var index = $element.index();if(!isInNested)	$this.parents("."+container.clz).radmenu(index);else 	$this.radmenu(index);cancelBubble(evt);};function cancelBubble(evt){if(!$.support.opacity) 	window.event.cancelBubble = true;else 	evt.stopPropagation();};var MENU = {opts: function(evt) { return getMenu(evt).opts;},show: function(evt, fn){var $m = getMenu(evt);var container = $.radmenu.container;	$m.menu.find("."+container.clz).remove();	var $menuitems = $m.menu.find("."+$m.opts.itemClass);	var $radialMenu = $(container.html)						.addClass(container.clz)						.css(container.css)						.html(buildMenuHTML($menuitems, $m.opts));	var $menuitems = $radialMenu.find("."+container.itemClz);if($m.opts.selectEvent!=null)		$menuitems.bind($m.opts.selectEvent,selectMenuitem);	$radialMenu.appendTo($m.menu);if(typeof(fn) == "function") 		fn($menuitems);	else		$m.opts.onShow($menuitems);cancelBubble(evt);},hide: function(evt){ var $m = getMenu(evt);	var $menu = $m.menu.find("."+$.radmenu.container.clz);$m.opts.onHide($menu.find("."+$.radmenu.container.itemClz));$menu.remove();cancelBubble(evt);},select: function(evt, selectIndex){var $m = getMenu(evt);	var $selected = $($m.raditems().get(selectIndex));	$selected.siblings().removeClass($m.opts.activeItemClass);	$selected.addClass($m.opts.activeItemClass);	$m.opts.onSelect($selected);cancelBubble(evt);},next: function(evt){var $m = getMenu(evt);if( !$m.opts.onNext($m) ) return;	switchItems($m, $m.raditems().length-1, 0);},prev: function(evt){var $m = getMenu(evt);if( !$m.opts.onPrev($m) ) return;	switchItems($m, 0, $m.raditems().length-1);},shuffle: function(evt){var $m = getMenu(evt);var len = $m.raditems().length;	switchItems($m, rnd(len), rnd(len));},destroy: function(evt){var $m = getMenu(evt);$m.menu.data(OPTS, null)		.data(PREVOPTS, null)		.removeClass(RADMENU_CLASS)		.unbind(RADMENU);return $m.menu;},items: function(evt){return getMenu(evt).raditems();},scale: function(evt, factor){var $m = getMenu(evt);if(factor){		var o = $m.opts;		var container = $.radmenu.container;		var prevOpts = $m.menu.data(PREVOPTS);		if(!prevOpts) $m.menu.data(PREVOPTS, prevOpts=o);		var $items = $m.menu.find("."+container.itemClz);		var updatedRadiusOpts = updateRadius(o, factor, prevOpts.radius);		$m.menu.data(OPTS, updatedRadiusOpts);		$items.each(function(i){ 			var $this = $(this);			var coords = getCoords(i, $items.length, updatedRadiusOpts);			var animOpts = {				top: coords.top,				left: coords.left			};			if(typeof(o.scaleAnimOpts) == "object") {				animOpts = $.extend({}, o.scaleAnimOpts, animOpts);			}			$this.animate(animOpts, o.scaleAnimSpeed, o.scaleAnimEasing);			$m.opts.onScaleItem($this, factor, coords);		});	}return $m.menu;}};function updateRadius(opts, radius, factor){return $.extend({},opts,{radius:(factor*radius)});};function rnd(i){return parseInt( Math.random() * i );};function getMenu(evt){var $menu = evt.data;return {menu: $menu, opts: $menu.data(OPTS),raditems: function(){		return $menu.find("."+$.radmenu.container.itemClz);	}};};function switchItems($m, remove, add){if(remove==add) add = remove - 1;var $remove = $($m.raditems()[remove]);var toAddto = $m.raditems()[add];if(remove>add) 	$remove.insertBefore(toAddto);else 	$remove.insertAfter(toAddto);animateWheel($m, (remove<add));};
function buildMenuHTML($menuitems, opts){var ret = [];$menuitems.each(function(i){var $this = $(this);var coords = getCoords(i, $menuitems.length, opts);var rotationHTML = "transform:rotate("+coords.angle+"deg); ";ret.push("<div class='"+$.radmenu.container.itemClz+"' ");	ret.push("style='");	ret.push("position:absolute;display:none;");	ret.push("left:"+coords.left+"px;");	ret.push("top:"+coords.top+"px;");	if(opts.rotate) {		for(rot in XForm.opts)			ret.push(XForm.opts[rot]+rotationHTML);	}ret.push("'>");	ret.push($this.html());	ret.push("</div>");});return ret.join("");};function getAngleAtIndex(iIdx, iNum){return 2 * Math.PI * parseFloat(iIdx/iNum);};function getCoords(iIdx, iNum, oOpts, bClockwise){var radius = oOpts.radius;var angle = getAngleAtIndex(iIdx, iNum);angle += toRadians(oOpts.angleOffset);var l = oOpts.centerX + ( Math.cos( angle ) * radius ),	t = oOpts.centerY + ( Math.sin( parseInt(angle*100)/100 ) * radius );var degrees = oOpts.rotate ? oOpts.getRotation( angle * 180 / Math.PI, iIdx, iNum ) : 0;var slice = oOpts.rotate ? ( getAngleAtIndex(1, iNum) * 180 / Math.PI ) : 0;var rotation = ( bClockwise==true ? "-=" : "+=" ) + slice;return {left: l, top: t, angle: degrees, animObj:{		left: l, 		top: t, 		radrotate: rotation} };};function toRadians(degrees){return degrees * Math.PI / 180;};function animateWheel($m, bClockwise){var $menuitems = $m.raditems();var len = $menuitems.length;$menuitems.each(function(i){var $this = $(this);	var coords = getCoords(i, len, $m.opts, bClockwise);$this.animate(		coords.animObj, 		$m.opts.animSpeed, 		$m.opts.animEasing, 		function(){			if(i==(len-1) ){				$m.opts.afterAnimation($m);			}		}	);});};var XForm = {};XForm.attr = undefined;XForm.opts = ["","-webkit-","-moz-","-ms-","-o-"];XForm.cssattrs = ["","Webkit","Moz","ms","O"];XForm.getCSSAttr = function($elm){ if( this.attr ) 	return this.attr;return this.attr = (function(){for(var ii=0; ii<XForm.cssattrs.length; ii++){		var opt = XForm.cssattrs[ii]+"Transform";		if( $elm[0].style[opt] )			return opt;	}return "transform";})();};XForm.getTransformValue = function($elm){return jQuery.style( $elm[0], XForm.getCSSAttr($elm) );};var _ = {};_.cur = $.fx.prototype.cur; $.fx.prototype.cur = function() { if ( this.prop == "radrotate" ) {	var $elm = $(this.elem);	var style = XForm.getTransformValue($elm) || 'none'; if (style) { var m = style.match(/rotate\(([^)]+)\)/); if (m && m[1])	{			return parseFloat( m[1] );		} } return 0; } return _.cur.apply(this, arguments); };	$.fx.step.radrotate = function(fx) {var $elm = $(fx.elem); $elm.css(XForm.getCSSAttr($elm), "rotate("+ fx.now +"deg)");};})(jQuery);
