/*

*/
    function formatDate(objDate){
        var year=objDate.getYear();
        var month=objDate.getMonth()+1;
        var day=objDate.getDate();

        year=(parseInt(year)<1000)?(year+1900)+"":year+"";

        month=(parseInt(month)<10)?"0"+month:month+"";

        day=(parseInt(day)<10)?"0"+day:day+"";

        return year+""+month+""+day;

    }

//control class
    function ChartingTool(control, imgLine, imgBar, imgLgnd, imgTable, imgSrcBase){
//constructing
////working vars
//        this.endDate = new Date();
//        this.strDate = new Date();

        this.elems = control.elements;
        this.barIndex=1;
        this.numBars=0;
////control elements
        this.dateSel =this.elems['dateSelector'];
        this.barSel  =this.elems['barSelector'];//не обязательнай

        this.strYear =this.elems['startYear'];
        this.strMonth=this.elems['startMonth'];
        this.strDay  =this.elems['startDay'];

        this.endYear =this.elems['stopYear'];
        this.endMonth=this.elems['stopMonth'];
        this.endDay  =this.elems['stopDay'];
////images
        this.imgLine=(imgLine+""!="undefined")?imgLine:(new Image());
        this.imgBar=(String(imgBar)!="undefined")?imgBar:(new Image());
        this.imgLgnd=(String(imgLgnd)!="undefined")?imgLgnd:(new Image());
        this.imgTable=(String(imgTable)!="undefined")?imgTable:(new Image());
        this.imgSrcBase=imgSrcBase;

        this.mainLine="";
        this.startMargin=new Date(0,0,0);

        this.navi=navigator.appName.indexOf("Explorer");
//if(this.navi<0) alert(navigator.appName);
////methods
        this.changeVolume=function(){
            this.barIndex++;
//            if(this.barIndex > this.numBars) this.barIndex=1;
            this.reDraw(this.barIndex);
//            this.barSel.value=this.barIndex;
//            return false;
        };

        this.dateDiff=function(date,years,months,days){
/*
            var dYear=date.getYear() +((date.getYear()<1000)?1900:0);
            var dMnth=date.getMonth();
            var dDay =date.getDate();



            var oDay, oMnth, oYear;

            oDay=dDay+day;

            oMnth=(dMnth+month)%12;
            var yy=parseInt(month/12);

            if(oMnth<0){
                yy--;
                oMnth=oMnth+12;
            }

            oYear=dYear+year+yy;

            return new Date(oYear,oMnth,oDay);
*/
            var year=(date.getYear()<1900?date.getYear()+1900:date.getYear())+years;
            var month=date.getMonth()+months;
            
            var yearShift = parseInt(month/12);
            
            yearShift+=month<0?-1:0;
            year=year+yearShift;
            
            month = ((month)%12+12)%12;
            
            var day=date.getDate()+days;

    //alert(year+' '+month+' '+day);
            
            var result=new Date(year,month,day);
            
            return result;

        };

        this.chDate=function(){
            var ds = this.dateSel[this.dateSel.selectedIndex].value;

            var endDate=new Date();

            var yy=endDate.getYear()+((endDate.getYear()<1000)?1900:0);

            var strDate=this.dateDiff(endDate,0,-(ds>0?ds:0),-(ds==""?7:0));

//            strDate=new Date(yy,endDate.getMonth()-(ds>0?ds:0),endDate.getDate()-(ds==""?7:0));

            if(ds!=-1){
              this.endYear.value  = endDate.getYear() + ((endDate.getYear() < 1000)?( 1900 ):(0));
              this.endMonth.value = endDate.getMonth()+1;
              this.endDay.value   = endDate.getDate();

//              strDate=new Date(this.endYear.value,strDate.getDate(),strDate.getMonth()+1);

              if(parseInt(formatDate(strDate))<parseInt(formatDate(this.startMargin))){
//
                strDate=this.startMargin;
              }

              this.strYear.value  = strDate.getYear() + ((strDate.getYear() < 1000)?( 1900 ):( 0 ));
              this.strMonth.value = strDate.getMonth()+1;
              this.strDay.value   = strDate.getDate();
            }
        
        };
        this.chooseDate=function(){
            this.chDate();
        };
        this.reDraw=function(barIndex){

            var lines  ="";
            var bars   ="";
            var legends="";
            var table  ="";
            var params = new Array();
            var ptarget="";
            var nodraw ="";

            params['lines']= "";
            params['bars'] = "";
/**/
            if( this.barSel+""!="undefined"){
                this.barSel.innerHTML="";
            }
/**/

        //lines
            var joins=0;
            this.numBars=0;
            this.barIndex=barIndex;
            var numSerias=0;



            var ref="&ref="+encodeURI(document.location.href.split("?")[0]);
            
//encodeURI
            for(var i=0; i<this.elems.length; i++){
                
                var seria=this.elems[i];

                var config=seria.name=='config'?'&config='+seria.value:'';

                if(config!='') {ref=ref+config;}
                
                if(seria.value==null) continue;
                
                var sfld=seria.value.split("|");

                if(sfld.length>=2 && !seria.checked && document.images["led."+sfld[0]]+""!="undefined"){
//                alert(sfld[0]);
                    document.images["led."+sfld[0]].src=this.imgSrcBase+"s.gif";
                }

                if(seria.checked){


                    if(document.images["led."+sfld[0]]+""!="undefined"){
//                    alert(sfld[0]);
                        document.images["led."+sfld[0]].src=this.imgSrcBase+"led.phtml?code="+sfld[0]+ref;
                    }

                    if(sfld.length>=2){

//                        if(this.navi<0)
                            sfld[2]=escape(sfld[2]);
                            var bstx=sfld[1];
//                            sfld[1]=encodeURI(sfld[1]);
                        
                        var tfield="price";
                        if(this.arrayIndex(sfld,'bid')>1) tfield="bid";
                        if(this.arrayIndex(sfld,'ask')>1) tfield="ask";
                        if(this.arrayIndex(sfld,'ytm')>1) tfield="ytm";

                        if(this.arrayIndex(sfld,'line')>1){
                            if(seria.name.indexOf('$')!=0 ){
                                numSerias++;
                                if((nojoin[seria.name]+"")=='undefined'){
                                    joins++;
                                }
                            }
                            lines+=(lines=="")?"lines=":"!";
                            lines+=sfld[0]+"|"+tfield;//+sfld[1];
                            ptarget="lines";
                        }
                        
                        legends+=(legends=="")?"lines=":"!";
                        legends+=sfld[0]+"|name|"+sfld[1];

                        if(this.arrayIndex(sfld,'notab')==-1){
                            table+=(table=="")?"lines=":"!";
                            table+=sfld[0]+"|name|"+sfld[1];
                        }

                        if(this.arrayIndex(sfld,'bar')>1){

                            bars+=(bars=="")?"lines=":"!";
                            bars+=sfld[0]+"|volume";//+sfld[1];
                            ptarget="bars";
/**/
//alert(document.createElement);
                            if(document.createElement 
                               && this.barSel+""!="undefined" 
                               && this.barSel.options
                               && this.barSel.options.add){
                                var barOpt=document.createElement("OPTION");
                                this.barSel.options.add(barOpt);
                                barOpt.value=this.numBars+1;
                                barOpt.text=bstx;//sfld[1];
                            } else if(this.barSel+""!="undefined" && this.barSel.style ){
                                this.barSel.style.display='none';
                            }
/**/
                            this.numBars++;
                        } else {
                            nodraw+=(nodraw=="")?"&nodraw=":"!";
                            nodraw+=sfld[0];
                        }
                        //выбрать все параметры для $name
                        if(seria.name.indexOf('$')==0){

                             if(String(this.elems[sfld[0]])!="undefined"){
                                 for(var pid=0;pid < this.elems[sfld[0]].length ;pid++){
                                    params[ptarget]+="&"+sfld[0]+"_"+this.elems[sfld[0]][pid].id+"="+this.elems[sfld[0]][pid].value;
                                 }
                                 if(pid==0)
                                    params[ptarget]+="&"+sfld[0]+"_"+this.elems[sfld[0]].id+"="+this.elems[sfld[0]].value;
                             }
                        }///
                    }
                }
            }
            if(this.barIndex > this.numBars || this.barIndex==0) this.barIndex=1;

/**/
            if(this.barSel+""!="undefined") this.barSel.value=this.barIndex;
        //d1, d2
            var sDate=new Date();
            var eDate=new Date();

            this.strYear.value=(isNaN((this.strYear.value)))?0:this.strYear.value;
            this.strMonth.value=(isNaN((this.strMonth.value)))?0:this.strMonth.value;
            this.strDay.value=(isNaN((this.strDay.value)))?0:this.strDay.value;

            this.endYear.value=(isNaN((this.endYear.value)))?0:this.endYear.value;
            this.endMonth.value=(isNaN((this.endMonth.value)))?0:this.endMonth.value;
            this.endDay.value=(isNaN((this.endDay.value)))?0:this.endDay.value;

            sDate=new Date(parseInt(this.strYear.value),parseInt(this.strMonth.value)-1,parseInt(this.strDay.value));

            if(sDate<startMargin) sDate=startMargin;

            eDate=new Date(parseInt(this.endYear.value),parseInt(this.endMonth.value)-1,parseInt(this.endDay.value));

            var d1=formatDate(sDate);
            var d2=formatDate(eDate);

            if(parseInt(d1)>parseInt(d2)){
                var dd1=d2;
                d2=d1;
                d1=dd1;
            }
            d1="d1="+d1;
            d2="d2="+d2;
        //w, h
            var linesW=this.imgLine.offsetWidth;
            var linesH=this.imgLine.offsetHeight;

            var barsW=this.imgBar.offsetWidth;
            var barsH=this.imgBar.offsetHeight;

            var legendsW=this.imgLgnd.offsetWidth;
            var legendsH=this.imgLgnd.offsetHeight;

            var tableW=this.imgTable.offsetWidth;
            var tableH=this.imgTable.offsetHeight;

            var main="";
            var enc="";//="&enc="+document.charset;
        //src
            if(joins>0 && numSerias>1) joins="&join=1"; else joins="";
            if(this.mainLine!="") main="&main="+this.mainLine;

            lines=lines!=""?this.imgSrcBase+"line.png.phtml?"+d1+"&"+d2+"&w="+linesW+"&h="+linesH+"&"+lines+params["lines"]+joins+main+ref+enc:this.imgLine.src;
            if(lines!=this.imgLine.src){

                this.imgLine.src=lines;

            }
            legends=legends!=""?this.imgSrcBase+"legend.phtml?"+legends+"&w="+legendsW+"&h="+legendsH+ref+enc:this.imgLgnd.src;
            if(legends!=this.imgLgnd.src){

                this.imgLgnd.src=legends;
            }
            table=table!=""?this.imgSrcBase+"table.phtml?"+d1+"&"+d2+"&"+table+"&w="+tableW+"&h="+tableH+main+ref+enc:this.imgTable.src;
            if(table!=this.imgTable.src){

                this.imgTable.src=table;
            }
//            bars = bars!=""?this.imgSrcBase+"line.png.phtml?"+d1+"&"+d2+"&w="+barsW+"&h="+barsH+"&"+bars+params["bars"]+"&bar="+this.barIndex+main+ref+enc:/*this.imgBar.src;*/this.imgSrcBase+"s.gif";
/* */
            if(bars!=""){
                this.imgBar.style.display='';
                
                barsW=this.imgBar.offsetWidth; 
                barsH=this.imgBar.offsetHeight;
                
                bars=this.imgSrcBase+"line.png.phtml?"+d1+"&"+d2+"&w="+barsW+"&h="+barsH+"&"+bars+params["bars"]+nodraw+"&bar="+this.barIndex+main+ref;
            }
            else{
                bars=this.imgSrcBase+"s.gif";
                this.imgBar.style.display='none';            
            }
/* */
            if(bars!=this.imgBar.src){

                this.imgBar.src=bars;
            }

        };

        this.chooseNdraw=function(){
            if(this.dateSel==null) return false;
            this.chooseDate();
            this.reDraw(0);
            return true;
        };
        this.arrayIndex=function(arr, seek){
           
            for(var i=0; i<arr.length;i++){

                if(seek==arr[i]) return i;

            }
            return -1;
        };

////drawing
        this.chooseNdraw();
    }
//first load
    function chartLoad(){
        if(!document.forms['chartCntrl']) return;
        chartControl=new ChartingTool(  document.forms['chartCntrl'], 
                                        document.images['line'], 
                                        document.images['bar'], 
                                        document.images['legend'],
                                        document.images['table'],
                                        "http://chart.rsf.ru/chart/"
                                     );
        chartControl.mainLine=mainLine;
        chartControl.startMargin=startMargin;
        //
    }

    function chartInit(formName){
        if(!document.forms[formName]) return;
        var control=new ChartingTool(  document.forms[formName], 
                                        document.images[formName+'.line'], 
                                        document.images[formName+'.bar'], 
                                        document.images[formName+'.legend'],
                                        document.images[formName+'.table'],
                                        "http://chart.rsf.ru/chart/"
                                     );
        control.mainLine=mainLine;
        control.startMargin=startMargin;
        return control;
    }
//resize 
    function chartResize(){
        chartControl.reDraw(document.forms['chartCntrl'].elements['barSelector'].value);
    }
//config

    var chartControl;
    var nojoin = new Array();
    var mainLine ="";
    var startMargin=new Date(0,0,0);