var Services = new Object();

Services.Storage = new Object();

Services.View = new Object();

Services.View.Payment = new Object();

Services.View.Callback = new Object();

Services.Actions = new Object();

Services.iSetPaymentType = null;

Services.Settings = {
    View : {
        TabClassActive : 'service_tab_selected',
        TabClassBusy : 'service_tab_busy',
        TabIdClass : '.service_tab',
        SubTabIdClass : '.sub_service_tab',
        TabsContainer : 'services_tabs',
        SubTabsContainer : 'sub_service_tabs',
        
        BodyContainer : 'services_body',
        BodyHolder : 'services_body_content',
        BodyLoader : 'services_loader',
        
        PaymentContentContainer : 'services_payment_content_container',
        
        PaymentTabClassActive : 'service_payment_tab_selected',
        PaymentTabIdClass : '.service_payment_tab',
        PaymentTabsContainer : 'services_payment_tabs',
        PaymentTabsNoUserFill : 'services_payment_nouser_fill',
        
        PaymentBodyHolder : 'services_payment_content',
        PaymentBodyLoader : 'services_payment_loader',
        
        PrivateGalleryContainer : 'private_gallery_list',
        PrivateGallerySelector : 'div.album_holder',
        PrivateGalleryClassName : 'album_select',
        
        PaymentAccessTypeCallbackButton : 'service_payment_callback_view_button',
        PaymentAccessTypeDirectAccessButton : 'service_payment_direct_access_view_button',
        PaymentAccessTypeCallbackView : 'service_payment_callback_view',
        PaymentAccessTypeDirectAccessView : 'service_payment_direct_access_view',
        PaymentAccessTypeVoIPButton : 'service_payment_voip_view_button',
        PaymentAccessTypeVoIPView : 'service_payment_voip_view',
        
        AlternativeMPNumber : {
            NumberId : 'mp_number',
            NumberTariffId : 'mp_tariff_short',
            ShortId : 'mp_short',
            ShortTariffrId : 'mp_tariff_number',
            useNormalNumber : 'use_normal_number',
            useShortcode : 'use_shortcode'
        },
        PaymentTabIdMap : {
            1 : 'PaymentTab1',
            2 : 'PaymentTab2',
            3 : 'PaymentTab3',
            4 : 'PaymentTab2' // special voip case
        }
    
    }
};

Services.Clear = function() {
    clearTimeout(Services.Storage.MPTimeout);
    Services.Storage.PaymentPending = false;
};

Services.Load = function(sService, sCategory, iLiveCode) {
    
    Services.iSetPaymentType = null;
    
    Services.Clear();
    Services.View.DeselectTabs();
    Services.View.ShowLoader();
    Services.Actions.RequestService(sService, sCategory, iLiveCode);
};

Services.Open = function(sService, JSON, opCode) {
  	Services.View.ChangeTabIconStatus(JSON.TabStatusData, sService, opCode)
  	Services.View.SelectTab(JSON.TabStatusData.AvailableServiceName);
    Services.View.ShowService(JSON.ServiceHTML);
};

Services.View.ChangeTabIconStatus = function(oTabStatusData, sService, opCode) {
	
	//alert(sClassName+' '+sService+' '+ sAvailableServiceName);
	//$('ServiceTab'+sService).id = 'ServiceTab' + sAvailableServiceName;
	///$('ServiceTab' + sAvailableServiceName).onClick  = 'Services.Load( "'+sAvailableServiceName+'", "none", "'+opCode+'")';	

	$('ServiceTab'+sService).replace('<div id="ServiceTab'+oTabStatusData.AvailableServiceName+'" ><span></span>'+oTabStatusData.ServiceLabel+'</div>');
	Element.addClassName('ServiceTab' + oTabStatusData.AvailableServiceName, 'service_tab');
	Element.addClassName('ServiceTab' + oTabStatusData.AvailableServiceName, oTabStatusData.TabStatus);
	
	$('ServiceTab'+oTabStatusData.AvailableServiceName).observe('click', function() {
		Services.Load( oTabStatusData.AvailableServiceName, "none", opCode);	
	});
	
}

Services.LoadPayment = function(sService, sCategory, iLiveCode, iPaymentType) {
    /*
     * if((sService == 'PrivateWebCamChat' || sService == 'GroupWebCamChat') &&
     * Services.iSetPaymentType == iPaymentType){ return; } else {
     * Services.iSetPaymentType = iPaymentType; }
     */

    Services.Clear();
    
    Services.Storage.iPaymentType = iPaymentType;
    Services.Storage.PaymentPending = false;
    Services.View.Payment.DeselectTabs();
    Services.View.Payment.ShowLoader();
    Services.Actions.RequestPayment(sService,
        sCategory,
        iLiveCode,
        iPaymentType);
};

Services.OpenPayment = function(JSON) {
    Services.View.Payment.SelectTab(JSON.PaymentId);
    Services.View.Payment.ShowPayment(JSON.PaymentHTML);
};

Services.StartCallback = function(oButton, bDelayed, iCallbackType) {
    if (Services.Storage.Busy)
        return;
    Services.Storage.Busy = true;
    Services.View.Callback.DisableButton(oButton);
    Services.Actions.RequestCallback(bDelayed, oButton, iCallbackType);
};

Services.Storage.PaymentPending = false;

Services.ExecutePayment = function(sService, sCategory, iLiveCode,
        iPaymentType, sMPTransId, oAdditionalParams) {
    Services.Actions.RequestPaymentExecution(sService,
        sCategory,
        iLiveCode,
        iPaymentType,
        sMPTransId,
        oAdditionalParams);
};

Services.ShowGallery = function(sJSONString) {
    oGallery = sJSONString.evalJSON();
    
    Services.View.BuildGallery(oGallery);
};

Services.ShowAlternativeMpNumber = function() {
    $H(Services.Settings.View.AlternativeMPNumber).each(function(items) {
        Element.toggle(items[1]);
    });
};

/** STORAGE ******************************************************* */

Services.Storage.SetPaymentExtra = function(oObject) {
    Services.Storage.PaymentExtra = oObject;
};

Services.Storage.GetPaymentExtra = function() {
    return Object.isUndefined(Services.Storage.PaymentExtra) ? {}
            : Services.Storage.PaymentExtra;
};

/** VIEW ********************************************************* */

Services.View.ShowLoader = function() {
    
    // comment next lines to enable crossfade
    $(Services.Settings.View.BodyHolder).hide();
    return;
    
    new Effect.Fade($(Services.Settings.View.BodyHolder), {
        duration : 0.3,
        queue : {
            position : 'front',
            scope : 'servicesloader'
        },
        afterFinish : function() {
            $(Services.Settings.View.BodyHolder).hide();
            /*
             * new Effect.Appear($(Services.Settings.View.BodyLoader), {
             * duration: 0.2, queue: {position: 'front', scope:
             * 'servicesloader'} })
             */
        }
    });
};

Services.View.ShowService = function(sHTML) {
    
    // comment next lines to enable crossfade
    $(Services.Settings.View.BodyHolder).hide();
    Element.update(Services.Settings.View.BodyHolder, sHTML);
    $(Services.Settings.View.BodyHolder).show();
    return;
    
    new Effect.Appear($(Services.Settings.View.BodyLoader), { // hack
        duration : 0.0, // hack
        queue : {
            position : 'end',
            scope : 'servicesloader'
        },
        afterFinish : function() {
            Element.update(Services.Settings.View.BodyHolder, sHTML);
            $(Services.Settings.View.BodyHolder).hide();
            new Effect.Appear($(Services.Settings.View.BodyHolder), {
                duration : 0.3,
                queue : {
                    position : 'end',
                    scope : 'servicesloader'
                }
            });
        }
    });
};


Services.View.ShowPayments = function(sService, sHTML) {
	Services.View.DeselectSubTabs();
	Services.View.SelectSubTab(sService);
	Element.update('display_payments', sHTML.PaymentsHTML);
};

Services.View.DeselectSubTabs = function() {
	Element.select(Services.Settings.View.SubTabsContainer, 
	        Services.Settings.View.SubTabIdClass).each(function(oTab) {
	            Element.removeClassName(oTab, Services.Settings.View.TabClassActive);
	});
};

Services.View.DeselectTabs = function() {
    Element.select(Services.Settings.View.TabsContainer, 
        Services.Settings.View.TabIdClass).each(function(oTab) {
            Element.removeClassName(oTab, Services.Settings.View.TabClassActive);
    });
};

Services.View.SelectTab = function(sServiceId) {
    Element.addClassName('ServiceTab' + sServiceId,
        Services.Settings.View.TabClassActive);
};

Services.View.SelectSubTab = function(sServiceId) {
    Element.addClassName('SubServiceTab' + sServiceId,
        Services.Settings.View.TabClassActive);
};

Services.View.SetTabBusy = function(sServiceId) {
    if(sServiceId == 'GroupWebCamChat') {
        Element.addClassName('ServiceTabFreeWebCamChat', Services.Settings.View.TabClassBusy);
        Element.addClassName('ServiceTabGroupWebCamChat', Services.Settings.View.TabClassBusy);
    }
   
    if(sServiceId == 'PrivateWebCamChat') {
        Element.addClassName('ServiceTabFreeWebCamChat', Services.Settings.View.TabClassBusy);
        Element.addClassName('ServiceTabGroupWebCamChat', Services.Settings.View.TabClassBusy);
        Element.addClassName('ServiceTabPrivateWebCamChat', Services.Settings.View.TabClassBusy);
    }
};

Services.View.Payment.ShowLoader = function() {
    new Effect.Fade($(Services.Settings.View.PaymentBodyHolder), {
        duration : 0.2,
        queue : {
            position : 'front',
            scope : 'servicespaymentloader'
        },
        afterFinish : function() {
            $(Services.Settings.View.PaymentBodyHolder).hide();
            new Effect.Appear($(Services.Settings.View.PaymentBodyLoader), {
                duration : 0.2,
                queue : {
                    position : 'front',
                    scope : 'servicespaymentloader'
                }
            });
        }
    });
};

Services.View.Payment.DeselectTabs = function() {
    if ($(Services.Settings.View.PaymentTabsContainer) == undefined)
        return;
    
    Element.select(Services.Settings.View.PaymentTabsContainer,
        Services.Settings.View.PaymentTabIdClass).each(function(oTab) {
        Element.removeClassName(oTab,
            Services.Settings.View.PaymentTabClassActive);
    });
    
    Element.removeClassName(Services.Settings.View.PaymentContentContainer,
        'no_tabs_height');
    
    Element.show(Services.Settings.View.PaymentTabsContainer);
};

Services.View.Payment.SelectTab = function(iPaymentId) {
    Element.addClassName(Services.Settings.View.PaymentTabIdMap[iPaymentId],
        Services.Settings.View.PaymentTabClassActive);
};

Services.View.Payment.ShowPayment = function(sHTML) {
    
    new Effect.Fade($(Services.Settings.View.PaymentBodyLoader), {
        duration : 0.2,
        queue : {
            position : 'end',
            scope : 'servicespaymentloader'
        },
        afterFinish : function() {
            Element.update(Services.Settings.View.PaymentBodyHolder, sHTML);
            $(Services.Settings.View.PaymentBodyLoader).hide();
            new Effect.Appear($(Services.Settings.View.PaymentBodyHolder), {
                duration : 0.2,
                queue : {
                    position : 'end',
                    scope : 'servicespaymentloader'
                }
            });
        }
    });
};

Services.View.Payment.SwitchDirectAccessCallbackView = function(sHideButton,
        sHideView, sShowButton, sShowView) {
    
    if ($(Services.Settings.View.PaymentAccessTypeVoIPView)) {
        Element.hide(Services.Settings.View.PaymentAccessTypeVoIPView);
        Element.setStyle(Services.Settings.View.PaymentAccessTypeVoIPButton, {
            color : '#ff9900',
            border : 'none',
            background : 'none'
        });
        
        // Element.addClassName('active');
        
    };
    if ($(sHideView)) {
        Element.hide(sHideView);
        Element.setStyle(sHideButton, {
            color : '#ff9900',
            border : 'none',
            background : 'none'
        
        });
    };
    
    if ($(sShowView)) {
        Element.show(sShowView);
        Element.setStyle(sShowButton, {
            color : 'black',
            border : '1px solid #b2a767',
            background : '#fdf9de'
        });
    };
};

Services.View.Payment.ShowDirectAccessView = function(sName) {
    
    $('title_type').update(sName);
    
    Services.View.Payment
            .SwitchDirectAccessCallbackView(Services.Settings.View.PaymentAccessTypeCallbackButton,
                Services.Settings.View.PaymentAccessTypeCallbackView,
                Services.Settings.View.PaymentAccessTypeDirectAccessButton,
                Services.Settings.View.PaymentAccessTypeDirectAccessView);
};

Services.View.Payment.ShowCallbackView = function(sName) {
    
    $('title_type').update(sName);
    
    Services.View.Payment
            .SwitchDirectAccessCallbackView(Services.Settings.View.PaymentAccessTypeDirectAccessButton,
                Services.Settings.View.PaymentAccessTypeDirectAccessView,
                Services.Settings.View.PaymentAccessTypeCallbackButton,
                Services.Settings.View.PaymentAccessTypeCallbackView);
};

Services.View.Callback.DisableButton = function(oButton) {
    Element.update('services_callback_info', '');
    Element.removeClassName(oButton, 'color1');
    Element.addClassName(oButton, 'color2');
};

Services.View.Callback.EnableButton = function(oButton) {
    Element.removeClassName(oButton, 'color2');
    Element.addClassName(oButton, 'color1');
};

Services.View.Callback.ShowError = function(sMessage) {
    sMessage = sMessage
            || 'There was a problem with your callback, please try again later.';
    sMessage = "<div class='popup_request'>" + sMessage + "</div>";
    AnimatedOverlay.ShowByContent(sMessage, 'callback_error');
};

Services.View.BuildGallery = function(oGallery) {
    
    var iPicturesPerRow = 3;
    var iPictures = oGallery.length;
    var iRows = Math.ceil(iPictures / iPicturesPerRow);
    var iRowHeight = 140;
    
    var iDivHeight = (iRowHeight * iRows) - 10;
    
    oGalleryContainer = Builder.node('div', {
        'id' : 'private_gallery_thumbnail_view',
        'style' : 'width: 500px; height: ' + iDivHeight + 'px'
    });
    
    oGallery.each(function(oPair) {
        var oElementAtag = Builder.node('a', {
            'href' : oPair.Photo,
            'rel' : 'lightbox[private]'
        });
        var oElementImgTag = Builder.node('img', {
            'src' : oPair.Thumbnail
        });
        
        oElementAtag.appendChild(oElementImgTag);
        // oElementAtag.update(oElementImgTag);
        
        var oElementGallery = Builder.node('div', {
            'class' : 'private_gallery_thumbnail',
            'style' : 'float: left'
        }, [ oElementAtag ]);
        
        oGalleryContainer.appendChild(oElementGallery);
    });
    
    var oElementClearb = Builder.node('div', {
        'class' : 'clearb'
    });
    oGalleryContainer.appendChild(oElementClearb);
    
    AnimatedOverlay.ShowByObject(oGalleryContainer);
    
    // console.log(LightboxReference);
    
};

Services.View.AlbumGallerySelect = function(sAlbumId) {
    Selector
            .findChildElements($(Services.Settings.View.PrivateGalleryContainer),
                [ Services.Settings.View.PrivateGallerySelector ])
            .each(function(object) {
                Element.removeClassName(object,
                    Services.Settings.View.PrivateGalleryClassName);
            });
    
    Element.addClassName($(sAlbumId), 'album_select');
};

Services.View.TextChat = {};

Services.View.TextChat.ShowResult = function(sMessage) {
    sMessage = sMessage
            || 'There was a problem processing your message, please try again later.';
    sMessage = "<div class='popup_request'>" + sMessage + "</div>";
    AnimatedOverlay.ShowByContent(sMessage, 'callback_error');
};

/** ACTION ********************************************************* */
/** **************************************************************** */
/** ***************************************************************** */

Services.Actions.RequestService = function(sService, sCategory, iLiveCode,
        iPaymentType) {
    iPaymentType = iPaymentType || null;
    
    // we want to keep the user selection of shorcodes valid across the
    // services, so will send it each time
    
    oPaymentExtra = Services.Storage.GetPaymentExtra();
    
    new Ajax.Request('/ajax/services/load', {
        parameters : {
            Service : sService,
            OpCode : iLiveCode,
            Category : sCategory,
            PaymentType : iPaymentType,
            MobileShortcodes : oPaymentExtra.MobileShortcodes || 0
        },
        onComplete : function(transport) {
  
            Services.Open(sService, transport.responseJSON, iLiveCode);
            // Services.Actions.StartPending(sService, sCategory, iLiveCode,
            // iPaymentType, transport.responseJSON.PaymentMPTransID);
        }
    });
};




Services.Actions.RequestPayments = function(sService, sCategory, iLiveCode,
        iPaymentType) {
    iPaymentType = iPaymentType || null;
    
    // we want to keep the user selection of shorcodes valid across the
    // services, so will send it each time
    
    oPaymentExtra = Services.Storage.GetPaymentExtra();

    new Ajax.Request('/ajax/services/load/payments', {
        parameters : {
            Service : sService,
            OpCode : iLiveCode,
            Category : sCategory,
            PaymentType : iPaymentType,
            MobileShortcodes : oPaymentExtra.MobileShortcodes || 0
        },
        onLoading : function() {
            //Element.update('services_payment_content_container', 'Loading');
        	if($(Services.Settings.View.PaymentBodyHolder)) {
        		$(Services.Settings.View.PaymentBodyHolder).hide();
        	}
        	if($(Services.Settings.View.PaymentBodyLoader)&& sService != 'FreeWebCamChat') {
        		$(Services.Settings.View.PaymentBodyLoader).show();
        	}
        	if($('free_chat_flash')){
        		
        		if(sService == 'FreeWebCamChat'){
        			new Effect.Morph('free_chat_flash', {
	        			  style: 'width:655px;', // CSS Properties
	        			  duration: 0.3 // Core Effect properties
	        			});
        			
        		} else {
	        		new Effect.Morph('free_chat_flash', {
	        			  style: 'width:320px;', // CSS Properties
	        			  duration: 0.3 // Core Effect properties
	        			});
        		}
        	}
        	
        	if(sService == 'FreeWebCamChat') {
        		$('services_payment_body').hide();
        	}
        	
        },
        onComplete : function(transport) {
            //Services.Open(sService, transport.responseJSON);
        	if($(Services.Settings.View.PaymentBodyHolder) && sService != 'FreeWebCamChat') {
        		$(Services.Settings.View.PaymentBodyHolder).show();
        	}
        	
        	if($(Services.Settings.View.PaymentBodyLoader)) {
        		$(Services.Settings.View.PaymentBodyLoader).hide();
        	}
        	
            Services.View.ShowPayments(sService, transport.responseJSON);
            // Services.Actions.StartPending(sService, sCategory, iLiveCode,
            // iPaymentType, transport.responseJSON.PaymentMPTransID);
        }
    });
};
    
Services.Actions.RequestPayment = function(sService, sCategory, iLiveCode,
        iPaymentType) {
    
    var Params = $H({
        Service : sService,
        OpCode : iLiveCode,
        Category : sCategory,
        PaymentType : iPaymentType
    });
    
    Params = Params.merge($H(Services.Storage.GetPaymentExtra()));
    
    new Ajax.Request('/ajax/services/load/payment', {
        parameters : Params,
        onComplete : function(transport) {
            Services.OpenPayment(transport.responseJSON);
            iPaymentType = transport.responseJSON.PaymentId; // this is
            // needed here
            // for services
            // liek
            // galleries
            // where you can
            // select an
            // item
            Services.Actions.StartPending(sService,
                sCategory,
                iLiveCode,
                iPaymentType,
                transport.responseJSON.PaymentMPTransID);
        }
    });
};




Services.Actions.StartVoIP = function(sDDI, sCallerName, sCallerId, sSiteURL,
        sWebAppLocalisation, bDebug) {
    
    Element.show($('VoipConsoleContainer'));
    Element.hide($('VoipFront'));
    
    VOIP.Initialize(sDDI,
        sCallerName,
        sCallerId,
        sSiteURL,
        sWebAppLocalisation,
        1);
    VOIP.SetDebug(bDebug);
    
};

Services.Actions.RequestCallback = function(bDelayed, oButton, iCallbackType) {
    new Ajax.Request('/ajax/services/callback', {
        parameters : {
            Delayed : (bDelayed) ? '1' : '0',
            Type : iCallbackType
        },
        onComplete : function(transport) {
            oResponse = transport.responseJSON;
            if (oResponse == null || Object.isUndefined(oResponse.Status)
                    || oResponse.Status != 1) {
                Services.View.Callback.EnableButton(oButton);
                Services.Storage.Busy = false;
                Services.View.Callback
                        .ShowError(Object.isUndefined(oResponse.Error) ? false
                                : oResponse.Error);
                return;
            }
            
            setTimeout(function() {
                Services.View.Callback.EnableButton(oButton);
                Services.Storage.Busy = false;
            }, bDelayed ? 300000 : 20000);
        }
    });
};

Services.Actions.StartPending = function(sService, sCategory, iLiveCode,
        iPaymentType, sMPTransId) {
    
    if (!Object.isString(sMPTransId))
        return;
    
    new Ajax.Request('/ajax/services/pay/status', {
        parameters : {
            MPTransId : sMPTransId
        },
        onComplete : function(transport) {
            if (transport.responseJSON.Status == 1) {
                clearTimeout(Services.Storage.MPTimeout);
                return Services.Actions.RequestPaymentExecution(sService,
                    sCategory,
                    iLiveCode,
                    iPaymentType,
                    sMPTransId);
            }
            Services.Storage.MPTimeout = setTimeout(function() {
                Services.Actions.StartPending(sService,
                    sCategory,
                    iLiveCode,
                    iPaymentType,
                    sMPTransId);
            }, 5000);
            
        }
    });
    
};

Services.Actions.RequestPaymentExecution = function(sService, sCategory,
        iLiveCode, iPaymentType, sMPTransId, oAdditionalParams) {
    
    if (Services.Storage.PaymentPending)
        return;
    
    Services.Storage.PaymentPending = true;
    
    var Params = $H({
        Service : sService,
        OpCode : iLiveCode,
        Category : sCategory,
        PaymentType : iPaymentType,
        MPTransId : sMPTransId
    });
    
    if (!Object.isUndefined(oAdditionalParams)) {
        Params = Params.merge($H(oAdditionalParams));
    }
    
    new Ajax.Request('/ajax/services/pay',
        {
            parameters : Params,
            onComplete : function(transport) {
                
                setTimeout(function() {
                    Services.Storage.PaymentPending = false;
                }, 10000);
                
                if (Object.isUndefined(transport.responseJSON)
                        || Object.isUndefined(transport.responseJSON.Paid)
                        || !transport.responseJSON.Paid) {
                    if (!Object.isUndefined(transport.responseJSON)
                            && !Object
                                    .isUndefined(transport.responseJSON.AlreadyPaid)
                            && transport.responseJSON.AlreadyPaid) {
                        
                    } else {
                        alert('Error');
                        return;
                    }
                }
                
                switch (transport.responseJSON.ResponseAction) {
                case 'Redirect':
                    window.location = transport.responseJSON.RedirectURL;
                    break;
                default:
                    window.location.search = 'service=' + sService;
                }
            }
        });
};

Services.Actions.SendTextChat = function() {
    
    var oParameters = {
        Message : $F('ServiceTextChatMessage'),
        Type : 'Free',
        CLI : $F('ServiceTextChatMobile'),
        TargetId : $F('ServiceTextChatTarget')
    };
    
    new Ajax.Request('/ajax/utilities/text_chat/send', {
        method : 'post',
        parameters : oParameters,
        onLoading : function() {
            AnimatedOverlay.Open();
        },
        onSuccess : function(transport) {
            Services.Actions.ProcessTextChatRequest(transport);
        },
        onFailure : function() {
            Services.View.TextChat.ShowResult();
        }
    });
};

Services.Actions.ProcessTextChatRequest = function(transport) {
    oResponse = transport.responseJSON;
    
    if (!oResponse.Status) {
        return Services.View.TextChat.ShowResult();
    }
    
    var sMessage = null;
    
    switch (oResponse.Status) {
    case 1:
        sMessage = '<div style="text_align: center"><center>To send your Text Chat message, please confirm by texting <br /><h1>'
                + oResponse.NAS.Keyword
                + '</h1>to<h1>'
                + oResponse.NAS.Shortcode + '</h1></center></div>';
        break;
    case 3:
        sMessage = 'The number you have entered is not valid. Please try again.';
        break;
    case 101:
        sMessage = 'The message has to be between 10 and 150 characters long';
        break;
    }
    
    return Services.View.TextChat.ShowResult(sMessage);
};

Services.Actions.ProcessSendMessageRequest = function(transport) {
    oResponse = transport.responseJSON;
    
    if (!oResponse.Status) {
        return Services.View.Message.ShowError(oResponse.Message);
    }
    
    return Services.View.TextChat.ShowResult(oResponse.Message);
};

Services.View.Message = {};

Services.View.Message.ShowResult = function(sMessage) {
    sMessage = "<div class='popup_request'>" + sMessage + "</div>";
    AnimatedOverlay.ShowByContent(sMessage, 'callback_error');
};

Services.View.Message.ShowError = function(sMessage) {
    sMessage = sMessage
            || 'There was a problem processing your message, please try again later.';
    sMessage = "<div class='popup_request error'>" + sMessage + "</div>";
    AnimatedOverlay.ShowByContent(sMessage, 'callback_error');
};

Services.Actions.SendMessage = function() {
    
    var oParameters = {
        // Subject : $F('ServiceSendMessageSubject'),
        Body : $F('ServiceSendMessageBody'),
        TargetType : 'operator',
        TargetId : $F('ServiceSendMessageTarget')
    };
    
    new Ajax.Request('/ajax/utilities/messaging/send/text', {
        method : 'post',
        parameters : oParameters,
        onLoading : function() {
            AnimatedOverlay.Open();
        },
        onSuccess : function(transport) {
            Services.Actions.ProcessSendMessageRequest(transport);
            // let's empty the textfield
            $('ServiceSendMessageBody').setValue('');
            
        },
        onFailure : function() {
            Services.View.Message.ShowResult();
        }
    });
};


Services.Actions.DeleteThread = function(iTargetId, iMessageId) {
    
    if (confirm("Are you sure you want to delete?")) {
        var oParameters = {
            Target : iTargetId,
            TargetType : 'operator'
        };
        
        new Ajax.Request('/ajax/utilities/messaging/delete', {
            method : 'post',
            parameters : oParameters,
            onLoading : function() {
                // AnimatedOverlay.Open();
            },
            onSuccess : function(transport) {
                Effect.Fade('message_' + iMessageId);
            },
            onFailure : function() {
                Services.View.Message.ShowResult();
            }
        });
    }
};


Services.Actions.DeleteThreadByLiveCode = function(iTargetId, iMessageId) {
    
    if (confirm("Are you sure you want to delete?")) {
        var oParameters = {
            Target : iTargetId,
            TargetType : 'operator',
            DeleteType: 'live_code'
        };
        
        new Ajax.Request('/ajax/utilities/messaging/delete', {
            method : 'post',
            parameters : oParameters,
            onLoading : function() {
                // AnimatedOverlay.Open();
            },
            onSuccess : function(transport) {
                
                Effect.Fade('message_' + iMessageId);
                
                // Services.Actions.ProcessSendMessageRequest(transport);
            },
            onFailure : function() {
                Services.View.Message.ShowResult();
            }
        });
    }
};

