//used functions
function addLoadEvent(func) { // adds a function to be executed on page load
	//credit goes to Simon Willison (http://simonwillison.net/2004/May/26/addLoadEvent/)
	var oldonload = window.onload;
	if (typeof window.onload != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			if (oldonload) {oldonload();}
			func();
		}
	}
}

//custom list object
function customlist(divid) {
	this.div=document.getElementById(divid);
	if (!this.div) {return null;}
	this.items=[];
	this.selected=-1;
	
	this.render=function() {
		this.div.innerHTML='';
		var tmpdiv;var alternate=false;
		for (var i=0;i<this.items.length;i++) {
			tmpdiv=document.createElement('div');
			if (alternate) {tmpdiv.className='alternative';}
			if (this.selected==i) {tmpdiv.style.backgroundColor='#81b2c2';}
			tmpdiv.style.overflow='hidden';
			tmpdiv.innerHTML='<div class="noselect"></div>'+this.items[i].innerHTML;
			tmpdiv.onclick=this.onclick;
			tmpdiv.ondblclick=this.ondblclick;
			tmpdiv.list_index=i;
			tmpdiv.oldthis=this;
			if (this.items[i].handledblclk) {tmpdiv.handledblclk=this.items[i].handledblclk;}
			this.items[i].div=tmpdiv;
			this.div.appendChild(tmpdiv);
			alternate=!alternate;
		}
		if (this.items.length<1) {
			this.div.innerHTML='<div style="color:#666;padding:3px;background:#f5f5f5;">[empty]</div>';
		}
	}
	this.onclick=function(e) {
		var targ;
		if (!e) var e = window.event;
		//if (e.target) targ = e.target;
		//else if (e.srcElement) targ = e.srcElement;
		//if (targ.nodeType == 3) targ = targ.parentNode;
		targ=this;
		targ.oldthis.selected=targ.list_index;
		for (var i=0;i<targ.oldthis.items.length;i++) {
			targ.oldthis.items[i].div.style.backgroundColor='';
		}
		targ.style.backgroundColor='#81b2c2';
	}
	this.ondblclick=function(e) {
		var targ;
		if (!e) var e = window.event;
		//if (e.target) targ = e.target;
		//else if (e.srcElement) targ = e.srcElement;
		//if (targ.nodeType == 3) targ=targ.parentNode;
		targ=this;
		if (targ.handledblclk) {targ.handledblclk(targ);}
	}
	return this;
}

function glt_myhandledblclick(targ) {
	undoLevels[undoLevels.length]={
		type: 3,
		divParent: glt_myobjs.items[targ.list_index].mvdiv.parentNode,
		div: glt_myobjs.items[targ.list_index].mvdiv.parentNode.removeChild(glt_myobjs.items[targ.list_index].mvdiv),
		li: targ.list_index,
		item: glt_myobjs.items[targ.list_index],
		selection: glt_myobjs.selected
	}
	if (undoLevels.length>10) {undoLevels.splice(0,undoLevels.length-10);}
	
	glt_myobjs.items.splice(targ.list_index,1);
	if (glt_myobjs.selected<glt_myobjs.items.length) {}
	else if (glt_myobjs.selected>0) {glt_myobjs.selected--;}
	else {glt_myobjs.selected=-1;}
	glt_myobjs.render();
}

function glt_mvoclk(obj) {
	for (var i=0;i<glt_myobjs.items.length;i++) {
		if (glt_myobjs.items[i].mvdiv==obj) {
			glt_myobjs.selected=i;
		}
	}
	glt_myobjs.render();
}

function glt_handledblclick(targ) {
	var newdiv=document.createElement('div');
	newdiv.onmousedown=dragStart;
	newdiv.className='mvbox';
	newdiv.style.width=targ.oldthis.items[targ.oldthis.selected].imagew+"px";
	newdiv.style.height=targ.oldthis.items[targ.oldthis.selected].imageh+"px";
	if (window.isIE6) {
		newdiv.style.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='upload/objects/"+targ.oldthis.items[targ.oldthis.selected].id+'.'+targ.oldthis.items[targ.oldthis.selected].imageext+"')";
	} else {
		newdiv.style.backgroundImage='url(\'upload/objects/'+targ.oldthis.items[targ.oldthis.selected].id+'.'+targ.oldthis.items[targ.oldthis.selected].imageext+'\')';
	}
	document.getElementById('ret_code_img_div').appendChild(newdiv);
	
	glt_myobjs.items[glt_myobjs.items.length]={
		innerHTML: targ.oldthis.items[targ.oldthis.selected].innerHTML,
		handledblclk: glt_myhandledblclick,
		mvdiv:newdiv,
		id: targ.oldthis.items[targ.oldthis.selected].id
	};
	glt_myobjs.render();
	//undo
	undoLevels[undoLevels.length]={
		type: 2,
		item: glt_myobjs.items[glt_myobjs.items.length-1]
	}
	if (undoLevels.length>10) {undoLevels.splice(0,undoLevels.length-10);}
}

var glt_objlist=null;
var glt_myobjs=null;
addLoadEvent(function() {
	glt_objlist=new customlist('glt_objects');
	glt_myobjs=new customlist('glt_myobjects');
	if (!glt_myobjs.div) {return false;}
	glt_myobjs.render();
	glt_objlist.render();
	glt_myobjs.removeSelected=function () {
		if (this.selected<0) return;
		glt_myhandledblclick(this.items[this.selected].div);
	}
	glt_objlist.addSelected=function () {
		if (this.selected<0) return;
		glt_handledblclick(this.items[this.selected].div);
	}
	glt_fetchobjects(0);
});

function glt_fetchobjects(categid) {
	if (!glt_objlist) return;
	var aj_gltobj=new XHConn();
	aj_gltobj.connect('ajax_fetchobjects.php','GET','categ='+categid+'&nocache='+Date.parse(new Date()),
		function (xmlhttp) {
			eval('glt_objlist.items='+xmlhttp.responseText);
			glt_objlist.selected=-1;
			if (glt_objlist.items.length>0) glt_objlist.selected=0;
			glt_objlist.render();
		}
	);
}
function glt_resetmyobjs() {
	for (var i=0;i<glt_myobjs.items.length;i++) {
		glt_myobjs.items[i].mvdiv.parentNode.removeChild(glt_myobjs.items[i].mvdiv);
	}
	glt_myobjs.items=[];
	glt_myobjs.selected=-1;
	glt_myobjs.render();
	undoLevels=[];
}

function glt_saveimage() {
	var pvars='';
	var parr_left=[],parr_top=[],parr_id=[];
	for (var i=0;i<glt_myobjs.items.length;i++) {
		parr_left[parr_left.length]=encodeURIComponent(glt_myobjs.items[i].mvdiv.offsetLeft);
		parr_top[parr_top.length]=encodeURIComponent(glt_myobjs.items[i].mvdiv.offsetTop);
		parr_id[parr_id.length]=encodeURIComponent(glt_myobjs.items[i].id);
	}
	pvars='sleft='+parr_left.join(',')+'&'+
		'stop='+parr_top.join(',')+'&'+
		'sid='+parr_id.join(',')+'&iid='+image_id;
	var aj_svimg=new XHConn();
	aj_svimg.connect('ajax_saveimage.php','POST',pvars,
		function (xmlhttp) {
			if (xmlhttp.responseText=='ERR') {alert('An error has occured');return false;}
			glt_resetmyobjs();
			document.getElementById('ret_code_img').src=(document.getElementById('ret_code_img').src.replace(/\?.*$/,""))+'?nocache='+Date.parse(new Date());
			window.image_customized=true;
			text_saveimg=document.getElementById('text_saveimage');
			if (!text_saveimg.textfadeobj) {
				text_saveimg.parentNode.removeChild(text_saveimg);
				document.body.appendChild(text_saveimg);
				text_saveimg.style.left='50%';
				text_saveimg.style.marginLeft='-100px';
				text_saveimg.textfadeobj=new fadeBox(text_saveimg);
				text_saveimg.textfadeobj.center=false;
				text_saveimg.textfadeobj.centeron=document.getElementById('ret_code_img_div');
			}
			if (text_saveimg.textfadeobj.finished) {
				text_saveimg.style.top=Math.floor((document.body.clientHeight<document.documentElement.clientHeight?document.body.clientHeight:document.documentElement.clientHeight)/2+(document.body.scrollTop?document.body.scrollTop:document.documentElement.scrollTop)-10)+'px';
				text_saveimg.style.display='block';
				text_saveimg.textfadeobj.start();
			}
		}
	);
}

//movable DIVs (based on http://www.brainjar.com/dhtml/drag/demo.html)
var dragObj = new Object();
var undoLevels=[];

function dragStart(e, el) {
	if (!e) var e=window.event;
	if (!el) {
		if (e.target) dragObj.elNode=e.target;
		else if (e.srcElement) dragObj.elNode=e.srcElement;
		if (dragObj.elNode.nodeType == 3) dragObj.elNode=dragObj.elNode.parentNode;
	} else {dragObj.elNode=el;}
	glt_mvoclk(dragObj.elNode);
	if (e.pageX) {
		dragObj.cursorStartX = e.pageX;
		dragObj.cursorStartY = e.pageY;
	} else if (e.clientX) {
		if (document.documentElement && document.documentElement.scrollTop) {
			dragObj.cursorStartX = e.clientX + document.documentElement.scrollLeft;
			dragObj.cursorStartY = e.clientY + document.documentElement.scrollTop;
		} else {
			dragObj.cursorStartX = e.clientX + document.body.scrollLeft;
			dragObj.cursorStartY = e.clientY + document.body.scrollTop;
		}
	}
	dragObj.elStartLeft = dragObj.elNode.offsetLeft;
	dragObj.elStartTop = dragObj.elNode.offsetTop;
	//undo code
	undoLevels[undoLevels.length]={
		type:1,
		elNode: dragObj.elNode,
		elStartLeft: dragObj.elStartLeft,
		elStartTop: dragObj.elStartTop
	};
	if (undoLevels.length>10) {undoLevels.splice(0,undoLevels.length-10);}
	
	if (document.attachEvent) {
		document.attachEvent("onmousemove", dragGo);
		document.attachEvent("onmouseup", dragStop);
	} else if (document.addEventListener) {
		document.addEventListener("mousemove", dragGo, true);
		document.addEventListener("mouseup", dragStop, true);
	}
	e.cancelBubble = true;
	e.returnValue = false;
	if (e.preventDefault) e.preventDefault();
}
function dragGo(e) {
	if (!e) var e=window.event;
	var x, y;
	if (e.pageX || e.pageY) {
		x = e.pageX;
		y = e.pageY;
	} else if (e.clientX || e.clientY) {
		if (document.documentElement && document.documentElement.scrollTop) {
			x = e.clientX + document.documentElement.scrollLeft;
			y = e.clientY + document.documentElement.scrollTop;
		} else {
			x = e.clientX + document.body.scrollLeft;
			y = e.clientY + document.body.scrollTop;
		}
	}
	dragObj.elNode.style.left = (dragObj.elStartLeft+x-dragObj.cursorStartX)+"px";
	dragObj.elNode.style.top = (dragObj.elStartTop+y-dragObj.cursorStartY)+"px";
	e.cancelBubble = true;
	e.returnValue = false;
	if (e.preventDefault) e.preventDefault();
}
function dragStop(event) {
	if (document.detachEvent) {
		document.detachEvent("onmousemove", dragGo);
		document.detachEvent("onmouseup", dragStop);
	} else if (document.removeEventListener) {
		document.removeEventListener("mousemove", dragGo, true);
		document.removeEventListener("mouseup", dragStop, true);
	}
}
function doUndo() {
	if (undoLevels.length<1) {return false;}
	var undoObj=undoLevels[undoLevels.length-1];
	if (undoObj.type==1) {
		dragObj.elNode.style.left = undoObj.elStartLeft+"px";
		dragObj.elNode.style.top = undoObj.elStartTop+"px";
		undoObj.type=0;
	} else if(undoObj.type==2) {
		glt_myhandledblclick(undoObj.item.div);
		undoObj.type=0;
	} else if(undoObj.type==3) {
		undoObj.divParent.appendChild(undoObj.div);
		glt_myobjs.items.splice(undoObj.li,0,undoObj.item);
		glt_myobjs.selected=undoObj.selection;
		glt_myobjs.render();
	}
	undoLevels.splice(undoLevels.length-1,1);
}
