/*
 * @copyright ИД "Ноосфера" (http://magicgold.ru)
 * @author Urushev Vladimir (urushev@yandex.ru)
 *
 * name: ajaxsite library
 * date: 2010-11-05
 */
  
  
  


jQuery.extend({
	ajaxform: {
		init: function(){
			/*
			 * Формы с классом ajax считаются формами,
			 * которые post-ят данные и получают ответ javascript-ом
			 */

			 jQuery('form.ajax').ajaxForm({
				type: 'post',
                async: false,
				dataType: 'script',
				beforeSubmit: function(){
					jQuery.ajaxsite.show();
				}
			});
		}
	},
	
	
	
	ajaxsite: {
		arrSettings: {
			ajaxsiteZIndex: 31,
			ajaxsiteBorderColor: '#FFB3AF',
			ajaxsiteWaitImage: '/images/wait.gif',
			enable_waitForm: true,
			yOffset: 30,
			shooter_opacity: 0.6,
			mode: 'scroll lock and center', /* aviable: "scroll lock and center", "lock and center", "fixed offset" */
			correctorInterval: 1000
		},
		arrState: {
			openWinCounter: 0,
			withPositionFixed: true
		},
		settings: function(options) {
			this.arrSettings = jQuery.extend(this.arrSettings, options);
		},
		init: function() {
			var docW;
			
			var ie6 = jQuery.browser.msie && parseInt(jQuery.browser.version) === 6 && typeof window['XMLHttpRequest'] !== "object";
			if (ie6)
				this.arrState.withPositionFixed = false;
			
			if (this.arrSettings.mode == 'center')
				this.arrState.withPositionFixed = false;
			
			
			jQuery(".ajaxsite")
				.each(function(index) {
					if (! jQuery(this).attr('url'))
						jQuery(this)
							.attr('url', jQuery(this).attr('href'));
				})
				.attr('href', 'javascript:void(0)')
				.die('click')
				.live('click', function(e){
					jQuery.ajaxsite.show();
					jQuery.ajaxsite.load( jQuery(this).attr('url') );
			    });
			
			jQuery('.obertka')
				.live('click', function(){
					jQuery(".ilayer:last").remove();
					jQuery(".obertka:last").remove();
					
					
					jQuery(".obertka:last").show();
					
					if (! jQuery(".obertka").length && jQuery.browser.ie)
						jQuery('embed, object, select').css({ 'visibility' : 'visible' });
					
					jQuery.ajaxsite.scrollrelase();
				});
			
			
			jQuery(window).bind("resize", function(){
				jQuery.ajaxsite.corrector();
			});
			
			jQuery.ajaxform.init();
		},
		corrector: function(bFirstInit){
			var docW = jQuery(window).width();
			var docH = jQuery(window).height();
			
			jQuery('.obertka').height(  jQuery(document).height()  );
			
			
			var a = parseInt(docW/2 - (jQuery(".ilayer:last").width()/2 ));
			
			var b = parseInt(docH/2 - jQuery(".ilayer:last").height()/2 + (  this.arrState.withPositionFixed ? 0 : jQuery(window).scrollTop()  )    );
			
			
			if (this.arrSettings.mode != 'center' || bFirstInit){
				jQuery(".ilayer:last")
					.css(
						{
							"left": (a + "px"),
							"top": (b + "px")
						}	
					);
			}else{
				jQuery(".ilayer:last")
				.css(
					{
						"left": (a + "px")
					}	
				);
			}
			

			if (this.arrSettings.correctorInterval)
				setTimeout('jQuery.ajaxsite.corrector();', this.arrSettings.correctorInterval);
		},
		show: function(text, closehref){
			if (jQuery.browser.ie)
				jQuery('embed, object, select').css({ 'visibility' : 'hidden' });
			
			jQuery("body").append("<div class='obertka' style='background:none repeat scroll 0 0 #000000;display:block;left:0;position:absolute;top:0;width:100%;'></div>");
			this.arrSettings.ajaxsiteZIndex++;

			jQuery('.obertka').not('.obertka:last').hide();
				
			jQuery('.obertka:last').css({
				'z-index': this.arrSettings.ajaxsiteZIndex,
				backgroundColor:	'#000',
				opacity:			this.arrSettings.shooter_opacity,
				height:				jQuery(document).height()
			});
			
			jQuery("body").append("<div class='ilayer' style='position:" + (this.arrState.withPositionFixed ? "fixed" : "absolute") + ";display:none;'></div>");
			
			this.arrSettings.ajaxsiteZIndex++;
			
			this.scrolllock();
			
			jQuery(".ilayer:last")
					.css('z-index', this.arrSettings.ajaxsiteZIndex);
					
					
			if (text || this.arrSettings.enable_waitForm){
				jQuery(".ilayer:last")
					.html("<div style='-webkit-border-radius:5px;-moz-border-radius:5px;margin:0 35px;border:3px solid " + this.arrSettings.ajaxsiteBorderColor + ";background-color:#fff;padding:25px;color:#777;font-size:18pt;'> <div>" + (text ? text : "<img style='vertical-align:middle;' src='" + this.arrSettings.ajaxsiteWaitImage + "' />&nbsp;&nbsp;&nbsp;Загрузка...") + "</div><div style='text-align:right;'><a style='border-bottom:1px dashed;color:#777;font-size:11pt;font-weight:400;text-decoration:none;cursor:pointer;'" + (closehref ? " href='" + closehref + "'" : " onclick=\"ajaxsiteClose();\" href='javascript:void(0);'") + ">Закрыть окно</a></div>")
					.show();
			}
			
			jQuery.ajaxsite.corrector(true);
		},
		load: function(target_url){
			
			
			jQuery.ajax({
				type: "GET",
				url: target_url,
				async: true,
				/*cache: false,*/
				success: function(data){
					jQuery('.ilayer:last').hide().empty().html (data);				


					
					
					jQuery.ajaxsite.arrState.openWinCounter--;
					jQuery.ajaxsite.scrolllock();
					jQuery.ajaxform.init();
				     
				     
				     
				     
					jQuery(".ilayer:last").ready(function(){
						jQuery.ajaxsite.corrector(true);
						
						/*если нет картинок, то show*/
						if (! jQuery(".ilayer:last img").length){
							jQuery(".ilayer:last").show();
						}else{
							jQuery(".ilayer:last img").load(function(){
								jQuery.ajaxsite.corrector(true);
								jQuery(".ilayer:last").show();
							});
						}
					});

				}
			});
		},
		close: function(){
			jQuery('.obertka:last').click();
		},
		
		scrolllock: function(){
			if (this.arrSettings.mode != 'scroll lock and center')
				return;
			
			this.arrState.openWinCounter++;

			if (this.arrState.openWinCounter <= 1){
				var before = jQuery('body').width();
				jQuery('body').css('overflow', 'hidden');
				jQuery('body').css({'width': before});
			}
		},
		scrollrelase: function(){
			if (this.arrSettings.mode != 'scroll lock and center')
				return;
			
			this.arrState.openWinCounter--;

			if (! this.arrState.openWinCounter ){
				jQuery('body').css('overflow', 'auto');
				jQuery('body').css({'width': ''});
			}
		}
	}
});








function ajaxsiteCorrector(){	
	jQuery.ajaxsite.corrector();
}

function ajaxsiteInit(text, closehref){
	jQuery.ajaxsite.show(text, closehref);
	
}

function ajaxsiteLoad(target_url){
	jQuery.ajaxsite.load(target_url);
}


function ajaxsiteClose(){
	jQuery.ajaxsite.close();
}



