<!--

/*
    FreePokerAlliance OpenSocial supported basic communication JavaScript functions
    (c) 2009, MGame Solutions
*/

var fpa = function() {

    var opts = {admin_baseurl:'http://api.freepokeralliance.com/adminservices.aspx',
    			stat_baseurl:'http://api.freepokeralliance.com/statservices.php',
    			mobile_baseurl:'http://mobile.freepokeralliance.com/mobileservices.php',
    			proxy_url:'',
    			opensocial:false,
    			use_proxy:false,
    			sn_id:''}
    
    function _bin2hex(str) {
        var i, f = 0, a = [];
        str += '';
        f = str.length;
        for (i = 0; i<f; i++) {
            a[i] = str.charCodeAt(i).toString(16).replace(/^([\da-f])$/,"0$1");
        }
        return a.join('');
    }
    
	function _urlencode(string) {
		string = string.replace(/\r\n/g,"\n");
		var utftext = "";
		for (var n = 0; n < string.length; n++) {
			var c = string.charCodeAt(n);
			if (c < 128) {
				utftext += String.fromCharCode(c);
			}
			else if((c > 127) && (c < 2048)) {
				utftext += String.fromCharCode((c >> 6) | 192);
				utftext += String.fromCharCode((c & 63) | 128);
			}
			else {
				utftext += String.fromCharCode((c >> 12) | 224);
				utftext += String.fromCharCode(((c >> 6) & 63) | 128);
				utftext += String.fromCharCode((c & 63) | 128);
			}
		}
		return escape(utftext);
	}
	
	function _urldecode(utftext) {
		var string = "",
			i = 0,
			c = c1 = c2 = 0;
		utftext = unescape(utftext);
		while ( i < utftext.length ) {
			c = utftext.charCodeAt(i);
			if (c < 128) {
				string += String.fromCharCode(c);
				i++;
			}
			else if((c > 191) && (c < 224)) {
				c2 = utftext.charCodeAt(i+1);
				string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
				i += 2;
			}
			else {
				c2 = utftext.charCodeAt(i+1);
				c3 = utftext.charCodeAt(i+2);
				string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
				i += 3;
			}
		}
		return string;
	}
	
	function _initparams() {
        var params = {};
        params[gadgets.io.RequestParameters.REFRESH_INTERVAL] = 0;
        params[gadgets.io.RequestParameters.AUTHORIZATION] = gadgets.io.AuthorizationType.SIGNED;
        return params;
	}
	
	function makeReq(url, data, callback, type, method) {
		if (opts.opensocial) {
			var params = _initparams();
			switch (type.toLowerCase()) {
				case 'json':
					params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.JSON;
					break;
				case 'xml':
					params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.XML;
					break;
				default:
					params[gadgets.io.RequestParameters.CONTENT_TYPE] = gadgets.io.ContentType.TEXT;
					break;
			}
			switch (method.toLowerCase()) {
				case 'post':
					params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.POST;
					params[gadgets.io.RequestParameters.POST_DATA] = gadgets.io.encodeValues(data);
					gadgets.io.makeRequest(url, callback, params);
					break;
				default:
					params[gadgets.io.RequestParameters.METHOD] = gadgets.io.MethodType.GET;
					gadgets.io.makeRequest(url+'?'+gadgets.io.encodeValues(data), callback, params);
					break;
			}
		} else {
			switch (method.toLowerCase()) {
				case 'post':
					switch (type.toLowerCase()) {
						case 'json':
						case 'xml':
							$.post(url,data,callback,type);
							break;
						default:
							$.post(url,data,callback);
							break;
					}
					break;
				default:
					switch (type.toLowerCase()) {
						case 'json':
						case 'xml':
							$.get(url,data,callback,type);
							break;
						default:
							$.get(url,data,callback);
							break;
					}
					break;
			}
		}
	}

    return {
        setopt: function(opt,val) {
    		opts[opt] = val;
        },
        getopt: function(opt) {
        	return opts[opt];
        },
        bin2hex: function(data) {
            return _bin2hex(data);
        },
        urlencode: function(data) {
            return _urlencode(data);
        },
        urldecode: function(data) {
        	return _urldecode(data);
        },
        sign: function(data, callbackFunct) {
       		makeReq(opts.proxy_url+opts.sn_id+'/sign/'+_bin2hex(data)+'.json', {}, callbackFunct, 'json', 'GET');
        },
        get_manufacturers: function(data, callbackFunct) {
        	if (opts.opensocial)
        		makeReq(opts.proxy_url+opts.sn_id+'/mobile/'+data+'/manufacturers.json', {}, callbackFunct, 'json', 'GET');
        	else
        		makeReq(opts.proxy_url, {client_id:data, load:'manufacturers'}, callbackFunct, 'json', 'GET');
        },
        get_models: function(data, callbackFunct) {
        	if (opts.opensocial)
        		makeReq(opts.proxy_url+opts.sn_id+'/mobile/'+data.c+'/models/'+data.m+'.json', {}, callbackFunct, 'json', 'GET');
        	else
        		makeReq(opts.proxy_url, {client_id:data.c, load:'models', id:data.m}, callbackFunct, 'json', 'GET');
        },
        send_sms: function(data, callbackFunct) {
        	if (opts.opensocial)
        		makeReq(opts.proxy_url+snid+'/mobile/'+data.c+'/sms.json?ma='+data.ma+'&mo='+data.mo+'&n='+data.n+'&l='+data.l, {}, callbackFunct, 'json', 'GET');
        	else
        		makeReq(opts.proxy_url, {client_id:data.c, load:'sendsms', ma:data.ma, mo:data.mo, n:data.n, l:data.l, client_id:data.c, load:'sendsms', ma:data.ma, mo:data.mo, n:data.n, l:data.l}, callbackFunct, 'json', 'GET');
        },
        user_exists: function(data, callbackFunct) {
        	if (opts.opensocial)
        		makeReq(opts.proxy_url+opts.sn_id+'/user/'+data.id+'/exists.json?profile_url='+data.pu+'&avatar_url='+data.au, {}, callbackFunct, 'json', 'GET');
        },
        user_reg: function(data, callbackFunct) {
        	if (opts.opensocial)
        		makeReq(opts.proxy_url+opts.sn_id+'/user/'+data.id+'/reg.json?profile_url='+data.pu+'&avatar_url='+data.au+'&displayname='+data.dn, {}, callbackFunct, 'json', 'GET');
        },
        get_highscore: function(data, callbackFunct) {
        	if (opts.opensocial)
        		makeReq(opts.proxy_url+opts.sn_id+'/highscore/'+data.c+'/'+data.l+'/'+data.o+'.json?t='+_bin2hex(data.t), {}, callbackFunct, 'json', 'GET');
        	else
        		makeReq(opts.proxy_url, {client_id:data.c, load:'highscore', limit:data.l, offset:data.o, tabid:_bin2hex(data.t)}, callbackFunct, 'json', 'GET');
        },
        get_winners: function(data, callbackFunct) {
        	if (opts.opensocial)
        		makeReq(opts.proxy_url+opts.sn_id+'/winners/'+data.c+'/'+data.l+'/'+data.o+'.json?t='+_bin2hex(data.t)+'&eid='+data.eid, {}, callbackFunct, 'json', 'GET');
        	else
        		makeReq(opts.proxy_url, {client_id:data.c, load:'winners', limit:data.l, offset:data.o, tabid:_bin2hex(data.t), eid:data.eid}, callbackFunct, 'json', 'GET');
        },
        get_allwinners: function(data, callbackFunct) {
        	if (opts.opensocial)
        		makeReq(opts.proxy_url+opts.sn_id+'/allwinners/'+data.c+'/'+data.l+'/'+data.o+'.json?t='+_bin2hex(data.t)+'&aid='+data.aid, {}, callbackFunct, 'json', 'GET');
//        	else
//        		makeReq(opts.proxy_url, {client_id:data.c, load:'winners', limit:data.l, offset:data.o, tabid:_bin2hex(data.t), eid:data.eid}, callbackFunct, 'json', 'GET');
        },
        loadfile: function(url, callbackFunct, type) {
        	makeReq(url, {}, callbackFunct, type, 'GET');
        },
        call_req: function(url, data, callback, type, method) {
        	makeReq(url, data, callback, type, method);
        },
        call_method: function(method, data, callbackFunct, type, reqmethod) {
            module = method.toLowerCase().replace(/\..*/,'');
            command = method.replace(/.*\./, '');
            data.Command = command;
            var params = {};
            switch (module) {
                case 'admin':
               		makeReq(opts.admin_baseurl, data, callbackFunct, type, reqmethod);
                    break;
                case 'stat':
               		makeReq(opts.stat_baseurl, data, callbackFunct, type, reqmethod);
                	break;
                case 'mobile':
               		makeReq(opts.mobile_baseurl, data, callbackFunct, type, reqmethod);
                	break;
            }
        }
    };
}();

//-->
