// define the namespaces
jmaki.namespace("jmaki.widgets.yahoo.calendarInput");

jmaki.widgets.yahoo.calendarInput.Widget = function(wargs) {
    this.topic = "/yahoo/calendar";
    var self = this;
    this.uuid = wargs.uuid;
    var minDate, maxDate;
    var invalidDate = 'Invalid Date';
    
    var locale = {
		  DATE_FIELD_DELIMITER: '.',
		  MDY_DAY_POSITION: 3,
		  MDY_MONTH_POSITION: 2,
		  MDY_YEAR_POSITION: 1,
		  MONTHS_LONG: ['Janu\u00E1r', 'Febru\u00E1r', 'M\u00E1rcius', '\u00C1prilis', 'M\u00E1jus', 'J\u00FAnius', 'J\u00FAlius','Augusztus', 'Szeptember', 'Okt\u00F3ber', 'November', 'December'],
		  WEEKDAYS_SHORT: ['H\u00E9', 'Ke', 'Sz', 'Cs', 'P\u00E9', 'Sz', 'Va'],
		  START_WEEKDAY: 0
     };

	 if (typeof wargs.args.locale != 'undefined') {
		 locale = wargs.args.locale;
	 }


    //read the widget configuration arguments
    if (typeof wargs.args.minDate != 'undefined') {
        minDate = wargs.args.minDate;
    } else {
        minDate = "1/1/1900";
    }
    if (typeof wargs.args.maxDate != 'undefined') {
        maxDate = wargs.args.maxDate;
    } else {
        var date = new Date();
        var year = date.getFullYear(), month = date.getMonth() + 1, day = date.getDate();
        maxDate = month + "/" + day + "/" + year;
    }



    this.wrapper = new YAHOO.jmaki.widget.YearSelectCalendar(
    this.uuid, this.uuid,  { 
         mindate: minDate, 
         maxdate: maxDate,
         close: true} 
    );
    
    //read the widget configuration arguments
    if (typeof wargs.args != 'undefined') {
        //overide topic name if needed
        if (typeof wargs.args.topic != 'undefined') {
            topic = wargs.args.topic;
            jmaki.log("Yahoo calendar: widget uses deprecated topic. Use publish instead.");
        }
    }

    this.wrapper.cfg.setProperty("DATE_FIELD_DELIMITER", locale.DATE_FIELD_DELIMITER); 
    
    this.wrapper.cfg.setProperty("MDY_DAY_POSITION", locale.MDY_DAY_POSITION); 
    this.wrapper.cfg.setProperty("MDY_MONTH_POSITION", locale.MDY_MONTH_POSITION); 
    this.wrapper.cfg.setProperty("MDY_YEAR_POSITION", locale.MDY_YEAR_POSITION);
    
    this.wrapper.cfg.setProperty("MY_LABEL_MONTH_POSITION", 2); 
    this.wrapper.cfg.setProperty("MY_LABEL_YEAR_POSITION", 2); 
    this.wrapper.cfg.setProperty("MY_LABEL_YEAR_SUFFIX", "&#160;"); 

    this.wrapper.cfg.setProperty("MONTHS_LONG", locale.MONTHS_LONG);
    this.wrapper.cfg.setProperty("WEEKDAYS_SHORT", locale.WEEKDAYS_SHORT);
    this.wrapper.cfg.setProperty("START_WEEKDAY", locale.START_WEEKDAY);
    
    
    if (wargs.publish) topic = wargs.publish;
    
    /**
     * Returns first selected date
     */
    this.getValue = function() {
        if (this.wrapper.getSelectedDates().length  > 0) {
            return this.wrapper.getSelectedDates()[0];
        } else {
            return null;
        }
    }
    
    // add a saveState function
    if ( wargs.service) {
        this.saveState = function() {
            if (self.getValue() == null) return;
            // we need to be able to adjust this
            var url = wargs.service;
            var _val =  self.getValue().toString();
            url = url + "?cmd=update";
            jmaki.doAjax({url: url, method: "post", content: {value : _val}, callback: function(req) {
                if (req.readyState == 4) {
                    if (req.status == 200) {
                        // take some action if needed
                    }
                }
            }});
        }
    }
    
    // Johet az inputhoz kotes 
    
    this.inputField = YAHOO.util.Dom.get(wargs.args.input);
    this.calendarButton = YAHOO.util.Dom.get(wargs.args.button);

    this.parseDate = function(dateString) {
      this.wrapper.toDate(this.wrapper._parseDate(dateString))
  }


   this.formatDate = function(dt) {
	    var pad00 = function (i) {
	      var r = "";
	      if (i < 10) r += "0";
	      r += i;
	      return r;
	    }
	    var delim = this.wrapper.cfg.getProperty("DATE_FIELD_DELIMITER");
	    var dp = this.wrapper.cfg.getProperty("MDY_DAY_POSITION");
	    var mp = this.wrapper.cfg.getProperty("MDY_MONTH_POSITION");
	    var yp = this.wrapper.cfg.getProperty("MDY_YEAR_POSITION");

	    var year = dt[0], month = pad00(dt[1]), day = pad00(dt[2]);

	    var df = "";
	    df += (dp == 1) ? day : ( (mp == 1) ? month  : year);
	    df += delim;
	    df += (dp == 2) ? day : ( (mp == 2) ? month  : year);
	    df += delim;
	    df += (dp == 3) ? day : ( (mp == 3) ? month  : year);

	    return df;
    }



    /* Naptar megmutato-elrejto eljaras. */
    var showCal = function(e) {
        var dateString = this.inputField.value;
        var date = dateString == '' ? new Date() : this.parseDate(dateString);
        if (date == invalidDate) date = new Date();
        if (date != null) {
            this.wrapper.select(date); 
            this.wrapper.cfg.setProperty('pagedate', date, true);
            this.wrapper.render();
        }
        this.wrapper.show();
        //mozgassuk a helyere. 
        var xy = YAHOO.util.Dom.getXY(this.inputField); 
        xy[1] = xy[1] - 202; 
        YAHOO.util.Dom.setXY(this.uuid, xy);
        return false;
    }

    YAHOO.util.Event.on(this.calendarButton, 'click', showCal, this, true);
    
    /** Datum kivalaszto eljaras. */
    var onSelect = function(type, args) {
        var selected = args[0];
        this.inputField.value = this.formatDate(selected[0]); 
        this.wrapper.hide();
        jmaki.publish(this.topic + "/onSelect", {widgetId:this.uuid,id:this.uuid,value:date});
    }
    this.wrapper.selectEvent.subscribe(onSelect, this, true);

    this.wrapper.render();
}




