<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: hack code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Fri, 25 Jul 2008 03:36:34 GMT</pubDate>
    <description>DZone Snippets: hack code</description>
    <item>
      <title>Include text files in C source</title>
      <link>http://snippets.dzone.com/posts/show/4597</link>
      <description>This includes the contents of myfile.txt into the char array text.&lt;br /&gt;&lt;br /&gt;Note: This only works if ALL lines in the file are enclosed in "s.&lt;br /&gt;&lt;br /&gt;Wrong myfile.txt:&lt;br /&gt;Hello world&lt;br /&gt;Goodbye world&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Right myfile.txt:&lt;br /&gt;"Hello world"&lt;br /&gt;"Goodbyle world"&lt;br /&gt;""&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;char text[] = {&lt;br /&gt;#include "myfile.txt"&lt;br /&gt;}&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Mon, 01 Oct 2007 10:04:48 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4597</guid>
      <author>scvalex (Alexandru Scvortov)</author>
    </item>
    <item>
      <title>Multiple user accounts hack for zenPhoto</title>
      <link>http://snippets.dzone.com/posts/show/4276</link>
      <description>Multiple user accounts hack for zenPhoto&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Hopefully I have used this forum's tags correctly. If I haven't perhaps a mod can lend a hand in rectifying them. :)&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;In admin-functions.php:&lt;br /&gt;After:&lt;br /&gt;	echo "\n  &lt;script type=\"text/javascript\" src=\"admin.js\"&gt;&lt;/script&gt;";&lt;br /&gt;Add:&lt;br /&gt;	echo "\n  &lt;script type=\"text/javascript\" src=\"scriptaculous/prototype.js\"&gt;&lt;/script&gt;";&lt;br /&gt;&lt;br /&gt;Before:&lt;br /&gt;  echo "\n  &lt;/ul&gt;";&lt;br /&gt;Add:&lt;br /&gt;  echo "\n    &lt;li". ($page == "users" ? " class=\"current\""  : "") . &lt;br /&gt;    "&gt; &lt;a href=\"admin.php?page=users\"&gt;users&lt;/a&gt;&lt;/li&gt;";&lt;br /&gt;&lt;br /&gt;In admin.php&lt;br /&gt;After:&lt;br /&gt;    } else if ($action == 'settheme') {&lt;br /&gt;      if (isset($_GET['theme'])) {&lt;br /&gt;        $gallery-&gt;setCurrentTheme($_GET['theme']);&lt;br /&gt;      }&lt;br /&gt;Add:&lt;br /&gt;	  &lt;br /&gt;/** USERS ******************************************************************/&lt;br /&gt;/*****************************************************************************/&lt;br /&gt;&lt;br /&gt;    } else if ($action == 'updateUsers') {&lt;br /&gt;		$uid = explode("_",$_REQUEST['userid']);&lt;br /&gt;		$uid = $uid[1];&lt;br /&gt;		$name = $_REQUEST['username'];&lt;br /&gt;		$pass = $_REQUEST['userpass'];&lt;br /&gt;		$email = $_REQUEST['usermail'];&lt;br /&gt;		$query = "SELECT * FROM users WHERE name='$name' LIMIT 1";&lt;br /&gt;		$result = mysql_query($query) or die(mysql_error());&lt;br /&gt;		if (mysql_num_rows($result)&lt;1){&lt;br /&gt;			//create new user&lt;br /&gt;			$query = "INSERT INTO users (`name`,`pass`,`email`) VALUES ('$name',MD5('$pass'),'$email')";&lt;br /&gt;			$result = mysql_query($query) or die(mysql_error());&lt;br /&gt;			$r = mysql_insert_id();&lt;br /&gt;			die("$r");&lt;br /&gt;		}else{&lt;br /&gt;			//update old user&lt;br /&gt;			$query = "UPDATE users SET ";&lt;br /&gt;			$query .= "name='$name'";&lt;br /&gt;			if (!empty($pass) &amp;&amp; ($pass!="")){ $query .= ",pass=MD5('$name')"; }&lt;br /&gt;			$query .= ",email='$email'";&lt;br /&gt;			$query .= " WHERE id='$uid'";&lt;br /&gt;			$result = mysql_query($query) or die(mysql_error());&lt;br /&gt;			die("Save successful!");&lt;br /&gt;		}&lt;br /&gt;    } else if ($action == 'removeUsers') {&lt;br /&gt;		$uid = explode("_",$_REQUEST['userid']);&lt;br /&gt;		$uid = $uid[1];&lt;br /&gt;		$query = "DELETE FROM users WHERE id='$uid' LIMIT 1";&lt;br /&gt;		$result = mysql_query($query) or die(mysql_error());&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;Before:&lt;br /&gt;&lt;?php /*** HOME ***************************************************************************/ &lt;br /&gt;      /************************************************************************************/ ?&gt; &lt;br /&gt;Add:&lt;br /&gt;&lt;?php /*** USERS *******************************************************/ &lt;br /&gt;      /************************************************************************************/ ?&gt; &lt;br /&gt;      &lt;br /&gt;    &lt;?php } else if ($page == "users") { ?&gt;&lt;br /&gt;	&lt;br /&gt;	&lt;script&gt;&lt;br /&gt;	addRow = function(e){&lt;br /&gt;		while(e.nodeName.toLowerCase() != "tr"){ e = e.parentNode; }&lt;br /&gt;		newAdd = "&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;a href='#' onClick='addRow(event.target);'&gt;Add User&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;/tr&gt;";&lt;br /&gt;		cells = e.getElementsByTagName('td');&lt;br /&gt;		cells[0].update("&lt;input type='button' id='newCancel' value='Cancel' onClick='cancelRow(event.target);'&gt;&lt;input type='button' id='newSave' value='Save' onClick='saveRow(event.target);'&gt;");&lt;br /&gt;		cells[1].update("&lt;input type='test' id='newName'&gt;");&lt;br /&gt;		cells[2].update("&lt;input type='password' id='newPass'&gt;");&lt;br /&gt;		cells[3].update("&lt;input type='test' id='newEmail'&gt;");&lt;br /&gt;		new Insertion.Before(e,newAdd);&lt;br /&gt;	};&lt;br /&gt;	cancelRow = function(e){&lt;br /&gt;		while(e.nodeName.toLowerCase() != "tr"){ e = e.parentNode; }&lt;br /&gt;		e.remove();&lt;br /&gt;	}&lt;br /&gt;	saveRow = function(e){&lt;br /&gt;		while(e.nodeName.toLowerCase() != "tr"){ e = e.parentNode; }&lt;br /&gt;		cells = e.getElementsByTagName('td');&lt;br /&gt;		//ajax save call1&lt;br /&gt;		cells[0].update("&lt;em&gt;Saving...&lt;/em&gt;");&lt;br /&gt;		//build url&lt;br /&gt;		daUrl = "admin.php?page=users";&lt;br /&gt;		daUrl += "&amp;action=updateUsers";&lt;br /&gt;		daUrl += "&amp;userid="+(e.id);&lt;br /&gt;		daUrl += "&amp;username="+(cells[1].getElementsByTagName("input")[0].value);&lt;br /&gt;		daUrl += "&amp;userpass="+(cells[2].getElementsByTagName("input")[0].value);&lt;br /&gt;		daUrl += "&amp;usermail="+(cells[3].getElementsByTagName("input")[0].value);&lt;br /&gt;		&lt;br /&gt;		new Ajax.Request(daUrl,{&lt;br /&gt;			method:'get',&lt;br /&gt;			onSuccess:function(r){&lt;br /&gt;				uid = r.responseText;&lt;br /&gt;				e.id = "uid_"+uid;&lt;br /&gt;				cells = e.getElementsByTagName('td');&lt;br /&gt;				cells[0].update("&lt;a href='#' onClick='remRow(event.target);'&gt;Delete&lt;/a&gt; | &lt;a href='#' onClick='editRow(event.target);'&gt;Edit&lt;/a&gt;");&lt;br /&gt;				cells[1].update(cells[1].getElementsByTagName("input")[0].value);&lt;br /&gt;				cells[2].update("&lt;em&gt;Saved&lt;/em&gt;");&lt;br /&gt;				cells[3].update(cells[3].getElementsByTagName("input")[0].value);&lt;br /&gt;			},&lt;br /&gt;			onFailure:function(r){&lt;br /&gt;				alert("Save function failed!");&lt;br /&gt;			}&lt;br /&gt;		});&lt;br /&gt;		&lt;br /&gt;&lt;br /&gt;	}&lt;br /&gt;	remRow = function(e){&lt;br /&gt;		while(e.nodeName.toLowerCase() != "tr"){ e = e.parentNode; }&lt;br /&gt;		daUrl = "admin.php?page=users";&lt;br /&gt;		daUrl += "&amp;action=removeUsers";&lt;br /&gt;		daUrl += "&amp;userid="+(e.id);&lt;br /&gt;		new Ajax.Request(daUrl,{&lt;br /&gt;			method:'get',&lt;br /&gt;			onSuccess:function(r){&lt;br /&gt;				e.remove();&lt;br /&gt;			},&lt;br /&gt;			onFailure:function(r){&lt;br /&gt;				alert("Delete function failed!");&lt;br /&gt;			}&lt;br /&gt;		});&lt;br /&gt;	}&lt;br /&gt;	editRow = function(e){&lt;br /&gt;		while(e.nodeName.toLowerCase() != "tr"){ e = e.parentNode; }&lt;br /&gt;		cells = e.getElementsByTagName('td');&lt;br /&gt;		cells[0].update("&lt;input type='button' id='newCancel' value='Cancel' onClick='cancelEdit(event.target);'&gt;&lt;input type='button' id='newSave' value='Save' onClick='saveRow(event.target);'&gt;");&lt;br /&gt;		cells[1].update("&lt;input o="+cells[1].innerHTML+" type='test' id='newName' value='"+cells[1].innerHTML+"'&gt;");&lt;br /&gt;		cells[2].update("&lt;input type='password' id='newPass'&gt;");&lt;br /&gt;		cells[3].update("&lt;input o="+cells[3].innerHTML+" type='test' id='newEmail' value='"+cells[3].innerHTML+"'&gt;");&lt;br /&gt;	}&lt;br /&gt;	cancelEdit = function(e){&lt;br /&gt;		while(e.nodeName.toLowerCase() != "tr"){ e = e.parentNode; }&lt;br /&gt;		cells = e.getElementsByTagName('td');&lt;br /&gt;		cells[0].update("&lt;a href='#' onClick='remRow(event.target);'&gt;Delete&lt;/a&gt; | &lt;a href='#' onClick='editRow(event.target);'&gt;Edit&lt;/a&gt;");&lt;br /&gt;		cells[1].update(cells[1].getElementsByTagName("input")[0].getAttribute('o'));&lt;br /&gt;		cells[2].update("&lt;em&gt;Saved&lt;/em&gt;");&lt;br /&gt;		cells[3].update(cells[3].getElementsByTagName("input")[0].getAttribute('o'));&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	&lt;/script&gt;&lt;br /&gt;	&lt;br /&gt;	&lt;h1&gt;User Management&lt;/h1&gt;&lt;br /&gt;	&lt;table class="bordered"&gt;&lt;br /&gt;		&lt;tr&gt;&lt;br /&gt;			&lt;th&gt;&lt;/th&gt;&lt;br /&gt;			&lt;th&gt;Name&lt;/th&gt;&lt;br /&gt;			&lt;th&gt;Password&lt;/th&gt;&lt;br /&gt;			&lt;th&gt;Email&lt;/th&gt;&lt;br /&gt;		&lt;/tr&gt;&lt;br /&gt;		&lt;tr&gt;&lt;br /&gt;			&lt;td&gt;&lt;/td&gt;&lt;br /&gt;			&lt;td&gt;&lt;a href="#" onClick="addRow(event.target);"&gt;Add User&lt;/a&gt;&lt;/td&gt;&lt;br /&gt;			&lt;td&gt;&lt;/td&gt;&lt;br /&gt;			&lt;td&gt;&lt;/td&gt;&lt;br /&gt;		&lt;/tr&gt;&lt;br /&gt;		&lt;?php&lt;br /&gt;		$query = "SELECT * FROM users";&lt;br /&gt;		$result = mysql_query($query) or die(mysql_error());&lt;br /&gt;		while($r=mysql_fetch_assoc($result)){&lt;br /&gt;			echo "&lt;tr id='uid_".$r['id']."'&gt;";&lt;br /&gt;			echo "	&lt;td&gt;&lt;a href='#' onClick='remRow(event.target);'&gt;Delete&lt;/a&gt; | &lt;a href='#' onClick='editRow(event.target);'&gt;Edit&lt;/a&gt;&lt;/td&gt;";&lt;br /&gt;			echo "	&lt;td&gt;".$r['name']."&lt;/td&gt;";&lt;br /&gt;			echo "	&lt;td&gt;&lt;em&gt;Saved&lt;/em&gt;&lt;/td&gt;";&lt;br /&gt;			echo "	&lt;td&gt;".$r['email']."&lt;/td&gt;";&lt;br /&gt;			echo "&lt;/tr&gt;";&lt;br /&gt;		}&lt;br /&gt;		?&gt;&lt;br /&gt;	&lt;/table&gt;&lt;br /&gt;	 &lt;br /&gt;Replace auth_zp.php with:&lt;br /&gt;&lt;?php&lt;br /&gt;&lt;br /&gt;require_once("functions-db.php");&lt;br /&gt;&lt;br /&gt;// If the auth variable gets set somehow before this, get rid of it.&lt;br /&gt;if (isset($_zp_loggedin)) unset($_zp_loggedin);&lt;br /&gt;$_zp_loggedin = false;&lt;br /&gt;&lt;br /&gt;// Fix the cookie's path for root installs.&lt;br /&gt;$cookiepath = WEBPATH;&lt;br /&gt;if (WEBPATH == '') { $cookiepath = '/'; }&lt;br /&gt;&lt;br /&gt;if (isset($_COOKIE['zenphoto_auth'])) {&lt;br /&gt;  $saved_auth = $_COOKIE['zenphoto_auth'];&lt;br /&gt;  $saved_user = $_COOKIE['zenphoto_user'];&lt;br /&gt;  $query = "SELECT * FROM users WHERE name='$saved_user' LIMIT 1";&lt;br /&gt;  $result = mysql_query($query) or die(mysql_error());&lt;br /&gt;  $rows = mysql_num_rows($result);&lt;br /&gt;  if ($rows&gt;0){&lt;br /&gt;	$r = mysql_fetch_assoc($result);&lt;br /&gt;	$check_auth = md5($r['name'].$r['pass']);&lt;br /&gt;  }&lt;br /&gt;  if ($rows&gt;0 &amp;&amp; $saved_auth==$check_auth) {&lt;br /&gt;    $_zp_loggedin = true;&lt;br /&gt;  } else {&lt;br /&gt;    // Clear the cookie&lt;br /&gt;    setcookie("zenphoto_auth", "", time()-368000, $cookiepath);&lt;br /&gt;    setcookie("zenphoto_user", "", time()-368000, $cookiepath);&lt;br /&gt;  }&lt;br /&gt;} else {&lt;br /&gt;  // Handle the login form.&lt;br /&gt;  if (isset($_POST['login']) &amp;&amp; isset($_POST['user']) &amp;&amp; isset($_POST['pass'])) {&lt;br /&gt;    $user = $_POST['user'];&lt;br /&gt;    $pass = MD5($_POST['pass']);&lt;br /&gt;    $redirect = $_POST['redirect'];&lt;br /&gt;	$query = "SELECT * FROM users WHERE name='$user' AND pass='$pass' LIMIT 1";&lt;br /&gt;	$result = mysql_query($query) or die(mysql_error());&lt;br /&gt;    if (mysql_num_rows($result)&gt;0) {&lt;br /&gt;      // Correct auth info. Set the cookie.&lt;br /&gt;      setcookie("zenphoto_auth", md5($user.$pass), time()+5184000, $cookiepath);&lt;br /&gt;      setcookie("zenphoto_user", $user, time()+5184000, $cookiepath);&lt;br /&gt;      $_zp_loggedin = true;&lt;br /&gt;      //// FIXME: Breaks IIS&lt;br /&gt;      if (!empty($redirect)) { header("Location: " . FULLWEBPATH . $redirect); }&lt;br /&gt;      //// &lt;br /&gt;    } else {&lt;br /&gt;      // Clear the cookie, just in case&lt;br /&gt;      setcookie("zenphoto_auth", "", time()-368000, $cookiepath);&lt;br /&gt;      setcookie("zenphoto_user", "", time()-368000, $cookiepath);&lt;br /&gt;      $error = true;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;unset($saved_auth, $check_auth, $user, $pass);&lt;br /&gt;// Handle a logout action.&lt;br /&gt;if (isset($_POST['logout']) || isset($_GET['logout'])) {&lt;br /&gt;  setcookie("zenphoto_auth", "", time()-368000, $cookiepath);&lt;br /&gt;  setcookie("zenphoto_user", "", time()-368000, $cookiepath);&lt;br /&gt;  header("Location: " . FULLWEBPATH . "/");&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;function zp_loggedin() {&lt;br /&gt;	$_zp_loggedin = false;&lt;br /&gt;	if (isset($_COOKIE['zenphoto_auth'])) {&lt;br /&gt;	  $saved_auth = $_COOKIE['zenphoto_auth'];&lt;br /&gt;	  $saved_user = $_COOKIE['zenphoto_user'];&lt;br /&gt;	  $query = "SELECT * FROM users WHERE name='$saved_user' LIMIT 1";&lt;br /&gt;	  $result = mysql_query($query) or die(mysql_error());&lt;br /&gt;	  $rows = mysql_num_rows($result);&lt;br /&gt;	  if ($rows&gt;0){&lt;br /&gt;		$r = mysql_fetch_assoc($result);&lt;br /&gt;		$check_auth = md5($r['name'].$r['pass']);&lt;br /&gt;		if ($saved_auth==$check_auth){ $_zp_loggedin = true; }&lt;br /&gt;	  }&lt;br /&gt;	}&lt;br /&gt;  return $_zp_loggedin;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;?&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Execute this SQL on your zenphoto table:&lt;br /&gt;CREATE TABLE users (&lt;br /&gt;`id` INT( 255 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,&lt;br /&gt;`name` VARCHAR( 255 ) NOT NULL ,&lt;br /&gt;`pass` VARCHAR( 255 ) NOT NULL ,&lt;br /&gt;`email` VARCHAR( 255 ) NOT NULL&lt;br /&gt;);&lt;br /&gt;&lt;br /&gt;INSERT INTO users (`name`,`pass`,`email`) VALUES ('admin',MD5('password'),'you@yourdomain.com');&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;I recommend also changing the password info in the config file to something uninteresting.&lt;br /&gt;&lt;br /&gt;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.</description>
      <pubDate>Sun, 08 Jul 2007 01:28:36 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/4276</guid>
      <author>WedgeTalon (Wedge Talon)</author>
    </item>
    <item>
      <title>Linux : Open, Copy and Paste, Mouse or keyboard?  Who cares - with this.</title>
      <link>http://snippets.dzone.com/posts/show/2409</link>
      <description>From http://news.u32.net/articles/2006/07/31/shell-vs-file-manager:&lt;br /&gt;&lt;br /&gt;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?&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;alias open=gnome-open&lt;br /&gt;alias copy="xclip -i"&lt;br /&gt;alias paste="xclip -o"&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;Now open opens pretty much anything:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;open mswd.doc&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;    opens mswd.doc in OpenOffice or AbiWord (whatever your default is).&lt;br /&gt;&lt;code&gt;&lt;br /&gt;open tt.mov&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;    opens the QuickTime clip in a movie player.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;open .&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;    opens a new Nautilus window showing the current directory.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;open http://u32.net&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;    opens a new browser window showing this blog.&lt;br /&gt;&lt;br /&gt;And copy and paste manipulate the clipboard:&lt;br /&gt;&lt;br /&gt;    * paste (with no arguments) prints the clipboard to the terminal.&lt;br /&gt;    * Select some text in a text editor and then run paste &gt; newfile to save that selection to a file.&lt;br /&gt;    * copy bigfile copies the contents of bigfile into the clipboard.&lt;br /&gt;    * copy *.log copies the contents of all log files in the current directory.&lt;br /&gt;&lt;br /&gt;Of course, you can combine these tricks:&lt;br /&gt;&lt;code&gt;&lt;br /&gt;paste | tr a-z A-Z | copy&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;    converts the contents of the clipboard to upper-case.&lt;br /&gt;&lt;code&gt;&lt;br /&gt;paste | tr A-Za-z N-ZA-Mn-za-m | copy&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;    will rot13 the clipboard. &lt;br /&gt;&lt;br /&gt;More in blog post...</description>
      <pubDate>Mon, 14 Aug 2006 08:47:48 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2409</guid>
      <author>MattScilipoti (Matt Scilipoti)</author>
    </item>
    <item>
      <title>Lightbox with IFrames</title>
      <link>http://snippets.dzone.com/posts/show/2382</link>
      <description>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:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;a href="http://google.com" rel="lightbox|300"&gt;LB with height 300&lt;/a&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;// -----------------------------------------------------------------------------------&lt;br /&gt;//&lt;br /&gt;//	Lightbox v2.02&lt;br /&gt;//	by Lokesh Dhakar - http://www.huddletogether.com&lt;br /&gt;//	3/31/06&lt;br /&gt;//&lt;br /&gt;//	hacked to use iframe for non-jpeg urls&lt;br /&gt;//	by Tim Morgan - http://timmorgan.org&lt;br /&gt;//	8/9/06&lt;br /&gt;//&lt;br /&gt;//	For more information on this script, visit:&lt;br /&gt;//	http://huddletogether.com/projects/lightbox2/&lt;br /&gt;//	...and...&lt;br /&gt;//	http://mpov.wordpress.com/2006/08/08/lightbox-with-iframes/&lt;br /&gt;//&lt;br /&gt;//	Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/&lt;br /&gt;//	&lt;br /&gt;//	Credit also due to those who have helped, inspired, and made their code available to the public.&lt;br /&gt;//	Including: Scott Upton(uptonic.com), Peter-Paul Koch(quirksmode.org), Thomas Fuchs(mir.aculo.us), and others.&lt;br /&gt;//&lt;br /&gt;//&lt;br /&gt;// -----------------------------------------------------------------------------------&lt;br /&gt;/*&lt;br /&gt;&lt;br /&gt;	Table of Contents&lt;br /&gt;	-----------------&lt;br /&gt;	Configuration&lt;br /&gt;	Global Variables&lt;br /&gt;&lt;br /&gt;	Extending Built-in Objects	&lt;br /&gt;	- Object.extend(Element)&lt;br /&gt;	- Array.prototype.removeDuplicates()&lt;br /&gt;	- Array.prototype.empty()&lt;br /&gt;&lt;br /&gt;	Lightbox Class Declaration&lt;br /&gt;	- initialize()&lt;br /&gt;	- start()&lt;br /&gt;	- changeImage()&lt;br /&gt;	- resizeImageContainer()&lt;br /&gt;	- showImage()&lt;br /&gt;	- updateDetails()&lt;br /&gt;	- updateNav()&lt;br /&gt;	- enableKeyboardNav()&lt;br /&gt;	- disableKeyboardNav()&lt;br /&gt;	- keyboardAction()&lt;br /&gt;	- preloadNeighborImages()&lt;br /&gt;	- end()&lt;br /&gt;	&lt;br /&gt;	Miscellaneous Functions&lt;br /&gt;	- getPageScroll()&lt;br /&gt;	- getPageSize()&lt;br /&gt;	- getKey()&lt;br /&gt;	- listenKey()&lt;br /&gt;	- showSelectBoxes()&lt;br /&gt;	- hideSelectBoxes()&lt;br /&gt;	- pause()&lt;br /&gt;	- initLightbox()&lt;br /&gt;	&lt;br /&gt;	Function Calls&lt;br /&gt;	- addLoadEvent(initLightbox)&lt;br /&gt;	&lt;br /&gt;*/&lt;br /&gt;// -----------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;//&lt;br /&gt;//	Configuration&lt;br /&gt;//&lt;br /&gt;var fileLoadingImage = "../images/loading.gif";		&lt;br /&gt;var fileBottomNavCloseImage = "../images/closelabel.gif";&lt;br /&gt;&lt;br /&gt;var iframeWidth = 400;&lt;br /&gt;var iframeHeight = 450;&lt;br /&gt;&lt;br /&gt;var resizeSpeed = 10;	// controls the speed of the image resizing (1=slowest and 10=fastest)&lt;br /&gt;&lt;br /&gt;var borderSize = 10;	//if you adjust the padding in the CSS, you will need to update this variable&lt;br /&gt;&lt;br /&gt;// -----------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;//&lt;br /&gt;//	Global Variables&lt;br /&gt;//&lt;br /&gt;var imageArray = new Array;&lt;br /&gt;var activeImage;&lt;br /&gt;&lt;br /&gt;if(resizeSpeed &gt; 10){ resizeSpeed = 10;}&lt;br /&gt;if(resizeSpeed &lt; 1){ resizeSpeed = 1;}&lt;br /&gt;resizeDuration = (11 - resizeSpeed) * 0.15;&lt;br /&gt;&lt;br /&gt;// -----------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;//&lt;br /&gt;//	Additional methods for Element added by SU, Couloir&lt;br /&gt;//	- further additions by Lokesh Dhakar (huddletogether.com)&lt;br /&gt;//&lt;br /&gt;Object.extend(Element, {&lt;br /&gt;	getWidth: function(element) {&lt;br /&gt;	   	element = $(element);&lt;br /&gt;	   	return element.offsetWidth; &lt;br /&gt;	},&lt;br /&gt;	setWidth: function(element,w) {&lt;br /&gt;	   	element = $(element);&lt;br /&gt;    	element.style.width = w +"px";&lt;br /&gt;	},&lt;br /&gt;	setHeight: function(element,h) {&lt;br /&gt;   		element = $(element);&lt;br /&gt;    	element.style.height = h +"px";&lt;br /&gt;	},&lt;br /&gt;	setTop: function(element,t) {&lt;br /&gt;	   	element = $(element);&lt;br /&gt;    	element.style.top = t +"px";&lt;br /&gt;	},&lt;br /&gt;	setSrc: function(element,src) {&lt;br /&gt;    	element = $(element);&lt;br /&gt;    	element.src = src; &lt;br /&gt;	},&lt;br /&gt;	setHref: function(element,href) {&lt;br /&gt;    	element = $(element);&lt;br /&gt;    	element.href = href; &lt;br /&gt;	},&lt;br /&gt;	setInnerHTML: function(element,content) {&lt;br /&gt;		element = $(element);&lt;br /&gt;		element.innerHTML = content;&lt;br /&gt;	}&lt;br /&gt;});&lt;br /&gt;&lt;br /&gt;// -----------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;//&lt;br /&gt;//	Extending built-in Array object&lt;br /&gt;//	- array.removeDuplicates()&lt;br /&gt;//	- array.empty()&lt;br /&gt;//&lt;br /&gt;Array.prototype.removeDuplicates = function () {&lt;br /&gt;	for(i = 1; i &lt; this.length; i++){&lt;br /&gt;		if(this[i][0] == this[i-1][0]){&lt;br /&gt;			this.splice(i,1);&lt;br /&gt;		}&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// -----------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Array.prototype.empty = function () {&lt;br /&gt;	for(i = 0; i &lt;= this.length; i++){&lt;br /&gt;		this.shift();&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// -----------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;//&lt;br /&gt;//	Lightbox Class Declaration&lt;br /&gt;//	- initialize()&lt;br /&gt;//	- start()&lt;br /&gt;//	- changeImage()&lt;br /&gt;//	- resizeImageContainer()&lt;br /&gt;//	- showImage()&lt;br /&gt;//	- updateDetails()&lt;br /&gt;//	- updateNav()&lt;br /&gt;//	- enableKeyboardNav()&lt;br /&gt;//	- disableKeyboardNav()&lt;br /&gt;//	- keyboardNavAction()&lt;br /&gt;//	- preloadNeighborImages()&lt;br /&gt;//	- end()&lt;br /&gt;//&lt;br /&gt;//	Structuring of code inspired by Scott Upton (http://www.uptonic.com/)&lt;br /&gt;//&lt;br /&gt;var Lightbox = Class.create();&lt;br /&gt;&lt;br /&gt;Lightbox.prototype = {&lt;br /&gt;	&lt;br /&gt;	// initialize()&lt;br /&gt;	// Constructor runs on completion of the DOM loading. Loops through anchor tags looking for &lt;br /&gt;	// 'lightbox' references and applies onclick events to appropriate links. The 2nd section of&lt;br /&gt;	// the function inserts html at the bottom of the page which is used to display the shadow &lt;br /&gt;	// overlay and the image container.&lt;br /&gt;	//&lt;br /&gt;	initialize: function() {	&lt;br /&gt;		if (!document.getElementsByTagName){ return; }&lt;br /&gt;		var anchors = document.getElementsByTagName('a');&lt;br /&gt;&lt;br /&gt;		// loop through all anchor tags&lt;br /&gt;		for (var i=0; i&lt;anchors.length; i++){&lt;br /&gt;			var anchor = anchors[i];&lt;br /&gt;			&lt;br /&gt;			var relAttribute = String(anchor.getAttribute('rel'));&lt;br /&gt;			&lt;br /&gt;			// use the string.match() method to catch 'lightbox' references in the rel attribute&lt;br /&gt;			if (anchor.getAttribute('href') &amp;&amp; (relAttribute.toLowerCase().match('lightbox'))){&lt;br /&gt;				anchor.onclick = function () {myLightbox.start(this); return false;}&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		// The rest of this code inserts html at the bottom of the page that looks similar to this:&lt;br /&gt;		//&lt;br /&gt;		//	&lt;div id="overlay"&gt;&lt;/div&gt;&lt;br /&gt;		//	&lt;div id="lightbox"&gt;&lt;br /&gt;		//		&lt;div id="outerImageContainer"&gt;&lt;br /&gt;		//			&lt;div id="imageContainer"&gt;&lt;br /&gt;		//				&lt;img id="lightboxImage"&gt;&lt;br /&gt;		//				&lt;div style="" id="hoverNav"&gt;&lt;br /&gt;		//					&lt;a href="#" id="prevLink"&gt;&lt;/a&gt;&lt;br /&gt;		//					&lt;a href="#" id="nextLink"&gt;&lt;/a&gt;&lt;br /&gt;		//				&lt;/div&gt;&lt;br /&gt;		//				&lt;div id="loading"&gt;&lt;br /&gt;		//					&lt;a href="#" id="loadingLink"&gt;&lt;br /&gt;		//						&lt;img src="images/loading.gif"&gt;&lt;br /&gt;		//					&lt;/a&gt;&lt;br /&gt;		//				&lt;/div&gt;&lt;br /&gt;		//			&lt;/div&gt;&lt;br /&gt;		//		&lt;/div&gt;&lt;br /&gt;		//		&lt;div id="imageDataContainer"&gt;&lt;br /&gt;		//			&lt;div id="imageData"&gt;&lt;br /&gt;		//				&lt;div id="imageDetails"&gt;&lt;br /&gt;		//					&lt;span id="caption"&gt;&lt;/span&gt;&lt;br /&gt;		//					&lt;span id="numberDisplay"&gt;&lt;/span&gt;&lt;br /&gt;		//				&lt;/div&gt;&lt;br /&gt;		//				&lt;div id="bottomNav"&gt;&lt;br /&gt;		//					&lt;a href="#" id="bottomNavClose"&gt;&lt;br /&gt;		//						&lt;img src="images/close.gif"&gt;&lt;br /&gt;		//					&lt;/a&gt;&lt;br /&gt;		//				&lt;/div&gt;&lt;br /&gt;		//			&lt;/div&gt;&lt;br /&gt;		//		&lt;/div&gt;&lt;br /&gt;		//	&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;		var objBody = document.getElementsByTagName("body").item(0);&lt;br /&gt;		&lt;br /&gt;		var objOverlay = document.createElement("div");&lt;br /&gt;		objOverlay.setAttribute('id','overlay');&lt;br /&gt;		objOverlay.style.display = 'none';&lt;br /&gt;		//objOverlay.onclick = function() { myLightbox.end(); return false; }&lt;br /&gt;		objBody.appendChild(objOverlay);&lt;br /&gt;		&lt;br /&gt;		var objLightbox = document.createElement("div");&lt;br /&gt;		objLightbox.setAttribute('id','lightbox');&lt;br /&gt;		objLightbox.style.display = 'none';&lt;br /&gt;		objBody.appendChild(objLightbox);&lt;br /&gt;	&lt;br /&gt;		var objOuterImageContainer = document.createElement("div");&lt;br /&gt;		objOuterImageContainer.setAttribute('id','outerImageContainer');&lt;br /&gt;		objLightbox.appendChild(objOuterImageContainer);&lt;br /&gt;&lt;br /&gt;		var objImageContainer = document.createElement("div");&lt;br /&gt;		objImageContainer.setAttribute('id','imageContainer');&lt;br /&gt;		objOuterImageContainer.appendChild(objImageContainer);&lt;br /&gt;			&lt;br /&gt;		var objLightboxIframe = document.createElement("iframe");&lt;br /&gt;		objLightboxIframe.setAttribute('id','lightboxIframe');&lt;br /&gt;		objLightboxIframe.style.width = iframeWidth + 'px';&lt;br /&gt;		objLightboxIframe.style.height = iframeHeight + 'px';&lt;br /&gt;		objLightboxIframe.style.border = 'none';&lt;br /&gt;		objImageContainer.appendChild(objLightboxIframe);&lt;br /&gt;    &lt;br /&gt;		var objLightboxImage = document.createElement("img");&lt;br /&gt;		objLightboxImage.setAttribute('id','lightboxImage');&lt;br /&gt;		objImageContainer.appendChild(objLightboxImage);&lt;br /&gt;	&lt;br /&gt;		var objHoverNav = document.createElement("div");&lt;br /&gt;		objHoverNav.setAttribute('id','hoverNav');&lt;br /&gt;		objImageContainer.appendChild(objHoverNav);&lt;br /&gt;	&lt;br /&gt;		var objPrevLink = document.createElement("a");&lt;br /&gt;		objPrevLink.setAttribute('id','prevLink');&lt;br /&gt;		objPrevLink.setAttribute('href','#');&lt;br /&gt;		objHoverNav.appendChild(objPrevLink);&lt;br /&gt;		&lt;br /&gt;		var objNextLink = document.createElement("a");&lt;br /&gt;		objNextLink.setAttribute('id','nextLink');&lt;br /&gt;		objNextLink.setAttribute('href','#');&lt;br /&gt;		objHoverNav.appendChild(objNextLink);&lt;br /&gt;	&lt;br /&gt;		var objLoading = document.createElement("div");&lt;br /&gt;		objLoading.setAttribute('id','loading');&lt;br /&gt;		objImageContainer.appendChild(objLoading);&lt;br /&gt;	&lt;br /&gt;		var objLoadingLink = document.createElement("a");&lt;br /&gt;		objLoadingLink.setAttribute('id','loadingLink');&lt;br /&gt;		objLoadingLink.setAttribute('href','#');&lt;br /&gt;		objLoadingLink.onclick = function() { myLightbox.end(); return false; }&lt;br /&gt;		objLoading.appendChild(objLoadingLink);&lt;br /&gt;	&lt;br /&gt;		var objLoadingImage = document.createElement("img");&lt;br /&gt;		objLoadingImage.setAttribute('src', fileLoadingImage);&lt;br /&gt;		objLoadingLink.appendChild(objLoadingImage);&lt;br /&gt;&lt;br /&gt;		var objImageDataContainer = document.createElement("div");&lt;br /&gt;		objImageDataContainer.setAttribute('id','imageDataContainer');&lt;br /&gt;		objImageDataContainer.className = 'clearfix';&lt;br /&gt;		objLightbox.appendChild(objImageDataContainer);&lt;br /&gt;&lt;br /&gt;		var objImageData = document.createElement("div");&lt;br /&gt;		objImageData.setAttribute('id','imageData');&lt;br /&gt;		objImageDataContainer.appendChild(objImageData);&lt;br /&gt;	&lt;br /&gt;		var objImageDetails = document.createElement("div");&lt;br /&gt;		objImageDetails.setAttribute('id','imageDetails');&lt;br /&gt;		objImageData.appendChild(objImageDetails);&lt;br /&gt;	&lt;br /&gt;		var objCaption = document.createElement("span");&lt;br /&gt;		objCaption.setAttribute('id','caption');&lt;br /&gt;		objImageDetails.appendChild(objCaption);&lt;br /&gt;	&lt;br /&gt;		var objNumberDisplay = document.createElement("span");&lt;br /&gt;		objNumberDisplay.setAttribute('id','numberDisplay');&lt;br /&gt;		objImageDetails.appendChild(objNumberDisplay);&lt;br /&gt;		&lt;br /&gt;		var objBottomNav = document.createElement("div");&lt;br /&gt;		objBottomNav.setAttribute('id','bottomNav');&lt;br /&gt;		objImageData.appendChild(objBottomNav);&lt;br /&gt;	&lt;br /&gt;		var objBottomNavCloseLink = document.createElement("a");&lt;br /&gt;		objBottomNavCloseLink.setAttribute('id','bottomNavClose');&lt;br /&gt;		objBottomNavCloseLink.setAttribute('href','#');&lt;br /&gt;		objBottomNavCloseLink.onclick = function() { myLightbox.end(); return false; }&lt;br /&gt;		objBottomNav.appendChild(objBottomNavCloseLink);&lt;br /&gt;	&lt;br /&gt;		var objBottomNavCloseImage = document.createElement("img");&lt;br /&gt;		objBottomNavCloseImage.setAttribute('src', fileBottomNavCloseImage);&lt;br /&gt;		objBottomNavCloseLink.appendChild(objBottomNavCloseImage);&lt;br /&gt;	},&lt;br /&gt;	&lt;br /&gt;	//&lt;br /&gt;	//	start()&lt;br /&gt;	//	Display overlay and lightbox. If image is part of a set, add siblings to imageArray.&lt;br /&gt;	//&lt;br /&gt;	start: function(imageLink) {	&lt;br /&gt;&lt;br /&gt;		hideSelectBoxes();&lt;br /&gt;&lt;br /&gt;		// stretch overlay to fill page and fade in&lt;br /&gt;		var arrayPageSize = getPageSize();&lt;br /&gt;		Element.setHeight('overlay', arrayPageSize[1]);&lt;br /&gt;		new Effect.Appear('overlay', { duration: 0.2, from: 0.0, to: 0.8 });&lt;br /&gt;&lt;br /&gt;		imageArray = [];&lt;br /&gt;		imageNum = 0;		&lt;br /&gt;&lt;br /&gt;		if (!document.getElementsByTagName){ return; }&lt;br /&gt;		var anchors = document.getElementsByTagName('a');&lt;br /&gt;		&lt;br /&gt;		var rel = imageLink.getAttribute('rel');&lt;br /&gt;&lt;br /&gt;		// if image is NOT part of a set..&lt;br /&gt;		if(!rel.match(/\[/)){&lt;br /&gt;			// add single image to imageArray&lt;br /&gt;			imageArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title')));			&lt;br /&gt;			if(rel.match(/\|/)) iframeHeight = parseInt(rel.split(/\|/)[1]);&lt;br /&gt;		} else {&lt;br /&gt;		// if image is part of a set..&lt;br /&gt;&lt;br /&gt;			// loop through anchors, find other images in set, and add them to imageArray&lt;br /&gt;			for (var i=0; i&lt;anchors.length; i++){&lt;br /&gt;				var anchor = anchors[i];&lt;br /&gt;				if (anchor.getAttribute('href') &amp;&amp; (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))){&lt;br /&gt;					imageArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title')));&lt;br /&gt;				}&lt;br /&gt;			}&lt;br /&gt;			imageArray.removeDuplicates();&lt;br /&gt;			while(imageArray[imageNum][0] != imageLink.getAttribute('href')) { imageNum++;}&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		// calculate top offset for the lightbox and display &lt;br /&gt;		var arrayPageSize = getPageSize();&lt;br /&gt;		var arrayPageScroll = getPageScroll();&lt;br /&gt;		var lightboxTop = arrayPageScroll[1] + (arrayPageSize[3] / 15);&lt;br /&gt;&lt;br /&gt;		Element.setTop('lightbox', lightboxTop);&lt;br /&gt;		Element.show('lightbox');&lt;br /&gt;		&lt;br /&gt;		this.changeImage(imageNum);&lt;br /&gt;	},&lt;br /&gt;&lt;br /&gt;	//&lt;br /&gt;	//	changeImage()&lt;br /&gt;	//	Hide most elements and preload image in preparation for resizing image container.&lt;br /&gt;	//&lt;br /&gt;	changeImage: function(imageNum) {	&lt;br /&gt;		&lt;br /&gt;		activeImage = imageNum;	// update global var&lt;br /&gt;&lt;br /&gt;		// hide elements during transition&lt;br /&gt;		Element.show('loading');&lt;br /&gt;		Element.hide('lightboxImage');&lt;br /&gt;		Element.hide('lightboxIframe');&lt;br /&gt;		Element.hide('hoverNav');&lt;br /&gt;		Element.hide('prevLink');&lt;br /&gt;		Element.hide('nextLink');&lt;br /&gt;		Element.hide('imageDataContainer');&lt;br /&gt;		Element.hide('numberDisplay');		&lt;br /&gt;		&lt;br /&gt;		if(imageArray[activeImage][0].match(/\.jpg$/)) {&lt;br /&gt;    &lt;br /&gt;			this.content_is_image = true;&lt;br /&gt;    &lt;br /&gt;  		imgPreloader = new Image();&lt;br /&gt;  		&lt;br /&gt;  		// once image is preloaded, resize image container&lt;br /&gt;  		imgPreloader.onload=function(){&lt;br /&gt;  			Element.setSrc('lightboxImage', imageArray[activeImage][0]);&lt;br /&gt;  			myLightbox.resizeImageContainer(imgPreloader.width, imgPreloader.height);&lt;br /&gt;  		}&lt;br /&gt;  		imgPreloader.src = imageArray[activeImage][0];&lt;br /&gt;    &lt;br /&gt;		} else {&lt;br /&gt;			this.content_is_image = false;&lt;br /&gt;			Element.setSrc('lightboxIframe', imageArray[activeImage][0]);&lt;br /&gt;			myLightbox.resizeImageContainer(iframeWidth, iframeHeight);&lt;br /&gt;		}&lt;br /&gt;	},&lt;br /&gt;&lt;br /&gt;	//&lt;br /&gt;	//	resizeImageContainer()&lt;br /&gt;	//&lt;br /&gt;	resizeImageContainer: function( imgWidth, imgHeight) {&lt;br /&gt;		&lt;br /&gt;		$('lightboxIframe').style.height = iframeHeight + 'px';&lt;br /&gt;&lt;br /&gt;		// get current height and width&lt;br /&gt;		this.wCur = Element.getWidth('outerImageContainer');&lt;br /&gt;		this.hCur = Element.getHeight('outerImageContainer');&lt;br /&gt;&lt;br /&gt;		// scalars based on change from old to new&lt;br /&gt;		this.xScale = ((imgWidth  + (borderSize * 2)) / this.wCur) * 100;&lt;br /&gt;		this.yScale = ((imgHeight  + (borderSize * 2)) / this.hCur) * 100;&lt;br /&gt;&lt;br /&gt;		// calculate size difference between new and old image, and resize if necessary&lt;br /&gt;		wDiff = (this.wCur - borderSize * 2) - imgWidth;&lt;br /&gt;		hDiff = (this.hCur - borderSize * 2) - imgHeight;&lt;br /&gt;&lt;br /&gt;		if(!( hDiff == 0)){ new Effect.Scale('outerImageContainer', this.yScale, {scaleX: false, duration: resizeDuration, queue: 'front'}); }&lt;br /&gt;		if(!( wDiff == 0)){ new Effect.Scale('outerImageContainer', this.xScale, {scaleY: false, delay: resizeDuration, duration: resizeDuration}); }&lt;br /&gt;&lt;br /&gt;		// if new and old image are same size and no scaling transition is necessary, &lt;br /&gt;		// do a quick pause to prevent image flicker.&lt;br /&gt;		if((hDiff == 0) &amp;&amp; (wDiff == 0)){&lt;br /&gt;			if (navigator.appVersion.indexOf("MSIE")!=-1){ pause(250); } else { pause(100);} &lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		Element.setHeight('prevLink', imgHeight);&lt;br /&gt;		Element.setHeight('nextLink', imgHeight);&lt;br /&gt;		Element.setWidth( 'imageDataContainer', imgWidth + (borderSize * 2));&lt;br /&gt;&lt;br /&gt;		this.showImage();&lt;br /&gt;	},&lt;br /&gt;	&lt;br /&gt;	//&lt;br /&gt;	//	showImage()&lt;br /&gt;	//	Display image and begin preloading neighbors.&lt;br /&gt;	//&lt;br /&gt;	showImage: function(){&lt;br /&gt;		Element.hide('loading');&lt;br /&gt;		new Effect.Appear(this.content_is_image ? 'lightboxImage' : 'lightboxIframe', { duration: 0.5, queue: 'end', afterFinish: function(){	myLightbox.updateDetails(); } });&lt;br /&gt;		this.preloadNeighborImages();&lt;br /&gt;	},&lt;br /&gt;&lt;br /&gt;	//&lt;br /&gt;	//	updateDetails()&lt;br /&gt;	//	Display caption, image number, and bottom nav.&lt;br /&gt;	//&lt;br /&gt;	updateDetails: function() {&lt;br /&gt;	&lt;br /&gt;		Element.show('caption');&lt;br /&gt;		Element.setInnerHTML( 'caption', imageArray[activeImage][1]);&lt;br /&gt;		&lt;br /&gt;		// if image is part of set display 'Image x of x' &lt;br /&gt;		if(imageArray.length &gt; 1){&lt;br /&gt;			Element.show('numberDisplay');&lt;br /&gt;			Element.setInnerHTML( 'numberDisplay', "Image " + eval(activeImage + 1) + " of " + imageArray.length);&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		new Effect.Parallel(&lt;br /&gt;			[ new Effect.SlideDown( 'imageDataContainer', { sync: true, duration: resizeDuration + 0.25, from: 0.0, to: 1.0 }), &lt;br /&gt;			  new Effect.Appear('imageDataContainer', { sync: true, duration: 1.0 }) ], &lt;br /&gt;			{ duration: 0.65 } &lt;br /&gt;		);&lt;br /&gt;	},&lt;br /&gt;&lt;br /&gt;	//&lt;br /&gt;	//	updateNav()&lt;br /&gt;	//	Display appropriate previous and next hover navigation.&lt;br /&gt;	//&lt;br /&gt;	updateNav: function() {&lt;br /&gt;&lt;br /&gt;		Element.show('hoverNav');				&lt;br /&gt;&lt;br /&gt;		// if not first image in set, display prev image button&lt;br /&gt;		if(activeImage != 0){&lt;br /&gt;			Element.show('prevLink');&lt;br /&gt;			document.getElementById('prevLink').onclick = function() {&lt;br /&gt;				myLightbox.changeImage(activeImage - 1); return false;&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		// if not last image in set, display next image button&lt;br /&gt;		if(activeImage != (imageArray.length - 1)){&lt;br /&gt;			Element.show('nextLink');&lt;br /&gt;			document.getElementById('nextLink').onclick = function() {&lt;br /&gt;				myLightbox.changeImage(activeImage + 1); return false;&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;		&lt;br /&gt;		this.enableKeyboardNav();&lt;br /&gt;	},&lt;br /&gt;&lt;br /&gt;	//&lt;br /&gt;	//	enableKeyboardNav()&lt;br /&gt;	//&lt;br /&gt;	enableKeyboardNav: function() {&lt;br /&gt;		document.onkeydown = this.keyboardAction; &lt;br /&gt;	},&lt;br /&gt;&lt;br /&gt;	//&lt;br /&gt;	//	disableKeyboardNav()&lt;br /&gt;	//&lt;br /&gt;	disableKeyboardNav: function() {&lt;br /&gt;		document.onkeydown = '';&lt;br /&gt;	},&lt;br /&gt;&lt;br /&gt;	//&lt;br /&gt;	//	keyboardAction()&lt;br /&gt;	//&lt;br /&gt;	keyboardAction: function(e) {&lt;br /&gt;		if (e == null) { // ie&lt;br /&gt;			keycode = event.keyCode;&lt;br /&gt;		} else { // mozilla&lt;br /&gt;			keycode = e.which;&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;		key = String.fromCharCode(keycode).toLowerCase();&lt;br /&gt;		&lt;br /&gt;		if((key == 'x') || (key == 'o') || (key == 'c')){	// close lightbox&lt;br /&gt;			myLightbox.end();&lt;br /&gt;		} else if(key == 'p'){	// display previous image&lt;br /&gt;			if(activeImage != 0){&lt;br /&gt;				myLightbox.disableKeyboardNav();&lt;br /&gt;				myLightbox.changeImage(activeImage - 1);&lt;br /&gt;			}&lt;br /&gt;		} else if(key == 'n'){	// display next image&lt;br /&gt;			if(activeImage != (imageArray.length - 1)){&lt;br /&gt;				myLightbox.disableKeyboardNav();&lt;br /&gt;				myLightbox.changeImage(activeImage + 1);&lt;br /&gt;			}&lt;br /&gt;		}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;	},&lt;br /&gt;&lt;br /&gt;	//&lt;br /&gt;	//	preloadNeighborImages()&lt;br /&gt;	//	Preload previous and next images.&lt;br /&gt;	//&lt;br /&gt;	preloadNeighborImages: function(){&lt;br /&gt;&lt;br /&gt;		if((imageArray.length - 1) &gt; activeImage){&lt;br /&gt;			preloadNextImage = new Image();&lt;br /&gt;			preloadNextImage.src = imageArray[activeImage + 1][0];&lt;br /&gt;		}&lt;br /&gt;		if(activeImage &gt; 0){&lt;br /&gt;			preloadPrevImage = new Image();&lt;br /&gt;			preloadPrevImage.src = imageArray[activeImage - 1][0];&lt;br /&gt;		}&lt;br /&gt;	&lt;br /&gt;	},&lt;br /&gt;&lt;br /&gt;	//&lt;br /&gt;	//	end()&lt;br /&gt;	//&lt;br /&gt;	end: function() {&lt;br /&gt;		this.disableKeyboardNav();&lt;br /&gt;		Element.hide('lightbox');&lt;br /&gt;		new Effect.Fade('overlay', { duration: 0.2});&lt;br /&gt;		showSelectBoxes();&lt;br /&gt;    Element.setSrc('lightboxIframe', 'about:blank');&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// -----------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;//&lt;br /&gt;// getPageScroll()&lt;br /&gt;// Returns array with x,y page scroll values.&lt;br /&gt;// Core code from - quirksmode.org&lt;br /&gt;//&lt;br /&gt;function getPageScroll(){&lt;br /&gt;&lt;br /&gt;	var yScroll;&lt;br /&gt;&lt;br /&gt;	if (self.pageYOffset) {&lt;br /&gt;		yScroll = self.pageYOffset;&lt;br /&gt;	} else if (document.documentElement &amp;&amp; document.documentElement.scrollTop){	 // Explorer 6 Strict&lt;br /&gt;		yScroll = document.documentElement.scrollTop;&lt;br /&gt;	} else if (document.body) {// all other Explorers&lt;br /&gt;		yScroll = document.body.scrollTop;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	arrayPageScroll = new Array('',yScroll) &lt;br /&gt;	return arrayPageScroll;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// -----------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;//&lt;br /&gt;// getPageSize()&lt;br /&gt;// Returns array with page width, height and window width, height&lt;br /&gt;// Core code from - quirksmode.org&lt;br /&gt;// Edit for Firefox by pHaez&lt;br /&gt;//&lt;br /&gt;function getPageSize(){&lt;br /&gt;	&lt;br /&gt;	var xScroll, yScroll;&lt;br /&gt;	&lt;br /&gt;	if (window.innerHeight &amp;&amp; window.scrollMaxY) {	&lt;br /&gt;		xScroll = document.body.scrollWidth;&lt;br /&gt;		yScroll = window.innerHeight + window.scrollMaxY;&lt;br /&gt;	} else if (document.body.scrollHeight &gt; document.body.offsetHeight){ // all but Explorer Mac&lt;br /&gt;		xScroll = document.body.scrollWidth;&lt;br /&gt;		yScroll = document.body.scrollHeight;&lt;br /&gt;	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari&lt;br /&gt;		xScroll = document.body.offsetWidth;&lt;br /&gt;		yScroll = document.body.offsetHeight;&lt;br /&gt;	}&lt;br /&gt;	&lt;br /&gt;	var windowWidth, windowHeight;&lt;br /&gt;	if (self.innerHeight) {	// all except Explorer&lt;br /&gt;		windowWidth = self.innerWidth;&lt;br /&gt;		windowHeight = self.innerHeight;&lt;br /&gt;	} else if (document.documentElement &amp;&amp; document.documentElement.clientHeight) { // Explorer 6 Strict Mode&lt;br /&gt;		windowWidth = document.documentElement.clientWidth;&lt;br /&gt;		windowHeight = document.documentElement.clientHeight;&lt;br /&gt;	} else if (document.body) { // other Explorers&lt;br /&gt;		windowWidth = document.body.clientWidth;&lt;br /&gt;		windowHeight = document.body.clientHeight;&lt;br /&gt;	}	&lt;br /&gt;	&lt;br /&gt;	// for small pages with total height less then height of the viewport&lt;br /&gt;	if(yScroll &lt; windowHeight){&lt;br /&gt;		pageHeight = windowHeight;&lt;br /&gt;	} else { &lt;br /&gt;		pageHeight = yScroll;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;	// for small pages with total width less then width of the viewport&lt;br /&gt;	if(xScroll &lt; windowWidth){	&lt;br /&gt;		pageWidth = windowWidth;&lt;br /&gt;	} else {&lt;br /&gt;		pageWidth = xScroll;&lt;br /&gt;	}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) &lt;br /&gt;	return arrayPageSize;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// -----------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;//&lt;br /&gt;// getKey(key)&lt;br /&gt;// Gets keycode. If 'x' is pressed then it hides the lightbox.&lt;br /&gt;//&lt;br /&gt;function getKey(e){&lt;br /&gt;	if (e == null) { // ie&lt;br /&gt;		keycode = event.keyCode;&lt;br /&gt;	} else { // mozilla&lt;br /&gt;		keycode = e.which;&lt;br /&gt;	}&lt;br /&gt;	key = String.fromCharCode(keycode).toLowerCase();&lt;br /&gt;	&lt;br /&gt;	if(key == 'x'){&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// -----------------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;//&lt;br /&gt;// listenKey()&lt;br /&gt;//&lt;br /&gt;function listenKey () {	document.onkeypress = getKey; }&lt;br /&gt;	&lt;br /&gt;// ---------------------------------------------------&lt;br /&gt;&lt;br /&gt;function showSelectBoxes(){&lt;br /&gt;	selects = document.getElementsByTagName("select");&lt;br /&gt;	for (i = 0; i != selects.length; i++) {&lt;br /&gt;		selects[i].style.visibility = "visible";&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// ---------------------------------------------------&lt;br /&gt;&lt;br /&gt;function hideSelectBoxes(){&lt;br /&gt;	selects = document.getElementsByTagName("select");&lt;br /&gt;	for (i = 0; i != selects.length; i++) {&lt;br /&gt;		selects[i].style.visibility = "hidden";&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// ---------------------------------------------------&lt;br /&gt;&lt;br /&gt;//&lt;br /&gt;// pause(numberMillis)&lt;br /&gt;// Pauses code execution for specified time. Uses busy code, not good.&lt;br /&gt;// Code from http://www.faqts.com/knowledge_base/view.phtml/aid/1602&lt;br /&gt;//&lt;br /&gt;function pause(numberMillis) {&lt;br /&gt;	var now = new Date();&lt;br /&gt;	var exitTime = now.getTime() + numberMillis;&lt;br /&gt;	while (true) {&lt;br /&gt;		now = new Date();&lt;br /&gt;		if (now.getTime() &gt; exitTime)&lt;br /&gt;			return;&lt;br /&gt;	}&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// ---------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;function initLightbox() { myLightbox = new Lightbox(); }&lt;br /&gt;Event.observe(window, 'load', initLightbox, false);&lt;br /&gt;&lt;/code&gt;</description>
      <pubDate>Wed, 09 Aug 2006 20:42:14 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/2382</guid>
      <author>timmorgan (Tim Morgan)</author>
    </item>
  </channel>
</rss>
