$.fn.starts = function (score)
{
    var jThis = $(this);
    
    score = score / 100;
    for(var i=1; i<=5; i++) {
        var img = jThis.find("IMG.sysStar_" + i);
        
        if (score==0) img.attr('src', '/face/img/star0.png');
        else if (score < i && score > i-1) img.attr('src', '/face/img/star2.png');
        else if(score >= i) img.attr('src', '/face/img/star1.png');
        else if(score < i) img.attr('src', '/face/img/star0.png');
    }
}

$.fn.container = function(form)
{
    var container = form ? $(this).closest('.containerForm') : null;
    return container && container.hasClass('containerForm') ? container : $(this).closest('.container');
}

$.postJSON = function(url, params, callback) 
{
    $.post(url, params, function(data) {
    	callback = callback || function() {};    	
    	showMessages(data);    	
    	callback(data);
    }, "json");
};

$.ourGetJSON = function(url, params, callback) 
{
    $.get(url, params, function(data) {
    	callback = callback || function() {};    	
    	showMessages(data);    	
    	callback(data);
    }, "json");
};

$.fn.postForm = function(callback)
{
	$.postJSON($(this).attr('action'), $(this).serializeArray(), callback);
}

$.fn.customAjaxForm = function(beforeCallback, afterCallback, isDialog, autoOpen, afterOpenCallback, keepClean, beforeOpenCallback)
{	
	beforeCallback = beforeCallback || function() {};
	afterCallback = afterCallback || function() {};
	afterOpenCallback = afterOpenCallback || function() {};
	beforeOpenCallback = beforeOpenCallback || function() {};
	autoOpen = autoOpen || false;1
	
	var form = $(this);
	var formSelector = $(this).selector;
	
	// clicker click event
	$('.' + form.attr('id') + '_clicker').live('click', function() {
		
		beforeOpenCallback($(this), formSelector, beforeCallback, afterCallback, isDialog);
		
        $(this).hideContainer();
        if(isDialog)
        	$(formSelector).openDialog(this);
        else
	        $(formSelector).showContainer(this);
        afterOpenCallback();
        return false;
    });
    
	// toggler click event
    $('.' + form.attr('id') + '_toggler').live('click', function() {   
    	
    	beforeOpenCallback($(this), formSelector, beforeCallback, afterCallback, isDialog);
    	
    	if(isDialog)
    		$(formSelector).toggleDialog(this);
    	else	    	
	    	$(formSelector).toggleContainer(this);
    	afterOpenCallback();
        return false;
    });    
    
    if(isDialog)
    {
        if(!keepClean) {
            form.prepareDialogForm();
        
            var buttons = {};
            buttons['Закрыть'] = function() {
            	$(formSelector).getClicker().showContainer();
                $(formSelector).closeDialog();        	
            };
            buttons[form.getSubmit().val()] = function() {
        	   $(formSelector).submit();
            };
        }
        
        var dialogWidth;
        if(form.attr('width'))
        {
        	dialogWidth = form.attr('width');
        }
        else 
        {
        	dialogWidth = 600;
        }
        
        form.container().dialog({
            width: dialogWidth,
        	bgiframe: true,
            autoOpen: autoOpen,
            modal: true,
            resizable: false,
            title: form.getTitle().html(),
            buttons: buttons,
            open:function(event, id) {
	        	initTinyMce();
            },
            close:function(event, id) {
            	destroyTinyMce();
            }
        });    	
    }
    // form submit event
    // пока live не поддерживется для submit пришлось идти обходными путями
    // по идее нужно ивент сабмита повесить на все формы с таким id
    $(formSelector).bind('submit', {beforeCallback: beforeCallback, 
							    	afterCallback:afterCallback, 
							    	isDialog:isDialog, 
							    	formSelector:formSelector,
                                    keepClean: keepClean }, formSubmit);
}

function formSubmit(event)
{
	beforeCallback = event.data.beforeCallback;
	afterCallback = event.data.afterCallback;
	isDialog = event.data.isDialog;
	formSelector = event.data.formSelector;
	keepClean = event.data.keepClean;
	
	destroyTinyMce();	
	beforeCallback();
    $(this).postForm(function(data){
    	
    	$(formSelector).container(true).html(data.form);
        $(formSelector).bind('submit', {beforeCallback: beforeCallback, 
									    afterCallback:afterCallback, 
									   	isDialog:isDialog, 
									   	formSelector:formSelector }, formSubmit);
    	
    	if(isDialog && !keepClean)
        	$(formSelector).prepareDialogForm();
    	
    	clearMessages();
    	
    	if (data.object != '' && data.object != undefined)
    	{	        	
        	$(formSelector).getClicker().showContainer();
        	
        	// close all jGrowl notifications
        	//

        	if(isDialog)
        		$(formSelector).closeDialog();
    		//else
	        	//$(formSelector).hideContainer();
    	}    	
    	afterCallback(data);
    	initTinyMce();
    });
    return false;
}

containerInfo = {};
$.fn.prepareDialogForm = function()
{
	$(this).getTitle().hide();
    $(this).getSubmit().parents('tr').eq(0).hide();
}

$.fn.getClicker = function()
{
	return $('.' + $(this).attr('id') + '_clicker');
}

$.fn.getToggler = function()
{
	return $('.' + $(this).attr('id') + '_toggler');
}

$.fn.getTitle = function()
{
	return $('#' + $(this).attr('id') + '_title');
}

$.fn.getSubmit = function()
{
	return $('#' + $(this).attr('id') + ' :submit');
}

$.fn.showContainer = function(opener)
{
    containerInfo[$(this).attr('id')] = {opener:opener};
	$(this).container().show();
}

$.fn.hideContainer = function()
{
	$(this).container().hide();
}

$.fn.openDialog = function(opener)
{
    containerInfo[$(this).attr('id')] = {opener:opener};
	$(this).container().dialog('open');
}

$.fn.closeDialog = function()
{
	$(this).container().dialog('close');
}

$.fn.toggleDialog = function(opener)
{
	if($(this).container().dialog().isOpen)
		$(this).closeDialog();
	else
		$(this).openDialog(opener);
}

$.fn.toggleContainer = function()
{
	if($(this).container().is(':hidden'))
        $(this).showContainer(opener);
	else
		$(this).hideContainer();
}

function showMessages(data)
{
	msg = data.msg;
	itemToShow = data.itemToShow || '3';

	for (var i in msg) {
    	var type = msg[i].type;
        var text = msg[i].text;
        var title = '';
        
        switch(type)
        {
            case 'error':
            	if (itemToShow == '1' || itemToShow == '3') {
            		title = 'Ошибка';
	                //$.jGrowl(text, {sticky: true,
	                //                header: '<font color="red">Ошибка</font>'});
            	} else continue;
                break;
            case 'notice':
            	if (itemToShow == '2' || itemToShow == '3') {
            		title = 'Сообщение';
	            	//$.jGrowl(text, {sticky: false,
				    //        		life: 5000,
	                //                header: '<font color="green">Сообщение</font>'});
            	} else continue;
                break;
            case 'undefined':
            case '':
            default:
                continue;
                break;
        }
        if (title) {
        	$('#sysMessageDialog').html(text).dialog({
        		bgiframe: true,
                autoOpen: false,
                modal: true,
                title : title,
                buttons: {
    				Ok: function() {
    					$(this).dialog('close');
    				}
    			},
    			resizable : false
            });
        	$('#sysMessageDialog').dialog('open');
        }
   }
}

function clearMessages()
{
	$('div.jGrowl-notification').trigger('jGrowl.close');
}

function CloneChild()
{
    this._aChilds = {};
	this._aChildsNum = {};
	
	this.set = function(containerId) 
	{
		this._aChilds[containerId] = $("#"+containerId).children().eq(0).clone();
		this._aChildsNum[containerId] = 1;
	}
	
	this.clone = function(containerId, count, maxChildren, emptyValue, actionObj)
	{
		var jContainer = $("#"+containerId);
		var jChildren = jContainer.children();
		var jChild = this._aChilds[containerId] ? this._aChilds[containerId] : jChildren.eq(0);
		var currChildrens = typeof this._aChildsNum[containerId] != "undefined" ? this._aChildsNum[containerId] : jChildren.length;

		for(var i=0; i<count && (!maxChildren || (currChildrens+i)<maxChildren); i++) {
			var jClone = jChild.clone().hide( );
			if(emptyValue) {
				jClone.val('');
				jClone.children('INPUT').val('');
			}
			if(typeof this._aChildsNum[containerId] != "undefined") this._aChildsNum[containerId]++;
			jContainer.append(jClone);
			jClone.fadeIn("slow");
		}
		
		if(actionObj && maxChildren && (currChildrens+i)>=maxChildren) $(actionObj).hide();
		
		return false;
	}
}

var cloneChild = new CloneChild();

/*
$(document).ready(function(){  
    $(".CheckBoxClass").change(function(){ 
        if($(this).is(":checked")){ 
        	$("LABEL[for="+$(this).attr("id")+"]").addClass("LabelSelected");
        }else{  
        	$("LABEL[for="+$(this).attr("id")+"]").removeClass("LabelSelected");  
        }  
    });  
});  
*/

$(document).ready(function(){  
    $(".CheckBoxClass").each(function() {
        $("LABEL[for="+$(this).attr("id")+"]").click(function(){
            var jThis = $(this);
            var jFor = $("#"+jThis.attr("for"));
            if(jThis.hasClass("LabelSelected")) {
                jThis.removeClass("LabelSelected");
                jFor.attr("checked", false);
            } else {
                jThis.addClass("LabelSelected");
                jFor.attr("checked", true);
            }
            
            return false;
        });
    });  
});  

function initTinyMce(classSelector)
{
	if(window.tinyMCE !== undefined)
	{		
		classSelector = classSelector || 'wysiwyg-simple';
		
	    tinyMCE.init({
	        mode : "textareas",
	        theme : "simple",
	        editor_selector: classSelector,
	        forced_root_block : false,
	        force_br_newlines : true,
	        force_p_newlines : false
	    });
	}

}

function destroyTinyMce()
{
	// TODO destroy only dialog textareas
	if(window.tinyMCE !== undefined)
	{
	    tinyMCE.triggerSave();
	    var i, t = tinyMCE.editors;
	    for (i in t){
	        if (t.hasOwnProperty(i)){
	            t[i].remove();
	        }
	    }
	}
}


function getGets(name, full, sGets)
{
	var sGets = typeof sGets != "undefined" ? sGets : document.location.toString().split("#",2)[0].split("?",2)[1];
	if(typeof sGets == "undefined") sGets = '';

	if(name) {
		var aGets = sGets.split("&");
		for(var i=0; i<aGets.length; i++) {
			var aGet = aGets[i].split("=",2);
			if(aGet[0] == name) return full ? aGets[i] : aGet[1];
		}
		
		return '';
	}
	
	return sGets ? sGets : '';
}
