/* ----------------------------------------
 * -- SERVICES ----------------------------
 * ---------------------------------------- */
nf.fw.globalservices = {
	proxy: null,
	queue: [],
	isProxyLoaded: false,
	onProxyLoaded: function() {
		var self = this;
		$.each(this.queue, function() {
			self.get(this);
		});
		this.queue = [];
	},
	
	getBridge: function() {
		var self = this;
		if (f4a_js_flash != null) {
			var f4a = new f4a_js_flash({'id':'f4a_nike','swfname':'f4a.swf','swfuri':'/nikefootball/assets/framework/v1/swf/f4a.swf'});
			f4a.createSwfObject();
			var intervalKey = window.setInterval(function(){
				if (f4a.checkFlash()){
					window.clearInterval(intervalKey);
					self.proxy = f4a;
					self.isProxyLoaded = true;
					self.onProxyLoaded();
				}
			}, 500);
		}		
	},

	get: function(input) {
		var url = input.url || '';
		var method = input.method || 'GET';
		var data = input.data || {};
		var dataType = input.dataType || 'json';
		var callback = input.callback || function() {return 'ding'};

		//if (url.toLowerCase().substr(0, 4) == 'http') { // remote service call requires Flash proxy
			var dataExploded = '';
			$.each(data, function(name, value) {
				dataExploded += '&' + name + '=' + value;
			});
			if (dataExploded != '') {
				dataExploded = dataExploded.replace('&', '?'); // replaces first occurrence of '&' only
			}
		
			var proxyParams = {
				url: url + dataExploded,
				meth: method,
				contenttype: dataType,
				callback: callback,
				onready: function(data) {
					if(data.indexOf("<?xml") != -1){
						if (data) {
							callback(data);
						}
					} else {
						if (data) {
							data = '(' + data.replace(/\\n|\\r/g, '') + ')';
							callback(eval(data));  // JSON.parse doesn't work with responses from the proxy!?
						}
					}
				}
			};
		
			if (this.isProxyLoaded) {
				this.proxy.open(proxyParams);
			} else {
				this.queue.push(proxyParams);
			}
		/*} else { // standard AJAX request for local service
			$.ajax({
				url: url,
				data: data,
				type: method,
				dataType: dataType,
				success: callback,
				error: function(response) {
					throw new Error(response.responseText);
				}
			});
		}*/
	},

	get2: function(input) {
		var url = input.url || '';
		var method = input.method || 'GET';
		var data = input.data || {};
		var dataType = input.dataType || 'json';
		var callback = input.callback || function() {return 'ding'};

		var dataExploded = '';
		$.each(data, function(name, value) {
			dataExploded += '&' + name + '=' + value;
		});
		if (dataExploded != '') {
			dataExploded = dataExploded.replace('&', '?'); // replaces first occurrence of '&' only
		}
	
		$.ajax({
			url: url,// + dataExploded,
			data: data,
			type: method,
			dataType: dataType,
			success: callback,
			error: function(response) {
				throw new Error(response.responseText);
			}
		});
		
	},
	
	post2: function(input) {
		var url = input.url || '';
		var method = input.method || 'POST';
		var data = input.data || {};
		var dataType = input.dataType || 'json';
		var callback = input.callback || function() {return 'ding'};

		var dataExploded = '';
		$.each(data, function(name, value) {
			dataExploded += '&' + name + '=' + value;
		});
		if (dataExploded != '') {
			dataExploded = dataExploded.replace('&', '?'); // replaces first occurrence of '&' only
		}
	
		$.ajax({
			url: url, // + dataExploded,
			data: data,
			type: method,
			dataType: dataType,
			success: callback,
			error: function(response) {
				throw new Error(response.responseText);
			}
		});
		
	}
	
};
	
nf.fw.services = {
	isServiceError: function(data) {
		var isError = data.success == 'ERROR';
		if (isError) {
			throw new Error(data.errorMessages.join(', '));
		}
		return isError;
	},
	
	urls: {
		
		getTrainingUserProfile: '/nikefootball/training/services/getUserProfile.json', // Training User
		checkEliteCode: '/nikefootball/training/services/checkEliteCode.json',
		
		//getUPMUserImage: 'http://www.nike.com/usa/services/mediaupload/media_upload_service.jsp',
		//getOrderDetails: 'https://secure-store.nike.com/services/cartService?action=getOrder',
		//getVideos: nf.gv.host + '/nikeos/p/nikeos/en_US/video_wall/odaptor',
		//checkEliteCode: nf.gv.host + '/nikefootball/training/services/checkEliteCode.json',
		//getTwitter: 'http://twitter.com/status/user_timeline/41147159.json?count=10',
		//getShorty: 'http://origin-go.nike.com/url/shorten',
		
		simpleProxy: "/nikefootball/profileProxy.jsp"
	},
	
	getOrderDetails: function(input) {
		var self = this;
		var callback = input.callback || function(data) {};
		
		nf.fw.globalservices.post2({
			url: this.urls.simpleProxy,
			dataType: "xml",
			data: {
				target: "cartService",
				action: "getOrder",
				data: "none",
				lang_locale: nf.gv.locale,
				country: nf.gv.country
			},
			//"<request><action>getOrder</action><data>none</data><lang_locale>en_GB</lang_locale><country>GB</country></request>",
			callback: function(data) {
				if (!self.isServiceError(data)) {
					callback({
						data: data
					});
				}
			}
		});
		
	},

	getTrainingUserProfile: function(input) {
		var self = this;
		var callback = input.callback || function(data) {};
		
		nf.fw.globalservices.get({
			url: this.urls.getTrainingUserProfile,
			dataType: "json",
			callback: function(json) {
				if (!self.isServiceError(json)) {
					callback({
						data: json
					});
				}
			}
		});

	},
	
	checkEliteCode: function(input) {
		var self = this;
		var code = input.code || '';
		var callback = input.callback || function(data) {};
		nf.fw.globalservices.get({
			url: this.urls.checkEliteCode,
			data: {
				code: code
			},
			dataType: "json",
			callback: function(json) {
				if (!self.isServiceError(json)) {
					callback({
						data: json
					});
				}
			}
		});
	},

	getShorty: function(input) {
		var self = this;
		var longUrl = input.longUrl || '';
		var APIkey = 'f929c989-17ab-43d5-905f-25896d3b05a5'; // Nike Football specific
		var callback = input.callback || function(data) {};
		
		nf.fw.globalservices.get2({
			url: this.urls.simpleProxy,
			data: {
				target: "shortyService",
				longUrl: longUrl,
				key: APIkey
			},
			dataType: "json",
			callback: function(json) {
				if (!self.isServiceError(json)) {
					callback({
						data: json
					});
				}
			}
		});
	},
	
	getRssFeed: function(input) {
		var self = this;
		var rssFeedUrl = input.rssFeedUrl || '';
		var dataType = input.dataType || 'jsonp';
		var callback = input.callback || function(data) {};
		
		nf.fw.globalservices.get2({
			url: rssFeedUrl,
			dataType: dataType,
			callback: function(xml) {
				if (!self.isServiceError(xml)) {
					callback({
						data: xml
					});
				}
			}
		});
	},
	
	logOut: function(input) {
		
		var self = this;
		var callback = input.callback || function(data) {};
		
		nf.fw.globalservices.post2({
			url: this.urls.simpleProxy,
			dataType: "xml",
			data: {
				target: nf.gv.site_mode + "ProfileService",
				action: "logout"
			},
			callback: function(data) {
				if (!self.isServiceError(data)) {
					callback({
						data: data
					});
				}
			}
		});
		
	}
	
};

// ----------------------------------------
// -- DOM READY ---------------------------
// ----------------------------------------
$(function() {
	
	// Add container for flash proxy / callback manager (f4a_js.js)
	$("body").append('<div id="f4a_nikeflashcontent"></div>');
	
	// Load flash proxy / callback manager
	nf.fw.globalservices.getBridge();
	
	
	if(debugMode){
		console.log("-- MSG -- Services loaded");
	}
});

