/* jQuery 'mediasco' plugin
 * @author Vlad Bazon vlad@sitsco.com
 * @link http://salar.sitsco.com
 *       http://www.docere.ro
 */

// creaţi un fişier HTML şi înscrieţi în <head>-ul său:
// <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3/jquery.min.js"></script>
// <script type="text/javascript" src="mediasco.js"></script>

// <script type="text/javascript">
//   jQuery.noConflict();
//   jQuery(document).ready(function($) {
//       $('.elev').click(function() { $(this).next().mediasco(); });
//   });
     // pe fiecare element HTML cu atributul class="elev" se pune un handler de 'click'
     // care adaugă elementele HTML (şi funcţionalitatea aferentă) produse de mediasco()
// </script>

(function($) {
    var qht = []; // definiţiile HTML pentru cele trei elemente <input>
    qht.push('<span id="qmform" style="font-size:0.9em;">',
             ' Note:<input type="text" class="qinput" id="qnote" size="10"/>',
             ' Teza:<input type="text" class="qinput" id="qteza" size="2"/>',
             ' <input type="text" id="qok" value="OK" size="2" style="cursor:pointer"/>',
             '</span>');

    function mediasco(element) { // referinţă la un obiect jQuery (asociat unui element HTML)
        element.after(qht.join('')); // adaugă (după elementul indicat) cele trei <input>-uri

        $('#qnote, #qteza').keyup(function() { // răspunde la orice tastare de notă/teză
            // preia şirul de caractere din primul şi al doilea <input>
            var note = $('#qnote').val(), 
                teza = $('#qteza').val() || 0;
            
            var nr_car = note.length,
                nr_note = nr_car; // dacă nu avem o notă "10", numărul de note = numărul de caractere  

            var m = 0; // media de calculat
            for(var i = 0; i < nr_car; i++) 
                if(note.charAt(i) == "0") { // "0" poate urma numai după "1" (nota "10")
                    m += 9;
                    nr_note --;
                }
                else m += parseInt(note.charAt(i));
            var med = parseInt((m / nr_note)*100) / 100; // media aritmetică, cu două zecimale exacte

            if(teza) { // dacă există şi teză
                teza = parseInt(teza);
                med = (teza + 3 * med) / 4; 
                med = parseInt(med * 100) / 100; // media şcolară cu două zecimale exacte
            }

            element.html("<b>" + med + "</b>"); // expune media calculată (cu două zecimale exacte)
        });

        $('#qok').click(function() { // răspunde la click pe "OK"
            var med = element.text();
            element.html("<b>" + Math.round(med) + "</b>"); // media oficială (cu rotunjire)
            $('#qmform').remove(); // elimină elementele adăugate
        });
            
    };

    $.fn.mediasco = function() { // extinde jQuery cu obiectul mediasco() (plug_in jQuery)
        $('#qmform').remove(); // elimină un eventual obiect #qmform rămas "neînchis"
        return mediasco(this);
    };

})(jQuery);
