/**
 * gettext
 * @param String msgid
 * @param Object parameters опционально — подставляемые в шаблон параметры
 * @return String
 */
var _ = (function() {
    var gt = new Gettext( { 'domain' : 'messages' } );

    var processTemplate = function(template, parameters) {
        return template.replace(/\{[^\}]+\}/g, function(entry) {
            entry = entry.slice(1, -1);
            return parameters[entry];
        });
    };

    return function( msgid, parameters ) {
        var translated = gt.gettext( msgid );
        if ( ! translated ) {
            translated = msgid;
        }
        if (parameters) {
            translated = processTemplate(translated, parameters);
        }
        return translated;
    };
})();

function openVideoPopup( html, target ) {
    var h = 394;
    var w = 700;
    var popup = new Element( 'div' )
        .setStyles( {
            'position' : 'absolute',
            'top' : parseInt( window.getScroll().y + ( window.getSize().y - h ) / 2 ),
            'left' : parseInt( ( window.getSize().x - w ) / 2 ),
            'width' : w,
            'height' : h,
            'background' : '#DDD',
            'border' : '2px solid white'
        } )
        .set( 'id', 'video-holder' )
        .inject( document.body );
    new Element( 'div' ).set( "id", "mediaspace" )
    	.set('html', html)
    	.inject( popup );
    
    var closer = function ( e ) {
        if ( !popup.hasChild( e.target ) && e.target != target ) {
            document.body.removeEvent( 'click', closer );
            popup.dispose();
        }
    }
    
    document.body.addEvent( 'click', closer );
}

/**
 * Делает таблицы полосатыми
 * @param inside_element - внутри какого элемента делать таблицы полосатыми. По умолчанию - document
 * @todo использовать mootools.More.HtmlTable.Zebra
 */
function separateTableRows(inside_element) {
    if( !inside_element ) {
        inside_element = document;
    }
    var affected_elements = inside_element.getElements('table.allow-separate');
    if( inside_element.tagName && inside_element.tagName.toLowerCase() == 'table' && inside_element.hasClass('allow-separate') ) {
        affected_elements.push(inside_element);
    }
    affected_elements.each(function(elem) {
        var bodies = elem.getChildren('tbody');
        if( !bodies.length ) {
            bodies = [elem];
        }
        bodies.each(function(b) {
            var odd = false;
            b.getChildren('tr').each(function(tr) {
                if( !tr.getElement('td') || tr.hasClass('hidden') ) {
                    return;
                }

                if( odd ) {
                    tr.addClass('separated');
                } else {
                    tr.removeClass('separated');
                }
                tr.addEvent('mouseenter', function() {this.addClass('tr-hover')});
                tr.addEvent('mouseleave', function() {this.removeClass('tr-hover')});
                odd = !odd;
            });
        });
    });
}

function makeShadowed( el ) {
    var tpl = '<i class="shd br"></i>\
        <i class="shd bl"></i>\
        <i class="shd tr"></i>\
        <i class="shd tl"></i>\
        <i class="shd bottom"></i>\
        <i class="shd right"></i>\
        <i class="shd left"></i>\
        ';
    var div = new Element( 'div' ).set( 'html', tpl );
    div.getChildren().inject( el, 'top' );

    el.addClass( 'shadowed' );
}

window.addEvent('domready', separateTableRows);

window.addEvent('domready', function() {
    $$('input.DatePicker').each(function(el) {
        new DatePicker(el);
    });
});

function showBaloon(top, left, text) {
	var baloon = new Element( 'div' )
	    .addClass( 'baloon' )
	    .setStyles({top: top, left: left})
	    .adopt( new Element( 'div' ).addClass( 'baloon-arr' ).addClass( 'left' ) )
	    .adopt( new Element( 'div' ).addClass( 'baloon-content' ).set( 'html', text ) )
	    .adopt( new Element( 'div' ).addClass( 'baloon-bottom' ) )
	    .inject( document.body )
	    ;
	var f = function(e) {
		baloon.dispose();
		document.removeEvent('click', f);
	};
	document.addEvent( 'click', f );	
	return baloon;
}

window.addEvent('domready', function() {
	$$('.help-baloon').addEvent('click', function(evt) {
		evt.stop();
		var position = this.getPosition();
		showBaloon(position.y + 16 , position.x - 16, this.get('help_text') )
	});
});