if(!this.ultramob) {
	ultramob = new function () {

		var base = 'http://200.189.182.243/ultramob_LOJAS/api/';
		var head = document.getElementsByTagName("head").item(0);
		var callbackFunc = null;

		/*************** Get's and Set's ***************/

		this.getCallback = function() {
			return callbackFunc;
		};

		this.setCallback = function(value) {
			callbackFunc = value;
		};
		
		/*************** Private functions ***************/

		function setScript(url) {
			try {
				// Create the script tag
				var scriptTag = document.createElement("script");
				
				// Add script object attributes
				scriptTag.setAttribute("type", "text/javascript");
				scriptTag.setAttribute("charset", "utf-8");
				scriptTag.setAttribute("src", base + url + (url.indexOf("?") == -1? '?': '&') + Math.round(1000000 * Math.random()) + '=1');
				
				head.appendChild(scriptTag);
				return true;
			}
			catch (e) {
				return false;
			}
		}

		function setCookie(name, value) {
			var date = new Date();
			date.setTime(date.getTime() + (60*60*1000));
			var expires = "; expires=" + date.toGMTString();
			document.cookie = name + "=" + value + expires + "; path=/";
		}

		function getCookie(name) {
			var nameEQ = name + "=";
			var ca = document.cookie.split(';');

			for(var i=0;i < ca.length;i++) {
				var c = ca[i];
				while (c.charAt(0)==' ') c = c.substring(1,c.length);
				if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
			}

			return null;
		}

		/*************** Public functions ***************/
		
		this.existsSubscription = function(phone, applicationId, callback) {
			if(phone.match('[0-9]{10}') && applicationId != null) {
				this.setCallback(callback);

				var parameter = 'phone=' + phone;
				parameter += '&applicationId=' + applicationId;
				parameter += '&type=json';
				parameter += '&callback=ultramob.directCallback';

				return setScript('existsSubscription?' + parameter);
			}

			return false;
		};

		this.sendPassword = function(phone, applicationId, applicationName, idContent, channel, origin, url, chargeUnit, la, senderAlias, callback, idUser, carrierName) {
			if(phone.match('[0-9]{10}') && applicationId != null) {
				setCookie('phone' + applicationId, phone);
				this.setCallback(callback);

				var parameter = 'phone=' + phone;
				parameter += '&applicationId=' + applicationId;
				parameter += '&applicationName='+applicationName;
				parameter += '&cp=contents';
				parameter += '&type=json';
				parameter += '&callback=ultramob.callback';

				if(channel != null) {
					parameter += '&cn='+channel;
				}
				if(idContent != null) {
					parameter += '&en='+idContent;
				}
				if(url != null) {
					parameter += '&url='+url;
				}
				if(origin != null && origin.match('(web|wap|simcard)')) {
					parameter += '&origin=' + origin;
				}
				if(chargeUnit != null) {
					parameter += '&chargeUnit=' + chargeUnit;
				}
				if(la != null) {
					parameter += '&la=' + la;
				}
				if(senderAlias != null) {
					parameter += '&senderAlias=' + senderAlias;
				}
				if(idUser != null){
					parameter += '&idUser=' + idUser;
				}
				if(carrierName != null){
					parameter += '&carrierName=' + carrierName;
				}

				return setScript('sendPassword?' + parameter);
			}

			return false;
		};
		
		this.sendPushDownload = function(phone, applicationId, applicationName, idContent, channel, password, origin, extra, url, chargeUnit, la, senderAlias, callback, carrierName) {
			if(phone.match('[0-9]{10}') && applicationId != null) {
				var phone = getCookie('phone' + (applicationId != null? applicationId: ''));
				this.setCallback(callback);

				var parameter = 'phone=' + phone;
				parameter += '&applicationId=' + applicationId;
				parameter += '&applicationName='+applicationName;
				parameter += '&cn='+channel;
				parameter += '&en='+idContent;
				parameter += '&cp=contents';
				parameter += '&url='+url;
				parameter += '&password=' + password;
				parameter += '&type=json';
				parameter += '&callback=ultramob.callback';

				if(origin != null && origin.match('(web|wap|simcard)')) {
					parameter += '&origin=' + origin;
				}
				if(extra != null) {
					parameter += '&extra=' + extra;
				}
				if(chargeUnit != null) {
					parameter += '&chargeUnit=' + chargeUnit;
				}
				if(la != null) {
					parameter += '&la=' + la;
				}
				if(senderAlias != null) {
					parameter += '&chargeUnit=' + senderAlias;
				}
				if(carrierName != null) {
					parameter += '&carrierName=' + carrierName;
				}

				return setScript('sendPushDownload?' + parameter);
			}

			return false;
		};

		this.sendSubscription = function(password, origin, extra, callback) {
			if(password.match('[0-9]{4}')) {
				var phone = getCookie('phone' + (application != null? application: ''));
				this.setCallback(callback);

				var parameter = 'phone=' + phone;
				parameter += '&password=' + password;
				parameter += (origin != null && origin.match('(web|wap|simcard)')? '&origin=' + origin: '');
				parameter += (extra != null? '&extra=' + extra: '');
				parameter += (application != null? '&application=' + application: '');
				parameter += '&type=json';
				parameter += '&callback=ultramob.callback';

				return setScript('sendSubscription?' + parameter);
			}

			return false;
		};

		this.callback = function(response) {
			var parameter = false;

			if(response != null&& response.ultramobapi != null) {
				if(response.ultramobapi.status.toLowerCase() == 'success') {
					parameter = true;
				}
				else {
					parameter = response.ultramobapi.error;
				}
			}

			this.getCallback()(parameter);
		};

		this.directCallback = function(response) {
			this.getCallback()(response != null? response.ultramobapi: response);
		};	
	};
}