
var fbay = function() {
	
	
	var obj = {
		
		cfg: {
			findingapi_uri: "http://svcs.ebay.com/services/search/FindingService/v1",
			shoppingapi_uri: "http://open.api.ebay.com/shopping"
		
		},
		
		req: {
			'SECURITY-APPNAME': "Frederic-5f7b-4b10-a0ca-a0b5265a52c3",			
			'SERVICE-VERSION': "1.10.0",
			'RESPONSE-DATA-FORMAT': 'JSON',
			'REST-PAYLOAD': '',
			'GLOBAL-ID': 'EBAY-DE',
			'affiliate.networkId': '9',
			'affiliate.trackingId': '5336832429', //campaignid
			'affiliate.customId': ''
		},
		
		findByKeywords: function(term, count, callback, errback, customid) {
			
			var req = _.clone(this.req);
			_.extend(req, {
				'OPERATION-NAME': "findItemsAdvanced",
				'paginationInput.entriesPerPage': count,
				'keywords': term
			});
			
			this._makeTheCall( this.cfg.findingapi_uri, req, function(data) {
								
				if (!_.isUndefined( data.findItemsAdvancedResponse[0] )) {
					var res = data.findItemsAdvancedResponse[0];
					
					if (res.ack[0] == "Success") {	
						
						callback( res.searchResult[0].item || [] );
					} else if (res.ack[0] == "Failure") {
						errback(res.errorMessage[0].error[0].message[0]);
					}
				} else {
					errback("Schnittstellenfehler");
				}
				
			}, errback);
			
						
			
		}, 
		
		
		findInShop: function(shop, count, callback, customid) {
			
			var req = _.clone(this.req);
			_.extend(req, {
				'OPERATION-NAME': "findItemsIneBayStores",
				'paginationInput.entriesPerPage': count,
				'storeName': shop,
				'affiliate.customId': customid
			});
			
			var _this = this;
			this._makeTheCall( this.cfg.findingapi_uri, req, function(data) {
				
				if (!_.isUndefined( data.findItemsIneBayStoresResponse[0] )) {
					var res = data.findItemsIneBayStoresResponse[0];
					
					if (res.ack[0] == "Success") {						
						callback( res.searchResult[0].item || [] );
					} else if (res.ack[0] == "Failure") {
						errback(res.errorMessage[0].error[0].message[0]);
					}
				} else {
					errback("Schnittstellenfehler");
				}
	
			}, errback);
				
		},
		
		findBySeller: function(seller, count, callback, errback, customid) {
			
			var req = _.clone(this.req);
			_.extend(req, {
				'OPERATION-NAME': "findItemsAdvanced",
				'paginationInput.entriesPerPage': count,				
				'itemFilter(0).name': 'Seller',
				'itemFilter(0).value': seller,
				'affiliate.customId': customid
			});
			
			this._makeTheCall( this.cfg.findingapi_uri, req, function(data) {
				
				if (!_.isUndefined( data.findItemsAdvancedResponse[0] )) {
					var res = data.findItemsAdvancedResponse[0];
					
					if (res.ack[0] == "Success") {						
						callback( res.searchResult[0].item || [] );
					} else if (res.ack[0] == "Failure") {
						errback(res.errorMessage[0].error[0].message[0]);
					}
				} else {
					errback("Schnittstellenfehler");
				}
	
			}, errback);
		},
		
		
		checkSeller: function(seller, callback, errback) {
			
			var req = _.clone(this.req);
			_.extend(req, {
				'OPERATION-NAME': "findItemsAdvanced",
				'paginationInput.entriesPerPage': 1,				
				'itemFilter(0).name': 'Seller',
				'itemFilter(0).value': seller
			});
			
			this._makeTheCall( this.cfg.findingapi_uri, req, function(data) {
				
				if (!_.isUndefined( data.findItemsAdvancedResponse[0] )) {
					var res = data.findItemsAdvancedResponse[0];
					
					if (res.ack[0] == "Success") {						
						callback( true );
					} else if (res.ack[0] == "Failure") {
						callback( false );
					}
				} else {
					errback("Schnittstellenfehler");
				}
	
			}, errback);
			
		},
		
		_makeTheCall: function(uri, data, callback, errback) {
			
			$.ajax({
				url: uri,
				data: data,
				success: function(data, textStatus, jqXHR) {
					
					if (!_.isUndefined(data['ms.errorMessage'])) {
						errback(data['ms.errorMessage'][0].error[0].message[0]);
					} else {
						callback(data);
					}
				},
				error: function(erro) {
					errback(erro);
				},				
				dataType: 'jsonp'
			});
			
		}
		
		
			
			

	};
		
	return obj;
}

/* --------------------------------------------------------------------- */


var fbayBanner = function(keywords, count, domselector, dock) {
		
	var obj = {
		domselector: domselector,
		collection: [],
		keywords: keywords,
		dock: dock,
			
		init: function(keywords, count) {
			
			var bay = new fbay();
			var _this = this;
			
			bay.findByKeywords(keywords, count + 10, function(items){ //Toleranz 10 mehr wegen evtl. fehlender Bilder
				
				for (var i = 0; i < items.length; i++) {
					if (_this.collection.length < count) {
						
						var img = new Image();				
						img.src = items[i].galleryURL;	
						if (!_.isUndefined(items[i].galleryURL)) {
							
							var price = items[i].sellingStatus[0].convertedCurrentPrice[0].__value__;
							price = price.replace(/\.0$/,'');
							if (price.match(/\.[0-9]$/)) { price = price + "0"; }
							
							var item = {
								img: img,
								href: items[i].viewItemURL,
								price: price + " &euro;",
								status: items[i].sellingStatus[0].sellingState[0]
							}
							
							img.onload = function(e) { _this._initItems(); } 
							
							_this.collection.push(item);
						}
					}
				}
				
			}, function(data){console.log(data);}, _this.domselector + "," + keywords);
			
		},
		
		_initItems: function() {
			
			var _this = this;
			_.each(this.collection, function(item, i) {
				if (item.img.complete) {
						
					
					var $bayitem = $("<div class='bayItem'></div>");
					$bayitem.append(item.img);
					
					if (_this.dock == "bottom") {
						$('img', $bayitem).attr("style", "margin-left:"+ ((140-item.img.width) / 2)+"px;");
					}
					if (_this.dock == "center") {
						$('img', $bayitem).attr("style", "margin-left:"+ ((140-item.img.width) / 2)+"px; margin-top:"+ ((140-item.img.height) / 2)+"px;");
					}
					if (_this.dock == "fit") {
						$($bayitem).attr("style", "width:"+item.img.width+"px; height:"+item.img.height+"px;");
					}
					
					$bayinfo = $("<div class='bayInfo'></div>");
					if(item.status == "Active") {
						$bayinfo.append("<div class='bayPrice'>" + item.price + "</div>");
					}
					$bayitem.append($bayinfo);
					
					$(_this.domselector).append($bayitem);
					
					
					$bayitem.click(function() {
						//fire Analytics-Pixel
						_gaq.push(['_trackEvent', 'bayClicks', _this.domselector, _this.keywords]);
						
						//fire Adwords-Pixel
						var adwordsimg = new Image();
						adwordsimg.src = "http://www.googleadservices.com/pagead/conversion/1067709235/?value=0.10&amp;label=zo4iCNXdnAIQs-aP_QM&amp;guid=ON&amp;script=0";
						adwordsimg.onload = function() {
							
							//go to destination
							document.location.href = item.href;
							
						}
						
					});
					
					
					_this.collection.splice(i,1);
				}
			});
			
		}
		
	};
	
	obj.init(keywords, count);
		
	return obj;
}

