﻿//###### Communication #################################

Cv.Communication = Class.create({
	initialize: function() {
			
	}
});

//params:		"&providerid=" + data.providerid OR "&secret=" + encodeURIComponent(data.secret);
//serviceUrl :	"/api/1.0/getfolders.ashx?";
Cv.Communication.getCall = function(serviceUrl, params, callback, scope) {
	params = "rnd=" + Math.random() + params;
	
	var req = serviceUrl; 
	
	req += params;
	new Ajax.Request(req, {									
		method: "get",
		onSuccess: function(res) {
			if (callback)
				callback.call(scope, res.responseText.evalJSON());
		},
		onFailure: function(res) {
			var commResp = res.responseText.evalJSON();
			alert("Error: " + res.statusText);
		}
	});
}

//params:		"&providerid=" + data.providerid OR "&secret=" + encodeURIComponent(data.secret);
//serviceUrl :	"/api/1.0/getfolders.ashx?";
Cv.Communication.postCall = function(serviceUrl, params, callback, scope) {
	var req = serviceUrl; 
	
	var ua = new Hash();
	
	
	var params = "rnd=" + Math.random() + params;
	new Ajax.Request(req, {									
		method: "post",
		parameters: params,
		onSuccess: function(res) {
			if (callback)
				callback.call(scope, res.responseText.evalJSON());
		},
		onFailure: function(res) {
			var commResp = res.responseText.evalJSON();
			alert("Error: " + res.statusText);
		}
	});
}


//###### RequestQueue #################################

/*
 Usage:
 
 function testBulkRequest() {			
	CvBulkRequest.reset();
	CvBulkRequest.callback = myCallback;
	CvBulkRequest.scope = this;
	
	var token = encodeURIComponent(CvBaseUI.getToken());
	var providerId = CvBaseUI.getProviderId();
	
	CvBulkRequest.requests.push([CvBeeTaggCore.getUsersOfProvider, [ token, providerId ]]);
	CvBulkRequest.requests.push([CvBeeTaggCore.getApplications, [ token ]]);
	
	CvBulkRequest.execute();
 }

 function myCallback(res) {
	alert(res[0].Users[0].Name + " " + res[0].Users[1].Name);
 }
 */

Cv.BulkRequest = Class.create({
	requests : new Array(),
	responses : new Array(),
	callback : null,
	callbackAfterEach : null, //Will be called everytime a request has been completed (good for progress bar)
	scope : null,
	_requestCount : null,
	
	initialize: function() {
		if (window.CvBulkRequest)
			return window.CvBulkRequest;
	},
	
	execute : function(res) {
		if (res)
			this.responses.push(res);
		else
			this._requestCount = this.requests.length;
		
		if (this.responses.length == this._requestCount) {
			this.callback.call(this.scope, this.responses);
			return;
		}
		else {
			if (this.callbackAfterEach)
				this.callbackAfterEach.call(this.scope, this.responses, this._requestCount, this.responses.length);
		}
		
		var request = this.requests.shift();
		var method = request[0];
		var params = request[1];
		params.push(this.execute);
		params.push(this);
		
		method.apply(this.scope, params);		
	},
	
	reset : function() {
		this.requests = new Array();
		this.responses  = new Array();
		this.callback = null;
		this.scope = null;
	}
});

if (!window.CvBulkRequest) 
	CvBulkRequest = new Cv.BulkRequest();
