/**
 * @author rderksen
 */
namespace("UPC.util");

UPC.util.Jsonp = function () {
	var callbacks = [];
	var cbBaseId = now ();
	var timeout = 5000; // 5 seconds
	
	function now () {
		var today = new Date();
		return today.getTime();
	}
	
	function request (url, options) {
		var callbackId = cbBaseId++;
		
		callbacks[callbackId] = options.callbacks;
		
		if (typeof(callbacks[callbackId].onSuccess) == "undefined") return;
		
		callbacks[callbackId]._success = function (data){
			clearTimeout(callbacks[callbackId]._timeout);
			this.onSuccess(data);
		}.bind(callbacks[callbackId]);
		
		if (typeof(callbacks[callbackId].onTimeout) != "undefined") {
			callbacks[callbackId]._timeout = setTimeout(function(){
				this._success = Prototype.emptyFunction;
				this.onTimeout();
			}.bind(callbacks[callbackId]), timeout);
		}
		url = url.replace("=?", "=" + encodeURIComponent("UPC.util.Jsonp.callbacks[" + callbackId + "]._success"));
		url = /https:/.test(document.location.protocol) ? url.replace("http:", "https:") : url;
		
		var remote = /^(?:\w+:)?\/\/([^\/?#]+)/;
		if (remote.test(url)) {
			var head = document.getElementsByTagName("head")[0];
			var script = document.createElement("script");
			script.type = "text/javascript";
			script.src = url;
			head.appendChild(script);
		}
	}
	
	return {
		"request": request,
		"callbacks": callbacks
	}
}();

document.observe("dom:loaded", function () {
	if ($("loginbox") != null) {
		UPC.util.Jsonp.request("http://service.upc.nl/cckservices/myupcloginbox/login?format=json&jsoncallback=?", {
			"callbacks": {
				"onSuccess": function(data){
					$("loginbox").update(data);
				},
				"onTimeout": function(){
					$("loginbox").update("MijnUPC is momenteel niet beschikbaar. Probeert u het later nog eens.");
				}
			}
		});	
	}

	if ($("upcheaderlink") != null) {
		UPC.util.Jsonp.request("http://service.upc.nl/cckservices/myupcheaderlink?format=json&jsoncallback=?", {
			"callbacks": {
				"onSuccess": function(data){
					$("upcheaderlink").update(data);
				},
				"onTimeout": function(){
					$("upcheaderlink").update("MijnUPC niet beschikbaar");
				}
			}
		})
	}


	if ($("contactform") != null) {
		UPC.util.Jsonp.request("http://service.upc.nl/cckservices/contact?format=json&jsoncallback=?", {
			"callbacks": {
				"onSuccess": function(data){
					$("contactform").update(data);
				},
				"onTimeout": function(){
					$("contactform").update("Het contactformulier is momenteel niet beschikbaar. Probeert het later nog eens.");
				}
			}
		})
	}

	if ($("mobileprices") != null) {
		UPC.util.Jsonp.request("http://service.upc.nl/cckservices/mobileprices?format=json&jsoncallback=?", {
			"callbacks": {
				"onSuccess": function(data){
					$("mobileprices").update(data);
				},
				"onTimeout": function(){
					$("loginbox").update("Het prijsoverzicht is momenteel niet beschikbaar. Probeert u het later nog eens.");
				}
			}
		})
	}

	if ($("loginboxankeiler") != null) {
		UPC.util.Jsonp.request("http://service.upc.nl/cckservices/myupcloginankeiler?format=json&jsoncallback=?", {
			"callbacks": {
				"onSuccess": function(data){
					$("loginboxankeiler").update(data);
				},
				"onTimeout": function(){
					$("loginboxankeiler").update("Mijn UPC is momenteel niet beschikbaar. Probeert u het later nog eens.");
				}
			}
		})
	}

	if ($("retailcenterscontainer") != null) {
		UPC.util.Jsonp.request("http://service.upc.nl/cckservices/retailcenters?format=json&jsoncallback=?", {
			"callbacks": {
				"onSuccess": function (data) {
					$("retailcenterscontainer").update(data);
				},
				"onTimeout": function(){
					$("retailcenterscontainer").update("Het is momenteel niet mogelijk om het dichtstbijzijnde retailcenter te zoeken. Probeert u het later nog eens.")
				}
			}
		})
	}
})

