/**
 * $Id$ ajaxcontent.js $
 *
 *
 */

var AjaxContent = {
    name :'AjaxContent',
    varsion : '1.04RC1',

	proxy: "",
	container : null,
	htmlTemplate : null,
	overlay : true,
	showLoadding: true,

	contentType: "text/xml",
	charSet: "utf-8",

	subfix : "-container",
	responseXML: null,
	responseText: "",
	status: 0,

	init: function(options) {
	    if(options && options.constructor == Object) {
	        $.extend(AjaxContent,options);
	    }

        $.ajaxSetup({global: true,type: "POST", async:false ,processData: false,mode:"queue"}); //,


        if(typeof AjaxContent.container == "string") {
            AjaxContent.container = $("#"+AjaxContent.container+AjaxContent.subfix).size()?$("#"+AjaxContent.container+AjaxContent.subfix):$("#"+AjaxContent.container);
            if(!AjaxContent.container.size()) return;
        }

        // Overley
        var _uuid = new UUID();
        var setting = AjaxContent.container.offset();

        if(AjaxContent.overlay) {
            $('<div id="loadding-overlay-'+_uuid+'" class="loadding-overlay"></div>')
            .appendTo('body')
            .css($.extend({},setting,{'width':AjaxContent.container.width(),'height':AjaxContent.container.height(),'opacity': 0.3}))
            .show();
            //.animate({opacity: 0.3})
        }

        if(!AjaxContent.showLoadding) return;

        var _msg = '';
        _msg = $('div[@id^=loadding-msg]');

        if(!_msg.size() > 0) {
            var msgObj = '<div id="loadding-msg-'+_uuid+'" class="loadding-msg x-air-window" style="width: 105px;">' +
                         '<table cellpadding="0" cellspacing="0" border="0" class="x-air" width="100%">' +
                         '<tr><td class="x-air x-window-tl"></td><td class="x-air x-window-tc" width="100%"></td>' +
                         '<td class="x-air x-window-tr"></td></tr>' +
                         '<tr><td class="x-air x-window-ml"></td><td class="x-air x-window-mc"><div class="x-air x-window-body">' +
                         '<div class="x-air x-window-wait"><img src="/'+app.name+
            		     '/modules/systemapi/templates/default/images/shared/loading/wait.gif"/></div>' +
                         '<div class="x-air x-window-body-text">Loading...</div></div>' +
                         '</td><td class="x-air x-window-mr"></td></tr>' +
                         '<tr class="x-air x-window-bc"><td class="x-air x-window-bl"></td><td class="x-air x-window-footer"></td>' +
                         '<td class="x-air x-window-br"></td></tr>' +
                         '</table></div>';

            var _msg = $(msgObj).appendTo('body')
            .animate({opacity: 1})
            .ajaxStop(function(){
                $(this).fadeOut('slow'); // , function() {$(this).remove();}
                if(AjaxContent.overlay) $('div[@id^=loadding-overlay]').fadeOut('slow', function() {$(this).remove(); });
            });
            msgObj = null;
        }


        // console.log(this);
        setting.left = setting.left+((AjaxContent.container.width()-_msg.width())/2);
        setting.top  = setting.top+((AjaxContent.container.height()-_msg.height())/2)-20;

        _msg.css(setting).show();

        return;
    },

	send: function(params, callback) {
		if(AjaxContent.proxy != null) {
			// AjaxContent.responseText = null;
			// AjaxContent.responseXML = null;
			// AjaxContent.status = 0;

			//var content = $(params).serialize();
			//AjaxContent.contentLength = content.length;

			function getResponse(responseData) {
				// AjaxContent.status = response.status;
				// AjaxContent.responseText = response.responseText;

				if(callback != null) {
					// AjaxContent.responseXML = response.responseXML;
					// var jsOut = AjaxContent.toJSON(response.responseText);
					AjaxContent.userCallback(responseData,callback);
				} else {
                    // var jsOut = AjaxContent.toJSON(response.responseText);
                    AjaxContent.callback(responseData);
				}
			}

			if(!/\/\_t\//ig.test(AjaxContent.proxy)) {
			    var d = new Date();
			    AjaxContent.proxy += '/_t/'+d.getTime();
			    AjaxContent.proxy = AjaxContent.proxy.replace('//','/');
			}
			/*
			if(typeof params == 'string') {
			    params += '&_t='+d.getTime();
			} else if(typeof params == 'object') {
			    $.extend(params,{'_t':d.getTime()});
			}
			**/

			$.ajax({
				 url: AjaxContent.proxy,
				 dataType: "json",
				 processData: false,
				 data: params,
				 success: getResponse
				 //complete: getResponse
				 /*
				 ,
				 beforeSend: function(reqObj) {
					reqObj.setRequestHeader("Method", "POST");
				 	reqObj.setRequestHeader("Content-Length", AjaxContent.contentLength);
					reqObj.setRequestHeader("Content-Type", AjaxContent.contentType + "; charset=\"" + AjaxContent.charSet + "\"");
				 }
				 * **/
			});
		}
	},

	toJSON : function(responseText) {
	    var _json = null;
	    if($.trim(responseText)) { eval("_json="+responseText+";"); }
	    return _json;
	},

	callback : function(data) {
	    if(AjaxContent.htmlTemplate != null) {
            var result = TrimPath.parseTemplate(AjaxContent.htmlTemplate).process(data);
            AjaxContent.container.empty().html(result);
        } else {
            return data;
        }
	},

	userCallback : function(data, callback) {
	    if(AjaxContent.htmlTemplate != null && typeof TrimPath != 'undefined') {
            var result = TrimPath.parseTemplate(AjaxContent.htmlTemplate).process(data);
            callback(result);
        } else {
            callback(data);
        }
	}
}

