/* ======================================================================
 * WikingObject abstract
 * ====================================================================== */
function WikingObject(json){
    this.imei = String(json.imei);
    this.rights = json.rights;
    this.name = json.name;
    this._isActive=json.isActive;
    this.paymentcode = json.paymentcode;
	this.group = json.group == undefined ? '' : json.group;
	this.renew = json.renew; //odnów
    /*
     * styl
     */ 
    this.markerId = json.marker;
    this.color = json.color;
    /* 
     */    

    this.arr = [[],[]]; // lng,lat,array
    
    /*
     * niechaj żyje kompozycja! składowe klasy:
     */
    this.Pojazd = new ObjectMarker(json.marker,json.color); // marker pojazdu
	this.Label = new MarkerLabel(json.color,json.name); // marker pojazdu

	this.Pojazd.getNode().id='objectmarker'+this.imei;
	this.Label.getNode().id='markerlabel'+this.imei;

    GEvent.bindDom(this.Pojazd.getNode(),'click',this,this.drawInfo);
    GEvent.bindDom(this.Pojazd.getNode(),'mouseover',this,this.mouseover);
    GEvent.bindDom(this.Pojazd.getNode(),'mouseout',this,this.mouseout);
    GEvent.bindDom(this.Label.getNode(),'click',this,this.drawInfo);
    GEvent.bindDom(this.Label.getNode(),'mouseover',this,this.mouseover);
    GEvent.bindDom(this.Label.getNode(),'mouseout',this,this.mouseout);
}
WikingObject.prototype.getImei = function(){
    return this.imei;
}
WikingObject.prototype.getName = function(){
    return this.name;
}
WikingObject.prototype.getGroup = function(){
    return this.group;
}
WikingObject.prototype.getRights = function(){
    return this.rights;
}
/* ----------------------------------------------------------------------
 * flags: visible, follow
 * ---------------------------------------------------------------------- */
WikingObject.prototype.setFlags = function(flags){
    for (var f in flags)
        this.flags[f] = flags[f];
    this.applyFlags();
}

WikingObject.prototype.getColor = function(){
    return this.color;
}

WikingObject.prototype.getMarkerId = function(){//zwraca ID stylu markera
    return this.markerId;
}
WikingObject.prototype.setMarker = function(id){
    this.markerId=parseInt(id,10);
    this.Pojazd.setMarker(id);
}

WikingObject.prototype.getPaymentCode = function(){
        return this.paymentcode;
}

WikingObject.prototype.setGroup = function(group){
	var self=this;
    new Ajax.Request('/thingy/setstyle?imei='+this.imei+'&g='+group,
    {
        method:'GET',
        onSuccess:function() {
			self.group = group;
			Wiking.Event.trigger({'e':'change_object_group','imei':self.imei,'group':group});
		},
        onFailure:function() {}
    });
}

WikingObject.prototype.setName = function(name){
	var self=this;
    new Ajax.Request('/thingy/setstyle?imei='+this.imei+'&n='+name,
    {
        method:'GET',
        onSuccess:function() {
			self.name = name;
			Wiking.Event.trigger({'e':'change_object_name','imei':self.imei,'name':name});
		},
        onFailure:function() {}
    });
}

/* ----------------------------------------------------------------------
 * flags: visible, follow
 * ---------------------------------------------------------------------- */
WikingObject.prototype.getFlag = function(flagname){
    return this.flags[flagname];
}

/* ----------------------------------------------------------------------
 * @spec getPosition() -> TLngLat()
 * ---------------------------------------------------------------------- */
WikingObject.prototype.getPosition = function(){
    return (this.arr[0].length > 0) ? this.Pojazd.getPosition() : false;
}
WikingObject.prototype.getLabelPosition = function(){
    return (this.arr[0].length > 0) ? this.Label.getPosition() : false;
}

WikingObject.prototype.isActive = function(){
    return this._isActive;
}
WikingObject.prototype.setActive = function(act){
    this._isActive=act;
}

WikingObject.prototype.getData = function(){
    return this.arr;
}

WikingObject.prototype.recalculateLabelPos = function(positions){
	var pos = this.getLabelPosition();
	var change = false;
	var width = this.Label.getWidth();
	var height = this.Label.getHeight()
	for(var i=0; i<positions.length; i++) {
		var sx = pos.x - positions[i].x;
		var sy = pos.y - positions[i].y;
		if(Math.abs(sy) < height && Math.abs(sx) < width) {
			this.Label.setPosition(new GPoint(pos.x, pos.y+height-sy));
			change = true;
		}
	}
	if(change) this.recalculateLabelPos(positions);
	return this.getLabelPosition();
}

/*
 * rysowanie infoboxa na click
 */
WikingObject.prototype.drawInfo = function(e){
    Event.stop(e);
    if (!this.infobox){
        this.infobox = new ObjectInfo(this);
    }else{
        if(this.infobox.isVisible())
            Wiking.getMap().removeOverlay(this.infobox)
        else
            Wiking.getMap().addOverlay(this.infobox)
    }
}

WikingObject.prototype.mouseover = function(){
    document.getElementById('obj'+this.imei).style.background="#FFE4B5";
}

WikingObject.prototype.mouseout = function(){
    document.getElementById('obj'+this.imei).style.background="white";
}
/* ----------------------------------------------------------------------
 * @spec toString() -> String()
 * ---------------------------------------------------------------------- */
WikingObject.prototype.toString = function(){
    return "WikingObject";
}
