
$(document).ready(function() {

    //$('#content').ready();
    
    $('#content').ajaxComplete(stylize);
    stylize();
    $('span.field-hint-icon').thumbPopup(hoverFieldHint);
    $.datepicker.setDefaults($.datepicker.regional['ru']);

});

var stylize = function() {
    $('#content .toolbar ul.links-list li').addClass('ui-button ui-state-default');
}

$(document).ready(function(){
    $('ul.links-list li.delete a').attr('onclick', 'if (!confirm(\'Вы уверены?\'))return false;');
    
    /**
    * Tabs
    */
    $('ul.tabs-list').each(function(){
        var tabs_class = this.id.replace('tabs_list_', 'tabs-content-').replace(/_/g, '-');
        $('a', this).click(function(){
            $('a', $(this).parents('ul')).removeClass('ui-state-active');
            $(this).addClass('ui-state-active');
            var tabs_class_item = this.id.replace('tabs_list_', 'tabs-content-').replace(/_/g, '-');
            $('div.'+tabs_class).not('div.'+tabs_class_item).hide();
            $('div.'+tabs_class_item).show();
            return false;
        });
        $('a:first', this).click();
    });
    
    $('input.float').blur(blurInputFloat);
    $('input.integer').blur(blurInputInteger);
    //$.datepicker.setDefaults($.datepicker.regional['ru']);
    $('input.date').attr('readonly', true).datepicker({
        dateFormat: 'yy-mm-dd',
        inline: true
    });

    $('#content').add('#dialog')
        .delegate('a.ajax', 'click', function(){
            ajaxAction(this);
        return false;
	});

    //Hover states on the static widgets
    /*$('ul.links-list').not('#navigation ul').children('li').addClass('ui-state-default ui-corner-all').hover(
        function() { $(this).addClass('ui-state-hover'); }, 
        function() { $(this).removeClass('ui-state-hover'); }
    );*/
    $('#navbar ul li').addClass('ui-state-default').hover(
        function() { $(this).addClass('ui-state-hover'); }, 
        function() { $(this).removeClass('ui-state-hover'); }
    );
    //$('ul').parent('.toolbar').find('a').addClass('ui-icon');
    $('a.ui-state-default').add('li.ui-state-default').add('input.ui-state-default').hover(function(){
        $(this).addClass('ui-state-hover');
    }, function(){
        $(this).removeClass('ui-state-hover');
    });
    $('table.grid thead td.ui-state-default').hover(function(){
        $(this).addClass('ui-state-hover');
    }, function(){
        $(this).removeClass('ui-state-hover');
    });
});

var blurInputFloat = function() {
    var value = parseFloat(this.value.replace(/,/g, '.'));
    this.value = isNaN(value) ? 0 : value;
}

var blurInputInteger = function() {
    var value = parseInt(this.value.replace(/[,\.]/g, ''));
    this.value = isNaN(value) ? 0 : value;
}
var hoverFieldHint = function(element) {
    //alert($('.field-hint', $(element).parent()).length);
	//return $('.field-hint', $(element).parent()).html();
	return $('.field-hint', $(element).parent().parent()).html();
}

var ajaxAction = function(element, callback){
    var type, url, data;
    switch (element.tagName.toLowerCase()) {
        case 'a':
            type = 'GET';
            url = element.href;
            data = {};
            break;
        case 'form':
            type = 'POST';
            url = element.action;
            data = $(element).serialize();
            break;
    }
    if (url) {
        $.ajax({
            type: type, url: url, data: data,
            dataType: 'text', // json
            success: function(response){
                eval('response = ' + response + ';');
                //dump_alert(response);
                if ($(element).hasClass('popup')) {
                    response['popup'] = true;
                }
                ajaxCallback(response, callback);
            }
        });
    }
    return false;
};

var ajaxCallback = function(response, callback){
    if (response['content']) {
        if (response['popup']) {
            popupOpen(response['content'], response['title']);
        } else {
            $('#content').html(response['content']);
            if (response['title']) {
                document.title = response['title'];
            }
        }
    }
    if (response['text']) {
        $('#debug').html(response['text']).show();
    } else {
        $('#debug').hide();
    }
    if (response['replace'] !== undefined) {
        for (var id in response['replace']) {
            $('#'+id).html(response['replace'][id]);
        }
    }
    if (response['messages'] && response['messages'].length > 0) {
        for (var i = 0; i < response['messages'].length; i++) {
            alert(response['messages'][i]);
        }
    } else if (response['redirect']) {
        location.replace(response['redirect']);
        location.href = response['redirect'];
        return;
    }
    if (callback) {
        callback(response['data']);
    }
};

var popupOpen = function(content, title){
    var dialog;
    if ($("#dialog").length == 0) {
        dialog = $('<div id="dialog" />')
            //.hide()
            .appendTo(document.body)
            .dialog({
                autoOpen: false,
                resizable: true,
    			modal: true
                //close: function() {}
            });
    } else {
        dialog = $( "#dialog" )
            .dialog( "close" );
    }
    if (title === undefined) {
        title = 'Dialog';
    }
    dialog
        .html( content )
        .dialog( "option", "title", title )
        .dialog( "open" );
};

var popupClose = function(){
    $( "#dialog" )
        .dialog( "close" );
};







function var_dump(dumpedVar, level) {
	var output = '';
	var length = 0;
	var indent = '';
	var indentPad = '    ';
	var dumpedVarType = typeof(dumpedVar);
	level = level || 1;
	for (var i = 1; i < level; i++) indent += indentPad;	//	 indent += ". . . . ";
	if (dumpedVarType == 'object' || dumpedVarType == 'function') {
		//length = dumpedVar.length;
		length = 0;
		for (var i in dumpedVar) {
			output += indentPad + indent + dumpedVarType + ' [' + i + '] = ';
        	if (level < 3) { // limit of nested levels
               output += var_dump(dumpedVar[i], level + 1)
        	} else {
        	   output += 'Warning! Nested levels limit reached.' + "\n";
        	}
			length++;
		}
		//output = dumpedVarType + "(" + length + ") [" + output + indent + "]\n";
		output = dumpedVarType + '(' + length + '): [' + (length > 0 ? "\n" + output + indent : '') + "]\n";
		//output = dumpedVarType + " [\n" + output + indent + "]\n";
	} else if (dumpedVarType == 'string') {
		length = dumpedVar.length;
		output += dumpedVarType + '(' + length + '): "' + dumpedVar + '"' + "\n";
		//output += "\"" + dumpedVar + "\"" + "\n";
	} else {
		output += dumpedVarType +  ': ' + dumpedVar + "\n";
	}
	return output;
}

function dump(dumpedVar) {
	var output = '';
	output += '<div style="text-align:left;border:1px solid #000000;background-color:#FFFFFF;margin:5 0 5 0;padding:3px;"><pre style="border:1px solid #AA0000;background-color:#FFEEEE;margin:0px;padding:5px;">';
	output += var_dump(dumpedVar);
	output += '</pre></div>';
	return output;
}

function dump_alert(dumpedVar) {
	alert(var_dump(dumpedVar));
}


var getUrl = function(params) {
    var url = getBaseUrl();
    if (typeof params == 'object') {
        var list = [];
        for (var i in params) {
            list.push(i + '=' + params[i]);
        }
        url += '?' + list.join('&');
    }
    return url;
}

var getBaseUrl = function() {
    var url = location.href;
    if (index = url.lastIndexOf('?')) {
        url = url.substring(0, index);
    }
    return url;
    //return location.href.substring(0, location.href.lastIndexOf('/') + 1);
}
var ajaxSubmit = function(controller, action, data, callback) {
    data.push({ name: 'controller', value: controller });
    data.push({ name: 'action', value: action });
    data.push({ name: 'is_ajax', value: 1 });
    //data['ajax_submit'] = 1;
    $.ajax({
        type: 'POST',
        url: getBaseUrl(),
        data: data,
        success: function(response){
            eval('response = ' + response + '');
            callback(response);
        }
    });
    return false;
}

var showFieldMessages = function(field, messages) {
    field = $(field);
    if (typeof messages == 'object') {
        var container = $('<ul class="form-messages"></ul>');
        var count = 0;
        for (var i in messages) {
            container.append('<li><span>' + messages[i] + '</span></li>');
            count++;
        }
        if (count > 0) {
            if (field.length > 0) {
                field.parent().parent()
                    //.remove('ul.form-messages')
                    .append(container);
            } else {
                
            }
        }
    } else {
        //alert(field.attr('id'));
        //dump_alert(messages);
    }
}

var resetForm = function(form) {
    $('input:text', form).add('textarea', form).val('');
    $('select', form).each(function(){
        if (this.selecteIndex !== -1) {
            this.selectedIndex = 0;
        }
    });
    return false;
}



$(document).ready(function(){
    $('form.ajax').live('submit', function(){
        if (this.elements['controller'] !== undefined && this.elements['action'] !== undefined) {
            var controller = this.elements['controller'].value;
            var action = this.elements['action'].value;
            var form = this;
            var messages_count = 0;
            ajaxSubmit(controller, action, $(this).serializeArray(), function(response){
                $('ul.form-messages').remove();
                if (response['text'] !== undefined) {
                    $('#response').html(response['text']);
                }
                if (response['data'] !== undefined && typeof response['data'] == 'object') {
                    if (typeof response['data']['validated_messages'] == 'object') {
                        for (var model in response['data']['validated_messages']) {
                            if (typeof response['data']['validated_messages'][model]['item'] == 'object') {
                                //dump_alert(response['data']['validated_messages'][model]['item']);
                                for (var field in response['data']['validated_messages'][model]['item']) {
                                    showFieldMessages('#' + model + '_item_' + field, response['data']['validated_messages'][model]['item'][field]);
                                    messages_count++;
                                }
                            }
                            if (typeof response['data']['validated_messages'][model]['list'] == 'object') {
                                for (var key in response['data']['validated_messages'][model]['list']) {
                                    if (typeof response['data']['validated_messages'][model]['list'][key] == 'object') {
                                        //dump_alert(response['data']['validated_messages'][model]['list'][key]);
                                        for (var field in response['data']['validated_messages'][model]['list'][key]) {
                                            showFieldMessages('#' + model + '_list_' + key + '_' + field, response['data']['validated_messages'][model]['list'][key][field]);
                                            messages_count++;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                if (response['messages'] !== undefined && typeof response['messages'] == 'object') {
                    //dump_alert(response['messages']);
                    var container = $('<ul class="form-messages"></ul>');
                    var count = 0;
                    for (var i in response['messages']) {
                        container.append('<li><span>' + response['messages'][i] + '</span></li>');
                        messages_count++;
                        count++;
                    }
                    if (count > 0) {
                        $(form)
                            .remove('ul.form-messages')
                            .prepend(container);
                    }
                }
                if (messages_count == 0) {
                    window.location.reload();
                }
            });
        }
        return false;
    });
});






