$(document).ready(function(){
	$(".wfSelect").live("click",function(){
		var input = $(this).children("input");
		var name = $(input).attr("name");
		var form = $(input).attr("class");
		var value = $(input).attr("value");
		if ($(this).hasClass("wfSelected")){
			$(this).removeClass("wfSelected");
			$(this).css("background-color","");
			if ($("input."+form+"[name='"+name+"']").parent(".wfSelected").length == 0){
				$("input."+form+"[name='"+name+"'][value='-1']").parent().addClass("wfSelected");
			}
		}
		else {
			if (value == "-1"){			
				$("input."+form+"[name='"+name+"']").parent().removeClass("wfSelected");				
			}
			else{
				$("input."+form+"[name='"+name+"'][value='-1']").parent().removeClass("wfSelected");
			}
			$(this).addClass("wfSelected");
		}
	}).live("mouseover",function(){
		$(this).css("background-color","#dbdbdb");
	}).live("mouseout",function(){
		$(this).css("background-color","");
	});

	$(".systemMessage").click(function(){
		clearInterval(core.messageInterval);
		//$(".message_close").show();
		$(".message_close > span").css("display","none");
		$(".message_about").hide();
	}).dblclick(function(){
		core.closeMessage();
		core.closeModalScreen();
	});
	$(".message_close").click(function(){
		core.closeMessage();
		core.closeModalScreen();
	});
	$(".modalScreen").css("opacity","0").css("height",$(window).height()); 
	});

	$(window).resize(function(){
		$(".modalScreen").width($(window).width()).height($(window).height());
});


var core = {
	messageInterval: null,
	messageTime:3000,
	needToShowLoadingMessage:false,
	needModal:false,
	showLoad:function()
    {
        $('.loadingBar').dialog('open');
    },
    closeLoad:function(){
        $('.loadingBar').dialog('close');
    },
	showModalScreen:function(){
		$(".modalScreen").css("display","block").width($(window).width()).height($(window).height()).animate({opacity:0.6});
	},
	closeModalScreen:function(){
		core.fadeOut(".modalScreen");
		//$(".modalScreen").animate({opacity:0.1});//fadeTo("slow",0).hide();
	},
	fadeOut:function(selector){
		var opacity = $(selector).css("opacity");
		opacity = core.str_replace(",",".",opacity);
		if (opacity != 0){
			opacity -= 0.15;
			if (opacity < 0) opacity = 0;
		}
		else{ 
			$(selector).hide();
			return;	
		}
		$(selector).css("opacity",opacity.toString());
		setTimeout("core.fadeOut('"+selector+"')",100);
	},
	toggleModalScreen:function(){
		if ($(".modalScreen").css("display") == "block") core.closeModalScreen(); else core.showModalScreen();
	},
	confirmAction:function(flag){
		core.closeModalScreen();
		core.closeMessage();
		jConfirmCallback(flag);
	},
	showConfirmMessage:function(text,title,width){
		if (width != null) $(".systemMessage").width(width);
		else $(".systemMessage").css("width","");
		text += "<div><input onClick='core.confirmAction(true);' type=submit class=authBtn value='Продолжаем'> ";
		text += "<input onClick='core.confirmAction(false);' type=submit class=authBtn value='Отмена'></div>";
		core.showMessage(text,title,"confirm",true);
		core.showModalScreen();
	},
	messageIsOpened:function(){
		if ($(".systemMessage").css("margin-right") == "0px") return true; else return false;
	},
	whenMessageClose: 0,
	whenMessageCloseInterval:null,
	updateWhenMessageClose:function(){
		core.whenMessageClose -= 1000;
		if (core.whenMessageClose < 0) {
			core.whenMessageClose = 0;
			clearInterval(core.whenMessageCloseInterval);
		}
		$("#whenMessageClose").html(core.whenMessageClose / 1000);
	},
	showMessage:function(text,title,type,withoutClose){
		$(".systemMessage").removeClass("load");
		if (typeof(text) == "object") {
			title = text.title; 
			type = text.code;
			text = text.descr;
		}
		if (type == null) type = 1;
		if (type > 1) type = 0;
		if (type == 1) text = "<table><tr><td width=1 valign=top><img src='/images/accepted.png' style='padding:3px;' align=left></td><td valign=top>"+text+"</td></tr></table>";
		if (type == 0) text = "<table><tr><td width=1 valign=top><img src='/images/error.png' style='padding:3px;' align=left></td><td valign=top>"+text+"</td></tr></table>";
		if (type == -1) text = "<table><tr><td width=1 valign=top><img src='/images/warning.png' style='padding:3px;' align=left></td><td valign=top>"+text+"</td></tr></table>";
		jAlert(text,title);
	},
	closeMessage:function(){
		$(".systemMessage").animate({marginRight:-350},function(){$(this).hide();});
		clearInterval(core.messageInterval);
		if (core.needToShowLoadingMessage == true){
			core.showLoad();
		}
	},
	showPollResults:function(id){
		$.post("/cmd/system/polls/show",{id:id,forceShowResults:true},function(data){
			$("#poll_"+id).html(data);
		},"html");
	},
	vote:function(id){
		var form = $.form.get("poll_"+id,false);
		if (form.answer == null || form.answer.length < 1){
			core.showMessage("Выберите хотя бы один вариант ответа!","Ошибка голосования!",0);
			//jAlert("Выберите хотя бы один вариант ответа!","Ошибка голосования!");
			return;
		}
		if (typeof(form.answer) != "object") form.answer = [form.answer];
		if (form.answer.length > form.answerLimit){
			core.showMessage("Максимальное количество выбранных вариантов - "+form.answerLimit,"Ошибка голосования!",0);
			//jAlert("Максимальное количество выбранных вариантов - "+form.answerLimit,"Ошибка голосования!");
			return;
		}
		$.post("/cmd/system/polls/vote",{id:id,p:$.toJSON(form)},function(data){
			if (data.code == 0){
				core.showMessage(data.descr,"Ошибка голосования!","Ошибка голосования!",0);
				//jAlert(data.descr,"Ошибка голосования!");
			}
			else{
				$("#poll_"+id).html(data.descr);
			}
		});
	},
	makeLoadingBar:function(){
		$('.loadingBar').dialog({
		    modal:true,
		    bgiframe:true,
		    autoOpen:false,
		    height:'auto',
		    minHeight:50,
		    draggable:false,
		    resizable:false
		});
		$('.loadingBar').parent().children(".ui-dialog-titlebar").remove();
	},
	dialogDefaults:function(){
		$(document).ready(function(){
			$.extend($.ui.dialog.prototype.options, {
				resizable: false,
				draggable: false,
				position:"center",
				open:function(){
					setTimeout("core.buttons()",100);
				}
			});
			core.buttons();
		});
		
	},
	autoCompleteChange:function(){
		$(document).ready(function(){
			$.ui.autocomplete.prototype._initSource = function(){
				var array,
					url;
				if ( $.isArray(this.options.source) ) {
					array = this.options.source;
					this.source = function( request, response ) {
						// escape regex characters
						var matcher = new RegExp( $.ui.autocomplete.escapeRegex(request.term), "i" );
						response( $.grep( array, function(value) {
							return matcher.test( value.label || value.value || value );
						}) );
					};
				} else if ( typeof this.options.source === "string" ) {
					url = this.options.source;
					this.source = function( request, response ) {
						$.ajax({
							complete:function(){ core.buttons(); },
							dataType:"json",
							error:function(XMLHttpRequest, textStatus, errorThrown) {
								alert( XMLHttpRequest.responseText);
								//alert("error");
							},
							beforeSend: function ( request ) {
								request.setRequestHeader( 'Cookie', document.cookie );
							},
							data:request,
							url:url,
							success:function(data){ 
								response(data); 
								
							}
						});
						//$.getJSON( url, request, response );
					};
				} else {
					this.source = this.options.source;
				}
			}
		});
	},
	buttons:function(){
		$("button,input:submit").button();	
		$(".buttonset").buttonset();	
		$('a[rel=lightbox]').lightBox();
		$(".saveButton").button({icons:{primary:"ui-icon-disk"}});	
		//admin.adminTable();
	},
    updateCaptcha:function(){
        $(".captcha").attr("src","/captcha/"+core.rand());
    },
    rand:function() {
        var date = new Date()
        var max = 1000000;
        var min = 0;
        if( max ) {
            var rand = Math.floor(Math.random() * (max - min + 1)) + min;
        } else {
            var rand = Math.floor(Math.random() * (min + 1));
        }
        return rand.toString() + date.getFullYear() + date.getUTCMonth() + date.getDate() + date.getHours() + date.getMinutes() + date.getSeconds() + date.getMilliseconds();
    },
    tinymceFull:function(id){
        $(document).ready(function(){
            $('textarea#'+id).tinymce({
                // Location of TinyMCE script
                script_url : '/engine/javascript/tiny_mce/tiny_mce.js',
                // General options
                theme : "advanced",
                plugins : "images,pagebreak,style,layer,table,save,advhr,advimage,advlink,emotions,iespell,inlinepopups,insertdatetime,preview,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras,template,advlist",

                // Theme options
                theme_advanced_buttons1 : "cut,copy,paste,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,outdent,indent,|,undo,redo",
                theme_advanced_buttons2 : "bullist,numlist,|,tablecontrols,|,hr",
                theme_advanced_buttons3 : "fontsizeselect,link,unlink,images,image,code,|,charmap,emotions,advhr,|,sub,sup,removeformat,visualaid",
                theme_advanced_buttons4 : "",
                theme_advanced_toolbar_location : "top",
                theme_advanced_toolbar_align : "left",
                theme_advanced_statusbar_location : "bottom",
                theme_advanced_resizing : true,
                language: 'ru',
                // Example content CSS (should be your site CSS)
                content_css : "css/content.css",

                // Drop lists for link/image/media/template dialogs
                template_external_list_url : "lists/template_list.js",
                external_link_list_url : "lists/link_list.js",
                external_image_list_url : "lists/image_list.js",
                media_external_list_url : "lists/media_list.js",

                // Replace values for the template plugin
                template_replace_values : {
                        username : "Some User",
                        staffid : "991234"
                }
            });
        });
    },
    editors:[],
    editArea:function(id,type,height){
      editAreaLoader.init({
      id: id  // id of the textarea to transform
      ,start_highlight: true  // if start with highlight
      ,allow_resize: "both"
      ,allow_toggle: true
      ,word_wrap: false
      ,language: "ru"
      ,syntax: type
      ,height:height
  });
    },
    codeMirror:function(selector,type,height){
		$(document).ready(function(){
			var parserfile = [];
			var textarea = $(selector);
			var stylesheet = "";
			if (type == "js")
			{
				var parserfile = ["tokenizejavascript.js", "parsejavascript.js"];
				var stylesheet = "/engine/css/waterfall/codeMirror/jscolors.css";
			}
			if (type == "css")
			{
				var parserfile = "parsecss.js";
				var stylesheet = "/engine/css/waterfall/codeMirror/csscolors.css";
			}
			if (type == "html")
			{
				var parserfile = ["parsexml.js", "parsecss.js", "tokenizejavascript.js", "parsejavascript.js",
				"tokenizephp.js", "parsephp.js","parsephphtmlmixed.js"];
				var stylesheet = [
					"/engine/css/waterfall/codeMirror/xmlcolors.css",
					"/engine/css/waterfall/codeMirror/css/jscolors.css",
					"/engine/css/waterfall/codeMirror/css/csscolors.css",
					"/engine/css/waterfall/codeMirror/phpcolors.css"
				];
			}
			if ($(textarea[0]).length > 0)
				core.editors[selector] = CodeMirror.fromTextArea(textarea[0], {
					height: height+"px",
					content: textarea[0].value,
					parserfile: parserfile,
					stylesheet: stylesheet,
					path: "/engine/javascript/waterfall/codeMirror/",
					autoMatchParens: true
				});
		});
    },

    exit:function(){
        $.post('/cmd/system/user/clear',function(data){
            window.location.reload()
        },'html');
    },
    in_array:function(string, array)
    {
       for (i = 0; i < array.length; i++)
       {
          if(array[i] == string)
          {
             return true;
          }
       }
    return false;
    },
    lang:function(lang){
        return $("."+lang+"_lang").attr("value");
    },
    toggleDialog:function(selector)
    {
        if ($(selector).dialog('isOpen'))
        {
            $(selector).dialog('close');
        }
        else
        {
            $(selector).dialog('open');
        }
    },
    load:function(container,url,params,callback){
        if (params == null) params = {};
        $.post(url,params,function(data){
            $(container).html(data);
            if (typeof(callback) == 'function')
            callback(data);
        },'html');
    },
    replaceToInput:function(selector,form)
    {
        $(selector).replaceWith("<input id='"+form+"' name='"+$(selector).attr("name")+"' type=text class='"+$(selector).attr("class")+"' value='"+$(selector).attr("value")+"'>");
    },
	strrpos:function(haystack, needle, offset) {
		var i = -1;
		if (offset) {
		    i = (haystack+'').slice(offset).lastIndexOf(needle); 
		    if (i !== -1) {
		        i += offset;
		    }
		}
		else {
		    i = (haystack+'').lastIndexOf(needle);
		}
		return i >= 0 ? i : false;
	},
    strpos:function( haystack, needle, offset){
    var i = haystack.indexOf( needle, offset ); // returns -1
    return i >= 0 ? i : false;
    },
    str_replace:function (search, replace, subject, count) {
        var i = 0, j = 0, temp = '', repl = '', sl = 0, fl = 0,
                f = [].concat(search),
                r = [].concat(replace),
                s = subject,
                ra = r instanceof Array, sa = s instanceof Array;
        s = [].concat(s);
        if (count) {
            this.window[count] = 0;
        }

        for (i=0, sl=s.length; i < sl; i++) {
            if (s[i] === '') {
                continue;
            }
            for (j=0, fl=f.length; j < fl; j++) {
                temp = s[i]+'';
                repl = ra ? (r[j] !== undefined ? r[j] : '') : r[0];
                s[i] = (temp).split(f[j]).join(repl);
                if (count && s[i] !== temp) {
                    this.window[count] += (temp.length-s[i].length)/f[j].length;}
            }
        }
        return sa ? s : s[0];
    },

    substr:function( f_string, f_start, f_length ) {
        if(f_start < 0) {
            f_start += f_string.length;
        }
        if(f_length == undefined) {
            f_length = f_string.length;
        } else if(f_length < 0){
            f_length += f_string.length;
        } else {
            f_length += f_start;
        }
        if(f_length < f_start) {
            f_length = f_start;
        }
        return f_string.substring(f_start, f_length);
    }
    
}

function call_user_func(cb, parameters) {
	var func;
 
	if (typeof cb == 'string') {
		if (typeof this[cb] == 'function') {
		    func = this[cb];
		} else {
		    func = (new Function(null, 'return ' + cb))();
		}
	} else if (cb instanceof Array) {
		func = eval(cb[0]+"['"+cb[1]+"']");
	}

	if (typeof func != 'function') {
		throw new Error(func + ' is not a valid function');
	}
 
	return func.apply(null, Array.prototype.slice.call(arguments, 1));
}

$(document).ready(function(){
    core.makeLoadingBar();
    $.ajaxSetup({
        cache:false,
        type: "POST",
        complete:function(){core.closeLoad(); core.buttons();},
        dataType:"json",
        error:function(XMLHttpRequest, textStatus, errorThrown) {
            core.closeLoad();
            if (showJsonError == true)
            {
                html = XMLHttpRequest.responseText;
                var i = core.strpos(html, "</body>");
                if (i != null && i != 0)
                {
                    var i = core.strpos(html, "<body>");
                    html = core.substr(html, i)
                    i = core.strpos(html,"</body>");
                    html = core.substr(html,0,i);
                }
                core.showMessage("Оппа! Что-то пошло не так! <br><br><b>Ответ сервера</b><br><br>" + html +"",0);
                //jAlert("Оппа! Что-то пошло не так! <br><br><b>Ответ сервера</b><br><br>" + html +"");
            }
            else
            	core.showMessage("Ошибка при получении данных от сервера! Пожалуйста, сообщите об этом администрации!","Непредвиденная ошибка!",0);
                //jAlert("<div class='ui-state-error ui-corner-all' style='padding: 0pt 0.7em;'><p><span class='ui-icon ui-icon-alert' style='float: left; margin-right: 0.3em;'></span>Ошибка при получении данных от сервера! Пожалуйста, сообщите об этом администрации!</p></div>",false)
        },
        beforeSend: function ( request ) {
            request.setRequestHeader( 'Cookie', document.cookie );
            core.showLoad();
        }
    });
})

$('').bind("ajaxComplete", function(){
    core.closeLoad();
    core.buttons();
});


jQuery.form = {
    set:function(form,name,values)
    {
        var selector = "."+form+"[name="+name+"]";
        if ($(selector).is(':checkbox'))
        {
            if (!$.isArray(values)) values = new Array(values);
            $(selector).removeAttr("checked");
            for (var i = 0; i < values.length; i++)
                $(selector+"[value='"+values[i]+"']").attr("checked","checked");
            return;
        }
        if ($(selector).is(':radio'))
        {
            $(selector).removeAttr("checked");
            $(selector+"[value='"+values+"']").attr("checked","checked");return;
        }
        $(selector).val(values);
        return;
        /*
        if ($(selector).is('select'))
        {
            if (!$.isArray(values)) values = new Array(values);
            $(selector).children('option').removeAttr("selected");
            for (var i = 0; i < values.length; i++)
                $(selector).children("[value='"+values[i]+"']").attr("selected","selected");
            return;
        }
        $(selector).attr("value",values);*/
    },
    save:function(params)//name,url,key,callback,params,multi
    {
  		var p = {
            name:'form',
            url:'',
            key:null,
            test:false,
            callback:function(){},
            params:{},
            multi:false
        }
        p = $.extend(p,params);
        var form = $.form.get(p.name,false,p.multi);
        if ( p.key !=null )
        {
            var c = {};
            c[p.key] = form;
            form = c;
        }
        form = $.toJSON(form);
        if (p.params == null) p.params = {p:form};
        else p.params.p = form;
        $.post(p.url,p.params,function(data){
            if (p.test)
                alert(data);
            data = $.parseJSON(data);
            if (data.code == 1)
                $.form.ok(p.name,data.descr,data.title);
            else $.form.error(p.name,data.descr,data.title);
            p.callback(data);
        },'html');
    },
    get:function(form,json,multi){
        if (multi == null) multi = false;
        if (json == null) json = true;
        if (form == null || form.length == 0)
        {
            if (!json) return {};
            else return $.toJSON({});
        }
        var selector = "input."+form+":radio:checked,input."+form+":checkbox:checked,input."+form+":text,input."+form+":hidden,input."+form+":file,input."+form+":password,textarea."+form+",select."+form;
        var inputs = $(selector);
        var values = {};
        $.each(inputs,function(){
            var name = $(this).attr("name");
            var value = $(this).val();
			
            if (($.isArray(value) && value[0] == null) || value == null)
                return;
            if ($(this).hasClass("tinymce")){
            	value = tinyMCE.get($(this).attr("id")).getContent();
            }
            if ($(this).hasClass("codemirror")){
            	value = core.editors["#"+$(this).attr("id")].getCode();
            }
            if ($(this).is(':file'))
            {
                var name = $(this).attr("name");

                var key = $(this).attr("key");
                var s = "input[type=hidden][key="+key+"]";
                
                var v = {};
                v.directory = $(s+"[name="+name+"_directory]").attr("value");
                v.serverFileName = $(s+"[name="+name+"_serverFileName]").attr("value");
                v.path = $(s+"[name="+name+"_path]").attr("value");
                v.size = $(s+"[name="+name+"_size]").attr("value");
                v.isUploaded = $(s+"[name="+name+"_isUploaded]").attr("value");
                if (v.isUploaded == false || v.isUploaded == 0 || v.isUploaded == "0") return;
                if (!multi && !$.form.intervals[key].wasMulti) values[name] = v;
                else
                {
                    if (values[name] == null) values[name] = new Array();
                    values[name][values[name].length] = v;
                }
                return;
            }
            if (multi || $(this).is(':checkbox'))
            {
            	if ($(this).is(":checkbox") && !$(this).attr("checked")) return;
                if (values[name] == null) values[name] = new Array();
                values[name][values[name].length] = value;
            }
            else
            {
                values[name] = value;
            }
        });

        if (json == false)
            return values;
        else
            return $.toJSON(values);
    },
    addInputFile:function(form,name,container)
    {
        var key = $('.'+form+'[name='+name+']').attr("key");

        var p = {};
        var oldparams = $.form.intervals[key];
        p.upload = oldparams.upload;
        p.progress = oldparams.progress;
        p.serverFileName = oldparams.serverFileName_def;
        p.directory = oldparams.directory;
        p.autoUpload = oldparams.autoUpload;
        p.multi = false;
        p.wasMulti = oldparams.wasMulti;
        p.onSelect = oldparams.onSelect;
        p.onStart = oldparams.onStart;
        p.onComplete = oldparams.onComplete;

        $(container).append("<input type=file name="+name+" class="+form+">");
        $.form.makeUpload('.'+form+'[name='+name+']',p,'multi');
    },
    uploadChange:function(key,param,value){
		$("input[key='"+key+"'][name='"+param+"']").attr("value",value);
    },
    makeUpload: function (selector,params,add){

        var elements = $(selector);
        $.each(elements,function(){
            var p = {
                upload:"/upload.php?action=uploadFile",
                progress:"/upload.php?action=progress",
                serverFileName:"%real%",
                directory:"",
                userParam:"",
                autoUpload:false,
                multi:false,
                wasMulti:false,
                onSelect:function(){},
                onStart:function(){},
                onComplete:function(){},
                name:$(selector).attr("name")
            }
            if ($(this).attr("key")!=null) return;
            var date = new Date();
            var key = date.getMilliseconds().toString()+date.getMinutes().toString()+date.getSeconds().toString()+Math.round(Math.random()*(1000000 - 0)).toString();
            p = $.extend(p,params);
            if (add == null)
                p.wasMulti = p.multi;
            else (p.wasMulti = true);
            p.selector = "[type=file][key="+key+"]";


            p.key = key;
            p.serverFileName_def = p.serverFileName;
            $(this).attr("key",key).change(function(){
                if ($("#submit_"+key).length == 0)
                {
                    $.form.intervals[key].onSelect($.form.intervals[key]);
                    $(this).after("<input type=submit value='Загрузить' id=submit_"+key+">");
                    if ($.form.intervals[key].autoUpload == true)
                        $("#submit_"+key).click();
                }
            });
            $(this).wrap("<form key='"+key+"' onsubmit=\"return $.form.uploadSelectedFile(this)\" name=wfUpload_"+key+" action='"+p.upload+"' target=iframe_"+key+" enctype='multipart/form-data' method=post></form>")
            $(this).parent().append("<input type=hidden name=key value='"+key+"'>");
            $(this).before('<input type="hidden" name="UPLOAD_IDENTIFIER" value="'+key+'">');
            var span = $(this).parent();
            var html =
                "<input type=hidden name='"+p.name+"_directory' key='"+key+"' value='"+p.directory+"'>" +
                "<input type=hidden name='"+p.name+"_serverFileName' key='"+key+"' value='"+p.serverFileName+"'>" +
                "<input type=hidden name='"+p.name+"_serverFileName_def' key='"+key+"' value='"+p.serverFileName_def+"'>" +
                "<input type=hidden name='"+p.name+"_path' key='"+key+"' value=''>" +
                "<input type=hidden name='inputName' key='"+key+"' value='"+p.name+"'>" +
                "<input type=hidden name='userParam' key='"+key+"' value='"+p.userParam+"'>" +
                "<input type=hidden name='"+p.name+"_isUploaded' key='"+key+"' value='0'>" +
                "<input type=hidden name='"+p.name+"_size' key='"+key+"' value=''>" +
                "<span uploaded=0 class=uploadDescr style='display:none' key='"+key+"'></span>" +
                "<iframe style='display:none;' onLoad=$.form.uploadComplete('"+key+"') name=iframe_"+key+" id=iframe_"+key+"></iframe>";
            $(span).append(html);
            if ($.form.intervals[key] == null)
                $.form.intervals[key] = p;
        });
        if (params.multi == true)
        {
            var l = elements.length;
            if (l > 0 && $('#more_files_'+$(elements[l-1]).attr("key")).length == 0)
                $(elements[l-1]).parent('form').after("<br><input type=submit value='Добавить еще один файл' onclick=$.form.addInputFile('"+$(elements[l-1]).attr("class")+"','"+$(elements[l-1]).attr("name")+"','#more_files_"+$(elements[l-1]).attr("key")+"')><br>").after('<span id=more_files_'+$(elements[l-1]).attr("key")+'></span>');
        }
    },
    uploadSelectedFile: function(s,params)
    {
        var p = {
            width:100,
            height:15
        }
        p = $.extend(p,params);
        var key = $(s).attr("key");
        $("#submit_"+key).attr("disabled","disabled");
        var span = $(s).children(".uploadDescr");
        var style = {display:'none', margin:"10px"};
        $(span).html("<div class=progressbar></div> <span style='text-align:right;' class=uploadedFileDetailInfo>Загрузка началась. Пожалуйста, подождите...</span>").css(style);
        var bar = $(span).children('div.progressbar');
        bar.progressbar({value: 0});
        //alert($.form.intervals[key].selector);
        var fname = $($.form.intervals[key].selector).attr("value");
        fname = fname.split('\\');
        $.form.intervals[key].realFileName = fname[fname.length-1];
        $.form.intervals[key].key = key;
        $.form.intervals[key].bar = bar;
        $.form.intervals[key].span = span;
        $($.form.intervals[key].span).attr("uploaded",0);
        $.form.intervals[key].onStart($.form.intervals[key]);
        //$.form.uploadProgress(key);
        $.form.intervals[key].interval = setInterval('$.form.uploadProgress("'+key+'")',1000);
    },
    uploadProgress: function(key){
        $.ajax({
            error:function(XMLHttpRequest, textStatus, errorThrown) {
				//alert( XMLHttpRequest.responseText);
			},
            start:function(){},
            beforeSend:function ( request ) {
                request.setRequestHeader( 'Cookie', document.cookie );
            },
            url:$.form.intervals[key].progress,
            data:{
                key:key,
                file:$.form.intervals[key].directory+"/"+$.form.intervals[key].realFileName
            },
            complete:function(){ core.buttons(); },
            dataType:'html',
            type:'post',
            success:function(data){
                data = $.parseJSON(data);
                if (data.result == 1)
                {
                    var timelast=data.time_last;
                    var total = data.bytes_total;
                    var speed = data.speed_average;
                    var bytes = data.bytes_uploaded;
                    var eta = data.est_sec;
                    var min = Math.round(eta / 60);
                    var sec = eta - min*60;
                    if(min==0){var time=sec+" сек."}else{var time=min+" мин."+sec+" сек."}
                    var speeds = $.form.speeds(speed);
                    var percents = Math.round(bytes * 100 / total);
                    $.form.intervals[key].size = total;
                    $($.form.intervals[key].span).children('.uploadedFileDetailInfo').html("<b>"+percents+"%</b>, <i>скорость:</i> <b>"+speeds+"</b>, <i>загружено</i> <b>"+$.form.fsize(bytes)+"</b> <i>из</i> <b>"+$.form.fsize(total)+"</b>");
                    $.form.intervals[key].bar.progressbar('value',percents);
                }
                if (data.result == -1 )
                    $.form.intervals[key].size = data.size;
                if (data.result == 0)
                {
                    $.form.intervals[key].size = data.size;
                    //alert(data.size);
                    if ($($.form.intervals[key].span).attr("uploaded") == 0)
                        $($.form.intervals[key].span).html("Сервер не поддерживает отображение процесса загрузки. Подождите завершения загрузки файла...");
                }

                $($.form.intervals[key].span).slideDown();
        }});
    },
    uploadCompleteAfterTimer:function(key){
        if ($.form.intervals[key].realFileName == null ) return;
        clearInterval($.form.intervals[key].interval);
        var size = "false";
        //alert($.form.intervals[key].size);
        if ($.form.intervals[key].size != null) size = $.form.intervals[key].size;
        var serverFileName = $.form.str_replace('%real%',$.form.intervals[key].realFileName,$.form.intervals[key].serverFileName);
        var value = $.form.intervals[key].directory+"/"+serverFileName;
        $("input[key="+key+"][name="+$.form.intervals[key].name+"_path]").attr("value",value);
        $("input[key="+key+"][name="+$.form.intervals[key].name+"_isUploaded]").attr("value",1);
        $("input[key="+key+"][name="+$.form.intervals[key].name+"_size]").attr("value",size);
        $("input[key="+key+"][name="+$.form.intervals[key].name+"_serverFileName]").attr("value",serverFileName);
        $($.form.intervals[key].span).attr("uploaded",1);
        $("#submit_"+key).remove();
        $(".uploadDescr[key="+key+"]").html("Загрузка завершена!!!");
        var opt = {
            path:value,
            size:size,
            name:$.form.intervals[key].realFileName
        };
        $.form.intervals[key].onComplete(opt);
    },
    uploadComplete:function(key){
            setTimeout("$.form.uploadCompleteAfterTimer('"+key+"')",500);
    },
    intervals:{},
    "fsize":function(x) {
        x = Math.round(x / 1024);
        if (x < 1000) {
            return x + " " + "Кб";
        }
        x = Math.round(x * 100 / 1024) / 100;
        return x + " " + "Мб";
    },
    "speeds":function (x) {
        x = Math.round(x / 1024);
        if (x < 1000) {
            return x + " " + "Кб/сек";
        }
        x = Math.round(x * 100 / 1024) / 100;
        return x + " " + "Мб/сек";
    },
    "str_replace":function (search, replace, subject, count) {
        var i = 0, j = 0, temp = '', repl = '', sl = 0, fl = 0,
                f = [].concat(search),
                r = [].concat(replace),
                s = subject,
                ra = r instanceof Array, sa = s instanceof Array;
        s = [].concat(s);
        if (count) {
            this.window[count] = 0;
        }

        for (i=0, sl=s.length; i < sl; i++) {
            if (s[i] === '') {
                continue;
            }
            for (j=0, fl=f.length; j < fl; j++) {
                temp = s[i]+'';
                repl = ra ? (r[j] !== undefined ? r[j] : '') : r[0];
                s[i] = (temp).split(f[j]).join(repl);
                if (count && s[i] !== temp) {
                    this.window[count] += (temp.length-s[i].length)/f[j].length;}
            }
        }
        return sa ? s : s[0];
    },
    error:function(form,message,title){
	  if ($("div."+form).length > 0)
	  {
		  $("div."+form).addClass("formError").removeClass("formOk").html("<img src='/images/jAlerts/important.gif' align=left style='padding-right:2px;'>"+message).show();
		  setTimeout("$('div."+form+"').slideUp()",4000);
	  }
	  else
	  {
	      core.showMessage(message,title,0);
		  //jAlert(message,title);
	  }
    },
    ok:function(form,message,title){
		  if ($("div."+form).length > 0)
		  {
			  $("div."+form).removeClass("formError").addClass("formOk").html("<img src='/images/jAlerts/info.gif' align=left style='padding-right:2px;'>"+message).show();
			  setTimeout("$('div."+form+"').slideUp()",4000);
		  }
		  else
		  {
	  		  core.showMessage(message,title,1);
			  //jAlert(message,title);
		  }
    }
}


core.dialogDefaults();
core.autoCompleteChange();





