/**
 * Ajax request handling function
 */
function ServerRequest(url) {

    if (DEBUG) alert('DEBUG INFO: ' + url);

    /** create XmlHttpRequest object to handle request */
    var XHR;
    try {
        /** Opera 8.0+, Firefox, Safari */
        XHR = new XMLHttpRequest();
    } catch (e) {
        /** Internet Explorer Browsers */
        try {
            XHR = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) { try {
            XHR = new ActiveXObject("Microsoft.XMLHTTP");
        } catch (e) {
            /** not supported */
            alert("Your browser doesn't support this function!");
            exit(1);
        }}
    }

//    /** response handling function */
//    XHR.onreadystatechange = function() {
//
//        /** if response is complete */
//        if (this.readyState == 4) {
//
//            /** execute proper action */
//            switch (this.getResponseHeader('XServerResponseCode')) {
//
//                case 'OK' :
//                    break;
//
//                case 'Error' :
//                    alert('Error!\n\n' + this.responseText);
//                    exit(0);
//
//                case 'Info' :
//                    alert('Info!\n\n' + this.responseText);
//                    exit(0);
//
//                case 'Redirect' :
//                    document.location = this.getResponseHeader('Location');
//                    exit(0);
//
//                default :
//                    alert('Request error.\n\n' + this.responseText);
//                    exit(0);
//            }
//        }
//    };

    /** block user interface */
    $.blockUI();

    /** send request */
    XHR.open("GET", url, false);
    XHR.send(null);

    /** unblock user interface */
    $.unblockUI();

    /** execute proper action */
    switch (XHR.getResponseHeader('X-ServerResponseCode')) {

        case 'OK' :
            return XHR.responseText==''?true:XHR.responseText;

        case 'Error' :
            alert('Error!\n\n' + XHR.responseText);
            break;

        case 'Info' :
            alert('Info!\n\n' + XHR.responseText);
            break;

        case 'Redirect' :
            document.location = XHR.getResponseHeader('Location');
            exit(0);

        default :
            alert('Request error.\n\n' + XHR.responseText);
            break;
    }

    return false;
}

function XServerRequestElementInit(el) {

    $(el).click(function(){

        /** ask user to confirm request */
        var userconfirm = $(el).attr('XActionConfirm');
        if(!userconfirm) return true;
        if(''!=userconfirm && !confirm(userconfirm)) return;

        /** perform server request */
        var url = $(el).attr('XServerAction');
        var result = '';
        if (''!=url) {
            result = ServerRequest(SERVICE_DIRECTORY + url);
            if (result==false) return;
        }

        /** do callback action */
        var fname = $(el).attr('XServerResponseCB');
        if (''!=fname) {
            var f = eval(fname);
            f(result, el);
        }
    });
}

$(document).ready(function() {

    /** init XServerRequest elements */
    $(".XServerRequest").each(function() {
        XServerRequestElementInit($(this));
    });

    /** add draggable for XDraggable elements */
    $(".XDraggable").draggable({
        opacity: 0.65,
        helper: 'clone'
    });

    /** add droppable for XDroppable elements */
    $(".XDroppable").droppable({
        accept: function (e) {
            return e.is($(this).attr('XDroppableAccept'));
        },
        hoverClass: 'ui-droppable-hover',
        drop: function(event, ui) {

            /** ask user to confirm request */
            var userconfirm = $(this).attr('XActionConfirm');
            if(''!=userconfirm && !confirm(userconfirm)) return;

            /** perform server request */
            var url = $(this).attr('XDroppableServerAction');
            var result = '';
            if (''!=url) {
                result = ServerRequest(SERVICE_DIRECTORY + url + ui.draggable.attr('XDraggableServerAction'));
                if (result==false) return;
            }

            /** do callback action */
            var fname = $(this).attr('XDroppableServerResponseCB');
            if (''!=fname) {
                var f = eval(fname);
                f(result, $(this), ui.draggable);
            }
        }
    });

    /** build language menu */
    langLi = $("#langMenu > span");
    divMenu = $('<ul>').hide();
    var currentElement = $(langLi[0]).clone();
    langLi.each(function(idx,item){
      divMenu.append($("<li>").append(item));
      if($(item).attr("id") == PAGE_LOCALE){
          currentElement = $(item).clone();
          $(item).css("font-weight", "bolder")
      }
    })
    divMenu.css({
      "position":"relative",
      "top": "-10px",
      "width": "140px",
      "list-style": "none",
      "list-style-position": "inside",
      "margin": "0px",
      "padding": "0px",
      "padding-bottom": "12px",
      "margin-bottom": "22px",
      "background-color": "white",
      "background-image": "none"
    });
    $("#langMenu").parent().after(divMenu)
    $("#langMenu").append(currentElement.bind('mouseenter',function() {
      divMenu.show();
      return false;
    })).bind('click',function() {
      return false; 
    })
    divMenu.bind('mouseout',function() {
      setTimeout(function() { divMenu.hide(); }, 1000);
    });
   
    //$("#headerBox").bind('mouseout', function() { divMenu.hide() });
});

