/**
 * Simple Destination List page widget
 *
 * @author dettier
 */

(function () {
	/**
	 * Constructor
	 *
	 * @param  target  {DomNode}
	 * @param  model   {Object}
	 */

    TRAVEL.SimpleDestinationList = function (target) {

        var assets = TRAVEL.Assets.SimpleDestinationList;

        var self;
        var root;

        var _element;

        var createCountry = function (target, model) {

            var _besti = -1, _bestj = -1;
            var _bestdiff = 100000;
            var i, j, k, n;

            for (i = 0; i < model.provinces.length; i++) {
                for (j = i + 1; j < model.provinces.length; j++) {
                    var _1st = 0, _2nd = 0, _3rd = 0;
                    for (k = 0; k < model.provinces.length; k++) {
                        if (k <= i) _1st += model.provinces[k].cities.length + 1;
                        if (k > i && k <= j) _2nd += model.provinces[k].cities.length + 1;
                        if (k > j) _3rd += model.provinces[k].cities.length + 1;
                    }
                    var max = Math.max(Math.max(_1st, _2nd), _3rd);
                    var min = Math.min(Math.min(_1st, _2nd), _3rd);

                    if (max - min < _bestdiff) {
                        _besti = i;
                        _bestj = j;
                        _bestdiff = max - min;
                    }
                }
            }

            var str =
                ['<div class="clearer country">',
                    '<h2><a href="',model.link,'">',model.name,'</a></h2>',
                    '<div class="column">'];

            for (k = 0; k <= _besti; k++) {
                str.push('<h3>', '<a href="', model.provinces[k].link, '">', model.provinces[k].name, '</a></h3>', '<ul>');
                for (n = 0; n < model.provinces[k].cities.length; n++) {
                    str.push('<li><a href="', model.provinces[k].cities[n].link, '">', model.provinces[k].cities[n].name, '</a></li>');
                }
                str.push('</ul>');
            }

            str.push('</div>', '<div class="column">');

            for (k = _besti+1; k <= _bestj; k++) {
                str.push('<h3>', '<a href="', model.provinces[k].link, '">', model.provinces[k].name, '</a></h3>', '<ul>');
                for (n = 0; n < model.provinces[k].cities.length; n++) {
                    str.push('<li><a href="', model.provinces[k].cities[n].link, '">', model.provinces[k].cities[n].name, '</a></li>');
                }
                str.push('</ul>');
            }

            str.push('</div>','<div class="column">');

            for (k = _bestj+1; k < model.provinces.length; k++) {
                str.push('<h3>', '<a href="',model.provinces[k].link,'">', model.provinces[k].name, '</a></h3>', '<ul>');
                for (n = 0; n < model.provinces[k].cities.length; n++) {
                    str.push('<li><a href="', model.provinces[k].cities[n].link, '">', model.provinces[k].cities[n].name, '</a></li>');
                }
                str.push('</ul>');
            }

            str.push('</div>', '</div>');

            $(target).append(str.join(''));
        }

        this.create = function (model) {

            var str =
                ['<div id="simple-destinations" class="content-space">',
                    '<h1 class="title">', assets.destinationscaption, '</h1>',
                 '</div>'];

            _element = $(str.join("")).get(0);

            for (var i = 0; i < model.countries.length; i++) {
                createCountry(_element, model.countries[0]);
            }

            root.appendChild(_element);
        }

        self = this;
        root = target;
    };

})();