/*
 * jQuery Impromptu
 * By: Trent Richardson [http://trentrichardson.com]
 * Version 2.5
 * Last Modified: 3/30/2009
 * 
 * Copyright 2009 Trent Richardson
 * Dual licensed under the MIT and GPL licenses.
 * http://trentrichardson.com/Impromptu/GPL-LICENSE.txt
 * http://trentrichardson.com/Impromptu/MIT-LICENSE.txt
 * 
 */
(function($){$.prompt=function(message,options){options=$.extend({},$.prompt.defaults,options);
 $.prompt.currentPrefix=options.prefix;
 var ie6=($.browser.msie&&$.browser.version<7);
 var $body=$(document.body);
 var $window=$(window);
 var msgbox='<div class="'+options.prefix+'box" id="'+options.prefix+'box">';
 if(options.useiframe&&(($('object, applet').length>0)||ie6)){
 msgbox+='<iframe src="javascript:;" class="'+options.prefix+'fade" id="'+options.prefix+'fade"></iframe>';
 }else{if(ie6){$('select').css('visibility','hidden');
 }msgbox+='<div class="'+options.prefix+'fade" id="'+options.prefix+'fade"></div>';
 }msgbox+='<div class="'+options.prefix+'" id="'+options.prefix+'"><div class="'+options.prefix+'container"><div class="';
 msgbox+=options.prefix+'close">X</div><div id="'+options.prefix+'states"></div>';
 msgbox+='</div></div></div>';
 var $jqib=$(msgbox).appendTo($body);
 var $jqi=$jqib.children('#'+options.prefix);
 var $jqif=$jqib.children('#'+options.prefix+'fade');
 if(message.constructor==String){message={state0:{html:message,buttons:options.buttons,focus:options.focus,submit:options.submit}};
 }var states="";
 $.each(message,function(statename,stateobj){stateobj=$.extend({},$.prompt.defaults.state,stateobj);
	 message[statename]=stateobj;
	 states+='<div id="'+options.prefix+'_state_'+statename+'" class="'+options.prefix+'_state" style="display:none;"><div class="'+options.prefix+'message">'+stateobj.html+'</div><div class="'+options.prefix+'buttons">';
	 $.each(stateobj.buttons,function(k,v){states+='<button name="'+options.prefix+'_'+statename+'_button'+k+'" id="'+options.prefix+'_'+statename+'_button'+k+'" value="'+v+'">'+k+'</button>';
		 });
	 states+='</div></div>';
	 });
 $jqi.find('#'+options.prefix+'states').html(states).children('.'+options.prefix+'_state:first').css('display','block');
 $jqi.find('.'+options.prefix+'buttons:empty').css('display','none');
 $.each(message,function(statename,stateobj){var $state=$jqi.find('#'+options.prefix+'_state_'+statename);
		 $state.children('.'+options.prefix+'buttons').children('button').click(function(){var msg=$state.children('.'+options.prefix+'message');
			 var clicked=stateobj.buttons[$(this).text()];
			 var forminputs={};
			 $.each($jqi.find('#'+options.prefix+'states :input').serializeArray(),function(i,obj){if(forminputs[obj.name]===undefined){forminputs[obj.name]=obj.value;
				 }else if(typeof forminputs[obj.name]==Array){forminputs[obj.name].push(obj.value);
				 }else{forminputs[obj.name]=[forminputs[obj.name],obj.value];
				 }});
			 var close=stateobj.submit(clicked,msg,forminputs);
			 if(close===undefined||close){removePrompt(true,clicked,msg,forminputs);
			 }});
		 $state.find('.'+options.prefix+'buttons button:eq('+stateobj.focus+')').addClass(options.prefix+'defaultbutton');
			 });
		 var ie6scroll=function(){$jqib.css({top:$window.scrollTop()});
		 };
		 var fadeClicked=function(){if(options.persistent){var i=0;
		 $jqib.addClass(options.prefix+'warning');
		 var intervalid=setInterval(function(){$jqib.toggleClass(options.prefix+'warning');
			 if(i++>1){clearInterval(intervalid);
			 $jqib.removeClass(options.prefix+'warning');
			 }},100);
		 }else{removePrompt();
		 }};
		 var escapeKeyClosePrompt=function(e){var key=(window.event)?event.keyCode:e.keyCode;
			 if(key==27){removePrompt();
			 }};
			 var positionPrompt=function(){$jqib.css({position:(ie6)?"absolute":"fixed",height:$window.height(),width:"100%",top:(ie6)?$window.scrollTop():0,left:0,right:0,bottom:0});
				 $jqif.css({position:"absolute",height:$window.height(),width:"100%",top:0,left:0,right:0,bottom:0});
				 $jqi.css({position:"absolute",top:options.top,left:"50%",marginLeft:(($jqi.outerWidth()/2)*-1)});
			 };
			 var stylePrompt=function(){$jqif.css({zIndex:options.zIndex,display:"none",opacity:options.opacity});
				 $jqi.css({zIndex:options.zIndex+1,display:"none"});
				 $jqib.css({zIndex:options.zIndex});
			 };
			 var removePrompt=function(callCallback,clicked,msg,formvals){$jqi.remove();
				 if(ie6){$body.unbind('scroll',ie6scroll);
				 }$window.unbind('resize',positionPrompt);
				 $jqif.fadeOut(options.overlayspeed,function(){$jqif.unbind('click',fadeClicked);
						 $jqif.remove();
						 if(callCallback){options.callback(clicked,msg,formvals);
						 }$jqib.unbind('keypress',escapeKeyClosePrompt);
						 $jqib.remove();
						 if(ie6&&!options.useiframe){$('select').css('visibility','visible');
						 }});
			 };
			 positionPrompt();
			 stylePrompt();
			 if(ie6){$window.scroll(ie6scroll);
			 }$jqif.click(fadeClicked);
			 $window.resize(positionPrompt);
			 $jqib.keypress(escapeKeyClosePrompt);
			 $jqi.find('.'+options.prefix+'close').click(removePrompt);
			 $jqif.fadeIn(options.overlayspeed);
			 $jqi[options.show](options.promptspeed,options.loaded);
			 $jqi.find('#'+options.prefix+'states .'+options.prefix+'_state:first .'+options.prefix+'defaultbutton').focus();
			 return $jqib;
};
$.prompt.defaults={prefix:'jqi',buttons:{Cancel:true},loaded:function(){},submit:function(){return true;
},callback:function(){},opacity:0.6,zIndex:999,overlayspeed:'slow',promptspeed:'fast',show:'fadeIn',focus:0,useiframe:false,top:"15%",persistent:true,state:{html:'',buttons:{Cancel:true},focus:0,submit:function(){return true;
}}};
$.prompt.currentPrefix=$.prompt.defaults.prefix;
$.prompt.setDefaults=function(o){$.prompt.defaults=$.extend({},$.prompt.defaults,o);
};
$.prompt.setStateDefaults=function(o){$.prompt.defaults.state=$.extend({},$.prompt.defaults.state,o);
};
$.prompt.getStateContent=function(state){return $('#'+$.prompt.currentPrefix+'_state_'+state);
};
$.prompt.goToState=function(state){$('.'+$.prompt.currentPrefix+'_state').slideUp('slow');
	$('#'+$.prompt.currentPrefix+'_state_'+state).slideDown('slow',function(){$(this).find('.'+$.prompt.currentPrefix+'defaultbutton').focus();
			});
};
$.prompt.nextState=function(){var $next=$('.'+$.prompt.currentPrefix+'_state:visible').next();
	$('.'+$.prompt.currentPrefix+'_state').slideUp('slow');
	$next.slideDown('slow',function(){$next.find('.'+$.prompt.currentPrefix+'defaultbutton').focus();
			});
};
$.prompt.prevState=function(){var $next=$('.'+$.prompt.currentPrefix+'_state:visible').prev();
	$('.'+$.prompt.currentPrefix+'_state').slideUp('slow');
	$next.slideDown('slow',function(){$next.find('.'+$.prompt.currentPrefix+'defaultbutton').focus();
			});
};
$.prompt.close=function(){$('#'+$.prompt.currentPrefix+'box').fadeOut('fast',function(){$(this).remove();
		});
};
})(jQuery);

