/**
 * Spolu s tridou Icon tvori zaklad k poslednimu kroku (umisteni)
 * @author David Durman
 */
var KTextil = Class.create(DivElement, {
    initialize: function(node){
	this.div = $(node);
	this.template = null;
	this.picture = null;
	this.colors = this.getAttribute("colors").evalJSON(true);
	this.color = null;
	this.icon_color = null;
	this.size = null;
    },

    /**
     * Pripravi drop_places, udela z nich Droppables
     */
    prepareDrops: function(){
	//	this.drops = this.div.select('div.drop_place');
	this.drops = $A(this.div.getElementsByClassName('drop_place'));
	
	var opt = {};
	for (var i = 0, dlen = this.drops.length; i < dlen; i++){
	    var drop = this.drops[i];
	    var opt = {
		accept: 'icon-size-' + this._getProportion(parseInt(drop.getStyle("width")), parseInt(drop.getStyle("height"))),
		hoverclass: "drop_place_hover",
		onDrop: this.onDrop
	    };
	    Droppables.add(drop, opt);
	}
    },

    /**
     * Pripravi ikony, udela z nich draggables
     */
    prepareIcons: function(){
	var icons = $A(this.div.getElementsByClassName('icon'));	
	var opt = {
	    revert: true,
	    ghosting: false
	};
	icons.each(function(i){
	    new Draggable(i, opt);
	});
    },

    /**
     * Pri upusteni ikony nad drop_place
     * @param DOMObject draggable ikona
     * @param DOMObject droppable drop place
     */
    onDrop: function(draggable, droppable){
	// jeste tam nic neni, vytvorim ikonu a prispendlim ji tam
	if (droppable.empty()){
	    var icon = new Icon(draggable);
	    icon.div.addClassName("in_drop_place");

	    // ikona se zcvrkne/roztahne podle drop place
	    var s = {
		width: droppable.getStyle("width"),
		height: droppable.getStyle("height")
	    };
	    $A($(icon.div).getElementsByTagName("img")).shift().setStyle(s);
	    icon.div.setStyle(s);
	    icon.show(droppable);
	    icon.makeDraggable();

	    // presun drop_place -> drop_place : starou ikonu smazu
	    if (draggable.hasClassName("in_drop_place"))
		draggable.remove();
	}
    },

    /**
     * @return array pole s ideckama ikon nebo null hodnotami, pokud tam ikony nejsou
     */
    getIconsId: function(){
	var icons = $A();
	for (var i = 0, dlen = this.drops.length; i < dlen; i++){
	    var drop = $(this.drops[i]);
	    var drop_icon = $A(drop.getElementsByClassName("icon")).shift();
	    icons.push( (drop_icon) ? Number(this.getAttribute(drop_icon, "id")) : null );
	}
	return icons;
    },

    /**
     * Zmeni barvu ikon v textilu.
     */
    changeIconsColor: function(color){
	for (var i = 0, dlen = this.drops.length; i < dlen; i++){
	    var drop = $(this.drops[i]);
	    var drop_icon = $A(drop.getElementsByClassName("icon")).shift();

	    if (drop_icon){
		var icon_colors = this.getAttribute(drop_icon, "colors").evalJSON(true);
		var img = $A($(drop_icon).getElementsByTagName('img'))[0];
		$(img).src = '/foto/katalog/' + icon_colors[color];
		new DivElement(drop_icon).setAttribute("picture", icon_colors[color]);
	    }
	}
	this.icon_color = color;
    },

    /**
     * Zmeni barvu textilu.
     */
    changeColor: function(color){
	// pokud se meni na cernou barvu, 
	// tak border okenek bude bily, aby sel videt
	for (var i = 0, dlen = this.drops.length; i < dlen; i++){
	    var drop = $(this.drops[i]);
	    if (color == '02' || color == '03' || color == '04')
		drop.setStyle({'borderColor' : 'white'});
	    else
		drop.setStyle({'borderColor' : 'black'});
	}	    

	if (this.colors[color]){
	    var img = $($A(this.div.getElementsByClassName("k_template_image")).shift());
	    img.src = '/foto/katalog/' + this.colors[color];
	    this.color = color;
	}
    },

    changeSize: function(size){
	this.size = size;
    }

});


/**
 * Kosik s ikonami
 */
var KIconBasket = Class.create(DivElement, {
    initialize: function(node){
	this.node = node;
    },

    /**
     * Zmeni barvu ikon v kosiku s ikonami
     */
    changeIconsColor: function(color){
	this.div = $(this.node);	// lazy initialization (div element jeste nemusi byt nacten)
	$A(this.div.getElementsByClassName("icon")).each(function(icon){
	    var icon_colors = (new DivElement).getAttribute(icon, "colors").evalJSON(true);
	    var img = $(icon).getElementsByTagName('img')[0];
	    $(img).src = '/foto/katalog/' + icon_colors[color];
	    new DivElement(icon).setAttribute("picture", icon_colors[color]);	    
	});
    }
});