/**
 * Filename    : DateFormat.js
 * Author      : Robert Cerny
 * Created     : 2006-07-02
 * Last Change : 2006-11-26
 *
 * Description:
 *   DateFormat provides means to format a date.
 *
 * History:
 *   2006-07-02 Created.
 *
 * License:
 */

CERNY.require("CERNY.text.DateFormat",
              "CERNY.util");

/**
 * Create a date format.
 *
 * regexp - the regular expression defining the date format
 * return - an object representing the date format
 */
CERNY.text.DateFormat = function(regexp) {
    var self = CERNY.object();
    self.regexp = regexp;
    self.separator = "";
    self.positions = {day: 1,
                      month: 2,
                      year: 3};
    self.formatters =  {day: CERNY.identity,
                        month: CERNY.identity,
                        year: CERNY.identity};
    self.century = 20;
    return self;
};

CERNY.text.DateFormat.cutLast2 = function (x) {
    return CERNY.util.cutNumber(x, 2);
};

var formatters1 = {day: CERNY.util.fillNumber, month: CERNY.util.fillNumber, year: CERNY.identity};
var formatters2 = {day: CERNY.util.fillNumber, month: CERNY.util.fillNumber, year: CERNY.text.DateFormat.cutLast2};
var formatters3 = {day: CERNY.identity, month: CERNY.identity, year: CERNY.text.DateFormat.cutLast2};

// 15.07.2006
CERNY.text.DateFormat.DE = new CERNY.text.DateFormat(/(\d\d)\.(\d\d)\.(\d\d\d\d)/);
CERNY.text.DateFormat.DE.separator = ".";
CERNY.text.DateFormat.DE.formatters = formatters1;

// 15.07.06
CERNY.text.DateFormat.DE1 = new CERNY.text.DateFormat(/(\d\d).(\d\d).(\d\d)/);
CERNY.text.DateFormat.DE1.separator = ".";
CERNY.text.DateFormat.DE1.formatters = formatters2;

// 15072006
CERNY.text.DateFormat.DE2 = new CERNY.text.DateFormat(/(\d\d)(\d\d)(\d\d\d\d)/);
CERNY.text.DateFormat.DE2.formatters = formatters1;

// 150706
CERNY.text.DateFormat.DE3 = new CERNY.text.DateFormat(/(\d\d)(\d\d)(\d\d)/);
CERNY.text.DateFormat.DE3.formatters = formatters2;

// 15.7.2006
CERNY.text.DateFormat.DE4 = new CERNY.text.DateFormat(/(\d\d?)\.(\d\d?)\.(\d\d\d\d)/);
CERNY.text.DateFormat.DE4.separator = ".";

// 15.7.06
CERNY.text.DateFormat.DE5 = new CERNY.text.DateFormat(/(\d\d?)\.(\d\d?)\.(\d\d)/);
CERNY.text.DateFormat.DE5.separator = ".";
CERNY.text.DateFormat.DE5.formatters = formatters3;

var positionsUS = {month: 1, day: 2, year: 3};

// 07/15/2006
CERNY.text.DateFormat.US = new CERNY.text.DateFormat(/(\d\d)\/(\d\d)\/(\d\d\d\d)/);
CERNY.text.DateFormat.US.separator = "/";
CERNY.text.DateFormat.US.positions = positionsUS;
CERNY.text.DateFormat.US.formatters = formatters1;

// 07/15/06
CERNY.text.DateFormat.US1 = new CERNY.text.DateFormat(/(\d\d)\/(\d\d)\/(\d\d)/);
CERNY.text.DateFormat.US1.separator = "/";
CERNY.text.DateFormat.US1.positions = positionsUS;
CERNY.text.DateFormat.US1.formatters = formatters2;

// 07152006
CERNY.text.DateFormat.US2 = new CERNY.text.DateFormat(/(\d\d)(\d\d)(\d\d\d\d)/);
CERNY.text.DateFormat.US2.positions = positionsUS;
CERNY.text.DateFormat.US2.formatters = formatters1;

// 071506
CERNY.text.DateFormat.US3 = new CERNY.text.DateFormat(/(\d\d)(\d\d)(\d\d)/);
CERNY.text.DateFormat.US3.positions = positionsUS;
CERNY.text.DateFormat.US3.formatters = formatters2;

// 7/15/2006
CERNY.text.DateFormat.US4 = new CERNY.text.DateFormat(/(\d\d?)\/(\d\d?)\/(\d\d\d\d)/);
CERNY.text.DateFormat.US4.separator = "/";
CERNY.text.DateFormat.US4.positions = positionsUS;

// 7/15/06
CERNY.text.DateFormat.US5 = new CERNY.text.DateFormat(/(\d\d?)\/(\d\d?)\/(\d\d)/);
CERNY.text.DateFormat.US5.separator = "/";
CERNY.text.DateFormat.US5.positions = positionsUS;
CERNY.text.DateFormat.US5.formatters = formatters3;

var positionsISO = {year: 1, month: 2, day: 3 };

// 2006-07-15
CERNY.text.DateFormat.ISO = new CERNY.text.DateFormat(/(\d\d\d\d)-(\d\d)-(\d\d)/);
CERNY.text.DateFormat.ISO.separator = "-";
CERNY.text.DateFormat.ISO.positions = positionsISO;
CERNY.text.DateFormat.ISO.formatters = formatters1;

