window.log=function(){log.history=log.history||[];log.history.push(arguments);if(this.console){console.log(Array.prototype.slice.call(arguments))}};

jQuery(document).ready(function($) {
	removeParam('sc_msg');
	removeParam('sc_error');
	window.sc_wpcontent_l_pad = $('#wpcontent').css('padding-left');
	window.sc_wpadminbar_zindex = $('#wpadminbar').css('z-index');

	if ( typeof $('#sandcage-conf').html() !== "undefined" ) {
		window.sandcage_conf = $('#sandcage-conf');
		if ( typeof window.sandcage_conf.attr('data-src') !== "undefined" ) {

			try {
				$('#add_media_from_sandcage').off('click');
				$('#add_media_from_sandcage').on('click', function(){
					addMediaFromSandCage()
				});
			}
			catch(e) {
				$('#add_media_from_sandcage').unbind('click');
				$('#add_media_from_sandcage').bind('click', function(){
					addMediaFromSandCage()
				});
			}

		} else {
			window.log('on the media page');
			setTimeout(function(){
				adminStyling();
				resizeIFrame();
				$(window).resize(resizeIFrame);
			}, 1);
		}
	} else if ( typeof $('#sandcage-media-library-list').html() !== "undefined" ) {
		setTimeout(function(){
			checkForPendingFiles();
		}, 1000);
	}

	function addMediaFromSandCage() {
		if ($('#sandcage-asset-frame').length == 0) {
			var p = '<div id="sandcage-asset-frame-wrapper">' + 
				'<iframe name="sandcage-asset-frame" id="sandcage-asset-frame" src="' +
					window.sandcage_conf.data("src") +
					'" style="width:100%"></iframe>' +
				'</div>';
			$(p).appendTo($('#wpbody-content'));
		}else{
			adminStyling();
		}
		$('.sandcage_message').html('');
		resizeIFrame();
		$('#sandcage-asset-frame-wrapper').show();
		return false;
	}

	function checkForPendingFiles() {
		var pending_files = [];
		$( ".pending-processing-on-sandcage" ).each(function( index ) {
			pending_files.push( $(this).data("attachment-id") );
		});

		if ( pending_files.length > 0 ) {
			$.ajax({
				type: "POST",
				url: $('#sandcage-media-library-list').data("admin-ajax"),
				data: {
					action: 'add_media_from_sandcage',
					ids: pending_files.join()
				},
				cache:false,
				success:function(h){
					if ((typeof h.status !== "undefined") && (h.status == 'success')) {
						if (h.ids.length > 0) {
							var complete_files = [];
							for (var i= h.ids.length; i-->0;) {
								if ( !h.ids[i].pending ) {
									complete_files.push( h.ids[i].id );
									for (var d= pending_files.length; d-->0;) {
										if ( h.ids[i].id == pending_files[d] ) {
											pending_files.splice(d, 1);
											break;
										}
									}
								}
							}
							if ( complete_files.length > 0 ) {
								for (var i= complete_files.length; i-->0;) {
									$('#attachment-' + complete_files[i] + '>span').html('On SandCage');
									$('#attachment-' + complete_files[i] + '>img').removeClass('pending-processing-on-sandcage');
								}
							}
							if ( pending_files.length > 0 ) {
								setTimeout(function(){
									checkForPendingFiles();
								}, 10000);
							}
						}
					} else {
						setTimeout(function(){
							checkForPendingFiles();
						}, 30000);
					}
				},
				error:function(){
					setTimeout(function(){
						checkForPendingFiles();
					}, 15000);
				}
			});
		}

	}

	function hideSandCageIFrame() {
		$('#sandcage-asset-frame-wrapper').hide();
		$('#wpcontent').css('padding-left', window.sc_wpcontent_l_pad);
		$('#wpadminbar').css('z-index', window.sc_wpadminbar_zindex);
	}

	function adminStyling() {
		$('#wpcontent').css('padding-left', '0');
		$('#wpadminbar').css('z-index', '100102');
	}    

	function resizeIFrame(height) {
		var f_height = 0;
		var wpwrap = $('#wpwrap').size() > 0 ? $('#wpwrap').outerHeight(true) : 0;
		var footer = $('#footer').size() > 0 ? $('#footer').outerHeight(true) : $('#wpfooter').outerHeight(true);
		if (!$('#wpfooter').is(":visible")) {
			footer = 0;
		}
		var f_height = wpwrap - footer;
		if (f_height < 150) {
			f_height = 150;
		}
		$('#wpbody').css('height', f_height).css('overflow', 'hidden');
		$('#sandcage-asset-frame').css('height', f_height);  
	}

		
	function addMediaFromSC(h) {
		var attr = {
			src: h.src
		};
		if ((typeof h.w !== "undefined") && !!h.w){
			attr.width = h.w;
		}
		if ((typeof h.h !== "undefined") && !!h.h){
			attr.height = h.h;
		}
		if ((typeof h.title !== "undefined") && !!h.title){
			attr.title = h.title;
		}
		if ((typeof h.alt !== "undefined") && !!h.alt){
			attr.alt = h.alt;
		}
		var image = $('<img/>').attr(attr);
		var data = {
			action: 'add_media_from_sandcage',
			src: h.src,
			sandcage_file_token: h.file_id,
			w: h.w,
			h: h.h,
			mime: h.mime,
			name: h.title,
			post_id: $('#post_ID').val()
		};

		if (foundTinyMCEActiveEditorSelection()) {
			var html = tinyMCE.activeEditor.selection.getContent({format:'html'});
			var match = html.match(/wp-image-(\d+)/);
			if (match) {
				data.attachment_id = match[1];
			}
		}

		$.ajax({
			type: "POST",
			url: window.sandcage_conf.data("admin-ajax"),
			data: data,
			cache:false,
			success:function(h){
				window.log(h);
				if ((typeof h.status !== "undefined") && (h.status == 'success')) {
					image.addClass('wp-image-' + h.attachment_id).addClass('alignnone').addClass('size-full').attr('alt', data.name).attr('data-mce-src', data.src);
				} else {
					alert(h.message);
					if (data.attachment_id) {
						image.addClass('wp-image-' + data.attachment_id);
					}
				}
				image = $('<a/>').attr('href', data.src).attr('title', data.name).attr('data-mce-href', data.src).append(image);
				if (foundTinyMCEActiveEditorSelection()) {
					tinyMCE.activeEditor.selection.setContent($('<div/>').append(image).html()); 
				} else {
					send_to_editor($('<div/>').append(image).html());  
				}
			},
			error:function(){
				alert('An error occurred while adding the file.');
			}
		});
	}

	function foundTinyMCEActiveEditorSelection() {
		if (
				(typeof tinyMCE !== "undefined") && (typeof tinyMCE.activeEditor !== "undefined") && (typeof tinyMCE.activeEditor.selection !== "undefined") && 
				tinyMCE && tinyMCE.activeEditor && tinyMCE.activeEditor.selection
			) {
			return true;
		} else {
			return false;
		}
	}

	function removeParam(parameter) {
		var url=document.location.href;
		var urlparts= url.split('?');

		if (urlparts.length>=2) {
			var urlBase=urlparts.shift(); 
			var queryString=urlparts.join("?"); 

			var prefix = encodeURIComponent(parameter)+'=';
			var pars = queryString.split(/[&;]/g);
			for (var i= pars.length; i-->0;) {
				if (pars[i].lastIndexOf(prefix, 0)!==-1) {
					pars.splice(i, 1);
				}
			}
			url = urlBase+'?'+pars.join('&');
			window.history.pushState('',document.title,url); // added this line to push the new url directly to url bar.
		}
		return url;
	}

	function listenMessage(msg) {
		if (msg) {
			if (msg.data && msg.data.action) {
				if (msg.data.action == 'close_frame') {
					hideSandCageIFrame(window.sc_wpcontent_l_pad);
				} else if (msg.data.action == 'sandcage_frame_loaded') {
					adminStyling();
				} else if ((msg.data.action == 'add_img_to_wp_post') && !!msg.data.info) {
					addMediaFromSC(msg.data.info);
					hideSandCageIFrame();
				}
			}
			window.log(msg);
		}
	}

	if (window.addEventListener) {
		window.addEventListener("message", listenMessage, false);
	} else {
		window.attachEvent("onmessage", listenMessage);
	}
});