/* Copyright © 2008 Joris Landman. All rights reserved. http://jorislandman.com/ */

/* COOKIES
---------------- */
function joris_set_cookie(myname, myvalue, myexpiredays, mypath) {
	var myexpirationdate = new Date();
	myexpirationdate.setDate(myexpirationdate.getDate() + myexpiredays);
	document.cookie = myname + "=" +escape(myvalue) + ((myexpiredays == null) ? "" : "; expires=" + myexpirationdate.toGMTString() + "; path=" + mypath + ";");
}

/* UTILITIES
---------------- */
function joris_get_object(myobjectname) { // return cross browser object
	if (document.getElementById) {
		this.object = document.getElementById(myobjectname);
		this.style = document.getElementById(myobjectname).style;
	} else if (document.all) {
		this.object = document.all[myobjectname];
		this.style = document.all[myobjectname].style;
	} else if (document.layers) {
		this.object = document.layers[myobjectname];
		this.style = document.layers[myobjectname];
	} else {
		return false;
	}
}

function joris_mouse_coordinates(myevent) {
	// set up
	myevent = myevent || window.event;
	// get cross browser mouse coordinates
	if (myevent.pageX || myevent.pageY) {
		return {x: myevent.pageX, y: myevent.pageY};
	} else if (myevent.clientX || myevent.clientY) {
		return {x: myevent.clientX + document.body.scrollLeft + document.documentElement.scrollLeft - document.body.clientLeft, y: myevent.clientY + document.body.scrollTop + document.documentElement.scrollTop - document.body.clientTop};
	} else {
		return false;
	}
}
function joris_get_mouse_coordinates(myevent) {
	// set up
	myevent = myevent || window.event;
	// return mouse coordinates
	var mymousecoordinates = joris_mouse_coordinates(myevent);
	return mymousecoordinates;
}

function joris_element_coordinates(myobject) {
	// set up
	var myx = 0;
	var myy = 0;
	// get element coordinates
	if (myobject.offsetParent) {
		// recursive check for parents' coordinates
		do {
			myx += myobject.offsetLeft;
			myy += myobject.offsetTop;
		}
		while (myobject = myobject.offsetParent);
		return {x: myx, y: myy};
	}
}
function joris_get_element_coordinates(myobject) {
	// set up
	var myelementcoordinates = new joris_element_coordinates(myobject);
	// return element coordinates
	return myelementcoordinates;
}

function joris_element_dimensions(myobject) {
	// set up
	var mywidth = myobject.offsetWidth;
	var myheight = myobject.offsetHeight;
	// get element dimensions
	return {x: mywidth, y: myheight};
}
function joris_get_element_dimensions(myobject) {
	// set up
	var myelementdimensions = new joris_element_dimensions(myobject);
	// return element dimensions
	return myelementdimensions;
}

/* CENTER & OFFSET STUFF
---------------- */
function joris_center_envelope(mydivpassepartout, mydivenvelope, mywidth, myheight) {
	// set up
	var mypassepartout = new joris_get_object(mydivpassepartout);
	var myenvelope = new joris_get_object(mydivenvelope);
	// resize envelope
	myenvelope.style.width = mywidth + 'px';
	myenvelope.style.height = myheight + 'px';
	// get object info
	var mypassepartoutcoordinates = new joris_get_element_coordinates(mypassepartout.object);
	var mypassepartoutdimensions = new joris_get_element_dimensions(mypassepartout.object);
	// get new coordinates
	var mynewx = (mypassepartoutdimensions.x - mywidth) / 2;
	var mynewy = (mypassepartoutdimensions.y - myheight) / 2;
	// set new coordinates
	myenvelope.style.left = Math.round(mynewx) + 'px';
	myenvelope.style.top = Math.round(mynewy) + 'px';
}

function joris_offset_envelope(mydivpassepartout, mydivenvelope, mywidth, myheight, myoffsetx, myoffsety) {
	// set up
	var mypassepartout = new joris_get_object(mydivpassepartout);
	var myenvelope = new joris_get_object(mydivenvelope);
	// resize envelope
	myenvelope.style.width = mywidth + 'px';
	myenvelope.style.height = myheight + 'px';
	// get object info
	var mypassepartoutcoordinates = new joris_get_element_coordinates(mypassepartout.object);
	var mypassepartoutdimensions = new joris_get_element_dimensions(mypassepartout.object);
	var myenvelopedimensions = new joris_get_element_dimensions(myenvelope.object);
	var myenvelopecoordinates = new joris_get_element_coordinates(myenvelope.object);
	// get new coordinates
	var mynewx = myoffsetx;
	var mynewy = myoffsety;
	// set new coordinates
	myenvelope.style.left = Math.round(mynewx) + 'px';
	myenvelope.style.top = Math.round(mynewy) + 'px';
	// show/hide borders on left and right of slide, based on width of slide
	//if (mydivenvelope === 'slide-envelope') { // doesn't work properly
	//	var myslideimagecontainer = new joris_get_object('slide-image-container');
	//	if (mypassepartoutcoordinates.x - myenvelopecoordinates.x < 24) {
	//		myslideimagecontainer.style.borderLeftColor = '#dee !important';
	//	} else {
	//		myslideimagecontainer.style.borderLeftColor = '#dee !important';
	//	}
	//	if (myenvelopecoordinates.x + myenvelopedimensions.x < mypassepartoutcoordinates.x + mypassepartoutdimensions.x + 24 - 2) {
	//		myslideimagecontainer.style.borderRightColor = 'transparent !important';
	//	} else {
	//		myslideimagecontainer.style.borderRightColor = '#dee !important';
	//	}
	//}
}

function joris_offset_keywords(mydivenvelope, myblankpoint, myheight, myoffsetx, myoffsety) {
	// set up
	var mywidth = 0;
	var myenvelope = new joris_get_object(mydivenvelope);
	var myblankpoint = new joris_get_object(myblankpoint);
	// get object info
	var myenvelopecoordinates = new joris_get_element_coordinates(myenvelope.object);
	var myblankpointcoordinates = new joris_get_element_coordinates(myblankpoint.object);
	// get new dimensions
	mywidth = myblankpointcoordinates.x - myenvelopecoordinates.x;
	// resize envelope
	myenvelope.style.width = mywidth - myoffsetx + 'px';
	myenvelope.style.height = myheight + 'px';
	// get new coordinates
	var mynewx = myoffsetx;
	var mynewy = myoffsety;
	// set new coordinates
	myenvelope.style.left = Math.round(mynewx) + 'px';
}

/* HIDE & SHOW STUFF
---------------- */
function joris_hide_div(myid) {
	var myobject = new joris_get_object(myid);
	myobject.style.visibility = 'hidden';
	myobject.style.display = 'none';
}
function joris_show_div(myid) {
	var myobject = new joris_get_object(myid);
	myobject.style.visibility = 'visible';
	myobject.style.display = 'block';
}

function joris_change_slide(mydivpassepartout, mydivenvelope, mydivimg, myimguri, mywidth, myheight, mycaptionsdiv, mycaption) {
	// set up
	var mycaptioner = new joris_get_object(mycaptionsdiv);
	var myimage = new joris_get_object(mydivimg);
	// resize envelope
	joris_center_envelope(mydivpassepartout, mydivenvelope, mywidth, myheight);
	// change image
	myimage.object.src = myimguri;
	// change caption
	mycaptioner.object.innerHTML = '<p>' + mycaption + '<\/p>';
}

/* MOVE STUFF
---------------- */
function joris_move_picture(myevent) {
	// set up
	myevent = myevent || window.event;
	var mymousecoordinates = new joris_get_mouse_coordinates(myevent);
	// loop through envelopes
	for (n = 0; n < passepartouts.length; n++) {
		// set up
		var mypassepartoutname = passepartouts[n];
		var myenvelopename = envelopes[n];
		var mymovetype = movetypes[n];
		var mypassepartout = new joris_get_object(mypassepartoutname);
		var myenvelope = new joris_get_object(myenvelopename);
		// get object info
		var mypassepartoutcoordinates = new joris_get_element_coordinates(mypassepartout.object);
		var mypassepartoutdimensions = new joris_get_element_dimensions(mypassepartout.object);
		var myenvelopedimensions = new joris_get_element_dimensions(myenvelope.object);
		var myenvelopecoordinates = new joris_get_element_coordinates(myenvelope.object);
		// over mypassepartout?
		if (mymousecoordinates.x >= mypassepartoutcoordinates.x && mymousecoordinates.y >= mypassepartoutcoordinates.y && mymousecoordinates.x <= mypassepartoutcoordinates.x + mypassepartoutdimensions.x && mymousecoordinates.y <= mypassepartoutcoordinates.y + mypassepartoutdimensions.y) {
			// set up
			var mynewx = 0;
			var mynewy = 0;
			// get new coordinates
			if (mymovetype === 1) {
				// perspective follow
				mynewx = mymousecoordinates.x - mypassepartoutcoordinates.x - myenvelopedimensions.x + (myenvelopedimensions.x - (((mymousecoordinates.x - mypassepartoutcoordinates.x) / mypassepartoutdimensions.x) * myenvelopedimensions.x));
				mynewy = mymousecoordinates.y - mypassepartoutcoordinates.y - myenvelopedimensions.y + (myenvelopedimensions.y - (((mymousecoordinates.y - mypassepartoutcoordinates.y) / mypassepartoutdimensions.y) * myenvelopedimensions.y));
			} else if (mymovetype === 2) {
				// drag follow
				mynewx = mypassepartoutdimensions.x - mymousecoordinates.x + mypassepartoutcoordinates.x - (myenvelopedimensions.x - (((mymousecoordinates.x - mypassepartoutcoordinates.x) / mypassepartoutdimensions.x) * myenvelopedimensions.x));
				mynewy = mypassepartoutdimensions.y - mymousecoordinates.y + mypassepartoutcoordinates.y - (myenvelopedimensions.y - (((mymousecoordinates.y - mypassepartoutcoordinates.y) / mypassepartoutdimensions.y) * myenvelopedimensions.y));
			}
			// set new coordinates
			myenvelope.style.left = Math.round(mynewx) + 'px';
			myenvelope.style.top = Math.round(mynewy) + 'px';
			// show/hide borders on left and right of slide, based on width of slide
			//if (myenvelopename === 'slide-envelope') { // doesn't work properly
			//	var myslideimagecontainer = new joris_get_object('slide-image-container');
			//	if (mypassepartoutcoordinates.x - myenvelopecoordinates.x < 24) {
			//		myslideimagecontainer.style.borderLeftColor = 'transparent !important';
			//	} else {
			//		myslideimagecontainer.style.borderLeftColor = '#dee !important';
			//	}
			//	if (myenvelopecoordinates.x + myenvelopedimensions.x < mypassepartoutcoordinates.x + mypassepartoutdimensions.x + 24 - 2) {
			//		myslideimagecontainer.style.borderRightColor = 'transparent !important';
			//	} else {
			//		myslideimagecontainer.style.borderRightColor = '#dee !important';
			//	}
			//}
		}
	}
}

// set up
passepartouts = new Array();
envelopes = new Array();
movetypes = new Array();
frame = null;
function joris_move_picture_on(mypassepartout, myenvelope, mymovetype) { // invoked by html onmouseover
	if (joris_initiated) {
		passepartouts[passepartouts.length] = mypassepartout;
		envelopes[envelopes.length] = myenvelope;
		movetypes[movetypes.length] = mymovetype;
		movetype = mymovetype;
		frame = new joris_get_object(mypassepartout);
		frame.object.onmousemove = joris_move_picture;
	}
}
function joris_move_picture_off() { // invoked by html onmouseout
	if (joris_initiated) {
		frame.object.onmousemove = null;
		frame = null;
		movetype = null;
		movetypes = new Array();
		envelopes = new Array();
		passepartouts = new Array();
	}
}

