$(document).ready(function(){

	$('a[name=modal]').live('click', function(e) {
		$('.window').hide(400);
		e.preventDefault();
		var id = $(this).attr('href');
		var winH = $(window).height();
		var winW = $(window).width();
		
		// Костыль для ИЕ7
		id = id.split('#');
		id = '#' + id[1];
		
		if ($(id + ' form').attr('id') != 'cart_form') {
		    $(id + ' form input:text').val('');
		    $(id + ' form textarea').val('');
		    $(id + ' form').css('display', 'block');			
		} else {
			var cnt = $('.cart_count a').html();
			var reg = /(\d+)\s(\D+)/;
			var s = reg.exec(cnt);
			if (s == null) {
				return false;
			}
		}
		$(id + ' p.result_text').css('display', 'none');
		
		$(id).fadeIn(400); 
        //for ie z-index
        $(this).parents('.set_pr').siblings('.set_pr').removeClass('set_pr_popup_active');
        $(this).parents('.set_pr').addClass('set_pr_popup_active');
		
	});
	$('.window .close').live('click', function (e) {
		e.preventDefault();
		$('.window').hide(400);
	});
						   
	$('form.ajax input.submit').live('click', function(){
		var _form = $(this).parents('form');
		form_submit(_form);
	});
	

	$('form#cart_form input.set-text').live('keyup', function(){
		var v = $(this).val();
		v = parseInt(v);
		if (v < 0) {
			v = 1;
		}
		$('form#cart_form input.set-text2').val(v.toString());
		$(this).val(v.toString() + 'шт');
		deffered_cart_update();
	});
	
	// Изменения вручную поля количества у комплекта
	$('input#incart_price2').live('focus', function(){	
		$(this).select();
	});
	
	$('input#incart_price2').live('keyup', function(){
		var v = $(this).val();
		if (v == 'шт') return;
		if (v == '') v = '0';		
		v = parseInt(v);
		$('input#incart_price').val(v.toString());
		$(this).val(v.toString() + 'шт');
	});
	
	// Изменения вручную поля количества у отдельного товара	
	$('form#product_form input.set-text').live('focus', function(){	
		$(this).select();
	});

	$('form#product_form input.set-text').live('keyup', function(){
		var v = $(this).val();
		if (v == 'шт') return;
		if (v == '') v = '0';
		v = parseInt(v);
		$('form#product_form input.set-text2').val(v.toString());
		$(this).val(v.toString() + 'шт');
	});
	
	$('a.incart-minus, a.set-minus').live('click', function(){
		if ($(this).parent('.incart').length > 0) {
			var _p = $(this).parent('.incart');
			var input = 'input#incart_price';
			var show = 'input#incart_price2';
		} else {
			var _p = $(this).parent('.set-count');
			var input = 'input.set-text2';
			var show = 'input.set-text';
		}
		var v = $(input, _p).val();
		v = parseInt(v);
		if (v > 0) {
			v = v - 1;
			$(input, _p).val(v.toString());
		}
		$(show, _p).val(v.toString() + 'шт');
		
		if ($(_p).parents('div.cart').length > 0) {
			deffered_cart_update();
		}
		return false;
	});
	
	$('a.incart-plus, a.set-plus').live('click', function(){
		if ($(this).parent('.incart').length > 0) {
			var _p = $(this).parent('.incart');
			var input = 'input#incart_price';
			var show = 'input#incart_price2';
		} else {
			var _p = $(this).parent('.set-count');
			var input = 'input.set-text2';
			var show = 'input.set-text';
		}
		var v = $(input, _p).val();
		v = parseInt(v);
		v = v + 1;
		
		$(input, _p).val(v.toString());
	    $(show, _p).val(v.toString() + 'шт');
		
		if ($(_p).parents('div.cart').length > 0) {
			deffered_cart_update();
		}
		return false;
	});
	
	/*
	$('div#cart_panel input.set-text').live('keyup', function(){
		deffered_cart_update();
	});
	*/
	
	$('.qa a.cat_link').toggle(
		function(){
			$(this).next('.q_category').slideDown('fast');
		},
		function(){
			$(this).next('.q_category').slideUp('fast');			
		}
	);
	
	$('.qa a.answer_link').toggle(
		function(){
			$(this).next('.q_answer').slideDown('fast');
		},
		function(){
			$(this).next('.q_answer').slideUp('fast');			
		}
	);

	$('a.useful_link_1').toggle(
		function(){
			$(this).next('p.text').slideDown('fast');
		},
		function(){
			$(this).next('p.text').slideUp('fast');			
		}
	);

	$('a.useful_link_2').toggle(
		function(){
			$(this).next('p.text').slideUp('fast');			
		},
		function(){
			$(this).next('p.text').slideDown('fast');			
		}
	);
	
	$('a.mini').bind('click', function(){
		var id = $(this).attr('id');
		id = id.split('_');
		id = id[1];
		$('a.bigimg').css('display', 'none');
		$('a#big_' + id).css('display', 'block');
		var newprice = $('#price_' + id).html();
		
		var name = $('#incart_price').attr('name');
		var reg = /cart\[97\]\[(.*)\]/;
		name = reg.exec(name);
		name = name[1];
		name = name.split(':');

		var tid = name[0];
		name = 'cart[97][' + tid + ':' + id + ']';
		$('#incart_price').attr('name', name);
		
		$('.pr_detail_descr .price').fadeOut('fast', function(){
			if (newprice!='0'){
			$('.pr_detail_descr .price .value').html(newprice);
			$('#set-num-field').val(id);
			$('.pr_detail_descr .price').fadeIn('fast');
			}
		});
		return false;
	});
	
	
	$('.slider_pages a').live('click', function(){
		
	});

});

// Главная функция для сабмита аяксовых форм
function form_submit(_form) {
	var vals = $(_form).serialize();
	var action = $(_form).attr('action');
	var id = $(_form).attr('id');
	
	// Флаг - постить форму или нет
	var post = true;
	
	switch (id) {
		case 'login_form':
			post = before_login(_form);
			break;
		case 'contact_form':
			post = validate(_form);
			break;			
		case 'ask_form':
			post = validate(_form);
			break;			
		case 'ordercall_form':
			post = validate(_form);
			break;	
		/*	
		case 'set_form':
			alert(vals);
			break;
		*/
		/*
		case 'cart_form':
			post = validate(_form);
			break;			
		*/	
		case 'order_form':
			post = validate(_form);
			break;			
			
	}
	
	if (!post) return;
	$.post(action, vals, function(data){
		switch (id) {
			case 'product_form':
				after_cart_add(data, id);
				break
			case 'cart_form':
				after_cart_add(data, id);
				$('div#order-win').css('display', 'block');
				break;
			case 'set_form':
				after_cart_add(data, id);
				break;
			case 'login_form':
				after_login(data);
				break;
			case 'contact_form':
				show_result(_form, data);
				break;
			case 'ask_form':
				show_result(_form, data);
				break;
			case 'ordercall_form':
				show_result(_form, data);
				break;
			case 'order_form':
				after_order_submit(_form, data);			
				show_result(_form, data);
				break;
		}
	});
}

function after_order_submit(_form, data) {
	$('#order-win #cart_form').remove();
	$('#order-win .order-separator').remove();
	$('#order-win .total-name').remove();
	$('#order-win .total-price').remove();
	$('.cart_count a').html('пусто');
}


function show_result(_form, data) {
	if ($('p.result_text', _form).length == 0) {
		$(_form).after('<p class="result_text"></p>');
	}
	$(_form).next('p.result_text').html(data);
	$(_form).slideUp('slow');

}

function before_login(_form) {
	var err = 'Поля "Логин" и "Пароль" должны быть заполнены';
	if ($("input[name='login']", _form).val() == '' || $("input[name='pass']", _form).val() == '') {
		form_err_message(_form, err);
		return false;
	}
	return true;
}



function form_err_message(_form, err) {
	if ($('p.auth_color', _form).css('display') == 'block') {
		$('p.auth_color', _form).fadeOut('fast', function(){
			$('p.auth_color', _form).html(err);
			$('p.auth_color', _form).fadeIn('fast');
		});
	} else {
		$('p.auth_color', _form).html(err);
		$('p.auth_color', _form).fadeIn('fast');
	}
}

function after_login(data) {
	var res = data.split('::::');
	if (res[0] == '1') {
		$('a#dealers_login_link').before('<span class="login_info" style="color:white;">' + res[1] + ', <a href="/logout/?return=' + res[2] + '">выйти</a></span>');
		$('a#dealers_login_link').remove();
		$('div#dilers a.close').click();
		$('li.dealers_only').css('display', 'list-item');
	} else {
		var err = 'Неверный логин или пароль';
		var _form = $('form#login_form');
		form_err_message(_form, err);
	}
}

function after_cart_add(data, id) {
	var parts = data.split('::::');
	var cart = unserialize(parts[1]);
	for(var i in cart) {
		for(var j in cart[i]) {
			var am = cart[i][j];
			//alert(i.toString() + ' : ' + j.toString() + ' : ' + am.toString());
			if (i == 97) {
				var p = $(".incart input[name='cart[" + i.toString() + "][" + j.toString() + "]']").parents('.incart');
				if ($(p).length > 0) {
			        $('.added', p).remove();
				    $(p).append('<div class="added">' + am + ' шт добавлено в запрос</div>');
				}
			}
			if (i == 102) {
				var p = $(".set-count input[name='cart[" + i.toString() + "][" + j.toString() + "]']").parents('.set-count').parents('.set_pr');
				if ($(p).length > 0) {
			        $('.added', p).remove();
				    $(p).append('<div class="added">' + am + ' в запросе</div>');
				}
			}
		}
	}
	
	if (id == 'product_form') {
		$('form#product_form div.tab_content').each(function(){
			if ($(this).css('display') == 'block') {
				$('input.set-text2', this).val('0');
				$('input.set-text', this).val('0шт');
			}
            $('.set-btn .faq').show();
            $('.set-btn .faq').fadeOut(2000);
	    });
	}
	$('div.cart').html(parts[0]);
}


// Отложенное на секунду обновление корзины
function deffered_cart_update() {
	$("#cart_panel").stopTime();
	$('#cart_panel').everyTime(1000, function(i) {
		$("#cart_panel").stopTime();
		_form = $('form#cart_form');
		form_submit(_form);
	});
}

function submit_anketa() {
	vals = $('form#anketa_form').serialize();
	$.post('/anketa/saveresults/', vals, function(){
		$('div#questionnaires form').remove();
		$('div#questionnaires h4').after('<div style="text-align:center; padding-top:80px; padding-bottom:120px;">Анкета успешна добавлена в базу данных. Спасибо Вам за участие в анкетировании.</div>');
	})
}

function unserialize (data) {
    // Takes a string representation of variable and recreates it  
    // 
    // version: 1004.2314
    // discuss at: http://phpjs.org/functions/unserialize    // +     original by: Arpad Ray (mailto:arpad@php.net)
    // +     improved by: Pedro Tainha (http://www.pedrotainha.com)
    // +     bugfixed by: dptr1988
    // +      revised by: d3x
    // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)    // +        input by: Brett Zamir (http://brett-zamir.me)
    // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     improved by: Chris
    // +     improved by: James
    // +        input by: Martin (http://www.erlenwiese.de/)    // +     bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     improved by: Le Torbi
    // +     input by: kilops
    // +     bugfixed by: Brett Zamir (http://brett-zamir.me)
    // -      depends on: utf8_decode    // %            note: We feel the main purpose of this function should be to ease the transport of data between php & js
    // %            note: Aiming for PHP-compatibility, we have to translate objects to arrays
    // *       example 1: unserialize('a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}');
    // *       returns 1: ['Kevin', 'van', 'Zonneveld']
    // *       example 2: unserialize('a:3:{s:9:"firstName";s:5:"Kevin";s:7:"midName";s:3:"van";s:7:"surName";s:9:"Zonneveld";}');    // *       returns 2: {firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'}
    var that = this;
    var utf8Overhead = function(chr) {
        // http://phpjs.org/functions/unserialize:571#comment_95906
        var code = chr.charCodeAt(0);        if (code < 0x0080) {
            return 0;
        }
        if (code < 0x0800) {
             return 1;        }
        return 2;
    };
 
     var error = function (type, msg, filename, line){throw new that.window[type](msg, filename, line);};
    var read_until = function (data, offset, stopchr){
        var buf = [];
        var chr = data.slice(offset, offset + 1);
        var i = 2;        while (chr != stopchr) {
            if ((i+offset) > data.length) {
                error('Error', 'Invalid');
            }
            buf.push(chr);            chr = data.slice(offset + (i - 1),offset + i);
            i += 1;
        }
        return [buf.length, buf.join('')];
    };    var read_chrs = function (data, offset, length){
        var buf;
 
        buf = [];
        for (var i = 0;i < length;i++){            var chr = data.slice(offset + (i - 1),offset + i);
            buf.push(chr);
            length -= utf8Overhead(chr); 
        }
        return [buf.length, buf.join('')];    };
    var _unserialize = function (data, offset){
        var readdata;
        var readData;
        var chrs = 0;        var ccount;
        var stringlength;
        var keyandchrs;
        var keys;
         if (!offset) {offset = 0;}
        var dtype = (data.slice(offset, offset + 1)).toLowerCase();
 
        var dataoffset = offset + 2;
        var typeconvert = function(x) {return x;}; 
        switch (dtype){
            case 'i':
                typeconvert = function (x) {return parseInt(x, 10);};
                readData = read_until(data, dataoffset, ';');                chrs = readData[0];
                readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case 'b':                typeconvert = function (x) {return parseInt(x, 10) !== 0;};
                readData = read_until(data, dataoffset, ';');
                chrs = readData[0];
                readdata = readData[1];
                dataoffset += chrs + 1;            break;
            case 'd':
                typeconvert = function (x) {return parseFloat(x);};
                readData = read_until(data, dataoffset, ';');
                chrs = readData[0];                readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case 'n':
                readdata = null;            break;
            case 's':
                ccount = read_until(data, dataoffset, ':');
                chrs = ccount[0];
                stringlength = ccount[1];                dataoffset += chrs + 2;
 
                readData = read_chrs(data, dataoffset+1, parseInt(stringlength, 10));
                chrs = readData[0];
                readdata = readData[1];                dataoffset += chrs + 2;
                if (chrs != parseInt(stringlength, 10) && chrs != readdata.length){
                    error('SyntaxError', 'String length mismatch');
                }
                 // Length was calculated on an utf-8 encoded string
                // so wait with decoding
                //readdata = that.utf8_decode(readdata);
            break;
            case 'a':                readdata = {};
 
                keyandchrs = read_until(data, dataoffset, ':');
                chrs = keyandchrs[0];
                keys = keyandchrs[1];                dataoffset += chrs + 2;
 
                for (var i = 0; i < parseInt(keys, 10); i++){
                    var kprops = _unserialize(data, dataoffset);
                    var kchrs = kprops[1];                    var key = kprops[2];
                    dataoffset += kchrs;
 
                    var vprops = _unserialize(data, dataoffset);
                    var vchrs = vprops[1];                    var value = vprops[2];
                    dataoffset += vchrs;
 
                    readdata[key] = value;
                } 
                dataoffset += 1;
            break;
            default:
                error('SyntaxError', 'Unknown / Unhandled data type(s): ' + dtype);            break;
        }
        return [dtype, dataoffset - offset, typeconvert(readdata)];
    };
        return _unserialize((data+''), 0)[2];
}

function get_page(sub, page, id) {
	$.post('/submain/', {sub:sub, page:page, id:id}, function(data){
		var _p = $('li#' + id);
		$('ul', _p).remove();
		$('div.clear', _p).remove();
		$('h2', _p).after(data);
	});
}

function isValidEmail(email) {
	return (/^([a-z0-9_\-]+\.)*[a-z0-9_\-]+@([a-z0-9][a-z0-9\-]*[a-z0-9]\.)+[a-z]{2,4}$/i).test(email);
}

function createMarker(x, y, comment, opt) {  
    // Создаем точку на карте с координатами x и y  
    var point = new GLatLng(x, y);  
      
    // Создаем маркер в указанной точке  
    var marker = new GMarker(point, opt);  
       
    // Добавляем обработчик события нажатия на маркер  
    GEvent.addListener(marker, "click", function() {  
        // При нажатии открывается информационное окно с заданным текстом  
        marker.openInfoWindowHtml(comment);  
    });  
      
    return marker;  
} 

function validate(_form) {
	var valid = true;
	var err = '';
	$('input.req', _form).each(function(){
		if ($(this).val() == '') {
			valid = false;
		}
	});
	$('textarea.req', _form).each(function(){
		if ($(this).val() == '') {
			valid = false;
		}
	});
	if (!valid) {
		err = 'Не все обязательные поля заполнены';
		form_err_message(_form, err);
		return valid;
	}
	
	$('input.email', _form).each(function(){
		if (!isValidEmail($(this).val())) {
			err = 'Значение в поле Email имеет неправильный формат';
			valid = false;
		}
	});
	
	if (!valid) {
		form_err_message(_form, err);
		return valid;
	}
	
	return valid;
}

