//id div-ов с формами с labelами внутри полей
var els_with_inner_labels = ['auth_inner','shortQuestionFormDiv','simpleSearch'];
//id элементов этих форм
var labels_for_els_with_inner = {
	auth_inner : ['email','password'],
	shortQuestionFormDiv : ['email2','text','name'],
	simpleSearch : ['search']
};
var lang = {
	online : 'на сайте',
	asterics_text : '<div class="asterisc_comment"><span class="asterisc">*</span> &mdash; поля, обязательные для заполнения</div>'
}
var popuped_div_id;

$.expr[':'].external = function(obj) {
	return obj.href.match(/\/away\//)
};

$(document).ready(function() {
	var ie = /MSIE/gi.test(navigator.appVersion);
	//OPERA
	//$('#body').height($('#body').height());
	//form decoration
	//$('input').each(function(){$(this).addClass($(this).attr('type'));});
	//test
/*	$('input[type="checkbox"]').bind('click',function(){alert('binded: '+ $(this).attr('checked'));});
	$('#rememberme').trigger('click');
	alert($('#rememberme').attr('checked'));
	return;
*/
	customizeInputs();

	//auth	
	$('a#entrancelink').bind('click',function(e){
		if ($('#full_auth_form').length != 0) {
			e.preventDefault();
			showHideAuthDiv(e);
		}
	});	
	
	$('#darkbg').bind('click', function(){
		cancelAny();
	});
	
	if ($('#full_auth_form, #full_auth_user_form').length != 0) {
		$('#body').bind('click', function(e) {
			if ($(e.target).attr('id')=='entrancelink' || $(e.target).attr('id')=='displayUserPanel') {
				return;
			}
			if (!$('#full_auth_form').hasClass('nodisplay'))
				$('#full_auth_form').addClass('nodisplay');
			if (!$('#full_auth_user_form').hasClass('nodisplay'))
				$('#full_auth_user_form').addClass('nodisplay');
		});
		$('#full_auth_form, #full_auth_user_form').bind('click', function(e) {
			e.stopPropagation();
			//return false;
		});
		
		if ($('#full_auth_form .errors, #full_auth_user_form .errors').length > 0) {
			showHideAuthDiv(null);
		}
	}
	var hInterval;
	var prevVal = $('input[name="password"]', '#auth_inner').val();

	function checkAutofill() {
		var newVal = $('input[name="password"]', '#auth_inner').val();
		if (prevVal != newVal) {
			showHideInnerLabel('auth_inner', 'password', true, true);
			clearInterval(hInterval);
		}
	};
	
	$('input[name="email"]', '#auth_inner').bind('click focus keyup', 
		function(){
			clearInterval(hInterval);
			hInterval = setInterval(checkAutofill, 50);
		})
	.bind('blur', function(){
		clearInterval(hInterval);
	});
	
	//catmenu
	$('#catmenu div[class*="level1"]').each(function(){
		if ($(this).find('div[class*="level2"]').length > 0) {
			$(this).children('a').first().before('<img src="css/images/right-grey-arrow.png" class="arrow collapsed" />');
			$(this).children('span').first().before('<img src="css/images/right-grey-arrow.png" class="arrow collapsed" />');
		}
	});
	$('#catmenu img[class*="arrow"]').each(function(){
		catCollapseExpand($(this), 'collapse');
	});
	//styling last
	$('#catmenu div[class*="level1"]').last().addClass('noborder');
	//selected element in catmenu
	if ($('#catmenu .b').length > 0) {//a or span
		var div = $('#catmenu .b').closest('div[class*="level1"]');
		var img = div.find('img[class*="arrow"]');
		catCollapseExpand(img, 'expand');
		$('#catmenu img.pointer').remove();
		div.children('a').first().before('<img class="pointer" src="css/images/right-green-arrow.png">');
		div.children('span').first().before('<img class="pointer" src="css/images/right-green-arrow.png">');
		//div.prepend('<img class="pointer" src="css/images/right-green-arrow.png">');
	}
	$('#catmenu img[class*="arrow"]').live('click',function(e){
		var img = $(e.target);
		var action = (img.hasClass('collapsed')) ? 'expand' : 'collapse';
		catCollapseExpand(img, action);
	});
	//styling
	$('#catmenu div[class*="level1"]').bind('mouseover',function(){
		$(this).css('background','#dff6f2');
	});
	$('#catmenu div[class*="level1"]').bind('mouseout',function(){
		$(this).css('background','none');
	});
	$('#catmenu div[class*="level1"]').first().css('padding-top','16px');
	//urist online
	$('div[class*="ava"][class*="online"]').append('<div class="online_string">'+lang['online']+'</div>');
	//tabs
	workThroughTabs($('*.tabs ul'));
	//arrows
	$('a.leftarrow').prepend('<span class="arr">&nbsp;</span>');
	$('a.rightarrow').append('<span class="arr">&nbsp;</span>');
	//**********************************registration
	addRequiredAsterisc('regform', false);
	addRequiredAsterisc('createQuestionForm', true);
	$('form#regform div.buttons').before(lang.asterics_text);//.prepend(lang.asterics_text);
    
	$('#ul_bill_tabs a').live('click',function() {
		$('.tabSwitcher .tabContainer').hide();
		$('.tabSwitcher .tabContainer').eq($(this).parent().index()).show();
		
		var currentActiveTitle = $('#ul_bill_tabs li span.b').html();
		var oldActive = $('#ul_bill_tabs li span.b').parent();
		oldActive.find('span.b').remove();
		oldActive.removeClass('b').append('<a href="javascript:void(0);">'+currentActiveTitle+'</a>');
		
		var newActiveTitle = $(this).html();
		var newActiveContent = $('<span class="b">'+newActiveTitle+'</span>');
		$(this).parent().append(newActiveContent);
		$(this).parent().addClass('b').find('a').remove();
		workThroughTabs($('#ul_bill_tabs'));
	});

	if ($('#importExport_block .tabContainer .errors').length) {
		var container = $('#importExport_block .tabContainer .errors').closest('.tabContainer');
		$('#ul_bill_tabs a.' + container.attr('id')).trigger('click');
	}
	
	//FOR SORT BY
	$('*.sortby_block span.a').last().addClass('last');

	//ONLY /private/referrals/
	if ($('.section .errors','#siform').length > 0) {
		$('.section', '#siform').toggleClass('nodisplay');
	}
	$('#showhideReferralsSend').bind('click', function() {
		$('.section','#siform').toggleClass('nodisplay');
		return false;
	});
	
	$('.authbar a.setup').bind('click', function(){
		$('#full_auth_user_form').toggleClass('nodisplay');
		$(this).toggleClass('active');
		return false;
	});
//	bindCatSelectEvents('category_id');
	
	//sitemap
	$('*.sitemap > *.level1 > a').before("&#9679; ");//&#9675;
	$('*.sitemap > *.level1 > *.level2 > a').before("&#9675; ");
	$('*.sitemap > *.level1 > *.level2 > * a').before('&#160; ');

	//topmenu
	$('#topmenu li').last().css('border-right','none');

	//promoblocks
	$('*.promoblock *.facade').each(function(){
		$(this)[0].style.clip = 'rect(auto, auto, auto, 0px)';
	});
	$('*.promoblock').bind('mouseover',function(){slidePromo($(this), true);});
	$('*.promoblock').bind('mouseout',function(){slidePromo($(this), false);});
//	$('*.promoblock').bind('mouseover',function(){
//		var fac = $(this).children('*.facade');
//		alert('fac clip: '+fac[0].style.clip);//fac[0].style.clip
//	});
	//ask question button
	$('button.doAskQuestionButton').bind('click', function(){
		window.location.href = '/newquestion/';
	});
	$('button.doAskPersonalQuestionButton').bind('click', function(){
		window.location.href = '/newquestion/?uid=' + $(this).data('uid');
	});
	
	$('select').each(function() {
		if ($('option:selected', this).prop('disabled')) {
			$(this).css('color', '#919191');
		}
		$(this).bind('change', function(){
			if ($('option:selected', this).prop('disabled') == false) {
				$(this).css('color', '');
			}
		})
	});
	
	$('a:external').attr('target', '_blank').attr('rel', 'nofollow');

	$('.popup button[name=cancel]').live('click', function() {
		var closestPopupId = $(this).closest('popup').attr('id');
		if (closestPopupId !== undefined) {
			cancelAny('#' + $(this).closest('popup').attr('id'));
		} else {
			cancelAny();
		}
	});

});
var promoIntervals = {how_it_works: 0, for_who: 0, start_exploring: 0};
var promoTimeouts = {how_it_works: 0, for_who: 0, start_exploring: 0};

function slidePromo(source, is_opening) {
	var source_id = source.attr('id');
	var timeout = promoTimeouts[source_id];
	if (timeout!=0) clearTimeout(timeout);
	promoTimeouts[source_id] = setTimeout(function(){delayedSlidePromo(source, is_opening);}, 10);
}

function delayedSlidePromo(source, is_opening) {
	var facade = source.children('*.facade');
	var source_id = source.attr('id');
	var interval = promoIntervals[source_id];
	if (interval > 0)
		clearInterval(interval);
//	console.log('slider running: '+is_opening);
	promoIntervals[source_id] = setInterval(function(){slideFacade(facade, is_opening, interval);}, 20);
}

function slideFacade(facade, is_opening, interval) {
	var curclip = facade[0].style.clip;//facade.css('clip');
	var width = 264;//facade.width();
	var x1 = width;var x2 = 0;var y1 = 'auto';var y2 = 'auto';
	if (curclip != 'auto') {
		var matches = curclip.match(/rect\((\w+)[\,\s]+(\w+)[\,\s]+(\w+)[\,\s]+(\w+)\)/i);
//		if (matches === undefined) {
//			console.log('matches is null! clip: '+clip);
//			exit();
//		}
		x2 = parseInt(matches[4]);
	}
//	console.log('curclip: '+curclip+', x2 = '+x2+', w='+width);
	var step = 12;
	if (is_opening)
		x2 += step;
	else
		x2 -= step;
	
	if (x2 >= 0 && x2 <= width) {
		var sep = ', ';
		var clip = 'rect(' + y1 + sep + x1 + 'px' + sep + y2 + sep + x2 + 'px' + ')';
//		console.log('new clip: '+clip);
//		facade.css('clip', clip);
		facade[0].style.clip = clip;
		facade.width(width - x2);
	}
	if (x2 <= 0 || x2 >= width)
		if (interval != 0) clearInterval(interval);
}

/*
function bindCatSelectEvents(selectId) {
	window['catSelStack_'+selectId] = [];
	var events = ['click', 'change', 'blur'];
	var target = $('select#'+selectId);
	for (i in events) {
		var ev = events[i];
		target.bind(ev, function(event){
			window['catSelStack_'+selectId].push(event.type);
			checkCatSelectEventState(selectId);
		});
	}
	target.bind('collapse',function(){
		console.log('COLLAPSED');
		replaceForCatSelVal(selectId, '&nbsp;', ' ');
	});
	target.bind('expand',function(){
		console.log('EXPANDED');
		replaceForCatSelVal(selectId, ' ', '&nbsp;');
	});
}
function checkCatSelectEventState(selectId) {
	var target = $('select#'+selectId);
	var cur = window['catSelStack_'+selectId].pop();
	if (cur == 'change') {
		window['catSelStack_'+selectId].push(cur);
		return;
	}
	if (cur == 'click') {
		var prev = window['catSelStack_'+selectId].pop();
		if (prev === undefined)
			prev = 'blur';
	}
	console.log('stack(cur, prev): '+cur+'; '+prev);
	switch (cur) {
		case 'click':
			switch (prev) {
				case 'click':
					target.trigger('collapse');
				break;
				case 'change':
					target.trigger('collapse');
					window['catSelStack_'+selectId].pop();
				break;
				case 'blur':
					window['catSelStack_'+selectId].push(cur);
					target.trigger('expand');
				break;
			}
		break;
		case 'blur':
			target.trigger('collapse');
		break;
	}
}
function replaceForCatSelVal(selectId, s_from, s_to) {
		var sel = $('select#'+selectId)[0];
		var val = sel.options[sel.selectedIndex].value;
		var text = sel.options[sel.selectedIndex].text;
		var new_text = text;
		while (new_text.indexOf(s_from)!=-1)
			new_text = new_text.replace(s_from, s_to, 'g');
//		sel.options[sel.selectedIndex] = new Option(new_text, val, false, true);
		console.log('change made text: '+new_text);
}

*/

function customizeInputs(context, withBinds) {
	var ie = /MSIE/gi.test(navigator.appVersion);
	if (context === undefined) {
		context = 'body';
	}
	
	if (withBinds === undefined) {
		withBinds = true;
	}
	
	//buttons customisation
	initButtonStyle(context);
	//checkbox
	$('input[type="checkbox"]', context).each(function(){
		var lb = findCheckboxLabel($(this));
		lb.addClass('checkbox');
		if (($(this).prop('checked')) || ($(this).prop('checked')=='checked')) {
			lb.addClass('checked');
		} else if (($(this).prop('checked') === false) || ($(this).prop('checked') == undefined)) {
			lb.removeClass('checked');
		}
	});

	if (withBinds) {
		$('input[type="checkbox"]', context).bind('change',function(){
			var lb = findCheckboxLabel($(this));
			//alert('onclick:' + $(this).is(":checked"));//$(e.target).is(":checked")
			if ($(this).is(":checked")) {
				lb.addClass('checked');
			} else {
				lb.removeClass('checked');
			}
		});		//.siblings('label').addClass('radio');
		$('input[type="checkbox"]', context).bind('focus',function(){
			var lb = findCheckboxLabel($(this));
			lb.addClass('focused');		
		});	
		$('input[type="checkbox"]', context).bind('blur',function(){
			var lb = findCheckboxLabel($(this));
			lb.removeClass('focused');		
		});	
		//radio
		$('input[type="radio"]', context).bind('change',function(e){
			//alert(e.target.checked);
			setCheckedRadioStyle($(e.target)); 
		});
		$('input[type="radio"]', context).bind('focus',function(e){
			$(this).closest('label').addClass('focused');
		});
		$('input[type="radio"]', context).bind('blur',function(e){
			$(this).closest('label').removeClass('focused');
		});
	}
	$('input[type="radio"]:checked', context).each(function(){
		setCheckedRadioStyle($(this)); 
	});

	//suggests
	for (i = 0; i < els_with_inner_labels.length; i++) {
		var el_name = els_with_inner_labels[i];
		$('#' + el_name + ' label').each(function(){
			var label_for = $(this).attr('for');
			var arr = labels_for_els_with_inner[el_name];
			if (jQuery.inArray(label_for, arr) < 0)
				return true;
			$(this).addClass('insideOfInput');
			var targ = $('#'+el_name+' *[id="'+label_for+'"]');
			$(this).bind('mousedown', function(e){
				if (e.button == 2) {
					$(this).addClass('nodisplay');
					$(this).siblings('input.textarea').focus();
				}
			});
			if (targ.val().length > 0) {
				$(this).addClass('nodisplay');
			}
			var tmp_el_name = el_name.toString();
			var tmp_label_for = label_for.toString();
//			if (withBinds) {
				targ.bind('focus',function(){showHideInnerLabel(tmp_el_name, tmp_label_for, true, true)});
				targ.bind('blur',function(){showHideInnerLabel(tmp_el_name, tmp_label_for, false, true)});
//			}
			return true;
		});
	}

	//for ie
	$('input[type="radio"]', context).closest('label').addClass('radio');
	if (ie) { //focus on label while click on radio/checkbox image
		if (withBinds) {
			$('input[type="radio"]', context).closest('label').bind('change', function(e){
				var radio = $(e.target).find('input[type="radio"]');
				radio.prop('checked', !(radio.prop('checked')));
				radio.triggerHandler('change');
			});
		}
		$('label', context).each(function(){
				var fr = $(this).attr('for');
				var f = $(this).closest('form');
				var found;
				if (f.find('input[type="checkbox"][name="'+fr+'"]').length>0) {
					found = f.find('input[type="checkbox"][name="'+fr+'"]');
				} else if (f.find('input[type="checkbox"][id="'+fr+'"]').length>0) {
					found = f.find('input[type="checkbox"][id="'+fr+'"]');
				}
				if (found !== undefined && withBinds) {
					$(this).bind('change',function(){
						found[0].checked = !(found[0].checked);
						found.triggerHandler('change');
					});
				}
		});
	}
}

function initButtonStyle(context) {
	if (context === undefined) {
		context = 'body';
	}
	
	var b_events = ['mouseover','mouseout','mousedown','mouseup','focus','blur','keypress'];
	for (i in b_events) {
		$('.fwrap input[type="file"],button[class!="under"],input[type="button"],input[type="submit"]', context)
		.filter(function(){
			return !$(this).hasClass('udf-button');
		})
		.bind(b_events[i], function(event) {
			changeButtonStyle(event);
		});
	}
}

var button_timeout = 0;
function changeButtonStyle(event) {
//	var std_style = {color: '#222222', background: '#57C2EE'};
//	var hover_style = {color: '#ffffff', background: '#57C2EE'};
//	var active_style = {color: '#222222', background: '#2ba7cc'};
	var std_style = {border: '', outline: '', backgroundColor: '#57c2ee', color: '#2f2f2f'};
	var hover_style = {border: '1px solid #2f9ecc', outline: '1px solid #dbdcde', backgroundColor: '#57c2ee', color: '#2f2f2f'};
	var active_style = {border: '1px solid #308aaf', outline: '', backgroundColor: '#31abde', color: '#302e33'};
	var etype = event.type;
	var el = $(event.target);
	if (el.attr('type') == 'file') {
		el = el.siblings('button');
	}
	var cur_style;
	if (etype=='keypress') {
		var kc = (event.keyCode) ? event.keyCode : event.which;
		if (kc != 13)
			return;
	}
	switch (etype) {
		case 'mouseover':
		case 'focus':
			cur_style = hover_style;
		break;
		case 'mouseout':
		case 'blur':
			cur_style = std_style;
		break;
		case 'keypress':
		case 'mousedown':
			cur_style = active_style;
		break;
		case 'mouseup':
			cur_style = hover_style;
		break;
	}
	var is_pressed = (cur_style == active_style) ? true : false;
	if (etype!='mousedown') {
		setButtonStyle(el, cur_style, is_pressed);
	} else {
		button_timeout = setTimeout(function(){setButtonStyle(el, cur_style, is_pressed);}, 10);
	}
}


function rgbToHex(inputString) {
	if (inputString === undefined)
		return inputString;
	var rgb_arr = inputString.match(/rgb\((\d+)\,\s+(\d+)\,\s+(\d+)\)/i);
	if (rgb_arr === null) {
		return inputString;
	}
	var hex_digits = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'];
	var outcome = '#';
	for (var i=1;i<rgb_arr.length;i++) {
		var val = rgb_arr[i];
		var ind_1 = Math.floor(val/16);
		var ind_2 = val%16;
		outcome += hex_digits[ind_1] + '' + hex_digits[ind_2];
	}
	return outcome;
}

function setButtonStyle(el, cur_style, is_pressed) {
//	var borders = {border: 0, outline: 0};
	for (i in cur_style) {//set up style
		var style = cur_style[i];
		if (style=='') {
			if (i=='border') {
				style = el.css('backgroundColor');
				style = rgbToHex(style);
			} else if (i=='outline') {
				style = el.parent().css('backgroundColor');
				style = rgbToHex(style);
			}
			style = '1px solid '+style;
//			console.log(i+':'+style);
		}
		el.css(i, style);
//		if ((i=='border')||(i=='outline'))
//			borders[i] = eval(cur_style[i].charAt(0));
	}
	if (is_pressed) {
		el.css("padding-left", "+=1");
		el.css("padding-top", "+=1");
		el.css("padding-right", "-=1");
		el.css("padding-bottom", "-=1");
	} else {
		var pleft = Math.round( (parseInt(el.css("padding-left")) + parseInt(el.css("padding-right"))) / 2);
		var ptop = Math.round( (parseInt(el.css("padding-top")) + parseInt(el.css("padding-bottom"))) / 2);
		el.css("padding", ptop+"px "+pleft+"px ");
	}
	//change paddings
	//for border
//	var mpadding = 0;
//	if (borders.border>0) {
//		mpadding += borders.border;
//	}
//	if (outline.border>0) {
//		mpadding += borders.border;
//	}
}


function workThroughTabs(jselector) {
	jselector.children('li').removeClass('shadowed-left');
	jselector.children('li').removeClass('shadowed-right');
	jselector.children('li').removeClass('separated');
	jselector.children('li').removeClass('first');
	jselector.each(function(){
		$(this).find('li').not('.b').addClass('separated');
		var sel_li = $(this).find('li.b');
		sel_li.prev().addClass('shadowed-right').removeClass('separated');
		sel_li.next().addClass('shadowed-left');
		$(this).find('li').last().removeClass('separated');
		$(this).find('li').first().addClass('first');
	});
}

function findCheckboxLabel(inp) {
	var fr = inp.attr('id');
	if (fr===undefined)
		fr = inp.attr('name');
	var f = inp.closest('form');
	//if (fr == 'is_email_answers') {
		//alert(inp.closest('form').attr('id'));
		//inp.css('display','inline');
		//alert(inp[0].tagName + ' ' + inp.attr('id') + ' ' + inp.attr('type') + ' ' + inp.css('display'));
	//}
	var lb = f.find('label[for="'+fr+'"]');
	return lb;
}

function setCheckedRadioStyle(chRadio) {
	var name = chRadio.attr('name');
	$('input[type="radio"][name="'+name+'"]').closest('label').removeClass('checked');
	chRadio.closest('label').addClass('checked');
	//$('input[type="radio"][name="'+name+'"]:checked').closest('label').addClass('checked');
}

function catCollapseExpand(img, action) {
	if (img.length == 0)
		return;
	var src = img.attr('src');
	var newclass, oldclass;
	var subdivs = img.closest('div[class*="level1"]').find('div[class*="level"]');
	if (action=='expand') {
		subdivs.removeClass('nodisplay');
		src = src.replace("right","bottom");
		oldclass = 'collapsed';
		newclass = 'expanded';
	} else {
		subdivs.addClass('nodisplay');
		src = src.replace("bottom","right");
		oldclass = 'expanded';
		newclass = 'collapsed';
	}
	img.attr('src',src);
	img.removeClass(oldclass);
	img.addClass(newclass);
}

function showHideInnerLabel(el_name, label_for, is_hide, is_force) {
	var l = $('#'+el_name+' label[for="'+label_for+'"]');
	var v = $('#'+el_name+' *[id="'+label_for+'"]').val();
	if (is_hide) {
		if ((v!='')||(is_force))
			l.addClass('nodisplay');
	}
	else {
		if (v=='')
			l.removeClass('nodisplay');
	}
}

function showHideAuthDiv(e) {
	var d = $('#full_auth_form');
	if (!d.hasClass('nodisplay')) {
		d.addClass('nodisplay');
		return;
	}
//	var x;// = e.target.offsetLeft;//e.clientX;
//	var y;// = e.target.offsetTop;//e.clientY;
//	var coord;
//	if (e === null) {
//		coord = $('a#entrancelink').offset();
//	} else {
//		coord = $(e.target).offset();
//	}
//	x = coord.left;
//	y = coord.top;
//	d.css('left', x-30);
//	d.css('top', y+55);
	for (i in labels_for_els_with_inner.auth_inner) {
		var ename = labels_for_els_with_inner.auth_inner[i];
		showHideInnerLabel('auth_inner', ename, true, false);
	}
	d.removeClass('nodisplay');	
	d.trigger('focus');
}

function addRequiredAsterisc(form_id, add_radio) {
	$('form#'+form_id+' label.required').each(function(){
		var fr = $(this).attr('for');
		var tp1 = $('form#'+form_id+' *[name="'+fr+'"]').prop('type');
		var tp2 = $('form#'+form_id+' #'+fr).prop('type');
		var tp = (tp1!==undefined) ? tp1 : tp2;
		if (tp != 'checkbox'
				&& (tp != 'radio' || add_radio)
				&& tp != 'hidden' 
				&& tp !== undefined) 
			$(this).append('<sup>*</sup>');
	});
}
