function toggleBlock() 
{
	var container = $( this );
	while ( container && ! container.find( '.cut' ).length && ! container.is('.info-block') ) {
		container = container.parent();	
	}
	if ( container ) 
	{
		var jCut = container.find( '.cut' );
		jCut.toggle( 'normal' );
		var jTogArr = container.find( '.toggle-arrow' );
		jTogArr.toggle();
	}
}

function screenShotClick( evt )
{
	var imgSrc = this.getAttribute( 'src' ).replace( '.', 'f.' );
	var jImgWindow = $( '#imgWindow' );
	if ( !jImgWindow.length ) {
		jImgWindow = $('<div id="imgWindow"></div>').appendTo( document.body );
	}
	
	var jModalOverlay = $( '#modalOverlay' );
	if ( !jModalOverlay.length ) {
		jModalOverlay = $('<div id="modalOverlay"></div>').appendTo( document.body );
	}
	
	jImgWindow.html( '<img src="'+imgSrc+'" alt="" />' ).show( 'normal' );
	jModalOverlay.show();
	
	evt.stopPropagation();
	$(document).one( 'click', function(){ jImgWindow.hide(); jModalOverlay.hide(); } );
}

function bumsToggleBlocks( Ev )
{
	for ( var i = 0; i < Ev.data.length; i++ ) {
		$( Ev.data[i] ).toggle();		
	}
}

function startCrmPreview()
{
	$( '<div id="crmPreviewImages" style="display:none"></div>' )
		.appendTo( document.body )
		.load( '/i/crm-preview/images.html', function() {
			$( '#crmPreviewImages a[rel=fancybox]' ).fancybox( {
				'titlePosition' 	: 'inside',
				'titleFormat'		: function( title, currentArray, currentIndex, currentOpts ) {
					return (currentIndex + 1) + ' / ' + currentArray.length;
				}
			} );
			$( '#crmPreviewImages a[rel=fancybox]' ).first().click();
		} );	
}

function promoRegisterFormErrorHanlder( Field ) 
{	
	var ers = Field.errors;					
	var errCell = Field.jEl.parents( 'div.p' ).find( 'div.c-error' );
	if ( ers.length ) 
	{
		errCell.html( ers[0].message );
		errCell.attr( 'type', ers[0].type );
		errCell.removeClass( 'normal' );
		if ( Field.inputName != 'captcha' || ers[0].type != 'normal' ) {
			errCell.addClass( ers[0].type );	
		}						
	}
	else 
	{
		if ( Field.inputName != 'captcha' ) 
		{
			errCell.html( '' );
			var class2Remove = errCell.attr( 'type' ) ? errCell.attr( 'type' ) : '';
			errCell.removeClass( class2Remove );						
			errCell.addClass( 'normal' );
		}
		if ( Field.inputName == 'model[AccountName]' ) { 
			promoCheckAccountWithSuchFieldValExists( 'AccountName' );
		}
		if ( Field.inputName == 'model[Email]' ) { 
			promoCheckAccountWithSuchFieldValExists( 'Email' );
		}
	}
}

//{{{ method_name
/**
 * Проверяет существование аккаунта с таким значением данного поля
 * (например, что имя test.{domain} занято, или что на электропочту какую-нибудь уже зарегили аккаунт) 
 * @since  28.08.2008 11:06:06
 * @author jikk
 */
function promoCheckAccountWithSuchFieldValExists( FieldName )
{
	var jInp = $('#registerForm input[name="model[' + FieldName + ']"]');
	var fVal = jInp.val();
	if ( fVal && $.trim( fVal ) )
	{						
		jInp.addClass( 'progress' );		
		$.postJSON( 
			sdfUrlTo( 'PromoSiteC_Service', 'checkAccountExistance', '.json' ), 
			{field: FieldName, fVal: fVal}, 
						function( json ) 
						{											
							var errCell = jInp.parents( 'div.p' ).find( 'div.c-error' );
							if ( json.errorMessage ) 
							{												
								errCell.removeClass( 'normal' );
								errCell.addClass( 'error' );
								errCell.html( json.errorMessage );
							}
							else
							{
								errCell.removeClass( 'error' );
								errCell.addClass( 'normal' );												
							}
							jInp.removeClass( 'progress' );
						} 
		);
	}
}
//===========================================================================}}}
function promoInitRegistrationForm( OForm ) 
{
	$('#registerForm input[name="model[AccountName]"]')
		.bindCheck( 'blur', [sdfValidatorNotEmpty, sdfLatinSmallLettersValidator], promoRegisterFormErrorHanlder, OForm, false );  			
	$('#registerForm input[name="model[FirstName]"]')
		.bindCheck( 'blur', sdfValidatorNotEmpty, promoRegisterFormErrorHanlder, OForm, false );
	$('#registerForm input[name="model[LastName]"]')
		.bindCheck( 'blur', sdfValidatorNotEmpty, promoRegisterFormErrorHanlder, OForm, false );
	$('#registerForm input[name="model[Email]"]')
		.bindCheck( 'blur', [sdfValidatorNotEmpty,sdfEmailValidator], promoRegisterFormErrorHanlder, OForm, false );
	$('#registerForm input[name="captcha"]')
		.bindCheck( 'blur', [], promoRegisterFormErrorHanlder, OForm, false );
	$('#registerForm input[name="campaignCode"]')
		.bindCheck( 'blur', promoCampaignCodeValidator, promoRegisterFormErrorHanlder, OForm, false );
	$('#registerForm input[name="model[Phone]"]')
		.bindCheck( 'blur', [], promoRegisterFormErrorHanlder, OForm, false );
}
//===========================================================================}}}
//{{{ promoRegistrationProductClick
/**
* Переключение продукта в регистрации
* @since  16.03.2009 14:44:44
* @author jikk
* @param Evt событие
*/
function promoRegistrationProductClick( Evt ) 
{
	var me = null;	
	if ( typeof Evt == 'undefined' ) 
	{
	// get anchor from url
		var product = unescape( self.document.location.hash.substring(1) );
		if ( product != 'project' && product != 'task' && product != 'intranet' ) {
			product = 'task';
		}		 
		me = $( '#productLine div[type="' + product + '"]' );
	}
	else {
		me = $( this );
	}
	var $cont = me.parents( 'div.c1' );
	var currentProduct = $cont.attr( 'product' );
	var selectedProduct = me.attr( 'type' );
	$cont.removeClass( currentProduct ).addClass( selectedProduct );
	$cont.attr( 'product', selectedProduct );	
	me.parents( '.product-line' ).find( '.j-prd-block' ).removeClass( 'sel' );
	me.parents( '.j-prd-block' ).addClass( 'sel' );
	$( '#product' ).val( me.attr( 'type' ) );
}
//===========================================================================}}}
//{{{ promoUpdateUserStatus
/**
 * Обновляет статус залогиненности пользователя (в правом верхнем углу)
 * @since  27.08.2008 11:57:30
 * @author jikk
 */
function promoUpdateUserStatus()
{
	$( '#userStatus' ).load( sdfUrlTo('PromoSiteC_Private', 'userStatus'), {url:document.location.href} );
}
//===========================================================================}}}
//{{{ promoReferalRegistrationPreValidatorCheck
/**
 * Предварительная валидация поля в регистрации реферала
 * @since  19.02.2010 14:16:43
 * @author barb
 * @param SdfField Field
 */
function promoReferalRegistrationPreValidatorCheck( Field )
{
	return Field.inputName != 'model[AccountName]' || $('#accountNameReg').is(':visible');
}
//===========================================================================}}}
//{{{ promoCampaignCodeValidator
/**
 * Метод проверяет, что поле является валидным промо-кодом
 * @since  30.11.2007 14:02:17
 * @author jikk
 */
function promoCampaignCodeValidator( Field )
{
	var val = Field.val();
	if ( typeof val == 'string' && val )
	{
		if ( ! /^([0-9]{10})$/.test(val) ) {
			Field.addError( 'promo code must contain 10 digits' );
		}
	}
}
//===========================================================================}}}
//{{{ promoRegisterSuccessCounter
/**
 * Метод для обратного отсчета редиректа после успешной регистрации
 * @since  20.07.2010 20:22:17
 * @author barb
 */
function promoRegisterSuccessCounter( RedirectUrl, Time )
{
	$('#redirectTimeout').html( Time / 1000 );
	window.setTimeout( function(){ location.href = RedirectUrl; }, Time );
	window.setInterval( function() { Time = Time - 1000; $('#redirectTimeout').html( Time / 1000 ) }, 1000 );
	
}
//===========================================================================}}}