ajaxHandler = {
	alertError : function (message) {
		if (message && message != '') {
			futu_alert(message, true, 'red');
		} else {
			futu_alert('Ошибка без названия.', true, 'red');
		}
	},
	checkResponse : function (ajaxObj, text) {
		if (text) {
			var response = JSON.decode(ajaxObj);
		} else {
			var response = JSON.decode(ajaxObj.responseText);
		}
		
		//var response = JSON.decode(ajaxObj);
		if (!$defined(response)) {
			ajaxHandler.alertError('Сервер почему-то ничего не ответил.');
			return false;
		}
		
		if (!response.status) {
			ajaxHandler.alertError('Сервер ни с того, ни с сего сообщил следующее: «' + ajaxObj.responseText + '»');
			return false;
		}
		
		if (response.status == 'ERR') {
			ajaxHandler.alertError(response.message);
			return false;
		}
		
		if (response.status == 'OK') {
			if (!response.message) {
				return response;
			} else {
				ajaxHandler.alertError(response.message);
				return response;
			}
		} else {
			ajaxHandler.alertError('Сервер не сообщил об ошибке, но и не подтвердил, что всё прошло хорошо.');
			return response;
		}
	},
	highlightField : function (input, bg_color, highlight_color) {
		var input = $(input);
		var bg_color = bg_color || '#FFFFFF';
		var highlight_color = highlight_color || '#FF0000';
		$(input).set('morph', {'onComplete' : function () {
			$(input).erase('style');
		}});
		input.style.backgroundColor = highlight_color;
		$(input).morph({'background-color' : bg_color});
	},
	loadingHighlight : function (params) {
		var button = $(params.button);
		params.attribute = params.attribute || 'background-color';
		params.timing = params.timing || 333;
		var fx = new Fx.Tween($(button),  {'duration':params.timing, 'onComplete' : function () {
			if ($(button).hasClass('js-lh_to_color_2')) {
				fx.start(params.attribute, params.color1, params.color2);
				$(button).removeClass('js-lh_to_color_2');
			} else {
				if (params.loadingCheck()) {
					fx.start(params.attribute, params.color2, params.color1);
					$(button).addClass('js-lh_to_color_2');
				} else {
					if (params.transparent) {
						$(button).erase('style');
					}
					$(button).removeClass('js-lh_active');
				}
			}
		}});
		if ($(button).hasClass('js-lh_active')) {
			(function () {
				if (params.loadingCheck()) {
					fx.start(params.attribute, params.color2, params.color1);
					$(button).addClass('js-lh_to_color_2');
					$(button).addClass('js-lh_active');
				}
			}).delay(params.timing);
		} else {
			fx.start(params.attribute, params.color2, params.color1);
			$(button).addClass('js-lh_to_color_2');
			$(button).addClass('js-lh_active');
		}
		return fx;
	}
};

utils = {
	getPlural : function (num, texts) {
		var n = num % 100;
		var n1 = num % 10;
		if (n > 10 && n < 20) return texts[2];
		if (n1 > 1 && n1 < 5) return texts[1];
		if (n1 == 1) return texts[0];
		return texts[2];
	},
	focusText : function (input, text, input_holder) {
		input = $(input);
		if (!input_holder) {
			var input_holder = input;
		}
		input.addEvent('focus', function () {
			if (input.value == text) {
				input.value = '';
				input_holder.removeClass('js-input_default');
			}
			input_holder.addClass('js-input_focus');
		});
		input.addEvent('blur', function () {
			if (input.value == '') {
				input.value = text;
				input_holder.addClass('js-input_default');
			} else {
				input_holder.removeClass('js-input_default');
			}
			input_holder.removeClass('js-input_focus');
		});
	}
};

futuAjax = new Class({
	Implements: Options,
	options: {
		button : false,
		animated_element : false,
		animation_enabled : true,
		remove_element_color : true,
        loading_class : 'js-loading',
        attribute : 'background-color',
		color_to : '#FFFFFF',
		color_from : '#EDF14B',
		url : '/ajax/',
		data : '',
		checkResponseFunction : ajaxHandler.checkResponse,
		onErrorFunction : false,
		onCustomErrorFunction : $empty,
		onBeforeLoadFunction : $empty,
		onLoadFunction : $empty,
		alertFunction : futu_alert,
		checkAjaxLoadedFunction : function () {return this.button.hasClass(this.loading_class);},
		setAjaxLoadingFunction : function () {this.button.addClass(this.loading_class);},
		removeAjaxLoadingFunction : function () {this.button.removeClass(this.loading_class);}
    },
	initialize : function (options) {
		this.setOptions(options);
		this.button = this.options.button;
		this.loading_class = this.options.loading_class;
		this.animated_element = this.options.animated_element || this.button;
		this.remove_element_color = this.options.remove_element_color;
		this.color_to = this.options.color_to;
		this.color_from = this.options.color_from;
		this.url = this.options.url;
		this.data = this.options.data;
		this.checkResponseFunction = this.options.checkResponseFunction;
		this.onErrorFunction = this.options.onErrorFunction;
		this.onCustomErrorFunction = this.options.onCustomErrorFunction;
		this.onLoadFunction = this.options.onLoadFunction;
		this.alertFunction = this.options.alertFunction;
		
		if (this.button && !$(this.button).hasClass(this.loading_class)) {
			(this.options.setAjaxLoadingFunction).bind(this).call();
			(this.options.onBeforeLoadFunction).bind(this).call();
			if (this.options.animation_enabled) {
				var myFx = ajaxHandler.loadingHighlight({'button':this.animated_element,
					'color1':this.color_to,
					'color2':this.color_from,
					'attribute':this.options.attribute,
					'loadingCheck':(this.options.checkAjaxLoadedFunction).bind(this),
					'transparent':this.remove_element_color
				});
			}
			this.postAjax(this.url, this.data, (function (ajaxObj) {
				(this.options.removeAjaxLoadingFunction).bind(this).call();
				var response = this.checkResponseFunction(ajaxObj);
				if (response) {
					this.onLoadFunction(response);
				} else {
					response = JSON.decode(ajaxObj.responseText);
					this.onCustomErrorFunction(response);
				}
			}).bind(this), this);
		}
	},
	postAjax : function (url, data, ajaxCallBackFunction) {	
		var ajaxObject = null;
		if (window.XMLHttpRequest) { // branch for native XMLHttpRequest object
			ajaxObject = new XMLHttpRequest();
		} else if (window.ActiveXObject) { // branch for IE/Windows ActiveX version
			var ajaxObject = new ActiveXObject("Microsoft.XMLHTTP");
		}
		if (ajaxObject) {
			ajaxObject.onreadystatechange = (function(){
				// only if req shows "complete"
				if (ajaxObject.readyState == 4) {
					// only if "OK"
					if (ajaxObject.status == 200) {
						// ...processing statements go here...
						ajaxCallBackFunction.call(this, ajaxObject);
					} else {
						if(this.onErrorFunction){
							this.onErrorFunction(ajaxObject);	
						} else {
							futu_alert(("There was a problem retrieving the data:\n" + ajaxObject.statusText), true, 'rock_red');
						}
						this.button.removeClass(this.loading_class);
					}
				}
			}).bind(this);
			ajaxObject.open("POST", url, true);
			ajaxObject.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			ajaxObject.setRequestHeader("Content-length", data.length);
			ajaxObject.setRequestHeader("Connection", "close");
			ajaxObject.send(data);	
		}
	}
});


function futu_alert(text, close, className) {
	if (!$('futu_alerts_holder')) {
		var futuAlertOuter = new Element('div', {
			'class' : 'futu_alert_outer'
		}).injectInside(document.body);
	
		var futuAlertFrame = new Element('div', {
			'class' : 'frame'
		}).injectInside(futuAlertOuter);
	
		new Element('div', {
			'class' : 'futu_alerts_holder',
			'id' : 'futu_alerts_holder'
		}).injectInside(futuAlertFrame);
	}
	$('futu_alerts_holder').setStyle('left', window.getSize().x/2 - 200);
	var className = className || ''; 
	var futuAlert = new Element('div', {
		'class' : ('futu_alert '+className)
	}).injectTop($('futu_alerts_holder'));
	
	futuAlert.set('morph', {duration: 222});
	if (close) {
		var futuAlertCloseButton =  new Element('a', {
			'href' : '#',
			'class' : 'futu_alert_close_button',
			'events' : {
				'click' : function (event) {
					if (!Browser.Engine.trident) event.preventDefault(); else event.returnValue = false;
					
					futuAlert.morph({
						'opacity':0,
						'width':'250px'
					});
					(function () {
						futuAlert.setStyle('display','none');
						futuAlert.destroy();
					}).delay(500);
				}
			}
		}).injectInside(futuAlert);
	}
	
	var futuAlertText =  new Element('div', {
		'class' : 'futu_alert_text'
	}).injectInside(futuAlert);
	
	futuAlertText.innerHTML = text;
	
	futuAlert.setStyles({
		'position':'relative',
		'top':'0',
		'margin-top':-futuAlert.getSize().y + 'px',
		'opacity':0,
		'width':'250px'
	});
	futuAlert.morph({
		'margin-top':0,
		'opacity':1,
		'width':'400px'
	});
	if (!close) {
		(function () {
			futuAlert.morph({
				'opacity':0,
				'width':'250px'
			});
			
		}).delay(5000);
		
		(function () {
			futuAlert.setStyle('display','none');
			futuAlert.destroy();
		}).delay(5500);
	}
}

var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

function UnHide( eThis )
{
  if( eThis.innerHTML.charCodeAt(0) == 9658 )
  {
    eThis.innerHTML = '&#9660;'
    eThis.parentNode.parentNode.parentNode.className = '';
  }
  else
  {
    eThis.innerHTML = '&#9658;'
    eThis.parentNode.parentNode.parentNode.className = 'cl';
  }
  return false;
}



customSelects  = {
	toggleOpen : function (button) {
		var custom_select_list = $(button).getParent('.b-c_select').getElement('.b-c_select_options_list');
		if (custom_select_list.hasClass('hidden')) {
			customSelects.closeAllSelects();
			custom_select_list.removeClass('hidden');
			(function () {$(document.body).addEvent('click', customSelects.closeAllSelects);}).delay(333);
		} else {
			custom_select_list.addClass('hidden');
		}
	},
	closeAllSelects : function () {
		$$('.b-c_select').each(function (select) {
			select.getElement('.b-c_select_options_list').addClass('hidden');
		});
		$(document.body).removeEvent('click', customSelects.closeAllSelects);
	},
	selectOption : function (button, age) {
		if (!$('js-search_form_holder').hasClass('js-loading')) {
			if (age) {
				var animated_element = $('js-search_form_ages_holder');
				var custom_select = {};
				custom_select.id = '';
				var animation_enabled = true;
			} else if (button) {		  
				var option = $(button).getParent('.b-c_select_option');
				var custom_select = $(button).getParent('.b-c_select');
				var animated_element = custom_select.getElement('.b-c_select_current_option_outer');
				custom_select.getElement('.i-c_select_current_value').value = option.getElement('.i-c_select_option_value').value;
				custom_select.getElement('.b-c_select_current_option_inner').innerHTML = option.getElement('.b-c_select_option_caption').innerHTML;
				$(button).getParent('.b-c_select_options_list').addClass('hidden');
				var animation_enabled = true;
			} else {
				var animated_element = false;
				var custom_select = {};
				//custom_select.id = 'js-c_select_courses';
				var animation_enabled = false;
			}
			var url = '/my_libs/search_ajax.php';
			var data = 'age1={age1}&age2={age2}&age3={age3}&lang={lang}&country={country}&city={city}&school={school}&course={course}&senior={senior}&high={high}'.substitute({
				age1 : $('js-search_form_age_1_select').value,
				age2 : $('js-search_form_age_2_select').value,
				age3 : $('js-search_form_age_3_select').value,
				lang : $('js-c_select_languages_current_value').value,
				country : $('js-c_select_countries_current_value').value,
				city : $('js-c_select_cities_current_value').value,
				school : $('js-c_select_schools_current_value').value,
				course : $('js-c_select_courses_current_value').value,
				senior : $('js-c_select_senior_current_value').value,
				high : $('js-c_select_high_current_value').value
			});
			
			if (custom_select.id == 'js-c_select_courses') {
				$('js-c_select_senior_current_caption').innerHTML = '---';
				$('js-c_select_senior_current_value').value = '';
				$('js-c_select_high_current_caption').innerHTML = '---';
				$('js-c_select_high_current_value').value = '';
			}
			if (custom_select.id == 'js-c_select_senior') {
				$('js-c_select_courses_current_caption').innerHTML = '---';
				$('js-c_select_courses_current_value').value = '';
				$('js-c_select_high_current_caption').innerHTML = '---';
				$('js-c_select_high_current_value').value = '';
			}
			if (custom_select.id == 'js-c_select_high') {
				$('js-c_select_courses_current_caption').innerHTML = '---';
				$('js-c_select_courses_current_value').value = '';
				$('js-c_select_senior_current_caption').innerHTML = '---';
				$('js-c_select_senior_current_value').value = '';
			}
			
			new futuAjax({
				button : $('js-search_form_holder'),
				animated_element : animated_element,
				animation_enabled : animation_enabled,
				color_to : '#3AC529',
				color_from : '#FFFFFF',
				url : url,
				data : data,
				onLoadFunction : function (response) {
					if (custom_select.id != 'js-c_select_languages') {
						customSelects.setOptionsList(response.languages, 'js-c_select_languages');
					}
					if (custom_select.id != 'js-c_select_countries') {
						customSelects.setOptionsList(response.countries, 'js-c_select_countries');
					}
					if (custom_select.id != 'js-c_select_cities') {
						customSelects.setOptionsList(response.cities, 'js-c_select_cities');
					}
					if (custom_select.id != 'js-c_select_courses' && custom_select.id != 'js-c_select_senior' && custom_select.id != 'js-c_select_high') {
						customSelects.setOptionsList(response.courses, 'js-c_select_courses');
						customSelects.setOptionsList(response.senior, 'js-c_select_senior');
						customSelects.setOptionsList(response.high, 'js-c_select_high');
					}
					if (custom_select.id != 'js-c_select_schools') {
						customSelects.setOptionsList(response.schools, 'js-c_select_schools');
					}
				}
			});
		}
	},
	setOptionsList : function (list, select_id) {
		var languages_active_list = customSelects.buildOptions(list);
		$A($(select_id).getElements('.b-c_select_option')).each(function (option) {
			if (!option.hasClass('b-c_select_option_show_all')) {
				var option_in_list = false;
				for (var i = 0; i < languages_active_list.length; i++) {
					if (option.id == 'js-c_select_option_' + languages_active_list[i]) {
						option_in_list = true;
					}
				}
				if (option_in_list) {
					option.removeClass('hidden');
				} else {
					option.addClass('hidden');
				}
			}
		});
		if ($(select_id).getElement('.b-c_select_option_no_results')) {
			if (languages_active_list.length < 1) {
				$(select_id).getElement('.b-c_select_option_no_results').removeClass('hidden');
			} else {
				$(select_id).getElement('.b-c_select_option_no_results').addClass('hidden');
			}
		}
	},
	buildOptions : function (list) {
		var active_list = [];
		$A(list).each(function(item) {
			if (item.children) {
				active_list.push(item.id);
				active_list = active_list.concat(customSelects.buildOptions(item.children));
			} else {
				active_list.push(item.id);
			}
		});
		return active_list;
	},
	toggleSublist : function (button) {
		var option = $(button).getParent('.b-c_select_option');
		option.getElement('ul').toggleClass('b-c_select_options_opened_sub_list');
		option.getElement('.k-c_select_open_option').toggleClass('k-c_select_open_option_opened');
	},
	resetForm : function () {
		customSelects.resetSelect($('js-c_select_languages'));
		customSelects.resetSelect($('js-c_select_countries'));
		customSelects.resetSelect($('js-c_select_cities'));
		customSelects.resetSelect($('js-c_select_courses'));
		customSelects.resetSelect($('js-c_select_senior'));
		customSelects.resetSelect($('js-c_select_high'));
		customSelects.resetSelect($('js-c_select_schools'));
		$('js-search_form_age_1_select').selectedIndex = 0;
		$('js-search_form_age_2_select').selectedIndex = 0;
		$('js-search_form_age_2_select').set('disabled', 'disabled');
		$('js-search_form_age_3_select').selectedIndex = 0;
		$('js-search_form_age_3_select').set('disabled', 'disabled');
	},
	resetSelect : function (select) {
		select.getElement('.i-c_select_current_value').value = '';
		select.getElement('.b-c_select_current_option_inner').innerHTML = '---';
		$A(select.getElements('.b-c_select_option')).each(function (option) {
			if (!option.hasClass('b-c_select_option_no_results')) {
				option.removeClass('hidden');
			} else {
				option.addClass('hidden');
			}
		});
	},
	ageSelect_1 : function (select) {
		if (select.value == '0') {
			$('js-search_form_age_2_select').selectedIndex = 0;
			$('js-search_form_age_2_select').set('disabled', 'disabled');
			$('js-search_form_age_3_select').selectedIndex = 0;
			$('js-search_form_age_3_select').set('disabled', 'disabled');
		} else {
			$('js-search_form_age_2_select').set('disabled');
		}
	},
	ageSelect_2 : function (select) {
		if (select.value == '0') {
			$('js-search_form_age_3_select').selectedIndex = 0;
			$('js-search_form_age_3_select').set('disabled', 'disabled');
		} else {
			$('js-search_form_age_3_select').set('disabled');
		}
	},
	sendForm : function (button, domain) {
		$(button).getParent('.form_buts_find').getElement('.text').innerHTML = 'Пожалуйста, подождите. Идет подбор программы&#133;';
		var url = '/search/';
		var data = '{age1}{age2}{age3}{lang}{country}{city}{school}{course}{senior}{high}'.substitute({
			age1 : ($('js-search_form_age_1_select').value == '0') ? '' : 'age1=' + $('js-search_form_age_1_select').value + '&',
			age2 : ($('js-search_form_age_2_select').value == '0') ? '' : 'age2=' + $('js-search_form_age_2_select').value + '&',
			age3 : ($('js-search_form_age_3_select').value == '0') ? '' : 'age3=' + $('js-search_form_age_3_select').value + '&',
			lang : ($('js-c_select_languages_current_value').value == '') ? '' : 'lang=' + $('js-c_select_languages_current_value').value + '&',
			country : ($('js-c_select_countries_current_value').value == '') ? '' : 'country=' + $('js-c_select_countries_current_value').value + '&',
			city : ($('js-c_select_cities_current_value').value == '') ? '' : 'city=' + $('js-c_select_cities_current_value').value + '&',
			school : ($('js-c_select_schools_current_value').value == '') ? '' : 'school=' + $('js-c_select_schools_current_value').value + '&',
			course : ($('js-c_select_courses_current_value').value == '') ? '' : 'course=' + $('js-c_select_courses_current_value').value + '&',
			senior : ($('js-c_select_senior_current_value').value == '') ? '' : 'senior=' + $('js-c_select_senior_current_value').value + '&',
			high : ($('js-c_select_high_current_value').value == '') ? '' : 'high=' + $('js-c_select_high_current_value').value + '&'
		});
		url = url + '?' + data;
		window.location.href = 'http://' + domain + url;
	}
};

window.addEvent('domready', function() {
	var tables_equal_left = document.getElements('.table-equal-left');
	tables_equal_left.each(function (table) {
	  var first_row_cells = table.getElement('tr').getElements('td');
	  var cols_quantity = first_row_cells.length;
	  var col_width = Math.floor(100/cols_quantity);
	  for (var i = 0; i < cols_quantity; i++) {
	    first_row_cells[i].style.width = col_width + '%';
	  }
	  table.style.width = '100%';
	});
	var tables_equal_center = document.getElements('.table-equal-center');
	tables_equal_center.each(function (table) {
	  var rows = table.getElements('tr');
	  var rows_quantity = rows.length;
    var cols_quantity = 0;
    var col_width = 0;
	  for (var i = 0; i < rows_quantity; i++) {
	    
  	  var cells = rows[i].getElements('td');
  	  
  	  var equal_cells = [];
  	  var cells_quantity = cells.length;
  	  var cols_colspan = 0;
  	  for (var j = 0; j < cells_quantity; j++) {
  	   if (cells[j].get('colspan') > 1) {
  	     cols_colspan += cells[j].colspan;
  	   } else {
  	     equal_cells.push(cells[j]);
  	   }
  	  }
  	  if (i == 0) {
  	    cols_quantity = cells_quantity + cols_colspan;
  	  }
  	  col_width = Math.floor(100/(cols_quantity + table.getElements('.table-td-caption').length));
  	  
  	  if (!rows[i].hasClass('table_hat')) {
    	  $A(equal_cells).each(function (equal_cell) {
    	    if (equal_cell.hasClass('table-td-caption')) {
    	      equal_cell.style.width = 2*col_width + '%';
    	    } else {
    	      
    	      equal_cell.style.width = col_width + '%';
    	    }
    	  });
    	  if (cols_colspan == 0) {
  	      break;
  	    }
  	  }
  	  table.style.width = '100%';
	  
	  }
	});
});


