jQuery.fn.rating=function(url,options){
if(url==null)return
var settings={
url : url,
increment : 1,
maxvalue : 5,
curvalue : 0}
if(options){
jQuery.extend(settings,options)}
jQuery.extend(settings,{cancel:(settings.maxvalue>1)? true : false})
jQuery.extend(settings,{extra: settings.extra})
var container=jQuery(this)
jQuery.extend(container,{
averageRating: settings.curvalue,
url: settings.url
})
settings.increment=(settings.increment<.75)? .5 : 1
var s=0
for(var i=0;i<=settings.maxvalue;i++){
if(i==0){
if(settings.cancel==true){
var div='<div class="cancel"><a href="#0" title="Cancel Rating">Cancel Rating</a></div>'
container.empty().append(div)}
}else{
var $div=$('<div class="star"></div>')
.append('<a href="#'+i+'" title="Rate the Global Connection '+i+'/'+settings.maxvalue+'">'+i+'</a>')
.appendTo(container)
if(settings.increment==.5){
if(s%2){
$div.addClass('star-left')
}else{
$div.addClass('star-right')}}}
i=i-1+settings.increment
s++}
var stars=jQuery(container).children('.star')
var cancel=jQuery(container).children('.cancel')
stars
.mouseover(function(){
event.drain()
event.fill(this)
})
.mouseout(function(){
event.drain()
event.reset()
})
.focus(function(){
event.drain()
event.fill(this)
})
.blur(function(){
event.drain()
event.reset()
})
stars.click(function(){
if(settings.cancel==true){
settings.curvalue=(stars.index(this)*settings.increment)+settings.increment
jQuery.get(container.url,{"extra":settings.extra,
"rating": jQuery(this).children('a')[0].href.split('#')[1]
})
return false
}else if(settings.maxvalue==1){
settings.curvalue=(settings.curvalue==0)? 1 : 0
$(this).toggleClass('on')
jQuery.get(container.url,{"extra":settings.extra,
"rating": jQuery(this).children('a')[0].href.split('#')[1]
})
return false}
return true
})
if(cancel){
cancel
.mouseover(function(){
event.drain()
jQuery(this).addClass('on')
})
.mouseout(function(){
event.reset()
jQuery(this).removeClass('on')
})
.focus(function(){
event.drain()
jQuery(this).addClass('on')
})
.blur(function(){
event.reset()
jQuery(this).removeClass('on')
})
cancel.click(function(){
event.drain()
settings.curvalue=0
jQuery.get(container.url,{"extra":settings.extra,
"rating": jQuery(this).children('a')[0].href.split('#')[1]
})
return false
})}
var event={
fill: function(el){
var index=stars.index(el)+1
stars
.children('a').css('width','100%').end()
.slice(0,index).addClass('hover').end()
},
drain: function(){
stars
.filter('.on').removeClass('on').end()
.filter('.hover').removeClass('hover').end()
},
reset: function(){
stars.slice(0,settings.curvalue/settings.increment).addClass('on').end()}}
event.reset()
return(this)}
