//Default Site Studio Generated .js Script File var rating = { init: function() { rating.ratingform = YAHOO.util.Dom.get('rating') rating.ratingdiv = YAHOO.util.Dom.get('ratingdiv') rating.stardiv = document.createElement('div') rating.average = rating.ratingform.title.split(/:\s*/)[1].split(".") rating.submitted = false rating.make_stardiv() }, make_stardiv: function() { /* Replaces original form with the star images */ YAHOO.util.Dom.addClass(rating.stardiv, 'rating'); // make the stars for (var i=1; i<=5; i++) { // first, make a div and then an a-element in it var star = document.createElement('div'); star.id = 'star' + i; var a = document.createElement('a'); a.href = '#' + i; a.innerHTML = i; YAHOO.util.Dom.addClass(star, 'star'); star.appendChild(a); rating.stardiv.appendChild(star); // add needed listeners to every star YAHOO.util.Event.addListener(star, 'mouseover', rating.hover_star, i); YAHOO.util.Event.addListener(star, 'mouseout', rating.reset_stars); YAHOO.util.Event.addListener(star, 'click', rating.submit_rating, i); } rating.ratingdiv.appendChild(rating.stardiv); // show the average rating.reset_stars(); }, hover_star: function(e, which_star) { /* hovers the selected star plus every star before it */ for (var i=1; i<=which_star; i++) { var star = YAHOO.util.Dom.get('star' + i); var a = star.firstChild; YAHOO.util.Dom.addClass(star, 'on'); YAHOO.util.Dom.setStyle(a, 'width', '100%'); } }, reset_stars: function() { /* Resets the status of each star */ // if form is not submitted, the number of stars on depends on the // given average value if (rating.submitted == false) { var stars_on = rating.average[0]; if (rating.average[1] >= 0) stars_on = parseInt(rating.average[0]) + 1; var last_star_width = rating.average[1] + '0%'; } else { // if the form is submitted, then submitted number stays on var stars_on = rating.submitted; var last_star_width = '100%'; } // cycle trought 1..5 stars for (var i=1; i<=5; i++) { var star = YAHOO.util.Dom.get('star' + i); var a = star.firstChild; // first, reset all stars YAHOO.util.Dom.removeClass(star, 'hover'); YAHOO.util.Dom.removeClass(star, 'on'); // for every star that should be on, turn them on if (i<=stars_on && !YAHOO.util.Dom.hasClass(star, 'on')) YAHOO.util.Dom.addClass(star, 'on'); // and for the last one, set width if needed if (i == stars_on) YAHOO.util.Dom.setStyle(a, 'width', last_star_width); } }, submit_rating: function(e, num) { // If the form has not been submitted yet // and submission is not in progress if (rating.submitted == false) { rating.submitted = num; // After the form is submitted, instead of old average, show // submitted number of stars selected rating.average = [num, 0]; rating.ratingform.elements[0].value = num; YAHOO.util.Connect.setForm(rating.ratingform); var c = YAHOO.util.Connect.asyncRequest('POST', sUrl, rating.ajax_callback); YAHOO.util.Dom.removeClass(rating.stardiv, 'rating'); YAHOO.util.Dom.addClass(rating.stardiv, 'rating2'); for (var i=1; i<=5; i++) { var star = YAHOO.util.Dom.get('star' + i); var a = star.firstChild; YAHOO.util.Dom.setStyle(a, 'cursor', 'default'); } } }, ajax_callback: { success: function(o) { // release the form to normal status and change the statustext //rating.submitted = false; var avgXML = (new DOMParser()).parseFromString(o.responseText, "text/xml"); var avg = avgXML.getElementsByTagName("info")[0]; ratingAvg.set_average(avg.firstChild.nodeValue); }, failure: function(o) { // we shouldn't ever go down this path. alert('Error: ' + o.status + " " + o.statusText ); } } } var ratingAvg = { init: function() { ratingAvg.ratingform = YAHOO.util.Dom.get('ratingavg') ratingAvg.ratingdiv = YAHOO.util.Dom.get('ratingavgdiv') ratingAvg.stardiv2 = document.createElement('div') ratingAvg.dDocName = YAHOO.util.Dom.get('dDocName').value //ratingAvg.average = rating.ratingform.title.split(/:\s*/)[1].split(".") ratingAvg.make_stardiv() ratingAvg.get_rating() }, make_stardiv: function() { /* Replaces original form with the star images */ YAHOO.util.Dom.addClass(ratingAvg.stardiv2, 'rating2'); // make the stars for (var i=1; i<=5; i++) { // first, make a div and then an a-element in it var star = document.createElement('div'); star.id = 'avgstar' + i; var a = document.createElement('a'); //a.href = '#' + i; a.innerHTML = i; YAHOO.util.Dom.addClass(star, 'avgstar'); star.appendChild(a); ratingAvg.stardiv2.appendChild(star); // add needed listeners to every star } ratingAvg.ratingdiv.appendChild(ratingAvg.stardiv2); // show the average //ratingAvg.reset_stars(); // add the statustext div and hide it }, set_average: function(average) { /* Resets the status of each star */ // cycle trought 1..5 stars for (var i=1; i<=5; i++) { var star = YAHOO.util.Dom.get('avgstar' + i); var a = star.firstChild; YAHOO.util.Dom.addClass(star, 'on'); // for every star that should be on, turn them on if (i>average && YAHOO.util.Dom.hasClass(star, 'on')) { YAHOO.util.Dom.removeClass(star, 'on'); } } }, get_rating: function(e, num) { var query = "dDocName="+ratingAvg.dDocName; var c = YAHOO.util.Connect.asyncRequest('POST', avgUrl, ratingAvg.ajax_callback, query); }, ajax_callback: { success: function(o) { // release the form to normal status and change the statustext //rating.submitted = false; var avgXML = (new DOMParser()).parseFromString(o.responseText, "text/xml"); var avg = avgXML.getElementsByTagName("info")[0]; ratingAvg.set_average(avg.firstChild.nodeValue); }, failure: function(o) { // we shouldn't ever go down this path. alert('Error: ' + o.status + " " + o.statusText ); } } }