var LOP;
if(!LOP) {
    LOP = {};
}

(function($) {
    
    var path = location.pathname.toLowerCase().indexOf('/contentmanagerdata/sites/aspnet/') > -1 ? '/ContentManagerData/Sites/aspnet/' : '/',
        urlDiagGroupGetAnswer = path + 'ws/forumAdv.asmx/CheckAndGetNextDiagGroup',
        urlUserGetSessionId = path + 'ws/Customer.asmx/InitSession',
        urlUserGetInfos = path + 'ws/Customer.asmx/GetUserInfo',
        urlUserLogin = path + 'ws/Customer.asmx/CustomerLogin',
        urlUserLogout = path + '_fr/_fr/tools/logout.aspx',
        urlUserUpdateExtProp = path + '_fr/_fr/tools/user-update-ext-prop.aspx',
        urlUserTellAFriend = path + 'ws/Customer.asmx/TellAFriend',
        urlForumAddPost = path + 'ws/forumAdv.asmx/SaveForumAdvPostInfo',
        urlForumRemovePost = path + 'ws/forumAdv.asmx/DeleteForumAdvInfo';

    var sessionId = '';
    
    var wrapSuccess = function(fnSuccess, fnError, tag) {
        return function(response) {
            if(fnError && response.getElementsByTagName(tag).length) {
                fnError(response);
            } else if(fnSuccess) {
                fnSuccess(response);
            }
        };
    };
    
    var wrapError = function(fnError) {
        return function(response) {
            if(fnError) {
                fnError(response);
            }
        };
    };
    
    LOP.wsUserGetSessionId = function(datas) {
        var XMLws = '<?xml version="1.0" encoding="utf-8"?>';
        XMLws += '<Loreal_Reference_IN_InitSession>';
        XMLws += '</Loreal_Reference_IN_InitSession>';
        $.ajax({
            type: 'POST',
            url: urlUserGetSessionId,
            data: 'inputData=' + XMLws,
            success: function(response) {
                sessionId = response.getElementsByTagName("SessionID")[0].firstChild.nodeValue;
                if(datas.onSuccess) {
                    datas.onSuccess(sessionId);
                }
            }
        });
    };
    
    LOP.wsUserGetInfos = function(userId) {
        var XMLws = '<?xml version="1.0" encoding="utf-8"?>';
        XMLws += '<GetCustomerInfo>';
        XMLws += '<SessionID>' + userId + '</SessionID>';
        XMLws += '</GetCustomerInfo>';
        
        $.ajax({
            type: 'POST',
            url: urlUserGetInfos,
            data: 'inputData=' + XMLws
        });
    };
    
    LOP.wsUserLogin = function(datas) {
        datas.login = datas.login || '';
        datas.password = datas.password || '';
        
        var XMLws = '<?xml version="1.0" encoding="utf-8"?>';
        XMLws += '<Loreal_Reference_IN_CustomerLogin>';
        XMLws += '<SessionID></SessionID>';
        XMLws += '<Login>' + datas.login + '</Login>';
        XMLws += '<Password>' + datas.password + '</Password>';
        XMLws += '</Loreal_Reference_IN_CustomerLogin>';
        
        $.ajax({
            type: 'POST',
            url: urlUserLogin,
            data: 'inputData=' + XMLws,
            success: wrapSuccess(datas.onSuccess, datas.onError, 'Loreal_Reference_OUT_Error'),
            error: wrapSuccess(datas.onError)
        });
    };
    
    LOP.wsUserLogout = function(datas) {
        $.ajax({
            type: 'GET',
            url: urlUserLogout + '?_=' + (new Date()).getTime(),
            success: function(response) {
                if(response.indexOf('success') > -1) {
                    if(datas.onSuccess) {
                        datas.onSuccess();
                    }
                } else {
                    if(datas.onError) {
                        datas.onError();
                    }
                }
            },
            error: function() {
                if(datas.onError) {
                    datas.onError();
                }
            }
        });
    };
    
    LOP.wsUserUpdateExtProp = function(datas) {
        $.ajax({
            type: 'GET',
            url: urlUserUpdateExtProp,
            data: 'name=' + datas.name + '&type=' + datas.type + '&value=' + datas.value,
            success: function(response) {
                if(response.indexOf('success') > -1) {
                    if(datas.onSuccess) {
                        datas.onSuccess();
                    }
                } else {
                    if(datas.onError) {
                        datas.onError();
                    }
                }
            },
            error: function() {
                if(datas.onError) {
                    datas.onError();
                }
            }
        })
    };
    
    LOP.wsForumAddPost = function(datas) {
        LOP.wsUserGetSessionId({onSuccess: function() {
            datas.forumId = datas.forumId || '';
            datas.postId = datas.postId || '';
            datas.replyTo = datas.replyTo || '';
            datas.subject = datas.subject || '';
            datas.message = datas.message || '';
            datas.approved = datas.approved || '0';
            datas.valid = datas.valid || '0';
            datas.properties = datas.properties || {};
            
            var XMLws = '<?xml version="1.0" encoding="utf-8"?>';
            XMLws += '<Loreal_Reference_IN_SaveForumAdvPostInfo>';
            XMLws += '<SessionID>' + sessionId + '</SessionID>';
            XMLws += '<ForumAdvId>' + datas.forumId + '</ForumAdvId>';
            XMLws += '<ForumAdvPostId>' + (datas.postId || '') + '</ForumAdvPostId>';
            XMLws += '<FpParentId>' + (datas.replyTo || '') + '</FpParentId>';
            XMLws += '<FpSubject><![CDATA[' + datas.subject + ']]></FpSubject>';
            XMLws += '<FpText><![CDATA[' + datas.message + ']]></FpText>';
            XMLws += '<FpApproved>' + (datas.approved || '') + '</FpApproved>';
            XMLws += '<FpValid>' + (datas.valid || '') + '</FpValid>';
            XMLws += '<FpPrdCode></FpPrdCode>';
            XMLws += '<FpExtendedProperties>';
            for (var p in datas.properties) {
                if (BOX.isOwnProperty(datas.properties, p)) {
                    XMLws += '<' + p + '>' + datas.properties[p] + '</' + p + '>';
                }
            }
            XMLws += '</FpExtendedProperties>';
            XMLws += '</Loreal_Reference_IN_SaveForumAdvPostInfo>';
            
            $.ajax({
                type: 'POST',
                url: urlForumAddPost,
                data: 'inputData=' + XMLws,
                success: wrapSuccess(datas.onSuccess, datas.onError, 'Loreal_Reference_OUT_Error'),
                error: wrapSuccess(datas.onError)
            });
        }});
    };
    
    LOP.wsForumUpdatePost = function(datas) {
        LOP.wsForumAddPost(datas);
    };
    
    LOP.wsForumRemovePost = function(datas) {
        LOP.wsUserGetSessionId({onSuccess: function() {
            datas.forumId = datas.forumId || '';
            datas.postId = datas.postId || '';
            datas.onSuccess = datas.onSuccess || '';
            datas.onError = datas.onError || '';
            
            var XMLws = '<?xml version="1.0" encoding="utf-8"?>';
            XMLws += '<Loreal_Reference_IN_DeleteForumAdvPostInfo>';
            XMLws += '<SessionID>' + sessionId + '</SessionID>';
            XMLws += '<ForumAdvId>' + datas.forumId + '</ForumAdvId>';
            XMLws += '<ForumAdvPostId>' + datas.postId + '</ForumAdvPostId>';
            XMLws += '</Loreal_Reference_IN_DeleteForumAdvPostInfo>';
            
            $.ajax({
                type: 'POST',
                url: urlForumRemovePost,
                data: 'inputData=' + XMLws,
                success: wrapSuccess(datas.onSuccess, datas.onError, 'Loreal_Reference_OUT_Error'),
                error: wrapSuccess(datas.onError)
            });
        }});
    };
    
    LOP.wsUserTellAFriend = function(datas) {
        LOP.wsUserGetSessionId({onSuccess: function() {
            datas.user.lname = datas.user.lname || '';
            datas.user.fname = datas.user.fname || '';
            datas.user.mail = datas.user.mail || '';
            datas.friend.lname = datas.friend.lname || '';
            datas.friend.fname = datas.friend.fname || '';
            datas.friend.mail = datas.friend.mail || '';
            datas.XMLtemplate = datas.XMLtemplate || '';
            datas.customs = datas.customs || {};
            
            var XMLws = '<?xml version="1.0" encoding="utf-8"?>';
            XMLws += '<Loreal_Reference_IN_TellAFriend>';
            XMLws += '<SessionID>' + sessionId + '</SessionID>';
            XMLws += '<Customer>';
            XMLws += '<FirstName><![CDATA[' + datas.user.fname + ']]></FirstName>';
            XMLws += '<LastName><![CDATA[' + datas.user.lname + ']]></LastName>';
            XMLws += '<Email><![CDATA[' + datas.user.mail + ']]></Email>';
            XMLws += '</Customer>';
            XMLws += '<Friend>';
            XMLws += '<FirstName><![CDATA[' + datas.friend.fname + ']]></FirstName>';
            XMLws += '<LastName><![CDATA[' + datas.friend.lname + ']]></LastName>';
            XMLws += '<Email><![CDATA[' + datas.friend.mail + ']]></Email>';
            XMLws += '</Friend>';
            XMLws += '<TemplateName><![CDATA[' + datas.XMLtemplate + ']]></TemplateName>';
            XMLws += '<Customs>';
            for (var p in datas.customs) {
                if (BOX.isOwnProperty(datas.customs, p)) {
                    XMLws += '<' + p + '><![CDATA[' + datas.customs[p] + ']]></' + p + '>';
                }
            }
            XMLws += '</Customs>';
            XMLws += '</Loreal_Reference_IN_TellAFriend>';
            
            $.ajax({
                type: 'POST',
                url: urlUserTellAFriend,
                data: 'inputData=' + XMLws,
                success: wrapSuccess(datas.onSuccess, datas.onError, 'Loreal_Reference_OUT_Error'),
                error: wrapSuccess(datas.onError)
            });
        }});
    };

})(jQuery);
