

// open forms and content in jquery dialog
function dialog(selector, contentSelector, width){
	//////("attaching dialogs....");
	$(selector).live('click', function(){
		
		var currentpage = $(this).parents('.b-page').find('.b-counter').text();
		var pathname = '&magpage=/page/' + currentpage;
		
		var url = 'http://'+document.domain+$(this).attr('href') + pathname;
		//(url);
		
		//////(url);
		if(url.search("look/insert_product")>-1){
			// Special handler for add product form
			open_add_product_dialog(url);
			
			/*
			oldurl = url;
			url = "<div id='product-pop-up-special'><div class='left pop-up-form-title'><h1 id='page-title' class='title'>Add Product</h1></div><div class='close-pop-up-product right'><a role='button' class='ui-dialog-titlebar-close ui-corner-all' href='javascript:'><span class='ui-icon ui-icon-closethick'>close</span></a></div><div class='clear'></div><iframe id='product-bookmark-form-iframe' scrolling='no' frameborder='0' width='690' height='480' src='"+oldurl+"'></iframe></div>";
			//////('iframe url: ' + url);
			////('changed');
				$(url).dialog({
						modal: true,
						width: 730,
						height: 570,
						resizable: false
						
					});
			*/
			/*$('.iframecontent').load(oldurl, function() {
				//$('.iframecontent').find
			});*/
			/*
			$('.close-pop-up-product').click(function() {
		 		//////('close pop up');
		 		$('#product-pop-up-special').dialog('destroy');
		 		$('#product-pop-up-special, .ui-dialog, .ui-widget-overlay').remove();
		 	});*/
			
		} else if(url.search("node/add/text")>-1) {
			//trace('node/add/text, url='+url);
			// Special handler for add text form
			open_add_text_dialog(url);
			
		} else if(url.search("node/add/image")>-1) {
			// Special handler for add image form
			open_add_image_dialog(url);
			
                } else if(url.search("node/add/color")>-1) {
                        // Special handler for add color form
                        open_add_color_dialog(url);
                } else if(url.search("node/add/video2")>-1) {
                        // Special handler for add video form
                        open_add_video_dialog(url);
		} else {
			
			$('body').prepend('<div id="loading" style="height:100%; width:100%; opacity:0.5; position:fixed; left:0; right:0; background:#000; z-index:999; font-size:70px; text-align:center; display:none"><h2>Loading...</h2></div>');
			$('#loading').fadeIn('fast');
			
                        $('body').append('<div id="result" style="display:none height:100px; width:100px;"><h2>Loading...</h2></div>');
			
			$("#result").load(url, function(){
				$('#loading').fadeOut('fast', function(){
					$("#result").dialog({
						modal: true,
						width: width,
						height: 'auto',
						resizable: false
						
					});
					//////('wiring click event');
					$('.close-pop-up').click(function() {
				 		//////('close pop up');
				 		$('#result').dialog('destroy'); 
				 		$('#loading,#result').remove();
				 	});
					//var oldconfig;
					//////(CKEDITOR.instances);
					
					// we set a interval to check if instance has been defined
					
					//timerid = setTimeout("checkEditorInstance()",1000);
					
					//setInterval("checkEditorCount()",500);
					
				});
			});
		}
		
		return false;
	});
}
;
var timerid = -1;
var pauseLoadFrontPageMag = false;

function checkEditorCount() {
	if($('.ui-dialog #result').size()>0)
	{
		$('.ui-dialog').height($('.ui-dialog #result #page').height()+20);
		if($('span#cke_edit-body-und-0-value').size()>1)
		{
			$('span#cke_edit-body-und-0-value').eq(1).remove();
		}
	}
}

function checkEditorInstance() {
	console.log('checkEditorInstance');
	if(Drupal.ckeditorInstance!=undefined) {
		var textareaid = $("#result textarea").attr('id');
		////("instance ready but resetting");
		clearInterval( timerid );
		
		var textareaid = $("#result textarea").attr('id');
		Drupal.ckeditorOff( textareaid );
		
		////(textareaid);
		////(Drupal.ckeditorInstance);
		
		Drupal.ckeditorOn( textareaid );
		
		$('.ui-dialog').height($('.ui-dialog #result').height()+20);
		
		
	} else {
		////("instance not ready");
		/*if(isEmpty(CKEDITOR.instances))
		{
			$('#result').find('textarea').each(function() {
				//alert("drupal on");
				Drupal.ckeditorOn( $(this).attr('id') );
			});
		}*/
	}
}
Drupal.behaviors.your_custom_behavior = function(context) {
  if (typeof CKEDITOR != 'undefined' && CKEDITOR.dialog) {
    CKEDITOR.dialog.prototype.original_hide = CKEDITOR.dialog.prototype.hide;

    CKEDITOR.dialog.prototype.hide = function() {
      this.original_hide();
      $('.cke_dialog_background_cover').remove();
    }
  }
}
$ = jQuery.noConflict();

$(document).ready(function(){
	// You may want to place these lines inside an onload handler
   /*CFInstall.check({
     mode: "overlay",
     destination: "http://staging.fashionspace.com"
   });*/
   // my ninja is better than urs
	//$('.sticky-enabled').removeClass('sticky-enabled');
	/*if($('.page-messages').size()>0)
	{
		$('.sticky-header').attr('style','');
		$(window).unbind('scroll.drupal-tableheader');
		$(window).unbind('resize.drupal-tableheader');
		$(window).unbind('drupalDisplaceAnchor.drupal-tableheader');
		$(window).unbind('drupalDisplaceFocus.drupal-tableheader');
	}*/
	
	$('body').click(function() {
		$('body #top-ajax-search-result').remove();
	});
	
	
	
	$('#block-search-form .form-item-search-block-form input[type="text"]').attr('autocomplete','off');
	
	// Hacks to change the default forms and field bahaviours
	$('body.page-user-register #block-block-9 input[value="Log in"]').attr("value",'Sign In');
	$('body.page-user-register #content input[value="Create new account"]').attr("value",'Register');
	$('#header #block-search-form input[type="text"]').attr("value",'Search');
	$('body.page-user-register #sidebar-first .form-item-pass').append('<a class="forgot" href="/user/password">Forgot Password?</a>');
	//$('#block-panels-mini-categories-and-brands').prepend('<span class="pink-corner"></span>');
	$('body.page-node-add-magazine #content .section').prepend('<div class="steps"></div>');
	$('body.page-node-add-magazine #content #edit-field-template label.option:first').addClass('magazine_selected');
	$('body.page-node-add-magazine #content #edit-group-theme-und').append('<div class="clear"></div>');
	$('body.page-node-add-magazine #content form#magazine-node-form').append('<input type="button" value="Next" class="mag_step" />');
	
	$('#block-apachesolr-search-bundle li:contains("[* TO *]")').remove();
	
	$('body.page-node-add-look #content .section').prepend('<div class="steps"></div>');
	$('body.page-node-add-look #content form#look-node-form').append('<input type="button" value="Next" class="mag_step" />');

	$('body.node-type-magazine #block-system-main #magazine_view .action-links-field-collection-add').each(function(){
		$("#magazine_view ul.actions").append($(this).html());
		$(this).html('');
	});

//	var i = 1;
//	$('body.node-type-magazine .field-name-field-add-look .field-items .field-item').each(function(){
//		if(i%2 == 0 ){
//			$("body.node-type-magazine .looks ul.pages").append('<li>'+$(this).html()+'</li>');
//			$(this).html('');
//		}
//		i++;
//	});

	//node_magazine();
	if($('.b-page').size() <= 0)
	{

		$('body.node-type-magazine #block-system-main #magazine_view .field-item:even').css('border','1px dashed green');
		
		// Search Box
		$('#header #block-search-form input[type="text"]').click(function(){
			$(this).attr("value", "");
		});
		
		// Select Template
		$('body.page-node-add-magazine #content #edit-group-theme-und label').live('click', function(){
			$('body.page-node-add-magazine #content #edit-group-theme-und label').removeClass('magazine_selected');
			$(this).addClass('magazine_selected');
		});
	
		// Create Magazine Steps
		$('body.page-node-add-magazine #content form#magazine-node-form input.mag_step').live('click', function(){
			if($('input#edit-title').val()=="")
			{
				$('.look-name-validate-msg').show();
			} else {
				$('body.page-node-add-magazine #content #magazine-node-form div.form-type-textfield, body.page-node-add-magazine #content #magazine-node-form div#edit-field-mag-tags, body.page-node-add-magazine #content .form-item #edit-field-tags-und').hide();
				$(this).hide();
				$('.field-desc-pg2').show();
				$('.mag-step-back').show();
				$('body.page-node-add-magazine #content #edit-actions').show();
				$('body.page-node-add-magazine #content .field-desc, .tag-title-custom').hide();
				$('body.page-node-add-magazine #content #magazine-node-form #edit-field-template').show();
				$('body.page-node-add-magazine #content #edit-group-theme, body.page-node-add-magazine #content #edit-actions').show();
				$('body.page-node-add-magazine #content h1#page-title').text("Pick a Template");
				$('body.page-node-add-magazine #content .section .steps').css('background-position','0 0');
				$('.page-node-add-magazine .create-mag-templates').show();
			}
		});
		
		$('.btn-mag-step-back').click(function(){
			$('body.page-node-add-magazine #content #magazine-node-form div.form-type-textfield, body.page-node-add-magazine #content #magazine-node-form #edit-field-tags-und').show();
			
			$('body.page-node-add-magazine #content #edit-group-theme, body.page-node-add-magazine #content #edit-actions').hide();
			
			$('.field-desc-pg2').hide();
			$('.mag-step-back').hide();
			$('body.page-node-add-magazine #content form#magazine-node-form input.mag_step').show();
			$('body.page-node-add-magazine #content .field-desc, .tag-title-custom').show();
			$('body.page-node-add-magazine #content #magazine-node-form #edit-field-template').hide();
			$('body.page-node-add-magazine #content #edit-actions').hide();
			
			$('body.page-node-add-magazine #content h1#page-title').text("Create magazine");
			$('body.page-node-add-magazine #content .section .steps').css('background-position','bottom left');
			$('.look-name-validate-msg').hide();
			$('.page-node-add-magazine .create-mag-templates').hide();
		});
		
		
		
		// Create Look Steps
		$('body.page-node-add-look #content form#look-node-form input.mag_step').live('click', function(){
			if($('input#edit-title').val()=="")
			{
				$('.look-name-validate-msg').show();
			} else {
				$('body.page-node-add-look #content #look-node-form div.form-type-textfield, body.page-node-add-look #content #look-node-form div#edit-field-mag-tags, body.page-node-add-look #content .form-item #edit-field-tags-und').hide();
				$(this).hide();
				$('.field-desc-pg2').show();
				$('.mag-step-back').show();
				$('body.page-node-add-look #content #edit-actions').show();
				$('body.page-node-add-look #content .field-desc, .tag-title-custom').hide();
				$('body.page-node-add-look #content #look-node-form #edit-field-template').show();
				$('body.page-node-add-look #content #edit-group-theme, body.page-node-add-look #content #edit-actions').show();
				$('body.page-node-add-look #content h1#page-title').text("Pick a Template");
				$('body.page-node-add-look #content .section .steps').css('background-position','0 0');
				$('.page-node-add-look .create-mag-templates').show();
			}
		});
		
		$('.btn-mag-step-back').click(function(){
			$('body.page-node-add-look #content #look-node-form div.form-type-textfield, body.page-node-add-look #content #look-node-form #edit-field-tags-und').show();
			
			$('body.page-node-add-look #content #edit-group-theme, body.page-node-add-look #content #edit-actions').hide();
			
			$('.field-desc-pg2').hide();
			$('.mag-step-back').hide();
			$('body.page-node-add-look #content form#look-node-form input.mag_step').show();
			$('body.page-node-add-look #content .field-desc, .tag-title-custom').show();
			$('body.page-node-add-look #content #look-node-form #edit-field-template').hide();
			$('body.page-node-add-look #content #edit-actions').hide();
			
			$('body.page-node-add-look #content h1#page-title').text("Create Page");
			$('body.page-node-add-look #content .section .steps').css('background-position','bottom left');
			$('.look-name-validate-msg').hide();
			$('.page-node-add-look .create-mag-templates').hide();
		});
		
		dialog("body.node-type-magazine .magazine-looks .node-look .field-name-og-node-link .field-item a", "script,#content", 580);
		
		
		// page flip
		$('body.node-type-magazine .pane-magazine-panel-pane-1 .view-content').addClass('b-load').wrap('<div class="magazine-looks"></div>');

		$('.magazine-looks').bind('bookletready', function() {
			// show the booklet when the js is ready
			$('.view-magazine').css('display','block');
			$('.magazine-load-placeholder').remove();
			clearInterval(globeflashinterval);
			//console.log('node look count: ' + $('.magazine-looks .node-look').length);
			checkOgLinks();
			
		});
		
		$('.magazine-looks').booklet({
			manual: true,
			width:	1024,
			height:	600,
			pagePadding: 0,
			overlays: false,
			hash: true,
			arrows: true,
			keyboard: false,
			menu: '#mag-page-menu',
			pageSelector: true
		});
		
		// ###################   <Front Page Magainze>   ##########################
		$('.front .view-nodequeue-2 .view-content .item-list').append($('.front .view-nodequeue-2 .view-content ul').html());
		$('.front .view-nodequeue-2 .item-list ul').remove();
		$('.front .view-nodequeue-2 .view-content .item-list').addClass('b-load');
		/*
		$('.front .view-nodequeue-2 .view-content .item-list').find('a').each(function(){
			console.log($(this).html());
			console.log($(this).html().length);
			if ($(this).html() == ''){
				console.log('Removed: '+$(this).html());
				$(this).remove;
			}
		});
		*/

		var pages = $('.front .view-nodequeue-2 .view-content .item-list').children();
		console.log(pages);
		if (pages.length>6){
			$(pages[4]).remove();
			console.log('Removed page 4');
			console.log(pages);
		}
		/*
		for(i=pages.length-1; i>=0; i--){
			console.log(pages[i].html());
		}
		*/
		
		$('.front .view-nodequeue-2 .view-content').bind('bookletready', function() {
			// show the booklet when the js is ready
			$('#block-views-nodequeue-2-block').css('display','block');
			//$('.magazine-load-placeholder').remove();
		});
		
		var countDown = 30;
		/*
		vat timer_id = setInterval(
			function (){ 
				console.log(countDown); 
				countDown--; 
				if (countDown == 0){
					clearInterval(timer_id);
				}
			},1000);
		}
		*/
		/*
		setTimeout(
			function (){
				$('.front .view-nodequeue-2 .view-content').booklet({
					manual: true,
					width:	1024,
					height:	600,
					pagePadding: 0,
					overlays: false,
					hash: true,
					arrows: true,
					keyboard: false
				});
			}
			,30000);
		*/
		
		if (!pauseLoadFrontPageMag){
			$('.front .view-nodequeue-2 .view-content').booklet({
				manual: true,
				width:	1024,
				height:	600,
				pagePadding: 0,
				overlays: false,
				hash: true,
				arrows: true,
				keyboard: false
			});
		}
		// ###################   </Front Page Magainze>  ##########################

		
		var notificationArray = new Array();
		var extraresults = 0;
		var showcount = 0;
		if($('pop-up-result-row-more-results-container-generated').size()>0)
		{
			extraresults = parseInt($('pop-up-result-row-more-results-container-generated').attr('morecount'));
		}
		if($('.pop-up-result-system table tr').size() > 0)
		{
			showcount = $('.pop-up-result-system table tr').size();
		}
		var totalcount = extraresults + showcount;
		//console("total count before: " + totalcount);
		if(showcount > 5)
		{
			totalcount--;
		}
		//(totalcount);
		 $('.pop-up-result-system table tr').each(function() {
		 	var tmsg = $(this).find('.pop-up-result-row-message').html();
		 	var ttimestamp = $(this).find('.pop-up-result-row-timestamp').html();
		 	var timage = $(this).find('.pop-up-result-row-image-container img').attr('src');
		 	var tdestinationurl = $(this).find('.pop-up-result-row-message a').attr('href');
		 	var newobj = {msg:tmsg,picture:timage,timestamp:ttimestamp,destinationurl:tdestinationurl};
		 	notificationArray.push(newobj);
		 });
		 //console("total count: " + totalcount);
		 $('#block-block-11').popupResult({'resultSource':notificationArray,resultcount:totalcount});
		 
		 
		 //
		 $('#mag-embed-getembed').click(function() {
			var embedcode = '<div id="embed-mag-pop-up-ui">You can copy the following code to your blog to embed this magazine: <textarea onclick="this.focus();this.select()" readonly="readonly" class="embed-code-block"><iframe src="'+pageURL+'/'+drupal_uid+'" width="520px" height="780px" frameborder="0" scrolling="no"></iframe></textarea><div class="popupactions"><input type="button" value="Close" id="btnCloseEmbedPopup" /></div></div>';
			$(embedcode).dialog({resizable:false});
			$('#btnCloseEmbedPopup').click(function() {
				$('#embed-mag-pop-up-ui').dialog("destroy");
				$('#embed-mag-pop-up-ui').remove();
			});
		 });
		 
		 $('#mag-lookembed-getembed').live('click',function() {
			 var lookembedurl = $(this).attr('lookembedurl');
			var embedcode = '<div id="embed-mag-pop-up-ui">You can copy the following code to your blog to embed this page: <textarea onclick="this.focus();this.select()" readonly="readonly" class="embed-code-block"><iframe src="'+lookembedurl+'/'+drupal_uid+'" width="520px" height="780px" frameborder="0" scrolling="no"></iframe></textarea><div class="popupactions"><input type="button" value="Close" id="btnCloseEmbedPopup" /></div></div>';
			$(embedcode).dialog({resizable:false});
			$('#btnCloseEmbedPopup').click(function() {
				$('#embed-mag-pop-up-ui').dialog("destroy");
				$('#embed-mag-pop-up-ui').remove();
			});
		 });
		 
		 $('.node-form .form-actions').append('<img src="/sites/all/themes/fashion/images/ajax-loader.gif" class="generic-ajax-load"><span class="generic-ajax-load">Saving...</span>');
		 
		 $('.search-result-mag-products').mouseenter(function() {
			$(this).css('overflow','visible');
			$(this).css('position','relative');
			$(this).css('z-index','1000');
			//$(this).find('.single-img-container').css('border','1px solid #cccccc');
			//$(this).find('.single-img-container').height($(this).find('.single-img-container img').height());
		 });
		$('.search-result-mag-products .img-wrapper, .search-result-mag-products .single-img-container').hover(
			function() {
				console.log('.img-wrapper over');
				var img = $(this).find('.hidden_large_image');
				console.log(img);
				//img.css('display','block').css('position','absolute').css('z-index','1000');
				$('BODY').append('<div id="floating-img"></div>');
				img.clone().appendTo('BODY #floating-img');
				$("BODY #floating-img .hidden_large_image").css('display','block');
				
				//$(this).find('.single-img-container').css('border','1px solid #cccccc');
				//$(this).find('.single-img-container').height($(this).find('.single-img-container img').height());
				$(this).mousemove(
					function (event) {
						//check which area the mouse is at.
						var w = $(window).width();
						var h = $(window).height();
						var x = event.pageX + 10;
						var y = event.pageY + 10;
						if (event.pageX > ((w/3) * 2)){
							x = event.pageX - 300 - 10;
						}
						if (event.pageY > ((h/3) * 2)){
							y = event.pageY - 300 - 10;
						}
						$("BODY #floating-img").offset({ top: y, left: x });
					}
				);
			},function() {
				console.log('.img-wrapper out');
				//var img = $(this).find('.hidden_large_image');
				//console.log(img);
				//img.css('display','none').css('z-index','0');
				
				var floating_img = $('#floating-img');
				console.log(floating_img);
				floating_img.remove();
				
				//$(this).find('.single-img-container').css('border','1px solid #cccccc');
				//$(this).find('.single-img-container').height($(this).find('.single-img-container img').height());
			}
		);
		 $('.search-result-mag-products').mouseleave(function() {
			$(this).css('overflow','hidden');
			$(this).css('position','relative');
			$(this).css('z-index','1');
			//$(this).find('.single-img-container').css('border','0px solid #cccccc');
		 });
		 
		 $(".page-manage-products").ajaxComplete(function(){
			 console.log('ajax completed');
			 $(this).find('.manage-products-edit-product a, .views-field-delete-node a').each(function() {
				
				var windowcomponents = $.url.parse(window.location.href);
				//windowcomponents.path
				var urlcomponents = $.url.parse($(this).attr('href'));
				//////console.log(urlcomponents);
				//var currentpage = parseInt($('#search-current-page').val());
				if(urlcomponents.params!=undefined)
				{
					urlcomponents.params.destination = unescape(windowcomponents.path).substring(1);
				}
				delete urlcomponents.query;
				delete urlcomponents.source;
				var newurl = $.url.build(urlcomponents);
				$(this).attr('href', newurl);
			 });
		});
		 
	}
	
	// fix for IE9 font load issue
	if($.browser.msie)
	{
		setTimeout( function() { $('body').css('font-family','Arial'); }, 500);
	} else {
		$('body').css('font-family','Arial');
	}
	
	addShowMessagesButton();
	alter_user_form();
	
});

function checkOgLinks()
{

	$('.magazine-looks .node-look').each(function() {
		var nodeid = $(this).attr('id').replace('node-','');
		// the links are not rendered, we must render the links
		var objref = $(this).find('.field-name-og-node-link .field-item');
		
		if(objref.eq(1).find('a').length < 1)
		{
			objref.eq(0).html('<a href="/node/add/image?gids_node%5B%5D='+nodeid+'">Image</a>');
			objref.eq(1).html('<a href="/look/insert_product?gids_node%5B%5D='+nodeid+'">Product</a>');
			objref.eq(2).html('<a href="/node/add/text?gids_node%5B%5D='+nodeid+'">Text</a>');
			objref.eq(3).html('<a href="/node/add/video2?gids_node%5B%5D='+nodeid+'">Video</a>');
		}
	});
}

//"+product_id+","+product_image+","+product_title+","+product_currency+","+product_price+","+product_description+","+product_url
function product_embed(pid,product_image,product_title,product_currency,product_price,product_description,product_url,isbuy) {
	//console.log("pembed click");
	isbuy = typeof(isbuy) != 'undefined' ? isbuy : 0;
	
	if(product_description.length > 350)
	{
		product_description = product_description.substr(0,350) + "..";
	}
	
	var actionTerm = "Enquire Now";
	
	var butstyle = "background-color:#c83131;color:#ffffff;font-size:12px;font-weight:bold;padding:3px 5px;width: 80px;text-align: center;margin-right:5px;";
	if(isbuy==1)
	{
		actionTerm = "Buy";
		butstyle = "background-color:#c83131;color:#ffffff;font-size:12px;font-weight:bold;padding:3px 17px;width: 25px;";
	}
	
	 var embedcode = '<div id="embed-mag-pop-up-ui" class="embed-product-ui">';
	embedcode += 'You can copy the following code to your blog to embed this product: ';
	embedcode += '<textarea onclick="this.focus();this.select()" readonly="readonly" class="embed-code-block">';
	embedcode += '<div style="width:300px; height: 250px; border:1px solid #dddddd; padding: 10px; font-family:arial;">';
	embedcode += "<table><tr>";
	embedcode += "<td width='100px' height='100px'><img src='"+product_image+"' class='pd-product-avatar embed-product-avatar' /></td>";
	//product_url = drupal_base_url + '/node/' + pid+'/'+drupal_uid;
	product_url = drupal_base_url + '/buy/' + pid+'/'+drupal_uid;
	console.log(product_url);
	embedcode += "<td style='vertical-align:top;'><table><tr><td width='66px'><a href='"+product_url+"' target='_blank'><div style='"+butstyle+"'>"+actionTerm+"</div></a></td><td><iframe src='http://www.facebook.com/plugins/like.php?href&amp;layout=button_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font&amp;colorscheme=light&amp;height=21' scrolling='no' frameborder='0' style='border:none; overflow:hidden; width:50px; height:21px;' allowTransparency='true'></iframe></td></tr><tr><td colspan='2' style='font-size: 14px; padding:6px 0px; font-weight:bold;'>"+product_title+"</td></tr><tr><td colspan='2' style='font-size:11px;color:#454545'>"+product_currency + " $" + product_price+"</td></tr></table></td>";
	embedcode += "</tr><tr><td colspan='2' style='font-size:11px; font-weight: bold;color:#555555;'>Description:</td></tr><tr><td colspan='2' style='font-size:11px; color:#555555;'>"+product_description+"</td></tr></table>";
	embedcode += '<div style="margin-top: 10px;font-size: 11px;color: #999;">As featured on <a style="margin-top: 10px;font-size: 11px;color: #999;" href="http://fashionspace.com" target="_blank">FashionSpace.com</a></div>';
	embedcode += '</div>';
	embedcode += '</textarea>';
	
	embedcode += '<div style="font-size: 11px; margin-top: 10px;">Preview:</div>';
	
	embedcode += '<div style="width:300px; height: 250px; border:1px solid #dddddd; padding: 10px; font-family:arial;">';
	embedcode += "<table><tr>";
	embedcode += "<td width='100px' height='100px'><img src='"+product_image+"' class='pd-product-avatar embed-product-avatar' /></td>";
	embedcode += "<td style='vertical-align:top;'><table><tr><td width='66px'><a href='"+product_url+"' target='_blank'><div style='"+butstyle+"'>"+actionTerm+"</div></a></td><td><iframe src='http://www.facebook.com/plugins/like.php?href&amp;layout=button_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font&amp;colorscheme=light&amp;height=21' scrolling='no' frameborder='0' style='border:none; overflow:hidden; width:50px; height:21px;' allowTransparency='true'></iframe></td></tr><tr><td colspan='2' style='font-size: 14px; padding:6px 0px; font-weight:bold;'>"+product_title+"</td></tr><tr><td colspan='2' style='font-size:11px;color:#454545'>"+product_currency + " $" + product_price+"</td></tr></table></td>";
	embedcode += "</tr><tr><td colspan='2' style='font-size:11px; font-weight: bold;color:#555555;'>Description:</td></tr><tr><td colspan='2' style='font-size:11px; color:#555555;'>"+product_description+"</td></tr></table>";
	embedcode += '<div style="margin-top: 10px;font-size: 11px;color: #999;">As featured on <a style="margin-top: 10px;font-size: 11px;color: #999;" href="http://fashionspace.com" target="_blank">FashionSpace.com</a></div>';
	embedcode += '</div>';
	
	embedcode += '<div class="popupactions"><input type="button" value="Close" id="btnCloseEmbedPopup" /></div>';
	embedcode += '</div>';
	$(embedcode).dialog({resizable:false,width:350,height:450});

	$('#btnCloseEmbedPopup').click(function() {
		$('#embed-mag-pop-up-ui').dialog("destroy");
		$('#embed-mag-pop-up-ui').remove();
	});
	if($('.embed-product-avatar').width() > $('.embed-product-avatar').height() )
	{
		$('.embed-product-avatar').attr('width','100px');
	} else {
		$('.embed-product-avatar').attr('height','100px');
	}
}

function product_embed2(pid,product_image,product_title,product_currency,product_price,product_description,product_url,isbuy) {
	
	isbuy = typeof(isbuy) != 'undefined' ? isbuy : 0;
	
	if(product_description.length > 350)
	{
		product_description = product_description.substr(0,350) + "..";
	}
	
	 var embedcode = '<div id="embed-mag-pop-up-ui" class="embed-product-ui">';
	embedcode += 'You can copy the following code to your blog to embed this product: ';
	embedcode += '<textarea onclick="this.focus();this.select()" readonly="readonly" class="embed-code-block">';
	embedcode += '<div style="width:300px; height: 250px; border:1px solid #dddddd; padding: 10px; font-family:arial;">';
	embedcode += "<table><tr>";
	embedcode += "<td width='100px' height='100px'><img src='"+product_image+"' class='pd-product-avatar embed-product-avatar' /></td>";
	//product_url = drupal_base_url + '/node/' + pid+'/'+drupal_uid;
	product_url = drupal_base_url + '/buy/' + pid+'/'+drupal_uid;
	console.log(product_url);
	var actionTerm = "Enquire Now";
	
	var butstyle = "background-color:#c83131;color:#ffffff;font-size:12px;font-weight:bold;padding:3px 5px;width: 80px;text-align: center;margin-right:5px;";
	if(isbuy==1)
	{
		actionTerm = "Buy";
		butstyle = "background-color:#c83131;color:#ffffff;font-size:12px;font-weight:bold;padding:3px 17px;width: 25px;";
	}
	embedcode += "<td style='vertical-align:top;'><table><tr><td width='66px'><a href='"+product_url+"' target='_blank'><div style='"+butstyle+"'>"+actionTerm+"</div></a></td><td><iframe src='http://www.facebook.com/plugins/like.php?href&amp;layout=button_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font&amp;colorscheme=light&amp;height=21' scrolling='no' frameborder='0' style='border:none; overflow:hidden; width:50px; height:21px;' allowTransparency='true'></iframe></td></tr><tr><td colspan='2' style='font-size: 14px; padding:6px 0px; font-weight:bold;'>"+product_title+"</td></tr><tr><td colspan='2' style='font-size:11px;color:#454545'>"+product_currency + " $" + product_price+"</td></tr></table></td>";
	embedcode += "</tr><tr><td colspan='2' style='font-size:11px; font-weight: bold;color:#555555;'>Description:</td></tr><tr><td colspan='2' style='font-size:11px; color:#555555;'>"+product_description+"</td></tr></table>";
	embedcode += '<div style="margin-top: 10px;font-size: 11px;color: #999;">As featured on <a style="margin-top: 10px;font-size: 11px;color: #999;" href="http://fashionspace.com" target="_blank">FashionSpace.com</a></div>';
	embedcode += '</div>';
	embedcode += '</textarea>';
	
	embedcode += '<div style="font-size: 11px; margin-top: 10px;">Preview:</div>';
	
	embedcode += '<div style="width:300px; height: 250px; border:1px solid #dddddd; padding: 10px; font-family:arial;">';
	embedcode += "<table><tr>";
	embedcode += "<td width='100px' height='100px'><img src='"+product_image+"' class='pd-product-avatar embed-product-avatar' /></td>";
	embedcode += "<td style='vertical-align:top;'><table><tr><td width='66px'><a href='"+product_url+"' target='_blank'><div style='"+butstyle+"'>"+actionTerm+"</div></a></td><td><iframe src='http://www.facebook.com/plugins/like.php?href&amp;layout=button_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font&amp;colorscheme=light&amp;height=21' scrolling='no' frameborder='0' style='border:none; overflow:hidden; width:50px; height:21px;' allowTransparency='true'></iframe></td></tr><tr><td colspan='2' style='font-size: 14px; padding:6px 0px; font-weight:bold;'>"+product_title+"</td></tr><tr><td colspan='2' style='font-size:11px;color:#454545'>"+product_currency + " $" + product_price+"</td></tr></table></td>";
	embedcode += "</tr><tr><td colspan='2' style='font-size:11px; font-weight: bold;color:#555555;'>Description:</td></tr><tr><td colspan='2' style='font-size:11px; color:#555555;'>"+product_description+"</td></tr></table>";
	embedcode += '<div style="margin-top: 10px;font-size: 11px;color: #999;">As featured on <a style="margin-top: 10px;font-size: 11px;color: #999;" href="http://fashionspace.com" target="_blank">FashionSpace.com</a></div>';
	embedcode += '</div>';
	
	embedcode += '<div class="popupactions"><input type="button" value="Close" id="btnCloseEmbedPopup" /></div>';
	embedcode += '</div>';
	$(embedcode).dialog({resizable:false,width:351,height:451});

	$('#btnCloseEmbedPopup').click(function() {
		$('#embed-mag-pop-up-ui').dialog("destroy");
		$('#embed-mag-pop-up-ui').remove();
	});
	if($('.embed-product-avatar').width() > $('.embed-product-avatar').height() )
	{
		$('.embed-product-avatar').attr('width','100px');
	} else {
		$('.embed-product-avatar').attr('height','100px');
	}
}

function viewfans(url) {
	$('body').append('<div id="fanresults"></div>');
	$('#fanresults').load(url + ' #page-wrapper', function() {
		$('#fanresults').dialog({
			modal: false,
			width: 1030,
			height: 570,
			resizable: false,
			dialogClass: 'fan-listing-ui-dialog'
			
		});
		$('.close-pop-up-product').click(function() {
	 		//////('close pop up');
	 		$('#fanresults').dialog('destroy');
	 		$('#fanresults, .ui-dialog, .ui-widget-overlay').remove();
	 	});
	});
	//alert("viewing fans.");
}


function isEmpty(obj) {
    for(var prop in obj) {
        if(obj.hasOwnProperty(prop))
            return false;
    }

    return true;
}
// function for magazine node - magazine and looks
function node_magazine(){
	var looks = '';
	$('body.node-type-magazine #magazine .view-content .views-row').each(function(){
		looks += '<li>'+$(this).html()+'</li>';
	});
	$('body.node-type-magazine #magazine .view-content').html('').append('<ul class="looks">'+looks+'</ul>');
}

function node_magazine_old(){

	var i = 0;
	var mag = '';
	var looks = '';

	$('body.node-type-magazine #magazine .view-content .views-row').each(function(){
		if(i == 0 ){
			mag += '<li>'+$(this).html()+'</li>';
		}else{
			looks += '<li>'+$(this).html()+'</li>';
		}
		i++;
	});
	$('body.node-type-magazine #magazine .view-content').html('').append('<ul class="magazine">'+mag+'</ul>').append('<ul class="looks">'+looks+'</ul>');

}

function addShowMessagesButton(){
	$('#admin-menu-wrapper .admin-menu-icon UL').append('<li><a href="#" id="showMessagesButton" class="admin-menu-destination">Show Messages</a></li>');
	$('#showMessagesButton').click(function(){
		showMessages();
	});
	//showMessages();
}

function showMessages(){
	alert('ShowMessagesButton2');
	$('#messages').css('display','block');
}

function trace(s) {
	try { console.log(s) } catch (e) { alert(s) }
};;
function createCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	createCookie(name,"",-1);
}

jQuery.fn.valign = function() {
	$(this)
		.wrapInner('<div class="valign-box"></div>')
		.css("position", "relative");
		
	xH = $(this).children('.valign-box').height();
	$(this).children('.valign-box')
		.css({
			"position"		: "absolute",
			"height"		: xH,
			"top"			: "50%",
			"margin-top"	: 0-(xH/2)
		});
};

/*!
 * jQuery TextChange Plugin
 * http://www.zurb.com/playground/jquery-text-change-custom-event
 *
 * Copyright 2010, ZURB
 * Released under the MIT License
 */
 (function(a){a.event.special.textchange={setup:function(){a(this).data("lastValue",this.contentEditable==="true"?a(this).html():a(this).val());a(this).bind("keyup.textchange",a.event.special.textchange.handler);a(this).bind("cut.textchange paste.textchange input.textchange",a.event.special.textchange.delayedHandler)},teardown:function(){a(this).unbind(".textchange")},handler:function(){a.event.special.textchange.triggerIfChanged(a(this))},delayedHandler:function(){var b=a(this);setTimeout(function(){a.event.special.textchange.triggerIfChanged(b)},
 25)},triggerIfChanged:function(b){var c=b[0].contentEditable==="true"?b.html():b.val();if(c!==b.data("lastValue")){b.trigger("textchange",b.data("lastValue"));b.data("lastValue",c)}}};a.event.special.hastext={setup:function(){a(this).bind("textchange",a.event.special.hastext.handler)},teardown:function(){a(this).unbind("textchange",a.event.special.hastext.handler)},handler:function(b,c){c===""&&c!==a(this).val()&&a(this).trigger("hastext")}};a.event.special.notext={setup:function(){a(this).bind("textchange",
 a.event.special.notext.handler)},teardown:function(){a(this).unbind("textchange",a.event.special.notext.handler)},handler:function(b,c){a(this).val()===""&&a(this).val()!==c&&a(this).trigger("notext")}}})(jQuery);
 
 /* custom jquery plugin for pop up */
 (function( $ ){

	  $.fn.popupResult = function( options ) {  

	    var settings = {
	      'width'         : 250,
	      'height' 		  : 350,
	      'resultcount'	  : 10,
	      'displaycount'  : 5,
	      'viewmoreurl'	  : "/messages",
	      'resultSource'  : []
	    };

	    return this.each(function() {        
	      // If options exist, lets merge them
	      // with our default settings
	      if ( options ) { 
	        $.extend( settings, options );
	      }

	      // Tooltip plugin code here
	      $(this).mouseenter(function() {
	      	
	    	 var offset = $(this).offset();
	    	 var objHeight = $(this).height();
	    	 var pophtml = "<div class='pop-up-result'>";
	    	 
	    	 var resultitemcount = 0;
	    	 ////////console("1");
	    	 for(resultdata in settings.resultSource)
	    	 {
	    	 ////////console(resultitemcount);
	    		 resultitemcount++;
	    		 if(resultitemcount > settings.displaycount) break;
	    		 var resultobj = settings.resultSource[resultdata];
		    		 pophtml += "<div class='pop-up-result-row'>";
		    		 pophtml += "<input type='hidden' class='destinationurl' value='"+resultobj.destinationurl+"'/>";
		    		 pophtml += "<table width='100%' cellspacing='0' cellpadding='0' class='pop-up-result-container'>";
		    	 	pophtml += "<tr>";
		    	 		pophtml += "<td class='pop-up-result-row-image-container' rowspan='2'><img class='pop-up-result-row-image' src='"+resultobj.picture+"'></td>";
		    	 		pophtml += "<td class='pop-up-result-row-message'>"+resultobj.msg+"</td>";
		    	 	pophtml += "</tr>";
		    	 			pophtml += "<tr>";
		    	 			pophtml += "<td class='pop-up-result-row-timestamp'>"+resultobj.timestamp+"</td>";
		    	 			pophtml += "</tr>";
		    	 		pophtml += "</table>";
		    	 	pophtml += "</div>";
	    	 }
	    	 ////////console("2");
	    	 if(settings.resultcount > settings.displaycount)
	    	 {
		    	 pophtml += "<div class='pop-up-result-row-more-results-container'>";
	    		 pophtml += "<table width='100%' height='100%'>";
	    	 	 pophtml += "<tr>";
	    	 	 pophtml += "<td class='pop-up-result-row-more-results' colspan='2'><a href='"+settings.viewmoreurl+"'>View "+(settings.resultcount-settings.displaycount)+" more results</a></td>";
	    	 	 pophtml += "</tr>";
	    	 	 pophtml += "</table>";
	    	 	 pophtml += "</div>";
    	 	 }
	    	 ////////console("3");
	    	 pophtml += "</div>";
	    	 
	    	 var heightrowcount;
	    	 if(resultitemcount < settings.displaycount)
	    	 {
	    		 heightrowcount = resultitemcount; 
	    	 } else {
	    		 heightrowcount = settings.displaycount;
	    	 }
	    	 ////////console("4");
	    	 ////////console("result count: " + settings.resultcount);
	    	 if(settings.resultcount > 0)
	    	 {
	    	 	////////console("4in");
	    	 	$('body').append(pophtml);
	    	 }
	    	 ////////console(pophtml);
	    	 $('.pop-up-result').css("width",settings.width);
	    	 if(settings.resultcount > settings.displaycount)
	    	 {
	    	 	$('.pop-up-result').css("height",(heightrowcount*70)+43);
    	 	} else {
    	 		$('.pop-up-result').css("height",(heightrowcount*70));
    	 	}
    	 	////////console("5");
	    	 $('.pop-up-result').css("background-color","#ffffff");
	    	 $('.pop-up-result').css("border","1px solid #dddddd");
	    	 $('.pop-up-result').css("position","absolute");
	    	 $('.pop-up-result').css("top",38);
	    	 $('.pop-up-result').css("left",offset.left-8);
	    	 $('.pop-up-result').css("z-index",10000);
	    	 ////////console("6");
	    	 $('.pop-up-result-row').mouseenter(function() {
	    		$(this).css("background-color","#333333"); 
	    		//$(this).css("color","#ffffff"); 
	    		$(this).find(".pop-up-result-row-message").css("color","#ffffff");
	    		$(this).find(".pop-up-result-row-message a").css("color","#dddddd");
	    		$(this).find(".pop-up-result-row-timestamp").css("color","#dddddd");
	    	 });
	    	 
	    	 $('.pop-up-result-row').mouseleave(function() {
	    		$(this).css("background-color","#ffffff"); 
	    		$(this).find(".pop-up-result-row-message").css("color","#000000");
	    		$(this).find(".pop-up-result-row-message a").css("color","#3B5998");
	    		$(this).find(".pop-up-result-row-timestamp").css("color","#888888");
	    	 });
	    	 
	    	 $('.pop-up-result-row').click(function() {
	    		 window.location.href = $(this).find("input.destinationurl").val();
	    	 });
	    	 
	    	 $(".pop-up-result").mouseleave(function() {
	    		 $(this).remove();
		      });
	    	 
	      });
	      
	      

	    });

	  };
	})( jQuery );
 
 /* end custom plugin */
 
 $(document).ready(function(){
 	
 
	 $('select option[value="php_code"]').attr('selected','selected');
	 $('select option[value="plain_text"]').removeAttr('selected');
	 ////////////console("js fired.")
	 
	 $("div#field-website-url-add-more-wrapper").after('<div class="reg-web-url-desc">An administrator from FashionSpace will vet the store at the URL you provide before approving your application. <a href="learn-more">Learn more</a> about becoming a merchant.</div>');
	 
	 $('.node-magazine-form #edit-title').bind('textchange', function (event, previousText) {
		 var param = $(this).val().replace(/ /gi, "-");
		 var sampleurl = "http://fashionspace.com/" + escape(param);
		  $('.look-name-target').html('Your magazine will be accessible at <span class="sample-url">' + sampleurl + '</span>');
		  $('.look-name-validate-msg').hide();
	 });
	 
	 $('input#edit-field-apply-merchant-und-0').click(function() {
		 ////////////console("apply click");
		 if($('input#edit-field-apply-merchant-und-0').is(":checked"))
		 {
			 $('div#edit-field-website-url').show();
		 } else {
			 $('div#edit-field-website-url').hide();
		 }
			 
	 });
	 
	 if($('input#edit-field-apply-merchant-und-0').is(":checked"))
	 {
		 $('div#edit-field-website-url').show();
	 } else {
		 $('div#edit-field-website-url').hide();
	 }
	 
	 /* pop up for notifications */
	 /*$('#block-block-11').popupResult({'resultSource':[
	                                                 
											{msg:"Jamie Chaw has just created a new look <a href='/christmas-special'>Christmas Special</a>.",
												 picture:"http://t1.gstatic.com/images?q=tbn:ANd9GcR6YYyMKtpq6lNK6S-awZVIHL46Mv2hrHqPgCI5RLGj86majSAm",
												 timestamp:"50 mins ago",
												 destinationurl:"/messages"},
												 
												 {msg:"Jamie Chaw has just created a new look <a href='/christmas-special'>Christmas Special</a>.",
													 picture:"http://t1.gstatic.com/images?q=tbn:ANd9GcR6YYyMKtpq6lNK6S-awZVIHL46Mv2hrHqPgCI5RLGj86majSAm",
													 timestamp:"50 mins ago",
													 destinationurl:"/messages"},
													 
													 {msg:"Jamie Chaw has just created a new look <a href='/christmas-special'>Christmas Special</a>.",
														 picture:"http://t1.gstatic.com/images?q=tbn:ANd9GcR6YYyMKtpq6lNK6S-awZVIHL46Mv2hrHqPgCI5RLGj86majSAm",
														 timestamp:"50 mins ago",
														 destinationurl:"/messages"},
												 
											
	                                                 
	                                                 ]
	                                                 });*/
	                                                 
	 
	                                                 
	 
	 
	 /* end pop up for notifications */
	 
	 /* theme messages */
	 //////////////console($('#page-title').html());
	 $('.page-messages #page-title').html("Messages"); 
	
	 //$('.page-messages .section').prepend($('table.privatemsg-list'));
	 //$('table.sticky-header').after('<div class="search-legend"><div class="legend-icon right"><img src="/sites/all/themes/fashion/images/brand-icon.png"> Brand</div><div class="legend-icon right"><img src="/sites/all/themes/fashion/images/merchant-icon.png"> Merchant</div></div>');
	 $('.page-messages-view-').find('.search-legend').remove();
	 /* end theme messages */
	 //$('table.privatemsg-list').find("thead").remove();
	 $('.page-messages-view #page-title').after('<ul class="action-links"><li><a href="/messages/new">Write new message</a></li></ul>');
	 $('.page-messages-view div[id|="privatemsg-mid"]').each(function() {
		$(this).append("<div class='msg-separator'></div>"); 
	 });
	 
	 //var obj = $('.panel-panel .magazine-looks #' + node_full_id + ' .content .field-name-body .field-items .field-item div.mag-draggable')
	 $('.panel-panel .magazine-looks .node-look').each(function() {
	 	sortAllZIndex($(this));
	 });
	 
	 $('.field-name-og-node-link .field-item a, .pane-node-og-node-link .field-item a').each(function() {
		 		
 		if($(this).text()=='text')
 		{
 			$(this).text('Text');
 		}
 		
 		if($(this).text()=='Look')
 	 	{
 	 		$(this).text('Add Page');
 	 	}
 		
 	});
 	
 	bookletInterval = setInterval("checkBookletSetup()", 500);

	$('.page-messages .form-item-search').prepend('Search ');
	 
	 $('.manage-edit-title').click(function() {
	 	var currenttitle = jQuery.trim( $(this).siblings('a').text() );
	 	var magnid = $(this).attr('magnid');
	 	var editRef = $(this);
	 	console.log('editing title..' + currenttitle);
	 	$('body').append('<div id="edit-mag-title-dialog-form" title="Edit Magazine Title"><form><input type="text" name="name" id="name" class="text ui-widget-content ui-corner-all" value="'+currenttitle+'" /><img src="/sites/all/themes/fashion/images/ajax-loader.gif" class="titleloader" /></form></div>');
	 	//$('body').append('');
	 	$('body #edit-mag-title-dialog-form').dialog({
	 		modal: true,
	 		resizable: false,
	 		draggable: false,
	 		buttons: {
	 			"Save": function() {
	 				$('.page-mymagazines .titleloader').show();
					$.ajax({
						url: 'mag/updatetitle',
						type: 'POST',
						data: 'nid='+magnid+'&title='+ $('#edit-mag-title-dialog-form input').val(),
						success: function(result) {
							/*console.log(result);
							$( this ).dialog( "close" );
							// set the new value
							editRef.siblings('a').html($('#edit-mag-title-dialog-form input').val());
							
							//update the link
							editRef.siblings('a').attr('href',result);
							
							$('#edit-mag-title-dialog-form').remove();
							*/
							$('body').append("<div class='jithidden'></div>");
							$('body div.jithidden').twitter_alert({
								message: 'Magazine title saved',
								//fadeout_time: 6000,
								bg_colour: '#ffffff',
								text_colour: '#918d28',
								border_colour: '#eed177'
							});
							
							location.reload();
						}
					});
				},
				Cancel: function() {
					$( this ).dialog( "close" );
					$('#edit-mag-title-dialog-form').remove();
				}
	 		}
	 	});
	 });
	 
 });
 
var bookletInterval = 0;
function checkBookletSetup() {
	if($('.booklet .b-page').size() >= 1)
	{
		$('.front .view-nodequeue-2').css('display','block');
		clearInterval(bookletInterval);
	}
	if($('.magazine-looks .b-page').size() >= 1)
	{
		$('.magazine-looks').css('display','block');
		clearInterval(bookletInterval);		
	}
}
 
function buildZMax(obj,selector) {
	var zmax = 0 ;	
	$(obj).find(selector).each(function() {
    	var cur = parseInt($(this).css('zIndex'));
    	zmax = cur > zmax ? $(this).css('zIndex') : zmax; 
  	});
  	return zmax;
}

function sortAllZIndex(obj) {
	$(obj).find(".mag-draggable").each(function() {
		var current_z = $(this).css('z-index');
		//console.log($(this).attr("id") + " z-index = " + current_z);
		if(current_z=='auto' || current_z=='0'){
			var nextHighestZ = parseInt(buildZMax(obj,".mag-draggable")) + 1;
			//console.log("nextHighestZ=" + nextHighestZ);
			$(this).css('z-index',nextHighestZ);
		}
	});
}
 
;
 $(document).ready(function(){

 if($('#mag-org-actions').size() <= 0)
{
	 
	$('.node-type-magazine #magazine .panel-col-middle').before("<div class='clear'></div><div class='msg-separator'></div>");
		 
		 
		
		/* $(".mag-draggable").draggable({cursor:'move',delay:100});
		 $(".mag-resizable").resizable({handles:'ne,nw,se,sw',autoHide:true,delay:100,aspectRatio:true});
		 $(".look_text").resizable({handles:'ne,nw,se,sw',autoHide:true,delay:100,aspectRatio:false});
		 //$('.editable').editable();
		 $(".ui-resizable-se").removeClass("ui-icon-gripsmall-diagonal-se ui-icon");
	 	$(".mag-resizable").mouseenter(function() {
	 		$(this).addClass("element-outline");
	 	});
	 	$(".mag-resizable").mouseleave(function() {
	 		$(this).removeClass("element-outline");
	 		$(this).children("div .ui-resizable-handle").hide();
	 	});
		 
		 
	 	$(".mag-draggable").mouseenter(function() {
	 		$(this).addClass("element-outline");
	 	});
	 	$(".mag-draggable").mouseleave(function() {
	 		$(this).removeClass("element-outline");
	 	});
	 	*/
	 	
	 	$('#block-views-categories-block-1 .content .view-categories').append($('#block-views-categories-block-2 .content .view-categories .view-content'));
	 	$('#block-views-categories-block-2').remove();
	 	$('#block-views-categories-block-1 .content .view-categories').append('<div class="clear"></div>');
	 	$('#block-views-categories-block-1 .content .view-categories .view-content:eq(1)').css('margin-left','20px');
	 	
	 	//////////console('org mag');
	 	
	 	
	
	 	
	 	
	 	/* ORGANIZE MAG LOOKS */
	 	$('#mag-organize-looks .views-row .node-look').wrap('<div class="org-look-frame" />');
	 	$('#mag-organize-looks').prepend('<div><div class="left"><div class="pop-up-form-title"><h1 class="title" id="page-title">Organize Looks</h1></div></div><div class="right"><a href="javascript:" class="btnOrgLookClose">close</a></div><div class="clear"></div></div>');
	 	$('#mag-organize-looks').append('<div class="clear"></div>');
	 	$('#mag-organize-looks').append('<div id="mag-org-actions"><button id="btnSavePages">Save</button><img src="/sites/all/themes/fashion/images/ajax-loader.gif" class="look-save-ajax-load" /></div>');
	 	$('#mag-organize-looks .btnOrgLookClose').click(function() {
	 		$('#mag-organize-looks').dialog("destroy");
	 	});
	 	$('#mag-organize-looks .views-row').each(function() {
	 		var tmplook_title = $(this).find(".node-look").attr('title');
	 		var tmplook_page = $(this).find(".field-name-field-page .field-item").text();
	 		var tpageid = $(this).find('.node-look').attr('id').replace('node-','');
	 		var tmplook_publishstatus = $(this).find("input.nodestatus#node-" + tpageid).val();
	 		var tmplook_tags = '';
	 		$(this).find(".node-look .field-name-field-looktags a").each(function() {
	 			tmplook_tags += $(this).text() + ',';
	 		});
	 		tmplook_tags = tmplook_tags.substring(0,tmplook_tags.length-1);
	 		//console.log('tag data: ' + tmplook_tags);
	 		if(tmplook_publishstatus=='1')
	 		{
	 			$(this).append('<div class="organize-actions"><div class="organize-page-title">'+tmplook_title+'</div><div>Page: <input maxlength="3" type="text" class="organize-page-input" value="'+tmplook_page+'" /></div><div class="org-mag-delete-page"><a href="javascript:">delete</a></div><div class="org-mag-publish-page"><a href="javascript:">unpublish</a></div><div class="clearfix"></div><div class="organize-page-tags">Tags: <div class="actualtags">'+tmplook_tags+'</div><img src="/sites/all/themes/fashion/images/ajax-loader.gif" class="delete-look-ajax-load" /></div>');
	 		} else {
	 			$(this).append('<div class="organize-actions"><div class="organize-page-title">'+tmplook_title+'</div><div>Page: <input maxlength="3" type="text" class="organize-page-input" value="'+tmplook_page+'" /></div><div class="org-mag-delete-page"><a href="javascript:">delete</a></div><div class="org-mag-publish-page"><a href="javascript:">publish</a></div><div class="clearfix"></div><div class="organize-page-tags">Tags: <div class="actualtags">'+tmplook_tags+'</div></div><img src="/sites/all/themes/fashion/images/ajax-loader.gif" class="delete-look-ajax-load" /></div>');
	 		}	
	 	});
	 	$('.open-org-pages').click(function() {
	 		$('#mag-organize-looks').dialog({
	 	 		resizable: false,
	 	 		maxWidth: 900,
	 	 		width: 'auto'
	 	 	});
	 	});
	 	$('#mag-organize-looks .views-row').each(function() {
	 		var pageid = $(this).find('.node-look').attr('id').replace('node-','');
	 		////////console.log('org mag: ' + pageid);
	 		
	 		$(this).find('.organize-page-title').editable('/page/updatetitle',{
		 		width: 80,
		 		height: 15,
		 		cancel    : 'X',
		        submit    : 'Save',
		        submitdata: {pageid: pageid},
		        indicator : 'Saving...',
		        onblur	   : 'ignore',
		        callback  : function(value, settings) {
		 			//alert("title updated");
		 			$(this).html(value);
		 			$('body').append("<div class='jithidden'>The page's title has been updated.</div>");
		 			$('body div.jithidden').twitter_alert({
		 				fadeout_time: 6000,
		 				bg_colour: '#ffffff',
		 				text_colour: '#267a34',
		 				border_colour: '#267a34'
		 			});
		 			$(this).parent().parent().find('.node-look').attr('title',value);
		 			
		 		}
		 	});
	 		
	 		$(this).find('.actualtags').editable('/page/updatetags',{
		 		width: 80,
		 		height: 15,
		 		cancel    : 'X',
		        submit    : 'Save',
		        submitdata: {pageid: pageid},
		        indicator : 'Saving...',
		        onblur	   : 'ignore',
		        callback  : function(value, settings) {
		 			//alert("title updated");
		 			$(this).html(value);
		 			$('body').append("<div class='jithidden'>The page's tags has been updated.</div>");
		 			$('body div.jithidden').twitter_alert({
		 				fadeout_time: 6000,
		 				bg_colour: '#ffffff',
		 				text_colour: '#267a34',
		 				border_colour: '#267a34'
		 			});
		 			
		 		}
		 	});
	 	});
	 	$('.org-mag-publish-page').click(function() {
	 		$(this).siblings('.delete-look-ajax-load').show();
	 		var tmpthis = $(this);
	 		var postaction = 'publish';
	 		if($(this).find('a').text()!='publish')
	 		{
	 			postaction = 'unpublish';
	 		}
	 		var nodeid = $(this).parents('.organize-actions').siblings('.org-look-frame').find('.node-look').attr('id');
	 		////console.log(postaction);
	 		////console.log('publishing... ' + nodeid);
	 		$.ajax({
	 			  url: '/look/' + postaction,
	 			  data: 'lookid=' + nodeid,
	 			  type:'POST',
	 			  success: function(data) {
	

	 					var publishterm = "published";
	 					if(postaction!='publish')
	 					{
	 						publishterm = "unpublished";
	 						tmpthis.find('a').text('publish');
	 					} else {
	 						tmpthis.find('a').text('unpublish');
	 					}
			 			$('body').append("<div class='jithidden'>The page was "+publishterm+"</div>");
			 			$('body div.jithidden').twitter_alert({
			 				fadeout_time: 6000,
			 				bg_colour: '#ffffff',
			 				text_colour: '#507b22',
			 				border_colour: '#507b22'
			 			});
		 			   $('.delete-look-ajax-load').hide();
	 			  }
	 			});
	 	});
	 	$('.org-mag-delete-page').click(function() {
	 		
	 		$tmpthis = $(this);
	 		
	 		$('body').append('<div id="dialog-confirm"><div><div class="ui-icon ui-icon-alert" style="float:left; margin:0 7px 20px 0;"></div><div class="left" style="width:250px;">This page will be permanently deleted and cannot be recovered. Are you sure?</div></div><div class="clear"></div></div>');
			$( "#dialog-confirm" ).dialog({
				resizable: false,
				height:165,
				modal: true,
				buttons: {
					"Delete page": function() {
						$( this ).dialog( "destroy" );
						
						$tmpthis.siblings('.delete-look-ajax-load').show();
				 		//////////console($(this));
				 		var nodeid = $tmpthis.parents('.organize-actions').siblings('.org-look-frame').find('.node-look').attr('id');
				 		//////////console("node id = " + nodeid);
				 		nodeid = nodeid.replace('node-','');
				 		$.ajax({
				 			  url: '/look/deleteitem',
				 			  data: 'eidtodelete=' + nodeid,
				 			  type:'POST',
				 			  success: function(data) {
				
					 			    //////////console(data);
					 			    //alert('Look was saved.');
					 			    // we need to check if deleted page is last page!!
					 			   var pagecount = $('.magazine-looks .b-page').size() - $('.magazine-looks .b-page-blank').size();
					 			   if((pagecount-1)%2==0)
					 			   {
					 				  window.location.hash = "#/page/" + (pagecount-1);   
					 			   }
					 			   window.location.reload();
					 			   $('.delete-look-ajax-load').hide();
				 			  }
				 			});
						
						
					},
					Cancel: function() {
						$( this ).dialog( "destroy" );
					}
				}
			});
	 		
	 		
	 		
	 	});
	 	
	 	
	 	
	 	$('#mag-org-actions #btnSavePages').click(function() {
	 		
	 		var validateresult = true;
	 		
	 		$(this).siblings('.look-save-ajax-load').show();
	 		var pagesData = new Array();
	 		$('#mag-organize-looks .node-look').each(function() {
	 			var lookid = $(this).attr('id').replace('node-','');
	 			var newpagetitle = $(this).attr('title');
	 			var pageobj = $(this).parent().find('input.organize-page-input');
	 			var newpage = pageobj.val();
	 			
	 			// validating page inputs
	 			$.validity.start();
	 			pageobj.require().match('integer');
	 			validateresult = validateresult && $.validity.end().valid;
	 			////////console("validation result: " + validateresult);
	 			
	 			//var tmpdat = {'title':newpagetitle,'page':newpage,'lookid':lookid};
	 			var tmpdat = {'page':newpage,'lookid':lookid};
	 			pagesData.push(tmpdat);
	 		});
	 		var sendData = $.toJSON(pagesData);
	 		////////console(sendData);
	 		
	 		if(validateresult)
	 		{
		 		
		 		$.ajax({
		 			  url: '/save/orglooks',
		 			  data: 'edata=' + sendData,
		 			  type:'POST',
		 			  success: function(data) {
		
		 			    ////////console(data);
		 			    //alert('Look was saved.');
		 			    window.location.reload();
		 			    $('.look-save-ajax-load').hide();
		 			  }
		 			});
	 		} else {
	 			$('body').append("<div class='jithidden'>Opps! Please make sure all page numbers are filled in, are numbers and try again.</div>");
	 			$('body div.jithidden').twitter_alert({
	 				fadeout_time: 6000,
	 				bg_colour: '#ffffff',
	 				text_colour: '#ff0000',
	 				border_colour: '#ff0000'
	 			});
	 			$('.look-save-ajax-load').hide();
	 		}
	 	});
	 	
	 	//512 x 600
	 	
	 	$('#mag-organize-looks .node-look').transform({scaleX:0.2,scaleY:0.2, origin:['0','0']});
	 	$("#mag-organize-looks .mag-draggable").draggable("destroy");
		$("#mag-organize-looks .mag-resizable").resizable("destroy");
		$("#mag-organize-looks .look_text").resizable("destroy");
		/* END ORGANIZE MAG LOOKS */
		
		$('#mag-organize-looks .field-name-field-page').hide();
		//$('#mag-organize-looks .specialadd').hide();
		
		$('.look_product-container').bind('click',look_product_container_click);
		
		$('.author-mag-content').transform({scaleX:0.2,scaleY:0.2, origin:['0','0']});
		$('.author-mag-content').show();
		
		if ( $.browser.msie ) {
			//alert("test");
			$('.author-mag-content div.mag-draggable,#mag-organize-looks .node-look .field-item div').each(function() {
				//var thispos = $(this).position();
				//console.log("test alv");
				var thisleft = parseFloat(removepx($(this).css('left')));
				var thistop = parseFloat(removepx($(this).css('top')));
				//console.log('left ' + thisleft);
				//console.log('top ' + thistop);
				if(isNaN(thisleft))
				{
					thisleft = 0;
				}
				if(isNaN(thistop))
				{
					thisleft = 0;
				}
				var procleft = thisleft * 0.23;
				var proctop = thistop * 0.23;
				//console.log(procleft);
				//console.log(proctop);
				//console.log($(this));
				//var procleft = thispos.left * 0.23;
				//var proctop = thispos.top * 0.23;
				//alert(procleft + ", " + proctop);
				$(this).transform({scaleX:0.23,scaleY:0.23, origin:['0','0']}).wrap('<div />').parent().css({position: 'absolute', left: procleft + 'px', top: proctop + 'px'});
				//console.log("test3");
			});
		}
		
	 	$("#author-mags .mag-draggable").draggable("destroy");
		$("#author-mags .mag-resizable").resizable("destroy");
		$("#author-mags .look_text").resizable("destroy");
		
		$('#mag-organize-looks .view-content').sortable();
		$('#mag-organize-looks .view-content').bind("sortupdate",function(event,ui) {
			////////console(event);
			////////console(ui);
			// update page numbers and css classes
			var i=0;
			$('#mag-organize-looks .view-content .views-row').each(function() {
				i++;
				$(this).removeClass();
				$(this).addClass('views-row-' + i);
				$(this).addClass('views-row');
				if(i%2==0) {
					$(this).addClass('views-row-even');
				} else {
					$(this).addClass('views-row-odd');
				}
				var pageobj = $(this).find('.organize-actions input.organize-page-input');
	 			pageobj.val(i);
			});
			
		});
		
}
	
	
});
 
 function look_product_container_click() {
	var product_image = $(this).attr("pimage");
	var product_image2 = $(this).attr("pimage2");
	if(product_image2==undefined)
	{
		product_image2 = product_image;
	}
	var product_title = $(this).attr("ptitle");
	var product_currency = $(this).attr("pcurrency");
	var product_price = $(this).attr("pprice");
	var product_description = $(this).attr("pdescription");
	
	// replace all single quotes
	product_description = product_description.replace(/'/g,"\\'");
	
	var product_where = $(this).attr("pwhere");
	//var product_url = $(this).attr("purl");
	//var product_url = '/buy/'+$(this).attr("id");
	var product_url = '/buy/'+$(this).attr("id")+'/'+drupal_affiliate_id;	
	var product_id = $(this).attr("id");
	var product_impression_tracker = '<img src="/merchant/track/'+product_id+'/'+drupal_affiliate_id+'?rand='+new Date().getTime()+'" style="display:none;" />';
	
	// we need to check if product is online or offline
	$.ajax({
		type: "POST",
		url: "/product/statuscheck",
		data: "nid=" + $(this).attr("id"),
		success: function(data) {
			var result = parseInt(data);
			var actionhtml;
			switch(result)
			{
				case -1:
					// error do nothing
					actionhtml = "<td class='pd-buy'><a href='"+product_url+"' target='_blank'><div id='pd-btnBuy'>Buy</div></a></td>";
					break;
				case 0:
					// product is offline
					actionhtml = "<td class='pd-btnEnquire'><a href='"+product_url+"' target='_blank'><div id='pd-btnEnquire'>Enquire Now</div></a></td>";
					break;
				case 1:
					// product is online
					actionhtml = "<td class='pd-buy'><a href='"+product_url+"' target='_blank'><div id='pd-btnBuy'>Buy</div></a></td>";
					break;
			}
			console.log("status result" + result);
			var producthtml = "<div id='product-details-popup'>";
			producthtml += "<div class='pd-header'><a href='javascript:' class='pd-btn-close'><img src='/sites/all/themes/fashion/images/close.png' /></a><div class='pd-bookmark'>Add to bookmark</div><div class='pd-embed'><a href=\"javascript:product_embed("+product_id+",'"+product_image2+"','"+product_title+"','"+product_currency+"','"+product_price+"','"+product_description+"','"+product_url+"',"+result+")\">Embed</a></div></div>";
			producthtml += "<div>";
			producthtml += "<table><tr>";
			producthtml += "<td class='pd-pimage'><img src='"+product_image+"' class='pd-product-avatar' />"+product_impression_tracker+"</td>";
			producthtml += "<td class='pd-pinfo'><table><tr><td class='pd-title'>"+product_title+"</td>"+actionhtml+"<td><!--<iframe src='http://www.facebook.com/plugins/like.php?href&amp;layout=button_count&amp;show_faces=false&amp;width=50&amp;action=like&amp;font&amp;colorscheme=light&amp;height=21' scrolling='no' frameborder='0' style='border:none; overflow:hidden; width:50px; height:21px;' allowTransparency='true'></iframe>--></td></tr><tr><td>"+product_currency + " $" + product_price+"</td></tr><tr><td class='pd-description'>"+product_description+"</td></tr><tr><td colspan='2'>"+product_where+"</td></tr><tr><td colspan='2'><a id='atbutton'></a></td></tr></table></td>";
			producthtml += "</tr></table>";
			producthtml += "</div>";
			producthtml += "<div>";
			//we want to give the parent url for sharing as well
			var pathfrag = escape(location.pathname + location.hash);
			producthtml += "<iframe frameborder='0' src='/product/getcomments?nid="+product_id+"&shareurl="+pathfrag+"' width='100%' height='500'></iframe>";
			producthtml += "</div>";
			producthtml += "</div>";
			
			$(producthtml).dialog({
				modal: false,
				width: 580,
				height: 'auto',
				resizable: false
				
			});
			
			addthis.button("#atbutton", {}, {url: BASE_SITE_URL+'/node/' + product_id, title: product_title, description: product_description});
			
			// load flag html from fscustom using flag_create_link('product', product_id);
			$('.pd-bookmark').load('/product/getflaghtml?flag_name=product&nid='+product_id+' a', function() {
				$('.pd-bookmark a').attr('rel', $('.pd-bookmark a').attr('href'));
				$('.pd-bookmark a').attr('href','#');
				$('.pd-bookmark').show();
				
			});
				
			$('.pd-bookmark a').live('click', function() {
				var togourl = $(this).attr('rel');
				$('.pd-bookmark a').remove();
				$('.pd-bookmark').load(togourl + ' a', function() {
					$('.pd-bookmark a').attr('rel', $('.pd-bookmark a').attr('href'));
					$('.pd-bookmark a').attr('href','#');
				});
			});
			
			$('.pd-btn-close').click(function() {
				////////console('close pd');
				$('#product-details-popup').dialog('destroy');
				$('#product-details-popup').remove();
			});
			
			
		}
	});
	
	
	
};

jQuery(document).ready(function($) {
	//console.log('fscustom-magazine-video.js');
	
	/*$('.look_video-container').append("<div class='btnDelete'>&nbsp;</div>");
	console.log('btnDelete appended');
	$('.look_video-container .btnDelete').click(function(){
		var eid = $(this).parent().attr('id');
		//alert('eid='+eid);
		deleteLookItem(eid);
	});
	*/
	$(".look_video-container").mouseenter(function() {
		$(this).toggleClass("videoInteractRegion");
	})
	
	$(".look_video-container").mouseleave(function() {
		$(this).toggleClass("videoInteractRegion");
	})
	$(".video-resizable").each(function() {
		var childIframe = $(this).children("iframe");
		$(this).resizable({handles:'ne,nw,se,sw',autoHide:true,delay:100,
			
			resize:function(event,ui){
				
				$(this).children("iframe").width($(this).width());
				$(this).children("iframe").height($(this).height());
			}
		});

	});

});

function deleteLookItem(eid){
	//alert('deleteLookItem');
	//var url = 'http://'+document.domain+$(this).attr('href');
	var url = '/look/deleteitem';
	//$('body').prepend('<div id="loading" style="height:100%; width:100%; opacity:0.5; position:fixed; left:0; right:0; background:#000; z-index:999; font-size:70px; text-align:center; display:none"><h2>Loading...</h2></div>');
	//$('#loading').fadeIn('fast');
	//$('body').prepend('<div id="result" style="display:none"><h2>Loading...</h2></div>');
	
	
	$.post(url, {eidtodelete:eid}, function(data, textStatus, jqXHR){
		//alert(data);
		//$('#loading').fadeOut('fast', function(){
		//});
		window.location.reload();
	});
	return false;
};
/*
 * jQuery JSON Plugin
 * version: 2.1 (2009-08-14)
 *
 * This document is licensed as free software under the terms of the
 * MIT License: http://www.opensource.org/licenses/mit-license.php
 *
 * Brantley Harris wrote this plugin. It is based somewhat on the JSON.org 
 * website's http://www.json.org/json2.js, which proclaims:
 * "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that
 * I uphold.
 *
 * It is also influenced heavily by MochiKit's serializeJSON, which is 
 * copyrighted 2005 by Bob Ippolito.
 */
 
(function($) {
    /** jQuery.toJSON( json-serializble )
        Converts the given argument into a JSON respresentation.

        If an object has a "toJSON" function, that will be used to get the representation.
        Non-integer/string keys are skipped in the object, as are keys that point to a function.

        json-serializble:
            The *thing* to be converted.
     **/
    $.toJSON = function(o)
    {
        if (typeof(JSON) == 'object' && JSON.stringify)
            return JSON.stringify(o);
        
        var type = typeof(o);
    
        if (o === null)
            return "null";
    
        if (type == "undefined")
            return undefined;
        
        if (type == "number" || type == "boolean")
            return o + "";
    
        if (type == "string")
            return $.quoteString(o);
    
        if (type == 'object')
        {
            if (typeof o.toJSON == "function") 
                return $.toJSON( o.toJSON() );
            
            if (o.constructor === Date)
            {
                var month = o.getUTCMonth() + 1;
                if (month < 10) month = '0' + month;

                var day = o.getUTCDate();
                if (day < 10) day = '0' + day;

                var year = o.getUTCFullYear();
                
                var hours = o.getUTCHours();
                if (hours < 10) hours = '0' + hours;
                
                var minutes = o.getUTCMinutes();
                if (minutes < 10) minutes = '0' + minutes;
                
                var seconds = o.getUTCSeconds();
                if (seconds < 10) seconds = '0' + seconds;
                
                var milli = o.getUTCMilliseconds();
                if (milli < 100) milli = '0' + milli;
                if (milli < 10) milli = '0' + milli;

                return '"' + year + '-' + month + '-' + day + 'T' +
                             hours + ':' + minutes + ':' + seconds + 
                             '.' + milli + 'Z"'; 
            }

            if (o.constructor === Array) 
            {
                var ret = [];
                for (var i = 0; i < o.length; i++)
                    ret.push( $.toJSON(o[i]) || "null" );

                return "[" + ret.join(",") + "]";
            }
        
            var pairs = [];
            for (var k in o) {
                var name;
                var type = typeof k;

                if (type == "number")
                    name = '"' + k + '"';
                else if (type == "string")
                    name = $.quoteString(k);
                else
                    continue;  //skip non-string or number keys
            
                if (typeof o[k] == "function") 
                    continue;  //skip pairs where the value is a function.
            
                var val = $.toJSON(o[k]);
            
                pairs.push(name + ":" + val);
            }

            return "{" + pairs.join(", ") + "}";
        }
    };

    /** jQuery.evalJSON(src)
        Evaluates a given piece of json source.
     **/
    $.evalJSON = function(src)
    {
        if (typeof(JSON) == 'object' && JSON.parse)
            return JSON.parse(src);
        return eval("(" + src + ")");
    };
    
    /** jQuery.secureEvalJSON(src)
        Evals JSON in a way that is *more* secure.
    **/
    $.secureEvalJSON = function(src)
    {
        if (typeof(JSON) == 'object' && JSON.parse)
            return JSON.parse(src);
        
        var filtered = src;
        filtered = filtered.replace(/\\["\\\/bfnrtu]/g, '@');
        filtered = filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']');
        filtered = filtered.replace(/(?:^|:|,)(?:\s*\[)+/g, '');
        
        if (/^[\],:{}\s]*$/.test(filtered))
            return eval("(" + src + ")");
        else
            throw new SyntaxError("Error parsing JSON, source is not valid.");
    };

    /** jQuery.quoteString(string)
        Returns a string-repr of a string, escaping quotes intelligently.  
        Mostly a support function for toJSON.
    
        Examples:
            >>> jQuery.quoteString("apple")
            "apple"
        
            >>> jQuery.quoteString('"Where are we going?", she asked.')
            "\"Where are we going?\", she asked."
     **/
    $.quoteString = function(string)
    {
        if (string.match(_escapeable))
        {
            return '"' + string.replace(_escapeable, function (a) 
            {
                var c = _meta[a];
                if (typeof c === 'string') return c;
                c = a.charCodeAt();
                return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
            }) + '"';
        }
        return '"' + string + '"';
    };
    
    var _escapeable = /["\\\x00-\x1f\x7f-\x9f]/g;
    
    var _meta = {
        '\b': '\\b',
        '\t': '\\t',
        '\n': '\\n',
        '\f': '\\f',
        '\r': '\\r',
        '"' : '\\"',
        '\\': '\\\\'
    };
})(jQuery);
;
/*!
 * jQuery UI 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI
 */
(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.10",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,
NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,
"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");
if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f,
"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,
d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}});
c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&
b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
;/*!
 * jQuery UI Widget 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Widget
 */
(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
;/*!
 * jQuery UI Mouse 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Mouse
 *
 * Depends:
 *	jquery.ui.widget.js
 */
(function(c){c.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(b){return a._mouseDown(b)}).bind("click."+this.widgetName,function(b){if(true===c.data(b.target,a.widgetName+".preventClickEvent")){c.removeData(b.target,a.widgetName+".preventClickEvent");b.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(a){a.originalEvent=
a.originalEvent||{};if(!a.originalEvent.mouseHandled){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var b=this,e=a.which==1,f=typeof this.options.cancel=="string"?c(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){b.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=
this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}this._mouseMoveDelegate=function(d){return b._mouseMove(d)};this._mouseUpDelegate=function(d){return b._mouseUp(d)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return a.originalEvent.mouseHandled=true}},_mouseMove:function(a){if(c.browser.msie&&!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);
return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;a.target==this._mouseDownEvent.target&&c.data(a.target,this.widgetName+".preventClickEvent",
true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
;/*
 * jQuery UI Position 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Position
 */
(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+(parseInt(c.curCSS(this,"marginRight",true))||0),w=m+q+(parseInt(c.curCSS(this,"marginBottom",true))||0),i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=
m/2;i.left=Math.round(i.left);i.top=Math.round(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=
d>0?b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
;/*
 * jQuery UI Draggable 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Draggables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */
(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;return true},_mouseStart:function(a){var b=this.options;this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-
this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();
d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||
this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if((!this.element[0]||!this.element[0].parentNode)&&this.options.helper=="original")return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&
this.options.revert.call(this.element,b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==
a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone():this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||
0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-
(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment==
"parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[(a.containment=="document"?0:d(window).scrollLeft())-this.offset.relative.left-this.offset.parent.left,(a.containment=="document"?0:d(window).scrollTop())-this.offset.relative.top-this.offset.parent.top,(a.containment=="document"?0:d(window).scrollLeft())+d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(a.containment=="document"?
0:d(window).scrollTop())+(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&a.containment.constructor!=Array){var b=d(a.containment)[0];if(b){a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),
10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}}else if(a.containment.constructor==
Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():
f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,g=a.pageY;
if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])e=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])e=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/
b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;e=this.originalPageX+Math.round((e-this.originalPageX)/b.grid[0])*b.grid[0];e=this.containment?!(e-this.offset.click.left<this.containment[0]||e-this.offset.click.left>this.containment[2])?e:!(e-this.offset.click.left<this.containment[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:g-this.offset.click.top-
this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=
this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.10"});
d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var g=d.data(this,"sortable");if(g&&!g.options.disabled){c.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=
0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=
c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=1;this.instance.currentItem=d(f).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,
true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=
0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=
a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","iframeFix",{start:function(){var a=d(this).data("draggable").options;d(a.iframeFix===true?"iframe":a.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")})},
stop:function(){d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=
document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!="HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-
c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-b.overflowOffset.left<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-
(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable",
"snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,g=b.offset.left,n=g+c.helperProportions.width,m=b.offset.top,o=m+c.helperProportions.height,h=
c.snapElements.length-1;h>=0;h--){var i=c.snapElements[h].left,k=i+c.snapElements[h].width,j=c.snapElements[h].top,l=j+c.snapElements[h].height;if(i-e<g&&g<k+e&&j-e<m&&m<l+e||i-e<g&&g<k+e&&j-e<o&&o<l+e||i-e<n&&n<k+e&&j-e<m&&m<l+e||i-e<n&&n<k+e&&j-e<o&&o<l+e){if(f.snapMode!="inner"){var p=Math.abs(j-o)<=e,q=Math.abs(l-m)<=e,r=Math.abs(i-n)<=e,s=Math.abs(k-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:j-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",
{top:l,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:i-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:k}).left-c.margins.left}var t=p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(j-m)<=e;q=Math.abs(l-o)<=e;r=Math.abs(i-g)<=e;s=Math.abs(k-n)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:j,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:l-c.helperProportions.height,
left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:i}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:k-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[h].snapping&&(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[h].item}));c.snapElements[h].snapping=p||q||r||s||t}else{c.snapElements[h].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,
a,d.extend(c._uiHash(),{snapItem:c.snapElements[h].item}));c.snapElements[h].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,
b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
;/*
 * jQuery UI Droppable 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Droppables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 *	jquery.ui.mouse.js
 *	jquery.ui.draggable.js
 */
(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.10"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
"none";if(c[f].visible){c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight};e=="mousedown"&&c[f]._activate.call(c[f],b)}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=
d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})}}})(jQuery);
;/*
 * jQuery UI Resizable 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Resizables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */
(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),k=0;k=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,k);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){e(this).removeClass("ui-resizable-autohide");b._handles.show()},function(){if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};
if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),
d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=
this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:
this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",
b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;
f=f?0:c.sizeDiff.width;f={width:c.helper.width()-f,height:c.helper.height()-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");
this._propagate("stop",b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(l(b.left))this.position.left=b.left;if(l(b.top))this.position.top=b.top;if(l(b.height))this.size.height=b.height;if(l(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=
null}if(d=="nw"){b.top=a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,d=l(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=l(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=l(b.width)&&a.minWidth&&a.minWidth>b.width,h=l(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+
this.size.height,k=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&k)b.left=i-a.minWidth;if(d&&k)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=
[c.css("borderTopWidth"),c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=
this.options;this.elementOffset=this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,
a){return{width:this.originalSize.width+a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,
c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,
originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,{version:"1.8.10"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=
b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var k=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:k.parents(a.originalElement[0]).length?["width","height"]:["width",
"height","top","left"];e.each(r,function(n,o){if((n=(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(k.css("position"))){c._revertToRelativePosition=true;k.css({position:"absolute",top:"auto",left:"auto"})}k.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};
if(b._revertToRelativePosition){b._revertToRelativePosition=false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-
g};g=parseInt(a.element.css("left"),10)+(a.position.left-a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,
height:i.height});a._updateCache(i);a._propagate("resize",b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=
e(a),f=[];e(["Top","Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,
d=a.containerOffset,f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?
d.top:0}a.offset.left=a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=
a.size.width/a.aspectRatio}if(d+a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&
/static/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");
b.ghost&&b.ghost.css({position:"relative",height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/
(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},l=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
;/*
 * jQuery UI Selectable 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Selectables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */
(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),
selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX,
c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",
c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d=
this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.10"})})(jQuery);
;/*
 * jQuery UI Sortable 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Sortables
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */
(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){this.containerCache={};this.element.addClass("ui-sortable");
this.refresh();this.floating=this.items.length?/left|right/.test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a==="disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,
arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=
c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,
{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();
if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",
a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");
if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+
this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+
b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+
"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,
c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==
document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp({target:null});this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var b=this.containers.length-
1;b>=0;b--){this.containers[b]._trigger("deactivate",null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}if(this.placeholder){this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});
this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):d(this.domPosition.parent).prepend(this.currentItem)}return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},toArray:function(a){var b=this._getItemsAsjQuery(a&&
a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||this.options.tolerance!="pointer"&&this.helperProportions[this.floating?
"width":"height"]>a[this.floating?"width":"height"]?j:g<b+this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?
c&&c=="right"||a=="down"?2:1:a&&(a=="down"?2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;
return a!=0&&(a>0?"down":"up")},_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=
d.data(f[g],"sortable");if(h&&h!=this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});
return d(b)},_removeCurrentsFromItems:function(){for(var a=this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=
d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&this.helper)this.offset.parent=
this._getParentOffset();for(var b=this.items.length-1;b>=0;b--){var c=this.items[b],e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=
e.top;this.containers[b].containerCache.width=this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];
if(!e)f.style.visibility="hidden";return f},update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);
c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===
1){this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=
this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):
b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==
""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=
this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),
10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions=
{width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||
document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,
b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=
document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():
e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-
this.offset.click.left<this.containment[0])f=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<
this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&
this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=
this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem[0].parentNode&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();
this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],
this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",
g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||
this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,
originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});d.extend(d.ui.sortable,{version:"1.8.10"})})(jQuery);
;/*
 * jQuery UI Accordion 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Accordion
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 */
(function(c){c.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");
a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var h=d.closest(".ui-accordion-header");a.active=h.length?h:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion",
function(f){return a._keydown(f)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(f){a._clickHandler.call(a,f,this);f.preventDefault()})},_createIcons:function(){var a=this.options;if(a.icons){c("<span></span>").addClass("ui-icon "+
a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabIndex");
this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons();
b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,h=this.headers.index(a.target),f=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:f=this.headers[(h+1)%d];break;case b.LEFT:case b.UP:f=this.headers[(h-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target);
a.preventDefault()}if(f){c(a.target).attr("tabIndex",-1);c(f).attr("tabIndex",0);f.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+
c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options;
if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){var h=this.active;j=a.next();g=this.active.next();e={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):j,oldContent:g};var f=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(j,g,e,b,f);h.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);
if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);a.next().addClass("ui-accordion-content-active")}}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);this.active.next().addClass("ui-accordion-content-active");var g=this.active.next(),
e={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:g},j=this.active=c([]);this._toggle(j,g,e)}},_toggle:function(a,b,d,h,f){var g=this,e=g.options;g.toShow=a;g.toHide=b;g.data=d;var j=function(){if(g)return g._completed.apply(g,arguments)};g._trigger("changestart",null,g.data);g.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&h?{toShow:c([]),toHide:b,complete:j,down:f,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:f,autoHeight:e.autoHeight||
e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;h=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!h[k]&&!c.easing[k])k="slide";h[k]||(h[k]=function(l){this.slide(l,{easing:k,duration:i||700})});h[k](d)}else{if(e.collapsible&&h)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false",
tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");if(this.toHide.length)this.toHide.parent()[0].className=this.toHide.parent()[0].className;this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.10",animations:{slide:function(a,b){a=
c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),h=0,f={},g={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){g[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/);f[i]={value:j[1],
unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(g,{step:function(j,i){if(i.prop=="height")h=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=h*f[i.prop].value+f[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide",paddingTop:"hide",
paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery);
;/*
 * jQuery UI Autocomplete 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Autocomplete
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 *	jquery.ui.position.js
 */
(function(d){var e=0;d.widget("ui.autocomplete",{options:{appendTo:"body",delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},pending:0,_create:function(){var a=this,b=this.element[0].ownerDocument,g;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.attr("readonly"))){g=false;var f=d.ui.keyCode;
switch(c.keyCode){case f.PAGE_UP:a._move("previousPage",c);break;case f.PAGE_DOWN:a._move("nextPage",c);break;case f.UP:a._move("previous",c);c.preventDefault();break;case f.DOWN:a._move("next",c);c.preventDefault();break;case f.ENTER:case f.NUMPAD_ENTER:if(a.menu.active){g=true;c.preventDefault()}case f.TAB:if(!a.menu.active)return;a.menu.select(c);break;case f.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=a.element.val()){a.selectedItem=
null;a.search(null,c)}},a.options.delay);break}}}).bind("keypress.autocomplete",function(c){if(g){g=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};this.menu=d("<ul></ul>").addClass("ui-autocomplete").appendTo(d(this.options.appendTo||
"body",b)[0]).mousedown(function(c){var f=a.menu.element[0];d(c.target).closest(".ui-menu-item").length||setTimeout(function(){d(document).one("mousedown",function(h){h.target!==a.element[0]&&h.target!==f&&!d.ui.contains(f,h.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,f){f=f.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:f})&&/^key/.test(c.originalEvent.type)&&a.element.val(f.value)},selected:function(c,f){var h=f.item.data("item.autocomplete"),
i=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=i;setTimeout(function(){a.previous=i;a.selectedItem=h},1)}false!==a._trigger("select",c,{item:h})&&a.element.val(h.value);a.term=a.element.val();a.close(c);a.selectedItem=h},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");d.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");
this.menu.element.remove();d.Widget.prototype.destroy.call(this)},_setOption:function(a,b){d.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(d(b||"body",this.element[0].ownerDocument)[0]);a==="disabled"&&b&&this.xhr&&this.xhr.abort()},_initSource:function(){var a=this,b,g;if(d.isArray(this.options.source)){b=this.options.source;this.source=function(c,f){f(d.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source===
"string"){g=this.options.source;this.source=function(c,f){a.xhr&&a.xhr.abort();a.xhr=d.ajax({url:g,data:c,dataType:"json",autocompleteRequest:++e,success:function(h){this.autocompleteRequest===e&&f(h)},error:function(){this.autocompleteRequest===e&&f([])}})}}else this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},
_search:function(a){this.pending++;this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(!this.options.disabled&&a&&a.length){a=this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();this.pending--;this.pending||this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this.menu.element.hide();this.menu.deactivate();this._trigger("close",a)}},_change:function(a){this.previous!==
this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return d.map(a,function(b){if(typeof b==="string")return{label:b,value:b};return d.extend({label:b.label||b.value,value:b.value||b.label},b)})},_suggest:function(a){var b=this.menu.element.empty().zIndex(this.element.zIndex()+1);this._renderMenu(b,a);this.menu.deactivate();this.menu.refresh();b.show();this._resizeMenu();b.position(d.extend({of:this.element},this.options.position))},
_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var g=this;d.each(b,function(c,f){g._renderItem(a,f)})},_renderItem:function(a,b){return d("<li></li>").data("item.autocomplete",b).append(d("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);
else this.search(null,b)},widget:function(){return this.menu.element}});d.extend(d.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,"\\$&")},filter:function(a,b){var g=new RegExp(d.ui.autocomplete.escapeRegex(b),"i");return d.grep(a,function(c){return g.test(c.label||c.value||c)})}})})(jQuery);
(function(d){d.widget("ui.menu",{_create:function(){var e=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(a){if(d(a.target).closest(".ui-menu-item a").length){a.preventDefault();e.select(a)}});this.refresh()},refresh:function(){var e=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
-1).mouseenter(function(a){e.activate(a,d(this).parent())}).mouseleave(function(){e.deactivate()})},activate:function(e,a){this.deactivate();if(this.hasScroll()){var b=a.offset().top-this.element.offset().top,g=this.element.attr("scrollTop"),c=this.element.height();if(b<0)this.element.attr("scrollTop",g+b);else b>=c&&this.element.attr("scrollTop",g+b-c+a.height())}this.active=a.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",e,{item:a})},
deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");this._trigger("blur");this.active=null}},next:function(e){this.move("next",".ui-menu-item:first",e)},previous:function(e){this.move("prev",".ui-menu-item:last",e)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(e,a,b){if(this.active){e=this.active[e+"All"](".ui-menu-item").eq(0);
e.length?this.activate(b,e):this.activate(b,this.element.children(a))}else this.activate(b,this.element.children(a))},nextPage:function(e){if(this.hasScroll())if(!this.active||this.last())this.activate(e,this.element.children(".ui-menu-item:first"));else{var a=this.active.offset().top,b=this.element.height(),g=this.element.children(".ui-menu-item").filter(function(){var c=d(this).offset().top-a-b+d(this).height();return c<10&&c>-10});g.length||(g=this.element.children(".ui-menu-item:last"));this.activate(e,
g)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(e){if(this.hasScroll())if(!this.active||this.first())this.activate(e,this.element.children(".ui-menu-item:last"));else{var a=this.active.offset().top,b=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var g=d(this).offset().top-a+b-d(this).height();return g<10&&g>-10});result.length||(result=this.element.children(".ui-menu-item:first"));
this.activate(e,result)}else this.activate(e,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element.attr("scrollHeight")},select:function(e){this._trigger("selected",e,{item:this.active})}})})(jQuery);
;/*
 * jQuery UI Button 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Button
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 */
(function(a){var g,i=function(b){a(":ui-button",b.target.form).each(function(){var c=a(this).data("button");setTimeout(function(){c.refresh()},1)})},h=function(b){var c=b.name,d=b.form,f=a([]);if(c)f=d?a(d).find("[name='"+c+"']"):a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form});return f};a.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",
i);if(typeof this.options.disabled!=="boolean")this.options.disabled=this.element.attr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var b=this,c=this.options,d=this.type==="checkbox"||this.type==="radio",f="ui-state-hover"+(!d?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",
function(){if(!c.disabled){a(this).addClass("ui-state-hover");this===g&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){c.disabled||a(this).removeClass(f)}).bind("focus.button",function(){a(this).addClass("ui-state-focus")}).bind("blur.button",function(){a(this).removeClass("ui-state-focus")});d&&this.element.bind("change.button",function(){b.refresh()});if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(c.disabled)return false;a(this).toggleClass("ui-state-active");
b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(c.disabled)return false;a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed",true);var e=b.element[0];h(e).not(e).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed",false)});else{this.buttonElement.bind("mousedown.button",function(){if(c.disabled)return false;a(this).addClass("ui-state-active");
g=this;a(document).one("mouseup",function(){g=null})}).bind("mouseup.button",function(){if(c.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(e){if(c.disabled)return false;if(e.keyCode==a.ui.keyCode.SPACE||e.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(e){e.keyCode===a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",
c.disabled)},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type==="radio"){this.buttonElement=this.element.parents().last().find("label[for="+this.element.attr("id")+"]");this.element.addClass("ui-helper-hidden-accessible");var b=this.element.is(":checked");b&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=
this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active  ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||
this.buttonElement.removeAttr("title");a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled")c?this.element.attr("disabled",true):this.element.removeAttr("disabled");this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")h(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
true):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed",false)});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed",true):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed",false)},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
c=a("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,f=d.primary&&d.secondary,e=[];if(d.primary||d.secondary){e.push("ui-button-text-icon"+(f?"s":d.primary?"-primary":"-secondary"));d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>");d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>");if(!this.options.text){e.push(f?"ui-button-icons-only":"ui-button-icon-only");
b.removeClass("ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary");this.hasTitle||b.attr("title",c)}}else e.push("ui-button-text-only");b.addClass(e.join(" "))}}});a.widget("ui.buttonset",{options:{items:":button, :submit, :reset, :checkbox, :radio, a, :data(button)"},_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,
arguments)},refresh:function(){this.buttons=this.element.find(this.options.items).filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end()},destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");
a.Widget.prototype.destroy.call(this)}})})(jQuery);
;/*
 * jQuery UI Dialog 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Dialog
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 *  jquery.ui.button.js
 *	jquery.ui.draggable.js
 *	jquery.ui.mouse.js
 *	jquery.ui.position.js
 *	jquery.ui.resizable.js
 */
(function(c,j){var k={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},l={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",collision:"fit",using:function(a){var b=c(this).css(a).offset().top;b<0&&
c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||"&#160;",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",
-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role",
"button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=
b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&&
a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d,e;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0]){e=c(this).css("z-index");
isNaN(e)||(d=Math.max(d,e))}});c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);
d.element.attr(a);d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===f[0]&&e.shiftKey){g.focus(1);return false}}});
c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(f,
h){h=c.isFunction(h)?{click:h,text:f}:h;f=c('<button type="button"></button>').attr(h,true).unbind("click").click(function(){h.click.apply(b.element[0],arguments)}).appendTo(g);c.fn.button&&f.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=
d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,originalSize:f.originalSize,
position:f.position,size:f.size}}a=a===j?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",f,b(h))},stop:function(f,
h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===
1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(c.extend({of:window},a));e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f);if(g in k)e=true;if(g in
l)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):e.removeClass("ui-dialog-disabled");
break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||"&#160;"));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a=this.options,b,d,e=
this.uiDialog.is(":visible");this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();e||this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height-b,0));this.uiDialog.is(":data(resizable)")&&
this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.10",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length===
0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),
height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){var b=c.inArray(a,this.instances);b!=-1&&this.oldInstances.push(this.instances.splice(b,1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");a.remove();var d=0;c.each(this.instances,function(){d=Math.max(d,this.css("z-index"))});this.maxZ=d},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);
b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,
function(){a=a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
;/*
 * jQuery UI Slider 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Slider
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.mouse.js
 *	jquery.ui.widget.js
 */
(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var b=this,a=this.options;this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all");a.disabled&&this.element.addClass("ui-slider-disabled ui-disabled");
this.range=d([]);if(a.range){if(a.range===true){this.range=d("<div></div>");if(!a.values)a.values=[this._valueMin(),this._valueMin()];if(a.values.length&&a.values.length!==2)a.values=[a.values[0],a.values[0]]}else this.range=d("<div></div>");this.range.appendTo(this.element).addClass("ui-slider-range");if(a.range==="min"||a.range==="max")this.range.addClass("ui-slider-range-"+a.range);this.range.addClass("ui-widget-header")}d(".ui-slider-handle",this.element).length===0&&d("<a href='#'></a>").appendTo(this.element).addClass("ui-slider-handle");
if(a.values&&a.values.length)for(;d(".ui-slider-handle",this.element).length<a.values.length;)d("<a href='#'></a>").appendTo(this.element).addClass("ui-slider-handle");this.handles=d(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(c){c.preventDefault()}).hover(function(){a.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(a.disabled)d(this).blur();
else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(c){d(this).data("index.ui-slider-handle",c)});this.handles.keydown(function(c){var e=true,f=d(this).data("index.ui-slider-handle"),h,g,i;if(!b.options.disabled){switch(c.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:e=
false;if(!b._keySliding){b._keySliding=true;d(this).addClass("ui-state-active");h=b._start(c,f);if(h===false)return}break}i=b.options.step;h=b.options.values&&b.options.values.length?(g=b.values(f)):(g=b.value());switch(c.keyCode){case d.ui.keyCode.HOME:g=b._valueMin();break;case d.ui.keyCode.END:g=b._valueMax();break;case d.ui.keyCode.PAGE_UP:g=b._trimAlignValue(h+(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:g=b._trimAlignValue(h-(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(h===
b._valueMax())return;g=b._trimAlignValue(h+i);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(h===b._valueMin())return;g=b._trimAlignValue(h-i);break}b._slide(c,f,g);return e}}).keyup(function(c){var e=d(this).data("index.ui-slider-handle");if(b._keySliding){b._keySliding=false;b._stop(c,e);b._change(c,e);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");
this._mouseDestroy();return this},_mouseCapture:function(b){var a=this.options,c,e,f,h,g;if(a.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:b.pageX,y:b.pageY});e=this._valueMax()-this._valueMin()+1;h=this;this.handles.each(function(i){var j=Math.abs(c-h.values(i));if(e>j){e=j;f=d(this);g=i}});if(a.range===true&&this.values(1)===a.min){g+=1;f=d(this.handles[g])}if(this._start(b,
g)===false)return false;this._mouseSliding=true;h._handleIndex=g;f.addClass("ui-state-active").focus();a=f.offset();this._clickOffset=!d(b.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:b.pageX-a.left-f.width()/2,top:b.pageY-a.top-f.height()/2-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(b,g,c);return this._animateOff=true},_mouseStart:function(){return true},
_mouseDrag:function(b){var a=this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b,this._handleIndex,a);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(b){var a;
if(this.orientation==="horizontal"){a=this.elementSize.width;b=b.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{a=this.elementSize.height;b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}a=b/a;if(a>1)a=1;if(a<0)a=0;if(this.orientation==="vertical")a=1-a;b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+a*b)},_start:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=
this.values(a);c.values=this.values()}return this._trigger("start",b,c)},_slide:function(b,a,c){var e;if(this.options.values&&this.options.values.length){e=this.values(a?0:1);if(this.options.values.length===2&&this.options.range===true&&(a===0&&c>e||a===1&&c<e))c=e;if(c!==this.values(a)){e=this.values();e[a]=c;b=this._trigger("slide",b,{handle:this.handles[a],value:c,values:e});this.values(a?0:1);b!==false&&this.values(a,c,true)}}else if(c!==this.value()){b=this._trigger("slide",b,{handle:this.handles[a],
value:c});b!==false&&this.value(c)}},_stop:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("stop",b,c)},_change:function(b,a){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("change",b,c)}},value:function(b){if(arguments.length){this.options.value=
this._trimAlignValue(b);this._refreshValue();this._change(null,0)}return this._value()},values:function(b,a){var c,e,f;if(arguments.length>1){this.options.values[b]=this._trimAlignValue(a);this._refreshValue();this._change(null,b)}if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;e=arguments[0];for(f=0;f<c.length;f+=1){c[f]=this._trimAlignValue(e[f]);this._change(null,f)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(b):this.value();
else return this._values()},_setOption:function(b,a){var c,e=0;if(d.isArray(this.options.values))e=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(b){case "disabled":if(a){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<e;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var b=this.options.value;return b=this._trimAlignValue(b)},_values:function(b){var a,c;if(arguments.length){a=this.options.values[b];
return a=this._trimAlignValue(a)}else{a=this.options.values.slice();for(c=0;c<a.length;c+=1)a[c]=this._trimAlignValue(a[c]);return a}},_trimAlignValue:function(b){if(b<=this._valueMin())return this._valueMin();if(b>=this._valueMax())return this._valueMax();var a=this.options.step>0?this.options.step:1,c=(b-this._valueMin())%a;alignValue=b-c;if(Math.abs(c)*2>=a)alignValue+=c>0?a:-a;return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},
_refreshValue:function(){var b=this.options.range,a=this.options,c=this,e=!this._animateOff?a.animate:false,f,h={},g,i,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(k){f=(c.values(k)-c._valueMin())/(c._valueMax()-c._valueMin())*100;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";d(this).stop(1,1)[e?"animate":"css"](h,a.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(k===0)c.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},a.animate);
if(k===1)c.range[e?"animate":"css"]({width:f-g+"%"},{queue:false,duration:a.animate})}else{if(k===0)c.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},a.animate);if(k===1)c.range[e?"animate":"css"]({height:f-g+"%"},{queue:false,duration:a.animate})}g=f});else{i=this.value();j=this._valueMin();l=this._valueMax();f=l!==j?(i-j)/(l-j)*100:0;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[e?"animate":"css"](h,a.animate);if(b==="min"&&this.orientation==="horizontal")this.range.stop(1,
1)[e?"animate":"css"]({width:f+"%"},a.animate);if(b==="max"&&this.orientation==="horizontal")this.range[e?"animate":"css"]({width:100-f+"%"},{queue:false,duration:a.animate});if(b==="min"&&this.orientation==="vertical")this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},a.animate);if(b==="max"&&this.orientation==="vertical")this.range[e?"animate":"css"]({height:100-f+"%"},{queue:false,duration:a.animate})}}});d.extend(d.ui.slider,{version:"1.8.10"})})(jQuery);
;/*
 * jQuery UI Tabs 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Tabs
 *
 * Depends:
 *	jquery.ui.core.js
 *	jquery.ui.widget.js
 */
(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&&
e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=
d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a.element.find(a._sanitizeSelector(i)));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=a.element.find("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
if(c.selected>=0&&this.anchors.length){a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],a.element.find(a._sanitizeSelector(a.anchors[c.selected].hash))[0]))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+
g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",
function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};
this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=a.element.find(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=
-1;c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=
d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b,
e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=c.element.find("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);
j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();
if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=b}),function(h){return h>=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null,
this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this},
load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){e.element.find(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c,
"cache.tabs",true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},
url:function(b,e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.10"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&&
a.rotate(null)}:function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
;/*
 * jQuery UI Datepicker 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Datepicker
 *
 * Depends:
 *	jquery.ui.core.js
 */
(function(d,G){function K(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')}function E(a,b){d.extend(a,b);for(var c in b)if(b[c]==
null||b[c]==G)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.10"}});var y=(new Date).getTime();d.extend(K.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){E(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=f}}}e=a.nodeName.toLowerCase();
f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')}},
_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&
b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==
""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,
c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),
true);this._updateDatepicker(b);this._updateAlternate(b);b.dpDiv.show()}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}E(a.settings,e||{});
b=b&&b.constructor==Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);
this._showDatepicker(this._dialogInput[0]);d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",
this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().removeClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,
function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().addClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:
f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?d.extend({},
e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&this._hideDatepicker();var h=this._getDateDatepicker(a,true);E(e.settings,f);this._attachments(d(a),e);this._autoSize(e);this._setDateDatepicker(a,h);this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);
this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass+":not(."+d.datepicker._currentClass+")",b.dpDiv);c[0]?
d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]):d.datepicker._hideDatepicker();return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||
a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,
e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,
"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));var c=String.fromCharCode(a.charCode==G?a.keyCode:a.charCode);return a.ctrlKey||a.metaKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},
_showDatepicker:function(a){a=a.target||a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");E(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=
d.datepicker._findPos(a);d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.empty();b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,
c,e);b.dpDiv.css({position:d.datepicker._inDialog&&d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){d.datepicker._datepickerShowing=true;var i=b.dpDiv.find("iframe.ui-datepicker-cover");if(i.length){var g=d.datepicker._getBorders(b.dpDiv);i.css({left:-g[0],top:-g[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})}};b.dpDiv.zIndex(d(a).zIndex()+1);d.effects&&
d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=this,c=d.datepicker._getBorders(a.dpDiv);a.dpDiv.empty().append(this._generateHTML(a));var e=a.dpDiv.find("iframe.ui-datepicker-cover");e.length&&e.css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()});a.dpDiv.find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",
function(){d(this).removeClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).bind("mouseover",function(){if(!b._isDisabledDatepicker(a.inline?a.dpDiv.parent()[0]:a.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=
-1&&d(this).addClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();c=this._getNumberOfMonths(a);e=c[1];e>1?a.dpDiv.addClass("ui-datepicker-multi-"+e).css("width",17*e+"em"):a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");a.dpDiv[(c[0]!=1||c[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,
"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input[0]!=document.activeElement&&a.input.focus();if(a.yearshtml){var f=a.yearshtml;setTimeout(function(){f===a.yearshtml&&a.dpDiv.find("select.ui-datepicker-year:first").replaceWith(a.yearshtml);f=a.yearshtml=null},0)}},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),
parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),j=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,
b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>j&&j>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1||d.expr.filters.hidden(a));)a=a[b?"previousSibling":"nextSibling"];a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);
this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},
_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):
0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=
false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=
d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);
else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=
a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b=="object"?b.toString():b+"";if(b=="")return null;var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff;e=typeof e!="string"?e:(new Date).getFullYear()%100+parseInt(e,10);for(var f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,
g=(c?c.monthNames:null)||this._defaults.monthNames,j=c=-1,l=-1,u=-1,k=false,o=function(p){(p=z+1<a.length&&a.charAt(z+1)==p)&&z++;return p},m=function(p){var v=o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"&&v?4:p=="o"?3:2)+"}");p=b.substring(s).match(p);if(!p)throw"Missing number at position "+s;s+=p[0].length;return parseInt(p[0],10)},n=function(p,v,H){p=o(p)?H:v;for(v=0;v<p.length;v++)if(b.substr(s,p[v].length).toLowerCase()==p[v].toLowerCase()){s+=p[v].length;return v+1}throw"Unknown name at position "+
s;},r=function(){if(b.charAt(s)!=a.charAt(z))throw"Unexpected literal at position "+s;s++},s=0,z=0;z<a.length;z++)if(k)if(a.charAt(z)=="'"&&!o("'"))k=false;else r();else switch(a.charAt(z)){case "d":l=m("d");break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":j=m("m");break;case "M":j=n("M",i,g);break;case "y":c=m("y");break;case "@":var w=new Date(m("@"));c=w.getFullYear();j=w.getMonth()+1;l=w.getDate();break;case "!":w=new Date((m("!")-this._ticksTo1970)/1E4);c=w.getFullYear();j=w.getMonth()+
1;l=w.getDate();break;case "'":if(o("'"))r();else k=true;break;default:r()}if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>-1){j=1;l=u;do{e=this._getDaysInMonth(c,j-1);if(l<=e)break;j++;l-=e}while(1)}w=this._daylightSavingAdjust(new Date(c,j-1,l));if(w.getFullYear()!=c||w.getMonth()+1!=j||w.getDate()!=l)throw"Invalid date";return w},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",
RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=k+1<a.length&&
a.charAt(k+1)==o)&&k++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},j=function(o,m,n,r){return i(o)?r[m]:n[m]},l="",u=false;if(b)for(var k=0;k<a.length;k++)if(u)if(a.charAt(k)=="'"&&!i("'"))u=false;else l+=a.charAt(k);else switch(a.charAt(k)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=j("D",b.getDay(),e,f);break;case "o":l+=g("o",(b.getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864E5,3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=j("M",
b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+="'";else u=true;break;default:l+=a.charAt(k)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+1)==h)&&f++;return h},f=0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+=
"0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==G?a.settings[b]:this._defaults[b]},_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,f,h;f=h=this._getDefaultDate(a);var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=
f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var e=function(h){var i=new Date;i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=
(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,j=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,k=u.exec(h);k;){switch(k[2]||"d"){case "d":case "D":g+=parseInt(k[1],10);break;case "w":case "W":g+=parseInt(k[1],10)*7;break;case "m":case "M":l+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break;case "y":case "Y":j+=parseInt(k[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(j,l));break}k=u.exec(h)}return new Date(j,
l,g)};if(b=(b=b==null||b===""?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):new Date(b.getTime()))&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=
a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),
b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),j=this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),k=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=
this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=k&&n<k?k:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-j,1)),this._getFormatConfig(a));n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+y+".datepicker._adjustDate('#"+a.id+"', -"+j+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+
(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m,g+j,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+y+".datepicker._adjustDate('#"+a.id+"', +"+j+", 'M');\" title=\""+r+'"><span class="ui-icon ui-icon-circle-triangle-'+
(c?"w":"e")+'">'+r+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>";j=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&&a.currentDay?u:b;j=!h?j:this.formatDate(j,r,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+y+'.datepicker._hideDatepicker();">'+this._get(a,
"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,r)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+y+".datepicker._gotoToday('#"+a.id+"');\">"+j+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;j=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),z=
this._get(a,"monthNames"),w=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),v=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var L=this._getDefaultDate(a),I="",C=0;C<i[0];C++){for(var M="",D=0;D<i[1];D++){var N=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",x="";if(l){x+='<div class="ui-datepicker-group';if(i[1]>1)switch(D){case 0:x+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-
1:x+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:x+=" ui-datepicker-group-middle";t="";break}x+='">'}x+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&C==0?c?f:n:"")+(/all|right/.test(t)&&C==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,k,o,C>0||D>0,z,w)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var A=j?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var q=
(t+h)%7;A+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+r[q]+'">'+s[q]+"</span></th>"}x+=A+"</tr></thead><tbody>";A=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,A);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;A=l?6:Math.ceil((t+A)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var O=0;O<A;O++){x+="<tr>";var P=!j?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(q)+"</td>";for(t=0;t<7;t++){var F=
p?p.apply(a.input?a.input[0]:null,[q]):[true,""],B=q.getMonth()!=g,J=B&&!H||!F[0]||k&&q<k||o&&q>o;P+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(B?" ui-datepicker-other-month":"")+(q.getTime()==N.getTime()&&g==a.selectedMonth&&a._keyEvent||L.getTime()==q.getTime()&&L.getTime()==N.getTime()?" "+this._dayOverClass:"")+(J?" "+this._unselectableClass+" ui-state-disabled":"")+(B&&!v?"":" "+F[1]+(q.getTime()==u.getTime()?" "+this._currentClass:"")+(q.getTime()==b.getTime()?" ui-datepicker-today":
""))+'"'+((!B||v)&&F[2]?' title="'+F[2]+'"':"")+(J?"":' onclick="DP_jQuery_'+y+".datepicker._selectDay('#"+a.id+"',"+q.getMonth()+","+q.getFullYear()+', this);return false;"')+">"+(B&&!v?"&#xa0;":J?'<span class="ui-state-default">'+q.getDate()+"</span>":'<a class="ui-state-default'+(q.getTime()==b.getTime()?" ui-state-highlight":"")+(q.getTime()==u.getTime()?" ui-state-active":"")+(B?" ui-priority-secondary":"")+'" href="#">'+q.getDate()+"</a>")+"</td>";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}x+=
P+"</tr>"}g++;if(g>11){g=0;m++}x+="</tbody></table>"+(l?"</div>"+(i[0]>0&&D==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");M+=x}I+=M}I+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':"");a._keyEvent=false;return I},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var j=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),k='<div class="ui-datepicker-title">',
o="";if(h||!j)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+y+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" onclick=\"DP_jQuery_"+y+".datepicker._clickMonthYear('#"+a.id+"');\">";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(k+=o+(h||!(j&&
l)?"&#xa0;":""));a.yearshtml="";if(h||!l)k+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?r:s};b=i(g[0]);g=Math.max(b,i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(a.yearshtml+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+y+".datepicker._selectMonthYear('#"+
a.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+y+".datepicker._clickMonthYear('#"+a.id+"');\">";b<=g;b++)a.yearshtml+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";a.yearshtml+="</select>";if(d.browser.mozilla)k+='<select class="ui-datepicker-year"><option value="'+c+'" selected="selected">'+c+"</option></select>";else{k+=a.yearshtml;a.yearshtml=null}}k+=this._get(a,"yearSuffix");if(u)k+=(h||!(j&&l)?"&#xa0;":"")+o;k+="</div>";return k},_adjustInstDate:function(a,b,c){var e=
a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,
"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-this._daylightSavingAdjust(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);
c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,
"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=
function(a){if(!this.length)return this;if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,
[this[0]].concat(b));return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new K;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.10";window["DP_jQuery_"+y]=d})(jQuery);
;/*
 * jQuery UI Progressbar 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Progressbar
 *
 * Depends:
 *   jquery.ui.core.js
 *   jquery.ui.widget.js
 */
(function(b,d){b.widget("ui.progressbar",{options:{value:0,max:100},min:0,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.options.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this.oldValue=this._value();this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===d)return this._value();this._setOption("value",a);return this},_setOption:function(a,c){if(a==="value"){this.options.value=c;this._refreshValue();this._value()===this.options.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.options.max,Math.max(this.min,a))},_percentage:function(){return 100*
this._value()/this.options.max},_refreshValue:function(){var a=this.value(),c=this._percentage();if(this.oldValue!==a){this.oldValue=a;this._trigger("change")}this.valueDiv.toggleClass("ui-corner-right",a===this.options.max).width(c.toFixed(0)+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.10"})})(jQuery);
;/*
 * jQuery UI Effects 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Effects/
 */
jQuery.effects||function(f,j){function n(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return o.transparent;return o[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return n(b)}function p(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function q(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d=
a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:b in f.fx.speeds?f.fx.speeds[b]:f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function m(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor",
"borderTopColor","borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=n(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var o={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,
0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,
211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},r=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,
d){if(f.isFunction(b)){d=b;b=null}return this.queue("fx",function(){var e=f(this),g=e.attr("style")||" ",h=q(p.call(this)),l,v=e.attr("className");f.each(r,function(w,i){c[i]&&e[i+"Class"](c[i])});l=q(p.call(this));e.attr("className",v);e.animate(u(h,l),a,b,function(){f.each(r,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments)});h=f.queue(this);l=h.splice(h.length-1,1)[0];
h.splice(1,0,l);f.dequeue(this)})};f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,
a):f.effects.animateClass.apply(this,[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.10",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,
a){var b;switch(c[0]){case "top":b=0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",
border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);
return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(m(c))return this._show.apply(this,arguments);
else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(m(c))return this._hide.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(m(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),
b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,
a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,
a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==
e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=
g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/
h);if(a<1)return-0.5*h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,
a,b,d,e){return d-f.easing.easeOutBounce(c,e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
;/*
 * jQuery UI Effects Blind 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Effects/Blind
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","bottom","left","right"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a,
g);b.effects.removeWrapper(a);c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery);
;/*
 * jQuery UI Effects Bounce 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Effects/Bounce
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(e){e.effects.bounce=function(b){return this.queue(function(){var a=e(this),l=["position","top","bottom","left","right"],h=e.effects.setMode(a,b.options.mode||"effect"),d=b.options.direction||"up",c=b.options.distance||20,m=b.options.times||5,i=b.duration||250;/show|hide/.test(h)&&l.push("opacity");e.effects.save(a,l);a.show();e.effects.createWrapper(a);var f=d=="up"||d=="down"?"top":"left";d=d=="up"||d=="left"?"pos":"neg";c=b.options.distance||(f=="top"?a.outerHeight({margin:true})/3:a.outerWidth({margin:true})/
3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a);
b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery);
;/*
 * jQuery UI Effects Clip 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Effects/Clip
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","bottom","left","right","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position,
c/2)}var h={};h[g.size]=f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery);
;/*
 * jQuery UI Effects Drop 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Effects/Drop
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e==
"show"?1:0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
;/*
 * jQuery UI Effects Explode 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Effects/Explode
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(j){j.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode=a.options.mode=="toggle"?j(this).is(":visible")?"hide":"show":a.options.mode;var b=j(this).show().css("visibility","hidden"),g=b.offset();g.top-=parseInt(b.css("marginTop"),10)||0;g.left-=parseInt(b.css("marginLeft"),10)||0;for(var h=b.outerWidth(true),i=b.outerHeight(true),e=0;e<c;e++)for(var f=
0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+
e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
;/*
 * jQuery UI Effects Fade 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Effects/Fade
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
;/*
 * jQuery UI Effects Fold 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Effects/Fold
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","bottom","left","right"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],
10)/100*f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery);
;/*
 * jQuery UI Effects Highlight 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Effects/Highlight
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
;/*
 * jQuery UI Effects Pulsate 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Effects/Pulsate
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration,
a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery);
;/*
 * jQuery UI Effects Scale 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Effects/Scale
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(c){c.effects.puff=function(b){return this.queue(function(){var a=c(this),e=c.effects.setMode(a,b.options.mode||"hide"),g=parseInt(b.options.percent,10)||150,h=g/100,i={height:a.height(),width:a.width()};c.extend(b.options,{fade:true,mode:e,percent:e=="hide"?g:100,from:e=="hide"?i:{height:i.height*h,width:i.width*h}});a.effect("scale",b.options,b.duration,b.callback);a.dequeue()})};c.effects.scale=function(b){return this.queue(function(){var a=c(this),e=c.extend(true,{},b.options),g=c.effects.setMode(a,
b.options.mode||"effect"),h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:g=="hide"?0:100),i=b.options.direction||"both",f=b.options.origin;if(g!="effect"){e.origin=f||["middle","center"];e.restore=true}f={height:a.height(),width:a.width()};a.from=b.options.from||(g=="show"?{height:0,width:0}:f);h={y:i!="horizontal"?h/100:1,x:i!="vertical"?h/100:1};a.to={height:f.height*h.y,width:f.width*h.x};if(b.options.fade){if(g=="show"){a.from.opacity=0;a.to.opacity=1}if(g=="hide"){a.from.opacity=
1;a.to.opacity=0}}e.from=a.from;e.to=a.to;e.mode=g;a.effect("size",e,b.duration,b.callback);a.dequeue()})};c.effects.size=function(b){return this.queue(function(){var a=c(this),e=["position","top","bottom","left","right","width","height","overflow","opacity"],g=["position","top","bottom","left","right","overflow","opacity"],h=["width","height","overflow"],i=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],
p=c.effects.setMode(a,b.options.mode||"effect"),n=b.options.restore||false,m=b.options.scale||"both",l=b.options.origin,j={height:a.height(),width:a.width()};a.from=b.options.from||j;a.to=b.options.to||j;if(l){l=c.effects.getBaseline(l,j);a.from.top=(j.height-a.from.height)*l.y;a.from.left=(j.width-a.from.width)*l.x;a.to.top=(j.height-a.to.height)*l.y;a.to.left=(j.width-a.to.width)*l.x}var d={from:{y:a.from.height/j.height,x:a.from.width/j.width},to:{y:a.to.height/j.height,x:a.to.width/j.width}};
if(m=="box"||m=="both"){if(d.from.y!=d.to.y){e=e.concat(f);a.from=c.effects.setTransition(a,f,d.from.y,a.from);a.to=c.effects.setTransition(a,f,d.to.y,a.to)}if(d.from.x!=d.to.x){e=e.concat(k);a.from=c.effects.setTransition(a,k,d.from.x,a.from);a.to=c.effects.setTransition(a,k,d.to.x,a.to)}}if(m=="content"||m=="both")if(d.from.y!=d.to.y){e=e.concat(i);a.from=c.effects.setTransition(a,i,d.from.y,a.from);a.to=c.effects.setTransition(a,i,d.to.y,a.to)}c.effects.save(a,n?e:g);a.show();c.effects.createWrapper(a);
a.css("overflow","hidden").css(a.from);if(m=="content"||m=="both"){f=f.concat(["marginTop","marginBottom"]).concat(i);k=k.concat(["marginLeft","marginRight"]);h=e.concat(f).concat(k);a.find("*[width]").each(function(){child=c(this);n&&c.effects.save(child,h);var o={height:child.height(),width:child.width()};child.from={height:o.height*d.from.y,width:o.width*d.from.x};child.to={height:o.height*d.to.y,width:o.width*d.to.x};if(d.from.y!=d.to.y){child.from=c.effects.setTransition(child,f,d.from.y,child.from);
child.to=c.effects.setTransition(child,f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a,
n?e:g);c.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
;/*
 * jQuery UI Effects Shake 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Effects/Shake
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","bottom","left","right"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]=
(h=="pos"?"-=":"+=")+e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery);
;/*
 * jQuery UI Effects Slide 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Effects/Slide
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","bottom","left","right"],f=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var g=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var e=d.options.distance||(g=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(f=="show")a.css(g,b=="pos"?isNaN(e)?"-"+e:-e:e);
var i={};i[g]=(f=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+e;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){f=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
;/*
 * jQuery UI Effects Transfer 1.8.10
 *
 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 *
 * http://docs.jquery.com/UI/Effects/Transfer
 *
 * Depends:
 *	jquery.effects.core.js
 */
(function(e){e.effects.transfer=function(a){return this.queue(function(){var b=e(this),c=e(a.options.to),d=c.offset();c={top:d.top,left:d.left,height:c.innerHeight(),width:c.innerWidth()};d=b.offset();var f=e('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments);
b.dequeue()})})}})(jQuery);
;;

//setInterval("checkNotifications()",8000);

function checkNotifications() {
	
	$.ajax({
		   type: "POST",
		   url: "/get/notifications",
		   success: function(msg){
		     //console.log(msg);
		     var result = $.parseJSON(msg);
		     console.log(result);
		     for(var msg in result)
		     {
		    	 $.jGrowl(result[msg].message, { life: 6000 });
		     }
		   }
		 });
	
};
/*
 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
 *
 * Uses the built in easing capabilities added In jQuery 1.1
 * to offer multiple easing options
 *
 * TERMS OF USE - jQuery Easing
 * 
 * Open source under the BSD License. 
 * 
 * Copyright Â© 2008 George McGinley Smith
 * All rights reserved.
 * 
 * Redistribution and use in source and binary forms, with or without modification, 
 * are permitted provided that the following conditions are met:
 * 
 * Redistributions of source code must retain the above copyright notice, this list of 
 * conditions and the following disclaimer.
 * Redistributions in binary form must reproduce the above copyright notice, this list 
 * of conditions and the following disclaimer in the documentation and/or other materials 
 * provided with the distribution.
 * 
 * Neither the name of the author nor the names of contributors may be used to endorse 
 * or promote products derived from this software without specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
 *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
 *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 
 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 
 * OF THE POSSIBILITY OF SUCH DAMAGE. 
 *
*/

jQuery.easing['jswing']=jQuery.easing['swing'];jQuery.extend(jQuery.easing,{def:'easeOutQuad',swing:function(x,t,b,c,d){return jQuery.easing[jQuery.easing.def](x,t,b,c,d)},easeInQuad:function(x,t,b,c,d){return c*(t/=d)*t+b},easeOutQuad:function(x,t,b,c,d){return-c*(t/=d)*(t-2)+b},easeInOutQuad:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t+b;return-c/2*((--t)*(t-2)-1)+b},easeInCubic:function(x,t,b,c,d){return c*(t/=d)*t*t+b},easeOutCubic:function(x,t,b,c,d){return c*((t=t/d-1)*t*t+1)+b},easeInOutCubic:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t+b;return c/2*((t-=2)*t*t+2)+b},easeInQuart:function(x,t,b,c,d){return c*(t/=d)*t*t*t+b},easeOutQuart:function(x,t,b,c,d){return-c*((t=t/d-1)*t*t*t-1)+b},easeInOutQuart:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t*t+b;return-c/2*((t-=2)*t*t*t-2)+b},easeInQuint:function(x,t,b,c,d){return c*(t/=d)*t*t*t*t+b},easeOutQuint:function(x,t,b,c,d){return c*((t=t/d-1)*t*t*t*t+1)+b},easeInOutQuint:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t*t*t+b;return c/2*((t-=2)*t*t*t*t+2)+b},easeInSine:function(x,t,b,c,d){return-c*Math.cos(t/d*(Math.PI/2))+c+b},easeOutSine:function(x,t,b,c,d){return c*Math.sin(t/d*(Math.PI/2))+b},easeInOutSine:function(x,t,b,c,d){return-c/2*(Math.cos(Math.PI*t/d)-1)+b},easeInExpo:function(x,t,b,c,d){return(t==0)?b:c*Math.pow(2,10*(t/d-1))+b},easeOutExpo:function(x,t,b,c,d){return(t==d)?b+c:c*(-Math.pow(2,-10*t/d)+1)+b},easeInOutExpo:function(x,t,b,c,d){if(t==0)return b;if(t==d)return b+c;if((t/=d/2)<1)return c/2*Math.pow(2,10*(t-1))+b;return c/2*(-Math.pow(2,-10*--t)+2)+b},easeInCirc:function(x,t,b,c,d){return-c*(Math.sqrt(1-(t/=d)*t)-1)+b},easeOutCirc:function(x,t,b,c,d){return c*Math.sqrt(1-(t=t/d-1)*t)+b},easeInOutCirc:function(x,t,b,c,d){if((t/=d/2)<1)return-c/2*(Math.sqrt(1-t*t)-1)+b;return c/2*(Math.sqrt(1-(t-=2)*t)+1)+b},easeInElastic:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d)==1)return b+c;if(!p)p=d*.3;if(a<Math.abs(c)){a=c;var s=p/4}else var s=p/(2*Math.PI)*Math.asin(c/a);return-(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b},easeOutElastic:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d)==1)return b+c;if(!p)p=d*.3;if(a<Math.abs(c)){a=c;var s=p/4}else var s=p/(2*Math.PI)*Math.asin(c/a);return a*Math.pow(2,-10*t)*Math.sin((t*d-s)*(2*Math.PI)/p)+c+b},easeInOutElastic:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d/2)==2)return b+c;if(!p)p=d*(.3*1.5);if(a<Math.abs(c)){a=c;var s=p/4}else var s=p/(2*Math.PI)*Math.asin(c/a);if(t<1)return-.5*(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;return a*Math.pow(2,-10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p)*.5+c+b},easeInBack:function(x,t,b,c,d,s){if(s==undefined)s=1.70158;return c*(t/=d)*t*((s+1)*t-s)+b},easeOutBack:function(x,t,b,c,d,s){if(s==undefined)s=1.70158;return c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},easeInOutBack:function(x,t,b,c,d,s){if(s==undefined)s=1.70158;if((t/=d/2)<1)return c/2*(t*t*(((s*=(1.525))+1)*t-s))+b;return c/2*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2)+b},easeInBounce:function(x,t,b,c,d){return c-jQuery.easing.easeOutBounce(x,d-t,0,c,d)+b},easeOutBounce:function(x,t,b,c,d){if((t/=d)<(1/2.75)){return c*(7.5625*t*t)+b}else if(t<(2/2.75)){return c*(7.5625*(t-=(1.5/2.75))*t+.75)+b}else if(t<(2.5/2.75)){return c*(7.5625*(t-=(2.25/2.75))*t+.9375)+b}else{return c*(7.5625*(t-=(2.625/2.75))*t+.984375)+b}},easeInOutBounce:function(x,t,b,c,d){if(t<d/2)return jQuery.easing.easeInBounce(x,t*2,0,c,d)*.5+b;return jQuery.easing.easeOutBounce(x,t*2-d,0,c,d)*.5+c*.5+b}});
;
/*
 * jQuery Booklet Plugin
 * Copyright (c) 2010 W. Grauvogel (http://builtbywill.com/)
 *
 * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php)
 * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses.
 *
 * Version : 1.2.0
 *
 * Originally based on the work of:
 *	1) Charles Mangin (http://clickheredammit.com/pageflip/)
 */
(function (b) {
    b.fn.booklet = function (c) {
        var d = b.extend({}, b.fn.booklet.defaults, c);
        return b(this).each(function () {
            var j, e, h, k, f, g;
            if (typeof c == "string") {
                if (b(this).data("booklet")) {
                    j = c.toLowerCase();
                    h = b.fn.booklet.interfaces[b(this).data("id")];
                    if (j == "next") {
                        h.next()
                    } else {
                        if (j == "prev") {
                            h.prev()
                        }
                    }
                }
            } else {
                if (typeof c == "number") {
                    if (b(this).data("booklet")) {
                        g = c;
                        h = b.fn.booklet.interfaces[b(this).data("id")];
                        if (g % 2 != 0) {
                            g -= 1
                        }
                        h.gotoPage(g)
                    }
                } else {
                    e = b.extend(true, {}, d);
                    k = b.fn.booklet.interfaces.length;
                    for (f = 0; f < k; f++) {
                        if (typeof b.fn.booklet.interfaces[f] == "undefined") {
                            k = f;
                            break
                        }
                    }
                    h = new a(b(this), e, k);
                    b.fn.booklet.interfaces[k] = h;
                    $('.magazine-looks,.front .view-nodequeue-2 .view-content').trigger('bookletready')
                }
            }
        })
    };

    function a(ak, an, N) {
        var aA, aH, Z, G, V, R, O, K, t, am, ar, I, U, T, aa, e, aI = new Array(),
            Q = new Array(),
            L, aj, ai, ag, ae, ac, aK, aq, P, y, c, aD, ay, aJ, aL, ao, n, al, aB, v, ax, av, Y, au, at, r, J, H, ap, E, f, d, q, af, w, B, x, az, C, o, A, W, s, aG, z, l, aC = '<div class="b-page-empty" title="" rel=""></div>',
            aF = '<div class="b-page-blank" title="" rel=""></div>';
        am = false;
        e = false;
        ar = false;
        I = U = false;
        aA = this;
        aA.options = an;
        aA.id = N;
        aA.hash = "";
        aH = aA.options;
        Z = ak.addClass("booklet");
        G = Z.children(".b-load");
        m();
        Z.data("booklet", true);
        Z.data("id", N);
        Z.data("total", G.children().length);
        if (!aH.width) {
            aH.width = Z.width()
        } else {
            if (typeof aH.width == "string" && aH.width.indexOf("%") != -1) {
                aH.wPercent = true;
                aH.wOrig = aH.width;
                aH.width = (aH.width.replace("%", "") / 100) * parseFloat(Z.parent().css("width"))
            }
        }
        if (!aH.height) {
            aH.height = Z.height()
        } else {
            if (typeof aH.height == "string" && aH.height.indexOf("%") != -1) {
                aH.hPercent = true;
                aH.hOrig = aH.height;
                aH.height = (aH.height.replace("%", "") / 100) * parseFloat(Z.parent().css("height"))
            }
        }
        Z.width(aH.width);
        Z.height(aH.height);
        aH.pWidth = aH.width / 2;
        aH.pWidthN = "-" + (aH.pWidth) + "px";
        aH.pWidthH = aH.pWidth / 2;
        aH.pHeight = aH.height;
        aH.pTotal = G.children().length;
        aH.speedH = aH.speed / 2;
        if (aH.direction == "LTR") {
            aH.curr = 0
        } else {
            if (aH.direction == "RTL") {
                aH.curr = aH.pTotal - 2
            }
        }
        if (!isNaN(aH.startingPage) && aH.startingPage <= aH.pTotal && aH.startingPage > 0) {
            if ((aH.startingPage % 2) != 0) {
                aH.startingPage--
            }
            aH.curr = aH.startingPage
        }
        if (aH.closed && aH.autoCenter) {
            if (aH.curr == 0) {
                Z.width(aH.pWidth)
            } else {
                if (aH.curr >= aH.pTotal - 2) {
                    Z.width(aH.pWidth)
                }
            }
        }
        if (aH.name) {
            document.title = aH.name
        } else {
            aH.name = document.title
        }
        if (aH.shadows) {
            aH.shadowTopFwdWidth = "-" + aH.shadowTopFwdWidth + "px";
            aH.shadowTopBackWidth = "-" + aH.shadowTopBackWidth + "px"
        }
        if (aH.menu) {
            q = b(aH.menu).addClass("b-menu");
            K = aH.curr;
            if (aH.pageSelector) {
                w = b('<div class="b-selector b-selector-page"><span class="b-current">Page ' + (K + 1) + "</span></div>").appendTo(q);
                B = b("<ul></ul>").appendTo(w).empty().css("height", "auto");
                for (R = 0; R < aH.pTotal; R += 1) {
                    O = R;
                    nums = (O + 1);
                    if (aH.closed) {
                        O--;
                        if (R == 0) {
                            nums = "1"
                        } else {
                            if (R == aH.pTotal - 2) {
                                nums = aH.pTotal - 2
                            } else {
                                nums = (O + 1)
                            }
                        }
                        if (aH.covers) {
                            O--;
                            if (R == 0) {
                                nums = ""
                            } else {
                                if (R == aH.pTotal - 2) {
                                    nums = ""
                                } else {
                                    nums = (O + 1)
                                }
                            }
                        }
                    }
                    if (aH.direction == "RTL") {
                    	console.log('test: ' + aH.pTotal);
                        nums = (Math.abs(O - aH.pTotal) - 1);
                        if (aH.closed) {
                            if (R == aH.pTotal - 2) {
                                nums = "1"
                            } else {
                                if (R == 0) {
                                    nums = aH.pTotal - 2
                                } else {
                                    nums = (Math.abs(O - aH.pTotal) - 3)
                                }
                            }
                            if (aH.covers) {
                                if (R == aH.pTotal - 2) {
                                    nums = ""
                                } else {
                                    if (R == 0) {
                                        nums = ""
                                    } else {
                                        nums = (Math.abs(O - aH.pTotal) - 5)
                                    }
                                }
                            }
                        }
                        w.find(".b-current").text(nums);
                        var myR = R;
                        if(R%2==1)
                        {
                        	myR++;
                        }
 
                        az = b('<li><a href="#/page/' + (myR + 1) + '" id="selector-page-' + myR + '"><span class="b-text">' + aI[myR + 1] + '</span><span class="b-num">' + nums + "</span></a></li>").prependTo(B)
                    } else {
                    	//console.log('test: ' + aH.pTotal);
                        if (R == 0) {
                            w.find(".b-current").text(nums)
                        }
                        if(aI[R]!=undefined)
                        	az = b('<li><a href="#/page/' + (R + 1) + '" id="selector-page-' + R + '"><span class="b-text">' + aI[R] + '</span><span class="b-num">' + nums + "</span></a></li>").appendTo(B)
                    }
                    C = az.find("a");
                    if (!aH.hash) {
                        C.click(function () {
                            if (aH.direction == "RTL") {
                                w.find(".b-current").text(b(this).find(".b-num").text())
                            }
                            o = parseInt(b(this).attr("id").replace("selector-page-", ""));
                            aA.gotoPage(o);
                            return false
                        })
                    }
                }
                x = B.height();
                B.css({
                    height: 0,
                    "padding-bottom": 0
                });
                w.find('.b-current').unbind("hover").toggle(function () {
                    B.stop().animate({
                        height: x,
                        paddingBottom: 10
                    }, 500)
                }, function () {
                    B.stop().animate({
                        height: 0,
                        paddingBottom: 0
                    }, 500)
                })
            }
            if (aH.chapterSelector) {
                af = Q[aH.curr];
                if (af == "") {
                    af = Q[aH.curr + 1]
                }
                A = b('<div class="b-selector b-selector-chapter"><span class="b-current">' + af + "</span></div>").appendTo(q);
                W = b("<ul></ul>").appendTo(A).empty().css("height", "auto");
                for (R = 0; R < aH.pTotal; R += 1) {
                    if (Q[R] != "" && typeof Q[R] != "undefined") {
                        if (aH.direction == "RTL") {
                            O = R;
                            if (O % 2 != 0) {
                                O--
                            }
                            A.find(".b-current").text(Q[R]);
                            aG = b('<li><a href="#/page/' + (O + 1) + '" id="selector-page-' + (O) + '"><span class="b-text">' + Q[R] + "</span></a></li>").prependTo(W)
                        } else {
                            aG = b('<li><a href="#/page/' + (R + 1) + '" id="selector-page-' + R + '"><span class="b-text">' + Q[R] + "</span></a></li>").appendTo(W)
                        }
                        z = aG.find("a");
                        if (!aH.hash) {
                            z.click(function () {
                                if (aH.direction == "RTL") {
                                    A.find(".b-current").text(b(this).find(".b-text").text())
                                }
                                l = parseInt(b(this).attr("id").replace("selector-page-", ""));
                                aA.gotoPage(l);
                                return false
                            })
                        }
                    }
                }
                s = W.height();
                W.css({
                    height: 0,
                    "padding-bottom": 0
                });
                A.find('.b-current').unbind("hover").toggle(function () {
                    W.stop().animate({
                        height: s,
                        paddingBottom: 10
                    }, 500)
                }, function () {
                    W.stop().animate({
                        height: 0,
                        paddingBottom: 0
                    }, 500)
                })
            }
        }
        b.extend(aA, {
            next: function () {
                if (!am) {
                    aA.gotoPage(aH.curr + 2)
                }
            },
            prev: function () {
                if (!am) {
                    aA.gotoPage(aH.curr - 2)
                }
            },
            gotoPage: function (h) {
                if (h > aH.curr && h < aH.pTotal && h >= 0 && !am) {
                    am = true;
                    t = h - aH.curr;
                    aH.curr = h;
                    aH.before.call(aA, aH);
                    aE();
                    F();
                    S(aH.curr + 1, aH);
                    X(t, true, aJ);
                    if (aH.closed && aH.autoCenter && h - t == 0) {
                        ag.stop().animate({
                            width: 0,
                            left: aH.pWidth
                        }, aH.speed, aH.easing);
                        ac.stop().animate({
                            left: aH.pWidth
                        }, aH.speed, aH.easing)
                    } else {
                        ag.stop().animate({
                            width: 0
                        }, aH.speedH, aH.easeIn)
                    }
                    if (ao) {
                        ae.stop().animate({
                            left: aH.pWidth / 4,
                            width: aH.pWidth * 0.75,
                            paddingLeft: aH.shadowBtmWidth
                        }, aH.speedH, aH.easeIn).animate({
                            left: 0,
                            width: aH.pWidth,
                            paddingLeft: 0
                        }, aH.speedH)
                    } else {
                        ae.stop().animate({
                            left: aH.pWidthH,
                            width: aH.pWidthH,
                            paddingLeft: aH.shadowBtmWidth
                        }, aH.speedH, aH.easeIn).animate({
                            left: 0,
                            width: aH.pWidth,
                            paddingLeft: 0
                        }, aH.speedH)
                    }
                    c.animate({
                        left: aH.shadowBtmWidth
                    }, aH.speedH, aH.easeIn).animate({
                        left: 0
                    }, aH.speedH, aH.easeOut, function () {
                        M()
                    })
                } else {
                    if (h < aH.curr && h < aH.pTotal && h >= 0 && !am) {
                        am = true;
                        t = aH.curr - h;
                        aH.curr = h;
                        aH.before.call(aA, aH);
                        aE();
                        F();
                        S(aH.curr + 1, aH);
                        X(t, false, aL);
                        if (n) {
                            ai.animate({
                                left: aH.pWidth,
                                width: 0
                            }, aH.speed, aH.easing);
                            P.animate({
                                left: aH.pWidthN
                            }, aH.speed, aH.easing);
                            if (aH.closed && aH.autoCenter && aH.curr == 0) {
                                aj.animate({
                                    left: aH.pWidthH,
                                    width: aH.pWidthH
                                }, aH.speedH, aH.easeIn).animate({
                                    left: 0,
                                    width: aH.pWidth
                                }, aH.speedH, aH.easeOut);
                                ag.stop().animate({
                                    left: 0
                                }, aH.speed, aH.easing)
                            } else {
                                aj.animate({
                                    left: aH.pWidth,
                                    width: aH.pWidth
                                }, aH.speed, aH.easing)
                            }
                            aq.animate({
                                right: 0
                            }, aH.speed, aH.easing, function () {
                                M()
                            })
                        } else {
                            ai.animate({
                                left: aH.pWidth,
                                width: 0
                            }, aH.speed, aH.easing);
                            P.animate({
                                left: aH.pWidthN
                            }, aH.speed, aH.easing);
                            if (aH.closed && aH.autoCenter && aH.curr == 0) {
                                aj.animate({
                                    left: aH.pWidthH,
                                    width: aH.pWidthH
                                }, aH.speedH, aH.easeIn).animate({
                                    left: 0,
                                    width: aH.pWidth
                                }, aH.speedH, aH.easeOut);
                                ag.stop().animate({
                                    left: 0
                                }, aH.speed, aH.easing)
                            } else {
                                aj.animate({
                                    left: aH.pWidthH,
                                    width: aH.pWidthH
                                }, aH.speedH, aH.easeIn).animate({
                                    left: aH.pWidth,
                                    width: aH.pWidth
                                }, aH.speedH, aH.easeOut)
                            }
                            aq.animate({
                                right: aH.shadowBtmWidth
                            }, aH.speedH, aH.easeIn).animate({
                                right: 0
                            }, aH.speedH, aH.easeOut, function () {
                                M()
                            })
                        }
                    }
                }
            }
        });
        if (aH.manual && b.ui) {
            aH.overlays = false
        }
        if (aH.next) {
            ap = b(aH.next);
            ap.click(function (h) {
                h.preventDefault();
                aA.next()
            })
        }
        if (aH.prev) {
            E = b(aH.prev);
            E.click(function (h) {
                h.preventDefault();
                aA.prev()
            })
        }
        if (aH.overlays) {
            av = b('<div class="b-overlay b-overlay-prev b-prev" title="Previous Page"></div>').appendTo(Z);
            ax = b('<div class="b-overlay b-overlay-next b-next" title="Next Page"></div>').appendTo(Z);
            v = Z.find(".b-overlay");
            if (b.browser.msie) {
                v.css({
                    background: "#fff",
                    filter: "progid:DXImageTransform.Microsoft.Alpha(opacity=0) !important"
                })
            }
        }
        if (aH.tabs) {
            at = b('<div class="b-tab b-tab-prev b-prev" title="Previous Page">Previous</div>').appendTo(Z);
            au = b('<div class="b-tab b-tab-next b-next" title="Next Page">Next</div>').appendTo(Z);
            Y = Z.find(".b-tab");
            if (aH.tabWidth) {
                Y.width(aH.tabWidth)
            }
            if (aH.tabHeight) {
                Y.height(aH.tabHeight)
            }
            Y.css({
                top: "-" + au.outerHeight() + "px"
            });
            Z.css({
                marginTop: au.outerHeight()
            });
            if (aH.direction == "RTL") {
                au.html("Previous").attr("title", "Previous Page");
                at.html("Next").attr("title", "Next Page")
            }
        } else {
            Z.css({
                marginTop: 0
            })
        }
        if (aH.arrows) {
            H = b('<div class="b-arrow b-arrow-prev b-prev" title="Previous Page"><div>Previous</div></div>').appendTo(Z);
            J = b('<div class="b-arrow b-arrow-next b-next" title="Next Page"><div>Next</div></div>').appendTo(Z);
            r = Z.find(".b-arrow");
            if (aH.direction == "RTL") {
                J.html("<div>Previous</div>").attr("title", "Previous Page");
                H.html("<div>Next</div>").attr("title", "Next Page")
            }
        }
        f = Z.find(".b-next");
        d = Z.find(".b-prev");
        f.click(function (h) {
            h.preventDefault();
            aA.next()
        });
        d.click(function (h) {
            h.preventDefault();
            aA.prev()
        });
        if (aH.overlays && aH.hovers) {
            f.unbind("mouseover mouseout").bind("mouseover", function () {
                u(true)
            }).bind("mouseout", function () {
                aw(true)
            });
            d.unbind("mouseover mouseout").bind("mouseover", function () {
                u(false)
            }).bind("mouseout", function () {
                aw(false)
            })
        }
        if (aH.arrows) {
            if (aH.arrowsHide) {
                if (b.support.opacity) {
                    f.hover(function () {
                        J.find("div").stop().fadeTo("fast", 1)
                    }, function () {
                        J.find("div").stop().fadeTo("fast", 0)
                    });
                    d.hover(function () {
                        H.find("div").stop().fadeTo("fast", 1)
                    }, function () {
                        H.find("div").stop().fadeTo("fast", 0)
                    })
                } else {
                    f.hover(function () {
                        J.find("div").show()
                    }, function () {
                        J.find("div").hide()
                    });
                    d.hover(function () {
                        H.find("div").show()
                    }, function () {
                        H.find("div").hide()
                    })
                }
            } else {
                J.find("div").show();
                H.find("div").show()
            }
        }
        if (aH.keyboard) {
            b(document).keyup(function (h) {
                if (h.keyCode == 37) {
                    aA.prev()
                } else {
                    if (h.keyCode == 39) {
                        aA.next()
                    }
                }
            })
        }
        if (aH.hash) {
            g();
            clearInterval(T);
            T = setInterval(function () {
                ad()
            }, 250)
        }
        if (aH.wPercent || aH.hPercent) {
            b(window).resize(function () {
                ab()
            })
        }
        if (aH.auto && aH.delay) {
            clearTimeout(aa);
            aa = setTimeout(function () {
                aA.next()
            }, aH.delay);
            e = true;
            if (aH.pause) {
                pause = b(aH.pause);
                pause.click(function (h) {
                    h.preventDefault();
                    if (e) {
                        clearTimeout(aa);
                        e = false
                    }
                })
            }
            if (aH.play) {
                play = b(aH.play);
                play.click(function (h) {
                    h.preventDefault();
                    if (!e) {
                        clearTimeout(aa);
                        aa = setTimeout(function () {
                            aA.next()
                        }, aH.delay);
                        e = true
                    }
                })
            }
        }
        ah();
        F();
        aE();

        function m() {
            if ((G.children().length % 2) != 0) {
                if (aH.closed && aH.covers) {
                    G.children().last().before(aF)
                } else {
                    G.children().last().after(aF)
                }
            }
            if (aH.closed) {
                b(aC).attr({
                    title: aH.closedFrontTitle || "Beginning",
                    rel: aH.closedFrontChapter || "Beginning of Book"
                }).prependTo(G);
                G.children().last().attr({
                    title: aH.closedBackTitle || "End",
                    rel: aH.closedBackChapter || "End of Book"
                });
                G.append(aC)
            }
            if (aH.direction == "LTR") {
                O = 0
            } else {
                O = G.children().length;
                if (aH.closed) {
                    O -= 2
                }
                if (aH.covers) {
                    O -= 2
                }
                b(G.children().get().reverse()).each(function () {
                    b(this).appendTo(G)
                })
            }
            G.children().each(function (h) {
                if (b(this).attr("rel")) {
                    Q[h] = b(this).attr("rel")
                } else {
                    Q[h] = ""
                }
                aI[h] = b(this).find('div.node-look').attr("title");
                if (b(this).hasClass("b-page-empty")) {
                    b(this).wrap('<div class="b-page"><div class="b-wrap"></div></div>')
                } else {
                    if (aH.closed && aH.covers && (h == 1 || h == G.children().length - 2)) {
                        b(this).wrap('<div class="b-page"><div class="b-wrap b-page-cover"></div></div>')
                    } else {
                        if (h % 2 != 0) {
                            b(this).wrap('<div class="b-page"><div class="b-wrap b-wrap-right"></div></div>')
                        } else {
                            b(this).wrap('<div class="b-page"><div class="b-wrap b-wrap-left"></div></div>')
                        }
                    }
                }
                b(this).parents(".b-page").addClass("b-page-" + h).data("page", h);
                if (aH.pageNumbers && !b(this).hasClass("b-page-empty") && (!aH.closed || (aH.closed && !aH.covers) || (aH.closed && aH.covers && h != 1 && h != G.children().length - 2))) {
                    if (aH.direction == "LTR") {
                        O++
                    }
                    b(this).parent().append('<div class="b-counter">' + (O) + "</div>");
                    if (aH.direction == "RTL") {
                        O--
                    }
                }
            })
        }
        function ab() {
            if (aH.wPercent) {
                aH.width = (aH.wOrig.replace("%", "") / 100) * parseFloat(Z.parent().css("width"));
                Z.width(aH.width);
                aH.pWidth = aH.width / 2;
                aH.pWidthN = "-" + (aH.pWidth) + "px";
                aH.pWidthH = aH.pWidth / 2
            }
            if (aH.hPercent) {
                aH.height = (aH.hOrig.replace("%", "") / 100) * parseFloat(Z.parent().css("height"));
                Z.height(aH.height);
                aH.pHeight = aH.height
            }
            k()
        }
        function k() {
            Z.find(".b-shadow-f, .b-shadow-b, .b-p0, .b-p3").css({
                filter: "",
                zoom: ""
            });
            if (aH.manual && b.ui) {
                Z.find(".b-page").draggable("destroy").removeClass("b-grab b-grabbing")
            }
            ay.attr("style", "");
            ay.css({
                left: 0,
                width: aH.pWidth - (aH.pagePadding * 2),
                height: aH.pHeight - (aH.pagePadding * 2),
                padding: aH.pagePadding
            });
            aq.css({
                right: 0,
                left: "auto"
            });
            ai.css({
                left: 0,
                width: aH.pWidth,
                height: aH.pHeight
            });
            ag.css({
                left: aH.pWidth,
                width: aH.pWidth,
                opacity: 1,
                height: aH.pHeight
            });
            L.css({
                left: 0,
                width: aH.pWidth,
                height: aH.pHeight
            });
            aj.css({
                left: 0,
                width: 0,
                height: aH.pHeight
            });
            ae.stop().css({
                left: aH.pWidth * 2,
                width: 0,
                height: aH.pHeight,
                paddingLeft: 0
            });
            ac.css({
                left: aH.pWidth,
                width: aH.pWidth,
                height: aH.pHeight
            });
            if (aH.closed && aH.autoCenter && aH.curr == 0) {
                L.css({
                    left: 0
                });
                ai.css({
                    left: aH.pWidthN
                });
                ag.css({
                    left: 0
                });
                ae.css({
                    left: aH.pWidth
                });
                ac.css({
                    left: 0
                })
            }
            if (aH.closed && aH.autoCenter && (aH.curr == 0 || aH.curr >= aH.pTotal - 2)) {
                if (aH.overlays) {
                    v.width("100%")
                }
                Z.width(aH.pWidth)
            } else {
                if (aH.overlays) {
                    v.width("50%")
                }
                Z.width(aH.width)
            }
        }
        function ah() {
            if (ar) {
                if (ai.data("page") - 1 < 0) {
                    G.prepend(ag.detach());
                    G.prepend(ai.detach())
                } else {
                    Z.find(".b-page-" + (ai.data("page") - 1)).after(ai.detach());
                    Z.find(".b-page-" + (ag.data("page") - 1)).after(ag.detach())
                }
                if (ae.data("page") - 1 <= aH.pTotal) {
                    Z.find(".b-page-" + (ae.data("page") - 1)).after(ae.detach());
                    Z.find(".b-page-" + (ac.data("page") - 1)).after(ac.detach())
                }
                if (L.data("page") - 1 >= 0) {
                    Z.find(".b-page-" + (L.data("page") - 1)).after(L.detach());
                    Z.find(".b-page-" + (aj.data("page") - 1)).after(aj.detach())
                } else {
                    G.prepend(L.detach());
                    L.after(aj.detach())
                }
            }
            Z.find(".b-page").removeClass("b-pN b-p0 b-p1 b-p2 b-p3 b-p4").hide();
            if (aH.curr - 2 >= 0) {
                Z.find(".b-page-" + (aH.curr - 2)).addClass("b-pN").show();
                Z.find(".b-page-" + (aH.curr - 1)).addClass("b-p0").show()
            }
            Z.find(".b-page-" + (aH.curr)).addClass("b-p1").show();
            Z.find(".b-page-" + (aH.curr + 1)).addClass("b-p2").show();
            if (aH.curr + 3 <= aH.pTotal) {
                Z.find(".b-page-" + (aH.curr + 2)).addClass("b-p3").show();
                Z.find(".b-page-" + (aH.curr + 3)).addClass("b-p4").show()
            }
            L = Z.find(".b-pN");
            aj = Z.find(".b-p0");
            ai = Z.find(".b-p1");
            ag = Z.find(".b-p2");
            ae = Z.find(".b-p3");
            ac = Z.find(".b-p4");
            aK = Z.find(".b-pN .b-wrap");
            aq = Z.find(".b-p0 .b-wrap");
            P = Z.find(".b-p1 .b-wrap");
            y = Z.find(".b-p2 .b-wrap");
            c = Z.find(".b-p3 .b-wrap");
            aD = Z.find(".b-p4 .b-wrap");
            ay = Z.find(".b-wrap");
            k();
            if (aH.curr + 3 <= aH.pTotal) {
                ae.after(aj.detach());
                ai.after(ac.detach())
            } else {
                aj.detach().appendTo(G)
            }
            ar = true;
            if (aH.shadows) {
                Z.find(".b-shadow-f, .b-shadow-b").remove();
                aJ = b('<div class="b-shadow-f"></div>').css({
                    right: 0,
                    width: aH.pWidth,
                    height: aH.pHeight
                }).appendTo(ae);
                aL = b('<div class="b-shadow-b"></div>').appendTo(aj).css({
                    left: 0,
                    width: aH.pWidth,
                    height: aH.pHeight
                })
            }
            I = U = ao = n = false;
            if (aH.manual && b.ui) {
                ae.draggable({
                    axis: "x",
                    containment: [ag.offset().left - aH.pWidthH, 0, ag.offset().left + aH.pWidth - 50, aH.pHeight],
                    drag: function (h, i) {
                        ao = true;
                        al = i.originalPosition.left - i.position.left;
                        ae.removeClass("b-grab").addClass("b-grabbing");
                        ae.width(40 + (al / 2));
                        c.css({
                            left: 10 + (al / 8)
                        });
                        ag.width(aH.pWidth - ae.width() + 10);
                        if (aH.shadows) {
                            aJ.css({
                                right: "-" + (20 + al / 4) + "px"
                            });
                            if (b.support.opacity) {
                                aJ.css({
                                    opacity: 0.5 * (al / aH.pWidthH)
                                })
                            } else {
                                aJ.css({
                                    right: "auto",
                                    left: 0.1 * ae.width()
                                })
                            }
                        }
                    },
                    stop: function (i, j) {
                        aw(false);
                        var h = j.originalPosition.left - j.position.left;
                        if (h > aH.pWidthH / 4) {
                            if (aH.shadows && !b.support.opacity) {
                                aJ.css({
                                    left: "auto"
                                })
                            }
                            aA.next();
                            ae.removeClass("b-grab b-grabbing")
                        } else {
                            ao = false;
                            ae.removeClass("b-grabbing").addClass("b-grab")
                        }
                    }
                });
                aj.draggable({
                    axis: "x",
                    containment: [ai.offset().left + 10, 0, ai.offset().left + aH.pWidth * 0.75, aH.pHeight],
                    drag: function (h, i) {
                        n = true;
                        al = i.position.left - i.originalPosition.left;
                        aj.removeClass("b-grab").addClass("b-grabbing");
                        aj.css({
                            left: 40 + (al) / 1.5,
                            width: 40 + (al)
                        });
                        aq.css({
                            right: 10 + al / 4
                        });
                        ai.css({
                            left: i.position.left + 20,
                            width: aH.pWidth - i.position.left - 10
                        });
                        P.css({
                            left: -1 * (al + 30)
                        });
                        if (aH.shadows) {
                            if (b.support.opacity) {
                                aL.css({
                                    opacity: 0.5 * (al / aH.pWidthH)
                                })
                            } else {
                                aL.css({
                                    left: -0.38 * aH.pWidth
                                })
                            }
                        }
                    },
                    stop: function (h, i) {
                        aw(true);
                        al = i.position.left - i.originalPosition.left;
                        if (al > aH.pWidthH / 4) {
                            aA.prev();
                            aj.removeClass("b-grab b-grabbing")
                        } else {
                            n = false;
                            aj.removeClass("b-grabbing").addClass("b-grab")
                        }
                    }
                });
                b(Z).unbind("mousemove mouseout").bind("mousemove", function (h) {
                    aB = h.pageX - Z.offset().left;
                    if (aB < 50) {
                        u(false)
                    } else {
                        if (aB > aH.pWidth - 50 && aH.curr == 0 && aH.autoCenter && aH.closed) {
                            u(true)
                        } else {
                            if (aB > 50 && aB < aH.width - 50) {
                                aw(false);
                                aw(true)
                            } else {
                                if (aB > aH.width - 50) {
                                    u(true)
                                }
                            }
                        }
                    }
                }).bind("mouseout", function () {
                    aw(false);
                    aw(true)
                })
            }
        }
        function u(h) {
            if (h) {
                if (!am && !I && !U && !ao && aH.curr + 2 <= aH.pTotal - 2) {
                    ag.stop().animate({
                        width: aH.pWidth - 40
                    }, 500, aH.easing);
                    ae.addClass("b-grab");
                    if (aH.closed && aH.autoCenter && aH.curr == 0) {
                        ae.stop().animate({
                            left: aH.pWidth - 50,
                            width: 40
                        }, 500, aH.easing)
                    } else {
                        ae.stop().animate({
                            left: aH.width - 50,
                            width: 40
                        }, 500, aH.easing)
                    }
                    c.stop().animate({
                        left: 10
                    }, 500, aH.easing);
                    if (aH.shadows && !b.support.opacity) {
                        aJ.css({
                            right: "auto",
                            left: "-40%"
                        })
                    }
                    I = true
                }
            } else {
                if (!am && !U && !I && !n && aH.curr - 2 >= 0) {
                    ai.stop().animate({
                        left: 10,
                        width: aH.pWidth - 10
                    }, 400, aH.easing);
                    aj.addClass("b-grab");
                    P.stop().animate({
                        left: "-10px"
                    }, 400, aH.easing);
                    aj.stop().animate({
                        left: 10,
                        width: 40
                    }, 400, aH.easing);
                    aq.stop().animate({
                        right: 10
                    }, 400, aH.easing);
                    if (aH.shadows && !b.support.opacity) {
                        aL.css({
                            left: -0.38 * aH.pWidth
                        })
                    }
                    U = true
                }
            }
        }
        function aw(h) {
            if (h) {
                if (!am && I && !ao && aH.curr + 2 <= aH.pTotal - 2) {
                    ag.stop().animate({
                        width: aH.pWidth
                    }, 500, aH.easing);
                    if (aH.closed && aH.autoCenter && aH.curr == 0) {
                        ae.stop().animate({
                            left: aH.pWidth,
                            width: 0
                        }, 500, aH.easing)
                    } else {
                        ae.stop().animate({
                            left: aH.width,
                            width: 0
                        }, 500, aH.easing)
                    }
                    c.stop().animate({
                        left: 0
                    }, 500, aH.easing);
                    if (aH.shadows && !b.support.opacity) {
                        aJ.css({
                            left: "auto"
                        })
                    }
                    I = false
                }
            } else {
                if (!am && U && !n && aH.curr - 2 >= 0) {
                    ai.stop().animate({
                        left: 0,
                        width: aH.pWidth
                    }, 400, aH.easing);
                    P.stop().animate({
                        left: 0
                    }, 400, aH.easing);
                    aj.stop().animate({
                        left: 0,
                        width: 0
                    }, 400, aH.easing);
                    aq.stop().animate({
                        right: 0
                    }, 400, aH.easing);
                    U = false
                }
            }
        }
        function X(i, h, j) {
            if (h && i > 2) {
                Z.find(".b-page-" + (ae.data("page") - 1)).after(ae.detach());
                Z.find(".b-page-" + (ac.data("page") - 1)).after(ac.detach());
                Z.find(".b-p3, .b-p4").removeClass("b-p3 b-p4").hide();
                Z.find(".b-page-" + aH.curr).addClass("b-p3").show().stop().css({
                    left: aH.pWidth * 2,
                    width: 0,
                    height: aH.pHeight,
                    paddingLeft: 0
                });
                Z.find(".b-page-" + (aH.curr + 1)).addClass("b-p4").show().css({
                    left: aH.pWidth,
                    width: aH.pWidth,
                    height: aH.pHeight
                });
                Z.find(".b-page-" + aH.curr + " .b-wrap").show().css({
                    width: aH.pWidth - (aH.pagePadding * 2),
                    height: aH.pHeight - (aH.pagePadding * 2),
                    padding: aH.pagePadding
                });
                Z.find(".b-page-" + (aH.curr + 1) + " .b-wrap").show().css({
                    width: aH.pWidth - (aH.pagePadding * 2),
                    height: aH.pHeight - (aH.pagePadding * 2),
                    padding: aH.pagePadding
                });
                ae = Z.find(".b-p3");
                ac = Z.find(".b-p4");
                c = Z.find(".b-p3 .b-wrap");
                aD = Z.find(".b-p4 .b-wrap");
                if (I) {
                    ae.css({
                        left: aH.width - 40,
                        width: 20,
                        "padding-left": 10
                    })
                }
                ai.after(ac.detach());
                ag.after(ae.detach());
                if (aH.shadows) {
                    Z.find(".b-shadow-f").remove();
                    aJ = b('<div class="b-shadow-f"></div>').css({
                        right: 0,
                        width: aH.pWidth,
                        height: aH.pHeight
                    }).appendTo(ae);
                    j = aJ
                }
            } else {
                if (!h && i > 2) {
                    Z.find(".b-page-" + (L.data("page") - 1)).after(L.detach());
                    Z.find(".b-page-" + (aj.data("page") - 1)).after(aj.detach());
                    Z.find(".b-pN, .b-p0").removeClass("b-pN b-p0").hide();
                    Z.find(".b-page-" + aH.curr).addClass("b-pN").show().css({
                        left: 0,
                        width: aH.pWidth,
                        height: aH.pHeight
                    });
                    Z.find(".b-page-" + (aH.curr + 1)).addClass("b-p0").show().css({
                        left: 0,
                        width: 0,
                        height: aH.pHeight
                    });
                    Z.find(".b-page-" + aH.curr + " .b-wrap").show().css({
                        width: aH.pWidth - (aH.pagePadding * 2),
                        height: aH.pHeight - (aH.pagePadding * 2),
                        padding: aH.pagePadding
                    });
                    Z.find(".b-page-" + (aH.curr + 1) + " .b-wrap").show().css({
                        width: aH.pWidth - (aH.pagePadding * 2),
                        height: aH.pHeight - (aH.pagePadding * 2),
                        padding: aH.pagePadding
                    });
                    L = Z.find(".b-pN");
                    aj = Z.find(".b-p0");
                    aK = Z.find(".b-pN .b-wrap");
                    aq = Z.find(".b-p0 .b-wrap");
                    if (U) {
                        aj.css({
                            left: 10,
                            width: 40
                        });
                        aq.css({
                            right: 10
                        })
                    }
                    aj.detach().appendTo(G);
                    if (aH.shadows) {
                        Z.find(".b-shadow-b, .b-shadow-f").remove();
                        aL = b('<div class="b-shadow-b"></div>').appendTo(aj).css({
                            left: 0,
                            width: aH.pWidth,
                            height: aH.pHeight
                        });
                        j = aL
                    }
                }
            }
            if (aH.closed) {
                if (!h && aH.curr == 0) {
                    L.hide()
                } else {
                    if (!h) {
                        L.show()
                    }
                }
                if (h && aH.curr >= aH.pTotal - 2) {
                    ac.hide()
                } else {
                    if (h) {
                        ac.show()
                    }
                }
            }
            if (aH.shadows) {
                if (b.support.opacity) {
                    j.animate({
                        opacity: 1
                    }, aH.speedH, aH.easeIn).animate({
                        opacity: 0
                    }, aH.speedH, aH.easeOut)
                } else {
                    if (h) {
                        j.animate({
                            right: aH.shadowTopFwdWidth
                        }, aH.speed, aH.easeIn)
                    } else {
                        j.animate({
                            left: aH.shadowTopBackWidth
                        }, aH.speed, aH.easeIn)
                    }
                }
            }
            if (aH.closed && aH.autoCenter) {
                if (aH.curr == 0) {
                    ae.hide();
                    ac.hide();
                    Z.animate({
                        width: aH.pWidth
                    }, aH.speed, aH.easing)
                } else {
                    if (aH.curr >= aH.pTotal - 2) {
                        aj.hide();
                        L.hide();
                        Z.animate({
                            width: aH.pWidth
                        }, aH.speed, aH.easing)
                    } else {
                        Z.animate({
                            width: aH.width
                        }, aH.speed, aH.easing)
                    }
                }
            }
        }
        function M() {
            ah();
            aE();
            F();
            aH.after.call(aA, aH);
            am = false;
            if (aH.auto && aH.delay) {
                if (e && aH.curr < aH.pTotal - 2) {
                    clearTimeout(aa);
                    aa = setTimeout(function () {
                        aA.next()
                    }, aH.delay);
                    //console.log("continue...")
                }
                if (aH.curr >= aH.pTotal - 2) {
                    e = false
                }
            }
        }
        function F() {
        	//console.log('current page called: ' + aH.curr);
            if (aH.overlays || aH.tabs || aH.arrows) {
                if (b.support.opacity) {
                    if (aH.curr < aH.pTotal - 2) {
                    	//console.log('current page: ' + aH.curr);
                        f.fadeIn("fast").css("cursor", aH.cursor);
                    } else {
                        f.fadeOut("fast").css("cursor", "pointer");
                        f.hide();
                    }
                    if (aH.curr >= 2 && aH.curr != 0) {
                    	//console.log('current page: ' + aH.curr);
                        d.fadeIn("fast").css("cursor", aH.cursor);
                    } else {
                    	//console.log('current page out: ' + aH.curr);
                        d.fadeOut("fast").css("cursor", "pointer");
                        d.hide();
                    }
                } else {
                    if (aH.curr < aH.pTotal - 2) {
                        f.show().css("cursor", aH.cursor)
                    } else {
                        f.hide().css("cursor", "default")
                    }
                    if (aH.curr >= 2 && aH.curr != 0) {
                        d.show().css("cursor", aH.cursor)
                    } else {
                        d.hide().css("cursor", "default")
                    }
                }
            }
        }
        function aE() {
            if (aH.pageSelector) {
                if (aH.direction == "RTL") {
                    nums = (Math.abs(aH.curr - aH.pTotal) - 1) + " - " + ((Math.abs(aH.curr - aH.pTotal)));
                    if (aH.closed) {
                        if (aH.curr == aH.pTotal - 2) {
                            nums = "1"
                        } else {
                            if (aH.curr == 0) {
                                nums = aH.pTotal - 2
                            } else {
                                nums = (Math.abs(aH.curr - aH.pTotal) - 2) + " - " + ((Math.abs(aH.curr - aH.pTotal) - 1))
                            }
                        }
                        if (aH.covers) {
                            if (aH.curr == aH.pTotal - 2) {
                                nums = ""
                            } else {
                                if (aH.curr == 0) {
                                    nums = ""
                                } else {
                                    nums = (Math.abs(aH.curr - aH.pTotal) - 3) + " - " + ((Math.abs(aH.curr - aH.pTotal) - 2))
                                }
                            }
                        }
                    }
                    b(aH.menu + " .b-selector-page .b-current").text(nums)
                } else {
                    nums = (aH.curr + 1) + " - " + (aH.curr + 2);
                    if (aH.closed) {
                        if (aH.curr == 0) {
                            nums = "1"
                        } else {
                            if (aH.curr == aH.pTotal - 2) {
                                nums = aH.pTotal - 2
                            } else {
                                nums = (aH.curr) + "-" + (aH.curr + 1)
                            }
                        }
                        if (aH.covers) {
                            if (aH.curr == 0) {
                                nums = ""
                            } else {
                                if (aH.curr == aH.pTotal - 2) {
                                    nums = ""
                                } else {
                                    nums = (aH.curr - 1) + "-" + (aH.curr)
                                }
                            }
                        }
                    }
                    b(aH.menu + " .b-selector-page .b-current").text(nums)
                }
            }
            if (aH.chapterSelector) {
                if (Q[aH.curr] != "") {
                    b(aH.menu + " .b-selector-chapter .b-current").text(Q[aH.curr])
                } else {
                    if (Q[aH.curr + 1] != "") {
                        b(aH.menu + " .b-selector-chapter .b-current").text(Q[aH.curr + 1])
                    }
                }
                if (aH.direction == "RTL" && Q[aH.curr + 1] != "") {
                    b(aH.menu + " .b-selector-chapter .b-current").text(Q[aH.curr + 1])
                } else {
                    if (Q[aH.curr] != "") {
                        b(aH.menu + " .b-selector-chapter .b-current").text(Q[aH.curr])
                    }
                }
            }
        }
        function g() {
            V = D();
            if (!isNaN(V) && V <= aH.pTotal - 1 && V >= 0 && V != "") {
                if ((V % 2) != 0) {
                    V--
                }
                aH.curr = V
            } else {
                S(aH.curr + 1, aH)
            }
            aA.hash = V
        }
        function ad() {
            V = D();
            if (!isNaN(V) && V <= aH.pTotal - 1 && V >= 0) {
                if (V != aH.curr && V.toString() != aA.hash) {
                    if ((V % 2) != 0) {
                        V--
                    }
                    document.title = aH.name + " - Page " + (V + 1);
                    if (!am) {
                        aA.gotoPage(V);
                        aA.hash = V
                    }
                }
            }
        }
        function D() {
            var h = window.location.hash.split("/");
            if (h.length > 1) {
                return parseInt(h[2]) - 1
            } else {
                return ""
            }
        }
        function S(i, h) {
            if (h.hash) {
                window.location.hash = "/page/" + i
            }
        }
    }
    b.fn.booklet.interfaces = [];
    b.fn.booklet.defaults = {
        name: null,
        width: 600,
        height: 400,
        speed: 1000,
        direction: "LTR",
        startingPage: 0,
        easing: "easeInOutQuad",
        easeIn: "easeInQuad",
        easeOut: "easeOutQuad",
        closed: false,
        closedFrontTitle: null,
        closedFrontChapter: null,
        closedBackTitle: null,
        closedBackChapter: null,
        covers: false,
        autoCenter: false,
        pagePadding: 10,
        pageNumbers: true,
        manual: true,
        hovers: true,
        overlays: true,
        tabs: false,
        tabWidth: 60,
        tabHeight: 20,
        arrows: false,
        arrowsHide: false,
        cursor: "pointer",
        hash: false,
        keyboard: true,
        next: null,
        prev: null,
        auto: false,
        delay: 5000,
        pause: null,
        play: null,
        menu: null,
        pageSelector: false,
        chapterSelector: false,
        shadows: true,
        shadowTopFwdWidth: 166,
        shadowTopBackWidth: 166,
        shadowBtmWidth: 50,
        before: function () {},
        after: function () {}
    }
})(jQuery);;
/*!
 * jQuery 2d Transform v0.9.3
 * http://wiki.github.com/heygrady/transform/
 *
 * Copyright 2010, Grady Kuhnline
 * Dual licensed under the MIT or GPL Version 2 licenses.
 * http://jquery.org/license
 * 
 * Date: Sat Dec 4 15:46:09 2010 -0800
 */
///////////////////////////////////////////////////////
// Transform
///////////////////////////////////////////////////////
(function($, window, document, undefined) {
	/**
	 * @var Regex identify the matrix filter in IE
	 */
	var rmatrix = /progid:DXImageTransform\.Microsoft\.Matrix\(.*?\)/,
		rfxnum = /^([\+\-]=)?([\d+.\-]+)(.*)$/,
		rperc = /%/;

	// Steal some code from Modernizr
	var m = document.createElement( 'modernizr' ),
		m_style = m.style;

	function stripUnits(arg) {
		return parseFloat(arg);
	}

	/**
	 * Find the prefix that this browser uses
	 */	
	function getVendorPrefix() {
		var property = {
			transformProperty : '',
			MozTransform : '-moz-',
			WebkitTransform : '-webkit-',
			OTransform : '-o-',
			msTransform : '-ms-'
		};
		for (var p in property) {
			if (typeof m_style[p] != 'undefined') {
				return property[p];
			}
		}
		return null;
	}

	function supportCssTransforms() {
		if (typeof(window.Modernizr) !== 'undefined') {
			return Modernizr.csstransforms;
		}

		var props = [ 'transformProperty', 'WebkitTransform', 'MozTransform', 'OTransform', 'msTransform' ];
		for ( var i in props ) {
			if ( m_style[ props[i] ] !== undefined  ) {
				return true;
			}
		}
	}

	// Capture some basic properties
	var vendorPrefix			= getVendorPrefix(),
		transformProperty		= vendorPrefix !== null ? vendorPrefix + 'transform' : false,
		transformOriginProperty	= vendorPrefix !== null ? vendorPrefix + 'transform-origin' : false;

	// store support in the jQuery Support object
	$.support.csstransforms = supportCssTransforms();

	// IE9 public preview 6 requires the DOM names
	if (vendorPrefix == '-ms-') {
		transformProperty = 'msTransform';
		transformOriginProperty = 'msTransformOrigin';
	}

	/**
	 * Class for creating cross-browser transformations
	 * @constructor
	 */
	$.extend({
		transform: function(elem) {
			// Cache the transform object on the element itself
			elem.transform = this;

			/**
			 * The element we're working with
			 * @var jQueryCollection
			 */
			this.$elem = $(elem);

			/**
			 * Remember the matrix we're applying to help the safeOuterLength func
			 */
			this.applyingMatrix = false;
			this.matrix = null;

			/**
			 * Remember the css height and width to save time
			 * This is only really used in IE
			 * @var Number
			 */
			this.height = null;
			this.width = null;
			this.outerHeight = null;
			this.outerWidth = null;

			/**
			 * We need to know the box-sizing in IE for building the outerHeight and outerWidth
			 * @var string
			 */
			this.boxSizingValue = null;
			this.boxSizingProperty = null;

			this.attr = null;
			this.transformProperty = transformProperty;
			this.transformOriginProperty = transformOriginProperty;
		}
	});

	$.extend($.transform, {
		/**
		 * @var Array list of all valid transform functions
		 */
		funcs: ['matrix', 'origin', 'reflect', 'reflectX', 'reflectXY', 'reflectY', 'rotate', 'scale', 'scaleX', 'scaleY', 'skew', 'skewX', 'skewY', 'translate', 'translateX', 'translateY']
	});

	/**
	 * Create Transform as a jQuery plugin
	 * @param Object funcs
	 * @param Object options
	 */
	$.fn.transform = function(funcs, options) {
		return this.each(function() {
			var t = this.transform || new $.transform(this);
			if (funcs) {
				t.exec(funcs, options);
			}
		});
	};

	$.transform.prototype = {
		/**
		 * Applies all of the transformations
		 * @param Object funcs
		 * @param Object options
		 * forceMatrix - uses the matrix in all browsers
		 * preserve - tries to preserve the values from previous runs
		 */
		exec: function(funcs, options) {
			// extend options
			options = $.extend(true, {
				forceMatrix: false,
				preserve: false
			}, options);

			// preserve the funcs from the previous run
			this.attr = null;
			if (options.preserve) {
				funcs = $.extend(true, this.getAttrs(true, true), funcs);
			} else {
				funcs = $.extend(true, {}, funcs); // copy the object to prevent weirdness
			}

			// Record the custom attributes on the element itself
			this.setAttrs(funcs);

			// apply the funcs
			if ($.support.csstransforms && !options.forceMatrix) {
				// CSS3 is supported
				return this.execFuncs(funcs);
			} else if ($.browser.msie || ($.support.csstransforms && options.forceMatrix)) {
				// Internet Explorer or Forced matrix
				return this.execMatrix(funcs);
			}
			return false;
		},

		/**
		 * Applies all of the transformations as functions
		 * @param Object funcs
		 */
		execFuncs: function(funcs) {
			var values = [];

			// construct a CSS string
			for (var func in funcs) {
				// handle origin separately
				if (func == 'origin') {
					this[func].apply(this, $.isArray(funcs[func]) ? funcs[func] : [funcs[func]]);
				} else if ($.inArray(func, $.transform.funcs) !== -1) {
					values.push(this.createTransformFunc(func, funcs[func]));
				}
			}
			this.$elem.css(transformProperty, values.join(' '));
			return true;
		},

		/**
		 * Applies all of the transformations as a matrix
		 * @param Object funcs
		 */
		execMatrix: function(funcs) {
			var matrix,
				tempMatrix,
				args;

			var elem = this.$elem[0],
				_this = this;
			function normalPixels(val, i) {
				if (rperc.test(val)) {
					// this really only applies to translation
					return parseFloat(val) / 100 * _this['safeOuter' + (i ? 'Height' : 'Width')]();
				}
				return toPx(elem, val);
			}

			var rtranslate = /translate[X|Y]?/,
				trans = [];

			for (var func in funcs) {
				switch ($.type(funcs[func])) {
					case 'array': args = funcs[func]; break;
					case 'string': args = $.map(funcs[func].split(','), $.trim); break;
					default: args = [funcs[func]];
				}

				if ($.matrix[func]) {

					if ($.cssAngle[func]) {
						// normalize on degrees
						args = $.map(args, $.angle.toDegree);						
					} else if (!$.cssNumber[func]) {
						// normalize to pixels
						args = $.map(args, normalPixels);
					} else {
						// strip units
						args = $.map(args, stripUnits);
					}

					tempMatrix = $.matrix[func].apply(this, args);
					if (rtranslate.test(func)) {
						//defer translation
						trans.push(tempMatrix);
					} else {
						matrix = matrix ? matrix.x(tempMatrix) : tempMatrix;
					}
				} else if (func == 'origin') {
					this[func].apply(this, args);
				}
			}

			// check that we have a matrix
			matrix = matrix || $.matrix.identity();

			// Apply translation
			$.each(trans, function(i, val) { matrix = matrix.x(val); });

			// pull out the relevant values
			var a = parseFloat(matrix.e(1,1).toFixed(6)),
				b = parseFloat(matrix.e(2,1).toFixed(6)),
				c = parseFloat(matrix.e(1,2).toFixed(6)),
				d = parseFloat(matrix.e(2,2).toFixed(6)),
				tx = matrix.rows === 3 ? parseFloat(matrix.e(1,3).toFixed(6)) : 0,
				ty = matrix.rows === 3 ? parseFloat(matrix.e(2,3).toFixed(6)) : 0;

			//apply the transform to the element
			if ($.support.csstransforms && vendorPrefix === '-moz-') {
				// -moz-
				this.$elem.css(transformProperty, 'matrix(' + a + ', ' + b + ', ' + c + ', ' + d + ', ' + tx + 'px, ' + ty + 'px)');
			} else if ($.support.csstransforms) {
				// -webkit, -o-, w3c
				// NOTE: WebKit and Opera don't allow units on the translate variables
				this.$elem.css(transformProperty, 'matrix(' + a + ', ' + b + ', ' + c + ', ' + d + ', ' + tx + ', ' + ty + ')');
			} else if ($.browser.msie) {
				// IE requires the special transform Filter

				//TODO: Use Nearest Neighbor during animation FilterType=\'nearest neighbor\'
				var filterType = ', FilterType=\'nearest neighbor\''; //bilinear
				var style = this.$elem[0].style;
				var matrixFilter = 'progid:DXImageTransform.Microsoft.Matrix(' +
						'M11=' + a + ', M12=' + c + ', M21=' + b + ', M22=' + d +
						', sizingMethod=\'auto expand\'' + filterType + ')';
				var filter = style.filter || $.curCSS( this.$elem[0], "filter" ) || "";
				style.filter = rmatrix.test(filter) ? filter.replace(rmatrix, matrixFilter) : filter ? filter + ' ' + matrixFilter : matrixFilter;

				// Let's know that we're applying post matrix fixes and the height/width will be static for a bit
				this.applyingMatrix = true;
				this.matrix = matrix;

				// IE can't set the origin or translate directly
				this.fixPosition(matrix, tx, ty);

				this.applyingMatrix = false;
				this.matrix = null;
			}
			return true;
		},

		/**
		 * Sets the transform-origin
		 * This really needs to be percentages
		 * @param Number x length
		 * @param Number y length
		 */
		origin: function(x, y) {
			// use CSS in supported browsers
			if ($.support.csstransforms) {
				if (typeof y === 'undefined') {
					this.$elem.css(transformOriginProperty, x);
				} else {
					this.$elem.css(transformOriginProperty, x + ' ' + y);
				}
				return true;
			}

			// correct for keyword lengths
			switch (x) {
				case 'left': x = '0'; break;
				case 'right': x = '100%'; break;
				case 'center': // no break
				case undefined: x = '50%';
			}
			switch (y) {
				case 'top': y = '0'; break;
				case 'bottom': y = '100%'; break;
				case 'center': // no break
				case undefined: y = '50%'; //TODO: does this work?
			}

			// store mixed values with units, assumed pixels
			this.setAttr('origin', [
				rperc.test(x) ? x : toPx(this.$elem[0], x) + 'px',
				rperc.test(y) ? y : toPx(this.$elem[0], y) + 'px'
			]);
			////console.log(this.getAttr('origin'));
			return true;
		},

		/**
		 * Create a function suitable for a CSS value
		 * @param string func
		 * @param Mixed value
		 */
		createTransformFunc: function(func, value) {
			if (func.substr(0, 7) === 'reflect') {
				// let's fake reflection, false value 
				// falsey sets an identity matrix
				var m = value ? $.matrix[func]() : $.matrix.identity();
				return 'matrix(' + m.e(1,1) + ', ' + m.e(2,1) + ', ' + m.e(1,2) + ', ' + m.e(2,2) + ', 0, 0)';
			}

			//value = _correctUnits(func, value);

			if (func == 'matrix') {
				if (vendorPrefix === '-moz-') {
					value[4] = value[4] ? value[4] + 'px' : 0;
					value[5] = value[5] ? value[5] + 'px' : 0;
				}
			}
			return func + '(' + ($.isArray(value) ? value.join(', ') : value) + ')';
		},

		/**
		 * @param Matrix matrix
		 * @param Number tx
		 * @param Number ty
		 * @param Number height
		 * @param Number width
		 */
		fixPosition: function(matrix, tx, ty, height, width) {
			// now we need to fix it!
			var	calc = new $.matrix.calc(matrix, this.safeOuterHeight(), this.safeOuterWidth()),
				origin = this.getAttr('origin'); // mixed percentages and px

			// translate a 0, 0 origin to the current origin
			var offset = calc.originOffset(new $.matrix.V2(
				rperc.test(origin[0]) ? parseFloat(origin[0])/100*calc.outerWidth : parseFloat(origin[0]),
				rperc.test(origin[1]) ? parseFloat(origin[1])/100*calc.outerHeight : parseFloat(origin[1])
			));

			// IE glues the top-most and left-most pixels of the transformed object to top/left of the original object
			//TODO: This seems wrong in the calculations
			var sides = calc.sides();

			// Protect against an item that is already positioned
			var cssPosition = this.$elem.css('position');
			if (cssPosition == 'static') {
				cssPosition = 'relative';
			}

			//TODO: if the element is already positioned, we should attempt to respect it (somehow)
			//NOTE: we could preserve our offset top and left in an attr on the elem
			var pos = {top: 0, left: 0};

			// Approximates transform-origin, tx, and ty
			var css = {
				'position': cssPosition,
				'top': (offset.top + ty + sides.top + pos.top) + 'px',
				'left': (offset.left + tx + sides.left + pos.left) + 'px',
				'zoom': 1
			};

			this.$elem.css(css);
		}
	};

	/**
	 * Ensure that values have the appropriate units on them
	 * @param string func
	 * @param Mixed value
	 */
	function toPx(elem, val) {
		var parts = rfxnum.exec($.trim(val));

		if (parts[3] && parts[3] !== 'px') {
			var prop = 'paddingBottom',
				orig = $.style( elem, prop );

			$.style( elem, prop, val );
			val = cur( elem, prop );
			$.style( elem, prop, orig );
			return val;
		}
		return parseFloat( val );
	}

	function cur(elem, prop) {
		if ( elem[prop] != null && (!elem.style || elem.style[prop] == null) ) {
			return elem[ prop ];
		}

		var r = parseFloat( $.css( elem, prop ) );
		return r && r > -10000 ? r : 0;
	}
})(jQuery, this, this.document);


///////////////////////////////////////////////////////
// Safe Outer Length
///////////////////////////////////////////////////////
(function($, window, document, undefined) {
	$.extend($.transform.prototype, {
		/**
		 * @param void
		 * @return Number
		 */
		safeOuterHeight: function() {
			return this.safeOuterLength('height');
		},

		/**
		 * @param void
		 * @return Number
		 */
		safeOuterWidth: function() {
			return this.safeOuterLength('width');
		},

		/**
		 * Returns reliable outer dimensions for an object that may have been transformed.
		 * Only use this if the matrix isn't handy
		 * @param String dim height or width
		 * @return Number
		 */
		safeOuterLength: function(dim) {
			var funcName = 'outer' + (dim == 'width' ? 'Width' : 'Height');

			if (!$.support.csstransforms && $.browser.msie) {
				// make the variables more generic
				dim = dim == 'width' ? 'width' : 'height';

				// if we're transforming and have a matrix; we can shortcut.
				// the true outerHeight is the transformed outerHeight divided by the ratio.
				// the ratio is equal to the height of a 1px by 1px box that has been transformed by the same matrix.
				if (this.applyingMatrix && !this[funcName] && this.matrix) {
					// calculate and return the correct size
					var calc = new $.matrix.calc(this.matrix, 1, 1),
						ratio = calc.offset(),
						length = this.$elem[funcName]() / ratio[dim];
					this[funcName] = length;

					return length;
				} else if (this.applyingMatrix && this[funcName]) {
					// return the cached calculation
					return this[funcName];
				}

				// map dimensions to box sides			
				var side = {
					height: ['top', 'bottom'],
					width: ['left', 'right']
				};

				// setup some variables
				var elem = this.$elem[0],
					outerLen = parseFloat($.curCSS(elem, dim, true)), //TODO: this can be cached on animations that do not animate height/width
					boxSizingProp = this.boxSizingProperty,
					boxSizingValue = this.boxSizingValue;

				// IE6 && IE7 will never have a box-sizing property, so fake it
				if (!this.boxSizingProperty) {
					boxSizingProp = this.boxSizingProperty = _findBoxSizingProperty() || 'box-sizing';
					boxSizingValue = this.boxSizingValue = this.$elem.css(boxSizingProp) || 'content-box';
				}

				// return it immediately if we already know it
				if (this[funcName] && this[dim] == outerLen) {
					return this[funcName];
				} else {
					this[dim] = outerLen;
				}

				// add in the padding and border
				if (boxSizingProp && (boxSizingValue == 'padding-box' || boxSizingValue == 'content-box')) {
					outerLen += parseFloat($.curCSS(elem, 'padding-' + side[dim][0], true)) || 0 +
								  parseFloat($.curCSS(elem, 'padding-' + side[dim][1], true)) || 0;
				}
				if (boxSizingProp && boxSizingValue == 'content-box') {
					outerLen += parseFloat($.curCSS(elem, 'border-' + side[dim][0] + '-width', true)) || 0 +
								  parseFloat($.curCSS(elem, 'border-' + side[dim][1] + '-width', true)) || 0;
				}

				// remember and return the outerHeight
				this[funcName] = outerLen;
				return outerLen;
			}
			return this.$elem[funcName]();
		}
	});

	/**
	 * Determine the correct property for checking the box-sizing property
	 * @param void
	 * @return string
	 */
	var _boxSizingProperty = null;
	function _findBoxSizingProperty () {
		if (_boxSizingProperty) {
			return _boxSizingProperty;
		} 

		var property = {
				boxSizing : 'box-sizing',
				MozBoxSizing : '-moz-box-sizing',
				WebkitBoxSizing : '-webkit-box-sizing',
				OBoxSizing : '-o-box-sizing'
			},
			elem = document.body;

		for (var p in property) {
			if (typeof elem.style[p] != 'undefined') {
				_boxSizingProperty = property[p];
				return _boxSizingProperty;
			}
		}
		return null;
	}
})(jQuery, this, this.document);


///////////////////////////////////////////////////////
// Attr
///////////////////////////////////////////////////////
(function($, window, document, undefined) {
	var rfuncvalue = /([\w\-]*?)\((.*?)\)/g, // with values
		attr = 'data-transform',
		rspace = /\s/,
		rcspace = /,\s?/;

	$.extend($.transform.prototype, {		
		/**
		 * This overrides all of the attributes
		 * @param Object funcs a list of transform functions to store on this element
		 * @return void
		 */
		setAttrs: function(funcs) {
			var string = '',
				value;
			for (var func in funcs) {
				value = funcs[func];
				if ($.isArray(value)) {
					value = value.join(', ');
				}
				string += ' ' + func + '(' + value + ')'; 
			}
			this.attr = $.trim(string);
			this.$elem.attr(attr, this.attr);
		},

		/**
		 * This sets only a specific atribute
		 * @param string func name of a transform function
		 * @param mixed value with proper units
		 * @return void
		 */
		setAttr: function(func, value) {
			// stringify the value
			if ($.isArray(value)) {
				value = value.join(', ');
			}

			// pull from a local variable to look it up
			var transform = this.attr || this.$elem.attr(attr);
			if (!transform || transform.indexOf(func) == -1) {
				// we don't have any existing values, save it
				// we don't have this function yet, save it
				this.attr = $.trim(transform + ' ' + func + '(' + value + ')');
				this.$elem.attr(attr, this.attr);
			} else {
				// replace the existing value
				var funcs = [],	parts;

				// regex split
				rfuncvalue.lastIndex = 0; // reset the regex pointer
				while (parts = rfuncvalue.exec(transform)) {
					if (func == parts[1]) {
						funcs.push(func + '(' + value + ')');
					} else {
						funcs.push(parts[0]);
					}
				}
				this.attr = funcs.join(' ');
				this.$elem.attr(attr, this.attr);
			}
		},

		/**
		 * @return Object
		 */
		getAttrs: function() {
			var transform = this.attr || this.$elem.attr(attr);
			if (!transform) {
				// We don't have any existing values, return empty object
				return {};
			}

			// replace the existing value
			var attrs = {}, parts, value;

			rfuncvalue.lastIndex = 0; // reset the regex pointer
			while ((parts = rfuncvalue.exec(transform)) !== null) {
				if (parts) {
					value = parts[2].split(rcspace);
					attrs[parts[1]] = value.length == 1 ? value[0] : value;
				}
			}
			return attrs;
		},

		/**
		 * @param String func 
		 * @return mixed
		 */
		getAttr: function(func) {
			var attrs = this.getAttrs();
			if (typeof attrs[func] !== 'undefined') {
				return attrs[func];
			}

			//TODO: move the origin to a function
			if (func === 'origin' && $.support.csstransforms) {
				// supported browsers return percentages always
				return this.$elem.css(this.transformOriginProperty).split(rspace);
			} else if (func === 'origin') {
				// just force IE to also return a percentage
				return ['50%', '50%'];
			}

			return $.cssDefault[func] || 0;
		}
	});

	// Define 
	if (typeof($.cssAngle) == 'undefined') {
		$.cssAngle = {};
	}
	$.extend($.cssAngle, {
		rotate: true,
		skew: true,
		skewX: true,
		skewY: true
	});

	// Define default values
	if (typeof($.cssDefault) == 'undefined') {
		$.cssDefault = {};
	}

	$.extend($.cssDefault, {
		scale: [1, 1],
		scaleX: 1,
		scaleY: 1,
		matrix: [1, 0, 0, 1, 0, 0],
		origin: ['50%', '50%'], // TODO: allow this to be a function, like get
		reflect: [1, 0, 0, 1, 0, 0],
		reflectX: [1, 0, 0, 1, 0, 0],
		reflectXY: [1, 0, 0, 1, 0, 0],
		reflectY: [1, 0, 0, 1, 0, 0]
	});

	// Define functons with multiple values
	if (typeof($.cssMultipleValues) == 'undefined') {
		$.cssMultipleValues = {};
	}
	$.extend($.cssMultipleValues, {
		matrix: 6,
		origin: {
			length: 2,
			duplicate: true
		},
		reflect: 6,
		reflectX: 6,
		reflectXY: 6,
		reflectY: 6,
		scale: {
			length: 2,
			duplicate: true
		},
		skew: 2,
		translate: 2
	});

	// specify unitless funcs
	$.extend($.cssNumber, {
		matrix: true,
		reflect: true,
		reflectX: true,
		reflectXY: true,
		reflectY: true,
		scale: true,
		scaleX: true,
		scaleY: true
	});

	// override all of the css functions
	$.each($.transform.funcs, function(i, func) {
		$.cssHooks[func] = {
			set: function(elem, value) {
				var transform = elem.transform || new $.transform(elem),
					funcs = {};
				funcs[func] = value;
				transform.exec(funcs, {preserve: true});
			},
			get: function(elem, computed) {
				var transform = elem.transform || new $.transform(elem);
				return transform.getAttr(func);
			}
		};
	});

	// Support Reflection animation better by returning a matrix
	$.each(['reflect', 'reflectX', 'reflectXY', 'reflectY'], function(i, func) {
		$.cssHooks[func].get = function(elem, computed) {
			var transform = elem.transform || new $.transform(elem);
			return transform.getAttr('matrix') || $.cssDefault[func];
		};
	});
})(jQuery, this, this.document);
///////////////////////////////////////////////////////
// Animation
///////////////////////////////////////////////////////
(function($, window, document, undefined) {
	/**
	 * @var Regex looks for units on a string
	 */
	var rfxnum = /^([+\-]=)?([\d+.\-]+)(.*)$/;

	/**
	 * Doctors prop values in the event that they contain spaces
	 * @param Object prop
	 * @param String speed
	 * @param String easing
	 * @param Function callback
	 * @return bool
	 */
	var _animate = $.fn.animate;
	$.fn.animate = function( prop, speed, easing, callback ) {
		var optall = $.speed(speed, easing, callback),
			mv = $.cssMultipleValues;

		// Speed always creates a complete function that must be reset
		optall.complete = optall.old;

		// Capture multiple values
		if (!$.isEmptyObject(prop)) {
			if (typeof optall.original === 'undefined') {
				optall.original = {};
			}
			$.each( prop, function( name, val ) {
				if (mv[name]
					|| $.cssAngle[name]
					|| (!$.cssNumber[name] && $.inArray(name, $.transform.funcs) !== -1)) {

					// Handle special easing
					var specialEasing = null;
					if (jQuery.isArray(prop[name])) {
						var mvlen = 1, len = val.length;
						if (mv[name]) {
							mvlen = (typeof mv[name].length === 'undefined' ? mv[name] : mv[name].length);
						}
						if ( len > mvlen
							|| (len < mvlen && len == 2)
							|| (len == 2 && mvlen == 2 && isNaN(parseFloat(val[len - 1])))) {

							specialEasing = val[len - 1];
							val.splice(len - 1, 1);
						}
					}

					// Store the original values onto the optall
					optall.original[name] = val.toString();

					// reduce to a unitless number (to trick animate)
					prop[name] = parseFloat(val);
				}
			} );
		}

		//NOTE: we edited prop above to trick animate
		//NOTE: we pre-convert to an optall so we can doctor it
		return _animate.apply(this, [arguments[0], optall]);
	};

	var prop = 'paddingBottom';
	function cur(elem, prop) {
		if ( elem[prop] != null && (!elem.style || elem.style[prop] == null) ) {
			//return elem[ prop ];
		}

		var r = parseFloat( $.css( elem, prop ) );
		return r && r > -10000 ? r : 0;
	}

	var _custom = $.fx.prototype.custom;
	$.fx.prototype.custom = function(from, to, unit) {
		var multiple = $.cssMultipleValues[this.prop],
			angle = $.cssAngle[this.prop];

		//TODO: simply check for the existence of CSS Hooks?
		if (multiple || (!$.cssNumber[this.prop] && $.inArray(this.prop, $.transform.funcs) !== -1)) {
			this.values = [];

			if (!multiple) {
				multiple = 1;
			}

			// Pull out the known values
			var values = this.options.original[this.prop],
				currentValues = $(this.elem).css(this.prop),
				defaultValues = $.cssDefault[this.prop] || 0;

			// make sure the current css value is an array
			if (!$.isArray(currentValues)) {
				currentValues = [currentValues];
			}

			// make sure the new values are an array
			if (!$.isArray(values)) {
				if ($.type(values) === 'string') {
					values = values.split(',');
				} else {
					values = [values];
				}
			}

			// make sure we have enough new values
			var length = multiple.length || multiple, i = 0;
			while (values.length < length) {
				values.push(multiple.duplicate ? values[0] : defaultValues[i] || 0);
				i++;
			}

			// calculate a start, end and unit for each new value
			var start, parts, end, //unit,
				fx = this,
				transform = fx.elem.transform;
				orig = $.style(fx.elem, prop);

			$.each(values, function(i, val) {
				// find a sensible start value
				if (currentValues[i]) {
					start = currentValues[i];
				} else if (defaultValues[i] && !multiple.duplicate) {
					start = defaultValues[i];
				} else if (multiple.duplicate) {
					start = currentValues[0];
				} else {
					start = 0;
				}

				// Force the correct unit on the start
				if (angle) {
					start = $.angle.toDegree(start);
				} else if (!$.cssNumber[fx.prop]) {
					parts = rfxnum.exec($.trim(start));
					if (parts[3] && parts[3] !== 'px') {
						if (parts[3] === '%') {
							start = parseFloat( parts[2] ) / 100 * transform['safeOuter' + (i ? 'Height' : 'Width')]();
						} else {
							$.style( fx.elem, prop, start);
							start = cur(fx.elem, prop);
							$.style( fx.elem, prop, orig);
						}
					}
				}
				start = parseFloat(start);

				// parse the value with a regex
				parts = rfxnum.exec($.trim(val));

				if (parts) {
					// we found a sensible value and unit
					end = parseFloat( parts[2] );
					unit = parts[3] || "px"; //TODO: change to an appropriate default unit

					if (angle) {
						end = $.angle.toDegree(end + unit);
						unit = 'deg';
					} else if (!$.cssNumber[fx.prop] && unit === '%') {
						start = (start / transform['safeOuter' + (i ? 'Height' : 'Width')]()) * 100;
					} else if (!$.cssNumber[fx.prop] && unit !== 'px') {
						$.style( fx.elem, prop, (end || 1) + unit);
						start = ((end || 1) / cur(fx.elem, prop)) * start;
						$.style( fx.elem, prop, orig);
					}

					// If a +=/-= token was provided, we're doing a relative animation
					if (parts[1]) {
						end = ((parts[1] === "-=" ? -1 : 1) * end) + start;
					}
				} else {
					// I don't know when this would happen
					end = val;
					unit = ''; 
				}

				// Save the values
				fx.values.push({
					start: start,
					end: end,
					unit: unit
				});				
			});
		}
		return _custom.apply(this, arguments);
	};

	/**
	 * Animates a multi value attribute
	 * @param Object fx
	 * @return null
	 */
	$.fx.multipleValueStep = {
		_default: function(fx) {
			$.each(fx.values, function(i, val) {
				fx.values[i].now = val.start + ((val.end - val.start) * fx.pos);
			});
		}
	};
	$.each(['matrix', 'reflect', 'reflectX', 'reflectXY', 'reflectY'], function(i, func) {
		$.fx.multipleValueStep[func] = function(fx) {
			var d = fx.decomposed,
				$m = $.matrix;
				m = $m.identity();

			d.now = {};

			// increment each part of the decomposition and recompose it		
			$.each(d.start, function(k) {				
				// calculate the current value
				d.now[k] = parseFloat(d.start[k]) + ((parseFloat(d.end[k]) - parseFloat(d.start[k])) * fx.pos);

				// skip functions that won't affect the transform
				if (((k === 'scaleX' || k === 'scaleY') && d.now[k] === 1) ||
					(k !== 'scaleX' && k !== 'scaleY' && d.now[k] === 0)) {
					return true;
				}

				// calculating
				m = m.x($m[k](d.now[k]));
			});

			// save the correct matrix values for the value of now
			var val;
			$.each(fx.values, function(i) {
				switch (i) {
					case 0: val = parseFloat(m.e(1, 1).toFixed(6)); break;
					case 1: val = parseFloat(m.e(2, 1).toFixed(6)); break;
					case 2: val = parseFloat(m.e(1, 2).toFixed(6)); break;
					case 3: val = parseFloat(m.e(2, 2).toFixed(6)); break;
					case 4: val = parseFloat(m.e(1, 3).toFixed(6)); break;
					case 5: val = parseFloat(m.e(2, 3).toFixed(6)); break;
				}
				fx.values[i].now = val;
			});
		};
	});
	/**
	 * Step for animating tranformations
	 */
	$.each($.transform.funcs, function(i, func) {
		$.fx.step[func] = function(fx) {
			var transform = fx.elem.transform || new $.transform(fx.elem),
				funcs = {};

			if ($.cssMultipleValues[func] || (!$.cssNumber[func] && $.inArray(func, $.transform.funcs) !== -1)) {
				($.fx.multipleValueStep[fx.prop] || $.fx.multipleValueStep._default)(fx);
				funcs[fx.prop] = [];
				$.each(fx.values, function(i, val) {
					funcs[fx.prop].push(val.now + ($.cssNumber[fx.prop] ? '' : val.unit));
				});
			} else {
				funcs[fx.prop] = fx.now + ($.cssNumber[fx.prop] ? '' : fx.unit);
			}

			transform.exec(funcs, {preserve: true});
		};
	});

	// Support matrix animation
	$.each(['matrix', 'reflect', 'reflectX', 'reflectXY', 'reflectY'], function(i, func) {
		$.fx.step[func] = function(fx) {
			var transform = fx.elem.transform || new $.transform(fx.elem),
				funcs = {};

			if (!fx.initialized) {
				fx.initialized = true;

				// Reflections need a sensible end value set
				if (func !== 'matrix') {
					var values = $.matrix[func]().elements;
					var val;
					$.each(fx.values, function(i) {
						switch (i) {
							case 0: val = values[0]; break;
							case 1: val = values[2]; break;
							case 2: val = values[1]; break;
							case 3: val = values[3]; break;
							default: val = 0;
						}
						fx.values[i].end = val;
					});
				}

				// Decompose the start and end
				fx.decomposed = {};
				var v = fx.values;

				fx.decomposed.start = $.matrix.matrix(v[0].start, v[1].start, v[2].start, v[3].start, v[4].start, v[5].start).decompose();
				fx.decomposed.end = $.matrix.matrix(v[0].end, v[1].end, v[2].end, v[3].end, v[4].end, v[5].end).decompose();
			}

			($.fx.multipleValueStep[fx.prop] || $.fx.multipleValueStep._default)(fx);
			funcs.matrix = [];
			$.each(fx.values, function(i, val) {
				funcs.matrix.push(val.now);
			});

			transform.exec(funcs, {preserve: true});
		};
	});
})(jQuery, this, this.document);
///////////////////////////////////////////////////////
// Angle
///////////////////////////////////////////////////////
(function($, window, document, undefined) {
	/**
	 * Converting a radian to a degree
	 * @const
	 */
	var RAD_DEG = 180/Math.PI;

	/**
	 * Converting a radian to a grad
	 * @const
	 */
	var RAD_GRAD = 200/Math.PI;

	/**
	 * Converting a degree to a radian
	 * @const
	 */
	var DEG_RAD = Math.PI/180;

	/**
	 * Converting a degree to a grad
	 * @const
	 */
	var DEG_GRAD = 2/1.8;

	/**
	 * Converting a grad to a degree
	 * @const
	 */
	var GRAD_DEG = 0.9;

	/**
	 * Converting a grad to a radian
	 * @const
	 */
	var GRAD_RAD = Math.PI/200;


	var rfxnum = /^([+\-]=)?([\d+.\-]+)(.*)$/;

	/**
	 * Functions for converting angles
	 * @var Object
	 */
	$.extend({
		angle: {
			/**
			 * available units for an angle
			 * @var Regex
			 */
			runit: /(deg|g?rad)/,

			/**
			 * Convert a radian into a degree
			 * @param Number rad
			 * @return Number
			 */
			radianToDegree: function(rad) {
				return rad * RAD_DEG;
			},

			/**
			 * Convert a radian into a degree
			 * @param Number rad
			 * @return Number
			 */
			radianToGrad: function(rad) {
				return rad * RAD_GRAD;
			},

			/**
			 * Convert a degree into a radian
			 * @param Number deg
			 * @return Number
			 */
			degreeToRadian: function(deg) {
				return deg * DEG_RAD;
			},

			/**
			 * Convert a degree into a radian
			 * @param Number deg
			 * @return Number
			 */
			degreeToGrad: function(deg) {
				return deg * DEG_GRAD;
			},

			/**
			 * Convert a grad into a degree
			 * @param Number grad
			 * @return Number
			 */
			gradToDegree: function(grad) {
				return grad * GRAD_DEG;
			},

			/**
			 * Convert a grad into a radian
			 * @param Number grad
			 * @return Number
			 */
			gradToRadian: function(grad) {
				return grad * GRAD_RAD;
			},

			/**
			 * Convert an angle with a unit to a degree
			 * @param String val angle with a unit
			 * @return Number
			 */
			toDegree: function (val) {
				var parts = rfxnum.exec(val);
				if (parts) {
					val = parseFloat( parts[2] );
					switch (parts[3] || 'deg') {
						case 'grad':
							val = $.angle.gradToDegree(val);
							break;
						case 'rad':
							val = $.angle.radianToDegree(val);
							break;
					}
					return val;
				}
				return 0;
			}
		}
	});
})(jQuery, this, this.document);
///////////////////////////////////////////////////////
// Matrix
///////////////////////////////////////////////////////
(function($, window, document, undefined) {
	/**
	 * Matrix object for creating matrices relevant for 2d Transformations
	 * @var Object
	 */
	if (typeof($.matrix) == 'undefined') {
		$.extend({
			matrix: {}
		});
	}
	var $m = $.matrix;

	$.extend( $m, {
		/**
		 * A 2-value vector
		 * @param Number x
		 * @param Number y
		 * @constructor
		 */
		V2: function(x, y){
			if ($.isArray(arguments[0])) {
				this.elements = arguments[0].slice(0, 2);
			} else {
				this.elements = [x, y];
			}
			this.length = 2;
		},

		/**
		 * A 2-value vector
		 * @param Number x
		 * @param Number y
		 * @param Number z
		 * @constructor
		 */
		V3: function(x, y, z){
			if ($.isArray(arguments[0])) {
				this.elements = arguments[0].slice(0, 3);
			} else {
				this.elements = [x, y, z];
			}
			this.length = 3;
		},

		/**
		 * A 2x2 Matrix, useful for 2D-transformations without translations
		 * @param Number mn
		 * @constructor
		 */
		M2x2: function(m11, m12, m21, m22) {
			if ($.isArray(arguments[0])) {
				this.elements = arguments[0].slice(0, 4);
			} else {
				this.elements = Array.prototype.slice.call(arguments).slice(0, 4);
			}
			this.rows = 2;
			this.cols = 2;
		},

		/**
		 * A 3x3 Matrix, useful for 3D-transformations without translations
		 * @param Number mn
		 * @constructor
		 */
		M3x3: function(m11, m12, m13, m21, m22, m23, m31, m32, m33) {
			if ($.isArray(arguments[0])) {
				this.elements = arguments[0].slice(0, 9);
			} else {
				this.elements = Array.prototype.slice.call(arguments).slice(0, 9);
			}
			this.rows = 3;
			this.cols = 3;
		}
	});

	/** generic matrix prototype */
	var Matrix = {
		/**
		 * Return a specific element from the matrix
		 * @param Number row where 1 is the 0th row
		 * @param Number col where 1 is the 0th column
		 * @return Number
		 */
		e: function(row, col) {
			var rows = this.rows,
				cols = this.cols;

			// return 0 on nonsense rows and columns
			if (row > rows || col > rows || row < 1 || col < 1) {
				return 0;
			}

			return this.elements[(row - 1) * cols + col - 1];
		},

		/**
		 * Taken from Zoomooz
	     * https://github.com/jaukia/zoomooz/blob/c7a37b9a65a06ba730bd66391bbd6fe8e55d3a49/js/jquery.zoomooz.js
		 */
		decompose: function() {
			var a = this.e(1, 1),
				b = this.e(2, 1),
				c = this.e(1, 2),
				d = this.e(2, 2),
				e = this.e(1, 3),
				f = this.e(2, 3);

			// In case the matrix can't be decomposed
			if (Math.abs(a * d - b * c) < 0.01) {
				return {
					rotate: 0 + 'deg',
					skewX: 0 + 'deg',
					scaleX: 1,
					scaleY: 1,
					translateX: 0 + 'px',
					translateY: 0 + 'px'
				};
			}

			// Translate is easy
			var tx = e, ty = f;

			// factor out the X scale
			var sx = Math.sqrt(a * a + b * b);
			a = a/sx;
			b = b/sx;

			// factor out the skew
			var k = a * c + b * d;
			c -= a * k;
			d -= b * k;

			// factor out the Y scale
			var sy = Math.sqrt(c * c + d * d);
			c = c / sy;
			d = d / sy;
			k = k / sy;

			// account for negative scale
			if ((a * d - b * c) < 0.0) {
				a = -a;
				b = -b;
				//c = -c; // accomplishes nothing to negate it
				//d = -d; // accomplishes nothing to negate it
				sx = -sx;
				//sy = -sy //Scale Y shouldn't ever be negated
			}

			// calculate the rotation angle and skew angle
			var rad2deg = $.angle.radianToDegree;
			var r = rad2deg(Math.atan2(b, a));
			k = rad2deg(Math.atan(k));

			return {
				rotate: r + 'deg',
				skewX: k + 'deg',
				scaleX: sx,
				scaleY: sy,
				translateX: tx + 'px',
				translateY: ty + 'px'
			};
		}
	};

	/** Extend all of the matrix types with the same prototype */
	$.extend($m.M2x2.prototype, Matrix, {
		toM3x3: function() {
			var a = this.elements;
			return new $m.M3x3(
				a[0], a[1], 0,
				a[2], a[3], 0,
				0,    0,    1
			);	
		},

		/**
		 * Multiply a 2x2 matrix by a similar matrix or a vector
		 * @param M2x2 | V2 matrix
		 * @return M2x2 | V2
		 */
		x: function(matrix) {
			var isVector = typeof(matrix.rows) === 'undefined';

			// Ensure the right-sized matrix
			if (!isVector && matrix.rows == 3) {
				return this.toM3x3().x(matrix);
			}

			var a = this.elements,
				b = matrix.elements;

			if (isVector && b.length == 2) {
				// b is actually a vector
				return new $m.V2(
					a[0] * b[0] + a[1] * b[1],
					a[2] * b[0] + a[3] * b[1]
				);
			} else if (b.length == a.length) {
				// b is a 2x2 matrix
				return new $m.M2x2(
					a[0] * b[0] + a[1] * b[2],
					a[0] * b[1] + a[1] * b[3],

					a[2] * b[0] + a[3] * b[2],
					a[2] * b[1] + a[3] * b[3]
				);
			}
			return false; // fail
		},

		/**
		 * Generates an inverse of the current matrix
		 * @param void
		 * @return M2x2
		 * @link http://www.dr-lex.be/random/matrix_inv.html
		 */
		inverse: function() {
			var d = 1/this.determinant(),
				a = this.elements;
			return new $m.M2x2(
				d *  a[3], d * -a[1],
				d * -a[2], d *  a[0]
			);
		},

		/**
		 * Calculates the determinant of the current matrix
		 * @param void
		 * @return Number
		 * @link http://www.dr-lex.be/random/matrix_inv.html
		 */
		determinant: function() {
			var a = this.elements;
			return a[0] * a[3] - a[1] * a[2];
		}
	});

	$.extend($m.M3x3.prototype, Matrix, {
		/**
		 * Multiply a 3x3 matrix by a similar matrix or a vector
		 * @param M3x3 | V3 matrix
		 * @return M3x3 | V3
		 */
		x: function(matrix) {
			var isVector = typeof(matrix.rows) === 'undefined';

			// Ensure the right-sized matrix
			if (!isVector && matrix.rows < 3) {
				matrix = matrix.toM3x3();
			}

			var a = this.elements,
				b = matrix.elements;

			if (isVector && b.length == 3) {
				// b is actually a vector
				return new $m.V3(
					a[0] * b[0] + a[1] * b[1] + a[2] * b[2],
					a[3] * b[0] + a[4] * b[1] + a[5] * b[2],
					a[6] * b[0] + a[7] * b[1] + a[8] * b[2]
				);
			} else if (b.length == a.length) {
				// b is a 3x3 matrix
				return new $m.M3x3(
					a[0] * b[0] + a[1] * b[3] + a[2] * b[6],
					a[0] * b[1] + a[1] * b[4] + a[2] * b[7],
					a[0] * b[2] + a[1] * b[5] + a[2] * b[8],

					a[3] * b[0] + a[4] * b[3] + a[5] * b[6],
					a[3] * b[1] + a[4] * b[4] + a[5] * b[7],
					a[3] * b[2] + a[4] * b[5] + a[5] * b[8],

					a[6] * b[0] + a[7] * b[3] + a[8] * b[6],
					a[6] * b[1] + a[7] * b[4] + a[8] * b[7],
					a[6] * b[2] + a[7] * b[5] + a[8] * b[8]
				);
			}
			return false; // fail
		},

		/**
		 * Generates an inverse of the current matrix
		 * @param void
		 * @return M3x3
		 * @link http://www.dr-lex.be/random/matrix_inv.html
		 */
		inverse: function() {
			var d = 1/this.determinant(),
				a = this.elements;
			return new $m.M3x3(
				d * (  a[8] * a[4] - a[7] * a[5]),
				d * (-(a[8] * a[1] - a[7] * a[2])),
				d * (  a[5] * a[1] - a[4] * a[2]),

				d * (-(a[8] * a[3] - a[6] * a[5])),
				d * (  a[8] * a[0] - a[6] * a[2]),
				d * (-(a[5] * a[0] - a[3] * a[2])),

				d * (  a[7] * a[3] - a[6] * a[4]),
				d * (-(a[7] * a[0] - a[6] * a[1])),
				d * (  a[4] * a[0] - a[3] * a[1])
			);
		},

		/**
		 * Calculates the determinant of the current matrix
		 * @param void
		 * @return Number
		 * @link http://www.dr-lex.be/random/matrix_inv.html
		 */
		determinant: function() {
			var a = this.elements;
			return a[0] * (a[8] * a[4] - a[7] * a[5]) - a[3] * (a[8] * a[1] - a[7] * a[2]) + a[6] * (a[5] * a[1] - a[4] * a[2]);
		}
	});

	/** generic vector prototype */
	var Vector = {		
		/**
		 * Return a specific element from the vector
		 * @param Number i where 1 is the 0th value
		 * @return Number
		 */
		e: function(i) {
			return this.elements[i - 1];
		}
	};

	/** Extend all of the vector types with the same prototype */
	$.extend($m.V2.prototype, Vector);
	$.extend($m.V3.prototype, Vector);
})(jQuery, this, this.document);
///////////////////////////////////////////////////////
// Matrix Calculations
///////////////////////////////////////////////////////
(function($, window, document, undefined) {
	/**
	 * Matrix object for creating matrices relevant for 2d Transformations
	 * @var Object
	 */
	if (typeof($.matrix) == 'undefined') {
		$.extend({
			matrix: {}
		});
	}

	$.extend( $.matrix, {
		/**
		 * Class for calculating coordinates on a matrix
		 * @param Matrix matrix
		 * @param Number outerHeight
		 * @param Number outerWidth
		 * @constructor
		 */
		calc: function(matrix, outerHeight, outerWidth) {
			/**
			 * @var Matrix
			 */
			this.matrix = matrix;

			/**
			 * @var Number
			 */
			this.outerHeight = outerHeight;

			/**
			 * @var Number
			 */
			this.outerWidth = outerWidth;
		}
	});

	$.matrix.calc.prototype = {
		/**
		 * Calculate a coord on the new object
		 * @return Object
		 */
		coord: function(x, y, z) {
			//default z and w
			z = typeof(z) !== 'undefined' ? z : 0;

			var matrix = this.matrix,
				vector;

			switch (matrix.rows) {
				case 2:
					vector = matrix.x(new $.matrix.V2(x, y));
					break;
				case 3:
					vector = matrix.x(new $.matrix.V3(x, y, z));
					break;
			}

			return vector;
		},

		/**
		 * Calculate the corners of the new object
		 * @return Object
		 */
		corners: function(x, y) {
			// Try to save the corners if this is called a lot
			var save = !(typeof(x) !=='undefined' || typeof(y) !=='undefined'),
				c;
			if (!this.c || !save) {
				y = y || this.outerHeight;
				x = x || this.outerWidth;

				c = {
					tl: this.coord(0, 0),
					bl: this.coord(0, y),
					tr: this.coord(x, 0),
					br: this.coord(x, y)
				};
			} else {
				c = this.c;
			}

			if (save) {
				this.c = c;
			}
			return c;
		},

		/**
		 * Calculate the sides of the new object
		 * @return Object
		 */
		sides: function(corners) {
			// The corners of the box
			var c = corners || this.corners();

			return {
				top: Math.min(c.tl.e(2), c.tr.e(2), c.br.e(2), c.bl.e(2)),
				bottom: Math.max(c.tl.e(2), c.tr.e(2), c.br.e(2), c.bl.e(2)),
				left: Math.min(c.tl.e(1), c.tr.e(1), c.br.e(1), c.bl.e(1)),
				right: Math.max(c.tl.e(1), c.tr.e(1), c.br.e(1), c.bl.e(1))
			};
		},

		/**
		 * Calculate the offset of the new object
		 * @return Object
		 */
		offset: function(corners) {
			// The corners of the box
			var s = this.sides(corners);

			// return size
			return {
				height: Math.abs(s.bottom - s.top), 
				width: Math.abs(s.right - s.left)
			};
		},

		/**
		 * Calculate the area of the new object
		 * @return Number
		 * @link http://en.wikipedia.org/wiki/Quadrilateral#Area_of_a_convex_quadrilateral
		 */
		area: function(corners) {
			// The corners of the box
			var c = corners || this.corners();

			// calculate the two diagonal vectors
			var v1 = {
					x: c.tr.e(1) - c.tl.e(1) + c.br.e(1) - c.bl.e(1),
					y: c.tr.e(2) - c.tl.e(2) + c.br.e(2) - c.bl.e(2)
				},
				v2 = {
					x: c.bl.e(1) - c.tl.e(1) + c.br.e(1) - c.tr.e(1),
					y: c.bl.e(2) - c.tl.e(2) + c.br.e(2) - c.tr.e(2)
				};

			return 0.25 * Math.abs(v1.e(1) * v2.e(2) - v1.e(2) * v2.e(1));
		},

		/**
		 * Calculate the non-affinity of the new object
		 * @return Number
		 */
		nonAffinity: function() {
			// The corners of the box
			var sides = this.sides(),
				xDiff = sides.top - sides.bottom,
				yDiff = sides.left - sides.right;

			return parseFloat(parseFloat(Math.abs(
				(Math.pow(xDiff, 2) + Math.pow(yDiff, 2)) /
				(sides.top * sides.bottom + sides.left * sides.right)
			)).toFixed(8));
		},

		/**
		 * Calculate a proper top and left for IE
		 * @param Object toOrigin
		 * @param Object fromOrigin
		 * @return Object
		 */
		originOffset: function(toOrigin, fromOrigin) {
			// the origin to translate to
			toOrigin = toOrigin ? toOrigin : new $.matrix.V2(
				this.outerWidth * 0.5,
				this.outerHeight * 0.5
			);

			// the origin to translate from (IE has a fixed origin of 0, 0)
			fromOrigin = fromOrigin ? fromOrigin : new $.matrix.V2(
				0,
				0
			);

			// transform the origins
			var toCenter = this.coord(toOrigin.e(1), toOrigin.e(2));
			var fromCenter = this.coord(fromOrigin.e(1), fromOrigin.e(2));

			// return the offset
			return {
				top: (fromCenter.e(2) - fromOrigin.e(2)) - (toCenter.e(2) - toOrigin.e(2)),
				left: (fromCenter.e(1) - fromOrigin.e(1)) - (toCenter.e(1) - toOrigin.e(1))
			};
		}
	};
})(jQuery, this, this.document);
///////////////////////////////////////////////////////
// 2d Matrix Functions
///////////////////////////////////////////////////////
(function($, window, document, undefined) {
	/**
	 * Matrix object for creating matrices relevant for 2d Transformations
	 * @var Object
	 */
	if (typeof($.matrix) == 'undefined') {
		$.extend({
			matrix: {}
		});
	}
	var $m = $.matrix,
		$m2x2 = $m.M2x2,
		$m3x3 = $m.M3x3;

	$.extend( $m, {
		/**
		 * Identity matrix
		 * @param Number size
		 * @return Matrix
		 */
		identity: function(size) {
			size = size || 2;
			var length = size * size,
				elements = new Array(length),
				mod = size + 1;
			for (var i = 0; i < length; i++) {
				elements[i] = (i % mod) === 0 ? 1 : 0;
			}
			return new $m['M'+size+'x'+size](elements);
		},

		/**
		 * Matrix
		 * @return Matrix
		 */
		matrix: function() {
			var args = Array.prototype.slice.call(arguments);
			// arguments are in column-major order
			switch (arguments.length) {
				case 4:
					return new $m2x2(
						args[0], args[2],
						args[1], args[3]
					);
				case 6:
					return new $m3x3(
						args[0], args[2], args[4],
						args[1], args[3], args[5],
						0,       0,       1
					);
			}
		},

		/**
		 * Reflect (same as rotate(180))
		 * @return Matrix
		 */
		reflect: function() {
			return new $m2x2(
				-1,  0,
				 0, -1
			);
		},

		/**
		 * Reflect across the x-axis (mirrored upside down)
		 * @return Matrix
		 */
		reflectX: function() {	
			return new $m2x2(
				1,  0,
				0, -1
			);
		},

		/**
		 * Reflect by swapping x an y (same as reflectX + rotate(-90))
		 * @return Matrix
		 */
		reflectXY: function() {
			return new $m2x2(
				0, 1,
				1, 0
			);
		},

		/**
		 * Reflect across the y-axis (mirrored)
		 * @return Matrix
		 */
		reflectY: function() {
			return new $m2x2(
				-1, 0,
				 0, 1
			);
		},

		/**
		 * Rotates around the origin
		 * @param Number deg
		 * @return Matrix
		 * @link http://www.w3.org/TR/SVG/coords.html#RotationDefined
		 */
		rotate: function(deg) {
			//TODO: detect units
			var rad = $.angle.degreeToRadian(deg),
				costheta = Math.cos(rad),
				sintheta = Math.sin(rad);

			var a = costheta,
				b = sintheta,
				c = -sintheta,
				d = costheta;

			return new $m2x2(
				a, c,
				b, d
			);
		},

		/**
		 * Scale
		 * @param Number sx
		 * @param Number sy
		 * @return Matrix
		 * @link http://www.w3.org/TR/SVG/coords.html#ScalingDefined
		 */
		scale: function (sx, sy) {
			sx = sx || sx === 0 ? sx : 1;
			sy = sy || sy === 0 ? sy : sx;

			return new $m2x2(
				sx, 0,
				0, sy
			);
		},

		/**
		 * Scale on the X-axis
		 * @param Number sx
		 * @return Matrix
		 */
		scaleX: function (sx) {
			return $m.scale(sx, 1);
		},

		/**
		 * Scale on the Y-axis
		 * @param Number sy
		 * @return Matrix
		 */
		scaleY: function (sy) {
			return $m.scale(1, sy);
		},

		/**
		 * Skews on the X-axis and Y-axis
		 * @param Number degX
		 * @param Number degY
		 * @return Matrix
		 */
		skew: function (degX, degY) {
			degX = degX || 0;
			degY = degY || 0;

			//TODO: detect units
			var radX = $.angle.degreeToRadian(degX),
				radY = $.angle.degreeToRadian(degY),
				x = Math.tan(radX),
				y = Math.tan(radY);

			return new $m2x2(
				1, x,
				y, 1
			);
		},

		/**
		 * Skews on the X-axis
		 * @param Number degX
		 * @return Matrix
		 * @link http://www.w3.org/TR/SVG/coords.html#SkewXDefined
		 */
		skewX: function (degX) {
			return $m.skew(degX);
		},

		/**
		 * Skews on the Y-axis
		 * @param Number degY
		 * @return Matrix
		 * @link http://www.w3.org/TR/SVG/coords.html#SkewYDefined
		 */
		skewY: function (degY) {
			return $m.skew(0, degY);
		},

		/**
		 * Translate
		 * @param Number tx
		 * @param Number ty
		 * @return Matrix
		 * @link http://www.w3.org/TR/SVG/coords.html#TranslationDefined
		 */
		translate: function (tx, ty) {
			tx = tx || 0;
			ty = ty || 0;

			return new $m3x3(
				1, 0, tx,
				0, 1, ty,
				0, 0, 1
			);
		},

		/**
		 * Translate on the X-axis
		 * @param Number tx
		 * @return Matrix
		 * @link http://www.w3.org/TR/SVG/coords.html#TranslationDefined
		 */
		translateX: function (tx) {
			return $m.translate(tx);
		},

		/**
		 * Translate on the Y-axis
		 * @param Number ty
		 * @return Matrix
		 * @link http://www.w3.org/TR/SVG/coords.html#TranslationDefined
		 */
		translateY: function (ty) {
			return $m.translate(0, ty);
		}
	});
})(jQuery, this, this.document);;
/** --------------------------------------------------------------------------
 *	jQuery URL Decoder
 *	Version 1.0
 *	Parses URL and return its components. Can also build URL from components
 *	
 * ---------------------------------------------------------------------------
 *	HOW TO USE:
 *
 *	$.url.decode('http://username:password@hostname/path?arg1=value%40+1&arg2=touch%C3%A9#anchor')
 *	// returns
 *	// http://username:password@hostname/path?arg1=value@ 1&arg2=touché#anchor
 *	// Note: "%40" is replaced with "@", "+" is replaced with " " and "%C3%A9" is replaced with "é"
 *	
 *	$.url.encode('file.htm?arg1=value1 @#456&amp;arg2=value2 touché')
 *	// returns
 *	// file.htm%3Farg1%3Dvalue1%20%40%23456%26arg2%3Dvalue2%20touch%C3%A9
 *	// Note: "@" is replaced with "%40" and "é" is replaced with "%C3%A9"
 *	
 *	$.url.parse('http://username:password@hostname/path?arg1=value%40+1&arg2=touch%C3%A9#anchor')
 *	// returns
 *	{
 *		source: 'http://username:password@hostname/path?arg1=value%40+1&arg2=touch%C3%A9#anchor',
 *		protocol: 'http',
 *		authority: 'username:password@hostname',
 *		userInfo: 'username:password',
 *		user: 'username',
 *		password: 'password',
 *		host: 'hostname',
 *		port: '',
 *		path: '/path',
 *		directory: '/path',
 *		file: '',
 *		relative: '/path?arg1=value%40+1&arg2=touch%C3%A9#anchor',
 *		query: 'arg1=value%40+1&arg2=touch%C3%A9',
 *		anchor: 'anchor',
 *		params: {
 *			'arg1': 'value@ 1',
 *			'arg2': 'touché'
 *		}
 *	}
 *	
 *	$.url.build({
 *		protocol: 'http',
 *		username: 'username',
 *		password: 'password',
 *		host: 'hostname',
 *		path: '/path',
 *		query: 'arg1=value%40+1&arg2=touch%C3%A9',
 *		// or 
 *		//params: {
 *		//	'arg1': 'value@ 1',
 *		//	'arg2': 'touché'
 *		//}
 *		anchor: 'anchor',
 *	})
 *	// returns
 *	// http://username:password@hostname/path?arg1=value%40+1&arg2=touch%C3%A9#anchor	
 *	
 * ---------------------------------------------------------------------------
 * OTHER PARTIES' CODE:
 *
 * Parser based on the Regex-based URI parser by Steven Levithan.
 * For more information visit http://blog.stevenlevithan.com/archives/parseuri
 *
 * Deparam taken from jQuery BBQ by Ben Alman. Dual licensed under the MIT and GPL licenses (http://benalman.com/about/license/)
 * http://benalman.com/projects/jquery-bbq-plugin/
 *  
 * ---------------------------------------------------------------------------
	
*/
jQuery.url = function() { function l(a) { for(var b = "", c = 0, f = 0, d = 0;c < a.length;) { f = a.charCodeAt(c); if(f < 128) { b += String.fromCharCode(f); c++ }else if(f > 191 && f < 224) { d = a.charCodeAt(c + 1); b += String.fromCharCode((f & 31) << 6 | d & 63); c += 2 }else { d = a.charCodeAt(c + 1); c3 = a.charCodeAt(c + 2); b += String.fromCharCode((f & 15) << 12 | (d & 63) << 6 | c3 & 63); c += 3 } }return b } function m(a, b) { var c = {}, f = {"true":true, "false":false, "null":null}; $.each(a.replace(/\+/g, " ").split("&"), function(d, j) { var e = j.split("="); d = k(e[0]); j = c; var i = 0, g = d.split("]["), h = g.length - 1; if(/\[/.test(g[0]) && /\]$/.test(g[h])) { g[h] = g[h].replace(/\]$/, ""); g = g.shift().split("[").concat(g); h = g.length - 1 }else h = 0; if(e.length === 2) { e = k(e[1]); if(b)e = e && !isNaN(e) ? +e : e === "undefined" ? undefined : f[e] !== undefined ? f[e] : e; if(h)for(;i <= h;i++) { d = g[i] === "" ? j.length : g[i]; j = j[d] = i < h ? j[d] || (g[i + 1] && isNaN(g[i + 1]) ? {} : []) : e }else if($.isArray(c[d]))c[d].push(e); else c[d] = c[d] !== undefined ? [c[d], e] : e }else if(d)c[d] = b ? undefined : "" }); return c } function n(a) { a = a || window.location; var b = ["source", "protocol", "authority", "userInfo", "user", "password", "host", "port", "relative", "path", "directory", "file", "query", "anchor"]; a = /^(?:(?![^:@]+:[^:@\/]*@)([^:\/?#.]+):)?(?:\/\/)?((?:(([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)(((\/(?:[^?#](?![^?#\/]*\.[^?#\/.]+(?:[?#]|$)))*\/?)?([^?#\/]*))(?:\?([^#]*))?(?:#(.*))?)/.exec(a); for(var c = {}, f = b.length;f--;)c[b[f]] = a[f] || ""; if(c.query)c.params = m(c.query, true); return c } function o(a) { if(a.source)return encodeURI(a.source); var b = []; if(a.protocol)if(a.protocol == "file")b.push("file:///"); else a.protocol == "mailto" ? b.push("mailto:") : b.push(a.protocol + "://"); if(a.authority)b.push(a.authority); else { if(a.userInfo)b.push(a.userInfo + "@"); else if(a.user) { b.push(a.user); a.password && b.push(":" + a.password); b.push("@") }if(a.host) { b.push(a.host); a.port && b.push(":" + a.port) } }if(a.path)b.push(a.path); else { a.directory && b.push(a.directory); a.file && b.push(a.file) }if(a.query)b.push("?" + a.query); else a.params && b.push("?" + $.param(a.params)); a.anchor && b.push("#" + a.anchor); return b.join("") } function p(a) { return encodeURIComponent(a) } function k(a) { a = a || window.location.toString(); return l(unescape(a.replace(/\+/g, " "))) } return{encode:p, decode:k, parse:n, build:o} }();;
/*
 * jQuery.validity v1.1.1
 * http://validity.thatscaptaintoyou.com/
 * http://code.google.com/p/validity/
 * 
 * Copyright (c) 2010 Wyatt Allen
 * Dual licensed under the MIT and GPL licenses.
 *
 * Date: 2010-08-16 (Tuesday, 16 August 2010)
 * Revision: 134
 */
(function($) {
    
    // Default settings:
    ////////////////////////////////////////////////////////////////
    
    var 
        defaults = {
            // The default output mode is label because it requires no dependencies:
            outputMode:"label",
            
            // The css class on the output
            cssClass:"error",

            // The this property is set to true, validity will scroll the browser viewport
            // so that the first error is visible when validation fails:
            scrollTo:false,

            // If this setting is true, modal errors will disappear when they are clicked on:
            modalErrorsClickable:true,

            // If a field name cannot be otherwise inferred, this will be used:
            defaultFieldName:"This field",
            
            // jQuery selector to filter down to validation-supported elements:
            elementSupport:":text, :password, textarea, select, :radio, :checkbox",
            
            // Function to stringify argments for use when generating error messages.
            // Primarily, it just generates pretty date strings:
            argToString:function(val) {
                return val.getDate ?
                    (val.getMonth() + 1) + "/" + val.getDate() + "/" + val.getFullYear() :
                    val;
            }
        };
    
    // Static functions and properties:
    ////////////////////////////////////////////////////////////////
    
    $.validity = {

        // Clone the defaults. They can be overridden with the setup function:
        settings:$.extend(defaults, {}),

        // Built-in library of format-checking tools for use with the 
        // match validator as well as the nonHtml validator:
        patterns:{
            integer:/^\d+$/,
            
            // Used to use Date.parse(), which was the cause of Issue 9, 
            // where the function would accept 09/80/2009 as parseable.
            // The fix is to use a RegExp that will only accept American Middle-Endian form.
            // See the Internationalization section in the documentation for how to
            // cause it to support other date formats:
            date:/^((0?\d)|(1[012]))\/([012]?\d|30|31)\/\d{1,4}$/, 
            
            email:/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i,
            usd:/^\$?(\d{1,3},?(\d{3},?)*\d{3}(\.\d{0,2})?|\d{1,3}(\.\d{0,2})?|\.\d{1,2}?)$/,
            url:/^(https?|ftp):\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?(((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)(:\d*)?)(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)?(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i,
            
            // Number should accept floats or integers, be they positive or negative.
            // It should also support scientific-notation, written as a lower or capital 'E' followed by the radix.
            // Number assumes base 10. 
            // Unlike the native parseFloat or parseInt functions, this should not accept trailing Latin characters.
            number:/^[+-]?(\d+(\.\d*)?|\.\d+)([Ee]\d+)?$/,
            
            zip:/^\d{5}(-\d{4})?$/,
            phone:/^[2-9]\d{2}-\d{3}-\d{4}$/,
            guid:/^(\{?([0-9a-fA-F]){8}-(([0-9a-fA-F]){4}-){3}([0-9a-fA-F]){12}\}?)$/,
            time12:/^[01]?\d:[0-5]\d?\s?[aApP]\.?[mM]\.?$/,
            time24:/^(20|21|22|23|[01]\d|\d)(([:][0-5]\d){1,2})$/,

            nonHtml:/^[^<>]*$/
        },

        // Built-in set of default error messages (for use when a message isn't specified):
        messages:{

            require:"#{field} is required.",
            // Format validators:
            match:"#{field} is in an invalid format.",
            integer:"#{field} must be a positive, whole number.",
            date:"#{field} must be formatted as a date.",
            email:"#{field} must be formatted as an email.",
            usd:"#{field} must be formatted as a US Dollar amount.",
            url:"#{field} must be formatted as a URL.",
            number:"#{field} must be formatted as a number.",
            zip:"#{field} must be formatted as a zipcode ##### or #####-####.",
            phone:"#{field} must be formatted as a phone number ###-###-####.",
            guid:"#{field} must be formatted as a guid like {3F2504E0-4F89-11D3-9A0C-0305E82C3301}.",
            time24:"#{field} must be formatted as a 24 hour time: 23:00.",
            time12:"#{field} must be formatted as a 12 hour time: 12:00 AM/PM",

            // Value range messages:
            lessThan:"#{field} must be less than #{max}.",
            lessThanOrEqualTo:"#{field} must be less than or equal to #{max}.",
            greaterThan:"#{field} must be greater than #{min}.",
            greaterThanOrEqualTo:"#{field} must be greater than or equal to #{min}.",
            range:"#{field} must be between #{min} and #{max}.",

            // Value length messages:
            tooLong:"#{field} cannot be longer than #{max} characters.",
            tooShort:"#{field} cannot be shorter than #{min} characters.",

            // Composition validators:
            nonHtml:"#{field} cannot contain HTML characters.",
            alphabet:"#{field} contains disallowed characters.",

            minCharClass:"#{field} cannot have more than #{min} #{charClass} characters.",
            maxCharClass:"#{field} cannot have less than #{min} #{charClass} characters.",
            
            // Aggregate validator messages:
            equal:"Values don't match.",
            distinct:"A value was repeated.",
            sum:"Values don't add to #{sum}.",
            sumMax:"The sum of the values must be less than #{max}.",
            sumMin:"The sum of the values must be greater than #{min}.",

            // Radio validator messages:
            radioChecked:"The selected value is not valid.",
            
            generic:"Invalid."
        },
        
        // Character classes can be used to determine the quantity
        // of a given type of character in a string:
        charClasses:{
            alphabetical:/\w/g,
            numeric:/\d/g,
            alphanumeric:/[A-Za-z0-9]/g,
            symbol:/[^A-Za-z0-9]/g
        },

        // Object to contain the output modes. The three built-in output modes are installed
        // later on in this script.
        outputs:{},

        // Override the default settings with user-specified ones.
        setup:function(options) {
            this.settings = $.extend(this.settings, options);
        },

        // Object to store information about ongoing validation.
        // When validation starts, this will be set to a report object.
        // When validators fail, they will inform this object.
        // When validation is completed, this object will contain the 
        // information of whether it succeeded:
        report:null,

        // Determine whether validity is in the middle of validation:
        isValidating:function() {
            return !!this.report;
        },

        // Function to prepare validity to start validating:
        start:function() {
            // The output mode should be notified that validation is starting.
            // This usually means that the output mode will erase errors from the 
            // document in whatever way the mode needs to:
            if (this.outputs[this.settings.outputMode] &&
                this.outputs[this.settings.outputMode].start) {
                this.outputs[this.settings.outputMode].start();
            }

            // Initialize the report object:
            this.report = { errors:0, valid:true };
        },

        // Function called when validation is over to examine the results and clean-up:
        end:function() {
            // Null coalescence: fix for Issue 5:
            var results = this.report || { errors: 0, valid: true };

            this.report = null;
            
            // Notify the current output mode that validation is over:
            if (this.outputs[this.settings.outputMode] &&
                this.outputs[this.settings.outputMode].end) {
                this.outputs[this.settings.outputMode].end(results);
            }
            
            return results;
        },

        // Remove validiation errors:
        clear:function() {
            this.start();
            this.end();
        }
    };
    
    // jQuery instance methods:
    ////////////////////////////////////////////////////////////////

    $.fn.extend({

        // The validity function is how validation can be bound to forms.
        // The user may pass in a validation function or, as a shortcut, 
        // pass in a string of a CSS selector that grabs all the inputs to 
        // require:
        validity:function(arg) {
        
            return this.each(
            
                function() {
                
                    // Only operate on forms:
                    if (this.tagName.toLowerCase() == "form") {
                        var f = null;

                        // If the user entered a string to select the inputs to require,
                        // then make the validation logic ad hoc:
                        if (typeof (arg) == "string") {
                            f = function() {
                                $(arg).require();
                            };
                        }

                        // If the user entered a validation function then just call
                        // that at the appropriate time:
                        else if ($.isFunction(arg)) {
                            f = arg;
                        }

                        if (arg) {
                            $(this).bind(
                                "submit",
                                function() {
                                    $.validity.start();
                                    f();
                                    return $.validity.end().valid;
                                }
                            );
                        }
                    }
                }
            );
        },

        // Validators:
        ////////////////////////////////////////////////

        // Common validators:
        ////////////////////////////////
        
        // Validate whether the field has a value.
        // http://validity.thatscaptaintoyou.com/Demos/index.htm#Require
        require:function(msg) {
            return validate(
                this,
                function(obj) {
                    var val = $(obj).val();
                    
                    var res = val.length;
                    
                    return res;
                },
                msg || $.validity.messages.require
            );
        },

        // Validate whether the field matches a regex.
        // http://validity.thatscaptaintoyou.com/Demos/index.htm#Match
        match:function(rule, msg) {

            // If a default message is to be used:
            if (!msg) {
                // First grab the generic one:
                msg = $.validity.messages.match;

                // If there's a more specific one, use that.
                if (typeof (rule) === "string" && $.validity.messages[rule]) {
                    msg = $.validity.messages[rule];
                }
            }

            // If the rule is named, rather than specified:
            if (typeof (rule) == "string") {
                rule = $.validity.patterns[rule];
            }

            return validate(
                this,

                // Some of the named rules can be functions, such as 'date'.
                // If the discovered rule is a function use it as such.
                // Otherwise, assume it's a RegExp.
                $.isFunction(rule) ?

                    function(obj) {
                        return !obj.value.length || rule(obj.value);
                    } :

                    function(obj) {
                        // Fix for regexes where the global flag is set.
                        // Make sure to test from the start of the string.
                        if (rule.global) {
                            rule.lastIndex = 0;
                        }
                    
                        return !obj.value.length || rule.test(obj.value);
                    },

                msg
            );
        },

        // http://validity.thatscaptaintoyou.com/Demos/index.htm#Range
        range:function(min, max, msg) {
            return validate(
                this,

                min.getTime && max.getTime ?

                    // If both arguments are dates then use them that way.
                    function(obj) {
                        var d = new Date(obj.value);
                        return d >= new Date(min) && d <= new Date(max);
                    } :

                    min.substring && max.substring && Big ?

                        // If both arguments are strings then parse them 
                        // using the Arbitrary-Precision library.
                        function(obj) {
                            var n = new Big(obj.value);
                            return (
                                n.greaterThanOrEqualTo(new Big(min)) && 
                                n.lessThanOrEqualTo(new Big(max))
                            );
                        } :

                        // Otherwise treat them like floats.
                        function(obj) {
                            var f = parseFloat(obj.value);
                            return f >= min && f <= max;
                        },

                msg || format(
                    $.validity.messages.range, {
                        min:$.validity.settings.argToString(min),
                        max:$.validity.settings.argToString(max)
                    }
                )
            );
        },

        // http://validity.thatscaptaintoyou.com/Demos/index.htm#GreaterThan
        greaterThan:function(min, msg) {
            return validate(
                this,

                min.getTime ?
                    function(obj) {
                        return new Date(obj.value) > min;
                    } :

                    min.substring && Big ?

                        function(obj) {
                           return new Big(obj.value).greaterThan(new Big(min)); 
                        } :

                        function(obj) {
                            return parseFloat(obj.value) > min;
                        },

                msg || format(
                    $.validity.messages.greaterThan, {
                        min:$.validity.settings.argToString(min)
                    }
                )
            );
        },

        // http://validity.thatscaptaintoyou.com/Demos/index.htm#GreaterThan
        greaterThanOrEqualTo:function(min, msg) {
            return validate(
                this,

                min.getTime ?
                    function(obj) {
                        return new Date(obj.value) >= min;
                    } :

                    min.substring && Big ?

                        function(obj) {
                            return new Big(obj.value).greaterThanOrEqualTo(new Big(min));
                        } :

                        function(obj) {
                            return parseFloat(obj.value) >= min;
                        },

                msg || format(
                    $.validity.messages.greaterThanOrEqualTo, {
                        min:$.validity.settings.argToString(min)
                    }
                )
            );
        },

        // http://code.google.com/p/validity/wiki/Validators#LessThan
        lessThan:function(max, msg) {
            return validate(
                this,

                max.getTime ?
                    function(obj) {
                        return new Date(obj.value) < max;
                    } :

                    max.substring && Big ?

                        function(obj) {
                            return new Big(obj.value).lessThan(new Big(max));
                        } :

                        function(obj) {
                            return parseFloat(obj.value) < max;
                        },

                msg || format(
                    $.validity.messages.lessThan, {
                        max:$.validity.settings.argToString(max)
                    }
                )
            );
        },

        // http://validity.thatscaptaintoyou.com/Demos/index.htm#LessThan
        lessThanOrEqualTo:function(max, msg) {
            return validate(
                this,

                max.getTime ?
                    function(obj) {
                        return new Date(obj.value) <= max;
                    } :

                    max.substring && Big ?

                        function(obj) {
                            return new Big(obj.value).lessThanOrEqualTo(new Big(max));
                        } :

                        function(obj) {
                            return parseFloat(obj.value) <= max;
                        },

                msg || format(
                    $.validity.messages.lessThanOrEqualTo, {
                        max:$.validity.settings.argToString(max)
                    }
                )
            );
        },

        // http://validity.thatscaptaintoyou.com/Demos/index.htm#LessThan
        maxLength:function(max, msg) {
            return validate(
                this,
                function(obj) {
                    return obj.value.length <= max;
                },
                msg || format(
                    $.validity.messages.tooLong, {
                        max:max
                    }
                )
            );
        },

        // http://validity.thatscaptaintoyou.com/Demos/index.htm#Length
        minLength:function(min, msg) {
            return validate(
                this,
                function(obj) {
                    return obj.value.length >= min;
                },
                msg || format(
                    $.validity.messages.tooShort, {
                        min:min
                    }
                )
            );
        },
        
        // TODO: Document
        alphabet:function(alpha, msg) {
            var chars = [];
            
            return validate(
                this,
                function(obj) {
                
                    // For each character in the string, ensure that 
                    // it's in the alphabet definition:
                    for (var idx = 0; idx < obj.value.length; ++idx) {
                        if (alpha.indexOf(obj.value.charAt(idx)) == -1) {
                            chars.push(obj.value.charAt(idx));
                            return false;
                        }
                    }
                    
                    return true;
                },
                msg || format(
                    $.validity.messages.alphabet, {
                        chars:chars.join(", ")
                    }
                )
            );
        },
        
        // TODO: Document
        minCharClass:function(charClass, min, msg) {
            if (typeof(charClass) == "string") {
                charClass = charClass.toLowerCase();
            
                if ($.validity.charClasses[charClass]) {
                    charClass = $.validity.charClasses[charClass];
                }
            }
            
            return validate(
                this,
                function(obj) {
                    return (obj.value.match(charClass) || []).length >= min;
                },
                msg || format(
                    $.validity.messages.minCharClass, {
                        min:min,
                        charClass:charClass
                    }
                )
            );
        },
        
        // TODO: Document
        maxCharClass:function(charClass, max, msg) {
            if (typeof(charClass) == "string") {
                charClass = charClass.toLowerCase();
            
                if ($.validity.charClasses[charClass]) {
                    charClass = $.validity.charClasses[charClass];
                }
            }
            
            return validate(
                this,
                function(obj) {
                    return (obj.value.match(charClass) || []).length <= max;
                },
                msg || format(
                    $.validity.messages.maxCharClass, {
                        max:max,
                        charClass:charClass
                    }
                )
            );
        },
        
        // TODO: Document
        password:function(opts, msg) {
            opts = $.extend({
                    alphabet:null,
            
                    minLength:0,
                    maxLength:0,
                    
                    minSymbol:0,
                    minAlphabetical:0,
                    minNumeric:0,
                    minAlphaNumeric:0
                }, 
                opts
            );
            
            if (opts.alphabet) {
                this.alphabet(opts.alphabet);
            }
            
            if (opts.minLength) {
                this.minLength(opts.minLength);
            }
            
            if (opts.maxLength) {
                this.maxLength(opts.maxLength);
            }
            
            if (opts.minSymbol) {
                this.minCharClass("symbol", opts.minSymbol);
            }
            
            if (opts.minAlphabetical) {
                this.minCharClass("alphabetical", opts.minAlphabetical);
            }
            
            if (opts.minNumeric) {
                this.minCharClass("numeric", opts.minNumeric);
            }
            
            if (opts.minAlphanumeric) {
                this.minCharClass("alphanumeric", opts.minAlphanumeric);
            }
            
            return this;
        },
        
        // Validate that the input does not contain potentially dangerous strings.
        // http://validity.thatscaptaintoyou.com/Demos/index.htm#NonHtml
        nonHtml:function(msg) {
            return validate(
                this,

                function(obj) {
                    return $.validity.patterns.nonHtml.test(obj.value);
                },

                msg || $.validity.messages.nonHtml
            );
        },
        
        // Aggregate validators:
        ////////////////////////////////
        
        // Validate that all matched elements bear the same values.
        // Accepts a function to transform the values for testing.
        // http://validity.thatscaptaintoyou.com/Demos/index.htm#Equal
        equal:function(arg0, arg1) {
            var 
                // If a reduced set is attached, use it.
                // Also, remove unsupported elements.
                $reduction =  (this.reduction || this).filter($.validity.settings.elementSupport),

                transform = function(val) {
                    return val;
                },

                msg = $.validity.messages.equal;

            if ($reduction.length) {

                // Figure out what arguments were specified.
                if ($.isFunction(arg0)) {
                    transform = arg0;

                    if (typeof (arg1) == "string") {
                        msg = arg1;
                    }
                }

                else if (typeof (arg0) == "string") {
                    msg = arg0;
                }

                var 
                    map = $.map(
                        $reduction,
                        function(obj) {
                            return transform(obj.value);
                        }
                    ),

                    // Get the first value.
                    first = map[0],
                    valid = true;

                // If any value is not equal to the first value,
                // then they aren't all equal, and it's not valid.
                for (var i in map) {
                    if (map[i] != first) {
                        valid = false;
                    }
                }

                if (!valid) {
                    raiseAggregateError($reduction, msg);

                    // The set reduces to zero valid elements.
                    this.reduction = $([]);
                }
            }

            return this;
        },

        // Validate that all matched elements bear distinct values.
        // Accepts an optional function to transform the values for testing.
        // http://validity.thatscaptaintoyou.com/Demos/index.htm#Distinct
        distinct:function(arg0, arg1) {
            var 
                // If a reduced set is attached, use it.
                // Also, remove unsupported elements.
                $reduction =  (this.reduction || this).filter($.validity.settings.elementSupport),

                transform = function(val) {
                    return val;
                },

                msg = $.validity.messages.distinct,

                // An empty array to store already-examined values
                subMap = [],

                valid = true;

            if ($reduction.length) {

                // Figure out what arguments were specified.
                if ($.isFunction(arg0)) {
                    transform = arg0;

                    if (typeof (arg1) == "string") {
                        msg = arg1;
                    }
                }

                else if (typeof (arg0) == "string") {
                    msg = arg0;
                }

                // Map all the matched values into an array.    
                var map = $.map(
                    $reduction,
                    function(obj) {
                        return transform(obj.value);
                    }
                );

                // For each transformed value:
                for (var i1 = 0; i1 < map.length; ++i1) {
                    // Unless it's an empty string:
                    if (map[i1].length) {
                        // For each value we've already looked at:
                        for (var i2 = 0; i2 < subMap.length; ++i2) {
                            // If we've already seen the transformed value:
                            if (subMap[i2] == map[i1]) {
                                valid = false;
                            }
                        }

                        // We looked at the value.
                        subMap.push(map[i1]);
                    }
                }

                if (!valid) {
                    raiseAggregateError($reduction, msg);

                    // The set reduces to zero valid elements.
                    this.reduction = $([]);
                }
            }

            return this;
        },

        // Validate that the numeric sum of all values is equal to a given value.
        // http://validity.thatscaptaintoyou.com/Demos/index.htm#Sum
        sum:function(sum, msg) {
            // If a reduced set is attached, use it.
            // Also, remove unsupported elements.
            var $reduction =  (this.reduction || this).filter($.validity.settings.elementSupport);

            if ($reduction.length && sum != numericSum($reduction)) {
                raiseAggregateError(
                    $reduction,
                    msg || format(
                        $.validity.messages.sum,
                        { sum:sum }
                    )
                );

                // The set reduces to zero valid elements.
                this.reduction = $([]);
            }

            return this;
        },

        // Validates an inclusive upper-bound on the numeric sum of the values of all matched elements.
        // http://validity.thatscaptaintoyou.com/Demos/index.htm#Sum
        sumMax:function(max, msg) {
            // If a reduced set is attached, use it.
            // Also, remove unsupported elements.
            var $reduction =  (this.reduction || this).filter($.validity.settings.elementSupport);

            if ($reduction.length && max < numericSum($reduction)) {
                raiseAggregateError(
                    $reduction,
                    msg || format(
                        $.validity.messages.sumMax,
                        { max:max }
                    )
                );

                // The set reduces to zero valid elements.
                this.reduction = $([]);
            }

            return this;
        },

        // Validates an inclusive lower-bound on the numeric sum of the values of all matched elements.
        // http://validity.thatscaptaintoyou.com/Demos/index.htm#Sum
        sumMin:function(min, msg) {
            // If a reduced set is attached, use it.
            // Also, remove unsupported elements.
            var $reduction =  (this.reduction || this).filter($.validity.settings.elementSupport);

            if ($reduction.length && min < numericSum($reduction)) {
                raiseAggregateError(
                    $reduction,
                    msg || format(
                        $.validity.messages.sumMin,
                        { min:min }
                    )
                );

                // The set reduces to zero valid elements.
                this.reduction = $([]);
            }

            return this;
        },
        
        // Radio group validators:
        ////////////////////////////////
        
        // TODO: Document
        radioChecked:function(val, msg) {
            // If a reduced set is attached, use it.
            // Also, remove unsupported elements.
            var $reduction =  (this.reduction || this).filter($.validity.settings.elementSupport);
            
            if ($reduction.is(":radio") && $reduction.find(":checked").val() != val) {
                raiseAggregateError(
                    $reduction,
                    msg || $.validity.messages.radioChecked
                );
            }
        },
        
        // TODO: Document
        radioNotChecked:function(val, msg) {
            // If a reduced set is attached, use it.
            // Also, remove unsupported elements.
            var $reduction =  (this.reduction || this).filter($.validity.settings.elementSupport);
            
            if ($reduction.is(":radio") && $reduction.filter(":checked").val() == val) {
                raiseAggregateError(
                    $reduction,
                    msg || $.validity.messages.radioChecked
                );
            }
        },
        
        // Checkbox validators:
        ////////////////////////////////
        
        // TODO: Document
        checkboxChecked:function(msg) {
            // If a reduced set is attached, use it.
            // Also, remove unsupported elements.
            var $reduction =  (this.reduction || this).filter($.validity.settings.elementSupport);
            
            if ($reduction.is(":checkbox") && !$reduction.is(":checked")) {
                raiseAggregateError(
                    $reduction,
                    msg || $.validity.messages.radioChecked
                );
            }
        },
        
        // Specialized validators:
        ////////////////////////////////

        // If expression is a function, it will be called on each matched element.
        // Otherwise, it is treated as a boolean, and the determines the validity 
        // of elements in an aggregate fashion.
        // http://validity.thatscaptaintoyou.com/Demos/index.htm#Assert
        assert:function(expression, msg) {
            // If a reduced set is attached, use it.
            // Do not reduce to supported elements.
            var $reduction = this.reduction || this;

            if ($reduction.length) {

                // In the case that 'expression' is a function, 
                // use it as a regimen on each matched element individually:
                if ($.isFunction(expression)) {
                    return validate(
                        this,
                        expression,
                        msg || $.validity.messages.generic
                    );
                }

                // Otherwise map it to a boolean and consider this as an aggregate validation:
                else if (!expression) {

                    raiseAggregateError(
                        $reduction,
                        msg || $.validity.messages.generic
                    );

                    // The set reduces to zero valid elements.
                    this.reduction = $([]);
                }
            }

            return this;
        }
    });

    // Private utilities:
    ////////////////////////////////////////////////////////////////

    // Do non-aggregate validation.
    // Subject each element in $obj to the regimen.
    // Raise the specified error on failures.
    // This function is the heart of validity:
    function validate($obj, regimen, message) {
        var 
            // If a reduced set is attached, use it
            // Also, remove any unsupported elements.
            $reduction = ($obj.reduction || $obj).filter($.validity.settings.elementSupport),

            // Array to store only elements that pass the regimen.
            elements = [];

        // For each in the reduction.
        $reduction.each(
            function() {
                // If the element passes the regimen, include it in the reduction.
                if (regimen(this)) {
                    elements.push(this);
                }

                // Else give the element an error message.
                else {
                    raiseError(
                        this,
                        format(message, {
                            field:infer(this)
                        })
                    );
                }
            }
        );

        // Attach a (potentially) reduced set of only elements that passed.
        $obj.reduction = $(elements);

        // Return the full set with attached reduction.
        return $obj;
    }

    // Inform the report object that there was a failure.
    function addToReport() {
        if ($.validity.isValidating()) {
            $.validity.report.errors++;
            $.validity.report.valid = false;
        }
    }

    // Inform the report of a failure and display an error according to the 
    // idiom of the current ouutput mode.
    function raiseError(obj, msg) {
        addToReport();

        if ($.validity.outputs[$.validity.settings.outputMode] &&
            $.validity.outputs[$.validity.settings.outputMode].raise) {
            $.validity.outputs[$.validity.settings.outputMode].raise($(obj), msg);
        }
    }

    // Inform the report of a failure and display an aggregate error according to the 
    // idiom of the current output mode.
    function raiseAggregateError($obj, msg) {
        addToReport();

        if ($.validity.outputs[$.validity.settings.outputMode] &&
            $.validity.outputs[$.validity.settings.outputMode].raiseAggregate) {
            $.validity.outputs[$.validity.settings.outputMode].raiseAggregate($obj, msg);
        }
    }

    // Yield the sum of the values of all fields matched in obj that can be parsed.
    function numericSum(obj) {
        var accumulator = 0;
        obj.each(
            function() {
                var n = parseFloat(this.value);

                accumulator += isNaN(n) ? 0 : n;
            }
        );
        return accumulator;
    }

    // Using the associative array supplied as the 'obj' argument,
    // replace tokens of the format #{<key>} in the 'str' argument with
    // that key's value.
    function format(str, obj) {
        for (var p in obj) {
            str = str.replace("#{" + p + "}", obj[p]);
        }
        return capitalize(str);
    }

    // Infer the field name of the passed DOM element.
    // If a title is specified, its value is returned.
    // Otherwise, attempt to parse a field name out of the id attribute.
    // If that doesn't work, return the default field name in the configuration.
    function infer(field) {
        var 
            $f = $(field),
            ret = $.validity.settings.defaultFieldName;

        // Check for title.
        if ($f.attr("title").length) {
            ret = $f.attr("title");
        }

        // Check for UpperCamelCase.
        else if (/^([A-Z0-9][a-z]*)+$/.test(field.id)) {
            ret = field.id.replace(/([A-Z0-9])[a-z]*/g, " $&");
        }

        // Check for lowercase_separated_by_underscores
        else if (/^[a-z0-9_]*$/.test(field.id)) {
            var arr = field.id.split("_");

            for (var i = 0; i < arr.length; ++i) {
                arr[i] = capitalize(arr[i]);
            }

            ret = arr.join(" ");
        }

        return ret;
    }

    // Capitolize the first character of the string argument.
    function capitalize(sz) {
        return sz.substring ?
            sz.substring(0, 1).toUpperCase() + sz.substring(1, sz.length) :
            sz;
    }

})(jQuery);

// Output modes:
////////////////////////////////////////////////////////////////

// Each output mode gets its own closure, 
// distinct from the validity closure.

// Install the label output.
(function($) {
    function getIdentifier($obj) {
        return $obj.attr('id').length ?
            $obj.attr('id') :
            $obj.attr('name');
    }

    $.validity.outputs.label = {
        start:function() {
            // Remove all the existing error labels.
            $("label." + $.validity.settings.cssClass).remove();
        },
        
        end:function(results) {
            // If not valid and scrollTo is enabled, scroll the page to the first error.
            if (!results.valid && $.validity.settings.scrollTo) {
                location.hash = $("label." + $.validity.settings.cssClass + ":eq(0)").attr('for');
            }
        },

        raise:function($obj, msg) {
            var 
                labelSelector = "label." + $.validity.settings.cssClass + "[for='" + getIdentifier($obj) + "']";

            // If an error label already exists for the bad input just update its text:
            if ($(labelSelector).length) {
                $(labelSelector).text(msg);
            }

            // Otherwize create a new one and stick it after the input:
            else {
                $("<label/>")
                    .attr("for", getIdentifier($obj))
                    .addClass($.validity.settings.cssClass)
                    .text(msg)

                    // In the case that the element does not have an id
                    // then the for attribute in the label will not cause
                    // clicking the label to focus the element. This line 
                    // will make that happen.
                    .click(function() {
                        if ($obj.length) {
                            $obj[0].select();
                        }
                    })

                    .insertAfter($obj);
            }
        },

        raiseAggregate:function($obj, msg) {
            // Just raise the error on the last input.
            if ($obj.length) {
                this.raise($($obj.get($obj.length - 1)), msg);
            }
        }
    };
})(jQuery);

// Install the modal output.
(function($) {
    var 
        // Class to apply to modal errors.
        errorClass = "validity-modal-msg",
        
        // The selector for the element where modal errors will me injected semantically.
        container = "body";
        
    $.validity.outputs.modal = {
        start:function() {
            // Remove all the existing errors.
            $("." + errorClass).remove();
        },
        
        end:function(results) {
            // If not valid and scrollTo is enabled, scroll the page to the first error.
            if (!results.valid && $.validity.settings.scrollTo) {
                location.hash = $("." + errorClass + ":eq(0)").attr('id');
            }
        },

        raise:function($obj, msg) {
            if ($obj.length) {
                var 
                    off = $obj.offset(),
                    obj = $obj.get(0),

                    // Design a style object based off of the input's location.
                    errorStyle = {
                        left:parseInt(off.left + $obj.width() + 4, 10) + "px",
                        top:parseInt(off.top - 10, 10) + "px"
                    };
                    
                // Create one and position it next to the input.
                $("<div/>")
                    .addClass(errorClass)
                    .css(errorStyle)
                    .text(msg)
                    .click($.validity.settings.modalErrorsClickable ?
                        function() { $(this).remove(); } : null
                    )
                    .appendTo(container);
            }
        },

        raiseAggregate:function($obj, msg) {
            // Just raise the error on the last input.
            if ($obj.length) {
                this.raise($($obj.get($obj.length - 1)), msg);
            }
        }
    };
})(jQuery);

// Install the summary output
(function($) {
    var 
        // Container contains the summary. This is the element that is shown or hidden.
        container = ".validity-summary-container",
        
        // Erroneous refers to an input with an invalid value,
        // not the error message itself.
        erroneous = "validity-erroneous",
        
        // Selector for erroneous inputs.
        errors = "." + erroneous,
        
        // The wrapper for entries in the summary.
        wrapper = "<li/>",

        // Buffer to contain all the error messages that build up during validation.
        // When validation ends, it'll be flushed into the summary.
        // This way, the summary doesn't flicker empty then fill up.
        buffer = [];

    $.validity.outputs.summary = {
        start:function() {
            $(errors).removeClass(erroneous);
            buffer = [];
        },

        end:function(results) {
            // Hide the container and empty its summary.
            $(container)
                .hide()
                .find("ul")
                    .html('');

            // If there are any errors at all:
            // (Otherwise the container shouldn't be shown):
            if (buffer.length) {
                // Use integer based iteration for solution to Issue 7.
                for (var i = 0; i < buffer.length; ++i) {
                    $(wrapper)
                        .text(buffer[i])
                        .appendTo(container + " ul");
                }

                $(container).show();
                
                // If scrollTo is enabled, scroll the page to the first error.
                if ($.validity.settings.scrollTo) {
                    location.hash = $(errors + ":eq(0)").attr("id");
                }
            }
        },

        raise:function($obj, msg) {
            buffer.push(msg);
            $obj.addClass(erroneous);
        },

        raiseAggregate:function($obj, msg) {
            this.raise($obj, msg);
        },
        
        container:function() {
            document.write(
                "<div class=\"validity-summary-container\">" + 
                    "The form didn't submit for the following reason(s):" +
                    "<ul></ul>" +
                "</div>"
            );
        }
    };
})(jQuery);
;

/*
############################################################
# Bits 'n Tuts Twitter Alert jQuery Plugin.					#
# Developed by Dave Earley.									#
# www.BitsnTuts.com											#
# October 2010												#
# Please Leave This Message Intact							#
############################################################
*/


$.fn.twitter_alert = function (options, callback) {
        var defaults = {
                bg_colour: '#FFFFFF',
                border_colour: '#6CF',
                text_colour: '#6CF',
                text_size: '24px',
                text_font: 'Arial, Helvetica, sans-serif',
                message: this.html(),
                fadeout_time: 2000,
                override_css: false,
				height: '50px'
        };
        var settings = $.extend({}, defaults, options);
        return this.each(function () {
                $(this).hide();
                var cssObj = {
                        'font-family': 'Arial, Helvetica, sans-serif',
                        'font-size': settings.text_size,
                        'color': settings.text_colour,
                        'background-color': settings.bg_colour,
                        'padding': '10px',
                        'height': '50px',
                        'border-bottom-width': 'thin',
                        'border-bottom-style': 'solid',
                        'border-bottom-color': settings.border_colour,
                        'position': 'fixed',
                        'z-index': '99999',
                        'left': '0px',
                        'top': '0px',
                        'right': '0px',
                        'filter': 'alpha(opacity=100)',
                        '-moz-opacity': '1',
                        'opacity': '1',
                        'line-height': settings.height,
                        'text-align': 'center'
                }
                if (settings.override_css == false) {
                        $(this).css(cssObj);
                }
                $(this).html(settings.message);
                $(this).fadeIn().delay(settings.fadeout_time);
                $(this).fadeOut('fast',function() {
                	$(this).remove();
                });
        });
};;
/*
 * Jeditable - jQuery in place edit plugin
 *
 * Copyright (c) 2006-2009 Mika Tuupola, Dylan Verheul
 *
 * Licensed under the MIT license:
 *   http://www.opensource.org/licenses/mit-license.php
 *
 * Project home:
 *   http://www.appelsiini.net/projects/jeditable
 *
 * Based on editable by Dylan Verheul <dylan_at_dyve.net>:
 *    http://www.dyve.net/jquery/?editable
 *
 */

/**
  * Version 1.7.1
  *
  * ** means there is basic unit tests for this parameter. 
  *
  * @name  Jeditable
  * @type  jQuery
  * @param String  target             (POST) URL or function to send edited content to **
  * @param Hash    options            additional options 
  * @param String  options[method]    method to use to send edited content (POST or PUT) **
  * @param Function options[callback] Function to run after submitting edited content **
  * @param String  options[name]      POST parameter name of edited content
  * @param String  options[id]        POST parameter name of edited div id
  * @param Hash    options[submitdata] Extra parameters to send when submitting edited content.
  * @param String  options[type]      text, textarea or select (or any 3rd party input type) **
  * @param Integer options[rows]      number of rows if using textarea ** 
  * @param Integer options[cols]      number of columns if using textarea **
  * @param Mixed   options[height]    'auto', 'none' or height in pixels **
  * @param Mixed   options[width]     'auto', 'none' or width in pixels **
  * @param String  options[loadurl]   URL to fetch input content before editing **
  * @param String  options[loadtype]  Request type for load url. Should be GET or POST.
  * @param String  options[loadtext]  Text to display while loading external content.
  * @param Mixed   options[loaddata]  Extra parameters to pass when fetching content before editing.
  * @param Mixed   options[data]      Or content given as paramameter. String or function.**
  * @param String  options[indicator] indicator html to show when saving
  * @param String  options[tooltip]   optional tooltip text via title attribute **
  * @param String  options[event]     jQuery event such as 'click' of 'dblclick' **
  * @param String  options[submit]    submit button value, empty means no button **
  * @param String  options[cancel]    cancel button value, empty means no button **
  * @param String  options[cssclass]  CSS class to apply to input form. 'inherit' to copy from parent. **
  * @param String  options[style]     Style to apply to input form 'inherit' to copy from parent. **
  * @param String  options[select]    true or false, when true text is highlighted ??
  * @param String  options[placeholder] Placeholder text or html to insert when element is empty. **
  * @param String  options[onblur]    'cancel', 'submit', 'ignore' or function ??
  *             
  * @param Function options[onsubmit] function(settings, original) { ... } called before submit
  * @param Function options[onreset]  function(settings, original) { ... } called before reset
  * @param Function options[onerror]  function(settings, original, xhr) { ... } called on error
  *             
  * @param Hash    options[ajaxoptions]  jQuery Ajax options. See docs.jquery.com.
  *             
  */

(function($) {

    $.fn.editable = function(target, options) {
            
        if ('disable' == target) {
            $(this).data('disabled.editable', true);
            return;
        }
        if ('enable' == target) {
            $(this).data('disabled.editable', false);
            return;
        }
        if ('destroy' == target) {
            $(this)
                .unbind($(this).data('event.editable'))
                .removeData('disabled.editable')
                .removeData('event.editable');
            return;
        }
        
        var settings = $.extend({}, $.fn.editable.defaults, {target:target}, options);
        
        /* setup some functions */
        var plugin   = $.editable.types[settings.type].plugin || function() { };
        var submit   = $.editable.types[settings.type].submit || function() { };
        var buttons  = $.editable.types[settings.type].buttons 
                    || $.editable.types['defaults'].buttons;
        var content  = $.editable.types[settings.type].content 
                    || $.editable.types['defaults'].content;
        var element  = $.editable.types[settings.type].element 
                    || $.editable.types['defaults'].element;
        var reset    = $.editable.types[settings.type].reset 
                    || $.editable.types['defaults'].reset;
        var callback = settings.callback || function() { };
        var onedit   = settings.onedit   || function() { }; 
        var onsubmit = settings.onsubmit || function() { };
        var onreset  = settings.onreset  || function() { };
        var onerror  = settings.onerror  || reset;
          
        /* show tooltip */
        if (settings.tooltip) {
            $(this).attr('title', settings.tooltip);
        }
        
        settings.autowidth  = 'auto' == settings.width;
        settings.autoheight = 'auto' == settings.height;
        
        return this.each(function() {
        	
            /* save this to self because this changes when scope changes */
            var self = this;  
                   
            /* inlined block elements lose their width and height after first edit */
            /* save them for later use as workaround */
            var savedwidth  = $(self).width();
            var savedheight = $(self).height();
            
            /* save so it can be later used by $.editable('destroy') */
            $(this).data('event.editable', settings.event);
            
            /* if element is empty add something clickable (if requested) */
            if (!$.trim($(this).html())) {
                $(this).html(settings.placeholder);
            }
            
            $(this).bind(settings.event, function(e) {
                
            	$(this).css('overflow','visible');
            	
                /* abort if disabled for this element */
                if (true === $(this).data('disabled.editable')) {
                    return;
                }
                
                /* prevent throwing an exeption if edit field is clicked again */
                if (self.editing) {
                    return;
                }
                
                /* abort if onedit hook returns false */
                if (false === onedit.apply(this, [settings, self])) {
                   return;
                }
                
                /* prevent default action and bubbling */
                e.preventDefault();
                e.stopPropagation();
                
                /* remove tooltip */
                if (settings.tooltip) {
                    $(self).removeAttr('title');
                }
                
                /* figure out how wide and tall we are, saved width and height */
                /* are workaround for http://dev.jquery.com/ticket/2190 */
                if (0 == $(self).width()) {
                    //$(self).css('visibility', 'hidden');
                    settings.width  = savedwidth;
                    settings.height = savedheight;
                } else {
                    if (settings.width != 'none') {
                        settings.width = 
                            settings.autowidth ? $(self).width()  : settings.width;
                    }
                    if (settings.height != 'none') {
                        settings.height = 
                            settings.autoheight ? $(self).height() : settings.height;
                    }
                }
                //$(this).css('visibility', '');
                
                /* remove placeholder text, replace is here because of IE */
                if ($(this).html().toLowerCase().replace(/(;|")/g, '') == 
                    settings.placeholder.toLowerCase().replace(/(;|")/g, '')) {
                        $(this).html('');
                }
                                
                self.editing    = true;
                self.revert     = $(self).html();
                $(self).html('');

                /* create the form object */
                var form = $('<form />');
                
                /* apply css or style or both */
                if (settings.cssclass) {
                    if ('inherit' == settings.cssclass) {
                        form.attr('class', $(self).attr('class'));
                    } else {
                        form.attr('class', settings.cssclass);
                    }
                }

                if (settings.style) {
                    if ('inherit' == settings.style) {
                        form.attr('style', $(self).attr('style'));
                        /* IE needs the second line or display wont be inherited */
                        form.css('display', $(self).css('display'));                
                    } else {
                        form.attr('style', settings.style);
                    }
                }

                /* add main input element to form and store it in input */
                var input = element.apply(form, [settings, self]);

                /* set input content via POST, GET, given data or existing value */
                var input_content;
                
                if (settings.loadurl) {
                    var t = setTimeout(function() {
                        input.disabled = true;
                        content.apply(form, [settings.loadtext, settings, self]);
                    }, 100);

                    var loaddata = {};
                    loaddata[settings.id] = self.id;
                    if ($.isFunction(settings.loaddata)) {
                        $.extend(loaddata, settings.loaddata.apply(self, [self.revert, settings]));
                    } else {
                        $.extend(loaddata, settings.loaddata);
                    }
                    $.ajax({
                       type : settings.loadtype,
                       url  : settings.loadurl,
                       data : loaddata,
                       async : false,
                       success: function(result) {
                          window.clearTimeout(t);
                          input_content = result;
                          //$(self).css('overflow','hidden');
                          input.disabled = false;
                       }
                    });
                } else if (settings.data) {
                    input_content = settings.data;
                    if ($.isFunction(settings.data)) {
                        input_content = settings.data.apply(self, [self.revert, settings]);
                    }
                } else {
                    input_content = self.revert; 
                  //  $(self).css('overflow','hidden');
                }
                content.apply(form, [input_content, settings, self]);

                input.attr('name', settings.name);
        
                /* add buttons to the form */
                buttons.apply(form, [settings, self]);
         
                /* add created form to self */
                $(self).append(form);
         
                /* attach 3rd party plugin if requested */
                plugin.apply(form, [settings, self]);

                /* focus to first visible form element */
                $(':input:visible:enabled:first', form).focus();

                /* highlight input contents when requested */
                if (settings.select) {
                    input.select();
                }
        
                /* discard changes if pressing esc */
                input.keydown(function(e) {
                    if (e.keyCode == 27) {
                        e.preventDefault();
                        //self.reset();
                        reset.apply(form, [settings, self]);
                        $(self).css('overflow','hidden');
                    }
                });

                /* discard, submit or nothing with changes when clicking outside */
                /* do nothing is usable when navigating with tab */
                var t;
                if ('cancel' == settings.onblur) {
                    input.blur(function(e) {
                    	console.log('was clicked 1.');
                    	$(self).css('overflow','hidden');
                        /* prevent canceling if submit was clicked */
                        t = setTimeout(function() {
                            reset.apply(form, [settings, self]);
                        }, 500);
                    });
                } else if ('submit' == settings.onblur) {
                    input.blur(function(e) {
                    	console.log('was clicked 2.');
                    	$(self).css('overflow','hidden');
                        /* prevent double submit if submit was clicked */
                        t = setTimeout(function() {
                            form.submit();
                        }, 200);
                    });
                } else if ($.isFunction(settings.onblur)) {
                    input.blur(function(e) {
                    	console.log('was clicked 3.');
                    	$(self).css('overflow','hidden');
                        settings.onblur.apply(self, [input.val(), settings]);
                    });
                } else {
                    input.blur(function(e) {
                    	//console.log('was clicked 4.');
                    	//$(self).css('overflow','hidden');
                      /* TODO: maybe something here */
                    });
                }

                form.submit(function(e) {

                    if (t) { 
                        clearTimeout(t);
                    }

                    /* do no submit */
                    e.preventDefault(); 
            
                    /* call before submit hook. */
                    /* if it returns false abort submitting */                    
                    if (false !== onsubmit.apply(form, [settings, self])) { 
                        /* custom inputs call before submit hook. */
                        /* if it returns false abort submitting */
                        if (false !== submit.apply(form, [settings, self])) { 

                          /* check if given target is function */
                          if ($.isFunction(settings.target)) {
                              var str = settings.target.apply(self, [input.val(), settings]);
                              $(self).html(str);
                              self.editing = false;
                              callback.apply(self, [self.innerHTML, settings]);
                              /* TODO: this is not dry */                              
                              if (!$.trim($(self).html())) {
                                  $(self).html(settings.placeholder);
                              }
                          } else {
                              /* add edited content and id of edited element to POST */
                              var submitdata = {};
                              submitdata[settings.name] = input.val();
                              submitdata[settings.id] = self.id;
                              /* add extra data to be POST:ed */
                              if ($.isFunction(settings.submitdata)) {
                                  $.extend(submitdata, settings.submitdata.apply(self, [self.revert, settings]));
                              } else {
                                  $.extend(submitdata, settings.submitdata);
                              }

                              /* quick and dirty PUT support */
                              if ('PUT' == settings.method) {
                                  submitdata['_method'] = 'put';
                              }

                              /* show the saving indicator */
                              $(self).html(settings.indicator);
                              
                              /* defaults for ajaxoptions */
                              var ajaxoptions = {
                                  type    : 'POST',
                                  data    : submitdata,
                                  dataType: 'html',
                                  url     : settings.target,
                                  success : function(result, status) {
                                      if (ajaxoptions.dataType == 'html') {
                                        $(self).html(result);
                                      }
                                      self.editing = false;
                                      callback.apply(self, [result, settings]);
                                      if (!$.trim($(self).html())) {
                                          $(self).html(settings.placeholder);
                                      }
                                      $(self).css('overflow','hidden');
                                  },
                                  error   : function(xhr, status, error) {
                                      onerror.apply(form, [settings, self, xhr]);
                                  }
                              };
                              
                              /* override with what is given in settings.ajaxoptions */
                              $.extend(ajaxoptions, settings.ajaxoptions);   
                              $.ajax(ajaxoptions);          
                              
                            }
                        }
                    }
                    
                    /* show tooltip again */
                    $(self).attr('title', settings.tooltip);
                    
                    return false;
                });
            });
            
            /* privileged methods */
            this.reset = function(form) {
                /* prevent calling reset twice when blurring */
                if (this.editing) {
                    /* before reset hook, if it returns false abort reseting */
                    if (false !== onreset.apply(form, [settings, self])) { 
                        $(self).html(self.revert);
                        console.log('was clicked special.');
                        $(self).css('overflow','hidden');
                        self.editing   = false;
                        if (!$.trim($(self).html())) {
                            $(self).html(settings.placeholder);
                        }
                        /* show tooltip again */
                        if (settings.tooltip) {
                            $(self).attr('title', settings.tooltip);                
                        }
                    }                    
                }
            };            
        });

    };


    $.editable = {
        types: {
            defaults: {
                element : function(settings, original) {
                    var input = $('<input type="hidden"></input>');                
                    $(this).append(input);
                    return(input);
                },
                content : function(string, settings, original) {
                    $(':input:first', this).val(string);
                },
                reset : function(settings, original) {
                  original.reset(this);
                },
                buttons : function(settings, original) {
                    var form = this;
                    if (settings.submit) {
                        /* if given html string use that */
                        if (settings.submit.match(/>$/)) {
                            var submit = $(settings.submit).click(function() {
                                if (submit.attr("type") != "submit") {
                                    form.submit();
                                }
                            });
                        /* otherwise use button with given string as text */
                        } else {
                            var submit = $('<button type="submit" />');
                            submit.html(settings.submit);                            
                        }
                        $(this).append(submit);
                    }
                    if (settings.cancel) {
                        /* if given html string use that */
                        if (settings.cancel.match(/>$/)) {
                            var cancel = $(settings.cancel);
                        /* otherwise use button with given string as text */
                        } else {
                            var cancel = $('<button type="cancel" />');
                            cancel.html(settings.cancel);
                        }
                        $(this).append(cancel);

                        $(cancel).click(function(event) {
                            //original.reset();
                            if ($.isFunction($.editable.types[settings.type].reset)) {
                                var reset = $.editable.types[settings.type].reset;                                                                
                            } else {
                                var reset = $.editable.types['defaults'].reset;                                
                            }
                            reset.apply(form, [settings, original]);
                            return false;
                        });
                    }
                }
            },
            text: {
                element : function(settings, original) {
                    var input = $('<input />');
                    if (settings.width  != 'none') { input.width(settings.width);  }
                    if (settings.height != 'none') { input.height(settings.height); }
                    /* https://bugzilla.mozilla.org/show_bug.cgi?id=236791 */
                    //input[0].setAttribute('autocomplete','off');
                    input.attr('autocomplete','off');
                    $(this).append(input);
                    return(input);
                }
            },
            textarea: {
                element : function(settings, original) {
                    var textarea = $('<textarea />');
                    if (settings.rows) {
                        textarea.attr('rows', settings.rows);
                    } else if (settings.height != "none") {
                        textarea.height(settings.height);
                    }
                    if (settings.cols) {
                        textarea.attr('cols', settings.cols);
                    } else if (settings.width != "none") {
                        textarea.width(settings.width);
                    }
                    $(this).append(textarea);
                    return(textarea);
                }
            },
            select: {
               element : function(settings, original) {
                    var select = $('<select />');
                    $(this).append(select);
                    return(select);
                },
                content : function(data, settings, original) {
                    /* If it is string assume it is json. */
                    if (String == data.constructor) {      
                        eval ('var json = ' + data);
                    } else {
                    /* Otherwise assume it is a hash already. */
                        var json = data;
                    }
                    for (var key in json) {
                        if (!json.hasOwnProperty(key)) {
                            continue;
                        }
                        if ('selected' == key) {
                            continue;
                        } 
                        var option = $('<option />').val(key).append(json[key]);
                        $('select', this).append(option);    
                    }                    
                    /* Loop option again to set selected. IE needed this... */ 
                    $('select', this).children().each(function() {
                        if ($(this).val() == json['selected'] || 
                            $(this).text() == $.trim(original.revert)) {
                                $(this).attr('selected', 'selected');
                        }
                    });
                }
            }
        },

        /* Add new input type */
        addInputType: function(name, input) {
            $.editable.types[name] = input;
        }
    };

    // publicly accessible defaults
    $.fn.editable.defaults = {
        name       : 'value',
        id         : 'id',
        type       : 'text',
        width      : 'auto',
        height     : 'auto',
        event      : 'click.editable',
        onblur     : 'cancel',
        loadtype   : 'GET',
        loadtext   : 'Loading...',
        placeholder: 'Click to edit',
        loaddata   : {},
        submitdata : {},
        ajaxoptions: {}
    };

})(jQuery);;
alter_user_form = (function(){
	var alter_user_form_run_count = 0;
	
	return function (){
		if (alter_user_form_run_count>0) return; 
		alter_user_form_run_count++;
		//if (////console) //////console.log('alter_user_form_run_count='+alter_user_form_run_count);
		$('#edit-form-account').attr('href',$('#edit-form-account').attr('href')+'#account').addClass('fsuserfields-link').parent().removeClass("active");
		$('#edit-form-password').attr('href',$('#edit-form-password').attr('href')+'#password').addClass('fsuserfields-link').parent().removeClass("active");
		$('#edit-form-profile').attr('href',$('#edit-form-profile').attr('href')+'#profile').addClass('fsuserfields-link').parent().removeClass("active");
		$('#edit-form-notices').attr('href',$('#edit-form-notices').attr('href')+'#notices').addClass('fsuserfields-link').parent().removeClass("active");
		$('#edit-form-apply').attr('href',$('#edit-form-apply').attr('href')+'#apply').addClass('fsuserfields-link').parent().removeClass("active");
	
		//check if we're looking at user-profile-form
		if ($('#user-profile-form').length > 0){
			//do stuff
			//alert('altering user form');
			//if (////console) //////console.log('altering user form');
		}else{
			//alert('NOT altering user form');
			//if (////console) //////console.log('NOT altering user form');
			return false; 
		}
		
		var isAdmin = false;
		
		if ($('#edit-picture').length > 0){
			isAdmin = true;
		}
		
		// remove the original URLs
	
		// hide form elements upon page load
		//$(document).ready(function() {
		if (isAdmin){

			//$('#edit-revalidate .form-item-name, .form-item-mail, .form-item-roles, #fieldset-signature-settings, #fieldset-masquerade, #edit-contact, #edit-ckeditor, #fieldset-timezone, #fieldset-user_relationships_ui_settings, #edit-group-audience').addClass('fsuserfields-cat-account fsuserfields');
			$('#edit-revalidate, .form-item-name, .form-item-status, .form-item-mail, .form-item-roles, #fieldset-signature-settings, #fieldset-masquerade, #edit-contact, #edit-ckeditor, #edit-timezone, #fieldset-timezone, #fieldset-user_relationships_ui_settings, #edit-group-audience').addClass('fsuserfields-cat-account fsuserfields');
			$('.form-item-current-pass, .form-item-pass').addClass('fsuserfields-cat-password fsuserfields');
			$('#fieldset-privatemsg, #edit-privatemsg').addClass('fsuserfields-cat-notices fsuserfields');
			$('#fieldset-picture, #edit-picture, #edit-field-first-name, #edit-field-last-name, #edit-field-location, #edit-field-aboutme, #edit-field-status, #edit-field-gender, #edit-field-birthday').addClass('fsuserfields-cat-profile fsuserfields');
			$('#edit-field-apply-merchant, #edit-field-website-url').addClass('fsuserfields-cat-apply fsuserfields');
		}else{
			//$('#edit-revalidate .form-item-name, .form-item-mail, .form-item-roles, #fieldset-signature-settings, #fieldset-masquerade, #edit-contact, #edit-ckeditor, #fieldset-timezone, #fieldset-user_relationships_ui_settings, #edit-group-audience').addClass('fsuserfields-cat-account fsuserfields');
			$('#edit-revalidate .form-item-name, .form-item-mail, .form-item-roles, #fieldset-signature-settings, #fieldset-masquerade, #edit-contact, #edit-ckeditor, #edit-timezone, #fieldset-timezone, #fieldset-user_relationships_ui_settings, #edit-group-audience').addClass('fsuserfields-cat-account fsuserfields');
			$('.form-item-current-pass, .form-item-pass').addClass('fsuserfields-cat-password fsuserfields');
			$('#fieldset-privatemsg').addClass('fsuserfields-cat-notices fsuserfields');
			$('#fieldset-picture, #edit-field-first-name, #edit-field-last-name, #edit-field-location, #edit-field-aboutme, #edit-field-status, #edit-field-gender, #edit-field-birthday').addClass('fsuserfields-cat-profile fsuserfields');
			$('#edit-field-apply-merchant, #edit-field-website-url').addClass('fsuserfields-cat-apply fsuserfields');
		}
		//});
	
		// functions for each one of the links
		$('#edit-form-account').click(function () {
			$('#edit-revalidate').show(); 
			// hide elements belonging to other forms
			$('.fsuserfields').hide();
			$('.fsuserfields-cat-account').show();
			
			// select the currently clicked link 
			$('.fsuserfields-link').parent().removeClass('active');
			$(this).parent().addClass('active');
			/*$('#edit-form-apply').parent().removeClass('active');
			$('#edit-form-notices').parent().removeClass('active');
			$('#edit-form-profile').parent().removeClass('active');
			$('#edit-form-password').parent().removeClass('active');*/
			return false;
		});
		$('#edit-form-password').click(function () {
			$('#edit-revalidate').hide();
			$('.fsuserfields').hide();
			$('.fsuserfields-cat-password').show();
	
			$('.fsuserfields-link').parent().removeClass('active');
			$(this).parent().addClass('active');
			return false;
		});
		$('#edit-form-profile').click(function () {
			$('#edit-revalidate').hide();
			$('.fsuserfields').hide();
			$('.fsuserfields-cat-profile').show();
	
			$('.fsuserfields-link').parent().removeClass('active');
			$(this).parent().addClass('active');
			return false;
		});
		$('#edit-form-notices').click(function () {
			$('#edit-revalidate').hide();
			$('.fsuserfields').hide();
			$('.fsuserfields-cat-notices').show();
	
			$('.fsuserfields-link').parent().removeClass('active');
			$(this).parent().addClass('active');
			return false;
		});
		$('#edit-form-apply').click(function () {
			$('#edit-revalidate').hide();
			$('.fsuserfields').hide();
			$('.fsuserfields-cat-apply').show();
	
			$('.fsuserfields-link').parent().removeClass('active');
			$(this).parent().addClass('active');
			return false;
	    });
		
		//fire appropriate initial call
		if ($('#user-profile-form').length > 0){
			//////console.log('window.location.hash='+window.location.hash);
			hash = 'account';
			if (window.location.hash) { 
				hash = window.location.hash.substr(1);
				//////console.log('hash='+hash);
			}
			$('#edit-form-'+hash).click();
		}
	}
})();;
$(document).ready(function() {
	
	var searchtimeout;
	$('.region-header .form-item-search-block-form input[type="text"]').bind('textchange', function () {
		clearTimeout(searchtimeout);
	  	//$('#ajaxFired').html('<strong>Typing...</strong>');
	  	//var self = this;
	  	searchtimeout = setTimeout(function () {
	  		//$('#ajaxFired').html('<strong>Saved</strong>: ' + $(self).val());
	  		//console.log('searching for...' + $('.form-item-search-block-form input[type="text"]').val());
	  		$('.region-header .form-item-search-block-form input[type="text"]').css('background-position','100% -15px');
	  		$('.region-header .form-item-search-block-form input[type="text"]').css('background-image','url(/misc/throbber.gif)');
	  		$('.region-header .form-item-search-block-form input[type="text"]').css('background-repeat','no-repeat');
	  		
	  		var searchterm = $('.region-header .form-item-search-block-form input[type="text"]').val();
	  		$.ajax({
	  			type: 'POST',
	  			url: '/ajax/search',
	  			data: 'query=' + searchterm,
	  			success: function(data) {
	  				$('body #top-ajax-search-result').remove();
	  				$('body').append(data);
	  				var offset = $('.region-header #search-block-form .form-item-search-block-form input').offset();
	  				var resultwidth = $('body #top-ajax-search-result').width();
	  				$('body #top-ajax-search-result').css('left',(offset.left - 260) + 'px');
	  				$('body #top-ajax-search-result').css('top',(offset.top + 24) + 'px');
	  				clearTimeout(searchtimeout);
	  			},
	  			complete: function(data) {
	  				clearTimeout(searchtimeout);
	  				$('.region-header .form-item-search-block-form input[type="text"]').css('background-position','100% 5px');
	  			}
	  		});
	  		
	  }, 500);
	});
	
	$('.top-ajax-search-result-row').live('click',function(event) {
		var gotourl = $(this).find('.search-result-title a').attr('href');
		if(gotourl == undefined)
		{
			gotourl = $(this).find('.search-result-more-results a').attr('href');
		}
		console.log('gotourl: ' + gotourl);
		window.location.href = gotourl;
		event.stopPropagation();
		
	});
	
	$('.top-ajax-search-result-row').live('mouseenter', function() {
		$(this).css('background-color','#333333');
		$(this).find('.search-result-childcount').css('color','#ffffff');
		$(this).find('.search-result-type').css('color','#ffffff');
		$(this).find('.search-result-title a, .search-result-more-results a').css('color','#ffffff');	
		$(this).find('.search-result-mag-products').css('color','#ffffff');
	});
	
	$('.top-ajax-search-result-row').live('mouseleave',function() {
		$(this).css('background-color','#ffffff');
		$(this).find('.search-result-childcount').css('color','#BBBBBB');
		$(this).find('.search-result-type').css('color','#3b3b3b');
		$(this).find('.search-result-title a, .search-result-more-results a').css('color','#3B5998');
		$(this).find('.search-result-mag-products').css('color','#aaaaaa');
		
	});
	
	// we need to define 
	$('#block-apachesolr-search-bundle li a').each(function() {
		if($(this).text() == '[* TO *] (1)')
		{
			$(this).parent().remove();
		}
	});
	$('.btn-search-more-results').click(function() {
		$('.ajax-load-ani').show();
		$('body').append('<div class="ajax-result-return hidden"></div>');
		//$('.ajax-result-return').load('./?');
		//////console.log('window href: ' + window.location.href);
		var urlcomponents = $.url.parse(window.location.href);
		//////console.log(urlcomponents);
		var currentpage = parseInt($('#search-current-page').val());
		if(urlcomponents.params!=undefined)
		{
			if(urlcomponents.params.page!=undefined)
			{
				urlcomponents.params.page = (currentpage + 1).toString();
			} else {
				urlcomponents.params.page = currentpage + 1;
			}
			//urlcomponents.params.page = parseInt(urlcomponents.params.page) + 1;
		} else {
			urlcomponents.params = {'page': currentpage + 1};
			//urlcomponents.query = 'page=2';
		}
		delete urlcomponents.query;
		delete urlcomponents.source;
		var newurl = $.url.build(urlcomponents);
		//////console.log(urlcomponents);
		//////console.log('newurl: ' + newurl);
		
		$('.ajax-result-return').load(newurl + ' ol.apachesolr_search-results', function() {
			$('.ajax-load-ani').hide();
			$('#search-current-page').val(parseInt($('#search-current-page').val())+1);
			var resulthtml = $('.ajax-result-return').html();
			if($(resulthtml).find('li').size()<=0)
			{
				//////console.log('no more results');
				$('.search-more-results').text("There are no more results.");
			} else {
				$('ol.apachesolr_search-results').append(resulthtml);
			}
			$('.ajax-result-return').remove();
		});
	});
	
});;
//function insertNodeToLook(nid,look_id,output,css_output){
function insertNodeToLook(result){
	console.log('insertnodetolook');
	console.log(result);
	var nid = result.nid;
	var look_id = result.look_id;
	var output = result.output;
	var css_output = result.css_output;
	var type = result.type;
	
	console.log('insertNodeToLook');
	//alert('insertNodeToLook');
	
	// !Important We need '.view-magazine' here so as not to match the 
	// look containers in the org mag window, which is hidden until 
	// "Organize Pages" is clicked
	var selector = '.view-magazine #node-'+look_id+' .content .field-name-body .field-items .field-item';
	console.log(selector);
	//alert(selector);
	var look_container = $(selector);
	
	// Now, check if node already exist. If yes, we update instead of insert
	var old_node_selector = '.item-'+nid;
        if (type == 'color'){
            old_node_selector = '.look_color.bkg_color';
        }
	console.log(old_node_selector);
	//var old_node = $(old_node_selector);
	var old_node = look_container.find(old_node_selector);
	var new_node;
	console.log(old_node);
	if (old_node.length == 0){
		//new node, insert
		console.log('new node, insert');

		//look_container.append('<style>'+css_output+'</style>');
		new_node = look_container.append(output);
		var maxZ = findZMax(look_container, '.mag-draggable');
		maxZ += 10;
		console.log('maxZ='+maxZ);
		console.log('a type='+type);
		
		
		$(new_node).css('z-index', maxZ).css('left', 80).css('top', 220);
	}else{
		//old node, update
		console.log('old node, update');
		
                var old_x = old_node.css('left');
                var old_y = old_node.css('top');
                var old_z = old_node.css('z-index');
                console.log('old x,y,z='+old_x+','+old_y+','+old_z);
                old_node.remove();
                new_node = look_container.append(output);

                $(new_node).css('z-index', old_z).css('left', old_x).css('top', old_y);
	}

	/*$('body').append("<div class='jithidden'>Page .</div>");
	$('body div.jithidden').twitter_alert({
		fadeout_time: 6000,
		bg_colour: '#ffffff',
		text_colour: '#ff0000',
		border_colour: '#ff0000',
	});*/

	// Remove the dialog popup
	
	//setTimeout('deactivateCurrentLookEdit()',700);
	//setTimeout('activateLastLookEdit()',1400);
	
	//sortAllZIndex($(new_node).parents('.node-look'));
	//normalizeZ($(new_node).parents('.node-look'));
	
	stopInteraction($(new_node).parents('.node-look'));
	enableInteraction($(new_node).parents('.node-look'));
        
	if (type=='image' || type=='product' || type=='video'){
		//stopInteraction() and enableInteraction() sets the <img> here to 0 width n 0 height
		//counter the resetting by initializing width n height to auto
		console.log('.img-item-'+nid);
		console.log(new_node.find('.img-item-'+nid));
		var image_item = new_node.find('.img-item-'+nid);
		//image_item.removeAttr('style');
		image_item.css('width', 'auto').css('height', 'auto');
		
		if(type=='product')
		{
			image_item.parents('.look_product-container').css('position','absolute');
			if($.browser.msie)
			{
				image_item.parent().css('position','relative');
			} else {
				image_item.parent().css('position','absolute');
			}
			if($.browser.msie)
			{
				image_item.parents('.look_product-container').css('width','auto').css('height','auto');
			} else {
				image_item.parents('.look_product-container').width(image_item.width()).height(image_item.height());
			}
			
			image_item.parent().css('width','auto').css('height','auto');
		}
		if(type=='image' || type=='video')
		{
			//image_item.parent().width(image_item.width()).height(image_item.height());
			//image_item.parents('.look_image-container').width(image_item.width()).height(image_item.height());
			image_item.parents('.look_image-container').css('position','absolute');
			console.log('ii width:' + image_item.width());
			//alert(image_item.width() + ',' + image_item.height());
			image_item.parent().css('width','auto').css('height','auto');
			
			//alert(image_item.parent().width() + ',:' + image_item.parent().height());
			if(image_item.width()==0 || image_item.height()==0)
			{
				//console.log(image_item);
				//console.log('ii width 2:' + image_item.css('width'));
				//setTimeout("setImageDimensions("+image_item+")",250);
				//image_item.parents('.look_image-container').html( image_item.parents('.look_image-container').html().replace('width: 0px;','') );
				//console.log("replacement complete");
				//console.log("image parent html: " + image_item.parents('.look_image-container').html());
				//image_item.removeAttr('style');
				//image_item.parent().css('width','').css('height','');
				image_item.css('width','auto').css('height','auto');
				image_item.parent().css('width','auto').css('height','auto');
				
				
			}
		}
	} else 	if (type == 'color') {
                var menuItems = $('.field-name-og-node-link .field-item a:contains(Color)');
                menuItems.each(function(){
                    $(this).attr('href', 'javascript:');
                    if (old_node.length == 0){
                        $(this).click({itemid:nid,lookid:look_id},editItem);
                    }
                });
        }
	
	$('#loading,#result-wrapper').delay(1200).remove();
	//alert('Click to continue...');
	//activateLastLookEdit();
}

function setImageDimensions(tobj)
{
	console.log(tobj);
	//tobj.parents('.look_image-container').html( tobj.parents('.look_image-container').html().replace('width: 0px;','') );
	
	//tobj.css('width','').css('height','');
}

//function call_insertNodeToLook(nid,look_id,output,css_output){
function call_insertNodeToLook(result){
	
	console.log('call_insertNodeToLook');
	//alert('call_insertNodeToLook');
	if (parent){
		parent.insertNodeToLook(result);
	}
}

function open_add_text_dialog(url){

	var width = 580;
	var height = 400;
	$('body').prepend('<div id="loading" style="height:100%; width:100%; opacity:0.5; position:fixed; top:0px; left:0; right:0; background:#000; z-index:999; font-size:70px; text-align:center; display:none"><h2>Loading...</h2></div>');
	$('#loading').fadeIn('fast');
	//bare dialog
	//$('body').append('<div id="result" style="display:none; position:absolute; z-index:2000; background-color:#FFFFFF;"><div class="left pop-up-form-title"><h1 id="page-title" class="title">Add Text</h1></div><div class="close-pop-up right"><a role="button" class="ui-dialog-titlebar-close ui-corner-all" href="javascript:"><span class="ui-icon ui-icon-closethick">close</span></a></div><div class="clear"></div><iframe id="text-form-iframe" scrolling="no" frameborder="0" width="'+width+'" height="400" src="'+url+'"></iframe></div>');
	//dialog with ui elements
	//$('body').append('<div id="result-wrapper" style="outline-width: 0px; outline-style: initial; outline-color: initial; height: auto; width: 580px; top: 438px; left: 539px; display:none; z-index: 1002; position:absolute; " class="ui-dialog ui-widget ui-widget-content ui-corner-all  ui-draggable" tabindex="-1" role="dialog" aria-labelledby="ui-dialog-title-result"><div class="ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix"><span class="ui-dialog-title" id="ui-dialog-title-result">&nbsp;</span><a href="#" class="ui-dialog-titlebar-close ui-corner-all" role="button"><span class="ui-icon ui-icon-closethick">close</span></a></div></div>');
	$('body').append('<div id="result-wrapper" style="height: auto; width: 580px; /*top: 438px; left: 539px;*/ display:none; z-index: 1002; position:absolute; " class="ui-dialog-ckeditor" tabindex="-1" role="dialog" aria-labelledby="ui-dialog-title-result"></div>');
	$('#result-wrapper').append('<div id="result" style="background-color:#FFFFFF;" class="ui-dialog-content ui-widget-content"><div class="left pop-up-form-title"><h1 id="page-title" class="title">Add Text</h1></div><div class="close-pop-up right"><a role="button" class="ui-dialog-titlebar-close ui-corner-all" href="javascript:"><span class="ui-icon ui-icon-closethick">close</span></a></div><div class="clear"></div><iframe id="text-form-iframe" scrolling="no" frameborder="0" width="'+width+'" height="'+height+'" src="'+url+'"></iframe></div>');
	
	//try only: $('body').prepend('<iframe id="text-form-iframe" scrolling="no" frameborder="0" width="'+width+'" height="400" src="'+url+'" style="position:absolute; left:0px; top:0px;"></iframe>');

	// This not working?
	//$('#text-form-iframe').contents().find('.node-text-form[action*="add"]').live('submit',saveAll);
	$('#text-form-iframe').load(function() {
		console.log('#text-form-iframe loaded');
		//console('size of: ' + $('#text-form-iframe').contents().find('.node-text-form[action*="add"]').size());
		
		// Remove the 'Loading...' label in the overlay
		$('#loading H2').remove();
		
		// Skip the save all, add the node using js
		//$('#text-form-iframe').contents().find('.node-text-form[action*="add"]').bind('submit',saveAll);
		$('#text-form-iframe').contents().find('.node-text-form[action*="add"]').bind('submit',{new_msg:'Creating...'},hide_dialog_first);
		
	});

	//trace('$(window).width()='+$(window).width()+', $(window).height()='+$(window).height());
	var x = ($(window).width() - width)/2;
	//var y = ($(window).height() - $('#result-wrapper').height())/2;
	var y = ($(window).height() - 450)/2;
	//$('#result-wrapper').css('width',width+'px');
	$('#result-wrapper').width(width);
	//$('#result-wrapper').css('left',x+'px');
	//$('#result-wrapper').css('top',y+'px');
	$('#result-wrapper').offset({top:y, left:x});
	var offset = $('#result-wrapper').offset();
	//trace('width='+width+', x='+x+', y='+y);
	//trace('width='+width+', offset.top='+offset.left+', offset.top='+offset.top);
	$('#result-wrapper').css('display','block');
	deactivateCurrentLookEdit();
	
	//alert('Testing Text editor in IE8. Sorry for inconveniences caused. 31');

	// Why are we not using the dialog jQuery plugin? Because it 
	// screws up IE when u open ckeditor's add link window
	/*
	$("#result").dialog({
		modal: true,
		width: width,
		height: 'auto',
		resizable: false
	});
	*/
	
	$('.close-pop-up').click(function() {
 		//console.log('close pop up');
 		//$('#result').dialog('destroy'); 
 		$('#loading, #result-wrapper').remove();
 	});
}

function open_edit_text_dialog(url){

	var width = 580;
	var height = 400;
	$('body').prepend('<div id="loading" style="height:100%; width:100%; opacity:0.5; position:fixed; left:0; right:0; background:#000; z-index:999; font-size:70px; text-align:center; display:none"><h2>Opening text editor...</h2></div>');
	$('#loading').fadeIn('fast');
	//$('body').prepend('<div id="result" style="display:none"><h2>Loading...</h2></div>');
	// This words previously
	//$('body').prepend('<div id="result" style="display:none"><div class="left pop-up-form-title"><h1 id="page-title" class="title">Edit Text</h1></div><div class="close-pop-up right"><a role="button" class="ui-dialog-titlebar-close ui-corner-all" href="javascript:"><span class="ui-icon ui-icon-closethick">close</span></a></div><div class="clear"></div><iframe id="text-form-edit-iframe" scrolling="no" frameborder="0" width="'+width+'" height="400" src="'+url+'"></iframe></div>');

	$('body').append('<div id="result-wrapper" style="height: auto; width: 580px; /*top: 438px; left: 539px;*/ display:none; z-index: 1002; position:absolute; " class="ui-dialog-ckeditor" tabindex="-1" role="dialog" aria-labelledby="ui-dialog-title-result"></div>');
	$('#result-wrapper').append('<div id="result" style="background-color:#FFFFFF;" class="ui-dialog-content ui-widget-content"><div class="left pop-up-form-title"><h1 id="page-title" class="title">Edit Text</h1></div><div class="close-pop-up right"><a role="button" class="ui-dialog-titlebar-close ui-corner-all" href="javascript:"><span class="ui-icon ui-icon-closethick">close</span></a></div><div class="clear"></div><iframe id="text-form-edit-iframe" scrolling="no" frameborder="0" width="'+width+'" height="'+height+'" src="'+url+'"></iframe></div>');
	
	$('#text-form-edit-iframe').load(function() {
		console.log('#text-form-edit-iframe loaded');
		////console('size of: ' + $('#text-form-iframe').contents().find('.node-text-form[action*="add"]').size());

		// Remove the label in the overlay
		$('#loading H2').remove();

		// Skip the save all, add the node using js
		//$('#text-form-edit-iframe').contents().find('.node-text-form[action*="edit"]').bind('submit',saveAll);
		$('#text-form-edit-iframe').contents().find('.node-text-form[action*="edit"]').bind('submit',{new_msg:'Updating...'},hide_dialog_first);
	});

	//trace('$(window).width()='+$(window).width()+', $(window).height()='+$(window).height());
	var x = ($(window).width() - width)/2;
	//var y = ($(window).height() - $('#result-wrapper').height())/2;
	var y = ($(window).height() - 450)/2;
	//$('#result-wrapper').css('width',width+'px');
	$('#result-wrapper').width(width);
	//$('#result-wrapper').css('left',x+'px');
	//$('#result-wrapper').css('top',y+'px');
	$('#result-wrapper').offset({top:y, left:x});
	var offset = $('#result-wrapper').offset();
	//trace('width='+width+', x='+x+', y='+y);
	//trace('width='+width+', offset.top='+offset.left+', offset.top='+offset.top);
	$('#result-wrapper').css('display','block');
	deactivateCurrentLookEdit();
	
	// Why are we not using the dialog jQuery plugin? Because it 
	// screws up IE when u open ckeditor's add link window
	/*
	$("#result").dialog({
		modal: true,
		width: width,
		height: 'auto',
		resizable: false
	});
	*/
	
	$('.close-pop-up').click(function() {
 		//console.log('close pop up');
 		//$('#result').dialog('destroy'); 
 		$('#loading, #result-wrapper').remove();
 	});
	
	timerid = setTimeout("checkEditorInstance()",1000);
}

function open_add_image_dialog_old(url){
	console.log('open_add_image_dialog, url='+url);

	var width = 580;
	var height = 470;
	$('body').prepend('<div id="loading" style="height:100%; width:100%; opacity:0.5; position:fixed; left:0; right:0; background:#000; z-index:999; font-size:70px; text-align:center; display:none"><h2>Loading...</h2></div>');
	$('#loading').fadeIn('fast');
	$('body').prepend('<div id="result" style="display:none"><h2>Loading...</h2></div>');
	
	$("#result").load(url, function(){
		$('#loading').fadeOut('fast', function(){
			$("#result").dialog({
				modal: true,
				width: width,
				height: 'auto',
				resizable: false
			});
			//////('wiring click event');
			$('.close-pop-up').click(function() {
		 		//////('close pop up');
		 		$('#result').dialog('destroy'); 
		 		$('#loading,#result').remove();
		 	});
			//var oldconfig;
			//////(CKEDITOR.instances);
			
			// we set a interval to check if instance has been defined
			
			//timerid = setTimeout("checkEditorInstance()",1000);
			
			//setInterval("checkEditorCount()",500);
			
		});
	});
	
}


function open_add_image_dialog(url){

	var width = 580;
	if($.browser.msie)
	{
		width = 560;
	}
	var height = 470;
	$('body').prepend('<div id="loading" style="height:100%; width:100%; opacity:0.5; position:fixed; top:0px; left:0; right:0; background:#000; z-index:999; font-size:70px; text-align:center; display:none"><h2>Loading...</h2></div>');
	$('#loading').fadeIn('fast');

	$('body').append('<div id="result-wrapper" style="height: auto; width: 580px; /*top: 438px; left: 539px;*/ display:none; z-index: 1002; position:absolute; " class="ui-dialog-ckeditor" tabindex="-1" role="dialog" aria-labelledby="ui-dialog-title-result"></div>');
	$('#result-wrapper').append('<div id="result" style="background-color:#FFFFFF;" class="ui-dialog-content ui-widget-content"><div class="left pop-up-form-title"><h1 id="page-title" class="title">Add Image</h1></div><div class="close-pop-up right"><a role="button" class="ui-dialog-titlebar-close ui-corner-all" href="javascript:"><span class="ui-icon ui-icon-closethick">close</span></a></div><div class="clear"></div><iframe id="image-form-iframe" scrolling="no" frameborder="0" width="'+width+'" height="'+height+'" src="'+url+'"></iframe></div>');
	
	// This not working?
	//$('#image-form-iframe').contents().find('.node-image-form[action*="add"]').live('submit',saveAll);
	$('#image-form-iframe').load(function() {
		console.log('#image-form-iframe loaded');
		//console('size of: ' + $('#image-form-iframe').contents().find('.node-image-form[action*="add"]').size());
		
		// Remove the 'Loading...' label in the overlay
		$('#loading H2').remove();
		
		$('#image-form-iframe').contents().find('.node-image-form[action*="add"]').bind('submit',{new_msg:'Creating...'},hide_dialog_first);
		
	});

	//trace('$(window).width()='+$(window).width()+', $(window).height()='+$(window).height());
	var x = ($(window).width() - width)/2;
	//var y = ($(window).height() - $('#result-wrapper').height())/2;
	var y = ($(window).height() - 450)/2;
	//$('#result-wrapper').css('width',width+'px');
	$('#result-wrapper').width(width);
	//$('#result-wrapper').css('left',x+'px');
	//$('#result-wrapper').css('top',y+'px');
	$('#result-wrapper').offset({top:y, left:x});
	var offset = $('#result-wrapper').offset();
	//trace('width='+width+', x='+x+', y='+y);
	//trace('width='+width+', offset.top='+offset.left+', offset.top='+offset.top);
	$('#result-wrapper').css('display','block');
	deactivateCurrentLookEdit();
	
	$('.close-pop-up').click(function() {
 		//console.log('close pop up');
 		//$('#result').dialog('destroy'); 
 		$('#loading, #result-wrapper').remove();
 	});
}

function open_edit_image_dialog(url){

	var width = 580;
	var height = 470;
	$('body').prepend('<div id="loading" style="height:100%; width:100%; opacity:0.5; position:fixed; left:0; right:0; background:#000; z-index:999; font-size:70px; text-align:center; display:none"><h2>Opening image editor...</h2></div>');
	$('#loading').fadeIn('fast');

	$('body').append('<div id="result-wrapper" style="height: auto; width: 580px; /*top: 438px; left: 539px;*/ display:none; z-index: 1002; position:absolute; " class="ui-dialog-ckeditor" tabindex="-1" role="dialog" aria-labelledby="ui-dialog-title-result"></div>');
	$('#result-wrapper').append('<div id="result" style="background-color:#FFFFFF;" class="ui-dialog-content ui-widget-content"><div class="left pop-up-form-title"><h1 id="page-title" class="title">Edit Image</h1></div><div class="close-pop-up right"><a role="button" class="ui-dialog-titlebar-close ui-corner-all" href="javascript:"><span class="ui-icon ui-icon-closethick">close</span></a></div><div class="clear"></div><iframe id="image-form-edit-iframe" scrolling="no" frameborder="0" width="'+width+'" height="'+height+'" src="'+url+'"></iframe></div>');
	
	$('#image-form-edit-iframe').load(function() {
		console.log('#image-form-edit-iframe loaded');
		////console('size of: ' + $('#image-form-iframe').contents().find('.node-image-form[action*="add"]').size());

		// Remove the label in the overlay
		$('#loading H2').remove();

		// Skip the save all, add the node using js
		$('#image-form-edit-iframe').contents().find('.node-image-form[action*="edit"]').bind('submit',{new_msg:'Updating...'},hide_dialog_first);
	});

	//trace('$(window).width()='+$(window).width()+', $(window).height()='+$(window).height());
	var x = ($(window).width() - width)/2;
	//var y = ($(window).height() - $('#result-wrapper').height())/2;
	var y = ($(window).height() - 450)/2;
	//$('#result-wrapper').css('width',width+'px');
	$('#result-wrapper').width(width);
	//$('#result-wrapper').css('left',x+'px');
	//$('#result-wrapper').css('top',y+'px');
	$('#result-wrapper').offset({top:y, left:x});
	var offset = $('#result-wrapper').offset();
	//trace('width='+width+', x='+x+', y='+y);
	//trace('width='+width+', offset.top='+offset.left+', offset.top='+offset.top);
	$('#result-wrapper').css('display','block');
	deactivateCurrentLookEdit();
	
	// Why are we not using the dialog jQuery plugin? Because it 
	// screws up IE when u open ckeditor's add link window
	/*
	$("#result").dialog({
		modal: true,
		width: width,
		height: 'auto',
		resizable: false
	});
	*/
	
	$('.close-pop-up').click(function() {
 		//console.log('close pop up');
 		//$('#result').dialog('destroy'); 
 		$('#loading, #result-wrapper').remove();
 	});
	
	timerid = setTimeout("checkEditorInstance()",1000);
}

function open_add_video_dialog(url){
	var width = 580;
	if($.browser.msie)
	{
		width = 560;
	}
	var height = 470;
        
	$('body').prepend('<div id="loading" style="height:100%; width:100%; opacity:0.5; position:fixed; top:0px; left:0; right:0; background:#000; z-index:999; font-size:70px; text-align:center; display:none"><h2>Loading...</h2></div>');
	$('#loading').fadeIn('fast');

	$('body').append('<div id="result-wrapper" style="height: auto; width: 580px; /*top: 438px; left: 539px;*/ display:none; z-index: 1002; position:absolute; " class="ui-dialog-ckeditor" tabindex="-1" role="dialog" aria-labelledby="ui-dialog-title-result"></div>');
	$('#result-wrapper').append('<div id="result" style="background-color:#FFFFFF;" class="ui-dialog-content ui-widget-content"><div class="left pop-up-form-title"><h1 id="page-title" class="title">Add Video</h1></div><div class="close-pop-up right"><a role="button" class="ui-dialog-titlebar-close ui-corner-all" href="javascript:"><span class="ui-icon ui-icon-closethick">close</span></a></div><div class="clear"></div><iframe id="image-form-iframe" scrolling="no" frameborder="0" width="'+width+'" height="'+height+'" src="'+url+'"></iframe></div>');
	
	// This not working?
	//$('#image-form-iframe').contents().find('.node-image-form[action*="add"]').live('submit',saveAll);
	$('#image-form-iframe').load(function() {
		console.log('#image-form-iframe loaded');
		//console('size of: ' + $('#image-form-iframe').contents().find('.node-image-form[action*="add"]').size());
		
		// Remove the 'Loading...' label in the overlay
		$('#loading H2').remove();
		$('#image-form-iframe').contents().find('.node-image-form[action*="add"]').bind('submit',{new_msg:'Creating...'},hide_dialog_first);
		
	});

	//trace('$(window).width()='+$(window).width()+', $(window).height()='+$(window).height());
	var x = ($(window).width() - width)/2;
	//var y = ($(window).height() - $('#result-wrapper').height())/2;
	var y = ($(window).height() - 450)/2;
	//$('#result-wrapper').css('width',width+'px');
	$('#result-wrapper').width(width);
	//$('#result-wrapper').css('left',x+'px');
	//$('#result-wrapper').css('top',y+'px');
	$('#result-wrapper').offset({top:y, left:x});
	var offset = $('#result-wrapper').offset();
	//trace('width='+width+', x='+x+', y='+y);
	//trace('width='+width+', offset.top='+offset.left+', offset.top='+offset.top);
	$('#result-wrapper').css('display','block');
	deactivateCurrentLookEdit();
	
	$('.close-pop-up').click(function() {
 		//console.log('close pop up');
 		//$('#result').dialog('destroy'); 
 		$('#loading, #result-wrapper').remove();
 	});
}

function open_edit_video_dialog(url){

	var width = 580;
	var height = 470;
	$('body').prepend('<div id="loading" style="height:100%; width:100%; opacity:0.5; position:fixed; left:0; right:0; background:#000; z-index:999; font-size:70px; text-align:center; display:none"><h2>Opening image editor...</h2></div>');
	$('#loading').fadeIn('fast');

	$('body').append('<div id="result-wrapper" style="height: auto; width: 580px; /*top: 438px; left: 539px;*/ display:none; z-index: 1002; position:absolute; " class="ui-dialog-ckeditor" tabindex="-1" role="dialog" aria-labelledby="ui-dialog-title-result"></div>');
	$('#result-wrapper').append('<div id="result" style="background-color:#FFFFFF;" class="ui-dialog-content ui-widget-content"><div class="left pop-up-form-title"><h1 id="page-title" class="title">Edit Video</h1></div><div class="close-pop-up right"><a role="button" class="ui-dialog-titlebar-close ui-corner-all" href="javascript:"><span class="ui-icon ui-icon-closethick">close</span></a></div><div class="clear"></div><iframe id="image-form-edit-iframe" scrolling="no" frameborder="0" width="'+width+'" height="'+height+'" src="'+url+'"></iframe></div>');
	
	$('#image-form-edit-iframe').load(function() {
		console.log('#image-form-edit-iframe loaded');
		////console('size of: ' + $('#image-form-iframe').contents().find('.node-image-form[action*="add"]').size());

		// Remove the label in the overlay
		$('#loading H2').remove();

		// Skip the save all, add the node using js
		$('#image-form-edit-iframe').contents().find('.node-image-form[action*="edit"]').bind('submit',{new_msg:'Updating...'},hide_dialog_first);
	});

	//trace('$(window).width()='+$(window).width()+', $(window).height()='+$(window).height());
	var x = ($(window).width() - width)/2;
	//var y = ($(window).height() - $('#result-wrapper').height())/2;
	var y = ($(window).height() - 450)/2;
	//$('#result-wrapper').css('width',width+'px');
	$('#result-wrapper').width(width);
	//$('#result-wrapper').css('left',x+'px');
	//$('#result-wrapper').css('top',y+'px');
	$('#result-wrapper').offset({top:y, left:x});
	var offset = $('#result-wrapper').offset();
	//trace('width='+width+', x='+x+', y='+y);
	//trace('width='+width+', offset.top='+offset.left+', offset.top='+offset.top);
	$('#result-wrapper').css('display','block');
	deactivateCurrentLookEdit();
	
	// Why are we not using the dialog jQuery plugin? Because it 
	// screws up IE when u open ckeditor's add link window
	/*
	$("#result").dialog({
		modal: true,
		width: width,
		height: 'auto',
		resizable: false
	});
	*/
	
	$('.close-pop-up').click(function() {
 		//console.log('close pop up');
 		//$('#result').dialog('destroy'); 
 		$('#loading, #result-wrapper').remove();
 	});
	
	timerid = setTimeout("checkEditorInstance()",1000);
}

function open_add_product_dialog(url){

	var width = 720;
	var height = 480;
	var iframe_width = 690;
	var iframe_height = 480;
	
	$('body').prepend('<div id="loading" style="height:100%; width:100%; opacity:0.5; position:fixed; top:0px; left:0; right:0; background:#000; z-index:999; font-size:70px; text-align:center; display:none"><h2>Loading...</h2></div>');
	$('#loading').fadeIn('fast');

	$('body').append('<div id="result-wrapper" style="height: auto; width: 720px; /*top: 438px; left: 539px;*/ display:none; z-index: 1002; position:absolute; " class="ui-dialog-ckeditor" tabindex="-1" role="dialog" aria-labelledby="ui-dialog-title-result"></div>');
	$('#result-wrapper').append('<div id="result" style="background-color:#FFFFFF;" class="ui-dialog-content ui-widget-content"><div class="left pop-up-form-title"><h1 id="page-title" class="title">Add Product</h1></div><div class="close-pop-up right"><a role="button" class="ui-dialog-titlebar-close ui-corner-all" href="javascript:"><span class="ui-icon ui-icon-closethick">close</span></a></div><div class="clear"></div><iframe id="product-form-iframe" scrolling="no" frameborder="0" width="'+iframe_width+'" height="'+iframe_height+'" src="'+url+'"></iframe></div>');
	
	// This not working?
	//$('#product-form-iframe').contents().find('.node-product-form[action*="add"]').live('submit',saveAll);
	$('#product-form-iframe').load(function() {
		console.log('#product-form-iframe loaded');
		//console('size of: ' + $('#product-form-iframe').contents().find('.node-product-form[action*="add"]').size());
		
		// Remove the 'Loading...' label in the overlay
		$('#loading H2').remove();
		
		$('#product-form-iframe').contents().find('.node-product-form[action*="add"]').bind('submit',{new_msg:'Creating...'},hide_dialog_first);
		
	});

	//trace('$(window).width()='+$(window).width()+', $(window).height()='+$(window).height());
	var x = ($(window).width() - width)/2;
	//var y = ($(window).height() - $('#result-wrapper').height())/2;
	var y = ($(window).height() - 450)/2;
	//$('#result-wrapper').css('width',width+'px').css('left',x+'px').css('top',y+'px');
	$('#result-wrapper').width(width);
	$('#result-wrapper').offset({top:y, left:x});
	var offset = $('#result-wrapper').offset();
	//trace('width='+width+', x='+x+', y='+y);
	//trace('width='+width+', offset.top='+offset.left+', offset.top='+offset.top);
	$('#result-wrapper').css('display','block');
	deactivateCurrentLookEdit();
	
	$('.close-pop-up').click(function() {
 		//console.log('close pop up');
 		//$('#result').dialog('destroy'); 
 		$('#loading, #result-wrapper').remove();
 	});
}

function open_edit_product_dialog(url){

	var width = 720;
	var height = 480;
	var iframe_width = 690;
	var iframe_height = 480;
	$('body').prepend('<div id="loading" style="height:100%; width:100%; opacity:0.5; position:fixed; left:0; right:0; background:#000; z-index:999; font-size:70px; text-align:center; display:none"><h2>Opening product editor...</h2></div>');
	$('#loading').fadeIn('fast');

	$('body').append('<div id="result-wrapper" style="height: auto; width: 720px; /*top: 438px; left: 539px;*/ display:none; z-index: 1002; position:absolute; " class="ui-dialog-ckeditor" tabindex="-1" role="dialog" aria-labelledby="ui-dialog-title-result"></div>');
	$('#result-wrapper').append('<div id="result" style="background-color:#FFFFFF;" class="ui-dialog-content ui-widget-content"><div class="left pop-up-form-title"><h1 id="page-title" class="title">Edit Product</h1></div><div class="close-pop-up right"><a role="button" class="ui-dialog-titlebar-close ui-corner-all" href="javascript:"><span class="ui-icon ui-icon-closethick">close</span></a></div><div class="clear"></div><iframe id="product-form-edit-iframe" scrolling="no" frameborder="0" width="'+iframe_width+'" height="'+iframe_height+'" src="'+url+'"></iframe></div>');
	
	$('#product-form-edit-iframe').load(function() {
		console.log('#product-form-edit-iframe loaded');
		////console('size of: ' + $('#product-form-iframe').contents().find('.node-product-form[action*="add"]').size());

		// Remove the label in the overlay
		$('#loading H2').remove();

		// Skip the save all, add the node using js
		$('#product-form-edit-iframe').contents().find('.node-product-form[action*="edit"]').bind('submit',{new_msg:'Updating...'},hide_dialog_first);
	});

	//trace('$(window).width()='+$(window).width()+', $(window).height()='+$(window).height());
	var x = ($(window).width() - width)/2;
	//var y = ($(window).height() - $('#result-wrapper').height())/2;
	var y = ($(window).height() - 450)/2;
	//$('#result-wrapper').css('width',width+'px');
	$('#result-wrapper').width(width);
	//$('#result-wrapper').css('left',x+'px');
	//$('#result-wrapper').css('top',y+'px');
	$('#result-wrapper').offset({top:y, left:x});
	var offset = $('#result-wrapper').offset();
	//trace('width='+width+', x='+x+', y='+y);
	//trace('width='+width+', offset.top='+offset.left+', offset.top='+offset.top);
	$('#result-wrapper').css('display','block');
	deactivateCurrentLookEdit();
	
	// Why are we not using the dialog jQuery plugin? Because it 
	// screws up IE when u open ckeditor's add link window
	/*
	$("#result").dialog({
		modal: true,
		width: width,
		height: 'auto',
		resizable: false
	});
	*/
	
	$('.close-pop-up').click(function() {
 		//console.log('close pop up');
 		//$('#result').dialog('destroy'); 
 		$('#loading, #result-wrapper').remove();
 	});
	
	timerid = setTimeout("checkEditorInstance()",1000);
}

function open_add_color_dialog(url){

	var width = 580;
	if($.browser.msie)
	{
		width = 560;
	}
	var height = 470;
	$('body').prepend('<div id="loading" style="height:100%; width:100%; opacity:0.5; position:fixed; top:0px; left:0; right:0; background:#000; z-index:999; font-size:70px; text-align:center; display:none"><h2>Loading...</h2></div>');
	$('#loading').fadeIn('fast');

	$('body').append('<div id="result-wrapper" style="height: auto; width: 580px; /*top: 438px; left: 539px;*/ display:none; z-index: 1002; position:absolute; " class="ui-dialog-ckeditor" tabindex="-1" role="dialog" aria-labelledby="ui-dialog-title-result"></div>');
	$('#result-wrapper').append('<div id="result" style="background-color:#FFFFFF;" class="ui-dialog-content ui-widget-content"><div class="left pop-up-form-title"><h1 id="page-title" class="title">Add Background Color</h1></div><div class="close-pop-up right"><a role="button" class="ui-dialog-titlebar-close ui-corner-all" href="javascript:"><span class="ui-icon ui-icon-closethick">close</span></a></div><div class="clear"></div><iframe id="image-form-iframe" scrolling="no" frameborder="0" width="'+width+'" height="'+height+'" src="'+url+'"></iframe></div>');
	
	// This not working?
	//$('#image-form-iframe').contents().find('.node-image-form[action*="add"]').live('submit',saveAll);
	$('#image-form-iframe').load(function() {
		console.log('#image-form-iframe loaded');
		//console('size of: ' + $('#image-form-iframe').contents().find('.node-image-form[action*="add"]').size());
		
		// Remove the 'Loading...' label in the overlay
		$('#loading H2').remove();
		
		$('#image-form-iframe').contents().find('.node-image-form[action*="add"]').bind('submit',{new_msg:'Creating...'},hide_dialog_first);
		
	});

	//trace('$(window).width()='+$(window).width()+', $(window).height()='+$(window).height());
	var x = ($(window).width() - width)/2;
	//var y = ($(window).height() - $('#result-wrapper').height())/2;
	var y = ($(window).height() - 450)/2;
	//$('#result-wrapper').css('width',width+'px');
	$('#result-wrapper').width(width);
	//$('#result-wrapper').css('left',x+'px');
	//$('#result-wrapper').css('top',y+'px');
	$('#result-wrapper').offset({top:y, left:x});
	var offset = $('#result-wrapper').offset();
	//trace('width='+width+', x='+x+', y='+y);
	//trace('width='+width+', offset.top='+offset.left+', offset.top='+offset.top);
	$('#result-wrapper').css('display','block');
	deactivateCurrentLookEdit();
	
	$('.close-pop-up').click(function() {
 		//console.log('close pop up');
 		//$('#result').dialog('destroy'); 
 		$('#loading, #result-wrapper').remove();
 	});
}

function open_edit_color_dialog(url){
	var width = 580;
	if($.browser.msie)
	{
		width = 560;
	}
	var height = 470;
	$('body').prepend('<div id="loading" style="height:100%; width:100%; opacity:0.5; position:fixed; top:0px; left:0; right:0; background:#000; z-index:999; font-size:70px; text-align:center; display:none"><h2>Loading...</h2></div>');
	$('#loading').fadeIn('fast');

	$('body').append('<div id="result-wrapper" style="height: auto; width: 580px; /*top: 438px; left: 539px;*/ display:none; z-index: 1002; position:absolute; " class="ui-dialog-ckeditor" tabindex="-1" role="dialog" aria-labelledby="ui-dialog-title-result"></div>');
	$('#result-wrapper').append('<div id="result" style="background-color:#FFFFFF;" class="ui-dialog-content ui-widget-content"><div class="left pop-up-form-title"><h1 id="page-title" class="title">Edit Background Color</h1></div><div class="close-pop-up right"><a role="button" class="ui-dialog-titlebar-close ui-corner-all" href="javascript:"><span class="ui-icon ui-icon-closethick">close</span></a></div><div class="clear"></div><iframe id="image-form-iframe" scrolling="no" frameborder="0" width="'+width+'" height="'+height+'" src="'+url+'"></iframe></div>');
	
	// This not working?
	//$('#image-form-iframe').contents().find('.node-image-form[action*="add"]').live('submit',saveAll);
	$('#image-form-iframe').load(function() {
		console.log('#image-form-iframe loaded');
		//console('size of: ' + $('#image-form-iframe').contents().find('.node-image-form[action*="add"]').size());
		
		// Remove the 'Loading...' label in the overlay
		$('#loading H2').remove();
		
		$('#image-form-iframe').contents().find('.node-image-form[action*="add"]').bind('submit',{new_msg:'Creating...'},hide_dialog_first);
		
	});

	//trace('$(window).width()='+$(window).width()+', $(window).height()='+$(window).height());
	var x = ($(window).width() - width)/2;
	//var y = ($(window).height() - $('#result-wrapper').height())/2;
	var y = ($(window).height() - 450)/2;
	//$('#result-wrapper').css('width',width+'px');
	$('#result-wrapper').width(width);
	//$('#result-wrapper').css('left',x+'px');
	//$('#result-wrapper').css('top',y+'px');
	$('#result-wrapper').offset({top:y, left:x});
	var offset = $('#result-wrapper').offset();
	//trace('width='+width+', x='+x+', y='+y);
	//trace('width='+width+', offset.top='+offset.left+', offset.top='+offset.top);
	$('#result-wrapper').css('display','block');
	deactivateCurrentLookEdit();
	
	$('.close-pop-up').click(function() {
 		//console.log('close pop up');
 		//$('#result').dialog('destroy'); 
 		$('#loading, #result-wrapper').remove();
 	});
}

// Hides the dialog but do not remove the overlay (processing in background)
function hide_dialog_first(event){
	//console.log('hide_dialog_first');
	//console.log(event.data);
	$('#result-wrapper').hide();
	// Remove the 'loading' message
	$('#loading').append('<h2 style="display:none;">'+event.data.new_msg+'</h2>');
	$('#loading H2').fadeIn('fast');
};

