Never been to DZone Snippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

« Newer Snippets
Older Snippets »
Showing 1-4 of 4 total  RSS 

Include text files in C source

This includes the contents of myfile.txt into the char array text.

Note: This only works if ALL lines in the file are enclosed in "s.

Wrong myfile.txt:
Hello world
Goodbye world



Right myfile.txt:
"Hello world"
"Goodbyle world"
""

char text[] = {
#include "myfile.txt"
}

Multiple user accounts hack for zenPhoto

Multiple user accounts hack for zenPhoto

I needed support for several users, not really for any fancy reason, just so there was no password sharing, so here's a quick hack I made that shouldn't be hard to extend to be a bit more useful if you desire.

Hopefully I have used this forum's tags correctly. If I haven't perhaps a mod can lend a hand in rectifying them. :)

In admin-functions.php:
After:
	echo "\n  <script type=\"text/javascript\" src=\"admin.js\"></script>";
Add:
	echo "\n  <script type=\"text/javascript\" src=\"scriptaculous/prototype.js\"></script>";

Before:
  echo "\n  </ul>";
Add:
  echo "\n    <li". ($page == "users" ? " class=\"current\""  : "") . 
    "> <a href=\"admin.php?page=users\">users</a></li>";

In admin.php
After:
    } else if ($action == 'settheme') {
      if (isset($_GET['theme'])) {
        $gallery->setCurrentTheme($_GET['theme']);
      }
Add:
	  
/** USERS ******************************************************************/
/*****************************************************************************/

    } else if ($action == 'updateUsers') {
		$uid = explode("_",$_REQUEST['userid']);
		$uid = $uid[1];
		$name = $_REQUEST['username'];
		$pass = $_REQUEST['userpass'];
		$email = $_REQUEST['usermail'];
		$query = "SELECT * FROM users WHERE name='$name' LIMIT 1";
		$result = mysql_query($query) or die(mysql_error());
		if (mysql_num_rows($result)<1){
			//create new user
			$query = "INSERT INTO users (`name`,`pass`,`email`) VALUES ('$name',MD5('$pass'),'$email')";
			$result = mysql_query($query) or die(mysql_error());
			$r = mysql_insert_id();
			die("$r");
		}else{
			//update old user
			$query = "UPDATE users SET ";
			$query .= "name='$name'";
			if (!empty($pass) && ($pass!="")){ $query .= ",pass=MD5('$name')"; }
			$query .= ",email='$email'";
			$query .= " WHERE id='$uid'";
			$result = mysql_query($query) or die(mysql_error());
			die("Save successful!");
		}
    } else if ($action == 'removeUsers') {
		$uid = explode("_",$_REQUEST['userid']);
		$uid = $uid[1];
		$query = "DELETE FROM users WHERE id='$uid' LIMIT 1";
		$result = mysql_query($query) or die(mysql_error());
	}

Before:
<?php /*** HOME ***************************************************************************/ 
      /************************************************************************************/ ?> 
Add:
<?php /*** USERS *******************************************************/ 
      /************************************************************************************/ ?> 
      
    <?php } else if ($page == "users") { ?>
	
	<script>
	addRow = function(e){
		while(e.nodeName.toLowerCase() != "tr"){ e = e.parentNode; }
		newAdd = "<tr><td></td><td><a href='#' onClick='addRow(event.target);'>Add User</a></td><td></td><td></td></tr>";
		cells = e.getElementsByTagName('td');
		cells[0].update("<input type='button' id='newCancel' value='Cancel' onClick='cancelRow(event.target);'><input type='button' id='newSave' value='Save' onClick='saveRow(event.target);'>");
		cells[1].update("<input type='test' id='newName'>");
		cells[2].update("<input type='password' id='newPass'>");
		cells[3].update("<input type='test' id='newEmail'>");
		new Insertion.Before(e,newAdd);
	};
	cancelRow = function(e){
		while(e.nodeName.toLowerCase() != "tr"){ e = e.parentNode; }
		e.remove();
	}
	saveRow = function(e){
		while(e.nodeName.toLowerCase() != "tr"){ e = e.parentNode; }
		cells = e.getElementsByTagName('td');
		//ajax save call1
		cells[0].update("<em>Saving...</em>");
		//build url
		daUrl = "admin.php?page=users";
		daUrl += "&action=updateUsers";
		daUrl += "&userid="+(e.id);
		daUrl += "&username="+(cells[1].getElementsByTagName("input")[0].value);
		daUrl += "&userpass="+(cells[2].getElementsByTagName("input")[0].value);
		daUrl += "&usermail="+(cells[3].getElementsByTagName("input")[0].value);
		
		new Ajax.Request(daUrl,{
			method:'get',
			onSuccess:function(r){
				uid = r.responseText;
				e.id = "uid_"+uid;
				cells = e.getElementsByTagName('td');
				cells[0].update("<a href='#' onClick='remRow(event.target);'>Delete</a> | <a href='#' onClick='editRow(event.target);'>Edit</a>");
				cells[1].update(cells[1].getElementsByTagName("input")[0].value);
				cells[2].update("<em>Saved</em>");
				cells[3].update(cells[3].getElementsByTagName("input")[0].value);
			},
			onFailure:function(r){
				alert("Save function failed!");
			}
		});
		

	}
	remRow = function(e){
		while(e.nodeName.toLowerCase() != "tr"){ e = e.parentNode; }
		daUrl = "admin.php?page=users";
		daUrl += "&action=removeUsers";
		daUrl += "&userid="+(e.id);
		new Ajax.Request(daUrl,{
			method:'get',
			onSuccess:function(r){
				e.remove();
			},
			onFailure:function(r){
				alert("Delete function failed!");
			}
		});
	}
	editRow = function(e){
		while(e.nodeName.toLowerCase() != "tr"){ e = e.parentNode; }
		cells = e.getElementsByTagName('td');
		cells[0].update("<input type='button' id='newCancel' value='Cancel' onClick='cancelEdit(event.target);'><input type='button' id='newSave' value='Save' onClick='saveRow(event.target);'>");
		cells[1].update("<input o="+cells[1].innerHTML+" type='test' id='newName' value='"+cells[1].innerHTML+"'>");
		cells[2].update("<input type='password' id='newPass'>");
		cells[3].update("<input o="+cells[3].innerHTML+" type='test' id='newEmail' value='"+cells[3].innerHTML+"'>");
	}
	cancelEdit = function(e){
		while(e.nodeName.toLowerCase() != "tr"){ e = e.parentNode; }
		cells = e.getElementsByTagName('td');
		cells[0].update("<a href='#' onClick='remRow(event.target);'>Delete</a> | <a href='#' onClick='editRow(event.target);'>Edit</a>");
		cells[1].update(cells[1].getElementsByTagName("input")[0].getAttribute('o'));
		cells[2].update("<em>Saved</em>");
		cells[3].update(cells[3].getElementsByTagName("input")[0].getAttribute('o'));
	}

	</script>
	
	<h1>User Management</h1>
	<table class="bordered">
		<tr>
			<th></th>
			<th>Name</th>
			<th>Password</th>
			<th>Email</th>
		</tr>
		<tr>
			<td></td>
			<td><a href="#" onClick="addRow(event.target);">Add User</a></td>
			<td></td>
			<td></td>
		</tr>
		<?php
		$query = "SELECT * FROM users";
		$result = mysql_query($query) or die(mysql_error());
		while($r=mysql_fetch_assoc($result)){
			echo "<tr id='uid_".$r['id']."'>";
			echo "	<td><a href='#' onClick='remRow(event.target);'>Delete</a> | <a href='#' onClick='editRow(event.target);'>Edit</a></td>";
			echo "	<td>".$r['name']."</td>";
			echo "	<td><em>Saved</em></td>";
			echo "	<td>".$r['email']."</td>";
			echo "</tr>";
		}
		?>
	</table>
	 
Replace auth_zp.php with:
<?php

require_once("functions-db.php");

// If the auth variable gets set somehow before this, get rid of it.
if (isset($_zp_loggedin)) unset($_zp_loggedin);
$_zp_loggedin = false;

// Fix the cookie's path for root installs.
$cookiepath = WEBPATH;
if (WEBPATH == '') { $cookiepath = '/'; }

if (isset($_COOKIE['zenphoto_auth'])) {
  $saved_auth = $_COOKIE['zenphoto_auth'];
  $saved_user = $_COOKIE['zenphoto_user'];
  $query = "SELECT * FROM users WHERE name='$saved_user' LIMIT 1";
  $result = mysql_query($query) or die(mysql_error());
  $rows = mysql_num_rows($result);
  if ($rows>0){
	$r = mysql_fetch_assoc($result);
	$check_auth = md5($r['name'].$r['pass']);
  }
  if ($rows>0 && $saved_auth==$check_auth) {
    $_zp_loggedin = true;
  } else {
    // Clear the cookie
    setcookie("zenphoto_auth", "", time()-368000, $cookiepath);
    setcookie("zenphoto_user", "", time()-368000, $cookiepath);
  }
} else {
  // Handle the login form.
  if (isset($_POST['login']) && isset($_POST['user']) && isset($_POST['pass'])) {
    $user = $_POST['user'];
    $pass = MD5($_POST['pass']);
    $redirect = $_POST['redirect'];
	$query = "SELECT * FROM users WHERE name='$user' AND pass='$pass' LIMIT 1";
	$result = mysql_query($query) or die(mysql_error());
    if (mysql_num_rows($result)>0) {
      // Correct auth info. Set the cookie.
      setcookie("zenphoto_auth", md5($user.$pass), time()+5184000, $cookiepath);
      setcookie("zenphoto_user", $user, time()+5184000, $cookiepath);
      $_zp_loggedin = true;
      //// FIXME: Breaks IIS
      if (!empty($redirect)) { header("Location: " . FULLWEBPATH . $redirect); }
      //// 
    } else {
      // Clear the cookie, just in case
      setcookie("zenphoto_auth", "", time()-368000, $cookiepath);
      setcookie("zenphoto_user", "", time()-368000, $cookiepath);
      $error = true;
    }
  }
}
unset($saved_auth, $check_auth, $user, $pass);
// Handle a logout action.
if (isset($_POST['logout']) || isset($_GET['logout'])) {
  setcookie("zenphoto_auth", "", time()-368000, $cookiepath);
  setcookie("zenphoto_user", "", time()-368000, $cookiepath);
  header("Location: " . FULLWEBPATH . "/");
}

function zp_loggedin() {
	$_zp_loggedin = false;
	if (isset($_COOKIE['zenphoto_auth'])) {
	  $saved_auth = $_COOKIE['zenphoto_auth'];
	  $saved_user = $_COOKIE['zenphoto_user'];
	  $query = "SELECT * FROM users WHERE name='$saved_user' LIMIT 1";
	  $result = mysql_query($query) or die(mysql_error());
	  $rows = mysql_num_rows($result);
	  if ($rows>0){
		$r = mysql_fetch_assoc($result);
		$check_auth = md5($r['name'].$r['pass']);
		if ($saved_auth==$check_auth){ $_zp_loggedin = true; }
	  }
	}
  return $_zp_loggedin;
}


?>


Execute this SQL on your zenphoto table:
CREATE TABLE users (
`id` INT( 255 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`name` VARCHAR( 255 ) NOT NULL ,
`pass` VARCHAR( 255 ) NOT NULL ,
`email` VARCHAR( 255 ) NOT NULL
);

INSERT INTO users (`name`,`pass`,`email`) VALUES ('admin',MD5('password'),'you@yourdomain.com');


I recommend also changing the password info in the config file to something uninteresting.

Also, as always, I recommend doing a full backup before proceeding with these directions. YMMV. These directions are provided as-is with no warranty express or implied. You use this at your own risk.

Linux : Open, Copy and Paste, Mouse or keyboard? Who cares - with this.

From http://news.u32.net/articles/2006/07/31/shell-vs-file-manager:

Would you rather click on files or type at them? This is the root of a dichotomy that has existed ever since day one (day one was some time in mid 1964 according to my sources). Except for TwoDudes' short-lived FinderShell, I have never seen a program that effectively combines the strengths of each environment. Why must we choose?

Here's a stupid trick that makes it easier to move data from mouse mode to finger mode and back. Add the following to ~/.bashrc or equivalent:
alias open=gnome-open
alias copy="xclip -i"
alias paste="xclip -o"

Now open opens pretty much anything:
open mswd.doc

opens mswd.doc in OpenOffice or AbiWord (whatever your default is).
open tt.mov

opens the QuickTime clip in a movie player.
open .

opens a new Nautilus window showing the current directory.
open http://u32.net

opens a new browser window showing this blog.

And copy and paste manipulate the clipboard:

* paste (with no arguments) prints the clipboard to the terminal.
* Select some text in a text editor and then run paste > newfile to save that selection to a file.
* copy bigfile copies the contents of bigfile into the clipboard.
* copy *.log copies the contents of all log files in the current directory.

Of course, you can combine these tricks:
paste | tr a-z A-Z | copy

converts the contents of the clipboard to upper-case.
paste | tr A-Za-z N-ZA-Mn-za-m | copy

will rot13 the clipboard.

More in blog post...

Lightbox with IFrames

A hacked version of lightbox that uses an IFrame when the url points to anything other than a jpeg. Also, added some syntax that allows a link to specify the height of the lightbox like this:

<a href="http://google.com" rel="lightbox|300">LB with height 300</a>


// -----------------------------------------------------------------------------------
//
//	Lightbox v2.02
//	by Lokesh Dhakar - http://www.huddletogether.com
//	3/31/06
//
//	hacked to use iframe for non-jpeg urls
//	by Tim Morgan - http://timmorgan.org
//	8/9/06
//
//	For more information on this script, visit:
//	http://huddletogether.com/projects/lightbox2/
//	...and...
//	http://mpov.wordpress.com/2006/08/08/lightbox-with-iframes/
//
//	Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
//	
//	Credit also due to those who have helped, inspired, and made their code available to the public.
//	Including: Scott Upton(uptonic.com), Peter-Paul Koch(quirksmode.org), Thomas Fuchs(mir.aculo.us), and others.
//
//
// -----------------------------------------------------------------------------------
/*

	Table of Contents
	-----------------
	Configuration
	Global Variables

	Extending Built-in Objects	
	- Object.extend(Element)
	- Array.prototype.removeDuplicates()
	- Array.prototype.empty()

	Lightbox Class Declaration
	- initialize()
	- start()
	- changeImage()
	- resizeImageContainer()
	- showImage()
	- updateDetails()
	- updateNav()
	- enableKeyboardNav()
	- disableKeyboardNav()
	- keyboardAction()
	- preloadNeighborImages()
	- end()
	
	Miscellaneous Functions
	- getPageScroll()
	- getPageSize()
	- getKey()
	- listenKey()
	- showSelectBoxes()
	- hideSelectBoxes()
	- pause()
	- initLightbox()
	
	Function Calls
	- addLoadEvent(initLightbox)
	
*/
// -----------------------------------------------------------------------------------

//
//	Configuration
//
var fileLoadingImage = "../images/loading.gif";		
var fileBottomNavCloseImage = "../images/closelabel.gif";

var iframeWidth = 400;
var iframeHeight = 450;

var resizeSpeed = 10;	// controls the speed of the image resizing (1=slowest and 10=fastest)

var borderSize = 10;	//if you adjust the padding in the CSS, you will need to update this variable

// -----------------------------------------------------------------------------------

//
//	Global Variables
//
var imageArray = new Array;
var activeImage;

if(resizeSpeed > 10){ resizeSpeed = 10;}
if(resizeSpeed < 1){ resizeSpeed = 1;}
resizeDuration = (11 - resizeSpeed) * 0.15;

// -----------------------------------------------------------------------------------

//
//	Additional methods for Element added by SU, Couloir
//	- further additions by Lokesh Dhakar (huddletogether.com)
//
Object.extend(Element, {
	getWidth: function(element) {
	   	element = $(element);
	   	return element.offsetWidth; 
	},
	setWidth: function(element,w) {
	   	element = $(element);
    	element.style.width = w +"px";
	},
	setHeight: function(element,h) {
   		element = $(element);
    	element.style.height = h +"px";
	},
	setTop: function(element,t) {
	   	element = $(element);
    	element.style.top = t +"px";
	},
	setSrc: function(element,src) {
    	element = $(element);
    	element.src = src; 
	},
	setHref: function(element,href) {
    	element = $(element);
    	element.href = href; 
	},
	setInnerHTML: function(element,content) {
		element = $(element);
		element.innerHTML = content;
	}
});

// -----------------------------------------------------------------------------------

//
//	Extending built-in Array object
//	- array.removeDuplicates()
//	- array.empty()
//
Array.prototype.removeDuplicates = function () {
	for(i = 1; i < this.length; i++){
		if(this[i][0] == this[i-1][0]){
			this.splice(i,1);
		}
	}
}

// -----------------------------------------------------------------------------------

Array.prototype.empty = function () {
	for(i = 0; i <= this.length; i++){
		this.shift();
	}
}

// -----------------------------------------------------------------------------------

//
//	Lightbox Class Declaration
//	- initialize()
//	- start()
//	- changeImage()
//	- resizeImageContainer()
//	- showImage()
//	- updateDetails()
//	- updateNav()
//	- enableKeyboardNav()
//	- disableKeyboardNav()
//	- keyboardNavAction()
//	- preloadNeighborImages()
//	- end()
//
//	Structuring of code inspired by Scott Upton (http://www.uptonic.com/)
//
var Lightbox = Class.create();

Lightbox.prototype = {
	
	// initialize()
	// Constructor runs on completion of the DOM loading. Loops through anchor tags looking for 
	// 'lightbox' references and applies onclick events to appropriate links. The 2nd section of
	// the function inserts html at the bottom of the page which is used to display the shadow 
	// overlay and the image container.
	//
	initialize: function() {	
		if (!document.getElementsByTagName){ return; }
		var anchors = document.getElementsByTagName('a');

		// loop through all anchor tags
		for (var i=0; i<anchors.length; i++){
			var anchor = anchors[i];
			
			var relAttribute = String(anchor.getAttribute('rel'));
			
			// use the string.match() method to catch 'lightbox' references in the rel attribute
			if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
				anchor.onclick = function () {myLightbox.start(this); return false;}
			}
		}

		// The rest of this code inserts html at the bottom of the page that looks similar to this:
		//
		//	<div id="overlay"></div>
		//	<div id="lightbox">
		//		<div id="outerImageContainer">
		//			<div id="imageContainer">
		//				<img id="lightboxImage">
		//				<div style="" id="hoverNav">
		//					<a href="#" id="prevLink"></a>
		//					<a href="#" id="nextLink"></a>
		//				</div>
		//				<div id="loading">
		//					<a href="#" id="loadingLink">
		//						<img src="images/loading.gif">
		//					</a>
		//				</div>
		//			</div>
		//		</div>
		//		<div id="imageDataContainer">
		//			<div id="imageData">
		//				<div id="imageDetails">
		//					<span id="caption"></span>
		//					<span id="numberDisplay"></span>
		//				</div>
		//				<div id="bottomNav">
		//					<a href="#" id="bottomNavClose">
		//						<img src="images/close.gif">
		//					</a>
		//				</div>
		//			</div>
		//		</div>
		//	</div>


		var objBody = document.getElementsByTagName("body").item(0);
		
		var objOverlay = document.createElement("div");
		objOverlay.setAttribute('id','overlay');
		objOverlay.style.display = 'none';
		//objOverlay.onclick = function() { myLightbox.end(); return false; }
		objBody.appendChild(objOverlay);
		
		var objLightbox = document.createElement("div");
		objLightbox.setAttribute('id','lightbox');
		objLightbox.style.display = 'none';
		objBody.appendChild(objLightbox);
	
		var objOuterImageContainer = document.createElement("div");
		objOuterImageContainer.setAttribute('id','outerImageContainer');
		objLightbox.appendChild(objOuterImageContainer);

		var objImageContainer = document.createElement("div");
		objImageContainer.setAttribute('id','imageContainer');
		objOuterImageContainer.appendChild(objImageContainer);
			
		var objLightboxIframe = document.createElement("iframe");
		objLightboxIframe.setAttribute('id','lightboxIframe');
		objLightboxIframe.style.width = iframeWidth + 'px';
		objLightboxIframe.style.height = iframeHeight + 'px';
		objLightboxIframe.style.border = 'none';
		objImageContainer.appendChild(objLightboxIframe);
    
		var objLightboxImage = document.createElement("img");
		objLightboxImage.setAttribute('id','lightboxImage');
		objImageContainer.appendChild(objLightboxImage);
	
		var objHoverNav = document.createElement("div");
		objHoverNav.setAttribute('id','hoverNav');
		objImageContainer.appendChild(objHoverNav);
	
		var objPrevLink = document.createElement("a");
		objPrevLink.setAttribute('id','prevLink');
		objPrevLink.setAttribute('href','#');
		objHoverNav.appendChild(objPrevLink);
		
		var objNextLink = document.createElement("a");
		objNextLink.setAttribute('id','nextLink');
		objNextLink.setAttribute('href','#');
		objHoverNav.appendChild(objNextLink);
	
		var objLoading = document.createElement("div");
		objLoading.setAttribute('id','loading');
		objImageContainer.appendChild(objLoading);
	
		var objLoadingLink = document.createElement("a");
		objLoadingLink.setAttribute('id','loadingLink');
		objLoadingLink.setAttribute('href','#');
		objLoadingLink.onclick = function() { myLightbox.end(); return false; }
		objLoading.appendChild(objLoadingLink);
	
		var objLoadingImage = document.createElement("img");
		objLoadingImage.setAttribute('src', fileLoadingImage);
		objLoadingLink.appendChild(objLoadingImage);

		var objImageDataContainer = document.createElement("div");
		objImageDataContainer.setAttribute('id','imageDataContainer');
		objImageDataContainer.className = 'clearfix';
		objLightbox.appendChild(objImageDataContainer);

		var objImageData = document.createElement("div");
		objImageData.setAttribute('id','imageData');
		objImageDataContainer.appendChild(objImageData);
	
		var objImageDetails = document.createElement("div");
		objImageDetails.setAttribute('id','imageDetails');
		objImageData.appendChild(objImageDetails);
	
		var objCaption = document.createElement("span");
		objCaption.setAttribute('id','caption');
		objImageDetails.appendChild(objCaption);
	
		var objNumberDisplay = document.createElement("span");
		objNumberDisplay.setAttribute('id','numberDisplay');
		objImageDetails.appendChild(objNumberDisplay);
		
		var objBottomNav = document.createElement("div");
		objBottomNav.setAttribute('id','bottomNav');
		objImageData.appendChild(objBottomNav);
	
		var objBottomNavCloseLink = document.createElement("a");
		objBottomNavCloseLink.setAttribute('id','bottomNavClose');
		objBottomNavCloseLink.setAttribute('href','#');
		objBottomNavCloseLink.onclick = function() { myLightbox.end(); return false; }
		objBottomNav.appendChild(objBottomNavCloseLink);
	
		var objBottomNavCloseImage = document.createElement("img");
		objBottomNavCloseImage.setAttribute('src', fileBottomNavCloseImage);
		objBottomNavCloseLink.appendChild(objBottomNavCloseImage);
	},
	
	//
	//	start()
	//	Display overlay and lightbox. If image is part of a set, add siblings to imageArray.
	//
	start: function(imageLink) {	

		hideSelectBoxes();

		// stretch overlay to fill page and fade in
		var arrayPageSize = getPageSize();
		Element.setHeight('overlay', arrayPageSize[1]);
		new Effect.Appear('overlay', { duration: 0.2, from: 0.0, to: 0.8 });

		imageArray = [];
		imageNum = 0;		

		if (!document.getElementsByTagName){ return; }
		var anchors = document.getElementsByTagName('a');
		
		var rel = imageLink.getAttribute('rel');

		// if image is NOT part of a set..
		if(!rel.match(/\[/)){
			// add single image to imageArray
			imageArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title')));			
			if(rel.match(/\|/)) iframeHeight = parseInt(rel.split(/\|/)[1]);
		} else {
		// if image is part of a set..

			// loop through anchors, find other images in set, and add them to imageArray
			for (var i=0; i<anchors.length; i++){
				var anchor = anchors[i];
				if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))){
					imageArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title')));
				}
			}
			imageArray.removeDuplicates();
			while(imageArray[imageNum][0] != imageLink.getAttribute('href')) { imageNum++;}
		}

		// calculate top offset for the lightbox and display 
		var arrayPageSize = getPageSize();
		var arrayPageScroll = getPageScroll();
		var lightboxTop = arrayPageScroll[1] + (arrayPageSize[3] / 15);

		Element.setTop('lightbox', lightboxTop);
		Element.show('lightbox');
		
		this.changeImage(imageNum);
	},

	//
	//	changeImage()
	//	Hide most elements and preload image in preparation for resizing image container.
	//
	changeImage: function(imageNum) {	
		
		activeImage = imageNum;	// update global var

		// hide elements during transition
		Element.show('loading');
		Element.hide('lightboxImage');
		Element.hide('lightboxIframe');
		Element.hide('hoverNav');
		Element.hide('prevLink');
		Element.hide('nextLink');
		Element.hide('imageDataContainer');
		Element.hide('numberDisplay');		
		
		if(imageArray[activeImage][0].match