
var	_isRunning = false;
var _gifExecTout = null;
var currentFrame = 0;

function addFileField() {
var div = $('upfiles'), files = div.getElementsByTagName('input'),
    container = document.createElement('div'),
    fil = document.createElement('input'),
    a = document.createElement('a');
  for(var i = 0; i < files.length; i++) files[i].onchange = null;
container.className = 'container';
container.id = 'container'+files.length;
fil.type = 'file';
fil.name = fil.id = 'gif'+files.length;
  if(files.length < maxImgs - 1) fil.onchange = addFileField;
a.innerHTML = '[remover -]';
a.href = 'javascript://';
a.onclick = new Function('var e = $("container'+files.length+'"); e.parentNode.removeChild(e);');
container.appendChild(fil);
container.appendChild(document.createTextNode(' '));
container.appendChild(a);
div.appendChild(container);
}

function changeFrame(ref) { 
  if(/^\d+$/.test(ref) && ref >= 0 && ref < _images.length) setFrame(ref);
	else if(/^next|previous|first|last$/.test(ref)) {
	  switch(ref) {
		case "first": setFrame(0); break;
		case "previous": setFrame(currentFrame-1); break;
		case "next": setFrame(currentFrame+1); break;
		case "last": setFrame(_images.length-1); break;
		}
	}
}

function updateTime(ind) { _images[ind || currentFrame].timeout = $('time').value; }

function setFrame(ind) { 
ind = Number(ind); 
  if(ind >= _images.length) ind = _images.length - 1;
  else if(ind < 0) ind = 0;
currentFrame = ind; 
selectByVal($('time'), _images[ind].timeout, true);
imagePos(_images[ind].halign, _images[ind].valign); 
var tds = $('images').getElementsByTagName('td');
  for(var i = 0; i < tds.length; i++) removeClass(tds[i], 'selected');
addClass($('container_'+ind), 'selected');
$('images').scrollLeft = (mainWid + 10) * ind;
$('time_'+ind).appendChild($('thetime'));
$('framenum').innerHTML = Number(ind)+1;
initSliders(ind);
  if(!_isRunning) {
  disabelem('hsliderConts', _images[ind].hscroll);
  disabelem('vsliderConts', _images[ind].vscroll);
	}
setPreview(ind);
}

function setPreview(ind) {
$('preview').style.backgroundImage = 'url('+_images[ind].url+')';
$('preview').style.backgroundPosition = _images[ind].halign+' '+_images[ind].valign+'';
}

var _lps = 0;
function gifExec(onoff) {
  if(currentFrame >= _images.length) currentFrame = 0;
var b = $('butplay'), l = $('isloading');
var loops = parseInt($('loop').value) * _images.length;
  if(onoff) {
		if(loops > 0 && _lps >= loops) {
		gifExec(0);
		return;
		}
	  if(/static\./.test(l.src)) {
		l.src = l.src.replace(/static\./, 'loading.');
	  l.title = str_executing;
		}
	b.src = b.src.replace(/play\./, 'pause.');
	  if($('realpreview').checked) setFrame(currentFrame);
		else setPreview(currentFrame);
	_gifExecTout = setTimeout("gifExec("+onoff+");", 
	                          _images[currentFrame].timeout);
	currentFrame++; 
	_lps++;
	disabelem('images');
	disabelem('pall');
	disabelem('frameoptions');
	} else {
	clearTimeout(_gifExecTout);
	l.src = l.src.replace(/loading\./, 'static.');
	l.title = str_stopped;
	b.src = b.src.replace(/pause\./, 'play.');
	disabelem('images', true);
	disabelem('pall', true);
	disabelem('frameoptions', true);
	_lps = 0;
	}
}

function cloneFrame() {
var cloneVar = {};
  for(var i in _images[currentFrame]) cloneVar[i] = _images[currentFrame][i];
_images.splice(currentFrame, 0, cloneVar);
reconstruct();
setFrame(currentFrame+1);
}

function removeFrame() {
_images.splice(currentFrame, 1);
reconstruct();
setFrame(currentFrame);
}

function moveFrame(ref) {
var ind = ref == 'back' ? currentFrame - 1 : currentFrame + 1;
  if(ind >= _images.length) ind = _images.length - 1;
  if(ind < 0) ind = 0;
	if(ind == currentFrame) return;
var rem = _images.splice(currentFrame, 1);
_images.splice(ind, 0, rem[0]);
reconstruct();
setFrame(ind);
}

function reconstruct(indsel) {
var tr = $('images').getElementsByTagName('tr')[0];
document.body.appendChild($('thetime'));
  while(tr.firstChild) tr.removeChild(tr.firstChild);
	for(var i = 0; i < _images.length; i++) {
	var td = document.createElement('td');
	td.id = 'container_'+i;
	td.className = 'contimg';
		if(typeof indsel == 'number' && indsel == i) td.className += ' selected';
	var inh = '<div class="img " id="image_'+i+'" style="background-image:url('+_images[i].url+
						'); width:'+mainWid+'px; height:'+mainHei+'px;" onclick="setFrame(this.id.replace(/image_/, \'\'))"></div>\n'+
						'<div class="frametime" id="time_'+i+'"></div>';
	td.innerHTML = inh;
	tr.appendChild(td);
	}
}

function imagePos(x, y) { $('image_'+currentFrame).style.backgroundPosition = x+' '+y; }

function disabelem(id, off, col, opc) {
  if($(id+'_disabled')) document.body.removeChild($(id+'_disabled'));
	if(off) return;
  if(!col) col = '#FFFFFF';
	if(!opc) opc = 0.6;
var elem = $(id), div = document.createElement('div'), 
    pos = absPos(elem), w = elem.offsetWidth, h = elem.offsetHeight;
div.id = id+'_disabled';
div.style.cssText = 'position:absolute; top:'+pos.top+'px; left:'+pos.left+'px; width:'+w+'px; height:'+h+'px; '+
                    'background-color:'+col+'; filter:alpha(opacity='+(opc*100)+'); opacity:'+opc+';';
document.body.appendChild(div);
}

function setNewVal(e) {
	if(getKey(e) == 13) location.href = 'glittertext.php?txt='+encodeURIComponent($('txt').value);
}

function getKey(ev) {
ev = ev ? ev : window.event;
return ev.charCode ? ev.charCode : ev.keyCode;
}
	

function initSliders(id) { 
_vslide = new Control.Slider('vsliderHandle','vsliderTrack', { 
    axis:'horizontal', 
    range:$R(0,100), 
    sliderValue: /^[0-9]+$/.test(id) ? parseInt(_images[id].valign) : 0,
    onSlide: function(v) {
		_images[currentFrame].valign = Math.round(v)+'%'; 
		imagePos(_images[currentFrame].halign, _images[currentFrame].valign); 
		setPreview(currentFrame);
		$('vvalue').innerHTML = Math.round(v);
		}
  });
_hslide = new Control.Slider('hsliderHandle','hsliderTrack', { 
    axis:'horizontal', 
    range:$R(0,100), 
    sliderValue: /^[0-9]+$/.test(id) ? parseInt(_images[id].halign) : 0,
    onSlide: function(v) {
		_images[currentFrame].halign = Math.round(v)+'%'; 
		imagePos(_images[currentFrame].halign, _images[currentFrame].valign); 
		setPreview(currentFrame);
		$('hvalue').innerHTML = Math.round(v);
		}
  });
$('hvalue').innerHTML =  /^[0-9]+$/.test(id) ? parseInt(_images[id].halign) : 0;
$('vvalue').innerHTML =  /^[0-9]+$/.test(id) ? parseInt(_images[id].valign) : 0;
}
	
_resizeInitialized = false;
function initResize() { 
  if(_resizeInitialized) return;
var ratio = {'x': fixedRatio ? 1: 0, 'y': fixedRatio ? 1: 0};
var img = $('cropImage');
var coords = { x1: 0, y1: 0, x2: mainWid / 2, y2: mainHei / 2 };
_cropper = new Cropper.Img('cropImage', {'onEndCrop': onEndCrop, 'minWidth': 5, 'minHeight': 5, 
								'maxWidth': mainWid, 'maxHeight': mainHei, 'displayOnInit': true, 'onloadCoords': coords, 'ratioDim': ratio}); 
_resizeInitialized = true;
}

_dimensions = null;
function onEndCrop( coords, dimensions ) {
_dimensions = dimensions;
}

function setDimensions() {
	if(!_dimensions) return;
mainWid = _dimensions.width * 2;
mainHei = _dimensions.height * 2;
var imgs = getByClassName('img', 'div', $('images'));
imgs.push($('preview'));
  for(var i = 0; i < imgs.length; i++) {
	imgs[i].style.width = mainWid+'px';
	imgs[i].style.height = mainHei+'px';
	}
  for(var i = 0; i < _images.length; i++) {
	_images[i].vscroll = ((_images[i].height / 2) > _dimensions.height);
	_images[i].hscroll = ((_images[i].width / 2) > _dimensions.width);
	}
setFrame(currentFrame);
}

function editSize(elem) {
	if(elem.innerHTML == str_editimgsize) {
	$('crop').style.display = '';
	disabelem('images');
	disabelem('frameoptions');
	initResize();
	elem.innerHTML = str_editedok;
	} else {
	$('crop').style.display = 'none';
	disabelem('images', 1);
	disabelem('frameoptions', 1);
	//_cropper.reset();
	//_cropper.remove();
	//_cropper = null;
	setDimensions();
	elem.innerHTML = str_editimgsize;
	}
}

function sendData() {
var obj = {};
obj.gifsaction = 'makegif';
obj.mainWid = mainWid;
obj.mainHei = mainHei;
obj.loop = $('loop').value;
  for(var i = 0; i < _images.length; i++) {
	  for(var j in _images[i]) obj['image_'+i+'_'+j] = _images[i][j];
	}
makePostFromObject("anigif.php", obj);
}
