//Declare Messaging Namespace
Udig.RegisterNamespace("Messaging");
Udig.Messaging = {

    WaitPanel:null,
    MessagePanel:null,
    NewMessagesNotice:null,
    Url:'Services/AjaxMessaging.asmx/',

    OpenMessageWindow:function(ToName, ToEmail, DefaultFromEmail, DefaultSubject, DefaultMessageText)
    {
        Udig.Messaging.WaitContainer().show();
        var form = Udig.String.Format('ToName={0}&ToEmail={1}&DefaultFromEmail={2}&DefaultSubject={3}&DefaultMessageText={4}', ToName, ToEmail, DefaultFromEmail, DefaultSubject, DefaultMessageText);
        Udig.Messaging.Call("OpenMessageWindow", form, Udig.Messaging.OpenMessageWindowReturn, ['InsertHREF']);
    },
    
    OpenSendToFriendWindow:function(FromUserID, MessageType)
    {
        Udig.Messaging.WaitContainer().show();
        var form = Udig.String.Format('FromUserID={0}&MessageType={1}', FromUserID, MessageType);
        Udig.Messaging.Call("OpenSendToFriendWindow", form, Udig.Messaging.OpenMessageWindowReturn, ['InsertHREF']);
    },
    
    OpenMessageWindowReturn:function(ret, args)
    {
        var FocusEmail = false;
        if (args != null && args.length > 0) {
            if (args[0].toString() == "InsertHREF") {
                //ret = Udig.String.Format(ret, document.location.href);
                FocusEmail = true;
            }
        }
        Udig.Messaging.WaitContainer().hide();
        Udig.Messaging.NewMessagePanel(ret);
        Udig.Messaging.MessagePanel.center();
        Udig.Messaging.MessagePanel.show();
        if (FocusEmail) {
            setTimeout("Udig.Messaging.SetFocusToEmailAddress();", 500);
        }else{
            setTimeout("Udig.Messaging.SetFocusToMessageText();", 500);
        }
        
//        var scriptContent = document.getElementById('_MessagingGAContent');
//        if (scriptContent != null)
//        setTimeout(functionUdig.Script.Insert(scriptContent.innerHTML)", 1000);
        
    },
    
    SetFocusToMessageText:function()
    {
        var post = document.getElementById('_Messaging_MessagePost');
        if (post != null) {
            if (post.setSelectionRange){
                post.setSelectionRange(0,0);
                post.focus();
            }
        }
    },
    
    SetFocusToEmailAddress:function()
    {
        var email = document.getElementById('_Messaging_FromEmail');
        if (email != null)
        email.select();
    },
    
    SendMessage:function(toEmail, fromEmail, subject, message)
    {
        if (Udig.String.IsNullOrEmpty(subject, message, fromEmail)) {
            alert("Please enter your email and a subject with message."); return;
        }
        if (fromEmail == 'from@email.com' || (!Udig.Utils.IsValidEmail(fromEmail)))
        {
            alert("Please enter a valid email address in the from box."); return;
        }
        Udig.Messaging.MessagePanel.cfg.setProperty("effect", [{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.5}, {effect:YAHOO.widget.ContainerEffect.SLIDE,duration:0.5}]);
        Udig.Messaging.MessagePanel.hide();
        var form = Udig.String.Format("ToEmail={0}&FromEmail={1}&Subject={2}&MessageText={3}", toEmail, fromEmail, subject, message);
        Udig.Messaging.Call("SendNewMessage", form, Udig.Messaging.ConfirmMessageSent, [toEmail]);
    },
    
    SendPageToFriend:function(fromEmail, toEmail, subject, message, ccSender, type, handle)
    {
        if (Udig.String.IsNullOrEmpty(fromEmail)) {
            alert("You must logged in as a registered user to use this feature."); return;
        }
        if (Udig.String.IsNullOrEmpty(subject, message)) {
            alert("Please enter a subject and message."); return;
        }
        if (toEmail == "email@friend.com" || (!Udig.Utils.IsValidEmail(toEmail)))
        {
            alert("Please enter a valid email for the recipient."); return;
        }
        Udig.Messaging.MessagePanel.cfg.setProperty("effect", [{effect:YAHOO.widget.ContainerEffect.FADE,duration:0.5}, {effect:YAHOO.widget.ContainerEffect.SLIDE,duration:0.5}]);
        Udig.Messaging.MessagePanel.hide();
        var form = Udig.String.Format("FromEmail={0}&ToEmail={1}&Subject={2}&MessageText={3}&CopySender={4}&MessageType={5}&MessageHandle={6}", fromEmail, toEmail, subject, message, ccSender, type, handle);
        Udig.Messaging.Call("SendPageToFriend", form, Udig.Messaging.ConfirmMessageSent);
    },
    
    ConfirmMessageSent:function(ret, args)
    {
        //alert(ret.toString());
        if (ret.toString() == "true") {
            Udig.Sounds.Play('media/mail-sent.wav');
            if (args != null && args.length > 0) 
            {
                Udig.Url.SetHash(Udig.String.Format("MessageSentTo_{0}", args[0]));
                setTimeout(function(){ pageTracker._trackPageview(); }, 500);
            }
        } else {
            setTimeout("alert('ERROR: Your message was not sent. Please try again.');", 500);
        }
    },
    
    CancelNewMessage:function()
    {
        if (confirm("Are you sure you want to discard this message?")) {
            this.MessagePanel.cfg.setProperty("effect", {effect:YAHOO.widget.ContainerEffect.FADE,duration:1});
            this.MessagePanel.hide();
            Udig.Sounds.Play('media/emptytrash.wav');
        }
    },
    
    WaitContainer:function()
    {
        if (this.WaitPanel == null)
        {
            this.WaitPanel = new YAHOO.widget.Panel("waitPanel",  
                                                    { width: "240px",
                                                      constraintoviewport: true,
                                                      fixedcenter: true, 
                                                      close: true, 
                                                      draggable: false, 
                                                      zindex:4,
                                                      modal: true,
                                                      visible: false
                                                    } 
                                                );
        }
        this.WaitPanel.setHeader("Loading, please wait...");
        this.WaitPanel.setBody("<img src=\"images/loading.gif\"/>");
        this.WaitPanel.render(document.body);
        return this.WaitPanel;
    },
    
    NewMessagePanel:function(body)
    {
        if (this.MessagePanel == null)
        {
            this.MessagePanel = new YAHOO.widget.Panel("GlobalMessagePanel",  
                                                    { width: "600px",
                                                      height: "500px",
                                                      constraintoviewport: false,
                                                      close: false, 
                                                      draggable: true, 
                                                      zindex:4,
                                                      modal: false,
                                                      visible: false,
                                                      fixedcenter:false,
                                                      effect:{effect:YAHOO.widget.ContainerEffect.SLIDE,duration:0.5}
                                                    } 
                                                );
        }
        this.MessagePanel.hideEvent.subscribe(Udig.Messaging.DestroyMessagePanel);
        this.MessagePanel.setHeader("New Message");
        this.MessagePanel.setBody('<div style="height:456px; overflow:hidden;">' + body + '</div>');
        this.MessagePanel.render(document.body);
        return this.MessagePanel;
    },
    
    DestroyMessagePanel:function()
    {
        if (Udig.Messaging.MessagePanel != null) {Udig.Messaging.MessagePanel.destroy(); Udig.Messaging.MessagePanel = null; }
    },
    
    Return:{
        Success:function(o)
        {
            //Make sure we got a valid XML response
            if (!o.responseXML.documentElement.firstChild) { return; }
            var data = '';
            //Lets Append all XML data into a single response value
            for (var i=0; i<o.responseXML.documentElement.childNodes.length; i++) {
                data += o.responseXML.documentElement.childNodes[i].nodeValue;
            }
            //Send the Return Data and the Passback Arguments to the Return Function
            o.argument[0](data, o.argument[1]);
        },
        Failure:function(o){ /*alert('Failure');*/ }
    },
    
    Call:function(webmethod, parameters, returnmethod, returnArguments)
    {
        //Let create a Global callback
        var Callback = {
            success:Udig.Messaging.Return.Success,
            failure:Udig.Messaging.Return.Failure,
            scope:Udig.Messaging.Return,
            argument:[returnmethod, returnArguments]
        }
        // Calling URL
        var url = Udig.Global.BaseUrl+Udig.Messaging.Url+webmethod;
        //alert(url);
        //Send the current request
    	YAHOO.util.Connect.asyncRequest('POST', url, Callback, parameters);
    }

}