function extendSoc(ext){
    var soc = {
        id: null,
        authUrl: '/index.php5?class=ads&module=objects&adsPart=auth',
        userAdsUrl: '/index.php5?class=search&module=objects',
        getData: function(){
            
        },
        getLoginStatus: function(){
        
        }
    }  
    return $.extend(soc, ext || {});  
}



$.vk = extendSoc({
    //appId: 2452992,
    appId: 2759459,
    //appId: 2728106, 
    
    getData: function(mid){
        VK.Api.call('getProfiles', {
            uids: mid, 
            fields: 'uid,first_name,last_name,photo_big,photo_rec'
        }, function(r) {          
			if(r.response[0]) {
                var userInfo = r.response[0];
                var enteredEmail = $('#addEmail').val();

                var postData = {
                    s_id: userInfo['uid'],    
                    first_name: userInfo['first_name'],    
                    last_name: userInfo['last_name'],    
                    avatar: userInfo['photo_big'],    
                    cavatar: userInfo['photo_rec'],    
                    email: enteredEmail,
                    t: 1
                }

                $.ajax({ 
                    url: $.vk.authUrl, 
                    type: 'GET',
                    data: postData, 
                    dataType: 'json',
                    success: function(r, s) { 
                        var objectId = $('#adsSocLogin').attr('rel');               
                        location.href = $.vk.userAdsUrl+'&objectId='+objectId+'&tab=ads&adsPart=user';
                    }
                });    
            }
        });    
    },

    getLoginStatus: function(){
        function authInfo(response){
            if (response.session) {
                $.vk.getData(response.session.mid);
            } else {
                VK.Auth.login(authInfo);
            }    
        }

        VK.Auth.getLoginStatus(authInfo);   
    }    
});

$.fb = extendSoc({
    appId: '269384723072111',
    //appId: '296182490417541',
    getData: function(){
        FB.api('/me', function(userInfo) {
            if(userInfo != null) {                                    
                var enteredEmail = $('#addEmail').val();

                var postData = {
                    s_id: userInfo['id'],    
                    first_name: userInfo['first_name'],    
                    last_name: userInfo['last_name'],    
                    avatar: 'http://graph.facebook.com/' + userInfo['id'] + '/picture?type=large',    
                    cavatar: 'http://graph.facebook.com/' + userInfo['id'] + '/picture',
                    email: enteredEmail,
                    t: 2    
                }

                $.ajax({ 
                    url: $.fb.authUrl, 
                    type: 'GET',
                    data: postData, 
                    dataType: 'json',
                    success: function(r, s) { 
                        var objectId = $('#adsSocLogin').attr('rel');               
                        location.href = $.fb.userAdsUrl+'&objectId='+objectId+'&tab=ads&adsPart=user';    
                    }
                });        
            }
        });    
    },
    getLoginStatus: function(){
        FB.getLoginStatus(function(response){
            if (response.session){
                $.fb.getData();
            }else{
                FB.login(function(response){
                    if (response.session){
                        $.fb.getData();
                    }                                                
                });
            }    
        });    
    }    
});

function adsSocLogin(){
    $('#adsSocLoginPopup').toggle(); 
    $('#res_overlay').toggle().height($(document).height());   
}

function relations(link){
    var url = link.attr('href');
    
    function adsPostForm(){
        var form = $('.ads_post');
        form.find('.choice option').die().live('dblclick', function(){
            var parentForm = $(this).parents('.ads_post').first();

            var toSelect = parentForm.find('.choose');
            var curNumber = parseInt(parentForm.find('.currentSelected').text());
            var maxNumber = parseInt(parentForm.find('.maxToSelect').text());

            if(curNumber < maxNumber){
                $(this).appendTo(toSelect);
                parentForm.find('.currentSelected').html(curNumber + 1);
            }
            var curNumber = parseInt(parentForm.find('.currentSelected').text());
            if(curNumber == maxNumber){
                parentForm.find('.count_selected_obj').css('color', 'red').css('font-weight', 'bold');
            }
        });
        
        form.find('.choose option').die().live('dblclick', function(){
            var parentForm = $(this).parents('.ads_post').first();
            var toSelect = parentForm.find('.choice');
            $(this).appendTo(toSelect);
            var curNumber = parseInt(parentForm.find('.currentSelected').text());
            parentForm.find('.currentSelected').html(curNumber - 1);
            parentForm.find('.count_selected_obj').css('color', '#757575').css('font-weight', '400');
        });
        
        form.find('input.remove').click(function(){
            var parentForm = $(this).parents('.ads_post').first();
            parentForm.find('.choose option:selected').appendTo(parentForm.find('.choice'));
            var ec = parentForm.find('.choose option').length;
            parentForm.find('.currentSelected').html(ec);
            parentForm.find('.count_selected_obj').css('color', 'red').css('font-weight', 'bold');
        });
        
        form.find('input.add').click(function(){
            var parentForm = $(this).parents('.ads_post').first();

            var curNumber = parseInt(parentForm.find('.currentSelected').text());
            var maxNumber = parseInt(parentForm.find('.maxToSelect').text());
            var selNumber = parentForm.find('.choice option:selected').length;

            if(curNumber + selNumber <= maxNumber){
                parentForm.find('.choice option:selected').appendTo(parentForm.find('.choose'));
                var ec = parentForm.find('.choose option').length;
                parentForm.find('.currentSelected').html(ec);
                if(ec == maxNumber){
                    parentForm.find('.count_selected_obj').css('color', 'red').css('font-weight', 'bold');
                }
            }

        });
        
        function formSerialize(){
            var objs = form.find('.choose');
            objs.find('option').attr('selected', 'selected');
            var filterData = form.serialize();
            objs.find('option').attr('selected', '');
            return filterData;    
        }
        
        var filterEvents = {
            change: function(){
                var choice = form.find('.choice');
                var filterData = formSerialize();
                $.ajax({ 
                    url: '/index.php5?class=ads&module=objects&adsPart=ajax&action=postFilter', 
                    type: 'GET',
                    dataType: 'json',
                    data: filterData,
                    success: function(r, s) { 
                        choice.html('');
                        for(var i = 0; i < r.count; i++){
                            var option = r.objects[i]; 
                            choice.append('<option value="'+option.obj_id+'" data-company="'+option.obj_company+'" data-region="'+option.obj_region+'">'+option.obj_name+'</option>')  
                        }    
                    }
                });
            }
        };
        
        form.find('.companies').bind(filterEvents);
        form.find('.regions').bind(filterEvents);
        
        form.submit(function(){
            var choice = form.find('.choice');
            var filterData = formSerialize();
            form.find('.message').html('');
            $.ajax({ 
                url: form.attr('action'), 
                type: 'GET',
                dataType: 'json',
                data: filterData,
                success: function(r, s) { 
                    var message = r.message;
                    if(r.rel_count !== undefined && r.rel_count > 0){
                        $('#announcement em.attention').hide();    
                    }else{
                        $('#announcement em.attention').show();    
                    }
                    form.find('.toHide').remove();
                    form.find('.message').html(message);
                    setTimeout(function(){window.location.reload()},800);
                }
            });
            return false;
        });
        
    }
    
    var relations = link.closest('.item').find('.relations');
    relations.html('');
    $.ajax({ 
        url: url, 
        type: 'GET',
        dataType: 'html',
        success: function(html) { 
            relations.html(html).show();
            adsPostForm();    
        }
    });
    
}


$.fn.ajaxUpload = function(config){
    var elementsList = $(this);
    var cfg = {
        data: {},
        dataCount: 0,
        tpl: $.template('<div class="thumb"><img src="/bkg.php?image=${photo}&w=160&h=120" alt="${header}" /><br /><a class="drop" href="javascript:void(0)" rel="${photo}"><img src="/images/design/b_drop.png" alt="" /></a></div>'),
        render: function(block){
            for(var i = 0; i < cfg.dataCount; i++){
                block.append( cfg.tpl , cfg.data[i]);                
            }        
        }
    };  
    cfg = $.extend(cfg, config || {});  
    elementsList.each(function(){
        cfg.render($(this));    
    });
    
}


$(document).ready(function(){
    
    if(VK !== undefined){
        VK.init({
            apiId: $.vk.appId
        });
    }
    
    if($('#fb-root').length > 0 && FB !== undefined){
        FB.init({ 
            appId: $.fb.appId, 
            cookie: true, 
            status: true, 
            xfbml: true 
        });
    }
    
    $('#adsSocLogin').click(function(){
        adsSocLogin();
        return false;
    });
    
    $('#adsSocLoginPopup .close a').click(function(){
        adsSocLogin();
        return false;
    });
    
    $('#announcement #res_overlay').click(function(){
        adsSocLogin();
        return false;
    });

    function addEmailFormVK(e){
        $('#r_email_form').remove();
        e.parent().append('<div id="r_email_form"><label>Для входа необходимо ввести e-mail, <br/> который будет использоваться для уведомления Вас об окончании срока размещения объявления</label><br/><input type="text" id="addEmail"><br/><input id="submitEmail" type="submit" value="Войти"/></div>');
        $('#submitEmail').click(function(){
            var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
            var mail = $('#addEmail').val();
            if(reg.test(mail) != false){
                $.vk.getLoginStatus();
            }else{
                alert('Неверный e-mail!');
            }
        });
    }
    function addEmailFormFB(e){
        $('#r_email_form').remove();
        e.parent().append('<div id="r_email_form"><label>Для входа необходимо ввести e-mail,<br/> который будет использоваться для уведомления Вас об окончании срока размещения объявления</label><br/><input type="text" id="addEmail"><br/><input id="submitEmail" type="submit" value="Войти"/></div>');
        $('#submitEmail').click(function(){
            var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
            var mail = $('#addEmail').val();
            if(reg.test(mail) != false){
                $.fb.getLoginStatus();
            }else{
                alert('Неверный e-mail!');
            }
        });
    }

    $('#announcement a#nov_vk_login').click(function(){
        addEmailFormVK($(this));
       // $.vk.getLoginStatus();
        return false;   
    });
    
    $('#announcement a#fb_login').click(function(){
        //$.fb.getLoginStatus();
        addEmailFormFB($(this));
        return false;   
    });
    
    $('#announcement a#form_login').click(function(){
        $('#adsSocLoginPopup .formLogin').toggle();
        return false;
    });
    
    $('#formLogin a.reg').click(function(){
        var link = $(this);
        var action = link.attr('rel');
        if(action == 'login'){
            $('#formLogin .field.reg').hide(); 
            link.attr('rel', 'reg');
			$('#formLogin .submitBtn').val('Войти');
        }else{
            $('#formLogin .field.reg').show();
            link.attr('rel', 'login');
            $('#formLogin .submitBtn').val('Зарегистрироваться');
        }
        link.find('span').toggleClass('hidden');
        $('#formLogin input.action').val(action);
        return false;
    });
    
    $('#formLogin').submit(function(){
        
        var form = $('#formLogin');
        var postData = form.serialize();
        $('#formLogin .user_invalid').hide();
        $.ajax({ 
            url: $('#formLogin').attr('action'), 
            type: 'POST',
            data: postData, 
            dataType: 'json',
            success: function(r, s) { 
                var objectId = $('#adsSocLogin').attr('rel');
                console.log(r);
                if(r.errors){
                    $('#formLogin .user_invalid').find('em').html(r.errors[0])
                    $('#formLogin .user_invalid').show();
                }else{
                    if(r.s_id){
                        location.href = '/index.php5?class=search&module=objects&objectId='+objectId+'&tab=ads&adsPart=user';
                    }else{
                        $('#formLogin .user_invalid').show();
                    }
                }
            }
        });
        
        return false;
    });
    
    $('#announcement a.post').click(function(){
        var link = $(this);
        if(!link.is('.released')){
            relations($(this));
            link.addClass('released');
        }else{
            link.closest('.item').find('.relations').html(''); 
            link.removeClass('released');        
        }
        return false;   
    });
    
    $('#ads_form input.images').change(function(){
        $('#ads_form').ajaxSubmit({
            dataType: 'json',
            url: '/index.php5?class=ads&module=objects&adsPart=ajax&action=upload', 
            success: function(r, s) { 
                if(r.photos){
                    $('#ads_form .ajax_upload').ajaxUpload({
                        dataCount: r.count,    
                        data: r.photos
                    });        
                }    
            } 
            
        }); 
    });
    
    $('#ads_form .thumb a.drop').live('click', function(){
        var link = $(this);
        var thumb = link.closest('.thumb');
        var photoPath = link.attr('rel');
        $.ajax({ 
            url: '/index.php5?class=ads&module=objects&adsPart=ajax&action=dropUploaded', 
            type: 'POST',
            data: {
                photoPath: photoPath     
            }, 
            dataType: 'json',
            success: function(r, s) { 
                thumb.remove();      
            }
        });    
    });
    
    
						
});
