String.prototype.trim=function(){
	return this.replace(/(^\s+)|(\s+$)/g,"");
}
dump=function(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;
	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";
	if(typeof(arr) == 'object') { //Array/Hashes/Objects
		for(var item in arr) {
			var value = arr[item];

			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}

reg={};
reg.config={};
reg.config.speed='800';
reg.config.fields={
	'type':{
		type:'radio'
	},
	/*'login':{
		type:'text',
		check:function(val){
			return val.match(/[^\s]+/);
		},
		error:'Введите желаемый логин (имя учётной записи).'
	},
	'password':{
		type:'text',
		check:function(val){
			return val.match(/^[^\s]{6,}$/);
		},
		error:'Пароль должен содержать не менее шести непробельных символов.'
	},
	'password_check':{
		type:'text',
		check:function(val){
			return val==reg.getField('password').val();
		},
		error:'Повторный ввод пароля не соответствует первому.',
		skip:true
	},*/
	'fio':{
		type:'text',
		check:function(val){
			return val.match(/[^\s]+/);
		},
		error:'Укажите ФИО.'
	},
	'company':{
		type:'text',
		check:function(val){
			if(reg.getField('type').val()=='fiz') return true;
			return val.match(/[^\s]+/);
		},
		error:'Укажите название компании.'
	},
	'region':{
		type:'select'
	},
	'address':{
		type:'text',
		check:function(val){
			return val.match(/[^\s]+/);
		},
		error:'Укажите адрес.'
	},
	'zkpo':{
		type:'text',
		check:function(val){
			if(reg.getField('type').val()=='fiz') return true;
			return val.match(/[\d]*/);
		},
		error:'Укажите код ЗКПО.'
	},
	'need_taxes_docs' : {
		type:'checkbox'
	},
	'inn':{
		type:'text',
		check:function(val){
			if(reg.getField('type').val()=='fiz') return true;
			return val.match(/[\d]*/);
		},
		error:'Укажите ИНН.'
	},
	'svidetelstvo':{
		type:'text',
		check:function(val){
			if(reg.getField('type').val()=='fiz') return true;
			return val.match(/[^\s]*/);
		},
		error:'Укажите номер свидетельства.'
	},
	'jur_address':{
		type:'text'
	},
	'index':{
		type:'text'
	},
	'question' :{
		type:'text'
	},
	/*'fax':{
		type:'text'
	},*/
	'email':{
		type:'text',
		check:function(val){
			return val.match(/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/);
		},
		error:'Адрес электронной почты не соответствует стандартному формату.'
	},
	'period':{
		type:'select'
	},
	/*'begin][day':{
		type:'select',
		check:function(val){
			return val>0;
		},
		error:'Необходимо выбрать число начала подписки.'
	},*/
	'begin][month':{
		type:'select',
		check:function(val){
			return val>0;
		},
		error:'Необходимо выбрать месяц начала подписки.'
	},
	'begin][year':{
		type:'select',
		check:function(val){
			return val>0;
		},
		error:'Необходимо выбрать год начала подписки.'
	}
};
reg.getField=function(key){
	switch(reg.config.fields[key].type){
		case'text':		return $('#regForm input[name="reg['+key+']"]');
		case'radio':	return $('#regForm input:radio[name="reg['+key+']"]:checked');
		case'select':	return $('#regForm select[name="reg['+key+']"] option:selected');
		case'checkbox':	return $('#regForm input[name="reg['+key+']"]:checked');

	}
}
reg.focusField=function(key){
	$('#regForm *[name="reg['+key+']"]').focus();
}
reg.getData=function(){
	var data={},key,value;
	for(key in reg.config.fields){
		value=reg.getField(key).val();
		if(!value) value='';
		if(reg.config.fields[key].check && !reg.config.fields[key].check(value)){
			if(reg.config.fields[key].error){
				alert(reg.config.fields[key].error);
			}
			reg.focusField(key);
			return null;
		}
		if(reg.config.fields[key].skip) continue;
		data[key]=value;
	}
	return data;
}
reg.showForm=function(method){

	var _allowMethods = ['form', 'ok', 'error'];

	if (!(typeof method != 'undefined' && method == 'registry')){
		//$("#new-pdf-bg, #new-pdf-cont").fadeOut(reg.config.speed);
		//$(".popup-layer").fadeIn(reg.config.speed);
		$(".popup-layer").css('display', 'block');
		portal.hash.set('payment=form');
	}
	if (typeof method == 'undefined'){
		$.scrollTo('.popup-layer .inner', 500)//document.location = '#close';
	} else {
		
		for (var i=0,ml = _allowMethods.length; i<ml ; i++){
			if (method == _allowMethods[i])
				$('#p-inner-'+_allowMethods[i]).css('display', 'block');
			else
				$('#p-inner-'+_allowMethods[i]).css('display', 'none');

		}		
	}
	
};
reg.sendForm=function(reg_type){
	var data=reg.getData();
	if(data){
		data['action_name']='register_subscriber';
		showLoader('show');
		$.post('/json/',data,function(resp){			
			eval("var test = "+resp);						
			var user_id = test.id;		
			//var orderid = test.orderid;			
			var id = test.id;
			var period=test.period;			
			if(resp.error){
				showLoader();
				alert("Возникла ошибка:\n"+resp.error);
			}else{
				if (reg_type=='b-offline-pay'){
					document.location.href = '#close';
					$('#p-inner-form').html('<p>Вы успешно отправили заявку на получение доступа к PDF-версии газеты «Дело».</p><p>В ближайшее время на ваш e-mail будет направлен счет для оплаты данной услуги.</p>');
				} else {					
					//var rpurl = "http://rp.delo.ua/inc/subscriber.php?id="+orderid;	
					var rpurl = "http://delo.ua/subscriber/newsubscribe/?id="+id+"&period="+period;	
					document.location.href=rpurl;				
					//$('#regForm').unbind('submit');					
					//$('#regForm').attr('action', rpurl);					
					//$('#regForm').submit();					
				}
			}
		},function(resp){
			showLoader();
			alert("Возникла ошибка:\n"+dump(resp));
		});
	}
}

reg.close = function(){
	$('.popup-layer').css({'display' : 'none'});
	portal.hash.clear();
}

showLoader=function(mode){
	if (typeof mode != 'undefined' && mode == 'show'){
		$('#loader').css({'display' : ''});
	} else {
		$('#loader').css({'display' : 'none'});
	}
}

dc={};

/* Config */
dc.config={
	data:{
	},
	set:function(key,value){
		dc.config.data[key]=value;
	},
	get:function(key){
		return dc.config.data[key];
	}
};

/* Params */
dc.config.set('slide-speed','500');

/* Ajax */
dc.ajax={};
dc.ajax.post=function(action_name,data,cbWin,cbFail){
	showLoader('show');
	data['action_name']=action_name;
	$.post('/json/',data,function(resp){
		resp=eval('('+resp+')');
		if(resp.error){
			showLoader();
			if(cbFail){
				cbFail(resp);
			}else{
				alert(resp.error);
			}
		}else{
			showLoader();
			if(cbWin){
				cbWin(resp);
			}
		}
	},function(resp){
		showLoader();
		if(cbFail){
			cbFail(resp);
		}else{
			alert(dump(resp));
		}
	});
}

/* Form */
jQuery.fn.lengthHTML = function(){
	var fake = $('<span></span>').html(this.val());
	var syms = fake.text().length;
	fake.remove();
	return syms;
}
dc.form={
	all:{}
};
dc.form.init=function(alias){
	var o=$("form.form_"+alias);
	dc.form.all[alias]=o;
	o.inputs={};
	$(".form_"+alias,o).each(function(){
		var inp=this;
		if($(inp).data('__initialized') == 'ok') return;
		$(inp).data('__initialized', 'ok');
		o.inputs[$(inp).attr('name')]=inp;
		$(inp).attr("name",alias+$(inp).attr("name").replace(/^([^\[]+)(.*)$/,'[$1]$2'));
		inp.focusDefault=function(){
			if($(inp).attr("default") && $(inp).val()==$(inp).attr("default")){
				$(inp).val("");
			}
		}
		inp.blurDefault=function(){
			if($(inp).attr("default") && $(inp).val()==""){
				$(inp).val($(inp).attr("default"));
			}
		}
		inp.blurDefault();
		inp.show={
			focus:function(){
				$(inp).css('color','#000');
				$(inp).css('background','#fff');
			},
			ok:function(){
				$(inp).css('color','#888');
				$(inp).css('background','#fff');
			},
			warning:function(){
				$(inp).css('color','#000');
				$(inp).css('background','yellow');
			},
			error:function(){
				$(inp).css('color','#000');
				$(inp).css('background','#f88');
			}
		};
		inp.validate=function(){
			inp.focusDefault();
			var result;
			if(1 * $(inp).attr('maxlength') > 0 && $(inp).lengthHTML() > 1 * $(inp).attr('maxlength')){
				result = false;
			}else if($(inp).attr('validator') == undefined || $(inp).attr('validator') == ''){
				result = true;
			}else{
				var validator=new RegExp('^'+$(inp).attr('validator')+'$','i');
				result = validator.test($(inp).val());
			}
			inp.blurDefault();
			return result;
		}
		$(inp).blur(function(){
			if(inp.validate()){
				inp.show.ok();
			}else{
				inp.show.warning();
			}
			inp.blurDefault();
		});
		$(inp).focus(function(){
			inp.focusDefault();
			inp.show.focus();
		});
	});
	o.submit(function(){
		var res=true,first_focus;
		for(var al in o.inputs){
			var inp=o.inputs[al];
			if(inp.validate()){
				inp.show.ok();
			}else{
				if(first_focus){
					inp.show.error();
				}else{
					first_focus=inp;
					inp.focus();
				}
				res=false;
			}
		}
		return res;
	});
}

// Text counter
$(document).ready(function(){
	$('textarea[textCounter=auto], input[type=text][textCounter=auto]').each(function(){
		$('<span class="textCounter"></span>').insertAfter(this);
	});
	$('textarea + .textCounter, input[type=text] + .textCounter').each(function(){
		var o = $(this);
		var txt = o.prev();
		var style_ok = {font:'normal 10px/15px "Courier"',color:'#ccc'};
		var style_wrn = {font:'normal 10px/15px "Courier"',color:'#f00'};
		o.wrap($('<span>&uarr;&nbsp;</span>').css(style_ok)).css(style_ok);
		var update = function(){
			syms = txt.lengthHTML();
			if(txt.attr('maxlength')){
				syms = 1 * txt.attr('maxlength') - syms;
				if(syms < 0){
					o.css(style_wrn);
				}else{
					o.css(style_ok);
				}
			}
			o.text(syms);
		}
		update();
		txt.keyup(function(){
			update();
		});
	});
});

/* Captcha */
dc.captcha=function(question,allow_cb,deny_cb){
	var o=this;
	o.decodeQuestion=function(hash){
		return hash.substr(4,1)+hash.substr(9,1)+hash.substr(14,1)+hash.substr(19,1);
	}
	o.question=o.decodeQuestion(question);
	o.allow_cb=allow_cb;
	o.deny_cb=deny_cb;
	o.check = function(val, cbWin, cbFail){
		dc.ajax.post('captcha-check', {answer: val}, cbWin, cbFail);
		return false;
	}
	o.getUI=function(){
		var gui=$('<div class="dc_captcha">Введите: </div>');
		$('<span class="question">'+o.question+'</span>').appendTo(gui);
		$('<input type="text" style="width:50px; margin:0 8px;" />').keypress(function(event){
			if(event.keyCode == 13){
				$('input[type=button]',gui).click();
			}
		}).appendTo(gui);
		$('<input type="button" value="&rarr;" />').click(function(){
			var btn=$(this);
			var inp=$('input[type=text]',gui),answer=inp.val();
			inp.val('');
			if(!answer.length){
				inp.focus();
				return false;
			}
			btn.attr('disabled','disabled');
			o.check(answer,function(){
				if(o.allow_cb) o.allow_cb();
			},function(resp){
				btn.attr('disabled','');
				$('.question',gui).text(o.decodeQuestion(resp.question));
				if(o.deny_cb) o.deny_cb(resp);
			});
		}).appendTo(gui);
		return gui;
	}
}

/** connect events to the object **/
/* add by goshi */
$(document).ready(function(){

	if ($('.b-payments-block').length > 0){
		$('.b-payments-block img, .b-payments-block span').click(function (){
			reg.showForm()});
	
	}
	
	// checking for input hash
	if (document.location.hash){
		var result = portal.hash.parse();
 		if (result['id'] || result['url']){
 			var popup = new oPopupLayer();
 			popup.create();
 			popup.addParams({'insert_callback' : function (){post_loading(popup)}});
 			
 			portal.ajax.load(null, result, popup.insert);
 		} else if ('payment' in result){
 			reg.showForm(result['payment']);
 		} else if ('print' in result){
 			portal.print();
 		}
	}
	
	
	// patching main menu
	$('.b-navigation > li').bind('mouseover', function(){
		if (!$(this).hasClass('here')){
			$('.b-navigation .subnav-active').css('display', 'none');
			$('.b-navigation > li.here').addClass('antihere');
		}});
	
	$('.b-navigation > li').bind('mouseout', function(){
		if (!$(this).hasClass('here')){
			$('.b-navigation .subnav-active').css('display', 'block');
			$('.b-navigation > li.antihere').removeClass('antihere');
		}});
	
	
});

/* Utils */
$(document).ready(function(){
	dc.attrSetupable = function(object, attr){
		return $(object).attr(attr) || dc.config.get(attr);
	}
});

/* Slider */
$(document).ready(function(){
	dc.config.set('slider_interval',2500);
	
	$('.dc_slider').each(function(){
		
		// bootstrap
		var slider=this;
		var slides_margin = 3;
		$('.slides_wrp',slider).css({position:'relative', overflow:'hidden'});
		$('.slides_inc',slider).css({position:'absolute', left:'0px'});
		var slider_width = $('.slides_wrp',slider).width();
		var slider_height = 0;
		var slides = $('.slide',slider).get();
		(function(){
			var i, slide;
			for(i in slides){
				slide = $(slides[i]);
				slide.css({
					position:	'absolute',
					left:		i*(slider_width+slides_margin)+'px',
					top:		'0px',
					width:		slider_width+'px'
				});
				slider_height = Math.max(slider_height, slide.height());
			}
			$('.slides_wrp, .slides_inc, .slide',slider).css('height', slider_height+'px');
		})();

		if(slides.length < 2){
			$('.controls .control').hide(0);

		}else{
			// basic
			var slideMoveTo=function(leftpos){
				$('.slides_inc', slider).animate({left:leftpos}, dc.config.get('slide-speed'));
			}
			// animation
			var cur_slide=0;
			var slideChangeTo=function(slide_num){
				cur_slide=slide_num;
				slideMoveTo('-'+(cur_slide*(slider_width+slides_margin))+'px');
				autoRestart();
			}
			var slidePrev=function(){
				slideChangeTo((cur_slide > 0) ? (cur_slide-1) : (slides.length-1));
			}
			var slideNext=function(){
				slideChangeTo((cur_slide < slides.length-1) ? (cur_slide+1) : 0);
			}
			// automation
			var timer=null;
			var autoOn=function(){
				var period = 1 * dc.attrSetupable(slider, 'slider_interval');
				timer = setTimeout(slideNext, period);
			}
			var autoOff=function(){
				if(timer){
					clearTimeout(timer);
				}
			}
			var autoRestart=function(){
				autoOff();
				autoOn();
			}
			// events
			$('.slides_wrp',slider).mouseenter(autoOff);
			$('.slides_wrp',slider).mouseleave(autoOn);
			$('.controls .prev').click(slidePrev);
			$('.controls .next').click(slideNext);
			// start
			autoOn();
		}
	});
});

/* Comments */
dc.config.set('comments-initial-number',5);
dc.initCommentsWidget = function(widget){

	// bootstrap
	var loader = $('<div class="dc_loader"></div>');
	$(widget).empty();
	
	widget.getCommentMarkup = function(comment){
		return $('<div class="comment"></div>').append(
			$('<div class="author"></div>').append(
				$('<span></span>').text(comment.author)
			).append(
				$('<span> пишет </span>')
			).append(
				$('<span></span>').text(comment.date_created)
			)
		).append(
			$('<div class="text"></div>').text(comment.text)
		);
	}

	widget.post = function(){
		var author = $('*[name="author"]', widget.form);
		var text = $('*[name="text"]', widget.form);
		if(text.val() == ''){
			alert('Не забудьте высказаться!');
			text.focus();
			return;
		}
		var button = $('input[name="submit"]', widget.form);
		button.attr('disabled','disabled');
		loader.insertBefore(widget.form).fadeIn();
		dc.ajax.post('post-comment',{
			box: $(widget).attr('box'),
			author: author.val(),
			text: text.val(),
			url: document.location.href
		},function(resp){
			button.attr('disabled','');
			text.val('');
			widget.getCommentMarkup(resp.comment).insertBefore(loader);
			loader.fadeOut(dc.config.get('slide-speed'), function(){
				loader.remove();
			});
		},function(resp){
			button.attr('disabled','');
			loader.fadeOut(dc.config.get('slide-speed'), function(){
				loader.remove();
			});
		});
	};
	
	var author_name = $(widget).attr('author') || 'некто';
	
	widget.form = $('<form></form>').append(
		$('<div class="label">Представьтесь: </div>')
	).append(
		$('<input type="text" name="author"/>').val(author_name)
	).append(
		$('<div class="label">Ваше сообщение: </div>')
	).append(
		$('<textarea name="text"></textarea>').keypress(function(event){
			if(event.keyCode == 13){
				widget.post();
			}
		})
	).append(
		$('<input type="button" name="submit" value="Отправить"/>').click(widget.post)
	);
	widget.form.appendTo(widget);

	widget.load = function(skip){
		var number = $(widget).attr('initial_number') || dc.config.get('comments-initial-number');
		loader.prependTo(widget).fadeIn(dc.config.get('slide-speed'));
		$('input.read_previous', widget).remove();
		dc.ajax.post('get-comments',{
			box: 	$(widget).attr('box'),
			skip:   skip,
			number: number
		},function(resp){
			loader.fadeOut(dc.config.get('slide-speed'), function(){
				loader.remove();
			});
			var i, comment;
			for(i in resp.comments){
				widget.getCommentMarkup(resp.comments[i]).prependTo(widget);
			}
			if(1*resp.left_more > 0){
				$('<input type="button" class="read_previous" value="Показать '+((1*resp.left_more > 1*number) ? ('ещё ' + number + ' из ' + resp.left_more_text) : 'все ответы')+'"/>').click(function(){
					widget.load(1*skip + 1*number);
				}).prependTo(widget);
			}
		},function(resp){
			loader.fadeOut(dc.config.get('slide-speed'), function(){
				loader.remove();
			});
		});
	}
	
	widget.load(0);
}
/*
$(document).ready(function(){
	(function(dc){
		$('.widget-comments').each(function(){
			dc.initCommentsWidget(this);
		});
	})(dc);
});
*/ 

/* PR */
dc.pr = {};
dc.pr.sendFriendTemplates = {
	'twitter'		: ['http://twitter.com/home?status=', ['message'], ' ', ['url']],
	'facebook'		: ['http://www.facebook.com/share.php?u=', ['url']],
	'livejournal'	: ['http://www.livejournal.com/update.bml?subject=', ['message'], '&event=', ['url']],
	'googlebuzz'	: ['http://www.google.com/reader/link?url=', ['url'], '&title=', ['title'], '&srcURL=', ['srcURL'], '&srcTitle=', ['srcTitle']],
	'vkontakte'		: ['http://vkontakte.ru/share.php?url=', ['url']],
	'linkedin'		: ['http://www.linkedin.com/shareArticle?mini=true&url=', ['url'], '&title=', ['title'], '&source=', ['source'], '&summary=', ['summary']]
};
dc.pr.sendFriend = function(params, mode){
	var token, content = '';
	for(var i in dc.pr.sendFriendTemplates[mode]){
		token = dc.pr.sendFriendTemplates[mode][i];
		content += (typeof(token) == 'object') ? (
			(typeof(params[token[0]]) == 'undefined') ? ('*' + token[0] + '*') : params[token[0]]
		) : token;
	}
	window.open(content, '_blank').focus();
	return false;
}
$(document).ready(function(){
	$('.pr-bar .blogger-repost').click(function(){
		var pos = $(this).parent().offset();
		var scroll_top = $(document).scrollTop();
		var popup = $('.popup-dialog', $(this).parent()).clone();
		popup.appendTo(document.body);
		popup.dialog({
			draggable: false,
			resizable: false,
			position: [pos.left - 13, pos.top - scroll_top - 10]
		});
	});
});

/* Event Registration */
$(document).ready(function(){
	$('.event_registration').each(function(){
		var event_registration=this;
		$('input[type="text"]',event_registration).each(function(){
			var o=$(this);
			o.data('init-val',o.val());
			o.focus(function(){
				if(o.val() == o.data('init-val')){
					o.val('');
				}
			});
			o.blur(function(){
				if(o.val() == ''){
					o.val(o.data('init-val'));
				}
			});
		});
		$('form',event_registration).submit(function(){
			var fld,inputs=$('input[type="text"], input[type="hidden"]',event_registration).get(),i,data={};
			for(i in inputs){
				fld=$(inputs[i]);
				if(fld.data('init-val') && fld.val() == fld.data('init-val')){
					fld.focus();
					return false;
				}
				data[fld.attr('name')] = fld.val();
			}
			/*fld=$('*[name="event_registration[field]"]',event_registration);
			if($('option[selected]',fld).val() == '*'){
				$(fld).focus();
				return false;
			}
			data[fld.attr('name')] = $('option[selected]',fld).val();
			*/
			fld=$('*[name="agree"]',event_registration);
			if(!fld.attr('checked')){
				$(fld).focus();
				return false;
			}
			$('.submit',event_registration).attr('disabled','disabled');
			dc.ajax.post('event_registration', data, function(resp){
				var speed = dc.config.get('slide-speed');
				$('.submit',event_registration).attr('disabled','');
				$('form',event_registration).fadeOut(speed, function(){
					$('.success',event_registration).fadeIn(speed);
				});
			},function(resp){
				alert(resp.error);
			});
			return false;
		});
	});
});

/* Default value inputs */
$(document).ready(function(){
	$('*[default-value]').each(function(){
		var o=this;
		$(o).val($(o).attr('default-value')).blur(function(){
			if($(o).val() == ''){
				$(o).val($(o).attr('default-value'));
			}
		}).focus(function(){
			if($(o).val() == $(o).attr('default-value')){
				$(o).val('');
			}
		});
	});
});