window.onload = function () {
  'use strict';

  var Cropper = window.Cropper;
  var URL = window.URL || window.webkitURL;
  var container = document.querySelector('.img-container');
  var image = container.getElementsByTagName('img').item(0);
  var download = document.getElementById('download');
  var actions = document.getElementById('actions');
  var dataX = document.getElementById('dataX');
  var dataY = document.getElementById('dataY');
  var dataHeight = document.getElementById('dataHeight');
  var dataWidth = document.getElementById('dataWidth');
  var dataRotate = document.getElementById('dataRotate');
  var dataScaleX = document.getElementById('dataScaleX');
  var dataScaleY = document.getElementById('dataScaleY');

  var dataX_text = document.getElementById('dataX_text');
  var dataY_text = document.getElementById('dataY_text');
  var dataHeight_text = document.getElementById('dataHeight_text');
  var dataWidth_text = document.getElementById('dataWidth_text');
  var dataRotate_text = document.getElementById('dataRotate_text');
  var dataScaleX_text = document.getElementById('dataScaleX_text');
  var dataScaleY_text = document.getElementById('dataScaleY_text');

  var options = {
    aspectRatio: aspectRatioValue,
    preview: '.img-preview',
    ready: function (e) {
      //console.log(e.type);
      var param = $('#param').val();
      if (param) {
        param = param.split('_');
        param[0] = parseFloat(param[0]);
        param[1] = parseFloat(param[1]);
        param[2] = parseFloat(param[2]);
        param[3] = parseFloat(param[3]);
        param[4] = parseFloat(param[4]);
        param[5] = parseFloat(param[5]);
        param[6] = parseFloat(param[6]);
        cropper.setData({"x":param[0],"y":param[1],"width":param[3],"height":param[2],"rotate":param[4],"scaleX":param[5],"scaleY":param[6]});
      }
    },
    cropstart: function (e) {
      //console.log(e.type, e.detail.action);
    },
    cropmove: function (e) {
      //console.log(e.type, e.detail.action);
    },
    cropend: function (e) {
      //console.log(e.type, e.detail.action);
    },
    crop: function (e) {
      var data = e.detail;

      //console.log(e.type);
      dataX.value = Math.round(data.x);
      dataY.value = Math.round(data.y);
      dataHeight.value = Math.round(data.height);
      dataWidth.value = Math.round(data.width);
      dataRotate.value = typeof data.rotate !== 'undefined' ? data.rotate : '';
      dataScaleX.value = typeof data.scaleX !== 'undefined' ? data.scaleX : '';
      dataScaleY.value = typeof data.scaleY !== 'undefined' ? data.scaleY : '';

      dataX_text.innerHTML = dataX.value;
      dataY_text.innerHTML = dataY.value;
      dataHeight_text.innerHTML = dataHeight.value;
      dataWidth_text.innerHTML = dataWidth.value;
      dataRotate_text.innerHTML = dataRotate.value;
      dataScaleX_text.innerHTML = dataScaleX.value;
      dataScaleY_text.innerHTML = dataScaleY.value;
    },
    zoom: function (e) {
      //console.log(e.type, e.detail.ratio);
    }
  };

  var cropper = new Cropper(image, options);
  var originalImageURL = image.src;
  var uploadedImageType = 'image/jpeg';
  var uploadedImageName = 'cropped.jpg';
  var uploadedImageURL;

  // Tooltip
  $('[data-toggle="tooltip"]').tooltip();

  // Buttons
  if (!document.createElement('canvas').getContext) {
    $('button[data-method="getCroppedCanvas"]').prop('disabled', true);
  }

  if (typeof document.createElement('cropper').style.transition === 'undefined') {
    $('button[data-method="rotate"]').prop('disabled', true);
    $('button[data-method="scale"]').prop('disabled', true);
  }

  // Download
  if (typeof download.download === 'undefined') {
    download.className += ' disabled';
    download.title = 'Your browser does not support download';
  }

  function aspectRatio(value)
  {
      if (!cropper) {
        return;
      }
      options.aspectRatio = value;
      // Restart
      cropper.destroy();
      cropper = new Cropper(image, options);
  }

  // Methods
  actions.querySelector('.docs-buttons').onclick = function (event) {
    var e = event || window.event;
    var target = e.target || e.srcElement;
    var cropped;
    var result;
    var input;
    var data;

    if (!cropper) {
      return;
    }

    while (target !== this) {
      if (target.getAttribute('data-method')) {
        break;
      }

      target = target.parentNode;
    }

    if (target === this || target.disabled || target.className.indexOf('disabled') > -1) {
      return;
    }

    data = {
      method: target.getAttribute('data-method'),
      value: target.getAttribute('data-value'),
      target: target.getAttribute('data-target'),
      option: target.getAttribute('data-option') || undefined,
      secondOption: target.getAttribute('data-second-option') || undefined
    };

    cropped = cropper.cropped;

    if (data.method) {
      if (data.method == 'save') {
        var option = {};
        option.param_x = dataX.value;
        option.param_y = dataY.value;
        option.param_h = dataHeight.value;
        option.param_w = dataWidth.value;
        option.param_r = dataRotate.value;
        option.param_sx = dataScaleX.value;
        option.param_sy = dataScaleY.value;
        option.pic = $('.img-container img').attr('src');

        var cas = cropper.getCroppedCanvas({ maxWidth: 4096, maxHeight: 4096 })
        option.img = cas.toDataURL('image/jpeg');//生成base64图片的格式

        /*
        cas.toBlob(function (e) {
            console.log(e);  //生成Blob的图片格式
        })
        */
        option.id = $('#id').val();
        option.group_id = $('#group_id').val();
        option.user_id = $('#user_id').val();
        option.name = $('#name').val();
        option.type = $('#type').val();
        var url = config.host;
        $.post(url, option, function(t)
        {
            if (typeof t != 'object') {
              var t = eval('(' + t + ')');
            }
            t = t.data
            
            var pic = t.url;
            var info = '';
            if (t.width) {
              info = t.width + '_' + t.height + '_' +t.size + '_' + t.fid;
            }
            var state = $('#state').val();
            //window.parent.picSet(pic, state, info);
            window.parent.postMessage({action: 'picSet', pic:pic, name:option.name, type:option.type}, '*')
        })
        return;
      } else if (data.method == 'del') {
        var state = $('#state').val();
        window.parent.picDel(state);
        return;
      } else if (typeof data.target !== 'undefined') {
        input = document.querySelector(data.target);

        if (!target.hasAttribute('data-option') && data.target && input) {
          try {
            data.option = JSON.parse(input.value);
          } catch (e) {
            console.log(e.message);
          }
        }
      }

      switch (data.method) {
        case 'rotate':
          if (cropped && options.viewMode > 0) {
            cropper.clear();
          }

          break;

        case 'getCroppedCanvas':
          try {
            data.option = JSON.parse(data.option);
          } catch (e) {
            console.log(e.message);
          }

          if (uploadedImageType === 'image/jpeg') {
            if (!data.option) {
              data.option = {};
            }

            data.option.fillColor = '#fff';
          }

          break;
      }

      if (data.method != 'aspectRatio') {
        result = cropper[data.method](data.option, data.secondOption);
      }
      

      switch (data.method) {

        case 'aspectRatio':
          cropper.destroy();
          if (data.value.indexOf(':') == -1) {
            options.aspectRatio = data.value;
          } else {
            var tmp = data.value.split(':');
            options.aspectRatio = tmp[0]/tmp[1];
          }
          cropper = new Cropper(image, options);

          break;

        case 'rotate':
          if (cropped && options.viewMode > 0) {
            cropper.crop();
          }

          break;

        case 'scaleX':
        case 'scaleY':
          target.setAttribute('data-option', -data.option);
          break;

        case 'getCroppedCanvas':
          if (result) {
            // Bootstrap's Modal
            $('#getCroppedCanvasModal').modal().find('.modal-body').html(result);

            if (!download.disabled) {
              download.download = uploadedImageName;
              download.href = result.toDataURL(uploadedImageType);
            }
          }

          break;

        case 'destroy':
          cropper = null;

          if (uploadedImageURL) {
            URL.revokeObjectURL(uploadedImageURL);
            uploadedImageURL = '';
            image.src = originalImageURL;
          }

          break;
      }

      if (typeof result === 'object' && result !== cropper && input) {
        try {
          input.value = JSON.stringify(result);
        } catch (e) {
          console.log(e.message);
        }
      }
    }
  };

  document.body.onkeydown = function (event) {
    var e = event || window.event;

    if (e.target !== this || !cropper || this.scrollTop > 300) {
      return;
    }

    switch (e.keyCode) {
      case 37:
        e.preventDefault();
        cropper.move(-1, 0);
        break;

      case 38:
        e.preventDefault();
        cropper.move(0, -1);
        break;

      case 39:
        e.preventDefault();
        cropper.move(1, 0);
        break;

      case 40:
        e.preventDefault();
        cropper.move(0, 1);
        break;
    }
  };

  // Import image
  var inputImage = document.getElementById('inputImage');

  if (URL) {
    inputImage.onchange = function () {
      var files = this.files;
      var file;

      if (cropper && files && files.length) {
        file = files[0];

        if (/^image\/\w+/.test(file.type)) {
          uploadedImageType = file.type;
          uploadedImageName = file.name;

          if (uploadedImageURL) {
            URL.revokeObjectURL(uploadedImageURL);
          }

          image.src = uploadedImageURL = URL.createObjectURL(file);
          cropper.destroy();
          cropper = new Cropper(image, options);
          inputImage.value = null;
        } else {
          window.alert('Please choose an image file.');
        }
      }
    };
  } else {
    inputImage.disabled = true;
    inputImage.parentNode.className += ' disabled';
  }
};
