﻿/// <reference path="~/js/jquery-1.3.2-vsdoc2.js" />
/// <reference path="~/js/json2_min.js" />

function serviceProxy(serviceUrl){    
    var _I = this;    
    this.serviceUrl = serviceUrl;     
    // *** Call a wrapped object    
    this.invoke = function(method,data,callback,error,bare) {        
        // *** Convert input data into JSON - REQUIRES Json2.js        
        var data = JSON.stringify(data);          
        // *** The service endpoint URL                
        var url = _I.serviceUrl + method;         
        $.ajax( {                     
            url: url
            , data: data
            , type: "POST"
            , processData: false
            , contentType: "application/json"
            , timeout: 10000
            , dataType: "text" // not "json" we'll parse
            , success: function(res) {
                    if (!callback) return;                         
                    // *** Use json library so we can fix up MS AJAX dates                        
                    var result = JSON.parse(res);                         
                    // *** Bare message IS result                        
                    if (bare) { 
                        callback(result); 
                        return; 
                    }                         
                    // *** Wrapped message contains top level object node
                    // *** strip it off
                    for (var property in result) {
                        callback(result[property]);
                        break;
                    }
                }
            , error: function(xhr) {
                    if (!error) return;
                    if (xhr.responseText) {
                        var err = JSON.parse(xhr.responseText);
                        if (err)
                            error(err);
                        else
                            error({ Message: "Unknown server error." })
                    }
                    return;
                }
            });
        }
    }
    

var moc = {

    serviceUtil: {

        serviceUrls: {

            wsGame: "/services/game/"
            , wsGuild: "/services/guild/"
            , wsSyndication: "/services/syndication/"
            , wsPortlet: "services/portlet/"

        } // moc.serviceUrls
        
        
        
        
    } // moc.serviceutil

    , portlet: {

        resetCssOnMove: function(item, sender, reciever) {

            // old css
            var ocss_container = sender.attr('css_container');
            var ocss_h1 = sender.attr('css_h1');
            var ocss_h2 = sender.attr('css_h2');
            var ocss_content = sender.attr('css_content');
            // new css
            var css_container = reciever.attr('css_container');
            var css_h1 = reciever.attr('css_h1');
            var css_h2 = reciever.attr('css_h2');
            var css_content = reciever.attr('css_content');

            //item.find("#portlet").removeClass(ocss_container).addClass(css_container);
            item.attr("class", css_container + " portlet");
            item.find(".portlet-header0").attr("class", css_h1 + " portlet-header0");
            item.find(".portlet-header1").attr("class", css_h2 + " portlet-header1");
            item.find("." + ocss_content).attr("class", css_content);

        } // moc.portlet.resetCssOnMove

        , loading: function(container) {

            container.empty();
            var loadingGraphic = '<div id="loadingFeed" class="portlet-loading" style="display: none;"><img src="ektimages/gs/ajax-loader.gif" style="vertical-align: middle;" /> Loading....</div>';
            container.append($(loadingGraphic));
            container.find(".portlet-loading").show();

        }

        , clearLoading: function(container) {
            container.find(".portlet-loading").hide();
            container.empty();
        }

        , error: function(container) {

            container.empty();
            var loadingGraphic = '<div id="failedFeed" class="failed" style="display: none;">Failed to Load...</div>';
            container.append($(loadingGraphic));
            container.find(".portlet-error").show();

        }

        , clearError: function(container) {
            container.find(".portlet-error").hide();
            container.empty();
        }

        , savePortletLayout: function() {
            alert("Not Yet Implemented");
            //            $(".portlet-zone").each(function() {
            //                alert($(this).attr("zid"));
            //                $(this).find(".portlet").each(function() {
            //                    alert($(this).attr("pid"));
            //                });
            //            });

        } // moc.portlet.savePortletLayout

        , savePortletSetting: function(portletInstanceId, setting, success, error) {
        var rurl = moc.serviceUtil.serviceUrls.wsPortlet + "instance/" + portletInstanceId + "/?settings=" + encodeURI(JSON.stringify(setting));
            //var DTO = { 'portletinstanceid': portletInstanceId, 'psettings': JSON.stringify(setting) };
            
            $.ajax({
                type: "POST"
                , url: rurl
                //, contentType: "application/json"
                //, data: DTO
                //, dataType: "text"
                , cache: false
                , async: true
                , success: success
                , error: error
            }); // $.ajax
        } // moc.portlet.savePortletSetting

        , init: function() {
            //todo - re-enable drag/drop once jquery fixes it
//            $(".portlet-zone").sortable({

//                connectWith: '.portlet-zone'
//                , dropOnEmpty: true
//                , receive: function(event, ui) {

//                    moc.portlet.resetCssOnMove($(ui.item), $(ui.sender), $(this));

//                    //alert('sender_' + $(ui.sender).attr('ID'));
//                    //alert('item_' + $(ui.item).attr('id'));
//                    //alert('receiver_' + $(this).attr('ID'));
//                }
//                , update: function(e, ui) {
//                    serialize(".portlet-zone");
//                }
//            });
        } // moc.portlet.init
    } // moc.portlet

    , init: function() {
        moc.portlet.init();

    } // moc.init
} // moc

$(function() {
    moc.init();
});
