tiph.user.avatar = {};

function install_clip(dest, src, iw, ih, aw, ah, cw, ch) {
	dest.src = src;
	dest._zoomobj = {max:10, now:1, cleft:50, ctop:50};
	dest._zoomobj.width = iw;
	dest._zoomobj.height = ih;
	dest._zoomobj.min = Math.min(cw / iw, ch / ih);
	dest._zoomobj.cleft = aw / 2;
	dest._zoomobj.ctop = ah / 2;
	dest.style.left = (aw - iw) / 2 + "px";
	dest.style.top = (ah - ih) / 2 + "px";
	dest.style.width = iw + "px";
	dest.style.height = ih + "px";
}

function clip_mousedown(event, src, dest) {
	if (!dest._clipobj) dest._clipobj = {};
	dest._clipobj.down_x = event.clientX;
	dest._clipobj.down_y = event.clientY;
	dest._clipobj.img_x = parseInt(dest.style.left);
	if (!dest._clipobj.img_x) dest._clipobj.img_x = 0;
	dest._clipobj.img_y = parseInt(dest.style.top);
	if (!dest._clipobj.img_y) dest._clipobj.img_y = 0;
	_mousemove_listener = src;
}

function clip_mouseup(event, dest) {
	if (dest._clipobj) dest._clipobj = null;
	_mousemove_listener = null;
}

function clip_mousemove(event, dest) {
	if (!dest._clipobj) return;
	var left = dest._clipobj.img_x + event.clientX - dest._clipobj.down_x;
	var top = dest._clipobj.img_y + event.clientY - dest._clipobj.down_y;
	dest.style.left = left + "px";
	dest.style.top = top + "px";
	dest._zoomobj.cleft = left + parseInt(dest.clientWidth) / 2;
	dest._zoomobj.ctop = top + parseInt(dest.clientHeight) / 2;
}

function clip_zoom(dest, step, tracker, max) {
	if (step > 0 && dest._zoomobj.now == dest._zoomobj.max) return;
	if (step < 0 && dest._zoomobj.now == dest._zoomobj.min) return;
	if (dest._zoomobj.now > 1) {
		var level = parseInt((dest._zoomobj.now - 1) / (dest._zoomobj.max - 1) * 10 + 0.5);
		level += step;
		if (level < 0) level = 0;
		if (level > 10) level = 10;
		dest._zoomobj.now = (dest._zoomobj.max - 1) * level / 10 + 1;
	} else if (dest._zoomobj.now < 1) {
		var level = parseInt((dest._zoomobj.now - dest._zoomobj.min) / (1 - dest._zoomobj.min) * 10 + 0.5);
		level += step;
		if (level < 0) level = 0;
		if (level > 10) level = 10;
		dest._zoomobj.now = (1- dest._zoomobj.min) * level / 10 + dest._zoomobj.min;
	} else {
		var level = 0;
		if (step > 0) {
			level = 1;
			dest._zoomobj.now = (dest._zoomobj.max - 1) * level / 10 + 1;
		} else {
			level = 9;
			dest._zoomobj.now = (1- dest._zoomobj.min) * level / 10 + dest._zoomobj.min;
		}
	}
	zoom_image(dest);
	var left = 0;
	if (dest._zoomobj.now > 1) {
		left = max / 2 + (dest._zoomobj.now - 1) / (dest._zoomobj.max -1) * max / 2;
	} else {
		left = (dest._zoomobj.now - dest._zoomobj.min) / (1 - dest._zoomobj.min) * max / 2;
	}
	tracker.style.left = left + "px";
}

function zoom_image(dest) {
	var w = dest._zoomobj.width * dest._zoomobj.now;
	var h = dest._zoomobj.height * dest._zoomobj.now;
	dest.style.width = w + "px";
	dest.style.height = h + "px";
	dest.style.left = dest._zoomobj.cleft - w / 2 + "px";
	dest.style.top = dest._zoomobj.ctop - h / 2+ "px";
}

function clip_zoom_in(dest, tracker, max) {
	clip_zoom(dest, -1, tracker, max);
}
function clip_zoom_out(dest, tracker, max) {
	clip_zoom(dest, 1, tracker, max);
}

function clipzoom_mousedown(event, tracker, dest) {
	if (!tracker._moveobj) tracker._moveobj = {};
	tracker._moveobj.down_x = event.clientX;
	tracker._moveobj.x = parseInt(tracker.style.left);
	if (!tracker._moveobj.x) tracker._moveobj.x = 0;
	_mousemove_listener = tracker;
}

function clipzoom_mouseup(event, tracker, dest) {
	if (tracker._moveobj) tracker._moveobj = null;
	_mousemove_listener = null;
}

function clipzoom_mousemove(event, tracker, dest, max) {
	if (!tracker._moveobj) return;
	var left = tracker._moveobj.x + event.clientX - tracker._moveobj.down_x;
	if (left < 0) left = 0;
	if (left > max) left = max;
	if (parseInt(tracker.style.left) == left) return;
	tracker.style.left = left + "px";
	if (left > max / 2) {
		dest._zoomobj.now = (dest._zoomobj.max - 1) * ((left - max / 2) / (max / 2)) + 1;
	} else {
		dest._zoomobj.now = (1- dest._zoomobj.min) * (left / (max / 2)) + dest._zoomobj.min;
	}
	zoom_image(dest);
}

function clipzoom_barmousedown(event, bar, tracker, dest, max) {
	var target = event.srcElement || event.target;
	if (target != bar) return;
	var left = event.offsetX - parseInt(tracker.clientWidth) / 2;
	if (!left && left != 0) return;
	if (left < 0) left = 0;
	if (left > max) left = max;
	tracker.style.left = left + "px";
	if (left > max / 2) {
		dest._zoomobj.now = (dest._zoomobj.max - 1) * ((left - max / 2) / (max / 2)) + 1;
	} else {
		dest._zoomobj.now = (1- dest._zoomobj.min) * (left / (max / 2)) + dest._zoomobj.min;
	}
	zoom_image(dest);
}

