/*
 * jQuery Impromptu
 * By: Trent Richardson [http://trentrichardson.com]
 * Version 1.5
 * Last Modified: 3/31/2008
 * 
 * Copyright 2008 Trent Richardson
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
try
{
	jQuery.extend({	
		ImpromptuDefaults: { prefix:'jqi', buttons:{ Ok:true }, loaded:function(){}, submit:function(){return true;}, callback:function(){}, opacity:0.6, zIndex: 999, overlayspeed:'slow', promptspeed:'fast', show:'show', focus:0, useiframe:false },
		SetImpromptuDefaults: function(o){ 
			jQuery.ImpromptuDefaults = jQuery.extend({},jQuery.ImpromptuDefaults,o);
		},
		prompt: function(m,o){
			o = jQuery.extend({},jQuery.ImpromptuDefaults,o);
			
			var ie6 = (jQuery.browser.msie && jQuery.browser.version < 7);	
			var b = jQuery(document.body);
			var w = jQuery(window);
			
			var msgbox = '<div class="'+ o.prefix +'box" id="'+ o.prefix +'box">';		
			if (o.useiframe && ((jQuery.browser.msie && jQuery('object, applet').length > 0) || ie6))//if you want to use the iframe uncomment these 3 lines
				msgbox += '<iframe src="javascript:;" class="'+ o.prefix +'fade" id="'+ o.prefix +'fade"></iframe>';
			else
			{ 
				if (ie6) $('select').css('visibility','hidden');
				msgbox +='<div class="'+ o.prefix +'fade" id="'+ o.prefix +'fade"></div>';
			}	
			msgbox += '<div class="'+ o.prefix +'" id="'+ o.prefix +'"><div class="'+ o.prefix +'container"><div class="'+ o.prefix +'message">'+ m +'</div><div class="'+ o.prefix +'buttons" id="'+ o.prefix +'buttons">';
			jQuery.each(o.buttons,function(k,v){ msgbox += '<button name="'+ o.prefix +'button'+ k +'" id="'+ o.prefix +'button'+ k +'" value="'+ v +'" class="promptbutton">'+ k +'</button>'}) ;
			msgbox += '</div></div></div></div>';
	
			var jqib =b.append(msgbox).children('#'+ o.prefix +'box');
			var jqi = jqib.children('#'+ o.prefix);
			var jqif = jqib.children('#'+ o.prefix +'fade');
	
			var getWindowScrollOffset = function(){ 
				return (document.documentElement.scrollTop || document.body.scrollTop) + 'px'; 
			};		
			
			var getWindowSize = function(){ 
				var size = {
					width: window.innerWidth || (window.document.documentElement.clientWidth || window.document.body.clientWidth),
					height: window.innerHeight || (window.document.documentElement.clientHeight || window.document.body.clientHeight)
				};
				return size;
			};
			
			var ie6scroll = function(){ 
				jqib.css({ top: getWindowScrollOffset() }); 
			};
			
			var flashPrompt = function(){
				var i = 0;
				jqib.addClass(o.prefix +'warning');
				var intervalid = setInterval(function(){ 
					jqib.toggleClass(o.prefix +'warning');
					if(i++ > 1){
						clearInterval(intervalid);
						jqib.removeClass(o.prefix +'warning');
					}
				}, 100);			
			};
	
			var escapeKeyClosePrompt = function(e){
				var kC 		= (window.event) ? event.keyCode : e.keyCode; 	// MSIE or Firefox?
				var Esc 	= (window.event) ? 27 : e.DOM_VK_ESCAPE; 		// MSIE : Firefox
				var shift 	= (window.event) ? event.shiftKey : e.shiftKey; // MSIE or Firefox?
				var buttons = getElementsByClassName("promptbutton"); 
				var item	= getElement(e);
					
				if (kC == 37 || kC == 39) // pijltje links en rechts
				{
					if (kC == 37) shift = true;					
					kC = 9;
				}
				
				if		(kC==Esc) 	{removePrompt(); try{lastitem.focus();} catch(e) {}}
				else if (kC == 74) 	{o.submit(1, ""); removePrompt();}// J
				else if (kC == 78) 	{o.submit(2, ""); removePrompt();}// N
				else if (kC == 13)  {return true;} // Return
				else if (kC == 9)	//tabkey
				{
					if (item.className == "promptbutton")
					{ 
						var b 	= 0;
						var bn 	= 0;
						for (var i = 0; i < buttons.length; i++)
						{
							if (item.id == buttons[i].id) b = i;
						}
						bn = b;
						
						if (shift) 	bn = bn - 1;
						else		bn = bn + 1;
						
						if (bn < 0) 					bn = buttons.length - 1;
						else if (bn >= buttons.length) 	bn = 0;
						
						buttons[bn].focus();

						return false;
					}
					else try{buttons[0].focus();} catch (e) {}
				}
				return false;
			};
	
			var positionPrompt = function(){
				var wsize = getWindowSize();
				jqib.css({ position: (ie6)? "absolute" : "fixed", height: wsize.height, width: "100%", top: (ie6)? getWindowScrollOffset():0, left: 0, right: 0, bottom: 0 });
				jqif.css({ position: "absolute", height: wsize.height, width: "100%", top: 0, left: 0, right: 0, bottom: 0 });
				jqi.css({ position: "absolute", top: "100px", left: "50%", marginLeft: ((((jqi.css("paddingLeft").split("px")[0]*1) + jqi.width())/2)*-1) });					
			};
			
			var stylePrompt = function(){
				jqif.css({ zIndex: o.zIndex, display: "none", opacity: o.opacity });
				jqi.css({ zIndex: o.zIndex+1, display: "none" });
			}
			
			var removePrompt = function(callCallback, clicked, msg){
				jqi.remove(); 
				if(ie6)b.unbind('scroll',ie6scroll);//ie6, remove the scroll event
				w.unbind('resize',positionPrompt);			
				jqif.fadeOut(o.overlayspeed,function(){
					jqif.unbind('click',flashPrompt);
					jqif.remove();
					o.callback(clicked,msg);
					jqib.unbind('keypress',escapeKeyClosePrompt);
					jqib.remove();
					if(ie6 && !o.useiframe) $('select').css('visibility','visible');
				});
			}
			
			positionPrompt();
			stylePrompt();	
	
			//Events
			jQuery('#'+ o.prefix +'buttons').children('button').click(function(){ 
				var msg = jqi.children('.'+ o.prefix +'container').children('.'+ o.prefix +'message');
				var clicked = o.buttons[jQuery(this).text()];	
				if(o.submit(clicked,msg))				
					removePrompt(true,clicked,msg);
			});
			if(ie6) w.scroll(ie6scroll);//ie6, add a scroll event to fix position:fixed
			jqif.click(flashPrompt);
			w.resize(positionPrompt);
			jqib.keydown(escapeKeyClosePrompt);
			jqi.find('.'+ o.prefix +'close').click(removePrompt);
			
			//Show it
			jqif.fadeIn(o.overlayspeed);
			jqi[o.show](o.promptspeed,o.loaded);
			
			return jqib;
		}	
	});
} 
catch (e) {}