/**
 * The Sexy Curls JQuery Plugin
 * By Elliott Kember - http://twitter.com/elliottkember
 * Modified by John James to add optional clickable link on turn_wrapper, 
 *    with options to run Javascript, open page in new window or in current window when clicked, 
 *    and to dynamically add the target image, so the whole effect is built and run by the plugin  
 * Released under the MIT license (MIT-LICENSE.txt)
 * 
 * My only request is: please don't over-use this plugin.
 * If this ends up being used all over the internet, and becomes "that annoying effect", I'll be upset.    
 *
 * I dragged a curl, and I liked it - I hope @jeresig don't mind it.
 */

(function($){
	$.fn.fold = function(options) {
		var ie55 = (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion) == 4 && navigator.appVersion.indexOf("MSIE 5.5") != -1);
		var ie6 = (navigator.appName == "Microsoft Internet Explorer" && parseInt(navigator.appVersion) == 4 && navigator.appVersion.indexOf("MSIE 6.0") != -1);
		// We just won't show it for IE5.5 and IE6. Go away. I'm really tempted to write "document.location= 'http://www.getfirefox.com';" here.
		if (ie55 || ie6) {this.remove(); return true;}
  
		// You don't have to specify options!
		options = options || {};
    
		// Default awesomeness
		var defaults = {
			directory: '.',         // The directory we're in
			side: 'left',           // change me to "right" if you want rightness
			turnImage: 'fold.png',  // The triangle-shaped fold image
			maxHeight: 400,         // The maximum height. Duh.
			startingWidth: 80,      // The height and width 
			startingHeight: 80,     // with which to start (these should probably be camelCase, d'oh.)
			autoCurl: false         // If this is set to true, the fold will curl/uncurl on mouseover/mouseout.
		};

		// Change turnImage if we're running the default image, and they've specified 'right'
		if (options.side == 'right' && !options.turnImage) defaults.turnImage = 'fold-sw.png';
  
		// Merge options with the defaults
		var options = $.extend(defaults, options);
    
		// Set up the wrapper objects
		var turn_hideme = $('<div id="turn_hideme">');
		var turn_object = $('<div id="turn_object">');
		var turn_wrapper = $('<div id="turn_wrapper">');
		var fold_imgage = $('<img id="turn_fold" src="'+ (options.directory+'/'+options.turnImage) +'">');
		// Set starting width and height of our turn-o-ma-bob
		turn_object.css({
			width: options.startingWidth, 
			height: options.startingHeight
		});
  
		// There are different CSS considerations for a top-right fold.
		if (options.side == 'right') turn_wrapper.addClass('right');
		
		// Rappin', I'm rappin' - I'm rap-rap-rappin'.
		// Add the target image to the DOM and wrap it inside turn_hideme, append fold_image, 
		//    and wrap both inside turn_object, inside turn_wrapper
		var targetImage = '<img id="target" src="' + options.targetImg + '" alt="" \/>';
		$(targetImage).appendTo('body').wrap(turn_wrapper).wrap(turn_object).after(fold_imgage).wrap(turn_hideme);
    
		// If you want autoCurl, you don't get scrolling. Why? Because it looks silly.
    
		turn_wrapper = $('#turn_wrapper');
		turn_object = $('#turn_object');

		if (!options.autoCurl) {
			// Hit 'em with the drag-stick because it ain't gonna curl itself!  
			// Keep the same aspect ratio as the original.
			turn_object.resizable({ 
				maxHeight: options.maxHeight, 
				aspectRatio: true,
				handles: options.side == 'left' ? 'se' : 'sw'
			});
		} else {
			// Thanks to @zzzrByte for this bit!
			// MouseOver and MouseOut event handlers to open and close the curl
			turn_wrapper.hover(
				function(){
					turn_object.stop().animate({
					width: options.maxHeight,
					height: options.maxHeight
					});
				},
				function(){
					turn_object.stop().animate({
						width: options.startingHeight,
						height: options.startingHeight
					});
				}
			);
			// If they've specified a runJava, jumpTo or newWindow, setup an 'onclick' handler to
			// close the curl and then run or jump to wherever you asked
			if ((options.runJava) || (options.jumpTo) || (options.newWindow)) {
				if (options.runJava) 
					{var tmpFunc = new Function(options.runJava);}
				else if (options.jumpTo) 
					{var funCode = 'window.location.href="' + options.jumpTo + '";';
					 var tmpFunc = new Function(funCode);}
				else if (options.newWindow)
					{var funCode = 'window.open("' + options.newWindow + '");';
					 var tmpFunc = new Function(funCode);}
				turn_wrapper.click(
					function(){
						turn_object.stop().animate({
							width: options.startingHeight,
							height: options.startingHeight
						});
						tmpFunc();
					}
				);
			}
		}
	}
})
(jQuery);

