/* Sets time in clock div and calls itself every second */
/**
 * Clock plugin
 * Copyright (c) 2010 John R D'Orazio (donjohn.fmmi@gmail.com)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 * 
 * Turns a jQuery dom element into a dynamic clock
 *  
 * @timestamp defaults to clients current time
 *   $("#mydiv").clock();
 *   >> will turn div into clock using client computer's current time
 * @timestamp server-side example:
 *   Say we have a hidden input with id='timestmp' the value of which is determined server-side with server's current time
 *   $("#mydiv").clock({"timestamp":$("#timestmp").val()});
 *   >> will turn div into clock passing in server's current time as retrieved from hidden input
 *    
 * @format defaults to 12 hour format,
 *   or if langSet is indicated defaults to most appropriate format for that langSet
 *   $("#mydiv").clock(); >> will have 12 hour format
 *   $("#mydiv").clock({"langSet":"it"}); >> will have 24 hour format
 *   $("#mydiv").clock({"langSet":"en"}); >> will have 12 hour format 
 *   $("#mydiv").clock({"langSet":"en","format":"24"}); >> will have military style 24 hour format
 *   $("#mydiv").clock({"calendar":true}); >> will include the date with the time, and will update the date at midnight
 *         
 */

(function($, undefined) {

	$.clock = {
		version: "2.0.1", 
		locale: {}
	}

	t = new Array();
  
	$.fn.clock = function(options) {
		var locale = {
			"long":{
				"it":{
					"weekdays":["Domenica","Lunedì","Martedì","Mercoledì","Giovedì","Venerdì","Sabato"],
					"months":["Gennaio","Febbraio","Marzo","Aprile","Maggio","Giugno","Luglio","Agosto","Settembre","Ottobre","Novembre","Dicembre"]
				},
				"en":{
					"weekdays":["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],
					"months":["January","February","March","April","May","June","July","August","September","October","November","December"]
				},
				"es":{
					"weekdays":["Domingo", "Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado"],
					"months":["Enero", "Febrero", "Marzo", "Abril", "May", "junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"]
				},
				"ge":{
					"weekdays":["Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag"],
					"months":["Januar", "Februar", "März", "April", "könnte", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"]
				},
				"fr":{
					"weekdays":["Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"],
					"months":["Janvier", "Février", "Mars", "Avril", "May", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre"]
				}
			},
			"short":{
				"weekdays":["_BLOGS_SUN","_BLOGS_MON","_BLOGS_TUE","_BLOGS_WED","_BLOGS_THU","_BLOGS_FRI","_BLOGS_SAT"],
				"months":["_BLOGS_JAN","_BLOGS_FEB","_BLOGS_MAR","_BLOGS_APR","_BLOGS_MAY","_BLOGS_JUN","_BLOGS_JUL","_BLOGS_AUG","_BLOGS_SEP","_BLOGS_OCT","_BLOGS_NOV","_BLOGS_DEC"]
			}
		}

		return this.each(function(){
			$.extend(locale,$.clock.locale);
			options = options || {};  
			options.timestamp = options.timestamp || "systime";
			systimestamp = new Date();
			systimestamp = systimestamp.getTime();
			options.sysdiff = 0;
			if(options.timestamp!="systime"){
				mytimestamp = new Date(options.timestamp);
				options.sysdiff = options.timestamp - systimestamp;
			}
			options.langSet = options.langSet || "en";
			options.format = options.format || ((options.langSet!="en") ? "24" : "12");
			options.calendar = options.calendar || "true";
			options.time = options.time || "true";

			if (!$(this).hasClass("jqclock")){
				$(this).addClass("jqclock");
			}

			var addleadingzero = function(i){
				if (i<10){
					i="0" + i;
				}
				return i;    
			},
			updateClock = function(el,myoptions) {
				var el_id = $(el).attr("id");
				if(myoptions=="destroy"){
					clearTimeout(t[el_id]);
				}
				else {
					mytimestamp = new Date();
					mytimestamp = mytimestamp.getTime();
					mytimestamp = mytimestamp + myoptions.sysdiff;
					mytimestamp = new Date(mytimestamp);
					var h=mytimestamp.getHours(),
					m=mytimestamp.getMinutes(),
					s=mytimestamp.getSeconds(),
					dy=mytimestamp.getDay(),
					dt=mytimestamp.getDate(),
					mo=mytimestamp.getMonth(),
					y=mytimestamp.getFullYear(),
					ap="",
					calend="";
					timestr = "";
		
					if(myoptions.format=="12"){
						ap=" AM";
						if (h > 11) {
							ap = " PM";
						}
						if (h > 12) {
							h = h - 12;
						}
						if (h == 0) {
							h = 12;
						}
					}

					// add a zero in front of numbers 0-9
					h=addleadingzero(h);
					m=addleadingzero(m);
					s=addleadingzero(s);

					if(myoptions.calendar!="false") {
						if(myoptions.date_format == "long"){
							day_str = locale["long"][myoptions.langSet].weekdays[dy];
							month_str = locale["long"][myoptions.langSet].months[mo];
						}else{
							day_str = getPO(locale["short"].weekdays[dy]);
							month_str = getPO(locale["short"].months[mo]);
						}
						if (myoptions.langSet=="en") {
							calend = "<tr class='clockdate_container'><td class='clockdate'>"+day_str+', '+month_str+' '+dt+', '+y+"</td></tr>";
						}
						else {
							calend = "<tr class='clockdate_container'><td class='clockdate'>"+day_str+', '+dt+' '+month_str+' '+y+"</td></tr>";
						}
					}
					if(myoptions.time!="false") {
						timestr = "<tr class='clocktime_container'><td class='clocktime'>"+h+":"+m+":"+s+ap+"</td></tr>";
					}
		
					$(el).html(timestr + calend);
					t[el_id] = setTimeout(function() {
						updateClock( $(el),myoptions )
					}, 1000);
				}

			}
      
			updateClock($(this),options);
		});
	}

	return this;

})(jQuery);

