function DynamicModelUpdateController(args) {
    this.model = args.model;
    this.dataSource = args.dataSource;
    this.seconds = args.seconds;
    this.timeMarker = 0;
}
;

DynamicModelUpdateController.prototype.pollServer = function() {
    try{
        this.dataSource.poll(this.timeMarker, this, "onResponse");
    }catch(e){
        // TODO [eugenek] 
    }
};

DynamicModelUpdateController.prototype.pollServerScroll = function() {
    try{
        this.dataSource.poll(this.timeMarker, this, "onResponseScroll");
    }catch(e){
        // TODO [eugenek] 
    }
};

DynamicModelUpdateController.prototype.syncMarker = function() {
    this.dataSource.poll(this.timeMarker, this, "onResponseAdjustMarker");
};


DynamicModelUpdateController.prototype.onResponseScroll = function(/*Number*/ marker, /*XMLDoc*/ data) {
    var allevents = data.getElementsByTagName("event");
    if(allevents.length > 0){
    	  var j = 0;
        var rows = [allevents.length];
        for (var i = 0; i < allevents.length; i++) {
        	//filter the update to only include files in view
        	var id = allevents[i].getAttribute("file");
        	var testy =id.substring(0,id.indexOf('_'))+".html";
        	var elem = document.getElementById(testy);
        	if (elem) {
            rows[j] = testy; 
            j++;
        	}  
        }
        //check size of added to not make uneccessary update
        if(j>0){        	
        	this.model.updateScrollRows();
      	}
    }
    var newMarker = data.getAttribute("lu");
    this._updateMaker(newMarker);
    
// this.model.updateScrollRows();
};

DynamicModelUpdateController.prototype.onResponse = function(/*Number*/ marker, /*XMLDoc*/ data) {
    var allevents = data.getElementsByTagName("event");
    if(allevents.length > 0){
    	  var j = 0;
        var rows = [allevents.length];
        for (var i = 0; i < allevents.length; i++) {
        	//filter the update to only include files in view
        	var id = allevents[i].getAttribute("file");
        	var elem = document.getElementById(id);
        	if (elem) {
            rows[j] = id; 
            j++;
        	}  
        }
        //check size of added to not make uneccessary update
        if(j>0){        	
        	var newRows = [j];
        	for (var i = 0; i < j; i++) {
      			newRows[i] = rows[i];
      		}	
        	this.model.updateRows(newRows);
      	}
    }
    var newMarker = data.getAttribute("lu");
    this._updateMaker(newMarker);
};

DynamicModelUpdateController.prototype.onResponseAdjustMarker = function(/*Number*/ marker, /*XMLDoc*/ data) {
    var newMarker = data.getAttribute("lu");
    this._updateMaker(newMarker);
};


DynamicModelUpdateController.prototype._updateMaker  = function(/*Number*/ newMarker){
    var inm = parseInt(newMarker,10);
    if(inm > this.timeMarker){
        this.timeMarker = inm;
    }
};

DynamicModelUpdateController.prototype.start = function() {
    this.stop;
    var obj = this;
    var methor = "pollServer";

    var callback = function() {
        obj[methor]();
    };

    this.pExecutor = new PeriodicalExecuter(callback, this.seconds);

};


DynamicModelUpdateController.prototype.startscroll = function() {
    this.stop;
    var obj = this;
    var methor = "pollServerScroll";

    var callback = function() {
        obj[methor]();
    };

    this.pExecutor = new PeriodicalExecuter(callback, this.seconds);

};

DynamicModelUpdateController.prototype.stop = function() {
    if (this.pExecutor) {
        this.pExecutor.stop();
    }
};