/**
 * CORE.JS
 *
 * @copyright Webway IT Labs, 2009
 */

$(document).ready(function() {
	$('body').addClass('jsed');

	FontController.Init();

	formsInit();
	galleryInit();

	//$("div#BSearch a").fancybox({ 'zoomSpeedIn': 0, 'zoomSpeedOut': 0, 'overlayShow': true });

	$('.b-shops_list tbody a').hover(
		function() {
			$(this).parents('tr').addClass('hover');
		},
		function() {
			$(this).parents('tr').removeClass('hover');
		}
	);

	var $faceLinks = $( "a[onclick]:not('.print, .backurl')" ),
		aLinks = $faceLinks.get(),
		nLinksLen = aLinks.length;

	if( nLinksLen ) {
		while( nLinksLen-- ) {
			aLinks[nLinksLen].onclick = null;
			aLinks[nLinksLen].removeAttribute('onclick');
		}

		$faceLinks.facebox().attr('rel', 'facebox.InFo_content');
	}
	//log( $faceLinks );
	
	if($('form').size() > 0){
		$('#surname').keyfilter(/[a-zа-я-]/i);
		$('#name').keyfilter(/[a-zа-я-]/i);
		$('#email').keyfilter(/[a-z0-9_\.\-@]/i);	
	}

initFormCat()


});


/**
 * Gallery
 */
function galleryInit() {
	var main = $('#gallery-main');

	if( !main ) {
		return;
	}

	var g = $('.b-gallery'),
	list = $('.b-gallery_items', g),
	elements = $('a', list),
	ctrl_prev = $('.i_prev', g),
	ctrl_next = $('.i_next', g),
	t = null;

	var bAnimationLock = false;

	// pre-init
	var nRealW = 0;
	elements.each(function(i) {
		//console.log($(this).parent().get(0));
		nRealW += $(this).parent().get(0).offsetWidth;
	});

//	console.log( nRealW );
/*pasaha*/
//	list.width(nRealW);
/*pasaha*/
	ctrl_prev.hide();
	if( elements.size() < 5 ) {
		ctrl_next.hide();
	}

	var oList = list.get(0);

	function move( prev ) {
		prev ? movePrev() : moveNext();
	};

	function movePrev() {
		if ( bAnimationLock ) {
			return;
		}

		bAnimationLock = true;

		list.animate( {"left" : "+=410px"}, 300, function(){
			if( oList.offsetLeft >= 0 ) {
				ctrl_prev.hide();
			}

			if( -oList.offsetLeft + 410 <= nRealW ) {
				ctrl_next.show();
			}

			bAnimationLock = false;
			//console.log(-oList.offsetLeft + 410);
		});
	};

	function moveNext() {
		if ( bAnimationLock ) {
			return;
		}

		bAnimationLock = true;

		list.animate( {"left" : "-=410px"}, 300, function(){
			if( oList.offsetLeft < 0 ) {
				ctrl_prev.show();
			}

			if( -oList.offsetLeft + 415 > nRealW ) {
				ctrl_next.hide();
			}

			bAnimationLock = false;

//			console.log(-oList.offsetLeft + 415);
		});
	};

	elements.click(function(e) {
		e.preventDefault();

		t = $(this);
		main.attr('src', t.attr('href'));
	});

	ctrl_prev.click(function(){
		move( 1 );
	});

	ctrl_next.click(function(){
		move();
	});
}


/**
 * Настойка форм
 */
function formsInit(){
	var f = $('form');

	// Удаление значения по-умолчанию из полей при получении фокуса
	var $inputs = f.find('input.def');
	$inputs.each(function(){
		
		this.subVal = false;
		var defValue = $(this).val();
		this.defval = $(this).val();
		$(this)
		.focus(function(){
			$(this).attr('value', '');
		})
		.blur(function(){
			if( !$(this).val().length ){
				$(this).val( defValue ).addClass('def');
			} else {
				$(this).removeClass('def');
				$(this).unbind('focus');
			}
		})
	});
	var mail = f.find('#email');
	//var phone = f.find('#phone');
	var captcha = f.find('#ct_captcha');
	
	f.bind('submit', function(e){

		if(mail[0]){
			var tm = mail.val();
			re = /[0-9a-z_]+@[0-9a-z_^.]+.[a-z]{2,3}/i;
			mail[0].subVal = !re.test(tm);		
		}
		
		if( captcha[0] ){
			var captchaCode = captcha.val();
			$.ajax({
				url: "/externals/securimage/check.php",
				type: "POST",
				data: {code : captchaCode},
				dataType: "json",
				success: function( JsonResult ){
					if ( JsonResult.check == 'false' ) {
						$('#ct_captcha_img').click();
						$('#ct_captcha').val = '';
						
						if(!$('#ct_captcha').hasClass('failed')){
							$('#ct_captcha').addClass('failed').parents('.shadowed_wrap:first').next().after('<p class="error">Неверно заполнено поле!</p>')				
						}						
					} 
				}
			});
			
		}
				

		// Не отправлять поля по-умолчанию
		$(this).find('input.def,textarea.def').each(function(){
			$(this).attr('value', '');
		});

		// Валидация перед отправкой
		$(this).find('.required').each(function(){
			
			if( !($(this).val() && !this.subVal) ){
			//	$(this).addClass('failed').trigger('focus');
				if(!$(this).hasClass('failed')){
					$(this).addClass('failed').parents('.shadowed_wrap:first').next().after('<p class="error">Неверно заполнено поле!</p>')				
				}

				
				$(this).parents('form').find('input.required,textarea.required').each(function(){
					if(!this.value)
					this.value = this.defval ? this.defval : '';
				})
				
				
				e.preventDefault();
				return false;
			}else{
				$(this).removeClass('failed').parents('fieldset:first').find('p.error').remove()
			}
		});
		
	});

//	$('select.psy').selectbox();



	// Archive
	var archForm = $("#archive");
		archForm.find('[type=submit]').hide()
	archForm.find(".psy").change(function(){
		// При изменении года блокируем месяц
		//console.log( this.id );

		if( this.id === "y" ) {
			archForm.find("#m").attr("disabled", true);
			//return false;
		}

		archForm.trigger("submit");
		//console.log( $(this) + ' changed' );
	});
	
/*old
	archForm.find("input.selectbox").change(function(){
		// При изменении года блокируем месяц
		//console.log( this.id );

		if( this.id === "y_input" ) {
			archForm.find("#m").attr("disabled", true);
			//return false;
		}

		archForm.trigger("submit");
		//console.log( $(this) + ' changed' );
	});
	
*/
}

/*
 * jQuery selectbox plugin
 *
 * Copyright (c) 2007 Sadri Sahraoui (brainfault.com)
 * Licensed under the GPL license:
 *   http://www.gnu.org/licenses/gpl.html
 *
 * Original code is inspired from Autocomplete plugin (http://www.dyve.net/jquery/?autocomplete)
 *
 * Customized by Webway IT Labs
 *
 * Version: 0.3.w.1
 */
/*
jQuery.fn.extend({
	selectbox: function(options) {
		return this.each(function() {
			new jQuery.SelectBox(this, options);
		});
	}
});

jQuery.SelectBox = function(selectobj, options) {
	var opt = options || {};
	opt.inputClass = opt.inputClass || "selectbox";
	opt.containerClass = opt.containerClass || "selectbox-wrapper";
	opt.controlClass = opt.controlClass || "selectbox-control";
	opt.hoverClass = opt.hoverClass || "selected";
	opt.activeClass = opt.activeClass || "active";
	opt.debug = opt.debug || false;

	var elm_id = selectobj.id;
	var elm_name = selectobj.name;
	var active = -1;
	var inFocus = false;
	var hasfocus = 0;

	// jquery object for select element
	var $select = $(selectobj);

	// jquery container object
	var $container = setupContainer(opt);

	// jquery input object
	var $input = setupInput(opt);

	// jquery controller object
	var $controller = setupController(opt);

	// replace select object with input[hidden] and apped container
	$select.after($container).after($controller).replaceWith($input);

	$controller.wrap('<div></div>');
	init();
	$container.append('<i class="t tr"></i><i class="t tl"></i><i class="b br"></i><i class="b bl"></i>').wrapInner('<div class="shadowed rc-white-cont"></div>');

	$controller
	.click(function(){
        if (!inFocus) {
			$container.toggle();
		}
	})
	.focus(function(){
	   if ($container.not(':visible')) {
	       inFocus = true;
	       $container.show();
	   }
	})
	.keydown(function(event) {
		switch(event.keyCode) {
			case 38: // up
				event.preventDefault();
				moveSelect(-1);
				break;
			case 40: // down
				event.preventDefault();
				moveSelect(1);
				break;
			//case 9:  // tab
			case 13: // return
				event.preventDefault(); // seems not working in mac !
				setCurrent();
				hideMe();
				break;
		}
	})
	.blur(function() {
		if ($container.is(':visible') && hasfocus > 0 ) {
			if(opt.debug) console.log('container visible and has focus')
		} else {
			hideMe();
		}
	});

	function hideMe() {
		hasfocus = 0;
		$container.hide();
	}

	function init(){
		$container.append( getSelectOptions() ).hide();
    }

	function setupContainer(options){
		var container = document.createElement("div");

		$container = $(container);
		$container.attr('id', elm_id+'_container');
		$container.addClass(options.containerClass);
		$container.addClass('shadowed_wrap');

		return $container;
	}

	function setupInput(options){
		var input = document.createElement("input");
		var $input = $(input);
		$input.attr("id", elm_id);
		$input.attr("name", elm_name);
		$input.attr("type", "hidden");
		$input.addClass(options.inputClass);
		$input.attr("autocomplete", "off");
		$input.attr("readonly", "readonly");

		return $input;
	}

	function setupController(options){
		var ctrl = document.createElement("a");
		ctrl = $(ctrl);
		ctrl.addClass(options.controlClass);
		ctrl.attr("tabIndex", $select.attr("tabIndex")); // "I" capital is important for ie

		return ctrl;
	}

	function moveSelect(step) {
		var lis = $("li a", $container);
		if (!lis) return;

		active += step;

		if (active < 0) {
			active = 0;
		} else if (active >= lis.size()) {
			active = lis.size() - 1;
		}

		lis.removeClass(opt.hoverClass);

		$(lis[active]).addClass(opt.hoverClass);
	}

	function setCurrent() {
		var li = $("li a."+opt.activeClass, $container).get(0);
		var el = li.id;

		$controller.text( $(li).html() );
		$input.val( el ).trigger("change");

		return true;
	}

	// select value
	function getCurrentSelected() {
		return $select.val();
	}

	// input value
	function getCurrentValue() {
		return $input.val();
	}

	function getSelectOptions() {
		var select_options = [];
		var ul = document.createElement('ul');
		$(ul).addClass('vert c');

		$select.children('option').each(function() {
			var li = document.createElement('li');
			var link = document.createElement('a');
			li.appendChild( link );

			link.setAttribute( 'id', $(this).val() );
			link.innerHTML = $(this).html();

			if( $(this).is(':selected') ){
				$input.val( $(this).val() );
				$controller.text( $(this).html() );

				$(link).addClass(opt.activeClass);
			}
			ul.appendChild( li );

			$(link).mouseover(function(event) {
				hasfocus = 1;
				if (opt.debug) console.log('out on : '+this.id);
				jQuery(event.target, $container).addClass(opt.hoverClass);
			})
			.mouseout(function(event) {
				hasfocus = -1;
				if (opt.debug) console.log('out on : '+this.id);
				jQuery(event.target, $container).removeClass(opt.hoverClass);
			})
			.click(function(event) {
				if (opt.debug) console.log('click on :'+this.id);
				$('a', $(ul)).removeClass(opt.activeClass);
				$(this).addClass(opt.activeClass);
				setCurrent();
				hideMe();
			});
		});

		return ul;
	}
};
*/

var FontController = (function() {
	var _controller = null,
	_bd = null,
	_state = null;

	SIZES = [
		"font-small",
		"font-normal",
		"font-big"
	];

	function _init() {
		_bd = $('#bd');
		_state = loadSetting() || _bd.attr('class');

		if( !_state ) {
			return false;
		}

		_controller = $('#hd .b-font_controller a');

		//setActive( _state );
		switchFont( _state );

		_controller.click(function(e){
			var self = $(this);

			if( !self.hasClass('active') ) {
				switchFont( self.attr('rel') );
			}

			return false;
		});
	};

	function saveSetting( value ) {
		$.cookie("font-size", value, {expires: 7, path: '/'});
	};

	function loadSetting() {
		var _f = $.cookie("font-size");
		return _f;
	};

	function setActive( state ) {
		var _a = _controller.removeClass("active").filter("[rel=" + state + "]").addClass('active');
		return _a;
	};

	function switchFont( state ) {
		_bd.attr('class', state);

		setActive( state );
		saveSetting( state );
	};

	return {
		Init : _init,

		Decrease : function() {
			switchFont( SIZES[0] );
		},

		Normalize : function() {
			switchFont( SIZES[1] );
		},

		Increase : function() {
			switchFont( SIZES[2] );
		}
	}
})();


/**
 * Подсветка активной области на карте
 */
var hightLighter = (function() {
	var options = {
		master : '.a-hightlight'
	};

	/*
		TODO:
		Конструкцию "$(self.attr('rel'))" надо бы вынести в константы,
		а не вызывать при каждом отображении/скрытии
	*/

	function _show() {
		var self = $(this);

		//$( self.attr('rel') ).fadeIn(200);
		$( self.attr('rel') ).show();
	};

	function _hide() {
		var self = $(this);

		//$( self.attr('rel') ).fadeOut(200);
		$( self.attr('rel') ).hide();
	};

	function _init() {
		$(function() {
			$(options.master)
				.bind('mouseover', _show)
				.bind('mouseout', _hide);
		});
	};

	_init();

	return {

	}
})();

/**
* firebug's console.log() wrapper
*/
function log( string ) {
	if( window.console ){
		window.console.log( string );
	}
}

/*form catalogue*/

function initFormCat(){
	var language = $.cookie("language");
	var strFilter = (language == 'english') ? 'Filter' : 'Фильтр';
	var strHide = (language == 'english') ? 'Hide' : 'Скрыть';

	$('#showfilter').addClass('hoverable').find('.c:first').html(strFilter).bind('click',toggleForm)
	
	var subfilter = $('#subfilter')

	initCatform()
	
	function toggleForm(){
		
		if(this.vis){
			this.vis = false
			subfilter.animate({marginTop:-subfilter[0].sh},'fast')
			this.innerHTML = strFilter
		}else{
			this.vis = true
			subfilter.animate({marginTop:-6},'fast')
			this.innerHTML = strHide
		}
	}
	function initCatform(){

		$('#f_q,#sabmit_q').bind('focus',addSabmit).bind('blur',removeSabmit)
		
		$('#catform').bind('submit',function(){
			
			if(!this.qAct){
				this.f_q.value = ''
				
			}else if(!this.f_q.value){
				return false;
			}
			
		})

	function addSabmit(){
		log($(this).parents('form')[0])
		$(this).parents('form')[0].qAct = true;
	}
	function removeSabmit(){
		$(this).parents('form')[0].qAct = false;
	}

	}	
}

/**
 * js redirect
 */
function changeUrl( sUrl ) {
    if ( sUrl != '' ) {
        location = sUrl; 
        return false;
    } else {
         return true;
    }
}
