/**
 * Скрипт для страницы бета-версии Cocoa Match
 */

$.rollOver = function ( object, name, extension, type ){
    name = name + '_over' + '.' + extension;
    //console.log('rollOver');
    $.setImage(
        object,
        name,
        type
    );
}

$.rollOut = function ( object, name, extension, type ){
    name = name + '.' + extension;
    //console.log('rollOut');
    $.setImage(
        object,
        name,
        type
    );
}

$.setImage = function ( object, name, type ){
    //console.log('setImage ' + name + ' / type ' + type );
    switch (type) {
    case 'img':
        //console.log('img');
        object.attr('src', name);
        break;
    case 'background':
        //console.log('background');
        object.css({backgroundImage: 'url('+name+')'});
        break;
    default:
        break;
    }
}

/**
 * Проверка определена ли console или нет
 */

if( !console ){
    // заглушка под IE 6
    var console = {};
    console.log = function(){
        //alert('ie 6 does not support console!');
    }
} else {
    // do nothing
}

$.isDefined = function( variable ){
    if( variable === undefined ){
        return false;
    }
    else {
        return true;
    }
}

/**
 * Загрузка страницы после инициализации
 */
$.loadPage = function( uid, session, new_session, reference, fb_uid ){
    var data = {
        uid:         uid,
        session:     session, 
        new_session: new_session,
        reference:   reference,
        fb_uid:      fb_uid
    };
    
    //$.showProgressBar();
    $.ajax({
        url:        '/index/gameContent',
        type:       'POST',
        timeout:    100000,
        cache:      false,
        data:       data,
        success:    function(data, status){
            $('.center_wrap').html(data);
        },
        complete:   function() {
            //$.hideProgressBar();
        },
        error:      function(XMLHttpRequest, textStatus, errorThrown){
            //$('#message').html('<p style=\'color:red;font-weight:bold;\'>Query failed! Please try again.</p>');
        }
    });
}

/**
 * Показать прогрессбар
 */
$.showProgressBar = function(){
    $('#game-swf').hide(); 
    $('body').append("<div id=\"load-overlay\" class=\"ui-widget-overlay\"/>");
}

/**
 * Скрыть прогрессбар
 */
$.hideProgressBar = function(){
    $('#game-swf').show();
    $('#load-overlay').remove();
}

/**
 * Обновить tips, аналог сообщений
 */
$.updateTips = function ( object, tip) {
    object.text(tip).fadeIn("slow");
}

/**
 * Проверка длинны значения инпута
 */
$.checkLength = function (object,field,min,max,tip_id) {
    if ( object.val().length > max || object.val().length < min ) {
        object.addClass('input_border_error');
        $.updateTips($('#'+tip_id), 'Length of ' + field + ' must be between '+min+' and '+max+'.');
        return false;
    } else {
        return true;
    }
}

/**
 * Проверка значения инпута по регулярному выражению
 */
$.checkRegexp = function (object,regexp,field,tip_id) {
    if ( !( regexp.test( object.val() ) ) ) {
        object.addClass('input_border_error');
        $.updateTips($('#'+tip_id), 'Please make sure that your '+field+' is correct');
        return false;
    } else {
        return true;
    }
}

/**
 * ==================================================
 * Comments dialog workshop
 * ==================================================
 */

/**
 * Параметры коммента
 */
$.getCommentsParams = function(){
    $.comments_name      = $('#comments_name');
    $.comments_text      = $('#comments_text');
    $.comments_allFields = $([]).add($.comments_name).add($.comments_text);
}

/**
* Сохранение комента
*/
$.postComment = function (uid, session, fb_uid){
    $.getCommentsParams();
    
    var bValid      = true;
    $.comments_allFields.removeClass('input_border_error');

    bValid = bValid && $.checkLength($.comments_text,'text',6,1000,'comments_validateTips');

    if (bValid) {
        $.ajax({
            url:        '/index/postComment',
            type:       'POST',
            timeout:    100000,
            cache:      false,
            data:       {
                            name: $.comments_name.val(),
                            text: $.comments_text.val()
                        },
            success:    function(data, status){
                //$('#message').html(data);
            },
            complete:   function() {
                $.commentsList(1, uid, session, fb_uid);
                $.hideCommentDialog();
            },
            error:      function(XMLHttpRequest, textStatus, errorThrown){
                // do nothing
            }
        });
    } else {
        // do nothing 
    }
}

/**
 * Показать диалог комментирования
 */
$.showCommentDialog = function(){
    $.getCommentsParams();
    $.comments_allFields.removeClass('input_border_error');
    $('#game-swf').hide();
    $('#dialog-comment > .popup').show();
    $().scrollTo( $('#top_frame'), 400, { easing:'swing' } );
}

/**
 * Скрыть диалог комментария
 */
$.hideCommentDialog = function(){
    $('#dialog-comment > .popup').hide();
    $("#game-swf").show(); 
}

/**
 * Список комментов
 */
$.commentsList = function ( page, uid, session, fb_uid ){
   //$.showProgressBar();
   $.ajax({
       url:        '/index/commentsList',
       type:       'POST',
       timeout:    100000,
       cache:      false,
       data:       {
                       page:    page,
                       uid:     uid,
                       session: session,
                       fb_uid:  fb_uid
                   },
       success:    function(data, status){
           $('#comments').html(data);
       },
       complete:   function() {
           //$.hideProgressBar();
       },
       error:      function(XMLHttpRequest, textStatus, errorThrown){
           $.hideProgressBar();
       }
   });
}

/**
 * ==================================================
 * Feedback dialog workshop
 * ==================================================
 */

/**
 * Параметры фидбека
 */
$.getFeedbackParams = function(){
    $.feedback_name      = $('#feedback_name');
    $.feedback_text      = $('#feedback_text');
    $.feedback_email     = $('#feedback_email');
    $.feedback_allFields = $([]).add($.feedback_text);
}

/**
* Сохранение фидбека
*/
$.postFeedback = function (){
    $.getFeedbackParams();
    
    var bValid      = true;
    $.feedback_allFields.removeClass('input_border_error');

    bValid = bValid && $.checkLength($.feedback_text,'text',6,1000,'feedback_validateTips');

    if (bValid) {
        $.ajax({
            url:        '/index/postFeedback',
            type:       'POST',
            timeout:    100000,
            cache:      false,
            data:       {
                            name:  $.feedback_name.val(),
                            email: $.feedback_email.val(),
                            text:  $.feedback_text.val()
            },
            success:    function(data, status){
                // do nothing
            },
            complete:   function() {
                $.hideFeedbackDialog();
            },
            error:      function(XMLHttpRequest, textStatus, errorThrown){
                // do nothing 
            }
        });
    } else {
        // do nothing 
    }
}

/**
 * Показать диалог фидбека
 */
$.showFeedbackDialog = function(){
    $.getFeedbackParams();
    $.feedback_text.val('');
    $.feedback_allFields.removeClass('input_border_error');
    $('#game-swf').hide();
    $('#dialog-feedback > .popup').show();
    $().scrollTo( $('body'), 400, { easing:'swing' } );
}

/**
 * Скрыть диалог комментария
 */
$.hideFeedbackDialog = function(){
    $('#dialog-feedback > .popup').hide();
    $("#game-swf").show(); 
}

/**
 * ==================================================
 * Registration dialog workshop
 * ==================================================
 */

/**
 * Показать диалог регистрации
 */
$.showRegistrationDialog = function(){
    $.getRegistrationParams();
    $.registration_allFields.removeClass('input_border_error');
    $('#game-swf').hide();
    $('#dialog-registration > .popup').show();
}

/**
 * Скрыть диалог регистрации
 */
$.hideRegistrationDialog = function(){
    $('#dialog-registration > .popup').hide();
    $('#game-swf').show(); 
}

/**
 * Параметры регистрации
 */
$.getRegistrationParams = function(){
    $.registration_name      = $('#registration_name');
    $.registration_email     = $('#registration_email');
    $.registration_age       = $('#registration_age');
    $.registration_uid       = $('#registration_uid');
    $.registration_session   = $('#registration_session');
    $.registration_allFields = $([]).add($.registration_name).add($.registration_email).add($.registration_age);
}

/**
 * Регистрация
 */
$.doRegister = function(){
    $.getRegistrationParams();
    
    var bValid      = true;
    $.registration_allFields.removeClass('input_border_error');
    
    // validate name
    bValid = bValid && $.checkLength($.registration_name,'name',3,16,'registration_validateTips');
    
    // validate email
    bValid = bValid && $.checkLength($.registration_email,'email',6,200,'registration_validateTips');
    bValid = bValid && $.checkRegexp($.registration_email,/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i,'email','registration_validateTips');
    
    if (bValid) {
        $.ajax({
            url:        '/index/doRegister',
            type:       'POST',
            timeout:    100000,
            cache:      false,
            data:       {
                            name:    $.registration_name.val(),
                            email:   $.registration_email.val(),
                            age:     $.registration_age.val(),
                            uid:     $.registration_uid.val(),
                            session: $.registration_session.val()
                        },
            success:    function(data, status){
                $('#message').html(data);
                if( $.registration_error ){
                    $('#message').html('<p style=\'color:red;font-weight:bold;\'>Error during registration. Please try again.</p>');
                } else {
                    document.location.href = '/';
                }
            },
            complete:   function() {
                $.hideRegistrationDialog();
            },
            error:      function(XMLHttpRequest, textStatus, errorThrown){
                $('#message').html('<p style=\'color:red;font-weight:bold;\'>Query failed! Please try again.</p>');
            }
        });
    } else {
        // do nothing 
    }
}

/**
 * ==================================================
 * Invite dialog workshop
 * ==================================================
 */

/**
 * Показать диалог инвайта
 */
$.showInviteDialog = function(){
    $.callInviteStepOne( 0 );
    $('#game-swf').hide();
    $('#dialog-invite > .popup').show();
}

/**
 * Скрыть диалог инвайта
 */
$.hideInviteDialog = function(){
    $('#dialog-invite > .popup').hide();
    $('#game-swf').show(); 
}

/**
 * Выбор провайдера для email инвайта
 */
$.setOIProvider = function( provider ){
    $('.active').removeClass('active');
    $('#'+provider).addClass('active');
    $('#oi_provider').val(provider);
}

/**
 * Параметры регистрации
 */
$.getOIParams = function(){
    $.oi_provider  = $('#oi_provider');
    $.oi_email     = $('#oi_email');
    $.oi_password  = $('#oi_password');
    $.oi_sender    = $('#oi_sender');
    $.oi_allFields = $([]).add($.oi_email).add($.oi_password);
}

/**
 * Первый шаг инвайта
 */
$.callInviteStepOne = function( post ){
    $.getOIParams();
    var bValid      = true;
    
    if( post ){
        $.oi_allFields.removeClass('input_border_error');
        bValid = bValid && $.checkLength($.oi_email,'login',2,200,'oi_validateTips');
        bValid = bValid && $.checkLength($.oi_password,'password',1,40,'oi_validateTips');
    }
    
    if (bValid) {
        $('#send_btn').css({visibility:'hidden'});
        $('.tab_text').html('').css({background:'url(/static/images/ajax-loader.gif) no-repeat 50% 50%'});
        $.ajax({
            url:        "/index/inviteStepOne",
            type:       "POST",
            timeout:    100000,
            cache:      false,
            data:       {
                            oi_provider:    $.oi_provider.val(),
                            oi_email:       $.oi_email.val(),
                            oi_password:    $.oi_password.val(),
                            oi_sender:      $.oi_sender.val(),
                            oi_email:       $.oi_email.val(),
                            uid:            UserData.uid,
                            session:        UserData.session,
                            post:           post
                        },
            success:    function(data, status){
                $("#dialog-invite > .popup").html(data);
            },
            complete:   function() {
                // do nothing
            },
            error:      function(XMLHttpRequest, textStatus, errorThrown){
                //$("#message").html('<p style=\'color:red;font-weight:bold;\'>Query failed! Please try again.</p>');
            }
        });
    }
}

/**
 * Параметры регистрации
 */
$.getFriendsEmails = function(){
    $.friend_email_01 = $('#friend_email_01');
    $.friend_email_02 = $('#friend_email_02');
    $.friend_email_03 = $('#friend_email_03');
    $.friend_email_04 = $('#friend_email_04');
    $.friend_email_05 = $('#friend_email_05');
    $.sender          = $('#sender');
    $.email           = $('#email');
    $.oi_allFields    = $([]).add($.friend_email_01).add($.friend_email_02).add($.friend_email_03).add($.friend_email_04).add($.friend_email_05);
}

/**
 * Второй шаг инвайта
 */
$.callInviteStepTwo = function( post ){
    $.getFriendsEmails();
    var bValid      = true;
    
    if( post ){
        $.oi_allFields.removeClass('input_border_error');
        var checked = false;
        for(i = 1; i<=5; i++){
            if( $('#friend_email_0'+i).val() ) {
                bValid  = bValid && $.checkLength($('#friend_email_0'+i),'email',6,200,'invite2_validateTips');
                bValid  = bValid && $.checkRegexp($('#friend_email_0'+i),/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i,'friend\'s email','invite2_validateTips');
                checked = true;
            }
        }
        if( !checked ){
            $.updateTips( $('#invite2_validateTips'), 'You must type at least one friend\'s email!');
            bValid = false;
        }
    }

    if (bValid) {
        $('#send_btn').css({visibility:'hidden'});
        $('.popup_text').html('').css({background:'url(/static/images/ajax-loader.gif) no-repeat 50% 50%'});
        $.ajax({
            url:        "/index/inviteStepTwo",
            type:       "POST",
            timeout:    100000,
            cache:      false,
            data:       {
                            friend_email_01:$.friend_email_01.val(),
                            friend_email_02:$.friend_email_02.val(),
                            friend_email_03:$.friend_email_03.val(),
                            friend_email_04:$.friend_email_04.val(),
                            friend_email_05:$.friend_email_05.val(),
                            sender:         $.sender.val(),
                            email:          $.email.val(),
                            uid:            UserData.uid,
                            session:        UserData.session,
                            post:           post
                        },
            success:    function(data, status){
                $("#dialog-invite > .popup").html(data);
            },
            complete:   function() {
                // do nothing
            },
            error:      function(XMLHttpRequest, textStatus, errorThrown){
                //$("#message").html('<p style=\'color:red;font-weight:bold;\'>Query failed! Please try again.</p>');
            }
        });
    }
}

/**
 * Третий шаг инвайта
 */
$.callInviteStepThree = function(){
    $.ajax({
        url:        "/index/inviteStepThree",
        type:       "POST",
        timeout:    100000,
        cache:      false,
        data:       {
                        uid:     UserData.uid,
                        session: UserData.session
                    },
        success:    function(data, status){
            $("#dialog-invite > .popup").html(data);
        },
        complete:   function() {
            // do nothing
        },
        error:      function(XMLHttpRequest, textStatus, errorThrown){
            //$("#message").html('<p style=\'color:red;font-weight:bold;\'>Query failed! Please try again.</p>');
        }
    });
    return false;
}

/**
 * ==================================================
 * Facebook Invite dialog workshop
 * ==================================================
 */

/**
 * Первый шаг инвайта
 */
$.callDoFacebookLogin = function( api_key, url ){
    var cancel_url = url;
    var next_url = url;
    $.ajax({
        url:        "http://www.facebook.com/login.php?api_key="+api_key+"&v=1.0&fbconnect=1&cancel_url="+cancel_url+"&connect_display=popup&next="+next_url,
        type:       "POST",
        timeout:    100000,
        cache:      false,
        data:       {},
        success:    function(data, status){
            $("#dialog-fb-login > .popup").html(data);
            $.showFBLoginDialog();
        },
        complete:   function() {
            // do nothing
        },
        error:      function(XMLHttpRequest, textStatus, errorThrown){
            //$("#message").html('<p style=\'color:red;font-weight:bold;\'>Query failed! Please try again.</p>');
        }
    });
}

/**
 * Показать диалог FBLogin
 */
$.showFBLoginDialog = function(){
    $('#game-swf').hide();
    $('#dialog-fb-login > .popup').show();
}

/**
 * Скрыть диалог FBLogin
 */
$.hideFBLoginDialog = function(){
    $('#dialog-fb-login > .popup').hide();
    $('#game-swf').show(); 
}

/**
 * ==================================================
 * Storage workshop
 * ==================================================
 */

$.checkCookies = function(){
    console.log('Facebook UID: ' + UserData.fb_uid);
    
    // локальные куки
    UserData.uid = UserData.getLocalCookie('uid');
    UserData.session = UserData.getLocalCookie('session');

    console.log('browser cookie uid: ' + UserData.uid);
    console.log('browser cookie session: ' + UserData.session);

    if( (UserData.uid && $.isDefined(UserData.uid)) && (UserData.session && $.isDefined(UserData.session)) ){
        console.log('Browser cookies present. Auth success.');
    } else {
        // в браузер куках нет данных - проверяем LSO
        console.log('No browser cookies. Need to create new user!');
        UserData.new_session = 1;
        UserData.uid = 0;
        UserData.session = 0;
    }
}

/**
 * Данные юзера
 */
var UserData = {
    ready:       0,
    uid:         0,
    session:     0,
    lso_uid:     0,
    lso_session: 0,
    reference:   0,
    fb_uid:      0,
    new_session: 0, // 0 - не нужно создавать пользователя, 1 - нужно создавать пользователя
    
    getLocalCookie: function(name){
        var cookie = " " + document.cookie;
        var search = " " + name + "=";
        var setStr = undefined;
        var offset = 0;
        var end = 0;
        if (cookie.length > 0) {
            offset = cookie.indexOf(search);
            if (offset != -1) {
                offset += search.length;
                end = cookie.indexOf(";", offset);
                if (end == -1) {
                    end = cookie.length;
                }
                setStr = unescape(cookie.substring(offset, end));
            }
        }
        return(setStr);
    },
    
    setLocalCookie: function(name, value) {
        var expires = "Mon, 01-Jan-2014 00:00:00 GMT";
        var path    = "/";
        var domain  = null;
        var secure  = null;
        
        document.cookie = 
            name + "=" + escape(value) +
            ((expires) ? "; expires=" + expires : "") +
            ((path) ? "; path=" + path : "") +
            ((domain) ? "; domain=" + domain : "") +
            ((secure) ? "; secure" : "");
    }
}
