/**
 * Nucleo (X)HTML/CSS Framework
 *
 * @copyright       Copyright (c) Sergey Gogolev
 * @link            http://www.softprojects.ru/
 * @license    		CC-A-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0/)
 * @version         0.2.3
 */
 
jQuery(document).ready(function() {

	registerEvents();

	CDropMenu.init({
		delay			: 400,
		changeBackground: {
			over : {
				color 	: '2c5aa7',
				delay 	: 300
			},
			out : {
				color 	: '417ad2',
				delay 	: 800
			}
		}
	});

	CTab.init({
		delayHide 		: 400,
		delayShow 		: 200
	});

	CCarousel.init({
		'visualList' : {
			wrap		: 'circular',
			visible		: 1,
			scroll		: 1,
			auto		: 12,
			animation	: 400
		},
		'photos' : {
			wrap		: 'circular',
			visible		: 1,
			scroll		: 1,
			animation	: 400,
			callback	: CImages.load
		},
		'carousel' : {
			vertical	: true,
			textScroll 	: true,
			mousewheel 	: true
		},
		'carousel-horizontal' : {
			visible		: 3,
			scroll		: 3,
			mousewheel 	: true
		},
		'photos-list' : {
			wrap		: 'circular',
			visible		: 4,
			scroll		: 4,
			animation	: 400,
			mousewheel 	: true,
			callback	: CGallery.load
		}
	});

	CAjax.init();

	CGallery.init();
		
	var timeout = setTimeout(function(){
		CBlocks.init(['visual','news', 'orders', 'gallery', 'products', 'links', 'history']);
	}, 1000);
	
	/*
		var interval = setInterval(function(){
			CBlocks.init(['peoples']);
		}, 15000);
	*/
	
	initPoll();
    
    if (jQuery('#infoNeedUpdate').size() > 0) CAjax.query ('update','','','POST',true,function (block, response){},'');	
			
});

registerEvents = function (block) {
	CCore.init();
	CPage.init();
	
	CCalendar.init();
	
	CToggles.init();
	
	CImages.init({
		'zoomSpeedIn'		: 300, 
		'zoomSpeedOut'		: 300, 
		'overlayOpacity'	: 0.5,
		'overlayShow'		: true 
	});
	if (block) {
		CCarousel.init(undefined, block);
	}
	
}	


	function initPoll () {

		jQuery('.pollform').bind('submit', function(){
		
			var currentId = this.id;
			if (jQuery('#'+currentId+'-pollarchive').val() == 'true') {
				data = '&pollarchive=true';
			} else {
				data = '';
			}
			data = data + '&p_id='+jQuery('#'+currentId+'-p_id').val();
			data = data + '&qoa='+jQuery('#'+currentId+'-qoa').val();
			
			
			
			var elements = jQuery('#'+currentId+' input:checkbox:checked');
				for (var i = 0; i < elements.size(); i++) {
					data = data + '&'+elements[i].name + '=' + elements[i].value;
				}
			
			
			var elements = jQuery('#'+currentId+' input:radio:checked');
	
			
				for (var i = 0; i < elements.size(); i++) {
					data = data + '&'+elements[i].name + '=' + elements[i].value;
				}
			
			jQuery('#'+currentId+'-button').html('');
			
			CAjax.query ('side_poll','#'+currentId+'-wrapper', data, 'POST', true, function (block, response){}, 'overlay');	
			
			
			return false;
		});
	}


/**
 *  CToggles
 */
 
	var CToggles = {version : '0.3.2'

		, init : function() {
			jQuery('a.enclink').unbind('click').click(function(){
				jQuery(this).parent().parent().find('div.enc').slideToggle();
			return false;})
		}
	}

/**
 *  CAjax
 */
	var CAjax = {version : 	'0.2.3'
	
		, preloader	:	'<img src="templates/default/images/general/ajax/line.gif" alt="" />'
		, method	:	'POST'
		, treads	:	new Object()
		
		, init : function () {
			CAjax.cache();
		}
		
		, query	:	function (href, block, data, method, noCache, callback, preloader) {var self = this;
			
			var currentBlock 	= jQuery(block);
			var method 			= (!method) ? self.method : method;
			var preloader 		= (!preloader) ? self.preloader : preloader;

			if (CCache.is(href+data) && !noCache) {
				jQuery(block).html(CCache.get(href+data));
				registerEvents(block);
				if (typeof callback == 'function') callback(block, CCache.get(href+data));
			return true;} 		
			
			if (CAjax.treads[href+data] != undefined && CAjax.treads[href+data] != false) {
				return true;
			}
			
			CAjax.treads[href+data] = true;
			
			if (String(preloader).match(/overlay/)) {
				currentBlock.prepend('<div class="x-overlay-wrapper"><div class="x-overlay opacity-70 '+(String(preloader).replace(/overlay/))+'" style="height:'+jQuery(block).height()+'px; width: '+jQuery(block).width()+'px;"><div class="x-loader"></div></div></div>');
				if (!jQuery.support.opacity) {
					CPage.setOpacity();
				}
				currentBlock.find('div.x-overlay:first').fadeIn('slow');
			} else {
				if ((block != '') && (jQuery(block).html() != preloader)) jQuery(block).html(preloader);
			}

               
                jQuery.ajax({ 
					cache		: true,
					timeout		: 10000,
					dataType	: 'html',
					type		: method,
					url			: href,
					data		: data + '&ajax=true',
					
					error: function(response, textStatus, errorThrown){
						jQuery(block).find('.x-overlay:first').fadeOut('slow',function(){
							jQuery(block).find('.x-overlay:first').remove();
							jQuery(block).prepend('<div class="x-overlay-wrapper"><div class="x-overlay '+((preloader === 'overlayWhite') ? 'white' : '')+'" style="height:'+jQuery(block).height()+'px; width: '+jQuery(block).width()+'px;"><div class="x-error">Страница не найдена</div></div></div>');
							jQuery(block).find('.x-overlay:first').fadeIn('slow',function(){							
								var timeOut =  setTimeout("jQuery('#"+jQuery(block).attr('id') +" .x-overlay:first').fadeOut('slow');", 3500);
							});
						});
                    },
			
					success: function(response){
						CAjax.treads[href+data] = false;
						jQuery(block).html(response);
						
						registerEvents(block);
						CAjax.cache(block);
					
						if (!noCache) CCache.put(href+data,jQuery(block).html());		
						if (typeof callback == 'function') callback(block, response);
                        
					return true;}
				});
		
		return true;}

		, page : function (href, block, prefetch, iscache){
			var addData = '';
			
			if (jQuery('#filter').size() > 0 && jQuery('#searchCount').html() != ''){
				addData = addData + jQuery('#filter').find('form').serialize();
			}
			
			CAjax.query (href, block, addData, 'POST', (iscache) ? false : true, function (block, response) {
				jQuery('html').animate({scrollTop: 250}, 1000);
			},'overlay');
		return true;}
		
		, cache : function (block) {
			block = (block) ? block : 'body';
			jQuery(block).find('.prefetch').each(function(){
				jQuery(this).removeClass('prefetch');
				var currentPrefetchBlock = Math.round(Math.random()*100);
				jQuery('body').append('<div class="prefetcher" id="prefetcher'+currentPrefetchBlock+'"></div>');
				CAjax.query (this.href, '#prefetcher' + currentPrefetchBlock,'','POST',false, function(){
					jQuery('#prefetcher'+currentPrefetchBlock).remove();
				});
			});
		return true;}
		
		, top : function (block) {
			jQuery('html').animate({scrollTop: 250}, 1000);
		}
	}


/**
 *  CCache
 */

	var CCache = {version	: '0.2.3'

		, cacheData : new Array()
		
		, get : function (href) {var self= this;
			return self.cacheData[href];
		}
		
		, is : function (href) {var self= this;
			if (self.cacheData[href] != undefined && self.cacheData[href] != '') return true;
		return false;}
		
		, put : function (href, content) {var self= this;
			self.cacheData[href] = content;
		return true;}
		
		, remove : function (href) {var self= this;
			self.cacheData[href] = '';
		return true;}
		
		, clear	: function () {var self= this;
			self.cacheData = new Object();
		return true;}
	}

/**
 *  CCore
 */
	var CCore = {version : '0.2.3'
		  
		, libraries : new Array()
		
		, include : function (url, callback) {var self = this;
			
			var type = url.match(/.([a-z]{1,4})$/);
			
			if (self.libraries[url]) return true;

			if (type[1] == undefined) {
				return false;
			} else if (type[1] == 'css') {
				var styleSheet = document.createElement("link");
				styleSheet.setAttribute("rel","stylesheet");
				styleSheet.setAttribute("href",url);
				document.body.appendChild(styleSheet);
				
				if (jQuery.isFunction(callback)) callback();
			} else if (type[1] == 'js') {
				jQuery.getScript(url, callback);
			} else return false;
			
			self.libraries[url] = true;
			
		return true;}
		
		, init : function (callback) {
			if (jQuery.isFunction(callback)) callback();
		return true;}
	}

/**
 *  CPage
 */
	var CPage = {version : '0.2.3'

		, init : function () {var self = this;
			self.setOpacity();	
			self.setInputs();	
		return true;}
			
		, setOpacity : function () {
			jQuery("[class*='opacity-']").each(function () {
				var opacityValue = this.className.substr(this.className.indexOf('opacity-') + 'opacity-'.length, 2);
				if (!jQuery.support.opacity) {
					this.style.filter += 'progid:DXImageTransform.Microsoft.Alpha(opacity='+opacityValue+')';
				} else {
					jQuery(this).css('opacity','.' + opacityValue);
				}
			});
		return true;}
		
		, setInputs : function () {var self = this;
				jQuery('input.input').filter('[type="text"]').each(function (i) {
					var defaultValue = jQuery(this).val(); 
					jQuery(this).bind("click", {def: defaultValue}, self.clearInput).bind("focus", {def: defaultValue}, self.clearInput);
					jQuery(this).bind("blur", {def: defaultValue}, self.resetInput);
				});
		}
		
		, clearInput : function (e) {
			if (jQuery(this).val() == e.data.def) jQuery(this).val('');
		}
		
		, resetInput : function (e) {
			if (jQuery(this).val() == '') jQuery(this).val(e.data.def);
		}
	}
	
/**
 *  CDropMenu
 */
	var CDropMenu = {version : '0.2.3'

		, defaults : {
			ids						: {
				menu	: 'menu',
				submenu	: 'submenu'
			},
			delay 					: 450,
			changeBackground 		: false
		}
		
		, submenuOffsets : []
	
		, init 	: function(options) {var self = this;
	
			self.options  	= jQuery.extend({}, self.defaults, options || {});
			var background 	= self.options.changeBackground;
					
			var submenu 			= jQuery('#' + self.options.ids.submenu);
			var submenuWidth		= submenu.width();
			
			var menuItems 			= jQuery('#' + self.options.ids.menu).find('a');
			var submenuItems 		= submenu.find('div.item');
			var submenuItemsLinks	= submenu.find('a');
					
			menuItems.unbind('mouseover').mouseover(function() {

				var submenuItem = jQuery('#'+this.id+'-'+self.options.ids.submenu);
				var menuItem 	= jQuery('#'+this.id);

				submenuItems.filter('[id !="'+this.id+'-"'+self.options.ids.submenu+']').stop(false, true).hide();
				
				menuItems.removeClass('active');
				jQuery(this).addClass('active');
								
				if (submenuItem.css('display') == 'none' ) {
					
					if (self.submenuOffsets[this.id] != undefined) {
							submenuItemOffset = self.submenuOffsets[this.id];
					} else {
						var submenuItemWidth  	= submenuItem.width();
						var submenuItemOffset 	= Math.max(0, Math.ceil(menuItem.position().left + (menuItem.width() - submenuItemWidth)/2));
							submenuItemOffset	= (submenuItemOffset + submenuItemWidth > submenuWidth) ? submenuWidth - submenuItemWidth - 1 : submenuItemOffset;
							self.submenuOffsets[this.id] = submenuItemOffset;
					}
						
					submenuItem.css('left', submenuItemOffset).fadeIn(self.options.delay);
				}
			});

			if (background) {
				submenuItemsLinks.unbind('mouseover').mouseover(function() {
					jQuery(this).stop().animate({backgroundColor: "#" + background.over.color}, background.over.delay);
				});
				
				submenuItemsLinks.unbind('mouseout').mouseout(function() {
					jQuery(this).stop().animate({backgroundColor: "#" + background.out.color}, background.out.delay);
				});
			}
			
			jQuery('#' + self.options.ids.menu).find('a.active').mouseover();
					
	
		return true;}
	}
	
/**
 *  CCarousel
 */
	var CCarousel = {version : '0.2.3'
		
		, carousels : {}
		
		, root : '#carousels'
		
		, init : function (carousels, root) {var self = this;
			if (carousels != undefined) self.carousels = carousels;
			if (root != undefined) self.root = root;
			jQuery.each(self.carousels, self.add);
		}
		
		, add : function (carousel, args) {
			var current = jQuery('#' + carousel).filter(':visible').filter('[block!=jcarousel]');
			
			if (current.size() == 0) {
				current = jQuery(CCarousel.root).find('div.' + carousel).filter(':visible').filter('[block!=jcarousel]');
			}
		
			current.jcarousel(args).attr('block','jcarousel');
		}
	}
	
/**
 *  CTab
 */
	var CTab = {version : '0.2.3'
	
		, defaults : {
			delayHide 		: 100,
			delayShow 		: 300
		}
		
		, init : function (options) {var self = this;
		
			self.options  	= jQuery.extend({}, self.defaults, options || {});
		
			jQuery('div.block-tabs').each(function(){

				var current 	= jQuery(this);
				var tabs 	= current.find('div.tabs').find('a');
				var blocks 	= current.find('div.block-content');
				var ajax 	= current.find('div.ajax');
				
				
				
				tabs.unbind('click').bind('click',function(){
				
					if (!jQuery(this).hasClass('tabs-link')) {
					
						var tab = jQuery(this);
		
						tabs.removeClass('active');
						tab.addClass('active');
						this.hideFocus = true;
						
						if (!tab.hasClass('ajax')) {
							var nextBlock = blocks[tabs.index(tab)];
							current.find('div.block-content:visible').hide();
							jQuery(nextBlock).show();
							CCarousel.init(undefined, nextBlock);
							
						} else {
							CAjax.query (jQuery(this).attr('href'), '#'+jQuery(this).attr('rel'), '', 'POST', false, function (block, response){}, 'overlay');
						}
					return false;}
					
				});
				
				var activeTabs = current.find('div.tabs').find('a.active');
				
				if (activeTabs.size() == 0) {
					jQuery(tabs[0]).addClass('active');
				} else {
					jQuery(activeTabs.get(0)).click();
				}
			})
		}
	}
	
/**
 *  CCalendar
 */
 
	var CCalendar = { version : '0.2.3'

		, library 	: 'templates/default/js/minified/datepicker/datepicker'

		, init : function () {var self = this;
		
			var calendars = jQuery('input.calendar');
			
			if(!CCore.libraries[self.library + '.js']) {
				calendars.unbind('mouseover').bind('mouseover', function(){
					CCore.include(self.library + '.css');
					CCore.include(self.library + '.js', self.load);
				});
			} else {
				self.load();		
			}
			calendars.eq(0).mouseover();
			
		return true;}	

		, load : function() {
			jQuery('input.calendar').datepicker({
				 nextText: '>'
				,prevText: '<'
				,showAnim: 'fadeIn'
				,showOn: 'button'
				,buttonImage: 'templates/default/images/general/icons/pix-calendar.gif'
				,dateFormat: 'dd-mm-yy'
				,onSelect: function(dateText, inst) {}
			});
		}
	}	

/**
 *  CImages 
 */
 
	var CImages = {version : '0.3.2'
		 
		, library 	: 'templates/default/js/minified/fancybox/fancybox'

		, images 	: ''

		, defaults : {
			'zoomSpeedIn'		: 300, 
			'zoomSpeedOut'		: 300, 
			'overlayOpacity'	: 0.5,
			'hideOnContentClick': false,
			'overlayShow'		: true
		}
		 
		, init : function (options) {var self = this;
			
			self.options = jQuery.extend({}, self.defaults, options || {});
			
			self.options = jQuery.extend(self.options, {'callbackOnShow': CImages.changeColor});

			self.images 	= jQuery('#body').find('.image');
			
			/*
				if(!CCore.libraries[self.library + '.js']) {
					self.images.unbind('mouseover').bind('mouseover', function(){
						CCore.include(self.library + '.css');
						CCore.include(self.library + '.js', self.load);
					});
				} else {
					self.load();		
				}
			*/
			self.load();
			
		return true;}	
		
		, load : function (block) {var self = this;
            
			var images = (typeof(block) == 'object')  ?  block.find('.image') : CImages.images;

			if (jQuery.isFunction(jQuery.fn.fancybox)) {
				images.fancybox(CImages.options);
			}
		}
		
		, changeColor : function() {
			//jQuery('#fancy_content').css('backgroundColor', '#417ad2');
		}
	}
	
/**
 *  CGallery
 */
 
	var CGallery = {version : '0.3.2'	
	
		, imagesList : ''
		
		, init : function () {var self = this; 
		
			self.load();
			self.imagesList.eq(0).click();
			
		return true;}	
        
        , change : function (currentFullImage, currentImage) {
        
            jQuery('#iloader').remove();
            jQuery('#galleryItemContent').prepend('<a href="'+currentFullImage+'" style="display: none;" class="image" rel="gallery"><img src="'+currentImage+'" alt="" /></a>');
            
            var firstImage = jQuery('#galleryItemContent').find('a:eq(0)');
            var secondImage = jQuery('#galleryItemContent').find('a:eq(1)');
            
            firstImage.fancybox(CImages.options);
            
            secondImage.fadeOut('5000','linear');
            firstImage.fadeIn('5000','linear');
           
            var timeout = setTimeout(function(){secondImage.remove();}, 5000);
            
            
        }
		
		, load : function () {var self = this; 
		
			self.imagesList = jQuery('#photos-list').find('a');

			if (self.imagesList.size() == 0) return false;

			self.imagesList.unbind('click').bind('click', function(){
				var currentImage 	 = jQuery(this).attr('href');
				var currentTitle 	 = jQuery(this).attr('title');
				var currentFullImage = jQuery(this).attr('rel');
                
                if (jQuery('#galleryItemContent').find('a:eq(0)').attr('href') != currentFullImage) {
                
                    jQuery('#galleryItemContent').append('<span id="iloader"><img src="templates/default/images/general/ajax/loader.gif" alt="" /></span>');
                    
                    
                    imagePreloader = new Image; 
                    imagePreloader.src = currentImage;
                    
                    if (imagePreloader.complete) 
                        CGallery.change(currentFullImage, currentImage);
                    else
                        jQuery(imagePreloader).unbind().bind('load',function(){ CGallery.change(currentFullImage, currentImage) });
                   
                }
            return false;});
			
		return true;}	
	}
	
		
/**
 *  CBlocks
 */
 
	var CBlocks = {version : '0.3.2'

		, init : function(blocks) {
			jQuery(blocks).each(CBlocks.load);
		}
		
		, load : function () {
			var blck = String(this);
			if (jQuery('#' + blck).size() > 0) {
				CAjax.query ('plugins/includes/include_'+blck, '', 'id=' + jQuery('#' + blck).find('input.id').val(), 'POST', false, function (block, response){
					jQuery('#' + blck).html(response);
					registerEvents('#' + blck);
				},'');
			}
		}
	}
