if (!window['SW']) var SW = {};

SW.MODEL =
{
    descHeight:0,

    initDescription: function ()
    {
        if($('thumb_mdp') != undefined && $('photoCaption') != undefined) {
            $('thumb_mdp').observe('mouseover',function(){SW.MODEL.openDescription(true)});
            $('thumb_mdp').observe('mouseout',function(){SW.MODEL.closeDescription()});

            $('photoCaption').observe('mouseover',function(){SW.MODEL.openDescription()});
            $('photoCaption').observe('mouseout',function(){SW.MODEL.closeDescription()});

            this.initDescriptionPosition();
        }
    },

    initDescriptionPosition: function ()
    {
        var thumb = $('thumb_mdp');
        var desc = $('photoCaption');

        var dims = thumb.getDimensions();

        var thumbTop = thumb.positionedOffset().top;
        var thumbHeight = dims.height;
        var thumbLeft = thumb.positionedOffset().left;
        var thumbWidth = dims.width;
        var descHeight = desc.getHeight();

        desc.setStyle({top:(thumbTop+thumbHeight-descHeight)+'px',width:(thumbWidth)+'px',left:thumbLeft});

        this.descHeight = descHeight;
    },

    openDescription: function(resetPosition)
    {
        if (resetPosition == undefined) {
            resetPosition = false;
        }

        var queue = Effect.Queues.get('global');
        queue.invoke('cancel');

        var thumb = $('thumb_mdp');
        var desc = $('photoCaption');

        var dims = thumb.getDimensions();

        var thumbTop = thumb.positionedOffset().top;
        var thumbHeight = dims.height;
        var thumbWidth = dims.width;
        var descHeight = desc.getHeight();

        if (resetPosition) {
            desc.setStyle({top:(thumbTop + thumbHeight - descHeight) + 'px',width:(thumbWidth) + 'px'});
        }

        desc.morph('height:48px; top:' + ((thumbTop + thumbHeight - this.descHeight) - 48) + 'px;');
    },

    closeDescription: function()
    {
        var queue = Effect.Queues.get('global');
        queue.invoke('cancel');

        var thumb = $('thumb_mdp');
        var desc = $('photoCaption');

        var dims = thumb.getDimensions();

        var thumbTop = thumb.positionedOffset().top;
        var thumbHeight = dims.height;
        var thumbWidth = dims.width;

        desc.morph('height:0px; top:'+((thumbTop+thumbHeight-this.descHeight))+'px;');
    },

    updateDescription: function (event)
    {
        var oEditor = FCKeditorAPI.GetInstance('model_description');
        $('model_description').value = oEditor.GetHTML();

        new Ajax.Updater($('savedescriptionresult'), '?uri=udesign/model/editDescription', {
            parameters: $('editModelDescription').serialize(),
            evalScripts: true
        });
    },

    addAllMaterials: function(modelid)
    {
        new Ajax.Updater($('model_material_display'), '?uri=udesign/model/addAllMaterials', {
            parameters: {model: modelid},
            evalScripts: true
        });
    },

    changeUnit: function(type, modelid)
    {
        new Ajax.Updater('sizeDisplay', '?uri=/udesign/model/changeUnit', {
            parameters: {unittype: type, model: modelid},
            evalScripts: true
        });
    },

    saveModelAccepted: function()
    {
      new Ajax.Request('?uri=/udesign/model/saveModelAccepted', {
        method: 'post',
        parameters: $('tc_agree_form').serialize(),
        onSuccess: function(transport) {
          var response  = transport.responseText || "failure";
          $('agreeresult').update(response);
          $('agreeresult').show();
          setTimeout(function () {
            $('agreeresult').hide();
            window.location.reload(false);
          }, 3000);
        },

        onFailure: function() {
        }
      });
    },

    saveYoutubeUrl: function(element)
    {
        var matches = [];
        $('youtubeurl').value.strip().scan(/^http:\/\/www\.youtube\.[a-z]+\/[a-z\?\&\#!]*v[/|=]([-a-zA-Z0-9_-]+)$/m, function(match) {
            matches.push(match[0])
        });

        if (matches.length == 1 || $('youtubeurl').value == "") {
            new Ajax.Request('?uri=/udesign/model/saveYoutubeUrl', {
                method: 'post',
                parameters: Form.serialize($('youtube_form')),
                evalScripts: true,
                onSuccess: function(transport) {
                    var response = transport.responseText || "failure";

                    $('youtuberesult').update(response);
                    $('youtuberesult').show();
                    setTimeout(function () {
                        $('youtuberesult').hide();
                    }, 3000);
                },
                onFailure: function() {}
            });
        } else {
            $('youtuberesult').update('<span class="youtube_error">The link you added is not valid.</span>');
            $('youtuberesult').show();
            setTimeout(function () {
                $('youtuberesult').hide();
            }, 3000);
        }
    },

    saveModelDetails: function()
    {
        if (isDisabled('submitbutton')) {
            return false;
        }

        $('saveresult').hide();

        new Ajax.Request('?uri=/udesign/model/editModelInfo', {
            method: 'post',
            parameters: $('modelpropertiesform').serialize(),
            onSuccess: function(transport) {
                var response = transport.responseText || "failure";
                var is_public = $('publicModelCheckbox').checked == true ? 1 : 0;

                response_array = response.split('~|~');
                response_text = response_array[1];
                response_status = response_array[0];

                $('saveresult').update(response_text);
                $('saveresult').show();

                if (response_status == 'success') {
                    setTimeout("$('saveresult').hide();", 5000);
                }
                formButtonDisable('submitbutton', 'modelpropertiesform');
            },
            onFailure: function() {
                $('saveresult').update('Error: could not save changes.');
                $('saveresult').show();
            }
        });
    },

    addRow: function(element)
    {
        if($(element).hasClassName('btDelete2'))
        {
          $(element).up().up().remove();

          if( $$('table.cocreatorvars tr').size() < (maxvalues+1))
          {
              $$('table.cocreatorvars tr:last-child .btDelete2').each(function(v){v.className='bt btAddRow floatleft';});
          }


        } else {
          new Ajax.Request('?uri=/udesign/cocreator/addRow',
          {
            method: 'post',
            parameters:'rows=' + $$('table.cocreatorvars tr').size(),
            onSuccess: function(transport)
            {
              var response  = transport.responseText;
              $('cocreatorvars').down('tbody').insert(response);
              response.evalScripts();
              SW.COCREATOR.setObservers();
                if( $$('table.cocreatorvars tr').size() >= (maxvalues+1))
                {
                    $$('.btAddRow').each(function(v){v.className='btDelete2';});
                }
            },
              onFailure: function()
              {
              }
            });
       }
    },

    addDropdownInput: function(element, variable)
    {
        var container = $(element).up().up();
        if($(element).hasClassName('btDelete'))
        {
            $(element).up().previous().remove();
            $(element).up().remove();
            if(container.select('.drvalues').size() < 20 && container.select('.btAddVal').size() == 0)
            {
                var pos =   container.select('.btDelete').size()-1;
                container.select('.btDelete')[pos].className='btAddVal';
            }
        } else {
          var html = "<div style=\"float:left;\"><input class='drvalues' name='variables[" + variable + "][drvalues][" + Math.floor((Math.random()*1001)) + "]'></div>"
                   + "<div style=\"float:left;\"><a class='btAddVal' onclick='SW.MODEL.addDropdownInput(this,\"" + variable + "\")'><span class=\"rdadd\">+ Add</span></a></div>";

          $(element).className = 'btDelete';
          container.insert(html);
          if(container.select('.drvalues').size() >= 20)
          {
            container.select('.btAddVal').each(function(v){v.className='btDelete';});
          }
        }
    },

    addRadioInput: function(element, variable)
    {
        var container = $(element).up().up();
        if($(element).hasClassName('btDelete'))
        {
           $(element).up().previous().remove();
           $(element).up().remove();
            if(container.select('.rdvalues').size() < 20 && container.select('.btAddVal').size() == 0)
            {
                var pos =   container.select('.btDelete').size()-1;
                container.select('.btDelete')[pos].className='btAddVal';
            }
        } else {
          var id = Math.floor((Math.random()*1001));
          var html = "<div style=\"float:left;\"><input type='radio' value=" + id + " name='variables[" + variable + "][rdvaluesRadio]' class='rdvaluesRadio'><input class='rdvalues' name='variables[" + variable + "][rdvalues][" + id + "]'></div>"
                   + "<div style=\"float:left;\"><a class='btAddVal' onclick='SW.MODEL.addRadioInput(this,\"" + variable + "\")'><span class=\"rdadd\">+ Add</span></a></div>";

          $(element).className = 'btDelete';
          container.insert(html);
          if(container.select('.rdvalues').size() >= 20)
          {
            container.select('.btAddVal').each(function(v){v.className='btDelete';});
          }
        }
    },

    get3DPart: function(model_id)
    {
      if($("formats").value != "")
      {
        url = "/modules/udesign/utils/open3dpart.php?id="+model_id+"&f="+$("formats").value;
       location.href=url;
      }
      else
      {
        alert('Please select file type to download.');
      }
    },

    showInfo: function(text)
    {
      win = new Window('id23456',{});
      win.getContent().innerHTML = text;
      win.show();
    },

    deleteModel: function(url)
    {
     if (confirm("Are you sure?\nAfter deleting a model you will not be able to retrieve it."))
     {
       location.href= url;
     }
    },

    /**
     * Saves a country to the user settings and then reloads the page
     *
     * @param url
     */
    saveCountry: function(url) {
        var value = $('countryOrder').value;
        if (value != undefined && value != '') {
            new Ajax.Request('?uri=/udesign/profile/setBillingCountry', {
                parameters: {'country':value},
                onSuccess: function(ts)
                {
                    location.reload();
                }
            });
        }
    },

    /**
     * Set all necessary extra observers to the country select
     */
    setCountryObservers: function ()
    {
        var countryOrderEdit = $('countryOrderEdit');
        var countryOrderDropDown = $('countryOrderDropDown');
        var countryOrder = $('countryOrder');
        var countryOrderName = $('countryOrderName');
        var countrySpan = $('countrySpan');

        var queue = Effect.Queues.get('global');
        queue.invoke('cancel');
        if (countryOrder != undefined) {
            countryOrder.observe('change', function (e) {
                SW.MODEL.closeDrop();
                SW.MODEL.saveCountry(e);
            })
        }

        if (countryOrderName != undefined) {
            document.body.observe('click', function(e) {
                if (!$('countryOrderDropDown').visible()) {
//                    return;
                }

                var found = false;
                e.element().ancestors().each(function (el) {
                    if (el.hasClassName('countryOrderContainer')) {
                        found = true;
                        throw $break;
                    }
                });

                if (!found) {
                    SW.MODEL.closeDrop();
                }
            });
        }

        //javascript code to grow shrink the country select
        if (countryOrderEdit != undefined) {
            countryOrderEdit.observe('click', function(e) {
                if (!countryOrderEdit.hasClassName('countryOrderdisabled')) {
                    countryOrderDropDown.hide();
                    new Effect.Morph('countryOrderEdit', {
                        style: 'margin-left: -128px; width: 215px;',
                        afterFinish: function() {
                            $('countryOrderDropDown').show();
                            $('countrySpan').show();
                        }
                    });
                }
            });
        }
    },

    /**
     * Close the country dropdown and hide all nessesary fields
     */
    closeDrop: function()
    {
        var countryOrderDropDown = $('countryOrderDropDown');
        var countrySpan = $$('.countryOrderEdit .countrySpan').first();
        var countryOrderEdit = $('countryOrderEdit');
        var countryOrderName = $('countryOrderName');

        var queue = Effect.Queues.get('global');
        queue.invoke('cancel');
        countryOrderDropDown.hide();
        countryOrderEdit.morph('margin-left: 0px; width: 36px;');
        countrySpan.hide();
        countryOrderName.blur();
    },

    submit_comment: function (form_id, url)
    {
      if (isDisabled('comment_button')) return false;
        new Ajax.Updater('modelDetailComments', url, {
            method: 'post',
            parameters: $(form_id).serialize(true),
            evalScripts: true
        });
      return true;
    },

    markCommentInappropriate: function(url, comment, page)
    {
        new Ajax.Request(url,
          {
            method: 'post',
            parameters:{'comment': comment ,'page':page},
            evalScripts: true,
            onSuccess: function(ts) {
                ts.responseText.evalScripts();
            },
            onFailure: function(ts) {
                ts.responseText.evalScripts();
            }
          });
    }
};


