var Geoscape = Geoscape ? Geoscape : {
    GIS : {}
};


document.domain = "geoscape.eu";

Geoscape.GIS.Core = function() {

    function checkKick(rc)
    {
        if ((rc >= 206) && (rc <= 213))
        {
	        if ((rc == 211) && (Geoscape.GIS.Util))
	        {
		        Geoscape.GIS.Util.Disclaimer.Fetch();
		        return false;
	        }
	        
            url = "http://gis.geoscape.eu/sslpages/redirect.htm";
            if ((parent) && (parent.Geoscape)) parent.Geoscape.GIS.Core.Redirect(url);
            else document.location.href = url;
            
            return true;
        }
        
        return false;
    }
    
    function jsonRequest(url, reqType, req, succCallback, failCallback, dataType) 
	{
        jQuery.ajax({
                          url: url,
                          type: reqType,
                          dataType: dataType,
                          data: req,
                          cache: false,
                          success: function(jsonmsg, status) {
                            if(jsonmsg.head.rc == 0){
                                if(succCallback != null) {
                                    succCallback(jsonmsg.body);
                                }
                            }
                            else if (!checkKick(parseInt(jsonmsg.head.rc, 10))) {
                            
                                if(failCallback != null) failCallback(jsonmsg.head.rc, jsonmsg.body);
                            }
                          },
                          error: function(request, status){
                             if(failCallback != null) {
                                failCallback(1);
                             }
                          }
                     });
    }
	
	function textRequest(url, reqType, req, succCallback, failCallback) 
	{
        jQuery.ajax({
                        url: url,
                        type: reqType,
                        dataType: "text",
                        data: req,
                        success: function(text, status) {
							
                            if (text.split('~')[1] == 0) {
                                if (succCallback != null) {
                                    succCallback(text.split('~')[2]);
                                }
                            }
                            else
                            {
				jsonmsg = (text.charAt(0) == '<') ? "" : eval("(" + text + ")");
                                if ((!jsonmsg.head) || ((jsonmsg.head.rc) && (!checkKick(parseInt(jsonmsg.head.rc, 10))))) {

                                    if (failCallback != null) failCallback(text.split('~')[1]);
                                }
                            }
                        },
                        error: function(request, status) {
                            if (failCallback != null) {
                                failCallback(1);
                            }
                        }
                    });
	}
	
	function textRequestRC(url, reqType, req, succCallback, failCallback) 
	{
        jQuery.ajax({
                        url: url,
                        type: reqType,
                        dataType: "text",
                        data: req,
                        success: function(text, status) {
							
							var temp = text.indexOf("\"head\"");
							var stripped = text.replace('</string>', '').substring(temp-1,text.length);
							var jsonmsg = JSON.parse(stripped);
                            if(jsonmsg.head.rc == 0){
                                if(succCallback != null) {
                                    succCallback(jsonmsg.body);
                                }
                            }
                            else {
                                if(failCallback != null) {
                                    failCallback(jsonmsg.head.rc);
                                }
                            }
                        },
                        error: function(request, status) {
                            if (failCallback != null) {
                                failCallback(1);
                            }
                        }
                    });
    }
	
    return {
		Redirect : function(url) {
			document.location.href = url;
		},
		getJson : function(url, req, succCallback, errorCallback, remote) {
			var dataType = "json";
			if(remote && remote == true)
			{
				dataType = "jsonp";
			}
			jsonRequest(url, "GET", req, succCallback, errorCallback, dataType);
		},
		postJson : function(url, req, succCallback, errorCallback) {
			jsonRequest(url, "POST", req, succCallback, errorCallback, "json");  
		},
		getText: function(url, req, succCallback, errorCallback) {
			textRequest(url, "GET", req, succCallback, errorCallback);
		},
		postText: function(url, req, succCallback, errorCallback){
			textRequest(url, "POST", req, succCallback, errorCallback);
		},
		getTextRC: function(url, req, succCallback, errorCallback) {
			textRequestRC(url, "GET", req, succCallback, errorCallback);
		},
		postTextRC: function(url, req, succCallback, errorCallback){
			textRequestRC(url, "POST", req, succCallback, errorCallback);
		}   		
	};
}();

