(function($) {
var admin_prefix = '';
if(location.pathname.match('/admin/') == '/admin/') {
  admin_prefix = '/admin';
}    
var video_has_approved_extension = function(filename, on_success, on_failure) {
    var m = filename.match(/.*\.(.+)$/);
    if (!m)
        {
            on_failure();
            return false;
        }
    var ext = m[1];
    $.getJSON(admin_prefix + '/xhr/video/approved_extensions/', {}, function(data) {
        for (var i=0; i<data.length; i++) {
            if (data[i] == ext.toLowerCase()) {
                try
                    {
                        file_name =m[0];
                        if (navigator.platform.toLowerCase().indexOf('win') != -1){
                            file_name= file_name.split('\\');
                        }else{
                            file_name= file_name.split('/');
                        }
                        file_name= file_name[file_name.length-1];
                        document.getElementById('video_filename').value = file_name;
                    }
                    catch (e) {}
                on_success();
                return;
            };
        };
        on_failure();
    });
};
	
$.fn.imgvideoupload = function(options) {
    var options = $.extend({
    	max_media_amount: 9
    }, options);
    
    var photo_form = $(this);
    var photo_file = $(this).find(':file');
    var video_form = $('#'+options.video_form);
    if (photo_form.length > 0) {
        if('is_scripted' in photo_form[0]) {
            return;
        }
        photo_form[0].is_scripted = true;
    }
    if(video_form.length < 1) {
        // hack for #18445 (for some reason <form></form> disappears, so restore it here
        video_form = $('<form action="/fileupload/video/" method="post" enctype="multipart/form-data"></form>');
        $('.video_customfield').wrap(video_form);
        video_form.append($('.video_customfield'));
    }
    var loaded_frames = {}, dims = {};
    $(['bigwidth', 'bigheight', 'width', 'height', 'mwidth', 'mheight']).each(function() {
    	dims[this] = photo_form.find('[name='+this+']').val();
   	});

	var get_video_count = function(){
	    var maindiv = photo_form.find('.photo__status');
	    return maindiv[0].sensiVideoCount;
	}
	var get_photo_count = function(){   
	    var maindiv = photo_form.find('.photo__status');
	    return maindiv[0].sensiPhotoCount;
	}
	var clear_input = function() {
	  try
	  {
	    if($.browser.msie){
	        //setting value doesn't work for ie - value is readonly
	        fi = photo_file[0];
	        fi2 = fi.cloneNode();
	        fi2.onchange = fi.onchange;
	        fi.parentNode.replaceChild(fi2, fi);
            photo_file = $(fi2);
	    }else{
	        photo_file.val('');
	    }
	  }
	  catch (e) {}
	};
	var video__start_callback = function() {
	  var max_video_count = parseInt(video_form.find('.max_video_count').val());
	  
	  var maindiv = photo_form.find('.photo__status');
	  
	  if(get_video_count() + get_photo_count() >= options.max_media_amount){
	      alert(MSG_video_limit_exceeded)
	      return false
	  }
	  photo_form.find('.kreciol').css('display', 'block');
	  return true
	};
	var video__complete_callback = function(response, defer)
	{
	  photo_form.find('.kreciol').css('display', 'none');
	  try
	  {
	    // hack
	    response = response.substring(response.indexOf('{'), response.lastIndexOf('}')+1)
	    var retdic = eval('('+response+')')
	  }
	  catch(err)
	  {
	    document.write(response)
	  }
	  
	  if (retdic['error'])
	  {
	    alert(retdic['error'])
	    return
	  }

          if (retdic['filename']=='undefined') {
            return
	  }
	  
	  var max_video_count = parseInt(video_form.find('.max_video_count').val());
	  
	  var maindiv = photo_form.find('.photo__status');
	  var objects_count = maindiv[0].sensiVideoCount;
	  
	  var maindiv = maindiv[0];
	  var urlfield = document.getElementById(options.video_hidden)
	  photo_file.val('');
	  append_id_name = retdic['video_id']+':'+retdic['filename']
	  while(append_id_name.indexOf(',') != -1) {
	    append_id_name = append_id_name.replace(',', '');
	  }
	  if(urlfield.value){
	    urlfield.value +=','+append_id_name
	  }
	  else if(retdic){
	    urlfield.value = append_id_name
	  }
      var i = objects_count;
      var idiv = document.createElement('li')
	  maindiv.appendChild(idiv)
	  maindiv.sensiVideoCount++;
      var append_img = function(imgsrc) {
          var img = document.createElement('img')
          img.style.cursor = 'default';
          img.src = imgsrc;          img.alt = retdic['filename'];
          img.id = 'image-' + retdic['filename'];
          img.onclick = function() { return false; };
          idiv.style.textAlign = 'center';
          var className = 'el' + i + ' '
          className += ( i % 2 ) ? 'odd' : 'even'
          if ( i )
          {
              if ( ( i % 3 ) == 0 ) className += ' modulo3'
              if ( ( i % 4 ) == 0 ) className += ' modulo4'
          }
          idiv.className = className
        
          idiv.appendChild(img)
          //var p = document.createElement('p');
          //p.appendChild(document.createTextNode('Uploaded:'+retdic['filename']));
          //p.style.textAlign = 'center';
          //idiv.appendChild(p);
          
          var rm = document.createElement('a')
          rm.appendChild(document.createTextNode('  '+MSG_remove))
          rm.className = 'video green remove';
          rm.href = '#image-' + retdic['filename'];
          rm.value = retdic['filename']
          rm.onclick = video__rm
          idiv.appendChild(rm);
      };
      if(defer) {
          var maindiv = photo_form.find('.photo__status');
          var mwidth = photo_form.find(".image_customfield :hidden[name='mwidth']").val();
          var mheight = photo_form.find(".image_customfield :hidden[name='mheight']").val();
          var dimension_key = mwidth + "x" + mheight;
          $.getJSON(admin_prefix + "/xhr/video/thumbnail/" + retdic['video_url'] + "/" + dimension_key + "/",
              function(data){
                append_img(data['thumbnail_url']);
              }
          );    
      } else {
          append_img(retdic['video_url']);
      }
      clear_input();
	   
	  if (document.file_upload_callback)
	    file_upload_callback();
	};
	var video__rm = function() {
	  var maindiv = photo_form.find('.photo__status')[0];
	  maindiv.removeChild(this.parentNode);
	  
	  var urls = document.getElementById(options.video_hidden).value.split(',')
	  var temp = this.value
	  var nurls=[]
	  for (var i=0; i < urls.length; i++){
	      var filename = urls[i].split(':')[1];
	      if (temp!=filename){
	          nurls.push(urls[i]);
	      }
	  }
	  document.getElementById(options.video_hidden).value = nurls.join(',')
	  
	  maindiv.sensiVideoCount--;
	  return false;
	};
    var photo__start_callback = function() {
	  var max_photo_count = parseInt(photo_form.find('.max_photo_count').val());
	  
	  var maindiv = photo_form.find('.photo__status');
	  var objects_count = maindiv[0].sensiPhotoCount;
	  
	  if (get_video_count()+get_photo_count() >= options.max_media_amount) {
	      alert(MSG_photo_limit_exceeded);
	      return false;
	  }
	  photo_form.find('.kreciol').css('display', 'block');
	  return true;
	}
	var photo__complete_callback = function(response) {
      photo_form.find('.kreciol').css('display', 'none');
      try {
        // hack
        response = response.substring(response.indexOf('{'), response.lastIndexOf('}')+1)
        var retdic = eval('('+response+')')
      } catch(err) {
        document.write(response)
      }
      
      if (retdic['error']) {
        alert(retdic['error'])
        return
      }
      var normal_dimension_key = dims.width+'x'+dims.height;
      var thumbnail_dimension_key = dims.mwidth+'x'+dims.mheight;
      var xcompare = function(a, b) {
          ap = a.split('x');
          bp = b.split('x');
          if(ap < bp) return -1;
          if(ap == bp) return 0;
          if(ap > bp) return 1;
      }
      if(retdic['version'] < 3) {
          var fileurls = retdic['fileurls'];
          var base_url = fileurls.original
          retdic['dimensions'].sort(xcompare);
          var thumbnail_url = base_url;
          var fallback = true;
          $(retdic['dimensions']).each(function() {
              if(fallback && this.split('x') >= [dims.mwidth, dims.mheight]) {
                  thumbnail_url = base_url + '-' + this + '.jpg';    
                  fallback = false;
              }
          });
      } else if(retdic['version'] == 3) {
          var fileurls = retdic['fileurls'];
          keys = [];
          for(key in fileurls) { keys.push(key); }
          keys.sort(xcompare)
          var thumbnail_url = null;
          var smaller = true;
          $(keys).each(function() {
              if(thumbnail_url===null || smaller) {
                  thumbnail_url = fileurls[this];
                  if(this.split('x') >= [dims.mwidth, dims.mheight]) {
                      smaller = false;
                  }
              }
          });
      }
      clear_input();
      var max_photo_count = parseInt(photo_form.find('.max_photo_count').val());
      
      var maindiv = photo_form.find('.photo__status');
      var objects_count = maindiv[0].sensiPhotoCount
        
      var maindiv = maindiv[0];
      var img = document.createElement('img');
      img.src = thumbnail_url;
      img.alt = retdic['filename']
      var idiv = document.createElement('li')
      var i = objects_count
      var className = 'el' + i + ' '
      className += ( i % 2 ) ? 'odd' : 'even'
      if ( i ) {
          if ( ( i % 3 ) == 0 ) className += ' modulo3'
          if ( ( i % 4 ) == 0 ) className += ' modulo4'
      }
      idiv.className = className
    
      var div = document.createElement('div')
      div.className = 'photo'
      div.retdic = retdic;
      //a.target = '_blank'
      div.id = 'image-' + retdic['filename'];
      div.appendChild(img)
      idiv.appendChild(div)
    
      var rm = document.createElement('a')
      rm.appendChild(document.createTextNode(MSG_remove))
      rm.className = 'photo green remove';
      rm.href = '#image-' + retdic['filename'];
      rm.onclick = photo__rm
      idiv.appendChild(rm)
      maindiv.appendChild(idiv)
      maindiv.sensiPhotoCount++
      recalculate_field_hidden();
    
      if (document.file_upload_callback) {
          file_upload_callback();
      }
    }

	var recalculate_field_hidden = function() {
	  var maindiv = photo_form.find('.photo__status');
	  var nurls = []
	  maindiv.children().children('div').each(function(){
	      if (this.retdic) {
	          nurls.push(this.retdic);
	      }
	    });
	  var field_hidden = $('#'+options.photo_hidden);
	  if (nurls.length > 0) {
	    field_hidden.val(JSON.stringify(nurls));
	  } else {
	    field_hidden.val('');
	  }
	}
    photo__rm = function() {
	  var maindiv = photo_form.find('.photo__status')[0];
	  maindiv.removeChild(this.parentNode);
	  recalculate_field_hidden(); 
	  maindiv.sensiPhotoCount--;
	  return false;
    }
    
	var failUpload = function(msg) {
	    photo_form.find('.kreciol').css('display', 'none');
	    alert(msg);
	}
	var checkIframeLoaded = function(n) {
	    if(!loaded_frames[n]) {
	        failUpload(MSG_timeout_exceeded);
	    }
	}
	var magic_form = function(form_elem, aim_data) {
		if(!aim_data) {
	       var aim_data = {'onStart': photo__start_callback,
	                       'onComplete': photo__complete_callback};
	    }
	    var c = aim_data;
	    
	    var n = AIM.frame(c);
	    AIM.form(form_elem, n);
	    oldComplete = $('#'+n)[0].onComplete; 
	    $('#'+n)[0].onComplete = function(content) {
	        loaded_frames[n] = true;
	        var i = document.getElementById(n);
	        if (i.contentDocument) {
	            var d = i.contentDocument;
	        } else if (i.contentWindow) {
	            var d = i.contentWindow.document;
	        } else {
	            var d = window.frames[id].document;
	        }
	        a = d.location.href.match("/413/?$");
	        if(a) {
	            a = a[0]
	            if(a.match("^/413") == "/413") {
	                failUpload(MSG_file_too_large);
	                return;
	            }
	        }       
	        oldComplete(content);
	    } 
	    window.setTimeout("checkIframeLoaded('"+n+"');", 100*1000);
	    return photo__start_callback();
	};    
    var photo_video__load = function() {
      photo_form.find('.photo.remove, .video.remove').parent().remove();
      var maindiv = photo_form.find('.photo__status');
      maindiv.each(function() { this.sensiPhotoCount = 0 });
      maindiv.each(function() { this.sensiVideoCount = 0 });
      
      var urls = [];
      var field_hidden = $('#'+options.photo_hidden);
      try {
          urls = JSON.parse(field_hidden.val());
      } catch (e) {
        // e.name = SyntaxError
        // it probably means empty value. Nothing to worry 'bout.
      }
      field_hidden.val('');
      for (var i=0; i < urls.length; ++i) {
        var pic = JSON.stringify(urls[i]);
        photo__complete_callback(pic);    
      }
      
      urls = document.getElementById(options.video_hidden).value.split(',');
      document.getElementById(options.video_hidden).value = '';
      if (urls[0])
      for (var i=0; i < urls.length; i++) { 
        videoF = urls[i].split(':');
        var pic = '{"video_id":"'+videoF[0]+'","'+'filename'+'":"'+videoF[1]+'","'+'video_url'+'":"'+videoF[0]+'"}';
        video__complete_callback(pic, true)
      }
	}
	$(document).ready(photo_video__load);
    $(document).ready(function() {
        var curType = '';
        var cancelled = {};
        if(('uploadify' in photo_file) && ('uploader_swf' in options)) {
            var params = {
                uploader: options.uploader_swf,
                cancelImg: options.uploader_cancel,
                sizeLimit: options.uploader_limit,
                script: photo_form.attr('action'),
                onSelect: function(e, q, f) {
                    if(f.size > options.uploader_limit) {
                        alert(MSG_filesize_limit_exceeded);
                        return false;
                    }
                    video_has_approved_extension(f.name, function() {
                        curType = 'video';
                        var scriptData = {};
                        $(video_form.serializeArray()).each(function() {
                            scriptData[this.name] = this.value;
                        });
                        photo_file.uploadifySettings('scriptData', scriptData);
                        photo_file.uploadifySettings('script', video_form.attr('action'))
                        if(!video__start_callback()) { 
                            photo_file.uploadifyClearQueue();
                            return;
                        }
                        photo_file.uploadifyUpload();
                    }, function() {
                        curType = 'photo';
                        var scriptData = {};
                        $(photo_form.serializeArray()).each(function() {
                            scriptData[this.name] = this.value;
                        });
                        photo_file.uploadifySettings('scriptData', scriptData);
                        photo_file.uploadifySettings('script', photo_form.attr('action'))
                        if(!photo__start_callback()) { 
                            photo_file.uploadifyClearQueue();
                            return;
                        }
                        photo_file.uploadifyUpload();
                    });
                },
                onCancel: function(e, q) {
                    cancelled[q] = true;
	                photo_form.find('.kreciol').css('display', 'none');
                    return true;
                },
                onComplete: function(e, q, f, response) {
                    if(q in cancelled) return true;
                    if(curType == 'photo') {
                        photo__complete_callback(response);
                    } else {
                        video__complete_callback(response);
                    }
                },
                onClick: function() {
                    photo_file.focus();
                }
            }
            if (options.uploader_img) {
                params = $.extend(params, {
                wmode: 'transparent',
                buttonImg: options.uploader_img,
                buttonText:'',
                width: options.uploader_img_size[0],
                height: options.uploader_img_size[1],
                rollover: true});
                }
            photo_file.uploadify(params);
        }
        photo_form.bind('popup_shown', photo_video__load);
    	photo_form.submit(function() { return magic_form(this); })
	    video_form.submit(function() {
	        return magic_form(this, {'onStart' : video__start_callback, 'onComplete' : video__complete_callback});
	    });
        $(photo_form.find(':file')).change(function() {
        	if(photo_form.find(':file').val()) {
                var success_f = function() {
                    var make_ie_happy = $('#'+photo_file.attr('id')); // using just photo_file.prependTo doesn't work correctly in IE...
                    make_ie_happy.prependTo(video_form.find('.video_customfield'));
                    video_form.submit();
                    make_ie_happy.prependTo(photo_form.find('.image_customfield'));
                };
                var failure_f = function() {
                	photo_form.submit();
                };
                video_has_approved_extension(photo_form.find(':file').val(), success_f, failure_f);
            }
        }).change();
    });
}})(jQuery);

