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;
}
showLoader=function(mode){
	if (typeof mode != 'undefined' && mode == 'show'){
		$('#loader').css({'display' : ''});
	} else {
		$('#loader').css({'display' : 'none'});
	}
}

dc={};

$(document).ready(function(){
	(function(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));
				}
			});
		}

	})(dc);
});

/* New Blink */
$(document).ready(function(){
	(function(dc){
		
		dc.config.set('newblink-select','sup.new');
		dc.config.set('newblink-interval',800);
		
		var alter=function(func){
			$(dc.config.get('newblink-select')).each(function(){
				func(this);
			});
		};
		
		var visible=false;
		
		alter(function(tag){
			$(tag).css({display:'inline-block',verticalAlign:'bottom',position:'relative',top:'-4px',width:'30px',height:'16px',background:'url(/img/ico_new_half.png)'});//text('new!').css({color:'#FFF',background:'#47CC00',padding:'1px 2px'});
		});
		
		/*setInterval(function(){
			visible=!visible;
			alter(function(tag){
				$(tag).css('visibility',(visible?'visible':'hidden'));
			});
		},dc.config.get('newblink-interval'));*/
		
	})(dc);
});

/* Slider */
$(document).ready(function(){
	(function(dc){
		
		dc.config.set('slider-interval',2500);
		
		$('.dc_slider').each(function(){
			
			// bootstrap
			var slider=this;
			$('.slides_wrp',slider).css({position:'relative',overflow:'hidden'});
			$('.slides_inc',slider).css({position:'relative',left:'0px'});
			var slider_width=$('.slides_wrp',slider).width();
			var slides=$('.slide',slider).get();
			(function(){
				var slider_height=0;
				var i;
				for(i in slides){
					$(slides[i]).css({
						position:'absolute',
						left:i*slider_width+'px',
						top:'0px'
					});
					slider_height=Math.max(slider_height,$(slides[i]).height());
				}
				$('.slides_wrp',slider).css('height',slider_height+'px');
			})();
			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)+'px');
			}
			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);
			}
			var interval;
			var autoOn=function(){
				interval=setInterval(slideNext, $(slider).attr('slider-interval') || dc.config.get('slider-interval'));
			}
			var autoOff=function(){
				clearInterval(interval);
			}
			var autoRestart=function(){
				autoOff();
				autoOn();
			}
			
			// start
			$('.slides_wrp',slider).mouseenter(autoOff);
			$('.slides_wrp',slider).mouseleave(autoOn);
			$('.controls .prev').click(function(){
				slidePrev();
				autoRestart();
			});
			$('.controls .next').click(function(){
				slideNext();
				autoRestart();
			});
			autoOn();
		});
		
	})(dc);
});

/* Registration */
$(document).ready(function(){
	(function(dc){
		
		dc.reg={};
		(function(reg){
			
			reg.form=$('#regForm');
			
			reg.fields={
				'type':{
					type:'radio'
				},
				'email':{
					type:'text',
					check:function(val){
						return val.match(/^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/);
					},
					error:'Адрес электронной почты не соответствует стандартному формату.'
				},
				'fio':{
					type:'text',
					check:function(val){
						return val.match(/[^\s]+/);
					},
					error:'Укажите ФИО.'
				},
				'company':{
					type:'text',
					check:function(val){
						if(reg.getInput('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.getInput('type').val()=='fiz') return true;
						return val.match(/[\d]+/);
					},
					error:'Укажите код ЗКПО.'
				},
				'inn':{
					type:'text',
					check:function(val){
						if(reg.getInput('type').val()=='fiz') return true;
						return val.match(/[\d]+/);
					},
					error:'Укажите ИНН.'
				},
				'svidetelstvo':{
					type:'text',
					check:function(val){
						if(reg.getInput('type').val()=='fiz') return true;
						return val.match(/[^\s]+/);
					},
					error:'Укажите номер свидетельства.'
				},
				'phone':{
					type:'text',
					check:function(val){
						return val.match(/[^\s]+/);
					},
					error:'Укажите телефон.'
				},
				'fax':{
					type:'text'
				},
				'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.getInput=function(key){
				switch(reg.fields[key].type){
					case'text':		return $('input[name="reg['+key+']"]',reg.form);
					case'radio':	return $('input:radio[name="reg['+key+']"]:checked',reg.form);
					case'select':	return $('select[name="reg['+key+']"] option:selected',reg.form);
				}
			}
			
			reg.focusInput=function(key){
				$('*[name="reg['+key+']"]',reg.form).focus();
			}
			
			reg.getData=function(){
				var data={},key,value;
				for(key in reg.fields){
					value=reg.getInput(key).val();
					if(!value) value='';
					if(reg.fields[key].check && !reg.fields[key].check(value)){
						if(reg.fields[key].error){
							alert(reg.fields[key].error);
						}
						reg.focusInput(key);
						return null;
					}
					if(reg.fields[key].skip) continue;
					data[key]=value;
				}
				return data;
			}
			
			reg.showForm=function(){
				$("#new-pdf-bg, #new-pdf-cont").fadeOut(dc.config.get('slide-speed'));
				$(".popup-layer").fadeIn(dc.config.get('slide-speed'));
				document.location = '#close';
			}
			
			reg.sendForm=function(){
				var data=reg.getData();
				if(data){
					dc.ajax.post('register_subscriber',data,function(){
						document.location = '#close';
						$('#inner-form').html('<p>Вы успешно отправили заявку на получение доступа к PDF-версии «ИнвестГазеты».</p><p>В ближайшее время на ваш e-mail будет направлен счет для оплаты данной услуги.</p>');
					},function(resp){
						alert(resp.error);
					});
				}
			}

			reg.login=function(email,pass,cbWin){
				dc.ajax.post('login',{
					email	: email,
					pass	: MD5(pass)
				},function(resp){
					$('#json_login_form').css({display:'none'});		
					if(cbWin) cbWin();
				},function(resp){
					$('#messagediv').html(resp.error);
				});
				return false;	
			}

			reg.getPdf=function(issue){
				document.location.href="/json/?action_name=get_pdf&issue_id="+issue;
			}

		})(dc.reg);
	})(dc);
});

/* Poll */
$(document).ready(function(){
	$('.dc_vote').each(function(){
		var poll = this;
		var canvas = $('.workarea',poll);
		canvas.addClass('poll');
		$('.answer',canvas).each(function(){
			var answer = this;
			$(answer).click(function(){
				poll.sendAnswer($(answer).attr('question'), $(answer).attr('answer'));
			});
		});
		poll.sendAnswer = function(question, answer){
			showLoader('show');
			dc.ajax.post('poll_answer',{
				question:	question,
				answer:		answer
			},function(resp){
				showLoader();
				poll.showResult(resp.result);
				if(resp.message){
					$('<p></p>').text(resp.message).appendTo(canvas);
				}
				$('<p></p>').text('Всего проголосовало: ' + resp.all_count + '.').appendTo(canvas);
			},function(resp){
				showLoader();
				alert("Возникла ошибка:\n" + resp.error);
			});
		}
		poll.getResultAnswerMarkup = function(answer){
			return $('<div></div>').append(
				$('<span class="percent"></span>').text(answer.percent)
			).append(
				$('<span class="label"></label>').text(answer.name)
			).append(
				$('<span class="percent-bar></span>').css('width',answer.percent)
			);
		}
		poll.showResult = function(result){
			canvas.removeClass('poll').addClass('result');
			for(var i in result){
				$('.answer:eq('+i+')',canvas).empty().append(
					poll.getResultAnswerMarkup( result[i] )
				);
			}
		}
	});

	dc.poll = {};
	(function(poll){
		
		$('.vote_anchor, .vote_anchor *').click(function(){
			poll.sendAnswer($(this).attr('question'),$(this).attr('answer'));
		});

		poll.sendAnswer = function(question, answer){
			showLoader('show');
			dc.ajax.post('poll_answer',{
				question:	question,
				answer:		answer
			},function(resp){
				showLoader();
				poll.showResult(resp.result);
			},function(resp){
				showLoader();
				alert("Возникла ошибка:\n" + resp.error);
			});
		}
		poll.getResultAnswerMarkup = function(answer){
			return $('<dd></dd>').append(
				$('<i/>')
			).append(
				$('<b></b>').text(answer.percent)
			).append(
				$('<label></label>').text(answer.name)
			).append(
				$('<span></span>').css('width',answer.percent)
			);
		}
		poll.showResult = function(result){
			var canvas = $('#poll_canvas'), i, question = $('dt',canvas).text();
			canvas.empty();
			canvas.addClass('showresults');
			$('<dt></dt>').text(question).appendTo(canvas);
			for(i in result){
				canvas.append(poll.getResultAnswerMarkup(result[i]));
			}
		}

	})(dc.poll);
	
});

/* 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]
		});
	});
});