//
//
//
var Person = function() {

    this.html     = new Html()
    this.thickbox = new ThickBoxGeneric()
    this.url      = new Url()

    this.getByLetter = function() {

        var self = this

        if ($(elem).hasClass('content')) {
            alert('No records starting with this letter') 
            return
        }

        var letter = $(elem).html()

        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=getPeopleByLetter&Letter=' + letter,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else {
                        $('#content').replaceWith(data.People)
                        self.initCMS()
                    }
                }
        })
    }

    // CMS Listing functions
    //
    this.initCMS = function() {

        var self = this

        $('#cmsPeopleTable .letter').click( function() { self.getByLetter($(this)) })
        $('#cmsPeopleTable .deletePerson').click( function() { self.deletePerson($(this)) })
    }

    this.deletePerson = function(elem) {

        var self = this

        var id = $(elem).attr('id').split('_')
        id     = id[1]

        var personName   = $('#personName_' + id).html()
        var personIsUser = self.html.getCheckBoxValue($('#isUser_' + id))

        $('#personTr_' + id).addClass('invalid')
        if (personIsUser) {
            if (! confirm("Remove person and user '" + personName + "'")) {
                $('#personTr_' + id).removeClass('invalid')
                return
            }            
        } else {
            if (! confirm("Remove person '" + personName + "'")) {
                $('#personTr_' + id).removeClass('invalid')
                return
            }            
        }
        $('#personTr_' + id).removeClass('invalid')

        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=deletePersonAndUser&Id=' + id,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else { 
                        $('#personTr_' + id).remove()
                        alert('Person deleted')
                    }
                }
        })    
    }

    // Editing
    //
    this.initPerson = function() {

        var self = this

        self.thickbox.init()

        self.id     = self.url.clickedUrlArg('Id')
        self.player = self.url.clickedUrlArg('Player')

        self.loadPersonParameters()

        if ($('#sendNewsletterTh').length > 0) {
            $('#sendNewsletterSpan').show()
        }

        if (! self.id) {
            $('#personTitle').html('New Person')
        }
        $('#isUser').click( function() { self.toggleUserTable($(this)) })

        if (self.player) {
            $('#isPlayerTr').show()
        }
        $('#personSaveButton').click( function() { self.saveDetails() })
    }

    this.toggleUserTable = function(elem) {

        var self = this

        var val = self.html.getCheckBoxValue($(elem))
        if (val) {
            $('#userDetails').slideDown()
        } else {
            $('#userDetails').slideUp()
        }
    }

    this.loadPersonParameters = function() {

        var self = this

        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=loadPersonParameters',
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else { 
                        $('#userTypesTd').html(data.UserTypes)
                        if (self.id) {
                            self.loadPerson()
                        } else {
                            self.showTable()
                        }
                    }
                }
        })
    }

    this.loadPerson = function() {

        var self = this

        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=loadPerson&Id=' + self.id,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else { 
                        $('#personTitle').html("Edit '" + data.Person.name + "'")
                        $('#firstName').val(data.Person.firstname)                        
                        $('#middleName').val(data.Person.middlename)                        
                        $('#surname').val(data.Person.surname)
                        $('#wholeName').val(data.Person.displayname)
                        self.html.setCheckBoxValue($('#personEnabled'), data.Person.personenabled)

                        $('#userUsername').val(data.Person.username)
                        $('#userType').val(data.Person.usertypeid)

                        $('#email').val(data.Person.email)
                        self.html.setCheckBoxValue($('#sendNewsletter'), data.Person.receivenewsletter)
                        $('#phone').val(data.Person.phoneno)
                        $('#mobile').val(data.Person.mobileno)
                        $('#fax').val(data.Person.faxno)

                        if (data.IsPlayer) {
                            self.html.setCheckBoxValue($('#personIsPlayer'), 1)
                        }

                        if (data.Person.username) {
                            $('#isUser').hide()
                            $('#isAUser').show()
                            self.html.setCheckBoxValue($('#isUser'), 1)
                            $('#username').val(data.Person.username)
                            self.toggleUserTable($('#isUser'))
                        }
                    }
                    self.showTable()
                }
        })

    }

    this.showTable = function() {

        $('#personTable').fadeIn()
    }

    this.saveDetails = function() {

        var self = this

        var firstName     = $('#firstName').val()
        var middleName    = $('#middleName').val()
        var surname       = $('#surname').val()
        var wholeName     = $('#wholeName').val()
        var personEnabled = self.html.getCheckBoxValue($('#personEnabled'))

        var isUser        = self.html.getCheckBoxValue($('#isUser'))
        var username      = $('#userUsername').val()
        var userType      = $('#userType').val()
        var userEnabled   = self.html.getCheckBoxValue($('#userEnabled'))

        var email          = $('#email').val()
        var sendNewsletter = self.html.getCheckBoxValue($('#sendNewsletter'))
        var phone          = $('#phone').val()
        var mobile         = $('#mobile').val()
        var fax            = $('#fax').val()

        var player         = self.html.getCheckBoxValue($('#personIsPlayer')) 

        // Validate person
        //
        if (! wholeName && ! firstName && ! middleName && ! wholeName) {
            alert('Please enter either First/Name/Middle Name/Surname (preferred) or Whole Name')
            return
        }
        if (wholeName && (firstName || middleName || wholeName)) {
            alert('Please only enter either First/Name/Middle Name/Surname (preferred) or Whole Name')
            return
        }
        if (isUser && ! email) {
            alert('Please enter an email when creating/updating a user')
            return
        }

        // Validate user
        //
        if (isUser) {
            if (userType == 0) {
                alert('Please select a user type') 
                return
            }
            if (! username && firstName) {
                if (! confirm("No user name; use '" + firstName + "'?")) {
                    return
                } else {
                    username = firstName
                }
            }
            if (! username && ! firstName) {
                alert('Please supply a user name')
                return
            }
        }

        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=savePersonAndUser&Id=' + self.id +
                                             '&FirstName=' + firstName +
                                             '&MiddleName=' + middleName + 
                                             '&Surname=' + surname + 
                                             '&WholeName=' + wholeName +
                                             '&PersonEnabled=' + personEnabled +
                                             '&IsUser=' + isUser + 
                                             '&Username=' + username + 
                                             '&UserType=' + userType +
                                             '&UserEnabled=' + userEnabled + 
                                             '&Email=' + email + 
                                             '&SendNewsletter=' + sendNewsletter + 
                                             '&Phone=' + phone +  
                                             '&Mobile=' + mobile +
                                             '&Fax=' + fax +
                                             '&Player=' + self.player +
                                             '&IsPlayer=' + player +
                                             '&Reload=1',
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else {
                        $('#content').replaceWith(data.People)
                        self.thickbox.applyThickBox($('#content a.thickbox'))
                        self.initCMS()
                        var str
                        if (self.id) {
                            str = 'updated'
                        } else {
                            str = 'created'
                        }
                        if (isUser) {
                            alert('Person and User ' + str) 
                        } else {
                            alert('Person ' + str)
                        }
                    }
                    tb_remove()
                }
        })
    }
}