/*******************************/
/* jQuery highlightFade plugin */
/*******************************/
jQuery.fn.highlightFade = function(settings) {
	var o = (settings && settings.constructor == String) ? {start: settings} : settings || {};
	var d = jQuery.highlightFade.defaults;
	var i = o['interval'] || d['interval'];
	var a = o['attr'] || d['attr'];
	var ts = {
		'linear': function(s,e,t,c) { return parseInt(s+(c/t)*(e-s)); },
		'sinusoidal': function(s,e,t,c) { return parseInt(s+Math.sin(((c/t)*90)*(Math.PI/180))*(e-s)); },
		'exponential': function(s,e,t,c) { return parseInt(s+(Math.pow(c/t,2))*(e-s)); }
	};
	var t = (o['iterator'] && o['iterator'].constructor == Function) ? o['iterator'] : ts[o['iterator']] || ts[d['iterator']] || ts['linear'];
	if (d['iterator'] && d['iterator'].constructor == Function) t = d['iterator'];
	return this.each(function() {
		if (!this.highlighting) this.highlighting = {};
		var e = (this.highlighting[a]) ? this.highlighting[a].end : jQuery.highlightFade.getBaseValue(this,a) || [255,255,255];
		var c = jQuery.highlightFade.getRGB(o['start'] || o['colour'] || o['color'] || d['start'] || [255,255,128]);
		var s = jQuery.speed(o['speed'] || d['speed']);
		var r = o['final'] || (this.highlighting[a] && this.highlighting[a].orig) ? this.highlighting[a].orig : jQuery.curCSS(this,a);
		if (o['end'] || d['end']) r = jQuery.highlightFade.asRGBString(e = jQuery.highlightFade.getRGB(o['end'] || d['end']));
		if (typeof o['final'] != 'undefined') r = o['final'];
		if (this.highlighting[a] && this.highlighting[a].timer) window.clearInterval(this.highlighting[a].timer);
		this.highlighting[a] = { steps: ((s.duration) / i), interval: i, currentStep: 0, start: c, end: e, orig: r, attr: a };
		jQuery.highlightFade(this,a,o['complete'],t);
	});
};

jQuery.highlightFade = function(e,a,o,t) {
	e.highlighting[a].timer = window.setInterval(function() {
		var newR = t(e.highlighting[a].start[0],e.highlighting[a].end[0],e.highlighting[a].steps,e.highlighting[a].currentStep);
		var newG = t(e.highlighting[a].start[1],e.highlighting[a].end[1],e.highlighting[a].steps,e.highlighting[a].currentStep);
		var newB = t(e.highlighting[a].start[2],e.highlighting[a].end[2],e.highlighting[a].steps,e.highlighting[a].currentStep);
		jQuery(e).css(a,jQuery.highlightFade.asRGBString([newR,newG,newB]));
		if (e.highlighting[a].currentStep++ >= e.highlighting[a].steps) {
			jQuery(e).css(a,e.highlighting[a].orig || '');
			window.clearInterval(e.highlighting[a].timer);
			e.highlighting[a] = null;
			if (o && o.constructor == Function) o.call(e);
		}
	},e.highlighting[a].interval);
};

jQuery.highlightFade.defaults = {
	start: [255,255,128],
	interval: 50,
	speed: 400,
	attr: 'color'
};

jQuery.highlightFade.getRGB = function(c,d) {
	var result;
	if (c && c.constructor == Array && c.length == 3) return c;
	if (result = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))
		return [parseInt(result[1]),parseInt(result[2]),parseInt(result[3])];
	else if (result = /rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))
		return [parseFloat(result[1])*2.55,parseFloat(result[2])*2.55,parseFloat(result[3])*2.55];
	else if (result = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))
		return [parseInt("0x" + result[1]),parseInt("0x" + result[2]),parseInt("0x" + result[3])];
	else if (result = /#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))
		return [parseInt("0x"+ result[1] + result[1]),parseInt("0x" + result[2] + result[2]),parseInt("0x" + result[3] + result[3])];
	else
		return jQuery.highlightFade.checkColorName(c) || d || null;
};

jQuery.highlightFade.asRGBString = function(a) {
	return "rgb(" + a.join(",") + ")";
};

jQuery.highlightFade.getBaseValue = function(e,a,b) {
	var s, t;
	b = b || false;
	t = a = a || jQuery.highlightFade.defaults['attr'];
	do {
		s = jQuery(e).css(t || 'color');
		if ((s  != '' && s != 'transparent') || (e.tagName.toLowerCase() == "body") || (!b && e.highlighting && e.highlighting[a] && e.highlighting[a].end)) break;
		t = false;
	} while (e = e.parentNode);
	if (!b && e.highlighting && e.highlighting[a] && e.highlighting[a].end) s = e.highlighting[a].end;
	if (s == undefined || s == '' || s == 'transparent') s = [255,255,255];
	return jQuery.highlightFade.getRGB(s);
};

jQuery.highlightFade.checkColorName = function(c) {
	if (!c) return null;
	switch(c.replace(/^\s*|\s*$/g,'').toLowerCase()) {
		case 'aqua': return [0,255,255];
		case 'black': return [0,0,0];
		case 'blue': return [0,0,255];
		case 'fuchsia': return [255,0,255];
		case 'gray': return [128,128,128];
		case 'green': return [0,128,0];
		case 'lime': return [0,255,0];
		case 'maroon': return [128,0,0];
		case 'navy': return [0,0,128];
		case 'olive': return [128,128,0];
		case 'purple': return [128,0,128];
		case 'red': return [255,0,0];
		case 'silver': return [192,192,192];
		case 'teal': return [0,128,128];
		case 'white': return [255,255,255];
		case 'yellow': return [255,255,0];
	}
};




// ОСНОВНЫЕ УТИЛИТЫ
$(function(){

  //Влаживаем внутрь некоторых элементов заклиреные блоки для очищения потока
  $("#wrapper2").append("<div style=\"clear: both;\"></div>");
  $("#content.afisha").append("<div style=\"clear: both;\"></div>");
  $("#content.web-kassa").append("<div style=\"clear: both;\"></div>");

  // Эффект в меню
  $('#navigation a').not('.active a').hover(
    function(e){
      $(e.target).stop().animate({
        left : '15px'
      },
      200)
      .highlightFade({
        start : '#4E4E4E',
        end : '#f00',
        speed : 200
      });
    },
    function(e){
      $(e.target).stop().animate({
        left : '0'
      },
      200)
      .highlightFade({
        start : '#f00',
        end : '#4E4E4E',
        speed : 200
      });
    }
  )

  // Анимация заголовков
  $('h1').spanize('anim',1);
  headerAnimate2 = headerAnimate1;
  function headerAnimate1(){
    $('h1').textscan({
      spanize : -1,
      unspanize : -1,
      spanClass : 'anim',
      initColor : 'f00',
      endColor : 'f00',
      transColor : 'fffc00',
      cb : headerAnimate2 // замыкаем эту функцию
    });
  }
  headerAnimate1();

  //Переключалка будни/выходные на странице «Web-касса»
  $("#content.web-kassa .switcher a.day-off-work").bind("click", function(){
    $("#content.web-kassa #prices div.working-days").css("display", "none");
    $("#content.web-kassa #prices div.day-off-work").css("display", "block");
    $("#content.web-kassa .switcher a.day-off-work").css("backgroundColor", "#4d4d4d");
    $("#content.web-kassa .switcher a.working-days").css("backgroundColor", "#989898");
  });
  $("#content.web-kassa .switcher a.working-days").bind("click", function(){
    $("#content.web-kassa #prices div.working-days").css("display", "block");
    $("#content.web-kassa #prices div.day-off-work").css("display", "none");
    $("#content.web-kassa .switcher a.day-off-work").css("backgroundColor", "#989898");
    $("#content.web-kassa .switcher a.working-days").css("backgroundColor", "#4d4d4d");
  });

  // Активируем jScrollPane скроллер, плюс ещё кое-что
  if ($(".jscrollpane").html()) {
    $(".jscrollpane").wrapInner('<div class="width"></div>'); // влаживаем контент скроллируемой области в блок с классом width
    $(".jscrollpane .width").width($(".jscrollpane .width").width() - 20); // задаём только что созданному блоку длинну на 20 пикселей меньшую от его начальной длинны
    if ($("#content.afisha").html()) $(".jscrollpane .width").width($(".jscrollpane .width").width() + 10); // Если находимся на странице «Афиша» или «Репертуар», то длинна содержимого скроллпейна становится на 10px больше чем везде
    if ($("#content.press").html()) $(".jscrollpane .width").width($(".jscrollpane .width").width() - 10);
    $(".jscrollpane p:first-child").css("marginTop", "0");   // Убираем верхний отступ у первого параграфа
    $(".jscrollpane p:last-child").css("marginBottom", "0"); // и нижний отступ у последнего
    $(".jscrollpane").jScrollPane({ scrollbarWidth : 6 }); // и только теперь активируем jScrollPane
  }


  // На странице «Новости» каждому нечетному элементу div.item задаём класс
  $('#content.news div.item:even').addClass('even');


  // ВЕБ-КАССА
  // При изменении спектакля в выпадающем списке отправляем форму
  $('#content.web-kassa select[name=performance-select]').bind('change', function(){
    $('#content.web-kassa #web-kassa-form').submit();
  });
  // Проверяем заполнены ли необходимые формы
  $('#content.web-kassa #submit-button').click(function(){
    if ($('#content.web-kassa #fio').val() == '') {
      alert('Укажите пожалуйста ваши фамилию и имя');
      return false;
    } else if ($('#content.web-kassa #phone').val() == '') {
      alert('Укажите пожалуйста ваш контактный телефон');
      return false;
    } else if ($('#content.web-kassa #tickets-numder').val() == '') {
      alert('Укажите пожалуйста количество билетов, которое вы хотите заказать');
      return false;
    }
  });

})









