/*

 ShadowController : Контроллер для создания теней.
 
 Createted By   : D. Akinshin
 Date           : 26.02.2009
 Dependences    : jquery
  
    Параметры:
    
 elementClass       - css класс для эл-тов, у которых нужно установить тень.
 newElementClass    - css класс для эл-тов с тенью(для результата)
 imageBase          - путь к изображениям, shadow_t.png,shadow_tl.png,shadow_t.png,shadow_tr.png,
                        shadow_l.png,shadow_r.png,
                        shadow_bl.png,shadow_b.png,shadow_br.png
 sizeTop            - размер тени верх                     
 sizeLeft           - размер тени лево
 sizeRight          - размер тени право
 sizeBottom         - размер тени низ
 innerPadding       - внутреннии отступы
 endFunction        - функция вызывается при завершении обработки
    Пример использования: 
    
    shMain=new ShadowController({
            elementClass:'item',
            newElementClass:'new_item',
            imageBase:'images/',
            sizeTop:18,
            sizeLeft:18,
            sizeRight:18,
            sizeBottom:18,
            innerPadding:10
        }); 
 
*/
function ShadowController(Args)
{
    var me=this;
    if( Args==undefined) return;
    
    var elementClass=Args.elementClass==undefined?'shadow_item':Args.elementClass;
    var newElementClass=Args.newElementClass==undefined?'shadow_item_elt':Args.newElementClass;
    var imageBase=Args.imageBase==undefined?'images/':Args.imageBase;
    var sizeTop=Args.sizeTop==undefined?8:Args.sizeTop;
    var sizeLeft=Args.sizeLeft==undefined?8:Args.sizeLeft;
    var sizeRight=Args.sizeRight==undefined?8:Args.sizeRight;
    var sizeBottom=Args.sizeBottom==undefined?8:Args.sizeBottom;
    var innerPadding=Args.innerPadding==undefined?0:Args.innerPadding;
    var endFunction=Args.endFunction==undefined?null:Args.endFunction;
    
    ShadowController.prototype.SetData=function(Elt,ImgPath,Width,Height,Repeat)
    {
        //Repeat ="n","x","y"
        if(ImgPath!='') Elt.css('background-image','url('+imageBase+ImgPath+')');
        if(Width!='') Elt.css('width',Width+'px');
        if(Height!='') Elt.css('height',Height+'px');
        if(Repeat=='x') Elt.css('repeat','repeat-x');
        if(Repeat=='y') Elt.css('repeat','repeat-y');
        if(Repeat=='n') Elt.css('repeat','no-repeat');
        
        Elt.css('padding','0');
        
    }
    ShadowController.prototype.CreateShadow=function()
    {
        var elt=$(this);
        var before=$(document.createElement('DIV'));
        elt.after(before);
        
        var RootElement=$(document.createElement('DIV'));
        RootElement.addClass(newElementClass);
        RootElement.get(0).contentElement=this;
        RootElement.get(0).onresize=function()
        {
            var elt_t=$(this);
            var ce=$(this.contentElement);
            var cc=$(this.contentCell);
            
            cc.width(elt_t.width()-sizeLeft-sizeRight);
            cc.height(elt_t.height()-sizeTop- sizeBottom);
            
            ce.width(elt_t.width()-sizeLeft-sizeRight+2*innerPadding);
            ce.height(elt_t.height()-sizeTop- sizeBottom+2*innerPadding);
            
            if(jQuery.browser.msie)
            {
                ce.css('margin-left',(sizeLeft-innerPadding).toString()+ 'px');
                ce.css('margin-top',(sizeTop-innerPadding-elt_t.outerHeight()).toString()+ 'px');
            }
            else
            {
                ce.css('position','relative');
                ce.css('left',(sizeLeft-innerPadding).toString()+ 'px');
                ce.css('top',(sizeTop-innerPadding-elt_t.outerHeight()).toString()+ 'px');
            }
            //alert(this.contentElement.innerHTML);
        }
        
        
        var MainTable=$(document.createElement('TABLE'));
        MainTable.css('border-collapse','collapse');
        MainTable.css('border','0');
        MainTable.css('width','100%');
        RootElement.append(MainTable);
        
        var MainTableBody=$(document.createElement('TBODY'));
        MainTable.append(MainTableBody);
        
        var MainTableR1=$(document.createElement('TR'));
        var MainTableR2=$(document.createElement('TR'));
        var MainTableR3=$(document.createElement('TR'));
        
        MainTableBody.append(MainTableR1);
        MainTableBody.append(MainTableR2);
        MainTableBody.append(MainTableR3);
        
        var MainTableTD11=$(document.createElement('TD'));
        var MainTableTD12=$(document.createElement('TD'));
        var MainTableTD13=$(document.createElement('TD'));
        MainTableR1.append(MainTableTD11);
        MainTableR1.append(MainTableTD12);
        MainTableR1.append(MainTableTD13);
        me.SetData(MainTableTD11,'shadow_tl.png',sizeLeft,sizeTop,'n');
        me.SetData(MainTableTD12,'shadow_t.png','',sizeTop,'x');
        me.SetData(MainTableTD13,'shadow_tr.png',sizeRight,sizeTop,'n');
        
        var MainTableTD21=$(document.createElement('TD'));
        var MainTableTD22=$(document.createElement('TD'));
        var MainTableTD23=$(document.createElement('TD'));
        MainTableR2.append(MainTableTD21);
        MainTableR2.append(MainTableTD22);
        MainTableR2.append(MainTableTD23);
        
        
        
        me.SetData(MainTableTD21,'shadow_l.png',sizeLeft,'','y');
        me.SetData(MainTableTD22,'',elt.outerWidth()-innerPadding,elt.outerHeight()-innerPadding,'');
        me.SetData(MainTableTD23,'shadow_r.png',sizeRight,'','y');
        
        var MainTableTD31=$(document.createElement('TD'));
        var MainTableTD32=$(document.createElement('TD'));
        var MainTableTD33=$(document.createElement('TD'));
        MainTableR3.append(MainTableTD31);
        MainTableR3.append(MainTableTD32);
        MainTableR3.append(MainTableTD33);
        me.SetData(MainTableTD31,'shadow_bl.png',sizeLeft,sizeBottom,'n');
        me.SetData(MainTableTD32,'shadow_b.png','',sizeBottom,'x');
        me.SetData(MainTableTD33,'shadow_br.png',sizeRight,sizeBottom,'n');
        
        
        MainTableTD22.css('width',(elt.outerWidth()-2*innerPadding).toString()+'px');
        MainTableTD22.css('height',(elt.outerHeight()-2*innerPadding).toString()+'px');
        MainTableTD22.css('background-color','white');
        RootElement.css('width',(elt.outerWidth()-2*innerPadding+sizeLeft+sizeRight).toString()+'px');
        RootElement.css('height',(elt.outerHeight()-2*innerPadding+sizeTop+sizeBottom).toString()+'px');
        RootElement.css('overflow','hidden');
        
        elt.remove();
        RootElement.get(0).contentCell=MainTableTD22.get(0);
        RootElement.append(elt);
        
        
        before.before(RootElement);
        before.remove();
        if(jQuery.browser.msie)
        {
            elt.css('margin-left',(sizeLeft-innerPadding).toString()+ 'px');
            elt.css('margin-top',(sizeTop-innerPadding-RootElement.outerHeight()).toString()+ 'px');
        }
        else
        {
            elt.css('position','relative');
            elt.css('z-index','100');
            elt.css('left',(sizeLeft-innerPadding).toString()+ 'px');
            elt.css('top',(sizeTop-innerPadding-RootElement.outerHeight()).toString()+ 'px');
        }
        var tdList=new Array(MainTableTD11,MainTableTD12,MainTableTD13,
                            MainTableTD21,MainTableTD23,
                            MainTableTD31,MainTableTD32,MainTableTD33);
        for(var i=0;i<tdList.length;i++) tdList[i].addClass('png');
        
        //alert(sizeTop+' '+innerPadding+' '+RootElement.height());
    }
    ShadowController.prototype.Init=function()
    {
        $('.'+elementClass).each(me.CreateShadow);
        if(endFunction!=null) endFunction();
    }
    
    me.Init();
}