//
// $Id: Manufacturer.js,v 1.1.1.1 2010/02/26 08:30:04 steve Exp $
//
var Manufacturer = function() {

    this.currentLogo = 0
    
    this.html     = new Html()
    this.thickbox = new ThickBoxGeneric()
    this.page     = new Page()
    this.url      = new Url()
    
    this.init = function() {
    
        var self = this

        self.id   = self.url.clickedUrlArg('Id')
        self.name = self.url.clickedUrlArg('Name')

        self.thickbox.init()

        if (self.id) {
            $('#manufacturerTitle').html(self.name)
            $('#manufacturerName').html(self.name)
            $('#manufacturerSaveButton').val('Save')
            self.loadManufacturerDescription()
        } else {
            self.showTable()
        }
        $('#manufacturerSaveButton').click( function() { self.saveDetails() })
    }
    
    this.loadManufacturerDescription = function() {
    
        var self = this
        
        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=getManufacturer&Id=' + self.id,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else {
                    
                        self.name      = data.Manufacturer.manufacturername
                        self.menuLabel = data.Manufacturer.menulabel
                        self.intro     = data.Manufacturer.intro
                        self.moreInfo  = data.Manufacturer.moreinfolink
                        
                        $('#manufacturerName').val(self.name)
                        $('#manufacturerMenuLabel').val(self.menuLabel)
                        $('#manufacturerText').val(self.intro)

                        self.showTable()
                    }
                }
        })
    }
    
    this.showTable = function() {
    
        $('#manufacturerDetailsDiv').fadeIn()
    
    }
    
    this.saveDetails = function() {
    
        var self = this

        var name      = escape($('#manufacturerName').val())
        var menuLabel = escape($('#manufacturerMenuLabel').val())
        var text      = escape($('#manufacturerText').val())

        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=saveManufacturer&Id=' + self.id +
                                                   '&Name=' + name +
                                                   '&MenuLabel=' + menuLabel +
                                                   '&Text=' + text,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else {
                        alert('Details saved')
                        $('#manufacturersDiv').html(data.Manufacturers)
                        self.initCMS()
                    }
                    tb_remove()
                }
        })
    }

    // CMS
    //
    this.initCMS = function() {

        var self = this

        self.thickbox.applyThickBox($('#manufacturersDiv a.thickbox'))

        $('#manufacturersDiv .showModels').click( function() { self.toggleModels($(this)) })
        $('#manufacturersDiv .enableManufacturer').click( function() { self.enableManufacturer($(this)) })
        $('#manufacturersDiv .deleteManufacturer').click( function() { self.deleteManufacturer($(this)) })

        $('#manufacturersDiv .manufacturerMoveUpButton').click( function() { self.moveManufacturer($(this), 'up') })
        $('#manufacturersDiv .manufacturerMoveDownButton').click( function() { self.moveManufacturer($(this), 'down') })

        $('#manufacturersDiv .enableModel').click( function() { self.enableModel($(this)) })
        $('#manufacturersDiv .deleteModel').click( function() { self.deleteModel($(this)) })

        $('#manufacturersDiv .modelMoveUpButton').click( function() { self.moveModel($(this), 'up') })
        $('#manufacturersDiv .modelMoveDownButton').click( function() { self.moveModel($(this), 'down') })

    }

    this.toggleModels = function(elem) {

        var self = this

        var id  = $(elem).attr('id').split('_')
        id      = id[1]
        var src = $(elem).attr('src')

        $('#manufacturersDiv .models').hide()
        if (src.match(/expand/)) {
            $(elem).attr('src', src.replace(/expand/, 'collapse'))
            $('#models_' + id).slideDown()
        } else {
            $(elem).attr('src', src.replace(/collapse/, 'expand'))
        }
    }

    this.enableManufacturer = function(elem) {

        var self = this

        var elemId = $(elem).attr('id')
        var enable = self.html.getCheckBoxValue('#' + elemId)
        id         = elemId.split('_')
        id         = id[1]

        $('#manufacturerDiv_' + id).addClass('selectedRow')
        if (enable == 0) {
            action = 'disableManufacturer'
            if (! confirm('Disable this manufacturer?')) {
                self.html.setCheckBoxValue('#' + elemId, 1)
                $('#manufacturerDiv_' + id).removeClass('selectedRow')
                return
            }
        } else {
            action = 'enableManufacturer'
            if (! confirm('Enable this manufacturer?')) {
                self.html.setCheckBoxValue('#' + elemId, 0)
                $('#manufacturerDiv_' + id).removeClass('selectedRow')
                return
            }
        }

        $('#manufacturerDiv_' + id).removeClass('selectedRow')

        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=' + action + '&Id=' + id,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else {
                        if (enable == 0) {
                            $('#manufacturerDiv_' + id).addClass('disabledTr')
                        } else {
                            $('#manufacturerDiv_' + id).removeClass('disabledTr')
                        }
                    }
                }
        })
    }

    this.deleteManufacturer = function(elem) {

        var self = this

        var id = $(elem).attr('id').split('_')
        id     = id[1]

        $('#manufacturerDiv_' + id).addClass('selectedRow')
        if ($('#models_' + id + ' div').length > 0) {
            alert('You cannot delete a manufacturer that has models. Please delete them first.')
            $('#manufacturerDiv_' + id).removeClass('selectedRow')
            return            
        }
        if (! confirm('Delete This Manufacturer?')) {
            $('#manufacturerDiv_' + id).removeClass('selectedRow')
            return
        }

        $('#manufacturerDiv_' + id).removeClass('selectedRow')

        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=deleteManufacturer&Id=' + id,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else {
                        $('#manufacturerDiv_' + id).remove()
                        alert('Boat Manufacturer Deleted')
                    }
                }
        })
    }

    this.moveManufacturer = function(elem, direction) {
    
        var self = this

        var id = $(elem).attr('id').split('_')
        id     = id[1]

        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=moveManufacturer&Id=' + id +
                                                   '&Direction=' + direction,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else {
                        $('#manufacturersDiv').html(data.Manufacturers)
                        self.initCMS()
                    }
                    tb_remove()
                }
        })
    }    
    
    this.enableModel = function(elem) {

        var self = this

        var elemId = $(elem).attr('id')
        var enable = self.html.getCheckBoxValue('#' + elemId)
        id         = elemId.split('_')
        id         = id[1]

        $('#modelDiv_' + id).addClass('selectedRow')
        if (enable == 0) {
            action = 'disableModel'
            if (! confirm('Disable this boat?')) {
                self.html.setCheckBoxValue('#' + elemId, 1)
                $('#modelDiv_' + id).removeClass('selectedRow')
                return
            }
        } else {
            action = 'enableModel'
            if (! confirm('Enable this boat?')) {
                self.html.setCheckBoxValue('#' + elemId, 0)
                $('#modelDiv_' + id).removeClass('selectedRow')
                return
            }
        }

        $('#modelDiv_' + id).removeClass('selectedRow')

        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=' + action + '&Id=' + id,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else {
                        if (enable == 0) {
                            $('#modelDiv_' + id).addClass('disabledTr')
                        } else {
                            $('#modelDiv_' + id).removeClass('disabledTr')
                        }
                    }
                }
        })
    }

    this.moveModel = function(elem, direction) {
    
        var self = this

        var id = $(elem).attr('id').split('_')
        var manufacturerId = id[1]
        var modelId        = id[2]

        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=moveModel&ManufacturerId=' + manufacturerId +
                                            '&ModelId=' + modelId +
                                            '&Direction=' + direction,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else {
                        $('#manufacturersDiv').html(data.Manufacturers)
                        self.initCMS()
                        self.toggleModels($('#showModels_' + manufacturerId))
                    }
                    tb_remove()
                }
        })
    }    

    // Display
    //
    this.initDisplay = function() {
    
        var self = this
        
        self.positionLogos()
        
        $('table.manufacturersLinksTable div.manufacturerOver').mouseover( function() { self.showLogo($(this)) })
        $('table.manufacturersLinksTable div.manufacturerOver').click( function() { self.loadManufacturer($(this)) })
    }
    
    this.positionLogos = function() {
    
        $('table.manufacturersLinksTable div.manufacturer').each(
            function() {
                var id = $(this).attr('id').split('_')
                id     = id[1]

                var left   = $(this).offset().left
                var top    = $(this).offset().top
                var width  = $(this).width()
                var height = $(this).height() - 20

                var over = 'manufacturerOver_' + id

                $('#' + over).css('left', left + 10 + 'px')
                $('#' + over).css('top', top + 'px')

                var img = 'manufacturerLogo_' + id
                var imgWidth  = $('#' + img).width()
                var imgHeight = $('#' + img).height()

                top  = parseInt(top + ((height / 2) - (imgHeight / 2)))
                left = parseInt(left + ((width / 2) - (imgWidth / 2)))

                $('#' + img).css('top', top + 'px')
                $('#' + img).css('left', left + 'px')
	        })
    }
    
    this.showLogo = function(elem) {
    
        var self = this
        
        $('div.manufacturerLogo').hide()
         
        var id = $(elem).attr('id').split('_')
        id     = id[1]

        self.currentLogo = id
        $('#manufacturerLogo_' + id).fadeIn('medium')
    }
    
    this.loadManufacturer = function(elem) {

        var self = this

        var id = $(elem).attr('id').split('_')
        id     = id[1]
        
        var script = $('#manufacturerLabel_' + id).attr('href')
        
        self.page.replacePage(script)
    }

    this.deleteModel = function(elem) {

        var self = this

        var id = $(elem).attr('id').split('_')
        id     = id[1]

        $('#modelDiv_' + id).addClass('selectedRow')
        if (! confirm('Delete This Boat Model?')) {
            $('#modelDiv_' + id).removeClass('selectedRow')
            return
        }

        $('#modelDiv_' + id).removeClass('selectedRow')

        $.ajax({
                  type:     'POST',
                  url:      CMSURL,
                  data:     'Action=deleteModel&Id=' + id,
                  dataType: 'json',
                  timeout:  40000,
            error:
                function() {
                    return false;
                },
            success:
                function(data) {
                    if (data.Error) {
                        alert(data.Message)
                    } else {
                        $('#modelDiv_' + id).remove()
                        alert('Boat Model Deleted')
                    }
                }
        })
    }
}
