﻿jQuery.noConflict();

jQuery(document).ready(function($){

    var histAPI = !!(window.history && history.pushState);
    var hash = document.location.hash;
    
    var $content = $('#content');

    var ajaxRequest = '';

    // Реализация ajax переходов по меню
    $.fn.ajaxMenu = function() {

        return this.each(function(){

            //var $obj = $(this);

            $(this).find('a').addClass('alink').click( function(){

                var href = $(this).attr('href');
                if(href != document.location.hash){ // текущий контент не перезагружаем 2й раз по клику на активную кнопку

                    href = href.replace(/[^#]*(#[\s\S]+)/g, "$1"); // исправляем глюк в ие, остальные нормальные браузеры не добавляют http:// к ссылкам

                    if(href.substr(0,1) == '#'){

                        var file_name = href.substr(1);

                        $content.children('.content_inner').slideUp(0, function(){
                           // если еще не делали ajax запрос (тк скрипт получает событие Изменен hash
                           // не только при клике на кнопки back/next в браузере, но и при изменении hash другими путями
                           // поэтому при поддержке history API ajaxGetPage может быть лишним, если уже сработала функция, привязанная к изменению hash
                                if(href != ajaxRequest){
                                    //$('#topnav').append('<p>ajaxMenu: href=' + href + '; ajaxRequest=' + ajaxRequest + '</p>');
                                    ajaxGetPage(file_name);
                                }
                        });

                    }

                } else {
                    //alert('херня какая-то!');
                }

            })

        });

    };

    $('#topnav, #portfolio_menu').ajaxMenu();

    var pageHashes = [];
    $('.alink').each(function(){ // для всех аякс ссылок

        var href = $(this).attr('href');
        if(href.substr(0,1) == '#'){
            pageHashes.push(href);
        }

    });

    // Подгружаем нужную страницу в зависимости от hash страницы)
    loadAjaxContent(hash);

    if(histAPI){

        $(window).bind("popstate",
        function(e) {
                onHashChangeEvent();
        }, true);
        
    }else {
        $(window).bind('hashchange',function(){
            onHashChangeEvent();
        })
    }

    function onHashChangeEvent(){

        if(document.location.hash != ajaxRequest){
            //$('#topnav').append('<p>histAPI: hash=' + document.location.hash + '; ajaxRequest=' + ajaxRequest + '</p>');

            loadAjaxContent(document.location.hash);
        }

    }

	// ------------------------------------------------------------------------------------

    // ---------------- Наведение на thumb главной страницы портфолио ---------------------
    $.fn.tHover = function(){

        return $(this).each(function(){

            var delay = 300;

            var left_block = $(this).find('.in_l');
            var lb_pos = left_block.position();
            var right_block = $(this).find('.in_r');
            var text_block = $(this).find('.thumb_info');

            var parent = $(this);

            var t;

            $.fn.vAlign = function(){

                return this.each(function(){

                    var top = parent.height()/2 - $(this).height()/2;

                    $(this).css('top', top);

                });

            }

            if(left_block.size() && right_block.size()){

                $(this).mouseenter(function(){

                    //$('#topnav').text(left_block.position().left);
                    //lb_pos = left_block.position();

                    left_block.animate({
                        left: 0,
                        top: 0
                    }, delay);

                    right_block.animate({
                        right: 0,
                        bottom: 0
                    }, delay);

                    t = setTimeout(function(){
                        text_block.removeClass('hidden').vAlign();
                    }, delay);


                });

                $(this).mouseleave(function(){

                    left_block.animate({
                        left: lb_pos.left,
                        top: lb_pos.top
                    }, delay);

                    right_block.animate({
                        right: lb_pos.left,
                        bottom: lb_pos.top
                    }, delay);

                    clearTimeout(t);
                    text_block.addClass('hidden');

                });
                
            }

        });

    };

    $('.thumb').tHover();

    // ------------------------------------------------------------------------------------

    // -------- Рандомное изменение текста в облачке ------------------------------

    $.fn.randText = function(){

        return $(this).each(function(){

            var txts = ['js', 'css', 'php', 'html', 'ajax', 'jquery',
                        'drupal', 'joomla', 'coding', 'markup', 'firefox', 'chrome',
                        'opera', 'safari', 'ie', 'cms', 'habr', 'css3', 'html5', 'ie6, die!',
                        'firebug', 'photoshop', 'TopStyle', 'webkit', 'gecko', 'denwer' ];

            var obj = $(this);

            obj.text(txts[ Math.floor(Math.random() * (txts.length) ) ]);

            setInterval(function(){
                   
               obj.text(txts[ Math.floor(Math.random() * (txts.length) ) ]);

            }, 1500);

        });

    };

    $('#cloud span').randText();

    // ______________________ ajax отправка письма ___________________________________

    //  валидация данных, вводимых пользователем
	$.fn.checkValidForm = function(){

		return $(this).each(function(){

			var errors = 0;
            var form = $(this);

			// обработка фокуса на элементах формы
			$(this).find('input[type!=submit], textarea').live('focus, click', function(){
				errors = 0;
				$(this).next('strong').remove();
				$(this).removeClass('field-err');
			});

			$(this).find('input[type=submit]').live('focus, click', function(){

				var i = 0;
				var err_message = '';
				var data = '';

			    var validElems = form.find('input:not([type=submit]), textarea');

				// проверим поля
				validElems.each(function(){

					var err = 0;

					// валидация по заполненности поля
					if($(this).hasClass('required')){

						if(!$(this).val()){
							err = 1;
							err_message = 'Заполните меня, пожалуйста!';
                            if($(this).attr('type') == 'file'){
                                err_message = 'Загрузите файл';
                            }
						}

					}

					// валидация по email
					if($(this).val() && $(this).hasClass('valEmail')){
						var re=/^([A-Za-z0-9_\.]+)@(\w+\.)(\w+)$/i;
						var result=re.test($(this).val());
						if(!result){
							err = 1;
							err_message = 'Адрес E-mail введен неправильно!';
						}
					}

					// валидация по номеру телефона
					if($(this).val() && $(this).hasClass('valPhone')){
						var re=/^7\d{10}$/i;
						var result=re.test($(this).val());
						if(!result){
							err = 1;
							err_message = 'Телефон введен неправильно! Введите подряд 11 цифр начиная с 7, например, 79211234567';
						}
					}

					// валидация по числу
					if($(this).val() && $(this).hasClass('isNum')){
						var re = /^\d+$/;
						var result = re.test($(this).val());
						if(!result){
							err = 1;
							err_message = 'Введите число';
						}
					}

					if(err){
						errors += 1;
						if(!$(this).next('strong').html()){
							$(this).addClass('field-err');
							$(this).after('<strong class="val-err">' + err_message + '</strong>');
						}
					}


				});

				if(errors){

                    $(this).addClass('disabled');
					return false;

				}

			});

		});

	};

	$('form.check-valid').checkValidForm();    

    $('#sendmail').live('click', function(e){

        e.preventDefault();

        var popup = new Popup('message', '<div id="ajaxLoader2"></div>', false, true);
        popup.show();

        var form = $(this).closest('form');

        var url = form.attr('action');
        var data = form.serialize() + '&ajax=1';

        $.ajax({
            type: 'post', // метод передачи данных скрипту
            url: url,
            data: data,
            cache: false,
            dataType: 'json', 
            success: function(answer) {
                $('#ajaxLoader2').remove();
                popup.pasteBlock('<div class="' + answer.cls + '">' + answer.text + '</div>');
            },
            error: function() {
                popup.pasteBlock('<div class="err_mess">Ошибка отправки письма.</div>');
            }
        });

    });

    // ______________________ /ajax отправка письма __________________________________



    /* _______________________________________________________________________________

                 FUNCTIONS
    _______________________________________________________________________________ */

    function ajaxGetPage(file_name){

        // выделяем активную ссылку
        $('a').removeClass('active').parent('li').removeClass('active');
        $('a[href="#' + file_name + '"]').addClass('active').parent('li').addClass('active');

        var url = '/index.php';

        if(file_name){

            if(file_name.match(/_/)){ // для хэш, который преобразуется к запросу с параметрами

                var params = file_name.split('_');

                url = '/' + params[0] + '.php' + '?';

                for(var i = 1; i < params.length; i++){

                    url += params[i];

                    if(i != params.length-1){
                        url += '&';
                    }

                }

            }else{

                url = '/' + file_name + '.php';

            }

        }

        $.ajax({
            type: 'get', // метод передачи данных скрипту
            url: url,
            cache: false,
            beforeSend: function() {
                showAjaxLoader();
            },
            success: function(html) {
                hideAjaxLoader();
                $content.html(html).children('.content_inner').css('display', 'none').slideDown(500);

                addFuncs();
            },
            error: function() {
                 $('#content').html('Такой страницы нет');
            }
        });

        ajaxRequest = '#' + file_name;

        setCookie('prev_page', ajaxRequest);

    }

    function addFuncs(){
        $('.thumb').tHover();
        $('form.check-valid').checkValidForm();
        $('#projects').ajaxMenu();
    }

    function showAjaxLoader(){

        $content.append('<div id="ajaxLoader" />');

    }
    function hideAjaxLoader(){

        $('#ajaxLoader').remove();

    }

    function loadAjaxContent(dhash){

        if(dhash && in_array(dhash, pageHashes, false)) {

            ajaxGetPage(dhash.substr(1));
            
        }else{

            // на главную страницу загружаем модуль Портфолио
            var path = window.location.pathname;

            if(path == '/'){
                ajaxGetPage('portfolio');
            }

            // подсвечиваем нужную ссылку
            $('a[href="' + path +'"]').addClass('active').parent('li').addClass('active');

        }

        // изменим переменную hash на новую
        hash = document.location.hash;

        ajaxRequest = document.location.hash;


    }

    // popup
    function Popup(popup_id, popup_content, close_button, temp){

        this.html = '<div id="opaco" class="hidden"></div>' +
                    '<div id="popup" class="hidden popup">' +
                        '<div class="rc">' +

                            '<div id="popup_' + popup_id + '" class="popup-content hidden">' +

                            '</div>' +
                            ( close_button ? '<a class="close-popup action close" href="#">Закрыть</a>' : '') +

                        '</div>' +
                    '</div>';

        // при инициализации попапа вставляем html код
        $('body').remove('#opaco').remove('#popup');
        $('body').append(this.html);


        this.popup_id = popup_id;

        this.popup_obj = $('#popup_' + popup_id);

        this.popup = $('#popup');

        this.popup_obj.html(popup_content);

        // функция центрирования в окне попапа
        this.alignCenter = function() {

            var marginLeft = - this.popup.width()/2 + 'px';
            var scrollTop = $('html').scrollTop()  || $('html').scrollTop() || $(window).scrollTop();

            var top = scrollTop + $(window).height()/2 - this.popup.height()/2 - 25;
            if(top<0){top = 0;}
            if($(window).height()< this.popup.height()){
                top = scrollTop;
            }
            top += 'px';

            this.popup.css({'margin-left':marginLeft, 'top':top});

        };

        // open popup
        this.show = function(){

            //alert(this.popup_obj.height());

            this.popup_obj.removeClass('hidden').children().removeClass('hidden');

            if($('body').height() < $('#container').height()){

                var h = $('#container').height();

                if((this.popup.offset().top + this.popup.height()) > (+$('#container').height())){
                    h = 50 + this.popup.height() + this.popup.offset().top + 'px';
                }

                $('#opaco').height(h);

            }

            $('#opaco').removeClass('hidden').animate({opacity: 0.7}, 300 );

            this.popup.removeClass('hidden');
            this.alignCenter();

            // если попап блок имеет класс temp, то через опред время он исчезает
            if(temp || this.popup_obj.hasClass('temp')){
                setTimeout(function() {
                    close();
                },3000);
            }

            if(close_button){

                $('.close-popup, #opaco').click(function(event) {

                    event.preventDefault();

                    close();

                    var returnTrue = 0;
                    if($(this).hasClass('returnTrue')) returnTrue = 1;
                    if(!returnTrue){
                        //return false;
                    }

                });

            }

            //close pop-up box
            function close(){

                $('#popup_' + popup_id).addClass('hidden');
                $('#popup').addClass('hidden');
                $('#opaco').addClass('hidden').removeAttr('style').unbind('click');

            }

        }

        this.pasteBlock = function(block){

            this.popup_obj.html(block);

        }


    }



});

function in_array(needle, haystack, strict) {   // Checks if a value exists in an array

    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)

    var found = false, key, strict = !!strict;

    for (key in haystack) {

        if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {

            found = true;
            break;

        }

    }

    return found;

}

// Установить куки
function setCookie(name, value) {
      var valueEscaped = escape(value);
      var expiresDate = new Date();
      expiresDate.setTime(expiresDate.getTime() + 365 * 24 * 60 * 60 * 1000); // срок - 1 год, но его можно изменить
      var expires = expiresDate.toGMTString();
      var newCookie = name + "=" + valueEscaped + "; path=/; expires=" + expires;
      if (valueEscaped.length <= 4000) document.cookie = newCookie + ";";
}

// Получить куки
function getCookie(name) {
      var prefix = name + "=";
      var cookieStartIndex = document.cookie.indexOf(prefix);
      if (cookieStartIndex == -1) return null;
      var cookieEndIndex = document.cookie.indexOf(";", cookieStartIndex + prefix.length);
      if (cookieEndIndex == -1) cookieEndIndex = document.cookie.length;
      return unescape(document.cookie.substring(cookieStartIndex + prefix.length, cookieEndIndex));
}





