var global_settings_url='xml/settings.xml';
var global_settings_params={};

var global_load_num=0;
var global_current_data = new Array();
var global_cache_template=false;
var global_reload_loaded=true;

var global_default_id="1";
var global_async=false;

var global_cache_main=true;
var global_news_count=7;

var global_maxResults=15;//новое, не удалять. нач опр. задавать в settings.xml
var global_urlPrefix="";//аналогично
var global_firstResult=0;//0 или 1

//настройки

var global_title = 'Council CIS';
var global_name = 'Council CIS';

var global_weekday=new Array("Воскресенье","Понедельник","Вторник","Среда","Четверг","Пятница","Суббота");
var global_month=new Array("Январь","Февраль","Март","Апрель","Май","Июнь","Июль","Август","Сентябрь","Октябрь","Ноябрь","Декабрь");
var global_month_2=new Array("Января","Февраля","Марта","Апреля","Мая","Июня","Июля","Августа","Сентября","Октября","Ноября","Декабря");
var current_hash;

$(document).ready(function(){
    $("#main_container").css("display", "block");
    $("#hash_container").hide();
    load_settings(function() {
        $(window).hashchange( function(){
            if(current_hash!=document.location.hash) {
                current_hash = document.location.hash;
                $('#hash_container').text(current_hash);

                hash_to_ids(document.location.hash);
            }
        })
        var path = document.location.pathname;
        if ((document.location.hash ==''|| document.location.hash=='#!')&&!(path.charAt(path.length-1)=='/'||(path.length>=11&&path.substring(path.length-11)=='/index.html'))) {
            document.location.hash = $('#hash_container').text();
            if (document.location.hash !=''&& document.location.hash!=='#!') return;
        }
        $(window).hashchange();
});
});

function load_settings(cb) {
        $.post(global_settings_url,global_settings_params,function(xml){

            $('#main_container').data('settings',xml);
            global_cache_template=!!$('templates',xml).attr('cache');
            global_urlPrefix=$('settings',xml).attr('urlPrefix');
            global_maxResults=$('settings',xml).attr('maxResults');
        cb();
        });
    }

function hash_to_ids(hash) {
    var params={};
    if(!hash) hash=document.location.hash;

    var tmp=hash.replace(/^\#!?(.{0,1024})/,'$1').replace(",", "&").split("&");
    for (var i=0;i<tmp.length;i++) {
        var el = tmp[i];
        el=el.split(/\=/);
        if(el[0] && el[1]) params[el[0]]=el[1];
    }
    if (!params.page ) hash="#!";
    if(params.page && $('pages:first',$('#main_container').data('settings')).attr('default')==params.page) hash="#!";//дефолтный адрес без параметров при дефолтной странице
    if(current_hash!=hash) {
        current_hash = hash;
        document.location.hash=hash;
        $('#hash_container').text(hash);
    }
    open_page(params);
}

function serialize_json(object) {
    var index,tmp="";
    for(index in object) tmp+="&"+index+"="+object[index];
    tmp.replace(/^&(.{0,1024})$/,'$1');
    return tmp;
}

function open_page(params) {
    var settings=$('#main_container').data('settings'),page;

    $('.formError').remove();
    //clear temp
    $('#main_container').data('current',{});
    global_current_data=[];
    
    if(!params.page) {
        params={};
        params.page=$('pages:first',settings).attr('default');
        if(!params.page) {
            alert('Ошибка XML. Нет dafault page id.');
            return;
        }
    }

    $('#main_container').data('params',params);

    page=$('pages > page[id="'+params.page+'"]',settings);

    //Количество данных, что необходимо загрузить
    global_load_num=count_num(page,false);
    load_data(page);
}

function count_num(target,delayed) {
    var settings=$('#main_container').data('settings');
    var load_num=$('templateItem',target).add($('template',target))
    .add($(target).filter('templateItem')).size();
    if(delayed) {
        load_num-=-$('item[templId]',target).add($(target).filter('item[templId]')).size();
        load_num-=-$('item',target).add($(target).filter('item')).size();
    }
    else {
        load_num-=-$('item[templId][delayed!=1]',target).add($(target).filter('item[templId][delayed!=1]')).size();
        load_num-=-$('item[delayed!=1]',target).add($(target).filter('item[delayed!=1]')).size();
    }
    
    $('templateItem',target).each(function(){
        load_num-=-count_num($('template[id="'+$(this).attr("templId")+'"]',settings));
    });
    return load_num;
}

function load_data(target,data_params,cbLoad,cbPush) {
    var settings=$('#main_container').data('settings');
    var params=$('#main_container').data('params'),tmpUrl;
    $(target).each(function(){
        var send_params={};
        var send_url='';
        var id;
        var cache=false;
        var trans_params={};
        if($(this).is('template') || $(this).is('request')) {
            id=$(this).attr('id');
            if(!id) {
                alert('Ошибка №413: в XML не указан аттрибут ID.');
                return false;
            }
            if(data_params.cache || (global_cache_template && $(this).is('template'))) cache=true;
            if($(this).is('template')) {
                if($('url',this).size() > 0 && $('url',this).text()) {
                    send_url=$('url:first',this).text();
                }
            }
            else if($(this).is('request')) {
                var type=$('type:first',this).text();
                if($('url',this).size() > 0 && $('url',this).text()) {
                    send_url=$('url:first',this).text();
                }
                else {
                    if(type=="get") {
                        send_url=global_urlPrefix+'getObjects';
                        if(!!params.ids && params.ids>0) {
                            send_params.ids=params.ids;
                        }
                        
                    }
                    else if(type=="list") {
                        send_url=global_urlPrefix+'listObjects';
                        if(!!$(this).attr('pagination') || $('first',this).size() > 0 || $('max',this).size() > 0) {
                            if(!!params.max && params.max>0) {
                                send_params.maxResults=params.max;
                            }
                            else if($('max',this).text()) {
                                send_params.maxResults=$('max',this).text();
                            }
                            else send_params.maxResults=global_maxResults;
                            
                            if($('first',this).size() > 0 &&  $('first',this).text()) {
                                send_params.firstResult=$('first',this).text();
                            }
                            else if(!!params.first && params.first>=0) {
                                send_params.firstResult=params.first;
                            }
                            else send_params.firstResult=global_firstResult;


                        }
                        //фильтры
                        if($('filters',this).size()>0) {

                            var filtersArray=[];
                            $('filters',this).children('filter').each(function(){
                                if(!!$(this).attr('param') && !!$(this).attr('name')) {
                                    if(!!params[$(this).attr('param')]) {
                                        filtersArray.push($(this).attr('name')+","+params[$(this).attr('param')]);
                                    }
                                    else if(!!$(this).text()) {
                                        filtersArray.push($(this).attr('name')+","+$(this).text());
                                    }
                                }
                                else if(!!$(this).text() && !!$(this).attr('name')) {
                                    filtersArray.push($(this).attr('name')+","+$(this).text());
                                }
                            });
                            if(filtersArray.length>0) {
                                send_params.filter=filtersArray.join(";");
                            }
                        }

                        if($('sort',this).size()>0) {
                            if(!!$('sort',this).text()) {
                                send_params.sort=$('sort',this).text();
                                if(!!$('sort',this).attr('dir')) {
                                    send_params.dir=$('sort',this).attr('dir');
                                }
                                else send_params.dir='asc';
                            }
                        }
                    }
                    else if(type=="menu") send_url='/xml/menuObject';

                    /*custom params*/
                    if($('custom',this).size()>0) {
                        $('custom param',this).each(function(){
                            if(!!$(this).attr('param') && !!$(this).attr('name')) {
                                if($(this).attr('param')=="rand()") {
                                    send_params[$(this).attr('name')]=Math.floor(Math.random()*1000000);
                                }
                                else if(!!params[$(this).attr('param')]) {
                                    //filtersArray.push($(this).attr('name')+","+params[$(this).attr('param')]);
                                    send_params[$(this).attr('name')]=params[$(this).attr('param')];
                                }
                                else if(!!$(this).text()) {
                                    send_params[$(this).attr('name')]=$(this).text();
                                }
                            }
                            else if(!!$(this).text() && !!$(this).attr('name')) {
                                send_params[$(this).attr('name')]=$(this).text();
                            }
                        });
                    }
                    /**/


                    if($('objectType',this).size() > 0 && $('objectType',this).text()) {
                        send_params.objectTypeName=$('objectType',this).text();
                    }

                }
            }
            tmpUrl=serialize_json(send_params);
            if(tmpUrl) tmpUrl=send_url+"?"+tmpUrl;
            else tmpUrl=send_url;

            //usual params
            trans_params={
                'send_url':send_url,
                "send_params":send_params,
                "id":id,
                "target":data_params.target,
                "parent":data_params.parent
            }

            if($(this).attr('name')) trans_params.name=$(this).attr('name')

            if(cache) {
                //данные есть в кэшэ?
                
                if($('#main_container').data(tmpUrl)) {
                    //есть данные
                    trans_params.cache=true;
                    trans_params.data=$('#main_container').data(tmpUrl).data;
                    trans_params.dataType=$('#main_container').data(tmpUrl).dataType;
                    
                    if(data_params.itemTeplateId) trans_params.itemTeplateId=data_params.itemTeplateId;

                        if(!cbPush) {
                            global_current_data.push(trans_params);
                             global_load_num--;
                             if(global_load_num==0) draw_data();
                        }
                        else cbPush(trans_params);
                }
                else {
                    trans_params.cache=true;
                    if(data_params.itemTeplateId) trans_params.itemTeplateId=data_params.itemTeplateId;

  
                        if(!cbLoad) send_request(trans_params);
                        else cbLoad(trans_params);
                }
                //если нет - загрузка
            }
            else {
                //загрузка данных, никакого кэширования
                if(data_params.itemTeplateId) trans_params.itemTeplateId=data_params.itemTeplateId;
                    if(!cbLoad) send_request(trans_params);
                        else cbLoad(trans_params);
            }
        }
    });

    $('templateItem',target).add($('item',target)).each(function(){
        var data_params={},id;
        if($(this).is('item') && !!$(this).attr('delayed')) {
            data_params.delayed=true;
            //global_load_num-=count_num($(this));
        }
        else {
            if($(this).is('templateItem')) id=$(this).attr('templId');
            else if($(this).is('item')) id=$(this).attr('requestId');
            if(!id) {
                alert('Ошибка №412: в XML не указан аттрибут ID.');
                return false;
            }
            if(parseInt($(this).attr('cache'))) data_params.cache=true;
        
            if(!(data_params.target=$(this).attr("target"))) data_params.target='#main_container';
            data_params.parent=$(this).attr("id");
            if($(this).is('item') && $(this).attr('templId')) {
                //шаблон отображения XML
                data_params.itemTeplateId=$(this).attr('templId');
                load_data($('[id="'+$(this).attr("templId")+'"]',settings),data_params,cbLoad,cbPush);
            }
            load_data($('[id="'+id+'"]',settings),data_params,cbLoad,cbPush);
        }
    });
}

function send_request(request_params)  { //.send_url, .send_params, .cache 
    var tmp;
    if(!request_params.send_url) alert('Ошибка №142');
    if(!request_params.send_params) request_params.send_params={};
    if(!global_async) global_async=false;
    $.ajax({
        type: "POST",
        url: request_params.send_url,
        data: request_params.send_params,
        async: global_async,
        complete: function (XMLHttpRequest, textStatus) {
            var dataType,contentType,data;
            contentType=XMLHttpRequest.getResponseHeader('Content-Type');//responseXML
            if(contentType.match(/xml/)) {
                data=XMLHttpRequest.responseXML;
                dataType="xml";
            }
            else {
                data=XMLHttpRequest.responseText;
                dataType="html";
            }

            global_load_num--;
            //кэширование
            if(request_params.cache) {
                var storeData={};
                storeData.data=data;
                storeData.dataType=dataType;
                if(request_params.name)  storeData.name=request_params.name;
                tmp=serialize_json(request_params.send_params);
                if (tmp) tmp=request_params.send_url+'?'+serialize_json(request_params.send_params);
                else tmp = request_params.send_url;
                $('#main_container').data(tmp,storeData);
            }
            request_params.dataType=dataType;
            request_params.data=data;
            //запись
            global_current_data.push(request_params);
            if(global_load_num==0) draw_data();
        }
    });

}

function draw_data(draw_params,dataToDraw,drawDelayed) {//.draw_what
    var index;
    var settings=$('#main_container').data('settings');
    var params=$('#main_container').data('params');
    var id,parent,pointer,draw_where,itemTeplateId,itemTemplatePointer,flag,tmp,tmp2;
    if(!draw_params) {
        $('pages > page[id="'+params.page+'"]',settings).children('templateItem, item').each(function(){
                draw_data({"draw_what":$(this),"draw_where":"#main_container"},global_current_data)
        });
        return false;
    }
    if(draw_params.draw_where)  draw_where = $(draw_params.draw_where);
    else draw_where=$(draw_params.draw_what.attr('target'));
    if(draw_params.draw_what.is('item') && draw_params.draw_what.attr('delayed') && !drawDelayed) {
        delayedLoad(draw_params.draw_what);
    }
    else {
        if(draw_params.draw_what.is('templateItem') || draw_params.draw_what.is('item')) {
            parent=draw_params.draw_what.attr('id');
            if(draw_params.draw_what.is('templateItem')) id=draw_params.draw_what.attr('templId');
            else if(draw_params.draw_what.is('item')) {
                id=draw_params.draw_what.attr('requestId');
                if(draw_params.draw_what.attr('templId')) itemTeplateId=draw_params.draw_what.attr('templId');
            }

            flag=0;
            for(index in dataToDraw) {
                if(dataToDraw[index].id==id && dataToDraw[index].parent==parent) {
                    pointer=index;
                    flag+=1;
                    if(!dataToDraw[index].itemTeplateId) break;
                }//.itemTeplateId
                if(itemTeplateId && !itemTemplatePointer) {
                    if(dataToDraw[index].id==itemTeplateId &&  dataToDraw[index].parent==parent) {
                        itemTemplatePointer=index;
                        flag+=1;
                    }
                }
                if(flag==2) break;
            }
            //прорисовка данных
            tmp=serialize_json(dataToDraw[pointer].send_params);
            if(tmp) tmp=dataToDraw[pointer].send_url+"?"+tmp;
            else tmp=dataToDraw[pointer].send_url;
            tmp2=false;
            if(dataToDraw[itemTemplatePointer]) {
                tmp2=serialize_json(dataToDraw[itemTemplatePointer].send_params);
                if(tmp2) tmp2=dataToDraw[itemTemplatePointer].send_url+"?"+tmp2;
                else tmp2=dataToDraw[itemTemplatePointer].send_url;
            }
            if(tmp2) tmp+="_asdfg_"+tmp2;
            if(tmp!=draw_where.data('url') && global_reload_loaded)
            {
                draw_where.empty().removeData('url');
                if(dataToDraw[pointer].dataType=="html") draw_where.append(dataToDraw[pointer].data);
                else if(dataToDraw[pointer].dataType=="xml") {
                    if(flag==2) {
                        if(dataToDraw[itemTemplatePointer].dataType=="xml") {
                            draw_where.xslt({
                                xsl: dataToDraw[itemTemplatePointer].data,
                                xml: dataToDraw[pointer].data
                            });

                            //постобработка
                            $('.toHtml',draw_where).each(function(){
                                $(this).html($(this).text()).removeClass('toHtml').addClass('styleReset');
                            });
                            $('.toTimeDate',draw_where).each(function(){
                                $(this).text(mTtd(parseInt($(this).text()))).removeClass('toTimeDate');
                            });
                            $('.toDate',draw_where).each(function(){
                                $(this).text(mTd(parseInt($(this).text()))).removeClass('toDate');
                            });

                        }
                        else {//html TEMPLATE
                            //HTML шаблон, работа через реплейсы
                            draw_where.append(dataToDraw[itemTemplatePointer].data);
                        }
                    }
                }
                draw_where.data('url',tmp);
            }
        }
        else if (draw_params.draw_what.is('scenario')) {//встроенный сценарий
            draw_where.empty().removeData('url');
            if(draw_params.draw_what.attr('function')) {
                var eval_string="";
                var eval_params="";
                eval_string+=draw_params.draw_what.attr('function');
                if(draw_params.draw_what.attr('target')) {
                    eval_params+='target:"'+draw_params.draw_what.attr('target')+'"';
                }
                if(draw_params.draw_what.attr('param')) {
                    if(eval_params!="") eval_params+=',';
                    eval_params+='param:"'+draw_params.draw_what.attr('param')+'"';
                }
                if(draw_params.draw_what.attr('param2')) {
                    if(eval_params!="") eval_params+=',';
                    eval_params+='param2:"'+draw_params.draw_what.attr('param2')+'"';
                }
                eval_string+='({'+eval_params+'})';
                eval(eval_string);
            }
        }


        //конец
        draw_params.draw_what.children('templateItem')
        .add(draw_params.draw_what.children('item'))
        .add(draw_params.draw_what.children('scenario'))
        .add($('[id="'+id+'"]',settings).children('templateItem'))
        .add($('[id="'+id+'"]',settings).children('item'))
        .add($('[id="'+id+'"]',settings).children('scenario'))
        .each(function(){
            draw_data({
                "draw_what":$(this)
                },dataToDraw);
        });
    }


  

    //remove used from array;draw_data
    //dataToDraw=dataToDraw.splice(pointer,1);
}

function delayedLoad(draw_what) {
    var local_data=[];
    var draw_where=$(draw_what.attr('target'));
    //считаем каунт
    var local_count=count_num(draw_what,true);
    function local_draw() {
        draw_data({"draw_what":draw_what,"draw_where":draw_what.target},local_data,true)
    }

    function toPush(value) {
        local_data.push(value);

        local_count--;
        if(local_count==0) local_draw();
    }

    function loadMe(request_params) { 
        var tmp;
        
        if(!request_params.send_url) alert('Ошибка №142');
        if(!request_params.send_params) request_params.send_params={};
        if(!global_async) global_async=false;
        $.ajax({
            type: "POST",
            url: request_params.send_url,
            data: request_params.send_params,
            async: true,
            global: false,
            complete: function (XMLHttpRequest, textStatus) {
                var dataType,contentType,data;
                contentType=XMLHttpRequest.getResponseHeader('Content-Type');//responseXML
                //alert(type.match(/html/)+' _ '+type.match(/xml/));
                if(contentType.match(/xml/)) {
                    data=XMLHttpRequest.responseXML;
                    dataType="xml";
                }
                else {
                    data=XMLHttpRequest.responseText;
                    dataType="html";
                }

                local_count--;
                //кэширование
                if(request_params.cache) {
                    var storeData={};
                    storeData.data=data;
                    storeData.dataType=dataType;
                    if(request_params.name)  storeData.name=request_params.name;
                    tmp=serialize_json(request_params.send_params);
                    if (tmp) tmp=request_params.send_url+'?'+serialize_json(request_params.send_params);
                    else tmp = request_params.send_url;
                    $('#main_container').data(tmp,storeData);
                }
                request_params.dataType=dataType;
                request_params.data=data;
                //запись
                local_data.push(request_params);
                if(local_count==0) local_draw();
            }
        });
    }

    //reset
    draw_where.data('url',null);
    //вешаем картинку лоадера
    draw_where.html('<div class="councilDelayLoader"><img src="images/loading/indicator_mozilla_blu.gif"/></div>');
    //грузим объекты(проверяя кэш)
    //load_data(draw_what,{},loadMe,local_draw);

    $(draw_what).each(function(){
        var settings=$('#main_container').data('settings');
        var params=$('#main_container').data('params'),tmpUrl;
        var data_params={},id;
        if($(this).is('item') && !!$(this).attr('delayed')) {
            if($(this).attr('delayed')=='1') data_params.delayed=true;
        }
        if($(this).is('templateItem')) id=$(this).attr('templId');
        else if($(this).is('item')) id=$(this).attr('requestId');
        if(!id) {
            alert('Ошибка №412: в XML не указан аттрибут ID.');
            return false;
        }
        if(parseInt($(this).attr('cache'))) data_params.cache=true;

        if(!(data_params.target=$(this).attr("target"))) data_params.target='#main_container';
        data_params.parent=$(this).attr("id");
        if($(this).is('item') && $(this).attr('templId')) {
            //шаблон отображения XML
            data_params.itemTeplateId=$(this).attr('templId');
            load_data($('[id="'+$(this).attr("templId")+'"]',settings),data_params,loadMe,toPush);
        }
        load_data($('[id="'+id+'"]',settings),data_params,loadMe,toPush);
    });
    //load_data
    //рисуем
}
function idArraysCompare(obj,id,misc_id) {
    var i = obj.length;
    if(!misc_id) {
        while (i--) if (obj[i].id == id) return true;
        return false;
    }
    else {
        while (i--) {
            if (obj[i].id == id) {
                if(!obj[i].misc_id) return true;
                else if(obj[i].misc_id==misc_id) return true;
            }
        }
        return false;
    }
    return false;
}



function doc_title(text) {
    document.title=global_title+' - '+text;
    if (jQuery.browser.msie) jQuery('#myIframe').get(0).contentWindow.document.title=global_title+' - '+text;
    return false;
}



function inArray(element, obj) {
  var i = obj.length;
  while (i--) {
    if (obj[i] === element) return true;
  }
  return false;
}
function isArrayInArray(element,obj) {
    var i = obj.length;
    var str=element.join("");
    while (i--) {
        alert(obj[i].join("") +' , '+str);
        if (obj[i].join("") == str) return true;
    }
    return false;
}

function mTd(ms) {
    var date = new Date(parseInt(ms));
    return date.getDate()+' '+global_month_2[date.getMonth()]+' '+date.getFullYear()+' года';
}
function mTtd(ms) {
    var date = new Date(parseInt(ms));
    return (date.getHours()<10?'0'+date.getHours():date.getHours()) +':'+ (date.getMinutes()<10?'0'+date.getMinutes():date.getMinutes())+', '+date.getDate()+' '+global_month_2[date.getMonth()]+' '+date.getFullYear()+' года';
}

