
$(document).ready(function(){

  // ------- Диалог -------
  $("#popup_desc_div").dialog({
    title: "Описание товара",
    autoOpen: false,
    width: 800,
    height: 700,
    resizable: false,
    draggable: true,
    position: "center",
    buttons: {
          'Закрыть': function() { $('input').show(); $("#service_name").show(); $(this).dialog('close'); }  
    }  
  });
  // ------- Диалог -------

    $(findOptions.srcInput).keydown(function(e) {
        // track last key pressed
        lastKeyPressCode = e.keyCode;
        switch(e.keyCode) {
            case 38: // up
                //e.preventDefault();
                //moveSelect(-1);
                break;
            case 40: // down
                //e.preventDefault();
                //moveSelect(1);
                break;
            case 9:  // tab
            case 13: // return
                //if( selectCurrent() ){
                    // make sure to blur off the current field
                    //$input.get(0).blur();
                    //e.preventDefault();
                //}
                break;
            default:
                //active = -1;
                if (timeout) clearTimeout(timeout);
                timeout = setTimeout(function(){onInputChange();}, findOptions.delay);
                //onChange();
                break;
        }
    });

    //clear services order cookie on load
    clearServicesCookies();

    if(typeof $.cookie("fio") == "string") {
        //alert(str);
        $("#firstname").val($.cookie("fio"));
    }
    if(typeof $.cookie("email") == "string") {
        $("#email").val($.cookie("email")+"");
    }
    if(typeof $.cookie("tel") == "string") {
        $("#phone").val($.cookie("tel")+"");
    }


});

	var timeout = null;
	var prev = "";
    var lastKeyPressCode;
    var findOptions;
    var servicesDesc = new Array ();
    var servicesId = new Array ();
    //var servicesLinks = new Array ();

    findOptions = {
        delay: 10, 
        minChars: 4,
        extraParams: {where:"service"},
        srcInput: "#service_find",
        destDiv: "#service_select",
        loadingClass: "ac_loading",
        url: "get_select_data.php"
    };


function onInputChange() {
    var v = $(findOptions.srcInput).val();
    if (v == prev) return;
    prev = v;
    if (v.length >= findOptions.minChars) {
        requestSelectData(v);
    } else {
        $(findOptions.srcInput).removeClass(findOptions.loadingClass);
    }
};

function requestSelectData(q) {
    $(findOptions.srcInput).addClass(findOptions.loadingClass);

    //if (!options.matchCase) q = q.toLowerCase();
    //alert (makeRequestUrl(q));
    if( (typeof findOptions.url == "string") && (findOptions.url.length > 0) ){
        $.get(makeRequestUrl(q), function(data) {
			//alert(data);
            if (data) {
                var aData = data.split("<!data_part!>");

                // change select
                if(findOptions.destDiv != "") {
                  $(findOptions.destDiv).html(aData[2]);
                }

                // fill descriptions array
                servicesDesc = aData[0].split("<!separator!>");

                // fill good id array
                servicesId = aData[1].split(";");

                // fill links array
                //servicesLinks = aData[3].split("<!separator!>");

                // refresh description
                onServiceNameChange();
            }
            $(findOptions.srcInput).removeClass(findOptions.loadingClass);
        });
    } else {
        $(findOptions.srcInput).removeClass(findOptions.loadingClass);
    }
}

function makeRequestUrl(q) {
    var url = findOptions.url + "?q=" + encodeURI(q);
    for (var i in findOptions.extraParams) {
        url += "&" + i + "=" + encodeURI(findOptions.extraParams[i]);
    }
    //alert(url);
    return url;
};



var types = Array ("spare", "service", "machine", "testdrive");
var typesRus = Array ("Запчасть", "Сервис", "Техника", "Тест-драйв");

var serviceMaxRowId = 0;
var serviceRowOffset = 2;

function addServiceRow(serviceName, serviceCnt, serviceId, serviceDesc) {
    var rowId, oRow, oCelll;

    //check
    if(serviceName =="") {
        alert("Добавление невозможно, так как не выбран сервис.");
        return false;
    }
    if(serviceCnt < 1) {
        alert("Добавление невозможно, так как количество меньше 1.");
        return false;
    }
    //alert("add rom");
    var table = document.getElementById('buy_services_table');
    if(table) {
        //tb = table.getElementsByTagName('TBODY')[0];

        //alert("table found");

        
        serviceMaxRowId++;
        rowId = serviceMaxRowId;

        var row = "<tr id='services"+rowId+"' clearid='" + rowId + "' spname='" + serviceName + "' spcount='" + serviceCnt + "' spid='" + serviceId + "'>";
        row += "<td>"+serviceName+"</td><td>"+serviceDesc+"</td><td>"+serviceCnt+"</td><td>Есть</td><td align=center>";
        row += "<a id='delField_" + rowId + "' href=\"javascript:void('" + rowId + "')\" onClick=\"onDeleteService(" + rowId + ");return false;\">Удалить</a>";
        row += "</td></tr>\n";
        //alert(row);
        $("#buy_services_table").append(row);
    }
}

function getRowIndex(rowId){
    if (rowId != '') {
        for(i = serviceRowOffset; i < buy_services_table.rows.length; i++){
            if(rowId == buy_services_table.rows[i].getAttribute("clearid")){
                return i;
            }
        }
    }
}

function deleteServiceRow(rowId){
    var rowIdName = '#services' + rowId;
    if (rowId != '') {
        $(rowIdName).replaceWith("");
    }
}

function clearServicesCookies() {
    $.cookie("buy_services_list", null);
}

function updateServicesList() {
    var newList = '';
    var serviceName;
    var serviceCnt;
    var spareId;
    var i;
    //alert("oldList = " + $.cookie("buy_services_list"));

    for(i = serviceRowOffset; i < buy_services_table.rows.length; i++){
        serviceName = buy_services_table.rows[i].getAttribute("spname");
        serviceCnt = buy_services_table.rows[i].getAttribute("spcount");
        serviceId = buy_services_table.rows[i].getAttribute("spid");
        if(newList != '') {
            newList += "`";
        }
        newList += serviceId + "|" + serviceName + "|" + serviceCnt + "|" + "service";
    }

    //alert("newList = " + newList);
    clearServicesCookies();
    $.cookie("buy_services_list", newList);
}

function updateContacts(contName, val) {
    if(contName == "fio" || contName == "email" || contName == "tel") {
        $.cookie(contName, val);
    }
    //alert("newContacts: " + $.cookie("fio") + $.cookie("email") + $.cookie("tel"));
}

function onAddServicesSubmit(form) {
    if(form.service_name && form.service_cnt) {
        var serviceName = form.service_name.value;
        var serviceCnt = form.service_cnt.value;
        var serviceId = servicesId[form.service_name.selectedIndex];
        var serviceDesc = getDescShortText(form.service_name.selectedIndex);
    } else {
        alert("Ошибка: не удалось добавить сервис в корзину. Попробуйте использовать другой браузер.");
        return false;
    }
    //alert(serviceName + " - " + serviceCnt);

    // add to table
    addServiceRow(serviceName, serviceCnt, serviceId, serviceDesc);

    // update cookies by table
    updateServicesList();

    return false;
}

function onDeleteService(rowId) {

    // delete from table
    deleteServiceRow(rowId);

    // update cookies by table
    updateServicesList();

    return false;
}

function getInfoValue(orderList) {
    var infoValue = "";
    var aList;
    var aService;
    var tmpType;
    if(typeof orderList == "string") {

        aList = orderList.split("`");
        if(aList.length) {
            for(var i=0; i < aList.length; i++) {
                //if(infoValue.length) {
                    infoValue += "\n";
                //}
                aService = aList[i].split("|");
                tmpType = typesRus[types.indexOf(aService[3])];
                if(tmpType == "") {
                    tmpType = aService[2];
                }
                infoValue += "id:" + aService[0] + ", название: " + aService[1] + ", количество: " + aService[2] + ", тип: " + tmpType;
            }
        }
    }
    return infoValue;
}

function onBuyServicesSubmit(form) {

    // fill info field by services list
    var tmpList = $.cookie("buy_services_list");
    var infoValue = getInfoValue(tmpList);

    form.info.value = infoValue;
    form.orderlist.value = tmpList;
    //alert("info: " + form.info.value);

    // checks form
    if (form.info.value == '') {
        alert("Не выбраны запчасти для покупки");
        return false;
    }
    if (form.firstname.value == '') {
        form.firstname.focus();
        alert("Введите ваше имя");
        return false;
    }
    if (form.email.value == '') {
        form.email.focus();
        alert("Введите правильный адрес электронной почты");
        return false;
    } else if(isEmail(form.email.value) == false) {
        form.email.focus();
        alert("Некорректный адрес электонной почты!");
        return false;
    }

    if (form.phone.value == '') {
        form.phone.focus();
        alert("Введите телефон");
        return false;
    }
    if (!isPhone(form.phone.value)) {
        form.phone.focus();
        alert("Введите, пожалуйста, настоящий телефон. Телефонный номер должен содержать только цифры, допускаются пробелы, скобки, '+', '-'");
        return false;
    }

    clearServicesCookies();

    // save return url to form
    $("#return_page_url").val(window.location);

    return true;
}

function isPhone(string) {
    if(string.search(/^[0-9+() -]+$/) != -1) {
        return true;
    }else{
        return false;
    }
}

function onBuyServicesClick() {
    var form = document.getElementById('services_form');
    if(form == null) {
        form = document.all['services_form'];
    }
    if(form) {
        if(onBuyServicesSubmit(form)) {
            //alert("form ok");
            form.submit();
        }
    } else {
        alert("Ошибка скрипта - не найдена форма");
    }
    return false;
}

function onAddServiceClick() {
    var form = document.getElementById('add_services');
    if(form == null) {
        form = document.all['add_services'];
    }
    if(form) {
        return onAddServicesSubmit(form);
    } else {
        alert("Ошибка скрипта - не найдена форма");
    }
    return false;
}

function onClearServicesClick() {
    //alert(serviceMaxRowId);
    var rowIdName;
    if(serviceMaxRowId > 0) {
        for(var i = 1; i <= serviceMaxRowId; i++) {
            rowIdName = '#services' + i;
            $(rowIdName).replaceWith("");
        }
    }
    serviceMaxRowId = 0;
    clearServicesCookies();
    return false;
}

function onServiceNameChange() {
    var sel = document.getElementById('service_name');
    var desc_text = "";
    if (sel) {
        if (sel.disabled) {
            $('#service_desc').html('');
        } else {
            desc_text += getDescShortText(sel.selectedIndex);
            $('#service_desc').html(desc_text);
        }
    }
}

function getDescShortText(index) {
    var desc_text = servicesDesc[index];
    //desc_text = servicesDesc[index];
    if(desc_text.length > 64) {
/*
        desc_text = desc_text.slice(0, 60);
        desc_text +=" ...";
//*/
        desc_text = "";
        desc_text += " <a href='javascript:onDescClick(" + index + ")' style='color: #808080;'>Посмотреть описание</a>";
    }

    if(desc_text.length == 0) {
        desc_text += 'Описание отсутствует';
    }

    return desc_text;
}

/*
function getDescFullText(index) {
    var desc_text = "";
    var lnk = 'javascript:void(0);';

    desc_text = servicesDesc[index];
    if(desc_text.length == 0) {
        desc_text += 'Описание отсутствует';
    }

    desc_text += "\n<p><a id=det_link href='" + lnk + "' target='wnd" + index + "' onClick=\"javascript:$('#popup_desc_div').dialog('close')\">Страница товара</a>\n";

    return desc_text;
}
*/


function onDescClick(index) {
    //var htmlDesc = getDescFullText(index);
    //var url = findOptions.url + "?q=" + servicesId[index] + "&where=link";
    //var lnk;
    var bodyCursor = $("body").css("cursor");
    $("body").css("cursor", "wait");

    $.get(findOptions.url, {q: servicesId[index], where: "desc"}, function(data) {
        //alert(data);
        
        $("body").css("cursor", bodyCursor);
        $('#popup_desc_div').html(data);
        //$("#det_link").attr('href', data);
        $("#popup_desc_div").show();
        $("#service_name").hide();
        $('input').hide();
        //$("#service_name").css('z-index', '10');
        //$("#popup_desc_div").css('z-index', '1000');
        $("#popup_desc_div").dialog("open");
    });

}

function base64_encode( data ) {    // Encodes data with MIME base64
    // 
    // +   original by: Tyler Akins (http://rumkin.com)
    // +   improved by: Bayron Guevara
 
    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i=0, enc='';
 
    do { // pack three octets into four hexets
        o1 = data.charCodeAt(i++);
        o2 = data.charCodeAt(i++);
        o3 = data.charCodeAt(i++);
 
        bits = o1<<16 | o2<<8 | o3;
 
        h1 = bits>>18 & 0x3f;
        h2 = bits>>12 & 0x3f;
        h3 = bits>>6 & 0x3f;
        h4 = bits & 0x3f;
 
        // use hexets to index into b64, and append result to encoded string
        enc += b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
    } while (i < data.length);
 
    switch( data.length % 3 ){
        case 1:
            enc = enc.slice(0, -2) + '==';
        break;
        case 2:
            enc = enc.slice(0, -1) + '=';
        break;
    }
 
    return enc;
}